From 65930c6de27d3293a0ee01f7ba4df3f0c5d712d8 Mon Sep 17 00:00:00 2001 From: lightsing Date: Mon, 21 Oct 2024 11:14:51 +0800 Subject: [PATCH] save work --- Cargo.lock | 665 +++++++++++++--------------- crates/core/src/database.rs | 50 +-- crates/core/src/executor/builder.rs | 47 +- crates/core/src/executor/mod.rs | 63 +-- crates/core/src/genesis.rs | 29 +- crates/primitives/src/types/mod.rs | 4 +- crates/primitives/src/types/tx.rs | 9 +- crates/stateful/Cargo.toml | 1 + crates/stateful/src/main.rs | 183 ++++++-- 9 files changed, 556 insertions(+), 495 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 80c09e2..47e7e38 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,9 +4,9 @@ version = 3 [[package]] name = "addr2line" -version = "0.24.1" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5fb1d8e4442bd405fdfd1dacb42792696b0cf9cb15882e5d097b742a676d375" +checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" dependencies = [ "gimli", ] @@ -17,17 +17,6 @@ version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" -[[package]] -name = "ahash" -version = "0.7.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" -dependencies = [ - "getrandom", - "once_cell", - "version_check", -] - [[package]] name = "ahash" version = "0.8.11" @@ -76,10 +65,11 @@ dependencies = [ [[package]] name = "alloy-chains" -version = "0.1.32" +version = "0.1.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abf770dad29577cd3580f3dd09005799224a912b8cdfdd6dc04d030d42b3df4e" +checksum = "d4932d790c723181807738cf1ac68198ab581cd699545b155601332541ee47bd" dependencies = [ + "alloy-primitives", "num_enum", "strum", ] @@ -100,24 +90,24 @@ dependencies = [ [[package]] name = "alloy-core" version = "0.8.0" -source = "git+https://github.com/scroll-tech/alloy-core?branch=v0.8.0#3c8299a45f4722c024a0c34a1ef9b6453b7b3f45" +source = "git+https://github.com/scroll-tech/alloy-core?branch=v0.8.0#4642d710a73aec9513222db586498951f84534cd" dependencies = [ "alloy-dyn-abi", "alloy-json-abi", "alloy-primitives", "alloy-rlp", - "alloy-sol-types 0.8.0 (git+https://github.com/scroll-tech/alloy-core?branch=v0.8.0)", + "alloy-sol-types", ] [[package]] name = "alloy-dyn-abi" version = "0.8.0" -source = "git+https://github.com/scroll-tech/alloy-core?branch=v0.8.0#3c8299a45f4722c024a0c34a1ef9b6453b7b3f45" +source = "git+https://github.com/scroll-tech/alloy-core?branch=v0.8.0#4642d710a73aec9513222db586498951f84534cd" dependencies = [ "alloy-json-abi", "alloy-primitives", "alloy-sol-type-parser", - "alloy-sol-types 0.8.0 (git+https://github.com/scroll-tech/alloy-core?branch=v0.8.0)", + "alloy-sol-types", "const-hex", "itoa", "serde", @@ -128,7 +118,7 @@ dependencies = [ [[package]] name = "alloy-eip2930" version = "0.1.0" -source = "git+https://github.com/scroll-tech/alloy-eips?branch=v0.1.0#f8d7bec6cb9d38320742b89e54c3d8be59937918" +source = "git+https://github.com/scroll-tech/alloy-eips?branch=v0.1.0#06cb417f8b3df8c29a8bf69a8a10663ceb5a2c37" dependencies = [ "alloy-primitives", "alloy-rlp", @@ -139,7 +129,7 @@ dependencies = [ [[package]] name = "alloy-eip7702" version = "0.1.0" -source = "git+https://github.com/scroll-tech/alloy-eips?branch=v0.1.0#f8d7bec6cb9d38320742b89e54c3d8be59937918" +source = "git+https://github.com/scroll-tech/alloy-eips?branch=v0.1.0#06cb417f8b3df8c29a8bf69a8a10663ceb5a2c37" dependencies = [ "alloy-primitives", "alloy-rlp", @@ -176,7 +166,7 @@ dependencies = [ [[package]] name = "alloy-json-abi" version = "0.8.0" -source = "git+https://github.com/scroll-tech/alloy-core?branch=v0.8.0#3c8299a45f4722c024a0c34a1ef9b6453b7b3f45" +source = "git+https://github.com/scroll-tech/alloy-core?branch=v0.8.0#4642d710a73aec9513222db586498951f84534cd" dependencies = [ "alloy-primitives", "alloy-sol-type-parser", @@ -190,7 +180,7 @@ version = "0.3.0" source = "git+https://github.com/scroll-tech/alloy.git?branch=v0.3.0#41bbe34a38a2b1536c58b7c938313a2db4e9369a" dependencies = [ "alloy-primitives", - "alloy-sol-types 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-sol-types", "serde", "serde_json", "thiserror", @@ -210,7 +200,7 @@ dependencies = [ "alloy-rpc-types-eth", "alloy-serde", "alloy-signer", - "alloy-sol-types 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-sol-types", "async-trait", "auto_impl", "futures-utils-wasm", @@ -230,7 +220,7 @@ dependencies = [ [[package]] name = "alloy-primitives" version = "0.8.0" -source = "git+https://github.com/scroll-tech/alloy-core?branch=v0.8.0#3c8299a45f4722c024a0c34a1ef9b6453b7b3f45" +source = "git+https://github.com/scroll-tech/alloy-core?branch=v0.8.0#4642d710a73aec9513222db586498951f84534cd" dependencies = [ "alloy-rlp", "bytes", @@ -301,7 +291,7 @@ checksum = "4d0f2d905ebd295e7effec65e5f6868d153936130ae718352771de3e7d03c75c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.82", ] [[package]] @@ -345,7 +335,7 @@ dependencies = [ "alloy-primitives", "alloy-rlp", "alloy-serde", - "alloy-sol-types 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-sol-types", "itertools 0.13.0", "serde", "serde_json", @@ -378,98 +368,51 @@ dependencies = [ [[package]] name = "alloy-sol-macro" version = "0.8.0" -source = "git+https://github.com/scroll-tech/alloy-core?branch=v0.8.0#3c8299a45f4722c024a0c34a1ef9b6453b7b3f45" +source = "git+https://github.com/scroll-tech/alloy-core?branch=v0.8.0#4642d710a73aec9513222db586498951f84534cd" dependencies = [ - "alloy-sol-macro-expander 0.8.0", - "alloy-sol-macro-input 0.8.0", + "alloy-sol-macro-expander", + "alloy-sol-macro-input", "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.77", -] - -[[package]] -name = "alloy-sol-macro" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0458ccb02a564228fcd76efb8eb5a520521a8347becde37b402afec9a1b83859" -dependencies = [ - "alloy-sol-macro-expander 0.8.3", - "alloy-sol-macro-input 0.8.3", - "proc-macro-error2", - "proc-macro2", - "quote", - "syn 2.0.77", + "syn 2.0.82", ] [[package]] name = "alloy-sol-macro-expander" version = "0.8.0" -source = "git+https://github.com/scroll-tech/alloy-core?branch=v0.8.0#3c8299a45f4722c024a0c34a1ef9b6453b7b3f45" +source = "git+https://github.com/scroll-tech/alloy-core?branch=v0.8.0#4642d710a73aec9513222db586498951f84534cd" dependencies = [ - "alloy-sol-macro-input 0.8.0", + "alloy-sol-macro-input", "const-hex", "heck", - "indexmap 2.5.0", + "indexmap 2.6.0", "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.77", - "syn-solidity 0.8.0", - "tiny-keccak", -] - -[[package]] -name = "alloy-sol-macro-expander" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bc65475025fc1e84bf86fc840f04f63fcccdcf3cf12053c99918e4054dfbc69" -dependencies = [ - "alloy-sol-macro-input 0.8.3", - "const-hex", - "heck", - "indexmap 2.5.0", - "proc-macro-error2", - "proc-macro2", - "quote", - "syn 2.0.77", - "syn-solidity 0.8.3", + "syn 2.0.82", + "syn-solidity", "tiny-keccak", ] [[package]] name = "alloy-sol-macro-input" version = "0.8.0" -source = "git+https://github.com/scroll-tech/alloy-core?branch=v0.8.0#3c8299a45f4722c024a0c34a1ef9b6453b7b3f45" -dependencies = [ - "const-hex", - "dunce", - "heck", - "proc-macro2", - "quote", - "syn 2.0.77", - "syn-solidity 0.8.0", -] - -[[package]] -name = "alloy-sol-macro-input" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ed10f0715a0b69fde3236ff3b9ae5f6f7c97db5a387747100070d3016b9266b" +source = "git+https://github.com/scroll-tech/alloy-core?branch=v0.8.0#4642d710a73aec9513222db586498951f84534cd" dependencies = [ "const-hex", "dunce", "heck", "proc-macro2", "quote", - "syn 2.0.77", - "syn-solidity 0.8.3", + "syn 2.0.82", + "syn-solidity", ] [[package]] name = "alloy-sol-type-parser" version = "0.8.0" -source = "git+https://github.com/scroll-tech/alloy-core?branch=v0.8.0#3c8299a45f4722c024a0c34a1ef9b6453b7b3f45" +source = "git+https://github.com/scroll-tech/alloy-core?branch=v0.8.0#4642d710a73aec9513222db586498951f84534cd" dependencies = [ "serde", "winnow", @@ -478,22 +421,11 @@ dependencies = [ [[package]] name = "alloy-sol-types" version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "577e262966e92112edbd15b1b2c0947cc434d6e8311df96d3329793fe8047da9" -dependencies = [ - "alloy-primitives", - "alloy-sol-macro 0.8.3", - "const-hex", -] - -[[package]] -name = "alloy-sol-types" -version = "0.8.0" -source = "git+https://github.com/scroll-tech/alloy-core?branch=v0.8.0#3c8299a45f4722c024a0c34a1ef9b6453b7b3f45" +source = "git+https://github.com/scroll-tech/alloy-core?branch=v0.8.0#4642d710a73aec9513222db586498951f84534cd" dependencies = [ "alloy-json-abi", "alloy-primitives", - "alloy-sol-macro 0.8.0", + "alloy-sol-macro", "const-hex", "serde", ] @@ -596,9 +528,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.89" +version = "1.0.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86fdf8605db99b54d3cd748a44c6d04df638eb5dafb219b135d0149bd0db01f6" +checksum = "37bf3594c4c988a53154954629820791dde498571819ae4ca50ca811e060cc95" [[package]] name = "ark-ff" @@ -744,9 +676,9 @@ dependencies = [ [[package]] name = "async-stream" -version = "0.3.5" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd56dd203fef61ac097dd65721a419ddccb106b2d2b70ba60a6b529f03961a51" +checksum = "0b5a71a6f37880a80d1d7f19efd781e4b5de42c88f0722cc13bcb6cc2cfe8476" dependencies = [ "async-stream-impl", "futures-core", @@ -755,24 +687,24 @@ dependencies = [ [[package]] name = "async-stream-impl" -version = "0.3.5" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" +checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.82", ] [[package]] name = "async-trait" -version = "0.1.82" +version = "0.1.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a27b8a3a6e1a44fa4c8baf1f653e4172e81486d4941f2237e20dc2d0cf4ddff1" +checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.82", ] [[package]] @@ -799,14 +731,14 @@ checksum = "3c87f3f15e7794432337fc718554eaa4dc8f04c9677a950ffe366f20a162ae42" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.82", ] [[package]] name = "autocfg" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "backtrace" @@ -908,12 +840,13 @@ dependencies = [ [[package]] name = "bn254" version = "0.1.0" -source = "git+https://github.com/scroll-tech/bn254#c9f170c6e39cfbc1ff14b9648f125823978041b3" +source = "git+https://github.com/scroll-tech/bn254.git?branch=master#db67681f5e9ae1736565a48ec294a6d0dacb4e0d" dependencies = [ "ff", "getrandom", "rand", "rand_core", + "sp1-intrinsics", "subtle", ] @@ -931,31 +864,32 @@ checksum = "c3ac9f8b63eca6fd385229b3675f6cc0dc5c8a5c8a54a59d4f52ffd670d87b0c" [[package]] name = "bytecheck" -version = "0.6.12" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23cdc57ce23ac53c931e88a43d06d070a6fd142f2617be5855eb75efc9beb1c2" +checksum = "50c8f430744b23b54ad15161fcbc22d82a29b73eacbe425fea23ec822600bc6f" dependencies = [ "bytecheck_derive", "ptr_meta", + "rancor", "simdutf8", ] [[package]] name = "bytecheck_derive" -version = "0.6.12" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3db406d29fbcd95542e92559bed4d8ad92636d1ca8b3b72ede10b4bcc010e659" +checksum = "523363cbe1df49b68215efdf500b103ac3b0fb4836aed6d15689a076eadb8fff" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.82", ] [[package]] name = "bytemuck" -version = "1.18.0" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94bbb0ad554ad961ddc5da507a12a29b14e4ae5bda06b19f575a3e6079d2e2ae" +checksum = "8334215b81e418a0a7bdb8ef0849474f40bb10c8b71f1c4ed315cff49f32494d" [[package]] name = "byteorder" @@ -989,9 +923,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.1.21" +version = "1.1.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07b1695e2c7e8fc85310cde85aeaab7e3097f593c91d209d3f9df76c928100f0" +checksum = "c2e7962b54006dcfcc61cb72735f4d89bb97061dd6a7ed882ec6b8ee53714c6f" dependencies = [ "shlex", ] @@ -1017,9 +951,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.17" +version = "4.5.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e5a21b8495e732f1b3c364c9949b201ca7bae518c502c80256c96ad79eaf6ac" +checksum = "b97f376d85a664d5837dbae44bf546e6477a679ff6610010f17276f686d867e8" dependencies = [ "clap_builder", "clap_derive", @@ -1027,9 +961,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.17" +version = "4.5.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8cf2dd12af7a047ad9d6da2b6b249759a22a7abc0f474c1dae1777afa4b21a73" +checksum = "19bc80abd44e4bed93ca373a0704ccbd1b710dc5749406201bb018272808dc54" dependencies = [ "anstream", "anstyle", @@ -1039,14 +973,14 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.13" +version = "4.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "501d359d5f3dcaf6ecdeee48833ae73ec6e42723a1e52419c79abf9507eec0a0" +checksum = "4ac6a0c7b1a9e9a5186361f67dfa1b88213572f427fb9ab038efb2bd8c582dab" dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.82", ] [[package]] @@ -1072,9 +1006,9 @@ dependencies = [ [[package]] name = "const-hex" -version = "1.12.0" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94fb8a24a26d37e1ffd45343323dc9fe6654ceea44c12f2fcb3d7ac29e610bc6" +checksum = "0121754e84117e65f9d90648ee6aa4882a6e63110307ab73967a4c5e7e69e586" dependencies = [ "cfg-if", "cpufeatures", @@ -1209,7 +1143,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "edb49164822f3ee45b17acd4a208cfc1251410cf0cad9a833234c9890774dd9f" dependencies = [ "quote", - "syn 2.0.77", + "syn 2.0.82", ] [[package]] @@ -1233,7 +1167,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.77", + "syn 2.0.82", ] [[package]] @@ -1244,7 +1178,7 @@ checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ "darling_core", "quote", - "syn 2.0.77", + "syn 2.0.82", ] [[package]] @@ -1311,7 +1245,7 @@ dependencies = [ "proc-macro2", "quote", "rustc_version 0.4.1", - "syn 2.0.77", + "syn 2.0.82", ] [[package]] @@ -1409,7 +1343,7 @@ checksum = "2f9ed6b3789237c8a0c1c505af1c7eb2c560df6186f01b098c3a1064ea532f38" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.82", ] [[package]] @@ -1506,6 +1440,12 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" +[[package]] +name = "foldhash" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f81ec6369c545a7d40e4589b5597581fa1c441fe1cce96dd1de43159910a36a2" + [[package]] name = "foreign-types" version = "0.3.2" @@ -1548,9 +1488,9 @@ checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" [[package]] name = "futures" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" +checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" dependencies = [ "futures-channel", "futures-core", @@ -1563,9 +1503,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" dependencies = [ "futures-core", "futures-sink", @@ -1573,15 +1513,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" [[package]] name = "futures-executor" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" +checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" dependencies = [ "futures-core", "futures-task", @@ -1590,38 +1530,38 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" [[package]] name = "futures-macro" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.82", ] [[package]] name = "futures-sink" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" [[package]] name = "futures-task" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" [[package]] name = "futures-util" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" dependencies = [ "futures-channel", "futures-core", @@ -1674,9 +1614,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.31.0" +version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32085ea23f3234fc7846555e85283ba4de91e21016dc0455a16286d87a292d64" +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" [[package]] name = "glob" @@ -1707,7 +1647,7 @@ dependencies = [ "futures-core", "futures-sink", "http", - "indexmap 2.5.0", + "indexmap 2.6.0", "slab", "tokio", "tokio-util", @@ -1719,9 +1659,6 @@ name = "hashbrown" version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" -dependencies = [ - "ahash 0.7.8", -] [[package]] name = "hashbrown" @@ -1729,11 +1666,22 @@ version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" dependencies = [ - "ahash 0.8.11", + "ahash", "allocator-api2", "serde", ] +[[package]] +name = "hashbrown" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e087f84d4f86bf4b218b927129862374b72199ae7d8657835f1e89000eea4fb" +dependencies = [ + "allocator-api2", + "equivalent", + "foldhash", +] + [[package]] name = "heck" version = "0.5.0" @@ -1812,9 +1760,9 @@ dependencies = [ [[package]] name = "httparse" -version = "1.9.4" +version = "1.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fcc0b4a115bf80b728eb8ea024ad5bd707b615bfed49e0665b6e0f86fd082d9" +checksum = "7d71d3574edd2771538b901e6549113b4006ece66150fb69c0fb6d9a2adae946" [[package]] name = "httpdate" @@ -1824,9 +1772,9 @@ checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "hyper" -version = "1.4.1" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50dfd22e0e76d0f662d429a5f80fcaf3855009297eab6a0a9f8543834744ba05" +checksum = "bbbff0a806a4728c99295b254c8838933b5b082d75e3cb70c8dab21fdfbcfa9a" dependencies = [ "bytes", "futures-channel", @@ -1878,9 +1826,9 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da62f120a8a37763efb0cf8fdf264b884c7b8b9ac8660b900c8661030c00e6ba" +checksum = "41296eb09f183ac68eec06e03cdbea2e759633d4067b2f6552fc2e009bcad08b" dependencies = [ "bytes", "futures-channel", @@ -1891,7 +1839,6 @@ dependencies = [ "pin-project-lite", "socket2", "tokio", - "tower", "tower-service", "tracing", ] @@ -1968,12 +1915,12 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.5.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68b900aa2f7301e21c36462b170ee99994de34dff39a4a6a528e80e7376d07e5" +checksum = "707907fe3c25f5424cce2cb7e1cbcafee6bdbe735ca90ef77c29e84591e5b9da" dependencies = [ "equivalent", - "hashbrown 0.14.5", + "hashbrown 0.15.0", "serde", ] @@ -1983,8 +1930,8 @@ version = "0.11.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "232929e1d75fe899576a3d5c7416ad0d88dbfbb3c3d6aa00873a7408a50ddb88" dependencies = [ - "ahash 0.8.11", - "indexmap 2.5.0", + "ahash", + "indexmap 2.6.0", "is-terminal", "itoa", "log", @@ -2006,9 +1953,9 @@ dependencies = [ [[package]] name = "ipnet" -version = "2.10.0" +version = "2.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "187674a687eed5fe42285b40c6291f9a01517d415fad1c3cbc6a9f778af7fcd4" +checksum = "ddc24109865250148c2e0f3d25d4f0f479571723792d3802153c60922a4fb708" [[package]] name = "is-terminal" @@ -2053,18 +2000,18 @@ checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" [[package]] name = "js-sys" -version = "0.3.70" +version = "0.3.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1868808506b929d7b0cfa8f75951347aa71bb21144b7791bae35d9bccfcfe37a" +checksum = "6a88f1bda2bd75b0452a14784937d796722fdebfe50df998aeb3f0b7603019a9" dependencies = [ "wasm-bindgen", ] [[package]] name = "k256" -version = "0.13.3" +version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "956ff9b67e26e1a6a866cb758f12c6f8746208489e3e4a4b5580802f2f0a587b" +checksum = "f6e3919bbaa2945715f0bb6d3934a173d1e9a59ac23767fbaaef277265a7411b" dependencies = [ "cfg-if", "ecdsa", @@ -2094,9 +2041,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.158" +version = "0.2.161" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8adc4bb1803a324070e64a98ae98f38934d91957a99cfb3a43dcbc01bc56439" +checksum = "8e9489c2807c139ffd9c1794f4af0ebe86a828db53ecdc7fea2111d0fed085d1" [[package]] name = "libm" @@ -2128,11 +2075,11 @@ checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" [[package]] name = "lru" -version = "0.12.4" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37ee39891760e7d94734f6f63fedc29a2e4a152f836120753a72503f09fcf904" +checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" dependencies = [ - "hashbrown 0.14.5", + "hashbrown 0.15.0", ] [[package]] @@ -2186,6 +2133,26 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "munge" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64142d38c84badf60abf06ff9bd80ad2174306a5b11bd4706535090a30a419df" +dependencies = [ + "munge_macro", +] + +[[package]] +name = "munge_macro" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bb5c1d8184f13f7d0ccbeeca0def2f9a181bce2624302793005f5ca8aa62e5e" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.82", +] + [[package]] name = "native-tls" version = "0.2.12" @@ -2271,7 +2238,7 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.82", ] [[package]] @@ -2352,29 +2319,29 @@ checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.82", ] [[package]] name = "object" -version = "0.36.4" +version = "0.36.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "084f1a5821ac4c651660a94a7153d27ac9d8a53736203f58b31945ded098070a" +checksum = "aedf0a2d09c573ed1d8d85b30c119153926a2b36dce0ab28322c09a117a4683e" dependencies = [ "memchr", ] [[package]] name = "once_cell" -version = "1.19.0" +version = "1.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" +checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" [[package]] name = "openssl" -version = "0.10.66" +version = "0.10.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9529f4786b70a3e8c61e11179af17ab6188ad8d0ded78c5529441ed39d4bd9c1" +checksum = "6174bc48f102d208783c2c84bf931bb75927a617866870de8a4ea85597f871f5" dependencies = [ "bitflags 2.6.0", "cfg-if", @@ -2393,7 +2360,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.82", ] [[package]] @@ -2404,9 +2371,9 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-sys" -version = "0.9.103" +version = "0.9.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f9e8deee91df40a943c71b917e5874b951d32a802526c85721ce3b776c929d6" +checksum = "45abf306cbf99debc8195b66b7346498d7b10c210de50418b5ccd7ceba08c741" dependencies = [ "cc", "libc", @@ -2495,7 +2462,7 @@ checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.5.4", + "redox_syscall 0.5.7", "smallvec", "windows-targets", ] @@ -2514,9 +2481,9 @@ checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "pest" -version = "2.7.13" +version = "2.7.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdbef9d1d47087a895abd220ed25eb4ad973a5e26f6a4367b038c25e28dfc2d9" +checksum = "879952a81a83930934cbf1786752d6dedc3b1f29e8f8fb2ad1d0a36f377cf442" dependencies = [ "memchr", "thiserror", @@ -2525,22 +2492,22 @@ dependencies = [ [[package]] name = "pin-project" -version = "1.1.5" +version = "1.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" +checksum = "baf123a161dde1e524adf36f90bc5d8d3462824a9c43553ad07a8183161189ec" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.5" +version = "1.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" +checksum = "a4502d8515ca9f32f1fb543d987f63d95a14934883db45bdb48060b6b69257f8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.82", ] [[package]] @@ -2567,17 +2534,18 @@ dependencies = [ [[package]] name = "pkg-config" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" +checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" [[package]] name = "poseidon-bn254" version = "0.1.0" -source = "git+https://github.com/scroll-tech/poseidon-bn254?branch=master#526a64a81419bcab6bd8280a8a3f9808189e0373" +source = "git+https://github.com/scroll-tech/poseidon-bn254?branch=master#a96ba028dd00987551451d8f4bd65b7ea5469a44" dependencies = [ "bn254", "itertools 0.13.0", + "sp1-intrinsics", ] [[package]] @@ -2660,33 +2628,11 @@ dependencies = [ "version_check", ] -[[package]] -name = "proc-macro-error-attr2" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96de42df36bb9bba5542fe9f1a054b8cc87e172759a1868aa05c1f3acc89dfc5" -dependencies = [ - "proc-macro2", - "quote", -] - -[[package]] -name = "proc-macro-error2" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11ec05c52be0a07b08061f7dd003e7d7092e0472bc731b4af7bb1ef876109802" -dependencies = [ - "proc-macro-error-attr2", - "proc-macro2", - "quote", - "syn 2.0.77", -] - [[package]] name = "proc-macro2" -version = "1.0.86" +version = "1.0.88" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" +checksum = "7c3a7fc5db1e57d5a779a352c8cdb57b29aa4c40cc69c3a68a7fedc815fbf2f9" dependencies = [ "unicode-ident", ] @@ -2711,7 +2657,7 @@ checksum = "440f724eba9f6996b75d63681b0a92b06947f1457076d503a4d2e2c8f56442b8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.82", ] [[package]] @@ -2728,7 +2674,7 @@ dependencies = [ "rand", "rand_chacha", "rand_xorshift", - "regex-syntax 0.8.4", + "regex-syntax 0.8.5", "rusty-fork", "tempfile", "unarray", @@ -2736,22 +2682,22 @@ dependencies = [ [[package]] name = "ptr_meta" -version = "0.1.4" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0738ccf7ea06b608c10564b31debd4f5bc5e197fc8bfe088f68ae5ce81e7a4f1" +checksum = "fe9e76f66d3f9606f44e45598d155cb13ecf09f4a28199e48daf8c8fc937ea90" dependencies = [ "ptr_meta_derive", ] [[package]] name = "ptr_meta_derive" -version = "0.1.4" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16b845dbfca988fa33db069c0e230574d15a3088f147a87b64c7589eb662c9ac" +checksum = "ca414edb151b4c8d125c12566ab0d74dc9cdba36fb80eb7b848c15f495fd32d1" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.82", ] [[package]] @@ -2784,6 +2730,15 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" +[[package]] +name = "rancor" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "caf5f7161924b9d1cea0e4cabc97c372cea92b5f927fc13c6bca67157a0ad947" +dependencies = [ + "ptr_meta", +] + [[package]] name = "rand" version = "0.8.5" @@ -2834,23 +2789,23 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.4" +version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0884ad60e090bf1345b93da0a5de8923c93884cd03f40dfcfddd3b4bee661853" +checksum = "9b6dfecf2c74bce2466cabf93f6664d6998a69eb21e39f4207930065b27b771f" dependencies = [ "bitflags 2.6.0", ] [[package]] name = "regex" -version = "1.10.6" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4219d74c6b67a3654a9fbebc4b419e22126d13d2f3c4a07ee0cb61ff79a79619" +checksum = "38200e5ee88914975b69f657f0801b6f6dccafd44fd9326302a4aaeecfacb1d8" dependencies = [ "aho-corasick", "memchr", - "regex-automata 0.4.7", - "regex-syntax 0.8.4", + "regex-automata 0.4.8", + "regex-syntax 0.8.5", ] [[package]] @@ -2864,13 +2819,13 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.7" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" +checksum = "368758f23274712b504848e9d5a6f010445cc8b87a7cdb4d7cbee666c1288da3" dependencies = [ "aho-corasick", "memchr", - "regex-syntax 0.8.4", + "regex-syntax 0.8.5", ] [[package]] @@ -2881,24 +2836,24 @@ checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" [[package]] name = "regex-syntax" -version = "0.8.4" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" [[package]] name = "rend" -version = "0.4.2" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71fe3824f5629716b1589be05dacd749f6aa084c87e00e016714a8cdfccc997c" +checksum = "a35e8a6bf28cd121053a66aa2e6a2e3eaffad4a60012179f0e864aa5ffeff215" dependencies = [ "bytecheck", ] [[package]] name = "reqwest" -version = "0.12.7" +version = "0.12.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8f4955649ef5c38cc7f9e8aa41761d48fb9677197daea9984dc54f56aad5e63" +checksum = "f713147fbe92361e52392c73b8c9e48c04c6625bce969ef54dc901e58e042a7b" dependencies = [ "base64", "bytes", @@ -2940,7 +2895,7 @@ dependencies = [ [[package]] name = "revm" version = "14.0.0" -source = "git+https://github.com/scroll-tech/revm?branch=scroll-evm-executor/v42#921525ab7b132414fe1ba1df2b6b2941fceb8f4d" +source = "git+https://github.com/scroll-tech/revm?branch=scroll-evm-executor/v42#df2fc95185c1f24c5d3ebabb0067a864d8cfc754" dependencies = [ "auto_impl", "cfg-if", @@ -2954,7 +2909,7 @@ dependencies = [ [[package]] name = "revm-interpreter" version = "10.0.0" -source = "git+https://github.com/scroll-tech/revm?branch=scroll-evm-executor/v42#921525ab7b132414fe1ba1df2b6b2941fceb8f4d" +source = "git+https://github.com/scroll-tech/revm?branch=scroll-evm-executor/v42#df2fc95185c1f24c5d3ebabb0067a864d8cfc754" dependencies = [ "cfg-if", "revm-primitives", @@ -2964,7 +2919,7 @@ dependencies = [ [[package]] name = "revm-precompile" version = "11.0.0" -source = "git+https://github.com/scroll-tech/revm?branch=scroll-evm-executor/v42#921525ab7b132414fe1ba1df2b6b2941fceb8f4d" +source = "git+https://github.com/scroll-tech/revm?branch=scroll-evm-executor/v42#df2fc95185c1f24c5d3ebabb0067a864d8cfc754" dependencies = [ "aurora-engine-modexp", "c-kzg", @@ -2981,7 +2936,7 @@ dependencies = [ [[package]] name = "revm-primitives" version = "9.0.0" -source = "git+https://github.com/scroll-tech/revm?branch=scroll-evm-executor/v42#921525ab7b132414fe1ba1df2b6b2941fceb8f4d" +source = "git+https://github.com/scroll-tech/revm?branch=scroll-evm-executor/v42#df2fc95185c1f24c5d3ebabb0067a864d8cfc754" dependencies = [ "alloy-eips", "alloy-primitives", @@ -3043,31 +2998,32 @@ dependencies = [ [[package]] name = "rkyv" -version = "0.7.45" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9008cd6385b9e161d8229e1f6549dd23c3d022f132a2ea37ac3a10ac4935779b" +checksum = "395027076c569819ea6035ee62e664f5e03d74e281744f55261dd1afd939212b" dependencies = [ - "bitvec", "bytecheck", "bytes", - "hashbrown 0.12.3", + "hashbrown 0.14.5", + "indexmap 2.6.0", + "munge", "ptr_meta", + "rancor", "rend", "rkyv_derive", - "seahash", "tinyvec", "uuid", ] [[package]] name = "rkyv_derive" -version = "0.7.45" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "503d1d27590a2b0a3a4ca4c94755aa2875657196ecbf401a42eff41d7de532c0" +checksum = "09cb82b74b4810f07e460852c32f522e979787691b0b7b7439fe473e49d49b2f" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.82", ] [[package]] @@ -3083,7 +3039,7 @@ dependencies = [ [[package]] name = "ruint" version = "1.12.3" -source = "git+https://github.com/scroll-tech/uint.git?branch=v1.12.3#6d6f74be1169bdc41052f50ddfb66ae96bf78475" +source = "git+https://github.com/scroll-tech/uint.git?branch=v1.12.3#d26b1f2a4412bba2b9b366f43f7684fd32ac1c8a" dependencies = [ "alloy-rlp", "ark-ff 0.3.0", @@ -3107,7 +3063,7 @@ dependencies = [ [[package]] name = "ruint-macro" version = "1.2.1" -source = "git+https://github.com/scroll-tech/uint.git?branch=v1.12.3#6d6f74be1169bdc41052f50ddfb66ae96bf78475" +source = "git+https://github.com/scroll-tech/uint.git?branch=v1.12.3#d26b1f2a4412bba2b9b366f43f7684fd32ac1c8a" [[package]] name = "rustc-demangle" @@ -3154,9 +3110,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.13" +version = "0.23.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2dabaac7466917e566adb06783a81ca48944c6898a1b08b9374106dd671f4c8" +checksum = "5fbb44d7acc4e873d613422379f69f237a1b141928c02f6bc6ccfddddc2d7993" dependencies = [ "once_cell", "rustls-pki-types", @@ -3167,19 +3123,18 @@ dependencies = [ [[package]] name = "rustls-pemfile" -version = "2.1.3" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "196fe16b00e106300d3e45ecfcb764fa292a535d7326a29a5875c579c7417425" +checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" dependencies = [ - "base64", "rustls-pki-types", ] [[package]] name = "rustls-pki-types" -version = "1.8.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc0a2ce646f8655401bb81e7927b812614bd5d91dbc968696be50603510fcaf0" +checksum = "16f1201b3c9a7ee8039bcadc17b7e605e2945b27eee7631788c1bd2b0643674b" [[package]] name = "rustls-webpki" @@ -3194,9 +3149,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.17" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" +checksum = "0e819f2bc632f285be6d7cd36e25940d45b2391dd6d9b939e79de557f7014248" [[package]] name = "rusty-fork" @@ -3279,9 +3234,9 @@ dependencies = [ [[package]] name = "schannel" -version = "0.1.24" +version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9aaafd5a2b6e3d657ff009d82fbd630b6bd54dd4eb06f21693925cdf80f9b8b" +checksum = "01227be5826fa0690321a2ba6c5cd57a19cf3f6a09e76973b58e61de6ab9d1c1" dependencies = [ "windows-sys 0.59.0", ] @@ -3292,12 +3247,6 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" -[[package]] -name = "seahash" -version = "4.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b" - [[package]] name = "sec1" version = "0.7.3" @@ -3346,9 +3295,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.11.1" +version = "2.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75da29fe9b9b08fe9d6b22b5b4bcbc75d8db3aa31e639aa56bb62e9d46bfceaf" +checksum = "ea4a292869320c0272d7bc55a5a6aafaff59b4f63404a003887b679a2e05b4b6" dependencies = [ "core-foundation-sys", "libc", @@ -3395,16 +3344,16 @@ checksum = "243902eda00fad750862fc144cea25caca5e20d615af0a81bee94ca738f1df1f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.82", ] [[package]] name = "serde_json" -version = "1.0.128" +version = "1.0.132" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ff5456707a1de34e7e37f2a6fd3d3f808c318259cbd01ab6377795054b483d8" +checksum = "d726bfaff4b320266d395898905d0eba0345aae23b54aee3a737e260fd46db03" dependencies = [ - "indexmap 2.5.0", + "indexmap 2.6.0", "itoa", "memchr", "ryu", @@ -3425,15 +3374,15 @@ dependencies = [ [[package]] name = "serde_with" -version = "3.9.0" +version = "3.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69cecfa94848272156ea67b2b1a53f20fc7bc638c4a46d2f8abde08f05f4b857" +checksum = "8e28bdad6db2b8340e449f7108f020b3b092e8583a9e3fb82713e1d4e71fe817" dependencies = [ "base64", "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.5.0", + "indexmap 2.6.0", "serde", "serde_derive", "serde_json", @@ -3443,14 +3392,14 @@ dependencies = [ [[package]] name = "serde_with_macros" -version = "3.9.0" +version = "3.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8fee4991ef4f274617a51ad4af30519438dacb2f56ac773b08a1922ff743350" +checksum = "9d846214a9854ef724f3da161b426242d8de7c1fc7de2f89bb1efcb154dca79d" dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.82", ] [[package]] @@ -3510,9 +3459,9 @@ dependencies = [ [[package]] name = "simdutf8" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f27f6278552951f1f2b8cf9da965d10969b2efdea95a6ec47987ab46edfe263a" +checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" [[package]] name = "slab" @@ -3555,6 +3504,14 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "sp1-intrinsics" +version = "0.0.0" +source = "git+https://github.com/scroll-tech/sp1-intrinsics.git?branch=master#7e038e60db0b2e847f6d8f49e148ccac8c6fc394" +dependencies = [ + "cfg-if", +] + [[package]] name = "spin" version = "0.9.8" @@ -3584,6 +3541,7 @@ dependencies = [ "alloy", "anyhow", "clap", + "revm", "sbv", "serde_json", "sled", @@ -3649,7 +3607,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.77", + "syn 2.0.82", ] [[package]] @@ -3673,9 +3631,9 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "symbolic-common" -version = "12.11.1" +version = "12.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fdf97c441f18a4f92425b896a4ec7a27e03631a0b1047ec4e34e9916a9a167e" +checksum = "366f1b4c6baf6cfefc234bbd4899535fca0b06c74443039a73f6dfb2fad88d77" dependencies = [ "debugid", "memmap2", @@ -3685,9 +3643,9 @@ dependencies = [ [[package]] name = "symbolic-demangle" -version = "12.11.1" +version = "12.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc8ece6b129e97e53d1fbb3f61d33a6a9e5369b11d01228c068094d6d134eaea" +checksum = "aba05ba5b9962ea5617baf556293720a8b2d0a282aa14ee4bf10e22efc7da8c8" dependencies = [ "cpp_demangle", "rustc-demangle", @@ -3707,9 +3665,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.77" +version = "2.0.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f35bcdf61fd8e7be6caf75f429fdca8beb3ed76584befb503b1569faee373ed" +checksum = "83540f837a8afc019423a8edb95b52a8effe46957ee402287f4292fae35be021" dependencies = [ "proc-macro2", "quote", @@ -3719,24 +3677,12 @@ dependencies = [ [[package]] name = "syn-solidity" version = "0.8.0" -source = "git+https://github.com/scroll-tech/alloy-core?branch=v0.8.0#3c8299a45f4722c024a0c34a1ef9b6453b7b3f45" -dependencies = [ - "paste", - "proc-macro2", - "quote", - "syn 2.0.77", -] - -[[package]] -name = "syn-solidity" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b95156f8b577cb59dc0b1df15c6f29a10afc5f8a7ac9786b0b5c68c19149278" +source = "git+https://github.com/scroll-tech/alloy-core?branch=v0.8.0#4642d710a73aec9513222db586498951f84534cd" dependencies = [ "paste", "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.82", ] [[package]] @@ -3777,9 +3723,9 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "tempfile" -version = "3.12.0" +version = "3.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04cbcdd0c794ebb0d4cf35e88edd2f7d2c4c3e9a5a6dab322839b321c6a87a64" +checksum = "f0f2c9fc62d0beef6951ccffd757e241266a2c833136efbe35af6cd2567dca5b" dependencies = [ "cfg-if", "fastrand", @@ -3790,22 +3736,22 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.63" +version = "1.0.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724" +checksum = "d50af8abc119fb8bb6dbabcfa89656f46f84aa0ac7688088608076ad2b459a84" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.63" +version = "1.0.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" +checksum = "08904e7672f5eb876eaaf87e0ce17857500934f4981c4a0ab2b4aa98baac7fc3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.82", ] [[package]] @@ -3907,7 +3853,7 @@ checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.82", ] [[package]] @@ -3964,11 +3910,11 @@ checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" [[package]] name = "toml_edit" -version = "0.22.21" +version = "0.22.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b072cee73c449a636ffd6f32bd8de3a9f7119139aff882f44943ce2986dc5cf" +checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" dependencies = [ - "indexmap 2.5.0", + "indexmap 2.6.0", "toml_datetime", "winnow", ] @@ -3983,7 +3929,6 @@ dependencies = [ "futures-util", "pin-project", "pin-project-lite", - "tokio", "tower-layer", "tower-service", "tracing", @@ -4021,7 +3966,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.82", ] [[package]] @@ -4077,9 +4022,9 @@ checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" [[package]] name = "ucd-trie" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed646292ffc8188ef8ea4d1e0e0150fb15a5c2e12ad9b8fc191ae7a8a7f3c4b9" +checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" [[package]] name = "uint" @@ -4101,9 +4046,9 @@ checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94" [[package]] name = "unicode-bidi" -version = "0.3.15" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" +checksum = "5ab17db44d7388991a428b2ee655ce0c212e862eff1768a455c58f9aad6e7893" [[package]] name = "unicode-ident" @@ -4145,9 +4090,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.10.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81dfa00651efa65069b0b6b651f4aaa31ba9e3c3ce0137aaad053604ee7e0314" +checksum = "f8c5f0a0af699448548ad1a2fbf920fb4bee257eae39953ba95cb84891a0446a" [[package]] name = "valuable" @@ -4193,9 +4138,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.93" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a82edfc16a6c469f5f44dc7b571814045d60404b55a0ee849f9bcfa2e63dd9b5" +checksum = "128d1e363af62632b8eb57219c8fd7877144af57558fb2ef0368d0087bddeb2e" dependencies = [ "cfg-if", "once_cell", @@ -4204,24 +4149,24 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.93" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9de396da306523044d3302746f1208fa71d7532227f15e347e2d93e4145dd77b" +checksum = "cb6dd4d3ca0ddffd1dd1c9c04f94b868c37ff5fac97c30b97cff2d74fce3a358" dependencies = [ "bumpalo", "log", "once_cell", "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.82", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.43" +version = "0.4.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61e9300f63a621e96ed275155c108eb6f843b6a26d053f122ab69724559dc8ed" +checksum = "cc7ec4f8827a71586374db3e87abdb5a2bb3a15afed140221307c3ec06b1f63b" dependencies = [ "cfg-if", "js-sys", @@ -4231,9 +4176,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.93" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "585c4c91a46b072c92e908d99cb1dcdf95c5218eeb6f3bf1efa991ee7a68cccf" +checksum = "e79384be7f8f5a9dd5d7167216f022090cf1f9ec128e6e6a482a2cb5c5422c56" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -4241,28 +4186,28 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.93" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afc340c74d9005395cf9dd098506f7f44e38f2b4a21c6aaacf9a105ea5e1e836" +checksum = "26c6ab57572f7a24a4985830b120de1594465e5d500f24afe89e16b4e833ef68" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.82", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.93" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c62a0a307cb4a311d3a07867860911ca130c3494e8c2719593806c08bc5d0484" +checksum = "65fc09f10666a9f147042251e0dda9c18f166ff7de300607007e96bdebc1068d" [[package]] name = "web-sys" -version = "0.3.70" +version = "0.3.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26fdeaafd9bd129f65e7c031593c24d62186301e0c72c8978fa1678be7d532c0" +checksum = "f6488b90108c040df0fe62fa815cbdee25124641df01814dd7282749234c6112" dependencies = [ "js-sys", "wasm-bindgen", @@ -4413,9 +4358,9 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winnow" -version = "0.6.18" +version = "0.6.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68a9bda4691f099d435ad181000724da8e5899daa10713c2d432552b9ccd3a6f" +checksum = "36c1fec1a2bb5866f07c25f68c26e565c4c200aebb96d7e55710c19d3e8ac49b" dependencies = [ "memchr", ] @@ -4447,7 +4392,7 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.82", ] [[package]] @@ -4467,12 +4412,13 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.82", ] [[package]] name = "zktrie-ng" version = "0.1.0" +source = "git+https://github.com/scroll-tech/zktrie-ng?branch=master#8ad8038e39f9b88abfe8680e32bba19ac4497a1d" dependencies = [ "alloy-primitives", "hashbrown 0.14.5", @@ -4482,6 +4428,7 @@ dependencies = [ "once_cell", "poseidon-bn254", "revm-primitives", + "rkyv", "sled", "strum", "thiserror", diff --git a/crates/core/src/database.rs b/crates/core/src/database.rs index 32cce45..c84bb0e 100644 --- a/crates/core/src/database.rs +++ b/crates/core/src/database.rs @@ -3,12 +3,13 @@ use revm::{ db::DatabaseRef, primitives::{AccountInfo, Address, Bytecode, B256, U256}, }; -use sbv_primitives::zk_trie::db::NodeDb; -use sbv_primitives::zk_trie::hash::ZkHash; use sbv_primitives::{ zk_trie::{ - db::kv::{KVDatabase, KVDatabaseItem}, - hash::{key_hasher::NoCacheHasher, poseidon::Poseidon}, + db::{ + kv::{KVDatabase, KVDatabaseItem}, + NodeDb, + }, + hash::{key_hasher::NoCacheHasher, poseidon::Poseidon, ZkHash}, scroll_types::Account, trie::ZkTrie, }, @@ -21,7 +22,7 @@ type Result = std::result::Result; /// A database that consists of account and storage information. pub struct EvmDatabase<'a, CodeDb, ZkDb> { /// Map of code hash to bytecode. - code_db: CodeDb, + pub(crate) code_db: &'a mut CodeDb, /// Storage root cache, avoid re-query account when storage root is needed storage_root_caches: RefCell>, /// Storage trie cache, avoid re-creating trie for the same account. @@ -44,23 +45,12 @@ impl fmt::Debug for EvmDatabase<'_, CodeDb, Db> { } impl<'a, CodeDb: KVDatabase, ZkDb: KVDatabase + 'static> EvmDatabase<'a, CodeDb, ZkDb> { - /// Initialize an EVM database from a block trace. - pub fn new( - l2_trace: T, - mut code_db: CodeDb, + /// Initialize an EVM database from a zkTrie root. + pub fn new_from_root( + committed_zktrie_root: B256, + code_db: &'a mut CodeDb, zktrie_db: &'a mut NodeDb, ) -> Result { - cycle_tracker_start!("insert CodeDB"); - for code in l2_trace.codes() { - let hash = revm::primitives::keccak256(code); - code_db - .or_put(hash.as_slice(), code) - .map_err(DatabaseError::code_db)?; - } - cycle_tracker_end!("insert CodeDB"); - - let committed_zktrie_root = l2_trace.root_before(); - let zktrie = ZkTrie::new_with_root(zktrie_db, NoCacheHasher, committed_zktrie_root) .map_err(DatabaseError::zk_trie)?; @@ -113,11 +103,14 @@ impl<'a, CodeDb: KVDatabase, ZkDb: KVDatabase + 'static> EvmDatabase<'a, CodeDb, } /// Update the database with a new block trace. - pub fn update(&mut self, l2_trace: T) -> Result<()> { - measure_duration_millis!(update_db_duration_milliseconds, self.update_inner(l2_trace)) + pub fn insert_codes(&mut self, l2_trace: T) -> Result<()> { + measure_duration_millis!( + update_db_duration_milliseconds, + self.insert_codes_inner(l2_trace) + ) } - fn update_inner(&mut self, l2_trace: T) -> Result<()> { + fn insert_codes_inner(&mut self, l2_trace: T) -> Result<()> { cycle_tracker_start!("insert CodeDB"); for code in l2_trace.codes() { let hash = revm::primitives::keccak256(code); @@ -126,13 +119,6 @@ impl<'a, CodeDb: KVDatabase, ZkDb: KVDatabase + 'static> EvmDatabase<'a, CodeDb, .map_err(DatabaseError::code_db)?; } cycle_tracker_end!("insert CodeDB"); - - self.zktrie = cycle_track!( - ZkTrie::new_with_root(self.zktrie_db, NoCacheHasher, l2_trace.root_before(),), - "ZkTrie::new_with_root" - ) - .map_err(DatabaseError::zk_trie)?; - Ok(()) } } @@ -208,7 +194,9 @@ impl DatabaseRef for EvmDatabase ZkTrie::new_with_root(self.zktrie_db, NoCacheHasher, *storage_root) .inspect_err(|e| { - dev_warn!("storage trie associated with account({address}) not found: {e}") + let backtrace = std::backtrace::Backtrace::force_capture(); + dev_warn!("storage trie associated with account({address}) not found: {e}\n{backtrace}"); + }) .ok() }); diff --git a/crates/core/src/executor/builder.rs b/crates/core/src/executor/builder.rs index 076f147..99bfc2e 100644 --- a/crates/core/src/executor/builder.rs +++ b/crates/core/src/executor/builder.rs @@ -1,17 +1,17 @@ use crate::error::DatabaseError; use crate::{executor::hooks::ExecuteHooks, EvmDatabase, EvmExecutor, HardforkConfig}; use revm::db::CacheDB; +use sbv_primitives::alloy_primitives::ChainId; use sbv_primitives::zk_trie::db::kv::KVDatabase; use sbv_primitives::zk_trie::db::NodeDb; -use sbv_primitives::Block; +use sbv_primitives::B256; use std::fmt::{self, Debug}; -use sbv_primitives::alloy_primitives::ChainId; /// Builder for EVM executor. pub struct EvmExecutorBuilder<'a, H, C, CodeDb, ZkDb> { hardfork_config: H, chain_id: C, - code_db: CodeDb, + code_db: &'a mut CodeDb, zktrie_db: &'a mut NodeDb, } @@ -28,7 +28,7 @@ impl Debug for EvmExecutorBuilder<'_, H, C, Co impl<'a, CodeDb, ZkDb> EvmExecutorBuilder<'a, (), (), CodeDb, ZkDb> { /// Create a new builder. - pub fn new(code_db: CodeDb, zktrie_db: &'a mut NodeDb) -> Self { + pub fn new(code_db: &'a mut CodeDb, zktrie_db: &'a mut NodeDb) -> Self { Self { hardfork_config: (), chain_id: (), @@ -52,8 +52,21 @@ impl<'a, H, C, CodeDb, ZkDb> EvmExecutorBuilder<'a, H, C, CodeDb, ZkDb> { } } + /// Set chain id. + pub fn chain_id(self, chain_id: C1) -> EvmExecutorBuilder<'a, H, C1, CodeDb, ZkDb> { + EvmExecutorBuilder { + hardfork_config: self.hardfork_config, + chain_id, + code_db: self.code_db, + zktrie_db: self.zktrie_db, + } + } + /// Set code db. - pub fn code_db(self, code_db: CodeDb1) -> EvmExecutorBuilder<'a, H, C, CodeDb1, ZkDb> { + pub fn code_db( + self, + code_db: &'a mut CodeDb1, + ) -> EvmExecutorBuilder<'a, H, C, CodeDb1, ZkDb> { EvmExecutorBuilder { hardfork_config: self.hardfork_config, chain_id: self.chain_id, @@ -65,7 +78,7 @@ impl<'a, H, C, CodeDb, ZkDb> EvmExecutorBuilder<'a, H, C, CodeDb, ZkDb> { /// Set zktrie db. pub fn zktrie_db( self, - zktrie_db: &mut NodeDb, + zktrie_db: &'a mut NodeDb, ) -> EvmExecutorBuilder { EvmExecutorBuilder { hardfork_config: self.hardfork_config, @@ -80,21 +93,20 @@ impl<'a, CodeDb: KVDatabase, ZkDb: KVDatabase + 'static> EvmExecutorBuilder<'a, HardforkConfig, ChainId, CodeDb, ZkDb> { /// Initialize an EVM executor from a block trace as the initial state. - pub fn with_hooks<'h, T: Block, F: FnOnce(&mut ExecuteHooks<'h, CodeDb, ZkDb>)>( + pub fn with_hooks<'h, F: FnOnce(&mut ExecuteHooks<'h, CodeDb, ZkDb>)>( self, - l2_trace: &T, + root: B256, with_execute_hooks: F, ) -> Result, DatabaseError> { let mut execute_hooks = ExecuteHooks::new(); with_execute_hooks(&mut execute_hooks); - let block_number = l2_trace.number(); - let spec_id = self.hardfork_config.get_spec_id(block_number); - - dev_trace!("use spec id {:?}", spec_id); - let db = cycle_track!( - CacheDB::new(EvmDatabase::new(l2_trace, self.code_db, self.zktrie_db)?), + CacheDB::new(EvmDatabase::new_from_root( + root, + self.code_db, + self.zktrie_db + )?), "build ReadOnlyDB" ); @@ -107,10 +119,7 @@ impl<'a, CodeDb: KVDatabase, ZkDb: KVDatabase + 'static> } /// Initialize an EVM executor from a block trace as the initial state. - pub fn build<'e, T: Block>( - self, - l2_trace: &T, - ) -> Result, DatabaseError> { - self.with_hooks(l2_trace, |_| {}) + pub fn build<'e>(self, root: B256) -> Result, DatabaseError> { + self.with_hooks(root, |_| {}) } } diff --git a/crates/core/src/executor/mod.rs b/crates/core/src/executor/mod.rs index 03e4bc4..71e2d23 100644 --- a/crates/core/src/executor/mod.rs +++ b/crates/core/src/executor/mod.rs @@ -11,12 +11,9 @@ use revm::{ use sbv_primitives::{ zk_trie::{ db::kv::KVDatabase, - hash::{ - key_hasher::NoCacheHasher, - poseidon::{Poseidon, PoseidonError}, - }, + hash::{key_hasher::NoCacheHasher, poseidon::Poseidon}, scroll_types::Account, - trie::{ZkTrie, ZkTrieError}, + trie::ZkTrie, }, Block, Transaction, TxTrace, }; @@ -42,9 +39,9 @@ impl EvmExecutor<'_, '_, CodeDb, &self.db } - /// Update the DB - pub fn update_db(&mut self, l2_trace: &T) -> Result<(), DatabaseError> { - self.db.db.update(l2_trace) + /// Insert codes from trace into CodeDB + pub fn insert_codes(&mut self, l2_trace: &T) -> Result<(), DatabaseError> { + self.db.db.insert_codes(l2_trace) } /// Handle a block. @@ -90,8 +87,6 @@ impl EvmExecutor<'_, '_, CodeDb, dev_trace!("handle {idx}th tx"); - let caller = unsafe { tx.get_from_unchecked() }; - let tx = tx .try_build_typed_tx() .map_err(|e| VerificationError::InvalidSignature { @@ -102,7 +97,12 @@ impl EvmExecutor<'_, '_, CodeDb, dev_trace!("{tx:#?}"); let mut env = env.clone(); env.tx = TxEnv { - caller, + caller: tx.get_or_recover_signer().map_err(|e| { + VerificationError::InvalidSignature { + tx_hash: *tx.tx_hash(), + source: e, + } + })?, gas_limit: tx.gas_limit() as u64, gas_price: tx .effective_gas_price(l2_trace.base_fee_per_gas().unwrap_or_default().to()) @@ -173,14 +173,11 @@ impl EvmExecutor<'_, '_, CodeDb, pub fn commit_changes(&mut self) -> Result { measure_duration_millis!( commit_changes_duration_milliseconds, - cycle_track!( - self.commit_changes_inner().map_err(DatabaseError::zk_trie), - "commit_changes" - ) + cycle_track!(self.commit_changes_inner(), "commit_changes") ) } - fn commit_changes_inner(&mut self) -> Result> { + fn commit_changes_inner(&mut self) -> Result { let mut zktrie = ZkTrie::::new_with_root( self.db.db.zktrie_db, NoCacheHasher, @@ -203,7 +200,9 @@ impl EvmExecutor<'_, '_, CodeDb, continue; } if let Some(ref code) = info.code { - code_db + self.db + .db + .code_db .or_put(info.code_hash.as_slice(), code.bytecode().as_ref()) .unwrap(); } @@ -232,11 +231,9 @@ impl EvmExecutor<'_, '_, CodeDb, measure_duration_micros!( zktrie_update_duration_microseconds, cycle_track!( - storage_trie.update( - self.db.db.zktrie_db, - key.to_be_bytes::<32>(), - value - )?, + storage_trie + .update(self.db.db.zktrie_db, key.to_be_bytes::<32>(), value) + .map_err(DatabaseError::zk_trie)?, "Zktrie::update_store" ) ); @@ -245,7 +242,8 @@ impl EvmExecutor<'_, '_, CodeDb, zktrie_delete_duration_microseconds, cycle_track!( storage_trie - .delete(self.db.db.zktrie_db, key.to_be_bytes::<32>())?, + .delete(self.db.db.zktrie_db, key.to_be_bytes::<32>()) + .map_err(DatabaseError::zk_trie)?, "Zktrie::delete" ) ); @@ -257,7 +255,12 @@ impl EvmExecutor<'_, '_, CodeDb, measure_duration_micros!( zktrie_commit_duration_microseconds, - cycle_track!(storage_trie.commit(self.db.db.zktrie_db)?, "Zktrie::commit") + cycle_track!( + storage_trie + .commit(self.db.db.zktrie_db) + .map_err(DatabaseError::zk_trie)?, + "Zktrie::commit" + ) ); cycle_tracker_end!("update storage_tire"); @@ -306,13 +309,23 @@ impl EvmExecutor<'_, '_, CodeDb, measure_duration_micros!( zktrie_commit_duration_microseconds, - cycle_track!(zktrie.commit(self.db.db.zktrie_db)?, "Zktrie::commit") + cycle_track!( + zktrie + .commit(self.db.db.zktrie_db) + .map_err(DatabaseError::zk_trie)?, + "Zktrie::commit" + ) ); let root_after = *zktrie.root().unwrap_ref(); self.db.db.updated_committed_zktrie_root(root_after); + self.db.accounts.clear(); + self.db.contracts.clear(); + self.db.block_hashes.clear(); + self.db.logs.clear(); + Ok(B256::from(root_after)) } } diff --git a/crates/core/src/genesis.rs b/crates/core/src/genesis.rs index a1ef395..74f85fd 100644 --- a/crates/core/src/genesis.rs +++ b/crates/core/src/genesis.rs @@ -1,10 +1,11 @@ use crate::hardfork::{SCROLL_MAINNET_CHAIN_ID, SCROLL_TESTNET_CHAIN_ID}; use once_cell::sync::Lazy; use revm::primitives::{poseidon, KECCAK_EMPTY, POSEIDON_EMPTY}; +use sbv_primitives::zk_trie::db::NodeDb; use sbv_primitives::{ alloy_primitives::{keccak256, Bytes, ChainId, U64}, zk_trie::{ - db::KVDatabase, + db::kv::KVDatabase, hash::{key_hasher::KeyHasher, HashScheme}, scroll_types::Account, trie::{ZkTrie, ZkTrieError}, @@ -30,6 +31,7 @@ pub struct GenesisConfig { } impl GenesisConfig { + /// Create a new genesis configuration from the given chain ID. pub fn default_from_chain_id(chain_id: u64) -> Self { match chain_id { SCROLL_MAINNET_CHAIN_ID => Self::mainnet(), @@ -38,18 +40,21 @@ impl GenesisConfig { } } + /// Create a new mainnet genesis configuration. pub fn mainnet() -> Self { Self { config: Cow::Borrowed(&*SCROLL_MAINNET_GENESIS), } } + /// Create a new testnet genesis configuration. pub fn testnet() -> Self { Self { config: Cow::Borrowed(&*SCROLL_TESTNET_GENESIS), } } + /// Initialize the code database with the code of the accounts. pub fn init_code_db(&self, code_db: &mut Db) -> Result<(), Db::Error> { for acc in self.config.alloc.values() { if acc.code.is_empty() { @@ -65,23 +70,27 @@ impl GenesisConfig { Ok(()) } - pub fn init_zktrie + Clone>( + /// Initialize the zkTrie with the accounts. + pub fn init_zktrie + Clone>( &self, - trie: &mut ZkTrie, - ) -> Result<(), ZkTrieError> { + db: &mut NodeDb, + key_hasher: K, + ) -> Result, ZkTrieError> { + let mut zktrie = ZkTrie::::new(key_hasher.clone()); for (addr, acc) in self.config.alloc.iter() { let storage_root = if !acc.storage.is_empty() { - let mut storage_trie = ZkTrie::new(trie.db().clone(), trie.key_hasher().clone()); + let mut storage_trie = ZkTrie::::new(key_hasher.clone()); for (key, value) in acc.storage.iter() { - storage_trie.update(key.to_be_bytes::<32>(), value)?; + storage_trie.update(db, key.to_be_bytes::<32>(), value)?; } - storage_trie.commit()?; + storage_trie.commit(db)?; *storage_trie.root().unwrap_ref() } else { B256::ZERO }; - trie.update( + zktrie.update( + db, addr, Account { nonce: 0, @@ -101,9 +110,9 @@ impl GenesisConfig { }, )?; } - trie.commit()?; + zktrie.commit(db)?; - Ok(()) + Ok(zktrie) } } diff --git a/crates/primitives/src/types/mod.rs b/crates/primitives/src/types/mod.rs index 76e1a0a..53d714d 100644 --- a/crates/primitives/src/types/mod.rs +++ b/crates/primitives/src/types/mod.rs @@ -622,6 +622,8 @@ impl NodeProof for ArchivedArchivedNodeBytes { } impl Block for alloy::rpc::types::Block { + type Node = Bytes; + type Tx = alloy::rpc::types::Transaction; fn number(&self) -> u64 { @@ -688,7 +690,7 @@ impl Block for alloy::rpc::types::Block impl Iterator { + fn node_proofs(&self) -> impl Iterator { [].into_iter() } } diff --git a/crates/primitives/src/types/tx.rs b/crates/primitives/src/types/tx.rs index 292aac6..572fc29 100644 --- a/crates/primitives/src/types/tx.rs +++ b/crates/primitives/src/types/tx.rs @@ -1,4 +1,3 @@ -use crate::alloy_consensus::{SignableTransaction, TxLegacy}; use crate::TxTrace; use alloy::{ consensus::{Transaction, TxEnvelope, TxType}, @@ -256,11 +255,11 @@ impl TxTrace for ArchivedTransactionTrace { } fn chain_id(&self) -> Option { - let chain_id: ChainId = self.chain_id.to(); + let chain_id: U64 = self.chain_id.into(); if self.ty == 0 && self.v() < 35 { None } else { - Some(chain_id) + Some(chain_id.to()) } } @@ -343,6 +342,10 @@ impl TxTrace for alloy::rpc::types::Transaction { self.access_list.clone().unwrap_or_default() } + fn v(&self) -> u64 { + self.signature.unwrap().v.to() + } + fn signature(&self) -> Result { let sig = self.signature.unwrap(); Signature::from_rs_and_parity(sig.r, sig.s, sig.v.to::()) diff --git a/crates/stateful/Cargo.toml b/crates/stateful/Cargo.toml index aba12c9..235ebca 100644 --- a/crates/stateful/Cargo.toml +++ b/crates/stateful/Cargo.toml @@ -13,6 +13,7 @@ repository.workspace = true alloy = { workspace = true, features = ["provider-http", "transport-http"] } anyhow.workspace = true clap = { workspace = true, features = ["derive"] } +revm.workspace = true sled.workspace = true serde_json.workspace = true tokio = { workspace = true, features = ["fs", "io-util", "macros", "rt-multi-thread", "sync", "time"] } diff --git a/crates/stateful/src/main.rs b/crates/stateful/src/main.rs index a486a7a..5935e0c 100644 --- a/crates/stateful/src/main.rs +++ b/crates/stateful/src/main.rs @@ -1,23 +1,23 @@ +//! This is a simple example of how to use the stateful executor to verify the state transition of the L2 chain. #[macro_use] extern crate sbv; -use alloy::primitives::address; use alloy::providers::{Provider, ProviderBuilder}; use alloy::rpc::types::BlockTransactions; use clap::Parser; +use revm::primitives::{BlockEnv, TxEnv}; use sbv::{ core::{EvmExecutorBuilder, GenesisConfig, HardforkConfig}, - primitives::zk_trie::{ - db::SledDb, - hash::{key_hasher::NoCacheHasher, poseidon::Poseidon}, - trie::ZkTrie, - }, + primitives::zk_trie::hash::{key_hasher::NoCacheHasher, poseidon::Poseidon}, }; use std::path::PathBuf; use url::Url; -use sbv::primitives::types::BlockTrace; -use sbv::primitives::Block; +use sbv::core::VerificationError; +use sbv::primitives::types::{BlockTrace, LegacyStorageTrace}; +use sbv::primitives::zk_trie::db::kv::{HashMapDb, SledDb}; +use sbv::primitives::zk_trie::db::NodeDb; +use sbv::primitives::{Block, Transaction, TxTrace, U256}; #[cfg(feature = "dev")] use tracing_subscriber::EnvFilter; @@ -45,9 +45,7 @@ async fn main() -> anyhow::Result<()> { let db = sled::open(cmd.db)?; let mut code_db = SledDb::new(true, db.open_tree("code_db")?); - let zktrie_db = SledDb::new(true, db.open_tree("zk_trie")?); - - let mut zktrie = ZkTrie::::new(zktrie_db.clone(), NoCacheHasher); + let mut zktrie_db = NodeDb::new(SledDb::new(true, db.open_tree("zk_trie")?)); let provider = ProviderBuilder::new().on_http(cmd.url); let chain_id = provider.get_chain_id().await?; @@ -55,48 +53,139 @@ async fn main() -> anyhow::Result<()> { let genesis_config = GenesisConfig::default_from_chain_id(chain_id); genesis_config.init_code_db(&mut code_db)?; - genesis_config.init_zktrie(&mut zktrie)?; + let mut storage_root = { + let zktrie = genesis_config.init_zktrie::(&mut zktrie_db, NoCacheHasher)?; + *zktrie.root().unwrap_ref() + }; for i in 1..100000u64 { + let mut evm = EvmExecutorBuilder::new(&mut code_db, &mut zktrie_db) + .chain_id(chain_id) + .hardfork_config(hardfork_config) + .build(storage_root)?; + let l2_trace = provider - .raw_request::<_, BlockTrace>( + .raw_request::<_, BlockTrace>( "scroll_getBlockTraceByNumberOrHash".into(), - ( - format!("0x{:x}", i), - serde_json::json!({ - "ExcludeExecutionResults": true, - "ExcludeTxStorageTraces": true, - "StorageProofFormat": "flatten", - "FlattenProofsOnly": true - }), - ), + (format!("0x{:x}", i),), ) .await?; - - let block = provider.get_block_by_number(i.into(), true).await?.unwrap(); - // if let BlockTransactions::Full(ref mut txs) = block.transactions { - // for tx in txs.iter_mut() { - // tx.chain_id = Some(chain_id); - // } - // } - - let mut evm = EvmExecutorBuilder::new() - .chain_id(chain_id) - .hardfork_config(hardfork_config) - .evm_db_from_root( - *zktrie.root().unwrap_ref(), - code_db.clone(), - zktrie_db.clone(), - )? - .build(); - - evm.handle_block(&block)?; - let new_root = evm.commit_changes(code_db.clone(), zktrie_db.clone())?; - assert_eq!(new_root, l2_trace.root_after()); - - zktrie.gc()?; - - zktrie = ZkTrie::new_with_root(zktrie_db.clone(), NoCacheHasher, new_root)?; + let root_before = l2_trace.root_before(); + let root_after = l2_trace.root_after(); + dev_debug!( + "block#{i} root_before={} current_storage_root={}", + root_before, + storage_root + ); + assert_eq!(l2_trace.root_before(), storage_root); + + // check stateless is ok + { + let mut code_db = HashMapDb::default(); + let mut zktrie_db = NodeDb::new(HashMapDb::default()); + l2_trace.build_zktrie_db(&mut zktrie_db).unwrap(); + let mut executor = EvmExecutorBuilder::new(&mut code_db, &mut zktrie_db) + .hardfork_config(hardfork_config) + .chain_id(chain_id) + .build(root_before) + .unwrap(); + executor.insert_codes(&l2_trace).unwrap(); + executor.handle_block(&l2_trace).unwrap(); + let revm_root_after = executor.commit_changes().unwrap(); + assert_eq!(root_after, revm_root_after); + } + + let mut block = provider.get_block_by_number(i.into(), true).await?.unwrap(); + block.header.miner = l2_trace.coinbase(); + if let BlockTransactions::Full(ref mut txs) = block.transactions { + for tx in txs.iter_mut() { + if tx.transaction_type.unwrap_or(0) == 0 + && tx.signature.unwrap().v.to::() >= 35 + { + tx.chain_id = Some(chain_id); + } + } + } + // sanity check + { + let trace_block_env = BlockEnv { + number: U256::from_limbs([l2_trace.number(), 0, 0, 0]), + coinbase: l2_trace.coinbase(), + timestamp: l2_trace.timestamp(), + gas_limit: l2_trace.gas_limit(), + basefee: l2_trace.base_fee_per_gas().unwrap_or_default(), + difficulty: l2_trace.difficulty(), + prevrandao: l2_trace.prevrandao(), + blob_excess_gas_and_price: None, + }; + let block_block_env = BlockEnv { + number: U256::from_limbs([block.number(), 0, 0, 0]), + coinbase: block.coinbase(), + timestamp: block.timestamp(), + gas_limit: block.gas_limit(), + basefee: block.base_fee_per_gas().unwrap_or_default(), + difficulty: block.difficulty(), + prevrandao: block.prevrandao(), + blob_excess_gas_and_price: None, + }; + assert_eq!(trace_block_env, block_block_env, "block_env mismatch"); + for (i, (trace_tx, block_tx)) in l2_trace + .transactions + .iter() + .zip(block.transactions.as_transactions().unwrap().iter()) + .enumerate() + { + dev_debug!( + "#{i}: is_l1_tx={:?} {:?}", + trace_tx.is_l1_tx(), + block_tx.is_l1_tx() + ); + let trace_tx = trace_tx.try_build_typed_tx().unwrap(); + let block_tx = block_tx.try_build_typed_tx().unwrap(); + assert_eq!(trace_tx, block_tx, "tx mismatch {block_tx:?}"); + let trace_tx_signer = trace_tx.get_or_recover_signer().unwrap(); + let block_tx_signer = block_tx.get_or_recover_signer().unwrap(); + assert_eq!(trace_tx_signer, block_tx_signer, "tx signer mismatch"); + let trace_gas_limit = trace_tx.gas_limit(); + let block_gas_limit = block_tx.gas_limit(); + assert_eq!(trace_gas_limit, block_gas_limit, "tx gas limit mismatch"); + let trace_gas_price = trace_tx + .effective_gas_price(l2_trace.base_fee_per_gas().unwrap_or_default().to()) + .map(U256::from); + let block_gas_price = block_tx + .effective_gas_price(l2_trace.base_fee_per_gas().unwrap_or_default().to()) + .map(U256::from); + assert_eq!(trace_gas_price, block_gas_price, "tx gas price mismatch"); + assert_eq!(trace_tx.to(), block_tx.to(), "tx transact_to mismatch"); + assert_eq!(trace_tx.value(), block_tx.value(), "tx value mismatch"); + assert_eq!(trace_tx.data(), block_tx.data(), "tx data mismatch"); + assert_eq!( + trace_tx.is_l1_msg(), + block_tx.is_l1_msg(), + "tx is_l1_msg mismatch" + ); + assert_eq!(trace_tx.nonce(), block_tx.nonce(), "tx nonce mismatch"); + assert_eq!( + trace_tx.chain_id(), + block_tx.chain_id(), + "tx chain_id mismatch" + ); + assert_eq!( + trace_tx.access_list(), + block_tx.access_list(), + "tx access_list mismatch" + ); + assert_eq!( + trace_tx.max_priority_fee_per_gas(), + block_tx.max_priority_fee_per_gas(), + "tx max_priority_fee_per_gas mismatch" + ); + } + } + + evm.handle_block(&l2_trace)?; + storage_root = evm.commit_changes()?; + assert_eq!(storage_root, root_after); } Ok(())