9227e78c79
* use stack of contexts to implement snapshot revert Closes #338 add exception revert test case verify partial revert mutate state after the reverted subcall polish update comments name the module after the type name remove the unnecessary Snapshot in outer layer and add snapshot unit test assert context stack is clean after tx processing cleanups fix context revert fix comments update comments it's ok to commit in failed case too Update x/evm/keeper/context_stack.go Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com> Update x/evm/keeper/context_stack.go Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com> Update x/evm/keeper/context_stack.go Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com> update comment and error message add comment to cacheContext k -> cs Update x/evm/keeper/context_stack.go Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com> evm can handle state revert renames and unit tests * use table driven tests * keep all the cosmos events * changelog * check for if commit function is nil * fix changelog * Update x/evm/keeper/context_stack.go Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com> |
||
---|---|---|
.. | ||
suites | ||
.gitattributes | ||
.gitignore | ||
init-test-node.sh | ||
package.json | ||
README.md | ||
test-helper.js | ||
yarn.lock |
Solidity tests
Increasingly difficult tests are provided:
- Basic: simple Counter example, for basic calls, transactions, and events
- Initialize: initialization contract and tests from aragonOS
- Initialize (Buidler): initialization contract and tests from aragonOS, using buidler
- Proxy: depositable delegate proxy contract and tests from aragonOS
- Staking: Staking contracts and full test suite from aragon/staking
Quick start
Prerequisite: in the repo's root, run make install
to install the ethermintd
and ethermintd
binaries. When done, come back to this directory.
Prerequisite: install the individual solidity packages. They're set up as individual reops in a yarn monorepo workspace. Install them all via yarn install
.
To run the tests, you can use the test-helper.js
utility to test all suites under ganache
or ethermint
network. The test-helper.js
will help you spawn an ethermintd
process before running the tests.
You can simply run yarn test --network ethermint
to run all tests with ethermint network, or you can run yarn test --network ganache
to use ganache shipped with truffle. In most cases, there two networks should produce identical test results.
If you only want to run a few test cases, append the name of tests following by the command line. For example, use yarn test --network ethermint basic
to run the basic
test under ethermint
network.
If you need to take more control, you can also run ethermintd
using:
./init-test-node.sh
You will now have three ethereum accounts unlocked in the test node:
0x3b7252d007059ffc82d16d022da3cbf9992d2f70
(Validator)0xddd64b4712f7c8f1ace3c145c950339eddaf221d
(User 1)0x0f54f47bf9b8e317b214ccd6a7c3e38b893cd7f0
(user 2)
Keep the terminal window open, go into any of the tests and run yarn test-ethermint
. You should see ethermintd
accepting transactions and producing blocks. You should be able to query for any transaction via:
ethermintd query tx <cosmos-sdk tx>
curl localhost:8545 -H "Content-Type:application/json" -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionByHash","params":["<ethereum tx>"],"id":1}'
From here, in your other available terminal, And obviously more, via the Ethereum JSON-RPC API).
When in doubt, you can also run the tests against a Ganache instance via yarn test-ganache
, to make sure they are behaving correctly.
Test node
The init-test-node.sh
script sets up ethermint with the following accounts:
eth18de995q8qk0leqk3d5pzmg7tlxvj6tmsku084d
(Validator)0x3b7252d007059ffc82d16d022da3cbf9992d2f70
eth1mhtyk3cj7ly0rt8rc9zuj5pnnmw67gsapygwyq
(User 1)0xddd64b4712f7c8f1ace3c145c950339eddaf221d
eth1pa20g7lehr330vs5ent20slr3wyne4lsy8qae3
(user 2)0x0f54f47bf9b8e317b214ccd6a7c3e38b893cd7f0
Each with roughly 100 ETH available (1e18 photon).
Running ethermintd list keys
should output:
[
{
"name": "localkey",
"type": "local",
"address": "eth18de995q8qk0leqk3d5pzmg7tlxvj6tmsku084d",
"pubkey": "ethpub1pfqnmk6pq3ycjs34vv4n6rkty89f6m02qcsal3ecdzn7a3uunx0e5ly0846pzg903hxf2zp5gq4grh8jcatcemfrscdfl797zhg5crkcsx43gujzppge3n"
},
{
"name": "user1",
"type": "local",
"address": "eth1mhtyk3cj7ly0rt8rc9zuj5pnnmw67gsapygwyq",
"pubkey": "ethpub1pfqnmk6pq3wrkx6lh7uug8ss0thggact3n49m5gkmpca4vylldpur5qrept57e0rrxfmeq5mp5xt3cyf4kys53qcv66qxttv970das69hlpkf8cnyd2a2x"
},
{
"name": "user2",
"type": "local",
"address": "eth1pa20g7lehr330vs5ent20slr3wyne4lsy8qae3",
"pubkey": "ethpub1pfqnmk6pq3art9y45zw5ntyktt2qrt0skmsl0ux9qwk8458ed3d8sgnrs99zlgvj3rt2vggvkh0x56hffugwsyddwqla48npx46pglgs6xhcqpall58tgn"
}
]
And running:
curl localhost:8545 -H "Content-Type:application/json" -X POST --data '{"jsonrpc":"2.0","method":"eth_accounts","params":[],"id":1}'
Should output:
{
"jsonrpc": "2.0",
"id": 1,
"result": [
"0x3b7252d007059ffc82d16d022da3cbf9992d2f70",
"0xddd64b4712f7c8f1ace3c145c950339eddaf221d",
"0x0f54f47bf9b8e317b214ccd6a7c3e38b893cd7f0"
]
}