diff --git a/.cargo/config.toml b/.cargo/config.toml index 9430f38d1d0..79a872fbaf5 100644 --- a/.cargo/config.toml +++ b/.cargo/config.toml @@ -14,3 +14,4 @@ rustflags = [ # in line with Linux (whereas default for Windows is 1MB) "-Clink-arg=/STACK:10000000", ] + diff --git a/Cargo.lock b/Cargo.lock index bee3c24489a..e50551f2393 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -62,7 +62,7 @@ dependencies = [ "getrandom 0.2.15", "once_cell", "version_check", - "zerocopy", + "zerocopy 0.7.35", ] [[package]] @@ -76,9 +76,9 @@ dependencies = [ [[package]] name = "aligned-vec" -version = "0.6.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e0966165eaf052580bd70eb1b32cb3d6245774c0104d1b2793e9650bf83b52a" +checksum = "af15ccceeacb9304119d97925de463bc97ae3555ee8dc8056f67b119f66e5934" dependencies = [ "equator", ] @@ -113,20 +113,16 @@ dependencies = [ "alloy-consensus", "alloy-core", "alloy-eips", - "alloy-genesis", "alloy-network", - "alloy-provider", - "alloy-rpc-client", "alloy-rpc-types", "alloy-serde", - "alloy-transport-http", ] [[package]] name = "alloy-chains" -version = "0.1.55" +version = "0.1.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e39f295f876b61a1222d937e1dd31f965e4a1acc3bba98e448dd7e84b1a4566" +checksum = "963fc7ac17f25d92c237448632330eb87b39ba8aa0209d4b517069a05b57db62" dependencies = [ "alloy-primitives", "alloy-rlp", @@ -134,7 +130,7 @@ dependencies = [ "num_enum", "proptest", "serde", - "strum", + "strum 0.27.1", ] [[package]] @@ -151,7 +147,7 @@ dependencies = [ "arbitrary", "auto_impl", "c-kzg", - "derive_more", + "derive_more 1.0.0", "k256", "rand 0.8.5", "serde", @@ -189,34 +185,31 @@ dependencies = [ "alloy-transport", "futures", "futures-util", - "thiserror 2.0.10", + "thiserror 2.0.12", ] [[package]] name = "alloy-core" -version = "0.8.18" +version = "0.8.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0713007d14d88a6edb8e248cddab783b698dbb954a28b8eee4bab21cfb7e578" +checksum = "ca1380cc3c81b83d5234865779494970c83b5893b423c59cdd68c3cd1ed0b671" dependencies = [ - "alloy-dyn-abi", - "alloy-json-abi", "alloy-primitives", "alloy-rlp", - "alloy-sol-types", ] [[package]] name = "alloy-dyn-abi" -version = "0.8.18" +version = "0.8.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44e3b98c37b3218924cd1d2a8570666b89662be54e5b182643855f783ea68b33" +checksum = "7078bef2bc353c1d1a97b44981d0186198be320038fbfbb0b37d1dd822a555d3" dependencies = [ "alloy-json-abi", "alloy-primitives", "alloy-sol-type-parser", "alloy-sol-types", "const-hex", - "derive_more", + "derive_more 2.0.1", "itoa", "serde", "serde_json", @@ -235,7 +228,7 @@ dependencies = [ "crc", "rand 0.8.5", "serde", - "thiserror 2.0.10", + "thiserror 2.0.12", ] [[package]] @@ -253,18 +246,18 @@ dependencies = [ [[package]] name = "alloy-eip7702" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cabf647eb4650c91a9d38cb6f972bb320009e7e9d61765fb688a86f1563b33e8" +checksum = "9b15b13d38b366d01e818fe8e710d4d702ef7499eacd44926a06171dd9585d0c" dependencies = [ "alloy-primitives", "alloy-rlp", "arbitrary", - "derive_more", "k256", "rand 0.8.5", "serde", "serde_with", + "thiserror 2.0.12", ] [[package]] @@ -280,7 +273,7 @@ dependencies = [ "alloy-serde", "arbitrary", "c-kzg", - "derive_more", + "derive_more 1.0.0", "ethereum_ssz", "ethereum_ssz_derive", "once_cell", @@ -303,9 +296,9 @@ dependencies = [ [[package]] name = "alloy-json-abi" -version = "0.8.18" +version = "0.8.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "731ea743b3d843bc657e120fb1d1e9cc94f5dab8107e35a82125a63e6420a102" +checksum = "ec80745c33797e8baf547a8cfeb850e60d837fe9b9e67b3f579c1fcd26f527e9" dependencies = [ "alloy-primitives", "alloy-sol-type-parser", @@ -323,7 +316,7 @@ dependencies = [ "alloy-sol-types", "serde", "serde_json", - "thiserror 2.0.10", + "thiserror 2.0.12", "tracing", ] @@ -349,7 +342,7 @@ dependencies = [ "futures-utils-wasm", "serde", "serde_json", - "thiserror 2.0.10", + "thiserror 2.0.12", ] [[package]] @@ -377,16 +370,16 @@ dependencies = [ "rand 0.8.5", "serde_json", "tempfile", - "thiserror 2.0.10", + "thiserror 2.0.12", "tracing", "url", ] [[package]] name = "alloy-primitives" -version = "0.8.18" +version = "0.8.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "788bb18e8f61d5d9340b52143f27771daf7e1dccbaf2741621d2493f9debf52e" +checksum = "eacedba97e65cdc7ab592f2b22ef5d3ab8d60b2056bc3a6e6363577e8270ec6f" dependencies = [ "alloy-rlp", "arbitrary", @@ -394,11 +387,11 @@ dependencies = [ "cfg-if", "const-hex", "derive_arbitrary", - "derive_more", + "derive_more 2.0.1", "foldhash", "getrandom 0.2.15", "hashbrown 0.15.2", - "indexmap 2.7.0", + "indexmap 2.8.0", "itoa", "k256", "keccak-asm", @@ -407,7 +400,7 @@ dependencies = [ "proptest-derive", "rand 0.8.5", "ruint", - "rustc-hash 2.1.0", + "rustc-hash 2.1.1", "serde", "sha3", "tiny-keccak", @@ -447,7 +440,7 @@ dependencies = [ "schnellru", "serde", "serde_json", - "thiserror 2.0.10", + "thiserror 2.0.12", "tokio", "tracing", "url", @@ -475,9 +468,9 @@ dependencies = [ [[package]] name = "alloy-rlp" -version = "0.3.10" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f542548a609dca89fcd72b3b9f355928cf844d4363c5eed9c5273a3dd225e097" +checksum = "3d6c1d995bff8d011f7cd6c81820d51825e6e06d6db73914c1630ecf544d83d6" dependencies = [ "alloy-rlp-derive", "arrayvec 0.7.6", @@ -486,13 +479,13 @@ dependencies = [ [[package]] name = "alloy-rlp-derive" -version = "0.3.10" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a833d97bf8a5f0f878daf2c8451fff7de7f9de38baa5a45d936ec718d81255a" +checksum = "a40e1ef334153322fd878d07e86af7a529bcb86b2439525920a88eba87bcf943" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] @@ -581,7 +574,7 @@ dependencies = [ "ethereum_ssz_derive", "serde", "serde_with", - "thiserror 2.0.10", + "thiserror 2.0.12", ] [[package]] @@ -605,14 +598,14 @@ dependencies = [ "alloy-primitives", "alloy-rlp", "alloy-serde", - "derive_more", + "derive_more 1.0.0", "ethereum_ssz", "ethereum_ssz_derive", "jsonrpsee-types", "jsonwebtoken", "rand 0.8.5", "serde", - "strum", + "strum 0.26.3", ] [[package]] @@ -634,7 +627,7 @@ dependencies = [ "jsonrpsee-types", "serde", "serde_json", - "thiserror 2.0.10", + "thiserror 2.0.12", ] [[package]] @@ -662,7 +655,7 @@ dependencies = [ "alloy-serde", "serde", "serde_json", - "thiserror 2.0.10", + "thiserror 2.0.12", ] [[package]] @@ -700,7 +693,7 @@ dependencies = [ "auto_impl", "elliptic-curve", "k256", - "thiserror 2.0.10", + "thiserror 2.0.12", ] [[package]] @@ -718,61 +711,62 @@ dependencies = [ "coins-bip39", "k256", "rand 0.8.5", - "thiserror 2.0.10", + "thiserror 2.0.12", ] [[package]] name = "alloy-sol-macro" -version = "0.8.18" +version = "0.8.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a07b74d48661ab2e4b50bb5950d74dbff5e61dd8ed03bb822281b706d54ebacb" +checksum = "3637022e781bc73a9e300689cd91105a0e6be00391dd4e2110a71cc7e9f20a94" dependencies = [ "alloy-sol-macro-expander", "alloy-sol-macro-input", "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] name = "alloy-sol-macro-expander" -version = "0.8.18" +version = "0.8.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19cc9c7f20b90f9be1a8f71a3d8e283a43745137b0837b1a1cb13159d37cad72" +checksum = "3b9bd22d0bba90e40f40c625c33d39afb7d62b22192476a2ce1dcf8409dce880" dependencies = [ "alloy-sol-macro-input", "const-hex", "heck", - "indexmap 2.7.0", + "indexmap 2.8.0", "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", "syn-solidity", "tiny-keccak", ] [[package]] name = "alloy-sol-macro-input" -version = "0.8.18" +version = "0.8.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "713b7e6dfe1cb2f55c80fb05fd22ed085a1b4e48217611365ed0ae598a74c6ac" +checksum = "05ae4646e8123ec2fd10f9c22e361ffe4365c42811431829c2eabae528546bcc" dependencies = [ "const-hex", "dunce", "heck", + "macro-string", "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", "syn-solidity", ] [[package]] name = "alloy-sol-type-parser" -version = "0.8.18" +version = "0.8.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1eda2711ab2e1fb517fc6e2ffa9728c9a232e296d16810810e6957b781a1b8bc" +checksum = "488a747fdcefeec5c1ed5aa9e08becd775106777fdeae2a35730729fc8a95910" dependencies = [ "serde", "winnow", @@ -780,9 +774,9 @@ dependencies = [ [[package]] name = "alloy-sol-types" -version = "0.8.18" +version = "0.8.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3b478bc9c0c4737a04cd976accde4df7eba0bdc0d90ad6ff43d58bc93cf79c1" +checksum = "767957235807b021126dca1598ac3ef477007eace07961607dc5f490550909c7" dependencies = [ "alloy-json-abi", "alloy-primitives", @@ -803,7 +797,7 @@ dependencies = [ "futures-utils-wasm", "serde", "serde_json", - "thiserror 2.0.10", + "thiserror 2.0.12", "tokio", "tower 0.5.2", "tracing", @@ -865,16 +859,16 @@ dependencies = [ [[package]] name = "alloy-trie" -version = "0.7.8" +version = "0.7.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6917c79e837aa7b77b7a6dae9f89cbe15313ac161c4d3cfaf8909ef21f3d22d8" +checksum = "d95a94854e420f07e962f7807485856cde359ab99ab6413883e15235ad996e8b" dependencies = [ "alloy-primitives", "alloy-rlp", "arbitrary", "arrayvec 0.7.6", "derive_arbitrary", - "derive_more", + "derive_more 1.0.0", "nybbles", "proptest", "proptest-derive", @@ -945,19 +939,20 @@ dependencies = [ [[package]] name = "anstyle-wincon" -version = "3.0.6" +version = "3.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2109dbce0e72be3ec00bed26e6a7479ca384ad226efdd66db8fa2e3a38c83125" +checksum = "ca3534e77181a9cc07539ad51f2141fe32f6c3ffd4df76db8ad92346b003ae4e" dependencies = [ "anstyle", + "once_cell", "windows-sys 0.59.0", ] [[package]] name = "anyhow" -version = "1.0.95" +version = "1.0.97" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34ac096ce696dc2fcabef30516bb13c0a68a11d30131d3df6f04711467681b04" +checksum = "dcfed56ad506cb2c684a14971b8861fdc3baaaae314b9e5f9bb532cbe3ba7a4f" [[package]] name = "aquamarine" @@ -970,7 +965,7 @@ dependencies = [ "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] @@ -1170,9 +1165,9 @@ dependencies = [ [[package]] name = "async-compression" -version = "0.4.18" +version = "0.4.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df895a515f70646414f4b45c0b79082783b80552b373a68283012928df56f522" +checksum = "310c9bcae737a48ef5cdee3174184e6d548b292739ede61a1f955ef76a738861" dependencies = [ "brotli", "flate2", @@ -1203,7 +1198,7 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] @@ -1239,18 +1234,18 @@ checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] name = "async-trait" -version = "0.1.85" +version = "0.1.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f934833b4b7233644e5848f235df3f57ed8c80f1528a26c3dfa13d2147fa056" +checksum = "d556ec1359574147ec0c4fc5eb525f3f23263a592b1a9c07e0a75b427de55c97" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] @@ -1281,9 +1276,9 @@ checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] name = "aurora-engine-modexp" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0aef7712851e524f35fbbb74fa6599c5cd8692056a1c36f9ca0d2001b670e7e5" +checksum = "518bc5745a6264b5fd7b09dffb9667e400ee9e2bbe18555fac75e1fe9afa0df9" dependencies = [ "hex", "num", @@ -1291,13 +1286,13 @@ dependencies = [ [[package]] name = "auto_impl" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c87f3f15e7794432337fc718554eaa4dc8f04c9677a950ffe366f20a162ae42" +checksum = "e12882f59de5360c748c4cbf569a042d5fb0eb515f7bea9c1f470b47f6ffbd73" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] @@ -1319,9 +1314,9 @@ dependencies = [ [[package]] name = "backon" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba5289ec98f68f28dd809fd601059e6aa908bb8f6108620930828283d4ee23d7" +checksum = "49fef586913a57ff189f25c9b3d034356a5bf6b3fa9a7f067588fe1698ba1f5d" dependencies = [ "fastrand 2.3.0", "tokio", @@ -1374,9 +1369,9 @@ checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] name = "base64ct" -version = "1.6.0" +version = "1.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" +checksum = "89e25b6adfb930f02d1981565a6e5d9c547ac15a96606256d3b59040e5cd4ca3" [[package]] name = "bech32" @@ -1405,7 +1400,7 @@ version = "0.70.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f49d8fed880d473ea71efb9bf597651e77201bdd4893efe54c9e5d65ae04ce6f" dependencies = [ - "bitflags 2.7.0", + "bitflags 2.9.0", "cexpr", "clang-sys", "itertools 0.13.0", @@ -1414,7 +1409,7 @@ dependencies = [ "regex", "rustc-hash 1.1.0", "shlex", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] @@ -1442,18 +1437,61 @@ dependencies = [ [[package]] name = "bit-set" -version = "0.5.3" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" +checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" dependencies = [ "bit-vec", ] [[package]] name = "bit-vec" -version = "0.6.3" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" +checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" + +[[package]] +name = "bitfinity-block-confirmation" +version = "1.1.5" +dependencies = [ + "alloy-consensus", + "alloy-genesis", + "alloy-network", + "alloy-primitives", + "alloy-signer", + "alloy-signer-local", + "anyhow", + "async-trait", + "candid", + "did", + "ethereum-json-rpc-client", + "evm-canister-client", + "eyre", + "itertools 0.13.0", + "jsonrpc-core", + "reth-chain-state", + "reth-chainspec", + "reth-db", + "reth-db-common", + "reth-engine-tree", + "reth-ethereum-engine-primitives", + "reth-evm", + "reth-evm-ethereum", + "reth-node-types", + "reth-primitives", + "reth-primitives-traits", + "reth-provider", + "reth-revm", + "reth-rpc-eth-types", + "reth-testing-utils", + "reth-trie", + "reth-trie-db", + "serde", + "serde_json", + "tempfile", + "tokio", + "tracing", +] [[package]] name = "bitflags" @@ -1463,9 +1501,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.7.0" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1be3f42a67d6d345ecd59f675f3f012d6974981560836e938c22b424b85ce1be" +checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd" dependencies = [ "arbitrary", "serde", @@ -1513,9 +1551,9 @@ dependencies = [ [[package]] name = "blst" -version = "0.3.13" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4378725facc195f1a538864863f6de233b500a8862747e7f165078a419d5e874" +checksum = "47c79a94619fade3c0b887670333513a67ac28a6a7e653eb260bf0d4103db38d" dependencies = [ "cc", "glob", @@ -1529,13 +1567,13 @@ version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2c340fe0f0b267787095cbe35240c6786ff19da63ec7b69367ba338eace8169b" dependencies = [ - "bitflags 2.7.0", + "bitflags 2.9.0", "boa_interner", "boa_macros", "boa_string", - "indexmap 2.7.0", + "indexmap 2.8.0", "num-bigint", - "rustc-hash 2.1.0", + "rustc-hash 2.1.1", ] [[package]] @@ -1545,7 +1583,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f620c3f06f51e65c0504ddf04978be1b814ac6586f0b45f6019801ab5efd37f9" dependencies = [ "arrayvec 0.7.6", - "bitflags 2.7.0", + "bitflags 2.9.0", "boa_ast", "boa_gc", "boa_interner", @@ -1559,7 +1597,7 @@ dependencies = [ "fast-float2", "hashbrown 0.15.2", "icu_normalizer", - "indexmap 2.7.0", + "indexmap 2.8.0", "intrusive-collections", "itertools 0.13.0", "num-bigint", @@ -1571,7 +1609,7 @@ dependencies = [ "portable-atomic", "rand 0.8.5", "regress", - "rustc-hash 2.1.0", + "rustc-hash 2.1.1", "ryu-js", "serde", "serde_json", @@ -1579,7 +1617,7 @@ dependencies = [ "static_assertions", "tap", "thin-vec", - "thiserror 2.0.10", + "thiserror 2.0.12", "time", ] @@ -1605,10 +1643,10 @@ dependencies = [ "boa_gc", "boa_macros", "hashbrown 0.15.2", - "indexmap 2.7.0", + "indexmap 2.8.0", "once_cell", "phf", - "rustc-hash 2.1.0", + "rustc-hash 2.1.1", "static_assertions", ] @@ -1620,7 +1658,7 @@ checksum = "9fd3f870829131332587f607a7ff909f1af5fc523fd1b192db55fbbdf52e8d3c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", "synstructure", ] @@ -1630,7 +1668,7 @@ version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9cc142dac798cdc6e2dbccfddeb50f36d2523bb977a976e19bdb3ae19b740804" dependencies = [ - "bitflags 2.7.0", + "bitflags 2.9.0", "boa_ast", "boa_interner", "boa_macros", @@ -1640,7 +1678,7 @@ dependencies = [ "num-bigint", "num-traits", "regress", - "rustc-hash 2.1.0", + "rustc-hash 2.1.1", ] [[package]] @@ -1657,7 +1695,7 @@ checksum = "7debc13fbf7997bf38bf8e9b20f1ad5e2a7d27a900e1f6039fe244ce30f589b5" dependencies = [ "fast-float2", "paste", - "rustc-hash 2.1.0", + "rustc-hash 2.1.1", "sptr", "static_assertions", ] @@ -1684,9 +1722,9 @@ dependencies = [ [[package]] name = "brotli-decompressor" -version = "4.0.1" +version = "4.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a45bd2e4095a8b518033b128020dd4a55aab1c0a381ba4404a472630f4bc362" +checksum = "74fa05ad7d803d413eb8380983b092cbbaf9a85f151b871360e7b00cd7060b37" dependencies = [ "alloc-no-stdlib", "alloc-stdlib", @@ -1715,21 +1753,21 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.16.0" +version = "3.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" +checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" [[package]] name = "byte-slice-cast" -version = "1.2.2" +version = "1.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3ac9f8b63eca6fd385229b3675f6cc0dc5c8a5c8a54a59d4f52ffd670d87b0c" +checksum = "7575182f7272186991736b70173b0ea045398f984bf5ebbb3804736ce1330c9d" [[package]] name = "bytemuck" -version = "1.21.0" +version = "1.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef657dfab802224e671f5818e9a4935f9b1957ed18e58292690cc39e7a4092a3" +checksum = "b6b1fc10dbac614ebc03540c9dbd60e83887fda27794998c6528f1782047d540" dependencies = [ "bytemuck_derive", ] @@ -1742,7 +1780,7 @@ checksum = "3fa76293b4f7bb636ab88fd78228235b5248b4d05cc589aed610f954af5d7c7a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] @@ -1753,9 +1791,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.9.0" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "325918d6fe32f23b19878fe4b34794ae41fc19ddbe53b10571a4874d44ffd39b" +checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" dependencies = [ "serde", ] @@ -1812,7 +1850,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] @@ -1832,9 +1870,9 @@ dependencies = [ [[package]] name = "candid" -version = "0.10.11" +version = "0.10.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d04aa85a9ba2542bded33d1eff0ffb17cb98b1be8117e0a25e1ad8c62bedc881" +checksum = "a253bab4a9be502c82332b60cbeee6202ad0692834efeec95fae9f29db33d692" dependencies = [ "anyhow", "binread", @@ -1862,7 +1900,7 @@ dependencies = [ "lazy_static", "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] @@ -1882,7 +1920,7 @@ checksum = "2d886547e41f740c616ae73108f6eb70afe6d940c7bc697cb30f13daec073037" dependencies = [ "camino", "cargo-platform", - "semver 1.0.24", + "semver 1.0.26", "serde", "serde_json", "thiserror 1.0.69", @@ -1911,9 +1949,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.7" +version = "1.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a012a0df96dd6d06ba9a1b29d6402d1a5d77c6befd2566afdc26e10603dc93d7" +checksum = "be714c154be609ec7f5dad223a33bf1482fff90472de28f7362806e6d4832b8c" dependencies = [ "jobserver", "libc", @@ -1949,9 +1987,9 @@ checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" [[package]] name = "chrono" -version = "0.4.39" +version = "0.4.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e36cc9d416881d2e24f9a963be5fb1cd90966419ac844274161d10488b3e825" +checksum = "1a7964611d71df112cb1730f2ee67324fcf4d0fc6606acbbe9bfe06df124637c" dependencies = [ "android-tzdata", "iana-time-zone", @@ -1959,14 +1997,14 @@ dependencies = [ "num-traits", "serde", "wasm-bindgen", - "windows-targets 0.52.6", + "windows-link", ] [[package]] name = "chrono-tz" -version = "0.10.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd6dd8046d00723a59a2f8c5f295c515b9bb9a331ee4f8f3d4dd49e428acd3b6" +checksum = "9c6ac4f2c0bf0f44e9161aec9675e1050aa4a530663c4a9e37e108fa948bca9f" dependencies = [ "chrono", "chrono-tz-build", @@ -2007,7 +2045,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57663b653d948a338bfb3eeba9bb2fd5fcfaecb9e199e87e1eda4d9e8b240fd9" dependencies = [ "ciborium-io", - "half 2.4.1", + "half 2.5.0", ] [[package]] @@ -2033,9 +2071,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.26" +version = "4.5.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8eb5e908ef3a6efbe1ed62520fb7287959888c88485abe072543190ecc66783" +checksum = "6088f3ae8c3608d19260cd7445411865a485688711b78b5be70d78cd96136f83" dependencies = [ "clap_builder", "clap_derive", @@ -2043,9 +2081,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.26" +version = "4.5.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96b01801b5fc6a0a232407abc821660c9c6d25a1cafc0d4f85f29fb8d9afc121" +checksum = "22a7ef7f676155edfb82daa97f99441f3ebf4a58d5e32f295a56259f1b6facc8" dependencies = [ "anstream", "anstyle", @@ -2055,14 +2093,14 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.24" +version = "4.5.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54b755194d6389280185988721fffba69495eed5ee9feeee9a599b53db80318c" +checksum = "09176aae279615badda0765c0c0b3f6ed53f4709118af73cf4655d85d1530cd7" dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] @@ -2073,28 +2111,59 @@ checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" [[package]] name = "codspeed" -version = "2.7.2" +version = "2.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "450a0e9df9df1c154156f4344f99d8f6f6e69d0fc4de96ef6e2e68b2ec3bce97" +checksum = "60e744216bfa9add3b1f2505587cbbb837923232ed10963609f4a6e3cbd99c3e" dependencies = [ "colored", "libc", + "serde", "serde_json", + "uuid", ] [[package]] name = "codspeed-criterion-compat" -version = "2.7.2" +version = "2.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8eb1a6cb9c20e177fde58cdef97c1c7c9264eb1424fe45c4fccedc2fb078a569" +checksum = "d5926ca63222a35b9a2299adcaafecf596efe20a9a2048e4a81cb2fc3463b4a8" dependencies = [ "codspeed", + "codspeed-criterion-compat-walltime", "colored", - "criterion", "futures", "tokio", ] +[[package]] +name = "codspeed-criterion-compat-walltime" +version = "2.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbae4da05076cbc673e242400ac8f4353bdb686e48020edc6e36a5c36ae0878e" +dependencies = [ + "anes", + "cast", + "ciborium", + "clap", + "codspeed", + "criterion-plot", + "futures", + "is-terminal", + "itertools 0.10.5", + "num-traits", + "once_cell", + "oorandom", + "plotters", + "rayon", + "regex", + "serde", + "serde_derive", + "serde_json", + "tinytemplate", + "tokio", + "walkdir", +] + [[package]] name = "coins-bip32" version = "0.12.0" @@ -2174,13 +2243,12 @@ dependencies = [ [[package]] name = "comfy-table" -version = "7.1.3" +version = "7.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24f165e7b643266ea80cb858aed492ad9280e3e05ce24d4a99d7d7b889b6a4d9" +checksum = "4a65ebfec4fb190b6f90e944a817d60499ee0744e582530e2c9900a22e591d9a" dependencies = [ "crossterm", - "strum", - "strum_macros", + "unicode-segmentation", "unicode-width 0.2.0", ] @@ -2218,9 +2286,9 @@ dependencies = [ [[package]] name = "console" -version = "0.15.10" +version = "0.15.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea3c6ecd8059b57859df5c69830340ed3c41d30e3da0c1cbed90a96ac853041b" +checksum = "054ccb5b10f9f2cbf51eb355ca1d05c2d279ce1804688d0db74b4733a5aeafd8" dependencies = [ "encode_unicode", "libc", @@ -2247,6 +2315,26 @@ version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" +[[package]] +name = "const_format" +version = "0.2.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "126f97965c8ad46d6d9163268ff28432e8f6a1196a55578867832e3049df63dd" +dependencies = [ + "const_format_proc_macros", +] + +[[package]] +name = "const_format_proc_macros" +version = "0.2.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d57c2eccfb16dbac1f4e61e206105db5820c9d26c3c472bc17c774259ef7744" +dependencies = [ + "proc-macro2", + "quote", + "unicode-xid", +] + [[package]] name = "convert_case" version = "0.6.0" @@ -2302,9 +2390,9 @@ dependencies = [ [[package]] name = "cpufeatures" -version = "0.2.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16b80225097f2e5ae4e7179dd2266824648f3e2f49d9134d584b76389d31c4c3" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" dependencies = [ "libc", ] @@ -2344,7 +2432,6 @@ dependencies = [ "ciborium", "clap", "criterion-plot", - "futures", "is-terminal", "itertools 0.10.5", "num-traits", @@ -2357,7 +2444,6 @@ dependencies = [ "serde_derive", "serde_json", "tinytemplate", - "tokio", "walkdir", ] @@ -2428,11 +2514,11 @@ version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "829d955a0bb380ef178a640b91779e3987da38c9aea133b20614cfed8cdea9c6" dependencies = [ - "bitflags 2.7.0", + "bitflags 2.9.0", "crossterm_winapi", "mio 1.0.3", "parking_lot", - "rustix", + "rustix 0.38.44", "signal-hook", "signal-hook-mio", "winapi", @@ -2449,9 +2535,9 @@ dependencies = [ [[package]] name = "crunchy" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" +checksum = "43da5946c66ffcc7745f48db692ffbb10a83bfe0afd96235c5c2a4fb23994929" [[package]] name = "crypto-bigint" @@ -2500,9 +2586,9 @@ dependencies = [ [[package]] name = "csv-core" -version = "0.1.11" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5efa2b3d7902f4b634a20cae3c9c4e6209dc4779feb6863329607560143efa70" +checksum = "7d02f3b0da4c6504f86e9cd789d8dbafab48c2321be74e9987593de5a894d93d" dependencies = [ "memchr", ] @@ -2540,7 +2626,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] @@ -2577,7 +2663,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] @@ -2588,7 +2674,7 @@ checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ "darling_core", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] @@ -2608,15 +2694,15 @@ dependencies = [ [[package]] name = "data-encoding" -version = "2.6.0" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2" +checksum = "575f75dfd25738df5b91b8e43e14d44bda14637a58fae779fd2b064f8bf3e010" [[package]] name = "data-encoding-macro" -version = "0.1.15" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1559b6cba622276d6d63706db152618eeb15b89b3e4041446b05876e352e639" +checksum = "9f9724adfcf41f45bf652b3995837669d73c4d49a1b5ac1ff82905ac7d9b5558" dependencies = [ "data-encoding", "data-encoding-macro-internal", @@ -2624,12 +2710,12 @@ dependencies = [ [[package]] name = "data-encoding-macro-internal" -version = "0.1.13" +version = "0.1.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "332d754c0af53bc87c108fed664d121ecf59207ec4196041f04d6ab9002ad33f" +checksum = "18e4fdb82bd54a12e42fb58a800dcae6b9e13982238ce2296dc3570b92148e1f" dependencies = [ "data-encoding", - "syn 1.0.109", + "syn 2.0.100", ] [[package]] @@ -2698,7 +2784,7 @@ checksum = "30542c1ad912e0e3d22a1935c290e12e8a29d704a420177a31faad4a601a0800" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] @@ -2707,7 +2793,16 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05" dependencies = [ - "derive_more-impl", + "derive_more-impl 1.0.0", +] + +[[package]] +name = "derive_more" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "093242cf7570c207c83073cf82f79706fe7b8317e98620a47d5be7c3d8497678" +dependencies = [ + "derive_more-impl 2.0.1", ] [[package]] @@ -2719,22 +2814,34 @@ dependencies = [ "convert_case", "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", + "unicode-xid", +] + +[[package]] +name = "derive_more-impl" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bda628edc44c4bb645fbe0f758797143e4e07926f7ebf4e9bdfbd3d2ce621df3" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", "unicode-xid", ] [[package]] name = "did" -version = "0.42.0" -source = "git+https://github.com/bitfinity-network/bitfinity-evm-sdk?tag=v0.42.x#df8b9ffac634e5a9441ff92887ca613c1adcdb02" +version = "0.46.0" +source = "git+https://github.com/bitfinity-network/bitfinity-evm-sdk?tag=v0.46.0#6fe7e9dd868d8b6b567b7dc50b293d84c27f577c" dependencies = [ "alloy", "bincode", "bytes", "candid", - "derive_more", + "derive_more 2.0.1", "ic-log", - "ic-stable-structures 0.23.0", + "ic-stable-structures 0.24.0", "jsonrpc-core", "log", "num", @@ -2743,7 +2850,7 @@ dependencies = [ "serde_with", "sha2 0.10.8", "sha3", - "thiserror 2.0.10", + "thiserror 2.0.12", ] [[package]] @@ -2856,7 +2963,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] @@ -2873,9 +2980,9 @@ checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" [[package]] name = "dyn-clone" -version = "1.0.17" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125" +checksum = "1c7a8fb8a9fbf66c1f703fe16184d10ca0ee9d23be5b4436400408ba54a95005" [[package]] name = "ecdsa" @@ -2952,15 +3059,15 @@ dependencies = [ "revm", "serde", "serde_json", - "thiserror 2.0.10", + "thiserror 2.0.12", "walkdir", ] [[package]] name = "either" -version = "1.13.0" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" +checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" [[package]] name = "elliptic-curve" @@ -3018,7 +3125,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] @@ -3029,7 +3136,7 @@ checksum = "2f9ed6b3789237c8a0c1c505af1c7eb2c560df6186f01b098c3a1064ea532f38" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] @@ -3044,29 +3151,29 @@ dependencies = [ [[package]] name = "equator" -version = "0.2.2" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c35da53b5a021d2484a7cc49b2ac7f2d840f8236a286f84202369bd338d761ea" +checksum = "4711b213838dfee0117e3be6ac926007d7f433d7bbe33595975d4190cb07e6fc" dependencies = [ "equator-macro", ] [[package]] name = "equator-macro" -version = "0.2.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bf679796c0322556351f287a51b49e48f7c4986e727b5dd78c972d30e2e16cc" +checksum = "44f23cf4b44bfce11a86ace86f8a73ffdec849c9fd00a386a53d278bd9e81fb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] name = "equivalent" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "errno" @@ -3080,8 +3187,8 @@ dependencies = [ [[package]] name = "ethereum-json-rpc-client" -version = "0.42.0" -source = "git+https://github.com/bitfinity-network/bitfinity-evm-sdk?tag=v0.42.x#df8b9ffac634e5a9441ff92887ca613c1adcdb02" +version = "0.46.0" +source = "git+https://github.com/bitfinity-network/bitfinity-evm-sdk?tag=v0.46.0#6fe7e9dd868d8b6b567b7dc50b293d84c27f577c" dependencies = [ "alloy", "anyhow", @@ -3112,9 +3219,9 @@ dependencies = [ [[package]] name = "ethereum_ssz" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "862e41ea8eea7508f70cfd8cd560f0c34bb0af37c719a8e06c2672f0f031d8e5" +checksum = "86da3096d1304f5f28476ce383005385459afeaf0eea08592b65ddbc9b258d16" dependencies = [ "alloy-primitives", "ethereum_serde_utils", @@ -3127,14 +3234,14 @@ dependencies = [ [[package]] name = "ethereum_ssz_derive" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d31ecf6640112f61dc34b4d8359c081102969af0edd18381fed2052f6db6a410" +checksum = "d832a5c38eba0e7ad92592f7a22d693954637fbb332b4f669590d66a5c3183e5" dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] @@ -3166,8 +3273,8 @@ dependencies = [ [[package]] name = "evm-canister-client" -version = "0.42.0" -source = "git+https://github.com/bitfinity-network/bitfinity-evm-sdk?tag=v0.42.x#df8b9ffac634e5a9441ff92887ca613c1adcdb02" +version = "0.46.0" +source = "git+https://github.com/bitfinity-network/bitfinity-evm-sdk?tag=v0.46.0#6fe7e9dd868d8b6b567b7dc50b293d84c27f577c" dependencies = [ "candid", "did", @@ -3190,7 +3297,7 @@ dependencies = [ "reth-node-ethereum", "serde", "serde_json", - "thiserror 2.0.10", + "thiserror 2.0.12", ] [[package]] @@ -3278,7 +3385,7 @@ dependencies = [ "reth-tracing", "reth-trie-db", "serde", - "thiserror 2.0.10", + "thiserror 2.0.12", "tokio", ] @@ -3568,9 +3675,9 @@ dependencies = [ [[package]] name = "ff" -version = "0.13.0" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" +checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393" dependencies = [ "rand_core 0.6.4", "subtle", @@ -3620,9 +3727,9 @@ dependencies = [ [[package]] name = "flate2" -version = "1.0.35" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c936bfdafb507ebbf50b8074c54fa31c5be9a1e7e5f467dd659697041407d07c" +checksum = "11faaf5a5236997af9848be0bef4db95824b1d534ebc64d0f0c6cf3e67bd38dc" dependencies = [ "crc32fast", "miniz_oxide", @@ -3640,21 +3747,6 @@ version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a0d2fde1f7b3d48b8395d5f2de76c18a528bd6a9cdde438df747bfcba3e05d6f" -[[package]] -name = "foreign-types" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" -dependencies = [ - "foreign-types-shared", -] - -[[package]] -name = "foreign-types-shared" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" - [[package]] name = "form_urlencoded" version = "1.2.1" @@ -3750,7 +3842,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] @@ -3848,6 +3940,18 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "getrandom" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a49c392881ce6d5c3b8cb70f98717b7c07aabbdff06687b9030dbfbe2725f8" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.13.3+wasi-0.2.2", + "windows-targets 0.52.6", +] + [[package]] name = "ghash" version = "0.5.1" @@ -3929,9 +4033,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.4.7" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccae279728d634d083c00f6099cb58f01cc99c145b84b8be2f6c74618d79922e" +checksum = "5017294ff4bb30944501348f6f8e42e6ad28f42c8bbef7a74029aff064a4e3c2" dependencies = [ "atomic-waker", "bytes", @@ -3939,7 +4043,7 @@ dependencies = [ "futures-core", "futures-sink", "http", - "indexmap 2.7.0", + "indexmap 2.8.0", "slab", "tokio", "tokio-util", @@ -3954,9 +4058,9 @@ checksum = "1b43ede17f21864e81be2fa654110bf1e793774238d86ef8555c37e6519c0403" [[package]] name = "half" -version = "2.4.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6dd08c532ae367adf81c312a4580bc67f1d0fe8bc9c460520283f4c0ff277888" +checksum = "7db2ff139bba50379da6aa0766b52fdcb62cb5b263009b09ed58ba604e14bbd1" dependencies = [ "cfg-if", "crunchy", @@ -4035,9 +4139,9 @@ checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" [[package]] name = "hermit-abi" -version = "0.4.0" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc" +checksum = "fbd780fe5cc30f81464441920d82ac8740e2e46b29a6fad543ddd075229ce37e" [[package]] name = "hex" @@ -4050,9 +4154,9 @@ dependencies = [ [[package]] name = "hickory-proto" -version = "0.25.0-alpha.4" +version = "0.25.0-alpha.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d063c0692ee669aa6d261988aa19ca5510f1cc40e4f211024f50c888499a35d7" +checksum = "1d00147af6310f4392a31680db52a3ed45a2e0f68eb18e8c3fe5537ecc96d9e2" dependencies = [ "async-recursion", "async-trait", @@ -4065,9 +4169,9 @@ dependencies = [ "idna", "ipnet", "once_cell", - "rand 0.8.5", + "rand 0.9.0", "serde", - "thiserror 2.0.10", + "thiserror 2.0.12", "tinyvec", "tokio", "tracing", @@ -4076,9 +4180,9 @@ dependencies = [ [[package]] name = "hickory-resolver" -version = "0.25.0-alpha.4" +version = "0.25.0-alpha.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42bc352e4412fb657e795f79b4efcf2bd60b59ee5ca0187f3554194cd1107a27" +checksum = "5762f69ebdbd4ddb2e975cd24690bf21fe6b2604039189c26acddbc427f12887" dependencies = [ "cfg-if", "futures-util", @@ -4087,11 +4191,11 @@ dependencies = [ "moka", "once_cell", "parking_lot", - "rand 0.8.5", + "rand 0.9.0", "resolv-conf", "serde", "smallvec", - "thiserror 2.0.10", + "thiserror 2.0.12", "tokio", "tracing", ] @@ -4137,20 +4241,20 @@ dependencies = [ [[package]] name = "hostname" -version = "0.3.1" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867" +checksum = "f9c7c7c8ac16c798734b8a24560c1362120597c40d5e1459f09498f8f6c8f2ba" dependencies = [ + "cfg-if", "libc", - "match_cfg", - "winapi", + "windows 0.52.0", ] [[package]] name = "http" -version = "1.2.0" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f16ca2af56261c99fba8bac40a10251ce8188205a4c448fbb745a2e4daa76fea" +checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565" dependencies = [ "bytes", "fnv", @@ -4169,12 +4273,12 @@ dependencies = [ [[package]] name = "http-body-util" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" +checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" dependencies = [ "bytes", - "futures-util", + "futures-core", "http", "http-body", "pin-project-lite", @@ -4208,9 +4312,9 @@ dependencies = [ [[package]] name = "httparse" -version = "1.9.5" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d71d3574edd2771538b901e6549113b4006ece66150fb69c0fb6d9a2adae946" +checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" [[package]] name = "httpdate" @@ -4226,9 +4330,9 @@ checksum = "91f255a4535024abf7640cb288260811fc14794f62b063652ed349f9a6c2348e" [[package]] name = "humantime" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" +checksum = "9b112acc8b3adf4b107a8ec20977da0273a8c386765a3ec0229bd500a1443f9f" [[package]] name = "humantime-serde" @@ -4242,9 +4346,9 @@ dependencies = [ [[package]] name = "hyper" -version = "1.5.2" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "256fb8d4bd6413123cc9d91832d78325c48ff41677595be797d90f42969beae0" +checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80" dependencies = [ "bytes", "futures-channel", @@ -4281,22 +4385,6 @@ dependencies = [ "webpki-roots", ] -[[package]] -name = "hyper-tls" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" -dependencies = [ - "bytes", - "http-body-util", - "hyper", - "hyper-util", - "native-tls", - "tokio", - "tokio-native-tls", - "tower-service", -] - [[package]] name = "hyper-util" version = "0.1.10" @@ -4341,9 +4429,9 @@ dependencies = [ [[package]] name = "ic-agent" -version = "0.39.2" +version = "0.39.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ba408987ca48fc3eee6a613e760d076a9046cccbbb5ba29efbada339ab28ed9" +checksum = "820d65a05258f2fdff326c65561b1ddc7ec54e5d43a4b1203b25eb83075c83d4" dependencies = [ "arc-swap", "async-channel 1.9.0", @@ -4380,7 +4468,7 @@ dependencies = [ "sha2 0.10.8", "simple_asn1", "stop-token", - "thiserror 2.0.10", + "thiserror 2.0.12", "time", "tokio", "tower-service", @@ -4389,22 +4477,22 @@ dependencies = [ [[package]] name = "ic-canister-client" -version = "0.23.0" -source = "git+https://github.com/bitfinity-network/canister-sdk?tag=v0.23.x#85f5619ec74fab01090fb66dc391ec60d3e28895" +version = "0.24.0" +source = "git+https://github.com/bitfinity-network/canister-sdk?tag=v0.24.x#b232bc7f34dc43b9061ea760af026351d26ebd3d" dependencies = [ "async-trait", "candid", "ic-agent", "ic-exports", "serde", - "thiserror 2.0.10", + "thiserror 2.0.12", ] [[package]] name = "ic-cbor" -version = "3.0.2" +version = "3.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5500d6e85bc2ca8ea8aaed16cb84811882589244831a2fd8eefe02e90b3006c6" +checksum = "a0efada960a6c9fb023f45ed95801b757a033dafba071e4f386c6c112ca186d9" dependencies = [ "candid", "ic-certification", @@ -4437,7 +4525,7 @@ dependencies = [ "quote", "serde", "serde_tokenstream", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] @@ -4456,9 +4544,9 @@ dependencies = [ [[package]] name = "ic-certificate-verification" -version = "3.0.2" +version = "3.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2daec653eb7895b5549cdf58d871985711c03cf5e389f7800a970f4f42dc0897" +checksum = "546dfd75c4da975b9f1c55ef3da461321ab4313a66da653af321ed6dc7319b61" dependencies = [ "cached 0.54.0", "candid", @@ -4475,9 +4563,9 @@ dependencies = [ [[package]] name = "ic-certification" -version = "3.0.2" +version = "3.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9eae40f26fcac9c141cad54d9aa5f423efffde78ac371057c53d275ebbcad443" +checksum = "ffb40d73f9f8273dc6569a68859003bbd467c9dc6d53c6fd7d174742f857209d" dependencies = [ "hex", "serde", @@ -4487,16 +4575,16 @@ dependencies = [ [[package]] name = "ic-crypto-getrandom-for-wasm" -version = "0.23.0" -source = "git+https://github.com/bitfinity-network/canister-sdk?tag=v0.23.x#85f5619ec74fab01090fb66dc391ec60d3e28895" +version = "0.24.0" +source = "git+https://github.com/bitfinity-network/canister-sdk?tag=v0.24.x#b232bc7f34dc43b9061ea760af026351d26ebd3d" dependencies = [ "getrandom 0.2.15", ] [[package]] name = "ic-exports" -version = "0.23.0" -source = "git+https://github.com/bitfinity-network/canister-sdk?tag=v0.23.x#85f5619ec74fab01090fb66dc391ec60d3e28895" +version = "0.24.0" +source = "git+https://github.com/bitfinity-network/canister-sdk?tag=v0.24.x#b232bc7f34dc43b9061ea760af026351d26ebd3d" dependencies = [ "candid", "ic-cdk", @@ -4509,8 +4597,8 @@ dependencies = [ [[package]] name = "ic-kit" -version = "0.23.0" -source = "git+https://github.com/bitfinity-network/canister-sdk?tag=v0.23.x#85f5619ec74fab01090fb66dc391ec60d3e28895" +version = "0.24.0" +source = "git+https://github.com/bitfinity-network/canister-sdk?tag=v0.24.x#b232bc7f34dc43b9061ea760af026351d26ebd3d" dependencies = [ "candid", "futures", @@ -4522,8 +4610,8 @@ dependencies = [ [[package]] name = "ic-log" -version = "0.23.0" -source = "git+https://github.com/bitfinity-network/canister-sdk?tag=v0.23.x#85f5619ec74fab01090fb66dc391ec60d3e28895" +version = "0.24.0" +source = "git+https://github.com/bitfinity-network/canister-sdk?tag=v0.24.x#b232bc7f34dc43b9061ea760af026351d26ebd3d" dependencies = [ "anyhow", "arc-swap", @@ -4538,30 +4626,30 @@ dependencies = [ [[package]] name = "ic-stable-structures" -version = "0.6.7" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b492c5a16455ae78623eaa12ead96dda6c69a83c535b1b00789f19b381c8a24c" +checksum = "f0f5684f577e0146738cd11afed789109c4f51ba963c75823c48c1501dc53278" dependencies = [ "ic_principal", ] [[package]] name = "ic-stable-structures" -version = "0.23.0" -source = "git+https://github.com/bitfinity-network/canister-sdk?tag=v0.23.x#85f5619ec74fab01090fb66dc391ec60d3e28895" +version = "0.24.0" +source = "git+https://github.com/bitfinity-network/canister-sdk?tag=v0.24.x#b232bc7f34dc43b9061ea760af026351d26ebd3d" dependencies = [ "candid", - "ic-stable-structures 0.6.7", + "ic-stable-structures 0.6.8", "parking_lot", "schnellru", - "thiserror 2.0.10", + "thiserror 2.0.12", ] [[package]] name = "ic-transport-types" -version = "0.39.2" +version = "0.39.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21e2418868dd5857d2a5bac3f1cb6de1aecf2316d380997ef842aec3d8a79d4e" +checksum = "979ee7bee5a67150a4c090fb012c93c294a528b4a867bad9a15cc6d01cb4227f" dependencies = [ "candid", "hex", @@ -4572,7 +4660,7 @@ dependencies = [ "serde_cbor", "serde_repr", "sha2 0.10.8", - "thiserror 2.0.10", + "thiserror 2.0.12", ] [[package]] @@ -4597,9 +4685,9 @@ checksum = "8de254dd67bbd58073e23dc1c8553ba12fa1dc610a19de94ad2bbcd0460c067f" [[package]] name = "ic_bls12_381" -version = "0.10.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22c65787944f32af084dffd0c68c1e544237b76e215654ddea8cd9f527dd8b69" +checksum = "a1e828f9e804ccefe4b9b15b2195f474c60fd4f95ccd14fcb554eb6d7dfafde3" dependencies = [ "digest 0.10.7", "ff", @@ -4737,7 +4825,7 @@ checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] @@ -4794,7 +4882,7 @@ checksum = "a0eb5a3343abf848c0984fe4604b2b105da9539376e24fc0a3b0007411ae4fd9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] @@ -4835,9 +4923,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.7.0" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62f822373a4fe84d4bb149bf54e584a7f4abec90e072ed49cda0edea5b95471f" +checksum = "3954d50fe15b02142bf25d3b8bdadb634ec3948f103d04ffe3031bc8fe9d7058" dependencies = [ "arbitrary", "equivalent", @@ -4847,9 +4935,9 @@ dependencies = [ [[package]] name = "indoc" -version = "2.0.5" +version = "2.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b248f5224d1d606005e02c97f5aa4e88eeb230488bcc03bc9ca4d7991399f2b5" +checksum = "f4c7245a08504955605670dbf141fceab975f15ca21570696aebe9d2e71576bd" [[package]] name = "infer" @@ -4864,7 +4952,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "232929e1d75fe899576a3d5c7416ad0d88dbfbb3c3d6aa00873a7408a50ddb88" dependencies = [ "ahash", - "indexmap 2.7.0", + "indexmap 2.8.0", "is-terminal", "itoa", "log", @@ -4897,9 +4985,9 @@ dependencies = [ [[package]] name = "inout" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" +checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" dependencies = [ "block-padding", "generic-array", @@ -4907,15 +4995,15 @@ dependencies = [ [[package]] name = "instability" -version = "0.3.6" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "894813a444908c0c8c0e221b041771d107c4a21de1d317dc49bcc66e3c9e5b3f" +checksum = "0bf9fed6d91cfb734e7476a06bde8300a1b94e217e1b523b6f0cd1a01998c71d" dependencies = [ "darling", "indoc", "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] @@ -4929,9 +5017,9 @@ dependencies = [ [[package]] name = "interprocess" -version = "2.2.2" +version = "2.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "894148491d817cb36b6f778017b8ac46b17408d522dd90f539d677ea938362eb" +checksum = "d941b405bd2322993887859a8ee6ac9134945a24ec5ec763a8a962fc64dfec2d" dependencies = [ "doctest-file", "futures-core", @@ -4965,9 +5053,9 @@ dependencies = [ [[package]] name = "ipnet" -version = "2.10.1" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddc24109865250148c2e0f3d25d4f0f479571723792d3802153c60922a4fb708" +checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" [[package]] name = "iri-string" @@ -4981,13 +5069,13 @@ dependencies = [ [[package]] name = "is-terminal" -version = "0.4.13" +version = "0.4.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "261f68e344040fbd0edea105bef17c66edf46f984ddb1115b775ce31be948f4b" +checksum = "e04d7f318608d35d4b61ddd75cbdaee86b023ebe2bd5a66ee0915f0bf93095a9" dependencies = [ - "hermit-abi 0.4.0", + "hermit-abi 0.5.0", "libc", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -5025,9 +5113,9 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.14" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" +checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" [[package]] name = "jni" @@ -5060,9 +5148,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.76" +version = "0.3.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6717b6b5b077764fb5966237269cb3c64edddde4b14ce42647430a78ced9e7b7" +checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" dependencies = [ "once_cell", "wasm-bindgen", @@ -5085,9 +5173,9 @@ dependencies = [ [[package]] name = "jsonrpsee" -version = "0.24.7" +version = "0.24.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5c71d8c1a731cc4227c2f698d377e7848ca12c8a48866fc5e6951c43a4db843" +checksum = "834af00800e962dee8f7bfc0f60601de215e73e78e5497d733a2919da837d3c8" dependencies = [ "jsonrpsee-client-transport", "jsonrpsee-core", @@ -5103,9 +5191,9 @@ dependencies = [ [[package]] name = "jsonrpsee-client-transport" -version = "0.24.7" +version = "0.24.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "548125b159ba1314104f5bb5f38519e03a41862786aa3925cf349aae9cdd546e" +checksum = "def0fd41e2f53118bd1620478d12305b2c75feef57ea1f93ef70568c98081b7e" dependencies = [ "base64 0.22.1", "futures-channel", @@ -5128,9 +5216,9 @@ dependencies = [ [[package]] name = "jsonrpsee-core" -version = "0.24.7" +version = "0.24.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2882f6f8acb9fdaec7cefc4fd607119a9bd709831df7d7672a1d3b644628280" +checksum = "76637f6294b04e747d68e69336ef839a3493ca62b35bf488ead525f7da75c5bb" dependencies = [ "async-trait", "bytes", @@ -5143,7 +5231,7 @@ dependencies = [ "parking_lot", "pin-project", "rand 0.8.5", - "rustc-hash 2.1.0", + "rustc-hash 2.1.1", "serde", "serde_json", "thiserror 1.0.69", @@ -5155,9 +5243,9 @@ dependencies = [ [[package]] name = "jsonrpsee-http-client" -version = "0.24.7" +version = "0.24.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3638bc4617f96675973253b3a45006933bde93c2fd8a6170b33c777cc389e5b" +checksum = "87c24e981ad17798bbca852b0738bfb7b94816ed687bd0d5da60bfa35fa0fdc3" dependencies = [ "async-trait", "base64 0.22.1", @@ -5180,22 +5268,22 @@ dependencies = [ [[package]] name = "jsonrpsee-proc-macros" -version = "0.24.7" +version = "0.24.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06c01ae0007548e73412c08e2285ffe5d723195bf268bce67b1b77c3bb2a14d" +checksum = "6fcae0c6c159e11541080f1f829873d8f374f81eda0abc67695a13fc8dc1a580" dependencies = [ "heck", "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] name = "jsonrpsee-server" -version = "0.24.7" +version = "0.24.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82ad8ddc14be1d4290cd68046e7d1d37acd408efed6d3ca08aefcc3ad6da069c" +checksum = "66b7a3df90a1a60c3ed68e7ca63916b53e9afa928e33531e87f61a9c8e9ae87b" dependencies = [ "futures-util", "http", @@ -5220,9 +5308,9 @@ dependencies = [ [[package]] name = "jsonrpsee-types" -version = "0.24.7" +version = "0.24.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a178c60086f24cc35bb82f57c651d0d25d99c4742b4d335de04e97fa1f08a8a1" +checksum = "ddb81adb1a5ae9182df379e374a79e24e992334e7346af4d065ae5b2acb8d4c6" dependencies = [ "http", "serde", @@ -5232,9 +5320,9 @@ dependencies = [ [[package]] name = "jsonrpsee-wasm-client" -version = "0.24.7" +version = "0.24.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a01cd500915d24ab28ca17527e23901ef1be6d659a2322451e1045532516c25" +checksum = "42e41af42ca39657313748174d02766e5287d3a57356f16756dbd8065b933977" dependencies = [ "jsonrpsee-client-transport", "jsonrpsee-core", @@ -5243,9 +5331,9 @@ dependencies = [ [[package]] name = "jsonrpsee-ws-client" -version = "0.24.7" +version = "0.24.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fe322e0896d0955a3ebdd5bf813571c53fea29edd713bc315b76620b327e86d" +checksum = "6f4f3642a292f5b76d8a16af5c88c16a0860f2ccc778104e5c848b28183d9538" dependencies = [ "http", "jsonrpsee-client-transport", @@ -5256,11 +5344,11 @@ dependencies = [ [[package]] name = "jsonwebtoken" -version = "9.3.0" +version = "9.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9ae10193d25051e74945f1ea2d0b42e03cc3b890f7e4cc5faa44997d808193f" +checksum = "5a87cc7a48537badeae96744432de36f4be2b4a34a05a5ef32e9dd8a1c169dde" dependencies = [ - "base64 0.21.7", + "base64 0.22.1", "js-sys", "pem", "ring", @@ -5340,9 +5428,9 @@ checksum = "884e2677b40cc8c339eaefcb701c32ef1fd2493d71118dc0ca4b6a736c93bd67" [[package]] name = "libc" -version = "0.2.169" +version = "0.2.171" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" +checksum = "c19937216e9d3aa9956d9bb8dfc0b0c8beb6058fc4f7a4dc4d850edf86a237d6" [[package]] name = "libloading" @@ -5396,7 +5484,7 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" dependencies = [ - "bitflags 2.7.0", + "bitflags 2.9.0", "libc", "redox_syscall", ] @@ -5487,11 +5575,17 @@ version = "0.4.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" +[[package]] +name = "linux-raw-sys" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe7db12097d22ec582439daf8618b8fdd1a7bef6270e9af3b1ebcd30893cf413" + [[package]] name = "litemap" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104" +checksum = "23fb14cb19457329c82206317a5663005a4d404783dc74f4252769b0d5f42856" [[package]] name = "lock_api" @@ -5506,9 +5600,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.22" +version = "0.4.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" +checksum = "30bde2b3dc3671ae49d8e2e9f044c7c005836e7a023ee57cffa25ab82764bb9e" [[package]] name = "loom" @@ -5548,35 +5642,16 @@ dependencies = [ ] [[package]] -name = "maili-protocol" -version = "0.1.2" +name = "macro-string" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfcd6cd2bab854872c24d551308cb84df4c20db38593b4392d68cacd75d4c60c" +checksum = "1b27834086c65ec3f9387b096d66e99f221cf081c2b738042aa252bcd41204e3" dependencies = [ - "alloc-no-stdlib", - "alloy-consensus", - "alloy-eips", - "alloy-primitives", - "alloy-rlp", - "alloy-sol-types", - "async-trait", - "brotli", - "derive_more", - "miniz_oxide", - "op-alloy-consensus", - "op-alloy-genesis", - "rand 0.8.5", - "thiserror 2.0.10", - "tracing", - "unsigned-varint", + "proc-macro2", + "quote", + "syn 2.0.100", ] -[[package]] -name = "match_cfg" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4" - [[package]] name = "matchers" version = "0.1.0" @@ -5629,17 +5704,17 @@ dependencies = [ "proc-macro2", "quote", "regex", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] name = "metrics-exporter-prometheus" -version = "0.16.1" +version = "0.16.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12779523996a67c13c84906a876ac6fe4d07a6e1adb54978378e13f199251a62" +checksum = "dd7399781913e5393588a8d8c6a2867bf85fb38eaf2502fdce465aad2dc6f034" dependencies = [ "base64 0.22.1", - "indexmap 2.7.0", + "indexmap 2.8.0", "metrics", "metrics-util 0.19.0", "quanta", @@ -5671,7 +5746,7 @@ dependencies = [ "crossbeam-epoch", "crossbeam-utils", "hashbrown 0.15.2", - "indexmap 2.7.0", + "indexmap 2.8.0", "metrics", "ordered-float", ] @@ -5736,9 +5811,9 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.8.2" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ffbe83022cedc1d264172192511ae958937694cd57ce297164951b8b3568394" +checksum = "8e3e04debbb59698c15bacbb6d93584a8c0ca9cc3213cb423d31f760d8843ce5" dependencies = [ "adler2", ] @@ -5859,23 +5934,6 @@ dependencies = [ "unsigned-varint", ] -[[package]] -name = "native-tls" -version = "0.2.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8614eb2c83d59d1c8cc974dd3f920198647674a0a035e1af1fa58707e317466" -dependencies = [ - "libc", - "log", - "openssl", - "openssl-probe", - "openssl-sys", - "schannel", - "security-framework 2.11.1", - "security-framework-sys", - "tempfile", -] - [[package]] name = "nix" version = "0.26.4" @@ -5903,7 +5961,7 @@ version = "6.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6205bd8bb1e454ad2e27422015fb5e4f2bcc7e08fa8f27058670d208324a4d2d" dependencies = [ - "bitflags 2.7.0", + "bitflags 2.9.0", "filetime", "fsevent-sys", "inotify", @@ -6054,7 +6112,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] @@ -6091,9 +6149,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.20.2" +version = "1.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" +checksum = "d75b0bedcc4fe52caa0e03d9f1151a323e4aa5e2d78ba3580400cd3c9e2bc4bc" dependencies = [ "critical-section", "portable-atomic", @@ -6101,15 +6159,15 @@ dependencies = [ [[package]] name = "oorandom" -version = "11.1.4" +version = "11.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b410bbe7e14ab526a0e86877eb47c6996a2bd7746f027ba551028c925390e4e9" +checksum = "d6790f58c7ff633d8771f42965289203411a5e5c68388703c06e14f24770b41e" [[package]] name = "op-alloy-consensus" -version = "0.9.2" +version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "442518bf0ef88f4d79409527565b8cdee235c891f2e2a829497caec5ed9d8d1c" +checksum = "e28dc4e397dd8969f7f98ea6454a5c531349a58c76e12448b0c2de6581df7b8c" dependencies = [ "alloy-consensus", "alloy-eips", @@ -6117,39 +6175,17 @@ dependencies = [ "alloy-rlp", "alloy-serde", "arbitrary", - "derive_more", - "serde", - "serde_with", - "thiserror 2.0.10", -] - -[[package]] -name = "op-alloy-genesis" -version = "0.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a2af7fee1fa297569199b524493e50355eab3f1bff75cef492036eb4a3ffb5e" -dependencies = [ - "alloy-consensus", - "alloy-eips", - "alloy-primitives", - "alloy-sol-types", - "thiserror 2.0.10", -] - -[[package]] -name = "op-alloy-protocol" -version = "0.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a144b1ed079913b11c0640f4eaa3d2ac1bdb6cc35e3658a1640e88b241e0c32" -dependencies = [ - "maili-protocol", + "derive_more 1.0.0", + "serde", + "serde_with", + "thiserror 2.0.12", ] [[package]] name = "op-alloy-rpc-types" -version = "0.9.2" +version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50223d61cad040db6721bcc2d489c924c1691ce3f5e674d4d8776131dab786a0" +checksum = "4b9c83c664b953d474d6b58825800b6ff1d61876a686407e646cbf76891c1f9b" dependencies = [ "alloy-consensus", "alloy-eips", @@ -6158,7 +6194,7 @@ dependencies = [ "alloy-rpc-types-eth", "alloy-serde", "arbitrary", - "derive_more", + "derive_more 1.0.0", "op-alloy-consensus", "serde", "serde_json", @@ -6166,17 +6202,15 @@ dependencies = [ [[package]] name = "op-alloy-rpc-types-engine" -version = "0.9.2" +version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5e2419373bae23ea3f6cf5a49c624d9b644061e2e929d4f9629cbcbffa4964d" +checksum = "e8d05b5b5b3cff7f24eec2bc366f86a7ff0934678b1bda36d0ecaadba9504170" dependencies = [ "alloy-eips", "alloy-primitives", "alloy-rpc-types-engine", - "derive_more", "op-alloy-consensus", - "op-alloy-protocol", - "thiserror 2.0.10", + "thiserror 2.0.12", ] [[package]] @@ -6185,49 +6219,11 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" -[[package]] -name = "openssl" -version = "0.10.68" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6174bc48f102d208783c2c84bf931bb75927a617866870de8a4ea85597f871f5" -dependencies = [ - "bitflags 2.7.0", - "cfg-if", - "foreign-types", - "libc", - "once_cell", - "openssl-macros", - "openssl-sys", -] - -[[package]] -name = "openssl-macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.96", -] - [[package]] name = "openssl-probe" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" - -[[package]] -name = "openssl-sys" -version = "0.9.104" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45abf306cbf99debc8195b66b7346498d7b10c210de50418b5ccd7ceba08c741" -dependencies = [ - "cc", - "libc", - "pkg-config", - "vcpkg", -] +checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" [[package]] name = "option-ext" @@ -6283,30 +6279,32 @@ dependencies = [ [[package]] name = "parity-scale-codec" -version = "3.6.12" +version = "3.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "306800abfa29c7f16596b5970a588435e3d5b3149683d00c12b699cc19f895ee" +checksum = "c9fde3d0718baf5bc92f577d652001da0f8d54cd03a7974e118d04fc888dc23d" dependencies = [ "arbitrary", "arrayvec 0.7.6", "bitvec", "byte-slice-cast", "bytes", + "const_format", "impl-trait-for-tuples", "parity-scale-codec-derive", + "rustversion", "serde", ] [[package]] name = "parity-scale-codec-derive" -version = "3.6.12" +version = "3.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d830939c76d294956402033aee57a6da7b438f2294eb94864c37b0569053a42c" +checksum = "581c837bb6b9541ce7faa9377c20616e4fb7650f6b0f68bc93c827ee504fb7b3" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.100", ] [[package]] @@ -6365,9 +6363,9 @@ dependencies = [ [[package]] name = "pem" -version = "3.0.4" +version = "3.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e459365e590736a54c3fa561947c84837534b8e9af6fc5bf781307e82658fae" +checksum = "38af38e8470ac9dee3ce1bae1af9c1671fffc44ddfd8bd1d0a3445bf349a8ef3" dependencies = [ "base64 0.22.1", "serde", @@ -6395,7 +6393,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b7cafe60d6cf8e62e1b9b2ea516a089c008945bb5a275416789e7db0bc199dc" dependencies = [ "memchr", - "thiserror 2.0.10", + "thiserror 2.0.12", "ucd-trie", ] @@ -6449,7 +6447,7 @@ dependencies = [ "phf_shared", "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] @@ -6463,22 +6461,22 @@ dependencies = [ [[package]] name = "pin-project" -version = "1.1.8" +version = "1.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e2ec53ad785f4d35dac0adea7f7dc6f1bb277ad84a680c7afefeae05d1f5916" +checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.8" +version = "1.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d56a66c0c55993aa927429d0f8a0abfd74f084e4d9c192cffed01e418d83eefb" +checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] @@ -6505,9 +6503,9 @@ dependencies = [ [[package]] name = "pkg-config" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" +checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" [[package]] name = "plain_hasher" @@ -6566,9 +6564,9 @@ dependencies = [ [[package]] name = "portable-atomic" -version = "1.10.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "280dc24453071f1b63954171985a0b0d30058d287960968b9b2aca264c8d4ee6" +checksum = "350e9b48cbc6b0e028b0473b114454c6316e57336ee184ceab6e53f72c178b3e" [[package]] name = "powerfmt" @@ -6601,18 +6599,18 @@ dependencies = [ [[package]] name = "ppv-lite86" -version = "0.2.20" +version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" dependencies = [ - "zerocopy", + "zerocopy 0.8.23", ] [[package]] name = "pretty" -version = "0.12.3" +version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b55c4d17d994b637e2f4daf6e5dc5d660d209d5642377d675d7a1c3ab69fa579" +checksum = "ac98773b7109bc75f475ab5a134c9b64b87e59d776d31098d8f346922396a477" dependencies = [ "arrayvec 0.5.2", "typed-arena", @@ -6631,12 +6629,12 @@ dependencies = [ [[package]] name = "prettyplease" -version = "0.2.27" +version = "0.2.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "483f8c21f64f3ea09fe0f30f5d48c3e8eefe5dac9129f0075f76593b4c1da705" +checksum = "5316f57387668042f561aae71480de936257848f9c43ce528e311d89a07cadeb" dependencies = [ "proc-macro2", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] @@ -6661,9 +6659,9 @@ dependencies = [ [[package]] name = "proc-macro-crate" -version = "3.2.0" +version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ecf48c7ca261d60b74ab1a7b20da18bede46776b2e55535cb958eb595c5fa7b" +checksum = "edce586971a4dfaa28950c6f18ed55e0406c1ab88bbce2c6f6293a7aaba73d35" dependencies = [ "toml_edit", ] @@ -6687,14 +6685,14 @@ dependencies = [ "proc-macro-error-attr2", "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] name = "proc-macro2" -version = "1.0.92" +version = "1.0.94" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0" +checksum = "a31971752e70b8b2686d7e46ec17fb38dad4051d94024c88df49b667caea9c84" dependencies = [ "unicode-ident", ] @@ -6705,13 +6703,13 @@ version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "731e0d9356b0c25f16f33b5be79b1c57b562f141ebfcdb0ad8ac2c13a24293b4" dependencies = [ - "bitflags 2.7.0", + "bitflags 2.9.0", "chrono", "flate2", "hex", "lazy_static", "procfs-core 0.16.0", - "rustix", + "rustix 0.38.44", ] [[package]] @@ -6720,10 +6718,10 @@ version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cc5b72d8145275d844d4b5f6d4e1eef00c8cd889edb6035c21675d1bb1f45c9f" dependencies = [ - "bitflags 2.7.0", + "bitflags 2.9.0", "hex", "procfs-core 0.17.0", - "rustix", + "rustix 0.38.44", ] [[package]] @@ -6732,7 +6730,7 @@ version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2d3554923a69f4ce04c4a754260c338f505ce22642d3830e049a399fc2059a29" dependencies = [ - "bitflags 2.7.0", + "bitflags 2.9.0", "chrono", "hex", ] @@ -6743,19 +6741,19 @@ version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "239df02d8349b06fc07398a3a1697b06418223b1c7725085e801e7c0fc6a12ec" dependencies = [ - "bitflags 2.7.0", + "bitflags 2.9.0", "hex", ] [[package]] name = "proptest" -version = "1.5.0" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4c2511913b88df1637da85cc8d96ec8e43a3f8bb8ccb71ee1ac240d6f3df58d" +checksum = "14cae93065090804185d3b75f0bf93b8eeda30c7a9b4a33d3bdb3988d6229e50" dependencies = [ "bit-set", "bit-vec", - "bitflags 2.7.0", + "bitflags 2.9.0", "lazy_static", "num-traits", "rand 0.8.5", @@ -6785,14 +6783,14 @@ checksum = "4ee1c9ac207483d5e7db4940700de86a9aae46ef90c48b57f99fe7edb8345e49" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] name = "psm" -version = "0.1.24" +version = "0.1.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "200b9ff220857e53e184257720a14553b2f4aa02577d2ed9842d45d4b9654810" +checksum = "f58e5423e24c18cc840e1c98370b3993c6649cd1678b4d24318bcf0a083cbe88" dependencies = [ "cc", ] @@ -6846,10 +6844,10 @@ dependencies = [ "pin-project-lite", "quinn-proto", "quinn-udp", - "rustc-hash 2.1.0", + "rustc-hash 2.1.1", "rustls", "socket2", - "thiserror 2.0.10", + "thiserror 2.0.12", "tokio", "tracing", ] @@ -6864,11 +6862,11 @@ dependencies = [ "getrandom 0.2.15", "rand 0.8.5", "ring", - "rustc-hash 2.1.0", + "rustc-hash 2.1.1", "rustls", "rustls-pki-types", "slab", - "thiserror 2.0.10", + "thiserror 2.0.12", "tinyvec", "tracing", "web-time", @@ -6876,9 +6874,9 @@ dependencies = [ [[package]] name = "quinn-udp" -version = "0.5.9" +version = "0.5.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c40286217b4ba3a71d644d752e6a0b71f13f1b6a2c5311acfcbe0c2418ed904" +checksum = "e46f3055866785f6b92bc6164b76be02ca8f2eb4b002c0354b28cf4c119e5944" dependencies = [ "cfg_aliases", "libc", @@ -6890,9 +6888,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.38" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc" +checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" dependencies = [ "proc-macro2", ] @@ -6928,6 +6926,17 @@ dependencies = [ "serde", ] +[[package]] +name = "rand" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3779b94aeb87e8bd4e834cee3650289ee9e0d5677f976ecdb6d219e5f4f6cd94" +dependencies = [ + "rand_chacha 0.9.0", + "rand_core 0.9.3", + "zerocopy 0.8.23", +] + [[package]] name = "rand_chacha" version = "0.2.2" @@ -6948,6 +6957,16 @@ dependencies = [ "rand_core 0.6.4", ] +[[package]] +name = "rand_chacha" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" +dependencies = [ + "ppv-lite86", + "rand_core 0.9.3", +] + [[package]] name = "rand_core" version = "0.5.1" @@ -6966,6 +6985,15 @@ dependencies = [ "getrandom 0.2.15", ] +[[package]] +name = "rand_core" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" +dependencies = [ + "getrandom 0.3.1", +] + [[package]] name = "rand_hc" version = "0.2.0" @@ -7005,7 +7033,7 @@ version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdef7f9be5c0122f890d58bdf4d964349ba6a6161f705907526d891efabba57d" dependencies = [ - "bitflags 2.7.0", + "bitflags 2.9.0", "cassowary", "compact_str", "crossterm", @@ -7013,8 +7041,8 @@ dependencies = [ "itertools 0.13.0", "lru", "paste", - "strum", - "strum_macros", + "strum 0.26.3", + "strum_macros 0.26.4", "unicode-segmentation", "unicode-truncate", "unicode-width 0.1.14", @@ -7022,11 +7050,11 @@ dependencies = [ [[package]] name = "raw-cpuid" -version = "11.2.0" +version = "11.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ab240315c661615f2ee9f0f2cd32d5a7343a84d5ebcccb99d46e6637565e7b0" +checksum = "c6df7ab838ed27997ba19a4664507e6f82b41fe6e20be42929332156e5e85146" dependencies = [ - "bitflags 2.7.0", + "bitflags 2.9.0", ] [[package]] @@ -7057,11 +7085,11 @@ checksum = "d3edd4d5d42c92f0a659926464d4cce56b562761267ecf0f469d85b7de384175" [[package]] name = "redox_syscall" -version = "0.5.8" +version = "0.5.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03a862b389f93e68874fbf580b9de08dd02facb9a788ebadaf4a3fd33cf58834" +checksum = "0b8c0c260b63a8219631167be35e6a988e9554dbd323f8bd08439c8ed1302bd1" dependencies = [ - "bitflags 2.7.0", + "bitflags 2.9.0", ] [[package]] @@ -7121,11 +7149,11 @@ checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" [[package]] name = "regress" -version = "0.10.1" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1541daf4e4ed43a0922b7969bdc2170178bcacc5dabf7e39bc508a9fa3953a7a" +checksum = "78ef7fa9ed0256d64a688a3747d0fef7a88851c18a5e1d57f115f38ec2e09366" dependencies = [ - "hashbrown 0.14.5", + "hashbrown 0.15.2", "memchr", ] @@ -7137,9 +7165,9 @@ checksum = "ba39f3699c378cd8970968dcbff9c43159ea4cfbd88d43c00b22f2ef10a435d2" [[package]] name = "reqwest" -version = "0.12.12" +version = "0.12.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43e734407157c3c2034e0258f5e4473ddb361b1e85f95a66690d67264d7cd1da" +checksum = "989e327e510263980e231de548a33e63d34962d29ae61b467389a1a09627a254" dependencies = [ "async-compression", "base64 0.22.1", @@ -7152,13 +7180,11 @@ dependencies = [ "http-body-util", "hyper", "hyper-rustls", - "hyper-tls", "hyper-util", "ipnet", "js-sys", "log", "mime", - "native-tls", "once_cell", "percent-encoding", "pin-project-lite", @@ -7172,7 +7198,6 @@ dependencies = [ "serde_urlencoded", "sync_wrapper", "tokio", - "tokio-native-tls", "tokio-rustls", "tokio-util", "tower 0.5.2", @@ -7188,12 +7213,11 @@ dependencies = [ [[package]] name = "resolv-conf" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52e44394d2086d010551b14b53b1f24e31647570cd1deb0379e2c21b329aba00" +checksum = "48375394603e3dd4b2d64371f7148fd8c7baa2680e28741f2cb8d23b59e3d4c4" dependencies = [ "hostname", - "quick-error", ] [[package]] @@ -7202,6 +7226,7 @@ version = "1.1.5" dependencies = [ "alloy-consensus", "alloy-eips", + "alloy-genesis", "alloy-primitives", "alloy-rlp", "alloy-rpc-types", @@ -7209,6 +7234,7 @@ dependencies = [ "async-channel 2.3.1", "async-trait", "backon", + "bitfinity-block-confirmation", "candid", "clap", "did", @@ -7217,6 +7243,7 @@ dependencies = [ "evm-canister-client", "eyre", "futures", + "hex", "jsonrpsee", "lightspeed_scheduler", "parking_lot", @@ -7359,7 +7386,7 @@ dependencies = [ "reth-tokio-util", "reth-tracing", "schnellru", - "thiserror 2.0.10", + "thiserror 2.0.12", "tokio", "tokio-stream", "tracing", @@ -7395,7 +7422,7 @@ dependencies = [ "reth-rpc-types-compat", "reth-tracing", "serde", - "thiserror 2.0.10", + "thiserror 2.0.12", "tokio", "tower 0.4.13", "tracing", @@ -7451,7 +7478,7 @@ dependencies = [ "reth-primitives", "reth-primitives-traits", "reth-storage-errors", - "thiserror 2.0.10", + "thiserror 2.0.12", ] [[package]] @@ -7463,7 +7490,7 @@ dependencies = [ "alloy-primitives", "alloy-signer", "alloy-signer-local", - "derive_more", + "derive_more 1.0.0", "metrics", "parking_lot", "pin-project", @@ -7495,7 +7522,7 @@ dependencies = [ "alloy-rlp", "alloy-trie", "auto_impl", - "derive_more", + "derive_more 1.0.0", "once_cell", "reth-ethereum-forks", "reth-network-peers", @@ -7606,7 +7633,7 @@ dependencies = [ "reth-fs-util", "secp256k1", "serde", - "thiserror 2.0.10", + "thiserror 2.0.12", "tikv-jemallocator", "tracy-client", ] @@ -7642,7 +7669,7 @@ dependencies = [ "proc-macro2", "quote", "similar-asserts", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] @@ -7669,7 +7696,7 @@ dependencies = [ "alloy-eips", "alloy-primitives", "auto_impl", - "derive_more", + "derive_more 1.0.0", "reth-primitives", "reth-primitives-traits", ] @@ -7721,7 +7748,7 @@ dependencies = [ "assert_matches", "bytes", "codspeed-criterion-compat", - "derive_more", + "derive_more 1.0.0", "eyre", "metrics", "page_size", @@ -7741,14 +7768,14 @@ dependencies = [ "reth-storage-errors", "reth-tracing", "reth-trie-common", - "rustc-hash 2.1.0", + "rustc-hash 2.1.1", "serde", "serde_json", - "strum", + "strum 0.26.3", "sysinfo", "tempfile", "test-fuzz", - "thiserror 2.0.10", + "thiserror 2.0.12", ] [[package]] @@ -7760,7 +7787,7 @@ dependencies = [ "alloy-primitives", "arbitrary", "bytes", - "derive_more", + "derive_more 1.0.0", "metrics", "modular-bitfield", "parity-scale-codec", @@ -7806,7 +7833,7 @@ dependencies = [ "reth-trie-db", "serde", "serde_json", - "thiserror 2.0.10", + "thiserror 2.0.12", "tracing", ] @@ -7848,7 +7875,7 @@ dependencies = [ "schnellru", "secp256k1", "serde", - "thiserror 2.0.10", + "thiserror 2.0.12", "tokio", "tokio-stream", "tracing", @@ -7860,7 +7887,7 @@ version = "1.1.5" dependencies = [ "alloy-primitives", "alloy-rlp", - "derive_more", + "derive_more 1.0.0", "discv5", "enr", "futures", @@ -7873,7 +7900,7 @@ dependencies = [ "reth-network-peers", "reth-tracing", "secp256k1", - "thiserror 2.0.10", + "thiserror 2.0.12", "tokio", "tracing", ] @@ -7900,7 +7927,7 @@ dependencies = [ "secp256k1", "serde", "serde_with", - "thiserror 2.0.10", + "thiserror 2.0.12", "tokio", "tokio-stream", "tracing", @@ -7950,7 +7977,7 @@ dependencies = [ "reth-tracing", "serde_json", "tempfile", - "thiserror 2.0.10", + "thiserror 2.0.12", "tokio", "tokio-stream", "tokio-util", @@ -7970,7 +7997,7 @@ dependencies = [ "alloy-rpc-types-eth", "alloy-signer", "alloy-signer-local", - "derive_more", + "derive_more 1.0.0", "eyre", "futures-util", "jsonrpsee", @@ -8027,7 +8054,7 @@ dependencies = [ "secp256k1", "sha2 0.10.8", "sha3", - "thiserror 2.0.10", + "thiserror 2.0.12", "tokio", "tokio-stream", "tokio-util", @@ -8082,7 +8109,7 @@ dependencies = [ "reth-primitives-traits", "reth-trie", "serde", - "thiserror 2.0.10", + "thiserror 2.0.12", "tokio", ] @@ -8109,7 +8136,7 @@ dependencies = [ "reth-prune", "reth-stages-api", "reth-tasks", - "thiserror 2.0.10", + "thiserror 2.0.12", "tokio", "tokio-stream", ] @@ -8126,7 +8153,7 @@ dependencies = [ "assert_matches", "codspeed-criterion-compat", "crossbeam-channel", - "derive_more", + "derive_more 1.0.0", "futures", "metrics", "proptest", @@ -8167,7 +8194,7 @@ dependencies = [ "reth-trie-parallel", "reth-trie-sparse", "revm-primitives", - "thiserror 2.0.10", + "thiserror 2.0.12", "tokio", "tracing", ] @@ -8213,7 +8240,7 @@ dependencies = [ "reth-execution-errors", "reth-fs-util", "reth-storage-errors", - "thiserror 2.0.10", + "thiserror 2.0.12", ] [[package]] @@ -8227,7 +8254,7 @@ dependencies = [ "arbitrary", "async-stream", "bytes", - "derive_more", + "derive_more 1.0.0", "futures", "pin-project", "proptest", @@ -8246,7 +8273,7 @@ dependencies = [ "serde", "snap", "test-fuzz", - "thiserror 2.0.10", + "thiserror 2.0.12", "tokio", "tokio-stream", "tokio-util", @@ -8265,7 +8292,7 @@ dependencies = [ "alloy-rlp", "arbitrary", "bytes", - "derive_more", + "derive_more 1.0.0", "proptest", "proptest-arbitrary-interop", "rand 0.8.5", @@ -8275,7 +8302,7 @@ dependencies = [ "reth-primitives", "reth-primitives-traits", "serde", - "thiserror 2.0.10", + "thiserror 2.0.12", ] [[package]] @@ -8335,7 +8362,7 @@ dependencies = [ "auto_impl", "dyn-clone", "once_cell", - "rustc-hash 2.1.0", + "rustc-hash 2.1.1", "serde", ] @@ -8374,7 +8401,7 @@ dependencies = [ "alloy-primitives", "alloy-rlp", "arbitrary", - "derive_more", + "derive_more 1.0.0", "modular-bitfield", "once_cell", "proptest", @@ -8462,7 +8489,7 @@ dependencies = [ "reth-prune-types", "reth-storage-errors", "revm-primitives", - "thiserror 2.0.10", + "thiserror 2.0.12", ] [[package]] @@ -8558,7 +8585,7 @@ dependencies = [ "reth-transaction-pool", "reth-trie-db", "tempfile", - "thiserror 2.0.10", + "thiserror 2.0.12", "tokio", ] @@ -8585,7 +8612,7 @@ version = "1.1.5" dependencies = [ "serde", "serde_json", - "thiserror 2.0.10", + "thiserror 2.0.12", ] [[package]] @@ -8628,7 +8655,7 @@ dependencies = [ "rand 0.8.5", "reth-tracing", "serde_json", - "thiserror 2.0.10", + "thiserror 2.0.12", "tokio", "tokio-stream", "tokio-util", @@ -8640,12 +8667,12 @@ dependencies = [ name = "reth-libmdbx" version = "1.1.5" dependencies = [ - "bitflags 2.7.0", + "bitflags 2.9.0", "byteorder", "codspeed-criterion-compat", "dashmap", - "derive_more", - "indexmap 2.7.0", + "derive_more 1.0.0", + "indexmap 2.8.0", "parking_lot", "pprof", "rand 0.8.5", @@ -8653,7 +8680,7 @@ dependencies = [ "reth-mdbx-sys", "smallvec", "tempfile", - "thiserror 2.0.10", + "thiserror 2.0.12", "tracing", ] @@ -8692,7 +8719,7 @@ dependencies = [ "reqwest", "reth-tracing", "serde_with", - "thiserror 2.0.10", + "thiserror 2.0.12", "tokio", "tracing", ] @@ -8710,7 +8737,7 @@ dependencies = [ "aquamarine", "auto_impl", "codspeed-criterion-compat", - "derive_more", + "derive_more 1.0.0", "discv5", "enr", "futures", @@ -8745,14 +8772,14 @@ dependencies = [ "reth-tokio-util", "reth-tracing", "reth-transaction-pool", - "rustc-hash 2.1.0", + "rustc-hash 2.1.1", "schnellru", "secp256k1", "serde", "serial_test", "smallvec", "tempfile", - "thiserror 2.0.10", + "thiserror 2.0.12", "tokio", "tokio-stream", "tokio-util", @@ -8767,7 +8794,7 @@ dependencies = [ "alloy-primitives", "alloy-rpc-types-admin", "auto_impl", - "derive_more", + "derive_more 1.0.0", "enr", "futures", "reth-eth-wire-types", @@ -8777,7 +8804,7 @@ dependencies = [ "reth-network-types", "reth-tokio-util", "serde", - "thiserror 2.0.10", + "thiserror 2.0.12", "tokio", "tokio-stream", ] @@ -8790,7 +8817,7 @@ dependencies = [ "alloy-eips", "alloy-primitives", "auto_impl", - "derive_more", + "derive_more 1.0.0", "futures", "parking_lot", "reth-consensus", @@ -8815,7 +8842,7 @@ dependencies = [ "secp256k1", "serde_json", "serde_with", - "thiserror 2.0.10", + "thiserror 2.0.12", "tokio", "url", ] @@ -8839,14 +8866,14 @@ version = "1.1.5" dependencies = [ "anyhow", "bincode", - "derive_more", + "derive_more 1.0.0", "lz4_flex", "memmap2", "rand 0.8.5", "reth-fs-util", "serde", "tempfile", - "thiserror 2.0.10", + "thiserror 2.0.12", "tracing", "zstd", ] @@ -8946,7 +8973,7 @@ dependencies = [ "alloy-primitives", "alloy-rpc-types-engine", "clap", - "derive_more", + "derive_more 1.0.0", "dirs-next", "eyre", "futures", @@ -8979,8 +9006,8 @@ dependencies = [ "secp256k1", "serde", "shellexpand", - "strum", - "thiserror 2.0.10", + "strum 0.26.3", + "thiserror 2.0.12", "tokio", "toml", "tracing", @@ -9044,7 +9071,7 @@ dependencies = [ "alloy-eips", "alloy-primitives", "alloy-rpc-types-engine", - "derive_more", + "derive_more 1.0.0", "futures", "humantime", "pin-project", @@ -9104,7 +9131,7 @@ dependencies = [ "alloy-rlp", "arbitrary", "bytes", - "derive_more", + "derive_more 1.0.0", "modular-bitfield", "once_cell", "op-alloy-consensus", @@ -9171,7 +9198,7 @@ dependencies = [ "reth-primitives", "revm-primitives", "serde", - "thiserror 2.0.10", + "thiserror 2.0.12", "tokio", ] @@ -9213,7 +9240,7 @@ dependencies = [ "bytes", "c-kzg", "codspeed-criterion-compat", - "derive_more", + "derive_more 1.0.0", "modular-bitfield", "once_cell", "op-alloy-consensus", @@ -9255,7 +9282,7 @@ dependencies = [ "bincode", "byteorder", "bytes", - "derive_more", + "derive_more 1.0.0", "k256", "modular-bitfield", "op-alloy-consensus", @@ -9270,7 +9297,7 @@ dependencies = [ "serde_json", "serde_with", "test-fuzz", - "thiserror 2.0.10", + "thiserror 2.0.12", ] [[package]] @@ -9317,7 +9344,7 @@ dependencies = [ "reth-trie", "reth-trie-db", "revm", - "strum", + "strum 0.26.3", "tempfile", "tokio", "tracing", @@ -9349,8 +9376,8 @@ dependencies = [ "reth-testing-utils", "reth-tokio-util", "reth-tracing", - "rustc-hash 2.1.0", - "thiserror 2.0.10", + "rustc-hash 2.1.1", + "thiserror 2.0.12", "tokio", "tracing", ] @@ -9362,7 +9389,7 @@ dependencies = [ "alloy-primitives", "arbitrary", "assert_matches", - "derive_more", + "derive_more 1.0.0", "modular-bitfield", "proptest", "proptest-arbitrary-interop", @@ -9370,7 +9397,7 @@ dependencies = [ "serde", "serde_json", "test-fuzz", - "thiserror 2.0.10", + "thiserror 2.0.12", "toml", ] @@ -9416,7 +9443,7 @@ dependencies = [ "alloy-signer", "alloy-signer-local", "async-trait", - "derive_more", + "derive_more 1.0.0", "futures", "http", "http-body", @@ -9455,7 +9482,7 @@ dependencies = [ "revm-primitives", "serde", "serde_json", - "thiserror 2.0.10", + "thiserror 2.0.12", "tokio", "tokio-stream", "tower 0.4.13", @@ -9548,7 +9575,7 @@ dependencies = [ "reth-transaction-pool", "serde", "serde_json", - "thiserror 2.0.10", + "thiserror 2.0.12", "tokio", "tokio-util", "tower 0.4.13", @@ -9588,7 +9615,7 @@ dependencies = [ "reth-tokio-util", "reth-transaction-pool", "serde", - "thiserror 2.0.10", + "thiserror 2.0.12", "tokio", "tracing", ] @@ -9647,7 +9674,7 @@ dependencies = [ "alloy-primitives", "alloy-rpc-types-eth", "alloy-sol-types", - "derive_more", + "derive_more 1.0.0", "futures", "itertools 0.13.0", "jsonrpsee-core", @@ -9674,7 +9701,7 @@ dependencies = [ "schnellru", "serde", "serde_json", - "thiserror 2.0.10", + "thiserror 2.0.12", "tokio", "tokio-stream", "tracing", @@ -9709,7 +9736,7 @@ dependencies = [ "reth-errors", "reth-network-api", "serde", - "strum", + "strum 0.26.3", ] [[package]] @@ -9774,7 +9801,7 @@ dependencies = [ "reth-trie", "reth-trie-db", "tempfile", - "thiserror 2.0.10", + "thiserror 2.0.12", "tokio", "tracing", ] @@ -9802,7 +9829,7 @@ dependencies = [ "reth-static-file-types", "reth-testing-utils", "reth-tokio-util", - "thiserror 2.0.10", + "thiserror 2.0.12", "tokio", "tokio-stream", "tracing", @@ -9855,10 +9882,10 @@ version = "1.1.5" dependencies = [ "alloy-primitives", "clap", - "derive_more", + "derive_more 1.0.0", "reth-nippy-jar", "serde", - "strum", + "strum 0.26.3", ] [[package]] @@ -9892,11 +9919,11 @@ dependencies = [ "alloy-eips", "alloy-primitives", "alloy-rlp", - "derive_more", + "derive_more 1.0.0", "reth-fs-util", "reth-primitives-traits", "reth-static-file-types", - "thiserror 2.0.10", + "thiserror 2.0.12", ] [[package]] @@ -9910,7 +9937,7 @@ dependencies = [ "pin-project", "rayon", "reth-metrics", - "thiserror 2.0.10", + "thiserror 2.0.12", "tokio", "tracing", "tracing-futures", @@ -9964,7 +9991,7 @@ dependencies = [ "aquamarine", "assert_matches", "auto_impl", - "bitflags 2.7.0", + "bitflags 2.9.0", "codspeed-criterion-compat", "futures-util", "metrics", @@ -9989,13 +10016,13 @@ dependencies = [ "reth-tracing", "revm-interpreter", "revm-primitives", - "rustc-hash 2.1.0", + "rustc-hash 2.1.1", "schnellru", "serde", "serde_json", "smallvec", "tempfile", - "thiserror 2.0.10", + "thiserror 2.0.12", "tokio", "tokio-stream", "tracing", @@ -10045,7 +10072,7 @@ dependencies = [ "bincode", "bytes", "codspeed-criterion-compat", - "derive_more", + "derive_more 1.0.0", "hash-db", "itertools 0.13.0", "nybbles", @@ -10066,7 +10093,7 @@ dependencies = [ "alloy-consensus", "alloy-primitives", "alloy-rlp", - "derive_more", + "derive_more 1.0.0", "metrics", "proptest", "proptest-arbitrary-interop", @@ -10095,7 +10122,7 @@ dependencies = [ "alloy-primitives", "alloy-rlp", "codspeed-criterion-compat", - "derive_more", + "derive_more 1.0.0", "itertools 0.13.0", "metrics", "proptest", @@ -10110,7 +10137,7 @@ dependencies = [ "reth-trie", "reth-trie-common", "reth-trie-db", - "thiserror 2.0.10", + "thiserror 2.0.12", "tracing", ] @@ -10135,7 +10162,7 @@ dependencies = [ "reth-trie", "reth-trie-common", "smallvec", - "thiserror 2.0.10", + "thiserror 2.0.12", ] [[package]] @@ -10147,9 +10174,9 @@ dependencies = [ [[package]] name = "revm" -version = "19.2.0" +version = "19.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b829dc9d6e62c5a540dfdceb0c4d2217e445bf5f6f5ed3866817e7a9637c019" +checksum = "7b906766b7ba049b515848952b5ae74f363d456e98de2021048a513e442b4f42" dependencies = [ "auto_impl", "cfg-if", @@ -10177,14 +10204,14 @@ dependencies = [ "colorchoice", "revm", "serde_json", - "thiserror 2.0.10", + "thiserror 2.0.12", ] [[package]] name = "revm-interpreter" -version = "15.0.0" +version = "15.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5ff76b50b5a9fa861fbc236fc82ce1afdf58861f65012aea807d679e54630d6" +checksum = "7dcab7ef2064057acfc84731205f4bc77f4ec1b35630800b26ff6a185731c5ab" dependencies = [ "revm-primitives", "serde", @@ -10192,9 +10219,9 @@ dependencies = [ [[package]] name = "revm-precompile" -version = "16.0.0" +version = "16.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6542fb37650dfdbf4b9186769e49c4a8bc1901a3280b2ebf32f915b6c8850f36" +checksum = "6caa1a7ff2cc4a09a263fcf9de99151706f323d30f33d519ed329f017a02b046" dependencies = [ "aurora-engine-modexp", "blst", @@ -10212,15 +10239,15 @@ dependencies = [ [[package]] name = "revm-primitives" -version = "15.1.0" +version = "15.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48faea1ecf2c9f80d9b043bbde0db9da616431faed84c4cfa3dd7393005598e6" +checksum = "f0f987564210317706def498421dfba2ae1af64a8edce82c6102758b48133fcb" dependencies = [ "alloy-eip2930", "alloy-eip7702", "alloy-primitives", "auto_impl", - "bitflags 2.7.0", + "bitflags 2.9.0", "bitvec", "c-kzg", "cfg-if", @@ -10251,15 +10278,14 @@ dependencies = [ [[package]] name = "ring" -version = "0.17.8" +version = "0.17.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" +checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" dependencies = [ "cc", "cfg-if", "getrandom 0.2.15", "libc", - "spin", "untrusted", "windows-sys 0.52.0", ] @@ -10371,15 +10397,15 @@ dependencies = [ "regex", "relative-path", "rustc_version 0.4.1", - "syn 2.0.96", + "syn 2.0.100", "unicode-ident", ] [[package]] name = "ruint" -version = "1.12.4" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5ef8fb1dd8de3870cb8400d51b4c2023854bbafd5431a3ac7e7317243e22d2f" +checksum = "825df406ec217a8116bd7b06897c6cc8f65ffefc15d030ae2c9540acc9ed50b6" dependencies = [ "alloy-rlp", "arbitrary", @@ -10422,9 +10448,9 @@ checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" [[package]] name = "rustc-hash" -version = "2.1.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7fb8039b3032c191086b10f11f319a6e99e1e82889c5cc6046f515c9db1d497" +checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" dependencies = [ "rand 0.8.5", ] @@ -10450,27 +10476,40 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" dependencies = [ - "semver 1.0.24", + "semver 1.0.26", +] + +[[package]] +name = "rustix" +version = "0.38.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" +dependencies = [ + "bitflags 2.9.0", + "errno", + "libc", + "linux-raw-sys 0.4.15", + "windows-sys 0.59.0", ] [[package]] name = "rustix" -version = "0.38.43" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a78891ee6bf2340288408954ac787aa063d8e8817e9f53abb37c695c6d834ef6" +checksum = "f7178faa4b75a30e269c71e61c353ce2748cf3d76f0c44c393f4e60abf49b825" dependencies = [ - "bitflags 2.7.0", + "bitflags 2.9.0", "errno", "libc", - "linux-raw-sys", + "linux-raw-sys 0.9.3", "windows-sys 0.59.0", ] [[package]] name = "rustls" -version = "0.23.20" +version = "0.23.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5065c3f250cbd332cd894be57c40fa52387247659b14a2d6041d121547903b1b" +checksum = "47796c98c480fce5406ef69d1c76378375492c3b0a0de587be0c1d9feb12f395" dependencies = [ "log", "once_cell", @@ -10517,9 +10556,9 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.10.1" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2bf47e6ff922db3825eb750c4e2ff784c6ff8fb9e13046ef6a1d1c5401b0b37" +checksum = "917ce264624a4b4db1c364dcc35bfca9ded014d0a958cd47ad3e960e988ea51c" dependencies = [ "web-time", ] @@ -10564,9 +10603,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.19" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4" +checksum = "eded382c5f5f786b989652c49544c4877d9f015cc22e145a5ea8ea66c2921cd2" [[package]] name = "rusty-fork" @@ -10582,15 +10621,15 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.18" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" +checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" [[package]] name = "ryu-js" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad97d4ce1560a5e27cec89519dc8300d1aa6035b099821261c651486a19e44d5" +checksum = "dd29631678d6fb0903b69223673e122c32e9ae559d0960a38d574695ebc0ea15" [[package]] name = "same-file" @@ -10603,9 +10642,9 @@ dependencies = [ [[package]] name = "scc" -version = "2.3.0" +version = "2.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28e1c91382686d21b5ac7959341fcb9780fa7c03773646995a87c950fa7be640" +checksum = "ea091f6cac2595aa38993f04f4ee692ed43757035c36e67c180b6828356385b1" dependencies = [ "sdd", ] @@ -10644,9 +10683,9 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "sdd" -version = "3.0.5" +version = "3.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "478f121bb72bbf63c52c93011ea1791dca40140dfe13f8336c4c5ac952c33aa9" +checksum = "584e070911c7017da6cb2eb0788d09f43d789029b5877d3e5ecc8acf86ceee21" [[package]] name = "sec1" @@ -10689,7 +10728,7 @@ version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ - "bitflags 2.7.0", + "bitflags 2.9.0", "core-foundation 0.9.4", "core-foundation-sys", "libc", @@ -10703,7 +10742,7 @@ version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "271720403f46ca04f7ba6f55d438f8bd878d6b8ca0a1046e8228c4145bcbb316" dependencies = [ - "bitflags 2.7.0", + "bitflags 2.9.0", "core-foundation 0.10.0", "core-foundation-sys", "libc", @@ -10731,9 +10770,9 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.24" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3cb6eb87a131f756572d7fb904f6e7b68633f09cca868c5df1c4b8d1a694bbba" +checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" dependencies = [ "serde", ] @@ -10761,18 +10800,18 @@ checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" [[package]] name = "serde" -version = "1.0.217" +version = "1.0.219" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02fc4265df13d6fa1d00ecff087228cc0a2b5f3c0e87e258d8b94a156e984c70" +checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" dependencies = [ "serde_derive", ] [[package]] name = "serde_bytes" -version = "0.11.15" +version = "0.11.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "387cc504cb06bb40a96c8e04e951fe01854cf6bc921053c954e4a606d9675c6a" +checksum = "8437fd221bde2d4ca316d61b90e337e9e702b3820b87d63caa9ba6c02bd06d96" dependencies = [ "serde", ] @@ -10789,22 +10828,22 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.217" +version = "1.0.219" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0" +checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] name = "serde_json" -version = "1.0.135" +version = "1.0.140" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b0d7ba2887406110130a978386c4e1befb98c674b4fba677954e4db976630d9" +checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" dependencies = [ - "indexmap 2.7.0", + "indexmap 2.8.0", "itoa", "memchr", "ryu", @@ -10824,13 +10863,13 @@ dependencies = [ [[package]] name = "serde_repr" -version = "0.1.19" +version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" +checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] @@ -10851,7 +10890,7 @@ dependencies = [ "proc-macro2", "quote", "serde", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] @@ -10876,7 +10915,7 @@ dependencies = [ "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.7.0", + "indexmap 2.8.0", "serde", "serde_derive", "serde_json", @@ -10893,7 +10932,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] @@ -10926,7 +10965,7 @@ checksum = "5d69265a08751de7844521fd15003ae0a888e035773ba05695c5c759a6f89eef" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] @@ -11050,9 +11089,9 @@ dependencies = [ [[package]] name = "similar" -version = "2.6.0" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1de1d4f81173b03af4c0cbed3c898f6bff5b870e4a7f5d6f4057d62a7a4b686e" +checksum = "bbbb5d9659141646ae647b42fe094daf6c6192d1620870b449d9557f748b2daa" dependencies = [ "bstr", "unicode-segmentation", @@ -11060,9 +11099,9 @@ dependencies = [ [[package]] name = "similar-asserts" -version = "1.6.0" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfe85670573cd6f0fa97940f26e7e6601213c3b0555246c24234131f88c5709e" +checksum = "b5b441962c817e33508847a22bd82f03a30cff43642dc2fae8b050566121eb9a" dependencies = [ "console", "serde", @@ -11071,13 +11110,13 @@ dependencies = [ [[package]] name = "simple_asn1" -version = "0.6.2" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adc4e5204eb1910f40f9cfa375f6f05b68c3abac4b6fd879c8ff5e7ae8a0a085" +checksum = "297f631f50729c8c99b84667867963997ec0b50f32b2a7dbcab828ef0541e8bb" dependencies = [ "num-bigint", "num-traits", - "thiserror 1.0.69", + "thiserror 2.0.12", "time", ] @@ -11113,9 +11152,9 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.13.2" +version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" +checksum = "7fcf8323ef1faaee30a44a340193b1ac6814fd9b7b4e88e9d4519a3e4abe1cfd" dependencies = [ "arbitrary", "serde", @@ -11183,9 +11222,9 @@ checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" [[package]] name = "stacker" -version = "0.1.17" +version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "799c883d55abdb5e98af1a7b3f23b9b6de8ecada0ecac058672d7635eb48ca7b" +checksum = "d9156ebd5870ef293bfb43f91c7a74528d363ec0d424afe24160ed5a4343d08a" dependencies = [ "cc", "cfg-if", @@ -11230,7 +11269,16 @@ version = "0.26.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" dependencies = [ - "strum_macros", + "strum_macros 0.26.4", +] + +[[package]] +name = "strum" +version = "0.27.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f64def088c51c9510a8579e3c5d67c65349dcf755e5479ad3d010aa6454e2c32" +dependencies = [ + "strum_macros 0.27.1", ] [[package]] @@ -11243,7 +11291,20 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.96", + "syn 2.0.100", +] + +[[package]] +name = "strum_macros" +version = "0.27.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c77a8c5abcaf0f9ce05d62342b7d298c346515365c36b673df4ebe3ced01fde8" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "rustversion", + "syn 2.0.100", ] [[package]] @@ -11273,9 +11334,9 @@ checksum = "734676eb262c623cec13c3155096e08d1f8f29adce39ba17948b18dad1e54142" [[package]] name = "symbolic-common" -version = "12.13.1" +version = "12.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf08b42a6f9469bd8584daee39a1352c8133ccabc5151ccccb15896ef047d99a" +checksum = "66135c8273581acaab470356f808a1c74a707fe7ec24728af019d7247e089e71" dependencies = [ "debugid", "memmap2", @@ -11285,9 +11346,9 @@ dependencies = [ [[package]] name = "symbolic-demangle" -version = "12.13.1" +version = "12.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32f73b5a5bd4da72720c45756a2d11edf110116b87f998bda59b97be8c2c7cf1" +checksum = "42bcacd080282a72e795864660b148392af7babd75691d5ae9a3b77e29c98c77" dependencies = [ "cpp_demangle", "rustc-demangle", @@ -11307,9 +11368,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.96" +version = "2.0.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5d0adab1ae378d7f53bdebc67a39f1f151407ef230f0ce2883572f5d8985c80" +checksum = "b09a44accad81e1ba1cd74a32461ba89dee89095ba17b32f5d03683b1b1fc2a0" dependencies = [ "proc-macro2", "quote", @@ -11318,14 +11379,14 @@ dependencies = [ [[package]] name = "syn-solidity" -version = "0.8.18" +version = "0.8.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31e89d8bf2768d277f40573c83a02a099e96d96dd3104e13ea676194e61ac4b0" +checksum = "d975606bae72d8aad5b07d9342465e123a2cccf53a5a735aedf81ca92a709ecb" dependencies = [ "paste", "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] @@ -11345,7 +11406,7 @@ checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] @@ -11375,15 +11436,14 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "tempfile" -version = "3.15.0" +version = "3.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a8a559c81686f576e8cd0290cd2a24a2a9ad80c98b3478856500fcbd7acd704" +checksum = "488960f40a3fd53d72c2a29a58722561dee8afdd175bd88e3db4677d7b2ba600" dependencies = [ - "cfg-if", "fastrand 2.3.0", - "getrandom 0.2.15", + "getrandom 0.3.1", "once_cell", - "rustix", + "rustix 1.0.2", "windows-sys 0.59.0", ] @@ -11423,7 +11483,7 @@ dependencies = [ "prettyplease", "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] @@ -11456,11 +11516,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.10" +version = "2.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3ac7f54ca534db81081ef1c1e7f6ea8a3ef428d2fc069097c079443d24124d3" +checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" dependencies = [ - "thiserror-impl 2.0.10", + "thiserror-impl 2.0.12", ] [[package]] @@ -11471,18 +11531,18 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] name = "thiserror-impl" -version = "2.0.10" +version = "2.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e9465d30713b56a37ede7185763c3492a91be2f5fa68d958c44e41ab9248beb" +checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] @@ -11537,9 +11597,9 @@ dependencies = [ [[package]] name = "time" -version = "0.3.37" +version = "0.3.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35e7868883861bd0e56d9ac6efcaaca0d6d5d82a2a7ec8209ff492c07cf37b21" +checksum = "dad298b01a40a23aac4580b67e3dbedb7cc8402f3592d7f49469de2ea4aecdd8" dependencies = [ "deranged", "itoa", @@ -11555,15 +11615,15 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" +checksum = "765c97a5b985b7c11d7bc27fa927dc4fe6af3a6dfb021d28deb60d3bf51e76ef" [[package]] name = "time-macros" -version = "0.2.19" +version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2834e6017e3e5e4b9834939793b282bc03b37a3336245fa820e35e233e2a85de" +checksum = "e8093bc3e81c3bc5f7879de09619d06c9a5a5e45ca44dfeeb7225bae38005c5c" dependencies = [ "num-conv", "time-core", @@ -11600,9 +11660,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.8.1" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "022db8904dfa342efe721985167e9fcd16c29b226db4397ed752a761cfce81e8" +checksum = "09b3661f17e86524eccd4371ab0429194e0d7c008abb45f7a7495b1719463c71" dependencies = [ "tinyvec_macros", ] @@ -11615,9 +11675,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.43.0" +version = "1.44.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d61fa4ffa3de412bfea335c6ecff681de2b609ba3c77ef3e00e521813a9ed9e" +checksum = "f382da615b842244d4b8738c82ed1275e6c5dd90c459a30941cd07080b06c91a" dependencies = [ "backtrace", "bytes", @@ -11639,24 +11699,14 @@ checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", -] - -[[package]] -name = "tokio-native-tls" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" -dependencies = [ - "native-tls", - "tokio", + "syn 2.0.100", ] [[package]] name = "tokio-rustls" -version = "0.26.1" +version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f6d0975eaace0cf0fcadee4e4aaa5da15b5c079146f2cffb67c113be122bf37" +checksum = "8e727b36a1a0e8b74c376ac2211e40c2c8af09fb4013c60d910495810f008e9b" dependencies = [ "rustls", "tokio", @@ -11692,9 +11742,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.13" +version = "0.7.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7fcaa8d55a2bdd6b83ace262b016eca0d79ee02818c5c1bcdf0305114081078" +checksum = "6b9590b93e6fcc1739458317cccd391ad3955e2bde8913edf6f95f9e65a8f034" dependencies = [ "bytes", "futures-core", @@ -11707,9 +11757,9 @@ dependencies = [ [[package]] name = "toml" -version = "0.8.19" +version = "0.8.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e" +checksum = "cd87a5cdd6ffab733b2f74bc4fd7ee5fff6634124999ac278c35fc78c6120148" dependencies = [ "serde", "serde_spanned", @@ -11728,11 +11778,11 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.22.22" +version = "0.22.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" +checksum = "17b4795ff5edd201c7cd6dca065ae59972ce77d1b80fa0a84d94950ece7d1474" dependencies = [ - "indexmap 2.7.0", + "indexmap 2.8.0", "serde", "serde_spanned", "toml_datetime", @@ -11783,7 +11833,7 @@ checksum = "403fa3b783d4b626a8ad51d766ab03cb6d2dbfc46b1c5d4448395e6628dc9697" dependencies = [ "async-compression", "base64 0.22.1", - "bitflags 2.7.0", + "bitflags 2.9.0", "bytes", "futures-core", "futures-util", @@ -11850,7 +11900,7 @@ checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] @@ -12004,9 +12054,9 @@ checksum = "6af6ae20167a9ece4bcb41af5b80f8a1f1df981f6391189ce00fd257af04126a" [[package]] name = "typenum" -version = "1.17.0" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" +checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" [[package]] name = "ucd-trie" @@ -12052,9 +12102,9 @@ checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539" [[package]] name = "unicode-ident" -version = "1.0.14" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83" +checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" [[package]] name = "unicode-segmentation" @@ -12151,24 +12201,18 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.11.1" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b913a3b5fe84142e269d63cc62b64319ccaf89b748fc31fe025177f767a756c4" +checksum = "458f7a779bf54acc9f347480ac654f68407d3aab21269a6e3c9f922acd9e2da9" dependencies = [ - "getrandom 0.2.15", + "getrandom 0.3.1", ] [[package]] name = "valuable" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" - -[[package]] -name = "vcpkg" -version = "0.2.15" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" +checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" [[package]] name = "vergen" @@ -12198,14 +12242,14 @@ checksum = "d674d135b4a8c1d7e813e2f8d1c9a58308aee4a680323066025e53132218bd91" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] name = "wait-timeout" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f200f5b12eb75f8c1ed65abd4b2db8a6e1b138a20de009dacee265a2498f3f6" +checksum = "09ac3b126d3914f9849036f826e054cbabdc8519970b8998ddaf3b5bd3c65f11" dependencies = [ "libc", ] @@ -12247,36 +12291,46 @@ version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +[[package]] +name = "wasi" +version = "0.13.3+wasi-0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26816d2e1a4a36a2940b96c5296ce403917633dff8f3440e9b236ed6f6bacad2" +dependencies = [ + "wit-bindgen-rt", +] + [[package]] name = "wasm-bindgen" -version = "0.2.99" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a474f6281d1d70c17ae7aa6a613c87fce69a127e2624002df63dcb39d6cf6396" +checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" dependencies = [ "cfg-if", "once_cell", + "rustversion", "wasm-bindgen-macro", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.99" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f89bb38646b4f81674e8f5c3fb81b562be1fd936d84320f3264486418519c79" +checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" dependencies = [ "bumpalo", "log", "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.49" +version = "0.4.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38176d9b44ea84e9184eff0bc34cc167ed044f816accfe5922e54d84cf48eca2" +checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" dependencies = [ "cfg-if", "js-sys", @@ -12287,9 +12341,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.99" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2cc6181fd9a7492eef6fef1f33961e3695e4579b9872a6f7c83aee556666d4fe" +checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -12297,22 +12351,25 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.99" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30d7a95b763d3c45903ed6c81f156801839e5ee968bb07e534c44df0fcd330c2" +checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.99" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "943aab3fdaaa029a6e0271b35ea10b72b943135afe9bffca82384098ad0e06a6" +checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +dependencies = [ + "unicode-ident", +] [[package]] name = "wasm-streams" @@ -12343,9 +12400,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.76" +version = "0.3.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04dd7223427d52553d3702c004d3b2fe07c148165faa56313cb00211e31c12bc" +checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" dependencies = [ "js-sys", "wasm-bindgen", @@ -12363,9 +12420,9 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "0.26.7" +version = "0.26.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d642ff16b7e79272ae451b7322067cdc17cadf68c23264be9d94a32319efe7e" +checksum = "2210b291f7ea53617fbafcc4939f10914214ec15aace5ba62293a668f322c5c9" dependencies = [ "rustls-pki-types", ] @@ -12407,6 +12464,16 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "windows" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e48a53791691ab099e5e2ad123536d0fff50652600abaf43bbf952894110d0be" +dependencies = [ + "windows-core 0.52.0", + "windows-targets 0.52.6", +] + [[package]] name = "windows" version = "0.57.0" @@ -12457,7 +12524,7 @@ dependencies = [ "windows-implement 0.58.0", "windows-interface 0.58.0", "windows-result 0.2.0", - "windows-strings", + "windows-strings 0.1.0", "windows-targets 0.52.6", ] @@ -12469,7 +12536,7 @@ checksum = "9107ddc059d5b6fbfbffdfa7a7fe3e22a226def0b2608f72e9d552763d3e1ad7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] @@ -12480,7 +12547,7 @@ checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] @@ -12491,7 +12558,7 @@ checksum = "29bee4b38ea3cde66011baa44dba677c432a78593e202392d1e9070cf2a7fca7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] @@ -12502,18 +12569,24 @@ checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] +[[package]] +name = "windows-link" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6dccfd733ce2b1753b03b6d3c65edf020262ea35e20ccdf3e288043e6dd620e3" + [[package]] name = "windows-registry" -version = "0.2.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e400001bb720a623c1c69032f8e3e4cf09984deec740f007dd2b03ec864804b0" +checksum = "4286ad90ddb45071efd1a66dfa43eb02dd0dfbae1545ad6cc3c51cf34d7e8ba3" dependencies = [ - "windows-result 0.2.0", - "windows-strings", - "windows-targets 0.52.6", + "windows-result 0.3.1", + "windows-strings 0.3.1", + "windows-targets 0.53.0", ] [[package]] @@ -12534,6 +12607,15 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "windows-result" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06374efe858fab7e4f881500e6e86ec8bc28f9462c47e5a9941a0142ad86b189" +dependencies = [ + "windows-link", +] + [[package]] name = "windows-strings" version = "0.1.0" @@ -12544,6 +12626,15 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "windows-strings" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87fa48cc5d406560701792be122a10132491cff9d0aeb23583cc2dcafc847319" +dependencies = [ + "windows-link", +] + [[package]] name = "windows-sys" version = "0.48.0" @@ -12595,13 +12686,29 @@ dependencies = [ "windows_aarch64_gnullvm 0.52.6", "windows_aarch64_msvc 0.52.6", "windows_i686_gnu 0.52.6", - "windows_i686_gnullvm", + "windows_i686_gnullvm 0.52.6", "windows_i686_msvc 0.52.6", "windows_x86_64_gnu 0.52.6", "windows_x86_64_gnullvm 0.52.6", "windows_x86_64_msvc 0.52.6", ] +[[package]] +name = "windows-targets" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1e4c7e8ceaaf9cb7d7507c974735728ab453b67ef8f18febdd7c11fe59dca8b" +dependencies = [ + "windows_aarch64_gnullvm 0.53.0", + "windows_aarch64_msvc 0.53.0", + "windows_i686_gnu 0.53.0", + "windows_i686_gnullvm 0.53.0", + "windows_i686_msvc 0.53.0", + "windows_x86_64_gnu 0.53.0", + "windows_x86_64_gnullvm 0.53.0", + "windows_x86_64_msvc 0.53.0", +] + [[package]] name = "windows_aarch64_gnullvm" version = "0.48.5" @@ -12614,6 +12721,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" + [[package]] name = "windows_aarch64_msvc" version = "0.48.5" @@ -12626,6 +12739,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" +[[package]] +name = "windows_aarch64_msvc" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" + [[package]] name = "windows_i686_gnu" version = "0.48.5" @@ -12638,12 +12757,24 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" +[[package]] +name = "windows_i686_gnu" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3" + [[package]] name = "windows_i686_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" +[[package]] +name = "windows_i686_gnullvm" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" + [[package]] name = "windows_i686_msvc" version = "0.48.5" @@ -12656,6 +12787,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" +[[package]] +name = "windows_i686_msvc" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" + [[package]] name = "windows_x86_64_gnu" version = "0.48.5" @@ -12668,6 +12805,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" +[[package]] +name = "windows_x86_64_gnu" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" + [[package]] name = "windows_x86_64_gnullvm" version = "0.48.5" @@ -12680,6 +12823,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" + [[package]] name = "windows_x86_64_msvc" version = "0.48.5" @@ -12692,11 +12841,17 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" +[[package]] +name = "windows_x86_64_msvc" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" + [[package]] name = "winnow" -version = "0.6.22" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39281189af81c07ec09db316b302a3e67bf9bd7cbf6c820b50e35fee9c2fa980" +checksum = "0e97b544156e9bebe1a0ffbc03484fc1ffe3100cbce3ffb17eac35f7cdd7ab36" dependencies = [ "memchr", ] @@ -12711,6 +12866,15 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "wit-bindgen-rt" +version = "0.33.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3268f3d866458b787f390cf61f4bbb563b922d091359f9608842999eaee3943c" +dependencies = [ + "bitflags 2.9.0", +] + [[package]] name = "write16" version = "1.0.0" @@ -12777,7 +12941,7 @@ checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", "synstructure", ] @@ -12787,8 +12951,16 @@ version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" dependencies = [ - "byteorder", - "zerocopy-derive", + "zerocopy-derive 0.7.35", +] + +[[package]] +name = "zerocopy" +version = "0.8.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd97444d05a4328b90e75e503a34bad781f14e28a823ad3557f0750df1ebcbc6" +dependencies = [ + "zerocopy-derive 0.8.23", ] [[package]] @@ -12799,27 +12971,38 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", +] + +[[package]] +name = "zerocopy-derive" +version = "0.8.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6352c01d0edd5db859a63e2605f4ea3183ddbd15e2c4a9e7d32184df75e4f154" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", ] [[package]] name = "zerofrom" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cff3ee08c995dee1859d998dea82f7374f2826091dd9cd47def953cae446cd2e" +checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" dependencies = [ "zerofrom-derive", ] [[package]] name = "zerofrom-derive" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" +checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", "synstructure", ] @@ -12840,7 +13023,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] @@ -12862,32 +13045,32 @@ checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] name = "zstd" -version = "0.13.2" +version = "0.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcf2b778a664581e31e389454a7072dab1647606d44f7feea22cd5abb9c9f3f9" +checksum = "e91ee311a569c327171651566e07972200e76fcfe2242a4fa446149a3881c08a" dependencies = [ "zstd-safe", ] [[package]] name = "zstd-safe" -version = "7.2.1" +version = "7.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54a3ab4db68cea366acc5c897c7b4d4d1b8994a9cd6e6f841f8964566a419059" +checksum = "f3051792fbdc2e1e143244dc28c60f73d8470e93f3f9cbd0ead44da5ed802722" dependencies = [ "zstd-sys", ] [[package]] name = "zstd-sys" -version = "2.0.13+zstd.1.5.6" +version = "2.0.14+zstd.1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38ff0f21cfee8f97d94cef41359e0c89aa6113028ab0291aa8ca0038995a95aa" +checksum = "8fb060d4926e4ac3a3ad15d864e99ceb5f343c6b34f5bd6d81ae6ed417311be5" dependencies = [ "cc", "pkg-config", diff --git a/Cargo.toml b/Cargo.toml index d9f2843d182..24b29fc7697 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -128,6 +128,7 @@ members = [ "crates/trie/parallel/", "crates/trie/sparse", "crates/trie/trie", + "crates/bitfinity-block-confirmation", "examples/beacon-api-sidecar-fetcher/", "examples/beacon-api-sse/", "examples/bsc-p2p", @@ -649,17 +650,20 @@ tracy-client = "0.17.3" # Bitfinity Deps async-channel = "2" +bitfinity-block-confirmation = { path = "crates/bitfinity-block-confirmation" } candid = "0.10" -did = { git = "https://github.com/bitfinity-network/bitfinity-evm-sdk", package = "did", tag = "v0.42.x" } +did = { git = "https://github.com/bitfinity-network/bitfinity-evm-sdk", package = "did", tag = "v0.46.0" } dirs = "5.0.1" -ethereum-json-rpc-client = { git = "https://github.com/bitfinity-network/bitfinity-evm-sdk", package = "ethereum-json-rpc-client", tag = "v0.42.x", features = [ +ethereum-json-rpc-client = { git = "https://github.com/bitfinity-network/bitfinity-evm-sdk", package = "ethereum-json-rpc-client", tag = "v0.46.0", features = [ "reqwest", ] } evm-canister-client = { git = "https://github.com/bitfinity-network/bitfinity-evm-sdk", package = "evm-canister-client", features = [ "ic-agent-client", -], tag = "v0.42.x" } +], tag = "v0.46.0" } ic-cbor = "3" ic-certificate-verification = "3" ic-certification = "3" hex = "0.4" lightspeed_scheduler = { version = "0.60.0", features = ["tracing"] } +anyhow = "1" +jsonrpc-core = "18.0.0" diff --git a/bin/reth/Cargo.toml b/bin/reth/Cargo.toml index ca31910c019..bd8086e38d3 100644 --- a/bin/reth/Cargo.toml +++ b/bin/reth/Cargo.toml @@ -98,9 +98,11 @@ similar-asserts.workspace = true # bitfinity dependencies async-channel.workspace = true +bitfinity-block-confirmation.workspace = true candid.workspace = true did.workspace = true evm-canister-client = { workspace = true, features = ["ic-agent-client"] } +hex.workspace = true lightspeed_scheduler = { workspace = true, features = ["tracing"] } # rlp = { workspace = true } @@ -108,6 +110,7 @@ lightspeed_scheduler = { workspace = true, features = ["tracing"] } tempfile.workspace = true # bitfinity dev dependencies +alloy-genesis.workspace = true async-trait = { workspace = true } dirs.workspace = true ethereum-json-rpc-client = { workspace = true, features = ["reqwest"] } diff --git a/bin/reth/src/commands/bitfinity_import.rs b/bin/reth/src/commands/bitfinity_import.rs index 9eb220dfb5e..decd1beff19 100644 --- a/bin/reth/src/commands/bitfinity_import.rs +++ b/bin/reth/src/commands/bitfinity_import.rs @@ -1,6 +1,8 @@ //! Command that initializes the node by importing a chain from a remote EVM node. use crate::{dirs::DataDirPath, version::SHORT_VERSION}; +use bitfinity_block_confirmation::BitfinityBlockConfirmation; +use eyre::eyre; use futures::{Stream, StreamExt}; use lightspeed_scheduler::{job::Job, scheduler::Scheduler, JobExecutor}; use reth_beacon_consensus::EthBeaconConsensus; @@ -21,10 +23,9 @@ use reth_node_core::{args::BitfinityImportArgs, dirs::ChainPath}; use reth_node_ethereum::{EthExecutorProvider, EthereumNode}; use reth_node_events::node::NodeEvent; use reth_primitives::{EthPrimitives, SealedHeader}; -use reth_provider::providers::BlockchainProvider; use reth_provider::{ - BlockNumReader, CanonChainTracker, ChainSpecProvider, DatabaseProviderFactory, HeaderProvider, - ProviderError, ProviderFactory, + providers::BlockchainProvider, BlockHashReader, BlockNumReader, CanonChainTracker, + ChainSpecProvider, DatabaseProviderFactory, HeaderProvider, ProviderError, ProviderFactory, }; use reth_prune::PruneModes; use reth_stages::{ @@ -35,7 +36,7 @@ use reth_stages::{ use reth_static_file::StaticFileProducer; use std::{path::PathBuf, sync::Arc, time::Duration}; use tokio::sync::watch; -use tracing::{debug, info}; +use tracing::{debug, error, info, warn}; /// Syncs RLP encoded blocks from a file. #[derive(Clone)] @@ -57,7 +58,8 @@ pub struct BitfinityImportCommand { blockchain_provider: BlockchainProvider>>, } -/// Manually implement `Debug` for `ImportCommand` because `BlockchainProvider` doesn't implement it. +/// Manually implement `Debug` for `ImportCommand` because `BlockchainProvider` doesn't implement +/// it. impl std::fmt::Debug for BitfinityImportCommand { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { f.debug_struct("ImportCommand") @@ -128,6 +130,16 @@ impl BitfinityImportCommand { Ok((job_executor, job_handle)) } + fn rpc_config(&self) -> RpcClientConfig { + RpcClientConfig { + primary_url: self.bitfinity.rpc_url.clone(), + backup_url: self.bitfinity.backup_rpc_url.clone(), + max_retries: self.bitfinity.max_retries, + retry_delay: Duration::from_secs(self.bitfinity.retry_delay_secs), + max_block_age_secs: Duration::from_secs(self.bitfinity.max_block_age_secs), + } + } + /// Execute the import job. async fn single_execution(&self) -> eyre::Result<()> { let consensus = Arc::new(EthBeaconConsensus::new(self.chain.clone())); @@ -135,21 +147,14 @@ impl BitfinityImportCommand { let provider_factory = self.provider_factory.clone(); // Get the local block number - let start_block = provider_factory.provider()?.last_block_number()? + 1; + let last_imported_block = provider_factory.provider()?.last_block_number()?; + let start_block = last_imported_block + 1; debug!(target: "reth::cli - BitfinityImportCommand", "Starting block: {}", start_block); - let rpc_config = RpcClientConfig { - primary_url: self.bitfinity.rpc_url.clone(), - backup_url: self.bitfinity.backup_rpc_url.clone(), - max_retries: self.bitfinity.max_retries, - retry_delay: Duration::from_secs(self.bitfinity.retry_delay_secs), - max_block_age_secs: Duration::from_secs(self.bitfinity.max_block_age_secs), - }; - let remote_client = Arc::new( BitfinityEvmClient::from_rpc_url( - rpc_config, + self.rpc_config(), start_block, self.bitfinity.end_block, self.bitfinity.batch_size, @@ -164,32 +169,120 @@ impl BitfinityImportCommand { ); // override the tip - let tip = if let Some(tip) = remote_client.tip() { - tip + let safe_block = if let Some(safe_block) = remote_client.safe_block() { + self.import_to_block( + safe_block, + remote_client.clone(), + provider_factory.clone(), + consensus.clone(), + ) + .await?; + + safe_block } else { - debug!(target: "reth::cli - BitfinityImportCommand", "No tip found, skipping import"); - return Ok(()); + // Safe block is not in the client, meaning that the last block in the provider is the + // safe one. + let safe_block_number = remote_client.safe_block_number(); + match safe_block_number == last_imported_block { + true => match provider_factory.provider()?.block_hash(safe_block_number)? { + Some(v) => v, + None => { + error!(target: "reth::cli - BitfinityImportCommand", "Hash of latest safe block ({}) is not in the blockchain state", safe_block_number); + return Err(eyre!("Hash of latest safe block ({}) is not in the blockchain state", safe_block_number)); + } + }, + false => { + error!(target: "reth::cli - BitfinityImportCommand", "Last imported block ({}) is not the last safe block ({})", last_imported_block, safe_block_number); + return Err(eyre!("Last imported block ({}) is not the last safe block ({})", last_imported_block, safe_block_number)); + } + } }; + if self.bitfinity.confirm_unsafe_blocks { + let Some(mut tip) = remote_client.tip() else { + warn!(target: "reth::cli - BitfinityImportCommand", "Cannot find block for confirmation. Skipping."); + return Ok(()); + }; + + while tip != safe_block { + match self + .confirm_block(&tip, remote_client.clone(), provider_factory.clone()) + .await + { + Ok(_) => { + self.import_to_block(tip, remote_client, provider_factory, consensus) + .await?; + break; + } + + Err(err) => { + warn!(target: "reth::cli - BitfinityImportCommand", "Failed to confirm block {}: {}", tip, err); + + if let Some(parent) = remote_client.parent(&tip) { + tip = parent; + } else { + warn!(target: "reth::cli - BitfinityImportCommand", "Cannot find a parent block for {}", tip); + break; + } + } + } + } + } + + info!(target: "reth::cli - BitfinityImportCommand", "Finishing up"); + Ok(()) + } + + async fn confirm_block( + &self, + block: &B256, + remote_client: Arc, + provider_factory: ProviderFactory>>, + ) -> eyre::Result<()> { + debug!(target: "reth::cli - BitfinityImportCommand", "Confirming block {block}"); + + let config = self.rpc_config(); + let client = BitfinityEvmClient::client(config).await?; + + let confirmer = BitfinityBlockConfirmation::new(client, provider_factory); + let blocks = remote_client.unsafe_blocks(block)?; + + confirmer.confirm_blocks(&blocks).await + } + + /// Imports the blocks up to the given block hash of the `remove_client`. + async fn import_to_block( + &self, + new_tip: B256, + remote_client: Arc, + provider_factory: ProviderFactory>>, + consensus: Arc>, + ) -> eyre::Result<()> { info!(target: "reth::cli - BitfinityImportCommand", "Chain blocks imported"); + let block_index = remote_client + .get_block_number(&new_tip) + .ok_or_else(|| eyre::eyre!("block not found"))?; + let (mut pipeline, _events) = self.build_import_pipeline( &self.config, provider_factory.clone(), &consensus, remote_client, StaticFileProducer::new(provider_factory.clone(), PruneModes::default()), + block_index, )?; // override the tip - pipeline.set_tip(tip); - debug!(target: "reth::cli - BitfinityImportCommand", ?tip, "Tip manually set"); + pipeline.set_tip(new_tip); + debug!(target: "reth::cli - BitfinityImportCommand", ?new_tip, "Tip manually set"); // Run pipeline debug!(target: "reth::cli - BitfinityImportCommand", "Starting sync pipeline"); pipeline.run().await?; - info!(target: "reth::cli - BitfinityImportCommand", "Finishing up"); + debug!(target: "reth::cli - BitfinityImportCommand", "Sync process complete"); + Ok(()) } @@ -221,6 +314,7 @@ impl BitfinityImportCommand { static_file_producer: StaticFileProducer< ProviderFactory>>, >, + max_block: u64, ) -> eyre::Result<(TypedPipeline, impl Stream>)> where C: Consensus + 'static, @@ -240,7 +334,6 @@ impl BitfinityImportCommand { let (tip_tx, tip_rx) = watch::channel(B256::ZERO); let executor = EthExecutorProvider::ethereum(provider_factory.chain_spec()); - let max_block = remote_client.max_block().unwrap_or(0); let pipeline = Pipeline::>>::builder() .with_tip_sender(tip_tx) diff --git a/bin/reth/tests/commands/bitfinity_import_it.rs b/bin/reth/tests/commands/bitfinity_import_it.rs index 50e9a692038..0892934d5a4 100644 --- a/bin/reth/tests/commands/bitfinity_import_it.rs +++ b/bin/reth/tests/commands/bitfinity_import_it.rs @@ -1,20 +1,28 @@ //! //! Integration tests for the bitfinity import command. //! These tests requires a running EVM node or EVM block extractor node at the specified URL. -//! -use super::bitfinity_node_it::{ - eth_server::{EthImpl, EthServer}, - mock_eth_server_start, +use crate::commands::bitfinity_node_it::eth_server::BfEvmServer; + +use super::{ + bitfinity_node_it::{ + eth_server::{EthImpl, EthServer}, + mock_eth_server_start, mock_multi_server_start, + }, + utils::*, }; -use super::utils::*; use alloy_eips::BlockNumberOrTag; +use did::H256; use ethereum_json_rpc_client::{reqwest::ReqwestClient, EthJsonRpcClient}; use reth::commands::bitfinity_import::BitfinityImportCommand; use reth_provider::{BlockNumReader, BlockReader, BlockReaderIdExt}; +use reth_trie::StateRoot; +use reth_trie_db::DatabaseStateRoot; +use revm_primitives::{Address, U256}; +use std::sync::Arc; use std::time::Duration; #[tokio::test] @@ -196,6 +204,10 @@ async fn bitfinity_test_should_import_blocks_when_evm_is_enabled_and_check_evm_s let (_temp_dir, mut import_data) = bitfinity_import_config_data(&evm_datasource_url, None, None).await.unwrap(); + // + // Wait for enough blocks to be minted + tokio::time::sleep(Duration::from_secs(1)).await; + import_data.bitfinity_args.end_block = Some(10); import_data.bitfinity_args.batch_size = 5; import_data.bitfinity_args.max_fetch_blocks = 10; @@ -238,6 +250,9 @@ async fn bitfinity_test_should_import_block_when_evm_is_enabled_and_check_evm_st let (_temp_dir, mut import_data) = bitfinity_import_config_data(&evm_datasource_url, None, None).await.unwrap(); + // Wait for enough blocks to be minted + tokio::time::sleep(Duration::from_secs(1)).await; + import_data.bitfinity_args.end_block = Some(10); import_data.bitfinity_args.batch_size = 5; import_data.bitfinity_args.max_fetch_blocks = 10; @@ -306,3 +321,200 @@ async fn bitfinity_test_should_not_import_block_when_evm_is_staging_and_check_ev let last_block = provider.last_block_number().unwrap(); assert_eq!(last_block, 0, "Expected no blocks to be imported when EVM is staging"); } + +#[tokio::test] +async fn bitfinity_test_should_import_data_to_safe_block() { + // Arrange + let _log = init_logs(); + + const UNSAFE_BLOCKS: u64 = 3; + const MAX_BLOCKS: u64 = 10; + + let mut eth_server = EthImpl::new_with_max_block(MAX_BLOCKS); + let bf_evm_server = eth_server.bf_impl(UNSAFE_BLOCKS); + + let (_server, eth_server_address) = mock_multi_server_start([ + EthServer::into_rpc(eth_server).into(), + BfEvmServer::into_rpc(bf_evm_server).into(), + ]) + .await; + let evm_datasource_url = format!("http://{}", eth_server_address); + + // Wait for blocks to be minted + tokio::time::sleep(Duration::from_secs(1)).await; + + // Act + let (_temp_dir, mut import_data) = + bitfinity_import_config_data(&evm_datasource_url, None, None).await.unwrap(); + + import_data.bitfinity_args.max_fetch_blocks = 100; + + let import = BitfinityImportCommand::new( + None, + import_data.data_dir, + import_data.chain, + import_data.bitfinity_args, + import_data.provider_factory.clone(), + import_data.blockchain_db, + ); + let (job_executor, _import_handle) = import.schedule_execution().await.unwrap(); + + let safe_block = MAX_BLOCKS - UNSAFE_BLOCKS; + + // Allow some time for potential imports + tokio::time::sleep(Duration::from_secs(2)).await; + job_executor.stop(true).await.unwrap(); + + // Assert + let provider = import_data.provider_factory.provider().unwrap(); + let last_imported_block = provider.last_block_number().unwrap(); + assert_eq!(last_imported_block, safe_block); +} + +#[tokio::test] +async fn bitfinity_test_should_confirm_and_import_unsafe_blocks() { + // Arrange + let _log = init_logs(); + + const UNSAFE_BLOCKS: u64 = 3; + const MAX_BLOCKS: u64 = 10; + + let genesis_balances = + vec![(Address::from_slice(&[0u8; 20]).into(), U256::from(1_000_000_u64))]; + + let state_root = compute_state_root(&genesis_balances); + + let mut eth_server = EthImpl::new_with_max_block(MAX_BLOCKS) + .with_genesis_balances(genesis_balances) + .with_state_root(state_root.into()); + + let bf_evm_server = eth_server.bf_impl(UNSAFE_BLOCKS); + + let (_server, eth_server_address) = mock_multi_server_start([ + EthServer::into_rpc(eth_server).into(), + BfEvmServer::into_rpc(bf_evm_server).into(), + ]) + .await; + let evm_datasource_url = format!("http://{}", eth_server_address); + + // Wait for blocks to be minted + tokio::time::sleep(Duration::from_secs(1)).await; + + // Act + let (_temp_dir, mut import_data) = + bitfinity_import_config_data(&evm_datasource_url, None, None).await.unwrap(); + + import_data.bitfinity_args.max_fetch_blocks = 100; + import_data.bitfinity_args.confirm_unsafe_blocks = true; + + let import = BitfinityImportCommand::new( + None, + import_data.data_dir, + import_data.chain, + import_data.bitfinity_args, + import_data.provider_factory.clone(), + import_data.blockchain_db, + ); + let (job_executor, _import_handle) = import.schedule_execution().await.unwrap(); + + // Allow some time for potential imports + tokio::time::sleep(Duration::from_secs(2)).await; + job_executor.stop(true).await.unwrap(); + + // Assert + let provider = import_data.provider_factory.provider().unwrap(); + let last_imported_block = provider.last_block_number().unwrap(); + assert_eq!(last_imported_block, MAX_BLOCKS); +} + +#[tokio::test] +async fn bitfinity_test_should_import_until_last_confirmed() { + // Arrange + let _log = init_logs(); + + const UNSAFE_BLOCKS: u64 = 3; + const MAX_BLOCKS: u64 = 10; + const CONFIRM_UNTIL: u64 = 8; + let genesis_balances = + vec![(Address::from_slice(&[0u8; 20]).into(), U256::from(1_000_000_u64))]; + + let state_root = compute_state_root(&genesis_balances); + + let mut eth_server = EthImpl::new_with_max_block(MAX_BLOCKS) + .with_genesis_balances(genesis_balances) + .with_state_root(state_root.into()); + let mut bf_evm_server = eth_server.bf_impl(UNSAFE_BLOCKS); + bf_evm_server.confirm_until = CONFIRM_UNTIL; + + let (_server, eth_server_address) = mock_multi_server_start([ + EthServer::into_rpc(eth_server).into(), + BfEvmServer::into_rpc(bf_evm_server).into(), + ]) + .await; + let evm_datasource_url = format!("http://{}", eth_server_address); + + // Wait for blocks to be minted + tokio::time::sleep(Duration::from_secs(1)).await; + + // Act + let (_temp_dir, mut import_data) = + bitfinity_import_config_data(&evm_datasource_url, None, None).await.unwrap(); + + import_data.bitfinity_args.max_fetch_blocks = 100; + import_data.bitfinity_args.confirm_unsafe_blocks = true; + + let import = BitfinityImportCommand::new( + None, + import_data.data_dir, + import_data.chain, + import_data.bitfinity_args, + import_data.provider_factory.clone(), + import_data.blockchain_db, + ); + let (job_executor, _import_handle) = import.schedule_execution().await.unwrap(); + + // Allow some time for potential imports + tokio::time::sleep(Duration::from_secs(2)).await; + job_executor.stop(true).await.unwrap(); + + // Assert + let provider = import_data.provider_factory.provider().unwrap(); + let last_imported_block = provider.last_block_number().unwrap(); + assert_eq!(last_imported_block, CONFIRM_UNTIL); +} + +/// Compute state root for genesis Balances +fn compute_state_root(genesis_balances: &[(Address, U256)]) -> H256 { + use alloy_genesis::Genesis; + use alloy_genesis::GenesisAccount; + use reth_chainspec::ChainSpec; + use reth_db_common::init::init_genesis; + use reth_provider::test_utils::create_test_provider_factory_with_chain_spec; + + let chain_spec = Arc::new(ChainSpec { + chain: 1_u64.into(), + genesis: Genesis { + alloc: genesis_balances + .iter() + .map(|(address, balance)| { + (*address, GenesisAccount { balance: *balance, ..Default::default() }) + }) + .collect(), + ..Default::default() + }, + hardforks: Default::default(), + genesis_hash: Default::default(), + paris_block_and_final_difficulty: None, + deposit_contract: None, + ..Default::default() + }); + + let factory = create_test_provider_factory_with_chain_spec(chain_spec); + init_genesis(&factory).unwrap(); + + let provider = factory.provider().unwrap(); + + let tx = provider.tx_ref(); + + StateRoot::from_tx(tx).root().unwrap().into() +} diff --git a/bin/reth/tests/commands/bitfinity_node_it.rs b/bin/reth/tests/commands/bitfinity_node_it.rs index 62eb65c6a3d..a848a35aa60 100644 --- a/bin/reth/tests/commands/bitfinity_node_it.rs +++ b/bin/reth/tests/commands/bitfinity_node_it.rs @@ -1,12 +1,10 @@ //! //! Integration tests for the bitfinity node command. -//! use super::utils::*; use did::keccak; use eth_server::{EthImpl, EthServer}; -use ethereum_json_rpc_client::CertifiedResult; -use ethereum_json_rpc_client::{reqwest::ReqwestClient, EthJsonRpcClient}; +use ethereum_json_rpc_client::{reqwest::ReqwestClient, CertifiedResult, EthJsonRpcClient}; use jsonrpsee::{ server::{Server, ServerHandle}, Methods, RpcModule, @@ -17,24 +15,22 @@ use reth::{ dirs::{DataDirPath, MaybePlatformPath}, }; use reth_consensus::FullConsensus; -use reth_db::DatabaseEnv; -use reth_db::{init_db, test_utils::tempdir_path}; +use reth_db::{init_db, test_utils::tempdir_path, DatabaseEnv}; use reth_network::NetworkHandle; use reth_node_api::{FullNodeTypesAdapter, NodeTypesWithDBAdapter}; -use reth_node_builder::components::Components; -use reth_node_builder::rpc::RpcAddOns; -use reth_node_builder::{NodeAdapter, NodeBuilder, NodeConfig, NodeHandle}; -use reth_node_ethereum::node::EthereumEngineValidatorBuilder; +use reth_node_builder::{ + components::Components, rpc::RpcAddOns, NodeAdapter, NodeBuilder, NodeConfig, NodeHandle, +}; use reth_node_ethereum::{ - BasicBlockExecutorProvider, EthEvmConfig, EthExecutionStrategyFactory, EthereumNode, + node::EthereumEngineValidatorBuilder, BasicBlockExecutorProvider, EthEvmConfig, + EthExecutionStrategyFactory, EthereumNode, }; use reth_provider::providers::BlockchainProvider; use reth_rpc::EthApi; use reth_tasks::TaskManager; -use reth_transaction_pool::blobstore::DiskFileBlobStore; use reth_transaction_pool::{ - CoinbaseTipOrdering, EthPooledTransaction, EthTransactionValidator, Pool, - TransactionValidationTaskExecutor, + blobstore::DiskFileBlobStore, CoinbaseTipOrdering, EthPooledTransaction, + EthTransactionValidator, Pool, TransactionValidationTaskExecutor, }; use revm_primitives::{hex, Address, U256}; use std::{net::SocketAddr, str::FromStr, sync::Arc}; @@ -122,7 +118,7 @@ async fn bitfinity_test_node_forward_eth_get_genesis_balances() { // Arrange let _log = init_logs(); - let eth_server = EthImpl::with_genesis_balances(vec![ + let eth_server = EthImpl::new().with_genesis_balances(vec![ (Address::from_slice(&[1u8; 20]), U256::from(10)), (Address::from_slice(&[2u8; 20]), U256::from(20)), (Address::from_slice(&[3u8; 20]), U256::from(30)), @@ -160,7 +156,7 @@ async fn bitfinity_test_node_forward_ic_get_genesis_balances() { // Arrange let _log = init_logs(); - let eth_server = EthImpl::with_genesis_balances(vec![ + let eth_server = EthImpl::new().with_genesis_balances(vec![ (Address::from_slice(&[1u8; 20]), U256::from(10)), (Address::from_slice(&[2u8; 20]), U256::from(20)), (Address::from_slice(&[3u8; 20]), U256::from(30)), @@ -347,11 +343,21 @@ pub async fn start_reth_node( /// Start a local Eth server. /// Reth requests will be forwarded to this server pub async fn mock_eth_server_start(methods: impl Into) -> (ServerHandle, SocketAddr) { + mock_multi_server_start([methods.into()]).await +} + +/// Starts a local mock server that combines methods from different sources. +pub async fn mock_multi_server_start( + methods: impl IntoIterator, +) -> (ServerHandle, SocketAddr) { let addr = SocketAddr::from(([127, 0, 0, 1], 0)); let server = Server::builder().build(addr).await.unwrap(); let mut module = RpcModule::new(()); - module.merge(methods).unwrap(); + + for method_group in methods { + module.merge(method_group).unwrap(); + } let server_address = server.local_addr().unwrap(); let handle = server.start(module); @@ -362,13 +368,14 @@ pub async fn mock_eth_server_start(methods: impl Into) -> (ServerHandle /// Eth server mock for local testing pub mod eth_server { - use std::sync::Arc; + use std::sync::{atomic::Ordering, Arc}; use alloy_consensus::constants::{EMPTY_RECEIPTS, EMPTY_TRANSACTIONS}; use alloy_rlp::Bytes; - use did::{keccak, BlockNumber, H256, U64}; + use did::{keccak, BlockConfirmationData, BlockConfirmationResult, BlockNumber, H256, U64}; use ethereum_json_rpc_client::CertifiedResult; use jsonrpsee::{core::RpcResult, proc_macros::rpc}; + use reth_trie::EMPTY_ROOT_HASH; use revm_primitives::{Address, B256, U256}; @@ -401,7 +408,7 @@ pub mod eth_server { async fn get_block_by_number( &self, number: BlockNumber, - ) -> RpcResult>; + ) -> RpcResult>>; /// Returns the chain ID #[method(name = "chainId")] @@ -416,6 +423,16 @@ pub mod eth_server { async fn get_evm_global_state(&self) -> RpcResult; } + #[rpc(server, namespace = "ic")] + trait BfEvm { + /// Send block confirmation request. + #[method(name = "sendConfirmBlock")] + async fn confirm_block( + &self, + data: BlockConfirmationData, + ) -> RpcResult; + } + /// Eth server implementation for local testing #[derive(Debug)] pub struct EthImpl { @@ -434,11 +451,20 @@ pub mod eth_server { block_task: Option>, /// Genesis Balances pub genesis_balances: Vec<(Address, U256)>, + /// Unsafe blocks count + pub unsafe_blocks_count: u64, + /// Custom state root hash + pub custom_state_root: H256, } impl EthImpl { /// Create a new Eth server implementation pub fn new() -> Self { + Self::new_with_max_block(u64::MAX) + } + + /// Creates a new Eth server implementation that will mint blocks until `max_block` number + pub fn new_with_max_block(max_block: u64) -> Self { // Fake block counter let current_block = Arc::new(std::sync::atomic::AtomicU64::new(1)); let block_counter = current_block.clone(); @@ -447,7 +473,12 @@ pub mod eth_server { let mut interval = tokio::time::interval(std::time::Duration::from_millis(100)); loop { interval.tick().await; - block_counter.fetch_add(1, std::sync::atomic::Ordering::Relaxed); + let block = block_counter.fetch_add(1, std::sync::atomic::Ordering::Relaxed); + tracing::info!("Minted block {}", block + 1); + + if block + 1 >= max_block { + break; + } } })); @@ -459,6 +490,8 @@ pub mod eth_server { state: did::evm_state::EvmGlobalState::Staging { max_block_number: None }, block_task, genesis_balances: vec![], + unsafe_blocks_count: 0, + custom_state_root: EMPTY_ROOT_HASH.into(), } } @@ -470,10 +503,21 @@ pub mod eth_server { } /// Set the genesis balances - pub fn with_genesis_balances(balances: Vec<(Address, U256)>) -> Self { - let mut instance = Self::new(); - instance.genesis_balances = balances; - instance + pub fn with_genesis_balances(mut self, balances: Vec<(Address, U256)>) -> Self { + self.genesis_balances = balances; + self + } + + /// Set a custom state root hash + pub fn with_state_root(mut self, state_root: did::H256) -> Self { + self.custom_state_root = state_root; + self + } + + /// Returns an implementation of Bitfinity EVM canister API + pub fn bf_impl(&mut self, unsafe_blocks_count: u64) -> BfEvmImpl { + self.unsafe_blocks_count = unsafe_blocks_count; + BfEvmImpl { confirm_until: u64::MAX } } } @@ -497,24 +541,28 @@ pub mod eth_server { async fn get_block_by_number( &self, number: BlockNumber, - ) -> RpcResult> { + ) -> RpcResult>> { + let current_block = self.current_block.load(Ordering::Relaxed); let block_num = match number { - BlockNumber::Latest | BlockNumber::Finalized | BlockNumber::Safe => { - self.current_block.load(std::sync::atomic::Ordering::Relaxed) - } + BlockNumber::Safe => current_block - self.unsafe_blocks_count, + BlockNumber::Latest | BlockNumber::Finalized => current_block, BlockNumber::Earliest => 0, BlockNumber::Pending => { - self.current_block.fetch_add(1, std::sync::atomic::Ordering::Relaxed) + self.current_block.load(std::sync::atomic::Ordering::Relaxed) + 1 } BlockNumber::Number(num) => num.as_u64(), }; + if block_num > current_block { + return Ok(None); + } + let mut block = did::Block { number: block_num.into(), timestamp: did::U256::from(1234567890_u64 + block_num), gas_limit: did::U256::from(30_000_000_u64), base_fee_per_gas: Some(did::U256::from(7_u64)), - state_root: EMPTY_ROOT_HASH.into(), + state_root: self.custom_state_root.clone(), receipts_root: EMPTY_RECEIPTS.into(), transactions_root: EMPTY_TRANSACTIONS.into(), parent_hash: if block_num == 0 { @@ -522,13 +570,14 @@ pub mod eth_server { } else { self.get_block_by_number(BlockNumber::Number(U64::from(block_num - 1))) .await? + .unwrap() .hash }, ..Default::default() }; block.hash = keccak::keccak_hash(&block.header_rlp_encoded()); - Ok(block) + Ok(Some(block)) } async fn chain_id(&self) -> RpcResult { @@ -578,4 +627,25 @@ pub mod eth_server { }) } } + + /// Mock implementation of Bitfinity EVM canister API + #[derive(Debug)] + pub struct BfEvmImpl { + /// Will allow confirming block until this block number + pub confirm_until: u64, + } + + #[async_trait::async_trait] + impl BfEvmServer for BfEvmImpl { + async fn confirm_block( + &self, + data: BlockConfirmationData, + ) -> RpcResult { + if data.block_number > self.confirm_until { + Ok(BlockConfirmationResult::NotConfirmed) + } else { + Ok(BlockConfirmationResult::Confirmed) + } + } + } } diff --git a/bin/reth/tests/commands/utils.rs b/bin/reth/tests/commands/utils.rs index 94de57b61a1..532a5e3615e 100644 --- a/bin/reth/tests/commands/utils.rs +++ b/bin/reth/tests/commands/utils.rs @@ -50,7 +50,7 @@ pub fn init_logs() -> eyre::Result> { let mut tracer = RethTracer::new(); let stdout = LayerInfo::new( LogFormat::Terminal, - "info".to_string(), + "debug".to_string(), String::new(), Some("always".to_string()), ); @@ -172,6 +172,7 @@ pub async fn bitfinity_import_config_data( retry_delay_secs: 3, check_evm_state_before_importing: false, max_block_age_secs: 600, + confirm_unsafe_blocks: false, }; Ok(( diff --git a/crates/bitfinity-block-confirmation/Cargo.toml b/crates/bitfinity-block-confirmation/Cargo.toml new file mode 100644 index 00000000000..f5b564a33df --- /dev/null +++ b/crates/bitfinity-block-confirmation/Cargo.toml @@ -0,0 +1,54 @@ +[package] +name = "bitfinity-block-confirmation" +version.workspace = true +edition.workspace = true +rust-version.workspace = true +license.workspace = true +homepage.workspace = true +repository.workspace = true + +[lints] +workspace = true + +[dependencies] +alloy-consensus.workspace = true +alloy-primitives.workspace = true +async-trait.workspace = true +did.workspace = true +evm-canister-client.workspace = true +ethereum-json-rpc-client = { workspace = true, features = ["reqwest"] } +eyre.workspace = true +itertools.workspace = true +reth-chain-state.workspace = true +reth-chainspec.workspace = true +reth-db.workspace = true +reth-engine-tree.workspace = true +reth-evm.workspace = true +reth-evm-ethereum.workspace = true +reth-node-types.workspace = true +reth-provider = { workspace = true, features = ["test-utils"] } +reth-primitives.workspace = true +reth-primitives-traits.workspace = true +reth-revm.workspace = true +reth-trie.workspace = true +reth-trie-db.workspace = true +tracing.workspace = true +reth-rpc-eth-types.workspace = true + +[dev-dependencies] +alloy-consensus.workspace = true +alloy-genesis.workspace = true +alloy-signer.workspace = true +alloy-signer-local.workspace = true +async-trait.workspace = true +candid.workspace = true +reth-db-common.workspace = true +tokio.workspace = true +serde.workspace = true +tempfile.workspace = true +reth-testing-utils.workspace = true +reth-ethereum-engine-primitives.workspace = true +anyhow.workspace = true +jsonrpc-core.workspace = true +serde_json.workspace = true +alloy-network.workspace = true diff --git a/crates/bitfinity-block-confirmation/src/lib.rs b/crates/bitfinity-block-confirmation/src/lib.rs new file mode 100644 index 00000000000..9db4f96bf08 --- /dev/null +++ b/crates/bitfinity-block-confirmation/src/lib.rs @@ -0,0 +1,905 @@ +//! Bitfinity block validator. +use alloy_primitives::TxKind; +use did::{BlockConfirmationData, BlockConfirmationResult}; +use ethereum_json_rpc_client::{Client, EthJsonRpcClient}; + +use eyre::{eyre, Ok}; +use reth_chain_state::MemoryOverlayStateProvider; +use reth_evm::{ + env::EvmEnv, + execute::{BasicBatchExecutor, BatchExecutor}, + ConfigureEvm, ConfigureEvmEnv, +}; +use reth_evm_ethereum::{ + execute::{EthExecutionStrategy, EthExecutionStrategyFactory}, + EthEvmConfig, +}; +use reth_node_types::NodeTypesWithDB; +use reth_primitives::{Block, BlockWithSenders}; +use tracing::{debug, error, info, trace}; + +use reth_provider::{ + providers::ProviderNodeTypes, ChainSpecProvider as _, ExecutionOutcome, ProviderFactory, +}; +use reth_revm::db::states::bundle_state::BundleRetention; + +use reth_revm::{ + batch::BlockBatchRecord, + database::StateProviderDatabase, + primitives::{EnvWithHandlerCfg, TxEnv}, + DatabaseCommit, StateBuilder, +}; +use reth_rpc_eth_types::{cache::db::StateProviderTraitObjWrapper, StateCacheDb}; +use reth_trie::{HashedPostState, KeccakKeyHasher, StateRoot}; +use reth_trie_db::DatabaseStateRoot; + +/// Block confirmation for Bitfinity. +/// +/// Uses custom Bitfinity logic to prove that the block was executed and sends confirmation request +/// to the EVM canister. +#[derive(Clone)] +#[allow(missing_debug_implementations)] +pub struct BitfinityBlockConfirmation +where + C: Client, + DB: NodeTypesWithDB + Clone, +{ + evm_client: EthJsonRpcClient, + provider_factory: ProviderFactory, +} + +impl BitfinityBlockConfirmation +where + C: Client, + DB: NodeTypesWithDB + ProviderNodeTypes + Clone, +{ + /// Create a new [`BitfinityBlockConfirmation`]. + pub const fn new( + evm_client: EthJsonRpcClient, + provider_factory: ProviderFactory, + ) -> Self { + Self { evm_client, provider_factory } + } + + /// Execute the block and send the confirmation request to the EVM. + pub async fn confirm_blocks(&self, blocks: &[Block]) -> eyre::Result<()> { + if blocks.is_empty() { + debug!(target: "bitfinity_block_confirmation::BitfinityBlokConfirmation", "No blocks to confirm"); + return Ok(()); + } + + let execution_result = self.execute_blocks(blocks)?; + let last_block = blocks.iter().last().expect("no blocks"); + + debug!( + target: "bitfinity_block_confirmation::BitfinityBlokConfirmation", + "Calculating confirmation data for block: {}", last_block.number + ); + let confirmation_data = + self.calculate_confirmation_data(last_block, execution_result).await?; + + info!( + target: "bitfinity_block_confirmation::BitfinityBlokConfirmation", + "Sending confirmation request for block: {}", last_block.number + ); + self.send_confirmation_request(confirmation_data).await?; + + Ok(()) + } + + /// Sends the block confirmation request to the EVM. + async fn send_confirmation_request( + &self, + confirmation_data: BlockConfirmationData, + ) -> eyre::Result<()> { + let block_number = confirmation_data.block_number; + debug!( + target: "bitfinity_block_confirmation::BitfinityBlokConfirmation", + "Sending confirmation request for block: {}", block_number + ); + match self + .evm_client + .send_confirm_block(confirmation_data) + .await + .map_err(|e| eyre!("{e}"))? + { + BlockConfirmationResult::NotConfirmed => { + error!( + target: "bitfinity_block_confirmation::BitfinityBlokConfirmation", + "Block confirmation request rejected for block: {}", block_number + ); + Err(eyre!("confirmation request rejected")) + } + result => { + debug!( + target: "bitfinity_block_confirmation::BitfinityBlokConfirmation", + "Block confirmation request accepted with result: {:?}", result + ); + Ok(()) + } + } + } + + /// Calculates confirmation data for a block based on execution result. + async fn calculate_confirmation_data( + &self, + block: &Block, + execution_result: ExecutionOutcome, + ) -> eyre::Result { + debug!( + target: "bitfinity_block_confirmation::BitfinityBlokConfirmation", + "Computing PoW hash for block: {}", block.number + ); + let proof_of_work = self.compute_pow_hash(block, execution_result).await?; + debug!( + target: "bitfinity_block_confirmation::BitfinityBlokConfirmation", + "PoW hash computed successfully for block: {}", block.number + ); + Ok(BlockConfirmationData { + block_number: block.number, + hash: block.hash_slow().into(), + state_root: block.state_root.into(), + transactions_root: block.transactions_root.into(), + receipts_root: block.receipts_root.into(), + proof_of_work, + }) + } + + /// Execute block and return execution result. + fn execute_blocks(&self, blocks: &[Block]) -> eyre::Result { + debug!( + target: "bitfinity_block_confirmation::BitfinityBlokConfirmation", + "Executing {} blocks", blocks.len() + ); + let executor = self.executor(); + let blocks_with_senders: eyre::Result> = blocks.iter().map(Self::convert_block).collect(); + let blocks_with_senders = blocks_with_senders?; + + let output = executor.execute_and_verify_batch(&blocks_with_senders)?; + debug!( + target: "bitfinity_block_confirmation::BitfinityBlokConfirmation", + "Blocks executed successfully" + ); + + Ok(output) + } + + /// Convert [`Block`] to [`BlockWithSenders`]. + fn convert_block(block: &Block) -> eyre::Result { + use reth_primitives_traits::SignedTransaction; + + let senders: eyre::Result> = block + .body + .transactions + .iter() + .enumerate() + .map(|(index, tx)| { + tx.recover_signer().ok_or_else(|| { + eyre!("Failed to recover sender for transaction {index} with hash {:?}", tx.hash) + }) + }) + .collect(); + let senders = senders?; + + Ok(BlockWithSenders { block: block.clone(), senders }) + } + + /// Get the block executor for the latest block. + fn executor( + &self, + ) -> BasicBatchExecutor< + EthExecutionStrategy< + StateProviderDatabase>, + EthEvmConfig, + >, + > { + use reth_evm::execute::BlockExecutionStrategyFactory; + + let historical = self.provider_factory.latest().expect("no latest provider"); + let db = MemoryOverlayStateProvider::new(historical, Vec::new()); + + BasicBatchExecutor::new( + EthExecutionStrategyFactory::ethereum(self.provider_factory.chain_spec()) + .create_strategy(StateProviderDatabase::new(db)), + BlockBatchRecord::default(), + ) + } + + /// Calculates POW hash + async fn compute_pow_hash( + &self, + block: &Block, + execution_result: ExecutionOutcome, + ) -> eyre::Result>> { + debug!( + target: "bitfinity_block_confirmation::BitfinityBlokConfirmation", + "Computing PoW hash for block: {}, hash: {}", + block.number, block.hash_slow() + ); + let exec_state = execution_result.bundle; + + let state_provider = self.provider_factory.latest()?; + let cache = StateCacheDb::new(StateProviderDatabase::new(StateProviderTraitObjWrapper( + &state_provider, + ))); + + trace!( + target: "bitfinity_block_confirmation::BitfinityBlokConfirmation", + "Building state with bundle prestate for block: {}", block.number + ); + let mut state = StateBuilder::new() + .with_database_ref(&cache) + .with_bundle_prestate(exec_state) + .with_bundle_update() + .build(); + + let chain_spec = self.provider_factory.chain_spec(); + let evm_config = EthEvmConfig::new(chain_spec); + + let EvmEnv { cfg_env_with_handler_cfg, block_env } = + evm_config.cfg_and_block_env(&block.header); + + let base_fee = block.base_fee_per_gas.map(Into::into); + + trace!( + target: "bitfinity_block_confirmation::BitfinityBlokConfirmation", + "Fetching genesis balances for PoW calculation" + ); + let genesis_accounts = + self.evm_client.get_genesis_balances().await.map_err(|e| eyre!("{e}"))?; + + let (from, _) = genesis_accounts.first().ok_or_else(|| eyre!("no genesis accounts"))?; + + let pow_tx = + did::utils::block_confirmation_pow_transaction(from.clone(), base_fee, None, None); + + // Simple transaction + let to = match pow_tx.to { + Some(to) => TxKind::Call(to.0), + None => TxKind::Create, + }; + let tx = TxEnv { + caller: pow_tx.from.into(), + gas_limit: pow_tx.gas.0.to(), + gas_price: pow_tx.gas_price.unwrap_or_default().0, + transact_to: to, + value: pow_tx.value.0, + ..Default::default() + }; + + { + // Setup EVM + trace!( + target: "bitfinity_block_confirmation::BitfinityBlokConfirmation", + "Setting up EVM for PoW transaction execution" + ); + let mut evm = evm_config.evm_with_env( + &mut state, + EnvWithHandlerCfg::new_with_cfg_env(cfg_env_with_handler_cfg, block_env, tx), + ); + + debug!( + target: "bitfinity_block_confirmation::BitfinityBlokConfirmation", + "Executing PoW transaction for block: {}", block.number + ); + let res = evm.transact()?; + + if !res.result.is_success() { + error!( + target: "bitfinity_block_confirmation::BitfinityBlokConfirmation", + "PoW transaction failed for block {}: {:?}", block.number, res.result + ); + eyre::bail!("PoW transaction failed: {:?}", res.result); + } + + trace!( + target: "bitfinity_block_confirmation::BitfinityBlokConfirmation", + "Committing PoW transaction state changes" + ); + evm.db_mut().commit(res.state); + } + + trace!( + target: "bitfinity_block_confirmation::BitfinityBlokConfirmation", + "Merging state transitions for block: {}", block.number + ); + state.merge_transitions(BundleRetention::PlainState); + let bundle = state.take_bundle(); + + trace!( + target: "bitfinity_block_confirmation::BitfinityBlokConfirmation", + "Creating hashed post state from bundle state" + ); + let post_hashed_state = + HashedPostState::from_bundle_state::(bundle.state()); + + debug!( + target: "bitfinity_block_confirmation::BitfinityBlokConfirmation", + "Calculating state root for block: {}", block.number + ); + let state_root = + StateRoot::overlay_root(self.provider_factory.provider()?.tx_ref(), post_hashed_state)?; + + info!( + target: "bitfinity_block_confirmation::BitfinityBlokConfirmation", + "PoW hash computed successfully for block: {}", block.number + ); + Ok(state_root.into()) + } +} + +#[cfg(test)] +mod tests { + + use alloy_consensus::{Block, BlockHeader, Header, SignableTransaction, TxEip2930}; + use alloy_genesis::{Genesis, GenesisAccount}; + + use alloy_network::TxSignerSync; + use alloy_primitives::{hex::FromHex, Address}; + + use alloy_signer::Signer; + use did::{constant::EIP1559_INITIAL_BASE_FEE, U256}; + + use jsonrpc_core::{Output, Request, Response, Success, Version}; + use reth_chain_state::test_utils::TestBlockBuilder; + use reth_chainspec::{ + BaseFeeParams, ChainSpec, ChainSpecBuilder, EthereumHardfork, MAINNET, MIN_TRANSACTION_GAS, + }; + use reth_db::{test_utils::TempDatabase, DatabaseEnv}; + use reth_db_common::init::init_genesis; + use reth_ethereum_engine_primitives::EthEngineTypes; + use reth_evm::execute::{BlockExecutorProvider, Executor}; + use reth_evm_ethereum::execute::EthExecutorProvider; + + use std::{future::Future, sync::Arc}; + + use super::*; + + use reth_node_types::{AnyNodeTypesWithEngine, FullNodePrimitives, NodeTypesWithDBAdapter}; + use reth_primitives::{ + BlockBody, BlockExt, EthPrimitives, Receipt, SealedBlockWithSenders, TransactionSigned, + }; + use reth_provider::{ + test_utils::create_test_provider_factory_with_chain_spec, BlockExecutionOutput, + BlockReader, BlockWriter, DatabaseProviderFactory, EthStorage, HashedPostStateProvider, + LatestStateProviderRef, StorageLocation, TransactionVariant, + }; + use reth_revm::primitives::KECCAK_EMPTY; + + use reth_trie::StateRoot; + use reth_trie_db::{DatabaseStateRoot, MerklePatriciaTrie}; + + #[derive(Clone)] + struct MockClient { + pub genesis_accounts: Vec<(did::H160, U256)>, + } + + impl MockClient { + fn new(genesis_accounts: Vec<(did::H160, U256)>) -> Self { + Self { genesis_accounts } + } + } + + impl Client for MockClient { + fn send_rpc_request( + &self, + _request: Request, + ) -> std::pin::Pin> + Send>> { + let genesis_accounts = self.genesis_accounts.clone(); + + Box::pin(async move { + let response = Response::Single(Output::Success(Success { + jsonrpc: Some(Version::V2), + result: serde_json::json!(genesis_accounts), + id: jsonrpc_core::Id::Null, + })); + + anyhow::Ok(response) + }) + } + } + + fn make_block( + block_number: u64, + parent_hash: did::H256, + provider_factory: &ProviderFactory, + gas_used: u64, + transactions: Vec, + ) -> eyre::Result + where + DB: NodeTypesWithDB + ProviderNodeTypes + Clone, + { + use reth_primitives_traits::Block as _; + let parent_block = provider_factory + .provider() + .unwrap() + .block_by_hash(parent_hash.clone().into()) + .unwrap() + .unwrap(); + + let header = parent_block.header(); + + let base_fee_per_gas = header.next_block_base_fee(BaseFeeParams::ethereum()); + let state_root = + StateRoot::from_tx(provider_factory.provider().unwrap().tx_ref()).root().unwrap(); + let chain_spec = provider_factory.chain_spec(); + let block = Block { + header: Header { + parent_hash: parent_hash.into(), + state_root, + difficulty: chain_spec.fork(EthereumHardfork::Paris).ttd().expect("Paris TTD"), + number: block_number, + gas_limit: 8_000_000, + gas_used, + base_fee_per_gas, + ..Default::default() + }, + body: BlockBody { transactions, ..Default::default() }, + } + .with_recovered_senders() + .expect("failed to recover senders"); + + Ok(block) + } + + /// Creates an empty block without transactions + fn make_empty_block( + block_number: u64, + parent_hash: did::H256, + provider_factory: &ProviderFactory, + ) -> eyre::Result + where + DB: NodeTypesWithDB + ProviderNodeTypes + Clone, + { + make_block(block_number, parent_hash, provider_factory, 0, vec![]) + } + + /// Creates a block with a single transaction + fn make_block_with_transaction( + block_number: u64, + parent_hash: did::H256, + provider_factory: &ProviderFactory, + nonce: u64, + ) -> eyre::Result + where + DB: NodeTypesWithDB + ProviderNodeTypes + Clone, + { + let chain_spec = provider_factory.chain_spec(); + let mut signer = alloy_signer_local::PrivateKeySigner::from_slice(&[1; 32])?; + signer.set_chain_id(Some(chain_spec.chain.id())); + + let tx = TxEip2930 { + chain_id: chain_spec.chain.id(), + nonce, + gas_limit: MIN_TRANSACTION_GAS, + gas_price: EIP1559_INITIAL_BASE_FEE, + to: TxKind::Call(Address::ZERO), + value: alloy_primitives::U256::from(1.0 as f64).into(), + ..Default::default() + }; + + let signed_tx = signer.sign_transaction_sync(&mut tx.clone())?; + let tx = tx.into_signed(signed_tx); + let transaction_signed = TransactionSigned::from(tx); + + make_block(block_number, parent_hash, provider_factory, 21_000, vec![transaction_signed]) + } + + /// Converts block execution output to execution outcome for testing + fn to_execution_outcome( + block_number: u64, + block_execution_output: &BlockExecutionOutput, + ) -> ExecutionOutcome { + ExecutionOutcome { + bundle: block_execution_output.state.clone(), + receipts: block_execution_output.receipts.clone().into(), + first_block: block_number, + requests: vec![block_execution_output.requests.clone()], + } + } + + /// Executes a block and commits it to the test database + fn execute_block_and_commit_to_database( + provider_factory: &ProviderFactory, + chain_spec: Arc, + block: &BlockWithSenders, + ) -> eyre::Result> + where + N: ProviderNodeTypes< + Primitives: FullNodePrimitives< + Block = reth_primitives::Block, + BlockBody = reth_primitives::BlockBody, + Receipt = reth_primitives::Receipt, + >, + >, + { + let provider = provider_factory.provider()?; + + // Execute the block to produce a block execution output + let mut block_execution_output = EthExecutorProvider::ethereum(chain_spec) + .executor(StateProviderDatabase::new(LatestStateProviderRef::new(&provider))) + .execute(block)?; + block_execution_output.state.reverts.sort(); + + // Convert the block execution output to an execution outcome for committing to the database + let execution_outcome = to_execution_outcome(block.number, &block_execution_output); + + let hashed_post_state = provider_factory.hashed_post_state(execution_outcome.state()); + + let hashed_state_sorted = hashed_post_state.clone().into_sorted(); + + let (_, trie_updates) = StateRoot::overlay_root_with_updates( + provider_factory.provider()?.tx_ref(), + hashed_post_state, + )?; + + // Commit the block's execution outcome to the database + let provider_rw = provider_factory.provider_rw()?; + let block = block.clone().seal_slow(); + provider_rw.append_blocks_with_state( + vec![block], + execution_outcome, + hashed_state_sorted, + trie_updates, + )?; + provider_rw.commit()?; + + Ok(block_execution_output) + } + + fn setup_test_block_validator( + extended_genesis: Option<(Address, did::U256)>, + ) -> ( + BitfinityBlockConfirmation< + MockClient, + NodeTypesWithDBAdapter< + AnyNodeTypesWithEngine< + EthPrimitives, + EthEngineTypes, + ChainSpec, + MerklePatriciaTrie, + EthStorage, + >, + Arc>, + >, + >, + SealedBlockWithSenders, + ) { + // EVM genesis accounts (similar to the test genesis in EVM) + let mut original_genesis = vec![ + ( + Address::from_hex("0x756f45e3fa69347a9a973a725e3c98bc4db0b5a0").unwrap(), + GenesisAccount { + balance: U256::from_hex_str("0xad78ebc5ac6200000").unwrap().into(), + ..Default::default() + }, + ), + ( + Address::from_hex("0xf42f905231c770f0a406f2b768877fb49eee0f21").unwrap(), + GenesisAccount { + balance: U256::from_hex_str("0xaadec983fcff40000").unwrap().into(), + ..Default::default() + }, + ), + ]; + + if let Some((address, balance)) = extended_genesis { + original_genesis + .push((address, GenesisAccount { balance: balance.into(), ..Default::default() })); + } + + let chain_spec = Arc::new( + ChainSpecBuilder::default() + .chain(MAINNET.chain) + .genesis(Genesis { + alloc: original_genesis + .clone() + .iter() + .map(|(address, account)| (*address, account.clone())) + .collect(), + ..MAINNET.genesis.clone() + }) + .paris_activated() + .build(), + ); + + let provider_factory = create_test_provider_factory_with_chain_spec(chain_spec); + + let genesis_hash = init_genesis(&provider_factory).unwrap(); + let genesis_block = provider_factory + .sealed_block_with_senders(genesis_hash.into(), TransactionVariant::NoHash) + .unwrap() + .ok_or_else(|| eyre::eyre!("genesis block not found")) + .unwrap(); + + // Insert genesis block into the underlying database. + let provider_rw = provider_factory.database_provider_rw().unwrap(); + + provider_rw.insert_block(genesis_block.clone(), StorageLocation::Database).unwrap(); + provider_rw.commit().unwrap(); + + {} + + let mut genesis = vec![]; + for (address, account) in original_genesis { + genesis.push((address.into(), account.balance.into())); + } + + let canister_client = EthJsonRpcClient::new(MockClient::new(genesis)); + + let block_validator = + BitfinityBlockConfirmation::new(canister_client, provider_factory.clone()); + + (block_validator, genesis_block) + } + + #[tokio::test] + async fn bitfinity_test_pow_hash_with_empty_execution() { + let (block_validator, genesis_block) = setup_test_block_validator(None); + + let block1 = { + // Create a test block based on genesis. + let test_block = make_empty_block( + genesis_block.number + 1, + genesis_block.hash_slow().into(), + &block_validator.provider_factory, + ) + .unwrap(); + + // Insert the test block into the database. + let provider_rw = block_validator.provider_factory.database_provider_rw().unwrap(); + provider_rw + .insert_block(test_block.clone().seal_slow(), StorageLocation::Database) + .unwrap(); + provider_rw.commit().unwrap(); + + test_block + }; + + let original_state = + StateRoot::from_tx(block_validator.provider_factory.provider().unwrap().tx_ref()) + .root() + .unwrap(); + + // Calculate the POW hash. + let pow = + block_validator.compute_pow_hash(&block1, ExecutionOutcome::default()).await.unwrap(); + + assert_ne!(pow.0, KECCAK_EMPTY, "Proof of work hash should not be empty"); + + assert_ne!(original_state, pow.0, "State should change after POW calculation"); + + let new_state = + StateRoot::from_tx(block_validator.provider_factory.provider().unwrap().tx_ref()) + .root() + .unwrap(); + + assert_eq!(original_state, new_state, "State should not change after POW calculation"); + } + + #[tokio::test] + async fn bitfinity_test_pow_hash_basic_validation() { + let (block_validator, genesis_block) = setup_test_block_validator(None); + + let mut block_builder = TestBlockBuilder::eth(); + let block = block_builder + .get_executed_block_with_number(genesis_block.number + 1, genesis_block.hash_slow()); + + let outcome = block.execution_outcome(); + let block = + block.block().clone().seal_with_senders::().unwrap().unseal(); + + let pow_res = block_validator.compute_pow_hash(&block.block, outcome.clone()).await; + + assert!(pow_res.is_ok()); + + assert_ne!(pow_res.unwrap().0, KECCAK_EMPTY, "Proof of work hash should not be empty"); + } + + #[tokio::test] + async fn bitfinity_test_pow_hash_deterministic() { + let (block_validator, genesis_block) = setup_test_block_validator(None); + let mut block_builder = TestBlockBuilder::eth(); + let block = block_builder + .get_executed_block_with_number(genesis_block.number + 1, genesis_block.hash_slow()); + + let outcome = block.execution_outcome(); + let block = + block.block().clone().seal_with_senders::().unwrap().unseal(); + + // Compute POW hash twice with the same input + let pow1 = block_validator.compute_pow_hash(&block.block, outcome.clone()).await.unwrap(); + let pow2 = block_validator.compute_pow_hash(&block.block, outcome.clone()).await.unwrap(); + + // Results should be deterministic + assert_eq!(pow1, pow2, "POW hash computation should be deterministic"); + } + + #[tokio::test] + async fn bitfinity_test_pow_hash_state_independence() { + let (block_validator, genesis_block) = setup_test_block_validator(None); + let mut block_builder = TestBlockBuilder::eth(); + let block = block_builder + .get_executed_block_with_number(genesis_block.number + 1, genesis_block.hash_slow()); + + let outcome = block.execution_outcome(); + let block = + block.block().clone().seal_with_senders::().unwrap().unseal(); + + // Get initial state + let initial_state = + StateRoot::from_tx(block_validator.provider_factory.provider().unwrap().tx_ref()) + .root() + .unwrap(); + + // Compute POW multiple times + for _ in 0..3 { + let _ = block_validator.compute_pow_hash(&block.block, outcome.clone()).await.unwrap(); + + // Check state after each computation + let current_state = + StateRoot::from_tx(block_validator.provider_factory.provider().unwrap().tx_ref()) + .root() + .unwrap(); + + assert_eq!( + initial_state, current_state, + "State should remain unchanged after POW computation" + ); + } + } + + #[tokio::test] + async fn bitfinity_test_pow_hash_deterministic_with_empty_blocks() { + // Expected final PoW hash + let expected_pow_hash = did::H256::from_hex_str( + "0xe66caa3a5bf8a22c38c33e5fb4cab1bd1b34e9734526a8723c615e9d36ccc45b", + ) + .unwrap(); + + let (block_validator, genesis_block) = setup_test_block_validator(None); + + let block1 = { + let block = make_empty_block( + 1, + genesis_block.hash_slow().into(), + &block_validator.provider_factory, + ) + .unwrap(); + execute_block_and_commit_to_database( + &block_validator.provider_factory, + block_validator.provider_factory.chain_spec().clone(), + &block, + ) + .unwrap(); + + block + }; + + let block2 = { + let block = + make_empty_block(2, block1.hash_slow().into(), &block_validator.provider_factory) + .unwrap(); + + execute_block_and_commit_to_database( + &block_validator.provider_factory, + block_validator.provider_factory.chain_spec().clone(), + &block, + ) + .unwrap(); + + block + }; + + let block = + make_empty_block(3, block2.hash_slow().into(), &block_validator.provider_factory) + .unwrap(); + + let block_output = execute_block_and_commit_to_database( + &block_validator.provider_factory, + block_validator.provider_factory.chain_spec().clone(), + &block, + ) + .unwrap(); + let outcome = to_execution_outcome(block.number, &block_output); + + // Compute POW hash for two different blocks + let computed_pow = + block_validator.compute_pow_hash(&block.block, outcome.clone()).await.unwrap(); + + assert_eq!( + expected_pow_hash, computed_pow, + "POW hash should be deterministic given the same state" + ) + } + + #[tokio::test] + async fn bitfinity_test_pow_hash_deterministic_with_transactions() { + // Expected final PoW hash + let expected_pow_hash = did::H256::from_hex_str( + "0xa349b3ca25925decd1c225b8bc3a133c436f3989eb8048e93ee1389c78a1d6a4", + ) + .unwrap(); + + let signer = alloy_signer_local::PrivateKeySigner::from_slice(&[1; 32]).unwrap(); + + let (block_validator, genesis_block) = + setup_test_block_validator(Some((signer.address(), U256::max_value()))); + + let block1 = { + let block = make_block_with_transaction( + 1, + genesis_block.hash_slow().into(), + &block_validator.provider_factory, + 0, + ) + .unwrap(); + execute_block_and_commit_to_database( + &block_validator.provider_factory, + block_validator.provider_factory.chain_spec().clone(), + &block, + ) + .unwrap(); + + block + }; + + let block2 = { + let block = make_block_with_transaction( + 2, + block1.hash_slow().into(), + &block_validator.provider_factory, + 1, + ) + .unwrap(); + let out = execute_block_and_commit_to_database( + &block_validator.provider_factory, + block_validator.provider_factory.chain_spec().clone(), + &block, + ) + .unwrap(); + + to_execution_outcome(block.number, &out); + block + }; + + let block = make_block_with_transaction( + 3, + block2.hash_slow().into(), + &block_validator.provider_factory, + 2, + ) + .unwrap(); + let block_output = execute_block_and_commit_to_database( + &block_validator.provider_factory, + block_validator.provider_factory.chain_spec().clone(), + &block, + ) + .unwrap(); + + let outcome = to_execution_outcome(block.number, &block_output); + + let inital_state = + StateRoot::from_tx(block_validator.provider_factory.provider().unwrap().tx_ref()) + .root() + .unwrap(); + + let computed_pow = + block_validator.compute_pow_hash(&block.block, outcome.clone()).await.unwrap(); + + assert_eq!( + expected_pow_hash, computed_pow, + "POW hash should be deterministic given the same state" + ); + + let post_execution_state = + StateRoot::from_tx(block_validator.provider_factory.provider().unwrap().tx_ref()) + .root() + .unwrap(); + + assert_eq!( + inital_state, post_execution_state, + "State should remain unchanged after block execution" + ); + } +} diff --git a/crates/net/downloaders/src/bitfinity_evm_client.rs b/crates/net/downloaders/src/bitfinity_evm_client.rs index 04b567d8747..90b67a720c3 100644 --- a/crates/net/downloaders/src/bitfinity_evm_client.rs +++ b/crates/net/downloaders/src/bitfinity_evm_client.rs @@ -24,11 +24,10 @@ use reth_network_p2p::{ priority::Priority, }; use reth_network_peers::PeerId; -use reth_primitives::{BlockBody, ForkCondition, Header, TransactionSigned}; +use reth_primitives::{Block, BlockBody, ForkCondition, Header, TransactionSigned}; use serde_json::json; -use std::{self, cmp::min, collections::HashMap}; -use std::{sync::OnceLock, time::Duration}; +use std::{self, collections::HashMap, sync::OnceLock, time::Duration}; use thiserror::Error; use backon::{ExponentialBuilder, Retryable}; @@ -64,6 +63,9 @@ pub struct BitfinityEvmClient { /// The buffered bodies retrieved when fetching new headers. bodies: HashMap, + + /// The number of the last safe block. + safe_block_number: BlockNumber, } /// An error that can occur when constructing and using a [`RemoteClient`]. @@ -80,6 +82,10 @@ pub enum RemoteClientError { /// Certificate check error #[error("certification check error: {0}")] CertificateError(String), + + /// Error while trying to validate a block + #[error("block validation error: {0}")] + ValidationError(String), } /// Setting for checking last certified block @@ -117,7 +123,12 @@ impl BitfinityEvmClient { } Ok(false) => { info!(target: "downloaders::bitfinity_evm_client", "Skipping block import: EVM is disabled"); - return Ok(Self { headers, hash_to_number, bodies }); + return Ok(Self { + headers, + hash_to_number, + bodies, + safe_block_number: BlockNumber::default(), + }); } Err(e) => { warn!(target: "downloaders::bitfinity_evm_client", "Failed to check EVM state: {}. Proceeding with import", e); @@ -135,15 +146,32 @@ impl BitfinityEvmClient { .await .map_err(|e| RemoteClientError::ProviderError(e.to_string()))?; - info!(target: "downloaders::bitfinity_evm_client", "Latest remote block: {latest_remote_block}"); - - let mut end_block = - min(end_block.unwrap_or(latest_remote_block), start_block + max_blocks - 1); - - if let Some(block_checker) = &block_checker { - end_block = min(end_block, block_checker.get_block_number()); - } + let safe_block_number: u64 = provider + .get_block_by_number(did::BlockNumber::Safe) + .await + .map_err(|e| { + RemoteClientError::ProviderError(format!("error getting safe block: {e}")) + })? + .number + .into(); + info!(target: "downloaders::bitfinity_evm_client", "Latest remote block: {latest_remote_block}"); + info!(target: "downloaders::bitfinity_evm_client", "Safe remote block number: {safe_block_number}"); + + let end_block = [ + end_block.unwrap_or(u64::MAX), + latest_remote_block, + start_block + max_blocks - 1, + block_checker.as_ref().map(|v| v.get_block_number()).unwrap_or(u64::MAX), + ] + .into_iter() + .min() + .unwrap_or(latest_remote_block); + + let safe_block_number = + if safe_block_number > end_block { end_block } else { safe_block_number }; + + info!(target: "downloaders::bitfinity_evm_client", "Using safe block number: {safe_block_number}"); info!(target: "downloaders::bitfinity_evm_client", "Start fetching blocks from {} to {}", start_block, end_block); for begin_block in (start_block..=end_block).step_by(batch_size) { @@ -202,7 +230,7 @@ impl BitfinityEvmClient { info!(blocks = headers.len(), "Initialized remote client"); - Ok(Self { headers, hash_to_number, bodies }) + Ok(Self { headers, hash_to_number, bodies, safe_block_number }) } /// Get the remote tip hash of the chain. @@ -214,6 +242,57 @@ impl BitfinityEvmClient { .map(|h| h.hash_slow()) } + /// Returns the parent block hash of the given one. + pub fn parent(&self, block: &B256) -> Option { + let block_number = self.hash_to_number.get(block)?; + if *block_number == 0 { + return None; + } + + self.headers.get(&(block_number - 1)).map(|h| h.hash_slow()) + } + + /// Returns unsafe blocks with transactions up to the `tip`. + pub fn unsafe_blocks(&self, tip: &B256) -> eyre::Result> { + let mut next_block_number = self.safe_block_number + 1; + let mut blocks = vec![]; + while let Some(header) = self.headers.get(&next_block_number) { + let block_hash = header.hash_slow(); + let body = + self.bodies.get(&block_hash).ok_or_else(|| eyre::eyre!("Block body not found"))?; + blocks.push(body.clone().into_block(header.clone())); + + if block_hash == *tip { + return Ok(blocks); + } + + next_block_number += 1; + } + + Err(eyre::eyre!("Block {tip} not found")) + } + + /// Returns the number of the given block + pub fn get_block_number(&self, block_hash: &B256) -> Option { + self.hash_to_number.get(block_hash).copied() + } + + /// Returns the hash of the first block after the latest safe block. If the tip of the chain is + /// safe, returns `None`. + pub fn unsafe_block(&self) -> Option { + self.headers.get(&(self.safe_block_number + 1)).map(|h| h.hash_slow()) + } + + /// Returns the block number of the last safe block in the chain. + pub fn safe_block_number(&self) -> u64 { + self.safe_block_number + } + + /// Returns the hash of the last safe block in the chain. + pub fn safe_block(&self) -> Option { + self.headers.get(&self.safe_block_number).map(|h| h.hash_slow()) + } + /// Returns the highest block number of this client has or `None` if empty pub fn max_block(&self) -> Option { self.headers.keys().max().copied() @@ -393,7 +472,8 @@ impl BitfinityEvmClient { /// Creates a new JSON-RPC client with retry functionality /// - /// Tries the primary URL first, falls back to backup URL if provided or if primary is not producing blocks + /// Tries the primary URL first, falls back to backup URL if provided or if primary is not + /// producing blocks pub async fn client(config: RpcClientConfig) -> Result> { // Create retry configuration let backoff = ExponentialBuilder::default() @@ -645,7 +725,8 @@ impl DownloadClient for BitfinityEvmClient { fn report_bad_message(&self, _peer_id: PeerId) { error!("Reported a bad message on a remote client, the client may be corrupted or invalid"); // Uncomment this panic to stop the import job and print the stacktrace of the error - // panic!("Reported a bad message on a remote client, the client may be corrupted or invalid"); + // panic!("Reported a bad message on a remote client, the client may be corrupted or + // invalid"); } fn num_connected_peers(&self) -> usize { diff --git a/crates/node/core/src/args/bitfinity_args.rs b/crates/node/core/src/args/bitfinity_args.rs index 52201a6cb4a..9e85ed1ed44 100644 --- a/crates/node/core/src/args/bitfinity_args.rs +++ b/crates/node/core/src/args/bitfinity_args.rs @@ -4,6 +4,9 @@ use clap::{arg, Args}; /// IC advices to use a hardcoded value instead of querying it to avoid main-in-the middle attacks. pub const IC_MAINNET_KEY: &str = "308182301d060d2b0601040182dc7c0503010201060c2b0601040182dc7c05030201036100814c0e6ec71fab583b08bd81373c255c3c371b2e84863c98a4f1e08b74235d14fb5d9c0cd546d9685f913a0c0b2cc5341583bf4b4392e467db96d65b9bb4cb717112f8472e0d5a4d14505ffd7484b01291091c5f87b98883463f98091a0baaae"; +/// URL of the IC mainnet. +pub const IC_MAINNET_URL: &str = "https://ic0.app"; + /// Bitfinity Related Args #[derive(Debug, Args, PartialEq, Eq, Default, Clone)] #[clap(next_help_heading = "Bitfinity Args")] @@ -65,6 +68,12 @@ pub struct BitfinityImportArgs { /// A flag to check the EVM state before importing blocks #[arg(long, default_value = "true")] pub check_evm_state_before_importing: bool, + + /// If true, try to validate unsafe blocks before import. + /// + /// If validation is disabled, unsafe blocks will be ignored. + #[arg(long)] + pub confirm_unsafe_blocks: bool, } /// Bitfinity Related Args