From 5b698ac8fffc513221bb7ff215c83587eaeb545c Mon Sep 17 00:00:00 2001 From: Gregory Edison Date: Wed, 27 Mar 2024 13:27:32 +0100 Subject: [PATCH 1/5] update makefile --- .gitignore | 4 +- Cargo.lock | 1014 +++++++++++++++++++++++++++++++++++++++++-- Cargo.toml | 3 +- Makefile | 39 ++ rust-toolchain.toml | 2 +- 5 files changed, 1011 insertions(+), 51 deletions(-) diff --git a/.gitignore b/.gitignore index 4dc5528c4..05172e267 100644 --- a/.gitignore +++ b/.gitignore @@ -46,6 +46,8 @@ starknet-venv/ starknet_programs/cairo2/*.casm starknet_programs/cairo2/*.sierra +starknet_programs/kakarot/*.casm +starknet_programs/kakarot/*.sierra default.profraw **.DS_Store /scripts/reports @@ -56,4 +58,4 @@ lcov.info .rusty-hook.toml !/starknet_programs/raw_contract_classes/*.json cairo-*.tar -starknet-pypy-env/ \ No newline at end of file +starknet-pypy-env/ diff --git a/Cargo.lock b/Cargo.lock index b0211fd6e..2704975f9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -66,6 +66,137 @@ version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5" +[[package]] +name = "alloy-chains" +version = "0.1.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e96c81b05c893348760f232c4cc6a6a77fd91cfb09885d4eaad25cd03bd7732e" +dependencies = [ + "alloy-rlp", + "num_enum", + "serde", + "strum 0.26.2", +] + +[[package]] +name = "alloy-eips" +version = "0.1.0" +source = "git+https://github.com/alloy-rs/alloy?rev=a4453d4#a4453d42ffb755a46bace2ceca3baa454e0cd807" +dependencies = [ + "alloy-primitives", + "alloy-rlp", + "thiserror", +] + +[[package]] +name = "alloy-genesis" +version = "0.1.0" +source = "git+https://github.com/alloy-rs/alloy?rev=a4453d4#a4453d42ffb755a46bace2ceca3baa454e0cd807" +dependencies = [ + "alloy-primitives", + "alloy-rpc-types", + "serde", +] + +[[package]] +name = "alloy-primitives" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "600d34d8de81e23b6d909c094e23b3d357e01ca36b78a8c5424c501eedbe86f0" +dependencies = [ + "alloy-rlp", + "bytes", + "cfg-if", + "const-hex", + "derive_more", + "getrandom", + "hex-literal", + "itoa", + "k256", + "keccak-asm", + "proptest", + "rand", + "ruint", + "serde", + "tiny-keccak", +] + +[[package]] +name = "alloy-rlp" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d58d9f5da7b40e9bfff0b7e7816700be4019db97d4b6359fe7f94a9e22e42ac" +dependencies = [ + "alloy-rlp-derive", + "arrayvec", + "bytes", +] + +[[package]] +name = "alloy-rlp-derive" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a047897373be4bbb0224c1afdabca92648dc57a9c9ef6e7b0be3aff7a859c83" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.51", +] + +[[package]] +name = "alloy-rpc-engine-types" +version = "0.1.0" +source = "git+https://github.com/alloy-rs/alloy?rev=a4453d4#a4453d42ffb755a46bace2ceca3baa454e0cd807" +dependencies = [ + "alloy-primitives", + "alloy-rlp", + "alloy-rpc-types", + "jsonrpsee-types", + "serde", + "thiserror", +] + +[[package]] +name = "alloy-rpc-trace-types" +version = "0.1.0" +source = "git+https://github.com/alloy-rs/alloy?rev=a4453d4#a4453d42ffb755a46bace2ceca3baa454e0cd807" +dependencies = [ + "alloy-primitives", + "alloy-rpc-types", + "serde", + "serde_json", +] + +[[package]] +name = "alloy-rpc-types" +version = "0.1.0" +source = "git+https://github.com/alloy-rs/alloy?rev=a4453d4#a4453d42ffb755a46bace2ceca3baa454e0cd807" +dependencies = [ + "alloy-primitives", + "alloy-rlp", + "itertools 0.12.1", + "jsonrpsee-types", + "serde", + "serde_json", + "thiserror", +] + +[[package]] +name = "alloy-trie" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59974c3c7778ebbcd73356a430fd4608aaf0630b1fdb4f5337bfd70f40b66618" +dependencies = [ + "alloy-primitives", + "alloy-rlp", + "derive_more", + "hashbrown 0.14.3", + "nybbles", + "serde", + "smallvec", + "tracing", +] + [[package]] name = "android-tzdata" version = "0.1.1" @@ -147,10 +278,10 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "defd9a439d56ac24968cca0571f598a61bc8c55f71d50a89cda591cb750670ba" dependencies = [ - "ark-ff", + "ark-ff 0.4.2", "ark-poly", - "ark-serialize", - "ark-std", + "ark-serialize 0.4.2", + "ark-std 0.4.0", "derivative", "hashbrown 0.13.2", "itertools 0.10.5", @@ -158,26 +289,54 @@ dependencies = [ "zeroize", ] +[[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 0.2.18", + "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", - "ark-ff-macros", - "ark-serialize", - "ark-std", + "ark-ff-asm 0.4.2", + "ark-ff-macros 0.4.2", + "ark-serialize 0.4.2", + "ark-std 0.4.0", "derivative", - "digest", + "digest 0.10.7", "itertools 0.10.5", "num-bigint", "num-traits 0.2.18", "paste", - "rustc_version", + "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" @@ -188,6 +347,18 @@ dependencies = [ "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 0.2.18", + "quote", + "syn 1.0.109", +] + [[package]] name = "ark-ff-macros" version = "0.4.2" @@ -207,9 +378,9 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d320bfc44ee185d899ccbadfa8bc31aab923ce1558716e1997a1e74057fe86bf" dependencies = [ - "ark-ff", - "ark-serialize", - "ark-std", + "ark-ff 0.4.2", + "ark-serialize 0.4.2", + "ark-std 0.4.0", "derivative", "hashbrown 0.13.2", ] @@ -221,8 +392,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4c02e954eaeb4ddb29613fee20840c2bbc85ca4396d53e33837e11905363c5f2" dependencies = [ "ark-ec", - "ark-ff", - "ark-std", + "ark-ff 0.4.2", + "ark-std 0.4.0", ] [[package]] @@ -232,8 +403,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3975a01b0a6e3eae0f72ec7ca8598a6620fc72fa5981f6f5cca33b7cd788f633" dependencies = [ "ark-ec", - "ark-ff", - "ark-std", + "ark-ff 0.4.2", + "ark-std 0.4.0", +] + +[[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]] @@ -243,8 +424,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" dependencies = [ "ark-serialize-derive", - "ark-std", - "digest", + "ark-std 0.4.0", + "digest 0.10.7", "num-bigint", ] @@ -259,6 +440,16 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "ark-std" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1df2c09229cbc5a028b1d70e00fdb2acee28b1055dfb5ca73eea49c5a25c4e7c" +dependencies = [ + "num-traits 0.2.18", + "rand", +] + [[package]] name = "ark-std" version = "0.4.0" @@ -301,6 +492,16 @@ dependencies = [ "syn 2.0.51", ] +[[package]] +name = "aurora-engine-modexp" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfacad86e9e138fca0670949eb8ed4ffdf73a55bded8887efe0863cd1a3a6f70" +dependencies = [ + "hex", + "num", +] + [[package]] name = "auto_impl" version = "1.1.2" @@ -357,6 +558,15 @@ version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" +[[package]] +name = "beef" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a8241f3ebb85c056b509d4327ad0358fbbba6ffb340bf388f26350aeda225b1" +dependencies = [ + "serde", +] + [[package]] name = "bigdecimal" version = "0.3.1" @@ -459,6 +669,9 @@ name = "bitflags" version = "2.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" +dependencies = [ + "serde", +] [[package]] name = "bitvec" @@ -468,6 +681,7 @@ checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" dependencies = [ "funty", "radium", + "serde", "tap", "wyz", ] @@ -488,7 +702,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3b5acc7622f7b7af1e1df0c4065211d4665f29bbd0e658b8d21975f4a0ab6b8e" dependencies = [ "ark-ec", - "ark-ff", + "ark-ff 0.4.2", "ark-secp256k1", "ark-secp256r1", "cached", @@ -514,11 +728,23 @@ dependencies = [ "sha3", "starknet-crypto 0.5.2", "starknet_api", - "strum", - "strum_macros", + "strum 0.24.1", + "strum_macros 0.24.3", "thiserror", ] +[[package]] +name = "blst" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c94087b935a822949d3291a9989ad2b2051ea141eda0fd4e478a75f6aa3e604b" +dependencies = [ + "cc", + "glob", + "threadpool", + "zeroize", +] + [[package]] name = "bumpalo" version = "3.15.3" @@ -542,6 +768,9 @@ name = "bytes" version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" +dependencies = [ + "serde", +] [[package]] name = "bzip2" @@ -564,6 +793,20 @@ dependencies = [ "pkg-config", ] +[[package]] +name = "c-kzg" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94a4bc5367b6284358d2a6a6a1dc2d92ec4b86034561c3b9d3341909752fd848" +dependencies = [ + "blst", + "cc", + "glob", + "hex", + "libc", + "serde", +] + [[package]] name = "cached" version = "0.44.0" @@ -806,10 +1049,10 @@ version = "2.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "95ccd9dce6f931508a21ac4d29965dadcaf7c22bbf2a237239763128b8647a53" dependencies = [ - "ark-ff", + "ark-ff 0.4.2", "ark-secp256k1", "ark-secp256r1", - "ark-std", + "ark-std 0.4.0", "cairo-felt", "cairo-lang-casm", "cairo-lang-sierra", @@ -1074,7 +1317,7 @@ dependencies = [ [[package]] name = "cairo-native" version = "0.1.0" -source = "git+https://github.com/lambdaclass/cairo_native?rev=baf57d2dde0036ac4848fc40c672826fb7ffcde4#baf57d2dde0036ac4848fc40c672826fb7ffcde4" +source = "git+https://github.com/lambdaclass/cairo_native?rev=8fddcd3914badfe3f89752fe7a22befeaffc17f9#8fddcd3914badfe3f89752fe7a22befeaffc17f9" dependencies = [ "anyhow", "bumpalo", @@ -1118,7 +1361,7 @@ dependencies = [ [[package]] name = "cairo-native-runtime" version = "0.1.0" -source = "git+https://github.com/lambdaclass/cairo_native?rev=baf57d2dde0036ac4848fc40c672826fb7ffcde4#baf57d2dde0036ac4848fc40c672826fb7ffcde4" +source = "git+https://github.com/lambdaclass/cairo_native?rev=8fddcd3914badfe3f89752fe7a22befeaffc17f9#8fddcd3914badfe3f89752fe7a22befeaffc17f9" dependencies = [ "cairo-lang-runner", "lazy_static", @@ -1165,8 +1408,8 @@ version = "1.0.0-rc1" source = "git+https://github.com/lambdaclass/cairo-vm?rev=3547089579dd74f815edbc2d1caa91e00fc8a2f7#3547089579dd74f815edbc2d1caa91e00fc8a2f7" dependencies = [ "anyhow", - "ark-ff", - "ark-std", + "ark-ff 0.4.2", + "ark-std 0.4.0", "bincode 2.0.0-rc.3", "bitvec", "cairo-lang-casm", @@ -1292,6 +1535,19 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "98cc8fbded0c607b7ba9dd60cd98df59af97e84d24e49c8557331cfc26d301ce" +[[package]] +name = "codecs-derive" +version = "0.1.0-alpha.18" +source = "git+https://github.com/paradigmxyz/reth.git?tag=v0.1.0-alpha.18#11dbd0867ed020dad1c6b0763368ecd20d094056" +dependencies = [ + "convert_case 0.6.0", + "parity-scale-codec", + "proc-macro2", + "quote", + "serde", + "syn 2.0.51", +] + [[package]] name = "colorchoice" version = "1.0.0" @@ -1347,6 +1603,19 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32b13ea120a812beba79e34316b3942a857c86ec1593cb34f27bb28272ce2cca" +[[package]] +name = "const-hex" +version = "1.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ba00838774b4ab0233e355d26710fbfc8327a05c017f6dc4873f876d1f79f78" +dependencies = [ + "cfg-if", + "cpufeatures", + "hex", + "proptest", + "serde", +] + [[package]] name = "const-oid" version = "0.9.6" @@ -1434,6 +1703,21 @@ dependencies = [ "libc", ] +[[package]] +name = "crc" +version = "3.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86ec7a15cbe22e59248fc7eadb1907dab5ba09372595da4d73dd805ed4417dfe" +dependencies = [ + "crc-catalog", +] + +[[package]] +name = "crc-catalog" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" + [[package]] name = "crc32fast" version = "1.4.0" @@ -1443,6 +1727,25 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "crossbeam-deque" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +dependencies = [ + "crossbeam-utils", +] + [[package]] name = "crossbeam-utils" version = "0.8.19" @@ -1663,7 +1966,7 @@ dependencies = [ "convert_case 0.4.0", "proc-macro2", "quote", - "rustc_version", + "rustc_version 0.4.0", "syn 1.0.109", ] @@ -1679,6 +1982,15 @@ version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8" +[[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" @@ -1731,7 +2043,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" dependencies = [ "der", - "digest", + "digest 0.10.7", "elliptic-curve", "rfc6979", "signature", @@ -1764,7 +2076,7 @@ checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" dependencies = [ "base16ct", "crypto-bigint", - "digest", + "digest 0.10.7", "ff", "generic-array", "group", @@ -1826,6 +2138,17 @@ dependencies = [ "syn 2.0.51", ] +[[package]] +name = "enumn" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fd000fd6988e73bbe993ea3db9b1aa64906ab88766d654973924340c8cddb42" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.51", +] + [[package]] name = "equivalent" version = "1.0.1" @@ -1850,7 +2173,7 @@ checksum = "1fda3bf123be441da5260717e0661c25a2fd9cb2b2c1d20bf2e05580047158ab" dependencies = [ "aes", "ctr", - "digest", + "digest 0.10.7", "hex", "hmac", "pbkdf2", @@ -1907,6 +2230,17 @@ version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" +[[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 = "ff" version = "0.13.0" @@ -2205,6 +2539,15 @@ name = "hex" version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" +dependencies = [ + "serde", +] + +[[package]] +name = "hex-literal" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fe2267d4ed49bc07b63801559be28c718ea06c4738b7a03c94df7386d2cde46" [[package]] name = "hmac" @@ -2212,7 +2555,7 @@ version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" dependencies = [ - "digest", + "digest 0.10.7", ] [[package]] @@ -2233,7 +2576,7 @@ dependencies = [ "arbitrary", "lazy_static", "memmap2", - "rustc_version", + "rustc_version 0.4.0", ] [[package]] @@ -2524,6 +2867,20 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "jsonrpsee-types" +version = "0.20.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5be0be325642e850ed0bdff426674d2e66b2b7117c9be23a7caef68a2902b7d9" +dependencies = [ + "anyhow", + "beef", + "serde", + "serde_json", + "thiserror", + "tracing", +] + [[package]] name = "k256" version = "0.13.3" @@ -2548,7 +2905,17 @@ dependencies = [ ] [[package]] -name = "lalrpop" +name = "keccak-asm" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb8515fff80ed850aea4a1595f2e519c003e2a00a82fe168ebf5269196caf444" +dependencies = [ + "digest 0.10.7", + "sha3-asm", +] + +[[package]] +name = "lalrpop" version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da4081d44f4611b66c6dd725e6de3169f9f63905421e8626fcb86b6a898998b8" @@ -2632,6 +2999,12 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "libm" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" + [[package]] name = "libmimalloc-sys" version = "0.1.35" @@ -2685,7 +3058,7 @@ dependencies = [ "lazy_static", "libc", "regex-lite", - "semver", + "semver 1.0.22", ] [[package]] @@ -2867,6 +3240,27 @@ dependencies = [ "bindgen 0.68.1", ] +[[package]] +name = "modular-bitfield" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a53d79ba8304ac1c4f9eb3b9d281f21f7be9d4626f72ce7df4ad8fbde4f38a74" +dependencies = [ + "modular-bitfield-impl", + "static_assertions", +] + +[[package]] +name = "modular-bitfield-impl" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a7d5f7076603ebc68de2dc6a650ec331a062a13abaa346975be747bbfa4b789" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "ndarray" version = "0.13.1" @@ -2874,7 +3268,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac06db03ec2f46ee0ecdca1a1c34a99c0d188a0d83439b84bf0cb4b386e4ab09" dependencies = [ "matrixmultiply", - "num-complex", + "num-complex 0.2.4", "num-integer", "num-traits 0.2.18", "rawpointer", @@ -2906,6 +3300,20 @@ dependencies = [ "winapi", ] +[[package]] +name = "num" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b05180d69e3da0e530ba2a1dae5110317e49e3b7f3d41be227dc5f92e49ee7af" +dependencies = [ + "num-bigint", + "num-complex 0.4.5", + "num-integer", + "num-iter", + "num-rational", + "num-traits 0.2.18", +] + [[package]] name = "num-bigint" version = "0.4.4" @@ -2929,6 +3337,15 @@ dependencies = [ "num-traits 0.2.18", ] +[[package]] +name = "num-complex" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23c6602fda94a57c990fe0df199a035d83576b496aa29f4e634a8ac6004e68a6" +dependencies = [ + "num-traits 0.2.18", +] + [[package]] name = "num-conv" version = "0.1.0" @@ -2944,6 +3361,17 @@ dependencies = [ "num-traits 0.2.18", ] +[[package]] +name = "num-iter" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d869c01cc0c455284163fd0092f1f93835385ccab5a98a0dcc497b2f8bf055a9" +dependencies = [ + "autocfg", + "num-integer", + "num-traits 0.2.18", +] + [[package]] name = "num-modular" version = "0.5.1" @@ -2971,6 +3399,18 @@ dependencies = [ "rand", ] +[[package]] +name = "num-rational" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" +dependencies = [ + "autocfg", + "num-bigint", + "num-integer", + "num-traits 0.2.18", +] + [[package]] name = "num-traits" version = "0.1.43" @@ -2987,6 +3427,38 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da0df0e5185db44f69b44f26786fe401b6c293d1907744beaa7fa62b2e5a517a" dependencies = [ "autocfg", + "libm", +] + +[[package]] +name = "num_cpus" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +dependencies = [ + "hermit-abi", + "libc", +] + +[[package]] +name = "num_enum" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02339744ee7253741199f897151b38e72257d13802d4ee837285cc2990a90845" +dependencies = [ + "num_enum_derive", +] + +[[package]] +name = "num_enum_derive" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "681030a937600a36906c185595136d26abfebb4aa9c65701cefcaf8578bb982b" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 2.0.51", ] [[package]] @@ -2995,6 +3467,19 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" +[[package]] +name = "nybbles" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "836816c354fb2c09622b54545a6f98416147346b13cc7eba5f92fab6b3042c93" +dependencies = [ + "alloy-rlp", + "const-hex", + "proptest", + "serde", + "smallvec", +] + [[package]] name = "object" version = "0.32.2" @@ -3074,6 +3559,7 @@ dependencies = [ "arrayvec", "bitvec", "byte-slice-cast", + "bytes", "impl-trait-for-tuples", "parity-scale-codec-derive", "serde", @@ -3168,7 +3654,7 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917" dependencies = [ - "digest", + "digest 0.10.7", "hmac", "password-hash", "sha2", @@ -3195,6 +3681,17 @@ version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" +[[package]] +name = "pest" +version = "2.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56f8023d0fb78c8e03784ea1c7f3fa36e68a723138990b8d5a47d916b651e7a8" +dependencies = [ + "memchr", + "thiserror", + "ucd-trie", +] + [[package]] name = "petgraph" version = "0.6.4" @@ -3423,6 +3920,32 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "proptest" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31b476131c3c86cb68032fdc5cb6d5a1045e3e42d96b69fa599fd77701e1f5bf" +dependencies = [ + "bit-set", + "bit-vec", + "bitflags 2.4.2", + "lazy_static", + "num-traits 0.2.18", + "rand", + "rand_chacha", + "rand_xorshift", + "regex-syntax 0.8.2", + "rusty-fork", + "tempfile", + "unarray", +] + +[[package]] +name = "quick-error" +version = "1.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" + [[package]] name = "quick-xml" version = "0.31.0" @@ -3477,12 +4000,41 @@ 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 = "rawpointer" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" +[[package]] +name = "rayon" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + [[package]] name = "redox_syscall" version = "0.2.16" @@ -3629,6 +4181,148 @@ dependencies = [ "winreg", ] +[[package]] +name = "reth-codecs" +version = "0.1.0-alpha.18" +source = "git+https://github.com/paradigmxyz/reth.git?tag=v0.1.0-alpha.18#11dbd0867ed020dad1c6b0763368ecd20d094056" +dependencies = [ + "alloy-primitives", + "bytes", + "codecs-derive", +] + +[[package]] +name = "reth-ethereum-forks" +version = "0.1.0-alpha.18" +source = "git+https://github.com/paradigmxyz/reth.git?tag=v0.1.0-alpha.18#11dbd0867ed020dad1c6b0763368ecd20d094056" +dependencies = [ + "alloy-chains", + "alloy-primitives", + "alloy-rlp", + "crc", + "serde", + "thiserror", +] + +[[package]] +name = "reth-primitives" +version = "0.1.0-alpha.18" +source = "git+https://github.com/paradigmxyz/reth.git?tag=v0.1.0-alpha.18#11dbd0867ed020dad1c6b0763368ecd20d094056" +dependencies = [ + "alloy-chains", + "alloy-eips", + "alloy-genesis", + "alloy-primitives", + "alloy-rlp", + "alloy-trie", + "byteorder", + "bytes", + "cfg-if", + "derive_more", + "itertools 0.12.1", + "modular-bitfield", + "num_enum", + "nybbles", + "once_cell", + "rayon", + "reth-codecs", + "reth-ethereum-forks", + "reth-rpc-types", + "revm", + "revm-primitives", + "secp256k1 0.27.0", + "serde", + "serde_json", + "sha2", + "smallvec", + "strum 0.26.2", + "sucds", + "tempfile", + "thiserror", + "tracing", + "zstd 0.12.4", +] + +[[package]] +name = "reth-rpc-types" +version = "0.1.0-alpha.18" +source = "git+https://github.com/paradigmxyz/reth.git?tag=v0.1.0-alpha.18#11dbd0867ed020dad1c6b0763368ecd20d094056" +dependencies = [ + "alloy-primitives", + "alloy-rlp", + "alloy-rpc-engine-types", + "alloy-rpc-trace-types", + "alloy-rpc-types", + "bytes", + "itertools 0.12.1", + "jsonrpsee-types", + "secp256k1 0.27.0", + "serde", + "serde_json", + "serde_with 3.6.1", + "thiserror", + "url", +] + +[[package]] +name = "revm" +version = "5.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "266f86bdefa6dac07d92e2f5c37d7d183f2575b2f9e0ee9cba9402dfde912524" +dependencies = [ + "auto_impl", + "cfg-if", + "revm-interpreter", + "revm-precompile", + "serde", + "serde_json", +] + +[[package]] +name = "revm-interpreter" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a80b516cc706630e604e2fd47c281501d2fb222712be4328921361388b7d2df" +dependencies = [ + "revm-primitives", + "serde", +] + +[[package]] +name = "revm-precompile" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db828d49d329560a70809d9d1fa0c74695edb49f50c5332db3eb24483076deac" +dependencies = [ + "aurora-engine-modexp", + "c-kzg", + "k256", + "once_cell", + "revm-primitives", + "ripemd", + "secp256k1 0.28.2", + "sha2", + "substrate-bn", +] + +[[package]] +name = "revm-primitives" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fecd125aad58e135e2ca5771ed6e4e7b1f05fa3a64e0dfb9cc643b7a800a8435" +dependencies = [ + "alloy-primitives", + "auto_impl", + "bitflags 2.4.2", + "bitvec", + "c-kzg", + "cfg-if", + "enumn", + "hashbrown 0.14.3", + "hex", + "serde", +] + [[package]] name = "rfc6979" version = "0.4.0" @@ -3654,6 +4348,15 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "ripemd" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd124222d17ad93a644ed9d011a40f4fb64aa54275c08cc216524a9ea82fb09f" +dependencies = [ + "digest 0.10.7", +] + [[package]] name = "rlp" version = "0.5.2" @@ -3687,6 +4390,36 @@ dependencies = [ "ureq", ] +[[package]] +name = "ruint" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f308135fef9fc398342da5472ce7c484529df23743fb7c734e0f3d472971e62" +dependencies = [ + "alloy-rlp", + "ark-ff 0.3.0", + "ark-ff 0.4.2", + "bytes", + "fastrlp", + "num-bigint", + "num-traits 0.2.18", + "parity-scale-codec", + "primitive-types", + "proptest", + "rand", + "rlp", + "ruint-macro", + "serde", + "valuable", + "zeroize", +] + +[[package]] +name = "ruint-macro" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f86854cf50259291520509879a5c294c3c9a4c334e9ff65071c51e42ef1e2343" + [[package]] name = "rustc-demangle" version = "0.1.23" @@ -3705,13 +4438,22 @@ 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", + "semver 1.0.22", ] [[package]] @@ -3795,6 +4537,18 @@ version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4" +[[package]] +name = "rusty-fork" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb3dcc6e454c328bb824492db107ab7c0ae8fcffe4ad210136ef014458c1bc4f" +dependencies = [ + "fnv", + "quick-error", + "tempfile", + "wait-timeout", +] + [[package]] name = "ryu" version = "1.0.17" @@ -3921,12 +4675,67 @@ dependencies = [ "zeroize", ] +[[package]] +name = "secp256k1" +version = "0.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25996b82292a7a57ed3508f052cfff8640d38d32018784acd714758b43da9c8f" +dependencies = [ + "rand", + "secp256k1-sys 0.8.1", +] + +[[package]] +name = "secp256k1" +version = "0.28.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d24b59d129cdadea20aea4fb2352fa053712e5d713eee47d700cd4b2bc002f10" +dependencies = [ + "secp256k1-sys 0.9.2", +] + +[[package]] +name = "secp256k1-sys" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70a129b9e9efbfb223753b9163c4ab3b13cff7fd9c7f010fbac25ab4099fa07e" +dependencies = [ + "cc", +] + +[[package]] +name = "secp256k1-sys" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5d1746aae42c19d583c3c1a8c646bfad910498e2051c551a7f2e3c0c9fbb7eb" +dependencies = [ + "cc", +] + +[[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.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "92d43fe69e652f3df9bdc2b85b2854a0825b86e4fb76bc44d945137d053639ca" +[[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.197" @@ -3964,6 +4773,7 @@ version = "1.0.114" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c5f09b1bd632ef549eaa9f60a1f8de742bdbc698e6cee2095fc84dde5f549ae0" dependencies = [ + "indexmap 2.2.3", "itoa", "ryu", "serde", @@ -4067,7 +4877,7 @@ checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" dependencies = [ "cfg-if", "cpufeatures", - "digest", + "digest 0.10.7", ] [[package]] @@ -4078,7 +4888,7 @@ checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" dependencies = [ "cfg-if", "cpufeatures", - "digest", + "digest 0.10.7", ] [[package]] @@ -4087,10 +4897,20 @@ version = "0.10.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" dependencies = [ - "digest", + "digest 0.10.7", "keccak", ] +[[package]] +name = "sha3-asm" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bac61da6b35ad76b195eb4771210f947734321a8d81d7738e1580d953bc7a15e" +dependencies = [ + "cc", + "cfg-if", +] + [[package]] name = "sharded-slab" version = "0.1.7" @@ -4118,7 +4938,7 @@ version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" dependencies = [ - "digest", + "digest 0.10.7", "rand_core", ] @@ -4152,6 +4972,10 @@ name = "smallvec" version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6ecd384b10a64542d77071bd64bd7b231f4ed5940fba55e98c3de13824cf3d7" +dependencies = [ + "arbitrary", + "serde", +] [[package]] name = "smol_str" @@ -4201,7 +5025,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec63571489873d4506683915840eeb1bb16b3198ee4894cc6f2fe3013d505e56" dependencies = [ "ndarray", - "num-complex", + "num-complex 0.2.4", "num-traits 0.1.43", ] @@ -4361,7 +5185,7 @@ version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "067419451efdea1ee968df8438369960c167e0e905c05b84afd074f50e1d6f3d" dependencies = [ - "ark-ff", + "ark-ff 0.4.2", "bigdecimal", "crypto-bigint", "getrandom", @@ -4449,8 +5273,8 @@ dependencies = [ "serde", "serde_json", "starknet-crypto 0.5.2", - "strum", - "strum_macros", + "strum 0.24.1", + "strum_macros 0.24.3", "thiserror", ] @@ -4482,6 +5306,7 @@ dependencies = [ "once_cell", "p256", "pretty_assertions_sorted", + "reth-primitives", "sec1", "serde", "serde_json", @@ -4532,6 +5357,15 @@ version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f" +[[package]] +name = "strum" +version = "0.26.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d8cec3501a5194c432b2b7976db6b7d10ec95c253208b45f83f7136aa985e29" +dependencies = [ + "strum_macros 0.26.2", +] + [[package]] name = "strum_macros" version = "0.24.3" @@ -4545,12 +5379,47 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "strum_macros" +version = "0.26.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6cf59daf282c0a494ba14fd21610a0325f9f90ec9d1231dea26bcb1d696c946" +dependencies = [ + "heck 0.4.1", + "proc-macro2", + "quote", + "rustversion", + "syn 2.0.51", +] + +[[package]] +name = "substrate-bn" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b5bbfa79abbae15dd642ea8176a21a635ff3c00059961d1ea27ad04e5b441c" +dependencies = [ + "byteorder", + "crunchy", + "lazy_static", + "rand", + "rustc-hex", +] + [[package]] name = "subtle" version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" +[[package]] +name = "sucds" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64accd20141dfbef67ad83c51d588146cff7810616e1bda35a975be369059533" +dependencies = [ + "anyhow", +] + [[package]] name = "syn" version = "1.0.109" @@ -4757,6 +5626,15 @@ dependencies = [ "once_cell", ] +[[package]] +name = "threadpool" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa" +dependencies = [ + "num_cpus", +] + [[package]] name = "time" version = "0.3.34" @@ -4994,6 +5872,12 @@ 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" @@ -5006,6 +5890,12 @@ dependencies = [ "static_assertions", ] +[[package]] +name = "unarray" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94" + [[package]] name = "unescaper" version = "0.1.4" @@ -5136,6 +6026,15 @@ version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +[[package]] +name = "wait-timeout" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f200f5b12eb75f8c1ed65abd4b2db8a6e1b138a20de009dacee265a2498f3f6" +dependencies = [ + "libc", +] + [[package]] name = "walkdir" version = "2.4.0" @@ -5566,7 +6465,7 @@ dependencies = [ "pbkdf2", "sha1", "time", - "zstd", + "zstd 0.11.2+zstd.1.5.2", ] [[package]] @@ -5575,7 +6474,16 @@ version = "0.11.2+zstd.1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "20cc960326ece64f010d2d2107537f26dc589a6573a316bd5b1dba685fa5fde4" dependencies = [ - "zstd-safe", + "zstd-safe 5.0.2+zstd.1.5.2", +] + +[[package]] +name = "zstd" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a27595e173641171fc74a1232b7b1c7a7cb6e18222c11e9dfb9888fa424c53c" +dependencies = [ + "zstd-safe 6.0.6", ] [[package]] @@ -5588,6 +6496,16 @@ dependencies = [ "zstd-sys", ] +[[package]] +name = "zstd-safe" +version = "6.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee98ffd0b48ee95e6c5168188e44a54550b1564d9d530ee21d5f0eaed1069581" +dependencies = [ + "libc", + "zstd-sys", +] + [[package]] name = "zstd-sys" version = "2.0.9+zstd.1.5.5" diff --git a/Cargo.toml b/Cargo.toml index 347a2d31d..3ddd13cf3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -39,7 +39,7 @@ cairo-lang-casm = { workspace = true } cairo-lang-sierra = { workspace = true } cairo-lang-starknet = { workspace = true } cairo-lang-utils = { workspace = true } -cairo-native = { git = "https://github.com/lambdaclass/cairo_native", rev = "baf57d2dde0036ac4848fc40c672826fb7ffcde4", optional = true } +cairo-native = { git = "https://github.com/lambdaclass/cairo_native", rev = "8fddcd3914badfe3f89752fe7a22befeaffc17f9", optional = true } k256 = "0.13.3" p256 = "0.13.2" sec1 = "0.7.3" @@ -74,6 +74,7 @@ assert_matches = "1.5.0" coverage-helper = "0.2.0" lru = "0.11.0" pretty_assertions_sorted = "1.2.3" +reth-primitives = { git = "https://github.com/paradigmxyz/reth.git", tag = "v0.1.0-alpha.18", default-features = false } tracing-subscriber = { version = "0.3.17", features = ["env-filter"] } [[bench]] diff --git a/Makefile b/Makefile index da3b29b11..90a22eb0a 100644 --- a/Makefile +++ b/Makefile @@ -109,6 +109,40 @@ cairo-%-macos.tar: cairo-%.tar: curl -L -o "$@" "https://github.com/starkware-libs/cairo/releases/download/v$*/release-x86_64-unknown-linux-musl.tar.gz" +# ============================= +# Test Cairo Kakarot Contracts +# ============================= + +KAKAROT_VERSION=v0.1.1 +KAKAROT_DIR=starknet_programs/kakarot + +KAKAROT_FILES:=$(wildcard $(KAKAROT_DIR)/*.json) +KAKAROT_COMPILED_SIERRA_CONTRACTS:=$(patsubst $(KAKAROT_DIR)/%.contract_class.json, $(KAKAROT_DIR)/%.sierra, $(KAKAROT_FILES)) +KAKAROT_COMPILED_CASM_CONTRACTS:=$(patsubst $(KAKAROT_DIR)/%.compiled_contract_class.json, $(KAKAROT_DIR)/%.casm, $(KAKAROT_FILES)) + +build-kakarot: | $(KAKAROT_DIR) + +compile-kakarot-sierra: $(KAKAROT_COMPILED_SIERRA_CONTRACTS) +compile-kakarot-casm: $(KAKAROT_COMPILED_CASM_CONTRACTS) + +$(KAKAROT_DIR): + rm -fr $(KAKAROT_DIR) \ + && mkdir -p $(KAKAROT_DIR) \ + && curl -L -o $(KAKAROT_DIR)/artifacts.zip "https://github.com/kkrt-labs/kakarot-ssj/releases/download/$(KAKAROT_VERSION)/dev-artifacts.zip" \ + && $(MAKE) decompress-kakarot + +decompress-kakarot: + unzip $(KAKAROT_DIR)/artifacts.zip -d $(KAKAROT_DIR) \ + && rm $(KAKAROT_DIR)/artifacts.zip \ + && rm $(KAKAROT_DIR)/*.sierra.json \ + && rm $(KAKAROT_DIR)/*.starknet_artifacts.json + +$(KAKAROT_DIR)/%.sierra: $(KAKAROT_DIR)/%.contract_class.json + mv $< $@ + +$(KAKAROT_DIR)/%.casm: $(KAKAROT_DIR)/%.compiled_contract_class.json + mv $< $@ + # ================= # Normal rules. # ================= @@ -156,6 +190,11 @@ test: compile-cairo compile-starknet compile-cairo-2-casm compile-cairo-2-sierra test-cairo-native: compile-cairo compile-starknet compile-cairo-2-casm compile-cairo-2-sierra cargo nextest run --workspace --test tests --features=cairo-native integration_tests::cairo_native +deps-kakarot: build-kakarot + +test-kakarot: compile-kakarot-sierra compile-kakarot-casm + cargo test --test tests --features=cairo-native test_kakarot_contract + test-doctests: cargo test --workspace --doc diff --git a/rust-toolchain.toml b/rust-toolchain.toml index 4da0ec7b8..10c84f3ba 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,4 +1,4 @@ [toolchain] -channel = "1.74.1" +channel = "1.75" components = ["rustfmt", "clippy"] profile = "minimal" From 1f421c44a5c6d2b9e21dac190a2aa4a2f01a34b4 Mon Sep 17 00:00:00 2001 From: Gregory Edison Date: Wed, 27 Mar 2024 13:28:49 +0100 Subject: [PATCH 2/5] fixes + typos --- fuzzer/src/main.rs | 2 +- src/bin/fibonacci.rs | 2 +- src/bin/native_bench.rs | 16 +-- .../sierra_contract_address.rs | 58 +++++----- src/execution/execution_entry_point.rs | 2 +- src/execution/mod.rs | 1 + src/lib.rs | 4 +- src/syscalls/deprecated_syscall_handler.rs | 2 +- src/transaction/mod.rs | 2 +- src/utils.rs | 2 +- tests/integration_tests/account_panic.rs | 2 +- tests/integration_tests/cairo_1_syscalls.rs | 102 +++++++++--------- tests/integration_tests/cairo_native.rs | 67 +++++++++++- .../complex_contracts/erc20.rs | 4 +- tests/integration_tests/delegate_call.rs | 2 +- tests/integration_tests/fibonacci.rs | 4 +- tests/integration_tests/increase_balance.rs | 2 +- tests/integration_tests/internals.rs | 6 +- tests/integration_tests/storage.rs | 2 +- tests/integration_tests/syscalls.rs | 2 +- 20 files changed, 174 insertions(+), 110 deletions(-) diff --git a/fuzzer/src/main.rs b/fuzzer/src/main.rs index 61b8daf38..7e2f72b53 100644 --- a/fuzzer/src/main.rs +++ b/fuzzer/src/main.rs @@ -94,7 +94,7 @@ fn main() { .entry_points_by_type() .get(&EntryPointType::External) .unwrap() - .get(0) + .first() .unwrap() .selector(); diff --git a/src/bin/fibonacci.rs b/src/bin/fibonacci.rs index 8003d65a4..67f371223 100644 --- a/src/bin/fibonacci.rs +++ b/src/bin/fibonacci.rs @@ -53,7 +53,7 @@ fn main() { let fib_entrypoint_selector = *entry_points_by_type .get(&EntryPointType::External) .unwrap() - .get(0) + .first() .unwrap() .selector(); diff --git a/src/bin/native_bench.rs b/src/bin/native_bench.rs index 41ecb30a8..f18bf1e4a 100644 --- a/src/bin/native_bench.rs +++ b/src/bin/native_bench.rs @@ -97,7 +97,7 @@ fn bench_fibo(executions: usize, bench_type: BenchType) { let (contract_class, constructor_selector) = match bench_type { BenchType::VM => { let entrypoints = casm_contract_class.clone().entry_points_by_type; - let constructor_selector = entrypoints.external.get(0).unwrap().selector.clone(); + let constructor_selector = entrypoints.external.first().unwrap().selector.clone(); ( CompiledClass::Casm { @@ -113,7 +113,7 @@ fn bench_fibo(executions: usize, bench_type: BenchType) { serde_json::from_slice(sierra_data).unwrap(); let entrypoints = sierra_contract_class.clone().entry_points_by_type; - let constructor_selector = entrypoints.external.get(0).unwrap().selector.clone(); + let constructor_selector = entrypoints.external.first().unwrap().selector.clone(); let sierra_program = sierra_contract_class.extract_sierra_program().unwrap(); let entrypoints = sierra_contract_class.entry_points_by_type; ( @@ -183,7 +183,7 @@ fn bench_fact(executions: usize, bench_type: BenchType) { let (contract_class, constructor_selector) = match bench_type { BenchType::VM => { let entrypoints = casm_contract_class.clone().entry_points_by_type; - let constructor_selector = entrypoints.external.get(0).unwrap().selector.clone(); + let constructor_selector = entrypoints.external.first().unwrap().selector.clone(); ( CompiledClass::Casm { @@ -199,7 +199,7 @@ fn bench_fact(executions: usize, bench_type: BenchType) { serde_json::from_slice(sierra_data).unwrap(); let entrypoints = sierra_contract_class.clone().entry_points_by_type; - let constructor_selector = entrypoints.external.get(0).unwrap().selector.clone(); + let constructor_selector = entrypoints.external.first().unwrap().selector.clone(); let sierra_program = sierra_contract_class.extract_sierra_program().unwrap(); let entrypoints = sierra_contract_class.entry_points_by_type; ( @@ -318,7 +318,7 @@ fn bench_erc20(executions: usize, bench_type: BenchType) { }; let entrypoints = erc20_deployer_class.clone().entry_points_by_type; - let deploy_entrypoint_selector = &entrypoints.external.get(0).unwrap().selector; + let deploy_entrypoint_selector = &entrypoints.external.first().unwrap().selector; // insert deployer and erc20 classes into the cache. contract_class_cache.set_contract_class( @@ -383,7 +383,7 @@ fn bench_erc20(executions: usize, bench_type: BenchType) { .unwrap(); // obtain the address of the deployed erc20 contract - let erc20_address = *call_info.call_info.unwrap().retdata.get(0).unwrap(); + let erc20_address = *call_info.call_info.unwrap().retdata.first().unwrap(); (Address(erc20_address), state) } @@ -399,7 +399,7 @@ fn bench_erc20(executions: usize, bench_type: BenchType) { }; let entrypoints = erc20_deployer_class.clone().entry_points_by_type; - let deploy_entrypoint_selector = &entrypoints.external.get(0).unwrap().selector; + let deploy_entrypoint_selector = &entrypoints.external.first().unwrap().selector; // insert deployer and erc20 classes into the cache. contract_class_cache.set_contract_class( @@ -464,7 +464,7 @@ fn bench_erc20(executions: usize, bench_type: BenchType) { .unwrap(); // obtain the address of the deployed erc20 contract - let erc20_address = *call_info.call_info.unwrap().retdata.get(0).unwrap(); + let erc20_address = *call_info.call_info.unwrap().retdata.first().unwrap(); (Address(erc20_address), state) } diff --git a/src/core/contract_address/sierra_contract_address.rs b/src/core/contract_address/sierra_contract_address.rs index 0a6b5f2a7..e6e7f9b66 100644 --- a/src/core/contract_address/sierra_contract_address.rs +++ b/src/core/contract_address/sierra_contract_address.rs @@ -139,35 +139,6 @@ fn get_contract_entry_points( Ok(entry_points) } -#[cfg(test)] -mod tests { - use crate::core::contract_address::compute_sierra_class_hash; - use cairo_lang_starknet::contract_class::ContractClass as SierraContractClass; - use cairo_vm::Felt252; - use std::{fs::File, io::BufReader}; - - /// Test the correctness of the compute_sierra_class_hash function for a specific testnet contract. - #[test] - fn test_declare_tx_from_testnet() { - let file = File::open("starknet_programs/raw_contract_classes/0x113bf26d112a164297e04381212c9bd7409f07591f0a04f539bdf56693eaaf3.sierra").unwrap(); - // 0x113bf26d112a164297e04381212c9bd7409f07591f0a04f539bdf56693eaaf3 - let reader = BufReader::new(file); - - let sierra_contract_class: SierraContractClass = serde_json::from_reader(reader).unwrap(); - - // this is the class_hash from: https://alpha4.starknet.io/feeder_gateway/get_transaction?transactionHash=0x01b852f1fe2b13db21a44f8884bc4b7760dc277bb3820b970dba929860275617 - let expected_result = Felt252::from_dec_str( - "487202222862199115032202787294865701687663153957776561394399544814644144883", - ) - .unwrap(); - - assert_eq!( - compute_sierra_class_hash(&sierra_contract_class).unwrap(), - expected_result - ) - } -} - struct PythonJsonFormatter; impl Formatter for PythonJsonFormatter { @@ -220,3 +191,32 @@ impl Formatter for PythonJsonFormatter { Ok(()) } } + +#[cfg(test)] +mod tests { + use crate::core::contract_address::compute_sierra_class_hash; + use cairo_lang_starknet::contract_class::ContractClass as SierraContractClass; + use cairo_vm::Felt252; + use std::{fs::File, io::BufReader}; + + /// Test the correctness of the compute_sierra_class_hash function for a specific testnet contract. + #[test] + fn test_declare_tx_from_testnet() { + let file = File::open("starknet_programs/raw_contract_classes/0x113bf26d112a164297e04381212c9bd7409f07591f0a04f539bdf56693eaaf3.sierra").unwrap(); + // 0x113bf26d112a164297e04381212c9bd7409f07591f0a04f539bdf56693eaaf3 + let reader = BufReader::new(file); + + let sierra_contract_class: SierraContractClass = serde_json::from_reader(reader).unwrap(); + + // this is the class_hash from: https://alpha4.starknet.io/feeder_gateway/get_transaction?transactionHash=0x01b852f1fe2b13db21a44f8884bc4b7760dc277bb3820b970dba929860275617 + let expected_result = Felt252::from_dec_str( + "487202222862199115032202787294865701687663153957776561394399544814644144883", + ) + .unwrap(); + + assert_eq!( + compute_sierra_class_hash(&sierra_contract_class).unwrap(), + expected_result + ) + } +} diff --git a/src/execution/execution_entry_point.rs b/src/execution/execution_entry_point.rs index f6a651081..f1b11a4a1 100644 --- a/src/execution/execution_entry_point.rs +++ b/src/execution/execution_entry_point.rs @@ -433,7 +433,7 @@ impl ExecutionEntryPoint { ); // fetch syscall_ptr - let initial_syscall_ptr: Relocatable = match os_context.get(0) { + let initial_syscall_ptr: Relocatable = match os_context.first() { Some(MaybeRelocatable::RelocatableValue(ptr)) => ptr.to_owned(), _ => return Err(TransactionError::NotARelocatableValue), }; diff --git a/src/execution/mod.rs b/src/execution/mod.rs index 85c858677..f11861f9d 100644 --- a/src/execution/mod.rs +++ b/src/execution/mod.rs @@ -303,6 +303,7 @@ impl<'de> Deserialize<'de> for CallInfo { // CallResult structure // ---------------------- +#[derive(Debug)] pub struct CallResult { pub gas_consumed: u128, pub is_success: bool, diff --git a/src/lib.rs b/src/lib.rs index 940c9dfdb..1746dc88c 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -350,7 +350,7 @@ mod test { let contract_class: CasmContractClass = serde_json::from_slice(program_data).unwrap(); let entrypoints = contract_class.clone().entry_points_by_type; - let entrypoint_selector = Felt252::from(&entrypoints.external.get(0).unwrap().selector); + let entrypoint_selector = Felt252::from(&entrypoints.external.first().unwrap().selector); let contract_class_cache = PermanentContractClassCache::default(); @@ -454,7 +454,7 @@ mod test { let program_data = include_bytes!("../starknet_programs/cairo2/fibonacci.casm"); let contract_class: CasmContractClass = serde_json::from_slice(program_data).unwrap(); let entrypoints = contract_class.clone().entry_points_by_type; - let entrypoint_selector = Felt252::from(&entrypoints.external.get(0).unwrap().selector); + let entrypoint_selector = Felt252::from(&entrypoints.external.first().unwrap().selector); let contract_class_cache = PermanentContractClassCache::default(); diff --git a/src/syscalls/deprecated_syscall_handler.rs b/src/syscalls/deprecated_syscall_handler.rs index 7654d4119..39388d9f7 100644 --- a/src/syscalls/deprecated_syscall_handler.rs +++ b/src/syscalls/deprecated_syscall_handler.rs @@ -492,7 +492,7 @@ mod tests { let event = syscall_handler .syscall_handler .events - .get(0) + .first() .unwrap() .clone(); diff --git a/src/transaction/mod.rs b/src/transaction/mod.rs index 58df5a425..c5721de4f 100644 --- a/src/transaction/mod.rs +++ b/src/transaction/mod.rs @@ -238,7 +238,7 @@ impl Transaction { } } - /// It creates a new transaction structure modificating the skip flags. It is meant to be used only to run a simulation + /// It creates a new transaction structure modification the skip flags. It is meant to be used only to run a simulation ///## Parameters: ///- skip_validate: the transaction will not be verified. ///- skip_execute: the transaction will not be executed in the cairo vm. diff --git a/src/utils.rs b/src/utils.rs index ff64d2100..c7fe0d6b9 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -125,7 +125,7 @@ pub fn felt_to_hash(value: &Felt252) -> ClassHash { let mut output = [0; 32]; let bytes = value.to_bytes_be(); - output[32 - bytes.len()..].copy_from_slice(&bytes); + output[..].copy_from_slice(&bytes); ClassHash(output) } diff --git a/tests/integration_tests/account_panic.rs b/tests/integration_tests/account_panic.rs index 51e62359b..e498d1437 100644 --- a/tests/integration_tests/account_panic.rs +++ b/tests/integration_tests/account_panic.rs @@ -84,7 +84,7 @@ fn account_panic() { let selector_contract = &contract_class .entry_points_by_type .external - .get(0) + .first() .unwrap() .selector; // calldata of contract_a is 1 value. diff --git a/tests/integration_tests/cairo_1_syscalls.rs b/tests/integration_tests/cairo_1_syscalls.rs index 6cad66143..4eeb8c5aa 100644 --- a/tests/integration_tests/cairo_1_syscalls.rs +++ b/tests/integration_tests/cairo_1_syscalls.rs @@ -31,7 +31,7 @@ use std::{ sync::Arc, }; -fn create_execute_extrypoint( +fn create_execute_entrypoint( address: Address, class_hash: ClassHash, selector: &BigUint, @@ -56,9 +56,9 @@ fn storage_write_read() { let program_data = include_bytes!("../../starknet_programs/cairo2/simple_wallet.casm"); let contract_class: CasmContractClass = serde_json::from_slice(program_data).unwrap(); let entrypoints = contract_class.clone().entry_points_by_type; - let constructor_entrypoint_selector = &entrypoints.constructor.get(0).unwrap().selector; + let constructor_entrypoint_selector = &entrypoints.constructor.first().unwrap().selector; let get_balance_entrypoint_selector = &entrypoints.external.get(1).unwrap().selector; - let increase_balance_entrypoint_selector = &entrypoints.external.get(0).unwrap().selector; + let increase_balance_entrypoint_selector = &entrypoints.external.first().unwrap().selector; // Create state reader with class hash data let contract_class_cache = PermanentContractClassCache::default(); @@ -101,7 +101,7 @@ fn storage_write_read() { // RUN CONSTRUCTOR // Create an execution entry point let calldata = [25.into()].to_vec(); - let constructor_exec_entry_point = create_execute_extrypoint( + let constructor_exec_entry_point = create_execute_entrypoint( address.clone(), class_hash, constructor_entrypoint_selector, @@ -126,7 +126,7 @@ fn storage_write_read() { // RUN GET_BALANCE // Create an execution entry point let calldata = [].to_vec(); - let get_balance_exec_entry_point = create_execute_extrypoint( + let get_balance_exec_entry_point = create_execute_entrypoint( address.clone(), class_hash, get_balance_entrypoint_selector, @@ -152,7 +152,7 @@ fn storage_write_read() { // RUN INCREASE_BALANCE // Create an execution entry point let calldata = [100.into()].to_vec(); - let increase_balance_entry_point = create_execute_extrypoint( + let increase_balance_entry_point = create_execute_entrypoint( address.clone(), class_hash, increase_balance_entrypoint_selector, @@ -177,7 +177,7 @@ fn storage_write_read() { // RUN GET_BALANCE // Create an execution entry point let calldata = [].to_vec(); - let get_balance_exec_entry_point = create_execute_extrypoint( + let get_balance_exec_entry_point = create_execute_entrypoint( address, class_hash, get_balance_entrypoint_selector, @@ -207,7 +207,7 @@ fn library_call() { let program_data = include_bytes!("../../starknet_programs/cairo2/square_root.casm"); let contract_class: CasmContractClass = serde_json::from_slice(program_data).unwrap(); let entrypoints = contract_class.clone().entry_points_by_type; - let entrypoint_selector = &entrypoints.external.get(0).unwrap().selector; + let entrypoint_selector = &entrypoints.external.first().unwrap().selector; // Create state reader with class hash data let contract_class_cache = PermanentContractClassCache::default(); @@ -395,7 +395,7 @@ fn call_contract_storage_write_read() { let simple_wallet_constructor_entrypoint_selector = simple_wallet_contract_class .entry_points_by_type .constructor - .get(0) + .first() .unwrap() .selector .clone(); @@ -434,7 +434,7 @@ fn call_contract_storage_write_read() { let mut resources_manager = ExecutionResourcesManager::default(); - let create_execute_extrypoint = |selector: &BigUint, + let create_execute_entrypoint = |selector: &BigUint, calldata: Vec, entry_point_type: EntryPointType, class_hash: [u8; 32], @@ -455,7 +455,7 @@ fn call_contract_storage_write_read() { // RUN SIMPLE_WALLET CONSTRUCTOR // Create an execution entry point let calldata = [25.into()].to_vec(); - let constructor_exec_entry_point = create_execute_extrypoint( + let constructor_exec_entry_point = create_execute_entrypoint( &simple_wallet_constructor_entrypoint_selector, calldata, EntryPointType::Constructor, @@ -480,7 +480,7 @@ fn call_contract_storage_write_read() { // RUN GET_BALANCE // Create an execution entry point let calldata = [simple_wallet_address.0].to_vec(); - let get_balance_exec_entry_point = create_execute_extrypoint( + let get_balance_exec_entry_point = create_execute_entrypoint( get_balance_entrypoint_selector, calldata, EntryPointType::External, @@ -506,7 +506,7 @@ fn call_contract_storage_write_read() { // RUN INCREASE_BALANCE // Create an execution entry point let calldata = [100.into(), simple_wallet_address.0].to_vec(); - let increase_balance_entry_point = create_execute_extrypoint( + let increase_balance_entry_point = create_execute_entrypoint( increase_balance_entrypoint_selector, calldata, EntryPointType::External, @@ -531,7 +531,7 @@ fn call_contract_storage_write_read() { // RUN GET_BALANCE // Create an execution entry point let calldata = [simple_wallet_address.0].to_vec(); - let get_balance_exec_entry_point = create_execute_extrypoint( + let get_balance_exec_entry_point = create_execute_entrypoint( get_balance_entrypoint_selector, calldata, EntryPointType::External, @@ -561,7 +561,7 @@ fn emit_event() { let program_data = include_bytes!("../../starknet_programs/cairo2/emit_event.casm"); let contract_class: CasmContractClass = serde_json::from_slice(program_data).unwrap(); let entrypoints = contract_class.clone().entry_points_by_type; - let entrypoint_selector = &entrypoints.external.get(0).unwrap().selector; + let entrypoint_selector = &entrypoints.external.first().unwrap().selector; // Create state reader with class hash data let contract_class_cache = PermanentContractClassCache::default(); @@ -673,7 +673,7 @@ fn deploy_cairo1_from_cairo1() { let program_data = include_bytes!("../../starknet_programs/cairo2/deploy.casm"); let contract_class: CasmContractClass = serde_json::from_slice(program_data).unwrap(); let entrypoints = contract_class.clone().entry_points_by_type; - let entrypoint_selector = &entrypoints.external.get(0).unwrap().selector; + let entrypoint_selector = &entrypoints.external.first().unwrap().selector; // Create state reader with class hash data let contract_class_cache = PermanentContractClassCache::default(); @@ -783,7 +783,7 @@ fn deploy_cairo0_from_cairo1_without_constructor() { include_bytes!("../../starknet_programs/cairo2/deploy_without_constructor.casm"); let contract_class: CasmContractClass = serde_json::from_slice(program_data).unwrap(); let entrypoints = contract_class.clone().entry_points_by_type; - let entrypoint_selector = &entrypoints.external.get(0).unwrap().selector; + let entrypoint_selector = &entrypoints.external.first().unwrap().selector; // Create state reader with class hash data let contract_class_cache = PermanentContractClassCache::default(); @@ -890,7 +890,7 @@ fn deploy_cairo0_from_cairo1_with_constructor() { include_bytes!("../../starknet_programs/cairo2/deploy_with_constructor.casm"); let contract_class: CasmContractClass = serde_json::from_slice(program_data).unwrap(); let entrypoints = contract_class.clone().entry_points_by_type; - let entrypoint_selector = &entrypoints.external.get(0).unwrap().selector; + let entrypoint_selector = &entrypoints.external.first().unwrap().selector; // Create state reader with class hash data let contract_class_cache = PermanentContractClassCache::default(); @@ -998,7 +998,7 @@ fn deploy_cairo0_and_invoke() { include_bytes!("../../starknet_programs/cairo2/deploy_without_constructor.casm"); let contract_class: CasmContractClass = serde_json::from_slice(program_data).unwrap(); let entrypoints = contract_class.clone().entry_points_by_type; - let entrypoint_selector = &entrypoints.external.get(0).unwrap().selector; + let entrypoint_selector = &entrypoints.external.first().unwrap().selector; // Create state reader with class hash data let contract_class_cache = PermanentContractClassCache::default(); @@ -1136,7 +1136,7 @@ fn test_send_message_to_l1_syscall() { let contract_class: CasmContractClass = serde_json::from_slice(program_data).unwrap(); let entrypoints = contract_class.clone().entry_points_by_type; - let external_entrypoint_selector = &entrypoints.external.get(0).unwrap().selector; + let external_entrypoint_selector = &entrypoints.external.first().unwrap().selector; // Create state reader with class hash data let contract_class_cache = PermanentContractClassCache::default(); @@ -1166,7 +1166,7 @@ fn test_send_message_to_l1_syscall() { // RUN SEND_MSG // Create an execution entry point - let send_message_exec_entry_point = create_execute_extrypoint( + let send_message_exec_entry_point = create_execute_entrypoint( address.clone(), class_hash, external_entrypoint_selector, @@ -1239,7 +1239,7 @@ fn test_get_execution_info() { let program_data = include_bytes!("../../starknet_programs/cairo2/get_execution_info.casm"); let contract_class: CasmContractClass = serde_json::from_slice(program_data).unwrap(); let entrypoints = contract_class.clone().entry_points_by_type; - let external_entrypoint_selector = &entrypoints.external.get(0).unwrap().selector; + let external_entrypoint_selector = &entrypoints.external.first().unwrap().selector; // Create state reader with class hash data let contract_class_cache = PermanentContractClassCache::default(); @@ -1281,7 +1281,7 @@ fn test_get_execution_info() { // RUN GET_INFO // Create an execution entry point - let get_info_exec_entry_point = create_execute_extrypoint( + let get_info_exec_entry_point = create_execute_entrypoint( address.clone(), class_hash, external_entrypoint_selector, @@ -1342,7 +1342,7 @@ fn replace_class_internal() { let program_data_a = include_bytes!("../../starknet_programs/cairo2/get_number_a.casm"); let contract_class_a: CasmContractClass = serde_json::from_slice(program_data_a).unwrap(); let entrypoints_a = contract_class_a.clone().entry_points_by_type; - let upgrade_selector = &entrypoints_a.external.get(0).unwrap().selector; + let upgrade_selector = &entrypoints_a.external.first().unwrap().selector; // Create state reader with class hash data let contract_class_cache = PermanentContractClassCache::default(); @@ -1497,7 +1497,7 @@ fn replace_class_contract_call() { let wrapper_contract_class: CasmContractClass = serde_json::from_slice(program_data).unwrap(); let entrypoints = wrapper_contract_class.clone().entry_points_by_type; let get_number_entrypoint_selector = &entrypoints.external.get(1).unwrap().selector; - let upgrade_entrypoint_selector = &entrypoints.external.get(0).unwrap().selector; + let upgrade_entrypoint_selector = &entrypoints.external.first().unwrap().selector; let wrapper_address = Address(Felt252::from(2)); let wrapper_class_hash: ClassHash = ClassHash([3; 32]); @@ -2119,7 +2119,7 @@ fn test_out_of_gas_failure() { let program_data = include_bytes!("../../starknet_programs/cairo2/emit_event.casm"); let contract_class: CasmContractClass = serde_json::from_slice(program_data).unwrap(); let entrypoints = contract_class.clone().entry_points_by_type; - let entrypoint_selector = &entrypoints.external.get(0).unwrap().selector; + let entrypoint_selector = &entrypoints.external.first().unwrap().selector; // Create state reader with class hash data let contract_class_cache = PermanentContractClassCache::default(); @@ -2202,7 +2202,7 @@ fn deploy_syscall_failure_uninitialized_class_hash() { include_bytes!("../../starknet_programs/cairo2/deploy_contract_no_args.casm"); let contract_class: CasmContractClass = serde_json::from_slice(program_data).unwrap(); let entrypoints = contract_class.clone().entry_points_by_type; - let entrypoint_selector = &entrypoints.external.get(0).unwrap().selector; + let entrypoint_selector = &entrypoints.external.first().unwrap().selector; // Create state reader with class hash data let contract_class_cache = PermanentContractClassCache::default(); @@ -2284,7 +2284,7 @@ fn deploy_syscall_failure_in_constructor() { include_bytes!("../../starknet_programs/cairo2/deploy_contract_no_args.casm"); let contract_class: CasmContractClass = serde_json::from_slice(program_data).unwrap(); let entrypoints = contract_class.clone().entry_points_by_type; - let entrypoint_selector = &entrypoints.external.get(0).unwrap().selector; + let entrypoint_selector = &entrypoints.external.first().unwrap().selector; // Create state reader with class hash data let contract_class_cache = PermanentContractClassCache::default(); @@ -2423,7 +2423,7 @@ fn storage_read_no_value() { // RUN GET_BALANCE // Create an execution entry point let calldata = [].to_vec(); - let get_balance_exec_entry_point = create_execute_extrypoint( + let get_balance_exec_entry_point = create_execute_entrypoint( address, class_hash, get_balance_entrypoint_selector, @@ -2455,7 +2455,7 @@ fn storage_read_unavailable_address_domain() { include_bytes!("../../starknet_programs/cairo2/faulty_low_level_storage_read.casm"); let contract_class: CasmContractClass = serde_json::from_slice(program_data).unwrap(); let entrypoints = contract_class.clone().entry_points_by_type; - let read_storage_entrypoint_selector = &entrypoints.external.get(0).unwrap().selector; + let read_storage_entrypoint_selector = &entrypoints.external.first().unwrap().selector; // Create state reader with class hash data let contract_class_cache = PermanentContractClassCache::default(); @@ -2498,7 +2498,7 @@ fn storage_read_unavailable_address_domain() { // RUN READ_STORAGE // Create an execution entry point let calldata = [].to_vec(); - let read_storage_exec_entry_point = create_execute_extrypoint( + let read_storage_exec_entry_point = create_execute_entrypoint( address, class_hash, read_storage_entrypoint_selector, @@ -2533,7 +2533,7 @@ fn storage_write_unavailable_address_domain() { include_bytes!("../../starknet_programs/cairo2/faulty_low_level_storage_write.casm"); let contract_class: CasmContractClass = serde_json::from_slice(program_data).unwrap(); let entrypoints = contract_class.clone().entry_points_by_type; - let read_storage_entrypoint_selector = &entrypoints.external.get(0).unwrap().selector; + let read_storage_entrypoint_selector = &entrypoints.external.first().unwrap().selector; // Create state reader with class hash data let contract_class_cache = PermanentContractClassCache::default(); @@ -2576,7 +2576,7 @@ fn storage_write_unavailable_address_domain() { // RUN READ_STORAGE // Create an execution entry point let calldata = [].to_vec(); - let read_storage_exec_entry_point = create_execute_extrypoint( + let read_storage_exec_entry_point = create_execute_entrypoint( address, class_hash, read_storage_entrypoint_selector, @@ -2610,7 +2610,7 @@ fn library_call_failure() { let program_data = include_bytes!("../../starknet_programs/cairo2/square_root.casm"); let contract_class: CasmContractClass = serde_json::from_slice(program_data).unwrap(); let entrypoints = contract_class.clone().entry_points_by_type; - let entrypoint_selector = &entrypoints.external.get(0).unwrap().selector; + let entrypoint_selector = &entrypoints.external.first().unwrap().selector; // Create state reader with class hash data let contract_class_cache = PermanentContractClassCache::default(); @@ -3100,7 +3100,7 @@ fn keccak_syscall() { let program_data = include_bytes!("../../starknet_programs/cairo2/test_cairo_keccak.casm"); let contract_class: CasmContractClass = serde_json::from_slice(program_data).unwrap(); let entrypoints = contract_class.clone().entry_points_by_type; - let read_storage_entrypoint_selector = &entrypoints.external.get(0).unwrap().selector; + let read_storage_entrypoint_selector = &entrypoints.external.first().unwrap().selector; // Create state reader with class hash data let contract_class_cache = PermanentContractClassCache::default(); @@ -3143,7 +3143,7 @@ fn keccak_syscall() { // RUN READ_STORAGE // Create an execution entry point let calldata = [].to_vec(); - let read_storage_exec_entry_point = create_execute_extrypoint( + let read_storage_exec_entry_point = create_execute_entrypoint( address, class_hash, read_storage_entrypoint_selector, @@ -3177,7 +3177,7 @@ fn library_call_recursive_50_calls() { let program_data = include_bytes!("../../starknet_programs/cairo2/square_root_recursive.casm"); let contract_class: CasmContractClass = serde_json::from_slice(program_data).unwrap(); let entrypoints = contract_class.clone().entry_points_by_type; - let entrypoint_selector = &entrypoints.external.get(0).unwrap().selector; + let entrypoint_selector = &entrypoints.external.first().unwrap().selector; // Create state reader with class hash data let contract_class_cache = PermanentContractClassCache::default(); @@ -3348,7 +3348,7 @@ fn call_contract_storage_write_read_recursive_50_calls() { let simple_wallet_constructor_entrypoint_selector = simple_wallet_contract_class .entry_points_by_type .constructor - .get(0) + .first() .unwrap() .selector .clone(); @@ -3387,7 +3387,7 @@ fn call_contract_storage_write_read_recursive_50_calls() { let mut resources_manager = ExecutionResourcesManager::default(); - let create_execute_extrypoint = |selector: &BigUint, + let create_execute_entrypoint = |selector: &BigUint, calldata: Vec, entry_point_type: EntryPointType, class_hash: [u8; 32], @@ -3408,7 +3408,7 @@ fn call_contract_storage_write_read_recursive_50_calls() { // RUN SIMPLE_WALLET CONSTRUCTOR // Create an execution entry point let calldata = [25.into()].to_vec(); - let constructor_exec_entry_point = create_execute_extrypoint( + let constructor_exec_entry_point = create_execute_entrypoint( &simple_wallet_constructor_entrypoint_selector, calldata, EntryPointType::Constructor, @@ -3433,7 +3433,7 @@ fn call_contract_storage_write_read_recursive_50_calls() { // RUN GET_BALANCE // Create an execution entry point let calldata = [simple_wallet_address.0].to_vec(); - let get_balance_exec_entry_point = create_execute_extrypoint( + let get_balance_exec_entry_point = create_execute_entrypoint( get_balance_entrypoint_selector, calldata, EntryPointType::External, @@ -3459,7 +3459,7 @@ fn call_contract_storage_write_read_recursive_50_calls() { // RUN INCREASE_BALANCE // Create an execution entry point let calldata = [50.into(), simple_wallet_address.0].to_vec(); - let increase_balance_entry_point = create_execute_extrypoint( + let increase_balance_entry_point = create_execute_entrypoint( increase_balance_entrypoint_selector, calldata, EntryPointType::External, @@ -3489,7 +3489,7 @@ fn call_contract_storage_write_read_recursive_50_calls() { // RUN GET_BALANCE // Create an execution entry point let calldata = [simple_wallet_address.0].to_vec(); - let get_balance_exec_entry_point = create_execute_extrypoint( + let get_balance_exec_entry_point = create_execute_entrypoint( get_balance_entrypoint_selector, calldata, EntryPointType::External, @@ -3554,7 +3554,7 @@ fn call_contract_storage_write_read_recursive_100_calls() { let simple_wallet_constructor_entrypoint_selector = simple_wallet_contract_class .entry_points_by_type .constructor - .get(0) + .first() .unwrap() .selector .clone(); @@ -3593,7 +3593,7 @@ fn call_contract_storage_write_read_recursive_100_calls() { let mut resources_manager = ExecutionResourcesManager::default(); - let create_execute_extrypoint = |selector: &BigUint, + let create_execute_entrypoint = |selector: &BigUint, calldata: Vec, entry_point_type: EntryPointType, class_hash: [u8; 32], @@ -3614,7 +3614,7 @@ fn call_contract_storage_write_read_recursive_100_calls() { // RUN SIMPLE_WALLET CONSTRUCTOR // Create an execution entry point let calldata = [25.into()].to_vec(); - let constructor_exec_entry_point = create_execute_extrypoint( + let constructor_exec_entry_point = create_execute_entrypoint( &simple_wallet_constructor_entrypoint_selector, calldata, EntryPointType::Constructor, @@ -3639,7 +3639,7 @@ fn call_contract_storage_write_read_recursive_100_calls() { // RUN GET_BALANCE // Create an execution entry point let calldata = [simple_wallet_address.0].to_vec(); - let get_balance_exec_entry_point = create_execute_extrypoint( + let get_balance_exec_entry_point = create_execute_entrypoint( get_balance_entrypoint_selector, calldata, EntryPointType::External, @@ -3665,7 +3665,7 @@ fn call_contract_storage_write_read_recursive_100_calls() { // RUN INCREASE_BALANCE // Create an execution entry point let calldata = [100.into(), simple_wallet_address.0].to_vec(); - let increase_balance_entry_point = create_execute_extrypoint( + let increase_balance_entry_point = create_execute_entrypoint( increase_balance_entrypoint_selector, calldata, EntryPointType::External, @@ -3695,7 +3695,7 @@ fn call_contract_storage_write_read_recursive_100_calls() { // RUN GET_BALANCE // Create an execution entry point let calldata = [simple_wallet_address.0].to_vec(); - let get_balance_exec_entry_point = create_execute_extrypoint( + let get_balance_exec_entry_point = create_execute_entrypoint( get_balance_entrypoint_selector, calldata, EntryPointType::External, @@ -3729,7 +3729,7 @@ fn test_get_execution_info_v2() { let program_data = include_bytes!("../../starknet_programs/cairo2/get_execution_info_v2.casm"); let contract_class: CasmContractClass = serde_json::from_slice(program_data).unwrap(); let entrypoints = contract_class.clone().entry_points_by_type; - let external_entrypoint_selector = &entrypoints.external.get(0).unwrap().selector; + let external_entrypoint_selector = &entrypoints.external.first().unwrap().selector; // Create state reader with class hash data let contract_class_cache = PermanentContractClassCache::default(); @@ -3787,7 +3787,7 @@ fn test_get_execution_info_v2() { // RUN GET_INFO // Create an execution entry point - let get_info_exec_entry_point = create_execute_extrypoint( + let get_info_exec_entry_point = create_execute_entrypoint( address.clone(), class_hash, external_entrypoint_selector, diff --git a/tests/integration_tests/cairo_native.rs b/tests/integration_tests/cairo_native.rs index 2a2275825..326bb090e 100644 --- a/tests/integration_tests/cairo_native.rs +++ b/tests/integration_tests/cairo_native.rs @@ -3,7 +3,10 @@ use assert_matches::assert_matches; use cairo_vm::Felt252; use pretty_assertions_sorted::*; +use starknet_in_rust::definitions::block_context::StarknetOsConfig; +use starknet_in_rust::execution::TransactionExecutionInfo; use starknet_in_rust::hash_utils::calculate_contract_address; +use starknet_in_rust::transaction::Transaction; use starknet_in_rust::{ definitions::{block_context::BlockContext, constants::TRANSACTION_VERSION}, execution::{ @@ -828,7 +831,7 @@ fn get_execution_info_test() { } #[derive(Debug, Default)] -struct TestStateSetup { +pub struct TestStateSetup { state_reader: InMemoryStateReader, cache_native: PermanentContractClassCache, @@ -900,17 +903,42 @@ impl TestStateSetup { TestState { state_vm: CachedState::new(state_reader.clone(), Arc::new(self.cache_vm)), state_native: CachedState::new(state_reader, Arc::new(self.cache_native)), + + starknet_os_config: Default::default(), + } + } + + pub fn finalize_with_starknet_os_config( + self, + starknet_os_config: StarknetOsConfig, + ) -> TestState { + let state_reader = Arc::new(self.state_reader); + + TestState { + state_vm: CachedState::new(state_reader.clone(), Arc::new(self.cache_vm)), + state_native: CachedState::new(state_reader, Arc::new(self.cache_native)), + + starknet_os_config, } } } #[derive(Debug)] -struct TestState { +pub struct TestState { state_native: CachedState, state_vm: CachedState, + + starknet_os_config: StarknetOsConfig, } impl TestState { + pub fn storage_writes_at(&self, k: (Address, [u8; 32])) -> (Option, Option) { + ( + self.state_vm.cache().storage_writes().get(&k).cloned(), + self.state_native.cache().storage_writes().get(&k).cloned(), + ) + } + pub fn insert_initial_storage_value(&mut self, k: (Address, [u8; 32]), v: Felt252) { self.state_native .cache_mut() @@ -1021,6 +1049,41 @@ impl TestState { Ok((execution_result_vm, execution_result_native)) } + pub fn execute_transaction( + &mut self, + tx: Transaction, + ) -> Result> { + let (_, contract_class_native) = + Self::get_contract_class_for_address(&self.state_native, &tx.contract_address()) + .ok_or("The contract address doesn't exist.")?; + + assert_matches!( + contract_class_native, + CompiledClass::Casm { + sierra: Some(_), + .. + }, + "The Native contract class doesn't contain the Sierra." + ); + + let mut block_context = BlockContext::default(); + block_context.block_info_mut().block_number = 30; + let context = block_context.starknet_os_config_mut(); + *context = self.starknet_os_config.clone(); + + let execution_result_native = tx + .execute( + &mut self.state_native, + &block_context, + u128::MAX, + #[cfg(feature = "cairo-native")] + None, + ) + .unwrap(); + + Ok(execution_result_native) + } + fn get_contract_class_for_address( state: &CachedState, address: &Address, diff --git a/tests/integration_tests/complex_contracts/erc20.rs b/tests/integration_tests/complex_contracts/erc20.rs index 50627e015..4d0467072 100644 --- a/tests/integration_tests/complex_contracts/erc20.rs +++ b/tests/integration_tests/complex_contracts/erc20.rs @@ -27,7 +27,7 @@ fn test_erc20_cairo2() { let program_data = include_bytes!("../../../starknet_programs/cairo2/deploy_erc20.casm"); let contract_class: CasmContractClass = serde_json::from_slice(program_data).unwrap(); let entrypoints = contract_class.clone().entry_points_by_type; - let entrypoint_selector = &entrypoints.external.get(0).unwrap().selector; + let entrypoint_selector = &entrypoints.external.first().unwrap().selector; // Create state reader with class hash data let contract_class_cache = Arc::new(PermanentContractClassCache::default()); @@ -124,7 +124,7 @@ fn test_erc20_cairo2() { None, ) .unwrap(); - let erc20_address = *call_info.call_info.unwrap().retdata.get(0).unwrap(); + let erc20_address = *call_info.call_info.unwrap().retdata.first().unwrap(); // ACCOUNT 1 let program_data_account = diff --git a/tests/integration_tests/delegate_call.rs b/tests/integration_tests/delegate_call.rs index ee044f0df..fc0befc41 100644 --- a/tests/integration_tests/delegate_call.rs +++ b/tests/integration_tests/delegate_call.rs @@ -59,7 +59,7 @@ fn delegate_call() { let test_delegate_call_selector = *entry_points_by_type .get(&EntryPointType::External) .unwrap() - .get(0) + .first() .unwrap() .selector(); diff --git a/tests/integration_tests/fibonacci.rs b/tests/integration_tests/fibonacci.rs index 5f87ec2cf..b006823e5 100644 --- a/tests/integration_tests/fibonacci.rs +++ b/tests/integration_tests/fibonacci.rs @@ -39,7 +39,7 @@ fn integration_test() { let fib_entrypoint_selector = *entry_points_by_type .get(&EntryPointType::External) .unwrap() - .get(0) + .first() .unwrap() .selector(); @@ -148,7 +148,7 @@ fn integration_test_cairo1() { let program_data = include_bytes!("../../starknet_programs/cairo2/fibonacci.casm"); let contract_class: CasmContractClass = serde_json::from_slice(program_data).unwrap(); let entrypoints = contract_class.clone().entry_points_by_type; - let fib_entrypoint_selector = &entrypoints.external.get(0).unwrap().selector; + let fib_entrypoint_selector = &entrypoints.external.first().unwrap().selector; // Create state reader with class hash data let contract_class_cache = PermanentContractClassCache::default(); diff --git a/tests/integration_tests/increase_balance.rs b/tests/integration_tests/increase_balance.rs index 4a87ef619..0256e57fc 100644 --- a/tests/integration_tests/increase_balance.rs +++ b/tests/integration_tests/increase_balance.rs @@ -36,7 +36,7 @@ fn hello_starknet_increase_balance() { let increase_balance_selector = *entry_points_by_type .get(&EntryPointType::External) .unwrap() - .get(0) + .first() .unwrap() .selector(); diff --git a/tests/integration_tests/internals.rs b/tests/integration_tests/internals.rs index ab57bca42..39fa85ba4 100644 --- a/tests/integration_tests/internals.rs +++ b/tests/integration_tests/internals.rs @@ -2226,7 +2226,7 @@ fn test_library_call_with_declare_v2() { let program_data = include_bytes!("../../starknet_programs/cairo2/fibonacci_dispatcher.casm"); let contract_class: CasmContractClass = serde_json::from_slice(program_data).unwrap(); let entrypoints = contract_class.clone().entry_points_by_type; - let external_entrypoint_selector = &entrypoints.external.get(0).unwrap().selector; + let external_entrypoint_selector = &entrypoints.external.first().unwrap().selector; let address = Address(6666.into()); let mut class_hash: ClassHash = ClassHash([0; 32]); @@ -2253,7 +2253,7 @@ fn test_library_call_with_declare_v2() { ) .unwrap(); - let create_execute_extrypoint = |selector: &BigUint, + let create_execute_entrypoint = |selector: &BigUint, calldata: Vec, entry_point_type: EntryPointType| -> ExecutionEntryPoint { @@ -2277,7 +2277,7 @@ fn test_library_call_with_declare_v2() { 1.into(), 10.into(), ]; - let send_message_exec_entry_point = create_execute_extrypoint( + let send_message_exec_entry_point = create_execute_entrypoint( external_entrypoint_selector, calldata.clone(), EntryPointType::External, diff --git a/tests/integration_tests/storage.rs b/tests/integration_tests/storage.rs index 805cea6be..32de39a95 100644 --- a/tests/integration_tests/storage.rs +++ b/tests/integration_tests/storage.rs @@ -33,7 +33,7 @@ fn integration_storage_test() { let storage_entrypoint_selector = *entry_points_by_type .get(&EntryPointType::External) .unwrap() - .get(0) + .first() .unwrap() .selector(); diff --git a/tests/integration_tests/syscalls.rs b/tests/integration_tests/syscalls.rs index 12b53206a..43f01cf5e 100644 --- a/tests/integration_tests/syscalls.rs +++ b/tests/integration_tests/syscalls.rs @@ -1444,7 +1444,7 @@ fn deploy_cairo1_and_invoke() { let calldata = [3.into()].to_vec(); let entrypoints = test_contract_class.entry_points_by_type; - let entrypoint_selector = &entrypoints.external.get(0).unwrap().selector; + let entrypoint_selector = &entrypoints.external.first().unwrap().selector; let exec_entry_point = ExecutionEntryPoint::new( ret_address, From 9487300d38d90ab163d25cdef5c870b1dad28546 Mon Sep 17 00:00:00 2001 From: Gregory Edison Date: Wed, 27 Mar 2024 13:33:30 +0100 Subject: [PATCH 3/5] add kakarot testing to SiR --- .../complex_contracts/kakarot/mod.rs | 358 ++++++++++++++++++ .../complex_contracts/mod.rs | 1 + 2 files changed, 359 insertions(+) create mode 100644 tests/integration_tests/complex_contracts/kakarot/mod.rs diff --git a/tests/integration_tests/complex_contracts/kakarot/mod.rs b/tests/integration_tests/complex_contracts/kakarot/mod.rs new file mode 100644 index 000000000..2b372ceb1 --- /dev/null +++ b/tests/integration_tests/complex_contracts/kakarot/mod.rs @@ -0,0 +1,358 @@ +use std::str::FromStr; + +use cairo_vm::Felt252; +use reth_primitives::{ + sign_message, AccessList, Bytes, Signature, TransactionSigned, TxValue, B256, U256, +}; +use starknet::core::utils::{get_contract_address, get_storage_var_address, starknet_keccak}; +use starknet_api::core::L2_ADDRESS_UPPER_BOUND; +use starknet_crypto::{poseidon_hash_many, FieldElement}; +use starknet_in_rust::definitions::block_context::{FeeTokenAddresses, StarknetOsConfig}; +use starknet_in_rust::definitions::constants::EXECUTE_ENTRY_POINT_SELECTOR; +use starknet_in_rust::transaction::Address; +use starknet_in_rust::transaction::{ + ClassHash, InvokeFunction, Transaction, VersionSpecificAccountTxFields, +}; +use starknet_in_rust::utils::{calculate_sn_keccak, felt_to_field_element, field_element_to_felt}; + +use crate::integration_tests::cairo_native::TestStateSetup; + +#[test] +fn test_kakarot_contract() { + // Evm constants + let private_key: B256 = + B256::from_str("0x6ae82d865482a203603ecbf25c865e082396d7705a6bbce92c1ff1d6ab9b503c") + .unwrap(); + let public_key: reth_primitives::Address = + reth_primitives::Address::from_str("0x7513A12F74fFF533ee12F20EE524e4883CBd1945").unwrap(); + let contract_address: reth_primitives::Address = + reth_primitives::Address::from_str("0x0000000000000000000000000000000000001234").unwrap(); + + // Starknet constants + let chain_id = Felt252::from_hex("0x4B4B5254").unwrap(); + + let kakarot_class_hash = ClassHash([1; 32]); + let kakarot_address = Address(1.into()); + let uninitialized_account_class_hash = ClassHash([3; 32]); + + // EOA + let eoa_evm_address = Felt252::from_bytes_be_slice(public_key.0.as_slice()); + let eoa_class_hash = ClassHash([2; 32]); + let eoa_address = compute_starknet_address( + &eoa_evm_address, + &kakarot_address.0, + &Felt252::from_bytes_be(&uninitialized_account_class_hash.0), + ); + let eoa_address = Address(eoa_address); + + // Contract Account + let contract_account_evm_address = Felt252::from_bytes_be_slice(contract_address.0.as_slice()); + let contract_account_class_hash = ClassHash([3; 32]); + let contract_account_address = compute_starknet_address( + &contract_account_evm_address, + &kakarot_address.0, + &Felt252::from_bytes_be(&uninitialized_account_class_hash.0), + ); + let contract_account_address = Address(contract_account_address); + let bytecode = Felt252::from_bytes_be_slice(&[ + 0x60, 0x01, 0x60, 0x00, 0x55, 0x60, 0x02, 0x60, 0x00, 0x53, 0x60, 0x01, 0x60, 0x00, 0xf3, + ]); + let bytecode_base_address = compute_storage_key("contract_account_bytecode", &[]); + let bytecode_storage_key = field_element_to_felt(&poseidon_hash_many(&[ + felt_to_field_element(&bytecode_base_address).unwrap(), + FieldElement::ZERO, + ])); + + let fee_token_address = Address( + Felt252::from_hex("0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7") + .unwrap(), + ); + + let mut state = TestStateSetup::default(); + + // Deploy Kakarot + state + .load_contract_at_address( + kakarot_class_hash, + kakarot_address.clone(), + "starknet_programs/kakarot/contracts_KakarotCore.cairo", + ) + .unwrap(); + // Deploy EOA + state + .load_contract_at_address( + eoa_class_hash, + eoa_address.clone(), + "starknet_programs/kakarot/contracts_ExternallyOwnedAccount.cairo", + ) + .unwrap(); + // Deploy Contract Account + state + .load_contract_at_address( + contract_account_class_hash, + contract_account_address.clone(), + "starknet_programs/kakarot/contracts_ContractAccount.cairo", + ) + .unwrap(); + + // Declare uninitialized account class hash + state + .load_contract( + uninitialized_account_class_hash, + "starknet_programs/kakarot/contracts_UninitializedAccount.cairo", + ) + .unwrap(); + + // Prepare storage for Kakarot + let kakarot_storage = vec![ + ( + (kakarot_address.clone(), compute_storage_key("owner", &[])), + eoa_address.0, + ), + ( + ( + kakarot_address.clone(), + compute_storage_key("chain_id", &[]), + ), + chain_id, + ), + ( + ( + kakarot_address.clone(), + compute_storage_key("native_token", &[]), + ), + fee_token_address.0, + ), + ( + ( + kakarot_address.clone(), + compute_storage_key("ca_class_hash", &[]), + ), + Felt252::from_bytes_be(&contract_account_class_hash.0), + ), + ( + ( + kakarot_address.clone(), + compute_storage_key("eoa_class_hash", &[]), + ), + Felt252::from_bytes_be(&eoa_class_hash.0), + ), + ( + ( + kakarot_address.clone(), + compute_storage_key("account_class_hash", &[]), + ), + Felt252::from_bytes_be(&uninitialized_account_class_hash.0), + ), + // Add the EOA to the address registry + ( + ( + kakarot_address.clone(), + compute_storage_key("address_registry", &[eoa_evm_address]), + ), + Felt252::ONE, // Set account type to 1 (EOA) + ), + ( + ( + kakarot_address.clone(), + compute_storage_key("address_registry", &[eoa_evm_address]) + Felt252::ONE, + ), + eoa_address.0, + ), + // Add the contract account to the address registry + ( + ( + kakarot_address.clone(), + compute_storage_key("address_registry", &[contract_account_evm_address]), + ), + Felt252::TWO, // Set account type to 1 (CA) + ), + ( + ( + kakarot_address.clone(), + compute_storage_key("address_registry", &[contract_account_evm_address]) + + Felt252::ONE, + ), + contract_account_address.0, + ), + ]; + + // Prepare storage for EOA + let eoa_storage = vec![ + ( + (eoa_address.clone(), compute_storage_key("evm_address", &[])), + eoa_evm_address, + ), + ( + (eoa_address.clone(), compute_storage_key("chain_id", &[])), + chain_id, + ), + ( + ( + eoa_address.clone(), + compute_storage_key("kakarot_core_address", &[]), + ), + kakarot_address.clone().0, + ), + ]; + + // Prepare storage for Contract Account + let contract_account_storage = vec![ + ( + ( + contract_account_address.clone(), + compute_storage_key("evm_address", &[]), + ), + contract_account_evm_address, + ), + ( + ( + contract_account_address.clone(), + compute_storage_key("chain_id", &[]), + ), + chain_id, + ), + ( + ( + contract_account_address.clone(), + compute_storage_key("kakarot_core_address", &[]), + ), + kakarot_address.0, + ), + // Set the bytecode + ( + (contract_account_address.clone(), bytecode_storage_key), + bytecode, + ), + ]; + + // Set the initial storage + let mut state = state.finalize_with_starknet_os_config(StarknetOsConfig::new( + chain_id, + FeeTokenAddresses::new(fee_token_address.clone(), fee_token_address), + Default::default(), + )); + + let storage = [kakarot_storage, eoa_storage, contract_account_storage].concat(); + for (k, v) in storage { + state.insert_initial_storage_value((k.0, k.1.to_bytes_be()), v); + } + + // Prepare the evm transaction + let mut transaction = TransactionSigned { + hash: B256::default(), + signature: Signature::default(), + transaction: reth_primitives::Transaction::Eip1559(reth_primitives::TxEip1559 { + chain_id: *chain_id.to_le_digits().first().unwrap(), + nonce: 0, + gas_limit: 1_000_000, + max_fee_per_gas: 0, + max_priority_fee_per_gas: 0, + to: reth_primitives::TransactionKind::Call(contract_address), + value: TxValue::from(u8::MIN), + access_list: AccessList::default(), + input: Bytes::default(), + }), + }; + let signature = sign_message(private_key, transaction.transaction.signature_hash()).unwrap(); + transaction.signature = signature; + + // Prepare the starknet transaction + let mut calldata = vec![]; + transaction + .transaction + .encode_without_signature(&mut calldata); + let mut calldata = calldata.into_iter().map(Felt252::from).collect::>(); + let mut execute_calldata = vec![ + Felt252::ONE, // call array length + kakarot_address.0, // contract address + Felt252::from_bytes_be(&calculate_sn_keccak(b"eth_send_transaction")), // selector + Felt252::from(calldata.len()), // calldata length + ]; + execute_calldata.append(&mut calldata); + + let [r_low, r_high] = split_u256(signature.r); + let [s_low, s_high] = split_u256(signature.s); + let signature = [r_low, r_high, s_low, s_high, signature.odd_y_parity as u128] + .into_iter() + .map(Felt252::from) + .collect::>(); + + let tx = Transaction::InvokeFunction( + InvokeFunction::new( + eoa_address, + *EXECUTE_ENTRY_POINT_SELECTOR, + VersionSpecificAccountTxFields::Deprecated(0), + Felt252::ONE, + execute_calldata, + signature, + chain_id, + Some(Felt252::ZERO), + ) + .unwrap(), + ); + + let tx = tx.create_for_simulation(false, false, true, true, true); + + let execution_result = state.execute_transaction(tx).unwrap(); + assert!(execution_result.revert_error.is_none()); + + // Check that the storage var was updated (contract bytecode should update storage var at key 0u256 to 1) + let low_key = compute_poseidon_storage_base_address( + "contract_account_storage_keys", + &[Felt252::ZERO, Felt252::ZERO], + ); + let (_, value) = state.storage_writes_at((contract_account_address, low_key.to_bytes_be())); + assert_eq!(value.unwrap(), Felt252::ONE); +} + +fn compute_storage_key(key: &str, args: &[Felt252]) -> Felt252 { + let args = args + .iter() + .map(|arg| felt_to_field_element(arg).unwrap()) + .collect::>(); + field_element_to_felt(&get_storage_var_address(key, &args).unwrap()) +} + +fn compute_starknet_address( + evm_address: &Felt252, + kakarot_address: &Felt252, + account_class_hash: &Felt252, +) -> Felt252 { + let salt = felt_to_field_element(evm_address).unwrap(); + let class_hash = felt_to_field_element(account_class_hash).unwrap(); + let deployer_address = felt_to_field_element(kakarot_address).unwrap(); + + let constructor_args = vec![deployer_address, salt]; + + let starknet_address = + get_contract_address(salt, class_hash, &constructor_args, deployer_address); + + field_element_to_felt(&starknet_address) +} + +fn split_u256(value: U256) -> [u128; 2] { + [ + (value & U256::from(u128::MAX)).try_into().unwrap(), // safe unwrap <= U128::MAX. + (value >> U256::from(128)).try_into().unwrap(), // safe unwrap <= U128::MAX. + ] +} + +fn compute_poseidon_storage_base_address(storage_var_name: &str, keys: &[Felt252]) -> Felt252 { + let selector = starknet_keccak(storage_var_name.as_bytes()); + + let data: Vec<_> = keys + .iter() + .filter_map(|d| felt_to_field_element(d).ok()) + .collect(); + let data = [vec![selector], data].concat(); + + let key = poseidon_hash_many(&data); + let key = field_element_to_felt(&key); + + key.mod_floor( + &Felt252::from_bytes_le_slice(&L2_ADDRESS_UPPER_BOUND.to_bytes_be()) + .try_into() + .unwrap(), + ) +} diff --git a/tests/integration_tests/complex_contracts/mod.rs b/tests/integration_tests/complex_contracts/mod.rs index 1131126f3..3360c0143 100644 --- a/tests/integration_tests/complex_contracts/mod.rs +++ b/tests/integration_tests/complex_contracts/mod.rs @@ -1,4 +1,5 @@ pub mod amm_contracts; pub mod erc20; +pub mod kakarot; pub mod nft; pub mod utils; From d199153ff997371a1f326e4d992d63c3329c4cca Mon Sep 17 00:00:00 2001 From: Gregory Edison Date: Wed, 27 Mar 2024 13:36:13 +0100 Subject: [PATCH 4/5] add ignore --- src/transaction/mod.rs | 2 +- tests/integration_tests/complex_contracts/kakarot/mod.rs | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/transaction/mod.rs b/src/transaction/mod.rs index c5721de4f..2cf70f406 100644 --- a/src/transaction/mod.rs +++ b/src/transaction/mod.rs @@ -238,7 +238,7 @@ impl Transaction { } } - /// It creates a new transaction structure modification the skip flags. It is meant to be used only to run a simulation + /// It creates a new transaction structure modifying the skip flags. It is meant to be used only to run a simulation ///## Parameters: ///- skip_validate: the transaction will not be verified. ///- skip_execute: the transaction will not be executed in the cairo vm. diff --git a/tests/integration_tests/complex_contracts/kakarot/mod.rs b/tests/integration_tests/complex_contracts/kakarot/mod.rs index 2b372ceb1..e523d70ae 100644 --- a/tests/integration_tests/complex_contracts/kakarot/mod.rs +++ b/tests/integration_tests/complex_contracts/kakarot/mod.rs @@ -18,6 +18,7 @@ use starknet_in_rust::utils::{calculate_sn_keccak, felt_to_field_element, field_ use crate::integration_tests::cairo_native::TestStateSetup; #[test] +#[ignore = "linked to native issue #499 and #500"] fn test_kakarot_contract() { // Evm constants let private_key: B256 = @@ -54,6 +55,7 @@ fn test_kakarot_contract() { &Felt252::from_bytes_be(&uninitialized_account_class_hash.0), ); let contract_account_address = Address(contract_account_address); + // PUSH1 01 PUSH1 00 SSTORE PUSH1 02 PUSH1 00 MSTORE8 PUSH1 01 PUSH1 00 RETURN let bytecode = Felt252::from_bytes_be_slice(&[ 0x60, 0x01, 0x60, 0x00, 0x55, 0x60, 0x02, 0x60, 0x00, 0x53, 0x60, 0x01, 0x60, 0x00, 0xf3, ]); From e07a059b03a1fa26b665981f70c9effb3e5c78ee Mon Sep 17 00:00:00 2001 From: Gregory Edison Date: Thu, 11 Apr 2024 11:59:40 -0300 Subject: [PATCH 5/5] bump native --- Cargo.lock | 30 ++++++++++++------- Cargo.toml | 20 +++++++------ src/execution/execution_entry_point.rs | 10 ++----- src/syscalls/native_syscall_handler.rs | 6 ++-- src/utils.rs | 7 +---- .../complex_contracts/kakarot/mod.rs | 2 +- 6 files changed, 39 insertions(+), 36 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 2704975f9..86070b093 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1317,7 +1317,7 @@ dependencies = [ [[package]] name = "cairo-native" version = "0.1.0" -source = "git+https://github.com/lambdaclass/cairo_native?rev=8fddcd3914badfe3f89752fe7a22befeaffc17f9#8fddcd3914badfe3f89752fe7a22befeaffc17f9" +source = "git+https://github.com/lambdaclass/cairo_native?rev=60ed062a3d6d40cd8688a580f440af525f40d437#60ed062a3d6d40cd8688a580f440af525f40d437" dependencies = [ "anyhow", "bumpalo", @@ -1361,7 +1361,7 @@ dependencies = [ [[package]] name = "cairo-native-runtime" version = "0.1.0" -source = "git+https://github.com/lambdaclass/cairo_native?rev=8fddcd3914badfe3f89752fe7a22befeaffc17f9#8fddcd3914badfe3f89752fe7a22befeaffc17f9" +source = "git+https://github.com/lambdaclass/cairo_native?rev=60ed062a3d6d40cd8688a580f440af525f40d437#60ed062a3d6d40cd8688a580f440af525f40d437" dependencies = [ "cairo-lang-runner", "lazy_static", @@ -1438,10 +1438,11 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.88" +version = "1.0.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02f341c093d19155a6e41631ce5971aac4e9a868262212153124c15fa22d1cdc" +checksum = "2678b2e3449475e95b0aa6f9b506a28e61b3dc8996592b983695e8ebb58a8b41" dependencies = [ + "jobserver", "libc", ] @@ -2858,6 +2859,15 @@ version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" +[[package]] +name = "jobserver" +version = "0.1.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab46a6e9526ddef3ae7f787c06f0f2600639ba80ea3eade3d8e670a2230f51d6" +dependencies = [ + "libc", +] + [[package]] name = "js-sys" version = "0.3.68" @@ -3115,9 +3125,9 @@ dependencies = [ [[package]] name = "melior" -version = "0.16.2" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e76dd7ff903474595023aebb93f8287667a2fe95132c65e1c77efdb99c64a973" +checksum = "672be978c3550fd9c329987c9457e60e4452049b24518a5acb2d3f14cf6d2777" dependencies = [ "dashmap", "melior-macro", @@ -5578,18 +5588,18 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.57" +version = "1.0.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e45bcbe8ed29775f228095caf2cd67af7a4ccf756ebff23a306bf3e8b47b24b" +checksum = "03468839009160513471e86a034bb2c5c0e4baae3b43f79ffc55c4a5427b3297" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.57" +version = "1.0.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a953cb265bef375dae3de6663da4d3804eee9682ea80d8e2542529b73c531c81" +checksum = "c61f3ba182994efc43764a46c018c347bc492c79f024e705f46567b418f6d4f7" dependencies = [ "proc-macro2", "quote", diff --git a/Cargo.toml b/Cargo.toml index 3ddd13cf3..6f9e7f690 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -15,10 +15,10 @@ replay_benchmark = [] [workspace] members = [ - "fuzzer", - "rpc_state_reader", - "replay", - "examples/contract_execution", + "fuzzer", + "rpc_state_reader", + "replay", + "examples/contract_execution", ] [workspace.dependencies] @@ -26,11 +26,13 @@ cairo-lang-casm = "=2.5.4" cairo-lang-sierra = "=2.5.4" cairo-lang-starknet = "=2.5.4" cairo-lang-utils = "=2.5.4" -cairo-vm = { git = "https://github.com/lambdaclass/cairo-vm", rev = "3547089579dd74f815edbc2d1caa91e00fc8a2f7", features = ["cairo-1-hints"] } +cairo-vm = { git = "https://github.com/lambdaclass/cairo-vm", rev = "3547089579dd74f815edbc2d1caa91e00fc8a2f7", features = [ + "cairo-1-hints", +] } num-traits = "0.2.15" starknet = "0.7.0" # todo: update to 0.9.0+ once cairo-lang is 2.6.0+ starknet_api = "0.7.0-dev.0" # todo: update to 0.9.0+ once cairo-lang is 2.6.0+ -thiserror = "1.0.32" +thiserror = "1.0.58" [dependencies] anyhow = "1.0" @@ -39,7 +41,7 @@ cairo-lang-casm = { workspace = true } cairo-lang-sierra = { workspace = true } cairo-lang-starknet = { workspace = true } cairo-lang-utils = { workspace = true } -cairo-native = { git = "https://github.com/lambdaclass/cairo_native", rev = "8fddcd3914badfe3f89752fe7a22befeaffc17f9", optional = true } +cairo-native = { git = "https://github.com/lambdaclass/cairo_native", rev = "60ed062a3d6d40cd8688a580f440af525f40d437", optional = true } k256 = "0.13.3" p256 = "0.13.2" sec1 = "0.7.3" @@ -59,8 +61,8 @@ once_cell = "1.17.1" sha3 = "0.10.1" serde = { version = "1.0.152", features = ["derive"] } serde_json = { version = "1.0", features = [ - "arbitrary_precision", - "raw_value", + "arbitrary_precision", + "raw_value", ] } serde_json_pythonic = "0.1.2" starknet = { workspace = true } diff --git a/src/execution/execution_entry_point.rs b/src/execution/execution_entry_point.rs index f1b11a4a1..fea00314a 100644 --- a/src/execution/execution_entry_point.rs +++ b/src/execution/execution_entry_point.rs @@ -687,9 +687,7 @@ impl ExecutionEntryPoint { class_hash: &ClassHash, program_cache: Rc>>, ) -> Result { - use cairo_native::{ - executor::NativeExecutor, metadata::syscall_handler::SyscallHandlerMeta, - }; + use cairo_native::executor::NativeExecutor; use crate::{ syscalls::{ @@ -757,8 +755,6 @@ impl ExecutionEntryPoint { resources_manager: Default::default(), }; - let syscall_meta = SyscallHandlerMeta::new(&mut syscall_handler); - let entry_point_fn = &sierra_program .funcs .iter() @@ -772,13 +768,13 @@ impl ExecutionEntryPoint { entry_point_id, &self.calldata, Some(self.initial_gas), - Some(&syscall_meta), + &mut syscall_handler, ), NativeExecutor::Jit(executor) => executor.invoke_contract_dynamic( entry_point_id, &self.calldata, Some(self.initial_gas), - Some(&syscall_meta), + &mut syscall_handler, ), } .map_err(|e| TransactionError::CustomError(format!("cairo-native error: {:?}", e)))?; diff --git a/src/syscalls/native_syscall_handler.rs b/src/syscalls/native_syscall_handler.rs index badeea73a..c1414aab1 100644 --- a/src/syscalls/native_syscall_handler.rs +++ b/src/syscalls/native_syscall_handler.rs @@ -33,7 +33,7 @@ use cairo_native::{ cache::ProgramCache, starknet::{ BlockInfo, ExecutionInfo, ExecutionInfoV2, ResourceBounds, Secp256k1Point, Secp256r1Point, - StarkNetSyscallHandler, SyscallResult, TxInfo, TxV2Info, U256, + StarknetSyscallHandler, SyscallResult, TxInfo, TxV2Info, U256, }, }; use cairo_vm::Felt252; @@ -85,8 +85,8 @@ impl<'a, 'cache, S: StateReader, C: ContractClassCache> NativeSyscallHandler<'a, } } -impl<'a, 'cache, S: StateReader, C: ContractClassCache> StarkNetSyscallHandler - for NativeSyscallHandler<'a, 'cache, S, C> +impl<'a, 'cache, S: StateReader, C: ContractClassCache> StarknetSyscallHandler + for &mut NativeSyscallHandler<'a, 'cache, S, C> { fn get_block_hash( &mut self, diff --git a/src/utils.rs b/src/utils.rs index c7fe0d6b9..675bb8090 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -122,12 +122,7 @@ pub fn field_element_to_felt(felt: &FieldElement) -> Felt252 { } pub fn felt_to_hash(value: &Felt252) -> ClassHash { - let mut output = [0; 32]; - - let bytes = value.to_bytes_be(); - output[..].copy_from_slice(&bytes); - - ClassHash(output) + ClassHash(value.to_bytes_be()) } pub fn string_to_hash(class_string: &str) -> ClassHash { diff --git a/tests/integration_tests/complex_contracts/kakarot/mod.rs b/tests/integration_tests/complex_contracts/kakarot/mod.rs index e523d70ae..a07891fa8 100644 --- a/tests/integration_tests/complex_contracts/kakarot/mod.rs +++ b/tests/integration_tests/complex_contracts/kakarot/mod.rs @@ -18,7 +18,7 @@ use starknet_in_rust::utils::{calculate_sn_keccak, felt_to_field_element, field_ use crate::integration_tests::cairo_native::TestStateSetup; #[test] -#[ignore = "linked to native issue #499 and #500"] +// #[ignore = "linked to native issue #499 and #500"] fn test_kakarot_contract() { // Evm constants let private_key: B256 =