Parser and test runner for testing compatable common Ethereum full node tests against Polygon Zero's EVM.

Overview

EVM Test

Parses and runs compatible common Ethereum tests from ethereum/tests against Polygon Zero's EVM.

Note: This repo is currently very early in development and is not yet ready to evaluate the EVM completeness!

Components

Parser

Since the tests from the Ethereum test repo are meant for a full node, only certain tests are compatible with our EVM. Additionally, for the tests that are compatible, they need to be parsed (or converted) into a format that is usable by our EVM.

The parser has two responsibilities:

  • Query the upstream Ethereum tests repo and check if any tests have been added/updated/removed.
  • If there is a change, re-parse the tests.

Runner

The runner feeds the parsed tests into the EVM. Successes are defined as no errors occurring (the tests themselves do not provide an expected final state). If the EVM returns an error or panics, then the test is considered to have failed.

The runner also outputs a results file (likely as a *.md) which contains statistics on the last test run.

Other

Polygon Hermez is doing something similar here.

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

You might also like...
Formats output of Solana's cargo test-bpf/test-sbf command
Formats output of Solana's cargo test-bpf/test-sbf command

solfmt Formats output of Solana's cargo test-bpf/test-sbf command. Installation cargo install solfmt Usage Run the your test command as usual (cargo t

Simple node and rust script to achieve an easy to use bridge between rust and node.js

Node-Rust Bridge Simple rust and node.js script to achieve a bridge between them. Only 1 bridge can be initialized per rust program. But node.js can h

A node and runtime configuration for polkadot node.
A node and runtime configuration for polkadot node.

MANTA NODE This repo is a fresh FRAME-based Substrate node, forked from substrate-developer-hub/substrate-node-templte 🚀 It links to pallet-manta-dap

Sample lightning node command-line app built on top of Ldk Node (similar to ldk-sample).

ldk-node-sample Sample lightning node command-line app built on top of Ldk Node (similar to ldk-sample ). Installation git clone https://github.com/op

Port path module (and tests) of nodejs to rust using the same algorithms.

rusty_nodejs_path Port path module (and tests) of nodejs to rust using the same algorithms. crates.io Documents Progress posix path.basename(path[, ex

Nym provides strong network-level privacy against sophisticated end-to-end attackers, and anonymous transactions using blinded, re-randomizable, decentralized credentials.

The Nym Privacy Platform The platform is composed of multiple Rust crates. Top-level executable binary crates include: nym-mixnode - shuffles Sphinx p

CLI tool for deterministically building and verifying executable against on-chain programs or buffer accounts

Solana Verify CLI A command line tool to build and verify solana programs. Users can ensure that the hash of the on-chain program matches the hash of

Tool written in Rust to perform Password Spraying attacks against Azure/Office 365 accounts

AzurePasswordSprayer Tool written in Rust to perform Password Spraying attacks against Azure/Office 365 accounts. It is multi threaded and makes no co

Fiddi is a command line tool that does the boring and complex process of checking and processing/watching transactions on EVM compatible Blockchain.

Fiddi is a command line tool that does the boring and complex process of checking and processing/watching transactions on EVM compatible Blockchain.

Comments
  • Runner result rendering

    Runner result rendering

    Implemented rendering test results for the runner.

    There are two report types that are specifiable in the program args:

    • Generate a summary markdown report for each test group with a row for the number of tests that passed for each sub-group.
    • Run any tests that match a given (optional) string filter and output all tests that match. groups and sub-groups are flattened and all the individual tests that match are kept. Reports if the test passed and displays any failure information (if any). The output is rendered as markdown to stdout.

    I think this is one of those cases where writing unit tests is not really worth it (just because we would have to write tests that match against generated markdown, which is probably going to be fairly unstable). So we'll work out the bugs once we are reading in data from the parser.

    Also updated IncorrectAccountFinalState to show which trie hashes did not match in the case that at least one hash differs.

    opened by BGluth 0
  • Rewrite deserialization logic to use declarative serde struct style

    Rewrite deserialization logic to use declarative serde struct style

    This PR removes the imperative deserialization logic in favor of the declarative and strongly typed struct style enabled by serde.

    You'll note the

    #![allow(dead_code)]
    

    Attribute in the deserialization module. We can remove the unused fields once the trie generation is implemented; disabling the warnings for now.

    opened by cpubot 0
  • Partial Runner Impl

    Partial Runner Impl

    Implements reading and running tests against Plonky2. The last bit of generating the report still needs to be done, but I suspect that it will increase the PR size a bit, so I make that a separate PR.

    opened by BGluth 0
  • Remove incremental parsing logic + speed up remote cloning

    Remove incremental parsing logic + speed up remote cloning

    This PR removes all the logic associated with incremental parsing via commit date. Until / unless parsing proves to be a really slow process, it is favorable to keep the logic simple. In other words, we re-parse everything on invocation of the parsing binary until the performance becomes an issue.

    Additionally, this PR modifies the cloning logic to leverage sparse-checkout functionality such that it only fetches the folders and test cases that we care about. This dramatically reduces the clone time, to roughly 7 seconds from 45 seconds on a gigabit connection.

    opened by cpubot 0
Owner
Mir Protocol
Mir is a blockchain in which each state transition is accompanied by a cryptographic proof.
Mir Protocol
A library to help you sew up your Ethereum project with Rust and just like develop in a common backend

SewUp Secondstate EWasm Utility Program, a library helps you sew up your Ethereum project with Rust and just like development in a common backend. The

Second State 48 Dec 18, 2022
An EVM low-level language that gives full control over the control flow of the smart contract.

Meplang - An EVM low-level language Meplang is a low-level programming language that produces EVM bytecode. It is designed for developers who need ful

MEP 19 Jan 31, 2023
Superfast Solana Tests for Node.js

Bankrun Bankrun is a superfast, powerful and lightweight framework for testing Solana programs in NodeJS. While people often use solana-test-validator

Kevin Heavey 34 Aug 16, 2023
Tiny CLI for submitting large calldata transactions to EVM networks to stress test the networking layer. Main motivation: EIP4844blobs.

stress4844 Tiny CLI for submitting large calldata transactions to EVM networks to stress test the networking layer. Main motivation: EIP4844 blobs. ca

Paradigm 50 Jan 4, 2023
Tiny CLI for submitting large calldata transactions to EVM networks to stress test the networking layer

Tiny CLI for submitting large calldata transactions to EVM networks to stress test the networking layer. Main motivation: EIP4844blobs.

Paradigm 50 Jan 4, 2023
Ethereum (and Ethereum like) indexer using P2P message to fetch blocks and transactions

Ethereum P2P indexer This project is an indexer for Ethereum and Ethereum forks. It takes advantage of the ETH (Ethereum Wire Protocol) to fetch block

null 5 Nov 10, 2023
Substreams development kit for Ethereum chains, contains Firehose Block model and helpers as well as utilities for Ethereum ABI encoding/decoding.

Substreams Ethereum Substreams development kit for Ethereum chains, contains Rust Firehose Block model and helpers as well as utilities for Ethereum A

StreamingFast 15 Oct 25, 2022
An Ethereum 2.0 Emulator for Local Testing of Eth2 Applications

Mousse is an Ethereum 2.0 emulator for local testing of Eth2 applications (mainly Rollups). HTTP Server The REST API definition can be found in the ht

Mousse 46 Sep 10, 2022
Open source Rust implementation of the Witnet decentralized oracle protocol, including full node and wallet backend 👁️🦀

witnet-rust is an open source implementation of the Witnet Decentralized Oracle Network protocol written in Rust. Components witnet-rust implements ma

The Witnet Project 155 Nov 21, 2022
Subsocial full node with Substrate/Polkadot pallets for decentralized communities: blogs, posts, comments, likes, reputation.

Subsocial Node by DappForce Subsocial is a set of Substrate pallets with web UI that allows anyone to launch their own decentralized censorship-resist

DappForce 74 Nov 24, 2022