commit 426ab4b095e47f480bc598e9a700952021fe0db2 Author: Cyrill Leutwiler Date: Thu Dec 7 20:37:23 2023 +0100 initial commit Signed-off-by: Cyrill Leutwiler diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..507684b --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +/target +*.dot diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..47cdc93 --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,1483 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "alloy-rlp" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc0fac0fc16baf1f63f78b47c3d24718f3619b0714076f6a02957d808d52cbef" +dependencies = [ + "arrayvec", + "bytes", + "smol_str", +] + +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "anyhow" +version = "1.0.75" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6" + +[[package]] +name = "arc-swap" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bddcadddf5e9015d310179a59bb28c4d4b9920ad0f11e8e14dbadf654890c9a6" + +[[package]] +name = "ark-ff" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b3235cc41ee7a12aaaf2c575a2ad7b46713a8a50bda2fc3b003a04845c05dd6" +dependencies = [ + "ark-ff-asm 0.3.0", + "ark-ff-macros 0.3.0", + "ark-serialize 0.3.0", + "ark-std 0.3.0", + "derivative", + "num-bigint", + "num-traits", + "paste", + "rustc_version 0.3.3", + "zeroize", +] + +[[package]] +name = "ark-ff" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec847af850f44ad29048935519032c33da8aa03340876d351dfab5660d2966ba" +dependencies = [ + "ark-ff-asm 0.4.2", + "ark-ff-macros 0.4.2", + "ark-serialize 0.4.2", + "ark-std 0.4.0", + "derivative", + "digest 0.10.7", + "itertools", + "num-bigint", + "num-traits", + "paste", + "rustc_version 0.4.0", + "zeroize", +] + +[[package]] +name = "ark-ff-asm" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db02d390bf6643fb404d3d22d31aee1c4bc4459600aef9113833d17e786c6e44" +dependencies = [ + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-ff-asm" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" +dependencies = [ + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-ff-macros" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db2fd794a08ccb318058009eefdf15bcaaaaf6f8161eb3345f907222bac38b20" +dependencies = [ + "num-bigint", + "num-traits", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-ff-macros" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" +dependencies = [ + "num-bigint", + "num-traits", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-serialize" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d6c2b318ee6e10f8c2853e73a83adc0ccb88995aa978d8a3408d492ab2ee671" +dependencies = [ + "ark-std 0.3.0", + "digest 0.9.0", +] + +[[package]] +name = "ark-serialize" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" +dependencies = [ + "ark-std 0.4.0", + "digest 0.10.7", + "num-bigint", +] + +[[package]] +name = "ark-std" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1df2c09229cbc5a028b1d70e00fdb2acee28b1055dfb5ca73eea49c5a25c4e7c" +dependencies = [ + "num-traits", + "rand", +] + +[[package]] +name = "ark-std" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" +dependencies = [ + "num-traits", + "rand", +] + +[[package]] +name = "arrayvec" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" + +[[package]] +name = "atty" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" +dependencies = [ + "hermit-abi", + "libc", + "winapi", +] + +[[package]] +name = "auto_impl" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fee3da8ef1276b0bee5dd1c7258010d8fffd31801447323115a25560e1327b89" +dependencies = [ + "proc-macro-error", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07" + +[[package]] +name = "bitvec" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" +dependencies = [ + "funty", + "radium", + "tap", + "wyz", +] + +[[package]] +name = "bumpalo" +version = "3.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" + +[[package]] +name = "byte-slice-cast" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3ac9f8b63eca6fd385229b3675f6cc0dc5c8a5c8a54a59d4f52ffd670d87b0c" + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" + +[[package]] +name = "cc" +version = "1.0.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" +dependencies = [ + "libc", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "chrono" +version = "0.4.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f2c685bad3eb3d45a01354cedb7d5faa66194d1d58ba6e267a8de788f79db38" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "js-sys", + "num-traits", + "wasm-bindgen", + "windows-targets", +] + +[[package]] +name = "clap" +version = "3.2.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ea181bf566f71cb9a5d17a59e1871af638180a18fb0035c92ae62b705207123" +dependencies = [ + "atty", + "bitflags 1.3.2", + "clap_lex", + "indexmap 1.9.3", + "strsim", + "termcolor", + "textwrap", +] + +[[package]] +name = "clap_lex" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5" +dependencies = [ + "os_str_bytes", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" + +[[package]] +name = "crunchy" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "delta_inc" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf2a164be110e755b9c25bed8c307ea847c87e1a34ec02f1893a4914ade978e5" + +[[package]] +name = "derivative" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "destructure_traitobject" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c877555693c14d2f84191cfd3ad8582790fc52b5e2274b40b59cf5f5cea25c7" + +[[package]] +name = "digest" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +dependencies = [ + "generic-array", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "crypto-common", +] + +[[package]] +name = "either" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "evmil" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa3fb41a5c2b4a373a644215b948d596060eddcddb7c8ae871dc1e4e9bc7b13a" +dependencies = [ + "clap", + "delta_inc", + "log", + "log4rs", + "ruint", +] + +[[package]] +name = "fastrlp" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "139834ddba373bbdd213dffe02c8d110508dcf1726c2be27e8d1f7d7e1856418" +dependencies = [ + "arrayvec", + "auto_impl", + "bytes", +] + +[[package]] +name = "fixed-hash" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "835c052cb0c08c1acf6ffd71c022172e18723949c8282f2b9f27efbc51e64534" +dependencies = [ + "byteorder", + "rand", + "rustc-hex", + "static_assertions", +] + +[[package]] +name = "fixedbitset" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "funty" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "getrandom" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe9006bed769170c11f845cf00c7c1e9092aeb3f268e007c3e760ac68008070f" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + +[[package]] +name = "hashbrown" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" + +[[package]] +name = "hermit-abi" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" +dependencies = [ + "libc", +] + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "humantime" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" + +[[package]] +name = "iana-time-zone" +version = "0.1.58" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8326b86b6cff230b97d0d312a6c40a60726df3332e721f72a1b035f451663b20" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows-core", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "impl-codec" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba6a270039626615617f3f36d15fc827041df3b78c439da2cadfa47455a77f2f" +dependencies = [ + "parity-scale-codec", +] + +[[package]] +name = "impl-trait-for-tuples" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11d7a9f6330b71fea57921c9b61c47ee6e84f72d394754eff6163ae67e7395eb" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", +] + +[[package]] +name = "indexmap" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" +dependencies = [ + "equivalent", + "hashbrown 0.14.3", +] + +[[package]] +name = "ir-tac" +version = "0.1.0" +dependencies = [ + "evmil", + "indexmap 2.1.0", + "petgraph", + "primitive-types", +] + +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" + +[[package]] +name = "js-sys" +version = "0.3.66" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cee9c64da59eae3b50095c18d3e74f8b73c0b86d2792824ff01bbce68ba229ca" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "libc" +version = "0.2.150" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89d92a4743f9a61002fae18374ed11e7973f530cb3a3255fb354818118b2203c" + +[[package]] +name = "libm" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" + +[[package]] +name = "linked-hash-map" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" + +[[package]] +name = "lock_api" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" +dependencies = [ + "serde", +] + +[[package]] +name = "log-mdc" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a94d21414c1f4a51209ad204c1776a3d0765002c76c6abcb602a6f09f1e881c7" + +[[package]] +name = "log4rs" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d36ca1786d9e79b8193a68d480a0907b612f109537115c6ff655a3a1967533fd" +dependencies = [ + "anyhow", + "arc-swap", + "chrono", + "derivative", + "fnv", + "humantime", + "libc", + "log", + "log-mdc", + "parking_lot", + "serde", + "serde-value", + "serde_json", + "serde_yaml", + "thiserror", + "thread-id", + "typemap-ors", + "winapi", +] + +[[package]] +name = "memchr" +version = "2.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167" + +[[package]] +name = "num-bigint" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-integer" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" +dependencies = [ + "autocfg", + "libm", +] + +[[package]] +name = "once_cell" +version = "1.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" + +[[package]] +name = "ordered-float" +version = "2.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68f19d67e5a2795c94e73e0bb1cc1a7edeb2e28efd39e2e1c9b7a40c1108b11c" +dependencies = [ + "num-traits", +] + +[[package]] +name = "os_str_bytes" +version = "6.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2355d85b9a3786f481747ced0e0ff2ba35213a1f9bd406ed906554d7af805a1" + +[[package]] +name = "parity-scale-codec" +version = "3.6.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "881331e34fa842a2fb61cc2db9643a8fedc615e47cfcc52597d1af0db9a7e8fe" +dependencies = [ + "arrayvec", + "bitvec", + "byte-slice-cast", + "impl-trait-for-tuples", + "parity-scale-codec-derive", + "serde", +] + +[[package]] +name = "parity-scale-codec-derive" +version = "3.6.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be30eaf4b0a9fba5336683b38de57bb86d179a35862ba6bfcf57625d006bde5b" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "parking_lot" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-targets", +] + +[[package]] +name = "paste" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" + +[[package]] +name = "pest" +version = "2.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae9cee2a55a544be8b89dc6848072af97a20f2422603c10865be2a42b580fff5" +dependencies = [ + "memchr", + "thiserror", + "ucd-trie", +] + +[[package]] +name = "petgraph" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" +dependencies = [ + "fixedbitset", + "indexmap 2.1.0", +] + +[[package]] +name = "ppv-lite86" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" + +[[package]] +name = "primitive-types" +version = "0.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b34d9fd68ae0b74a41b21c03c2f62847aa0ffea044eee893b4c140b37e244e2" +dependencies = [ + "fixed-hash", + "impl-codec", + "uint", +] + +[[package]] +name = "proc-macro-crate" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e8366a6159044a37876a2b9817124296703c586a5c92e2c53751fa06d8d43e8" +dependencies = [ + "toml_edit", +] + +[[package]] +name = "proc-macro-error" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "syn 1.0.109", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2", + "quote", + "version_check", +] + +[[package]] +name = "proc-macro2" +version = "1.0.70" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39278fbbf5fb4f646ce651690877f89d1c5811a3d4acb27700c1cb3cdb78fd3b" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "proptest" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31b476131c3c86cb68032fdc5cb6d5a1045e3e42d96b69fa599fd77701e1f5bf" +dependencies = [ + "bitflags 2.4.1", + "lazy_static", + "num-traits", + "rand", + "rand_chacha", + "rand_xorshift", + "regex-syntax", + "unarray", +] + +[[package]] +name = "quote" +version = "1.0.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "radium" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom", +] + +[[package]] +name = "rand_xorshift" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d25bf25ec5ae4a3f1b92f929810509a2f53d7dca2f50b794ff57e3face536c8f" +dependencies = [ + "rand_core", +] + +[[package]] +name = "redox_syscall" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" +dependencies = [ + "bitflags 1.3.2", +] + +[[package]] +name = "regex-syntax" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" + +[[package]] +name = "revive" +version = "0.1.0" +dependencies = [ + "evmil", + "hex", + "ir-tac", +] + +[[package]] +name = "rlp" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb919243f34364b6bd2fc10ef797edbfa75f33c252e7998527479c6d6b47e1ec" +dependencies = [ + "bytes", + "rustc-hex", +] + +[[package]] +name = "ruint" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "608a5726529f2f0ef81b8fde9873c4bb829d6b5b5ca6be4d97345ddf0749c825" +dependencies = [ + "alloy-rlp", + "ark-ff 0.3.0", + "ark-ff 0.4.2", + "bytes", + "fastrlp", + "num-bigint", + "num-traits", + "parity-scale-codec", + "primitive-types", + "proptest", + "rand", + "rlp", + "ruint-macro", + "serde", + "valuable", + "zeroize", +] + +[[package]] +name = "ruint-macro" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e666a5496a0b2186dbcd0ff6106e29e093c15591bde62c20d3842007c6978a09" + +[[package]] +name = "rustc-hex" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e75f6a532d0fd9f7f13144f392b6ad56a32696bfcd9c78f797f16bbb6f072d6" + +[[package]] +name = "rustc_version" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0dfe2087c51c460008730de8b57e6a320782fbfb312e1f4d520e6c6fae155ee" +dependencies = [ + "semver 0.11.0", +] + +[[package]] +name = "rustc_version" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +dependencies = [ + "semver 1.0.20", +] + +[[package]] +name = "ryu" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741" + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "semver" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6" +dependencies = [ + "semver-parser", +] + +[[package]] +name = "semver" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "836fa6a3e1e547f9a2c4040802ec865b5d85f4014efe00555d7090a3dcaa1090" + +[[package]] +name = "semver-parser" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0bef5b7f9e0df16536d3961cfb6e84331c065b4066afb39768d0e319411f7" +dependencies = [ + "pest", +] + +[[package]] +name = "serde" +version = "1.0.193" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25dd9975e68d0cb5aa1120c288333fc98731bd1dd12f561e468ea4728c042b89" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde-value" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3a1a3341211875ef120e117ea7fd5228530ae7e7036a779fdc9117be6b3282c" +dependencies = [ + "ordered-float", + "serde", +] + +[[package]] +name = "serde_derive" +version = "1.0.193" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43576ca501357b9b071ac53cdc7da8ef0cbd9493d8df094cd821777ea6e894d3" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "serde_json" +version = "1.0.108" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serde_yaml" +version = "0.8.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "578a7433b776b56a35785ed5ce9a7e777ac0598aac5a6dd1b4b18a307c7fc71b" +dependencies = [ + "indexmap 1.9.3", + "ryu", + "serde", + "yaml-rust", +] + +[[package]] +name = "smallvec" +version = "1.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970" + +[[package]] +name = "smol_str" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74212e6bbe9a4352329b2f68ba3130c15a3f26fe88ff22dbdc6cdd58fa85e99c" +dependencies = [ + "serde", +] + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.39" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23e78b90f2fcf45d3e842032ce32e3f2d1545ba6636271dcbf24fa306d87be7a" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "tap" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" + +[[package]] +name = "termcolor" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff1bc3d3f05aff0403e8ac0d92ced918ec05b666a43f83297ccef5bea8a3d449" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "textwrap" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d" + +[[package]] +name = "thiserror" +version = "1.0.50" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9a7210f5c9a7156bb50aa36aed4c95afb51df0df00713949448cf9e97d382d2" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.50" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "266b2e40bc00e5a6c09c3584011e08b06f123c00362c92b975ba9843aaaa14b8" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "thread-id" +version = "4.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0ec81c46e9eb50deaa257be2f148adf052d1fb7701cfd55ccfab2525280b70b" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "toml_datetime" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" + +[[package]] +name = "toml_edit" +version = "0.20.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70f427fce4d84c72b5b732388bf4a9f4531b53f74e2887e3ecb2481f68f66d81" +dependencies = [ + "indexmap 2.1.0", + "toml_datetime", + "winnow", +] + +[[package]] +name = "typemap-ors" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a68c24b707f02dd18f1e4ccceb9d49f2058c2fb86384ef9972592904d7a28867" +dependencies = [ + "unsafe-any-ors", +] + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "ucd-trie" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed646292ffc8188ef8ea4d1e0e0150fb15a5c2e12ad9b8fc191ae7a8a7f3c4b9" + +[[package]] +name = "uint" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76f64bba2c53b04fcab63c01a7d7427eadc821e3bc48c34dc9ba29c501164b52" +dependencies = [ + "byteorder", + "crunchy", + "hex", + "static_assertions", +] + +[[package]] +name = "unarray" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94" + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "unsafe-any-ors" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0a303d30665362d9680d7d91d78b23f5f899504d4f08b3c4cf08d055d87c0ad" +dependencies = [ + "destructure_traitobject", +] + +[[package]] +name = "valuable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasm-bindgen" +version = "0.2.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ed0d4f68a3015cc185aff4db9506a015f4b96f95303897bfa23f846db54064e" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b56f625e64f3a1084ded111c4d5f477df9f8c92df113852fa5a374dbda78826" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn 2.0.39", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0162dbf37223cd2afce98f3d0785506dcb8d266223983e4b5b525859e6e182b2" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0eb82fcb7930ae6219a7ecfd55b217f5f0893484b7a13022ebb2b2bf20b5283" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ab9b36309365056cd639da3134bf87fa8f3d86008abf99e612384a6eecd459f" + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596" +dependencies = [ + "winapi", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows-core" +version = "0.51.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1f8cf84f35d2db49a46868f947758c7a1138116f7fac3bc844f43ade1292e64" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "winnow" +version = "0.5.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "829846f3e3db426d4cee4510841b71a8e58aa2a76b1132579487ae430ccd9c7b" +dependencies = [ + "memchr", +] + +[[package]] +name = "wyz" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" +dependencies = [ + "tap", +] + +[[package]] +name = "yaml-rust" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85" +dependencies = [ + "linked-hash-map", +] + +[[package]] +name = "zeroize" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" +dependencies = [ + "zeroize_derive", +] + +[[package]] +name = "zeroize_derive" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..56ca25e --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,14 @@ +[workspace] +resolver = "2" + +members = [ + "crates/ir-tac", + "crates/cli", +] + +[workspace.dependencies] +evmil = "0.4" +hex = "0.4" +petgraph = "0.6" +primitive-types = "0.12" +indexmap = "2.1.0" \ No newline at end of file diff --git a/crates/cli/Cargo.toml b/crates/cli/Cargo.toml new file mode 100644 index 0000000..980e2f6 --- /dev/null +++ b/crates/cli/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "revive" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +hex = { workspace = true } +evmil = { workspace = true } +ir-tac = { path = "../ir-tac" } \ No newline at end of file diff --git a/crates/cli/src/main.rs b/crates/cli/src/main.rs new file mode 100644 index 0000000..3792ed1 --- /dev/null +++ b/crates/cli/src/main.rs @@ -0,0 +1,14 @@ +use evmil::bytecode::Disassemble; +use ir_tac::cfg::{BasicBlockFormatOption, Program}; + +fn main() { + let hexcode = std::fs::read_to_string(std::env::args().nth(1).unwrap()).unwrap(); + let bytecode = hex::decode(hexcode.trim()).unwrap(); + let instructions = bytecode.disassemble(); + + //for instruction in instructions.iter() { + // println!("{instruction:?}"); + //} + + Program::new(instructions).dot(BasicBlockFormatOption::ByteCode); +} diff --git a/crates/ir-tac/Cargo.toml b/crates/ir-tac/Cargo.toml new file mode 100644 index 0000000..7e54269 --- /dev/null +++ b/crates/ir-tac/Cargo.toml @@ -0,0 +1,12 @@ +[package] +name = "ir-tac" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +evmil = { workspace = true } +petgraph = { workspace = true } +primitive-types = { workspace = true } +indexmap = { workspace = true } \ No newline at end of file diff --git a/crates/ir-tac/src/address.rs b/crates/ir-tac/src/address.rs new file mode 100644 index 0000000..61dee2e --- /dev/null +++ b/crates/ir-tac/src/address.rs @@ -0,0 +1,58 @@ +use primitive_types::U256; + +#[derive(Clone, Copy)] +pub enum Kind { + Constant(U256), + Temporary(usize), + Stack, +} + +#[derive(Clone, Copy)] +pub struct Address { + pub kind: Kind, + pub type_hint: Option, +} + +impl From<(Kind, Option)> for Address { + fn from(value: (Kind, Option)) -> Self { + Self { + kind: value.0, + type_hint: value.1, + } + } +} + +impl Address { + pub fn new(kind: Kind, type_hint: Option) -> Self { + Self { kind, type_hint } + } +} + +#[derive(Clone, Copy)] +pub enum Type { + Int { size: u8 }, + Bytes { size: u8 }, + Bool, +} + +impl Type { + pub fn int(size: u8) -> Self { + Self::Int { size } + } + + fn bytes(size: u8) -> Self { + Self::Bytes { size } + } +} + +impl Default for Type { + fn default() -> Self { + Type::Int { size: 32 } + } +} + +pub enum LinearMemory { + CallData, + Memory, + ReturnData, +} diff --git a/crates/ir-tac/src/cfg.rs b/crates/ir-tac/src/cfg.rs new file mode 100644 index 0000000..5e0b913 --- /dev/null +++ b/crates/ir-tac/src/cfg.rs @@ -0,0 +1,216 @@ +use std::fmt::Write; +use std::ops::Range; + +use evmil::bytecode; +use petgraph::{ + dot::{Config, Dot}, + graph::DiGraph, + stable_graph::NodeIndex, +}; + +use crate::{ + instruction::{self, Instruction}, + symbol::SymbolTable, +}; + +#[derive(Clone, Debug)] +pub struct EvmInstruction { + pub bytecode_offset: usize, + pub instruction: bytecode::Instruction, +} + +#[derive(Debug, Default)] +pub struct BasicBlock { + pub entry: Option, + pub opcodes: Range, + pub instructions: Vec, +} + +#[derive(Clone, Copy, Default)] +pub enum BasicBlockFormatOption { + ByteCode, + Ir, + #[default] + None, +} + +impl BasicBlock { + fn format(&self, evm_bytecode: &[EvmInstruction], options: BasicBlockFormatOption) -> String { + let offset = evm_bytecode[self.opcodes.start].bytecode_offset; + let start = if let Some(Entry::Start) = self.entry { + "Start\n".to_string() + } else { + String::new() + }; + let instructions = match options { + BasicBlockFormatOption::ByteCode => evm_bytecode[self.opcodes.start..self.opcodes.end] + .iter() + .fold(String::new(), |mut acc, opcode| { + writeln!(&mut acc, "{:?}", opcode.instruction).unwrap(); + acc + }), + _ => String::new(), + }; + + format!("{start}Offset: 0x{offset:02x}\n---\n{instructions}") + } +} + +#[derive(Clone, Debug)] +pub enum Entry { + Start, + Jumpdest(NodeIndex), + Else(NodeIndex), +} + +#[derive(Debug)] +pub enum Jump { + Direct, + Indirect, +} + +pub struct Program { + pub evm_instructions: Vec, + pub cfg: DiGraph, + pub symbol_table: SymbolTable, +} + +impl Program { + pub fn new(bytecode: Vec) -> Self { + let mut cfg = DiGraph::new(); + let mut symbol_table = SymbolTable::default(); + let mut evm_instructions = Vec::with_capacity(bytecode.len()); + + let mut current_block = Some(BasicBlock { + entry: Some(Entry::Start), + ..Default::default() + }); + let mut bytecode_offset = 0; + + for (index, opcode) in bytecode.iter().enumerate() { + evm_instructions.push(EvmInstruction { + bytecode_offset, + instruction: opcode.clone(), + }); + bytecode_offset += opcode.length(); + + let instructions = instruction::translate(opcode, &mut symbol_table); + + use bytecode::Instruction::*; + match opcode { + JUMPDEST => { + // If we are already in a bb, conclude it + let entry = current_block.take().map(|mut node| { + node.opcodes.end = index + 1; + let entry = node.entry.clone(); + let node_index = cfg.add_node(node); + + // If the block had an entry, add an edge from the previous block to it + if let Some(Entry::Else(incoming)) | Some(Entry::Jumpdest(incoming)) = entry + { + cfg.add_edge(incoming, node_index, Jump::Direct); + } + node_index + }); + + // JUMPDEST implicitly starts a new bb + current_block = Some(BasicBlock { + entry: entry.map(Entry::Jumpdest), + opcodes: Range { + start: index + 1, + end: index + 1, + }, + ..Default::default() + }); + } + + JUMP | STOP | RETURN | REVERT | INVALID => { + // Conclude this bb; if we are not already in a bb we must create a new one + let mut node = current_block.take().unwrap_or_else(|| BasicBlock { + opcodes: Range { + start: index, + end: index + 1, + }, + ..Default::default() + }); + node.instructions.extend(instructions); + node.opcodes.end = index + 1; + + let entry = node.entry.clone(); + let node_index = cfg.add_node(node); + + // If the block had an entry, add an edge from the previous block to it + if let Some(Entry::Else(incoming)) | Some(Entry::Jumpdest(incoming)) = entry { + cfg.add_edge(incoming, node_index, Jump::Direct); + } + } + + JUMPI => { + // Conclude this bb; if we are not already in a bb we must create a new one + let mut node = current_block.take().unwrap_or_else(|| BasicBlock { + opcodes: Range { + start: index, + end: index + 1, + }, + ..Default::default() + }); + node.instructions.extend(instructions); + node.opcodes.end = index + 1; + + let entry = node.entry.clone(); + let node_index = cfg.add_node(node); + + // If the block had an entry, add an edge from the previous block to it + if let Some(Entry::Else(incoming)) | Some(Entry::Jumpdest(incoming)) = entry { + cfg.add_edge(incoming, node_index, Jump::Direct); + } + + // JUMPI implicitly starts a new bb for the else branch + current_block = Some(BasicBlock { + entry: Some(Entry::Else(node_index)), + opcodes: Range { + start: index + 1, + end: index + 1, + }, + ..Default::default() + }); + } + + _ => current_block + .get_or_insert(BasicBlock { + opcodes: Range { + start: index, + end: index + 1, + }, + ..Default::default() + }) + .instructions + .extend(instructions), + } + } + + Self { + evm_instructions, + cfg, + symbol_table, + } + } + + pub fn dot(&self, format_options: BasicBlockFormatOption) { + let get_node_attrs = move |_, (_, node): (_, &BasicBlock)| { + format!( + "label = \"{}\"", + node.format(&self.evm_instructions, format_options) + ) + }; + + let dot = Dot::with_attr_getters( + &self.cfg, + &[Config::EdgeNoLabel, Config::NodeNoLabel], + &|_, edge| format!("label = \"{:?}\"", edge.weight()), + &get_node_attrs, + ); + + println!("{dot:?}"); + } +} diff --git a/crates/ir-tac/src/instruction.rs b/crates/ir-tac/src/instruction.rs new file mode 100644 index 0000000..94f2ad5 --- /dev/null +++ b/crates/ir-tac/src/instruction.rs @@ -0,0 +1,321 @@ +use evmil::bytecode::Instruction as EvmInstruction; +use primitive_types::U256; + +use crate::symbol::{Global, Symbol, SymbolTable, Type}; + +#[derive(PartialEq, Debug)] +pub enum Instruction { + /// `x = y op z` + BinaryAssign { + x: Symbol, + y: Symbol, + operator: Operator, + z: Symbol, + }, + + /// `x = op y` + UnaryAssign { + x: Symbol, + y: Symbol, + operator: Operator, + }, + + /// `branch target` + UncoditionalBranch { target: Symbol }, + + /// `branch target if condition` + ConditionalBranch { condition: Symbol, target: Symbol }, + + /// `call(label, n)` + Procedure { + symbol: Global, + parameters: Vec, + }, + + /// `x = call(label, n)` + Function { + symbol: Global, + x: Symbol, + args: Vec, + }, + + /// `x = y` + Copy { x: Symbol, y: Symbol }, + + /// `x[index] = y` + IndexedAssign { x: Symbol, index: Symbol, y: Symbol }, + + /// `x = y[index]` + IndexedCopy { x: Symbol, y: Symbol, index: Symbol }, +} + +#[derive(PartialEq, Debug)] +pub enum Operator { + Add, + Mul, + Sub, + Div, + SDiv, + Mod, + SMod, + AddMod, + MulMod, + Exp, + SignExtend, + + LessThat, + GreaterThan, + SignedLessThan, + SignedGreaterThan, + Eq, + IsZero, + + And, + Or, + Xor, + Not, + Byte, + ShiftLeft, + ShiftRight, + ShiftArithmeticRight, +} + +struct StackPop { + decrement: Instruction, + load: Instruction, +} + +/// Pop a value from the stack. +/// +/// Returns 2 `Instruction`: Decrementing the stack pointer and the value copy. +fn stack_pop(symbol_table: &mut SymbolTable) -> StackPop { + let decrement = decrement_stack_height(symbol_table); + + let load = Instruction::IndexedCopy { + x: symbol_table.temporary(None), + y: symbol_table.global(Global::Stack), + index: symbol_table.global(Global::StackHeight), + }; + + StackPop { decrement, load } +} + +/// Decrease the stack height by one. +fn decrement_stack_height(symbol_table: &mut SymbolTable) -> Instruction { + Instruction::BinaryAssign { + x: symbol_table.global(Global::StackHeight), + y: symbol_table.global(Global::StackHeight), + operator: Operator::Sub, + z: symbol_table.constant(U256::one(), Some(Type::Int(4))), + } +} + +struct StackPush { + assign: Instruction, + increment: Instruction, +} + +/// Push a `value` to the stack. +/// +/// Returns 2 `Instruction`: the value assign and the stack height increase. +fn stack_push(symbol_table: &mut SymbolTable, value: Symbol) -> StackPush { + let assign = Instruction::IndexedAssign { + x: symbol_table.global(Global::Stack), + index: symbol_table.global(Global::StackHeight), + y: value, + }; + let increment = increment_stack_height(symbol_table); + + StackPush { assign, increment } +} + +/// Increment the stack height by one. +fn increment_stack_height(symbol_table: &mut SymbolTable) -> Instruction { + Instruction::BinaryAssign { + x: symbol_table.global(Global::StackHeight), + y: symbol_table.global(Global::StackHeight), + operator: Operator::Add, + z: symbol_table.constant(U256::one(), Some(Type::Int(4))), + } +} + +impl Instruction { + fn target_address(&self) -> Symbol { + match self { + Instruction::Copy { x, .. } => *x, + Instruction::IndexedAssign { x, .. } => *x, + Instruction::IndexedCopy { x, .. } => *x, + _ => unreachable!(), + } + } +} + +/// Lower an EVM instruction into corresponding 3AC instructions. +pub fn translate(opcode: &EvmInstruction, symbol_table: &mut SymbolTable) -> Vec { + use EvmInstruction::*; + match opcode { + JUMPDEST => Vec::new(), + + PUSH(bytes) => { + let type_hint = Some(Type::Bytes(bytes.len())); + let value = symbol_table.constant(U256::from_big_endian(bytes), type_hint); + let push = stack_push(symbol_table, value); + + vec![push.assign, push.increment] + } + + POP => vec![decrement_stack_height(symbol_table)], + + MSTORE => { + let offset = stack_pop(symbol_table); + let value = stack_pop(symbol_table); + + let store = Instruction::IndexedAssign { + x: symbol_table.global(Global::Memory), + index: offset.load.target_address(), + y: value.load.target_address(), + }; + + vec![ + offset.decrement, + offset.load, + value.decrement, + value.load, + store, + ] + } + + JUMP => { + let target = stack_pop(symbol_table); + + let jump = Instruction::UncoditionalBranch { + target: target.load.target_address(), + }; + + vec![target.decrement, target.load, jump] + } + + RETURN => { + let offset = stack_pop(symbol_table); + let size = stack_pop(symbol_table); + + let procedure = Instruction::Procedure { + symbol: Global::Return, + parameters: vec![offset.load.target_address(), size.load.target_address()], + }; + + vec![ + offset.decrement, + offset.load, + size.decrement, + size.load, + procedure, + ] + } + + CALLDATACOPY => { + let destination_offset = stack_pop(symbol_table); + let offset = stack_pop(symbol_table); + let size = stack_pop(symbol_table); + + let parameters = vec![ + destination_offset.load.target_address(), + offset.load.target_address(), + size.load.target_address(), + ]; + + let procedure = Instruction::Procedure { + symbol: Global::MemoryCopy, + parameters, + }; + + vec![ + destination_offset.decrement, + destination_offset.load, + offset.decrement, + offset.load, + size.decrement, + size.load, + procedure, + ] + } + + CALLDATALOAD => { + let index = stack_pop(symbol_table); + + let value = Instruction::IndexedCopy { + x: symbol_table.temporary(None), + y: symbol_table.global(Global::CallData), + index: index.load.target_address(), + }; + + let push = stack_push(symbol_table, value.target_address()); + + vec![ + index.decrement, + index.load, + value, + push.assign, + push.increment, + ] + } + + //_ => todo!("{opcode}"), + _ => Vec::new(), + } +} + +#[cfg(test)] +mod tests { + use evmil::bytecode; + use primitive_types::U256; + + use crate::{ + instruction::Operator, + symbol::{Global, Kind, Symbol, Type}, + }; + + use super::Instruction; + + #[test] + fn lower_push_works() { + let mut symbol_table = Default::default(); + + let opcode = bytecode::Instruction::PUSH(vec![0x01]); + let result = super::translate(&opcode, &mut symbol_table); + + let expected = vec![ + Instruction::IndexedAssign { + x: Symbol { + kind: Kind::Label(Global::Stack), + type_hint: Type::Word, + }, + index: Symbol { + kind: Kind::Label(Global::StackHeight), + type_hint: Type::Int(4), + }, + y: Symbol { + kind: Kind::Constant(U256::one()), + type_hint: Type::Bytes(1), + }, + }, + Instruction::BinaryAssign { + x: Symbol { + kind: Kind::Label(Global::StackHeight), + type_hint: Type::Int(4), + }, + y: Symbol { + kind: Kind::Label(Global::StackHeight), + type_hint: Type::Int(4), + }, + operator: Operator::Add, + z: Symbol { + kind: Kind::Constant(U256::one()), + type_hint: Type::Int(4), + }, + }, + ]; + + assert_eq!(expected, result); + } +} diff --git a/crates/ir-tac/src/lib.rs b/crates/ir-tac/src/lib.rs new file mode 100644 index 0000000..c0bd695 --- /dev/null +++ b/crates/ir-tac/src/lib.rs @@ -0,0 +1,10 @@ +pub mod cfg; +pub mod instruction; +pub mod symbol; + +#[cfg(test)] +mod tests { + + #[test] + fn it_works() {} +} diff --git a/crates/ir-tac/src/symbol.rs b/crates/ir-tac/src/symbol.rs new file mode 100644 index 0000000..46e2aab --- /dev/null +++ b/crates/ir-tac/src/symbol.rs @@ -0,0 +1,143 @@ +use indexmap::IndexSet; +use primitive_types::U256; + +#[derive(Debug, PartialEq, Eq, Hash, Clone, Copy)] +pub enum Kind { + Constant(U256), + Temporary(usize), + Label(Global), +} + +impl Kind { + pub fn from_be_bytes(bytes: &[u8]) -> Self { + Self::Constant(U256::from_big_endian(bytes)) + } +} + +#[derive(Debug, PartialEq, Eq, Hash, Clone, Copy)] +pub struct Symbol { + pub kind: Kind, + pub type_hint: Type, +} + +impl Symbol { + fn global(symbol: Global) -> Self { + let type_hint = match symbol { + Global::StackHeight => Type::Int(4), + _ => Default::default(), + }; + + Self::new(Kind::Label(symbol), type_hint) + } + + fn new(kind: Kind, type_hint: Type) -> Self { + Self { kind, type_hint } + } +} + +#[derive(Debug, PartialEq, Eq, Hash, Default, Clone, Copy)] +pub enum Type { + #[default] + Word, + Int(usize), + Bytes(usize), + Bool, +} + +impl Type { + pub fn pointer() -> Self { + Self::Int(4) + } +} + +#[derive(Debug, PartialEq, Eq, Hash, Clone, Copy)] +pub enum Global { + /// Pointer + Stack, + /// Stack height variable + StackHeight, + + /// Pointer + CallData, + /// Pointer + Memory, + /// Pointer + ReturnData, + + /// Low level `memcpy` like function + MemoryCopy, + + // EVM + Sha3, + Address, + CallDataLoad, + CallDataSize, + CallDataCopy, + CodeSize, + CodeCopy, + GasPrice, + ExtCodeSize, + ExtCodeCopy, + ReturnDataSize, + ReturnDataCopy, + ExtCodeHash, + BlockHash, + Coinbase, + Timestamp, + BlockNumber, + PrevRanDao, + GasLimit, + ChainId, + SelfBalance, + BaseFee, + SLoad, + SStore, + Gas, + Create, + Create2, + Call, + StaticCall, + DelegateCall, + CallCode, + Return, + Stop, + Revert, + SelfDestruct, + Event, +} + +#[derive(Debug, Default)] +pub struct SymbolTable { + symbols: IndexSet, + nonce: usize, +} + +impl SymbolTable { + fn next(&mut self) -> usize { + let current = self.nonce; + self.nonce += 1; + current + } + + pub fn temporary(&mut self, type_hint: Option) -> Symbol { + let id = self.next(); + let symbol = Symbol::new(Kind::Temporary(id), type_hint.unwrap_or_default()); + assert!(self.symbols.insert(symbol)); + + symbol + } + + pub fn constant(&mut self, value: U256, type_hint: Option) -> Symbol { + let symbol = Symbol::new(Kind::Constant(value), type_hint.unwrap_or_default()); + self.symbols.insert(symbol); + + symbol + } + + pub fn global(&mut self, label: Global) -> Symbol { + let symbol = Symbol::global(label); + self.symbols.insert(symbol); + + symbol + } +} diff --git a/testdata/condret.bin b/testdata/condret.bin new file mode 100644 index 0000000..e794f7b --- /dev/null +++ b/testdata/condret.bin @@ -0,0 +1 @@ +600035565b607f600052610014565b60ff6000525b60206000f3 \ No newline at end of file diff --git a/testdata/erc20.bin b/testdata/erc20.bin new file mode 100644 index 0000000..ea0f90a --- /dev/null +++ b/testdata/erc20.bin @@ -0,0 +1 @@ +608060405234801561000f575f80fd5b50600436106100f0575f3560e01c806370a082311161009357806395d89b411161006357806395d89b41146101ef578063a9059cbb146101f7578063dd62ed3e1461020a578063f2fde38b14610242575f80fd5b806370a0823114610191578063715018a6146101b957806379cc6790146101c15780638da5cb5b146101d4575f80fd5b806323b872dd116100ce57806323b872dd14610147578063313ce5671461015a57806340c10f191461016957806342966c681461017e575f80fd5b806306fdde03146100f4578063095ea7b31461011257806318160ddd14610135575b5f80fd5b6100fc610255565b604051610109919061078f565b60405180910390f35b6101256101203660046107f6565b6102e5565b6040519015158152602001610109565b6002545b604051908152602001610109565b61012561015536600461081e565b6102fe565b60405160128152602001610109565b61017c6101773660046107f6565b610321565b005b61017c61018c366004610857565b610337565b61013961019f36600461086e565b6001600160a01b03165f9081526020819052604090205490565b61017c610344565b61017c6101cf3660046107f6565b610357565b6005546040516001600160a01b039091168152602001610109565b6100fc61036c565b6101256102053660046107f6565b61037b565b61013961021836600461088e565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b61017c61025036600461086e565b610388565b606060038054610264906108bf565b80601f0160208091040260200160405190810160405280929190818152602001828054610290906108bf565b80156102db5780601f106102b2576101008083540402835291602001916102db565b820191905f5260205f20905b8154815290600101906020018083116102be57829003601f168201915b5050505050905090565b5f336102f28185856103c7565b60019150505b92915050565b5f3361030b8582856103d9565b610316858585610454565b506001949350505050565b6103296104b1565b61033382826104de565b5050565b6103413382610512565b50565b61034c6104b1565b6103555f610546565b565b6103628233836103d9565b6103338282610512565b606060048054610264906108bf565b5f336102f2818585610454565b6103906104b1565b6001600160a01b0381166103be57604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b61034181610546565b6103d48383836001610597565b505050565b6001600160a01b038381165f908152600160209081526040808320938616835292905220545f19811461044e578181101561044057604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016103b5565b61044e84848484035f610597565b50505050565b6001600160a01b03831661047d57604051634b637e8f60e11b81525f60048201526024016103b5565b6001600160a01b0382166104a65760405163ec442f0560e01b81525f60048201526024016103b5565b6103d4838383610669565b6005546001600160a01b031633146103555760405163118cdaa760e01b81523360048201526024016103b5565b6001600160a01b0382166105075760405163ec442f0560e01b81525f60048201526024016103b5565b6103335f8383610669565b6001600160a01b03821661053b57604051634b637e8f60e11b81525f60048201526024016103b5565b610333825f83610669565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b0384166105c05760405163e602df0560e01b81525f60048201526024016103b5565b6001600160a01b0383166105e957604051634a1406b160e11b81525f60048201526024016103b5565b6001600160a01b038085165f908152600160209081526040808320938716835292905220829055801561044e57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161065b91815260200190565b60405180910390a350505050565b6001600160a01b038316610693578060025f82825461068891906108f7565b909155506107039050565b6001600160a01b0383165f90815260208190526040902054818110156106e55760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016103b5565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b03821661071f5760028054829003905561073d565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161078291815260200190565b60405180910390a3505050565b5f602080835283518060208501525f5b818110156107bb5785810183015185820160400152820161079f565b505f604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b03811681146107f1575f80fd5b919050565b5f8060408385031215610807575f80fd5b610810836107db565b946020939093013593505050565b5f805f60608486031215610830575f80fd5b610839846107db565b9250610847602085016107db565b9150604084013590509250925092565b5f60208284031215610867575f80fd5b5035919050565b5f6020828403121561087e575f80fd5b610887826107db565b9392505050565b5f806040838503121561089f575f80fd5b6108a8836107db565b91506108b6602084016107db565b90509250929050565b600181811c908216806108d357607f821691505b6020821081036108f157634e487b7160e01b5f52602260045260245ffd5b50919050565b808201808211156102f857634e487b7160e01b5f52601160045260245ffdfea26469706673582212203436d2f76da96888f84c631a86a77acc02d0494c4ed226857c2872074984910064736f6c63430008170033 diff --git a/testdata/erc20_old.bin b/testdata/erc20_old.bin new file mode 100644 index 0000000..463e3a1 --- /dev/null +++ b/testdata/erc20_old.bin @@ -0,0 +1 @@ +60806040523480156200001157600080fd5b5060405162000ba338038062000ba3833981016040819052620000349162000122565b60036200004283826200021d565b5060046200005182826200021d565b505050620002e9565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200008257600080fd5b81516001600160401b03808211156200009f576200009f6200005a565b604051601f8301601f19908116603f01168101908282118183101715620000ca57620000ca6200005a565b8160405283815260209250866020858801011115620000e857600080fd5b600091505b838210156200010c5785820183015181830184015290820190620000ed565b6000602085830101528094505050505092915050565b600080604083850312156200013657600080fd5b82516001600160401b03808211156200014e57600080fd5b6200015c8683870162000070565b935060208501519150808211156200017357600080fd5b50620001828582860162000070565b9150509250929050565b600181811c90821680620001a157607f821691505b602082108103620001c257634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000218576000816000526020600020601f850160051c81016020861015620001f35750805b601f850160051c820191505b818110156200021457828155600101620001ff565b5050505b505050565b81516001600160401b038111156200023957620002396200005a565b62000251816200024a84546200018c565b84620001c8565b602080601f831160018114620002895760008415620002705750858301515b600019600386901b1c1916600185901b17855562000214565b600085815260208120601f198616915b82811015620002ba5788860151825594840194600190910190840162000299565b5085821015620002d95787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6108aa80620002f96000396000f3fe608060405234801561001057600080fd5b50600436106100b95760003560e01c80633950935111610081578063a457c2d71161005b578063a457c2d714610177578063a9059cbb1461018a578063dd62ed3e1461019d57600080fd5b8063395093511461013357806370a082311461014657806395d89b411461016f57600080fd5b806306fdde03146100be578063095ea7b3146100dc57806318160ddd146100ff57806323b872dd14610111578063313ce56714610124575b600080fd5b6100c66101d6565b6040516100d391906106f3565b60405180910390f35b6100ef6100ea36600461075e565b610268565b60405190151581526020016100d3565b6002545b6040519081526020016100d3565b6100ef61011f366004610788565b610282565b604051601281526020016100d3565b6100ef61014136600461075e565b6102a6565b6101036101543660046107c4565b6001600160a01b031660009081526020819052604090205490565b6100c66102e5565b6100ef61018536600461075e565b6102f4565b6100ef61019836600461075e565b61038b565b6101036101ab3660046107e6565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101e590610819565b80601f016020809104026020016040519081016040528092919081815260200182805461021190610819565b801561025e5780601f106102335761010080835404028352916020019161025e565b820191906000526020600020905b81548152906001019060200180831161024157829003601f168201915b5050505050905090565b600033610276818585610399565b60019150505b92915050565b6000336102908582856104bd565b61029b85858561054f565b506001949350505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490919061027690829086906102e0908790610853565b610399565b6060600480546101e590610819565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091908381101561037e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b61029b8286868403610399565b60003361027681858561054f565b6001600160a01b0383166103fb5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610375565b6001600160a01b03821661045c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610375565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114610549578181101561053c5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610375565b6105498484848403610399565b50505050565b6001600160a01b0383166105b35760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610375565b6001600160a01b0382166106155760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610375565b6001600160a01b0383166000908152602081905260409020548181101561068d5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610375565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610549565b60006020808352835180602085015260005b8181101561072157858101830151858201604001528201610705565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461075957600080fd5b919050565b6000806040838503121561077157600080fd5b61077a83610742565b946020939093013593505050565b60008060006060848603121561079d57600080fd5b6107a684610742565b92506107b460208501610742565b9150604084013590509250925092565b6000602082840312156107d657600080fd5b6107df82610742565b9392505050565b600080604083850312156107f957600080fd5b61080283610742565b915061081060208401610742565b90509250929050565b600181811c9082168061082d57607f821691505b60208210810361084d57634e487b7160e01b600052602260045260246000fd5b50919050565b8082018082111561027c57634e487b7160e01b600052601160045260246000fdfea2646970667358221220e0c480f8f9ab8a0b0406a814e61378d46c20293b7b9fbce0abb882d568bfe57b64736f6c63430008170033 diff --git a/testdata/fibonacci.bin b/testdata/fibonacci.bin new file mode 100644 index 0000000..b1d9dc7 --- /dev/null +++ b/testdata/fibonacci.bin @@ -0,0 +1 @@ +600035600160009160025b818111601c576001019180930191600a565b505060005260206000f350 diff --git a/testdata/fibonacci.evm b/testdata/fibonacci.evm new file mode 100644 index 0000000..b1d9dc7 --- /dev/null +++ b/testdata/fibonacci.evm @@ -0,0 +1 @@ +600035600160009160025b818111601c576001019180930191600a565b505060005260206000f350