Revolutionary Machine (revm) is a fast Ethereum virtual machine written in rust.

Overview

revm - Revolutionary Machine

Is Rust Ethereum Virtual Machine with great name that is focused on speed and simplicity. It gets ispiration from SputnikVM (got opcodes/machine from here), OpenEthereum and Geth with a help from wolflo/evm-opcodes. This is probably one of the fastest implementation of EVM, from const EVM Spec to optimistic changelogs for subroutines to merging eip2929 in EVM state so that it can be accesses only once are some of the things that are improving the speed of execution.

Here is list of things that i would like to use as guide in this project:

  • EVM compatibility and stability - this goes without saying but it is nice to put it here. In blockchain industry, stability is most desired attribute of any system.
  • Speed - is one of the most important things and most decision are made to complement this.
  • Simplicity - simplification of internals so that it can be easily understood and extended, and interface that can be easily used or integrated into other project.
  • interfacing - [no_std] so that it can be used as wasm lib and integrate with JavaScript and cpp binding if needed.

For more INFO check

Please check bins/revm-test for simple use case.

All ethereum state tests can be found bins/revm-ethereum-tests and can be run with cargo run --release -- all

Read more on REVM at crates/revm/README.md

Comments
  • Pre EIP-2 support

    Pre EIP-2 support

    I'm working on adding support to revm for pre-BYZANTIUM spec's and encountered a issue with the library design that I am unsure the right way to solve.

    For context, pre EIP-2 / HOMESTEAD (https://eips.ethereum.org/EIPS/eip-2) a transaction that creates a contract and runs out of gas succeeds but creates a zero length / empty contract. Example transaction: https://etherscan.io/tx/0x6e5c7be761ce29049f8d97d5ecde95758c546e9b8121fe421c99730d32e77a47

    I initially tried the following (its a little ugly workaround):

    diff --git a/crates/revm/src/evm_impl.rs b/crates/revm/src/evm_impl.rs
    index bdea4ae..401ed01 100644
    --- a/crates/revm/src/evm_impl.rs
    +++ b/crates/revm/src/evm_impl.rs
    @@ -415,8 +415,22 @@ impl<'a, GSPEC: Spec, DB: Database, const INSPECT: bool> EVMImpl<'a, GSPEC
    , DB,
                         let gas_for_code = code.len() as u64 * crate::gas::CODEDEPOSIT;
                         // record code deposit gas cost and check if we are out of gas.
                         if !interp.gas.record_cost(gas_for_code) {
    -                        self.data.subroutine.checkpoint_revert(checkpoint);
    -                        return (Return::OutOfGas, ret, interp.gas, b);
    +                        // EIP-2
    +                        if SPEC::enabled(HOMESTEAD) {
    +                            self.data.subroutine.checkpoint_revert(checkpoint);
    +                            return (Return::OutOfGas, ret, interp.gas, b);
    +                        } else {
    +                            self.data.subroutine.checkpoint_commit();
    +                            let empty_contract = Bytes::new();
    +                            let code_hash =
    +                                H256::from_slice(Keccak256::digest(&empty_contract).as_slice());
    +                            self.data.subroutine.set_code(
    +                                created_address,
    +                                empty_contract,
    +                                code_hash,
    +                            );
    +                            return (Return::Continue, ret, interp.gas, b);
    +                        }
                         }
                     }
                     // if we have enought gas
    

    But during the db.commit() phase it still triggers the Account::is_empty() to be true and the account to be destroyed. Unfortunately both the Account and DatabaseCommit traits don't currently have access to the SPEC. Is there a better place I could try to prevent the contract from being deleted if emulating pre-HOMESTEAD?

    Additional Question:

    I am interested in full Ethereum chain historic emulation so I am happy to create a PR for pre-BYZANTIUM spec changes I am making, but I wanted to check: is this something you're interested in supporting?

    Thanks!

    opened by mothran 23
  • feat: Introduce ByteCode format

    feat: Introduce ByteCode format

    With a restriction that contacts can not start with 0xEF and with the possibility that in future we will have different ByteCode for EVM Object Format, it makes sense to introduce support for it into the revm. https://eips.ethereum.org/EIPS/eip-3541

    The biggest benefit atm would be introducing ByteCode type that will contain jumptable and gas blocks and with that we would skip the needed analysis of the contract. This is a fairly big speed-u for some use cases noticed in the foundry as fuzzing tests call a lot of contracts with not much execution and analysis, in that case, is taking a lot of time.

    The proposal is to introduce enum ByteCode that would somehow return: code, code_size and jumptable.

    Basically replace this input with ByteCode: https://github.com/bluealloy/revm/blob/08528247759bcd113c0c5385ee081e20e11cb80b/crates/revm/src/interpreter/contract.rs#L60 and propagate change wherever needed. ByteCode should set these fields in the contract:

    • https://github.com/bluealloy/revm/blob/08528247759bcd113c0c5385ee081e20e11cb80b/crates/revm/src/interpreter/contract.rs#L11-L13
    • https://github.com/bluealloy/revm/blob/08528247759bcd113c0c5385ee081e20e11cb80b/crates/revm/src/interpreter/contract.rs#L21

    and do the same for database struct:

    • Return ByteCode: https://github.com/bluealloy/revm/blob/08528247759bcd113c0c5385ee081e20e11cb80b/crates/revm/src/db/traits.rs#L14
    • Replace bytes with BytesCode: https://github.com/bluealloy/revm/blob/08528247759bcd113c0c5385ee081e20e11cb80b/crates/revm/src/models.rs#L24

    To fully circle the story with EVM Object Format, CREATE and CREATE2 will need to return 0xEF type format in bytes that would get transformed to ByteCode for evm usage here:
    https://github.com/bluealloy/revm/blob/08528247759bcd113c0c5385ee081e20e11cb80b/crates/revm/src/evm_impl.rs#L395-L399 But this is a consensus rule and out of scope for this feat, we should just continue using legacy ByteCode here. If needed we could in Inspector create_end transform that into ByteCode.

    opened by rakita 18
  • Tx unexpectedly reverts with

    Tx unexpectedly reverts with "out of gas" reason

    Hi,

    When processing the below tx with the revm I get an out of gas revert? https://snowtrace.io/tx/0x5d9999e9e8ccdea2d87736cc39c38f51863f6f23169ac32ef2d9a1842aa94c23

    Gas limit on the tx is 348,243 and gas used is 348,243. Seems strange to me that it fails with revm but doesn't fail on avalanche? Avalanche just use a copy of geth for this stuff afaik.

    opened by Owen66 12
  • Benchmark against other EVMs

    Benchmark against other EVMs

    It would be cool to benchmark against other EVM implementations, especially evmone which AFAIK is currently the fastest EVM interpreter.

    This would probably be a good benchmark for arithmetic: https://github.com/ethereum/evmone/pull/320

    opened by lightclient 12
  • revm: Return `bytes` in Create calls

    revm: Return `bytes` in Create calls

    In create_inner, let b = Bytes::new(); was always returned, without ever being touched. The create calls should return the deployed contract bytecode.

    This might relate to https://github.com/bluealloy/revm/issues/269 ?

    opened by ngotchac 11
  • don't delete account and storage entries on commit

    don't delete account and storage entries on commit

    As discovered here https://github.com/foundry-rs/foundry/issues/1894

    deleting storage or account entries does not play nice with fork mode which basically does:

    if !db.contains(acc) {
        // fetch from remote 
    }
    

    So deleting accounts/slots (when empty) would result in the fork's account/slot being served and not 0 or the empty account.

    Solution

    • on CacheDb::commit don't delete AccountInfo or storage entries in the CacheDb's maps

    • also bumps to v1.6.0

    opened by mattsse 10
  • k256 later

    k256 later

    Start running tests on: "bins/revme/tests/GeneralStateTests/" ███████████████████████████████████████████████████████████████████████████████████████████████████████████████████░░░░░░░░░ 2418/2596 thread '' panicked at 'called Result::unwrap() on an Err value: signature::Error {}', /home/rakita/.cargo/registry/src/github.com-1ecc6299db9ec823/k256-0.10.2/src/ecdsa/verify.rs:158:81 Error: Statetest(SystemError)

    something crashed k256 when enabled berlin/instanbul tests

    opened by rakita 10
  • feat(interpreter): Unify instruction fn signature

    feat(interpreter): Unify instruction fn signature

    All opcode instructions are now functions with same signature: pub fn jumpi(interpreter: &mut Interpreter, _host: &mut dyn Host)

    This is revm internal change and it does not affect external API.

    This allows the compiler to optimize calls in the interpreter hot loop and it gives around ~10% faster snailtracer execution on i7. I am interested to see if the same boost can be found on macs with M processors.

    This is one of steps needed to define multiple dispatch strategies related to interpreter loop. As instructions now have same signature they can be put in an array, this can have potentially new ways to use revm as it is easier to just switch function pointer to something else (custom function to sload/sstore?)

    Spec was simplified and is_static is moved as variable to interpreter (Previously it was inside Spec)

    There was one regression with ruint in casting U256 to saturated usize here. It was faster to just check limbs.

    microbench added to revm-tests

    opened by rakita 9
  • fix: remove stipend from sstore gas calculations

    fix: remove stipend from sstore gas calculations

    Not sure what the reasoning was for including the stipend for SSTORE originally. Couldn't find any other EVM implementations doing this check.

    Encountered the issue when testing a number of scenarios using cast.

    Specifically:

    cast run 0x10c305ada9cb1066b396d6558d1d195d21abfaef6c76e5ae1568354b58daab64
    

    The transaction would fail due the storage slot of the reentrancy guard being reset.

    opened by bernard-wagner 7
  • feat: Structured Logging

    feat: Structured Logging

    Right now, Revm has no logging. It might make sense to integrate https://docs.rs/tracing in most places, so we have better visibility in its internals?

    opened by gakonst 6
  • add `revm-primitives` crate

    add `revm-primitives` crate

    Moves some things around so we can have a revm-primitives crate.

    Adds proptest::Arbitrary and arbitrary::Arbitrary on #cfg[test] or feature =arbitrary to B160, B256 and I256.

    opened by joshieDo 5
  • chore(deps): bump tokio from 1.23.0 to 1.24.0

    chore(deps): bump tokio from 1.23.0 to 1.24.0

    Bumps tokio from 1.23.0 to 1.24.0.

    Release notes

    Sourced from tokio's releases.

    Tokio v1.24.0

    The highlight of this release is the reduction of lock contention for all I/O operations (#5300). We have received reports of up to a 20% improvement in CPU utilization and increased throughput for real-world I/O heavy applications.

    Fixed

    • rt: improve native AtomicU64 support detection (#5284)

    Added

    • rt: add configuration option for max number of I/O events polled from the OS per tick (#5186)
    • rt: add an environment variable for configuring the default number of worker threads per runtime instance (#4250)

    Changed

    • sync: reduce MPSC channel stack usage (#5294)
    • io: reduce lock contention in I/O operations (#5300)
    • fs: speed up read_dir() by chunking operations (#5309)
    • rt: use internal ThreadId implementation (#5329)
    • test: don't auto-advance time when a spawn_blocking task is running (#5115)

    #5186: tokio-rs/tokio#5186 #5294: tokio-rs/tokio#5294 #5284: tokio-rs/tokio#5284 #4250: tokio-rs/tokio#4250 #5300: tokio-rs/tokio#5300 #5329: tokio-rs/tokio#5329 #5115: tokio-rs/tokio#5115 #5309: tokio-rs/tokio#5309

    Tokio v1.23.1

    This release forward ports changes from 1.18.4.

    Fixed

    • net: fix Windows named pipe server builder to maintain option when toggling pipe mode (#5336).

    #5336: tokio-rs/tokio#5336

    Commits
    • dfe252d chore: prepare Tokio v1.24.0 release (#5353)
    • 21b233f test: bump version of async-stream (#5347)
    • 7299304 Merge branch 'tokio-1.23.x' into master
    • 1a997ff chore: prepare Tokio v1.23.1 release
    • a8fe333 Merge branch 'tokio-1.20.x' into tokio-1.23.x
    • ba81945 chore: prepare Tokio 1.20.3 release
    • 763bdc9 ci: run WASI tasks using latest Rust
    • 9f98535 Merge remote-tracking branch 'origin/tokio-1.18.x' into fix-named-pipes-1.20
    • 9241c3e chore: prepare Tokio v1.18.4 release
    • 699573d net: fix named pipes server configuration builder
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
  • Support network

    Support network "Shanghai"

    https://github.com/paradigmxyz/reth/actions/runs/3830942008/jobs/6519442884

    introduced here https://github.com/ethereum/tests/commit/b63ca72ce9b4fc9f4c7dcb6636394ab1bc6ad9c1

    I'm a bit confused by the

    unknown variant Shanghai, expected one of Frontier, FrontierToHomesteadAt5, Homestead, HomesteadToDaoAt5, HomesteadToEIP150At5, EIP150, EIP158, EIP158ToByzantiumAt5, Byzantium, ByzantiumToConstantinopleAt5, ByzantiumToConstantinopleFixAt5, Constantinople, ConstantinopleFix, Istanbul, Berlin, `Berl

    for "network": "Shangai", it seems like this is SpecName but I could identify where the network: SpecName pair is parsed

    ah looks like there is additional setup in reth https://github.com/paradigmxyz/reth/pull/700

    opened by mattsse 0
  • New dispatch strategy: Add array of instruction handles

    New dispatch strategy: Add array of instruction handles

    I experimented a little bit with this, as in having [InstructionFn;256] but I had a lot of changes and I am not sure if this was good for perf or not. Either way having this Array can be beneficial in multiple ways as in adding custom handles that could potentially replace the inspector, or allowing an additional ways to access the internal state of the interpreter.

    Blocked by: https://github.com/bluealloy/revm/issues/307

    good first issue 
    opened by rakita 0
  • Return more sane value that replaces `Return`

    Return more sane value that replaces `Return`

    Return is a enum and it is internal structure, exposing it outside of revm creates not that great interface.

    There are four states that can be returns:

    • Success: Transaction executed and it was success
    • Failure: Transaction executed but it failed: Check this: https://eips.ethereum.org/EIPS/eip-658
    • Error: Transaction not executed. Not enough balance in account to cover max gas consumes.
    • ExternalError: Transaction not executed, external database error.
    good first issue 
    opened by rakita 13
  • Add json traces

    Add json traces

    Work mostly done here: https://github.com/bluealloy/revm/pull/286 Some restructuring is needed, move this trace3155 to revm/inspector and add it alongside other Inspectors (don't remove CustomPrinter it has its uses)

    good first issue 
    opened by rakita 0
Releases(v15)
  • v15(Sep 11, 2022)

    What's Changed

    • Optimize calldataload. Some cleanup by @rakita in https://github.com/bluealloy/revm/pull/168
    • revm/evm: Return ExecutionResult, which includes gas_refunded by @ngotchac in https://github.com/bluealloy/revm/pull/169
    • revm: Update account storage methods in CacheDB by @ngotchac in https://github.com/bluealloy/revm/pull/171
    • fix: set gas_block to empty bytecode by @rakita in https://github.com/bluealloy/revm/pull/172
    • chore(deps): bump serde from 1.0.140 to 1.0.143 by @dependabot in https://github.com/bluealloy/revm/pull/166
    • chore(deps): bump thiserror from 1.0.31 to 1.0.32 by @dependabot in https://github.com/bluealloy/revm/pull/163
    • chore(deps): bump serde_json from 1.0.82 to 1.0.83 by @dependabot in https://github.com/bluealloy/revm/pull/162
    • JournaledState by @rakita in https://github.com/bluealloy/revm/pull/175
    • Handle HighNonce tests by @rakita in https://github.com/bluealloy/revm/pull/176
    • chore(deps): bump k256 from 0.11.3 to 0.11.4 by @dependabot in https://github.com/bluealloy/revm/pull/174
    • chore(deps): bump futures from 0.3.21 to 0.3.23 by @dependabot in https://github.com/bluealloy/revm/pull/173
    • refactor(precompiles): Vec -> BTreeMap by @shekhirin in https://github.com/bluealloy/revm/pull/177
    • refactor(revm): use u64 for gas refund counter by @shekhirin in https://github.com/bluealloy/revm/pull/180
    • feat(revm): more default trait implementations by @shekhirin in https://github.com/bluealloy/revm/pull/181
    • fix(revm): Fix balance overflow in finalize by @ngotchac in https://github.com/bluealloy/revm/pull/182
    • fix: Use saturating_add instead of checked_add in finalize by @ngotchac in https://github.com/bluealloy/revm/pull/184
    • chore(deps): bump serde from 1.0.143 to 1.0.144 by @dependabot in https://github.com/bluealloy/revm/pull/178
    • chore(deps): bump serde_json from 1.0.83 to 1.0.85 by @dependabot in https://github.com/bluealloy/revm/pull/179
    • Expose Ethereum test utilities in revme crate by @sveitser in https://github.com/bluealloy/revm/pull/185
    • Revert "refactor(revm): use u64 for gas refund counter (#180)" by @rakita in https://github.com/bluealloy/revm/pull/187
    • chore(ci): use ethtests profile for CI tests by @shekhirin in https://github.com/bluealloy/revm/pull/188
    • feat: expose hash on BytecodeLocked by @onbjerg in https://github.com/bluealloy/revm/pull/189
    • chore: export JournaledState by @mattsse in https://github.com/bluealloy/revm/pull/190
    • Add support for old forks. by @rakita in https://github.com/bluealloy/revm/pull/191
    • Cache precompile HashMap by @rakita in https://github.com/bluealloy/revm/pull/192
    • reexport revm_precompiles as precompiles by @mattsse in https://github.com/bluealloy/revm/pull/197
    • use Infallible for memory db's error type by @mattsse in https://github.com/bluealloy/revm/pull/196
    • chore(deps): bump sha2 from 0.10.2 to 0.10.3 by @dependabot in https://github.com/bluealloy/revm/pull/195
    • chore: add some derives for precompiles by @mattsse in https://github.com/bluealloy/revm/pull/199
    • chore(deps): bump once_cell from 1.13.0 to 1.13.1 by @dependabot in https://github.com/bluealloy/revm/pull/193
    • chore(deps): bump thiserror from 1.0.32 to 1.0.33 by @dependabot in https://github.com/bluealloy/revm/pull/198
    • chore(deps): bump futures from 0.3.23 to 0.3.24 by @dependabot in https://github.com/bluealloy/revm/pull/194
    • fix: make DatabaseRef::basic consistent with Database by @rakita in https://github.com/bluealloy/revm/pull/201
    • revme some cleanup by @rakita in https://github.com/bluealloy/revm/pull/202
    • chore(deps): bump sha2 from 0.10.3 to 0.10.5 by @dependabot in https://github.com/bluealloy/revm/pull/203
    • Cargo sort. Bump lib versions by @rakita in https://github.com/bluealloy/revm/pull/208
    • chore: export create address calls by @mattsse in https://github.com/bluealloy/revm/pull/209
    • Cfg choose create analysis, option on bytecode size limit by @rakita in https://github.com/bluealloy/revm/pull/210
    • current_opcode fn and rename program_counter to instruction_pointer by @rakita in https://github.com/bluealloy/revm/pull/211
    • Do gas calculation using u64 and not U256 by @rakita in https://github.com/bluealloy/revm/pull/213
    • revm bump v2.0.0, precompile bump v1.1.1 by @rakita in https://github.com/bluealloy/revm/pull/212

    New Contributors

    • @ngotchac made their first contribution in https://github.com/bluealloy/revm/pull/169
    • @shekhirin made their first contribution in https://github.com/bluealloy/revm/pull/177
    • @sveitser made their first contribution in https://github.com/bluealloy/revm/pull/185

    Full Changelog: https://github.com/bluealloy/revm/compare/v14...v15

    Source code(tar.gz)
    Source code(zip)
  • v11(Jul 2, 2022)

    I didn't do this in a while on Github. You can check CHANGELOG.md for global changes or evm related CHANGELOG.md. Other then revm, precompiles got updated in v6 and stabilized to v1.0.0

    Commits from v5 to v11:

    • [precompiles] remove unused borsh by @rakita in https://github.com/bluealloy/revm/pull/43
    • Inspector fixup by @onbjerg in https://github.com/bluealloy/revm/pull/46
    • propagate the back the error parsing k256 ecrecover by @ntrippar in https://github.com/bluealloy/revm/pull/50
    • Comment unsafe. Introduce pop_top by @rakita in https://github.com/bluealloy/revm/pull/51
    • fix: make *_ref functions take &self by @onbjerg in https://github.com/bluealloy/revm/pull/53
    • fix: export Filth by @onbjerg in https://github.com/bluealloy/revm/pull/54
    • fix: export missing machine structs by @onbjerg in https://github.com/bluealloy/revm/pull/55
    • feat: implement DatabaseRef for CacheDB by @onbjerg in https://github.com/bluealloy/revm/pull/56
    • refactor: improve inspector ergonomics by @onbjerg in https://github.com/bluealloy/revm/pull/57
    • Refactor by @rakita in https://github.com/bluealloy/revm/pull/52
    • bump dependencies by @rakita in https://github.com/bluealloy/revm/pull/63
    • Bump getrandom from 0.2.3 to 0.2.5 by @dependabot in https://github.com/bluealloy/revm/pull/60
    • Bump futures from 0.3.17 to 0.3.21 by @dependabot in https://github.com/bluealloy/revm/pull/64
    • Bump ripemd from 0.1.0 to 0.1.1 by @dependabot in https://github.com/bluealloy/revm/pull/66
    • chore: turn off default features for zkp-u256 by @gakonst in https://github.com/bluealloy/revm/pull/68
    • Bump num_enum from 0.5.6 to 0.5.7 by @dependabot in https://github.com/bluealloy/revm/pull/70
    • Bump sha3 from 0.10.0 to 0.10.1 by @dependabot in https://github.com/bluealloy/revm/pull/67
    • Bump secp256k1 from 0.21.2 to 0.21.3 by @dependabot in https://github.com/bluealloy/revm/pull/65
    • fix: various inspector fixes by @onbjerg in https://github.com/bluealloy/revm/pull/69
    • feat: cache block hashes by @onbjerg in https://github.com/bluealloy/revm/pull/71
    • feat: call insp end functions on early return by @onbjerg in https://github.com/bluealloy/revm/pull/73
    • Bump secp256k1 from 0.21.3 to 0.22.0 by @dependabot in https://github.com/bluealloy/revm/pull/72
    • [revm] is_push optimization by @rakita in https://github.com/bluealloy/revm/pull/76
    • Bump k256 from 0.10.2 to 0.10.3 by @dependabot in https://github.com/bluealloy/revm/pull/75
    • Bump secp256k1 from 0.22.0 to 0.22.1 by @dependabot in https://github.com/bluealloy/revm/pull/74
    • Tests by @rakita in https://github.com/bluealloy/revm/pull/78
    • chore: do not pin k256 patch version by @gakonst in https://github.com/bluealloy/revm/pull/81
    • bump k256 to 0.10.4 by @gakonst in https://github.com/bluealloy/revm/pull/82
    • Gas fixes by @onbjerg in https://github.com/bluealloy/revm/pull/83
    • feat: mutable call inputs by @onbjerg in https://github.com/bluealloy/revm/pull/84
    • feat: Inspector::log by @onbjerg in https://github.com/bluealloy/revm/pull/85
    • feat: add some PartialEq derives by @mattsse in https://github.com/bluealloy/revm/pull/90
    • feat: add serde support to model types by @mattsse in https://github.com/bluealloy/revm/pull/91
    • Various fixes by @onbjerg in https://github.com/bluealloy/revm/pull/93
    • fix: impose a memory limit by @onbjerg in https://github.com/bluealloy/revm/pull/86
    • Update AccountInfo#code documentation by @alcuadrado in https://github.com/bluealloy/revm/pull/94
    • Bump getrandom from 0.2.5 to 0.2.6 by @dependabot in https://github.com/bluealloy/revm/pull/95
    • chore: refactor to exact option combinators by @huitseeker in https://github.com/bluealloy/revm/pull/96
    • Rework analysis by @rakita in https://github.com/bluealloy/revm/pull/89
    • chore: fix readme typo by @Pet3ris in https://github.com/bluealloy/revm/pull/98
    • chore: add missing derives by @mattsse in https://github.com/bluealloy/revm/pull/102
    • cargo clippy/fmt to nightly by @rakita in https://github.com/bluealloy/revm/pull/103
    • [revm] is_static for Inspector initialize_interp by @rakita in https://github.com/bluealloy/revm/pull/109
    • chore: typo fixes by @guanqun in https://github.com/bluealloy/revm/pull/110
    • empty keccak constant and remove access_list.clone by @joshieDo in https://github.com/bluealloy/revm/pull/111
    • fix: BLOCKHASH should return 0 if number not in last 256 blocks by @wardbradt in https://github.com/bluealloy/revm/pull/112
    • chore(deps): bump thiserror from 1.0.30 to 1.0.31 by @dependabot in https://github.com/bluealloy/revm/pull/105
    • chore(deps): bump serde from 1.0.136 to 1.0.137 by @dependabot in https://github.com/bluealloy/revm/pull/107
    • chore(deps): bump serde_json from 1.0.79 to 1.0.81 by @dependabot in https://github.com/bluealloy/revm/pull/108
    • chore(deps): bump js-sys from 0.3.56 to 0.3.57 by @dependabot in https://github.com/bluealloy/revm/pull/100
    • chore(deps): bump wasm-bindgen from 0.2.79 to 0.2.80 by @dependabot in https://github.com/bluealloy/revm/pull/101
    • chore(deps): bump hashbrown from 0.12.0 to 0.12.1 by @dependabot in https://github.com/bluealloy/revm/pull/113
    • feat: add getters for cachedb by @mattsse in https://github.com/bluealloy/revm/pull/119
    • chore(clippy): make clippy happy by @mattsse in https://github.com/bluealloy/revm/pull/120
    • chore(deps): bump auto_impl from 0.5.0 to 1.0.1 by @dependabot in https://github.com/bluealloy/revm/pull/118
    • chore: export evm_inner by @mattsse in https://github.com/bluealloy/revm/pull/122
    • chore(deps): bump parking_lot from 0.12.0 to 0.12.1 by @dependabot in https://github.com/bluealloy/revm/pull/116
    • Consensus error with gas block for SSTORE stipend check by @rakita in https://github.com/bluealloy/revm/pull/124
    • enable EIP2200 in Istanbul by @rakita in https://github.com/bluealloy/revm/pull/125
    • feat: add ord derives to specid by @mattsse in https://github.com/bluealloy/revm/pull/127
    • feat: add Subroutine debug clone derive by @mattsse in https://github.com/bluealloy/revm/pull/128
    • don't delete account and storage entries on commit by @mattsse in https://github.com/bluealloy/revm/pull/126
    • test: update statetest model to pass merge tests by @mattsse in https://github.com/bluealloy/revm/pull/133
    • chore(deps): bump secp256k1 from 0.22.1 to 0.23.1 by @dependabot in https://github.com/bluealloy/revm/pull/137
    • Return specific Return statuses in CALLs by @meetmangukiya in https://github.com/bluealloy/revm/pull/136
    • Introduce account Touched/Cleared/None state in CacheDB by @rakita in https://github.com/bluealloy/revm/pull/140
    • chore(deps): bump secp256k1 from 0.23.1 to 0.23.3 by @dependabot in https://github.com/bluealloy/revm/pull/139
    • chore(deps): bump getrandom from 0.2.6 to 0.2.7 by @dependabot in https://github.com/bluealloy/revm/pull/129
    • chore(deps): bump wasm-bindgen from 0.2.80 to 0.2.81 by @dependabot in https://github.com/bluealloy/revm/pull/130
    • chore(deps): bump js-sys from 0.3.57 to 0.3.58 by @dependabot in https://github.com/bluealloy/revm/pull/131
    • chore(deps): bump serde from 1.0.137 to 1.0.138 by @dependabot in https://github.com/bluealloy/revm/pull/141
    • chore(deps): bump serde_json from 1.0.81 to 1.0.82 by @dependabot in https://github.com/bluealloy/revm/pull/142
    • bump k256 by @rakita in https://github.com/bluealloy/revm/pull/143

    New Contributors

    • @ntrippar made their first contribution in https://github.com/bluealloy/revm/pull/50
    • @dependabot made their first contribution in https://github.com/bluealloy/revm/pull/60
    • @alcuadrado made their first contribution in https://github.com/bluealloy/revm/pull/94
    • @huitseeker made their first contribution in https://github.com/bluealloy/revm/pull/96
    • @Pet3ris made their first contribution in https://github.com/bluealloy/revm/pull/98
    • @guanqun made their first contribution in https://github.com/bluealloy/revm/pull/110
    • @joshieDo made their first contribution in https://github.com/bluealloy/revm/pull/111
    • @wardbradt made their first contribution in https://github.com/bluealloy/revm/pull/112
    • @meetmangukiya made their first contribution in https://github.com/bluealloy/revm/pull/136

    Full Changelog: https://github.com/bluealloy/revm/compare/v5...v11

    Source code(tar.gz)
    Source code(zip)
  • v5(Jan 20, 2022)

    • revm_precompiles: v0.4.0
      • Added feature for k256 lib. We now have choise to use bitcoin c lib or k256 for ecrecovery.
    • revm: v1.2.0
      • Bump revm_precompile and added new feature for k256 lib.
    Source code(tar.gz)
    Source code(zip)
  • v4(Jan 20, 2022)

  • v3(Dec 18, 2021)

  • v2(Nov 17, 2021)

  • v1(Nov 2, 2021)

    From now on versions will be simplified and we will start from v1. This tag contains new versions of:

    • revm: v0.4.0
    • revm_precompiles: v0.2.0
    • revmjs: v0.1.0
    Source code(tar.gz)
    Source code(zip)
  • v0.3.1(Oct 27, 2021)

    versions:

    • revm [v0.3.1]
    • revm-precompiles[v0.1.0]

    This is the first official release. Revamped revm interface, all eth state tests are passing and precompiles are now separate lib.

    Source code(tar.gz)
    Source code(zip)
Owner
null
An LC-3 virtual machine written in Rust for learning purposes.

LC-3 written in Rust An LC-3 virtual machine written in Rust for learning purposes.

Rodrigo Araújo 30 Dec 11, 2022
BM - a basic virtual machine written in rust

A basic virtual machine implementation with it's own binary format and assembly, as a learning experience.

KaviiSuri 1 May 8, 2022
LC3 Virtual Machine written in Rust 🦀

LC3 - Emulator LC3-rust is a virtual machine for the Little Computer 3 architecture, written using the Rust programming language. The VM has been writ

Gabriele Pappalardo 2 Oct 25, 2022
little computer 3 (lc3) virtual machine written in Rust

Little Computer 3 (LC3) Virtual Machine (by @lowlevelers) What is Little Computer 3? Little Computer 3, or LC-3, is a type of computer educational pro

LowLevelers 3 Oct 25, 2023
Dragonball-sandbox is a collection of Rust crates to help build custom Virtual Machine Monitors and hypervisors

Dragonball-sandbox is a collection of Rust crates to help build custom Virtual Machine Monitors and hypervisors. The crates here are considered to be the downstream of rust-vmm.

OpenAnolis Community 62 Dec 30, 2022
A Rust implementation of the Lox programming language. Based on clox, the bytecode virtual machine.

A Rust implementation of the Lox programming language. Based on clox, the bytecode virtual machine.

Diego Freijo 23 Dec 26, 2022
vore is a virtual machine management tool focused on VFIO set ups.

vore is a virtual machine management tool focused on VFIO set ups. with a minimal TOML file you should be able to get you should be able to create a VFIO-focused VM.

eater 8 Mar 20, 2022
crosvm is a virtual machine monitor (VMM) based on Linux’s KVM hypervisor

crosvm - The Chrome OS Virtual Machine Monitor crosvm is a virtual machine monitor (VMM) based on Linux’s KVM hypervisor, with a focus on simplicity,

Google 454 Dec 31, 2022
🍄 A disassembler for the UEFI Bytecode Virtual Machine.

?? A disassembler for the UEFI Bytecode Virtual Machine.

Samuel Wilder 51 Dec 6, 2022
STARK-based virtual machine

Polygon Miden A STARK-based virtual machine. WARNING: This project is in an alpha stage. It has not been audited and may contain bugs and security fla

Polygon (previously Matic) 415 Dec 28, 2022
SVM - Spacemesh Virtual Machine

SVM - Spacemesh Virtual Machine Project Goals Self-contained. Should be hosted by the Spacemesh Golang full-node and future Spacemesh Rust full-node B

Spacemesh 83 Sep 15, 2022
Virtual Machine Language - Yet another stack-based programming language

Virtual Machine Language - Yet another stack-based programming language

null 2 Feb 26, 2022
Secure and fast microVMs for serverless computing.

Our mission is to enable secure, multi-tenant, minimal-overhead execution of container and function workloads. Read more about the Firecracker Charter

firecracker-microvm 20.3k Jan 8, 2023
StarWM is an extensible window manager written in Rust.

StarWM is an extensible, floating and tiling, X window manager for Linux-based operating systems written in Rust.

StarWM 30 Dec 9, 2022
Aftermath - a high-performance JVM for the TapVM framework written in the Rust

Aftermath Welcome to the source, my friend! Note -> This README is targetted towards users, not contributors. Please read the docs present at docs/for

null 6 Aug 1, 2022
RailCar: Rust implementation of the Open Containers Initiative oci-runtime

railcar - rust implementation of the oci-runtime spec What is railcar? railcar is a rust implementation of the opencontainers initiative's runtime spe

Oracle 1.1k Dec 21, 2022
Advanced Rust quantum computer simulator

quantum Advanced Rust quantum computer simulator. Motivation Quantum is a quantum computer simulator written with the following design goals in mind:

Ben Eills 215 Jan 1, 2023
Rust bindings for the unicorn CPU emulator

unicorn-rs THIS PACKAGE IS DEPRECATED AND NO LONGER MAINTAINED. Rust bindings are now included with unicorn and will be maintained there from now on.

null 129 Oct 10, 2022
Rust API to the OS X Hypervisor framework for hardware-accelerated virtualization

hypervisor-rs hypervisor is a Rust library that taps into functionality that enables hardware-accelerated execution of virtual machines on OS X. It bi

Saurav Sachidanand 57 Dec 8, 2022