From fa93eab13ecc5ec41a11eb3e26eeb00d7bf59357 Mon Sep 17 00:00:00 2001 From: rakita Date: Mon, 29 Aug 2022 17:44:19 +0200 Subject: [PATCH 1/3] use revm brench --- Cargo.lock | 225 +++------------------------------------------------- Cargo.toml | 4 +- src/main.rs | 12 +-- 3 files changed, 18 insertions(+), 223 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 34a1092..444b270 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -55,12 +55,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" -[[package]] -name = "base16ct" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "349a06037c7bf932dd7e7d1f653678b2038b9ad46a74102f1fc7bd7872678cce" - [[package]] name = "bitvec" version = "1.0.0" @@ -112,12 +106,6 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" -[[package]] -name = "const-oid" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "722e23542a15cea1f65d4a1419c4cfd7a26706c70871a13a04238ca3f40f1661" - [[package]] name = "cpufeatures" version = "0.2.2" @@ -133,18 +121,6 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" -[[package]] -name = "crypto-bigint" -version = "0.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f2b443d17d49dad5ef0ede301c3179cc923b8822f3393b4d2c28c269dd4a122" -dependencies = [ - "generic-array", - "rand_core", - "subtle", - "zeroize", -] - [[package]] name = "crypto-common" version = "0.1.3" @@ -155,15 +131,6 @@ dependencies = [ "typenum", ] -[[package]] -name = "der" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13dd2ae565c0a381dde7fade45fce95984c568bdcb4700a4fdbe3175e0380b2f" -dependencies = [ - "const-oid", -] - [[package]] name = "derive_more" version = "0.99.17" @@ -183,38 +150,6 @@ checksum = "f2fb860ca6fafa5552fb6d0e816a69c8e49f0908bf524e30a90d97c85892d506" dependencies = [ "block-buffer", "crypto-common", - "subtle", -] - -[[package]] -name = "ecdsa" -version = "0.14.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e852f4174d2a8646a0fa8a34b55797856c722f86267deb0aa1e93f7f247f800e" -dependencies = [ - "der", - "elliptic-curve", - "rfc6979", - "signature", -] - -[[package]] -name = "elliptic-curve" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7bb888ab5300a19b8e5bceef25ac745ad065f3c9f7efc6de1b91958110891d3" -dependencies = [ - "base16ct", - "crypto-bigint", - "der", - "digest", - "ff", - "generic-array", - "group", - "rand_core", - "sec1", - "subtle", - "zeroize", ] [[package]] @@ -274,7 +209,7 @@ dependencies = [ [[package]] name = "evm" version = "0.35.0" -source = "git+https://github.com/cassc/evm?branch=master#51b8c2ce3104265e1fd5bb0fe5cdfd2e0938239c" +source = "git+https://github.com/rust-blockchain/evm.git?branch=master#51b8c2ce3104265e1fd5bb0fe5cdfd2e0938239c" dependencies = [ "auto_impl 0.5.0", "environmental", @@ -294,7 +229,7 @@ dependencies = [ [[package]] name = "evm-core" version = "0.35.0" -source = "git+https://github.com/cassc/evm?branch=master#51b8c2ce3104265e1fd5bb0fe5cdfd2e0938239c" +source = "git+https://github.com/rust-blockchain/evm.git?branch=master#51b8c2ce3104265e1fd5bb0fe5cdfd2e0938239c" dependencies = [ "parity-scale-codec", "primitive-types", @@ -305,7 +240,7 @@ dependencies = [ [[package]] name = "evm-gasometer" version = "0.35.0" -source = "git+https://github.com/cassc/evm?branch=master#51b8c2ce3104265e1fd5bb0fe5cdfd2e0938239c" +source = "git+https://github.com/rust-blockchain/evm.git?branch=master#51b8c2ce3104265e1fd5bb0fe5cdfd2e0938239c" dependencies = [ "environmental", "evm-core", @@ -316,7 +251,7 @@ dependencies = [ [[package]] name = "evm-runtime" version = "0.35.0" -source = "git+https://github.com/cassc/evm?branch=master#51b8c2ce3104265e1fd5bb0fe5cdfd2e0938239c" +source = "git+https://github.com/rust-blockchain/evm.git?branch=master#51b8c2ce3104265e1fd5bb0fe5cdfd2e0938239c" dependencies = [ "auto_impl 0.5.0", "environmental", @@ -335,16 +270,6 @@ dependencies = [ "once_cell", ] -[[package]] -name = "ff" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df689201f395c6b90dfe87127685f8dbfc083a5e779e613575d8bd7314300c3e" -dependencies = [ - "rand_core", - "subtle", -] - [[package]] name = "fixed-hash" version = "0.7.0" @@ -384,17 +309,6 @@ dependencies = [ "wasi", ] -[[package]] -name = "group" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7391856def869c1c81063a03457c676fbcd419709c3dfb33d8d319de484b154d" -dependencies = [ - "ff", - "rand_core", - "subtle", -] - [[package]] name = "hash-db" version = "0.15.2" @@ -417,15 +331,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" dependencies = [ "ahash", -] - -[[package]] -name = "hermit-abi" -version = "0.1.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" -dependencies = [ - "libc", + "serde", ] [[package]] @@ -437,15 +343,6 @@ dependencies = [ "serde", ] -[[package]] -name = "hmac" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" -dependencies = [ - "digest", -] - [[package]] name = "impl-codec" version = "0.6.0" @@ -490,19 +387,6 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" -[[package]] -name = "k256" -version = "0.11.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6db2573d3fd3e4cc741affc9b5ce1a8ce36cf29f09f80f36da4309d0ae6d7854" -dependencies = [ - "cfg-if", - "ecdsa", - "elliptic-curve", - "sha2", - "sha3", -] - [[package]] name = "keccak" version = "0.1.2" @@ -615,16 +499,6 @@ dependencies = [ "autocfg", ] -[[package]] -name = "num_cpus" -version = "1.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1" -dependencies = [ - "hermit-abi", - "libc", -] - [[package]] name = "num_enum" version = "0.5.7" @@ -678,12 +552,6 @@ dependencies = [ "syn", ] -[[package]] -name = "pin-project-lite" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" - [[package]] name = "ppv-lite86" version = "0.2.16" @@ -795,8 +663,7 @@ dependencies = [ [[package]] name = "revm" version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab402ae244afdd560b2aa710df5af557bc791b1cca6fec174ced0cf781e13134" +source = "git+https://github.com/bluealloy/revm.git?branch=forks#431fe6849a72d46901c8327acc01035667ce6dba" dependencies = [ "arrayref", "auto_impl 1.0.1", @@ -809,17 +676,15 @@ dependencies = [ "rlp", "serde", "sha3", - "tokio", ] [[package]] name = "revm_precompiles" version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af88e7e9feb30cc4ed64645f09b966e84a1f6be56551ce5f1691105def45705d" +source = "git+https://github.com/bluealloy/revm.git?branch=forks#431fe6849a72d46901c8327acc01035667ce6dba" dependencies = [ "bytes", - "k256", + "hashbrown", "num", "primitive-types", "ripemd", @@ -829,17 +694,6 @@ dependencies = [ "substrate-bn", ] -[[package]] -name = "rfc6979" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88c86280f057430a52f4861551b092a01b419b8eacefc7c995eacb9dc132fe32" -dependencies = [ - "crypto-bigint", - "hmac", - "zeroize", -] - [[package]] name = "ripemd" version = "0.1.1" @@ -914,24 +768,11 @@ dependencies = [ "syn", ] -[[package]] -name = "sec1" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3be24c1842290c45df0a7bf069e0c268a747ad05a192f2fd7dcfdbc1cba40928" -dependencies = [ - "base16ct", - "der", - "generic-array", - "subtle", - "zeroize", -] - [[package]] name = "secp256k1" -version = "0.23.4" +version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ece73253dd9e1fb540ff324eae554113a31c25fb598d22fd13b088a6a03f90d" +checksum = "b7649a0b3ffb32636e60c7ce0d70511eda9c52c658cd0634e194d5a19943aeff" dependencies = [ "secp256k1-sys", ] @@ -986,16 +827,6 @@ dependencies = [ "keccak", ] -[[package]] -name = "signature" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0ea32af43239f0d353a7dd75a22d94c329c8cdaafdcb4c1c1335aa10c298a4a" -dependencies = [ - "digest", - "rand_core", -] - [[package]] name = "spin" version = "0.5.2" @@ -1021,12 +852,6 @@ dependencies = [ "rustc-hex", ] -[[package]] -name = "subtle" -version = "2.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" - [[package]] name = "syn" version = "1.0.96" @@ -1073,30 +898,6 @@ dependencies = [ "crunchy", ] -[[package]] -name = "tokio" -version = "1.20.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a8325f63a7d4774dd041e363b2409ed1c5cbbd0f867795e661df066b2b0a581" -dependencies = [ - "autocfg", - "num_cpus", - "once_cell", - "pin-project-lite", - "tokio-macros", -] - -[[package]] -name = "tokio-macros" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9724f9a975fb987ef7a3cd9be0350edcbe130698af5b8f7a631e23d42d052484" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "toml" version = "0.5.9" @@ -1160,9 +961,3 @@ checksum = "30b31594f29d27036c383b53b59ed3476874d518f0efb151b27a4c275141390e" dependencies = [ "tap", ] - -[[package]] -name = "zeroize" -version = "1.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c394b5bd0c6f669e7275d9c20aa90ae064cb22e75a1cad54e1b34088034b149f" diff --git a/Cargo.toml b/Cargo.toml index 3a643c2..43b9bfe 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,12 +6,12 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -evm = { git = "https://github.com/cassc/evm", branch = "master" } +evm = { git = "https://github.com/rust-blockchain/evm.git", branch = "master" } eyre = "0.6.8" hex = "0.4.3" primitive-types = { version = "0.11.1", features = ["scale-info"] } microbench = "0.5.0" -revm = { version = "1.9.0", features = ["serde", "tokio", "hex", "k256", "with-serde"] } +revm = { git = "https://github.com/bluealloy/revm.git", branch="forks", features = ["serde", "hex", "with-serde"] } bytes = "1.2.1" diff --git a/src/main.rs b/src/main.rs index 0cc1cd8..02b1a6b 100644 --- a/src/main.rs +++ b/src/main.rs @@ -144,11 +144,11 @@ fn bench_revm() -> Result<()> { &bench_options, "execute_contract_method_success_from_revm", || { - let (r, _to, _g, _s, _logs) = evm.transact(); + let (r,_) = evm.transact(); assert!( - matches!(r, Return::Return), + matches!(r.exit_reason, Return::Return), "REVM Method call should succeed: {:#?}", - r + r.exit_reason ); }, ); @@ -158,11 +158,11 @@ fn bench_revm() -> Result<()> { &bench_options, "execute_contract_method_reverted_from_revm", || { - let (r, _to, _g, _s, _logs) = evm.transact(); + let (result,_) = evm.transact(); assert!( - matches!(r, Return::Revert), + matches!(result.exit_reason, Return::Revert), "REVM Method call should revert, r: {:#?}", - r, + result.exit_reason, ); }, ); From 758af598dc381669626bea2c91cb7b7091f73ecf Mon Sep 17 00:00:00 2001 From: rakita Date: Mon, 29 Aug 2022 18:46:05 +0200 Subject: [PATCH 2/3] Use revm analysed code --- Cargo.lock | 86 +++++----- Cargo.toml | 4 +- README.md | 8 + flamegraph.svg | 415 +++++++++++++++++++++++++++++++++++++++++++++++++ src/main.rs | 11 +- 5 files changed, 477 insertions(+), 47 deletions(-) create mode 100644 flamegraph.svg diff --git a/Cargo.lock b/Cargo.lock index 444b270..54c19df 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -57,9 +57,9 @@ checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" [[package]] name = "bitvec" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1489fcb93a5bb47da0462ca93ad252ad6af2145cce58d10d46a83931ba9f016b" +checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" dependencies = [ "funty", "radium", @@ -108,9 +108,9 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "cpufeatures" -version = "0.2.2" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59a6001667ab124aebae2a495118e11d30984c3a653e99d86d58971708cf5e4b" +checksum = "dc948ebb96241bb40ab73effeb80d9f93afaad49359d159a5e61be51619fe813" dependencies = [ "libc", ] @@ -123,9 +123,9 @@ checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" [[package]] name = "crypto-common" -version = "0.1.3" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57952ca27b5e3606ff4dd79b0020231aaf9d6aa76dc05fd30137538c50bd3ce8" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" dependencies = [ "generic-array", "typenum", @@ -290,9 +290,9 @@ checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" [[package]] name = "generic-array" -version = "0.14.5" +version = "0.14.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd48d33ec7f05fbfa152300fdad764757cbded343c1aa1cff2fbaf4134851803" +checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9" dependencies = [ "typenum", "version_check", @@ -300,9 +300,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.6" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9be70c98951c83b8d2f8f60d7065fa6d5146873094452a1008da8c2f1e4205ad" +checksum = "4eb1a864a501629691edf6c15a593b7a51eebaa1e8468e9ddc623de7c9b58ec6" dependencies = [ "cfg-if", "libc", @@ -404,9 +404,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.126" +version = "0.2.132" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836" +checksum = "8371e4e5341c3a96db127eb2465ac681ced4c433e01dd0e938adbef26ba93ba5" [[package]] name = "log" @@ -522,15 +522,15 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.12.0" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7709cef83f0c1f58f666e746a08b21e0085f7440fa6a29cc194d68aac97a4225" +checksum = "074864da206b4973b84eb91683020dbefd6a8c3f0f38e054d93954e891935e4e" [[package]] name = "parity-scale-codec" -version = "3.1.2" +version = "3.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8b44461635bbb1a0300f100a841e571e7d919c81c73075ef5d152ffdb521066" +checksum = "9182e4a71cae089267ab03e67c99368db7cd877baf50f931e5d6d4b71e195ac0" dependencies = [ "arrayvec", "bitvec", @@ -542,9 +542,9 @@ dependencies = [ [[package]] name = "parity-scale-codec-derive" -version = "3.1.2" +version = "3.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c45ed1f39709f5a89338fab50e59816b2e8815f5bb58276e7ddf9afd495f73f8" +checksum = "9299338969a3d2f491d65f140b00ddec470858402f888af98e8642fb5e8965cd" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -574,10 +574,11 @@ dependencies = [ [[package]] name = "proc-macro-crate" -version = "1.1.3" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e17d47ce914bf4de440332250b0edd23ce48c005f59fab39d3335866b114f11a" +checksum = "eda0fc3b0fb7c975631757e14d9049da17374063edb6ebbcbc54d880d4fe94e9" dependencies = [ + "once_cell", "thiserror", "toml", ] @@ -608,18 +609,18 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.39" +version = "1.0.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c54b25569025b7fc9651de43004ae593a75ad88543b17178aa5e1b9c4f15f56f" +checksum = "0a2ca2c61bc9f3d74d2886294ab7b9853abd9c1ad903a3ac7815c58989bb7bab" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.18" +version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1feb54ed693b93a84e14094943b84b7c4eae204c512b7ccb95ab0c66d278ad1" +checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179" dependencies = [ "proc-macro2", ] @@ -663,7 +664,7 @@ dependencies = [ [[package]] name = "revm" version = "1.9.0" -source = "git+https://github.com/bluealloy/revm.git?branch=forks#431fe6849a72d46901c8327acc01035667ce6dba" +source = "git+https://github.com/bluealloy/revm.git?branch=precomp#d8517632ae05a43d15b790c2b042426c89fbdc70" dependencies = [ "arrayref", "auto_impl 1.0.1", @@ -681,11 +682,12 @@ dependencies = [ [[package]] name = "revm_precompiles" version = "1.1.0" -source = "git+https://github.com/bluealloy/revm.git?branch=forks#431fe6849a72d46901c8327acc01035667ce6dba" +source = "git+https://github.com/bluealloy/revm.git?branch=precomp#d8517632ae05a43d15b790c2b042426c89fbdc70" dependencies = [ "bytes", "hashbrown", "num", + "once_cell", "primitive-types", "ripemd", "secp256k1", @@ -788,18 +790,18 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.137" +version = "1.0.144" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61ea8d54c77f8315140a05f4c7237403bf38b72704d031543aa1d16abbf517d1" +checksum = "0f747710de3dcd43b88c9168773254e809d8ddbdf9653b84e2554ab219f17860" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.137" +version = "1.0.144" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f26faba0c3959972377d3b2d306ee9f71faee9714294e41bb777f83f88578be" +checksum = "94ed3a816fb1d101812f83e789f888322c34e291f894f19590dc310963e87a00" dependencies = [ "proc-macro2", "quote", @@ -819,9 +821,9 @@ dependencies = [ [[package]] name = "sha3" -version = "0.10.1" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "881bf8156c87b6301fc5ca6b27f11eeb2761224c7081e69b409d5a1951a70c86" +checksum = "0a31480366ec990f395a61b7c08122d99bd40544fdb5abcfc1b06bb29994312c" dependencies = [ "digest", "keccak", @@ -854,9 +856,9 @@ dependencies = [ [[package]] name = "syn" -version = "1.0.96" +version = "1.0.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0748dd251e24453cb8717f0354206b91557e4ec8703673a4b30208f2abaf1ebf" +checksum = "58dbef6ec655055e20b86b15a8cc6d439cca19b667537ac6a1369572d151ab13" dependencies = [ "proc-macro2", "quote", @@ -871,18 +873,18 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "thiserror" -version = "1.0.31" +version = "1.0.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd829fe32373d27f76265620b5309d0340cb8550f523c1dda251d6298069069a" +checksum = "f5f6586b7f764adc0231f4c79be7b920e766bb2f3e51b3661cdb263828f19994" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.31" +version = "1.0.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0396bc89e626244658bef819e22d0cc459e795a5ebe878e6ec336d1674a8d79a" +checksum = "12bafc5b54507e0149cdf1b145a5d80ab80a90bcd9275df43d4fff68460f6c21" dependencies = [ "proc-macro2", "quote", @@ -937,9 +939,9 @@ dependencies = [ [[package]] name = "unicode-ident" -version = "1.0.0" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d22af068fba1eb5edcb4aea19d382b2a3deb4c8f9d475c589b6ada9e0fd493ee" +checksum = "c4f5b37a154999a8f3f98cc23a628d850e154479cd94decf3414696e12e31aaf" [[package]] name = "version_check" @@ -949,9 +951,9 @@ checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" [[package]] name = "wasi" -version = "0.10.2+wasi-snapshot-preview1" +version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wyz" diff --git a/Cargo.toml b/Cargo.toml index 43b9bfe..0c1345b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,7 +11,9 @@ eyre = "0.6.8" hex = "0.4.3" primitive-types = { version = "0.11.1", features = ["scale-info"] } microbench = "0.5.0" -revm = { git = "https://github.com/bluealloy/revm.git", branch="forks", features = ["serde", "hex", "with-serde"] } +revm = { git = "https://github.com/bluealloy/revm.git", branch="precomp", features = ["serde", "hex", "with-serde"] } bytes = "1.2.1" +[profile.release] +debug = true \ No newline at end of file diff --git a/README.md b/README.md index b67e3ab..085eab4 100644 --- a/README.md +++ b/README.md @@ -22,3 +22,11 @@ execute_contract_method_reverted_from_rust_evm (5.0s) ... 7_720.943 ns/ite execute_contract_method_success_from_revm (5.0s) ... 8_617.185 ns/iter (1.000 R²) execute_contract_method_reverted_from_revm (5.0s) ... 8_594.083 ns/iter (0.999 R²) ``` + +After updating revm branch on XPS (i7-10750H CPU @ 2.60GHz): +```text +execute_contract_method_success_from_rust_evm (1.0s) ... 8_549.149 ns/iter (0.999 R²) +execute_contract_method_reverted_from_rust_evm (1.0s) ... 7_504.395 ns/iter (1.000 R²) +execute_contract_method_success_from_revm (1.0s) ... 2_414.513 ns/iter (1.000 R²) +execute_contract_method_reverted_from_revm (1.0s) ... 2_194.849 ns/iter (1.000 R²) +``` \ No newline at end of file diff --git a/flamegraph.svg b/flamegraph.svg new file mode 100644 index 0000000..76a2296 --- /dev/null +++ b/flamegraph.svg @@ -0,0 +1,415 @@ +Flame Graph Reset ZoomSearch perf-exec (4 samples, 4.08%)perf..[unknown] (4 samples, 4.08%)[unk..[unknown] (4 samples, 4.08%)[unk..[unknown] (4 samples, 4.08%)[unk..[unknown] (4 samples, 4.08%)[unk..[unknown] (4 samples, 4.08%)[unk..[unknown] (4 samples, 4.08%)[unk..[unknown] (4 samples, 4.08%)[unk..[unknown] (4 samples, 4.08%)[unk..[unknown] (4 samples, 4.08%)[unk..[unknown] (4 samples, 4.08%)[unk..[unknown] (4 samples, 4.08%)[unk..[unknown] (4 samples, 4.08%)[unk..[unknown] (4 samples, 4.08%)[unk..[unknown] (4 samples, 4.08%)[unk..<revm::db::in_memory_db::CacheDB<ExtDB> as revm::db::Database>::basic (1 samples, 1.02%)revm::instructions::system::calldataload (1 samples, 1.02%)revm::interpreter::stack::Stack::len (1 samples, 1.02%)[[heap]] (3 samples, 3.06%)[[h..revm::journaled_state::JournaledState::transfer (1 samples, 1.02%)alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 1.02%)bytes::bytes::promotable_even_clone (1 samples, 1.02%)evm::executor::stack::executor::StackExecutor<S,P>::execute (1 samples, 1.02%)evm_runtime::Runtime::run (1 samples, 1.02%)evm_core::Machine::step (1 samples, 1.02%)evm_core::eval::eval (1 samples, 1.02%)evm_core::eval::eval_jump (2 samples, 2.04%)e..evm_core::eval::eval_push1 (1 samples, 1.02%)evm_core::eval::eval_push2 (1 samples, 1.02%)evm_core::eval::eval_swap1 (1 samples, 1.02%)[[stack]] (9 samples, 9.18%)[[stack]]revm::journaled_state::JournaledState::sload (1 samples, 1.02%)[rust-evm-bench] (1 samples, 1.02%)evm_core::eval::eval_and (1 samples, 1.02%)[unknown] (1 samples, 1.02%)[unknown] (1 samples, 1.02%)[unknown] (1 samples, 1.02%)[unknown] (1 samples, 1.02%)[unknown] (1 samples, 1.02%)[unknown] (1 samples, 1.02%)[unknown] (1 samples, 1.02%)[unknown] (1 samples, 1.02%)[unknown] (1 samples, 1.02%)[unknown] (1 samples, 1.02%)[unknown] (1 samples, 1.02%)[unknown] (1 samples, 1.02%)[unknown] (1 samples, 1.02%)_int_free (1 samples, 1.02%)_int_realloc (1 samples, 1.02%)alloc::raw_vec::finish_grow (1 samples, 1.02%)evm_core::eval::eval_iszero (1 samples, 1.02%)evm_core::eval::eval_push2 (1 samples, 1.02%)[unknown] (7 samples, 7.14%)[unknown]evm_gasometer::Inner::extra_check (1 samples, 1.02%)core::ptr::drop_in_place<hashbrown::map::HashMap<primitive_types::H160,revm::journaled_state::Account>> (1 samples, 1.02%)core::ptr::drop_in_place<hashbrown::raw::RawTable<(primitive_types::H160,revm::journaled_state::Account)>> (1 samples, 1.02%)<hashbrown::raw::RawTable<T,A> as core::ops::drop::Drop>::drop (1 samples, 1.02%)hashbrown::raw::RawTable<T,A>::drop_elements (1 samples, 1.02%)hashbrown::raw::Bucket<T>::drop (1 samples, 1.02%)core::ptr::mut_ptr::<impl *mut T>::drop_in_place (1 samples, 1.02%)core::ptr::drop_in_place<(primitive_types::H160,revm::journaled_state::Account)> (1 samples, 1.02%)core::ptr::drop_in_place<revm::journaled_state::Account> (1 samples, 1.02%)core::ptr::drop_in_place<revm::models::AccountInfo> (1 samples, 1.02%)core::ptr::drop_in_place<core::option::Option<revm::interpreter::bytecode::Bytecode>> (1 samples, 1.02%)core::ptr::drop_in_place<revm::interpreter::bytecode::Bytecode> (1 samples, 1.02%)core::ptr::drop_in_place<revm::interpreter::bytecode::BytecodeState> (1 samples, 1.02%)core::ptr::drop_in_place<revm::interpreter::contract::ValidJumpAddress> (1 samples, 1.02%)core::ptr::drop_in_place<alloc::sync::Arc<alloc::vec::Vec<revm::interpreter::contract::AnalysisData>>> (1 samples, 1.02%)<alloc::sync::Arc<T> as core::ops::drop::Drop>::drop (1 samples, 1.02%)core::sync::atomic::AtomicUsize::fetch_sub (1 samples, 1.02%)core::sync::atomic::atomic_sub (1 samples, 1.02%)<&mut T as revm::db::Database>::basic (2 samples, 2.04%)<..<revm::db::in_memory_db::CacheDB<ExtDB> as revm::db::Database>::basic (2 samples, 2.04%)<..revm::db::in_memory_db::DbAccount::info (2 samples, 2.04%)r..<revm::models::AccountInfo as core::clone::Clone>::clone (2 samples, 2.04%)<..<core::option::Option<T> as core::clone::Clone>::clone (2 samples, 2.04%)<..<revm::interpreter::bytecode::Bytecode as core::clone::Clone>::clone (2 samples, 2.04%)<..<revm::interpreter::bytecode::BytecodeState as core::clone::Clone>::clone (2 samples, 2.04%)<..<revm::interpreter::contract::ValidJumpAddress as core::clone::Clone>::clone (1 samples, 1.02%)<alloc::sync::Arc<T> as core::clone::Clone>::clone (1 samples, 1.02%)core::sync::atomic::AtomicUsize::fetch_add (1 samples, 1.02%)core::sync::atomic::atomic_add (1 samples, 1.02%)alloc::vec::Vec<T,A>::push (1 samples, 1.02%)core::ptr::write (1 samples, 1.02%)<revm::evm_impl::EVMImpl<GSPEC,DB,_> as revm::evm_impl::Host>::code (4 samples, 4.08%)<rev..revm::journaled_state::JournaledState::load_code (4 samples, 4.08%)revm..revm::journaled_state::JournaledState::load_account (4 samples, 4.08%)revm..hashbrown::map::HashMap<K,V,S,A>::entry (1 samples, 1.02%)hashbrown::raw::RawTable<T,A>::find (1 samples, 1.02%)hashbrown::raw::RawTableInner<A>::find_inner (1 samples, 1.02%)hashbrown::raw::sse2::Group::match_byte (1 samples, 1.02%)core::core_arch::x86::sse2::_mm_movemask_epi8 (1 samples, 1.02%)core::ptr::drop_in_place<revm::interpreter::Interpreter> (1 samples, 1.02%)core::ptr::drop_in_place<revm::interpreter::memory::Memory> (1 samples, 1.02%)core::ptr::drop_in_place<alloc::vec::Vec<u8>> (1 samples, 1.02%)core::ptr::drop_in_place<alloc::raw_vec::RawVec<u8>> (1 samples, 1.02%)<alloc::raw_vec::RawVec<T,A> as core::ops::drop::Drop>::drop (1 samples, 1.02%)<alloc::alloc::Global as core::alloc::Allocator>::deallocate (1 samples, 1.02%)alloc::alloc::dealloc (1 samples, 1.02%)__rust_dealloc (1 samples, 1.02%)revm::interpreter::Interpreter::new (1 samples, 1.02%)primitive_types::U256::overflowing_sub (1 samples, 1.02%)revm::instructions::bitwise::shr (1 samples, 1.02%)<primitive_types::U256 as core::ops::bit::Shr<T>>::shr (1 samples, 1.02%)revm::instructions::control::jump (2 samples, 2.04%)r..revm::interpreter::contract::Contract::is_valid_jump (2 samples, 2.04%)r..revm::interpreter::contract::ValidJumpAddress::is_valid (2 samples, 2.04%)r..revm::interpreter::contract::AnalysisData::is_jump (2 samples, 2.04%)r..revm::instructions::control::jumpdest (2 samples, 2.04%)r..revm::interpreter::Interpreter::add_next_gas_block (1 samples, 1.02%)revm::interpreter::contract::Contract::gas_block (1 samples, 1.02%)revm::interpreter::contract::ValidJumpAddress::gas_block (1 samples, 1.02%)<alloc::vec::Vec<T,A> as core::ops::index::Index<I>>::index (1 samples, 1.02%)core::slice::index::<impl core::ops::index::Index<I> for [T]>::index (1 samples, 1.02%)<usize as core::slice::index::SliceIndex<[T]>>::index (1 samples, 1.02%)revm::instructions::memory::mload (1 samples, 1.02%)revm::instructions::stack::dup (2 samples, 2.04%)r..revm::interpreter::stack::Stack::dup (2 samples, 2.04%)r..revm::instructions::stack::push (2 samples, 2.04%)r..revm::interpreter::stack::Stack::push_slice (2 samples, 2.04%)r..core::intrinsics::copy (1 samples, 1.02%)revm::instructions::stack::swap (4 samples, 4.08%)revm..revm::interpreter::stack::Stack::swap (4 samples, 4.08%)revm..core::ptr::swap (2 samples, 2.04%)c..core::intrinsics::copy_nonoverlapping (1 samples, 1.02%)revm::interpreter::Interpreter::run (20 samples, 20.41%)revm::interpreter::Interpreter::..revm::instructions::eval (19 samples, 19.39%)revm::instructions::evalrevm::instructions::system::callvalue (1 samples, 1.02%)revm::interpreter::stack::Stack::push_h256 (1 samples, 1.02%)primitive_types::U256::from_big_endian (1 samples, 1.02%)core::slice::<impl [T]>::copy_from_slice (1 samples, 1.02%)core::intrinsics::copy_nonoverlapping (1 samples, 1.02%)__memmove_avx_unaligned_erms (1 samples, 1.02%)[libc-2.31.so] (1 samples, 1.02%)revm::journaled_state::JournaledState::checkpoint (2 samples, 2.04%)r..alloc::vec::Vec<T,A>::push (2 samples, 2.04%)a..alloc::raw_vec::RawVec<T,A>::reserve_for_push (2 samples, 2.04%)a..alloc::raw_vec::RawVec<T,A>::grow_amortized (2 samples, 2.04%)a..alloc::raw_vec::finish_grow (2 samples, 2.04%)a..<alloc::alloc::Global as core::alloc::Allocator>::grow (2 samples, 2.04%)<..alloc::alloc::Global::grow_impl (2 samples, 2.04%)a..alloc::alloc::realloc (2 samples, 2.04%)a..__GI___libc_realloc (2 samples, 2.04%)_.._int_realloc (2 samples, 2.04%)_.._int_free (1 samples, 1.02%)revm::journaled_state::JournaledState::checkpoint_revert (1 samples, 1.02%)core::iter::traits::iterator::Iterator::for_each (1 samples, 1.02%)<core::iter::adapters::take::Take<I> as core::iter::traits::iterator::Iterator>::fold (1 samples, 1.02%)<core::iter::adapters::take::Take<I> as core::iter::traits::iterator::Iterator>::try_fold (1 samples, 1.02%)<core::iter::adapters::rev::Rev<I> as core::iter::traits::iterator::Iterator>::try_fold (1 samples, 1.02%)core::iter::traits::double_ended::DoubleEndedIterator::try_rfold (1 samples, 1.02%)<core::iter::adapters::take::Take<I> as core::iter::traits::iterator::Iterator>::try_fold::check::{{closure}} (1 samples, 1.02%)<core::iter::adapters::take::Take<I> as core::iter::traits::iterator::Iterator>::fold::ok::{{closure}} (1 samples, 1.02%)core::iter::traits::iterator::Iterator::for_each::call::{{closure}} (1 samples, 1.02%)revm::journaled_state::JournaledState::checkpoint_revert::{{closure}} (1 samples, 1.02%)revm::journaled_state::JournaledState::journal_revert (1 samples, 1.02%)hashbrown::map::HashMap<K,V,S,A>::get_mut (1 samples, 1.02%)hashbrown::map::HashMap<K,V,S,A>::get_inner_mut (1 samples, 1.02%)hashbrown::raw::RawTable<T,A>::get_mut (1 samples, 1.02%)hashbrown::raw::RawTable<T,A>::find (1 samples, 1.02%)hashbrown::raw::RawTableInner<A>::find_inner (1 samples, 1.02%)revm::evm_impl::EVMImpl<GSPEC,DB,_>::call_inner (32 samples, 32.65%)revm::evm_impl::EVMImpl<GSPEC,DB,_>::call_innerrevm::journaled_state::JournaledState::transfer (1 samples, 1.02%)hashbrown::map::HashMap<K,V,S,A>::get_mut (1 samples, 1.02%)hashbrown::map::HashMap<K,V,S,A>::get_inner_mut (1 samples, 1.02%)hashbrown::map::make_hash (1 samples, 1.02%)<primitive_types::H160 as core::hash::Hash>::hash (1 samples, 1.02%)<ahash::fallback_hash::AHasher as core::hash::Hasher>::write (1 samples, 1.02%)ahash::fallback_hash::AHasher::large_update (1 samples, 1.02%)alloc::alloc::exchange_malloc (1 samples, 1.02%)<alloc::alloc::Global as core::alloc::Allocator>::allocate (1 samples, 1.02%)alloc::alloc::Global::alloc_impl (1 samples, 1.02%)alloc::alloc::alloc (1 samples, 1.02%)__GI___libc_malloc (1 samples, 1.02%)core::iter::traits::iterator::Iterator::collect (1 samples, 1.02%)<hashbrown::map::HashMap<K,V,S,A> as core::iter::traits::collect::FromIterator<(K,V)>>::from_iter (1 samples, 1.02%)<ahash::random_state::RandomState as core::default::Default>::default (1 samples, 1.02%)ahash::random_state::RandomState::new (1 samples, 1.02%)ahash::random_state::RandomState::from_keys (1 samples, 1.02%)ahash::random_state::RandomState::from_keys::{{closure}} (1 samples, 1.02%)<ahash::fallback_hash::AHasher as core::hash::Hasher>::finish (1 samples, 1.02%)core::num::<impl u64>::rotate_left (1 samples, 1.02%)revm::evm_impl::EVMImpl<GSPEC,DB,_>::finalize (3 samples, 3.06%)rev..revm::journaled_state::JournaledState::finalize (3 samples, 3.06%)rev..core::mem::take (1 samples, 1.02%)<hashbrown::map::HashMap<K,V,S,A> as core::default::Default>::default (1 samples, 1.02%)<ahash::random_state::RandomState as core::default::Default>::default (1 samples, 1.02%)ahash::random_state::RandomState::new (1 samples, 1.02%)ahash::random_state::RandomState::from_keys (1 samples, 1.02%)ahash::random_state::RandomState::from_keys::{{closure}} (1 samples, 1.02%)<ahash::fallback_hash::AHasher as core::hash::Hasher>::finish (1 samples, 1.02%)core::num::<impl u64>::rotate_left (1 samples, 1.02%)revm::evm_impl::EVMImpl<GSPEC,DB,_>::initialization (1 samples, 1.02%)<core::iter::adapters::filter::Filter<I,P> as core::iter::traits::iterator::Iterator>::count (1 samples, 1.02%)core::iter::traits::iterator::Iterator::sum (1 samples, 1.02%)<usize as core::iter::traits::accum::Sum>::sum (1 samples, 1.02%)<core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::fold (1 samples, 1.02%)core::iter::traits::iterator::Iterator::fold (1 samples, 1.02%)core::iter::adapters::map::map_fold::{{closure}} (1 samples, 1.02%)<core::iter::adapters::filter::Filter<I,P> as core::iter::traits::iterator::Iterator>::count::to_usize::{{closure}} (1 samples, 1.02%)<revm::evm_impl::EVMImpl<GSPEC,DB,_> as revm::evm_impl::Transact>::transact (38 samples, 38.78%)<revm::evm_impl::EVMImpl<GSPEC,DB,_> as revm::evm_impl::Transac..revm::journaled_state::JournaledState::load_account (2 samples, 2.04%)r..hashbrown::map::VacantEntry<K,V,S,A>::insert (2 samples, 2.04%)h..hashbrown::raw::RawTable<T,A>::insert_entry (2 samples, 2.04%)h..hashbrown::raw::RawTable<T,A>::insert (2 samples, 2.04%)h..hashbrown::raw::RawTable<T,A>::reserve (2 samples, 2.04%)h..hashbrown::raw::RawTable<T,A>::reserve_rehash (2 samples, 2.04%)h..hashbrown::raw::RawTableInner<A>::reserve_rehash_inner (2 samples, 2.04%)h..hashbrown::raw::RawTableInner<A>::resize_inner (2 samples, 2.04%)h..hashbrown::raw::RawTableInner<A>::prepare_resize (2 samples, 2.04%)h..hashbrown::raw::RawTableInner<A>::fallible_with_capacity (2 samples, 2.04%)h..hashbrown::raw::RawTableInner<A>::new_uninitialized (2 samples, 2.04%)h..hashbrown::raw::alloc::inner::do_alloc (2 samples, 2.04%)h..<hashbrown::raw::alloc::inner::Global as hashbrown::raw::alloc::inner::Allocator>::allocate (2 samples, 2.04%)<..alloc::alloc::alloc (2 samples, 2.04%)a..__GI___libc_malloc (2 samples, 2.04%)_.._int_malloc (2 samples, 2.04%)_..malloc_consolidate (2 samples, 2.04%)m..core::ptr::drop_in_place<alloc::boxed::Box<dyn revm::evm_impl::Transact>> (1 samples, 1.02%)__GI___libc_free (1 samples, 1.02%)rust_evm_bench::bench_revm (41 samples, 41.84%)rust_evm_bench::bench_revmmicrobench::bench (41 samples, 41.84%)microbench::benchmicrobench::bench_impl (41 samples, 41.84%)microbench::bench_implmicrobench::bench::{{closure}} (41 samples, 41.84%)microbench::bench::{{closure}}microbench::measure (41 samples, 41.84%)microbench::measuremicrobench::measure_impl (41 samples, 41.84%)microbench::measure_implcore::iter::traits::iterator::Iterator::collect (41 samples, 41.84%)core::iter::traits::iterator::Iterator::collect<alloc::vec::Vec<T> as core::iter::traits::collect::FromIterator<T>>::from_iter (41 samples, 41.84%)<alloc::vec::Vec<T> as core::iter::traits::collect::FromIterator<T>>..<alloc::vec::Vec<T> as alloc::vec::spec_from_iter::SpecFromIter<T,I>>::from_iter (41 samples, 41.84%)<alloc::vec::Vec<T> as alloc::vec::spec_from_iter::SpecFromIter<T,I>..<alloc::vec::Vec<T> as alloc::vec::spec_from_iter_nested::SpecFromIterNested<T,I>>::from_iter (41 samples, 41.84%)<alloc::vec::Vec<T> as alloc::vec::spec_from_iter_nested::SpecFromIt..<alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<T,I>>::spec_extend (41 samples, 41.84%)<alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<T,I>>::..alloc::vec::Vec<T,A>::extend_desugared (41 samples, 41.84%)alloc::vec::Vec<T,A>::extend_desugared<core::iter::adapters::filter_map::FilterMap<I,F> as core::iter::traits::iterator::Iterator>::next (41 samples, 41.84%)<core::iter::adapters::filter_map::FilterMap<I,F> as core::iter::tra..core::iter::traits::iterator::Iterator::find_map (41 samples, 41.84%)core::iter::traits::iterator::Iterator::find_map<core::iter::adapters::take_while::TakeWhile<I,P> as core::iter::traits::iterator::Iterator>::try_fold (41 samples, 41.84%)<core::iter::adapters::take_while::TakeWhile<I,P> as core::iter::tra..core::iter::traits::iterator::Iterator::try_fold (41 samples, 41.84%)core::iter::traits::iterator::Iterator::try_fold<core::iter::adapters::take_while::TakeWhile<I,P> as core::iter::traits::iterator::Iterator>::try_fold::check::{{closure}} (41 samples, 41.84%)<core::iter::adapters::take_while::TakeWhile<I,P> as core::iter::tra..core::iter::traits::iterator::Iterator::find_map::check::{{closure}} (41 samples, 41.84%)core::iter::traits::iterator::Iterator::find_map::check::{{closure}}core::ops::function::impls::<impl core::ops::function::FnMut<A> for &mut F>::call_mut (41 samples, 41.84%)core::ops::function::impls::<impl core::ops::function::FnMut<A> for ..microbench::measure_impl::{{closure}} (41 samples, 41.84%)microbench::measure_impl::{{closure}}microbench::measure::{{closure}} (41 samples, 41.84%)microbench::measure::{{closure}}rust_evm_bench::bench_revm::{{closure}} (41 samples, 41.84%)rust_evm_bench::bench_revm::{{closure}}revm::evm::EVM<DB>::transact (40 samples, 40.82%)revm::evm::EVM<DB>::transactrevm::evm::evm_inner (1 samples, 1.02%)<revm_precompiles::Precompiles as core::clone::Clone>::clone (1 samples, 1.02%)<hashbrown::map::HashMap<K,V,S,A> as core::clone::Clone>::clone (1 samples, 1.02%)<hashbrown::raw::RawTable<T,A> as core::clone::Clone>::clone (1 samples, 1.02%)<hashbrown::raw::RawTable<T,A> as hashbrown::raw::RawTableClone>::clone_from_spec (1 samples, 1.02%)hashbrown::raw::RawTable<T,A>::clone_from_impl (1 samples, 1.02%)hashbrown::raw::Bucket<T>::write (1 samples, 1.02%)core::ptr::mut_ptr::<impl *mut T>::write (1 samples, 1.02%)core::ptr::write (1 samples, 1.02%)core::ptr::drop_in_place<evm_runtime::Runtime> (1 samples, 1.02%)core::ptr::drop_in_place<evm_core::Machine> (1 samples, 1.02%)core::ptr::drop_in_place<evm_core::valids::Valids> (1 samples, 1.02%)core::ptr::drop_in_place<alloc::vec::Vec<bool>> (1 samples, 1.02%)core::ptr::drop_in_place<alloc::raw_vec::RawVec<bool>> (1 samples, 1.02%)<alloc::raw_vec::RawVec<T,A> as core::ops::drop::Drop>::drop (1 samples, 1.02%)<alloc::alloc::Global as core::alloc::Allocator>::deallocate (1 samples, 1.02%)alloc::alloc::dealloc (1 samples, 1.02%)__GI___libc_free (1 samples, 1.02%)<core::result::Result<T,E> as core::ops::try_trait::Try>::branch (3 samples, 3.06%)<co..evm_gasometer::Gasometer::record_dynamic_cost (1 samples, 1.02%)evm_gasometer::Inner::memory_gas (1 samples, 1.02%)<evm::executor::stack::executor::StackExecutor<S,P> as evm_runtime::handler::Handler>::pre_validate (8 samples, 8.16%)<evm::execu..evm_gasometer::static_opcode_cost (1 samples, 1.02%)evm_core::opcode::Opcode::as_usize (1 samples, 1.02%)evm_core::Machine::inspect (3 samples, 3.06%)evm..core::slice::<impl [T]>::get (2 samples, 2.04%)c..<usize as core::slice::index::SliceIndex<[T]>>::get (2 samples, 2.04%)<..evm_core::eval::eval_add (1 samples, 1.02%)primitive_types::U256::from_big_endian (1 samples, 1.02%)core::slice::<impl [T]>::copy_from_slice (1 samples, 1.02%)core::intrinsics::copy_nonoverlapping (1 samples, 1.02%)__memmove_avx_unaligned_erms (1 samples, 1.02%)evm_core::eval::eval_calldataload (3 samples, 3.06%)evm..evm_core::eval::misc::calldataload (3 samples, 3.06%)evm..core::cmp::PartialOrd::le (1 samples, 1.02%)<primitive_types::U256 as core::cmp::PartialOrd>::partial_cmp (1 samples, 1.02%)<primitive_types::U256 as core::cmp::Ord>::cmp (1 samples, 1.02%)core::iter::traits::iterator::Iterator::cmp (1 samples, 1.02%)core::iter::traits::iterator::Iterator::cmp_by (1 samples, 1.02%)core::iter::traits::iterator::Iterator::cmp::{{closure}} (1 samples, 1.02%)core::cmp::impls::<impl core::cmp::Ord for &A>::cmp (1 samples, 1.02%)core::cmp::impls::<impl core::cmp::Ord for u64>::cmp (1 samples, 1.02%)evm_core::eval::eval_jump (1 samples, 1.02%)evm_core::eval::misc::jump (1 samples, 1.02%)evm_core::eval::eval_jumpi (2 samples, 2.04%)e..evm_core::eval::misc::jumpi (2 samples, 2.04%)e..core::cmp::PartialEq::ne (2 samples, 2.04%)c..<primitive_types::H256 as core::cmp::PartialEq>::eq (2 samples, 2.04%)<..core::cmp::impls::<impl core::cmp::PartialEq<&B> for &A>::eq (2 samples, 2.04%)c..core::slice::cmp::<impl core::cmp::PartialEq<[B]> for [A]>::eq (2 samples, 2.04%)c..<[A] as core::slice::cmp::SlicePartialEq<B>>::equal (2 samples, 2.04%)<..evm_core::eval::eval_lt (1 samples, 1.02%)primitive_types::U256::from_big_endian (1 samples, 1.02%)core::slice::<impl [T]>::copy_from_slice (1 samples, 1.02%)core::intrinsics::copy_nonoverlapping (1 samples, 1.02%)__memmove_avx_unaligned_erms (1 samples, 1.02%)evm_core::memory::Memory::resize_offset (1 samples, 1.02%)<primitive_types::U256 as core::cmp::PartialEq>::eq (1 samples, 1.02%)core::array::equality::<impl core::cmp::PartialEq<[B: N]> for [A: N]>::eq (1 samples, 1.02%)<T as core::array::equality::SpecArrayEq<U,_>>::spec_eq (1 samples, 1.02%)evm_core::eval::eval_mstore (2 samples, 2.04%)e..evm_core::eval::misc::mstore (2 samples, 2.04%)e..evm_core::stack::Stack::pop (1 samples, 1.02%)alloc::vec::Vec<T,A>::pop (1 samples, 1.02%)evm::executor::stack::executor::StackExecutor<S,P>::execute (27 samples, 27.55%)evm::executor::stack::executor::StackExecuto..evm_runtime::Runtime::run (27 samples, 27.55%)evm_runtime::Runtime::runevm_core::Machine::step (15 samples, 15.31%)evm_core::Machine::stepevm_core::eval::eval (13 samples, 13.27%)evm_core::eval::evalevm_core::eval::eval_pop (3 samples, 3.06%)evm..evm_core::eval::misc::pop (2 samples, 2.04%)e..evm_core::stack::Stack::pop (2 samples, 2.04%)e..alloc::vec::Vec<T,A>::pop (2 samples, 2.04%)a..all (98 samples, 100%)rust-evm-bench (94 samples, 95.92%)rust-evm-bench_start (74 samples, 75.51%)_start__libc_start_main (74 samples, 75.51%)__libc_start_mainmain (74 samples, 75.51%)mainstd::rt::lang_start_internal (74 samples, 75.51%)std::rt::lang_start_internalstd::panic::catch_unwind (74 samples, 75.51%)std::panic::catch_unwindstd::panicking::try (74 samples, 75.51%)std::panicking::trystd::panicking::try::do_call (74 samples, 75.51%)std::panicking::try::do_callstd::rt::lang_start_internal::{{closure}} (74 samples, 75.51%)std::rt::lang_start_internal::{{closure}}std::panic::catch_unwind (74 samples, 75.51%)std::panic::catch_unwindstd::panicking::try (74 samples, 75.51%)std::panicking::trystd::panicking::try::do_call (74 samples, 75.51%)std::panicking::try::do_callcore::ops::function::impls::<impl core::ops::function::FnOnce<A> for &F>::call_once (74 samples, 75.51%)core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &F>::call_oncestd::rt::lang_start::{{closure}} (74 samples, 75.51%)std::rt::lang_start::{{closure}}std::sys_common::backtrace::__rust_begin_short_backtrace (74 samples, 75.51%)std::sys_common::backtrace::__rust_begin_short_backtracecore::ops::function::FnOnce::call_once (74 samples, 75.51%)core::ops::function::FnOnce::call_oncerust_evm_bench::main (74 samples, 75.51%)rust_evm_bench::mainrust_evm_bench::bench_rust_evm (33 samples, 33.67%)rust_evm_bench::bench_rust_evmmicrobench::bench (33 samples, 33.67%)microbench::benchmicrobench::bench_impl (33 samples, 33.67%)microbench::bench_implmicrobench::bench::{{closure}} (33 samples, 33.67%)microbench::bench::{{closure}}microbench::measure (33 samples, 33.67%)microbench::measuremicrobench::measure_impl (33 samples, 33.67%)microbench::measure_implcore::iter::traits::iterator::Iterator::collect (33 samples, 33.67%)core::iter::traits::iterator::Iterator::collect<alloc::vec::Vec<T> as core::iter::traits::collect::FromIterator<T>>::from_iter (33 samples, 33.67%)<alloc::vec::Vec<T> as core::iter::traits::collect::Fro..<alloc::vec::Vec<T> as alloc::vec::spec_from_iter::SpecFromIter<T,I>>::from_iter (33 samples, 33.67%)<alloc::vec::Vec<T> as alloc::vec::spec_from_iter::Spec..<alloc::vec::Vec<T> as alloc::vec::spec_from_iter_nested::SpecFromIterNested<T,I>>::from_iter (33 samples, 33.67%)<alloc::vec::Vec<T> as alloc::vec::spec_from_iter_neste..<alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<T,I>>::spec_extend (33 samples, 33.67%)<alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecE..alloc::vec::Vec<T,A>::extend_desugared (33 samples, 33.67%)alloc::vec::Vec<T,A>::extend_desugared<core::iter::adapters::filter_map::FilterMap<I,F> as core::iter::traits::iterator::Iterator>::next (33 samples, 33.67%)<core::iter::adapters::filter_map::FilterMap<I,F> as co..core::iter::traits::iterator::Iterator::find_map (33 samples, 33.67%)core::iter::traits::iterator::Iterator::find_map<core::iter::adapters::take_while::TakeWhile<I,P> as core::iter::traits::iterator::Iterator>::try_fold (33 samples, 33.67%)<core::iter::adapters::take_while::TakeWhile<I,P> as co..core::iter::traits::iterator::Iterator::try_fold (33 samples, 33.67%)core::iter::traits::iterator::Iterator::try_fold<core::iter::adapters::take_while::TakeWhile<I,P> as core::iter::traits::iterator::Iterator>::try_fold::check::{{closure}} (33 samples, 33.67%)<core::iter::adapters::take_while::TakeWhile<I,P> as co..core::iter::traits::iterator::Iterator::find_map::check::{{closure}} (33 samples, 33.67%)core::iter::traits::iterator::Iterator::find_map::check..core::ops::function::impls::<impl core::ops::function::FnMut<A> for &mut F>::call_mut (33 samples, 33.67%)core::ops::function::impls::<impl core::ops::function::..microbench::measure_impl::{{closure}} (33 samples, 33.67%)microbench::measure_impl::{{closure}}microbench::measure::{{closure}} (33 samples, 33.67%)microbench::measure::{{closure}}rust_evm_bench::bench_rust_evm::{{closure}} (33 samples, 33.67%)rust_evm_bench::bench_rust_evm::{{closure}}evm::executor::stack::executor::StackExecutor<S,P>::transact_call (33 samples, 33.67%)evm::executor::stack::executor::StackExecutor<S,P>::tra..evm::executor::stack::executor::StackExecutor<S,P>::call_inner (33 samples, 33.67%)evm::executor::stack::executor::StackExecutor<S,P>::cal..evm_runtime::Runtime::new (5 samples, 5.10%)evm_ru..evm_core::Machine::new (5 samples, 5.10%)evm_co..evm_core::valids::Valids::new (5 samples, 5.10%)evm_co.. \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index 02b1a6b..e8932c0 100644 --- a/src/main.rs +++ b/src/main.rs @@ -5,9 +5,10 @@ use evm::Config; use eyre::Result; use microbench::{self, Options}; use primitive_types::{H160, U256}; -use revm::{AccountInfo, Bytecode, InMemoryDB, Return, TransactTo}; +use revm::{AccountInfo, Bytecode, InMemoryDB, Return, TransactTo, LatestSpec}; use std::collections::BTreeMap; use std::str::FromStr; +use std::time::Duration; /// Contract address const OWNER_ADDR: &str = "0xf000000000000000000000000000000000000000"; @@ -22,6 +23,8 @@ const METHOD_SUCCESS_BIN: &str = const METHOD_REVERT_BIN: &str = "02067e6a00000000000000000000000000000000000000000000000000000000000000c7"; +const TEST_DURATION : Duration = Duration::from_millis(1000); + fn bench_rust_evm() -> Result<()> { let owner = H160::from_str(OWNER_ADDR)?; let contract = H160::from_str(CONTRACT_ADDR)?; @@ -70,7 +73,7 @@ fn bench_rust_evm() -> Result<()> { let method = hex::decode(METHOD_SUCCESS_BIN)?; // Microbenchmark - let bench_options = Options::default(); + let bench_options = Options::default().time(TEST_DURATION); microbench::bench( &bench_options, "execute_contract_method_success_from_rust_evm", @@ -130,14 +133,14 @@ fn bench_revm() -> Result<()> { db.insert_account_info(from, account); // Add contract account - let account = AccountInfo::new(U256::MAX, 0u64, Bytecode::new_raw(contract_bin)); + let account = AccountInfo::new(U256::MAX, 0u64, Bytecode::new_raw(contract_bin).to_analysed::()); db.insert_account_info(to, account); evm.database(db); evm.env.tx.caller = from; evm.env.tx.transact_to = TransactTo::Call(to); - let bench_options = Options::default(); + let bench_options = Options::default().time(TEST_DURATION); evm.env.tx.data = hex::decode(METHOD_SUCCESS_BIN)?.into(); microbench::bench( From fe2ca4e54079106837a7fed8b17d716228012284 Mon Sep 17 00:00:00 2001 From: rakita Date: Tue, 30 Aug 2022 01:22:09 +0200 Subject: [PATCH 3/3] use main --- Cargo.lock | 4 ++-- Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 54c19df..12dabd8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -664,7 +664,7 @@ dependencies = [ [[package]] name = "revm" version = "1.9.0" -source = "git+https://github.com/bluealloy/revm.git?branch=precomp#d8517632ae05a43d15b790c2b042426c89fbdc70" +source = "git+https://github.com/bluealloy/revm.git?branch=main#99eb1f5e74221198d3c8da883a6a73025f9f37d6" dependencies = [ "arrayref", "auto_impl 1.0.1", @@ -682,7 +682,7 @@ dependencies = [ [[package]] name = "revm_precompiles" version = "1.1.0" -source = "git+https://github.com/bluealloy/revm.git?branch=precomp#d8517632ae05a43d15b790c2b042426c89fbdc70" +source = "git+https://github.com/bluealloy/revm.git?branch=main#99eb1f5e74221198d3c8da883a6a73025f9f37d6" dependencies = [ "bytes", "hashbrown", diff --git a/Cargo.toml b/Cargo.toml index 0c1345b..e93a256 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,7 +11,7 @@ eyre = "0.6.8" hex = "0.4.3" primitive-types = { version = "0.11.1", features = ["scale-info"] } microbench = "0.5.0" -revm = { git = "https://github.com/bluealloy/revm.git", branch="precomp", features = ["serde", "hex", "with-serde"] } +revm = { git = "https://github.com/bluealloy/revm.git", branch="main", features = ["serde", "hex", "with-serde"] } bytes = "1.2.1"