diff --git a/.env.example b/.env.example index 62434d8a..63a3323f 100644 --- a/.env.example +++ b/.env.example @@ -5,14 +5,15 @@ TIPS_INGRESS_RPC_MEMPOOL=http://localhost:2222 TIPS_INGRESS_DUAL_WRITE_MEMPOOL=false TIPS_INGRESS_KAFKA_BROKERS=localhost:9092 TIPS_INGRESS_KAFKA_TOPIC=tips-audit -TIPS_INGRESS_LOG_LEVEL=debug +TIPS_INGRESS_LOG_LEVEL=info TIPS_INGRESS_KAFKA_QUEUE_TOPIC=tips-ingress-rpc +TIPS_INGRESS_SEND_TRANSACTION_DEFAULT_LIFETIME_SECONDS=10800 # Audit service configuration TIPS_AUDIT_KAFKA_BROKERS=localhost:9092 TIPS_AUDIT_KAFKA_TOPIC=tips-audit TIPS_AUDIT_KAFKA_GROUP_ID=local-audit -TIPS_AUDIT_LOG_LEVEL=debug +TIPS_AUDIT_LOG_LEVEL=info TIPS_AUDIT_S3_BUCKET=tips TIPS_AUDIT_S3_CONFIG_TYPE=manual TIPS_AUDIT_S3_ENDPOINT=http://localhost:7000 @@ -22,11 +23,13 @@ TIPS_AUDIT_S3_SECRET_ACCESS_KEY=minioadmin # Maintenance TIPS_MAINTENANCE_DATABASE_URL=postgresql://postgres:postgres@localhost:5432/postgres -TIPS_MAINTENANCE_RPC_NODE=http://localhost:2222 +TIPS_MAINTENANCE_RPC_URL=http://localhost:2222 +TIPS_MAINTENANCE_RPC_POLL_INTERVAL_MS=250 TIPS_MAINTENANCE_KAFKA_BROKERS=localhost:9092 +TIPS_MAINTENANCE_FLASHBLOCKS_WS=ws://localhost:1115/ws TIPS_MAINTENANCE_KAFKA_TOPIC=tips-audit -TIPS_MAINTENANCE_POLL_INTERVAL_MS=250 -TIPS_MAINTENANCE_LOG_LEVEL=debug +TIPS_MAINTENANCE_LOG_LEVEL=info +TIPS_MAINTENANCE_FINALIZATION_DEPTH=10 # TIPS UI TIPS_DATABASE_URL=postgresql://postgres:postgres@localhost:5432/postgres diff --git a/.sqlx/query-2a6e99270e35859fd7a4ce4deeeb652f7d67c3e78b2749b00ff5a3814ed6664f.json b/.sqlx/query-2a6e99270e35859fd7a4ce4deeeb652f7d67c3e78b2749b00ff5a3814ed6664f.json new file mode 100644 index 00000000..93237ba2 --- /dev/null +++ b/.sqlx/query-2a6e99270e35859fd7a4ce4deeeb652f7d67c3e78b2749b00ff5a3814ed6664f.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "\n INSERT INTO maintenance (block_number, block_hash, finalized)\n VALUES ($1, $2, false)\n ON CONFLICT (block_number)\n DO UPDATE SET block_hash = EXCLUDED.block_hash, finalized = false\n ", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Int8", + "Bpchar" + ] + }, + "nullable": [] + }, + "hash": "2a6e99270e35859fd7a4ce4deeeb652f7d67c3e78b2749b00ff5a3814ed6664f" +} diff --git a/.sqlx/query-7d72b87eddd39d131ce083dcbff9e6c5fbdde1083aff6e4dca20508f177df536.json b/.sqlx/query-7d72b87eddd39d131ce083dcbff9e6c5fbdde1083aff6e4dca20508f177df536.json new file mode 100644 index 00000000..6810f8af --- /dev/null +++ b/.sqlx/query-7d72b87eddd39d131ce083dcbff9e6c5fbdde1083aff6e4dca20508f177df536.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM maintenance WHERE finalized = true AND block_number < $1", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Int8" + ] + }, + "nullable": [] + }, + "hash": "7d72b87eddd39d131ce083dcbff9e6c5fbdde1083aff6e4dca20508f177df536" +} diff --git a/.sqlx/query-85798b03a3dff0196ee1c64b1b21f74c6ac9046b4ccad4f1fc9876a7355616b0.json b/.sqlx/query-85798b03a3dff0196ee1c64b1b21f74c6ac9046b4ccad4f1fc9876a7355616b0.json new file mode 100644 index 00000000..e47d0c8d --- /dev/null +++ b/.sqlx/query-85798b03a3dff0196ee1c64b1b21f74c6ac9046b4ccad4f1fc9876a7355616b0.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE maintenance SET finalized = true WHERE block_number < $1 AND finalized = false", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Int8" + ] + }, + "nullable": [] + }, + "hash": "85798b03a3dff0196ee1c64b1b21f74c6ac9046b4ccad4f1fc9876a7355616b0" +} diff --git a/.sqlx/query-c279740d623e06b3e3add31a6c15085bde3207756fe914837cef0cd12b864366.json b/.sqlx/query-92e3773f27ca3d15e43cd2a48c40898572b4ea735f94ebd9df04b86b67eab713.json similarity index 50% rename from .sqlx/query-c279740d623e06b3e3add31a6c15085bde3207756fe914837cef0cd12b864366.json rename to .sqlx/query-92e3773f27ca3d15e43cd2a48c40898572b4ea735f94ebd9df04b86b67eab713.json index b3729a01..1f7bfdd4 100644 --- a/.sqlx/query-c279740d623e06b3e3add31a6c15085bde3207756fe914837cef0cd12b864366.json +++ b/.sqlx/query-92e3773f27ca3d15e43cd2a48c40898572b4ea735f94ebd9df04b86b67eab713.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "\n INSERT INTO bundles (\n id, \"state\", senders, minimum_base_fee, txn_hashes, \n txs, reverting_tx_hashes, dropping_tx_hashes, \n block_number, min_timestamp, max_timestamp,\n created_at, updated_at\n )\n VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, NOW(), NOW())\n ", + "query": "\n INSERT INTO bundles (\n id, bundle_state, senders, minimum_base_fee, txn_hashes, \n txs, reverting_tx_hashes, dropping_tx_hashes, \n block_number, min_timestamp, max_timestamp,\n created_at, updated_at, state_changed_at\n )\n VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, NOW(), NOW(), NOW())\n ", "describe": { "columns": [], "parameters": { @@ -12,11 +12,7 @@ "kind": { "Enum": [ "Ready", - "BundleLimit", - "AccountLimits", - "GlobalLimits", - "IncludedInFlashblock", - "IncludedInBlock" + "IncludedByBuilder" ] } } @@ -34,5 +30,5 @@ }, "nullable": [] }, - "hash": "c279740d623e06b3e3add31a6c15085bde3207756fe914837cef0cd12b864366" + "hash": "92e3773f27ca3d15e43cd2a48c40898572b4ea735f94ebd9df04b86b67eab713" } diff --git a/.sqlx/query-9f1f7117bba639cdc922de4e6870a34cd49c3e2826662fa3fe8af597d1e9e90b.json b/.sqlx/query-9f1f7117bba639cdc922de4e6870a34cd49c3e2826662fa3fe8af597d1e9e90b.json new file mode 100644 index 00000000..36bb16fb --- /dev/null +++ b/.sqlx/query-9f1f7117bba639cdc922de4e6870a34cd49c3e2826662fa3fe8af597d1e9e90b.json @@ -0,0 +1,34 @@ +{ + "db_name": "PostgreSQL", + "query": "\n UPDATE bundles \n SET bundle_state = $1, updated_at = NOW(), state_changed_at = NOW()\n WHERE id = ANY($2) AND bundle_state::text = ANY($3)\n RETURNING id\n ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "id", + "type_info": "Uuid" + } + ], + "parameters": { + "Left": [ + { + "Custom": { + "name": "bundle_state", + "kind": { + "Enum": [ + "Ready", + "IncludedByBuilder" + ] + } + } + }, + "UuidArray", + "TextArray" + ] + }, + "nullable": [ + false + ] + }, + "hash": "9f1f7117bba639cdc922de4e6870a34cd49c3e2826662fa3fe8af597d1e9e90b" +} diff --git a/.sqlx/query-b2f3046a06d9b8a76c59a38122a8fdc5ab2ae76baab1082b4d2b4c4ef01d2f74.json b/.sqlx/query-b2f3046a06d9b8a76c59a38122a8fdc5ab2ae76baab1082b4d2b4c4ef01d2f74.json new file mode 100644 index 00000000..f81533d1 --- /dev/null +++ b/.sqlx/query-b2f3046a06d9b8a76c59a38122a8fdc5ab2ae76baab1082b4d2b4c4ef01d2f74.json @@ -0,0 +1,32 @@ +{ + "db_name": "PostgreSQL", + "query": "\n SELECT\n bundle_state::text as bundle_state_text,\n COUNT(*) as bundle_count,\n SUM(COALESCE(array_length(txn_hashes, 1), 0)) as transaction_count\n FROM bundles\n GROUP BY bundle_state\n ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "bundle_state_text", + "type_info": "Text" + }, + { + "ordinal": 1, + "name": "bundle_count", + "type_info": "Int8" + }, + { + "ordinal": 2, + "name": "transaction_count", + "type_info": "Int8" + } + ], + "parameters": { + "Left": [] + }, + "nullable": [ + null, + null, + null + ] + }, + "hash": "b2f3046a06d9b8a76c59a38122a8fdc5ab2ae76baab1082b4d2b4c4ef01d2f74" +} diff --git a/Cargo.lock b/Cargo.lock index 3747436c..4d4191a9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,9 +4,9 @@ version = 4 [[package]] name = "addr2line" -version = "0.24.2" +version = "0.25.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" +checksum = "1b5d307320b3181d6d7954e663bd7c774a838b8220fe0593c86d9fb09f498b4b" dependencies = [ "gimli", ] @@ -17,6 +17,41 @@ version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" +[[package]] +name = "aead" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0" +dependencies = [ + "crypto-common", + "generic-array", +] + +[[package]] +name = "aes" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" +dependencies = [ + "cfg-if", + "cipher", + "cpufeatures", +] + +[[package]] +name = "aes-gcm" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "831010a0f742e1209b3bcea8fab6a8e149051ba6099432c8cb2cc117dec3ead1" +dependencies = [ + "aead", + "aes", + "cipher", + "ctr", + "ghash", + "subtle", +] + [[package]] name = "ahash" version = "0.8.12" @@ -39,6 +74,21 @@ dependencies = [ "memchr", ] +[[package]] +name = "alloc-no-stdlib" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" + +[[package]] +name = "alloc-stdlib" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" +dependencies = [ + "alloc-no-stdlib", +] + [[package]] name = "allocator-api2" version = "0.2.21" @@ -47,22 +97,22 @@ checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" [[package]] name = "alloy-chains" -version = "0.2.11" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e4e355f312b270bca5144af5f003e7d238037e47a818766f9107f966cbecf52" +checksum = "bf01dd83a1ca5e4807d0ca0223c9615e211ce5db0a9fd1443c2778cacf89b546" dependencies = [ "alloy-primitives", "alloy-rlp", "num_enum", "serde", - "strum", + "strum 0.27.2", ] [[package]] name = "alloy-consensus" -version = "1.0.36" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cd9d29a6a0bb8d4832ff7685dcbb430011b832f2ccec1af9571a0e75c1f7e9c" +checksum = "59094911f05dbff1cf5b29046a00ef26452eccc8d47136d50a47c0cf22f00c85" dependencies = [ "alloy-eips", "alloy-primitives", @@ -81,14 +131,14 @@ dependencies = [ "serde", "serde_json", "serde_with", - "thiserror", + "thiserror 2.0.17", ] [[package]] name = "alloy-consensus-any" -version = "1.0.36" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce038cb325f9a85a10fb026fb1b70cb8c62a004d85d22f8516e5d173e3eec612" +checksum = "903cb8f728107ca27c816546f15be38c688df3c381d7bd1a4a9f215effc1ddb4" dependencies = [ "alloy-consensus", "alloy-eips", @@ -98,6 +148,23 @@ dependencies = [ "serde", ] +[[package]] +name = "alloy-dyn-abi" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6c2905bafc2df7ccd32ca3af13f0b0d82f2e2ff9dfbeb12196c0d978d5c0deb" +dependencies = [ + "alloy-json-abi", + "alloy-primitives", + "alloy-sol-type-parser", + "alloy-sol-types", + "derive_more", + "itoa", + "serde", + "serde_json", + "winnow", +] + [[package]] name = "alloy-eip2124" version = "0.2.0" @@ -108,7 +175,7 @@ dependencies = [ "alloy-rlp", "crc", "serde", - "thiserror", + "thiserror 2.0.17", ] [[package]] @@ -132,14 +199,15 @@ dependencies = [ "alloy-rlp", "k256", "serde", - "thiserror", + "serde_with", + "thiserror 2.0.17", ] [[package]] name = "alloy-eips" -version = "1.0.36" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bfec530782b30151e2564edf3c900f1fa6852128b7a993e458e8e3815d8b915" +checksum = "ac7f1c9a1ccc7f3e03c36976455751a6166a4f0d2d2c530c3f87dfe7d0cdc836" dependencies = [ "alloy-eip2124", "alloy-eip2930", @@ -156,34 +224,37 @@ dependencies = [ "serde", "serde_with", "sha2 0.10.9", - "thiserror", + "thiserror 2.0.17", ] [[package]] name = "alloy-evm" -version = "0.20.1" +version = "0.21.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dbe7c66c859b658d879b22e8aaa19546dab726b0639f4649a424ada3d99349e" +checksum = "06a5f67ee74999aa4fe576a83be1996bdf74a30fce3d248bf2007d6fc7dae8aa" dependencies = [ "alloy-consensus", "alloy-eips", "alloy-hardforks", + "alloy-op-hardforks", "alloy-primitives", + "alloy-rpc-types-engine", "alloy-rpc-types-eth", "alloy-sol-types", "auto_impl", "derive_more", - "op-alloy-consensus 0.19.1", + "op-alloy-consensus", + "op-alloy-rpc-types-engine", "op-revm", "revm", - "thiserror", + "thiserror 2.0.17", ] [[package]] name = "alloy-genesis" -version = "1.0.33" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3865dd77a0fcbe61a35f08171af54d54617372df0544d7626f9ee5a42103c825" +checksum = "1421f6c9d15e5b86afbfe5865ca84dea3b9f77173a0963c1a2ee4e626320ada9" dependencies = [ "alloy-eips", "alloy-primitives", @@ -204,13 +275,14 @@ dependencies = [ "alloy-primitives", "auto_impl", "dyn-clone", + "serde", ] [[package]] name = "alloy-json-abi" -version = "1.3.1" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "125a1c373261b252e53e04d6e92c37d881833afc1315fceab53fd46045695640" +checksum = "a2acb6637a9c0e1cdf8971e0ced8f3fa34c04c5e9dccf6bb184f6a64fe0e37d8" dependencies = [ "alloy-primitives", "alloy-sol-type-parser", @@ -220,24 +292,24 @@ dependencies = [ [[package]] name = "alloy-json-rpc" -version = "1.0.36" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be436893c0d1f7a57d1d8f1b6b9af9db04174468410b7e6e1d1893e78110a3bc" +checksum = "65f763621707fa09cece30b73ecc607eb43fd7a72451fe3b46f645b905086926" dependencies = [ "alloy-primitives", "alloy-sol-types", "http 1.3.1", "serde", "serde_json", - "thiserror", + "thiserror 2.0.17", "tracing", ] [[package]] name = "alloy-network" -version = "1.0.36" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f18959e1a1b40e05578e7a705f65ff4e6b354e38335da4b33ccbee876bde7c26" +checksum = "2f59a869fa4b4c3a7f08b1c8cb79aec61c29febe6e24a24fe0fcfded8a9b5703" dependencies = [ "alloy-consensus", "alloy-consensus-any", @@ -256,14 +328,14 @@ dependencies = [ "futures-utils-wasm", "serde", "serde_json", - "thiserror", + "thiserror 2.0.17", ] [[package]] name = "alloy-network-primitives" -version = "1.0.36" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1da0037ac546c0cae2eb776bed53687b7bbf776f4e7aa2fea0b8b89e734c319b" +checksum = "46e9374c667c95c41177602ebe6f6a2edd455193844f011d973d374b65501b38" dependencies = [ "alloy-consensus", "alloy-eips", @@ -274,9 +346,9 @@ dependencies = [ [[package]] name = "alloy-op-evm" -version = "0.20.1" +version = "0.21.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed9b726869a13d5d958f2f78fbef7ce522689c4d40d613c16239f5e286fbeb1a" +checksum = "17aaeb600740c181bf29c9f138f9b228d115ea74fa6d0f0343e1952f1a766968" dependencies = [ "alloy-consensus", "alloy-eips", @@ -284,7 +356,7 @@ dependencies = [ "alloy-op-hardforks", "alloy-primitives", "auto_impl", - "op-alloy-consensus 0.19.1", + "op-alloy-consensus", "op-revm", "revm", ] @@ -303,18 +375,18 @@ dependencies = [ [[package]] name = "alloy-primitives" -version = "1.3.1" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc9485c56de23438127a731a6b4c87803d49faf1a7068dcd1d8768aca3a9edb9" +checksum = "5b77f7d5e60ad8ae6bd2200b8097919712a07a6db622a4b201e7ead6166f02e5" dependencies = [ "alloy-rlp", "bytes", "cfg-if", "const-hex", "derive_more", - "foldhash", + "foldhash 0.2.0", "getrandom 0.3.3", - "hashbrown 0.15.5", + "hashbrown 0.16.0", "indexmap 2.11.4", "itoa", "k256", @@ -331,9 +403,9 @@ dependencies = [ [[package]] name = "alloy-provider" -version = "1.0.33" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74580f7459337cd281a6bfa2c8f08a07051cb3900e0edaa27ccb21fb046041ed" +checksum = "77818b7348bd5486491a5297579dbfe5f706a81f8e1f5976393025f1e22a7c7d" dependencies = [ "alloy-chains", "alloy-consensus", @@ -342,16 +414,19 @@ dependencies = [ "alloy-network", "alloy-network-primitives", "alloy-primitives", + "alloy-pubsub", "alloy-rpc-client", "alloy-rpc-types-eth", "alloy-signer", "alloy-sol-types", "alloy-transport", "alloy-transport-http", + "alloy-transport-ipc", + "alloy-transport-ws", "async-stream", "async-trait", "auto_impl", - "dashmap", + "dashmap 6.1.0", "either", "futures", "futures-utils-wasm", @@ -361,13 +436,35 @@ dependencies = [ "reqwest", "serde", "serde_json", - "thiserror", + "thiserror 2.0.17", "tokio", "tracing", "url", "wasmtimer", ] +[[package]] +name = "alloy-pubsub" +version = "1.0.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "249b45103a66c9ad60ad8176b076106d03a2399a37f0ee7b0e03692e6b354cb9" +dependencies = [ + "alloy-json-rpc", + "alloy-primitives", + "alloy-transport", + "auto_impl", + "bimap", + "futures", + "parking_lot", + "serde", + "serde_json", + "tokio", + "tokio-stream", + "tower 0.5.2", + "tracing", + "wasmtimer", +] + [[package]] name = "alloy-rlp" version = "0.3.12" @@ -392,14 +489,17 @@ dependencies = [ [[package]] name = "alloy-rpc-client" -version = "1.0.33" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bca26070f1fc94d69e8d41fcde991b0556dbf8fac737dc09102d461d957a1bb9" +checksum = "2430d5623e428dd012c6c2156ae40b7fe638d6fca255e3244e0fba51fa698e93" dependencies = [ "alloy-json-rpc", "alloy-primitives", + "alloy-pubsub", "alloy-transport", "alloy-transport-http", + "alloy-transport-ipc", + "alloy-transport-ws", "futures", "pin-project", "reqwest", @@ -407,7 +507,7 @@ dependencies = [ "serde_json", "tokio", "tokio-stream", - "tower", + "tower 0.5.2", "tracing", "url", "wasmtimer", @@ -415,20 +515,22 @@ dependencies = [ [[package]] name = "alloy-rpc-types" -version = "1.0.33" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c079797bbda28d6a5a2e89bcbf788bf85b4ae2a4f0e57eed9e2d66637fe78c58" +checksum = "e9e131624d08a25cfc40557041e7dc42e1182fa1153e7592d120f769a1edce56" dependencies = [ "alloy-primitives", + "alloy-rpc-types-engine", + "alloy-rpc-types-eth", "alloy-serde", "serde", ] [[package]] name = "alloy-rpc-types-admin" -version = "1.0.33" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d56c8ce360ec766720d8a655fe448b94428ad1aea44aad488a3461ee4dc1f40" +checksum = "c59407723b1850ebaa49e46d10c2ba9c10c10b3aedf2f7e97015ee23c3f4e639" dependencies = [ "alloy-genesis", "alloy-primitives", @@ -436,22 +538,65 @@ dependencies = [ "serde_json", ] +[[package]] +name = "alloy-rpc-types-anvil" +version = "1.0.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d65e3266095e6d8e8028aab5f439c6b8736c5147314f7e606c61597e014cb8a0" +dependencies = [ + "alloy-primitives", + "alloy-rpc-types-eth", + "alloy-serde", + "serde", +] + [[package]] name = "alloy-rpc-types-any" -version = "1.0.36" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65423baf6af0ff356e254d7824b3824aa34d8ca9bd857a4e298f74795cc4b69d" +checksum = "07429a1099cd17227abcddb91b5e38c960aaeb02a6967467f5bb561fbe716ac6" dependencies = [ "alloy-consensus-any", "alloy-rpc-types-eth", "alloy-serde", ] +[[package]] +name = "alloy-rpc-types-beacon" +version = "1.0.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59e0e876b20eb9debf316d3e875536f389070635250f22b5a678cf4632a3e0cf" +dependencies = [ + "alloy-eips", + "alloy-primitives", + "alloy-rpc-types-engine", + "ethereum_ssz", + "ethereum_ssz_derive", + "serde", + "serde_json", + "serde_with", + "thiserror 2.0.17", + "tree_hash", + "tree_hash_derive", +] + +[[package]] +name = "alloy-rpc-types-debug" +version = "1.0.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aeff305b7d10cc1c888456d023e7bb8a5ea82e9e42b951e37619b88cc1a1486d" +dependencies = [ + "alloy-primitives", + "derive_more", + "serde", + "serde_with", +] + [[package]] name = "alloy-rpc-types-engine" -version = "1.0.33" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "997de3fb8ad67674af70c123d2c6344e8fb0cbbd7fb96fde106ee9e45a2912d2" +checksum = "222ecadcea6aac65e75e32b6735635ee98517aa63b111849ee01ae988a71d685" dependencies = [ "alloy-consensus", "alloy-eips", @@ -461,15 +606,17 @@ dependencies = [ "derive_more", "ethereum_ssz", "ethereum_ssz_derive", + "jsonwebtoken", + "rand 0.8.5", "serde", - "strum", + "strum 0.27.2", ] [[package]] name = "alloy-rpc-types-eth" -version = "1.0.36" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "848f8ea4063bed834443081d77f840f31075f68d0d49723027f5a209615150bf" +checksum = "db46b0901ee16bbb68d986003c66dcb74a12f9d9b3c44f8e85d51974f2458f0f" dependencies = [ "alloy-consensus", "alloy-consensus-any", @@ -483,14 +630,14 @@ dependencies = [ "serde", "serde_json", "serde_with", - "thiserror", + "thiserror 2.0.17", ] [[package]] name = "alloy-rpc-types-mev" -version = "1.0.33" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a04717f44c5404b1ef497f221869f243d5c9ea5bdfd5da8c25d6736a9d2b2e1" +checksum = "791a60d4baadd3f278faa4e2305cca095dfd4ab286e071b768ff09181d8ae215" dependencies = [ "alloy-consensus", "alloy-eips", @@ -503,23 +650,35 @@ dependencies = [ [[package]] name = "alloy-rpc-types-trace" -version = "1.0.33" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3741bce3ede19ed040d8f357a88a4aae8f714e4d07da7f2a11b77a698386d7e1" +checksum = "36f10620724bd45f80c79668a8cdbacb6974f860686998abce28f6196ae79444" dependencies = [ "alloy-primitives", "alloy-rpc-types-eth", "alloy-serde", "serde", "serde_json", - "thiserror", + "thiserror 2.0.17", +] + +[[package]] +name = "alloy-rpc-types-txpool" +version = "1.0.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "864f41befa90102d4e02327679699a7e9510930e2924c529e31476086609fa89" +dependencies = [ + "alloy-primitives", + "alloy-rpc-types-eth", + "alloy-serde", + "serde", ] [[package]] name = "alloy-serde" -version = "1.0.36" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19c3835bdc128f2f3418f5d6c76aec63a245d72973e0eaacc9720aa0787225c5" +checksum = "5413814be7a22fbc81e0f04a2401fcc3eb25e56fd53b04683e8acecc6e1fe01b" dependencies = [ "alloy-primitives", "serde", @@ -528,9 +687,9 @@ dependencies = [ [[package]] name = "alloy-signer" -version = "1.0.36" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42084a7b455ef0b94ed201b7494392a759c3e20faac2d00ded5d5762fcf71dee" +checksum = "53410a18a61916e2c073a6519499514e027b01e77eeaf96acd1df7cf96ef6bb2" dependencies = [ "alloy-primitives", "async-trait", @@ -538,14 +697,14 @@ dependencies = [ "either", "elliptic-curve 0.13.8", "k256", - "thiserror", + "thiserror 2.0.17", ] [[package]] name = "alloy-signer-local" -version = "1.0.36" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6312ccc048a4a88aed7311fc448a2e23da55c60c2b3b6dcdb794f759d02e49d7" +checksum = "e6006c4cbfa5d08cadec1fcabea6cb56dc585a30a9fce40bcf81e307d6a71c8e" dependencies = [ "alloy-consensus", "alloy-network", @@ -554,14 +713,14 @@ dependencies = [ "async-trait", "k256", "rand 0.8.5", - "thiserror", + "thiserror 2.0.17", ] [[package]] name = "alloy-sol-macro" -version = "1.3.1" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d20d867dcf42019d4779519a1ceb55eba8d7f3d0e4f0a89bcba82b8f9eb01e48" +checksum = "78c84c3637bee9b5c4a4d2b93360ee16553d299c3b932712353caf1cea76d0e6" dependencies = [ "alloy-sol-macro-expander", "alloy-sol-macro-input", @@ -573,9 +732,9 @@ dependencies = [ [[package]] name = "alloy-sol-macro-expander" -version = "1.3.1" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b74e91b0b553c115d14bd0ed41898309356dc85d0e3d4b9014c4e7715e48c8ad" +checksum = "a882aa4e1790063362434b9b40d358942b188477ac1c44cfb8a52816ffc0cc17" dependencies = [ "alloy-sol-macro-input", "const-hex", @@ -591,9 +750,9 @@ dependencies = [ [[package]] name = "alloy-sol-macro-input" -version = "1.3.1" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84194d31220803f5f62d0a00f583fd3a062b36382e2bea446f1af96727754565" +checksum = "18e5772107f9bb265d8d8c86e0733937bb20d0857ea5425b1b6ddf51a9804042" dependencies = [ "const-hex", "dunce", @@ -607,9 +766,9 @@ dependencies = [ [[package]] name = "alloy-sol-type-parser" -version = "1.3.1" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe8c27b3cf6b2bb8361904732f955bc7c05e00be5f469cec7e2280b6167f3ff0" +checksum = "e188b939aa4793edfaaa099cb1be4e620036a775b4bdf24fdc56f1cd6fd45890" dependencies = [ "serde", "winnow", @@ -617,9 +776,9 @@ dependencies = [ [[package]] name = "alloy-sol-types" -version = "1.3.1" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5383d34ea00079e6dd89c652bcbdb764db160cef84e6250926961a0b2295d04" +checksum = "c3c8a9a909872097caffc05df134e5ef2253a1cdb56d3a9cf0052a042ac763f9" dependencies = [ "alloy-json-abi", "alloy-primitives", @@ -629,9 +788,9 @@ dependencies = [ [[package]] name = "alloy-transport" -version = "1.0.33" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7200a72ccda236bc841df56964b1f816f451e317b172538ba3977357e789b8bd" +checksum = "d94ee404368a3d9910dfe61b203e888c6b0e151a50e147f95da8baff9f9c7763" dependencies = [ "alloy-json-rpc", "alloy-primitives", @@ -643,9 +802,9 @@ dependencies = [ "parking_lot", "serde", "serde_json", - "thiserror", + "thiserror 2.0.17", "tokio", - "tower", + "tower 0.5.2", "tracing", "url", "wasmtimer", @@ -653,19 +812,57 @@ dependencies = [ [[package]] name = "alloy-transport-http" -version = "1.0.33" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70e4b8f9a796065824ef6cee4eef88a0887b03e963d6ad526f1c8de369a44472" +checksum = "a2f8a6338d594f6c6481292215ee8f2fd7b986c80aba23f3f44e761a8658de78" dependencies = [ "alloy-json-rpc", "alloy-transport", "reqwest", "serde_json", - "tower", + "tower 0.5.2", "tracing", "url", ] +[[package]] +name = "alloy-transport-ipc" +version = "1.0.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17a37a8ca18006fa0a58c7489645619ff58cfa073f2b29c4e052c9bd114b123a" +dependencies = [ + "alloy-json-rpc", + "alloy-pubsub", + "alloy-transport", + "bytes", + "futures", + "interprocess", + "pin-project", + "serde", + "serde_json", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "alloy-transport-ws" +version = "1.0.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "679b0122b7bca9d4dc5eb2c0549677a3c53153f6e232f23f4b3ba5575f74ebde" +dependencies = [ + "alloy-pubsub", + "alloy-transport", + "futures", + "http 1.3.1", + "rustls 0.23.31", + "serde_json", + "tokio", + "tokio-tungstenite", + "tracing", + "ws_stream_wasm", +] + [[package]] name = "alloy-trie" version = "0.9.1" @@ -684,9 +881,9 @@ dependencies = [ [[package]] name = "alloy-tx-macros" -version = "1.0.36" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc79013f9ac3a8ddeb60234d43da09e6d6abfc1c9dd29d3fe97adfbece3f4a08" +checksum = "e64c09ec565a90ed8390d82aa08cd3b22e492321b96cb4a3d4f58414683c9e2f" dependencies = [ "alloy-primitives", "darling 0.21.3", @@ -706,9 +903,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.20" +version = "0.6.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ae563653d1938f79b1ab1b5e668c87c76a9930414574a6583a7b7e11a8e6192" +checksum = "43d5b281e737544384e969a5ccad3f1cdd24b48086a0fc1b2a5262a26b8f4f4a" dependencies = [ "anstyle", "anstyle-parse", @@ -721,9 +918,9 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.11" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "862ed96ca487e809f1c8e5a8447f6ee2cf102f846893800b20cebdf541fc6bbd" +checksum = "5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78" [[package]] name = "anstyle-parse" @@ -774,6 +971,12 @@ dependencies = [ "syn 2.0.106", ] +[[package]] +name = "arc-swap" +version = "1.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69f7f8c3906b62b754cd5326047894316021dcfe5a194c8ea52bdd94934a3457" + [[package]] name = "ark-bls12-381" version = "0.5.0" @@ -1079,6 +1282,36 @@ dependencies = [ "serde", ] +[[package]] +name = "asn1_der" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "155a5a185e42c6b77ac7b88a15143d930a9e9727a5b7b77eed417404ab15c247" + +[[package]] +name = "async-compression" +version = "0.4.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a89bce6054c720275ac2432fbba080a66a2106a44a1b804553930ca6909f4e0" +dependencies = [ + "compression-codecs", + "compression-core", + "futures-core", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "async-lock" +version = "3.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fd03604047cee9b6ce9de9f70c6cd540a0520c813cbd49bae61f33ab80ed1dc" +dependencies = [ + "event-listener", + "event-listener-strategy", + "pin-project-lite", +] + [[package]] name = "async-stream" version = "0.3.6" @@ -1112,6 +1345,17 @@ dependencies = [ "syn 2.0.106", ] +[[package]] +name = "async_io_stream" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6d7b9decdf35d8908a7e3ef02f64c5e9b1695e230154c0e8de3969142d9b94c" +dependencies = [ + "futures", + "pharos", + "rustc_version 0.4.1", +] + [[package]] name = "atoi" version = "2.0.0" @@ -1212,7 +1456,7 @@ version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dbfd150b5dbdb988bcc8fb1fe787eb6b7ee6180ca24da683b61ea5405f3d43ff" dependencies = [ - "bindgen", + "bindgen 0.69.5", "cc", "cmake", "dunce", @@ -1302,9 +1546,9 @@ dependencies = [ [[package]] name = "aws-sdk-ssooidc" -version = "1.85.0" +version = "1.86.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67e05f33b6c9026fecfe9b3b6740f34d41bc6ff641a6a32dabaab60209245b75" +checksum = "9d1cc7fb324aa12eb4404210e6381195c5b5e9d52c2682384f295f38716dd3c7" dependencies = [ "aws-credential-types", "aws-runtime", @@ -1438,9 +1682,9 @@ dependencies = [ [[package]] name = "aws-smithy-http-client" -version = "1.1.1" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "147e8eea63a40315d704b97bf9bc9b8c1402ae94f89d5ad6f7550d963309da1b" +checksum = "734b4282fbb7372923ac339cc2222530f8180d9d4745e582de19a18cee409fd8" dependencies = [ "aws-smithy-async", "aws-smithy-runtime-api", @@ -1461,8 +1705,8 @@ dependencies = [ "rustls-native-certs 0.8.1", "rustls-pki-types", "tokio", - "tokio-rustls 0.26.3", - "tower", + "tokio-rustls 0.26.4", + "tower 0.5.2", "tracing", ] @@ -1584,6 +1828,53 @@ dependencies = [ "tracing", ] +[[package]] +name = "axum" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edca88bc138befd0323b20752846e6587272d3b03b0343c8ea28a6f819e6e71f" +dependencies = [ + "async-trait", + "axum-core", + "bytes", + "futures-util", + "http 1.3.1", + "http-body 1.0.1", + "http-body-util", + "itoa", + "matchit", + "memchr", + "mime", + "percent-encoding", + "pin-project-lite", + "rustversion", + "serde", + "sync_wrapper", + "tower 0.5.2", + "tower-layer", + "tower-service", +] + +[[package]] +name = "axum-core" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09f2bd6146b97ae3359fa0cc6d6b376d9539582c7b4220f041a33ec24c226199" +dependencies = [ + "async-trait", + "bytes", + "futures-util", + "http 1.3.1", + "http-body 1.0.1", + "http-body-util", + "mime", + "pin-project-lite", + "rustversion", + "sync_wrapper", + "tower-layer", + "tower-service", +] + [[package]] name = "az" version = "1.2.1" @@ -1597,15 +1888,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "592277618714fbcecda9a02ba7a8781f319d26532a88553bbacc77ba5d2b3a8d" dependencies = [ "fastrand", - "gloo-timers", + "gloo-timers 0.3.0", "tokio", ] [[package]] name = "backtrace" -version = "0.3.75" +version = "0.3.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002" +checksum = "bb531853791a215d7c62a30daf0dde835f381ab5de4589cfe7c649d2cbe92bd6" dependencies = [ "addr2line", "cfg-if", @@ -1613,21 +1904,87 @@ dependencies = [ "miniz_oxide", "object", "rustc-demangle", - "windows-targets 0.52.6", + "windows-link 0.2.0", ] [[package]] -name = "base16ct" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "349a06037c7bf932dd7e7d1f653678b2038b9ad46a74102f1fc7bd7872678cce" +name = "base-reth-flashblocks-rpc" +version = "0.1.0" +source = "git+https://github.com/base/node-reth?rev=a1ae148a36354c88b356f80281fef12dad9f7737#a1ae148a36354c88b356f80281fef12dad9f7737" +dependencies = [ + "alloy-consensus", + "alloy-eips", + "alloy-genesis", + "alloy-primitives", + "alloy-provider", + "alloy-rpc-client", + "alloy-rpc-types", + "alloy-rpc-types-engine", + "alloy-rpc-types-eth", + "arc-swap", + "brotli", + "eyre", + "futures-util", + "jsonrpsee 0.26.0", + "jsonrpsee-types 0.26.0", + "metrics", + "metrics-derive", + "op-alloy-consensus", + "op-alloy-network", + "op-alloy-rpc-types", + "reth", + "reth-evm", + "reth-exex", + "reth-optimism-chainspec", + "reth-optimism-cli", + "reth-optimism-evm", + "reth-optimism-node", + "reth-optimism-primitives", + "reth-optimism-rpc", + "reth-primitives", + "reth-primitives-traits", + "reth-provider", + "reth-rpc-convert", + "reth-rpc-eth-api", + "reth-tracing", + "rollup-boost", + "serde", + "serde_json", + "tokio", + "tokio-stream", + "tokio-tungstenite", + "tracing", + "url", +] [[package]] -name = "base16ct" +name = "base-x" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cbbc9d0964165b47557570cce6c952866c2678457aca742aafc9fb771d30270" + +[[package]] +name = "base16ct" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "349a06037c7bf932dd7e7d1f653678b2038b9ad46a74102f1fc7bd7872678cce" + +[[package]] +name = "base16ct" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" +[[package]] +name = "base256emoji" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e9430d9a245a77c92176e649af6e275f20839a48389859d1661e9a128d077c" +dependencies = [ + "const-str", + "match-lookup", +] + [[package]] name = "base64" version = "0.21.7" @@ -1656,6 +2013,21 @@ version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "55248b47b0caf0546f7988906588779981c43bb1bc9d0c44087278f80cdb44ba" +[[package]] +name = "bimap" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "230c5f1ca6a325a32553f8640d31ac9b49f2411e901e427570154868b46da4f7" + +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "serde", +] + [[package]] name = "bindgen" version = "0.69.5" @@ -1679,6 +2051,42 @@ dependencies = [ "which", ] +[[package]] +name = "bindgen" +version = "0.70.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f49d8fed880d473ea71efb9bf597651e77201bdd4893efe54c9e5d65ae04ce6f" +dependencies = [ + "bitflags 2.9.4", + "cexpr", + "clang-sys", + "itertools 0.13.0", + "proc-macro2", + "quote", + "regex", + "rustc-hash 1.1.0", + "shlex", + "syn 2.0.106", +] + +[[package]] +name = "bindgen" +version = "0.72.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "993776b509cfb49c750f11b8f07a46fa23e0a1386ffc01fb1e7d343efc387895" +dependencies = [ + "bitflags 2.9.4", + "cexpr", + "clang-sys", + "itertools 0.13.0", + "proc-macro2", + "quote", + "regex", + "rustc-hash 2.1.1", + "shlex", + "syn 2.0.106", +] + [[package]] name = "bit-set" version = "0.8.0" @@ -1756,11 +2164,20 @@ dependencies = [ "generic-array", ] +[[package]] +name = "block-padding" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8894febbff9f758034a5b8e12d87918f56dfc64a8e1fe757d65e29041538d93" +dependencies = [ + "generic-array", +] + [[package]] name = "blst" -version = "0.3.15" +version = "0.3.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fd49896f12ac9b6dcd7a5998466b9b58263a695a3dd1ecc1aaca2e12a90b080" +checksum = "dcdb4c7013139a150f9fc55d123186dbfaba0d912817466282c73ac49e71fb45" dependencies = [ "cc", "glob", @@ -1768,6 +2185,145 @@ dependencies = [ "zeroize", ] +[[package]] +name = "boa_ast" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c340fe0f0b267787095cbe35240c6786ff19da63ec7b69367ba338eace8169b" +dependencies = [ + "bitflags 2.9.4", + "boa_interner", + "boa_macros", + "boa_string", + "indexmap 2.11.4", + "num-bigint", + "rustc-hash 2.1.1", +] + +[[package]] +name = "boa_engine" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f620c3f06f51e65c0504ddf04978be1b814ac6586f0b45f6019801ab5efd37f9" +dependencies = [ + "arrayvec", + "bitflags 2.9.4", + "boa_ast", + "boa_gc", + "boa_interner", + "boa_macros", + "boa_parser", + "boa_profiler", + "boa_string", + "bytemuck", + "cfg-if", + "dashmap 6.1.0", + "fast-float2", + "hashbrown 0.15.5", + "icu_normalizer 1.5.0", + "indexmap 2.11.4", + "intrusive-collections", + "itertools 0.13.0", + "num-bigint", + "num-integer", + "num-traits", + "num_enum", + "once_cell", + "pollster", + "portable-atomic", + "rand 0.8.5", + "regress", + "rustc-hash 2.1.1", + "ryu-js", + "serde", + "serde_json", + "sptr", + "static_assertions", + "tap", + "thin-vec", + "thiserror 2.0.17", + "time", +] + +[[package]] +name = "boa_gc" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2425c0b7720d42d73eaa6a883fbb77a5c920da8694964a3d79a67597ac55cce2" +dependencies = [ + "boa_macros", + "boa_profiler", + "boa_string", + "hashbrown 0.15.5", + "thin-vec", +] + +[[package]] +name = "boa_interner" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42407a3b724cfaecde8f7d4af566df4b56af32a2f11f0956f5570bb974e7f749" +dependencies = [ + "boa_gc", + "boa_macros", + "hashbrown 0.15.5", + "indexmap 2.11.4", + "once_cell", + "phf", + "rustc-hash 2.1.1", + "static_assertions", +] + +[[package]] +name = "boa_macros" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fd3f870829131332587f607a7ff909f1af5fc523fd1b192db55fbbdf52e8d3c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", + "synstructure", +] + +[[package]] +name = "boa_parser" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cc142dac798cdc6e2dbccfddeb50f36d2523bb977a976e19bdb3ae19b740804" +dependencies = [ + "bitflags 2.9.4", + "boa_ast", + "boa_interner", + "boa_macros", + "boa_profiler", + "fast-float2", + "icu_properties 1.5.1", + "num-bigint", + "num-traits", + "regress", + "rustc-hash 2.1.1", +] + +[[package]] +name = "boa_profiler" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4064908e7cdf9b6317179e9b04dcb27f1510c1c144aeab4d0394014f37a0f922" + +[[package]] +name = "boa_string" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7debc13fbf7997bf38bf8e9b20f1ad5e2a7d27a900e1f6039fe244ce30f589b5" +dependencies = [ + "fast-float2", + "paste", + "rustc-hash 2.1.1", + "sptr", + "static_assertions", +] + [[package]] name = "bollard" version = "0.18.1" @@ -1799,7 +2355,7 @@ dependencies = [ "serde_json", "serde_repr", "serde_urlencoded", - "thiserror", + "thiserror 2.0.17", "tokio", "tokio-util", "tower-service", @@ -1818,6 +2374,45 @@ dependencies = [ "serde_with", ] +[[package]] +name = "boyer-moore-magiclen" +version = "0.2.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95e6233f2d926b5b123caf9d58e3885885255567fbe7776a7fdcae2a4d7241c4" +dependencies = [ + "debug-helper", +] + +[[package]] +name = "brotli" +version = "8.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bd8b9603c7aa97359dbd97ecf258968c95f3adddd6db2f7e7a5bef101c84560" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", + "brotli-decompressor", +] + +[[package]] +name = "brotli-decompressor" +version = "5.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "874bb8112abecc98cbd6d81ea4fa7e94fb9449648c93cc89aa40c81c24d7de03" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", +] + +[[package]] +name = "bs58" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" +dependencies = [ + "tinyvec", +] + [[package]] name = "bumpalo" version = "3.19.0" @@ -1830,6 +2425,32 @@ version = "1.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7575182f7272186991736b70173b0ea045398f984bf5ebbb3804736ce1330c9d" +[[package]] +name = "bytecount" +version = "0.6.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "175812e0be2bccb6abe50bb8d566126198344f707e304f45c648fd8f2cc0365e" + +[[package]] +name = "bytemuck" +version = "1.23.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3995eaeebcdf32f91f980d360f78732ddc061097ab4e39991ae7a6ace9194677" +dependencies = [ + "bytemuck_derive", +] + +[[package]] +name = "bytemuck_derive" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f154e572231cb6ba2bd1176980827e3d5dc04cc183a75dea38109fbdd672d29" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + [[package]] name = "byteorder" version = "1.5.0" @@ -1857,9 +2478,9 @@ dependencies = [ [[package]] name = "c-kzg" -version = "2.1.1" +version = "2.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7318cfa722931cb5fe0838b98d3ce5621e75f6a6408abc21721d80de9223f2e4" +checksum = "e00bf4b112b07b505472dbefd19e37e53307e2bfed5a79e0cc161d58ccd0e687" dependencies = [ "blst", "cc", @@ -1870,6 +2491,66 @@ dependencies = [ "serde", ] +[[package]] +name = "camino" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "276a59bf2b2c967788139340c9f0c5b12d7fd6630315c15c217e559de85d2609" +dependencies = [ + "serde_core", +] + +[[package]] +name = "cargo-platform" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e35af189006b9c0f00a064685c727031e3ed2d8020f7ba284d78cc2671bd36ea" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo_metadata" +version = "0.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4acbb09d9ee8e23699b9634375c72795d095bf268439da88562cf9b501f181fa" +dependencies = [ + "camino", + "cargo-platform", + "semver 1.0.27", + "serde", + "serde_json", +] + +[[package]] +name = "cargo_metadata" +version = "0.19.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd5eb614ed4c27c5d706420e4320fbe3216ab31fa1c33cd8246ac36dae4479ba" +dependencies = [ + "camino", + "cargo-platform", + "semver 1.0.27", + "serde", + "serde_json", + "thiserror 2.0.17", +] + +[[package]] +name = "cassowary" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df8670b8c7b9dae1793364eafadf7239c40d669904660c5960d74cfd80b46a53" + +[[package]] +name = "castaway" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dec551ab6e7578819132c713a93c022a05d60159dc86e7a7050223577484c55a" +dependencies = [ + "rustversion", +] + [[package]] name = "cc" version = "1.2.15" @@ -1881,6 +2562,12 @@ dependencies = [ "shlex", ] +[[package]] +name = "cesu8" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" + [[package]] name = "cexpr" version = "0.6.0" @@ -1909,11 +2596,23 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2" dependencies = [ "iana-time-zone", + "js-sys", "num-traits", "serde", + "wasm-bindgen", "windows-link 0.2.0", ] +[[package]] +name = "cipher" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" +dependencies = [ + "crypto-common", + "inout", +] + [[package]] name = "clang-sys" version = "1.8.1" @@ -1927,9 +2626,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.47" +version = "4.5.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7eac00902d9d136acd712710d71823fb8ac8004ca445a89e73a41d45aa712931" +checksum = "e2134bb3ea021b78629caa971416385309e0131b351b25e01dc16fb54e1b5fae" dependencies = [ "clap_builder", "clap_derive", @@ -1937,9 +2636,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.47" +version = "4.5.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ad9bbf750e73b5884fb8a211a9424a1906c1e156724260fdae972f31d70e1d6" +checksum = "c2ba64afa3c0a6df7fa517765e31314e983f51dda798ffba27b988194fb65dc9" dependencies = [ "anstream", "anstyle", @@ -1981,19 +2680,83 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" [[package]] -name = "concurrent-queue" -version = "2.5.0" +name = "combine" +version = "4.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" +checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" dependencies = [ - "crossbeam-utils", + "bytes", + "memchr", ] [[package]] -name = "const-hex" -version = "1.16.0" +name = "comfy-table" +version = "7.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6407bff74dea37e0fa3dc1c1c974e5d46405f0c987bf9997a0762adce71eda6" +checksum = "b03b7db8e0b4b2fdad6c551e634134e99ec000e5c8c3b6856c65e8bbaded7a3b" +dependencies = [ + "crossterm 0.29.0", + "unicode-segmentation", + "unicode-width 0.2.0", +] + +[[package]] +name = "compact_str" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b79c4069c6cad78e2e0cdfcbd26275770669fb39fd308a752dc110e83b9af32" +dependencies = [ + "castaway", + "cfg-if", + "itoa", + "rustversion", + "ryu", + "static_assertions", +] + +[[package]] +name = "compression-codecs" +version = "0.4.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef8a506ec4b81c460798f572caead636d57d3d7e940f998160f52bd254bf2d23" +dependencies = [ + "brotli", + "compression-core", + "flate2", + "memchr", + "zstd", + "zstd-safe", +] + +[[package]] +name = "compression-core" +version = "0.4.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e47641d3deaf41fb1538ac1f54735925e275eaf3bf4d55c81b137fba797e5cbb" + +[[package]] +name = "concat-kdf" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d72c1252426a83be2092dd5884a5f6e3b8e7180f6891b6263d2c21b92ec8816" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "concurrent-queue" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "const-hex" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6407bff74dea37e0fa3dc1c1c974e5d46405f0c987bf9997a0762adce71eda6" dependencies = [ "cfg-if", "cpufeatures", @@ -2007,6 +2770,12 @@ version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" +[[package]] +name = "const-str" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f421161cb492475f1661ddc9815a745a1c894592070661180fdec3d4872e9c3" + [[package]] name = "const_format" version = "0.2.34" @@ -2062,6 +2831,15 @@ version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" +[[package]] +name = "core2" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b49ba7ef1ad6107f8824dbe97de947cbaac53c44e7f9756a1fba0d37c1eec505" +dependencies = [ + "memchr", +] + [[package]] name = "cpufeatures" version = "0.2.17" @@ -2114,6 +2892,15 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b" +[[package]] +name = "crossbeam-channel" +version = "0.5.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" +dependencies = [ + "crossbeam-utils", +] + [[package]] name = "crossbeam-deque" version = "0.8.6" @@ -2148,6 +2935,45 @@ version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" +[[package]] +name = "crossterm" +version = "0.28.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "829d955a0bb380ef178a640b91779e3987da38c9aea133b20614cfed8cdea9c6" +dependencies = [ + "bitflags 2.9.4", + "crossterm_winapi", + "mio", + "parking_lot", + "rustix 0.38.44", + "signal-hook", + "signal-hook-mio", + "winapi", +] + +[[package]] +name = "crossterm" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8b9f2e4c67f833b660cdb0a3523065869fb35570177239812ed4c905aeff87b" +dependencies = [ + "bitflags 2.9.4", + "crossterm_winapi", + "document-features", + "parking_lot", + "rustix 1.1.2", + "winapi", +] + +[[package]] +name = "crossterm_winapi" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acdd7c62a3665c7f6830a51635d9ac9b23ed385797f70a83bb8bafe9c572ab2b" +dependencies = [ + "winapi", +] + [[package]] name = "crunchy" version = "0.2.4" @@ -2185,9 +3011,46 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" dependencies = [ "generic-array", + "rand_core 0.6.4", "typenum", ] +[[package]] +name = "ctr" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" +dependencies = [ + "cipher", +] + +[[package]] +name = "curve25519-dalek" +version = "4.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" +dependencies = [ + "cfg-if", + "cpufeatures", + "curve25519-dalek-derive", + "digest 0.10.7", + "fiat-crypto", + "rustc_version 0.4.1", + "subtle", + "zeroize", +] + +[[package]] +name = "curve25519-dalek-derive" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + [[package]] name = "darling" version = "0.20.11" @@ -2259,6 +3122,19 @@ dependencies = [ "syn 2.0.106", ] +[[package]] +name = "dashmap" +version = "5.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" +dependencies = [ + "cfg-if", + "hashbrown 0.14.5", + "lock_api", + "once_cell", + "parking_lot_core", +] + [[package]] name = "dashmap" version = "6.1.0" @@ -2273,6 +3149,49 @@ dependencies = [ "parking_lot_core", ] +[[package]] +name = "data-encoding" +version = "2.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476" + +[[package]] +name = "data-encoding-macro" +version = "0.1.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47ce6c96ea0102f01122a185683611bd5ac8d99e62bc59dd12e6bda344ee673d" +dependencies = [ + "data-encoding", + "data-encoding-macro-internal", +] + +[[package]] +name = "data-encoding-macro-internal" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d162beedaa69905488a8da94f5ac3edb4dd4788b732fadb7bd120b2625c1976" +dependencies = [ + "data-encoding", + "syn 2.0.106", +] + +[[package]] +name = "debug-helper" +version = "0.3.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f578e8e2c440e7297e008bb5486a3a8a194775224bbc23729b0dbdfaeebf162e" + +[[package]] +name = "delay_map" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88e365f083a5cb5972d50ce8b1b2c9f125dc5ec0f50c0248cfb568ae59efcf0b" +dependencies = [ + "futures", + "tokio", + "tokio-util", +] + [[package]] name = "der" version = "0.6.1" @@ -2296,12 +3215,12 @@ dependencies = [ [[package]] name = "deranged" -version = "0.5.3" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d630bccd429a5bb5a64b5e94f693bfc48c9f8566418fda4c494cc94f911f87cc" +checksum = "a41953f86f8a05768a6cda24def994fd2f424b04ec5c719cf89989779f199071" dependencies = [ "powerfmt", - "serde", + "serde_core", ] [[package]] @@ -2326,6 +3245,37 @@ dependencies = [ "syn 2.0.106", ] +[[package]] +name = "derive_builder" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "507dfb09ea8b7fa618fcf76e953f4f5e192547945816d5358edffe39f6f94947" +dependencies = [ + "derive_builder_macro", +] + +[[package]] +name = "derive_builder_core" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d5bcf7b024d6835cfb3d473887cd966994907effbe9227e8c8219824d06c4e8" +dependencies = [ + "darling 0.20.11", + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "derive_builder_macro" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c" +dependencies = [ + "derive_builder_core", + "syn 2.0.106", +] + [[package]] name = "derive_more" version = "2.0.1" @@ -2348,6 +3298,12 @@ dependencies = [ "unicode-xid", ] +[[package]] +name = "diff" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8" + [[package]] name = "digest" version = "0.9.0" @@ -2369,6 +3325,81 @@ dependencies = [ "subtle", ] +[[package]] +name = "dirs" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3e8aa94d75141228480295a7d0e7feb620b1a5ad9f12bc40be62411e38cce4e" +dependencies = [ + "dirs-sys", +] + +[[package]] +name = "dirs-next" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" +dependencies = [ + "cfg-if", + "dirs-sys-next", +] + +[[package]] +name = "dirs-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab" +dependencies = [ + "libc", + "option-ext", + "redox_users 0.5.2", + "windows-sys 0.61.1", +] + +[[package]] +name = "dirs-sys-next" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" +dependencies = [ + "libc", + "redox_users 0.4.6", + "winapi", +] + +[[package]] +name = "discv5" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4b4e7798d2ff74e29cee344dc490af947ae657d6ab5273dde35d58ce06a4d71" +dependencies = [ + "aes", + "aes-gcm", + "alloy-rlp", + "arrayvec", + "ctr", + "delay_map", + "enr", + "fnv", + "futures", + "hashlink 0.9.1", + "hex", + "hkdf", + "lazy_static", + "libp2p-identity", + "lru 0.12.5", + "more-asserts", + "multiaddr", + "parking_lot", + "rand 0.8.5", + "smallvec", + "socket2 0.5.10", + "tokio", + "tracing", + "uint 0.10.0", + "zeroize", +] + [[package]] name = "displaydoc" version = "0.2.5" @@ -2391,6 +3422,21 @@ dependencies = [ "serde_json", ] +[[package]] +name = "doctest-file" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aac81fa3e28d21450aa4d2ac065992ba96a1d7303efbce51a95f4fd175b67562" + +[[package]] +name = "document-features" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95249b50c6c185bee49034bcb378a49dc2b5dff0be90ff6616d31d64febab05d" +dependencies = [ + "litrs", +] + [[package]] name = "dotenvy" version = "0.15.7" @@ -2436,6 +3482,31 @@ dependencies = [ "spki 0.7.3", ] +[[package]] +name = "ed25519" +version = "2.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" +dependencies = [ + "pkcs8 0.10.2", + "signature 2.2.0", +] + +[[package]] +name = "ed25519-dalek" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70e796c081cee67dc755e1a36a0a172b897fab85fc3f6bc48307991f64e4eca9" +dependencies = [ + "curve25519-dalek", + "ed25519", + "rand_core 0.6.4", + "serde", + "sha2 0.10.9", + "subtle", + "zeroize", +] + [[package]] name = "educe" version = "0.6.0" @@ -2497,6 +3568,12 @@ dependencies = [ "zeroize", ] +[[package]] +name = "endian-type" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c34f04666d835ff5d62e058c3995147c06f42fe86ff053337632bca83e42702d" + [[package]] name = "enr" version = "0.13.0" @@ -2506,14 +3583,29 @@ dependencies = [ "alloy-rlp", "base64 0.22.1", "bytes", + "ed25519-dalek", "hex", + "k256", "log", "rand 0.8.5", "secp256k1 0.30.0", + "serde", "sha3", "zeroize", ] +[[package]] +name = "enum-as-inner" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1e6a265c649f3f5979b601d26f1d05ada116434c87741c9493cb56218f76cbc" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn 2.0.106", +] + [[package]] name = "enum-ordinalize" version = "4.3.0" @@ -2547,7 +3639,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.61.0", + "windows-sys 0.61.1", +] + +[[package]] +name = "error-chain" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d2f06b9cac1506ece98fe3231e3cc9c4410ec3d5b1f24ae1c8946f0742cdefc" +dependencies = [ + "version_check", ] [[package]] @@ -2561,6 +3662,17 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "ethereum_hashing" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c853bd72c9e5787f8aafc3df2907c2ed03cff3150c3acd94e2e53a98ab70a8ab" +dependencies = [ + "cpufeatures", + "ring", + "sha2 0.10.9", +] + [[package]] name = "ethereum_serde_utils" version = "0.8.0" @@ -2576,9 +3688,9 @@ dependencies = [ [[package]] name = "ethereum_ssz" -version = "0.9.0" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ca8ba45b63c389c6e115b095ca16381534fdcc03cf58176a3f8554db2dbe19b" +checksum = "0dcddb2554d19cde19b099fadddde576929d7a4d0c1cd3512d1fd95cf174375c" dependencies = [ "alloy-primitives", "ethereum_serde_utils", @@ -2591,9 +3703,9 @@ dependencies = [ [[package]] name = "ethereum_ssz_derive" -version = "0.9.0" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dd55d08012b4e0dfcc92b8d6081234df65f2986ad34cc76eeed69c5e2ce7506" +checksum = "a657b6b3b7e153637dc6bdc6566ad9279d9ee11a15b12cfb24a2e04360637e9f" dependencies = [ "darling 0.20.11", "proc-macro2", @@ -2612,6 +3724,16 @@ dependencies = [ "pin-project-lite", ] +[[package]] +name = "event-listener-strategy" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93" +dependencies = [ + "event-listener", + "pin-project-lite", +] + [[package]] name = "eyre" version = "0.6.12" @@ -2622,6 +3744,12 @@ dependencies = [ "once_cell", ] +[[package]] +name = "fast-float2" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8eb564c5c7423d25c886fb561d1e4ee69f72354d16918afa32c08811f6b6a55" + [[package]] name = "fastrand" version = "2.3.0" @@ -2650,6 +3778,16 @@ dependencies = [ "bytes", ] +[[package]] +name = "fdlimit" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e182f7dbc2ef73d9ef67351c5fbbea084729c48362d3ce9dd44c28e32e277fe5" +dependencies = [ + "libc", + "thiserror 1.0.69", +] + [[package]] name = "ff" version = "0.12.1" @@ -2670,6 +3808,12 @@ dependencies = [ "subtle", ] +[[package]] +name = "fiat-crypto" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" + [[package]] name = "filetime" version = "0.2.26" @@ -2694,6 +3838,16 @@ dependencies = [ "static_assertions", ] +[[package]] +name = "flate2" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a3d7db9596fecd151c5f638c0ee5d5bd487b6e0ea232e5dc96d5250f6f94b1d" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + [[package]] name = "flume" version = "0.11.1" @@ -2717,6 +3871,12 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" +[[package]] +name = "foldhash" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" + [[package]] name = "foreign-types" version = "0.3.2" @@ -2747,6 +3907,15 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" +[[package]] +name = "fsevent-sys" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76ee7a02da4d231650c7cea31349b889be2f45ddb3ef3032d2ec8185f6313fd2" +dependencies = [ + "libc", +] + [[package]] name = "funty" version = "2.0.0" @@ -2835,6 +4004,16 @@ version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" +[[package]] +name = "futures-timer" +version = "3.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" +dependencies = [ + "gloo-timers 0.2.6", + "send_wrapper 0.4.0", +] + [[package]] name = "futures-util" version = "0.3.31" @@ -2865,6 +4044,7 @@ version = "0.14.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" dependencies = [ + "serde", "typenum", "version_check", "zeroize", @@ -2897,11 +4077,34 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "ghash" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0d8a4362ccb29cb0b265253fb0a2728f592895ee6854fd9bc13f2ffda266ff1" +dependencies = [ + "opaque-debug", + "polyval", +] + [[package]] name = "gimli" -version = "0.31.1" +version = "0.32.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e629b9b98ef3dd8afe6ca2bd0f89306cec16d43d907889945bc5d6687f2f13c7" + +[[package]] +name = "git2" +version = "0.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" +checksum = "2deb07a133b1520dc1a5690e9bd08950108873d7ed5de38dcc74d3b5ebffa110" +dependencies = [ + "bitflags 2.9.4", + "libc", + "libgit2-sys", + "log", + "url", +] [[package]] name = "glob" @@ -2909,6 +4112,39 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" +[[package]] +name = "gloo-net" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06f627b1a58ca3d42b45d6104bf1e1a03799df472df00988b6ba21accc10580" +dependencies = [ + "futures-channel", + "futures-core", + "futures-sink", + "gloo-utils", + "http 1.3.1", + "js-sys", + "pin-project", + "serde", + "serde_json", + "thiserror 1.0.69", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "gloo-timers" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b995a66bb87bebce9a0f4a95aed01daca4872c050bfcb21653361c03bc35e5c" +dependencies = [ + "futures-channel", + "futures-core", + "js-sys", + "wasm-bindgen", +] + [[package]] name = "gloo-timers" version = "0.3.0" @@ -2921,6 +4157,19 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "gloo-utils" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b5555354113b18c547c1d3a98fbf7fb32a9ff4f6fa112ce823a21641a0ba3aa" +dependencies = [ + "js-sys", + "serde", + "serde_json", + "wasm-bindgen", + "web-sys", +] + [[package]] name = "gmp-mpfr-sys" version = "1.6.8" @@ -3008,6 +4257,9 @@ name = "hashbrown" version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +dependencies = [ + "ahash", +] [[package]] name = "hashbrown" @@ -3017,8 +4269,7 @@ checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" dependencies = [ "allocator-api2", "equivalent", - "foldhash", - "serde", + "foldhash 0.1.5", ] [[package]] @@ -3026,6 +4277,19 @@ name = "hashbrown" version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d" +dependencies = [ + "foldhash 0.2.0", + "serde", +] + +[[package]] +name = "hashlink" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ba4ff7128dee98c7dc9794b6a411377e1404dba1c97deb8d1a55297bd25d8af" +dependencies = [ + "hashbrown 0.14.5", +] [[package]] name = "hashlink" @@ -3036,6 +4300,16 @@ dependencies = [ "hashbrown 0.15.5", ] +[[package]] +name = "hdrhistogram" +version = "7.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "765c9198f173dd59ce26ff9f95ef0aafd0a0fe01fb9d72841bc5066a4c06511d" +dependencies = [ + "byteorder", + "num-traits", +] + [[package]] name = "heck" version = "0.5.0" @@ -3063,6 +4337,54 @@ dependencies = [ "arrayvec", ] +[[package]] +name = "hickory-proto" +version = "0.25.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8a6fe56c0038198998a6f217ca4e7ef3a5e51f46163bd6dd60b5c71ca6c6502" +dependencies = [ + "async-trait", + "cfg-if", + "data-encoding", + "enum-as-inner", + "futures-channel", + "futures-io", + "futures-util", + "idna", + "ipnet", + "once_cell", + "rand 0.9.2", + "ring", + "serde", + "thiserror 2.0.17", + "tinyvec", + "tokio", + "tracing", + "url", +] + +[[package]] +name = "hickory-resolver" +version = "0.25.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc62a9a99b0bfb44d2ab95a7208ac952d31060efc16241c87eaf36406fecf87a" +dependencies = [ + "cfg-if", + "futures-util", + "hickory-proto", + "ipconfig", + "moka", + "once_cell", + "parking_lot", + "rand 0.9.2", + "resolv-conf", + "serde", + "smallvec", + "thiserror 2.0.17", + "tokio", + "tracing", +] + [[package]] name = "hkdf" version = "0.12.4" @@ -3146,6 +4468,12 @@ dependencies = [ "pin-project-lite", ] +[[package]] +name = "http-range-header" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9171a2ea8a68358193d15dd5d70c1c10a2afc3e7e4c5bc92bc9f025cebd7359c" + [[package]] name = "httparse" version = "1.10.1" @@ -3158,6 +4486,28 @@ version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" +[[package]] +name = "human_bytes" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91f255a4535024abf7640cb288260811fc14794f62b063652ed349f9a6c2348e" + +[[package]] +name = "humantime" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "135b12329e5e3ce057a9f972339ea52bc954fe1e9358ef27f95e89716fbc5424" + +[[package]] +name = "humantime-serde" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57a3db5ea5923d99402c94e9feb261dc5ee9b4efa158b0315f788cf549cc200c" +dependencies = [ + "humantime", + "serde", +] + [[package]] name = "hyper" version = "0.14.32" @@ -3245,11 +4595,26 @@ dependencies = [ "http 1.3.1", "hyper 1.7.0", "hyper-util", + "log", "rustls 0.23.31", "rustls-native-certs 0.8.1", "rustls-pki-types", "tokio", - "tokio-rustls 0.26.3", + "tokio-rustls 0.26.4", + "tower-service", + "webpki-roots 1.0.2", +] + +[[package]] +name = "hyper-timeout" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b90d566bffbce6a75bd8b09a05aa8c2cb1fabb6cb348f8840c9e4c90a0d83b0" +dependencies = [ + "hyper 1.7.0", + "hyper-util", + "pin-project-lite", + "tokio", "tower-service", ] @@ -3287,10 +4652,12 @@ dependencies = [ "libc", "percent-encoding", "pin-project-lite", - "socket2 0.5.10", + "socket2 0.6.0", + "system-configuration", "tokio", "tower-service", "tracing", + "windows-registry", ] [[package]] @@ -3320,7 +4687,7 @@ dependencies = [ "js-sys", "log", "wasm-bindgen", - "windows-core", + "windows-core 0.62.1", ] [[package]] @@ -3332,6 +4699,18 @@ dependencies = [ "cc", ] +[[package]] +name = "icu_collections" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" +dependencies = [ + "displaydoc", + "yoke 0.7.5", + "zerofrom", + "zerovec 0.10.4", +] + [[package]] name = "icu_collections" version = "2.0.0" @@ -3340,9 +4719,9 @@ checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47" dependencies = [ "displaydoc", "potential_utf", - "yoke", + "yoke 0.8.0", "zerofrom", - "zerovec", + "zerovec 0.11.4", ] [[package]] @@ -3352,55 +4731,150 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a" dependencies = [ "displaydoc", - "litemap", - "tinystr", - "writeable", - "zerovec", + "litemap 0.8.0", + "tinystr 0.8.1", + "writeable 0.6.1", + "zerovec 0.11.4", ] [[package]] -name = "icu_normalizer" -version = "2.0.0" +name = "icu_locid" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979" +checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" dependencies = [ "displaydoc", - "icu_collections", - "icu_normalizer_data", - "icu_properties", - "icu_provider", - "smallvec", - "zerovec", + "litemap 0.7.5", + "tinystr 0.7.6", + "writeable 0.5.5", + "zerovec 0.10.4", ] [[package]] -name = "icu_normalizer_data" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" - -[[package]] -name = "icu_properties" -version = "2.0.1" +name = "icu_locid_transform" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" +checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" dependencies = [ "displaydoc", - "icu_collections", - "icu_locale_core", - "icu_properties_data", - "icu_provider", - "potential_utf", - "zerotrie", - "zerovec", + "icu_locid", + "icu_locid_transform_data", + "icu_provider 1.5.0", + "tinystr 0.7.6", + "zerovec 0.10.4", ] [[package]] -name = "icu_properties_data" -version = "2.0.1" +name = "icu_locid_transform_data" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7515e6d781098bf9f7205ab3fc7e9709d34554ae0b21ddbcb5febfa4bc7df11d" + +[[package]] +name = "icu_normalizer" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" +dependencies = [ + "displaydoc", + "icu_collections 1.5.0", + "icu_normalizer_data 1.5.1", + "icu_properties 1.5.1", + "icu_provider 1.5.0", + "smallvec", + "utf16_iter", + "utf8_iter", + "write16", + "zerovec 0.10.4", +] + +[[package]] +name = "icu_normalizer" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979" +dependencies = [ + "displaydoc", + "icu_collections 2.0.0", + "icu_normalizer_data 2.0.0", + "icu_properties 2.0.1", + "icu_provider 2.0.0", + "smallvec", + "zerovec 0.11.4", +] + +[[package]] +name = "icu_normalizer_data" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5e8338228bdc8ab83303f16b797e177953730f601a96c25d10cb3ab0daa0cb7" + +[[package]] +name = "icu_normalizer_data" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" + +[[package]] +name = "icu_properties" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" +dependencies = [ + "displaydoc", + "icu_collections 1.5.0", + "icu_locid_transform", + "icu_properties_data 1.5.1", + "icu_provider 1.5.0", + "tinystr 0.7.6", + "zerovec 0.10.4", +] + +[[package]] +name = "icu_properties" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" +dependencies = [ + "displaydoc", + "icu_collections 2.0.0", + "icu_locale_core", + "icu_properties_data 2.0.1", + "icu_provider 2.0.0", + "potential_utf", + "zerotrie", + "zerovec 0.11.4", +] + +[[package]] +name = "icu_properties_data" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85fb8799753b75aee8d2a21d7c14d9f38921b54b3dbda10f5a3c7a7b82dba5e2" + +[[package]] +name = "icu_properties_data" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" +[[package]] +name = "icu_provider" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_provider_macros", + "stable_deref_trait", + "tinystr 0.7.6", + "writeable 0.5.5", + "yoke 0.7.5", + "zerofrom", + "zerovec 0.10.4", +] + [[package]] name = "icu_provider" version = "2.0.0" @@ -3410,12 +4884,23 @@ dependencies = [ "displaydoc", "icu_locale_core", "stable_deref_trait", - "tinystr", - "writeable", - "yoke", + "tinystr 0.8.1", + "writeable 0.6.1", + "yoke 0.8.0", "zerofrom", "zerotrie", - "zerovec", + "zerovec 0.11.4", +] + +[[package]] +name = "icu_provider_macros" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", ] [[package]] @@ -3441,8 +4926,18 @@ version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" dependencies = [ - "icu_normalizer", - "icu_properties", + "icu_normalizer 2.0.0", + "icu_properties 2.0.1", +] + +[[package]] +name = "if-addrs" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69b2eeee38fef3aa9b4cc5f1beea8a2444fc00e7377cafae396de3f5c2065e24" +dependencies = [ + "libc", + "windows-sys 0.59.0", ] [[package]] @@ -3513,6 +5008,79 @@ dependencies = [ "serde_core", ] +[[package]] +name = "indoc" +version = "2.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4c7245a08504955605670dbf141fceab975f15ca21570696aebe9d2e71576bd" + +[[package]] +name = "inotify" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f37dccff2791ab604f9babef0ba14fbe0be30bd368dc541e2b08d07c8aa908f3" +dependencies = [ + "bitflags 2.9.4", + "inotify-sys", + "libc", +] + +[[package]] +name = "inotify-sys" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e05c02b5e89bff3b946cedeca278abc628fe811e604f027c45a8aa3cf793d0eb" +dependencies = [ + "libc", +] + +[[package]] +name = "inout" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" +dependencies = [ + "block-padding", + "generic-array", +] + +[[package]] +name = "instability" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "435d80800b936787d62688c927b6490e887c7ef5ff9ce922c6c6050fca75eb9a" +dependencies = [ + "darling 0.20.11", + "indoc", + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "interprocess" +version = "2.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d941b405bd2322993887859a8ee6ac9134945a24ec5ec763a8a962fc64dfec2d" +dependencies = [ + "doctest-file", + "futures-core", + "libc", + "recvmsg", + "tokio", + "widestring", + "windows-sys 0.52.0", +] + +[[package]] +name = "intrusive-collections" +version = "0.9.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "189d0897e4cbe8c75efedf3502c18c887b05046e59d28404d4d8e46cbc4d1e86" +dependencies = [ + "memoffset", +] + [[package]] name = "io-uring" version = "0.7.10" @@ -3524,6 +5092,18 @@ dependencies = [ "libc", ] +[[package]] +name = "ipconfig" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f" +dependencies = [ + "socket2 0.5.10", + "widestring", + "windows-sys 0.48.0", + "winreg", +] + [[package]] name = "ipnet" version = "2.11.0" @@ -3588,6 +5168,28 @@ version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" +[[package]] +name = "jni" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" +dependencies = [ + "cesu8", + "cfg-if", + "combine", + "jni-sys", + "log", + "thiserror 1.0.69", + "walkdir", + "windows-sys 0.45.0", +] + +[[package]] +name = "jni-sys" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" + [[package]] name = "jobserver" version = "0.1.34" @@ -3600,25 +5202,92 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.80" +version = "0.3.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "852f13bec5eba4ba9afbeb93fd7c13fe56147f055939ae21c43a29a0ecb2702e" +checksum = "ec48937a97411dcb524a265206ccd4c90bb711fca92b2792c407f268825b9305" dependencies = [ "once_cell", "wasm-bindgen", ] +[[package]] +name = "jsonrpsee" +version = "0.25.1" +source = "git+https://github.com/paritytech/jsonrpsee?rev=f04afa740e55db60dce20d9839758792f035ffff#f04afa740e55db60dce20d9839758792f035ffff" +dependencies = [ + "jsonrpsee-core 0.25.1", + "jsonrpsee-http-client 0.25.1", + "jsonrpsee-proc-macros 0.25.1", + "jsonrpsee-server 0.25.1", + "jsonrpsee-types 0.25.1", + "tokio", + "tracing", +] + [[package]] name = "jsonrpsee" version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f3f48dc3e6b8bd21e15436c1ddd0bc22a6a54e8ec46fedd6adf3425f396ec6a" dependencies = [ - "jsonrpsee-core", - "jsonrpsee-proc-macros", - "jsonrpsee-server", - "jsonrpsee-types", + "jsonrpsee-client-transport", + "jsonrpsee-core 0.26.0", + "jsonrpsee-http-client 0.26.0", + "jsonrpsee-proc-macros 0.26.0", + "jsonrpsee-server 0.26.0", + "jsonrpsee-types 0.26.0", + "jsonrpsee-wasm-client", + "jsonrpsee-ws-client", + "tokio", + "tracing", +] + +[[package]] +name = "jsonrpsee-client-transport" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf36eb27f8e13fa93dcb50ccb44c417e25b818cfa1a481b5470cd07b19c60b98" +dependencies = [ + "base64 0.22.1", + "futures-channel", + "futures-util", + "gloo-net", + "http 1.3.1", + "jsonrpsee-core 0.26.0", + "pin-project", + "rustls 0.23.31", + "rustls-pki-types", + "rustls-platform-verifier", + "soketto", + "thiserror 2.0.17", + "tokio", + "tokio-rustls 0.26.4", + "tokio-util", + "tracing", + "url", +] + +[[package]] +name = "jsonrpsee-core" +version = "0.25.1" +source = "git+https://github.com/paritytech/jsonrpsee?rev=f04afa740e55db60dce20d9839758792f035ffff#f04afa740e55db60dce20d9839758792f035ffff" +dependencies = [ + "async-trait", + "bytes", + "futures-util", + "http 1.3.1", + "http-body 1.0.1", + "http-body-util", + "jsonrpsee-types 0.25.1", + "parking_lot", + "pin-project", + "rand 0.9.2", + "rustc-hash 2.1.1", + "serde", + "serde_json", + "thiserror 2.0.17", "tokio", + "tower 0.5.2", "tracing", ] @@ -3630,21 +5299,81 @@ checksum = "316c96719901f05d1137f19ba598b5fe9c9bc39f4335f67f6be8613921946480" dependencies = [ "async-trait", "bytes", + "futures-timer", "futures-util", "http 1.3.1", "http-body 1.0.1", "http-body-util", - "jsonrpsee-types", + "jsonrpsee-types 0.26.0", "parking_lot", "pin-project", "rand 0.9.2", "rustc-hash 2.1.1", "serde", "serde_json", - "thiserror", + "thiserror 2.0.17", "tokio", - "tower", + "tokio-stream", + "tower 0.5.2", "tracing", + "wasm-bindgen-futures", +] + +[[package]] +name = "jsonrpsee-http-client" +version = "0.25.1" +source = "git+https://github.com/paritytech/jsonrpsee?rev=f04afa740e55db60dce20d9839758792f035ffff#f04afa740e55db60dce20d9839758792f035ffff" +dependencies = [ + "base64 0.22.1", + "http-body 1.0.1", + "hyper 1.7.0", + "hyper-rustls 0.27.7", + "hyper-util", + "jsonrpsee-core 0.25.1", + "jsonrpsee-types 0.25.1", + "rustls 0.23.31", + "rustls-platform-verifier", + "serde", + "serde_json", + "thiserror 2.0.17", + "tokio", + "tower 0.5.2", + "url", +] + +[[package]] +name = "jsonrpsee-http-client" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "790bedefcec85321e007ff3af84b4e417540d5c87b3c9779b9e247d1bcc3dab8" +dependencies = [ + "base64 0.22.1", + "http-body 1.0.1", + "hyper 1.7.0", + "hyper-rustls 0.27.7", + "hyper-util", + "jsonrpsee-core 0.26.0", + "jsonrpsee-types 0.26.0", + "rustls 0.23.31", + "rustls-platform-verifier", + "serde", + "serde_json", + "thiserror 2.0.17", + "tokio", + "tower 0.5.2", + "url", +] + +[[package]] +name = "jsonrpsee-proc-macros" +version = "0.25.1" +source = "git+https://github.com/paritytech/jsonrpsee?rev=f04afa740e55db60dce20d9839758792f035ffff#f04afa740e55db60dce20d9839758792f035ffff" +dependencies = [ + "heck", + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 2.0.106", ] [[package]] @@ -3662,9 +5391,8 @@ dependencies = [ [[package]] name = "jsonrpsee-server" -version = "0.26.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c51b7c290bb68ce3af2d029648148403863b982f138484a73f02a9dd52dbd7f" +version = "0.25.1" +source = "git+https://github.com/paritytech/jsonrpsee?rev=f04afa740e55db60dce20d9839758792f035ffff#f04afa740e55db60dce20d9839758792f035ffff" dependencies = [ "futures-util", "http 1.3.1", @@ -3672,31 +5400,110 @@ dependencies = [ "http-body-util", "hyper 1.7.0", "hyper-util", - "jsonrpsee-core", - "jsonrpsee-types", + "jsonrpsee-core 0.25.1", + "jsonrpsee-types 0.25.1", "pin-project", "route-recognizer", "serde", "serde_json", "soketto", - "thiserror", + "thiserror 2.0.17", "tokio", "tokio-stream", "tokio-util", - "tower", + "tower 0.5.2", "tracing", ] [[package]] -name = "jsonrpsee-types" +name = "jsonrpsee-server" version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc88ff4688e43cc3fa9883a8a95c6fa27aa2e76c96e610b737b6554d650d7fd5" +checksum = "4c51b7c290bb68ce3af2d029648148403863b982f138484a73f02a9dd52dbd7f" dependencies = [ + "futures-util", "http 1.3.1", + "http-body 1.0.1", + "http-body-util", + "hyper 1.7.0", + "hyper-util", + "jsonrpsee-core 0.26.0", + "jsonrpsee-types 0.26.0", + "pin-project", + "route-recognizer", "serde", "serde_json", - "thiserror", + "soketto", + "thiserror 2.0.17", + "tokio", + "tokio-stream", + "tokio-util", + "tower 0.5.2", + "tracing", +] + +[[package]] +name = "jsonrpsee-types" +version = "0.25.1" +source = "git+https://github.com/paritytech/jsonrpsee?rev=f04afa740e55db60dce20d9839758792f035ffff#f04afa740e55db60dce20d9839758792f035ffff" +dependencies = [ + "http 1.3.1", + "serde", + "serde_json", + "thiserror 2.0.17", +] + +[[package]] +name = "jsonrpsee-types" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc88ff4688e43cc3fa9883a8a95c6fa27aa2e76c96e610b737b6554d650d7fd5" +dependencies = [ + "http 1.3.1", + "serde", + "serde_json", + "thiserror 2.0.17", +] + +[[package]] +name = "jsonrpsee-wasm-client" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7902885de4779f711a95d82c8da2d7e5f9f3a7c7cfa44d51c067fd1c29d72a3c" +dependencies = [ + "jsonrpsee-client-transport", + "jsonrpsee-core 0.26.0", + "jsonrpsee-types 0.26.0", + "tower 0.5.2", +] + +[[package]] +name = "jsonrpsee-ws-client" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b6fceceeb05301cc4c065ab3bd2fa990d41ff4eb44e4ca1b30fa99c057c3e79" +dependencies = [ + "http 1.3.1", + "jsonrpsee-client-transport", + "jsonrpsee-core 0.26.0", + "jsonrpsee-types 0.26.0", + "tower 0.5.2", + "url", +] + +[[package]] +name = "jsonwebtoken" +version = "9.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a87cc7a48537badeae96744432de36f4be2b4a34a05a5ef32e9dd8a1c169dde" +dependencies = [ + "base64 0.22.1", + "js-sys", + "pem", + "ring", + "serde", + "serde_json", + "simple_asn1", ] [[package]] @@ -3711,6 +5518,7 @@ dependencies = [ "once_cell", "serdect", "sha2 0.10.9", + "signature 2.2.0", ] [[package]] @@ -3732,6 +5540,26 @@ dependencies = [ "sha3-asm", ] +[[package]] +name = "kqueue" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eac30106d7dce88daf4a3fcb4879ea939476d5074a9b7ddd0fb97fa4bed5596a" +dependencies = [ + "kqueue-sys", + "libc", +] + +[[package]] +name = "kqueue-sys" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed9625ffda8729b85e45cf04090035ac368927b8cebc34898e7c120f52e4838b" +dependencies = [ + "bitflags 1.3.2", + "libc", +] + [[package]] name = "lazy_static" version = "1.5.0" @@ -3749,18 +5577,30 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] name = "libc" -version = "0.2.175" +version = "0.2.176" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a82ae493e598baaea5209805c49bbf2ea7de956d50d7da0da1164f9c6d28543" +checksum = "58f929b4d672ea937a23a1ab494143d968337a5f47e56d0815df1e0890ddf174" + +[[package]] +name = "libgit2-sys" +version = "0.18.2+1.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c42fe03df2bd3c53a3a9c7317ad91d80c81cd1fb0caec8d7cc4cd2bfa10c222" +dependencies = [ + "cc", + "libc", + "libz-sys", + "pkg-config", +] [[package]] name = "libloading" -version = "0.8.8" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07033963ba89ebaf1584d767badaa2e8fcec21aedea6b8c0346d487d49c28667" +checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55" dependencies = [ "cfg-if", - "windows-targets 0.48.5", + "windows-link 0.2.0", ] [[package]] @@ -3769,6 +5609,36 @@ version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" +[[package]] +name = "libp2p-identity" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3104e13b51e4711ff5738caa1fb54467c8604c2e94d607e27745bcf709068774" +dependencies = [ + "asn1_der", + "bs58", + "ed25519-dalek", + "hkdf", + "k256", + "multihash", + "quick-protobuf", + "sha2 0.10.9", + "thiserror 2.0.17", + "tracing", + "zeroize", +] + +[[package]] +name = "libproc" +version = "0.14.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a54ad7278b8bc5301d5ffd2a94251c004feb971feba96c971ea4063645990757" +dependencies = [ + "bindgen 0.72.1", + "errno", + "libc", +] + [[package]] name = "libredox" version = "0.1.10" @@ -3848,6 +5718,22 @@ dependencies = [ "vcpkg", ] +[[package]] +name = "linked-hash-map" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" + +[[package]] +name = "linked_hash_set" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bae85b5be22d9843c80e5fc80e9b64c8a3b1f98f867c709956eca3efff4e92e2" +dependencies = [ + "linked-hash-map", + "serde", +] + [[package]] name = "linux-raw-sys" version = "0.4.15" @@ -3860,12 +5746,24 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" +[[package]] +name = "litemap" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23fb14cb19457329c82206317a5663005a4d404783dc74f4252769b0d5f42856" + [[package]] name = "litemap" version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" +[[package]] +name = "litrs" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5e54036fe321fd421e10d732f155734c4e4afd610dd556d9a82833ab3ee0bed" + [[package]] name = "lock_api" version = "0.4.13" @@ -3874,6 +5772,7 @@ checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765" dependencies = [ "autocfg", "scopeguard", + "serde", ] [[package]] @@ -3906,6 +5805,40 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" +[[package]] +name = "lz4" +version = "1.28.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a20b523e860d03443e98350ceaac5e71c6ba89aea7d960769ec3ce37f4de5af4" +dependencies = [ + "lz4-sys", +] + +[[package]] +name = "lz4-sys" +version = "1.11.1+lz4-1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6bd8c0d6c6ed0cd30b3652886bb8711dc4bb01d637a68105a3d5158039b418e6" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "lz4_flex" +version = "0.11.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08ab2867e3eeeca90e844d1940eab391c9dc5228783db2ed999acbc0a9ed375a" + +[[package]] +name = "mach2" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d640282b302c0bb0a2a8e0233ead9035e3bed871f0b7e81fe4a1ec829765db44" +dependencies = [ + "libc", +] + [[package]] name = "macro-string" version = "0.1.4" @@ -3917,6 +5850,17 @@ dependencies = [ "syn 2.0.106", ] +[[package]] +name = "match-lookup" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1265724d8cb29dbbc2b0f06fffb8bf1a8c0cf73a78eede9ba73a4a66c52a981e" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "matchers" version = "0.2.0" @@ -3926,6 +5870,12 @@ dependencies = [ "regex-automata", ] +[[package]] +name = "matchit" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" + [[package]] name = "md-5" version = "0.10.6" @@ -3938,9 +5888,27 @@ dependencies = [ [[package]] name = "memchr" -version = "2.7.5" +version = "2.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" + +[[package]] +name = "memmap2" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "843a98750cd611cc2965a8213b53b43e715f13c37a9e096c6408e69990961db7" +dependencies = [ + "libc", +] + +[[package]] +name = "memoffset" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" +checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" +dependencies = [ + "autocfg", +] [[package]] name = "metrics" @@ -3964,6 +5932,94 @@ dependencies = [ "syn 2.0.106", ] +[[package]] +name = "metrics-exporter-prometheus" +version = "0.16.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd7399781913e5393588a8d8c6a2867bf85fb38eaf2502fdce465aad2dc6f034" +dependencies = [ + "base64 0.22.1", + "http-body-util", + "hyper 1.7.0", + "hyper-rustls 0.27.7", + "hyper-util", + "indexmap 2.11.4", + "ipnet", + "metrics", + "metrics-util", + "quanta", + "thiserror 1.0.69", + "tokio", + "tracing", +] + +[[package]] +name = "metrics-process" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8499d118208b7b84f01597edd26438e3f015c7ff4b356fbc0df535668ded83bf" +dependencies = [ + "libc", + "libproc", + "mach2", + "metrics", + "once_cell", + "procfs", + "rlimit", + "windows 0.61.3", +] + +[[package]] +name = "metrics-util" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8496cc523d1f94c1385dd8f0f0c2c480b2b8aeccb5b7e4485ad6365523ae376" +dependencies = [ + "aho-corasick", + "crossbeam-epoch", + "crossbeam-utils", + "hashbrown 0.15.5", + "indexmap 2.11.4", + "metrics", + "ordered-float", + "quanta", + "radix_trie", + "rand 0.9.2", + "rand_xoshiro", + "sketches-ddsketch", +] + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "mime_guess" +version = "2.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" +dependencies = [ + "mime", + "unicase", +] + +[[package]] +name = "mini-moka" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c325dfab65f261f386debee8b0969da215b3fa0037e74c8a1234db7ba986d803" +dependencies = [ + "crossbeam-channel", + "crossbeam-utils", + "dashmap 5.5.3", + "skeptic", + "smallvec", + "tagptr", + "triomphe", +] + [[package]] name = "minimal-lexical" version = "0.2.1" @@ -3986,6 +6042,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" dependencies = [ "libc", + "log", "wasi 0.11.1+wasi-snapshot-preview1", "windows-sys 0.59.0", ] @@ -4012,39 +6069,149 @@ dependencies = [ ] [[package]] -name = "native-tls" -version = "0.2.14" +name = "moka" +version = "0.12.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87de3442987e9dbec73158d5c715e7ad9072fda936bb03d19d7fa10e00520f0e" +checksum = "8261cd88c312e0004c1d51baad2980c66528dfdb2bee62003e643a4d8f86b077" dependencies = [ - "libc", - "log", - "openssl", - "openssl-probe", - "openssl-sys", - "schannel", - "security-framework 2.11.1", - "security-framework-sys", - "tempfile", + "async-lock", + "crossbeam-channel", + "crossbeam-epoch", + "crossbeam-utils", + "equivalent", + "event-listener", + "futures-util", + "parking_lot", + "portable-atomic", + "rustc_version 0.4.1", + "smallvec", + "tagptr", + "uuid", ] [[package]] -name = "nom" -version = "7.1.3" +name = "more-asserts" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" -dependencies = [ - "memchr", - "minimal-lexical", -] +checksum = "1fafa6961cabd9c63bcd77a45d7e3b7f3b552b70417831fb0f56db717e72407e" [[package]] -name = "nu-ansi-term" -version = "0.50.1" +name = "multiaddr" +version = "0.18.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4a28e057d01f97e61255210fcff094d74ed0466038633e95017f5beb68e4399" +checksum = "fe6351f60b488e04c1d21bc69e56b89cb3f5e8f5d22557d6e8031bdfd79b6961" dependencies = [ - "windows-sys 0.52.0", + "arrayref", + "byteorder", + "data-encoding", + "libp2p-identity", + "multibase", + "multihash", + "percent-encoding", + "serde", + "static_assertions", + "unsigned-varint", + "url", +] + +[[package]] +name = "multibase" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8694bb4835f452b0e3bb06dbebb1d6fc5385b6ca1caf2e55fd165c042390ec77" +dependencies = [ + "base-x", + "base256emoji", + "data-encoding", + "data-encoding-macro", +] + +[[package]] +name = "multihash" +version = "0.19.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b430e7953c29dd6a09afc29ff0bb69c6e306329ee6794700aee27b76a1aea8d" +dependencies = [ + "core2", + "unsigned-varint", +] + +[[package]] +name = "native-tls" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87de3442987e9dbec73158d5c715e7ad9072fda936bb03d19d7fa10e00520f0e" +dependencies = [ + "libc", + "log", + "openssl", + "openssl-probe", + "openssl-sys", + "schannel", + "security-framework 2.11.1", + "security-framework-sys", + "tempfile", +] + +[[package]] +name = "nibble_vec" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a5d83df9f36fe23f0c3648c6bbb8b0298bb5f1939c8f2704431371f4b84d43" +dependencies = [ + "smallvec", +] + +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + +[[package]] +name = "notify" +version = "8.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d3d07927151ff8575b7087f245456e549fea62edf0ec4e565a5ee50c8402bc3" +dependencies = [ + "bitflags 2.9.4", + "fsevent-sys", + "inotify", + "kqueue", + "libc", + "log", + "mio", + "notify-types", + "walkdir", + "windows-sys 0.60.2", +] + +[[package]] +name = "notify-types" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e0826a989adedc2a244799e823aece04662b66609d96af8dff7ac6df9a8925d" + +[[package]] +name = "ntapi" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8a3895c6391c39d7fe7ebc444a87eb2991b2a0bc718fdabd071eec617fc68e4" +dependencies = [ + "winapi", +] + +[[package]] +name = "nu-ansi-term" +version = "0.50.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4a28e057d01f97e61255210fcff094d74ed0466038633e95017f5beb68e4399" +dependencies = [ + "windows-sys 0.52.0", ] [[package]] @@ -4069,6 +6236,7 @@ checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" dependencies = [ "num-integer", "num-traits", + "serde", ] [[package]] @@ -4176,11 +6344,20 @@ dependencies = [ "syn 2.0.106", ] +[[package]] +name = "num_threads" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9" +dependencies = [ + "libc", +] + [[package]] name = "nybbles" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa11e84403164a9f12982ab728f3c67c6fd4ab5b5f0254ffc217bdbd3b28ab0" +checksum = "2c4b5ecbd0beec843101bffe848217f770e8b8da81d8355b7d6e226f2199b3dc" dependencies = [ "alloy-rlp", "cfg-if", @@ -4192,9 +6369,9 @@ dependencies = [ [[package]] name = "object" -version = "0.36.7" +version = "0.37.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" +checksum = "ff76201f031d8863c38aa7f905eca4f53abbfa15f609db4277d44cd8938f33fe" dependencies = [ "memchr", ] @@ -4215,22 +6392,6 @@ version = "1.70.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad" -[[package]] -name = "op-alloy-consensus" -version = "0.19.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9ade20c592484ba1ea538006e0454284174447a3adf9bb59fa99ed512f95493" -dependencies = [ - "alloy-consensus", - "alloy-eips", - "alloy-primitives", - "alloy-rlp", - "alloy-serde", - "derive_more", - "serde", - "thiserror", -] - [[package]] name = "op-alloy-consensus" version = "0.20.0" @@ -4246,9 +6407,16 @@ dependencies = [ "alloy-serde", "derive_more", "serde", - "thiserror", + "serde_with", + "thiserror 2.0.17", ] +[[package]] +name = "op-alloy-flz" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a79f352fc3893dcd670172e615afef993a41798a1d3fc0db88a3e60ef2e70ecc" + [[package]] name = "op-alloy-network" version = "0.20.0" @@ -4261,27 +6429,18 @@ dependencies = [ "alloy-provider", "alloy-rpc-types-eth", "alloy-signer", - "op-alloy-consensus 0.20.0", - "op-alloy-rpc-types 0.20.0", + "op-alloy-consensus", + "op-alloy-rpc-types", ] [[package]] -name = "op-alloy-rpc-types" -version = "0.19.1" +name = "op-alloy-rpc-jsonrpsee" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9076d4fcb8e260cec8ad01cd155200c0dbb562e62adb553af245914f30854e29" +checksum = "e8eb878fc5ea95adb5abe55fb97475b3eb0dcc77dfcd6f61bd626a68ae0bdba1" dependencies = [ - "alloy-consensus", - "alloy-eips", - "alloy-network-primitives", "alloy-primitives", - "alloy-rpc-types-eth", - "alloy-serde", - "derive_more", - "op-alloy-consensus 0.19.1", - "serde", - "serde_json", - "thiserror", + "jsonrpsee 0.26.0", ] [[package]] @@ -4297,29 +6456,31 @@ dependencies = [ "alloy-rpc-types-eth", "alloy-serde", "derive_more", - "op-alloy-consensus 0.20.0", + "op-alloy-consensus", "serde", "serde_json", - "thiserror", + "thiserror 2.0.17", ] [[package]] name = "op-alloy-rpc-types-engine" -version = "0.19.1" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4256b1eda5766a9fa7de5874e54515994500bef632afda41e940aed015f9455" +checksum = "14e50c94013a1d036a529df259151991dbbd6cf8dc215e3b68b784f95eec60e6" dependencies = [ "alloy-consensus", "alloy-eips", "alloy-primitives", "alloy-rlp", "alloy-rpc-types-engine", + "alloy-serde", "derive_more", "ethereum_ssz", "ethereum_ssz_derive", - "op-alloy-consensus 0.19.1", + "op-alloy-consensus", + "serde", "snap", - "thiserror", + "thiserror 2.0.17", ] [[package]] @@ -4383,6 +6544,107 @@ dependencies = [ "vcpkg", ] +[[package]] +name = "opentelemetry" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "236e667b670a5cdf90c258f5a55794ec5ac5027e960c224bff8367a59e1e6426" +dependencies = [ + "futures-core", + "futures-sink", + "js-sys", + "pin-project-lite", + "thiserror 2.0.17", + "tracing", +] + +[[package]] +name = "opentelemetry-http" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8863faf2910030d139fb48715ad5ff2f35029fc5f244f6d5f689ddcf4d26253" +dependencies = [ + "async-trait", + "bytes", + "http 1.3.1", + "opentelemetry", + "reqwest", + "tracing", +] + +[[package]] +name = "opentelemetry-otlp" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5bef114c6d41bea83d6dc60eb41720eedd0261a67af57b66dd2b84ac46c01d91" +dependencies = [ + "async-trait", + "futures-core", + "http 1.3.1", + "opentelemetry", + "opentelemetry-http", + "opentelemetry-proto", + "opentelemetry_sdk", + "prost", + "reqwest", + "serde_json", + "thiserror 2.0.17", + "tokio", + "tonic", + "tracing", +] + +[[package]] +name = "opentelemetry-proto" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56f8870d3024727e99212eb3bb1762ec16e255e3e6f58eeb3dc8db1aa226746d" +dependencies = [ + "base64 0.22.1", + "hex", + "opentelemetry", + "opentelemetry_sdk", + "prost", + "serde", + "tonic", +] + +[[package]] +name = "opentelemetry_sdk" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84dfad6042089c7fc1f6118b7040dc2eb4ab520abbf410b79dc481032af39570" +dependencies = [ + "async-trait", + "futures-channel", + "futures-executor", + "futures-util", + "glob", + "opentelemetry", + "percent-encoding", + "rand 0.8.5", + "serde_json", + "thiserror 2.0.17", + "tokio", + "tokio-stream", + "tracing", +] + +[[package]] +name = "option-ext" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" + +[[package]] +name = "ordered-float" +version = "4.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7bb71e1b3fa6ca1c61f383464aaf2bb0e2f8e772a1f01d486832464de363b951" +dependencies = [ + "num-traits", +] + [[package]] name = "outref" version = "0.5.2" @@ -4412,6 +6674,16 @@ dependencies = [ "sha2 0.10.9", ] +[[package]] +name = "page_size" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30d5b2194ed13191c1999ae0704b7839fb18384fa22e49b57eeaa97d79ce40da" +dependencies = [ + "libc", + "winapi", +] + [[package]] name = "parity-scale-codec" version = "3.7.5" @@ -4421,6 +6693,7 @@ dependencies = [ "arrayvec", "bitvec", "byte-slice-cast", + "bytes", "const_format", "impl-trait-for-tuples", "parity-scale-codec-derive", @@ -4500,6 +6773,16 @@ version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" +[[package]] +name = "pem" +version = "3.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38af38e8470ac9dee3ce1bae1af9c1671fffc44ddfd8bd1d0a3445bf349a8ef3" +dependencies = [ + "base64 0.22.1", + "serde", +] + [[package]] name = "pem-rfc7468" version = "0.7.0" @@ -4522,10 +6805,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "21e0a3a33733faeaf8651dfee72dd0f388f0c8e5ad496a3478fa5a922f49cfa8" dependencies = [ "memchr", - "thiserror", + "thiserror 2.0.17", "ucd-trie", ] +[[package]] +name = "pharos" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9567389417feee6ce15dd6527a8a1ecac205ef62c2932bcf3d9f6fc5b78b414" +dependencies = [ + "futures", + "rustc_version 0.4.1", +] + [[package]] name = "phf" version = "0.11.3" @@ -4638,6 +6931,24 @@ version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" +[[package]] +name = "pollster" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f3a9f18d041e6d0e102a0a46750538147e5e8992d3b4873aaafee2520b00ce3" + +[[package]] +name = "polyval" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d1fe60d06143b2430aa532c94cfe9e29783047f06c0d7fd359a9a51b729fa25" +dependencies = [ + "cfg-if", + "cpufeatures", + "opaque-debug", + "universal-hash", +] + [[package]] name = "portable-atomic" version = "1.11.1" @@ -4650,7 +6961,7 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "84df19adbe5b5a0782edcab45899906947ab039ccf4573713735ee7de1e6b08a" dependencies = [ - "zerovec", + "zerovec 0.11.4", ] [[package]] @@ -4668,6 +6979,16 @@ dependencies = [ "zerocopy", ] +[[package]] +name = "pretty_assertions" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ae130e2f271fbc2ac3a40fb1d07180839cdbbe443c7a27e1e3c13c5cac0116d" +dependencies = [ + "diff", + "yansi", +] + [[package]] name = "prettyplease" version = "0.2.37" @@ -4695,7 +7016,7 @@ checksum = "0b34d9fd68ae0b74a41b21c03c2f62847aa0ffea044eee893b4c140b37e244e2" dependencies = [ "fixed-hash", "impl-codec", - "uint", + "uint 0.9.5", ] [[package]] @@ -4704,7 +7025,7 @@ version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983" dependencies = [ - "toml_edit", + "toml_edit 0.23.6", ] [[package]] @@ -4738,11 +7059,36 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "procfs" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc5b72d8145275d844d4b5f6d4e1eef00c8cd889edb6035c21675d1bb1f45c9f" +dependencies = [ + "bitflags 2.9.4", + "chrono", + "flate2", + "hex", + "procfs-core", + "rustix 0.38.44", +] + +[[package]] +name = "procfs-core" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "239df02d8349b06fc07398a3a1697b06418223b1c7725085e801e7c0fc6a12ec" +dependencies = [ + "bitflags 2.9.4", + "chrono", + "hex", +] + [[package]] name = "proptest" -version = "1.7.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fcdab19deb5195a31cf7726a210015ff1496ba1464fd42cb4f537b8b01b471f" +checksum = "2bb0be07becd10686a0bb407298fb425360a5c44a663774406340c59a22de4ce" dependencies = [ "bit-set", "bit-vec", @@ -4759,26 +7105,84 @@ dependencies = [ ] [[package]] -name = "quick-error" -version = "1.2.3" +name = "prost" +version = "0.13.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" +checksum = "2796faa41db3ec313a31f7624d9286acf277b52de526150b7e69f3debf891ee5" +dependencies = [ + "bytes", + "prost-derive", +] [[package]] -name = "quinn" -version = "0.11.9" +name = "prost-derive" +version = "0.13.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20" +checksum = "8a56d757972c98b346a9b766e3f02746cde6dd1cd1d1d563472929fdd74bec4d" dependencies = [ - "bytes", - "cfg_aliases", + "anyhow", + "itertools 0.14.0", + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "pulldown-cmark" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57206b407293d2bcd3af849ce869d52068623f19e1b5ff8e8778e3309439682b" +dependencies = [ + "bitflags 2.9.4", + "memchr", + "unicase", +] + +[[package]] +name = "quanta" +version = "0.12.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3ab5a9d756f0d97bdc89019bd2e4ea098cf9cde50ee7564dde6b81ccc8f06c7" +dependencies = [ + "crossbeam-utils", + "libc", + "once_cell", + "raw-cpuid", + "wasi 0.11.1+wasi-snapshot-preview1", + "web-sys", + "winapi", +] + +[[package]] +name = "quick-error" +version = "1.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" + +[[package]] +name = "quick-protobuf" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d6da84cc204722a989e01ba2f6e1e276e190f22263d0cb6ce8526fcdb0d2e1f" +dependencies = [ + "byteorder", +] + +[[package]] +name = "quinn" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20" +dependencies = [ + "bytes", + "cfg_aliases", "pin-project-lite", "quinn-proto", "quinn-udp", "rustc-hash 2.1.1", "rustls 0.23.31", - "socket2 0.5.10", - "thiserror", + "socket2 0.6.0", + "thiserror 2.0.17", "tokio", "tracing", "web-time", @@ -4799,7 +7203,7 @@ dependencies = [ "rustls 0.23.31", "rustls-pki-types", "slab", - "thiserror", + "thiserror 2.0.17", "tinyvec", "tracing", "web-time", @@ -4814,16 +7218,16 @@ dependencies = [ "cfg_aliases", "libc", "once_cell", - "socket2 0.5.10", + "socket2 0.6.0", "tracing", "windows-sys 0.60.2", ] [[package]] name = "quote" -version = "1.0.40" +version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" +checksum = "ce25767e7b499d1b604768e7cde645d14cc8584231ea6b295e9c9eb22c02e1d1" dependencies = [ "proc-macro2", ] @@ -4840,6 +7244,16 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" +[[package]] +name = "radix_trie" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c069c179fcdc6a2fe24d8d18305cf085fdbd4f922c041943e203685d6a1c58fd" +dependencies = [ + "endian-type", + "nibble_vec", +] + [[package]] name = "rand" version = "0.8.5" @@ -4911,6 +7325,45 @@ dependencies = [ "rand_core 0.9.3", ] +[[package]] +name = "rand_xoshiro" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f703f4665700daf5512dcca5f43afa6af89f09db47fb56be587f80636bda2d41" +dependencies = [ + "rand_core 0.9.3", +] + +[[package]] +name = "ratatui" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eabd94c2f37801c20583fc49dd5cd6b0ba68c716787c2dd6ed18571e1e63117b" +dependencies = [ + "bitflags 2.9.4", + "cassowary", + "compact_str", + "crossterm 0.28.1", + "indoc", + "instability", + "itertools 0.13.0", + "lru 0.12.5", + "paste", + "strum 0.26.3", + "unicode-segmentation", + "unicode-truncate", + "unicode-width 0.2.0", +] + +[[package]] +name = "raw-cpuid" +version = "11.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "498cd0dc59d73224351ee52a95fee0f1a617a2eae0e7d9d720cc622c73a54186" +dependencies = [ + "bitflags 2.9.4", +] + [[package]] name = "rayon" version = "1.11.0" @@ -4961,6 +7414,12 @@ dependencies = [ "pkg-config", ] +[[package]] +name = "recvmsg" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3edd4d5d42c92f0a659926464d4cce56b562761267ecf0f469d85b7de384175" + [[package]] name = "redox_syscall" version = "0.3.5" @@ -4979,20 +7438,42 @@ dependencies = [ "bitflags 2.9.4", ] +[[package]] +name = "redox_users" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" +dependencies = [ + "getrandom 0.2.16", + "libredox", + "thiserror 1.0.69", +] + +[[package]] +name = "redox_users" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" +dependencies = [ + "getrandom 0.2.16", + "libredox", + "thiserror 2.0.17", +] + [[package]] name = "ref-cast" -version = "1.0.24" +version = "1.0.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a0ae411dbe946a674d89546582cea4ba2bb8defac896622d6496f14c23ba5cf" +checksum = "f354300ae66f76f1c85c5f84693f0ce81d747e2c3f21a45fef496d89c960bf7d" dependencies = [ "ref-cast-impl", ] [[package]] name = "ref-cast-impl" -version = "1.0.24" +version = "1.0.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1165225c21bff1f3bbce98f5a1f889949bc902d3575308cc7b0de30b4f6d27c7" +checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" dependencies = [ "proc-macro2", "quote", @@ -5001,9 +7482,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.11.2" +version = "1.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23d7fd106d8c02486a8d64e778353d1cffe08ce79ac2e82f540c86d0facf6912" +checksum = "8b5288124840bee7b386bc413c487869b360b2b4ec421ea56425128692f2a82c" dependencies = [ "aho-corasick", "memchr", @@ -5013,9 +7494,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.10" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b9458fa0bfeeac22b5ca447c63aaf45f28439a709ccd244698632f9aa6394d6" +checksum = "833eb9ce86d40ef33cb1306d8accf7bc8ec2bfea4355cbdebb3df68b40925cad" dependencies = [ "aho-corasick", "memchr", @@ -5034,6 +7515,16 @@ version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "caf4aa5b0f434c91fe5c7f1ecb6a5ece2130b02ad2a590589dda5146df959001" +[[package]] +name = "regress" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "145bb27393fe455dd64d6cbc8d059adfa392590a45eadf079c01b11857e7b010" +dependencies = [ + "hashbrown 0.15.5", + "memchr", +] + [[package]] name = "reqwest" version = "0.12.23" @@ -5042,7 +7533,9 @@ checksum = "d429f34c8092b2d42c7c93cec323bb4adeb7c67698f70839adec842ec10c7ceb" dependencies = [ "base64 0.22.1", "bytes", + "futures-channel", "futures-core", + "futures-util", "http 1.3.1", "http-body 1.0.1", "http-body-util", @@ -5065,20 +7558,99 @@ dependencies = [ "sync_wrapper", "tokio", "tokio-native-tls", - "tokio-rustls 0.26.3", - "tower", + "tokio-rustls 0.26.4", + "tokio-util", + "tower 0.5.2", "tower-http", "tower-service", "url", "wasm-bindgen", "wasm-bindgen-futures", + "wasm-streams", "web-sys", + "webpki-roots 1.0.2", +] + +[[package]] +name = "resolv-conf" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b3789b30bd25ba102de4beabd95d21ac45b69b1be7d14522bab988c526d6799" + +[[package]] +name = "reth" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +dependencies = [ + "alloy-rpc-types", + "aquamarine", + "clap", + "eyre", + "reth-chainspec", + "reth-cli-runner", + "reth-cli-util", + "reth-consensus", + "reth-consensus-common", + "reth-db", + "reth-ethereum-cli", + "reth-ethereum-payload-builder", + "reth-ethereum-primitives", + "reth-evm", + "reth-network", + "reth-network-api", + "reth-node-api", + "reth-node-builder", + "reth-node-core", + "reth-node-ethereum", + "reth-node-metrics", + "reth-payload-builder", + "reth-payload-primitives", + "reth-primitives", + "reth-provider", + "reth-ress-protocol", + "reth-ress-provider", + "reth-revm", + "reth-rpc", + "reth-rpc-api", + "reth-rpc-builder", + "reth-rpc-convert", + "reth-rpc-eth-types", + "reth-rpc-server-types", + "reth-tasks", + "reth-tokio-util", + "reth-transaction-pool", + "tokio", + "tracing", +] + +[[package]] +name = "reth-basic-payload-builder" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +dependencies = [ + "alloy-consensus", + "alloy-eips", + "alloy-primitives", + "futures-core", + "futures-util", + "metrics", + "reth-chain-state", + "reth-metrics", + "reth-payload-builder", + "reth-payload-builder-primitives", + "reth-payload-primitives", + "reth-primitives-traits", + "reth-revm", + "reth-storage-api", + "reth-tasks", + "tokio", + "tracing", ] [[package]] name = "reth-chain-state" -version = "1.7.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.7.0#9d56da53ec0ad60e229456a0c70b338501d923a5" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ "alloy-consensus", "alloy-eips", @@ -5087,6 +7659,7 @@ dependencies = [ "metrics", "parking_lot", "pin-project", + "rand 0.9.2", "reth-chainspec", "reth-errors", "reth-ethereum-primitives", @@ -5096,6 +7669,8 @@ dependencies = [ "reth-storage-api", "reth-trie", "revm-database", + "revm-state", + "serde", "tokio", "tokio-stream", "tracing", @@ -5103,8 +7678,8 @@ dependencies = [ [[package]] name = "reth-chainspec" -version = "1.7.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.7.0#9d56da53ec0ad60e229456a0c70b338501d923a5" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ "alloy-chains", "alloy-consensus", @@ -5121,10 +7696,127 @@ dependencies = [ "serde_json", ] +[[package]] +name = "reth-cli" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +dependencies = [ + "alloy-genesis", + "clap", + "eyre", + "reth-cli-runner", + "reth-db", + "serde_json", + "shellexpand", +] + +[[package]] +name = "reth-cli-commands" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +dependencies = [ + "alloy-chains", + "alloy-consensus", + "alloy-eips", + "alloy-primitives", + "alloy-rlp", + "backon", + "clap", + "comfy-table", + "crossterm 0.28.1", + "eyre", + "fdlimit", + "futures", + "human_bytes", + "humantime", + "itertools 0.14.0", + "lz4", + "ratatui", + "reqwest", + "reth-chainspec", + "reth-cli", + "reth-cli-runner", + "reth-cli-util", + "reth-codecs", + "reth-config", + "reth-consensus", + "reth-db", + "reth-db-api", + "reth-db-common", + "reth-discv4", + "reth-discv5", + "reth-downloaders", + "reth-ecies", + "reth-era", + "reth-era-downloader", + "reth-era-utils", + "reth-eth-wire", + "reth-etl", + "reth-evm", + "reth-exex", + "reth-fs-util", + "reth-net-nat", + "reth-network", + "reth-network-p2p", + "reth-network-peers", + "reth-node-api", + "reth-node-builder", + "reth-node-core", + "reth-node-events", + "reth-node-metrics", + "reth-primitives-traits", + "reth-provider", + "reth-prune", + "reth-revm", + "reth-stages", + "reth-static-file", + "reth-static-file-types", + "reth-trie", + "reth-trie-common", + "reth-trie-db", + "secp256k1 0.30.0", + "serde", + "serde_json", + "tar", + "tokio", + "tokio-stream", + "toml", + "tracing", + "zstd", +] + +[[package]] +name = "reth-cli-runner" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +dependencies = [ + "reth-tasks", + "tokio", + "tracing", +] + +[[package]] +name = "reth-cli-util" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +dependencies = [ + "alloy-eips", + "alloy-primitives", + "cfg-if", + "eyre", + "libc", + "rand 0.8.5", + "reth-fs-util", + "secp256k1 0.30.0", + "serde", + "thiserror 2.0.17", + "tikv-jemallocator", +] + [[package]] name = "reth-codecs" -version = "1.7.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.7.0#9d56da53ec0ad60e229456a0c70b338501d923a5" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ "alloy-consensus", "alloy-eips", @@ -5133,7 +7825,7 @@ dependencies = [ "alloy-trie", "bytes", "modular-bitfield", - "op-alloy-consensus 0.19.1", + "op-alloy-consensus", "reth-codecs-derive", "reth-zstd-compressors", "serde", @@ -5141,8 +7833,8 @@ dependencies = [ [[package]] name = "reth-codecs-derive" -version = "1.7.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.7.0#9d56da53ec0ad60e229456a0c70b338501d923a5" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ "convert_case", "proc-macro2", @@ -5150,23 +7842,38 @@ dependencies = [ "syn 2.0.106", ] +[[package]] +name = "reth-config" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +dependencies = [ + "eyre", + "humantime-serde", + "reth-network-types", + "reth-prune-types", + "reth-stages-types", + "serde", + "toml", + "url", +] + [[package]] name = "reth-consensus" -version = "1.7.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.7.0#9d56da53ec0ad60e229456a0c70b338501d923a5" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ "alloy-consensus", "alloy-primitives", "auto_impl", "reth-execution-types", "reth-primitives-traits", - "thiserror", + "thiserror 2.0.17", ] [[package]] name = "reth-consensus-common" -version = "1.7.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.7.0#9d56da53ec0ad60e229456a0c70b338501d923a5" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ "alloy-consensus", "alloy-eips", @@ -5176,388 +7883,2098 @@ dependencies = [ ] [[package]] -name = "reth-db-models" -version = "1.7.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.7.0#9d56da53ec0ad60e229456a0c70b338501d923a5" +name = "reth-consensus-debug-client" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ + "alloy-consensus", "alloy-eips", + "alloy-json-rpc", "alloy-primitives", - "bytes", + "alloy-provider", + "alloy-rpc-types-engine", + "alloy-transport", + "auto_impl", + "derive_more", + "eyre", + "futures", + "reqwest", + "reth-node-api", "reth-primitives-traits", + "reth-tracing", + "ringbuffer", "serde", + "serde_json", + "tokio", ] [[package]] -name = "reth-errors" -version = "1.7.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.7.0#9d56da53ec0ad60e229456a0c70b338501d923a5" +name = "reth-db" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ - "reth-consensus", - "reth-execution-errors", + "alloy-primitives", + "derive_more", + "eyre", + "metrics", + "page_size", + "reth-db-api", + "reth-fs-util", + "reth-libmdbx", + "reth-metrics", + "reth-nippy-jar", + "reth-static-file-types", "reth-storage-errors", - "thiserror", + "reth-tracing", + "rustc-hash 2.1.1", + "strum 0.27.2", + "sysinfo", + "thiserror 2.0.17", ] [[package]] -name = "reth-eth-wire-types" -version = "1.7.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.7.0#9d56da53ec0ad60e229456a0c70b338501d923a5" +name = "reth-db-api" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ - "alloy-chains", "alloy-consensus", - "alloy-eips", - "alloy-hardforks", + "alloy-genesis", "alloy-primitives", - "alloy-rlp", "bytes", "derive_more", - "reth-chainspec", - "reth-codecs-derive", + "metrics", + "modular-bitfield", + "parity-scale-codec", + "reth-codecs", + "reth-db-models", "reth-ethereum-primitives", + "reth-optimism-primitives", "reth-primitives-traits", + "reth-prune-types", + "reth-stages-types", + "reth-storage-errors", + "reth-trie-common", + "roaring", "serde", - "thiserror", -] - -[[package]] -name = "reth-ethereum-forks" -version = "1.7.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.7.0#9d56da53ec0ad60e229456a0c70b338501d923a5" -dependencies = [ - "alloy-eip2124", - "alloy-hardforks", - "alloy-primitives", - "auto_impl", - "once_cell", - "rustc-hash 2.1.1", ] [[package]] -name = "reth-ethereum-primitives" -version = "1.7.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.7.0#9d56da53ec0ad60e229456a0c70b338501d923a5" +name = "reth-db-common" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ "alloy-consensus", - "alloy-eips", + "alloy-genesis", "alloy-primitives", - "alloy-rlp", + "boyer-moore-magiclen", + "eyre", + "reth-chainspec", + "reth-codecs", + "reth-config", + "reth-db-api", + "reth-etl", + "reth-execution-errors", + "reth-fs-util", + "reth-node-types", "reth-primitives-traits", - "reth-zstd-compressors", + "reth-provider", + "reth-stages-types", + "reth-static-file-types", + "reth-trie", + "reth-trie-db", "serde", - "serde_with", + "serde_json", + "thiserror 2.0.17", + "tracing", ] [[package]] -name = "reth-evm" -version = "1.7.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.7.0#9d56da53ec0ad60e229456a0c70b338501d923a5" +name = "reth-db-models" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ - "alloy-consensus", "alloy-eips", - "alloy-evm", "alloy-primitives", - "auto_impl", - "derive_more", - "futures-util", - "reth-execution-errors", - "reth-execution-types", + "bytes", + "modular-bitfield", + "reth-codecs", "reth-primitives-traits", - "reth-storage-api", - "reth-storage-errors", - "reth-trie-common", - "revm", + "serde", ] [[package]] -name = "reth-execution-errors" -version = "1.7.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.7.0#9d56da53ec0ad60e229456a0c70b338501d923a5" +name = "reth-discv4" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ - "alloy-evm", "alloy-primitives", "alloy-rlp", - "nybbles", - "reth-storage-errors", - "thiserror", + "discv5", + "enr", + "generic-array", + "itertools 0.14.0", + "parking_lot", + "rand 0.8.5", + "reth-ethereum-forks", + "reth-net-banlist", + "reth-net-nat", + "reth-network-peers", + "schnellru", + "secp256k1 0.30.0", + "serde", + "thiserror 2.0.17", + "tokio", + "tokio-stream", + "tracing", ] [[package]] -name = "reth-execution-types" -version = "1.7.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.7.0#9d56da53ec0ad60e229456a0c70b338501d923a5" +name = "reth-discv5" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ - "alloy-consensus", - "alloy-eips", - "alloy-evm", "alloy-primitives", + "alloy-rlp", "derive_more", - "reth-ethereum-primitives", - "reth-primitives-traits", - "reth-trie-common", - "revm", - "serde", - "serde_with", -] - -[[package]] -name = "reth-fs-util" -version = "1.7.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.7.0#9d56da53ec0ad60e229456a0c70b338501d923a5" -dependencies = [ - "serde", - "serde_json", - "thiserror", -] - -[[package]] -name = "reth-metrics" -version = "1.7.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.7.0#9d56da53ec0ad60e229456a0c70b338501d923a5" -dependencies = [ + "discv5", + "enr", + "futures", + "itertools 0.14.0", "metrics", - "metrics-derive", -] - -[[package]] -name = "reth-net-banlist" -version = "1.7.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.7.0#9d56da53ec0ad60e229456a0c70b338501d923a5" -dependencies = [ - "alloy-primitives", + "rand 0.9.2", + "reth-chainspec", + "reth-ethereum-forks", + "reth-metrics", + "reth-network-peers", + "secp256k1 0.30.0", + "thiserror 2.0.17", + "tokio", + "tracing", ] [[package]] -name = "reth-network-api" -version = "1.7.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.7.0#9d56da53ec0ad60e229456a0c70b338501d923a5" +name = "reth-dns-discovery" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ - "alloy-consensus", "alloy-primitives", - "alloy-rpc-types-admin", - "alloy-rpc-types-eth", - "auto_impl", - "derive_more", + "data-encoding", "enr", - "futures", - "reth-eth-wire-types", + "hickory-resolver", + "linked_hash_set", + "parking_lot", "reth-ethereum-forks", - "reth-network-p2p", "reth-network-peers", - "reth-network-types", "reth-tokio-util", - "thiserror", + "schnellru", + "secp256k1 0.30.0", + "serde", + "serde_with", + "thiserror 2.0.17", "tokio", "tokio-stream", + "tracing", ] [[package]] -name = "reth-network-p2p" -version = "1.7.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.7.0#9d56da53ec0ad60e229456a0c70b338501d923a5" +name = "reth-downloaders" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ "alloy-consensus", "alloy-eips", "alloy-primitives", - "auto_impl", - "derive_more", + "alloy-rlp", "futures", + "futures-util", + "itertools 0.14.0", + "metrics", + "pin-project", + "rayon", + "reth-config", "reth-consensus", - "reth-eth-wire-types", - "reth-ethereum-primitives", + "reth-metrics", + "reth-network-p2p", "reth-network-peers", - "reth-network-types", "reth-primitives-traits", - "reth-storage-errors", + "reth-storage-api", + "reth-tasks", + "thiserror 2.0.17", "tokio", + "tokio-stream", + "tokio-util", "tracing", ] [[package]] -name = "reth-network-peers" -version = "1.7.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.7.0#9d56da53ec0ad60e229456a0c70b338501d923a5" +name = "reth-ecies" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ + "aes", "alloy-primitives", "alloy-rlp", - "secp256k1 0.30.0", - "serde_with", - "thiserror", - "url", -] - -[[package]] -name = "reth-network-types" -version = "1.7.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.7.0#9d56da53ec0ad60e229456a0c70b338501d923a5" -dependencies = [ - "alloy-eip2124", - "reth-net-banlist", + "block-padding", + "byteorder", + "cipher", + "concat-kdf", + "ctr", + "digest 0.10.7", + "futures", + "generic-array", + "hmac", + "pin-project", + "rand 0.8.5", "reth-network-peers", - "serde_json", + "secp256k1 0.30.0", + "sha2 0.10.9", + "sha3", + "thiserror 2.0.17", + "tokio", + "tokio-stream", + "tokio-util", "tracing", + "typenum", ] [[package]] -name = "reth-optimism-chainspec" -version = "1.7.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.7.0#9d56da53ec0ad60e229456a0c70b338501d923a5" +name = "reth-engine-local" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ - "alloy-chains", "alloy-consensus", - "alloy-eips", - "alloy-genesis", - "alloy-hardforks", "alloy-primitives", - "derive_more", - "miniz_oxide", - "op-alloy-consensus 0.19.1", - "op-alloy-rpc-types 0.19.1", + "alloy-rpc-types-engine", + "eyre", + "futures-util", + "op-alloy-rpc-types-engine", "reth-chainspec", - "reth-ethereum-forks", - "reth-network-peers", - "reth-optimism-forks", - "reth-optimism-primitives", - "reth-primitives-traits", - "serde", - "serde_json", - "thiserror", + "reth-engine-primitives", + "reth-ethereum-engine-primitives", + "reth-optimism-chainspec", + "reth-payload-builder", + "reth-payload-primitives", + "reth-provider", + "reth-transaction-pool", + "tokio", + "tokio-stream", + "tracing", ] [[package]] -name = "reth-optimism-consensus" -version = "1.7.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.7.0#9d56da53ec0ad60e229456a0c70b338501d923a5" +name = "reth-engine-primitives" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ "alloy-consensus", "alloy-eips", "alloy-primitives", - "alloy-trie", - "reth-chainspec", + "alloy-rpc-types-engine", + "auto_impl", + "futures", + "reth-chain-state", + "reth-errors", + "reth-ethereum-primitives", + "reth-evm", + "reth-execution-types", + "reth-payload-builder-primitives", + "reth-payload-primitives", + "reth-primitives-traits", + "reth-trie-common", + "serde", + "thiserror 2.0.17", + "tokio", +] + +[[package]] +name = "reth-engine-service" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +dependencies = [ + "futures", + "pin-project", + "reth-chainspec", + "reth-consensus", + "reth-engine-primitives", + "reth-engine-tree", + "reth-ethereum-primitives", + "reth-evm", + "reth-network-p2p", + "reth-node-types", + "reth-payload-builder", + "reth-provider", + "reth-prune", + "reth-stages-api", + "reth-tasks", + "thiserror 2.0.17", +] + +[[package]] +name = "reth-engine-tree" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +dependencies = [ + "alloy-consensus", + "alloy-eips", + "alloy-evm", + "alloy-primitives", + "alloy-rlp", + "alloy-rpc-types-engine", + "derive_more", + "futures", + "metrics", + "mini-moka", + "parking_lot", + "rayon", + "reth-chain-state", + "reth-consensus", + "reth-db", + "reth-engine-primitives", + "reth-errors", + "reth-ethereum-primitives", + "reth-evm", + "reth-execution-types", + "reth-metrics", + "reth-network-p2p", + "reth-payload-builder", + "reth-payload-primitives", + "reth-primitives-traits", + "reth-provider", + "reth-prune", + "reth-revm", + "reth-stages-api", + "reth-tasks", + "reth-trie", + "reth-trie-db", + "reth-trie-parallel", + "reth-trie-sparse", + "reth-trie-sparse-parallel", + "revm", + "revm-primitives", + "schnellru", + "smallvec", + "thiserror 2.0.17", + "tokio", + "tracing", +] + +[[package]] +name = "reth-engine-util" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +dependencies = [ + "alloy-consensus", + "alloy-rpc-types-engine", + "eyre", + "futures", + "itertools 0.14.0", + "pin-project", + "reth-chainspec", + "reth-engine-primitives", + "reth-engine-tree", + "reth-errors", + "reth-evm", + "reth-fs-util", + "reth-payload-primitives", + "reth-primitives-traits", + "reth-revm", + "reth-storage-api", + "serde", + "serde_json", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "reth-era" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +dependencies = [ + "alloy-consensus", + "alloy-eips", + "alloy-primitives", + "alloy-rlp", + "ethereum_ssz", + "ethereum_ssz_derive", + "reth-ethereum-primitives", + "snap", + "thiserror 2.0.17", +] + +[[package]] +name = "reth-era-downloader" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +dependencies = [ + "alloy-primitives", + "bytes", + "eyre", + "futures-util", + "reqwest", + "reth-fs-util", + "sha2 0.10.9", + "tokio", +] + +[[package]] +name = "reth-era-utils" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +dependencies = [ + "alloy-consensus", + "alloy-primitives", + "eyre", + "futures-util", + "reth-db-api", + "reth-era", + "reth-era-downloader", + "reth-etl", + "reth-fs-util", + "reth-primitives-traits", + "reth-provider", + "reth-stages-types", + "reth-storage-api", + "tokio", + "tracing", +] + +[[package]] +name = "reth-errors" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +dependencies = [ + "reth-consensus", + "reth-execution-errors", + "reth-storage-errors", + "thiserror 2.0.17", +] + +[[package]] +name = "reth-eth-wire" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +dependencies = [ + "alloy-chains", + "alloy-primitives", + "alloy-rlp", + "bytes", + "derive_more", + "futures", + "pin-project", + "reth-codecs", + "reth-ecies", + "reth-eth-wire-types", + "reth-ethereum-forks", + "reth-metrics", + "reth-network-peers", + "reth-primitives-traits", + "serde", + "snap", + "thiserror 2.0.17", + "tokio", + "tokio-stream", + "tokio-util", + "tracing", +] + +[[package]] +name = "reth-eth-wire-types" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +dependencies = [ + "alloy-chains", + "alloy-consensus", + "alloy-eips", + "alloy-hardforks", + "alloy-primitives", + "alloy-rlp", + "bytes", + "derive_more", + "reth-chainspec", + "reth-codecs-derive", + "reth-ethereum-primitives", + "reth-primitives-traits", + "serde", + "thiserror 2.0.17", +] + +[[package]] +name = "reth-ethereum-cli" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +dependencies = [ + "clap", + "eyre", + "reth-chainspec", + "reth-cli", + "reth-cli-commands", + "reth-cli-runner", + "reth-db", + "reth-node-api", + "reth-node-builder", + "reth-node-core", + "reth-node-ethereum", + "reth-node-metrics", + "reth-rpc-server-types", + "reth-tracing", + "tracing", +] + +[[package]] +name = "reth-ethereum-consensus" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +dependencies = [ + "alloy-consensus", + "alloy-eips", + "alloy-primitives", + "reth-chainspec", + "reth-consensus", + "reth-consensus-common", + "reth-execution-types", + "reth-primitives-traits", + "tracing", +] + +[[package]] +name = "reth-ethereum-engine-primitives" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +dependencies = [ + "alloy-eips", + "alloy-primitives", + "alloy-rlp", + "alloy-rpc-types-engine", + "reth-engine-primitives", + "reth-ethereum-primitives", + "reth-payload-primitives", + "reth-primitives-traits", + "serde", + "sha2 0.10.9", + "thiserror 2.0.17", +] + +[[package]] +name = "reth-ethereum-forks" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +dependencies = [ + "alloy-eip2124", + "alloy-hardforks", + "alloy-primitives", + "auto_impl", + "once_cell", + "rustc-hash 2.1.1", +] + +[[package]] +name = "reth-ethereum-payload-builder" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +dependencies = [ + "alloy-consensus", + "alloy-eips", + "alloy-primitives", + "alloy-rlp", + "alloy-rpc-types-engine", + "reth-basic-payload-builder", + "reth-chainspec", + "reth-consensus-common", + "reth-errors", + "reth-ethereum-primitives", + "reth-evm", + "reth-evm-ethereum", + "reth-payload-builder", + "reth-payload-builder-primitives", + "reth-payload-primitives", + "reth-payload-validator", + "reth-primitives-traits", + "reth-revm", + "reth-storage-api", + "reth-transaction-pool", + "revm", + "tracing", +] + +[[package]] +name = "reth-ethereum-primitives" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +dependencies = [ + "alloy-consensus", + "alloy-eips", + "alloy-primitives", + "alloy-rlp", + "alloy-rpc-types-eth", + "alloy-serde", + "modular-bitfield", + "reth-codecs", + "reth-primitives-traits", + "reth-zstd-compressors", + "serde", + "serde_with", +] + +[[package]] +name = "reth-etl" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +dependencies = [ + "rayon", + "reth-db-api", + "tempfile", +] + +[[package]] +name = "reth-evm" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +dependencies = [ + "alloy-consensus", + "alloy-eips", + "alloy-evm", + "alloy-primitives", + "auto_impl", + "derive_more", + "futures-util", + "metrics", + "reth-execution-errors", + "reth-execution-types", + "reth-metrics", + "reth-primitives-traits", + "reth-storage-api", + "reth-storage-errors", + "reth-trie-common", + "revm", +] + +[[package]] +name = "reth-evm-ethereum" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +dependencies = [ + "alloy-consensus", + "alloy-eips", + "alloy-evm", + "alloy-primitives", + "alloy-rpc-types-engine", + "reth-chainspec", + "reth-ethereum-forks", + "reth-ethereum-primitives", + "reth-evm", + "reth-execution-types", + "reth-primitives-traits", + "reth-storage-errors", + "revm", +] + +[[package]] +name = "reth-execution-errors" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +dependencies = [ + "alloy-evm", + "alloy-primitives", + "alloy-rlp", + "nybbles", + "reth-storage-errors", + "thiserror 2.0.17", +] + +[[package]] +name = "reth-execution-types" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +dependencies = [ + "alloy-consensus", + "alloy-eips", + "alloy-evm", + "alloy-primitives", + "derive_more", + "reth-ethereum-primitives", + "reth-primitives-traits", + "reth-trie-common", + "revm", + "serde", + "serde_with", +] + +[[package]] +name = "reth-exex" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +dependencies = [ + "alloy-consensus", + "alloy-eips", + "alloy-primitives", + "eyre", + "futures", + "itertools 0.14.0", + "metrics", + "parking_lot", + "reth-chain-state", + "reth-chainspec", + "reth-config", + "reth-ethereum-primitives", + "reth-evm", + "reth-exex-types", + "reth-fs-util", + "reth-metrics", + "reth-node-api", + "reth-node-core", + "reth-payload-builder", + "reth-primitives-traits", + "reth-provider", + "reth-prune-types", + "reth-revm", + "reth-stages-api", + "reth-tasks", + "reth-tracing", + "rmp-serde", + "thiserror 2.0.17", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "reth-exex-types" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +dependencies = [ + "alloy-eips", + "alloy-primitives", + "reth-chain-state", + "reth-execution-types", + "reth-primitives-traits", + "serde", + "serde_with", +] + +[[package]] +name = "reth-fs-util" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +dependencies = [ + "serde", + "serde_json", + "thiserror 2.0.17", +] + +[[package]] +name = "reth-invalid-block-hooks" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +dependencies = [ + "alloy-consensus", + "alloy-primitives", + "alloy-rlp", + "alloy-rpc-types-debug", + "eyre", + "futures", + "jsonrpsee 0.26.0", + "pretty_assertions", + "reth-engine-primitives", + "reth-evm", + "reth-primitives-traits", + "reth-provider", + "reth-revm", + "reth-rpc-api", + "reth-tracing", + "reth-trie", + "revm-bytecode", + "revm-database", + "serde", + "serde_json", +] + +[[package]] +name = "reth-ipc" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +dependencies = [ + "bytes", + "futures", + "futures-util", + "interprocess", + "jsonrpsee 0.26.0", + "pin-project", + "serde_json", + "thiserror 2.0.17", + "tokio", + "tokio-stream", + "tokio-util", + "tower 0.5.2", + "tracing", +] + +[[package]] +name = "reth-libmdbx" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +dependencies = [ + "bitflags 2.9.4", + "byteorder", + "dashmap 6.1.0", + "derive_more", + "parking_lot", + "reth-mdbx-sys", + "smallvec", + "thiserror 2.0.17", + "tracing", +] + +[[package]] +name = "reth-mdbx-sys" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +dependencies = [ + "bindgen 0.70.1", + "cc", +] + +[[package]] +name = "reth-metrics" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +dependencies = [ + "futures", + "metrics", + "metrics-derive", + "tokio", + "tokio-util", +] + +[[package]] +name = "reth-net-banlist" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +dependencies = [ + "alloy-primitives", +] + +[[package]] +name = "reth-net-nat" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +dependencies = [ + "futures-util", + "if-addrs", + "reqwest", + "serde_with", + "thiserror 2.0.17", + "tokio", + "tracing", +] + +[[package]] +name = "reth-network" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +dependencies = [ + "alloy-consensus", + "alloy-eips", + "alloy-primitives", + "alloy-rlp", + "aquamarine", + "auto_impl", + "derive_more", + "discv5", + "enr", + "futures", + "itertools 0.14.0", + "metrics", + "parking_lot", + "pin-project", + "rand 0.8.5", + "rand 0.9.2", + "reth-chainspec", + "reth-consensus", + "reth-discv4", + "reth-discv5", + "reth-dns-discovery", + "reth-ecies", + "reth-eth-wire", + "reth-eth-wire-types", + "reth-ethereum-forks", + "reth-ethereum-primitives", + "reth-fs-util", + "reth-metrics", + "reth-net-banlist", + "reth-network-api", + "reth-network-p2p", + "reth-network-peers", + "reth-network-types", + "reth-primitives-traits", + "reth-storage-api", + "reth-tasks", + "reth-tokio-util", + "reth-transaction-pool", + "rustc-hash 2.1.1", + "schnellru", + "secp256k1 0.30.0", + "serde", + "smallvec", + "thiserror 2.0.17", + "tokio", + "tokio-stream", + "tokio-util", + "tracing", +] + +[[package]] +name = "reth-network-api" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +dependencies = [ + "alloy-consensus", + "alloy-primitives", + "alloy-rpc-types-admin", + "alloy-rpc-types-eth", + "auto_impl", + "derive_more", + "enr", + "futures", + "reth-eth-wire-types", + "reth-ethereum-forks", + "reth-network-p2p", + "reth-network-peers", + "reth-network-types", + "reth-tokio-util", + "serde", + "thiserror 2.0.17", + "tokio", + "tokio-stream", +] + +[[package]] +name = "reth-network-p2p" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +dependencies = [ + "alloy-consensus", + "alloy-eips", + "alloy-primitives", + "auto_impl", + "derive_more", + "futures", + "reth-consensus", + "reth-eth-wire-types", + "reth-ethereum-primitives", + "reth-network-peers", + "reth-network-types", + "reth-primitives-traits", + "reth-storage-errors", + "tokio", + "tracing", +] + +[[package]] +name = "reth-network-peers" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +dependencies = [ + "alloy-primitives", + "alloy-rlp", + "enr", + "secp256k1 0.30.0", + "serde_with", + "thiserror 2.0.17", + "tokio", + "url", +] + +[[package]] +name = "reth-network-types" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +dependencies = [ + "alloy-eip2124", + "humantime-serde", + "reth-net-banlist", + "reth-network-peers", + "serde", + "serde_json", + "tracing", +] + +[[package]] +name = "reth-nippy-jar" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +dependencies = [ + "anyhow", + "bincode", + "derive_more", + "lz4_flex", + "memmap2", + "reth-fs-util", + "serde", + "thiserror 2.0.17", + "tracing", + "zstd", +] + +[[package]] +name = "reth-node-api" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +dependencies = [ + "alloy-rpc-types-engine", + "eyre", + "reth-basic-payload-builder", + "reth-consensus", + "reth-db-api", + "reth-engine-primitives", + "reth-evm", + "reth-network-api", + "reth-node-core", + "reth-node-types", + "reth-payload-builder", + "reth-payload-builder-primitives", + "reth-payload-primitives", + "reth-provider", + "reth-tasks", + "reth-tokio-util", + "reth-transaction-pool", +] + +[[package]] +name = "reth-node-builder" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +dependencies = [ + "alloy-consensus", + "alloy-eips", + "alloy-primitives", + "alloy-provider", + "alloy-rpc-types", + "alloy-rpc-types-engine", + "aquamarine", + "eyre", + "fdlimit", + "futures", + "jsonrpsee 0.26.0", + "rayon", + "reth-basic-payload-builder", + "reth-chain-state", + "reth-chainspec", + "reth-cli-util", + "reth-config", + "reth-consensus", + "reth-consensus-debug-client", + "reth-db", + "reth-db-api", + "reth-db-common", + "reth-downloaders", + "reth-engine-local", + "reth-engine-primitives", + "reth-engine-service", + "reth-engine-tree", + "reth-engine-util", + "reth-evm", + "reth-exex", + "reth-fs-util", + "reth-invalid-block-hooks", + "reth-network", + "reth-network-api", + "reth-network-p2p", + "reth-node-api", + "reth-node-core", + "reth-node-ethstats", + "reth-node-events", + "reth-node-metrics", + "reth-payload-builder", + "reth-primitives-traits", + "reth-provider", + "reth-prune", + "reth-rpc", + "reth-rpc-api", + "reth-rpc-builder", + "reth-rpc-engine-api", + "reth-rpc-eth-types", + "reth-rpc-layer", + "reth-stages", + "reth-static-file", + "reth-tasks", + "reth-tokio-util", + "reth-tracing", + "reth-transaction-pool", + "secp256k1 0.30.0", + "serde_json", + "tokio", + "tokio-stream", + "tracing", +] + +[[package]] +name = "reth-node-core" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +dependencies = [ + "alloy-consensus", + "alloy-eips", + "alloy-primitives", + "alloy-rpc-types-engine", + "clap", + "derive_more", + "dirs-next", + "eyre", + "futures", + "humantime", + "rand 0.9.2", + "reth-chainspec", + "reth-cli-util", + "reth-config", + "reth-consensus", + "reth-db", + "reth-discv4", + "reth-discv5", + "reth-engine-local", + "reth-engine-primitives", + "reth-ethereum-forks", + "reth-net-nat", + "reth-network", + "reth-network-p2p", + "reth-network-peers", + "reth-primitives-traits", + "reth-prune-types", + "reth-rpc-convert", + "reth-rpc-eth-types", + "reth-rpc-server-types", + "reth-stages-types", + "reth-storage-api", + "reth-storage-errors", + "reth-tracing", + "reth-transaction-pool", + "secp256k1 0.30.0", + "serde", + "shellexpand", + "strum 0.27.2", + "thiserror 2.0.17", + "toml", + "tracing", + "url", + "vergen", + "vergen-git2", +] + +[[package]] +name = "reth-node-ethereum" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +dependencies = [ + "alloy-eips", + "alloy-network", + "alloy-rpc-types-engine", + "alloy-rpc-types-eth", + "eyre", + "reth-chainspec", + "reth-engine-local", + "reth-engine-primitives", + "reth-ethereum-consensus", + "reth-ethereum-engine-primitives", + "reth-ethereum-payload-builder", + "reth-ethereum-primitives", + "reth-evm", + "reth-evm-ethereum", + "reth-network", + "reth-node-api", + "reth-node-builder", + "reth-payload-primitives", + "reth-primitives-traits", + "reth-provider", + "reth-revm", + "reth-rpc", + "reth-rpc-api", + "reth-rpc-builder", + "reth-rpc-eth-api", + "reth-rpc-eth-types", + "reth-rpc-server-types", + "reth-tracing", + "reth-transaction-pool", + "revm", + "tokio", +] + +[[package]] +name = "reth-node-ethstats" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +dependencies = [ + "alloy-consensus", + "alloy-primitives", + "chrono", + "futures-util", + "reth-chain-state", + "reth-network-api", + "reth-primitives-traits", + "reth-storage-api", + "reth-transaction-pool", + "serde", + "serde_json", + "thiserror 2.0.17", + "tokio", + "tokio-stream", + "tokio-tungstenite", + "tracing", + "url", +] + +[[package]] +name = "reth-node-events" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +dependencies = [ + "alloy-consensus", + "alloy-eips", + "alloy-primitives", + "alloy-rpc-types-engine", + "derive_more", + "futures", + "humantime", + "pin-project", + "reth-engine-primitives", + "reth-network-api", + "reth-primitives-traits", + "reth-prune-types", + "reth-stages", + "reth-static-file-types", + "reth-storage-api", + "tokio", + "tracing", +] + +[[package]] +name = "reth-node-metrics" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +dependencies = [ + "eyre", + "http 1.3.1", + "jsonrpsee-server 0.26.0", + "metrics", + "metrics-exporter-prometheus", + "metrics-process", + "metrics-util", + "procfs", + "reth-metrics", + "reth-tasks", + "tikv-jemalloc-ctl", + "tokio", + "tower 0.5.2", + "tracing", +] + +[[package]] +name = "reth-node-types" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +dependencies = [ + "reth-chainspec", + "reth-db-api", + "reth-engine-primitives", + "reth-payload-primitives", + "reth-primitives-traits", +] + +[[package]] +name = "reth-optimism-chainspec" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +dependencies = [ + "alloy-chains", + "alloy-consensus", + "alloy-eips", + "alloy-genesis", + "alloy-hardforks", + "alloy-primitives", + "derive_more", + "miniz_oxide", + "op-alloy-consensus", + "op-alloy-rpc-types", + "paste", + "reth-chainspec", + "reth-ethereum-forks", + "reth-network-peers", + "reth-optimism-forks", + "reth-optimism-primitives", + "reth-primitives-traits", + "serde", + "serde_json", + "tar-no-std", + "thiserror 2.0.17", +] + +[[package]] +name = "reth-optimism-cli" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +dependencies = [ + "alloy-consensus", + "alloy-eips", + "alloy-primitives", + "alloy-rlp", + "clap", + "derive_more", + "eyre", + "futures-util", + "op-alloy-consensus", + "reth-chainspec", + "reth-cli", + "reth-cli-commands", + "reth-cli-runner", + "reth-consensus", + "reth-db", + "reth-db-api", + "reth-db-common", + "reth-downloaders", + "reth-execution-types", + "reth-fs-util", + "reth-node-builder", + "reth-node-core", + "reth-node-events", + "reth-node-metrics", + "reth-optimism-chainspec", + "reth-optimism-consensus", + "reth-optimism-evm", + "reth-optimism-node", + "reth-optimism-primitives", + "reth-primitives-traits", + "reth-provider", + "reth-prune", + "reth-rpc-server-types", + "reth-stages", + "reth-static-file", + "reth-static-file-types", + "reth-tracing", + "serde", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "reth-optimism-consensus" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +dependencies = [ + "alloy-consensus", + "alloy-eips", + "alloy-primitives", + "alloy-trie", + "reth-chainspec", + "reth-consensus", + "reth-consensus-common", + "reth-execution-types", + "reth-optimism-chainspec", + "reth-optimism-forks", + "reth-optimism-primitives", + "reth-primitives-traits", + "reth-storage-api", + "reth-storage-errors", + "reth-trie-common", + "revm", + "thiserror 2.0.17", + "tracing", +] + +[[package]] +name = "reth-optimism-evm" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +dependencies = [ + "alloy-consensus", + "alloy-eips", + "alloy-evm", + "alloy-op-evm", + "alloy-primitives", + "op-alloy-consensus", + "op-alloy-rpc-types-engine", + "op-revm", + "reth-chainspec", + "reth-evm", + "reth-execution-errors", + "reth-execution-types", + "reth-optimism-chainspec", + "reth-optimism-consensus", + "reth-optimism-forks", + "reth-optimism-primitives", + "reth-primitives-traits", + "reth-rpc-eth-api", + "reth-storage-errors", + "revm", + "thiserror 2.0.17", +] + +[[package]] +name = "reth-optimism-flashblocks" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +dependencies = [ + "alloy-consensus", + "alloy-eips", + "alloy-primitives", + "alloy-rpc-types-engine", + "alloy-serde", + "brotli", + "eyre", + "futures-util", + "reth-chain-state", + "reth-errors", + "reth-evm", + "reth-execution-types", + "reth-node-api", + "reth-optimism-evm", + "reth-optimism-payload-builder", + "reth-optimism-primitives", + "reth-primitives-traits", + "reth-revm", + "reth-rpc-eth-types", + "reth-storage-api", + "reth-tasks", + "ringbuffer", + "serde", + "serde_json", + "tokio", + "tokio-tungstenite", + "tracing", + "url", +] + +[[package]] +name = "reth-optimism-forks" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +dependencies = [ + "alloy-op-hardforks", + "alloy-primitives", + "once_cell", + "reth-ethereum-forks", +] + +[[package]] +name = "reth-optimism-node" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +dependencies = [ + "alloy-consensus", + "alloy-primitives", + "alloy-rpc-types-engine", + "alloy-rpc-types-eth", + "clap", + "eyre", + "op-alloy-consensus", + "op-alloy-rpc-types-engine", + "op-revm", + "reth-chainspec", "reth-consensus", - "reth-consensus-common", - "reth-execution-types", + "reth-engine-local", + "reth-evm", + "reth-network", + "reth-node-api", + "reth-node-builder", + "reth-node-core", "reth-optimism-chainspec", + "reth-optimism-consensus", + "reth-optimism-evm", + "reth-optimism-forks", + "reth-optimism-payload-builder", + "reth-optimism-primitives", + "reth-optimism-rpc", + "reth-optimism-storage", + "reth-optimism-txpool", + "reth-payload-builder", + "reth-primitives-traits", + "reth-provider", + "reth-rpc-api", + "reth-rpc-engine-api", + "reth-rpc-server-types", + "reth-tracing", + "reth-transaction-pool", + "reth-trie-common", + "revm", + "serde", + "tokio", + "url", +] + +[[package]] +name = "reth-optimism-payload-builder" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +dependencies = [ + "alloy-consensus", + "alloy-eips", + "alloy-primitives", + "alloy-rlp", + "alloy-rpc-types-debug", + "alloy-rpc-types-engine", + "derive_more", + "op-alloy-consensus", + "op-alloy-rpc-types-engine", + "reth-basic-payload-builder", + "reth-chain-state", + "reth-chainspec", + "reth-evm", + "reth-execution-types", + "reth-optimism-evm", + "reth-optimism-forks", + "reth-optimism-primitives", + "reth-optimism-txpool", + "reth-payload-builder", + "reth-payload-builder-primitives", + "reth-payload-primitives", + "reth-payload-util", + "reth-payload-validator", + "reth-primitives-traits", + "reth-revm", + "reth-storage-api", + "reth-transaction-pool", + "revm", + "serde", + "sha2 0.10.9", + "thiserror 2.0.17", + "tracing", +] + +[[package]] +name = "reth-optimism-primitives" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +dependencies = [ + "alloy-consensus", + "alloy-eips", + "alloy-primitives", + "alloy-rlp", + "bytes", + "modular-bitfield", + "op-alloy-consensus", + "reth-codecs", + "reth-primitives-traits", + "reth-zstd-compressors", + "serde", + "serde_with", +] + +[[package]] +name = "reth-optimism-rpc" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +dependencies = [ + "alloy-consensus", + "alloy-eips", + "alloy-json-rpc", + "alloy-primitives", + "alloy-rpc-client", + "alloy-rpc-types-debug", + "alloy-rpc-types-engine", + "alloy-rpc-types-eth", + "alloy-transport", + "alloy-transport-http", + "async-trait", + "derive_more", + "eyre", + "futures", + "jsonrpsee 0.26.0", + "jsonrpsee-core 0.26.0", + "jsonrpsee-types 0.26.0", + "metrics", + "op-alloy-consensus", + "op-alloy-network", + "op-alloy-rpc-jsonrpsee", + "op-alloy-rpc-types", + "op-alloy-rpc-types-engine", + "op-revm", + "reqwest", + "reth-chain-state", + "reth-chainspec", + "reth-evm", + "reth-metrics", + "reth-node-api", + "reth-node-builder", + "reth-optimism-evm", + "reth-optimism-flashblocks", + "reth-optimism-forks", + "reth-optimism-payload-builder", + "reth-optimism-primitives", + "reth-optimism-txpool", + "reth-primitives-traits", + "reth-rpc", + "reth-rpc-api", + "reth-rpc-convert", + "reth-rpc-engine-api", + "reth-rpc-eth-api", + "reth-rpc-eth-types", + "reth-rpc-server-types", + "reth-storage-api", + "reth-tasks", + "reth-transaction-pool", + "revm", + "serde_json", + "thiserror 2.0.17", + "tokio", + "tokio-stream", + "tower 0.5.2", + "tracing", +] + +[[package]] +name = "reth-optimism-storage" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +dependencies = [ + "alloy-consensus", + "reth-optimism-primitives", + "reth-storage-api", +] + +[[package]] +name = "reth-optimism-txpool" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +dependencies = [ + "alloy-consensus", + "alloy-eips", + "alloy-json-rpc", + "alloy-primitives", + "alloy-rpc-client", + "alloy-rpc-types-eth", + "alloy-serde", + "c-kzg", + "derive_more", + "futures-util", + "metrics", + "op-alloy-consensus", + "op-alloy-flz", + "op-alloy-rpc-types", + "op-revm", + "parking_lot", + "reth-chain-state", + "reth-chainspec", + "reth-metrics", + "reth-optimism-evm", "reth-optimism-forks", "reth-optimism-primitives", "reth-primitives-traits", "reth-storage-api", + "reth-transaction-pool", + "serde", + "thiserror 2.0.17", + "tokio", + "tracing", +] + +[[package]] +name = "reth-payload-builder" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +dependencies = [ + "alloy-consensus", + "alloy-primitives", + "alloy-rpc-types", + "futures-util", + "metrics", + "reth-chain-state", + "reth-ethereum-engine-primitives", + "reth-metrics", + "reth-payload-builder-primitives", + "reth-payload-primitives", + "reth-primitives-traits", + "tokio", + "tokio-stream", + "tracing", +] + +[[package]] +name = "reth-payload-builder-primitives" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +dependencies = [ + "pin-project", + "reth-payload-primitives", + "tokio", + "tokio-stream", + "tracing", +] + +[[package]] +name = "reth-payload-primitives" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +dependencies = [ + "alloy-eips", + "alloy-primitives", + "alloy-rpc-types-engine", + "auto_impl", + "either", + "op-alloy-rpc-types-engine", + "reth-chain-state", + "reth-chainspec", + "reth-errors", + "reth-primitives-traits", + "serde", + "thiserror 2.0.17", + "tokio", +] + +[[package]] +name = "reth-payload-util" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +dependencies = [ + "alloy-consensus", + "alloy-primitives", + "reth-transaction-pool", +] + +[[package]] +name = "reth-payload-validator" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +dependencies = [ + "alloy-consensus", + "alloy-rpc-types-engine", + "reth-primitives-traits", +] + +[[package]] +name = "reth-primitives" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +dependencies = [ + "alloy-consensus", + "c-kzg", + "once_cell", + "reth-ethereum-forks", + "reth-ethereum-primitives", + "reth-primitives-traits", + "reth-static-file-types", +] + +[[package]] +name = "reth-primitives-traits" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +dependencies = [ + "alloy-consensus", + "alloy-eips", + "alloy-genesis", + "alloy-primitives", + "alloy-rlp", + "alloy-rpc-types-eth", + "alloy-trie", + "auto_impl", + "byteorder", + "bytes", + "derive_more", + "modular-bitfield", + "once_cell", + "op-alloy-consensus", + "rayon", + "reth-codecs", + "revm-bytecode", + "revm-primitives", + "revm-state", + "secp256k1 0.30.0", + "serde", + "serde_with", + "thiserror 2.0.17", +] + +[[package]] +name = "reth-provider" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +dependencies = [ + "alloy-consensus", + "alloy-eips", + "alloy-primitives", + "alloy-rpc-types-engine", + "dashmap 6.1.0", + "eyre", + "itertools 0.14.0", + "metrics", + "notify", + "parking_lot", + "rayon", + "reth-chain-state", + "reth-chainspec", + "reth-codecs", + "reth-db", + "reth-db-api", + "reth-errors", + "reth-ethereum-primitives", + "reth-evm", + "reth-execution-types", + "reth-fs-util", + "reth-metrics", + "reth-nippy-jar", + "reth-node-types", + "reth-primitives-traits", + "reth-prune-types", + "reth-stages-types", + "reth-static-file-types", + "reth-storage-api", "reth-storage-errors", - "reth-trie-common", - "revm", - "thiserror", + "reth-trie", + "reth-trie-db", + "revm-database", + "strum 0.27.2", "tracing", ] [[package]] -name = "reth-optimism-evm" -version = "1.7.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.7.0#9d56da53ec0ad60e229456a0c70b338501d923a5" +name = "reth-prune" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-evm", - "alloy-op-evm", "alloy-primitives", - "op-alloy-consensus 0.19.1", - "op-alloy-rpc-types-engine", - "op-revm", + "itertools 0.14.0", + "metrics", + "rayon", "reth-chainspec", - "reth-evm", - "reth-execution-errors", - "reth-execution-types", - "reth-optimism-chainspec", - "reth-optimism-consensus", - "reth-optimism-forks", - "reth-optimism-primitives", + "reth-config", + "reth-db-api", + "reth-errors", + "reth-exex-types", + "reth-metrics", "reth-primitives-traits", - "reth-storage-errors", - "revm", - "thiserror", + "reth-provider", + "reth-prune-types", + "reth-static-file-types", + "reth-tokio-util", + "rustc-hash 2.1.1", + "thiserror 2.0.17", + "tokio", + "tracing", ] [[package]] -name = "reth-optimism-forks" -version = "1.7.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.7.0#9d56da53ec0ad60e229456a0c70b338501d923a5" +name = "reth-prune-types" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ - "alloy-op-hardforks", "alloy-primitives", - "once_cell", - "reth-ethereum-forks", + "derive_more", + "modular-bitfield", + "reth-codecs", + "serde", + "thiserror 2.0.17", ] [[package]] -name = "reth-optimism-primitives" -version = "1.7.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.7.0#9d56da53ec0ad60e229456a0c70b338501d923a5" +name = "reth-ress-protocol" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ "alloy-consensus", - "alloy-eips", "alloy-primitives", "alloy-rlp", - "bytes", - "op-alloy-consensus 0.19.1", - "reth-codecs", + "futures", + "reth-eth-wire", + "reth-ethereum-primitives", + "reth-network", + "reth-network-api", + "reth-storage-errors", + "tokio", + "tokio-stream", + "tracing", +] + +[[package]] +name = "reth-ress-provider" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +dependencies = [ + "alloy-consensus", + "alloy-primitives", + "eyre", + "futures", + "parking_lot", + "reth-chain-state", + "reth-errors", + "reth-ethereum-primitives", + "reth-evm", + "reth-node-api", "reth-primitives-traits", - "reth-zstd-compressors", - "serde", - "serde_with", + "reth-ress-protocol", + "reth-revm", + "reth-storage-api", + "reth-tasks", + "reth-tokio-util", + "reth-trie", + "schnellru", + "tokio", + "tracing", ] [[package]] -name = "reth-primitives-traits" -version = "1.7.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.7.0#9d56da53ec0ad60e229456a0c70b338501d923a5" +name = "reth-revm" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +dependencies = [ + "alloy-primitives", + "reth-primitives-traits", + "reth-storage-api", + "reth-storage-errors", + "reth-trie", + "revm", +] + +[[package]] +name = "reth-rpc" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ "alloy-consensus", + "alloy-dyn-abi", "alloy-eips", + "alloy-evm", "alloy-genesis", + "alloy-network", "alloy-primitives", "alloy-rlp", + "alloy-rpc-client", + "alloy-rpc-types", + "alloy-rpc-types-admin", + "alloy-rpc-types-beacon", + "alloy-rpc-types-debug", + "alloy-rpc-types-engine", "alloy-rpc-types-eth", - "alloy-trie", - "auto_impl", - "bytes", + "alloy-rpc-types-mev", + "alloy-rpc-types-trace", + "alloy-rpc-types-txpool", + "alloy-serde", + "alloy-signer", + "alloy-signer-local", + "async-trait", "derive_more", - "once_cell", - "op-alloy-consensus 0.19.1", - "reth-codecs", - "revm-bytecode", + "dyn-clone", + "futures", + "http 1.3.1", + "http-body 1.0.1", + "hyper 1.7.0", + "itertools 0.14.0", + "jsonrpsee 0.26.0", + "jsonrpsee-types 0.26.0", + "jsonwebtoken", + "parking_lot", + "pin-project", + "reth-chain-state", + "reth-chainspec", + "reth-consensus", + "reth-consensus-common", + "reth-engine-primitives", + "reth-errors", + "reth-evm", + "reth-evm-ethereum", + "reth-execution-types", + "reth-metrics", + "reth-network-api", + "reth-network-peers", + "reth-network-types", + "reth-node-api", + "reth-primitives-traits", + "reth-revm", + "reth-rpc-api", + "reth-rpc-convert", + "reth-rpc-engine-api", + "reth-rpc-eth-api", + "reth-rpc-eth-types", + "reth-rpc-server-types", + "reth-storage-api", + "reth-tasks", + "reth-transaction-pool", + "reth-trie-common", + "revm", + "revm-inspectors", "revm-primitives", - "revm-state", - "secp256k1 0.30.0", "serde", - "serde_with", - "thiserror", + "serde_json", + "sha2 0.10.9", + "thiserror 2.0.17", + "tokio", + "tokio-stream", + "tower 0.5.2", + "tracing", + "tracing-futures", ] [[package]] -name = "reth-prune-types" -version = "1.7.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.7.0#9d56da53ec0ad60e229456a0c70b338501d923a5" +name = "reth-rpc-api" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ + "alloy-eips", + "alloy-genesis", + "alloy-json-rpc", "alloy-primitives", - "derive_more", - "serde", - "thiserror", + "alloy-rpc-types", + "alloy-rpc-types-admin", + "alloy-rpc-types-anvil", + "alloy-rpc-types-beacon", + "alloy-rpc-types-debug", + "alloy-rpc-types-engine", + "alloy-rpc-types-eth", + "alloy-rpc-types-mev", + "alloy-rpc-types-trace", + "alloy-rpc-types-txpool", + "alloy-serde", + "jsonrpsee 0.26.0", + "reth-chain-state", + "reth-engine-primitives", + "reth-network-peers", + "reth-rpc-eth-api", + "reth-trie-common", ] [[package]] -name = "reth-revm" -version = "1.7.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.7.0#9d56da53ec0ad60e229456a0c70b338501d923a5" +name = "reth-rpc-builder" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ - "alloy-primitives", + "alloy-network", + "alloy-provider", + "dyn-clone", + "http 1.3.1", + "jsonrpsee 0.26.0", + "metrics", + "pin-project", + "reth-chain-state", + "reth-chainspec", + "reth-consensus", + "reth-evm", + "reth-ipc", + "reth-metrics", + "reth-network-api", + "reth-node-core", "reth-primitives-traits", + "reth-rpc", + "reth-rpc-api", + "reth-rpc-eth-api", + "reth-rpc-eth-types", + "reth-rpc-layer", + "reth-rpc-server-types", "reth-storage-api", - "reth-storage-errors", - "revm", + "reth-tasks", + "reth-transaction-pool", + "serde", + "thiserror 2.0.17", + "tokio", + "tokio-util", + "tower 0.5.2", + "tower-http", + "tracing", ] [[package]] name = "reth-rpc-convert" -version = "1.7.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.7.0#9d56da53ec0ad60e229456a0c70b338501d923a5" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ "alloy-consensus", "alloy-json-rpc", @@ -5565,18 +9982,100 @@ dependencies = [ "alloy-primitives", "alloy-rpc-types-eth", "alloy-signer", - "jsonrpsee-types", + "auto_impl", + "dyn-clone", + "jsonrpsee-types 0.26.0", + "op-alloy-consensus", + "op-alloy-network", + "op-alloy-rpc-types", + "op-revm", "reth-ethereum-primitives", "reth-evm", + "reth-optimism-primitives", "reth-primitives-traits", + "reth-storage-api", "revm-context", - "thiserror", + "thiserror 2.0.17", +] + +[[package]] +name = "reth-rpc-engine-api" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +dependencies = [ + "alloy-eips", + "alloy-primitives", + "alloy-rpc-types-engine", + "async-trait", + "jsonrpsee-core 0.26.0", + "jsonrpsee-types 0.26.0", + "metrics", + "parking_lot", + "reth-chainspec", + "reth-engine-primitives", + "reth-metrics", + "reth-payload-builder", + "reth-payload-builder-primitives", + "reth-payload-primitives", + "reth-primitives-traits", + "reth-rpc-api", + "reth-storage-api", + "reth-tasks", + "reth-transaction-pool", + "serde", + "thiserror 2.0.17", + "tokio", + "tracing", +] + +[[package]] +name = "reth-rpc-eth-api" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +dependencies = [ + "alloy-consensus", + "alloy-dyn-abi", + "alloy-eips", + "alloy-evm", + "alloy-json-rpc", + "alloy-network", + "alloy-primitives", + "alloy-rlp", + "alloy-rpc-types-eth", + "alloy-rpc-types-mev", + "alloy-serde", + "async-trait", + "auto_impl", + "dyn-clone", + "futures", + "jsonrpsee 0.26.0", + "jsonrpsee-types 0.26.0", + "parking_lot", + "reth-chain-state", + "reth-chainspec", + "reth-errors", + "reth-evm", + "reth-network-api", + "reth-node-api", + "reth-primitives-traits", + "reth-revm", + "reth-rpc-convert", + "reth-rpc-eth-types", + "reth-rpc-server-types", + "reth-storage-api", + "reth-tasks", + "reth-transaction-pool", + "reth-trie-common", + "revm", + "revm-inspectors", + "tokio", + "tracing", ] [[package]] name = "reth-rpc-eth-types" -version = "1.7.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.7.0#9d56da53ec0ad60e229456a0c70b338501d923a5" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ "alloy-consensus", "alloy-eips", @@ -5590,8 +10089,8 @@ dependencies = [ "derive_more", "futures", "itertools 0.14.0", - "jsonrpsee-core", - "jsonrpsee-types", + "jsonrpsee-core 0.26.0", + "jsonrpsee-types 0.26.0", "metrics", "rand 0.9.2", "reqwest", @@ -5614,54 +10113,162 @@ dependencies = [ "revm-inspectors", "schnellru", "serde", - "thiserror", + "thiserror 2.0.17", "tokio", "tokio-stream", "tracing", ] +[[package]] +name = "reth-rpc-layer" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +dependencies = [ + "alloy-rpc-types-engine", + "http 1.3.1", + "jsonrpsee-http-client 0.26.0", + "pin-project", + "tower 0.5.2", + "tower-http", + "tracing", +] + [[package]] name = "reth-rpc-server-types" -version = "1.7.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.7.0#9d56da53ec0ad60e229456a0c70b338501d923a5" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ "alloy-eips", "alloy-primitives", "alloy-rpc-types-engine", - "jsonrpsee-core", - "jsonrpsee-types", + "jsonrpsee-core 0.26.0", + "jsonrpsee-types 0.26.0", "reth-errors", "reth-network-api", "serde", - "strum", + "strum 0.27.2", +] + +[[package]] +name = "reth-stages" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +dependencies = [ + "alloy-consensus", + "alloy-eips", + "alloy-primitives", + "bincode", + "eyre", + "futures-util", + "itertools 0.14.0", + "num-traits", + "rayon", + "reqwest", + "reth-codecs", + "reth-config", + "reth-consensus", + "reth-db", + "reth-db-api", + "reth-era", + "reth-era-downloader", + "reth-era-utils", + "reth-etl", + "reth-evm", + "reth-execution-types", + "reth-exex", + "reth-fs-util", + "reth-network-p2p", + "reth-primitives-traits", + "reth-provider", + "reth-prune", + "reth-prune-types", + "reth-revm", + "reth-stages-api", + "reth-static-file-types", + "reth-storage-errors", + "reth-trie", + "reth-trie-db", + "thiserror 2.0.17", + "tokio", + "tracing", +] + +[[package]] +name = "reth-stages-api" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +dependencies = [ + "alloy-eips", + "alloy-primitives", + "aquamarine", + "auto_impl", + "futures-util", + "metrics", + "reth-consensus", + "reth-errors", + "reth-metrics", + "reth-network-p2p", + "reth-primitives-traits", + "reth-provider", + "reth-prune", + "reth-stages-types", + "reth-static-file", + "reth-static-file-types", + "reth-tokio-util", + "thiserror 2.0.17", + "tokio", + "tracing", ] [[package]] name = "reth-stages-types" -version = "1.7.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.7.0#9d56da53ec0ad60e229456a0c70b338501d923a5" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ "alloy-primitives", "bytes", + "modular-bitfield", + "reth-codecs", "reth-trie-common", "serde", ] +[[package]] +name = "reth-static-file" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +dependencies = [ + "alloy-primitives", + "parking_lot", + "rayon", + "reth-codecs", + "reth-db-api", + "reth-primitives-traits", + "reth-provider", + "reth-prune-types", + "reth-stages-types", + "reth-static-file-types", + "reth-storage-errors", + "reth-tokio-util", + "tracing", +] + [[package]] name = "reth-static-file-types" -version = "1.7.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.7.0#9d56da53ec0ad60e229456a0c70b338501d923a5" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ "alloy-primitives", + "clap", "derive_more", "serde", - "strum", + "strum 0.27.2", ] [[package]] name = "reth-storage-api" -version = "1.7.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.7.0#9d56da53ec0ad60e229456a0c70b338501d923a5" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ "alloy-consensus", "alloy-eips", @@ -5669,6 +10276,7 @@ dependencies = [ "alloy-rpc-types-engine", "auto_impl", "reth-chainspec", + "reth-db-api", "reth-db-models", "reth-ethereum-primitives", "reth-execution-types", @@ -5682,8 +10290,8 @@ dependencies = [ [[package]] name = "reth-storage-errors" -version = "1.7.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.7.0#9d56da53ec0ad60e229456a0c70b338501d923a5" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ "alloy-eips", "alloy-primitives", @@ -5693,20 +10301,22 @@ dependencies = [ "reth-prune-types", "reth-static-file-types", "revm-database-interface", - "thiserror", + "thiserror 2.0.17", ] [[package]] name = "reth-tasks" -version = "1.7.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.7.0#9d56da53ec0ad60e229456a0c70b338501d923a5" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ "auto_impl", "dyn-clone", "futures-util", "metrics", + "pin-project", + "rayon", "reth-metrics", - "thiserror", + "thiserror 2.0.17", "tokio", "tracing", "tracing-futures", @@ -5714,18 +10324,33 @@ dependencies = [ [[package]] name = "reth-tokio-util" -version = "1.7.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.7.0#9d56da53ec0ad60e229456a0c70b338501d923a5" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ "tokio", "tokio-stream", "tracing", ] +[[package]] +name = "reth-tracing" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +dependencies = [ + "clap", + "eyre", + "rolling-file", + "tracing", + "tracing-appender", + "tracing-journald", + "tracing-logfmt", + "tracing-subscriber 0.3.20", +] + [[package]] name = "reth-transaction-pool" -version = "1.7.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.7.0#9d56da53ec0ad60e229456a0c70b338501d923a5" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ "alloy-consensus", "alloy-eips", @@ -5738,6 +10363,7 @@ dependencies = [ "metrics", "parking_lot", "pin-project", + "rand 0.9.2", "reth-chain-state", "reth-chainspec", "reth-eth-wire-types", @@ -5755,7 +10381,7 @@ dependencies = [ "serde", "serde_json", "smallvec", - "thiserror", + "thiserror 2.0.17", "tokio", "tokio-stream", "tracing", @@ -5763,8 +10389,8 @@ dependencies = [ [[package]] name = "reth-trie" -version = "1.7.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.7.0#9d56da53ec0ad60e229456a0c70b338501d923a5" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ "alloy-consensus", "alloy-eips", @@ -5773,7 +10399,9 @@ dependencies = [ "alloy-trie", "auto_impl", "itertools 0.14.0", + "metrics", "reth-execution-errors", + "reth-metrics", "reth-primitives-traits", "reth-stages-types", "reth-storage-errors", @@ -5785,8 +10413,8 @@ dependencies = [ [[package]] name = "reth-trie-common" -version = "1.7.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.7.0#9d56da53ec0ad60e229456a0c70b338501d923a5" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ "alloy-consensus", "alloy-primitives", @@ -5799,32 +10427,92 @@ dependencies = [ "itertools 0.14.0", "nybbles", "rayon", + "reth-codecs", "reth-primitives-traits", "revm-database", "serde", "serde_with", ] +[[package]] +name = "reth-trie-db" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +dependencies = [ + "alloy-primitives", + "reth-db-api", + "reth-execution-errors", + "reth-primitives-traits", + "reth-trie", + "tracing", +] + +[[package]] +name = "reth-trie-parallel" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +dependencies = [ + "alloy-primitives", + "alloy-rlp", + "derive_more", + "itertools 0.14.0", + "metrics", + "rayon", + "reth-db-api", + "reth-execution-errors", + "reth-metrics", + "reth-provider", + "reth-storage-errors", + "reth-trie", + "reth-trie-common", + "reth-trie-db", + "reth-trie-sparse", + "thiserror 2.0.17", + "tokio", + "tracing", +] + [[package]] name = "reth-trie-sparse" -version = "1.7.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.7.0#9d56da53ec0ad60e229456a0c70b338501d923a5" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ "alloy-primitives", "alloy-rlp", "alloy-trie", "auto_impl", + "metrics", + "rayon", "reth-execution-errors", + "reth-metrics", "reth-primitives-traits", "reth-trie-common", "smallvec", "tracing", ] +[[package]] +name = "reth-trie-sparse-parallel" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +dependencies = [ + "alloy-primitives", + "alloy-rlp", + "alloy-trie", + "metrics", + "rayon", + "reth-execution-errors", + "reth-metrics", + "reth-trie-common", + "reth-trie-sparse", + "smallvec", + "tracing", +] + [[package]] name = "reth-zstd-compressors" -version = "1.7.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.7.0#9d56da53ec0ad60e229456a0c70b338501d923a5" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ "zstd", ] @@ -5959,20 +10647,22 @@ dependencies = [ [[package]] name = "revm-inspectors" -version = "0.29.2" +version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fdb678b03faa678a7007a7c761a78efa9ca9adcd9434ef3d1ad894aec6e43d1" +checksum = "e9b329afcc0f9fd5adfa2c6349a7435a8558e82bcae203142103a9a95e2a63b6" dependencies = [ "alloy-primitives", "alloy-rpc-types-eth", "alloy-rpc-types-trace", "alloy-sol-types", "anstyle", + "boa_engine", + "boa_gc", "colorchoice", "revm", "serde", "serde_json", - "thiserror", + "thiserror 2.0.17", ] [[package]] @@ -6000,6 +10690,7 @@ dependencies = [ "ark-serialize 0.5.0", "arrayref", "aurora-engine-modexp", + "blst", "c-kzg", "cfg-if", "k256", @@ -6071,6 +10762,12 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "ringbuffer" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3df6368f71f205ff9c33c076d170dd56ebf68e8161c733c0caa07a7a5509ed53" + [[package]] name = "ripemd" version = "0.1.3" @@ -6080,6 +10777,15 @@ dependencies = [ "digest 0.10.7", ] +[[package]] +name = "rlimit" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7043b63bd0cd1aaa628e476b80e6d4023a3b50eb32789f2728908107bd0c793a" +dependencies = [ + "libc", +] + [[package]] name = "rlp" version = "0.5.2" @@ -6090,6 +10796,98 @@ dependencies = [ "rustc-hex", ] +[[package]] +name = "rmp" +version = "0.8.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "228ed7c16fa39782c3b3468e974aec2795e9089153cd08ee2e9aefb3613334c4" +dependencies = [ + "byteorder", + "num-traits", + "paste", +] + +[[package]] +name = "rmp-serde" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52e599a477cf9840e92f2cde9a7189e67b42c57532749bf90aea6ec10facd4db" +dependencies = [ + "byteorder", + "rmp", + "serde", +] + +[[package]] +name = "roaring" +version = "0.10.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19e8d2cfa184d94d0726d650a9f4a1be7f9b76ac9fdb954219878dc00c1c1e7b" +dependencies = [ + "bytemuck", + "byteorder", +] + +[[package]] +name = "rolling-file" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8395b4f860856b740f20a296ea2cd4d823e81a2658cf05ef61be22916026a906" +dependencies = [ + "chrono", +] + +[[package]] +name = "rollup-boost" +version = "0.1.0" +source = "git+http://github.com/flashbots/rollup-boost?tag=rollup-boost%2Fv0.7.5#b86af43969557bee18f17ec1d6bcd3e984f910b2" +dependencies = [ + "alloy-primitives", + "alloy-rpc-types-engine", + "alloy-rpc-types-eth", + "alloy-serde", + "clap", + "dashmap 6.1.0", + "dotenvy", + "eyre", + "futures", + "http 1.3.1", + "http-body-util", + "hyper 1.7.0", + "hyper-rustls 0.27.7", + "hyper-util", + "jsonrpsee 0.25.1", + "metrics", + "metrics-derive", + "metrics-exporter-prometheus", + "metrics-util", + "moka", + "op-alloy-rpc-types-engine", + "opentelemetry", + "opentelemetry-otlp", + "opentelemetry_sdk", + "parking_lot", + "paste", + "reth-optimism-payload-builder", + "rustls 0.23.31", + "serde", + "serde_json", + "sha2 0.10.9", + "testcontainers", + "thiserror 2.0.17", + "tokio", + "tokio-tungstenite", + "tokio-util", + "tower 0.5.2", + "tower-http", + "tracing", + "tracing-opentelemetry", + "tracing-subscriber 0.3.20", + "url", + "vergen", + "vergen-git2", +] + [[package]] name = "route-recognizer" version = "0.3.1" @@ -6130,13 +10928,14 @@ dependencies = [ [[package]] name = "ruint" -version = "1.16.0" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ecb38f82477f20c5c3d62ef52d7c4e536e38ea9b73fb570a20c5cae0e14bcf6" +checksum = "a68df0380e5c9d20ce49534f292a36a7514ae21350726efe1865bdb1fa91d278" dependencies = [ "alloy-rlp", "ark-ff 0.3.0", "ark-ff 0.4.2", + "ark-ff 0.5.0", "bytes", "fastrlp 0.3.1", "fastrlp 0.4.0", @@ -6150,7 +10949,7 @@ dependencies = [ "rand 0.9.2", "rlp", "ruint-macro", - "serde", + "serde_core", "valuable", "zeroize", ] @@ -6229,7 +11028,7 @@ dependencies = [ "errno", "libc", "linux-raw-sys 0.11.0", - "windows-sys 0.61.0", + "windows-sys 0.61.1", ] [[package]] @@ -6251,6 +11050,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0ebcbd2f03de0fc1122ad9bb24b127a5a6cd51d72604a3f3c50ac459762b6cc" dependencies = [ "aws-lc-rs", + "log", "once_cell", "ring", "rustls-pki-types", @@ -6280,7 +11080,7 @@ dependencies = [ "openssl-probe", "rustls-pki-types", "schannel", - "security-framework 3.4.0", + "security-framework 3.5.1", ] [[package]] @@ -6311,6 +11111,33 @@ dependencies = [ "zeroize", ] +[[package]] +name = "rustls-platform-verifier" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19787cda76408ec5404443dc8b31795c87cd8fec49762dc75fa727740d34acc1" +dependencies = [ + "core-foundation 0.10.1", + "core-foundation-sys", + "jni", + "log", + "once_cell", + "rustls 0.23.31", + "rustls-native-certs 0.8.1", + "rustls-platform-verifier-android", + "rustls-webpki 0.103.4", + "security-framework 3.5.1", + "security-framework-sys", + "webpki-root-certs 0.26.11", + "windows-sys 0.59.0", +] + +[[package]] +name = "rustls-platform-verifier-android" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f" + [[package]] name = "rustls-webpki" version = "0.101.7" @@ -6357,13 +11184,28 @@ version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" +[[package]] +name = "ryu-js" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd29631678d6fb0903b69223673e122c32e9ae559d0960a38d574695ebc0ea15" + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + [[package]] name = "schannel" version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "891d81b926048e76efe18581bf793546b4c0eaf8448d72be8de2bbee5fd166e1" dependencies = [ - "windows-sys 0.61.0", + "windows-sys 0.61.1", ] [[package]] @@ -6502,9 +11344,9 @@ dependencies = [ [[package]] name = "security-framework" -version = "3.4.0" +version = "3.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60b369d18893388b345804dc0007963c99b7d665ae71d275812d828c6f089640" +checksum = "b3297343eaf830f66ede390ea39da1d462b6b0c1b000f420d0a83f898bbbe6ef" dependencies = [ "bitflags 2.9.4", "core-foundation 0.10.1", @@ -6537,6 +11379,10 @@ name = "semver" version = "1.0.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" +dependencies = [ + "serde", + "serde_core", +] [[package]] name = "semver-parser" @@ -6547,11 +11393,23 @@ dependencies = [ "pest", ] +[[package]] +name = "send_wrapper" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f638d531eccd6e23b980caf34876660d38e265409d8e99b397ab71eb3612fad0" + +[[package]] +name = "send_wrapper" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" + [[package]] name = "serde" -version = "1.0.227" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80ece43fc6fbed4eb5392ab50c07334d3e577cbf40997ee896fe7af40bba4245" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" dependencies = [ "serde_core", "serde_derive", @@ -6559,18 +11417,18 @@ dependencies = [ [[package]] name = "serde_core" -version = "1.0.227" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a576275b607a2c86ea29e410193df32bc680303c82f31e275bbfcafe8b33be5" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.227" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51e694923b8824cf0e9b382adf0f60d4e05f348f357b38833a3fa5ed7c2ede04" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", @@ -6602,6 +11460,15 @@ dependencies = [ "syn 2.0.106", ] +[[package]] +name = "serde_spanned" +version = "0.6.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3" +dependencies = [ + "serde", +] + [[package]] name = "serde_urlencoded" version = "0.7.1" @@ -6616,9 +11483,9 @@ dependencies = [ [[package]] name = "serde_with" -version = "3.14.0" +version = "3.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2c45cd61fefa9db6f254525d46e392b852e0e61d9a1fd36e5bd183450a556d5" +checksum = "c522100790450cf78eeac1507263d0a350d4d5b30df0c8e1fe051a10c22b376e" dependencies = [ "base64 0.22.1", "chrono", @@ -6636,11 +11503,11 @@ dependencies = [ [[package]] name = "serde_with_macros" -version = "3.14.0" +version = "3.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de90945e6565ce0d9a25098082ed4ee4002e047cb59892c318d66821e14bb30f" +checksum = "327ada00f7d64abaac1e55a6911e90cf665aa051b9a561c7006c157f4633135e" dependencies = [ - "darling 0.20.11", + "darling 0.21.3", "proc-macro2", "quote", "syn 2.0.106", @@ -6720,12 +11587,42 @@ dependencies = [ "lazy_static", ] +[[package]] +name = "shellexpand" +version = "3.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b1fdf65dd6331831494dd616b30351c38e96e45921a27745cf98490458b90bb" +dependencies = [ + "dirs", +] + [[package]] name = "shlex" version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" +[[package]] +name = "signal-hook" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d881a16cf4426aa584979d30bd82cb33429027e42122b169753d6ef1085ed6e2" +dependencies = [ + "libc", + "signal-hook-registry", +] + +[[package]] +name = "signal-hook-mio" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34db1a06d485c9142248b7a054f034b349b212551f3dfd19c94d45a754a217cd" +dependencies = [ + "libc", + "mio", + "signal-hook", +] + [[package]] name = "signal-hook-registry" version = "1.4.6" @@ -6755,12 +11652,45 @@ dependencies = [ "rand_core 0.6.4", ] +[[package]] +name = "simple_asn1" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "297f631f50729c8c99b84667867963997ec0b50f32b2a7dbcab828ef0541e8bb" +dependencies = [ + "num-bigint", + "num-traits", + "thiserror 2.0.17", + "time", +] + [[package]] name = "siphasher" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" +[[package]] +name = "skeptic" +version = "0.13.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16d23b015676c90a0f01c197bfdc786c20342c73a0afdda9025adb0bc42940a8" +dependencies = [ + "bytecount", + "cargo_metadata 0.14.2", + "error-chain", + "glob", + "pulldown-cmark", + "tempfile", + "walkdir", +] + +[[package]] +name = "sketches-ddsketch" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1e9a774a6c28142ac54bb25d25562e6bcf957493a184f15ad4eebccb23e410a" + [[package]] name = "slab" version = "0.4.11" @@ -6847,6 +11777,12 @@ dependencies = [ "der 0.7.10", ] +[[package]] +name = "sptr" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b9b39299b249ad65f3b7e96443bad61c02ca5cd3589f46cb6d610a0fd6c0d6a" + [[package]] name = "sqlx" version = "0.8.6" @@ -6878,7 +11814,7 @@ dependencies = [ "futures-io", "futures-util", "hashbrown 0.15.5", - "hashlink", + "hashlink 0.10.0", "indexmap 2.11.4", "log", "memchr", @@ -6889,7 +11825,7 @@ dependencies = [ "serde_json", "sha2 0.10.9", "smallvec", - "thiserror", + "thiserror 2.0.17", "tokio", "tokio-stream", "tracing", @@ -6973,7 +11909,7 @@ dependencies = [ "smallvec", "sqlx-core", "stringprep", - "thiserror", + "thiserror 2.0.17", "tracing", "uuid", "whoami", @@ -7012,7 +11948,7 @@ dependencies = [ "smallvec", "sqlx-core", "stringprep", - "thiserror", + "thiserror 2.0.17", "tracing", "uuid", "whoami", @@ -7038,7 +11974,7 @@ dependencies = [ "serde", "serde_urlencoded", "sqlx-core", - "thiserror", + "thiserror 2.0.17", "tracing", "url", "uuid", @@ -7096,13 +12032,35 @@ dependencies = [ "syn 2.0.106", ] +[[package]] +name = "strum" +version = "0.26.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" +dependencies = [ + "strum_macros 0.26.4", +] + [[package]] name = "strum" version = "0.27.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "af23d6f6c1a224baef9d3f61e287d2761385a5b88fdab4eb4c6f11aeb54c4bcf" dependencies = [ - "strum_macros", + "strum_macros 0.27.2", +] + +[[package]] +name = "strum_macros" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "rustversion", + "syn 2.0.106", ] [[package]] @@ -7147,9 +12105,9 @@ dependencies = [ [[package]] name = "syn-solidity" -version = "1.3.1" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0b198d366dbec045acfcd97295eb653a7a2b40e4dc764ef1e79aafcad439d3c" +checksum = "2375c17f6067adc651d8c2c51658019cef32edfff4a982adaf1d7fd1c039f08b" dependencies = [ "paste", "proc-macro2", @@ -7177,23 +12135,85 @@ dependencies = [ "syn 2.0.106", ] +[[package]] +name = "sysinfo" +version = "0.33.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fc858248ea01b66f19d8e8a6d55f41deaf91e9d495246fd01368d99935c6c01" +dependencies = [ + "core-foundation-sys", + "libc", + "memchr", + "ntapi", + "windows 0.57.0", +] + +[[package]] +name = "system-configuration" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" +dependencies = [ + "bitflags 2.9.4", + "core-foundation 0.9.4", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "tagptr" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b2093cf4c8eb1e67749a6762251bc9cd836b6fc171623bd0a9d324d37af2417" + [[package]] name = "tap" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" +[[package]] +name = "tar" +version = "0.4.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d863878d212c87a19c1a610eb53bb01fe12951c0501cf5a0d65f724914a667a" +dependencies = [ + "filetime", + "libc", + "xattr", +] + +[[package]] +name = "tar-no-std" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac9ee8b664c9f1740cd813fea422116f8ba29997bb7c878d1940424889802897" +dependencies = [ + "bitflags 2.9.4", + "log", + "num-traits", +] + [[package]] name = "tempfile" -version = "3.22.0" +version = "3.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84fa4d11fadde498443cca10fd3ac23c951f0dc59e080e9f4b93d4df4e4eea53" +checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16" dependencies = [ "fastrand", "getrandom 0.3.3", "once_cell", "rustix 1.1.2", - "windows-sys 0.61.0", + "windows-sys 0.61.1", ] [[package]] @@ -7217,7 +12237,7 @@ dependencies = [ "serde", "serde_json", "serde_with", - "thiserror", + "thiserror 2.0.17", "tokio", "tokio-stream", "tokio-tar", @@ -7234,20 +12254,46 @@ dependencies = [ "testcontainers", ] +[[package]] +name = "thin-vec" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "144f754d318415ac792f9d69fc87abbbfc043ce2ef041c60f16ad828f638717d" + +[[package]] +name = "thiserror" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl 1.0.69", +] + [[package]] name = "thiserror" -version = "2.0.16" +version = "2.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8" +dependencies = [ + "thiserror-impl 2.0.17", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3467d614147380f2e4e374161426ff399c91084acd2363eaf549172b3d5e60c0" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ - "thiserror-impl", + "proc-macro2", + "quote", + "syn 2.0.106", ] [[package]] name = "thiserror-impl" -version = "2.0.16" +version = "2.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c5e1be1c48b9172ee610da68fd9cd2770e7a4056cb3fc98710ee6906f0c7960" +checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" dependencies = [ "proc-macro2", "quote", @@ -7272,6 +12318,37 @@ dependencies = [ "num_cpus", ] +[[package]] +name = "tikv-jemalloc-ctl" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f21f216790c8df74ce3ab25b534e0718da5a1916719771d3fec23315c99e468b" +dependencies = [ + "libc", + "paste", + "tikv-jemalloc-sys", +] + +[[package]] +name = "tikv-jemalloc-sys" +version = "0.6.0+5.3.0-1-ge13ca993e8ccb9ba9847cc330696e02839f328f7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd3c60906412afa9c2b5b5a48ca6a5abe5736aec9eb48ad05037a677e52e4e2d" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "tikv-jemallocator" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cec5ff18518d81584f477e9bfdf957f5bb0979b0bac3af4ca30b5b3ae2d2865" +dependencies = [ + "libc", + "tikv-jemalloc-sys", +] + [[package]] name = "time" version = "0.3.44" @@ -7280,7 +12357,10 @@ checksum = "91e7d9e3bb61134e77bde20dd4825b97c010155709965fedf0f49bb138e52a9d" dependencies = [ "deranged", "itoa", + "js-sys", + "libc", "num-conv", + "num_threads", "powerfmt", "serde", "time-core", @@ -7312,6 +12392,16 @@ dependencies = [ "crunchy", ] +[[package]] +name = "tinystr" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" +dependencies = [ + "displaydoc", + "zerovec 0.10.4", +] + [[package]] name = "tinystr" version = "0.8.1" @@ -7319,7 +12409,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" dependencies = [ "displaydoc", - "zerovec", + "zerovec 0.11.4", ] [[package]] @@ -7353,7 +12443,7 @@ dependencies = [ "bytes", "clap", "dotenvy", - "op-alloy-consensus 0.20.0", + "op-alloy-consensus", "rdkafka", "serde", "serde_json", @@ -7371,11 +12461,12 @@ version = "0.1.0" dependencies = [ "alloy-consensus", "alloy-primitives", + "alloy-provider", "alloy-rpc-types-mev", "anyhow", "async-trait", "eyre", - "op-alloy-consensus 0.20.0", + "op-alloy-consensus", "sqlx", "testcontainers", "testcontainers-modules", @@ -7398,20 +12489,15 @@ dependencies = [ "backon", "clap", "dotenvy", - "eyre", - "jsonrpsee", - "op-alloy-consensus 0.20.0", + "jsonrpsee 0.26.0", + "op-alloy-consensus", "op-alloy-network", "op-revm", "rdkafka", - "reth-errors", "reth-optimism-evm", "reth-rpc-eth-types", "revm-context-interface", - "serde", "serde_json", - "tips-audit", - "tips-datastore", "tokio", "tracing", "tracing-subscriber 0.3.20", @@ -7424,7 +12510,6 @@ version = "0.1.0" dependencies = [ "alloy-rpc-types-mev", "anyhow", - "async-trait", "backon", "clap", "dotenvy", @@ -7445,18 +12530,23 @@ dependencies = [ "alloy-primitives", "alloy-provider", "alloy-rpc-types", + "alloy-rpc-types-mev", "anyhow", + "base-reth-flashblocks-rpc", "clap", "dotenvy", + "op-alloy-consensus", "op-alloy-network", + "op-alloy-rpc-types", "rdkafka", - "serde_json", + "sqlx", "tips-audit", "tips-datastore", "tokio", "tracing", "tracing-subscriber 0.3.20", "url", + "uuid", ] [[package]] @@ -7512,9 +12602,9 @@ dependencies = [ [[package]] name = "tokio-rustls" -version = "0.26.3" +version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f63835928ca123f1bef57abbcd23bb2ba0ac9ae1235f1e65bda0d06e7786bd" +checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" dependencies = [ "rustls 0.23.31", "tokio", @@ -7548,17 +12638,58 @@ dependencies = [ ] [[package]] -name = "tokio-util" -version = "0.7.16" +name = "tokio-tungstenite" +version = "0.26.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a9daff607c6d2bf6c16fd681ccb7eecc83e4e2cdc1ca067ffaadfca5de7f084" +dependencies = [ + "futures-util", + "log", + "native-tls", + "rustls 0.23.31", + "rustls-native-certs 0.8.1", + "rustls-pki-types", + "tokio", + "tokio-native-tls", + "tokio-rustls 0.26.4", + "tungstenite", + "webpki-roots 0.26.11", +] + +[[package]] +name = "tokio-util" +version = "0.7.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14307c986784f72ef81c89db7d9e28d6ac26d16213b109ea501696195e6e3ce5" +dependencies = [ + "bytes", + "futures-core", + "futures-io", + "futures-sink", + "pin-project-lite", + "slab", + "tokio", +] + +[[package]] +name = "toml" +version = "0.8.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime 0.6.11", + "toml_edit 0.22.27", +] + +[[package]] +name = "toml_datetime" +version = "0.6.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14307c986784f72ef81c89db7d9e28d6ac26d16213b109ea501696195e6e3ce5" +checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c" dependencies = [ - "bytes", - "futures-core", - "futures-io", - "futures-sink", - "pin-project-lite", - "tokio", + "serde", ] [[package]] @@ -7570,6 +12701,20 @@ dependencies = [ "serde_core", ] +[[package]] +name = "toml_edit" +version = "0.22.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" +dependencies = [ + "indexmap 2.11.4", + "serde", + "serde_spanned", + "toml_datetime 0.6.11", + "toml_write", + "winnow", +] + [[package]] name = "toml_edit" version = "0.23.6" @@ -7577,7 +12722,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f3effe7c0e86fdff4f69cdd2ccc1b96f933e24811c5441d44904e8683e27184b" dependencies = [ "indexmap 2.11.4", - "toml_datetime", + "toml_datetime 0.7.2", "toml_parser", "winnow", ] @@ -7591,6 +12736,62 @@ dependencies = [ "winnow", ] +[[package]] +name = "toml_write" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" + +[[package]] +name = "tonic" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877c5b330756d856ffcc4553ab34a5684481ade925ecc54bcd1bf02b1d0d4d52" +dependencies = [ + "async-stream", + "async-trait", + "axum", + "base64 0.22.1", + "bytes", + "h2 0.4.12", + "http 1.3.1", + "http-body 1.0.1", + "http-body-util", + "hyper 1.7.0", + "hyper-timeout", + "hyper-util", + "percent-encoding", + "pin-project", + "prost", + "socket2 0.5.10", + "tokio", + "tokio-stream", + "tower 0.4.13", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" +dependencies = [ + "futures-core", + "futures-util", + "indexmap 1.9.3", + "pin-project", + "pin-project-lite", + "rand 0.8.5", + "slab", + "tokio", + "tokio-util", + "tower-layer", + "tower-service", + "tracing", +] + [[package]] name = "tower" version = "0.5.2" @@ -7599,11 +12800,16 @@ checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" dependencies = [ "futures-core", "futures-util", + "hdrhistogram", + "indexmap 2.11.4", "pin-project-lite", + "slab", "sync_wrapper", "tokio", + "tokio-util", "tower-layer", "tower-service", + "tracing", ] [[package]] @@ -7612,16 +12818,29 @@ version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2" dependencies = [ + "async-compression", + "base64 0.22.1", "bitflags 2.9.4", "bytes", + "futures-core", "futures-util", "http 1.3.1", "http-body 1.0.1", + "http-body-util", + "http-range-header", + "httpdate", "iri-string", + "mime", + "mime_guess", + "percent-encoding", "pin-project-lite", - "tower", + "tokio", + "tokio-util", + "tower 0.5.2", "tower-layer", "tower-service", + "tracing", + "uuid", ] [[package]] @@ -7648,6 +12867,18 @@ dependencies = [ "tracing-core", ] +[[package]] +name = "tracing-appender" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3566e8ce28cc0a3fe42519fc80e6b4c943cc4c8cef275620eb8dac2d3d4e06cf" +dependencies = [ + "crossbeam-channel", + "thiserror 1.0.69", + "time", + "tracing-subscriber 0.3.20", +] + [[package]] name = "tracing-attributes" version = "0.1.30" @@ -7679,6 +12910,17 @@ dependencies = [ "tracing", ] +[[package]] +name = "tracing-journald" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc0b4143302cf1022dac868d521e36e8b27691f72c84b3311750d5188ebba657" +dependencies = [ + "libc", + "tracing-core", + "tracing-subscriber 0.3.20", +] + [[package]] name = "tracing-log" version = "0.2.0" @@ -7690,6 +12932,46 @@ dependencies = [ "tracing-core", ] +[[package]] +name = "tracing-logfmt" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b1f47d22deb79c3f59fcf2a1f00f60cbdc05462bf17d1cd356c1fefa3f444bd" +dependencies = [ + "time", + "tracing", + "tracing-core", + "tracing-subscriber 0.3.20", +] + +[[package]] +name = "tracing-opentelemetry" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "721f2d2569dce9f3dfbbddee5906941e953bfcdf736a62da3377f5751650cc36" +dependencies = [ + "js-sys", + "once_cell", + "opentelemetry", + "opentelemetry_sdk", + "smallvec", + "tracing", + "tracing-core", + "tracing-log", + "tracing-subscriber 0.3.20", + "web-time", +] + +[[package]] +name = "tracing-serde" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "704b1aeb7be0d0a84fc9828cae51dab5970fee5088f83d1dd7ee6f6246fc6ff1" +dependencies = [ + "serde", + "tracing-core", +] + [[package]] name = "tracing-subscriber" version = "0.2.25" @@ -7709,25 +12991,79 @@ dependencies = [ "nu-ansi-term", "once_cell", "regex-automata", + "serde", + "serde_json", "sharded-slab", "smallvec", "thread_local", "tracing", "tracing-core", "tracing-log", + "tracing-serde", +] + +[[package]] +name = "tree_hash" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee44f4cef85f88b4dea21c0b1f58320bdf35715cf56d840969487cff00613321" +dependencies = [ + "alloy-primitives", + "ethereum_hashing", + "ethereum_ssz", + "smallvec", + "typenum", +] + +[[package]] +name = "tree_hash_derive" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bee2ea1551f90040ab0e34b6fb7f2fa3bad8acc925837ac654f2c78a13e3089" +dependencies = [ + "darling 0.20.11", + "proc-macro2", + "quote", + "syn 2.0.106", ] +[[package]] +name = "triomphe" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef8f7726da4807b58ea5c96fdc122f80702030edc33b35aff9190a51148ccc85" + [[package]] name = "try-lock" version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" +[[package]] +name = "tungstenite" +version = "0.26.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4793cb5e56680ecbb1d843515b23b6de9a75eb04b66643e256a396d43be33c13" +dependencies = [ + "bytes", + "data-encoding", + "http 1.3.1", + "httparse", + "log", + "native-tls", + "rand 0.9.2", + "rustls 0.23.31", + "rustls-pki-types", + "sha1", + "thiserror 2.0.17", + "utf-8", +] + [[package]] name = "typenum" -version = "1.18.0" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" +checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" [[package]] name = "ucd-trie" @@ -7747,12 +13083,30 @@ dependencies = [ "static_assertions", ] +[[package]] +name = "uint" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "909988d098b2f738727b161a106cfc7cab00c539c2687a8836f8e565976fb53e" +dependencies = [ + "byteorder", + "crunchy", + "hex", + "static_assertions", +] + [[package]] name = "unarray" version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94" +[[package]] +name = "unicase" +version = "2.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539" + [[package]] name = "unicode-bidi" version = "0.3.18" @@ -7786,12 +13140,51 @@ version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" +[[package]] +name = "unicode-truncate" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3644627a5af5fa321c95b9b235a72fd24cd29c648c2c379431e6628655627bf" +dependencies = [ + "itertools 0.13.0", + "unicode-segmentation", + "unicode-width 0.1.14", +] + +[[package]] +name = "unicode-width" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" + +[[package]] +name = "unicode-width" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fc81956842c57dac11422a97c3b8195a1ff727f06e85c84ed2e8aa277c9a0fd" + [[package]] name = "unicode-xid" version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" +[[package]] +name = "universal-hash" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea" +dependencies = [ + "crypto-common", + "subtle", +] + +[[package]] +name = "unsigned-varint" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb066959b24b5196ae73cb057f45598450d2c5f71460e98c49b738086eff9c06" + [[package]] name = "untrusted" version = "0.9.0" @@ -7816,6 +13209,18 @@ version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" +[[package]] +name = "utf-8" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" + +[[package]] +name = "utf16_iter" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" + [[package]] name = "utf8_iter" version = "1.0.4" @@ -7852,6 +13257,47 @@ version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" +[[package]] +name = "vergen" +version = "9.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b2bf58be11fc9414104c6d3a2e464163db5ef74b12296bda593cac37b6e4777" +dependencies = [ + "anyhow", + "cargo_metadata 0.19.2", + "derive_builder", + "regex", + "rustversion", + "time", + "vergen-lib", +] + +[[package]] +name = "vergen-git2" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f6ee511ec45098eabade8a0750e76eec671e7fb2d9360c563911336bea9cac1" +dependencies = [ + "anyhow", + "derive_builder", + "git2", + "rustversion", + "time", + "vergen", + "vergen-lib", +] + +[[package]] +name = "vergen-lib" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b07e6010c0f3e59fcb164e0163834597da68d1f864e2b8ca49f74de01e9c166" +dependencies = [ + "anyhow", + "derive_builder", + "rustversion", +] + [[package]] name = "version_check" version = "0.9.5" @@ -7873,6 +13319,16 @@ dependencies = [ "libc", ] +[[package]] +name = "walkdir" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" +dependencies = [ + "same-file", + "winapi-util", +] + [[package]] name = "want" version = "0.3.1" @@ -7914,9 +13370,9 @@ checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" [[package]] name = "wasm-bindgen" -version = "0.2.103" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab10a69fbd0a177f5f649ad4d8d3305499c42bab9aef2f7ff592d0ec8f833819" +checksum = "c1da10c01ae9f1ae40cbfac0bac3b1e724b320abfcf52229f80b547c0d250e2d" dependencies = [ "cfg-if", "once_cell", @@ -7927,9 +13383,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.103" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bb702423545a6007bbc368fde243ba47ca275e549c8a28617f56f6ba53b1d1c" +checksum = "671c9a5a66f49d8a47345ab942e2cb93c7d1d0339065d4f8139c486121b43b19" dependencies = [ "bumpalo", "log", @@ -7941,9 +13397,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.53" +version = "0.4.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0b221ff421256839509adbb55998214a70d829d3a28c69b4a6672e9d2a42f67" +checksum = "7e038d41e478cc73bae0ff9b36c60cff1c98b8f38f8d7e8061e79ee63608ac5c" dependencies = [ "cfg-if", "js-sys", @@ -7954,9 +13410,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.103" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc65f4f411d91494355917b605e1480033152658d71f722a90647f56a70c88a0" +checksum = "7ca60477e4c59f5f2986c50191cd972e3a50d8a95603bc9434501cf156a9a119" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -7964,9 +13420,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.103" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffc003a991398a8ee604a401e194b6b3a39677b3173d6e74495eb51b82e99a32" +checksum = "9f07d2f20d4da7b26400c9f4a0511e6e0345b040694e8a75bd41d578fa4421d7" dependencies = [ "proc-macro2", "quote", @@ -7977,13 +13433,26 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.103" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "293c37f4efa430ca14db3721dfbe48d8c33308096bd44d80ebaa775ab71ba1cf" +checksum = "bad67dc8b2a1a6e5448428adec4c3e84c43e561d8c9ee8a9e5aabeb193ec41d1" dependencies = [ "unicode-ident", ] +[[package]] +name = "wasm-streams" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15053d8d85c7eccdbefef60f06769760a563c7f0a9d6902a13d35c7800b0ad65" +dependencies = [ + "futures-util", + "js-sys", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + [[package]] name = "wasmtimer" version = "0.4.3" @@ -8000,9 +13469,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.80" +version = "0.3.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbe734895e869dc429d78c4b433f8d17d95f8d05317440b4fad5ab2d33e596dc" +checksum = "9367c417a924a74cae129e6a2ae3b47fabb1f8995595ab474029da749a8be120" dependencies = [ "js-sys", "wasm-bindgen", @@ -8018,6 +13487,42 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "webpki-root-certs" +version = "0.26.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75c7f0ef91146ebfb530314f5f1d24528d7f0767efbfd31dce919275413e393e" +dependencies = [ + "webpki-root-certs 1.0.2", +] + +[[package]] +name = "webpki-root-certs" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e4ffd8df1c57e87c325000a3d6ef93db75279dc3a231125aac571650f22b12a" +dependencies = [ + "rustls-pki-types", +] + +[[package]] +name = "webpki-roots" +version = "0.26.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "521bc38abb08001b01866da9f51eb7c5d647a19260e00054a8c7fd5f9e57f7a9" +dependencies = [ + "webpki-roots 1.0.2", +] + +[[package]] +name = "webpki-roots" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e8983c3ab33d6fb807cfcdad2491c4ea8cbc8ed839181c7dfd9c67c83e261b2" +dependencies = [ + "rustls-pki-types", +] + [[package]] name = "which" version = "4.4.2" @@ -8040,6 +13545,12 @@ dependencies = [ "wasite", ] +[[package]] +name = "widestring" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd7cf3379ca1aac9eea11fba24fd7e315d621f8dfe35c8d7d2be8b793726e07d" + [[package]] name = "winapi" version = "0.3.9" @@ -8056,30 +13567,129 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" +[[package]] +name = "winapi-util" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" +dependencies = [ + "windows-sys 0.61.1", +] + [[package]] name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "windows" +version = "0.57.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12342cb4d8e3b046f3d80effd474a7a02447231330ef77d71daa6fbc40681143" +dependencies = [ + "windows-core 0.57.0", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows" +version = "0.61.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893" +dependencies = [ + "windows-collections", + "windows-core 0.61.2", + "windows-future", + "windows-link 0.1.3", + "windows-numerics", +] + +[[package]] +name = "windows-collections" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8" +dependencies = [ + "windows-core 0.61.2", +] + +[[package]] +name = "windows-core" +version = "0.57.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2ed2439a290666cd67ecce2b0ffaad89c2a56b976b736e6ece670297897832d" +dependencies = [ + "windows-implement 0.57.0", + "windows-interface 0.57.0", + "windows-result 0.1.2", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-core" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" +dependencies = [ + "windows-implement 0.60.1", + "windows-interface 0.59.2", + "windows-link 0.1.3", + "windows-result 0.3.4", + "windows-strings 0.4.2", +] + [[package]] name = "windows-core" -version = "0.62.0" +version = "0.62.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57fe7168f7de578d2d8a05b07fd61870d2e73b4020e9f49aa00da8471723497c" +checksum = "6844ee5416b285084d3d3fffd743b925a6c9385455f64f6d4fa3031c4c2749a9" dependencies = [ - "windows-implement", - "windows-interface", + "windows-implement 0.60.1", + "windows-interface 0.59.2", "windows-link 0.2.0", - "windows-result", - "windows-strings", + "windows-result 0.4.0", + "windows-strings 0.5.0", +] + +[[package]] +name = "windows-future" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e" +dependencies = [ + "windows-core 0.61.2", + "windows-link 0.1.3", + "windows-threading", +] + +[[package]] +name = "windows-implement" +version = "0.57.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9107ddc059d5b6fbfbffdfa7a7fe3e22a226def0b2608f72e9d552763d3e1ad7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", ] [[package]] name = "windows-implement" -version = "0.60.0" +version = "0.60.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edb307e42a74fb6de9bf3a02d9712678b22399c87e6fa869d6dfcd8c1b7754e0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "windows-interface" +version = "0.57.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" +checksum = "29bee4b38ea3cde66011baa44dba677c432a78593e202392d1e9070cf2a7fca7" dependencies = [ "proc-macro2", "quote", @@ -8088,9 +13698,9 @@ dependencies = [ [[package]] name = "windows-interface" -version = "0.59.1" +version = "0.59.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" +checksum = "c0abd1ddbc6964ac14db11c7213d6532ef34bd9aa042c2e5935f59d7908b46a5" dependencies = [ "proc-macro2", "quote", @@ -8109,6 +13719,45 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "45e46c0661abb7180e7b9c281db115305d49ca1709ab8242adf09666d2173c65" +[[package]] +name = "windows-numerics" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1" +dependencies = [ + "windows-core 0.61.2", + "windows-link 0.1.3", +] + +[[package]] +name = "windows-registry" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b8a9ed28765efc97bbc954883f4e6796c33a06546ebafacbabee9696967499e" +dependencies = [ + "windows-link 0.1.3", + "windows-result 0.3.4", + "windows-strings 0.4.2", +] + +[[package]] +name = "windows-result" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e383302e8ec8515204254685643de10811af0ed97ea37210dc26fb0032647f8" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-result" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" +dependencies = [ + "windows-link 0.1.3", +] + [[package]] name = "windows-result" version = "0.4.0" @@ -8118,6 +13767,15 @@ dependencies = [ "windows-link 0.2.0", ] +[[package]] +name = "windows-strings" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" +dependencies = [ + "windows-link 0.1.3", +] + [[package]] name = "windows-strings" version = "0.5.0" @@ -8127,6 +13785,15 @@ dependencies = [ "windows-link 0.2.0", ] +[[package]] +name = "windows-sys" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +dependencies = [ + "windows-targets 0.42.2", +] + [[package]] name = "windows-sys" version = "0.48.0" @@ -8160,18 +13827,33 @@ version = "0.60.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" dependencies = [ - "windows-targets 0.53.3", + "windows-targets 0.53.4", ] [[package]] name = "windows-sys" -version = "0.61.0" +version = "0.61.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e201184e40b2ede64bc2ea34968b28e33622acdbbf37104f0e4a33f7abe657aa" +checksum = "6f109e41dd4a3c848907eb83d5a42ea98b3769495597450cf6d153507b166f0f" dependencies = [ "windows-link 0.2.0", ] +[[package]] +name = "windows-targets" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +dependencies = [ + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + [[package]] name = "windows-targets" version = "0.48.5" @@ -8205,11 +13887,11 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.53.3" +version = "0.53.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5fe6031c4041849d7c496a8ded650796e7b6ecc19df1a431c1a363342e5dc91" +checksum = "2d42b7b7f66d2a06854650af09cfdf8713e427a439c97ad65a6375318033ac4b" dependencies = [ - "windows-link 0.1.3", + "windows-link 0.2.0", "windows_aarch64_gnullvm 0.53.0", "windows_aarch64_msvc 0.53.0", "windows_i686_gnu 0.53.0", @@ -8220,6 +13902,21 @@ dependencies = [ "windows_x86_64_msvc 0.53.0", ] +[[package]] +name = "windows-threading" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6" +dependencies = [ + "windows-link 0.1.3", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + [[package]] name = "windows_aarch64_gnullvm" version = "0.48.5" @@ -8238,6 +13935,12 @@ version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" + [[package]] name = "windows_aarch64_msvc" version = "0.48.5" @@ -8256,6 +13959,12 @@ version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" +[[package]] +name = "windows_i686_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" + [[package]] name = "windows_i686_gnu" version = "0.48.5" @@ -8286,6 +13995,12 @@ version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" +[[package]] +name = "windows_i686_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" + [[package]] name = "windows_i686_msvc" version = "0.48.5" @@ -8304,6 +14019,12 @@ version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" +[[package]] +name = "windows_x86_64_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" + [[package]] name = "windows_x86_64_gnu" version = "0.48.5" @@ -8322,6 +14043,12 @@ version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" + [[package]] name = "windows_x86_64_gnullvm" version = "0.48.5" @@ -8340,6 +14067,12 @@ version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" + [[package]] name = "windows_x86_64_msvc" version = "0.48.5" @@ -8367,18 +14100,59 @@ dependencies = [ "memchr", ] +[[package]] +name = "winreg" +version = "0.50.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" +dependencies = [ + "cfg-if", + "windows-sys 0.48.0", +] + [[package]] name = "wit-bindgen" version = "0.46.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" +[[package]] +name = "write16" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" + +[[package]] +name = "writeable" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" + [[package]] name = "writeable" version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" +[[package]] +name = "ws_stream_wasm" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c173014acad22e83f16403ee360115b38846fe754e735c5d9d3803fe70c6abc" +dependencies = [ + "async_io_stream", + "futures", + "js-sys", + "log", + "pharos", + "rustc_version 0.4.1", + "send_wrapper 0.6.0", + "thiserror 2.0.17", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + [[package]] name = "wyz" version = "0.5.1" @@ -8390,9 +14164,9 @@ dependencies = [ [[package]] name = "xattr" -version = "1.5.1" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af3a19837351dc82ba89f8a125e22a3c475f05aba604acc023d62b2739ae2909" +checksum = "32e45ad4206f6d2479085147f02bc2ef834ac85886624a23575ae137c8aa8156" dependencies = [ "libc", "rustix 1.1.2", @@ -8404,6 +14178,24 @@ version = "0.13.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "66fee0b777b0f5ac1c69bb06d361268faafa61cd4682ae064a171c16c433e9e4" +[[package]] +name = "yansi" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" + +[[package]] +name = "yoke" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" +dependencies = [ + "serde", + "stable_deref_trait", + "yoke-derive 0.7.5", + "zerofrom", +] + [[package]] name = "yoke" version = "0.8.0" @@ -8412,10 +14204,22 @@ checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc" dependencies = [ "serde", "stable_deref_trait", - "yoke-derive", + "yoke-derive 0.8.0", "zerofrom", ] +[[package]] +name = "yoke-derive" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", + "synstructure", +] + [[package]] name = "yoke-derive" version = "0.8.0" @@ -8471,9 +14275,9 @@ dependencies = [ [[package]] name = "zeroize" -version = "1.8.1" +version = "1.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" +checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" dependencies = [ "zeroize_derive", ] @@ -8496,8 +14300,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595" dependencies = [ "displaydoc", - "yoke", + "yoke 0.8.0", + "zerofrom", +] + +[[package]] +name = "zerovec" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" +dependencies = [ + "yoke 0.7.5", "zerofrom", + "zerovec-derive 0.10.3", ] [[package]] @@ -8506,9 +14321,20 @@ version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e7aa2bd55086f1ab526693ecbe444205da57e25f4489879da80635a46d90e73b" dependencies = [ - "yoke", + "yoke 0.8.0", "zerofrom", - "zerovec-derive", + "zerovec-derive 0.11.1", +] + +[[package]] +name = "zerovec-derive" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index aff7e5c2..b9bd004a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,3 +1,11 @@ +[workspace.package] +version = "0.1.0" +edition = "2024" +rust-version = "1.88" +license = "MIT" +homepage = "https://github.com/base/tips" +repository = "https://github.com/base/tips" + [workspace] members = ["crates/datastore", "crates/audit", "crates/ingress-rpc", "crates/maintenance", "crates/ingress-writer"] resolver = "2" @@ -8,29 +16,26 @@ tips-audit = { path = "crates/audit" } tips-maintenance = { path = "crates/maintenance" } tips-ingress-writer = { path = "crates/ingress-writer" } - # Reth -reth = { git = "https://github.com/paradigmxyz/reth", tag = "v1.7.0" } -reth-rpc-eth-types = { git = "https://github.com/paradigmxyz/reth", tag = "v1.7.0" } -reth-optimism-evm = { git = "https://github.com/paradigmxyz/reth", tag = "v1.7.0" } -reth-errors = { git = "https://github.com/paradigmxyz/reth", tag = "v1.7.0" } +reth = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.1" } +reth-rpc-eth-types = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.1" } +reth-optimism-evm = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.1" } +base-reth-flashblocks-rpc = { git = "https://github.com/base/node-reth", rev = "a1ae148a36354c88b356f80281fef12dad9f7737" } # alloy alloy-primitives = { version = "1.3.1", default-features = false, features = [ "map-foldhash", "serde", ] } -alloy-rpc-types = { version = "1.0.30", default-features = false } -alloy-consensus = { version = "1.0.30" } -alloy-provider = { version = "1.0.30" } -alloy-rpc-client = { version = "1.0.30" } -alloy-rpc-types-mev = "1.0.30" -alloy-transport-http = "1.0.30" -alloy-rlp = "0.3.12" +alloy-rpc-types = { version = "1.0.35", default-features = false } +alloy-consensus = { version = "1.0.35" } +alloy-provider = { version = "1.0.35" } +alloy-rpc-types-mev = "1.0.35" # op-alloy +op-alloy-rpc-types = { version = "0.20.0", default-features = false } +op-alloy-network = { version = "0.20.0", default-features = false } op-alloy-consensus = { version = "0.20.0", features = ["k256"] } -op-alloy-network = {version = "0.20.0"} tokio = { version = "1.47.1", features = ["full"] } tracing = "0.1.41" diff --git a/crates/audit/Cargo.toml b/crates/audit/Cargo.toml index 18aad387..0fb2ee49 100644 --- a/crates/audit/Cargo.toml +++ b/crates/audit/Cargo.toml @@ -1,7 +1,11 @@ [package] name = "tips-audit" -version = "0.1.0" -edition = "2021" +version.workspace = true +rust-version.workspace = true +license.workspace = true +homepage.workspace = true +repository.workspace = true +edition.workspace = true [[bin]] name = "tips-audit" diff --git a/crates/audit/Dockerfile b/crates/audit/Dockerfile index b09a0fd7..1a1a817b 100644 --- a/crates/audit/Dockerfile +++ b/crates/audit/Dockerfile @@ -1,5 +1,7 @@ FROM rust:1-bookworm AS base +RUN apt-get update && apt-get -y upgrade && apt-get install -y libclang-dev pkg-config + RUN cargo install cargo-chef --locked WORKDIR /app diff --git a/crates/audit/src/archiver.rs b/crates/audit/src/archiver.rs index 7bbb4ecb..652dd78b 100644 --- a/crates/audit/src/archiver.rs +++ b/crates/audit/src/archiver.rs @@ -1,5 +1,5 @@ -use crate::reader::MempoolEventReader; -use crate::storage::MempoolEventWriter; +use crate::reader::EventReader; +use crate::storage::EventWriter; use anyhow::Result; use std::time::Duration; use tokio::time::sleep; @@ -7,8 +7,8 @@ use tracing::{error, info}; pub struct KafkaMempoolArchiver where - R: MempoolEventReader, - W: MempoolEventWriter, + R: EventReader, + W: EventWriter, { reader: R, writer: W, @@ -16,15 +16,15 @@ where impl KafkaMempoolArchiver where - R: MempoolEventReader, - W: MempoolEventWriter, + R: EventReader, + W: EventWriter, { pub fn new(reader: R, writer: W) -> Self { Self { reader, writer } } pub async fn run(&mut self) -> Result<()> { - info!("Starting Kafka mempool archiver"); + info!("Starting Kafka bundle archiver"); loop { match self.reader.read_event().await { diff --git a/crates/audit/src/bin/main.rs b/crates/audit/src/bin/main.rs index b6a0b21c..ed06f718 100644 --- a/crates/audit/src/bin/main.rs +++ b/crates/audit/src/bin/main.rs @@ -1,11 +1,11 @@ use anyhow::Result; use aws_config::{BehaviorVersion, Region}; use aws_credential_types::Credentials; -use aws_sdk_s3::{config::Builder as S3ConfigBuilder, Client as S3Client}; +use aws_sdk_s3::{Client as S3Client, config::Builder as S3ConfigBuilder}; use clap::{Parser, ValueEnum}; use rdkafka::consumer::Consumer; use tips_audit::{ - create_kafka_consumer, KafkaMempoolArchiver, KafkaMempoolReader, S3MempoolEventReaderWriter, + KafkaMempoolArchiver, KafkaMempoolReader, S3EventReaderWriter, create_kafka_consumer, }; use tracing::{info, warn}; use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt}; @@ -94,7 +94,7 @@ async fn main() -> Result<()> { let s3_client = create_s3_client(&args).await?; let s3_bucket = args.s3_bucket.clone(); - let writer = S3MempoolEventReaderWriter::new(s3_client, s3_bucket); + let writer = S3EventReaderWriter::new(s3_client, s3_bucket); let mut archiver = KafkaMempoolArchiver::new(reader, writer); diff --git a/crates/audit/src/publisher.rs b/crates/audit/src/publisher.rs index 359666dc..48367e74 100644 --- a/crates/audit/src/publisher.rs +++ b/crates/audit/src/publisher.rs @@ -1,30 +1,31 @@ -use crate::types::MempoolEvent; +use crate::types::BundleEvent; use anyhow::Result; use async_trait::async_trait; use rdkafka::producer::{FutureProducer, FutureRecord}; use serde_json; use tracing::{debug, error}; -use uuid::Uuid; #[async_trait] -pub trait MempoolEventPublisher: Send + Sync { - async fn publish(&self, event: MempoolEvent) -> Result<()>; +pub trait BundleEventPublisher: Send + Sync { + async fn publish(&self, event: BundleEvent) -> Result<()>; + + async fn publish_all(&self, events: Vec) -> Result<()>; } #[derive(Clone)] -pub struct KafkaMempoolEventPublisher { +pub struct KafkaBundleEventPublisher { producer: FutureProducer, topic: String, } -impl KafkaMempoolEventPublisher { +impl KafkaBundleEventPublisher { pub fn new(producer: FutureProducer, topic: String) -> Self { Self { producer, topic } } - async fn send_event(&self, event: &MempoolEvent) -> Result<()> { + async fn send_event(&self, event: &BundleEvent) -> Result<()> { let bundle_id = event.bundle_id(); - let key = format!("{}-{}", bundle_id, Uuid::new_v4()); + let key = event.generate_event_key(); let payload = serde_json::to_vec(event)?; let record = FutureRecord::to(&self.topic).key(&key).payload(&payload); @@ -57,8 +58,15 @@ impl KafkaMempoolEventPublisher { } #[async_trait] -impl MempoolEventPublisher for KafkaMempoolEventPublisher { - async fn publish(&self, event: MempoolEvent) -> Result<()> { +impl BundleEventPublisher for KafkaBundleEventPublisher { + async fn publish(&self, event: BundleEvent) -> Result<()> { self.send_event(&event).await } + + async fn publish_all(&self, events: Vec) -> Result<()> { + for event in events { + self.send_event(&event).await?; + } + Ok(()) + } } diff --git a/crates/audit/src/reader.rs b/crates/audit/src/reader.rs index 52c9c451..14496389 100644 --- a/crates/audit/src/reader.rs +++ b/crates/audit/src/reader.rs @@ -1,11 +1,11 @@ -use crate::types::MempoolEvent; +use crate::types::BundleEvent; use anyhow::Result; use async_trait::async_trait; use rdkafka::{ + Timestamp, TopicPartitionList, config::ClientConfig, consumer::{Consumer, StreamConsumer}, message::Message, - Timestamp, TopicPartitionList, }; use std::time::{Duration, SystemTime, UNIX_EPOCH}; use tokio::time::sleep; @@ -35,12 +35,12 @@ pub fn assign_topic_partition(consumer: &StreamConsumer, topic: &str) -> Result< #[derive(Debug, Clone)] pub struct Event { pub key: String, - pub event: MempoolEvent, + pub event: BundleEvent, pub timestamp: i64, } #[async_trait] -pub trait MempoolEventReader { +pub trait EventReader { async fn read_event(&mut self) -> Result; async fn commit(&mut self) -> Result<()>; } @@ -65,7 +65,7 @@ impl KafkaMempoolReader { } #[async_trait] -impl MempoolEventReader for KafkaMempoolReader { +impl EventReader for KafkaMempoolReader { async fn read_event(&mut self) -> Result { match self.consumer.recv().await { Ok(message) => { @@ -83,7 +83,7 @@ impl MempoolEventReader for KafkaMempoolReader { .as_millis() as i64, }; - let event: MempoolEvent = serde_json::from_slice(payload)?; + let event: BundleEvent = serde_json::from_slice(payload)?; debug!( bundle_id = %event.bundle_id(), diff --git a/crates/audit/src/storage.rs b/crates/audit/src/storage.rs index c2ac569b..8cea6e0a 100644 --- a/crates/audit/src/storage.rs +++ b/crates/audit/src/storage.rs @@ -1,13 +1,13 @@ use crate::reader::Event; -use crate::types::{BundleId, DropReason, MempoolEvent, TransactionId}; +use crate::types::{BundleEvent, BundleId, DropReason, TransactionId}; use alloy_primitives::TxHash; use alloy_rpc_types_mev::EthSendBundle; use anyhow::Result; use async_trait::async_trait; +use aws_sdk_s3::Client as S3Client; use aws_sdk_s3::error::SdkError; use aws_sdk_s3::operation::get_object::GetObjectError; use aws_sdk_s3::primitives::ByteStream; -use aws_sdk_s3::Client as S3Client; use serde::{Deserialize, Serialize}; use std::fmt; use std::fmt::Debug; @@ -113,21 +113,21 @@ fn update_bundle_history_transform( } let history_event = match &event.event { - MempoolEvent::Created { bundle, .. } => BundleHistoryEvent::Created { + BundleEvent::Created { bundle, .. } => BundleHistoryEvent::Created { key: event.key.clone(), timestamp: event.timestamp, bundle: bundle.clone(), }, - MempoolEvent::Updated { bundle, .. } => BundleHistoryEvent::Updated { + BundleEvent::Updated { bundle, .. } => BundleHistoryEvent::Updated { key: event.key.clone(), timestamp: event.timestamp, bundle: bundle.clone(), }, - MempoolEvent::Cancelled { .. } => BundleHistoryEvent::Cancelled { + BundleEvent::Cancelled { .. } => BundleHistoryEvent::Cancelled { key: event.key.clone(), timestamp: event.timestamp, }, - MempoolEvent::BuilderIncluded { + BundleEvent::BuilderIncluded { builder, block_number, flashblock_index, @@ -139,7 +139,7 @@ fn update_bundle_history_transform( block_number: *block_number, flashblock_index: *flashblock_index, }, - MempoolEvent::FlashblockIncluded { + BundleEvent::FlashblockIncluded { block_number, flashblock_index, .. @@ -149,7 +149,7 @@ fn update_bundle_history_transform( block_number: *block_number, flashblock_index: *flashblock_index, }, - MempoolEvent::BlockIncluded { + BundleEvent::BlockIncluded { block_number, block_hash, .. @@ -159,7 +159,7 @@ fn update_bundle_history_transform( block_number: *block_number, block_hash: *block_hash, }, - MempoolEvent::Dropped { reason, .. } => BundleHistoryEvent::Dropped { + BundleEvent::Dropped { reason, .. } => BundleHistoryEvent::Dropped { key: event.key.clone(), timestamp: event.timestamp, reason: reason.clone(), @@ -193,12 +193,12 @@ fn update_transaction_metadata_transform( } #[async_trait] -pub trait MempoolEventWriter { +pub trait EventWriter { async fn archive_event(&self, event: Event) -> Result<()>; } #[async_trait] -pub trait MempoolEventS3Reader { +pub trait BundleEventS3Reader { async fn get_bundle_history(&self, bundle_id: BundleId) -> Result>; async fn get_transaction_metadata( &self, @@ -207,12 +207,12 @@ pub trait MempoolEventS3Reader { } #[derive(Clone)] -pub struct S3MempoolEventReaderWriter { +pub struct S3EventReaderWriter { s3_client: S3Client, bucket: String, } -impl S3MempoolEventReaderWriter { +impl S3EventReaderWriter { pub fn new(s3_client: S3Client, bucket: String) -> Self { Self { s3_client, bucket } } @@ -351,7 +351,7 @@ impl S3MempoolEventReaderWriter { } #[async_trait] -impl MempoolEventWriter for S3MempoolEventReaderWriter { +impl EventWriter for S3EventReaderWriter { async fn archive_event(&self, event: Event) -> Result<()> { let bundle_id = event.event.bundle_id(); let transaction_ids = event.event.transaction_ids(); @@ -368,7 +368,7 @@ impl MempoolEventWriter for S3MempoolEventReaderWriter { } #[async_trait] -impl MempoolEventS3Reader for S3MempoolEventReaderWriter { +impl BundleEventS3Reader for S3EventReaderWriter { async fn get_bundle_history(&self, bundle_id: BundleId) -> Result> { let s3_key = S3Key::Bundle(bundle_id).to_string(); let (bundle_history, _) = self.get_object_with_etag::(&s3_key).await?; @@ -391,7 +391,7 @@ impl MempoolEventS3Reader for S3MempoolEventReaderWriter { mod tests { use super::*; use crate::reader::Event; - use crate::types::{DropReason, MempoolEvent}; + use crate::types::{BundleEvent, DropReason}; use alloy_primitives::TxHash; use alloy_rpc_types_mev::EthSendBundle; use uuid::Uuid; @@ -400,11 +400,11 @@ mod tests { EthSendBundle::default() } - fn create_test_event(key: &str, timestamp: i64, mempool_event: MempoolEvent) -> Event { + fn create_test_event(key: &str, timestamp: i64, bundle_event: BundleEvent) -> Event { Event { key: key.to_string(), timestamp, - event: mempool_event, + event: bundle_event, } } @@ -413,11 +413,11 @@ mod tests { let bundle_history = BundleHistory { history: vec![] }; let bundle = create_test_bundle(); let bundle_id = Uuid::new_v4(); - let mempool_event = MempoolEvent::Created { + let bundle_event = BundleEvent::Created { bundle_id, bundle: bundle.clone(), }; - let event = create_test_event("test-key", 1234567890, mempool_event); + let event = create_test_event("test-key", 1234567890, bundle_event); let result = update_bundle_history_transform(bundle_history, &event); @@ -452,8 +452,8 @@ mod tests { let bundle = create_test_bundle(); let bundle_id = Uuid::new_v4(); - let mempool_event = MempoolEvent::Updated { bundle_id, bundle }; - let event = create_test_event("duplicate-key", 1234567890, mempool_event); + let bundle_event = BundleEvent::Updated { bundle_id, bundle }; + let event = create_test_event("duplicate-key", 1234567890, bundle_event); let result = update_bundle_history_transform(bundle_history, &event); @@ -467,66 +467,66 @@ mod tests { // Test Created let bundle = create_test_bundle(); - let mempool_event = MempoolEvent::Created { + let bundle_event = BundleEvent::Created { bundle_id, bundle: bundle.clone(), }; - let event = create_test_event("test-key", 1234567890, mempool_event); + let event = create_test_event("test-key", 1234567890, bundle_event); let result = update_bundle_history_transform(bundle_history.clone(), &event); assert!(result.is_some()); // Test Updated - let mempool_event = MempoolEvent::Updated { + let bundle_event = BundleEvent::Updated { bundle_id, bundle: bundle.clone(), }; - let event = create_test_event("test-key-2", 1234567890, mempool_event); + let event = create_test_event("test-key-2", 1234567890, bundle_event); let result = update_bundle_history_transform(bundle_history.clone(), &event); assert!(result.is_some()); // Test Cancelled - let mempool_event = MempoolEvent::Cancelled { bundle_id }; - let event = create_test_event("test-key-3", 1234567890, mempool_event); + let bundle_event = BundleEvent::Cancelled { bundle_id }; + let event = create_test_event("test-key-3", 1234567890, bundle_event); let result = update_bundle_history_transform(bundle_history.clone(), &event); assert!(result.is_some()); // Test BuilderIncluded - let mempool_event = MempoolEvent::BuilderIncluded { + let bundle_event = BundleEvent::BuilderIncluded { bundle_id, builder: "test-builder".to_string(), block_number: 12345, flashblock_index: 1, }; - let event = create_test_event("test-key-4", 1234567890, mempool_event); + let event = create_test_event("test-key-4", 1234567890, bundle_event); let result = update_bundle_history_transform(bundle_history.clone(), &event); assert!(result.is_some()); // Test FlashblockIncluded - let mempool_event = MempoolEvent::FlashblockIncluded { + let bundle_event = BundleEvent::FlashblockIncluded { bundle_id, block_number: 12345, flashblock_index: 1, }; - let event = create_test_event("test-key-5", 1234567890, mempool_event); + let event = create_test_event("test-key-5", 1234567890, bundle_event); let result = update_bundle_history_transform(bundle_history.clone(), &event); assert!(result.is_some()); // Test BlockIncluded - let mempool_event = MempoolEvent::BlockIncluded { + let bundle_event = BundleEvent::BlockIncluded { bundle_id, block_number: 12345, block_hash: TxHash::from([1u8; 32]), }; - let event = create_test_event("test-key-6", 1234567890, mempool_event); + let event = create_test_event("test-key-6", 1234567890, bundle_event); let result = update_bundle_history_transform(bundle_history.clone(), &event); assert!(result.is_some()); // Test Dropped - let mempool_event = MempoolEvent::Dropped { + let bundle_event = BundleEvent::Dropped { bundle_id, reason: DropReason::TimedOut, }; - let event = create_test_event("test-key-7", 1234567890, mempool_event); + let event = create_test_event("test-key-7", 1234567890, bundle_event); let result = update_bundle_history_transform(bundle_history, &event); assert!(result.is_some()); } diff --git a/crates/audit/src/types.rs b/crates/audit/src/types.rs index add8114f..fce2a2b7 100644 --- a/crates/audit/src/types.rs +++ b/crates/audit/src/types.rs @@ -36,7 +36,7 @@ pub struct Transaction { #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(tag = "event", content = "data")] -pub enum MempoolEvent { +pub enum BundleEvent { Created { bundle_id: BundleId, bundle: EthSendBundle, @@ -70,22 +70,22 @@ pub enum MempoolEvent { }, } -impl MempoolEvent { +impl BundleEvent { pub fn bundle_id(&self) -> BundleId { match self { - MempoolEvent::Created { bundle_id, .. } => *bundle_id, - MempoolEvent::Updated { bundle_id, .. } => *bundle_id, - MempoolEvent::Cancelled { bundle_id, .. } => *bundle_id, - MempoolEvent::BuilderIncluded { bundle_id, .. } => *bundle_id, - MempoolEvent::FlashblockIncluded { bundle_id, .. } => *bundle_id, - MempoolEvent::BlockIncluded { bundle_id, .. } => *bundle_id, - MempoolEvent::Dropped { bundle_id, .. } => *bundle_id, + BundleEvent::Created { bundle_id, .. } => *bundle_id, + BundleEvent::Updated { bundle_id, .. } => *bundle_id, + BundleEvent::Cancelled { bundle_id, .. } => *bundle_id, + BundleEvent::BuilderIncluded { bundle_id, .. } => *bundle_id, + BundleEvent::FlashblockIncluded { bundle_id, .. } => *bundle_id, + BundleEvent::BlockIncluded { bundle_id, .. } => *bundle_id, + BundleEvent::Dropped { bundle_id, .. } => *bundle_id, } } pub fn transaction_ids(&self) -> Vec { match self { - MempoolEvent::Created { bundle, .. } | MempoolEvent::Updated { bundle, .. } => { + BundleEvent::Created { bundle, .. } | BundleEvent::Updated { bundle, .. } => { bundle .txs .iter() @@ -106,11 +106,34 @@ impl MempoolEvent { }) .collect() } - MempoolEvent::Cancelled { .. } => vec![], - MempoolEvent::BuilderIncluded { .. } => vec![], - MempoolEvent::FlashblockIncluded { .. } => vec![], - MempoolEvent::BlockIncluded { .. } => vec![], - MempoolEvent::Dropped { .. } => vec![], + BundleEvent::Cancelled { .. } => vec![], + BundleEvent::BuilderIncluded { .. } => vec![], + BundleEvent::FlashblockIncluded { .. } => vec![], + BundleEvent::BlockIncluded { .. } => vec![], + BundleEvent::Dropped { .. } => vec![], + } + } + + pub fn generate_event_key(&self) -> String { + match self { + BundleEvent::BlockIncluded { + bundle_id, + block_hash, + .. + } => { + format!("{}-{}", bundle_id, block_hash) + } + BundleEvent::FlashblockIncluded { + bundle_id, + block_number, + flashblock_index, + .. + } => { + format!("{}-{}-{}", bundle_id, block_number, flashblock_index) + } + _ => { + format!("{}-{}", self.bundle_id(), Uuid::new_v4()) + } } } } diff --git a/crates/audit/tests/common/mod.rs b/crates/audit/tests/common/mod.rs index 634f78a4..4c5a67ac 100644 --- a/crates/audit/tests/common/mod.rs +++ b/crates/audit/tests/common/mod.rs @@ -1,5 +1,5 @@ use rdkafka::producer::FutureProducer; -use rdkafka::{consumer::StreamConsumer, ClientConfig}; +use rdkafka::{ClientConfig, consumer::StreamConsumer}; use testcontainers::runners::AsyncRunner; use testcontainers_modules::{kafka, kafka::Kafka, minio::MinIO}; use uuid::Uuid; diff --git a/crates/audit/tests/integration_tests.rs b/crates/audit/tests/integration_tests.rs index ba414797..cd1e1e7f 100644 --- a/crates/audit/tests/integration_tests.rs +++ b/crates/audit/tests/integration_tests.rs @@ -1,37 +1,37 @@ use alloy_rpc_types_mev::EthSendBundle; use std::time::Duration; use tips_audit::{ - publisher::{KafkaMempoolEventPublisher, MempoolEventPublisher}, - storage::{MempoolEventS3Reader, S3MempoolEventReaderWriter}, - types::{DropReason, MempoolEvent}, KafkaMempoolArchiver, KafkaMempoolReader, + publisher::{BundleEventPublisher, KafkaBundleEventPublisher}, + storage::{BundleEventS3Reader, S3EventReaderWriter}, + types::{BundleEvent, DropReason}, }; use uuid::Uuid; mod common; use common::TestHarness; #[tokio::test] -async fn test_kafka_publisher_s3_archiver_integration( -) -> Result<(), Box> { +async fn test_kafka_publisher_s3_archiver_integration() +-> Result<(), Box> { let harness = TestHarness::new().await?; let topic = "test-mempool-events"; let s3_writer = - S3MempoolEventReaderWriter::new(harness.s3_client.clone(), harness.bucket_name.clone()); + S3EventReaderWriter::new(harness.s3_client.clone(), harness.bucket_name.clone()); let test_bundle_id = Uuid::new_v4(); let test_events = vec![ - MempoolEvent::Created { + BundleEvent::Created { bundle_id: test_bundle_id, bundle: EthSendBundle::default(), }, - MempoolEvent::Dropped { + BundleEvent::Dropped { bundle_id: test_bundle_id, reason: DropReason::TimedOut, }, ]; - let publisher = KafkaMempoolEventPublisher::new(harness.kafka_producer, topic.to_string()); + let publisher = KafkaBundleEventPublisher::new(harness.kafka_producer, topic.to_string()); for event in test_events.iter() { publisher.publish(event.clone()).await?; diff --git a/crates/audit/tests/s3_test.rs b/crates/audit/tests/s3_test.rs index 37a0c3ff..baeb30e0 100644 --- a/crates/audit/tests/s3_test.rs +++ b/crates/audit/tests/s3_test.rs @@ -1,10 +1,10 @@ -use alloy_primitives::{b256, bytes, Bytes, TxHash}; +use alloy_primitives::{Bytes, TxHash, b256, bytes}; use alloy_rpc_types_mev::EthSendBundle; use std::sync::Arc; use tips_audit::{ reader::Event, - storage::{MempoolEventS3Reader, MempoolEventWriter, S3MempoolEventReaderWriter}, - types::MempoolEvent, + storage::{BundleEventS3Reader, EventWriter, S3EventReaderWriter}, + types::BundleEvent, }; use tokio::task::JoinSet; use uuid::Uuid; @@ -13,7 +13,9 @@ mod common; use common::TestHarness; // https://basescan.org/tx/0x4f7ddfc911f5cf85dd15a413f4cbb2a0abe4f1ff275ed13581958c0bcf043c5e -const TXN_DATA: Bytes = bytes!("0x02f88f8221058304b6b3018315fb3883124f80948ff2f0a8d017c79454aa28509a19ab9753c2dd1480a476d58e1a0182426068c9ea5b00000000000000000002f84f00000000083e4fda54950000c080a086fbc7bbee41f441fb0f32f7aa274d2188c460fe6ac95095fa6331fa08ec4ce7a01aee3bcc3c28f7ba4e0c24da9ae85e9e0166c73cabb42c25ff7b5ecd424f3105"); +const TXN_DATA: Bytes = bytes!( + "0x02f88f8221058304b6b3018315fb3883124f80948ff2f0a8d017c79454aa28509a19ab9753c2dd1480a476d58e1a0182426068c9ea5b00000000000000000002f84f00000000083e4fda54950000c080a086fbc7bbee41f441fb0f32f7aa274d2188c460fe6ac95095fa6331fa08ec4ce7a01aee3bcc3c28f7ba4e0c24da9ae85e9e0166c73cabb42c25ff7b5ecd424f3105" +); const TXN_HASH: TxHash = b256!("0x4f7ddfc911f5cf85dd15a413f4cbb2a0abe4f1ff275ed13581958c0bcf043c5e"); @@ -24,26 +26,25 @@ fn create_test_bundle() -> EthSendBundle { } } -fn create_test_event(key: &str, timestamp: i64, mempool_event: MempoolEvent) -> Event { +fn create_test_event(key: &str, timestamp: i64, bundle_event: BundleEvent) -> Event { Event { key: key.to_string(), timestamp, - event: mempool_event, + event: bundle_event, } } #[tokio::test] async fn test_event_write_and_read() -> Result<(), Box> { let harness = TestHarness::new().await?; - let writer = - S3MempoolEventReaderWriter::new(harness.s3_client.clone(), harness.bucket_name.clone()); + let writer = S3EventReaderWriter::new(harness.s3_client.clone(), harness.bucket_name.clone()); let bundle_id = Uuid::new_v4(); let bundle = create_test_bundle(); let event = create_test_event( "test-key-1", 1234567890, - MempoolEvent::Created { + BundleEvent::Created { bundle_id, bundle: bundle.clone(), }, @@ -70,7 +71,7 @@ async fn test_event_write_and_read() -> Result<(), Box Result<(), Box Result<(), Box> { let harness = TestHarness::new().await?; - let writer = - S3MempoolEventReaderWriter::new(harness.s3_client.clone(), harness.bucket_name.clone()); + let writer = S3EventReaderWriter::new(harness.s3_client.clone(), harness.bucket_name.clone()); let bundle_id = Uuid::new_v4(); let bundle = create_test_bundle(); @@ -102,7 +102,7 @@ async fn test_events_appended() -> Result<(), Box Result<(), Box Result<(), Box Result<(), Box Result<(), Box> { let harness = TestHarness::new().await?; - let writer = - S3MempoolEventReaderWriter::new(harness.s3_client.clone(), harness.bucket_name.clone()); + let writer = S3EventReaderWriter::new(harness.s3_client.clone(), harness.bucket_name.clone()); let bundle_id = Uuid::new_v4(); let bundle = create_test_bundle(); let event = create_test_event( "duplicate-key", 1234567890, - MempoolEvent::Created { + BundleEvent::Created { bundle_id, bundle: bundle.clone(), }, @@ -182,8 +181,7 @@ async fn test_event_deduplication() -> Result<(), Box Result<(), Box> { let harness = TestHarness::new().await?; - let writer = - S3MempoolEventReaderWriter::new(harness.s3_client.clone(), harness.bucket_name.clone()); + let writer = S3EventReaderWriter::new(harness.s3_client.clone(), harness.bucket_name.clone()); let nonexistent_bundle_id = Uuid::new_v4(); let bundle_history = writer.get_bundle_history(nonexistent_bundle_id).await?; @@ -201,7 +199,7 @@ async fn test_nonexistent_data() -> Result<(), Box Result<(), Box> { let harness = TestHarness::new().await?; - let writer = Arc::new(S3MempoolEventReaderWriter::new( + let writer = Arc::new(S3EventReaderWriter::new( harness.s3_client.clone(), harness.bucket_name.clone(), )); @@ -212,7 +210,7 @@ async fn test_concurrent_writes_for_bundle() -> Result<(), Box Result<(), Box>, minimum_base_fee: Option, txn_hashes: Option>, @@ -33,7 +33,9 @@ struct BundleRow { block_number: Option, min_timestamp: Option, max_timestamp: Option, + #[sqlx(rename = "bundle_state")] state: BundleState, + state_changed_at: DateTime, } /// Filter criteria for selecting bundles @@ -42,6 +44,9 @@ pub struct BundleFilter { pub base_fee: Option, pub block_number: Option, pub timestamp: Option, + pub max_time_before: Option, + pub status: Option, + pub txn_hashes: Option>, } impl BundleFilter { @@ -63,6 +68,21 @@ impl BundleFilter { self.timestamp = Some(timestamp); self } + + pub fn with_status(mut self, status: BundleState) -> Self { + self.status = Some(status); + self + } + + pub fn with_txn_hashes(mut self, txn_hashes: Vec) -> Self { + self.txn_hashes = Some(txn_hashes); + self + } + + pub fn with_max_time_before(mut self, timestamp: u64) -> Self { + self.max_time_before = Some(timestamp); + self + } } /// Extended bundle data that includes the original bundle plus extracted metadata @@ -73,6 +93,47 @@ pub struct BundleWithMetadata { pub senders: Vec
, pub min_base_fee: i64, pub state: BundleState, + pub state_changed_at: DateTime, +} + +/// Statistics about bundles and transactions grouped by state +#[derive(Debug, Clone, PartialEq, Eq)] +pub struct BundleStats { + pub ready_bundles: u64, + pub ready_transactions: u64, + pub included_by_builder_bundles: u64, + pub included_by_builder_transactions: u64, + pub total_bundles: u64, + pub total_transactions: u64, +} + +#[derive(Debug, Clone)] +pub struct BlockInfoRecord { + pub block_number: u64, + pub block_hash: B256, + pub finalized: bool, +} + +#[derive(Debug, Clone)] +pub struct BlockInfo { + pub latest_block_number: u64, + pub latest_block_hash: B256, + pub latest_finalized_block_number: Option, + pub latest_finalized_block_hash: Option, +} + +#[derive(Debug, Clone)] +pub struct BlockInfoUpdate { + pub block_number: u64, + pub block_hash: B256, +} + +#[derive(sqlx::FromRow, Debug)] +struct BlockInfoRow { + latest_block_number: Option, + latest_block_hash: Option, + latest_finalized_block_number: Option, + latest_finalized_block_hash: Option, } /// PostgreSQL implementation of the BundleDatastore trait @@ -123,7 +184,7 @@ impl PostgresDatastore { min_timestamp: row.min_timestamp.map(|t| t as u64), max_timestamp: row.max_timestamp.map(|t| t as u64), reverting_tx_hashes: parsed_reverting_tx_hashes?, - replacement_uuid: None, + replacement_uuid: Some(row.id.to_string()), dropping_tx_hashes: parsed_dropping_tx_hashes?, refund_percent: None, refund_recipient: None, @@ -151,6 +212,7 @@ impl PostgresDatastore { senders: parsed_senders?, min_base_fee: row.minimum_base_fee.unwrap_or(0), state: row.state, + state_changed_at: row.state_changed_at, }) } @@ -212,12 +274,12 @@ impl BundleDatastore for PostgresDatastore { sqlx::query!( r#" INSERT INTO bundles ( - id, "state", senders, minimum_base_fee, txn_hashes, + id, bundle_state, senders, minimum_base_fee, txn_hashes, txs, reverting_tx_hashes, dropping_tx_hashes, block_number, min_timestamp, max_timestamp, - created_at, updated_at + created_at, updated_at, state_changed_at ) - VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, NOW(), NOW()) + VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, NOW(), NOW(), NOW()) "#, id, BundleState::Ready as BundleState, @@ -240,9 +302,9 @@ impl BundleDatastore for PostgresDatastore { async fn get_bundle(&self, id: Uuid) -> Result> { let result = sqlx::query_as::<_, BundleRow>( r#" - SELECT senders, minimum_base_fee, txn_hashes, txs, reverting_tx_hashes, - dropping_tx_hashes, block_number, min_timestamp, max_timestamp, "state" - FROM bundles + SELECT id, senders, minimum_base_fee, txn_hashes, txs, reverting_tx_hashes, + dropping_tx_hashes, block_number, min_timestamp, max_timestamp, bundle_state, state_changed_at + FROM bundles WHERE id = $1 "#, ) @@ -268,32 +330,32 @@ impl BundleDatastore for PostgresDatastore { } async fn select_bundles(&self, filter: BundleFilter) -> Result> { - let base_fee = filter.base_fee.unwrap_or(0); - let block_number = filter.block_number.unwrap_or(0) as i64; - - let (min_ts, max_ts) = if let Some(timestamp) = filter.timestamp { - (timestamp as i64, timestamp as i64) - } else { - // If not specified, set the parameters to be the whole range - (i64::MAX, 0i64) - }; + // Convert txn_hashes to string array for SQL binding + let txn_hash_strings: Option> = filter + .txn_hashes + .map(|hashes| hashes.iter().map(|h| h.encode_hex_with_prefix()).collect()); let rows = sqlx::query_as::<_, BundleRow>( r#" - SELECT senders, minimum_base_fee, txn_hashes, txs, reverting_tx_hashes, - dropping_tx_hashes, block_number, min_timestamp, max_timestamp, "state" - FROM bundles - WHERE minimum_base_fee >= $1 - AND (block_number = $2 OR block_number IS NULL OR block_number = 0 OR $2 = 0) - AND (min_timestamp <= $3 OR min_timestamp IS NULL) - AND (max_timestamp >= $4 OR max_timestamp IS NULL) + SELECT id, senders, minimum_base_fee, txn_hashes, txs, reverting_tx_hashes, + dropping_tx_hashes, block_number, min_timestamp, max_timestamp, bundle_state, state_changed_at + FROM bundles + WHERE ($1::bigint IS NULL OR minimum_base_fee >= $1) + AND ($2::bigint IS NULL OR block_number = $2 OR block_number IS NULL OR block_number = 0) + AND ($3::bigint IS NULL OR min_timestamp <= $3 OR min_timestamp IS NULL) + AND ($3::bigint IS NULL OR max_timestamp >= $3 OR max_timestamp IS NULL) + AND ($4::bundle_state IS NULL OR bundle_state = $4) + AND ($5::text[] IS NULL OR txn_hashes::text[] && $5) + AND ($6::bigint IS NULL OR max_timestamp < $6) ORDER BY minimum_base_fee DESC "#, ) - .bind(base_fee) - .bind(block_number) - .bind(min_ts) - .bind(max_ts) + .bind(filter.base_fee) + .bind(filter.block_number.map(|n| n as i64)) + .bind(filter.timestamp.map(|t| t as i64)) + .bind(filter.status) + .bind(txn_hash_strings) + .bind(filter.max_time_before.map(|t| t as i64)) .fetch_all(&self.pool) .await?; @@ -324,11 +386,213 @@ impl BundleDatastore for PostgresDatastore { Ok(result) } - async fn remove_bundle(&self, id: Uuid) -> Result<()> { - sqlx::query("DELETE FROM bundles WHERE id = $1") - .bind(id) + async fn remove_bundles(&self, ids: Vec) -> Result { + if ids.is_empty() { + return Ok(0); + } + + let result = sqlx::query("DELETE FROM bundles WHERE id = ANY($1)") + .bind(&ids) + .execute(&self.pool) + .await?; + Ok(result.rows_affected() as usize) + } + + async fn update_bundles_state( + &self, + uuids: Vec, + allowed_prev_states: Vec, + new_state: BundleState, + ) -> Result> { + let prev_states_sql: Vec = allowed_prev_states + .iter() + .map(|s| match s { + BundleState::Ready => "Ready".to_string(), + BundleState::IncludedByBuilder => "IncludedByBuilder".to_string(), + }) + .collect(); + let rows = sqlx::query!( + r#" + UPDATE bundles + SET bundle_state = $1, updated_at = NOW(), state_changed_at = NOW() + WHERE id = ANY($2) AND bundle_state::text = ANY($3) + RETURNING id + "#, + new_state as BundleState, + &uuids, + &prev_states_sql + ) + .fetch_all(&self.pool) + .await?; + + Ok(rows.into_iter().map(|row| row.id).collect()) + } + + async fn get_current_block_info(&self) -> Result> { + let row = sqlx::query_as::<_, BlockInfoRow>( + r#" + SELECT + (SELECT block_number FROM maintenance ORDER BY block_number DESC LIMIT 1) as latest_block_number, + (SELECT block_hash FROM maintenance ORDER BY block_number DESC LIMIT 1) as latest_block_hash, + (SELECT block_number FROM maintenance WHERE finalized = true ORDER BY block_number DESC LIMIT 1) as latest_finalized_block_number, + (SELECT block_hash FROM maintenance WHERE finalized = true ORDER BY block_number DESC LIMIT 1) as latest_finalized_block_hash + "# + ) + .fetch_one(&self.pool) + .await?; + + // If there's no latest block, return None + let (latest_block_number, latest_block_hash) = + match (row.latest_block_number, row.latest_block_hash) { + (Some(block_number), Some(hash_str)) => { + let hash = B256::from_hex(&hash_str) + .map_err(|e| anyhow::anyhow!("Failed to parse latest block hash: {}", e))?; + (block_number as u64, hash) + } + _ => return Ok(None), + }; + + let latest_finalized_block_hash = if let Some(hash_str) = row.latest_finalized_block_hash { + Some(B256::from_hex(&hash_str).map_err(|e| { + anyhow::anyhow!("Failed to parse latest finalized block hash: {}", e) + })?) + } else { + None + }; + + Ok(Some(BlockInfo { + latest_block_number, + latest_block_hash, + latest_finalized_block_number: row.latest_finalized_block_number.map(|n| n as u64), + latest_finalized_block_hash, + })) + } + + async fn commit_block_info(&self, blocks: Vec) -> Result<()> { + for block in blocks { + let block_hash_str = block.block_hash.encode_hex_with_prefix(); + + sqlx::query!( + r#" + INSERT INTO maintenance (block_number, block_hash, finalized) + VALUES ($1, $2, false) + ON CONFLICT (block_number) + DO UPDATE SET block_hash = EXCLUDED.block_hash, finalized = false + "#, + block.block_number as i64, + block_hash_str, + ) .execute(&self.pool) .await?; + } Ok(()) } + + async fn finalize_blocks_before(&self, block_number: u64) -> Result { + let result = sqlx::query!( + "UPDATE maintenance SET finalized = true WHERE block_number < $1 AND finalized = false", + block_number as i64 + ) + .execute(&self.pool) + .await?; + + Ok(result.rows_affected()) + } + + async fn prune_finalized_blocks(&self, before_block_number: u64) -> Result { + let result = sqlx::query!( + "DELETE FROM maintenance WHERE finalized = true AND block_number < $1", + before_block_number as i64 + ) + .execute(&self.pool) + .await?; + + Ok(result.rows_affected()) + } + + async fn get_stats(&self) -> Result { + let result = sqlx::query!( + r#" + SELECT + bundle_state::text as bundle_state_text, + COUNT(*) as bundle_count, + SUM(COALESCE(array_length(txn_hashes, 1), 0)) as transaction_count + FROM bundles + GROUP BY bundle_state + "# + ) + .fetch_all(&self.pool) + .await?; + + let mut stats = BundleStats { + ready_bundles: 0, + ready_transactions: 0, + included_by_builder_bundles: 0, + included_by_builder_transactions: 0, + total_bundles: 0, + total_transactions: 0, + }; + + for row in result { + let bundle_count = row.bundle_count.unwrap_or(0) as u64; + let transaction_count = row.transaction_count.unwrap_or(0) as u64; + + stats.total_bundles += bundle_count; + stats.total_transactions += transaction_count; + + if let Some(state_text) = row.bundle_state_text { + match state_text.as_str() { + "Ready" => { + stats.ready_bundles = bundle_count; + stats.ready_transactions = transaction_count; + } + "IncludedByBuilder" => { + stats.included_by_builder_bundles = bundle_count; + stats.included_by_builder_transactions = transaction_count; + } + _ => { + // Unknown state, just add to totals + } + } + } + } + + Ok(stats) + } + + async fn remove_timed_out_bundles(&self, current_time: u64) -> Result> { + let rows = sqlx::query_scalar::<_, Uuid>( + r#" + DELETE FROM bundles + WHERE bundle_state = 'Ready' + AND max_timestamp IS NOT NULL + AND max_timestamp < $1 + RETURNING id + "#, + ) + .bind(current_time as i64) + .fetch_all(&self.pool) + .await?; + + Ok(rows) + } + + async fn remove_old_included_bundles( + &self, + cutoff_timestamp: DateTime, + ) -> Result> { + let rows = sqlx::query_scalar::<_, Uuid>( + r#" + DELETE FROM bundles + WHERE bundle_state = 'IncludedByBuilder' + AND state_changed_at < $1 + RETURNING id + "#, + ) + .bind(cutoff_timestamp) + .fetch_all(&self.pool) + .await?; + + Ok(rows) + } } diff --git a/crates/datastore/src/traits.rs b/crates/datastore/src/traits.rs index e5e58f28..f58b2d98 100644 --- a/crates/datastore/src/traits.rs +++ b/crates/datastore/src/traits.rs @@ -1,7 +1,10 @@ -use crate::postgres::{BundleFilter, BundleWithMetadata}; +use crate::postgres::{ + BlockInfo, BlockInfoUpdate, BundleFilter, BundleState, BundleStats, BundleWithMetadata, +}; use alloy_primitives::TxHash; use alloy_rpc_types_mev::EthSendBundle; use anyhow::Result; +use sqlx::types::chrono::{DateTime, Utc}; use uuid::Uuid; /// Trait defining the interface for bundle datastore operations @@ -22,6 +25,41 @@ pub trait BundleDatastore: Send + Sync { /// Find bundle ID by transaction hash async fn find_bundle_by_transaction_hash(&self, tx_hash: TxHash) -> Result>; - /// Remove a bundle by ID - async fn remove_bundle(&self, id: Uuid) -> Result<()>; + /// Remove bundles by IDs + async fn remove_bundles(&self, ids: Vec) -> Result; + + /// Update bundle states for multiple bundles + /// Returns the number of rows that were actually updated + async fn update_bundles_state( + &self, + uuids: Vec, + allowed_prev_states: Vec, + new_state: BundleState, + ) -> Result>; + + /// Get the current block info (latest block and non finalized blocks) + async fn get_current_block_info(&self) -> Result>; + + /// Commit the latest block info (upsert vec of block nums/hashes should be non finalized) + async fn commit_block_info(&self, blocks: Vec) -> Result<()>; + + /// Finalize all blocks before the given block number (one-way operation) + async fn finalize_blocks_before(&self, block_number: u64) -> Result; + + /// Prune blocks that are finalized before block number X + async fn prune_finalized_blocks(&self, before_block_number: u64) -> Result; + + /// Get statistics about bundles and transactions grouped by state + async fn get_stats(&self) -> Result; + + /// Remove bundles that have timed out (max_timestamp < current_time) + /// Returns the UUIDs of bundles that were removed + async fn remove_timed_out_bundles(&self, current_time: u64) -> Result>; + + /// Remove old IncludedByBuilder bundles that were last updated before the given timestamp + /// Returns the UUIDs of bundles that were removed + async fn remove_old_included_bundles( + &self, + cutoff_timestamp: DateTime, + ) -> Result>; } diff --git a/crates/datastore/tests/datastore.rs b/crates/datastore/tests/datastore.rs index cf2a4af7..8e71a3a5 100644 --- a/crates/datastore/tests/datastore.rs +++ b/crates/datastore/tests/datastore.rs @@ -1,11 +1,12 @@ use alloy_primitives::{Address, Bytes, TxHash, address, b256, bytes}; use alloy_rpc_types_mev::EthSendBundle; use sqlx::PgPool; +use sqlx::types::chrono::Utc; use testcontainers_modules::{ postgres, testcontainers::{ContainerAsync, runners::AsyncRunner}, }; -use tips_datastore::postgres::{BundleFilter, BundleState}; +use tips_datastore::postgres::{BlockInfoUpdate, BundleFilter, BundleState}; use tips_datastore::{BundleDatastore, PostgresDatastore}; struct TestHarness { @@ -301,3 +302,253 @@ async fn cancel_bundle_workflow() -> eyre::Result<()> { Ok(()) } + +#[tokio::test] +async fn find_bundle_by_transaction_hash() -> eyre::Result<()> { + let harness = setup_datastore().await?; + let test_bundle = create_test_bundle_with_reverting_tx()?; + + let bundle_id = harness + .data_store + .insert_bundle(test_bundle) + .await + .expect("Failed to insert bundle"); + + let found_id = harness + .data_store + .find_bundle_by_transaction_hash(TX_HASH) + .await + .expect("Failed to find bundle by transaction hash"); + assert_eq!(found_id, Some(bundle_id)); + + let nonexistent_hash = + b256!("0x1234567890123456789012345678901234567890123456789012345678901234"); + let not_found = harness + .data_store + .find_bundle_by_transaction_hash(nonexistent_hash) + .await + .expect("Failed to search for nonexistent hash"); + assert_eq!(not_found, None); + + Ok(()) +} + +#[tokio::test] +async fn remove_bundles() -> eyre::Result<()> { + let harness = setup_datastore().await?; + + let bundle1 = create_test_bundle(100, None, None)?; + let bundle2 = create_test_bundle(200, None, None)?; + + let id1 = harness.data_store.insert_bundle(bundle1).await.unwrap(); + let id2 = harness.data_store.insert_bundle(bundle2).await.unwrap(); + + let removed_count = harness + .data_store + .remove_bundles(vec![id1, id2]) + .await + .unwrap(); + assert_eq!(removed_count, 2); + + assert!(harness.data_store.get_bundle(id1).await.unwrap().is_none()); + assert!(harness.data_store.get_bundle(id2).await.unwrap().is_none()); + + let empty_removal = harness.data_store.remove_bundles(vec![]).await.unwrap(); + assert_eq!(empty_removal, 0); + + Ok(()) +} + +#[tokio::test] +async fn update_bundles_state() -> eyre::Result<()> { + let harness = setup_datastore().await?; + + let bundle1 = create_test_bundle(100, None, None)?; + let bundle2 = create_test_bundle(200, None, None)?; + + let id1 = harness.data_store.insert_bundle(bundle1).await.unwrap(); + let id2 = harness.data_store.insert_bundle(bundle2).await.unwrap(); + + let updated_ids = harness + .data_store + .update_bundles_state( + vec![id1, id2], + vec![BundleState::Ready], + BundleState::IncludedByBuilder, + ) + .await + .unwrap(); + assert_eq!(updated_ids.len(), 2); + assert!(updated_ids.contains(&id1)); + assert!(updated_ids.contains(&id2)); + + let bundle1_meta = harness.data_store.get_bundle(id1).await.unwrap().unwrap(); + assert!(matches!(bundle1_meta.state, BundleState::IncludedByBuilder)); + + Ok(()) +} + +#[tokio::test] +async fn block_info_operations() -> eyre::Result<()> { + let harness = setup_datastore().await?; + + let initial_info = harness.data_store.get_current_block_info().await.unwrap(); + assert!(initial_info.is_none()); + + let blocks = vec![ + BlockInfoUpdate { + block_number: 100, + block_hash: b256!("0x1111111111111111111111111111111111111111111111111111111111111111"), + }, + BlockInfoUpdate { + block_number: 101, + block_hash: b256!("0x2222222222222222222222222222222222222222222222222222222222222222"), + }, + ]; + + harness.data_store.commit_block_info(blocks).await.unwrap(); + + let block_info = harness + .data_store + .get_current_block_info() + .await + .unwrap() + .unwrap(); + assert_eq!(block_info.latest_block_number, 101); + assert!(block_info.latest_finalized_block_number.is_none()); + + let finalized_count = harness + .data_store + .finalize_blocks_before(101) + .await + .unwrap(); + assert_eq!(finalized_count, 1); + + let updated_info = harness + .data_store + .get_current_block_info() + .await + .unwrap() + .unwrap(); + assert_eq!(updated_info.latest_finalized_block_number, Some(100)); + + let pruned_count = harness + .data_store + .prune_finalized_blocks(101) + .await + .unwrap(); + assert_eq!(pruned_count, 1); + + Ok(()) +} + +#[tokio::test] +async fn get_stats() -> eyre::Result<()> { + let harness = setup_datastore().await?; + + let stats = harness.data_store.get_stats().await.unwrap(); + assert_eq!(stats.total_bundles, 0); + assert_eq!(stats.total_transactions, 0); + + let bundle1 = create_test_bundle(100, None, None)?; + let bundle2 = create_test_bundle(200, None, None)?; + + let id1 = harness.data_store.insert_bundle(bundle1).await.unwrap(); + harness.data_store.insert_bundle(bundle2).await.unwrap(); + + harness + .data_store + .update_bundles_state( + vec![id1], + vec![BundleState::Ready], + BundleState::IncludedByBuilder, + ) + .await + .unwrap(); + + let updated_stats = harness.data_store.get_stats().await.unwrap(); + assert_eq!(updated_stats.total_bundles, 2); + assert_eq!(updated_stats.ready_bundles, 1); + assert_eq!(updated_stats.included_by_builder_bundles, 1); + + Ok(()) +} + +#[tokio::test] +async fn remove_timed_out_bundles() -> eyre::Result<()> { + let harness = setup_datastore().await?; + + let expired_bundle = create_test_bundle(100, None, Some(1000))?; + let valid_bundle = create_test_bundle(200, None, Some(2000))?; + let no_timestamp_bundle = create_test_bundle(300, None, None)?; + + harness + .data_store + .insert_bundle(expired_bundle) + .await + .unwrap(); + harness + .data_store + .insert_bundle(valid_bundle) + .await + .unwrap(); + harness + .data_store + .insert_bundle(no_timestamp_bundle) + .await + .unwrap(); + + let removed_ids = harness + .data_store + .remove_timed_out_bundles(1500) + .await + .unwrap(); + assert_eq!(removed_ids.len(), 1); + + let remaining_bundles = harness + .data_store + .select_bundles(BundleFilter::new()) + .await + .unwrap(); + assert_eq!(remaining_bundles.len(), 2); + + Ok(()) +} + +#[tokio::test] +async fn remove_old_included_bundles() -> eyre::Result<()> { + let harness = setup_datastore().await?; + + let bundle1 = create_test_bundle(100, None, None)?; + let bundle2 = create_test_bundle(200, None, None)?; + + let id1 = harness.data_store.insert_bundle(bundle1).await.unwrap(); + let id2 = harness.data_store.insert_bundle(bundle2).await.unwrap(); + + harness + .data_store + .update_bundles_state( + vec![id1, id2], + vec![BundleState::Ready], + BundleState::IncludedByBuilder, + ) + .await + .unwrap(); + + let cutoff = Utc::now(); + let removed_ids = harness + .data_store + .remove_old_included_bundles(cutoff) + .await + .unwrap(); + assert_eq!(removed_ids.len(), 2); + + let remaining_bundles = harness + .data_store + .select_bundles(BundleFilter::new()) + .await + .unwrap(); + assert_eq!(remaining_bundles.len(), 0); + + Ok(()) +} diff --git a/crates/ingress-rpc/Cargo.toml b/crates/ingress-rpc/Cargo.toml index b76a1d40..13a581b3 100644 --- a/crates/ingress-rpc/Cargo.toml +++ b/crates/ingress-rpc/Cargo.toml @@ -1,15 +1,17 @@ [package] name = "tips-ingress-rpc" -version = "0.1.0" -edition = "2024" +version.workspace = true +rust-version.workspace = true +license.workspace = true +homepage.workspace = true +repository.workspace = true +edition.workspace = true [[bin]] name = "tips-ingress-rpc" path = "src/main.rs" [dependencies] -tips-datastore.workspace = true -tips-audit.workspace = true jsonrpsee.workspace = true alloy-rpc-types-mev.workspace = true alloy-primitives.workspace = true @@ -23,11 +25,9 @@ clap.workspace = true url.workspace = true alloy-consensus.workspace = true op-alloy-consensus.workspace = true -eyre.workspace = true dotenvy.workspace = true rdkafka.workspace = true reth-rpc-eth-types.workspace = true -serde.workspace = true serde_json.workspace = true async-trait.workspace = true backon.workspace = true @@ -35,4 +35,3 @@ op-revm.workspace = true revm-context-interface.workspace = true alloy-signer-local.workspace = true reth-optimism-evm.workspace = true -reth-errors.workspace = true diff --git a/crates/ingress-rpc/Dockerfile b/crates/ingress-rpc/Dockerfile index 97c27d02..0ec3bd88 100644 --- a/crates/ingress-rpc/Dockerfile +++ b/crates/ingress-rpc/Dockerfile @@ -1,5 +1,7 @@ FROM rust:1-bookworm AS base +RUN apt-get update && apt-get -y upgrade && apt-get install -y libclang-dev pkg-config + RUN cargo install cargo-chef --locked WORKDIR /app diff --git a/crates/ingress-rpc/src/main.rs b/crates/ingress-rpc/src/main.rs index 4a4fd328..07e6c27e 100644 --- a/crates/ingress-rpc/src/main.rs +++ b/crates/ingress-rpc/src/main.rs @@ -56,6 +56,14 @@ struct Config { #[arg(long, env = "TIPS_INGRESS_LOG_LEVEL", default_value = "info")] log_level: String, + + /// Default lifetime for sent transactions in seconds (default: 3 hours) + #[arg( + long, + env = "TIPS_INGRESS_SEND_TRANSACTION_DEFAULT_LIFETIME_SECONDS", + default_value = "10800" + )] + send_transaction_default_lifetime_seconds: u64, } #[tokio::main] @@ -105,7 +113,12 @@ async fn main() -> anyhow::Result<()> { let queue = KafkaQueuePublisher::new(queue_producer, config.queue_topic); - let service = IngressService::new(provider, config.dual_write_mempool, queue); + let service = IngressService::new( + provider, + config.dual_write_mempool, + queue, + config.send_transaction_default_lifetime_seconds, + ); let bind_addr = format!("{}:{}", config.address, config.port); let server = Server::builder().build(&bind_addr).await?; diff --git a/crates/ingress-rpc/src/service.rs b/crates/ingress-rpc/src/service.rs index 17a67a1d..1cda9d92 100644 --- a/crates/ingress-rpc/src/service.rs +++ b/crates/ingress-rpc/src/service.rs @@ -10,6 +10,7 @@ use jsonrpsee::{ use op_alloy_consensus::OpTxEnvelope; use op_alloy_network::Optimism; use reth_rpc_eth_types::EthApiError; +use std::time::{SystemTime, UNIX_EPOCH}; use tracing::{info, warn}; use crate::queue::QueuePublisher; @@ -33,14 +34,21 @@ pub struct IngressService { provider: RootProvider, dual_write_mempool: bool, queue: Queue, + send_transaction_default_lifetime_seconds: u64, } impl IngressService { - pub fn new(provider: RootProvider, dual_write_mempool: bool, queue: Queue) -> Self { + pub fn new( + provider: RootProvider, + dual_write_mempool: bool, + queue: Queue, + send_transaction_default_lifetime_seconds: u64, + ) -> Self { Self { provider, dual_write_mempool, queue, + send_transaction_default_lifetime_seconds, } } } @@ -88,11 +96,17 @@ where // TODO: parallelize DB and mempool setup + let expiry_timestamp = SystemTime::now() + .duration_since(UNIX_EPOCH) + .unwrap() + .as_secs() + + self.send_transaction_default_lifetime_seconds; + let bundle = EthSendBundle { txs: vec![data.clone()], block_number: 0, min_timestamp: None, - max_timestamp: None, + max_timestamp: Some(expiry_timestamp), reverting_tx_hashes: vec![transaction.tx_hash()], ..Default::default() }; diff --git a/crates/ingress-rpc/src/validation.rs b/crates/ingress-rpc/src/validation.rs index 4d075e94..54d8a328 100644 --- a/crates/ingress-rpc/src/validation.rs +++ b/crates/ingress-rpc/src/validation.rs @@ -6,7 +6,6 @@ use jsonrpsee::core::RpcResult; use op_alloy_consensus::interop::CROSS_L2_INBOX_ADDRESS; use op_alloy_network::Optimism; use op_revm::{OpSpecId, l1block::L1BlockInfo}; -use reth_errors::RethError; use reth_optimism_evm::extract_l1_info_from_tx; use reth_rpc_eth_types::{EthApiError, RpcInvalidTransactionError, SignError}; use tracing::warn; @@ -62,12 +61,12 @@ impl L1BlockInfoLookup for RootProvider { .ok_or_else(|| EthApiError::HeaderNotFound(block_number.into()).into_rpc_err())?; let txs = block.transactions.clone(); - let first_tx = txs.first_transaction().ok_or_else(|| { - EthApiError::Internal(RethError::msg("No full transactions found")).into_rpc_err() - })?; + let first_tx = txs + .first_transaction() + .ok_or_else(|| EthApiError::InternalEthError.into_rpc_err())?; Ok(extract_l1_info_from_tx(&first_tx.clone()) - .map_err(|e| EthApiError::Internal(RethError::msg(e.to_string())))?) + .map_err(|_| EthApiError::InternalEthError.into_rpc_err())?) } } diff --git a/crates/ingress-writer/Cargo.toml b/crates/ingress-writer/Cargo.toml index 5a7ab1e1..2eda385b 100644 --- a/crates/ingress-writer/Cargo.toml +++ b/crates/ingress-writer/Cargo.toml @@ -1,7 +1,11 @@ [package] name = "tips-ingress-writer" -version = "0.1.0" -edition = "2024" +version.workspace = true +rust-version.workspace = true +license.workspace = true +homepage.workspace = true +repository.workspace = true +edition.workspace = true [[bin]] name = "tips-ingress-writer" @@ -19,6 +23,5 @@ clap.workspace = true dotenvy.workspace = true rdkafka.workspace = true serde_json.workspace = true -async-trait.workspace = true backon.workspace = true uuid.workspace = true diff --git a/crates/ingress-writer/Dockerfile b/crates/ingress-writer/Dockerfile index d44fe80e..52adfe7e 100644 --- a/crates/ingress-writer/Dockerfile +++ b/crates/ingress-writer/Dockerfile @@ -1,5 +1,7 @@ FROM rust:1-bookworm AS base +RUN apt-get update && apt-get -y upgrade && apt-get install -y libclang-dev pkg-config + RUN cargo install cargo-chef --locked WORKDIR /app diff --git a/crates/ingress-writer/src/main.rs b/crates/ingress-writer/src/main.rs index 1309277a..3e3f1225 100644 --- a/crates/ingress-writer/src/main.rs +++ b/crates/ingress-writer/src/main.rs @@ -8,7 +8,7 @@ use rdkafka::{ message::Message, producer::FutureProducer, }; -use tips_audit::{KafkaMempoolEventPublisher, MempoolEvent, MempoolEventPublisher}; +use tips_audit::{BundleEvent, BundleEventPublisher, KafkaBundleEventPublisher}; use tips_datastore::{BundleDatastore, postgres::PostgresDatastore}; use tokio::time::Duration; use tracing::{debug, error, info, warn}; @@ -47,7 +47,7 @@ pub struct IngressWriter { impl IngressWriter where Store: BundleDatastore + Send + Sync + 'static, - Publisher: MempoolEventPublisher + Sync + Send + 'static, + Publisher: BundleEventPublisher + Sync + Send + 'static, { pub fn new( queue_consumer: StreamConsumer, @@ -109,13 +109,13 @@ where async fn publish(&self, bundle_id: Uuid, bundle: &EthSendBundle) { if let Err(e) = self .publisher - .publish(MempoolEvent::Created { + .publish(BundleEvent::Created { bundle_id, bundle: bundle.clone(), }) .await { - warn!(error = %e, bundle_id = %bundle_id, "Failed to publish MempoolEvent::Created"); + warn!(error = %e, bundle_id = %bundle_id, "Failed to publish BundleEvent::Created"); } } } @@ -143,7 +143,7 @@ async fn main() -> Result<()> { .set("message.timeout.ms", "5000") .create()?; - let publisher = KafkaMempoolEventPublisher::new(kafka_producer, "tips-audit".to_string()); + let publisher = KafkaBundleEventPublisher::new(kafka_producer, "tips-audit".to_string()); let consumer = config.create()?; let bundle_store = PostgresDatastore::connect(args.database_url).await?; diff --git a/crates/maintenance/Cargo.toml b/crates/maintenance/Cargo.toml index 9d7eec66..d94fd552 100644 --- a/crates/maintenance/Cargo.toml +++ b/crates/maintenance/Cargo.toml @@ -1,7 +1,11 @@ [package] name = "tips-maintenance" -version = "0.1.0" -edition = "2024" +version.workspace = true +rust-version.workspace = true +license.workspace = true +homepage.workspace = true +repository.workspace = true +edition.workspace = true [[bin]] name = "tips-maintenance" @@ -10,6 +14,7 @@ path = "src/main.rs" [dependencies] tips-datastore.workspace = true tips-audit.workspace = true +op-alloy-consensus.workspace = true alloy-provider.workspace = true alloy-primitives.workspace = true alloy-rpc-types.workspace = true @@ -21,5 +26,9 @@ anyhow.workspace = true clap.workspace = true dotenvy.workspace = true rdkafka.workspace = true -serde_json.workspace = true -url.workspace = true \ No newline at end of file +url.workspace = true +uuid.workspace = true +op-alloy-rpc-types.workspace = true +base-reth-flashblocks-rpc.workspace = true +alloy-rpc-types-mev.workspace = true +sqlx.workspace = true diff --git a/crates/maintenance/Dockerfile b/crates/maintenance/Dockerfile index b3e080ff..ead4a079 100644 --- a/crates/maintenance/Dockerfile +++ b/crates/maintenance/Dockerfile @@ -1,5 +1,7 @@ FROM rust:1-bookworm AS base +RUN apt-get update && apt-get -y upgrade && apt-get install -y libclang-dev pkg-config + RUN cargo install cargo-chef --locked WORKDIR /app diff --git a/crates/maintenance/src/job.rs b/crates/maintenance/src/job.rs new file mode 100644 index 00000000..835f1a7d --- /dev/null +++ b/crates/maintenance/src/job.rs @@ -0,0 +1,487 @@ +use crate::Args; +use alloy_primitives::TxHash; +use alloy_primitives::map::HashMap; +use alloy_provider::Provider; +use alloy_rpc_types::BlockId; +use alloy_rpc_types::BlockNumberOrTag::Latest; +use alloy_rpc_types::eth::Block; +use anyhow::Result; +use base_reth_flashblocks_rpc::subscription::{Flashblock, FlashblocksReceiver}; +use op_alloy_consensus::OpTxEnvelope; +use op_alloy_network::eip2718::Decodable2718; +use op_alloy_network::{Optimism, TransactionResponse}; +use op_alloy_rpc_types::Transaction; +use sqlx::types::chrono::Utc; +use std::collections::HashSet; +use std::time::Duration; +use tips_audit::{BundleEvent, BundleEventPublisher, DropReason}; +use tips_datastore::BundleDatastore; +use tips_datastore::postgres::{BundleFilter, BundleState, BundleWithMetadata}; +use tokio::sync::mpsc; +use tracing::{error, info, warn}; +use uuid::Uuid; + +pub struct MaintenanceJob, K: BundleEventPublisher> { + pub store: S, + pub node: P, + pub publisher: K, + pub args: Args, + fb_tx: mpsc::UnboundedSender, +} + +impl, K: BundleEventPublisher> MaintenanceJob { + pub fn new( + store: S, + node: P, + publisher: K, + args: Args, + fb_tx: mpsc::UnboundedSender, + ) -> Self { + Self { + store, + node, + publisher, + args, + fb_tx, + } + } + + async fn execute(&self) -> Result<()> { + let latest_block = self + .node + .get_block(BlockId::Number(Latest)) + .full() + .await? + .ok_or_else(|| anyhow::anyhow!("Failed to get latest block"))?; + + let block_info = self.store.get_current_block_info().await?; + + if let Some(current_block_info) = block_info { + if latest_block.header.number > current_block_info.latest_block_number { + // Process all blocks between stored latest and current latest + for block_num in + (current_block_info.latest_block_number + 1)..=latest_block.header.number + { + let block = self + .node + .get_block(BlockId::Number(alloy_rpc_types::BlockNumberOrTag::Number( + block_num, + ))) + .full() + .await? + .ok_or_else(|| anyhow::anyhow!("Failed to get block {}", block_num))?; + + self.on_new_block(block).await?; + } + } + } else { + warn!("No block info found in database, initializing with latest block as finalized"); + let block_update = tips_datastore::postgres::BlockInfoUpdate { + block_number: latest_block.header.number, + block_hash: latest_block.header.hash, + }; + self.store.commit_block_info(vec![block_update]).await?; + self.store + .finalize_blocks_before(latest_block.header.number + 1) + .await?; + } + + // Finalize blocks that are old enough + if latest_block.header.number > self.args.finalization_depth { + self.store + .finalize_blocks_before(latest_block.header.number - self.args.finalization_depth) + .await?; + } + + Ok(()) + } + + async fn periodic_maintenance(&self) -> Result<()> { + let cutoff_time = Utc::now() - Duration::from_secs(self.args.finalization_depth * 2); + + let removed_included_bundle_uuids = + self.store.remove_old_included_bundles(cutoff_time).await?; + + if !removed_included_bundle_uuids.is_empty() { + info!( + deleted_count = removed_included_bundle_uuids.len(), + "Removed old included bundles" + ); + } + + let current_time = Utc::now().timestamp() as u64; + + let expired_bundle_uuids = self.store.remove_timed_out_bundles(current_time).await?; + + if !expired_bundle_uuids.is_empty() { + let events: Vec = expired_bundle_uuids + .iter() + .map(|&bundle_id| BundleEvent::Dropped { + bundle_id, + reason: DropReason::TimedOut, + }) + .collect(); + + self.publisher.publish_all(events).await?; + + info!( + deleted_count = expired_bundle_uuids.len(), + "Deleted expired bundles with timeout" + ); + } + + Ok(()) + } + + pub async fn run(&self, mut fb_rx: mpsc::UnboundedReceiver) -> Result<()> { + let mut maintenance_interval = + tokio::time::interval(Duration::from_millis(self.args.maintenance_interval_ms)); + let mut execution_interval = + tokio::time::interval(Duration::from_millis(self.args.rpc_poll_interval)); + + loop { + tokio::select! { + _ = maintenance_interval.tick() => { + match self.periodic_maintenance().await { + Ok(_) => { + info!("Periodic maintenance completed"); + }, + Err(err) => { + error!("Error in periodic maintenance: {:?}", err); + } + + } + } + _ = execution_interval.tick() => { + match self.execute().await { + Ok(_) => { + info!("Successfully executed maintenance run"); + } + Err(e) => { + error!("Error executing maintenance run: {:?}", e); + } + } + } + Some(flashblock) = fb_rx.recv() => { + match self.process_flashblock(flashblock).await { + Ok(_) => { + info!("Successfully processed flashblock"); + } + Err(e) => { + error!("Error processing flashblock: {:?}", e); + } + } + } + } + } + } + + pub async fn process_transactions(&self, transaction_hashes: Vec) -> Result> { + let filter = BundleFilter::new() + .with_status(BundleState::Ready) + .with_txn_hashes(transaction_hashes.clone()); + + let bundles = self.store.select_bundles(filter).await?; + + if bundles.is_empty() { + return Ok(vec![]); + } + + let bundle_match = map_transactions_to_bundles(bundles, transaction_hashes); + Ok(bundle_match + .matched + .values() + .map(|uuid_str| Uuid::parse_str(uuid_str).unwrap()) + .collect()) + } + + pub async fn on_new_block(&self, block: Block) -> Result<()> { + let transaction_hashes: Vec = block + .transactions + .as_transactions() + .unwrap_or(&[]) + .iter() + .filter(|tx| !tx.inner.inner.is_deposit()) + .map(|tx| tx.tx_hash()) + .collect(); + + if transaction_hashes.is_empty() { + return Ok(()); + } + + let bundle_uuids = self.process_transactions(transaction_hashes).await?; + + if !bundle_uuids.is_empty() && self.args.update_included_by_builder { + let updated_uuids = self + .store + .update_bundles_state( + bundle_uuids.clone(), + vec![BundleState::Ready], + BundleState::IncludedByBuilder, + ) + .await?; + + info!( + updated_count = updated_uuids.len(), + block_hash = %block.header.hash, + "Updated bundle states to IncludedByBuilder" + ); + } + + let events: Vec = bundle_uuids + .into_iter() + .map(|bundle_id| BundleEvent::BlockIncluded { + bundle_id, + block_number: block.header.number, + block_hash: block.header.hash, + }) + .collect(); + + self.publisher.publish_all(events).await?; + + Ok(()) + } + + async fn process_flashblock(&self, flashblock: Flashblock) -> Result<()> { + let transaction_hashes: Vec = flashblock + .diff + .transactions + .iter() + .map(|tx| OpTxEnvelope::decode_2718_exact(tx).unwrap().tx_hash()) + .collect(); + + if transaction_hashes.is_empty() { + return Ok(()); + } + + let bundle_uuids = self.process_transactions(transaction_hashes).await?; + + let events: Vec = bundle_uuids + .into_iter() + .map(|bundle_id| BundleEvent::FlashblockIncluded { + bundle_id, + block_number: flashblock.metadata.block_number, + flashblock_index: flashblock.index, + }) + .collect(); + + self.publisher.publish_all(events).await?; + + Ok(()) + } +} + +impl, K: BundleEventPublisher> FlashblocksReceiver + for MaintenanceJob +{ + fn on_flashblock_received(&self, flashblock: Flashblock) { + if let Err(e) = self.fb_tx.send(flashblock) { + error!("Failed to send flashblock to queue: {:?}", e); + } + } +} + +struct BundleMatch { + matched: HashMap, + unmatched_transactions: HashSet, + unmatched_bundles: HashSet, +} + +struct TrieNode { + next: HashMap, + bundle_uuid: Option, +} + +impl TrieNode { + fn new() -> Self { + Self { + next: HashMap::default(), + bundle_uuid: None, + } + } + + fn get(&mut self, t: &TxHash) -> &mut TrieNode { + self.next.entry(*t).or_insert_with(TrieNode::new) + } + + fn adv(&self, t: &TxHash) -> Option<&TrieNode> { + self.next.get(t) + } + + fn has_further_items(&self) -> bool { + !self.next.is_empty() + } +} + +/// Map transactions that were included in a block, to the bundles +/// This method only supports two cases, non duplicate single bundle transactions (e.g. standard mempool) +/// or non ambiguous bundles, e.g. [(a,b), (a), (b)] is not supported +fn map_transactions_to_bundles( + bundles: Vec, + transactions: Vec, +) -> BundleMatch { + let bundle_uuids: Vec = bundles + .iter() + .map(|b| b.bundle.replacement_uuid.clone().unwrap()) + .collect(); + + let mut result = BundleMatch { + matched: HashMap::default(), + unmatched_transactions: transactions.iter().copied().collect(), + unmatched_bundles: bundle_uuids.iter().cloned().collect(), + }; + + let mut trie = TrieNode::new(); + for (bundle, uuid) in bundles.into_iter().zip(bundle_uuids.iter()) { + let mut trie_ptr = &mut trie; + for txn in &bundle.txn_hashes { + trie_ptr = trie_ptr.get(txn); + } + trie_ptr.bundle_uuid = Some(uuid.clone()); + } + + let mut i = 0; + while i < transactions.len() { + let mut trie_ptr = ≜ + let mut txn_path = Vec::new(); + let start_index = i; + + while i < transactions.len() { + let txn = transactions[i]; + + if let Some(next_node) = trie_ptr.adv(&txn) { + trie_ptr = next_node; + txn_path.push(txn); + i += 1; + + if let Some(ref bundle_uuid) = trie_ptr.bundle_uuid { + if trie_ptr.has_further_items() { + warn!(message = "ambiguous transaction, in multiple bundles", txn = %txn); + } + + for &path_txn in &txn_path { + result.matched.insert(path_txn, bundle_uuid.clone()); + result.unmatched_transactions.remove(&path_txn); + } + result.unmatched_bundles.remove(bundle_uuid); + break; + } + } else { + i = start_index + 1; + break; + } + } + } + + result +} + +#[cfg(test)] +mod tests { + use super::*; + use alloy_primitives::{TxHash, b256}; + use alloy_rpc_types_mev::EthSendBundle; + use sqlx::types::chrono::Utc; + use tips_datastore::postgres::BundleState; + + const TX_1: TxHash = b256!("1111111111111111111111111111111111111111111111111111111111111111"); + const TX_2: TxHash = b256!("2222222222222222222222222222222222222222222222222222222222222222"); + const TX_3: TxHash = b256!("3333333333333333333333333333333333333333333333333333333333333333"); + const TX_4: TxHash = b256!("4444444444444444444444444444444444444444444444444444444444444444"); + const TX_UNMATCHED: TxHash = + b256!("9999999999999999999999999999999999999999999999999999999999999999"); + + fn create_test_bundle(uuid: &str, txn_hashes: Vec) -> BundleWithMetadata { + let replacement_uuid = Some(uuid.to_string()); + let mut bundle = EthSendBundle::default(); + bundle.replacement_uuid = replacement_uuid; + + BundleWithMetadata { + bundle, + txn_hashes, + senders: vec![], + min_base_fee: 0, + state: BundleState::Ready, + state_changed_at: Utc::now(), + } + } + + #[test] + fn test_empty_inputs() { + let result = map_transactions_to_bundles(vec![], vec![]); + assert!(result.matched.is_empty()); + assert!(result.unmatched_transactions.is_empty()); + assert!(result.unmatched_bundles.is_empty()); + } + + #[test] + fn test_single_transaction_bundles() { + let bundles = vec![ + create_test_bundle("bundle1", vec![TX_1]), + create_test_bundle("bundle2", vec![TX_2]), + create_test_bundle("bundle3", vec![TX_3]), + ]; + let transactions = vec![TX_1, TX_3, TX_2, TX_UNMATCHED]; + + let result = map_transactions_to_bundles(bundles, transactions); + + assert_eq!(result.matched.len(), 3); + assert_eq!(result.unmatched_transactions.len(), 1); + assert!(result.unmatched_transactions.contains(&TX_UNMATCHED)); + assert!(result.unmatched_bundles.is_empty()); + + assert!(result.matched.contains_key(&TX_1)); + assert_eq!(result.matched.get(&TX_1).unwrap(), "bundle1"); + assert!(result.matched.contains_key(&TX_2)); + assert_eq!(result.matched.get(&TX_2).unwrap(), "bundle2"); + assert!(result.matched.contains_key(&TX_3)); + assert_eq!(result.matched.get(&TX_3).unwrap(), "bundle3"); + } + + #[test] + fn test_multi_transaction_bundles() { + let bundles = vec![ + create_test_bundle("bundle1", vec![TX_1, TX_2]), + create_test_bundle("bundle2", vec![TX_3]), + create_test_bundle("bundle3", vec![TX_4]), + ]; + let transactions = vec![TX_1, TX_2, TX_4, TX_3, TX_UNMATCHED]; + let result = map_transactions_to_bundles(bundles, transactions); + + assert_eq!(result.matched.len(), 4); + assert_eq!(result.matched.get(&TX_1).unwrap(), "bundle1"); + assert_eq!(result.matched.get(&TX_2).unwrap(), "bundle1"); + assert_eq!(result.matched.get(&TX_3).unwrap(), "bundle2"); + assert_eq!(result.matched.get(&TX_4).unwrap(), "bundle3"); + assert_eq!(result.unmatched_transactions.len(), 1); + assert!(result.unmatched_transactions.contains(&TX_UNMATCHED)); + } + + #[test] + fn test_partial_bundles_dont_match() { + let bundles = vec![create_test_bundle("bundle1", vec![TX_1, TX_2, TX_3])]; + let transactions = vec![TX_1, TX_2]; + + let result = map_transactions_to_bundles(bundles, transactions); + + assert_eq!(result.matched.len(), 0); + assert_eq!(result.unmatched_transactions.len(), 2); + assert_eq!(result.unmatched_bundles.len(), 1); + } + + #[test] + fn test_ambiguous_bundle_match() { + let bundles = vec![ + create_test_bundle("bundle1", vec![TX_1]), + create_test_bundle("bundle2", vec![TX_1, TX_2]), + ]; + let transactions = vec![TX_1, TX_2]; + + let result = map_transactions_to_bundles(bundles, transactions); + + assert_eq!(result.matched.len(), 1); + assert_eq!(result.matched.get(&TX_1).unwrap(), "bundle1"); + assert!(result.unmatched_transactions.contains(&TX_2)); + assert!(result.unmatched_bundles.contains("bundle2")); + } +} diff --git a/crates/maintenance/src/main.rs b/crates/maintenance/src/main.rs index 6e28a6de..ef10c032 100644 --- a/crates/maintenance/src/main.rs +++ b/crates/maintenance/src/main.rs @@ -1,43 +1,65 @@ -use alloy_provider::network::TransactionResponse; -use alloy_provider::network::primitives::BlockTransactions; -use alloy_provider::{Provider, ProviderBuilder, RootProvider}; +mod job; + +use crate::job::MaintenanceJob; + +use alloy_provider::{ProviderBuilder, RootProvider}; use anyhow::Result; +use base_reth_flashblocks_rpc::subscription::FlashblocksSubscriber; use clap::Parser; use op_alloy_network::Optimism; use rdkafka::ClientConfig; use rdkafka::producer::FutureProducer; -use std::time::Duration; -use tips_audit::{KafkaMempoolEventPublisher, MempoolEvent, MempoolEventPublisher}; -use tips_datastore::{BundleDatastore, PostgresDatastore}; -use tokio::time::sleep; -use tracing::{error, info, warn}; +use std::sync::Arc; +use tips_audit::KafkaBundleEventPublisher; +use tips_datastore::PostgresDatastore; +use tracing::{info, warn}; use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt}; use url::Url; -#[derive(Parser)] +#[derive(Parser, Clone)] #[command(author, version, about, long_about = None)] -struct Args { - #[arg(long, env = "TIPS_MAINTENANCE_RPC_NODE")] - node_url: Url, - +pub struct Args { #[arg(long, env = "TIPS_MAINTENANCE_KAFKA_BROKERS")] - kafka_brokers: String, + pub kafka_brokers: String, #[arg( long, env = "TIPS_MAINTENANCE_KAFKA_TOPIC", - default_value = "mempool-events" + default_value = "tips-audit" )] - kafka_topic: String, + pub kafka_topic: String, #[arg(long, env = "TIPS_MAINTENANCE_DATABASE_URL")] - database_url: String, + pub database_url: String, + + #[arg(long, env = "TIPS_MAINTENANCE_RPC_URL")] + pub rpc_url: Url, + + #[arg( + long, + env = "TIPS_MAINTENANCE_RPC_POLL_INTERVAL_MS", + default_value = "250" + )] + pub rpc_poll_interval: u64, - #[arg(long, env = "TIPS_MAINTENANCE_POLL_INTERVAL_MS", default_value = "250")] - poll_interval: u64, + #[arg(long, env = "TIPS_MAINTENANCE_FLASHBLOCKS_WS")] + pub flashblocks_ws: Url, #[arg(long, env = "TIPS_MAINTENANCE_LOG_LEVEL", default_value = "info")] - log_level: String, + pub log_level: String, + + #[arg(long, env = "TIPS_MAINTENANCE_FINALIZATION_DEPTH", default_value = "4")] + pub finalization_depth: u64, + + #[arg( + long, + env = "TIPS_MAINTENANCE_UPDATE_INCLUDED_BY_BUILDER", + default_value = "true" + )] + pub update_included_by_builder: bool, + + #[arg(long, env = "TIPS_MAINTENANCE_INTERVAL_MS", default_value = "2000")] + pub maintenance_interval_ms: u64, } #[tokio::main] @@ -74,115 +96,32 @@ async fn main() -> Result<()> { let provider: RootProvider = ProviderBuilder::new() .disable_recommended_fillers() .network::() - .connect_http(args.node_url); + .connect_http(args.rpc_url.clone()); - let datastore = PostgresDatastore::connect(args.database_url).await?; + let datastore = PostgresDatastore::connect(args.database_url.clone()).await?; let kafka_producer: FutureProducer = ClientConfig::new() .set("bootstrap.servers", &args.kafka_brokers) .set("message.timeout.ms", "5000") .create()?; - let publisher = KafkaMempoolEventPublisher::new(kafka_producer, args.kafka_topic); - - let mut last_processed_block: Option = None; + let publisher = KafkaBundleEventPublisher::new(kafka_producer, args.kafka_topic.clone()); - loop { - match process_new_blocks(&provider, &datastore, &publisher, &mut last_processed_block).await - { - Ok(_) => {} - Err(e) => { - error!(message = "Error processing blocks", error=%e); - } - } - - sleep(Duration::from_millis(args.poll_interval)).await; - } -} + let (fb_tx, fb_rx) = tokio::sync::mpsc::unbounded_channel(); -async fn process_new_blocks( - provider: &impl Provider, - datastore: &PostgresDatastore, - publisher: &KafkaMempoolEventPublisher, - last_processed_block: &mut Option, -) -> Result<()> { - let latest_block_number = provider.get_block_number().await?; - - let start_block = last_processed_block - .map(|n| n + 1) - .unwrap_or(latest_block_number); - - if start_block > latest_block_number { - return Ok(()); - } - - info!(message = "Processing blocks", from=%start_block, to=%latest_block_number); - - for block_number in start_block..=latest_block_number { - match process_block(provider, datastore, publisher, block_number).await { - Ok(_) => { - info!(message = "Successfully processed block", block=%block_number); - *last_processed_block = Some(block_number); - } - Err(e) => { - return Err(e); - } - } - } + let job = Arc::new(MaintenanceJob::new( + datastore, + provider, + publisher, + args.clone(), + fb_tx, + )); - Ok(()) -} + let mut flashblocks_client = + FlashblocksSubscriber::new(job.clone(), args.flashblocks_ws.clone()); + flashblocks_client.start(); -async fn process_block( - provider: &impl Provider, - datastore: &PostgresDatastore, - publisher: &KafkaMempoolEventPublisher, - block_number: u64, -) -> Result<()> { - let block = provider - .get_block_by_number(block_number.into()) - .full() - .await? - .ok_or_else(|| anyhow::anyhow!("Block {block_number} not found"))?; - - let block_hash = block.header.hash; - - let transactions = match &block.transactions { - BlockTransactions::Full(txs) => txs, - BlockTransactions::Hashes(_) => { - return Err(anyhow::anyhow!( - "Block transactions returned as hashes only, expected full transactions" - )); - } - BlockTransactions::Uncle => { - return Err(anyhow::anyhow!("Block contains uncle transactions")); - } - }; - - for tx in transactions { - let tx_hash = tx.tx_hash(); - info!(message = "Processing transaction", tx_hash=%tx_hash); - - match datastore.find_bundle_by_transaction_hash(tx_hash).await? { - Some(bundle_id) => { - info!(message = "Found bundle for transaction", bundle_id=%bundle_id, tx_hash=%tx_hash); - - let event = MempoolEvent::BlockIncluded { - bundle_id, - block_number, - block_hash, - }; - - publisher.publish(event).await?; - datastore.remove_bundle(bundle_id).await?; - - info!(message = "Removed bundle for transaction", bundle_id=%bundle_id, tx_hash=%tx_hash); - } - None => { - error!(message = "Transaction not part of tracked bundle", tx_hash=%tx_hash); - } - } - } + job.run(fb_rx).await?; Ok(()) } diff --git a/docs/AUDIT_S3_FORMAT.md b/docs/AUDIT_S3_FORMAT.md index e64ffd64..0ea21d5e 100644 --- a/docs/AUDIT_S3_FORMAT.md +++ b/docs/AUDIT_S3_FORMAT.md @@ -6,52 +6,57 @@ This document describes the S3 storage format used by the audit system for archi ### Bundle History: `/bundles/` -Each bundle is stored as a JSON object containing its complete lifecycle history: +Each bundle is stored as a JSON object containing its complete lifecycle history. The history events in this object are +dervied from the events defined in the [bundle states](./BUNDLE_STATES.md). ```json { "history": [ { - "event": "Created", - "timestamp": 1234567890, - "bundle": { + "event": "Created", // Event type (see ./BUNDLE_STATES.md) + "timestamp": 1234567890, // timestamp event was written to kafka + "key": "-", // used to dedup events + "data": { + "bundle": { // EthSendBundle object + } } }, - { - "event": "Updated", - "timestamp": 1234567891, - "bundle": { - // EthSendBundle object - } - }, - { - "event": "Cancelled", - "timestamp": 1234567892 - }, { "event": "BuilderIncluded", - "builder": "builder-id", "timestamp": 1234567893, - "blockNumber": 12345, - "flashblockIndex": 1 + "key": "-", + "data": { + "blockNumber": 12345, + "flashblockIndex": 1, + "builderId": "builder-id" + } }, { "event": "FlashblockIncluded", "timestamp": 1234567894, - "blockNumber": 12345, - "flashblockIndex": 1 + "key": "-", + "data": { + "blockNumber": 12345, + "flashblockIndex": 1 + }, }, { "event": "BlockIncluded", "timestamp": 1234567895, - "blockNumber": 12345, - "blockHash": "0x..." + "key": "-", + "data": { + "blockNumber": 12345, + "blockHash": "0x..." + } }, { "event": "Dropped", "timestamp": 1234567896, - "reason": "TIMEOUT" + "key": "-", + "data": { + "reason": "TIMEOUT" + } } ] } @@ -69,19 +74,3 @@ Transaction hash to bundle mapping for efficient lookups: ] } ``` - -## Event Types - -### Bundle Events - -- **Created**: Initial bundle creation with transaction list -- **Updated**: Bundle modification (transaction additions/removals) -- **Cancelled**: Bundle explicitly cancelled -- **BuilderIncluded**: Bundle included by builder in flashblock -- **FlashblockIncluded**: Flashblock containing bundle included in chain -- **BlockIncluded**: Final confirmation in blockchain -- **Dropped**: Bundle dropped from processing - -### Drop Reasons - -- `TIMEOUT`: Bundle expired without inclusion \ No newline at end of file diff --git a/docs/BUNDLE_STATES.md b/docs/BUNDLE_STATES.md new file mode 100644 index 00000000..3105c895 --- /dev/null +++ b/docs/BUNDLE_STATES.md @@ -0,0 +1,71 @@ +# Bundle States + +## States +```mermaid +stateDiagram + [*] --> Ready + Ready --> Dropped + Ready --> IncludedByBuilder + IncludedByBuilder --> Ready: Reorg + IncludedByBuilder --> [*]: After X blocks + Dropped --> [*] +``` +_(this maybe extended to include a NonReady category for nonce gapped transactions etc.)_ + +The builder will load all `READY` transactions, which have a high enough minimum base fee +and are valid for the current block that is being built. + +## Bundle Events + +In addition to the states above, + +- **Received**: + - Received bundle event + - Arguments: (uuid) +- **Created**: + - Initial bundle creation with transaction list + - Arguments: (bundle) +- **Updated**: + - Bundle modification (transaction additions/removals) + - Arguments: (bundle) +- **Cancelled**: + - Bundle explicitly cancelled + - Arguments: (nonce | uuid) +- **IncludedByBuilder**: + - Bundle included by builder in flashblock + - Arguments: (flashblockNum, blockNum, builderId) +- **IncludedInFlashblock**: + - Flashblock containing bundle included in chain + - Arguments: (flashblockNum, blockNum) +- **IncludedInBlock**: + - Final confirmation in blockchain + - Arguments: (blockNum, blockHash) +- **Dropped**: + - Bundle dropped from processing + - Arguments: Why(enum Reason) + - "TIMEOUT": Bundle expired without inclusion + - "INCLUDED_BY_OTHER": Another bundle caused the transactions in this bundle to not be includable + +### Dropping Transactions +Transactions can be dropped because of multiple reasons, all of which are indicated on +the audit log for a transaction. The initial prototype has the following limits: + +- Included by other + - There are two bundles that overlap (e.g. bundleA=(txA, txB) and bundleB=(txA), if bundleB is included and txA in + bundleA is not allowed to be dropped, then bundleA will be marked as "Included By Other" and dropped. +- Bundle Limits + - Timeouts (block or flashblock) + - Block number +- Account Limits + - An account can only have a fixed number (TBD) of transactions in the mempool, + transactions will be dropped by descending nonce +- Global Limits + - When the mempool reaches a certain size (TBD), it will be pruned based on a combination of: + - Bundle age + - Low base fee + +### Maintenance Job +The limit enforcement and inclusion detection is managed by the maintenance job in +[`crates/maintenance`](https://github.com/base/tips/tree/master/crates/maintenance). It's designed to be idempotent so +that multiple jobs can execute concurrently. As this adds additional load to the BundleStore, it's preferable +to run a low number. \ No newline at end of file diff --git a/ui/src/app/api/bundles/route.ts b/ui/src/app/api/bundles/route.ts index 31bdba8a..085a46a3 100644 --- a/ui/src/app/api/bundles/route.ts +++ b/ui/src/app/api/bundles/route.ts @@ -5,13 +5,7 @@ import { bundles } from "@/db/schema"; export interface Bundle { id: string; txnHashes: string[]; - state: - | "Ready" - | "BundleLimit" - | "AccountLimits" - | "GlobalLimits" - | "IncludedInFlashblock" - | "IncludedInBlock"; + state: "Ready" | "IncludedByBuilder"; } export async function GET() { @@ -20,7 +14,7 @@ export async function GET() { .select({ id: bundles.id, txnHashes: bundles.txnHashes, - state: bundles.state, + state: bundles.bundleState, }) .from(bundles); diff --git a/ui/src/app/bundles/page.tsx b/ui/src/app/bundles/page.tsx index 16c1c771..cc34c799 100644 --- a/ui/src/app/bundles/page.tsx +++ b/ui/src/app/bundles/page.tsx @@ -92,17 +92,9 @@ export default function BundlesPage() { className={`px-2 py-1 rounded font-medium ${ bundle.state === "Ready" ? "bg-blue-100 text-blue-600" - : bundle.state === "BundleLimit" - ? "bg-yellow-100 text-yellow-600" - : bundle.state === "AccountLimits" - ? "bg-orange-100 text-orange-600" - : bundle.state === "GlobalLimits" - ? "bg-red-100 text-red-600" - : bundle.state === "IncludedInFlashblock" - ? "bg-purple-100 text-purple-600" - : bundle.state === "IncludedInBlock" - ? "bg-green-100 text-green-600" - : "bg-gray-100 text-gray-600" + : bundle.state === "IncludedByBuilder" + ? "bg-green-100 text-green-600" + : "bg-gray-100 text-gray-600" }`} > {bundle.state} diff --git a/ui/src/db/schema.ts b/ui/src/db/schema.ts index b5286170..6b559a05 100644 --- a/ui/src/db/schema.ts +++ b/ui/src/db/schema.ts @@ -1,5 +1,6 @@ import { bigint, + boolean, char, pgEnum, pgTable, @@ -10,20 +11,31 @@ import { export const bundleState = pgEnum("bundle_state", [ "Ready", - "BundleLimit", - "AccountLimits", - "GlobalLimits", - "IncludedInFlashblock", - "IncludedInBlock", + "IncludedByBuilder", ]); +export const maintenance = pgTable("maintenance", { + // You can use { mode: "bigint" } if numbers are exceeding js number limitations + blockNumber: bigint("block_number", { mode: "number" }) + .primaryKey() + .notNull(), + blockHash: char("block_hash", { length: 66 }).notNull(), + finalized: boolean().default(false).notNull(), +}); + export const bundles = pgTable("bundles", { id: uuid().primaryKey().notNull(), - state: bundleState().notNull(), + bundleState: bundleState("bundle_state").notNull(), + stateChangedAt: timestamp("state_changed_at", { + withTimezone: true, + mode: "string", + }) + .defaultNow() + .notNull(), + txnHashes: char("txn_hashes", { length: 66 }).array(), senders: char({ length: 42 }).array(), // You can use { mode: "bigint" } if numbers are exceeding js number limitations minimumBaseFee: bigint("minimum_base_fee", { mode: "number" }), - txnHashes: char("txn_hashes", { length: 66 }).array(), txs: text().array().notNull(), revertingTxHashes: char("reverting_tx_hashes", { length: 66 }).array(), droppingTxHashes: char("dropping_tx_hashes", { length: 66 }).array(),