-
Notifications
You must be signed in to change notification settings - Fork 358
Home
Found in vmtests.json, the VM tests aim is to test the basic workings of the VM in isolation. This is specifically not meant to cover transaction, creation or call processing, or management of the state trie. Indeed at least one implementation tests the VM without calling into any Trie code at all.
It is based around the notion of executing a single piece of code as part of a transaction, described by the exec portion of the test. The overarching environment in which it is executed is described by the env portion of the test and includes attributes of the current and previous blocks. A set of pre-existing accounts are detailed in the pre portion and form the world state prior to execution. Similarly, a set of accounts are detailed in the post portion to specify the end world state.
The total gas used (gas) as well as any output returned from the code (output) is also detailed.
Since these tests are meant only as a basic test of VM operation, the CALL and CREATE instructions are not actually executed. To provide the possibility of testing to guarantee they were actually run at all, a separate potion callcreates details each CALL or CREATE operation in the order they would have been executed.
It is generally expected that the test implementer will read env, exec and pre then check their results against gas, out, post and callcreates.
{
"test name 1": {
"env": { ... },
"pre": { ... },
"exec": { ... },
"gas": { ... },
"out": { ... },
"post": { ... },
"callcreates": { ... }
},
"test name 2": {
"env": { ... },
"pre": { ... },
"exec": { ... },
"gas": { ... },
"out": { ... },
"post": { ... },
"callcreates": { ... }
},
...
}
The env section:
-
currentCoinbaseThe current block's coinbase address, to be returned by theCOINBASEinstruction. -
currentDifficultyThe current block's difficulty, to be returned by theDIFFICULTYinstruction. -
currentGasLimitThe current block's gas limit. -
currentNumberThe current block's number. -
currentTimestampThe current block's timestamp. -
previousHashThe previous block's hash.
The exec section:
addressorigincallervaluedatagasPricegas