diff --git a/contracts/src/deploy-config/holesky.ts b/contracts/src/deploy-config/holesky.ts index a73fa6cb7..fb4bfbcbd 100644 --- a/contracts/src/deploy-config/holesky.ts +++ b/contracts/src/deploy-config/holesky.ts @@ -14,7 +14,7 @@ const config = { l2BaseFee: 0.1, // Gwei // verify contract config - programVkey: '0x001bbd0e32f56275cefa4a7313c51b94b763a4c295ac02af037b494895bc58c2', + programVkey: '0x00940d658cf507217304ec5f7ca5558e2e0fd67881485f604b63588c31a8792f', // rollup contract config // initialize config finalizationPeriodSeconds: 600, diff --git a/contracts/src/deploy-config/hoodi.ts b/contracts/src/deploy-config/hoodi.ts index ec2fd2a7b..e8b869b6d 100644 --- a/contracts/src/deploy-config/hoodi.ts +++ b/contracts/src/deploy-config/hoodi.ts @@ -17,7 +17,7 @@ const config = { l2BaseFee: 0.1, // Gwei // verify contract config - programVkey: '0x001bbd0e32f56275cefa4a7313c51b94b763a4c295ac02af037b494895bc58c2', + programVkey: '0x00940d658cf507217304ec5f7ca5558e2e0fd67881485f604b63588c31a8792f', // rollup contract config // initialize config finalizationPeriodSeconds: 600, diff --git a/contracts/src/deploy-config/l1.ts b/contracts/src/deploy-config/l1.ts index 9bd23177a..b49c5a0ce 100644 --- a/contracts/src/deploy-config/l1.ts +++ b/contracts/src/deploy-config/l1.ts @@ -17,7 +17,7 @@ const config = { l2BaseFee: 0.1, // Gwei // verify contract config - programVkey: '0x001bbd0e32f56275cefa4a7313c51b94b763a4c295ac02af037b494895bc58c2', + programVkey: '0x00940d658cf507217304ec5f7ca5558e2e0fd67881485f604b63588c31a8792f', // rollup contract config // initialize config finalizationPeriodSeconds: 10, diff --git a/contracts/src/deploy-config/qanetl1.ts b/contracts/src/deploy-config/qanetl1.ts index edb387991..57bc2223a 100644 --- a/contracts/src/deploy-config/qanetl1.ts +++ b/contracts/src/deploy-config/qanetl1.ts @@ -14,7 +14,7 @@ const config = { l2BaseFee: 0.1, // Gwei // verify contract config - programVkey: '0x001bbd0e32f56275cefa4a7313c51b94b763a4c295ac02af037b494895bc58c2', + programVkey: '0x00940d658cf507217304ec5f7ca5558e2e0fd67881485f604b63588c31a8792f', // rollup contract config // initialize config finalizationPeriodSeconds: 600, diff --git a/contracts/src/deploy-config/sepolia.ts b/contracts/src/deploy-config/sepolia.ts index d8c416577..c5c4b046c 100644 --- a/contracts/src/deploy-config/sepolia.ts +++ b/contracts/src/deploy-config/sepolia.ts @@ -18,7 +18,7 @@ const config = { /** * ---to---legacy property */ - programVkey: '0x001bbd0e32f56275cefa4a7313c51b94b763a4c295ac02af037b494895bc58c2', + programVkey: '0x00940d658cf507217304ec5f7ca5558e2e0fd67881485f604b63588c31a8792f', rollupMinDeposit: 0.0001, rollupProofWindow: 86400, rollupGenesisBlockNumber: 0, diff --git a/contracts/src/deploy-config/testnetl1.ts b/contracts/src/deploy-config/testnetl1.ts index ce1b46b0e..f46a89eca 100644 --- a/contracts/src/deploy-config/testnetl1.ts +++ b/contracts/src/deploy-config/testnetl1.ts @@ -13,7 +13,7 @@ const config = { sequencerWindowSize: 200, channelTimeout: 120, - programVkey: '0x001bbd0e32f56275cefa4a7313c51b94b763a4c295ac02af037b494895bc58c2', + programVkey: '0x00940d658cf507217304ec5f7ca5558e2e0fd67881485f604b63588c31a8792f', rollupMinDeposit: 1, rollupProofWindow: 100, rollupGenesisBlockNumber: 0, diff --git a/prover/.gitignore b/prover/.gitignore index 62bb18875..3b0b3e462 100644 --- a/prover/.gitignore +++ b/prover/.gitignore @@ -26,4 +26,5 @@ contracts out lib -proof \ No newline at end of file +proof +state diff --git a/prover/Cargo.lock b/prover/Cargo.lock index 839f0cac2..a4f035465 100644 --- a/prover/Cargo.lock +++ b/prover/Cargo.lock @@ -63,18 +63,18 @@ checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" [[package]] name = "alloy" -version = "1.1.3" +version = "1.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f07655fedc35188f3c50ff8fc6ee45703ae14ef1bc7ae7d80e23a747012184e3" +checksum = "07dc44b606f29348ce7c127e7f872a6d2df3cfeff85b7d6bba62faca75112fdd" dependencies = [ "alloy-core", ] [[package]] name = "alloy-chains" -version = "0.2.23" +version = "0.2.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35d744058a9daa51a8cf22a3009607498fcf82d3cf4c5444dd8056cdf651f471" +checksum = "90f374d3c6d729268bbe2d0e0ff992bb97898b2df756691a62ee1d5f0506bc39" dependencies = [ "alloy-primitives", "alloy-rlp", @@ -85,9 +85,9 @@ dependencies = [ [[package]] name = "alloy-consensus" -version = "1.1.3" +version = "1.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e318e25fb719e747a7e8db1654170fc185024f3ed5b10f86c08d448a912f6e2" +checksum = "b0c0dc44157867da82c469c13186015b86abef209bf0e41625e4b68bac61d728" dependencies = [ "alloy-eips", "alloy-primitives", @@ -112,9 +112,9 @@ dependencies = [ [[package]] name = "alloy-consensus-any" -version = "1.1.3" +version = "1.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "364380a845193a317bcb7a5398fc86cdb66c47ebe010771dde05f6869bf9e64a" +checksum = "ba4cdb42df3871cd6b346d6a938ec2ba69a9a0f49d1f82714bc5c48349268434" dependencies = [ "alloy-consensus", "alloy-eips", @@ -211,15 +211,28 @@ dependencies = [ "thiserror 2.0.17", ] +[[package]] +name = "alloy-eip7928" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3231de68d5d6e75332b7489cfcc7f4dfabeba94d990a10e4b923af0e6623540" +dependencies = [ + "alloy-primitives", + "alloy-rlp", + "borsh", + "serde", +] + [[package]] name = "alloy-eips" -version = "1.2.1" +version = "1.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6847d641141b92a1557094aa6c236cbe49c06fb24144d4a21fe6acb970c15888" +checksum = "b9f7ef09f21bd1e9cb8a686f168cb4a206646804567f0889eadb8dcc4c9288c8" dependencies = [ "alloy-eip2124", "alloy-eip2930", "alloy-eip7702", + "alloy-eip7928", "alloy-primitives", "alloy-rlp", "alloy-serde", @@ -238,9 +251,9 @@ dependencies = [ [[package]] name = "alloy-evm" -version = "0.25.2" +version = "0.25.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6ccc4c702c840148af1ce784cc5c6ed9274a020ef32417c5b1dbeab8c317673" +checksum = "bc719f3501f4b6761c0da9e1c657adc7ac37739dea51a373d5849efbe4f55e52" dependencies = [ "alloy-consensus", "alloy-eips", @@ -259,9 +272,9 @@ dependencies = [ [[package]] name = "alloy-genesis" -version = "1.1.3" +version = "1.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ba4b1be0988c11f0095a2380aa596e35533276b8fa6c9e06961bbfe0aebcac5" +checksum = "7c9cf3b99f46615fbf7dc1add0c96553abb7bf88fc9ec70dfbe7ad0b47ba7fe8" dependencies = [ "alloy-eips", "alloy-primitives", @@ -274,9 +287,9 @@ dependencies = [ [[package]] name = "alloy-hardforks" -version = "0.4.5" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d9a33550fc21fd77a3f8b63e99969d17660eec8dcc50a95a80f7c9964f7680b" +checksum = "83ba208044232d14d4adbfa77e57d6329f51bc1acc21f5667bb7db72d88a0831" dependencies = [ "alloy-chains", "alloy-eip2124", @@ -288,9 +301,9 @@ dependencies = [ [[package]] name = "alloy-json-abi" -version = "1.4.1" +version = "1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5513d5e6bd1cba6bdcf5373470f559f320c05c8c59493b6e98912fbe6733943f" +checksum = "e9dbe713da0c737d9e5e387b0ba790eb98b14dd207fe53eef50e19a5a8ec3dac" dependencies = [ "alloy-primitives", "alloy-sol-type-parser", @@ -300,9 +313,9 @@ dependencies = [ [[package]] name = "alloy-json-rpc" -version = "1.2.1" +version = "1.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4ab3330e491053e9608b2a315f147357bb8acb9377a988c1203f2e8e2b296c9" +checksum = "ff42cd777eea61f370c0b10f2648a1c81e0b783066cd7269228aa993afd487f7" dependencies = [ "alloy-primitives", "alloy-sol-types", @@ -315,9 +328,9 @@ dependencies = [ [[package]] name = "alloy-network" -version = "1.1.3" +version = "1.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12aeb37b6f2e61b93b1c3d34d01ee720207c76fe447e2a2c217e433ac75b17f5" +checksum = "8cbca04f9b410fdc51aaaf88433cbac761213905a65fe832058bcf6690585762" dependencies = [ "alloy-consensus", "alloy-consensus-any", @@ -341,9 +354,9 @@ dependencies = [ [[package]] name = "alloy-network-primitives" -version = "1.1.3" +version = "1.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abd29ace62872083e30929cd9b282d82723196d196db589f3ceda67edcc05552" +checksum = "42d6d15e069a8b11f56bef2eccbad2a873c6dd4d4c81d04dda29710f5ea52f04" dependencies = [ "alloy-consensus", "alloy-eips", @@ -354,9 +367,9 @@ dependencies = [ [[package]] name = "alloy-primitives" -version = "1.4.1" +version = "1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "355bf68a433e0fd7f7d33d5a9fc2583fde70bf5c530f63b80845f8da5505cf28" +checksum = "de3b431b4e72cd8bd0ec7a50b4be18e73dab74de0dba180eef171055e5d5926e" dependencies = [ "alloy-rlp", "bytes", @@ -372,19 +385,19 @@ dependencies = [ "paste", "proptest", "rand 0.9.2", + "rapidhash", "rayon", "ruint", "rustc-hash 2.1.1", "serde", "sha3", - "tiny-keccak", ] [[package]] name = "alloy-provider" -version = "1.1.3" +version = "1.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b710636d7126e08003b8217e24c09f0cca0b46d62f650a841736891b1ed1fc1" +checksum = "d181c8cc7cf4805d7e589bf4074d56d55064fa1a979f005a45a62b047616d870" dependencies = [ "alloy-chains", "alloy-consensus", @@ -406,7 +419,7 @@ dependencies = [ "either", "futures", "futures-utils-wasm", - "lru 0.13.0", + "lru 0.16.3", "parking_lot", "pin-project", "reqwest", @@ -421,9 +434,9 @@ dependencies = [ [[package]] name = "alloy-rlp" -version = "0.3.12" +version = "0.3.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f70d83b765fdc080dbcd4f4db70d8d23fe4761f2f02ebfa9146b833900634b4" +checksum = "e93e50f64a77ad9c5470bf2ad0ca02f228da70c792a8f06634801e202579f35e" dependencies = [ "alloy-rlp-derive", "arrayvec", @@ -432,9 +445,9 @@ dependencies = [ [[package]] name = "alloy-rlp-derive" -version = "0.3.12" +version = "0.3.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64b728d511962dda67c1bc7ea7c03736ec275ed2cf4c35d9585298ac9ccf3b73" +checksum = "ce8849c74c9ca0f5a03da1c865e3eb6f768df816e67dd3721a398a8a7e398011" dependencies = [ "proc-macro2", "quote", @@ -443,9 +456,9 @@ dependencies = [ [[package]] name = "alloy-rpc-client" -version = "1.1.3" +version = "1.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0882e72d2c1c0c79dcf4ab60a67472d3f009a949f774d4c17d0bdb669cfde05" +checksum = "f2792758a93ae32a32e9047c843d536e1448044f78422d71bf7d7c05149e103f" dependencies = [ "alloy-json-rpc", "alloy-primitives", @@ -466,9 +479,9 @@ dependencies = [ [[package]] name = "alloy-rpc-types" -version = "1.1.3" +version = "1.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39cf1398cb33aacb139a960fa3d8cf8b1202079f320e77e952a0b95967bf7a9f" +checksum = "7bdcbf9dfd5eea8bfeb078b1d906da8cd3a39c4d4dbe7a628025648e323611f6" dependencies = [ "alloy-primitives", "alloy-rpc-types-eth", @@ -478,9 +491,9 @@ dependencies = [ [[package]] name = "alloy-rpc-types-any" -version = "1.1.3" +version = "1.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a63fb40ed24e4c92505f488f9dd256e2afaed17faa1b7a221086ebba74f4122" +checksum = "dd720b63f82b457610f2eaaf1f32edf44efffe03ae25d537632e7d23e7929e1a" dependencies = [ "alloy-consensus-any", "alloy-rpc-types-eth", @@ -489,9 +502,9 @@ dependencies = [ [[package]] name = "alloy-rpc-types-debug" -version = "1.1.3" +version = "1.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4936f579d9d10eae01772b2ab3497f9d568684f05f26f8175e12f9a1a2babc33" +checksum = "e1b21e1ad18ff1b31ff1030e046462ab8168cf8894e6778cd805c8bdfe2bd649" dependencies = [ "alloy-primitives", "derive_more 2.1.0", @@ -501,9 +514,9 @@ dependencies = [ [[package]] name = "alloy-rpc-types-engine" -version = "1.1.3" +version = "1.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c60bdce3be295924122732b7ecd0b2495ce4790bedc5370ca7019c08ad3f26e" +checksum = "e4ac61f03f1edabccde1c687b5b25fff28f183afee64eaa2e767def3929e4457" dependencies = [ "alloy-consensus", "alloy-eips", @@ -520,9 +533,9 @@ dependencies = [ [[package]] name = "alloy-rpc-types-eth" -version = "1.1.3" +version = "1.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9eae0c7c40da20684548cbc8577b6b7447f7bf4ddbac363df95e3da220e41e72" +checksum = "9b2dc411f13092f237d2bf6918caf80977fc2f51485f9b90cb2a2f956912c8c9" dependencies = [ "alloy-consensus", "alloy-consensus-any", @@ -541,9 +554,9 @@ dependencies = [ [[package]] name = "alloy-serde" -version = "1.2.1" +version = "1.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "067b718d2e6ac1bb889341fcc7a250cfa49bcd3ba4f23923f1c1eb1f2b10cb7c" +checksum = "e2ce1e0dbf7720eee747700e300c99aac01b1a95bb93f493a01e78ee28bb1a37" dependencies = [ "alloy-primitives", "serde", @@ -552,9 +565,9 @@ dependencies = [ [[package]] name = "alloy-signer" -version = "1.2.1" +version = "1.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acff6b251740ef473932386d3b71657d3825daebf2217fb41a7ef676229225d4" +checksum = "2425c6f314522c78e8198979c8cbf6769362be4da381d4152ea8eefce383535d" dependencies = [ "alloy-primitives", "async-trait", @@ -586,9 +599,9 @@ dependencies = [ [[package]] name = "alloy-signer-local" -version = "1.1.3" +version = "1.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72cfe0be3ec5a8c1a46b2e5a7047ed41121d360d97f4405bb7c1c784880c86cb" +checksum = "c3ecb71ee53d8d9c3fa7bac17542c8116ebc7a9726c91b1bf333ec3d04f5a789" dependencies = [ "alloy-consensus", "alloy-network", @@ -602,9 +615,9 @@ dependencies = [ [[package]] name = "alloy-sol-macro" -version = "1.4.1" +version = "1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3ce480400051b5217f19d6e9a82d9010cdde20f1ae9c00d53591e4a1afbb312" +checksum = "ab81bab693da9bb79f7a95b64b394718259fdd7e41dceeced4cad57cb71c4f6a" dependencies = [ "alloy-sol-macro-expander", "alloy-sol-macro-input", @@ -616,9 +629,9 @@ dependencies = [ [[package]] name = "alloy-sol-macro-expander" -version = "1.4.1" +version = "1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d792e205ed3b72f795a8044c52877d2e6b6e9b1d13f431478121d8d4eaa9028" +checksum = "489f1620bb7e2483fb5819ed01ab6edc1d2f93939dce35a5695085a1afd1d699" dependencies = [ "alloy-json-abi", "alloy-sol-macro-input", @@ -628,16 +641,16 @@ dependencies = [ "proc-macro-error2", "proc-macro2", "quote", + "sha3", "syn 2.0.111", "syn-solidity", - "tiny-keccak", ] [[package]] name = "alloy-sol-macro-input" -version = "1.4.1" +version = "1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bd1247a8f90b465ef3f1207627547ec16940c35597875cdc09c49d58b19693c" +checksum = "56cef806ad22d4392c5fc83cf8f2089f988eb99c7067b4e0c6f1971fc1cca318" dependencies = [ "alloy-json-abi", "const-hex", @@ -653,9 +666,9 @@ dependencies = [ [[package]] name = "alloy-sol-type-parser" -version = "1.4.1" +version = "1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "954d1b2533b9b2c7959652df3076954ecb1122a28cc740aa84e7b0a49f6ac0a9" +checksum = "a6df77fea9d6a2a75c0ef8d2acbdfd92286cc599983d3175ccdc170d3433d249" dependencies = [ "serde", "winnow 0.7.14", @@ -663,9 +676,9 @@ dependencies = [ [[package]] name = "alloy-sol-types" -version = "1.4.1" +version = "1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70319350969a3af119da6fb3e9bddb1bce66c9ea933600cb297c8b1850ad2a3c" +checksum = "64612d29379782a5dde6f4b6570d9c756d734d760c0c94c254d361e678a6591f" dependencies = [ "alloy-json-abi", "alloy-primitives", @@ -675,9 +688,9 @@ dependencies = [ [[package]] name = "alloy-transport" -version = "1.1.3" +version = "1.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be98b07210d24acf5b793c99b759e9a696e4a2e67593aec0487ae3b3e1a2478c" +checksum = "fa186e560d523d196580c48bf00f1bf62e63041f28ecf276acc22f8b27bb9f53" dependencies = [ "alloy-json-rpc", "auto_impl", @@ -698,12 +711,13 @@ dependencies = [ [[package]] name = "alloy-transport-http" -version = "1.1.3" +version = "1.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4198a1ee82e562cab85e7f3d5921aab725d9bd154b6ad5017f82df1695877c97" +checksum = "aa501ad58dd20acddbfebc65b52e60f05ebf97c52fa40d1b35e91f5e2da0ad0e" dependencies = [ "alloy-json-rpc", "alloy-transport", + "itertools 0.14.0", "reqwest", "serde_json", "tower 0.5.2", @@ -713,9 +727,9 @@ dependencies = [ [[package]] name = "alloy-trie" -version = "0.9.1" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3412d52bb97c6c6cc27ccc28d4e6e8cf605469101193b50b0bd5813b1f990b5" +checksum = "4d7fd448ab0a017de542de1dcca7a58e7019fe0e7a34ed3f9543ebddf6aceffa" dependencies = [ "alloy-primitives", "alloy-rlp", @@ -724,14 +738,15 @@ dependencies = [ "nybbles", "serde", "smallvec", + "thiserror 2.0.17", "tracing", ] [[package]] name = "alloy-tx-macros" -version = "1.2.1" +version = "1.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04950a13cc4209d8e9b78f306e87782466bad8538c94324702d061ff03e211c9" +checksum = "6fa0c53e8c1e1ef4d01066b01c737fb62fc9397ab52c6e7bb5669f97d281b9bc" dependencies = [ "darling 0.21.3", "proc-macro2", @@ -1668,9 +1683,9 @@ dependencies = [ [[package]] name = "az" -version = "1.2.1" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b7e4c2464d97fe331d41de9d5db0def0a96f4d823b8b32a2efd503578988973" +checksum = "be5eb007b7cacc6c660343e96f650fedf4b5a77512399eb952ca6642cf8d13f7" [[package]] name = "backoff" @@ -2990,6 +3005,27 @@ dependencies = [ "static_assertions", ] +[[package]] +name = "fixed-map" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86ed19add84e8cb9e8cc5f7074de0324247149ffef0b851e215fb0edc50c229b" +dependencies = [ + "fixed-map-derive", + "serde", +] + +[[package]] +name = "fixed-map-derive" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6dc7a9cb3326bafb80642c5ce99b39a2c0702d4bfa8ee8a3e773791a6cbe2407" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.111", +] + [[package]] name = "flexi_logger" version = "0.29.0" @@ -3353,6 +3389,8 @@ version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" dependencies = [ + "allocator-api2", + "equivalent", "foldhash 0.2.0", "rayon", "serde", @@ -3959,9 +3997,9 @@ dependencies = [ [[package]] name = "keccak-asm" -version = "0.1.3" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "422fbc7ff2f2f5bdffeb07718e5a5324dca72b0c9293d50df4026652385e3314" +checksum = "b646a74e746cd25045aa0fd42f4f7f78aa6d119380182c7e63a5593c4ab8df6f" dependencies = [ "digest 0.10.7", "sha3-asm", @@ -4080,11 +4118,11 @@ dependencies = [ [[package]] name = "lru" -version = "0.13.0" +version = "0.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "227748d55f2f0ab4735d87fd623798cb6b664512fe979705f829c9f81c934465" +checksum = "a1dc47f592c06f33f8e3aea9591776ec7c9f9e4124778ff8a3c3b87159f7e593" dependencies = [ - "hashbrown 0.15.5", + "hashbrown 0.16.1", ] [[package]] @@ -4193,8 +4231,8 @@ dependencies = [ [[package]] name = "morph-chainspec" -version = "0.7.5" -source = "git+https://github.com/morph-l2/morph-reth.git?branch=main#fe322be5ad1436309c298ae269698d4534285374" +version = "0.1.0" +source = "git+https://github.com/morph-l2/morph-reth.git?branch=release/0.1.x#af311e3f0d7f1f1e56ddac780d40e96526b193e2" dependencies = [ "alloy-chains", "alloy-consensus", @@ -4208,42 +4246,21 @@ dependencies = [ "morph-primitives", "reth-chainspec", "reth-network-peers", + "reth-primitives-traits", "serde", "serde_json", ] -[[package]] -name = "morph-evm" -version = "0.7.5" -source = "git+https://github.com/morph-l2/morph-reth.git?branch=main#fe322be5ad1436309c298ae269698d4534285374" -dependencies = [ - "alloy-consensus", - "alloy-evm", - "alloy-primitives", - "derive_more 2.1.0", - "morph-chainspec", - "morph-primitives", - "morph-revm", - "reth-evm", - "reth-evm-ethereum", - "reth-primitives-traits", - "reth-revm", - "revm", - "thiserror 2.0.17", - "tracing", -] - [[package]] name = "morph-primitives" -version = "0.7.5" -source = "git+https://github.com/morph-l2/morph-reth.git?branch=main#fe322be5ad1436309c298ae269698d4534285374" +version = "0.1.0" +source = "git+https://github.com/morph-l2/morph-reth.git?branch=release/0.1.x#af311e3f0d7f1f1e56ddac780d40e96526b193e2" dependencies = [ "alloy-consensus", "alloy-eips", "alloy-primitives", "alloy-rlp", "alloy-serde", - "bytes", "reth-ethereum-primitives", "reth-primitives-traits", "serde", @@ -4274,8 +4291,8 @@ dependencies = [ [[package]] name = "morph-revm" -version = "0.7.5" -source = "git+https://github.com/morph-l2/morph-reth.git?branch=main#fe322be5ad1436309c298ae269698d4534285374" +version = "0.1.0" +source = "git+https://github.com/morph-l2/morph-reth.git?branch=release/0.1.x#af311e3f0d7f1f1e56ddac780d40e96526b193e2" dependencies = [ "alloy-consensus", "alloy-eips", @@ -4287,6 +4304,7 @@ dependencies = [ "derive_more 2.1.0", "morph-chainspec", "morph-primitives", + "reth-ethereum-primitives", "reth-evm", "revm", "thiserror 2.0.17", @@ -4402,9 +4420,9 @@ dependencies = [ [[package]] name = "num-conv" -version = "0.1.0" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" +checksum = "cf97ec579c3c42f953ef76dbf8d55ac91fb219dde70e49aa4a6b7d74e9919050" [[package]] name = "num-integer" @@ -5426,6 +5444,7 @@ name = "prover-executor-client" version = "0.1.0" dependencies = [ "alloy-consensus", + "alloy-eips", "alloy-primitives", "alloy-rlp", "anyhow", @@ -5454,7 +5473,6 @@ dependencies = [ "alloy-evm", "anyhow", "morph-chainspec", - "morph-evm", "morph-primitives", "morph-revm", "revm", @@ -5750,6 +5768,15 @@ dependencies = [ "num-traits", ] +[[package]] +name = "rapidhash" +version = "4.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e48930979c155e2f33aa36ab3119b5ee81332beb6482199a8ecd6029b80b59" +dependencies = [ + "rustversion", +] + [[package]] name = "rayon" version = "1.10.0" @@ -5799,6 +5826,26 @@ dependencies = [ "thiserror 1.0.63", ] +[[package]] +name = "ref-cast" +version = "1.0.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f354300ae66f76f1c85c5f84693f0ce81d747e2c3f21a45fef496d89c960bf7d" +dependencies = [ + "ref-cast-impl", +] + +[[package]] +name = "ref-cast-impl" +version = "1.0.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.111", +] + [[package]] name = "regex" version = "1.12.2" @@ -5903,8 +5950,8 @@ dependencies = [ [[package]] name = "reth-chainspec" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=64909d3#64909d33e6b7ab60774e37f5508fb5ad17f41897" +version = "1.10.0" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.10.0#b25f32a977b489f9b84254c7811a2a5a25a81369" dependencies = [ "alloy-chains", "alloy-consensus", @@ -5923,8 +5970,8 @@ dependencies = [ [[package]] name = "reth-codecs" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=64909d3#64909d33e6b7ab60774e37f5508fb5ad17f41897" +version = "1.10.0" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.10.0#b25f32a977b489f9b84254c7811a2a5a25a81369" dependencies = [ "alloy-consensus", "alloy-eips", @@ -5941,8 +5988,8 @@ dependencies = [ [[package]] name = "reth-codecs-derive" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=64909d3#64909d33e6b7ab60774e37f5508fb5ad17f41897" +version = "1.10.0" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.10.0#b25f32a977b489f9b84254c7811a2a5a25a81369" dependencies = [ "proc-macro2", "quote", @@ -5951,8 +5998,8 @@ dependencies = [ [[package]] name = "reth-db-models" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=64909d3#64909d33e6b7ab60774e37f5508fb5ad17f41897" +version = "1.10.0" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.10.0#b25f32a977b489f9b84254c7811a2a5a25a81369" dependencies = [ "alloy-eips", "alloy-primitives", @@ -5963,8 +6010,8 @@ dependencies = [ [[package]] name = "reth-ethereum-forks" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=64909d3#64909d33e6b7ab60774e37f5508fb5ad17f41897" +version = "1.10.0" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.10.0#b25f32a977b489f9b84254c7811a2a5a25a81369" dependencies = [ "alloy-eip2124", "alloy-hardforks", @@ -5976,8 +6023,8 @@ dependencies = [ [[package]] name = "reth-ethereum-primitives" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=64909d3#64909d33e6b7ab60774e37f5508fb5ad17f41897" +version = "1.10.0" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.10.0#b25f32a977b489f9b84254c7811a2a5a25a81369" dependencies = [ "alloy-consensus", "alloy-eips", @@ -5994,8 +6041,8 @@ dependencies = [ [[package]] name = "reth-evm" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=64909d3#64909d33e6b7ab60774e37f5508fb5ad17f41897" +version = "1.10.0" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.10.0#b25f32a977b489f9b84254c7811a2a5a25a81369" dependencies = [ "alloy-consensus", "alloy-eips", @@ -6004,6 +6051,7 @@ dependencies = [ "auto_impl", "derive_more 2.1.0", "futures-util", + "rayon", "reth-execution-errors", "reth-execution-types", "reth-primitives-traits", @@ -6013,31 +6061,10 @@ dependencies = [ "revm", ] -[[package]] -name = "reth-evm-ethereum" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=64909d3#64909d33e6b7ab60774e37f5508fb5ad17f41897" -dependencies = [ - "alloy-consensus", - "alloy-eips", - "alloy-evm", - "alloy-primitives", - "alloy-rpc-types-engine", - "derive_more 2.1.0", - "reth-chainspec", - "reth-ethereum-forks", - "reth-ethereum-primitives", - "reth-evm", - "reth-execution-types", - "reth-primitives-traits", - "reth-storage-errors", - "revm", -] - [[package]] name = "reth-execution-errors" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=64909d3#64909d33e6b7ab60774e37f5508fb5ad17f41897" +version = "1.10.0" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.10.0#b25f32a977b489f9b84254c7811a2a5a25a81369" dependencies = [ "alloy-evm", "alloy-primitives", @@ -6049,8 +6076,8 @@ dependencies = [ [[package]] name = "reth-execution-types" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=64909d3#64909d33e6b7ab60774e37f5508fb5ad17f41897" +version = "1.10.0" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.10.0#b25f32a977b489f9b84254c7811a2a5a25a81369" dependencies = [ "alloy-consensus", "alloy-eips", @@ -6067,8 +6094,8 @@ dependencies = [ [[package]] name = "reth-network-peers" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=64909d3#64909d33e6b7ab60774e37f5508fb5ad17f41897" +version = "1.10.0" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.10.0#b25f32a977b489f9b84254c7811a2a5a25a81369" dependencies = [ "alloy-primitives", "alloy-rlp", @@ -6080,8 +6107,8 @@ dependencies = [ [[package]] name = "reth-primitives-traits" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=64909d3#64909d33e6b7ab60774e37f5508fb5ad17f41897" +version = "1.10.0" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.10.0#b25f32a977b489f9b84254c7811a2a5a25a81369" dependencies = [ "alloy-consensus", "alloy-eips", @@ -6107,8 +6134,8 @@ dependencies = [ [[package]] name = "reth-prune-types" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=64909d3#64909d33e6b7ab60774e37f5508fb5ad17f41897" +version = "1.10.0" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.10.0#b25f32a977b489f9b84254c7811a2a5a25a81369" dependencies = [ "alloy-primitives", "derive_more 2.1.0", @@ -6117,22 +6144,10 @@ dependencies = [ "thiserror 2.0.17", ] -[[package]] -name = "reth-revm" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=64909d3#64909d33e6b7ab60774e37f5508fb5ad17f41897" -dependencies = [ - "alloy-primitives", - "reth-primitives-traits", - "reth-storage-api", - "reth-storage-errors", - "revm", -] - [[package]] name = "reth-stages-types" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=64909d3#64909d33e6b7ab60774e37f5508fb5ad17f41897" +version = "1.10.0" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.10.0#b25f32a977b489f9b84254c7811a2a5a25a81369" dependencies = [ "alloy-primitives", "bytes", @@ -6142,19 +6157,20 @@ dependencies = [ [[package]] name = "reth-static-file-types" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=64909d3#64909d33e6b7ab60774e37f5508fb5ad17f41897" +version = "1.10.0" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.10.0#b25f32a977b489f9b84254c7811a2a5a25a81369" dependencies = [ "alloy-primitives", "derive_more 2.1.0", + "fixed-map", "serde", "strum 0.27.2", ] [[package]] name = "reth-storage-api" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=64909d3#64909d33e6b7ab60774e37f5508fb5ad17f41897" +version = "1.10.0" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.10.0#b25f32a977b489f9b84254c7811a2a5a25a81369" dependencies = [ "alloy-consensus", "alloy-eips", @@ -6176,8 +6192,8 @@ dependencies = [ [[package]] name = "reth-storage-errors" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=64909d3#64909d33e6b7ab60774e37f5508fb5ad17f41897" +version = "1.10.0" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.10.0#b25f32a977b489f9b84254c7811a2a5a25a81369" dependencies = [ "alloy-eips", "alloy-primitives", @@ -6192,8 +6208,8 @@ dependencies = [ [[package]] name = "reth-trie" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=64909d3#64909d33e6b7ab60774e37f5508fb5ad17f41897" +version = "1.10.0" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.10.0#b25f32a977b489f9b84254c7811a2a5a25a81369" dependencies = [ "alloy-consensus", "alloy-eips", @@ -6214,8 +6230,8 @@ dependencies = [ [[package]] name = "reth-trie-common" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=64909d3#64909d33e6b7ab60774e37f5508fb5ad17f41897" +version = "1.10.0" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.10.0#b25f32a977b489f9b84254c7811a2a5a25a81369" dependencies = [ "alloy-consensus", "alloy-primitives", @@ -6237,8 +6253,8 @@ dependencies = [ [[package]] name = "reth-trie-sparse" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=64909d3#64909d33e6b7ab60774e37f5508fb5ad17f41897" +version = "1.10.0" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.10.0#b25f32a977b489f9b84254c7811a2a5a25a81369" dependencies = [ "alloy-primitives", "alloy-rlp", @@ -6253,8 +6269,8 @@ dependencies = [ [[package]] name = "reth-zstd-compressors" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=64909d3#64909d33e6b7ab60774e37f5508fb5ad17f41897" +version = "1.10.0" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.10.0#b25f32a977b489f9b84254c7811a2a5a25a81369" dependencies = [ "zstd 0.13.3", ] @@ -6511,9 +6527,9 @@ dependencies = [ [[package]] name = "rug" -version = "1.28.0" +version = "1.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58ad2e973fe3c3214251a840a621812a4f40468da814b1a3d6947d433c2af11f" +checksum = "de190ec858987c79cad4da30e19e546139b3339331282832af004d0ea7829639" dependencies = [ "az", "gmp-mpfr-sys", @@ -6800,6 +6816,30 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "schemars" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd191f9397d57d581cddd31014772520aa448f65ef991055d7f61582c65165f" +dependencies = [ + "dyn-clone", + "ref-cast", + "serde", + "serde_json", +] + +[[package]] +name = "schemars" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2b42f36aa1cd011945615b92222f6bf73c599a102a300334cd7f8dbeec726cc" +dependencies = [ + "dyn-clone", + "ref-cast", + "serde", + "serde_json", +] + [[package]] name = "scopeguard" version = "1.2.0" @@ -7028,17 +7068,18 @@ dependencies = [ [[package]] name = "serde_with" -version = "3.9.0" +version = "3.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69cecfa94848272156ea67b2b1a53f20fc7bc638c4a46d2f8abde08f05f4b857" +checksum = "381b283ce7bc6b476d903296fb59d0d36633652b633b27f64db4fb46dcbfc3b9" dependencies = [ "base64 0.22.1", "chrono", "hex", "indexmap 1.9.3", "indexmap 2.12.1", - "serde", - "serde_derive", + "schemars 0.9.0", + "schemars 1.2.1", + "serde_core", "serde_json", "serde_with_macros", "time", @@ -7046,11 +7087,11 @@ dependencies = [ [[package]] name = "serde_with_macros" -version = "3.9.0" +version = "3.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8fee4991ef4f274617a51ad4af30519438dacb2f56ac773b08a1922ff743350" +checksum = "a6d4e30573c8cb306ed6ab1dca8423eec9a463ea0e155f45399455e0368b27e0" dependencies = [ - "darling 0.20.10", + "darling 0.21.3", "proc-macro2", "quote", "syn 2.0.111", @@ -7112,9 +7153,9 @@ dependencies = [ [[package]] name = "sha3-asm" -version = "0.1.3" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57d79b758b7cb2085612b11a235055e485605a5103faccdd633f35bd7aee69dd" +checksum = "b31139435f327c93c6038ed350ae4588e2c70a13d50599509fee6349967ba35a" dependencies = [ "cc", "cfg-if 1.0.0", @@ -7932,9 +7973,9 @@ dependencies = [ [[package]] name = "syn-solidity" -version = "1.4.1" +version = "1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff790eb176cc81bb8936aed0f7b9f14fc4670069a2d371b3e3b0ecce908b2cb3" +checksum = "53f425ae0b12e2f5ae65542e00898d500d4d318b4baf09f40fd0d410454e9947" dependencies = [ "paste", "proc-macro2", @@ -8083,30 +8124,30 @@ dependencies = [ [[package]] name = "time" -version = "0.3.44" +version = "0.3.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91e7d9e3bb61134e77bde20dd4825b97c010155709965fedf0f49bb138e52a9d" +checksum = "743bd48c283afc0388f9b8827b976905fb217ad9e647fae3a379a9283c4def2c" dependencies = [ "deranged", "itoa", "num-conv", "powerfmt", - "serde", + "serde_core", "time-core", "time-macros", ] [[package]] name = "time-core" -version = "0.1.6" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b" +checksum = "7694e1cfe791f8d31026952abf09c69ca6f6fa4e1a1229e18988f06a04a12dca" [[package]] name = "time-macros" -version = "0.2.24" +version = "0.2.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30cfb0125f12d9c277f35663a0a33f8c30190f4e4574868a330595412d34ebf3" +checksum = "2e70e4c5a0e0a8a4823ad65dfe1a6930e4f4d756dcd9dd7939022b5e8c501215" dependencies = [ "num-conv", "time-core", @@ -8516,7 +8557,7 @@ version = "1.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675" dependencies = [ - "cfg-if 1.0.0", + "cfg-if 0.1.10", "static_assertions", ] @@ -8589,6 +8630,7 @@ dependencies = [ "form_urlencoded", "idna", "percent-encoding", + "serde", ] [[package]] diff --git a/prover/Cargo.toml b/prover/Cargo.toml index 127b45133..8da6b206f 100644 --- a/prover/Cargo.toml +++ b/prover/Cargo.toml @@ -71,56 +71,55 @@ sha2 = "0.10.8" rand = "0.8" # EVM & Blockchain (Alloy, REVM, Reth) -alloy = { version = "1.1.3", default-features = false } -alloy-chains = { version = "0.2.17", default-features = false } -alloy-consensus = { version = "=1.1.3", default-features = false, features = [ +alloy = { version = "1.4.3", default-features = false } +alloy-chains = { version = "0.2.30", default-features = false } +alloy-consensus = { version = "1.4.3", default-features = false, features = [ "serde", "serde-bincode-compat", ] } -alloy-eips = { version = "1.1.3", default-features = false } -alloy-evm = "0.25.2" -alloy-genesis = { version = "1.1.3", default-features = false, features = [ +alloy-eips = { version = "1.4.3", default-features = false } +alloy-evm = "0.25.1" +alloy-genesis = { version = "1.4.3", default-features = false, features = [ "serde-bincode-compat", ] } -alloy-json-rpc = { version = "1.1.3", default-features = false } -alloy-network = { version = "1.1.3", default-features = false } -alloy-primitives = { version = "1.4.1", default-features = false, features = [ +alloy-json-rpc = { version = "1.4.3", default-features = false } +alloy-network = { version = "1.4.3", default-features = false } +alloy-primitives = { version = "1.5.0", default-features = false, features = [ "sha3-keccak", "map-hashbrown", ] } -alloy-provider = { version = "1.1.3", default-features = false, features = [ +alloy-provider = { version = "1.4.3", default-features = false, features = [ "reqwest", "reqwest-rustls-tls", ] } alloy-rlp = "0.3.10" -alloy-rpc-client = { version = "1.1.3", default-features = false } -alloy-rpc-types = { version = "1.1.3", default-features = false, features = [ +alloy-rpc-client = { version = "1.4.3", default-features = false } +alloy-rpc-types = { version = "1.4.3", default-features = false, features = [ "eth", ] } -alloy-rpc-types-debug = { version = "1.1.3", default-features = false } -alloy-serde = "1.1.3" -alloy-transport = { version = "1.1.3", default-features = false } -alloy-transport-http = { version = "1.1.3", features = [ +alloy-rpc-types-debug = { version = "1.4.3", default-features = false } +alloy-serde = "1.4.3" +alloy-transport = { version = "1.4.3", default-features = false } +alloy-transport-http = { version = "1.4.3", features = [ "reqwest-rustls-tls", ], default-features = false } -alloy-transport-ws = { version = "1.1.3" } -alloy-trie = "0.9.1" -alloy-sol-types = { version = "1.4.1", features = ["json"] } -alloy-contract = { version = "1.1.3", default-features = false } -alloy-signer-local = { version = "=1.1.3", default-features = false } +alloy-transport-ws = { version = "1.4.3" } +alloy-trie = "0.9.4" +alloy-sol-types = { version = "1.5.0", features = ["json"] } +alloy-contract = { version = "1.4.3", default-features = false } +alloy-signer-local = { version = "1.4.3", default-features = false } rlp = "0.5.2" hex-literal = "0.4.1" revm = { version = "33.1.0", features = [ "optional_fee_charge", "optional_eip7623", ], default-features = false } -reth-primitives-traits = { git = "https://github.com/paradigmxyz/reth", rev = "64909d3", default-features = false } -reth-storage-errors = { git = "https://github.com/paradigmxyz/reth", rev = "64909d3", default-features = false } -reth-trie = { git = "https://github.com/paradigmxyz/reth", rev = "64909d3", default-features = false } -morph-revm = { git = "https://github.com/morph-l2/morph-reth.git", branch = "main" } -morph-evm = { git = "https://github.com/morph-l2/morph-reth.git", branch = "main" } -morph-primitives = { git = "https://github.com/morph-l2/morph-reth.git", branch = "main" } -morph-chainspec = { git = "https://github.com/morph-l2/morph-reth.git", branch = "main" } +reth-primitives-traits = { git = "https://github.com/paradigmxyz/reth", tag = "v1.10.0", default-features = false } +reth-storage-errors = { git = "https://github.com/paradigmxyz/reth", tag = "v1.10.0", default-features = false } +reth-trie = { git = "https://github.com/paradigmxyz/reth", tag = "v1.10.0", default-features = false } +morph-revm = { git = "https://github.com/morph-l2/morph-reth.git", branch = "release/0.1.x" } +morph-primitives = { git = "https://github.com/morph-l2/morph-reth.git", branch = "release/0.1.x" } +morph-chainspec = { git = "https://github.com/morph-l2/morph-reth.git", branch = "release/0.1.x" } # ZK / SP1 diff --git a/prover/bin/client/elf/verifier-client b/prover/bin/client/elf/verifier-client index 627d6765b..affbb11e7 100755 Binary files a/prover/bin/client/elf/verifier-client and b/prover/bin/client/elf/verifier-client differ diff --git a/prover/bin/host/src/lib.rs b/prover/bin/host/src/lib.rs index 70872332d..c7b5bdd3b 100644 --- a/prover/bin/host/src/lib.rs +++ b/prover/bin/host/src/lib.rs @@ -154,66 +154,7 @@ impl BatchProver { #[cfg(test)] mod tests { - use prover_executor_client::{ - types::{ - blob::{decode_transactions, get_origin_batch}, - input::BlobInfo, - }, - BlobVerifier, - }; - use prover_executor_host::blob::{encode_blob, populate_kzg}; - use prover_primitives::{MorphTxEnvelope, B256}; - #[test] - fn test_blob() { - //blob to txn - let blob_bytes = load_zstd_blob(); - println!("blob_bytes len: {:?}", blob_bytes.len()); - - let origin_batch = get_origin_batch(&blob_bytes).unwrap(); - println!("origin_batch len: {:?}", origin_batch.len()); - - let mut block_contexts = origin_batch[0..600 * 60].to_vec(); - let txs_data = origin_batch[600 * 60..origin_batch.len()].to_vec(); - let tx_list: Vec = decode_transactions(txs_data.as_slice()); - println!("decoded tx_list_len: {:?}", tx_list.len()); - - //txn to blob - let mut tx_bytes: Vec = vec![]; - let x = tx_list.iter().flat_map(|tx| tx.rlp()).collect::>(); - tx_bytes.extend(x); - assert!(tx_bytes == txs_data, "tx_bytes==txs_data"); - block_contexts.extend_from_slice(&tx_bytes); - let blob = encode_blob(block_contexts).unwrap(); - let blob_info: BlobInfo = populate_kzg(&blob).unwrap(); - let (versioned_hash, batch_data) = BlobVerifier::verify(&blob_info, 600).unwrap(); - let versioned_hash_hex = alloy::hex::encode_prefixed(versioned_hash.as_slice()); - println!( - "versioned_hash: {:?}, batch_data len: {:?}", - versioned_hash_hex, - batch_data.len() - ); - assert!( - versioned_hash_hex - == "0x012bdf80720ba8d07c589d672e47d4b183ac861a2fcb6a5dad0e320a4f368f4f", - "versioned_hash check" - ); - - assert!(batch_data.len() == origin_batch.len(), "batch_data.len() == origin_batch.len()"); - } - - pub fn load_zstd_blob() -> [u8; 131072] { - use prover_primitives::alloy_primitives::hex; - use std::{fs, path::Path}; - - //https://etherscan.io/blob/0x012bdf80720ba8d07c589d672e47d4b183ac861a2fcb6a5dad0e320a4f368f4f?bid=6318849 - //https://explorer.morphl2.io/batches/47561 - let blob_data_path = Path::new("../../testdata/blob/mainnet_47561.data"); - let data = fs::read_to_string(blob_data_path).expect("Unable to read file"); - let hex_data: Vec = hex::decode(data.trim()).unwrap(); - let mut array = [0u8; 131072]; - array.copy_from_slice(&hex_data); - array - } + use prover_primitives::B256; use sp1_sdk::{HashableKey, ProverClient, SP1ProofWithPublicValues}; use sp1_verifier::PlonkVerifier; diff --git a/prover/bin/server/src/main.rs b/prover/bin/server/src/main.rs index 8d7381256..27c3c9033 100644 --- a/prover/bin/server/src/main.rs +++ b/prover/bin/server/src/main.rs @@ -56,8 +56,12 @@ impl LogLineFilter for ProveFilter { log_line_writer: &dyn LogLineWriter, ) -> std::io::Result<()> { let module_path = record.module_path().unwrap_or("start"); + let target = record.target(); let args = record.args().to_string(); - if !args.contains("tracing::span") && !module_path.contains("p3_") { + if !(args.contains("tracing::span") + || module_path.contains("p3_") + || record.level() == log::Level::Info && target.contains("alloy_transport_http")) + { log_line_writer.write(now, record)?; } Ok(()) diff --git a/prover/bin/server/src/queue.rs b/prover/bin/server/src/queue.rs index 6ae299e89..0598f7a8e 100644 --- a/prover/bin/server/src/queue.rs +++ b/prover/bin/server/src/queue.rs @@ -136,8 +136,7 @@ async fn gen_client_input( // Step3. Save batch header or error info. if let Ok(batch_info) = verify_result { - let (versioned_hash, _) = - BlobVerifier::verify(&executor_input.blob_info, executor_input.block_inputs.len())?; + let (versioned_hash, _) = BlobVerifier::verify(&executor_input.blob_info)?; // Save batch_header // | batch_data_hash | versioned_hash | sequencer_root | // |-----------------|----------------|----------------| diff --git a/prover/bin/shadow-prove/.env.dev b/prover/bin/shadow-prove/.env.dev index c07613ce9..25b52d157 100644 --- a/prover/bin/shadow-prove/.env.dev +++ b/prover/bin/shadow-prove/.env.dev @@ -7,3 +7,4 @@ SHADOW_PROVING_L1_SHADOW_ROLLUP = "0x5FbDB2315678afecb367f032d93F642f64180aa3" SHADOW_PROVING_PRIVATE_KEY = "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80" SHADOW_PROVING_MAX_TXN = 600 SHADOW_PROVING_MAX_BLOCK = 300 +SHADOW_PROVING_BATCH_INTERVAL = 7200 \ No newline at end of file diff --git a/prover/bin/shadow-prove/abi/Rollup.json b/prover/bin/shadow-prove/abi/Rollup.json index 28f7a5c6d..e32ca8619 100644 --- a/prover/bin/shadow-prove/abi/Rollup.json +++ b/prover/bin/shadow-prove/abi/Rollup.json @@ -306,6 +306,25 @@ "name": "UpdateProofWindow", "type": "event" }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "oldPeriod", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newPeriod", + "type": "uint256" + } + ], + "name": "UpdateRollupDelayPeriod", + "type": "event" + }, { "anonymous": false, "inputs": [ @@ -666,6 +685,88 @@ "stateMutability": "payable", "type": "function" }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint8", + "name": "version", + "type": "uint8" + }, + { + "internalType": "bytes", + "name": "parentBatchHeader", + "type": "bytes" + }, + { + "internalType": "uint64", + "name": "lastBlockNumber", + "type": "uint64" + }, + { + "internalType": "uint16", + "name": "numL1Messages", + "type": "uint16" + }, + { + "internalType": "bytes32", + "name": "prevStateRoot", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "postStateRoot", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "withdrawalRoot", + "type": "bytes32" + } + ], + "internalType": "struct IRollup.BatchDataInput", + "name": "batchDataInput", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "signedSequencersBitmap", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "sequencerSets", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + } + ], + "internalType": "struct IRollup.BatchSignatureInput", + "name": "batchSignatureInput", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "_batchHeader", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "_batchProof", + "type": "bytes" + } + ], + "name": "commitBatchWithProof", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -826,6 +927,19 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_rollupDelayPeriod", + "type": "uint256" + } + ], + "name": "initialize3", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -968,6 +1082,24 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "_batchHeader", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "_batchProof", + "type": "bytes" + } + ], + "name": "proveCommittedBatchState", + "outputs": [], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "proveRemaining", @@ -1050,6 +1182,19 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "rollupDelayPeriod", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -1115,6 +1260,19 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_newPeriod", + "type": "uint256" + } + ], + "name": "updateRollupDelayPeriod", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -1164,4 +1322,4 @@ "stateMutability": "payable", "type": "receive" } -] +] \ No newline at end of file diff --git a/prover/bin/shadow-prove/contracts/README.md b/prover/bin/shadow-prove/contracts/README.md index eb228b461..562289d20 100644 --- a/prover/bin/shadow-prove/contracts/README.md +++ b/prover/bin/shadow-prove/contracts/README.md @@ -16,12 +16,12 @@ forge build EvmVerifier: ``` -forge create --private-key 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 --rpc-url http://localhost:8545 src/libs/EvmVerifier.sol:EvmVerifier --constructor-args 0x001bbd0e32f56275cefa4a7313c51b94b763a4c295ac02af037b494895bc58c2 +forge create --broadcast --private-key 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 --rpc-url http://localhost:8545 src/libs/EvmVerifier.sol:EvmVerifier --constructor-args 0x00940d658cf507217304ec5f7ca5558e2e0fd67881485f604b63588c31a8792f ``` ShadowRollup ``` -forge create --private-key 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 --rpc-url http://localhost:8545 src/ShadowRollup.sol:ShadowRollup --constructor-args 53077 0x5FbDB2315678afecb367f032d93F642f64180aa3 +forge create --broadcast --private-key 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 --rpc-url http://localhost:8545 src/ShadowRollup.sol:ShadowRollup --constructor-args 53077 0x5FbDB2315678afecb367f032d93F642f64180aa3 ``` diff --git a/prover/bin/shadow-prove/src/execute.rs b/prover/bin/shadow-prove/src/execute.rs index 2d2d07247..a35276ee9 100644 --- a/prover/bin/shadow-prove/src/execute.rs +++ b/prover/bin/shadow-prove/src/execute.rs @@ -112,7 +112,7 @@ mod tests { use prover_utils::provider::get_block_trace; use crate::{ - execute::{execute_host_range, test_args, try_execute_batch}, + execute::{execute, execute_host_range, test_args, try_execute_batch}, BatchInfo, }; @@ -130,6 +130,21 @@ mod tests { let _batch_info = EVMVerifier::verify(block_inputs).unwrap(); } + // cargo test -p shadow-proving --lib -- execute::tests::test_execute_block --exact --nocapture -- --block-number 19997 --rpc http://127.0.0.1:9545 + #[tokio::test(flavor = "multi_thread")] + async fn test_execute_block() { + env_logger::Builder::new().filter_level(log::LevelFilter::Info).format_target(false).init(); + + let (start_block, rpc) = test_args::read_block_number_args_from_argv(); + let provider = ProviderBuilder::new().connect_http(rpc.parse().unwrap()).erased(); + let block_input = execute(start_block, &provider).await.unwrap(); + let _ = EVMVerifier::verify(vec![block_input.clone()]).unwrap(); + let input_path = format!("../../testdata/state/block_{}.data", start_block); + let file = File::create(&input_path).unwrap(); + serde_json::to_writer(file, &block_input).unwrap(); + println!("Saved executor input to {input_path}"); + } + #[tokio::test] async fn test_execute_batch() { env_logger::Builder::new().filter_level(log::LevelFilter::Info).format_target(false).init(); @@ -162,15 +177,28 @@ mod tests { println!("batch_info.post_state_root: {:?}", batch_info.post_state_root); } + // cargo test --package shadow-proving --lib -- execute::tests::test_execute_local --exact --nocapture #[tokio::test] async fn test_execute_local() { env_logger::Builder::new().filter_level(log::LevelFilter::Info).format_target(false).init(); - let file = std::fs::File::open("../../testdata/mpt/executor_input_19720290.data").unwrap(); - let reader = std::io::BufReader::new(file); - let block_input: BlockInput = serde_json::from_reader(reader).unwrap(); - - let batch_info = EVMVerifier::verify(vec![block_input]).unwrap(); - println!("batch_info.post_state_root: {:?}", batch_info.post_state_root); + let dir = "../../testdata/state"; + let mut entries: Vec<_> = std::fs::read_dir(dir) + .unwrap_or_else(|e| panic!("Failed to read dir {dir}: {e}")) + .filter_map(|e| e.ok()) + .filter(|e| e.path().extension().and_then(|s| s.to_str()) == Some("data")) + .collect(); + entries.sort_by_key(|e| e.path()); + for entry in entries { + let path = entry.path(); + println!("Processing {:?}", path); + let file = std::fs::File::open(&path) + .unwrap_or_else(|e| panic!("Failed to open {:?}: {e}", path)); + let reader = std::io::BufReader::new(file); + let block_input: BlockInput = serde_json::from_reader(reader) + .unwrap_or_else(|e| panic!("Failed to deserialize {:?}: {e}", path)); + let _ = EVMVerifier::verify(vec![block_input.clone()]).unwrap(); + println!("block_{:?} verify success", block_input.current_block.header.number); + } } #[tokio::test] @@ -272,6 +300,25 @@ mod test_args { (args.start_block, args.end_block, args.rpc) } + /// Single block execute parameters. + #[derive(Parser, Debug)] + #[command(author, version, about, long_about = None, disable_help_flag = true)] + struct BlockNumberArgs { + /// L2 block number. + #[arg(long = "block-number", alias = "block", default_value_t = DEFAULT_BLOCK_NUMBER, value_parser = parse_u64_auto_radix)] + block_number: u64, + + /// RPC endpoint. + #[arg(long, default_value = DEFAULT_RPC)] + rpc: String, + } + + pub(super) fn read_block_number_args_from_argv() -> (u64, String) { + let filtered = filter_argv(&["--block-number", "--block", "--rpc"]); + let args = BlockNumberArgs::parse_from(filtered); + (args.block_number, args.rpc) + } + fn filter_argv(allowed_flags: &[&str]) -> Vec { let argv: Vec = std::env::args().skip(1).collect(); let mut filtered: Vec = Vec::with_capacity(argv.len() + 1); diff --git a/prover/bin/shadow-prove/src/lib.rs b/prover/bin/shadow-prove/src/lib.rs index 8e6d7a264..62e485968 100644 --- a/prover/bin/shadow-prove/src/lib.rs +++ b/prover/bin/shadow-prove/src/lib.rs @@ -35,3 +35,6 @@ pub static SHADOW_PROVING_BLOCKS_RANGE: Lazy = pub static SHADOW_PROVING_PROVER_RPC: Lazy = Lazy::new(|| var("SHADOW_PROVING_PROVER_RPC").expect("Cannot detect PROVER_RPC env var")); + +pub static SHADOW_PROVING_BATCH_INTERVAL: Lazy = + Lazy::new(|| read_env_var("SHADOW_PROVING_BATCH_INTERVAL", 0)); diff --git a/prover/bin/shadow-prove/src/main.rs b/prover/bin/shadow-prove/src/main.rs index d406e3965..71487806a 100644 --- a/prover/bin/shadow-prove/src/main.rs +++ b/prover/bin/shadow-prove/src/main.rs @@ -6,19 +6,23 @@ use alloy_provider::{DynProvider, Provider, ProviderBuilder}; use alloy_signer_local::PrivateKeySigner; use axum::{routing::get, Router}; use dotenv::dotenv; -use flexi_logger::{Cleanup, Criterion, Duplicate, FileSpec, Logger, Naming, WriteMode}; +use flexi_logger::{ + filter::{LogLineFilter, LogLineWriter}, + Cleanup, Criterion, DeferredNow, Duplicate, FileSpec, Logger, Naming, WriteMode, +}; use log::Record; use prometheus::{Encoder, TextEncoder}; use shadow_proving::{ execute::try_execute_batch, metrics::{METRICS, REGISTRY}, - shadow_prove::ShadowProver, + shadow_prove::{BatchProveInfo, ShadowProver}, shadow_rollup::BatchSyncer, util::{read_env_var, read_parse_env}, - SHADOW_EXECUTE, SHADOW_PROVING_MAX_BLOCK, SHADOW_PROVING_MAX_TXN, SHADOW_PROVING_PROVER_RPC, + SHADOW_EXECUTE, SHADOW_PROVING_BATCH_INTERVAL, SHADOW_PROVING_MAX_BLOCK, + SHADOW_PROVING_MAX_TXN, SHADOW_PROVING_PROVER_RPC, }; -use tokio::time::interval; +use tokio::time::{interval, sleep}; use tokio::{sync::broadcast, time::MissedTickBehavior}; #[tokio::main] @@ -121,8 +125,11 @@ async fn main() { Err(broadcast::error::RecvError::Closed) => break, }; - let result = match batch_syncer.sync_batch(batch_info, batch_header).await { - Ok(Some(batch)) => shadow_prover.prove(batch).await, + let result = match batch_syncer.sync_batch(batch_info, batch_header.clone()).await { + Ok(Some(batch)) => { + let prove_info = BatchProveInfo { batch_info: batch, batch_header }; + shadow_prover.prove(prove_info).await + } Ok(None) => Ok(()), Err(e) => Err(e), }; @@ -134,6 +141,8 @@ async fn main() { log::error!("shadow proving exec error: {:#?}", e); } } + + sleep(Duration::from_secs(*SHADOW_PROVING_BATCH_INTERVAL)).await; } } @@ -172,7 +181,9 @@ fn init_shadow_proving( let shadow_prover = ShadowProver::new( signer.address(), + Address::from_str(&rollup).unwrap(), Address::from_str(&shadow_rollup).unwrap(), + l1_provider, verify_provider, l1_signer, ); @@ -244,6 +255,7 @@ fn setup_logging() { .basename(LOG_FILE_BASENAME), ) .format(log_format) + .filter(Box::new(ShadowProvingFilter)) .duplicate_to_stdout(Duplicate::All) .rotate( Criterion::Size(LOG_FILE_SIZE_LIMIT), // Scroll when file size reaches 200MB @@ -258,6 +270,23 @@ fn setup_logging() { .unwrap(); } +pub struct ShadowProvingFilter; + +impl LogLineFilter for ShadowProvingFilter { + fn write( + &self, + now: &mut DeferredNow, + record: &log::Record, + log_line_writer: &dyn LogLineWriter, + ) -> std::io::Result<()> { + let target = record.target(); + if !(record.level() == log::Level::Info && target.contains("alloy_transport_http")) { + log_line_writer.write(now, record)?; + } + Ok(()) + } +} + fn log_format( w: &mut dyn std::io::Write, now: &mut flexi_logger::DeferredNow, @@ -300,8 +329,10 @@ async fn test_shadow() { return; } if prove { - let batch = batch_syncer.sync_batch(batch_info, batch_header).await.unwrap().unwrap(); - shadow_prover.prove(batch).await.unwrap(); + let batch = + batch_syncer.sync_batch(batch_info, batch_header.clone()).await.unwrap().unwrap(); + let prove_info = BatchProveInfo { batch_info: batch, batch_header }; + shadow_prover.prove(prove_info).await.unwrap(); } } diff --git a/prover/bin/shadow-prove/src/shadow_prove.rs b/prover/bin/shadow-prove/src/shadow_prove.rs index a038beadc..4ed15863f 100644 --- a/prover/bin/shadow-prove/src/shadow_prove.rs +++ b/prover/bin/shadow-prove/src/shadow_prove.rs @@ -1,4 +1,9 @@ -use crate::{metrics::METRICS, util, BatchInfo, ShadowRollup::ShadowRollupInstance}; +use crate::{ + abi::Rollup::{self, RollupInstance}, + metrics::METRICS, + util, BatchInfo, + ShadowRollup::ShadowRollupInstance, +}; use alloy_network::{Network, ReceiptResponse}; use alloy_primitives::{Address, Bytes}; use alloy_provider::{DynProvider, Provider}; @@ -32,13 +37,22 @@ mod task_status { pub const PROVED: &str = "Proved"; } +// ShadowProver is responsible for proving the batch state onchain through the shadow rollup contract. #[derive(Clone, Debug)] pub struct ShadowProver { - l1_provider: DynProvider, + shadow_provider: DynProvider, + l1_rollup: RollupInstance, l1_shadow_rollup: ShadowRollupInstance, wallet_address: Address, } +/// BatchProveInfo contains the batch info and batch header needed for proving. +#[derive(Clone, Debug)] +pub struct BatchProveInfo { + pub batch_info: BatchInfo, + pub batch_header: Bytes, +} + impl ShadowProver where P: Provider + Clone, @@ -46,20 +60,23 @@ where { pub fn new( wallet_address: Address, + rollup_address: Address, shadow_rollup_address: Address, - provider: DynProvider, + l1_provider: DynProvider, + shadow_provider: DynProvider, wallet: P, ) -> Self { + let l1_rollup = Rollup::RollupInstance::new(rollup_address, l1_provider.clone()); let l1_shadow_rollup = ShadowRollupInstance::new(shadow_rollup_address, wallet); - Self { l1_provider: provider, l1_shadow_rollup, wallet_address } + Self { shadow_provider, l1_rollup, l1_shadow_rollup, wallet_address } } - pub async fn prove(&self, batch_info: BatchInfo) -> Result<(), anyhow::Error> { - log::info!(">Start shadow prove for batch: {:#?}", batch_info.batch_index); + pub async fn prove(&self, prove_info: BatchProveInfo) -> Result<(), anyhow::Error> { + log::info!(">Start shadow prove for batch: {:#?}", prove_info.batch_info.batch_index); // Record wallet balance. - let balance = match self.l1_provider.get_balance(self.wallet_address).await { + let balance = match self.shadow_provider.get_balance(self.wallet_address).await { Ok(b) => b, Err(e) => { log::error!("shadow_proving_wallet.get_balance error: {:#?}", e); @@ -70,149 +87,164 @@ where .shadow_wallet_balance .set(alloy_primitives::utils::format_ether(balance).parse().unwrap_or(0.0)); - handle_with_prover(&batch_info, &self.l1_shadow_rollup).await; + self.handle_with_prover(&prove_info).await; Ok(()) } -} -async fn handle_with_prover( - batch_info: &BatchInfo, - l1_shadow_rollup: &ShadowRollupInstance, -) where - P: Provider + Clone, - N: Network, -{ - let l2_rpc = var("SHADOW_PROVING_L2_RPC").expect("Cannot detect L2_RPC env var"); - let batch_index = batch_info.batch_index; - let blocks_len = batch_info.end_block - batch_info.start_block + 1; + async fn handle_with_prover(&self, prove_info: &BatchProveInfo) { + let l2_rpc = var("SHADOW_PROVING_L2_RPC").expect("Cannot detect L2_RPC env var"); + let batch_index = prove_info.batch_info.batch_index; + let blocks_len = prove_info.batch_info.end_block - prove_info.batch_info.start_block + 1; - METRICS.shadow_blocks_len.set(blocks_len as i64); - METRICS.shadow_batch_index.set(batch_index as i64); + METRICS.shadow_blocks_len.set(blocks_len as i64); + METRICS.shadow_batch_index.set(batch_index as i64); - for _ in 0..MAX_RETRY_TIMES { - sleep(Duration::from_secs(12)).await; + for _ in 0..MAX_RETRY_TIMES { + sleep(Duration::from_secs(12)).await; - log::info!( - "Start prove batch of: {:?}, blocks.len = {:?}, block_start = {:#?}", - batch_index, - blocks_len, - batch_info.start_block - ); + log::info!( + "Start prove batch of: {:?}, blocks.len = {:?}, block_start = {:#?}", + batch_index, + blocks_len, + prove_info.batch_info.start_block + ); - // Query existing proof - if let Some(prove_result) = query_proof(batch_index).await { - if !prove_result.error_code.is_empty() { - log::error!("query proof and prove state error, batch_index: {:?}, prove_result.error_code: {:?}, prove_result.error_msg: {:?}", batch_index, prove_result.error_code, prove_result.error_msg); - break; - } - if !prove_result.proof_data.is_empty() { - log::info!("query proof and prove state: {:?}", batch_index); - prove_state(batch_index, l1_shadow_rollup).await; - break; + // Query existing proof + if let Some(prove_result) = query_proof(batch_index).await { + if !prove_result.error_code.is_empty() { + log::error!("query proof and prove state error, batch_index: {:?}, prove_result.error_code: {:?}, prove_result.error_msg: {:?}", batch_index, prove_result.error_code, prove_result.error_msg); + break; + } + if !prove_result.proof_data.is_empty() { + log::info!("query proof and prove state: {:?}", batch_index); + self.prove_state(batch_index, prove_info.batch_header.clone()).await; + break; + } } - } - // Request the proverServer to prove. - let request = ProveRequest { - batch_index, - start_block: batch_info.start_block, - end_block: batch_info.end_block, - rpc: l2_rpc.to_owned(), - shadow: false, - }; - let rt = tokio::task::spawn_blocking(move || { - util::call_prover(serde_json::to_string(&request).unwrap(), "/prove_batch") - }) - .await - .unwrap(); + // Request the proverServer to prove. + let request = ProveRequest { + batch_index, + start_block: prove_info.batch_info.start_block, + end_block: prove_info.batch_info.end_block, + rpc: l2_rpc.to_owned(), + shadow: false, + }; + let rt = tokio::task::spawn_blocking(move || { + util::call_prover(serde_json::to_string(&request).unwrap(), "/prove_batch") + }) + .await + .unwrap(); - match rt { - Some(info) => match info.as_str() { - task_status::STARTED => log::info!( - "successfully submitted prove task, waiting for proof to be generated" - ), - task_status::PROVING => log::info!("waiting for prev proof to be generated"), - task_status::PROVED => { - log::info!("proof already generated"); - prove_state(batch_index, l1_shadow_rollup).await; - break; - } - _ => { - log::error!("submit prove task failed: {:#?}", info); + match rt { + Some(info) => match info.as_str() { + task_status::STARTED => log::info!( + "successfully submitted prove task, waiting for proof to be generated" + ), + task_status::PROVING => log::info!("waiting for prev proof to be generated"), + task_status::PROVED => { + log::info!("proof already generated"); + self.prove_state(batch_index, prove_info.batch_header.clone()).await; + break; + } + _ => { + log::error!("submit prove task failed: {:#?}", info); + continue; + } + }, + None => { + log::error!("submit prove task failed"); continue; } - }, - None => { - log::error!("submit prove task failed"); - continue; } - } - // Step5. query proof and prove onchain state. - let mut max_waiting_time: usize = 300 * blocks_len as usize; //block_prove_time = 5min - while max_waiting_time > 60 { - sleep(Duration::from_secs(60)).await; - max_waiting_time -= 60; // Query results every 1 minute. - match query_proof(batch_index).await { - Some(prove_result) => { - if !prove_result.error_code.is_empty() { - log::error!("query proof and prove state error, batch_index: {:?}, prove_result.error_code: {:?}, prove_result.error_msg: {:?}", batch_index, prove_result.error_code, prove_result.error_msg); - return; + // Step5. query proof and prove onchain state. + let mut max_waiting_time: usize = 300 * blocks_len as usize; //block_prove_time = 5min + while max_waiting_time > 60 { + sleep(Duration::from_secs(60)).await; + max_waiting_time -= 60; // Query results every 1 minute. + match query_proof(batch_index).await { + Some(prove_result) => { + if !prove_result.error_code.is_empty() { + log::error!("query proof and prove state error, batch_index: {:?}, prove_result.error_code: {:?}, prove_result.error_msg: {:?}", batch_index, prove_result.error_code, prove_result.error_msg); + return; + } + log::debug!("query proof and prove state: {:#?}", batch_index); + if !prove_result.proof_data.is_empty() { + self.prove_state(batch_index, prove_info.batch_header.clone()).await; + return; + } } - log::debug!("query proof and prove state: {:#?}", batch_index); - if !prove_result.proof_data.is_empty() { - prove_state(batch_index, l1_shadow_rollup).await; - return; + None => { + log::error!("prover status unknown, resubmit task"); + break; } } - None => { - log::error!("prover status unknown, resubmit task"); - break; - } } } } -} -async fn prove_state(batch_index: u64, shadow_rollup: &ShadowRollupInstance) -> bool -where - P: Provider + Clone, - N: Network, -{ - for _ in 0..MAX_RETRY_TIMES { - sleep(Duration::from_secs(12)).await; - let prove_result = match query_proof(batch_index).await { - Some(pr) => pr, - None => continue, - }; + async fn prove_state(&self, batch_index: u64, batch_header: Bytes) -> bool { + for _ in 0..MAX_RETRY_TIMES { + sleep(Duration::from_secs(12)).await; + let prove_result = match query_proof(batch_index).await { + Some(pr) => pr, + None => continue, + }; - if prove_result.proof_data.is_empty() { - log::warn!("query proof of {:#?}, proof_data is empty", batch_index); - continue; - } + if prove_result.proof_data.is_empty() { + log::warn!("query proof of {:#?}, proof_data is empty", batch_index); + continue; + } - log::info!(">Starting prove state onchain, batch index = {:#?}", batch_index); - let aggr_proof = Bytes::from(prove_result.proof_data); - let shadow_tx = shadow_rollup.proveState(batch_index, aggr_proof); - let send = shadow_tx.send().await; + log::info!(">Starting prove state onchain, batch index = {:#?}", batch_index); + let aggr_proof = Bytes::from(prove_result.proof_data); + // Dry-run via eth_call to validate the proof before sending the actual shadow tx. + match self + .l1_rollup + .proveCommittedBatchState(batch_header.clone(), aggr_proof.clone()) + .call() + .await + { + Ok(_) => log::info!( + "proveCommittedBatchState dry-run success, batch index = {:#?}", + batch_index + ), + Err(e) => { + log::error!("proveCommittedBatchState dry-run failed: {:#?}", e); + METRICS.shadow_verify_result.set(2); + continue; + } + } + let shadow_tx = self.l1_shadow_rollup.proveState(batch_index, aggr_proof); + let send = shadow_tx.send().await; - let pending_tx = match send { - Ok(pending_tx) => pending_tx, - Err(e) => { - log::error!("send tx of prove_state error: {:#?}", e); - METRICS.shadow_verify_result.set(2); - continue; + let pending_tx = match send { + Ok(pending_tx) => pending_tx, + Err(e) => { + log::error!("send tx of prove_state error: {:#?}", e); + METRICS.shadow_verify_result.set(2); + continue; + } + }; + let receipt = match pending_tx.get_receipt().await { + Ok(r) => r, + Err(e) => { + log::error!("get_receipt error: {:#?}", e); + METRICS.shadow_verify_result.set(2); + continue; + } + }; + if receipt.status() { + log::info!("tx of prove_state success, tx hash: {:?}", receipt.transaction_hash()); + METRICS.shadow_verify_result.set(1); + return true; } - }; - let receipt = pending_tx.get_receipt().await.unwrap(); - if receipt.status() { - log::info!("tx of prove_state success, tx hash: {:?}", receipt.transaction_hash()); - return true; + log::error!("tx of prove_state failed, tx hash: {:?}", receipt.transaction_hash()); } - log::error!("tx of prove_state failed, tx hash: {:?}", receipt.transaction_hash()); + false } - false } /** diff --git a/prover/contracts/README.md b/prover/contracts/README.md index a8d4ee834..e143085e2 100644 --- a/prover/contracts/README.md +++ b/prover/contracts/README.md @@ -17,5 +17,5 @@ $ forge test ### Deploy ``` -forge create --private-key 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 --rpc-url http://localhost:8545 prover/contracts/src/EvmVerifier.sol:EvmVerifier --constructor-args 0x001bbd0e32f56275cefa4a7313c51b94b763a4c295ac02af037b494895bc58c2 +forge create --private-key 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 --rpc-url http://localhost:8545 prover/contracts/src/EvmVerifier.sol:EvmVerifier --constructor-args 0x00940d658cf507217304ec5f7ca5558e2e0fd67881485f604b63588c31a8792f ``` \ No newline at end of file diff --git a/prover/crates/executor/client/Cargo.toml b/prover/crates/executor/client/Cargo.toml index 844f43871..3d9e51c36 100644 --- a/prover/crates/executor/client/Cargo.toml +++ b/prover/crates/executor/client/Cargo.toml @@ -12,6 +12,7 @@ serde_with.workspace = true ruzstd = { workspace = true } kzg-rs = { workspace = true } thiserror = { workspace = true } +alloy-eips = { workspace = true } alloy-rlp = { workspace = true } alloy-primitives = { workspace = true, features = [ "sha3-keccak", diff --git a/prover/crates/executor/client/src/lib.rs b/prover/crates/executor/client/src/lib.rs index 8938946bd..aeb2595db 100644 --- a/prover/crates/executor/client/src/lib.rs +++ b/prover/crates/executor/client/src/lib.rs @@ -10,9 +10,7 @@ pub const EVM_VERIFY: &str = "evm verify"; pub fn verify(input: ExecutorInput) -> Result { // Verify DA - let num_blocks = input.block_inputs.len(); - let (versioned_hash, batch_data_from_blob) = - BlobVerifier::verify(&input.blob_info, num_blocks)?; + let (versioned_hash, batch_data_from_blob) = BlobVerifier::verify(&input.blob_info)?; let batch_data_from_blocks = get_blob_data_from_blocks( &input.block_inputs.iter().map(|input| input.current_block.clone()).collect::>(), ); diff --git a/prover/crates/executor/client/src/types/blob.rs b/prover/crates/executor/client/src/types/blob.rs index ecc4eb0ac..2d0ef80a2 100644 --- a/prover/crates/executor/client/src/types/blob.rs +++ b/prover/crates/executor/client/src/types/blob.rs @@ -1,8 +1,6 @@ -use anyhow::{anyhow, Context, Ok}; +use anyhow::{anyhow, Context}; use ruzstd::StreamingDecoder; use std::io::Read; -#[cfg(not(target_os = "zkvm"))] -use {alloy_rlp::Decodable, prover_primitives::MorphTxEnvelope}; /// This magic number is included at the start of a single Zstandard frame pub const MAGIC_NUM: u32 = 0xFD2F_B528; @@ -49,58 +47,3 @@ pub fn decompress_batch(compressed_batch: &[u8]) -> Result, anyhow::Erro log::info!("decompressed_batch: {:?}", result.len()); Ok(result) } - -#[cfg(not(target_os = "zkvm"))] -pub fn decode_transactions(bs: &[u8]) -> Vec { - let mut txs_decoded: Vec = Vec::new(); - - let mut offset: usize = 0; - while offset < bs.len() { - let first_byte = *bs.get(offset).unwrap(); - if first_byte == 0 { - // zero byte is found after valid tx bytes, break the loop - log::info!("zero byte"); - break; - } - - let tx_len_size = if first_byte > 0xf7 { - (first_byte - 0xf7) as usize - } else { - // Support transaction types: 0x01, 0x02, 0x04 - if first_byte != 0x01 && first_byte != 0x02 && first_byte != 0x04 && first_byte != 0x7f - { - log::info!("not supported tx type: 0x{first_byte:02x}"); - break; - } - (*bs.get(offset + 1).unwrap() - 0xf7) as usize - }; - - let mut tx_len_bytes = [0u8; 4]; - if first_byte > 0xf7 { - tx_len_bytes[4 - tx_len_size..] - .copy_from_slice(bs.get(offset + 1..offset + tx_len_size + 1).unwrap_or_default()); - } else { - tx_len_bytes[4 - tx_len_size..] - .copy_from_slice(bs.get(offset + 2..offset + tx_len_size + 2).unwrap_or_default()); - } - - let rlp_tx_len = if first_byte > 0xf7 { - 1 + tx_len_size + u32::from_be_bytes(tx_len_bytes) as usize - } else { - 2 + tx_len_size + u32::from_be_bytes(tx_len_bytes) as usize - }; - - let tx_bytes = bs[offset..offset + rlp_tx_len].to_vec(); - let tx_decoded: MorphTxEnvelope = MorphTxEnvelope::decode(&mut tx_bytes.as_slice()) - .inspect_err(|e| { - log::error!("decode_transaction error: {e:?}"); - }) - .unwrap(); - - txs_decoded.push(tx_decoded); - offset += rlp_tx_len; - } - - log::info!("Successfully decoded {} transactions", txs_decoded.len()); - txs_decoded -} diff --git a/prover/crates/executor/client/src/verifier/blob_verifier.rs b/prover/crates/executor/client/src/verifier/blob_verifier.rs index 745029e6e..d65ef9cb4 100644 --- a/prover/crates/executor/client/src/verifier/blob_verifier.rs +++ b/prover/crates/executor/client/src/verifier/blob_verifier.rs @@ -8,23 +8,10 @@ use sha2::{Digest as _, Sha256}; pub struct BlobVerifier; impl BlobVerifier { - pub fn verify( - blob_info: &BlobInfo, - num_blocks: usize, - ) -> Result<(B256, Vec), anyhow::Error> { + pub fn verify(blob_info: &BlobInfo) -> Result<(B256, Vec), anyhow::Error> { // decode let origin_batch = get_origin_batch(&blob_info.blob_data)?; - #[cfg(target_os = "zkvm")] - let _ = num_blocks; - - #[cfg(not(target_os = "zkvm"))] - { - let tx_list = crate::types::blob::decode_transactions( - &origin_batch.as_slice()[num_blocks * 60..], - ); - log::info!("decoded tx_list_len: {:?}", tx_list.len()); - } // verify kzg let versioned_hash = kzg_to_versioned_hash(&blob_info.commitment); let blob = KzgRsBlob::from_slice(&blob_info.blob_data).unwrap(); diff --git a/prover/crates/executor/core/Cargo.toml b/prover/crates/executor/core/Cargo.toml index db9d735d7..720079167 100644 --- a/prover/crates/executor/core/Cargo.toml +++ b/prover/crates/executor/core/Cargo.toml @@ -10,7 +10,6 @@ revm = { workspace = true, features = ["serde", "bn"] } thiserror = { workspace = true } morph-revm = { workspace = true } morph-primitives = { workspace = true } -morph-evm = { workspace = true } morph-chainspec = { workspace = true } alloy-evm = { workspace = true } alloy-consensus.workspace = true diff --git a/prover/crates/executor/core/src/executor.rs b/prover/crates/executor/core/src/executor.rs index 82e53ec7f..d065b7b34 100644 --- a/prover/crates/executor/core/src/executor.rs +++ b/prover/crates/executor/core/src/executor.rs @@ -7,8 +7,8 @@ use morph_chainspec::hardfork::MorphHardfork; use morph_chainspec::hardfork::MorphHardforks; use morph_chainspec::MORPH_HOODI; use morph_chainspec::MORPH_MAINNET; -use morph_evm::MorphBlockEnv; use morph_primitives::MorphTxEnvelope; +use morph_revm::MorphBlockEnv; use morph_revm::MorphEvm; use revm::MainContext; diff --git a/prover/crates/executor/host/src/execute.rs b/prover/crates/executor/host/src/execute.rs index 00b32f27e..53ee69c0d 100644 --- a/prover/crates/executor/host/src/execute.rs +++ b/prover/crates/executor/host/src/execute.rs @@ -35,6 +35,9 @@ impl HostExecutor { provider.get_chain_id().await.context("failed to fetch chain_id from provider")?; // beneficiary(coinbase) + // In Clique consensus, header.Coinbase is always 0x0000...0000. + // The actual beneficiary is the signer recovered from extraData. + // We use a per-chain hardcoded address as the sequencer/beneficiary. let beneficiary = beneficiary_by_chain_id(chain_id); // mpt root at this block diff --git a/prover/crates/primitives/src/lib.rs b/prover/crates/primitives/src/lib.rs index 1d11362de..87e283c22 100644 --- a/prover/crates/primitives/src/lib.rs +++ b/prover/crates/primitives/src/lib.rs @@ -4,7 +4,7 @@ use alloy_consensus::{SignableTransaction, TxEip1559, TxEip2930, TxEip7702, TxLe use alloy_eips::eip2930::AccessList; use alloy_eips::Encodable2718; use alloy_primitives::{Bytes, ChainId, Signature, SignatureError, TxKind}; -use morph_primitives::{TxL1Msg, TxMorph}; +use morph_primitives::TxL1Msg; use std::fmt::Debug; /// Predeployed contracts @@ -17,7 +17,7 @@ pub use alloy_consensus::Transaction; pub use alloy_eips::eip7702::SignedAuthorization; pub use alloy_primitives; pub use alloy_primitives::{Address, B256, U256}; -pub use morph_primitives::MorphTxEnvelope; +pub use morph_primitives::{MorphTxEnvelope, TxMorph}; /// Blanket trait for block trace extensions. pub trait Block: Debug { @@ -162,6 +162,15 @@ pub trait TxTrace { /// Get `sig_v`. fn sig_v(&self) -> u64; + /// Get morph tx `version`. + fn morph_tx_version(&self) -> u8; + + /// Get morph tx `reference`. + fn morph_tx_reference(&self) -> Option; + + /// Get morph tx `memo`. + fn morph_tx_memo(&self) -> Option; + /// Try to build a envelope tx fn try_build_tx_envelope(&self) -> Result { let chain_id = self.chain_id(); @@ -255,6 +264,9 @@ pub trait TxTrace { input: self.data(), fee_token_id: self.fee_token_id(), fee_limit: self.fee_limit(), + version: self.morph_tx_version(), + reference: self.morph_tx_reference(), + memo: self.morph_tx_memo(), }; MorphTxEnvelope::Morph(tx.into_signed(self.signature()?)) } @@ -404,4 +416,16 @@ impl TxTrace for &T { fn queue_index(&self) -> Option { (*self).queue_index() } + + fn morph_tx_version(&self) -> u8 { + (*self).morph_tx_version() + } + + fn morph_tx_reference(&self) -> Option { + (*self).morph_tx_reference() + } + + fn morph_tx_memo(&self) -> Option { + (*self).morph_tx_memo() + } } diff --git a/prover/crates/primitives/src/types/tx.rs b/prover/crates/primitives/src/types/tx.rs index 01d7082e6..2e1aab23d 100644 --- a/prover/crates/primitives/src/types/tx.rs +++ b/prover/crates/primitives/src/types/tx.rs @@ -71,6 +71,15 @@ pub struct TransactionTrace { /// For AltFeeType #[serde(rename = "feeLimit")] pub(crate) fee_limit: Option, + /// Morph tx version + #[serde(default)] + pub(crate) version: Option, + /// Morph tx reference + #[serde(default)] + pub(crate) reference: Option, + /// Morph tx memo + #[serde(default)] + pub(crate) memo: Option, /// signature v pub(crate) v: U64, /// signature r @@ -163,4 +172,16 @@ impl TxTrace for TransactionTrace { fn sig_v(&self) -> u64 { self.v.to::() } + + fn morph_tx_version(&self) -> u8 { + self.version.map(|v| v.to::()).unwrap_or(0) + } + + fn morph_tx_reference(&self) -> Option { + self.reference + } + + fn morph_tx_memo(&self) -> Option { + self.memo.clone() + } } diff --git a/prover/rust-toolchain b/prover/rust-toolchain index 7855e6d55..cdeba7a2b 100644 --- a/prover/rust-toolchain +++ b/prover/rust-toolchain @@ -1,3 +1,3 @@ [toolchain] -channel = "1.88.0" +channel = "1.91.0" components = ["rustfmt", "clippy"] diff --git a/prover/testdata/mpt/executor_input_19720290.data b/prover/testdata/state/executor_input_19720290.data similarity index 100% rename from prover/testdata/mpt/executor_input_19720290.data rename to prover/testdata/state/executor_input_19720290.data