mirror of
https://github.com/pezkuwichain/revive-differential-tests.git
synced 2026-04-25 15:08:00 +00:00
90fb89adc0e317dfe243037041f106e59b6dfdd0
common crate (#75)
* Add a barebones common crate * Refactor some code into the common crate * Add a `ResolverApi` interface. This commit adds a `ResolverApi` trait to the `format` crate that can be implemented by any type that can act as a resolver. A resolver is able to provide information on the chain state. This chain state could be fresh or it could be cached (which is something that we will do in a future PR). This cleans up our crate graph so that `format` is not depending on the node interactions crate for the `EthereumNode` trait. * Cleanup the blocking executor
revive-differential-tests
The revive differential testing framework allows to define smart contract tests in a declarative manner in order to compile and execute them against different Ethereum-compatible blockchain implmentations. This is useful to:
- Analyze observable differences in contract compilation and execution across different blockchain implementations, including contract storage, account balances, transaction output and emitted events on a per-transaction base.
- Collect and compare benchmark metrics such as code size, gas usage or transaction throughput per seconds (TPS) of different blockchain implementations.
- Ensure reproducible contract builds across multiple compiler implementations or multiple host platforms.
- Implement end-to-end regression tests for Ethereum-compatible smart contract stacks.
Declarative test format
For now, the format used to write tests is the matter-labs era compiler format. This allows us to re-use many tests from their corpora.
The retester utility
The retester helper utilty is used to run the tests. To get an idea of what retester can do, please consults its command line help:
cargo run -p revive-dt-core -- --help
For example, to run the complex Solidity tests, define a corpus structure as follows:
{
"name": "ML Solidity Complex",
"path": "/path/to/era-compiler-tests/solidity/complex"
}
Assuming this to be saved in a ml-solidity-complex.json file, the following command will try to compile and execute the tests found inside the corpus:
RUST_LOG=debug cargo r --release -p revive-dt-core -- --corpus ml-solidity-complex.json
Description
Languages
Rust
96.6%
Python
2.9%
Shell
0.4%