Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
G
Geth-Modification
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
张蕾
Geth-Modification
Commits
41fe9d64
Unverified
Commit
41fe9d64
authored
Jan 03, 2023
by
Martin Holst Swende
Committed by
GitHub
Jan 03, 2023
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
cmd/evm: update documentation (#26385)
parent
a251bca6
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
295 additions
and
9 deletions
+295
-9
README.md
cmd/evm/README.md
+158
-9
transition-test.sh
cmd/evm/transition-test.sh
+137
-0
No files found.
cmd/evm/README.md
View file @
41fe9d64
...
...
@@ -439,11 +439,11 @@ to use the evm to go from `json` input to `rlp` input.
The following command takes **json** the transactions in `
./testdata/13/txs.json
` and signs them. After execution, they are output to `
signed_txs.rlp
`.:
```
./evm t8n --state.fork=London --input.alloc=./testdata/13/alloc.json --input.txs=./testdata/13/txs.json --input.env=./testdata/13/env.json --output.result=alloc_jsontx.json --output.body=signed_txs.rlp
INFO [12-
07|04:30:12.380
] Trie dumping started root=e4b924..6aef61
INFO [12-
07|04:30:12.380] Trie dumping complete accounts=3 elapsed="85.765
µs"
INFO [12-
07|04:30:12.380
] Wrote file file=alloc.json
INFO [12-
07|04:30:12.380
] Wrote file file=alloc_jsontx.json
INFO [12-
07|04:30:12.380
] Wrote file file=signed_txs.rlp
INFO [12-
27|09:25:11.102
] Trie dumping started root=e4b924..6aef61
INFO [12-
27|09:25:11.102] Trie dumping complete accounts=3 elapsed="275.66
µs"
INFO [12-
27|09:25:11.102
] Wrote file file=alloc.json
INFO [12-
27|09:25:11.103
] Wrote file file=alloc_jsontx.json
INFO [12-
27|09:25:11.103
] Wrote file file=signed_txs.rlp
```
The `
output.body
` is the rlp-list of transactions, encoded in hex and placed in a string a'la `
json
` encoding rules:
...
...
@@ -463,10 +463,10 @@ rlpdump -hex $(cat signed_txs.rlp | jq -r )
Now, we can now use those (or any other already signed transactions), as input, like so:
```
./evm t8n --state.fork=London --input.alloc=./testdata/13/alloc.json --input.txs=./signed_txs.rlp --input.env=./testdata/13/env.json --output.result=alloc_rlptx.json
INFO [12-
07|04:30:12.425
] Trie dumping started root=e4b924..6aef61
INFO [12-
07|04:30:12.425] Trie dumping complete accounts=3 elapsed="70.684
µs"
INFO [12-
07|04:30:12.425
] Wrote file file=alloc.json
INFO [12-
07|04:30:12.425
] Wrote file file=alloc_rlptx.json
INFO [12-
27|09:25:11.187
] Trie dumping started root=e4b924..6aef61
INFO [12-
27|09:25:11.187] Trie dumping complete accounts=3 elapsed="123.676
µs"
INFO [12-
27|09:25:11.187
] Wrote file file=alloc.json
INFO [12-
27|09:25:11.187
] Wrote file file=alloc_rlptx.json
```
You might have noticed that the results from these two invocations were stored in two separate files.
And we can now finally check that they match.
...
...
@@ -475,3 +475,152 @@ cat alloc_jsontx.json | jq .stateRoot && cat alloc_rlptx.json | jq .stateRoot
"0xe4b924a6adb5959fccf769d5b7bb2f6359e26d1e76a2443c5a91a36d826aef61"
"0xe4b924a6adb5959fccf769d5b7bb2f6359e26d1e76a2443c5a91a36d826aef61"
```
## Transaction tool
The transaction tool is used to perform static validity checks on transactions such as:
* intrinsic gas calculation
* max values on integers
* fee semantics, such as `
maxFeePerGas < maxPriorityFeePerGas
`
* newer tx types on old forks
### Examples
```
./evm t9n --state.fork Homestead --input.txs testdata/15/signed_txs.rlp
[
{
"error": "transaction type not supported",
"hash": "0xa98a24882ea90916c6a86da650fbc6b14238e46f0af04a131ce92be897507476"
},
{
"error": "transaction type not supported",
"hash": "0x36bad80acce7040c45fd32764b5c2b2d2e6f778669fb41791f73f546d56e739a"
}
]
```
```
./evm t9n --state.fork London --input.txs testdata/15/signed_txs.rlp
[
{
"address": "0xd02d72e067e77158444ef2020ff2d325f929b363",
"hash": "0xa98a24882ea90916c6a86da650fbc6b14238e46f0af04a131ce92be897507476",
"intrinsicGas": "0x5208"
},
{
"address": "0xd02d72e067e77158444ef2020ff2d325f929b363",
"hash": "0x36bad80acce7040c45fd32764b5c2b2d2e6f778669fb41791f73f546d56e739a",
"intrinsicGas": "0x5208"
}
]
```
## Block builder tool (b11r)
The `
evm b11r
` tool is used to assemble and seal full block rlps.
### Specification
#### Command line params
Command line params that need to be supported are:
```
--input.header value `stdin` or file name of where to find the block header to use. (default: "header.json")
--input.ommers value `stdin` or file name of where to find the list of ommer header RLPs to use.
--input.txs value `stdin` or file name of where to find the transactions list in RLP form. (default: "txs.rlp")
--output.basedir value Specifies where output files are placed. Will be created if it does not exist.
--output.block value Determines where to put the alloc of the post-state. (default: "block.json")
<file> - into the file <file>
`stdout` - into the stdout output
`stderr` - into the stderr output
--seal.clique value Seal block with Clique. `stdin` or file name of where to find the Clique sealing data.
--seal.ethash Seal block with ethash. (default: false)
--seal.ethash.dir value Path to ethash DAG. If none exists, a new DAG will be generated.
--seal.ethash.mode value Defines the type and amount of PoW verification an ethash engine makes. (default: "normal")
--verbosity value Sets the verbosity level. (default: 3)
```
#### Objects
##### `
header
`
The `
header
` object is a consensus header.
```go=
type Header struct {
ParentHash common.Hash `json:"parentHash"`
OmmerHash *common.Hash `json:"sha3Uncles"`
Coinbase *common.Address `json:"miner"`
Root common.Hash `json:"stateRoot" gencodec:"required"`
TxHash *common.Hash `json:"transactionsRoot"`
ReceiptHash *common.Hash `json:"receiptsRoot"`
Bloom types.Bloom `json:"logsBloom"`
Difficulty *big.Int `json:"difficulty"`
Number *big.Int `json:"number" gencodec:"required"`
GasLimit uint64 `json:"gasLimit" gencodec:"required"`
GasUsed uint64 `json:"gasUsed"`
Time uint64 `json:"timestamp" gencodec:"required"`
Extra []byte `json:"extraData"`
MixDigest common.Hash `json:"mixHash"`
Nonce *types.BlockNonce `json:"nonce"`
BaseFee *big.Int `json:"baseFeePerGas"`
}
```
#### `
ommers
`
The `
ommers
` object is a list of RLP-encoded ommer blocks in hex
representation.
```go=
type Ommers []string
```
#### `
txs
`
The `
txs
` object is a list of RLP-encoded transactions in hex representation.
```go=
type Txs []string
```
#### `
clique
`
The `
clique
` object provides the neccesary information to complete a clique
seal of the block.
```go=
var CliqueInfo struct {
Key *common.Hash `json:"secretKey"`
Voted *common.Address `json:"voted"`
Authorize *bool `json:"authorize"`
Vanity common.Hash `json:"vanity"`
}
```
#### `
output
`
The `
output
` object contains two values, the block RLP and the block hash.
```go=
type BlockInfo struct {
Rlp []byte `json:"rlp"`
Hash common.Hash `json:"hash"`
}
```
## A Note on Encoding
The encoding of values for `
evm
` utility attempts to be relatively flexible. It
generally supports hex-encoded or decimal-encoded numeric values, and
hex-encoded byte values (like `
common.Address
`, `
common.Hash
`, etc). When in
doubt, the [`
execution-apis
`](https://github.com/ethereum/execution-apis) way
of encoding should always be accepted.
## Testing
There are many test cases in the [`
cmd/evm/testdata
`](./testdata) directory.
These fixtures are used to power the `
t8n
` tests in
[`
t8n_test.go
`](./t8n_test.go). The best way to verify correctness of new `
evm
`
implementations is to execute these and verify the output and error codes match
the expected values.
cmd/evm/transition-test.sh
View file @
41fe9d64
...
...
@@ -379,3 +379,140 @@ echo "$ticks"
echo
"cat alloc_jsontx.json | jq .stateRoot && cat alloc_rlptx.json | jq .stateRoot"
cat
alloc_jsontx.json | jq .stateRoot
&&
cat
alloc_rlptx.json | jq .stateRoot
echo
"
$ticks
"
cat
<<
"EOF"
## Transaction tool
The transaction tool is used to perform static validity checks on transactions such as:
*
intrinsic gas calculation
*
max values on integers
*
fee semantics, such as
`
maxFeePerGas < maxPriorityFeePerGas
`
*
newer tx types on old forks
### Examples
EOF
cmd
=
"./evm t9n --state.fork Homestead --input.txs testdata/15/signed_txs.rlp"
tick
;
echo
"
$cmd
"
;
$cmd
2>/dev/null
tick
cmd
=
"./evm t9n --state.fork London --input.txs testdata/15/signed_txs.rlp"
tick
;
echo
"
$cmd
"
;
$cmd
2>/dev/null
tick
cat
<<
"EOF"
## Block builder tool (b11r)
The
`
evm b11r
`
tool is used to assemble and seal full block rlps.
### Specification
#### Command line params
Command line params that need to be supported are:
```
--input
.header value
`
stdin
`
or file name of where to find the block header to use.
(
default:
"header.json"
)
--input
.ommers value
`
stdin
`
or file name of where to find the list of ommer header RLPs to use.
--input
.txs value
`
stdin
`
or file name of where to find the transactions list
in
RLP form.
(
default:
"txs.rlp"
)
--output
.basedir value Specifies where output files are placed. Will be created
if
it does not exist.
--output
.block value Determines where to put the alloc of the post-state.
(
default:
"block.json"
)
<file> - into the file <file>
`
stdout
`
- into the stdout output
`
stderr
`
- into the stderr output
--seal
.clique value Seal block with Clique.
`
stdin
`
or file name of where to find the Clique sealing data.
--seal
.ethash Seal block with ethash.
(
default:
false
)
--seal
.ethash.dir value Path to ethash DAG. If none exists, a new DAG will be generated.
--seal
.ethash.mode value Defines the
type
and amount of PoW verification an ethash engine makes.
(
default:
"normal"
)
--verbosity
value Sets the verbosity level.
(
default: 3
)
```
#### Objects
##### `header`
The
`
header
`
object is a consensus header.
```
go
=
type
Header struct
{
ParentHash common.Hash
`
json:
"parentHash"
`
OmmerHash
*
common.Hash
`
json:
"sha3Uncles"
`
Coinbase
*
common.Address
`
json:
"miner"
`
Root common.Hash
`
json:
"stateRoot"
gencodec:
"required"
`
TxHash
*
common.Hash
`
json:
"transactionsRoot"
`
ReceiptHash
*
common.Hash
`
json:
"receiptsRoot"
`
Bloom types.Bloom
`
json:
"logsBloom"
`
Difficulty
*
big.Int
`
json:
"difficulty"
`
Number
*
big.Int
`
json:
"number"
gencodec:
"required"
`
GasLimit uint64
`
json:
"gasLimit"
gencodec:
"required"
`
GasUsed uint64
`
json:
"gasUsed"
`
Time uint64
`
json:
"timestamp"
gencodec:
"required"
`
Extra
[]
byte
`
json:
"extraData"
`
MixDigest common.Hash
`
json:
"mixHash"
`
Nonce
*
types.BlockNonce
`
json:
"nonce"
`
BaseFee
*
big.Int
`
json:
"baseFeePerGas"
`
}
```
#### `ommers`
The
`
ommers
`
object is a list of RLP-encoded ommer blocks
in
hex
representation.
```
go
=
type
Ommers
[]
string
```
#### `txs`
The
`
txs
`
object is a list of RLP-encoded transactions
in
hex representation.
```
go
=
type
Txs
[]
string
```
#### `clique`
The
`
clique
`
object provides the neccesary information to
complete
a clique
seal of the block.
```
go
=
var CliqueInfo struct
{
Key
*
common.Hash
`
json:
"secretKey"
`
Voted
*
common.Address
`
json:
"voted"
`
Authorize
*
bool
`
json:
"authorize"
`
Vanity common.Hash
`
json:
"vanity"
`
}
```
#### `output`
The
`
output
`
object contains two values, the block RLP and the block hash.
```
go
=
type
BlockInfo struct
{
Rlp
[]
byte
`
json:
"rlp"
`
Hash common.Hash
`
json:
"hash"
`
}
```
## A Note on Encoding
The encoding of values
for
`
evm
`
utility attempts to be relatively flexible. It
generally supports hex-encoded or decimal-encoded numeric values, and
hex-encoded byte values
(
like
`
common.Address
`
,
`
common.Hash
`
, etc
)
.
When
in
doubt, the
[
`
execution-apis
`
](
https://github.com/ethereum/execution-apis
)
way
of encoding should always be accepted.
## Testing
There are many
test
cases
in
the
[
`
cmd/evm/testdata
`
](
./testdata
)
directory.
These fixtures are used to power the
`
t8n
`
tests
in
[
`
t8n_test.go
`
](
./t8n_test.go
)
.
The best way to verify correctness of new
`
evm
`
implementations is to execute these and verify the output and error codes match
the expected values.
EOF
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment