diff --git a/.gitignore b/.gitignore index d367a739..fbd735af 100644 --- a/.gitignore +++ b/.gitignore @@ -49,3 +49,6 @@ setup/plugin/config/keys/ecdsa.json # Near DA RPC libs libnear_da_rpc_sys.* +# Ignore configuration for DVN or Executor +**/config_dvn.toml +**/config_executor.toml diff --git a/Cargo.lock b/Cargo.lock index d0b4d718..bd16fd65 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,6 +2,16 @@ # It is not intended for manual editing. version = 3 +[[package]] +name = "Inflector" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3" +dependencies = [ + "lazy_static", + "regex", +] + [[package]] name = "actix" version = "0.13.5" @@ -24,7 +34,7 @@ dependencies = [ "pin-project-lite", "smallvec", "tokio", - "tokio-util", + "tokio-util 0.7.12", ] [[package]] @@ -40,7 +50,7 @@ dependencies = [ "memchr", "pin-project-lite", "tokio", - "tokio-util", + "tokio-util 0.7.12", "tracing", ] @@ -52,7 +62,7 @@ checksum = "0346d8c1f762b41b458ed3145eea914966bb9ad20b9be0d6d463b20d45586370" dependencies = [ "actix-utils", "actix-web", - "derive_more", + "derive_more 0.99.18", "futures-util", "log", "once_cell", @@ -75,11 +85,11 @@ dependencies = [ "brotli", "bytes", "bytestring", - "derive_more", + "derive_more 0.99.18", "encoding_rs", "flate2", "futures-core", - "h2", + "h2 0.3.26", "http 0.2.12", "httparse", "httpdate", @@ -89,13 +99,13 @@ dependencies = [ "mime", "percent-encoding", "pin-project-lite", - "rand", + "rand 0.8.5", "sha1", "smallvec", "tokio", - "tokio-util", + "tokio-util 0.7.12", "tracing", - "zstd", + "zstd 0.13.2", ] [[package]] @@ -179,7 +189,7 @@ dependencies = [ "pin-project-lite", "tokio", "tokio-openssl", - "tokio-util", + "tokio-util 0.7.12", "tracing", ] @@ -213,7 +223,7 @@ dependencies = [ "bytestring", "cfg-if 1.0.0", "cookie", - "derive_more", + "derive_more 0.99.18", "encoding_rs", "futures-core", "futures-util", @@ -289,7 +299,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" dependencies = [ "cfg-if 1.0.0", - "cipher", + "cipher 0.4.4", "cpufeatures", ] @@ -299,7 +309,7 @@ version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" dependencies = [ - "getrandom", + "getrandom 0.2.15", "once_cell", "version_check", ] @@ -311,7 +321,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" dependencies = [ "cfg-if 1.0.0", - "getrandom", + "getrandom 0.2.15", "once_cell", "version_check", "zerocopy", @@ -348,333 +358,526 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" [[package]] -name = "amq-protocol" -version = "7.2.1" +name = "alloy" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f0234884b3641db74d22ccc20fc2594db5f23d7d41ade5c93d7ee33d200960c" +checksum = "056f2c01b2aed86e15b43c47d109bfc8b82553dc34e66452875e51247ec31ab2" dependencies = [ - "amq-protocol-tcp", - "amq-protocol-types", - "amq-protocol-uri", - "cookie-factory", - "nom", - "serde", + "alloy-consensus 0.4.2", + "alloy-contract 0.4.2", + "alloy-core", + "alloy-eips 0.4.2", + "alloy-genesis", + "alloy-json-rpc 0.4.2", + "alloy-network 0.4.2", + "alloy-node-bindings", + "alloy-provider 0.4.2", + "alloy-pubsub 0.4.2", + "alloy-rpc-client 0.4.2", + "alloy-rpc-types 0.4.2", + "alloy-serde 0.4.2", + "alloy-signer 0.4.2", + "alloy-signer-local 0.4.2", + "alloy-transport 0.4.2", + "alloy-transport-http 0.4.2", + "alloy-transport-ipc", + "alloy-transport-ws 0.4.2", ] [[package]] -name = "amq-protocol-tcp" -version = "7.2.1" +name = "alloy-chains" +version = "0.1.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "265dca43d9dbb3d5bbb0b3ef1b0cd9044ce3aa5d697d5b66cde974d1f6063f09" +checksum = "8158b4878c67837e5413721cc44298e6a2d88d39203175ea025e51892a16ba4c" dependencies = [ - "amq-protocol-uri", - "tcp-stream", - "tracing", + "num_enum", + "strum 0.26.3", ] [[package]] -name = "amq-protocol-types" -version = "7.2.1" +name = "alloy-consensus" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7412353b58923fa012feb9a64ccc0c811747babee2e5a2fd63eb102dc8054c3" +checksum = "da374e868f54c7f4ad2ad56829827badca388efd645f8cf5fccc61c2b5343504" dependencies = [ - "cookie-factory", - "nom", + "alloy-eips 0.1.4", + "alloy-primitives 0.7.7", + "alloy-rlp", + "alloy-serde 0.1.4", + "c-kzg", "serde", - "serde_json", ] [[package]] -name = "amq-protocol-uri" -version = "7.2.1" +name = "alloy-consensus" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2be91352c805d5704784e079117d5291fd5bf2569add53c914ebce6d1a795d33" +checksum = "705687d5bfd019fee57cf9e206b27b30a9a9617535d5590a02b171e813208f8e" dependencies = [ - "amq-protocol-types", - "percent-encoding", - "url", + "alloy-eips 0.4.2", + "alloy-primitives 0.8.5", + "alloy-rlp", + "alloy-serde 0.4.2", + "auto_impl", + "c-kzg", + "derive_more 1.0.0", + "serde", ] [[package]] -name = "android-tzdata" -version = "0.1.1" +name = "alloy-contract" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" +checksum = "7dc6957ff706f9e5f6fd42f52a93e4bce476b726c92d077b348de28c4a76730c" +dependencies = [ + "alloy-dyn-abi 0.7.7", + "alloy-json-abi 0.7.7", + "alloy-network 0.1.4", + "alloy-primitives 0.7.7", + "alloy-provider 0.1.4", + "alloy-rpc-types-eth 0.1.4", + "alloy-sol-types 0.7.7", + "alloy-transport 0.1.4", + "futures", + "futures-util", + "thiserror", +] [[package]] -name = "android_system_properties" -version = "0.1.5" +name = "alloy-contract" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" -dependencies = [ - "libc", +checksum = "917f7d12cf3971dc8c11c9972f732b35ccb9aaaf5f28f2f87e9e6523bee3a8ad" +dependencies = [ + "alloy-dyn-abi 0.8.5", + "alloy-json-abi 0.8.5", + "alloy-network 0.4.2", + "alloy-network-primitives", + "alloy-primitives 0.8.5", + "alloy-provider 0.4.2", + "alloy-pubsub 0.4.2", + "alloy-rpc-types-eth 0.4.2", + "alloy-sol-types 0.8.5", + "alloy-transport 0.4.2", + "futures", + "futures-util", + "thiserror", ] [[package]] -name = "anstream" -version = "0.6.15" +name = "alloy-core" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64e15c1ab1f89faffbf04a634d5e1962e9074f2741eef6d97f3c4e322426d526" +checksum = "5ce854562e7cafd5049189d0268d6e5cba05fe6c9cb7c6f8126a79b94800629c" dependencies = [ - "anstyle", - "anstyle-parse", - "anstyle-query", - "anstyle-wincon", - "colorchoice", - "is_terminal_polyfill", - "utf8parse", + "alloy-dyn-abi 0.8.5", + "alloy-json-abi 0.8.5", + "alloy-primitives 0.8.5", + "alloy-rlp", + "alloy-sol-types 0.8.5", ] [[package]] -name = "anstyle" -version = "1.0.8" +name = "alloy-dyn-abi" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bec1de6f59aedf83baf9ff929c98f2ad654b97c9510f4e70cf6f661d49fd5b1" +checksum = "413902aa18a97569e60f679c23f46a18db1656d87ab4d4e49d0e1e52042f66df" +dependencies = [ + "alloy-json-abi 0.7.7", + "alloy-primitives 0.7.7", + "alloy-sol-type-parser 0.7.7", + "alloy-sol-types 0.7.7", + "const-hex", + "itoa", + "serde", + "serde_json", + "winnow", +] [[package]] -name = "anstyle-parse" -version = "0.2.5" +name = "alloy-dyn-abi" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb47de1e80c2b463c735db5b217a0ddc39d612e7ac9e2e96a5aed1f57616c1cb" +checksum = "0b499852e1d0e9b8c6db0f24c48998e647c0d5762a01090f955106a7700e4611" dependencies = [ - "utf8parse", + "alloy-json-abi 0.8.5", + "alloy-primitives 0.8.5", + "alloy-sol-type-parser 0.8.5", + "alloy-sol-types 0.8.5", + "const-hex", + "itoa", + "serde", + "serde_json", + "winnow", ] [[package]] -name = "anstyle-query" -version = "1.1.1" +name = "alloy-eip2930" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d36fc52c7f6c869915e99412912f22093507da8d9e942ceaf66fe4b7c14422a" +checksum = "0069cf0642457f87a01a014f6dc29d5d893cd4fd8fddf0c3cdfad1bb3ebafc41" dependencies = [ - "windows-sys 0.52.0", + "alloy-primitives 0.8.5", + "alloy-rlp", + "serde", ] [[package]] -name = "anstyle-wincon" -version = "3.0.4" +name = "alloy-eip7702" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bf74e1b6e971609db8ca7a9ce79fd5768ab6ae46441c572e46cf596f59e57f8" +checksum = "ea59dc42102bc9a1905dc57901edc6dd48b9f38115df86c7d252acba70d71d04" dependencies = [ - "anstyle", - "windows-sys 0.52.0", + "alloy-primitives 0.8.5", + "alloy-rlp", + "k256", + "serde", ] [[package]] -name = "anyhow" -version = "1.0.89" +name = "alloy-eips" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86fdf8605db99b54d3cd748a44c6d04df638eb5dafb219b135d0149bd0db01f6" +checksum = "f76ecab54890cdea1e4808fc0891c7e6cfcf71fe1a9fe26810c7280ef768f4ed" +dependencies = [ + "alloy-primitives 0.7.7", + "alloy-rlp", + "alloy-serde 0.1.4", + "c-kzg", + "once_cell", + "serde", + "sha2", +] [[package]] -name = "arbitrary" -version = "1.3.2" +name = "alloy-eips" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d5a26814d8dcb93b0e5a0ff3c6d80a8843bafb21b39e8e18a6f05471870e110" +checksum = "6ffb906284a1e1f63c4607da2068c8197458a352d0b3e9796e67353d72a9be85" dependencies = [ - "derive_arbitrary", + "alloy-eip2930", + "alloy-eip7702", + "alloy-primitives 0.8.5", + "alloy-rlp", + "alloy-serde 0.4.2", + "c-kzg", + "derive_more 1.0.0", + "once_cell", + "serde", + "sha2", ] [[package]] -name = "arc-swap" -version = "1.7.1" +name = "alloy-genesis" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69f7f8c3906b62b754cd5326047894316021dcfe5a194c8ea52bdd94934a3457" +checksum = "8429cf4554eed9b40feec7f4451113e76596086447550275e3def933faf47ce3" +dependencies = [ + "alloy-primitives 0.8.5", + "alloy-serde 0.4.2", + "serde", +] [[package]] -name = "arrayref" -version = "0.3.9" +name = "alloy-json-abi" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" +checksum = "bc05b04ac331a9f07e3a4036ef7926e49a8bf84a99a1ccfc7e2ab55a5fcbb372" +dependencies = [ + "alloy-primitives 0.7.7", + "alloy-sol-type-parser 0.7.7", + "serde", + "serde_json", +] [[package]] -name = "arrayvec" -version = "0.5.2" +name = "alloy-json-abi" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" +checksum = "a438d4486b5d525df3b3004188f9d5cd1d65cd30ecc41e5a3ccef6f6342e8af9" +dependencies = [ + "alloy-primitives 0.8.5", + "alloy-sol-type-parser 0.8.5", + "serde", + "serde_json", +] [[package]] -name = "asn1-rs" -version = "0.6.2" +name = "alloy-json-rpc" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5493c3bedbacf7fd7382c6346bbd66687d12bbaad3a89a2d2c303ee6cf20b048" +checksum = "6d6f34930b7e3e2744bcc79056c217f00cb2abb33bc5d4ff88da7623c5bb078b" dependencies = [ - "asn1-rs-derive", - "asn1-rs-impl", - "displaydoc", - "nom", - "num-traits", - "rusticata-macros", + "alloy-primitives 0.7.7", + "serde", + "serde_json", "thiserror", - "time", + "tracing", ] [[package]] -name = "asn1-rs-derive" -version = "0.5.1" +name = "alloy-json-rpc" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "965c2d33e53cb6b267e148a4cb0760bc01f4904c1cd4bb4002a085bb016d1490" +checksum = "f8fa8a1a3c4cbd221f2b8e3693aeb328fca79a757fe556ed08e47bbbc2a70db7" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.77", - "synstructure", + "alloy-primitives 0.8.5", + "alloy-sol-types 0.8.5", + "serde", + "serde_json", + "thiserror", + "tracing", ] [[package]] -name = "asn1-rs-impl" -version = "0.2.0" +name = "alloy-network" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b18050c2cd6fe86c3a76584ef5e0baf286d038cda203eb6223df2cc413565f7" +checksum = "25f6895fc31b48fa12306ef9b4f78b7764f8bd6d7d91cdb0a40e233704a0f23f" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.77", + "alloy-consensus 0.1.4", + "alloy-eips 0.1.4", + "alloy-json-rpc 0.1.4", + "alloy-primitives 0.7.7", + "alloy-rpc-types-eth 0.1.4", + "alloy-serde 0.1.4", + "alloy-signer 0.1.4", + "alloy-sol-types 0.7.7", + "async-trait", + "auto_impl", + "futures-utils-wasm", + "thiserror", ] [[package]] -name = "assert_matches" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b34d609dfbaf33d6889b2b7106d3ca345eacad44200913df5ba02bfd31d2ba9" - -[[package]] -name = "async-channel" -version = "2.3.1" +name = "alloy-network" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a" -dependencies = [ - "concurrent-queue", - "event-listener-strategy", - "futures-core", - "pin-project-lite", +checksum = "85fa23a6a9d612b52e402c995f2d582c25165ec03ac6edf64c861a76bc5b87cd" +dependencies = [ + "alloy-consensus 0.4.2", + "alloy-eips 0.4.2", + "alloy-json-rpc 0.4.2", + "alloy-network-primitives", + "alloy-primitives 0.8.5", + "alloy-rpc-types-eth 0.4.2", + "alloy-serde 0.4.2", + "alloy-signer 0.4.2", + "alloy-sol-types 0.8.5", + "async-trait", + "auto_impl", + "futures-utils-wasm", + "thiserror", ] [[package]] -name = "async-executor" -version = "1.13.1" +name = "alloy-network-primitives" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30ca9a001c1e8ba5149f91a74362376cc6bc5b919d92d988668657bd570bdcec" +checksum = "801492711d4392b2ccf5fc0bc69e299fa1aab15167d74dcaa9aab96a54f684bd" dependencies = [ - "async-task", - "concurrent-queue", - "fastrand 2.1.1", - "futures-lite 2.3.0", - "slab", + "alloy-consensus 0.4.2", + "alloy-eips 0.4.2", + "alloy-primitives 0.8.5", + "alloy-serde 0.4.2", + "serde", ] [[package]] -name = "async-global-executor" -version = "2.4.1" +name = "alloy-node-bindings" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05b1b633a2115cd122d73b955eadd9916c18c8f510ec9cd1686404c60ad1c29c" +checksum = "4f1334a738aa1710cb8227441b3fcc319202ce78e967ef37406940242df4a454" dependencies = [ - "async-channel", - "async-executor", - "async-io 2.3.4", - "async-lock 3.4.0", - "blocking", - "futures-lite 2.3.0", - "once_cell", + "alloy-genesis", + "alloy-primitives 0.8.5", + "k256", + "rand 0.8.5", + "serde_json", + "tempfile", + "thiserror", + "tracing", + "url", ] [[package]] -name = "async-global-executor-trait" -version = "2.1.0" +name = "alloy-primitives" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33dd14c5a15affd2abcff50d84efd4009ada28a860f01c14f9d654f3e81b3f75" +checksum = "ccb3ead547f4532bc8af961649942f0b9c16ee9226e26caa3f38420651cc0bf4" dependencies = [ - "async-global-executor", - "async-trait", - "executor-trait", + "alloy-rlp", + "bytes", + "cfg-if 1.0.0", + "const-hex", + "derive_more 0.99.18", + "hex-literal", + "itoa", + "k256", + "keccak-asm", + "proptest", + "rand 0.8.5", + "ruint", + "serde", + "tiny-keccak", ] [[package]] -name = "async-io" -version = "1.13.0" +name = "alloy-primitives" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af" +checksum = "260d3ff3bff0bb84599f032a2f2c6828180b0ea0cd41fdaf44f39cef3ba41861" dependencies = [ - "async-lock 2.8.0", - "autocfg", + "alloy-rlp", + "bytes", "cfg-if 1.0.0", - "concurrent-queue", - "futures-lite 1.13.0", - "log", - "parking", - "polling 2.8.0", - "rustix 0.37.27", - "slab", - "socket2 0.4.10", - "waker-fn", + "const-hex", + "derive_more 1.0.0", + "hashbrown 0.14.5", + "hex-literal", + "indexmap 2.5.0", + "itoa", + "k256", + "keccak-asm", + "paste", + "proptest", + "rand 0.8.5", + "ruint", + "rustc-hash 2.0.0", + "serde", + "sha3", + "tiny-keccak", ] [[package]] -name = "async-io" -version = "2.3.4" +name = "alloy-provider" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "444b0228950ee6501b3568d3c93bf1176a1fdbc3b758dcd9475046d30f4dc7e8" -dependencies = [ - "async-lock 3.4.0", - "cfg-if 1.0.0", - "concurrent-queue", - "futures-io", - "futures-lite 2.3.0", - "parking", - "polling 3.7.3", - "rustix 0.38.37", - "slab", +checksum = "9c538bfa893d07e27cb4f3c1ab5f451592b7c526d511d62b576a2ce59e146e4a" +dependencies = [ + "alloy-chains", + "alloy-consensus 0.1.4", + "alloy-eips 0.1.4", + "alloy-json-rpc 0.1.4", + "alloy-network 0.1.4", + "alloy-primitives 0.7.7", + "alloy-pubsub 0.1.4", + "alloy-rpc-client 0.1.4", + "alloy-rpc-types-eth 0.1.4", + "alloy-transport 0.1.4", + "alloy-transport-http 0.1.4", + "alloy-transport-ws 0.1.4", + "async-stream", + "async-trait", + "auto_impl", + "dashmap 5.5.3", + "futures", + "futures-utils-wasm", + "lru 0.12.4", + "pin-project", + "reqwest 0.12.8", + "serde", + "serde_json", + "tokio", "tracing", - "windows-sys 0.59.0", + "url", ] [[package]] -name = "async-lock" -version = "2.8.0" +name = "alloy-provider" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b" -dependencies = [ - "event-listener 2.5.3", +checksum = "fcfaa4ffec0af04e3555686b8aacbcdf7d13638133a0672749209069750f78a6" +dependencies = [ + "alloy-chains", + "alloy-consensus 0.4.2", + "alloy-eips 0.4.2", + "alloy-json-rpc 0.4.2", + "alloy-network 0.4.2", + "alloy-network-primitives", + "alloy-node-bindings", + "alloy-primitives 0.8.5", + "alloy-pubsub 0.4.2", + "alloy-rpc-client 0.4.2", + "alloy-rpc-types-anvil", + "alloy-rpc-types-eth 0.4.2", + "alloy-rpc-types-trace", + "alloy-signer-local 0.4.2", + "alloy-transport 0.4.2", + "alloy-transport-http 0.4.2", + "alloy-transport-ipc", + "alloy-transport-ws 0.4.2", + "async-stream", + "async-trait", + "auto_impl", + "dashmap 6.1.0", + "futures", + "futures-utils-wasm", + "lru 0.12.4", + "pin-project", + "reqwest 0.12.8", + "serde", + "serde_json", + "thiserror", + "tokio", + "tracing", + "url", ] [[package]] -name = "async-lock" -version = "3.4.0" +name = "alloy-pubsub" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" +checksum = "0a7341322d9bc0e49f6e9fd9f2eb8e30f73806f2dd12cbb3d6bab2694c921f87" dependencies = [ - "event-listener 5.3.1", - "event-listener-strategy", - "pin-project-lite", + "alloy-json-rpc 0.1.4", + "alloy-primitives 0.7.7", + "alloy-transport 0.1.4", + "bimap", + "futures", + "serde", + "serde_json", + "tokio", + "tokio-stream", + "tower 0.4.13", + "tracing", ] [[package]] -name = "async-reactor-trait" -version = "1.1.0" +name = "alloy-pubsub" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a6012d170ad00de56c9ee354aef2e358359deb1ec504254e0e5a3774771de0e" +checksum = "f32cef487122ae75c91eb50154c70801d71fabdb976fec6c49e0af5e6486ab15" dependencies = [ - "async-io 1.13.0", - "async-trait", - "futures-core", - "reactor-trait", + "alloy-json-rpc 0.4.2", + "alloy-primitives 0.8.5", + "alloy-transport 0.4.2", + "bimap", + "futures", + "serde", + "serde_json", + "tokio", + "tokio-stream", + "tower 0.5.1", + "tracing", ] [[package]] -name = "async-stream" -version = "0.3.5" +name = "alloy-rlp" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd56dd203fef61ac097dd65721a419ddccb106b2d2b70ba60a6b529f03961a51" +checksum = "26154390b1d205a4a7ac7352aa2eb4f81f391399d4e2f546fb81a2f8bb383f62" dependencies = [ - "async-stream-impl", - "futures-core", - "pin-project-lite", + "alloy-rlp-derive", + "arrayvec 0.7.6", + "bytes", ] [[package]] -name = "async-stream-impl" -version = "0.3.5" +name = "alloy-rlp-derive" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" +checksum = "4d0f2d905ebd295e7effec65e5f6868d153936130ae718352771de3e7d03c75c" dependencies = [ "proc-macro2", "quote", @@ -682,1249 +885,3654 @@ dependencies = [ ] [[package]] -name = "async-task" -version = "4.7.1" +name = "alloy-rpc-client" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" +checksum = "5ba31bae67773fd5a60020bea900231f8396202b7feca4d0c70c6b59308ab4a8" +dependencies = [ + "alloy-json-rpc 0.1.4", + "alloy-primitives 0.7.7", + "alloy-pubsub 0.1.4", + "alloy-transport 0.1.4", + "alloy-transport-http 0.1.4", + "alloy-transport-ws 0.1.4", + "futures", + "pin-project", + "reqwest 0.12.8", + "serde", + "serde_json", + "tokio", + "tokio-stream", + "tower 0.4.13", + "tracing", + "url", +] [[package]] -name = "async-trait" -version = "0.1.82" +name = "alloy-rpc-client" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a27b8a3a6e1a44fa4c8baf1f653e4172e81486d4941f2237e20dc2d0cf4ddff1" +checksum = "370143ed581aace6e663342d21d209c6b2e34ee6142f7d6675adb518deeaf0dc" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.77", + "alloy-json-rpc 0.4.2", + "alloy-primitives 0.8.5", + "alloy-pubsub 0.4.2", + "alloy-transport 0.4.2", + "alloy-transport-http 0.4.2", + "alloy-transport-ipc", + "alloy-transport-ws 0.4.2", + "futures", + "pin-project", + "reqwest 0.12.8", + "serde", + "serde_json", + "tokio", + "tokio-stream", + "tower 0.5.1", + "tracing", + "url", ] [[package]] -name = "atomic-waker" -version = "1.1.2" +name = "alloy-rpc-types" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" +checksum = "184a7a42c7ba9141cc9e76368356168c282c3bc3d9e5d78f3556bdfe39343447" +dependencies = [ + "alloy-rpc-types-eth 0.1.4", + "alloy-serde 0.1.4", +] [[package]] -name = "attohttpc" -version = "0.19.1" +name = "alloy-rpc-types" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "262c3f7f5d61249d8c00e5546e2685cd15ebeeb1bc0f3cc5449350a1cb07319e" +checksum = "9ffc534b7919e18f35e3aa1f507b6f3d9d92ec298463a9f6beaac112809d8d06" dependencies = [ - "http 0.2.12", - "log", - "native-tls", - "openssl", + "alloy-primitives 0.8.5", + "alloy-rpc-types-engine", + "alloy-rpc-types-eth 0.4.2", + "alloy-rpc-types-trace", + "alloy-serde 0.4.2", "serde", - "serde_json", - "url", - "wildmatch", ] [[package]] -name = "autocfg" -version = "1.3.0" +name = "alloy-rpc-types-anvil" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" +checksum = "d780adaa5d95b07ad92006b2feb68ecfa7e2015f7d5976ceaac4c906c73ebd07" +dependencies = [ + "alloy-primitives 0.8.5", + "alloy-serde 0.4.2", + "serde", +] [[package]] -name = "awc" -version = "3.5.1" +name = "alloy-rpc-types-engine" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79049b2461279b886e46f1107efc347ebecc7b88d74d023dda010551a124967b" +checksum = "e0285c4c09f838ab830048b780d7f4a4f460f309aa1194bb049843309524c64c" dependencies = [ - "actix-codec", - "actix-http", - "actix-rt", - "actix-service", - "actix-tls", - "actix-utils", - "base64 0.22.1", - "bytes", - "cfg-if 1.0.0", - "cookie", - "derive_more", - "futures-core", - "futures-util", - "h2", - "http 0.2.12", - "itoa", - "log", - "mime", - "openssl", - "percent-encoding", - "pin-project-lite", - "rand", + "alloy-consensus 0.4.2", + "alloy-eips 0.4.2", + "alloy-primitives 0.8.5", + "alloy-rlp", + "alloy-serde 0.4.2", + "derive_more 1.0.0", + "jsonwebtoken 9.3.0", + "rand 0.8.5", "serde", - "serde_json", - "serde_urlencoded", - "tokio", + "strum 0.26.3", ] [[package]] -name = "aws-creds" -version = "0.30.0" +name = "alloy-rpc-types-eth" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aeeee1a5defa63cba39097a510dfe63ef53658fc8995202a610f6a8a4d03639" +checksum = "ab4123ee21f99ba4bd31bfa36ba89112a18a500f8b452f02b35708b1b951e2b9" dependencies = [ - "attohttpc", - "dirs", - "rust-ini", + "alloy-consensus 0.1.4", + "alloy-eips 0.1.4", + "alloy-primitives 0.7.7", + "alloy-rlp", + "alloy-serde 0.1.4", + "alloy-sol-types 0.7.7", + "itertools 0.13.0", "serde", - "serde-xml-rs", + "serde_json", "thiserror", - "time", - "url", ] [[package]] -name = "aws-region" -version = "0.25.5" +name = "alloy-rpc-types-eth" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9aed3f9c7eac9be28662fdb3b0f4d1951e812f7c64fed4f0327ba702f459b3b" +checksum = "413f4aa3ccf2c3e4234a047c5fa4727916d7daf25a89f9b765df0ba09784fd87" +dependencies = [ + "alloy-consensus 0.4.2", + "alloy-eips 0.4.2", + "alloy-network-primitives", + "alloy-primitives 0.8.5", + "alloy-rlp", + "alloy-serde 0.4.2", + "alloy-sol-types 0.8.5", + "derive_more 1.0.0", + "itertools 0.13.0", + "serde", + "serde_json", +] + +[[package]] +name = "alloy-rpc-types-trace" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "017cad3e5793c5613588c1f9732bcbad77e820ba7d0feaba3527749f856fdbc5" dependencies = [ + "alloy-primitives 0.8.5", + "alloy-rpc-types-eth 0.4.2", + "alloy-serde 0.4.2", + "serde", + "serde_json", "thiserror", ] [[package]] -name = "axum" -version = "0.6.20" +name = "alloy-serde" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b829e4e32b91e643de6eafe82b1d90675f5874230191a4ffbc1b336dec4d6bf" +checksum = "9416c52959e66ead795a11f4a86c248410e9e368a0765710e57055b8a1774dd6" dependencies = [ - "async-trait", - "axum-core", - "bitflags 1.3.2", - "bytes", - "futures-util", - "http 0.2.12", - "http-body", - "hyper", - "itoa", - "matchit", - "memchr", - "mime", - "percent-encoding", - "pin-project-lite", - "rustversion", + "alloy-primitives 0.7.7", "serde", - "sync_wrapper", - "tower", - "tower-layer", - "tower-service", + "serde_json", ] [[package]] -name = "axum-core" -version = "0.3.4" +name = "alloy-serde" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "759fa577a247914fd3f7f76d62972792636412fbfd634cd452f6a385a74d2d2c" +checksum = "9dff0ab1cdd43ca001e324dc27ee0e8606bd2161d6623c63e0e0b8c4dfc13600" dependencies = [ - "async-trait", - "bytes", - "futures-util", - "http 0.2.12", - "http-body", - "mime", - "rustversion", - "tower-layer", - "tower-service", + "alloy-primitives 0.8.5", + "serde", + "serde_json", ] [[package]] -name = "backtrace" -version = "0.3.74" +name = "alloy-signer" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" +checksum = "b33753c09fa1ad85e5b092b8dc2372f1e337a42e84b9b4cff9fede75ba4adb32" dependencies = [ - "addr2line 0.24.1", - "cfg-if 1.0.0", - "libc", - "miniz_oxide", - "object 0.36.4", - "rustc-demangle", - "windows-targets 0.52.6", + "alloy-primitives 0.7.7", + "async-trait", + "auto_impl", + "elliptic-curve", + "k256", + "thiserror", ] [[package]] -name = "base64" -version = "0.12.3" +name = "alloy-signer" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3441f0f7b02788e948e47f457ca01f1d7e6d92c693bc132c22b087d3141c03ff" +checksum = "2fd4e0ad79c81a27ca659be5d176ca12399141659fef2bcbfdc848da478f4504" +dependencies = [ + "alloy-primitives 0.8.5", + "async-trait", + "auto_impl", + "elliptic-curve", + "k256", + "thiserror", +] [[package]] -name = "base64" -version = "0.13.1" +name = "alloy-signer-aws" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" +checksum = "63ce17bfd5aa38e14b9c83b553d93c76e1bd5641a2db45f381f81619fd3e54ca" +dependencies = [ + "alloy-consensus 0.1.4", + "alloy-network 0.1.4", + "alloy-primitives 0.7.7", + "alloy-signer 0.1.4", + "async-trait", + "aws-sdk-kms", + "k256", + "spki", + "thiserror", + "tracing", +] [[package]] -name = "base64" -version = "0.21.7" +name = "alloy-signer-local" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" +checksum = "6dfc9c26fe6c6f1bad818c9a976de9044dd12e1f75f1f156a801ee3e8148c1b6" +dependencies = [ + "alloy-consensus 0.1.4", + "alloy-network 0.1.4", + "alloy-primitives 0.7.7", + "alloy-signer 0.1.4", + "async-trait", + "k256", + "rand 0.8.5", + "thiserror", +] [[package]] -name = "base64" -version = "0.22.1" +name = "alloy-signer-local" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" +checksum = "494e0a256f3e99f2426f994bcd1be312c02cb8f88260088dacb33a8b8936475f" +dependencies = [ + "alloy-consensus 0.4.2", + "alloy-network 0.4.2", + "alloy-primitives 0.8.5", + "alloy-signer 0.4.2", + "async-trait", + "k256", + "rand 0.8.5", + "thiserror", +] [[package]] -name = "base64ct" -version = "1.6.0" +name = "alloy-sol-macro" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" +checksum = "2b40397ddcdcc266f59f959770f601ce1280e699a91fc1862f29cef91707cd09" +dependencies = [ + "alloy-sol-macro-expander 0.7.7", + "alloy-sol-macro-input 0.7.7", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.77", +] [[package]] -name = "bincode" -version = "1.3.3" +name = "alloy-sol-macro" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +checksum = "68e7f6e8fe5b443f82b3f1e15abfa191128f71569148428e49449d01f6f49e8b" dependencies = [ - "serde", + "alloy-sol-macro-expander 0.8.5", + "alloy-sol-macro-input 0.8.5", + "proc-macro-error2", + "proc-macro2", + "quote", + "syn 2.0.77", ] [[package]] -name = "bindgen" -version = "0.65.1" +name = "alloy-sol-macro-expander" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfdf7b466f9a4903edc73f95d6d2bcd5baf8ae620638762244d3f60143643cc5" +checksum = "867a5469d61480fea08c7333ffeca52d5b621f5ca2e44f271b117ec1fc9a0525" dependencies = [ - "bitflags 1.3.2", - "cexpr", - "clang-sys", - "lazy_static", - "lazycell", - "peeking_take_while", - "prettyplease", + "alloy-json-abi 0.7.7", + "alloy-sol-macro-input 0.7.7", + "const-hex", + "heck 0.5.0", + "indexmap 2.5.0", + "proc-macro-error", "proc-macro2", "quote", - "regex", - "rustc-hash", - "shlex", "syn 2.0.77", + "syn-solidity 0.7.7", + "tiny-keccak", ] [[package]] -name = "bitflags" -version = "1.3.2" +name = "alloy-sol-macro-expander" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" +checksum = "6b96ce28d2fde09abb6135f410c41fad670a3a770b6776869bd852f1df102e6f" +dependencies = [ + "alloy-json-abi 0.8.5", + "alloy-sol-macro-input 0.8.5", + "const-hex", + "heck 0.5.0", + "indexmap 2.5.0", + "proc-macro-error2", + "proc-macro2", + "quote", + "syn 2.0.77", + "syn-solidity 0.8.5", + "tiny-keccak", +] [[package]] -name = "bitflags" -version = "2.6.0" +name = "alloy-sol-macro-input" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" +checksum = "2e482dc33a32b6fadbc0f599adea520bd3aaa585c141a80b404d0a3e3fa72528" +dependencies = [ + "alloy-json-abi 0.7.7", + "const-hex", + "dunce", + "heck 0.5.0", + "proc-macro2", + "quote", + "serde_json", + "syn 2.0.77", + "syn-solidity 0.7.7", +] [[package]] -name = "bitmaps" -version = "2.1.0" +name = "alloy-sol-macro-input" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "031043d04099746d8db04daf1fa424b2bc8bd69d92b25962dcde24da39ab64a2" +checksum = "906746396a8296537745711630d9185746c0b50c033d5e9d18b0a6eba3d53f90" dependencies = [ - "typenum", + "alloy-json-abi 0.8.5", + "const-hex", + "dunce", + "heck 0.5.0", + "proc-macro2", + "quote", + "serde_json", + "syn 2.0.77", + "syn-solidity 0.8.5", ] [[package]] -name = "bitvec" -version = "1.0.1" +name = "alloy-sol-type-parser" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" +checksum = "cbcba3ca07cf7975f15d871b721fb18031eec8bce51103907f6dcce00b255d98" dependencies = [ - "funty", - "radium", - "tap", - "wyz", + "serde", + "winnow", ] [[package]] -name = "blake2" -version = "0.10.6" +name = "alloy-sol-type-parser" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" +checksum = "bc85178909a49c8827ffccfc9103a7ce1767ae66a801b69bdc326913870bf8e6" dependencies = [ - "digest 0.10.7", + "serde", + "winnow", ] [[package]] -name = "blake3" -version = "0.3.8" +name = "alloy-sol-types" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b64485778c4f16a6a5a9d335e80d449ac6c70cdd6a06d2af18a6f6f775a125b3" +checksum = "a91ca40fa20793ae9c3841b83e74569d1cc9af29a2f5237314fd3452d51e38c7" dependencies = [ - "arrayref", - "arrayvec", - "cc", - "cfg-if 0.1.10", - "constant_time_eq", - "crypto-mac", - "digest 0.9.0", + "alloy-json-abi 0.7.7", + "alloy-primitives 0.7.7", + "alloy-sol-macro 0.7.7", + "const-hex", + "serde", ] [[package]] -name = "block-buffer" -version = "0.10.4" +name = "alloy-sol-types" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +checksum = "d86a533ce22525969661b25dfe296c112d35eb6861f188fd284f8bd4bb3842ae" dependencies = [ - "generic-array 0.14.7", + "alloy-json-abi 0.8.5", + "alloy-primitives 0.8.5", + "alloy-sol-macro 0.8.5", + "const-hex", + "serde", ] [[package]] -name = "block-padding" -version = "0.3.3" +name = "alloy-transport" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8894febbff9f758034a5b8e12d87918f56dfc64a8e1fe757d65e29041538d93" +checksum = "01b51a291f949f755e6165c3ed562883175c97423703703355f4faa4b7d0a57c" dependencies = [ - "generic-array 0.14.7", + "alloy-json-rpc 0.1.4", + "base64 0.22.1", + "futures-util", + "futures-utils-wasm", + "serde", + "serde_json", + "thiserror", + "tokio", + "tower 0.4.13", + "tracing", + "url", ] [[package]] -name = "block_on_proc" -version = "0.2.0" +name = "alloy-transport" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b872f3528eeeb4370ee73b51194dc1cd93680c2d0eb6c7a223889038d2c1a167" +checksum = "2ac3e97dad3d31770db0fc89bd6a63b789fbae78963086733f960cf32c483904" dependencies = [ - "quote", - "syn 1.0.109", + "alloy-json-rpc 0.4.2", + "base64 0.22.1", + "futures-util", + "futures-utils-wasm", + "serde", + "serde_json", + "thiserror", + "tokio", + "tower 0.5.1", + "tracing", + "url", ] [[package]] -name = "blocking" -version = "1.6.1" +name = "alloy-transport-http" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea" +checksum = "86d65871f9f1cafe1ed25cde2f1303be83e6473e995a2d56c275ae4fcce6119c" dependencies = [ - "async-channel", - "async-task", - "futures-io", - "futures-lite 2.3.0", - "piper", + "alloy-json-rpc 0.1.4", + "alloy-transport 0.1.4", + "reqwest 0.12.8", + "serde_json", + "tower 0.4.13", + "tracing", + "url", ] [[package]] -name = "bls-utils" -version = "0.1.0" +name = "alloy-transport-http" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b367dcccada5b28987c2296717ee04b9a5637aacd78eacb1726ef211678b5212" dependencies = [ - "clap", - "rand", + "alloy-json-rpc 0.4.2", + "alloy-transport 0.4.2", + "reqwest 0.12.8", + "serde_json", + "tower 0.5.1", + "tracing", + "url", +] + +[[package]] +name = "alloy-transport-ipc" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b90cf9cde7f2fce617da52768ee28f522264b282d148384a4ca0ea85af04fa3a" +dependencies = [ + "alloy-json-rpc 0.4.2", + "alloy-pubsub 0.4.2", + "alloy-transport 0.4.2", + "bytes", + "futures", + "interprocess", + "pin-project", + "serde_json", + "tokio", + "tokio-util 0.7.12", + "tracing", +] + +[[package]] +name = "alloy-transport-ws" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aec83fd052684556c78c54df111433493267234d82321c2236560c752f595f20" +dependencies = [ + "alloy-pubsub 0.1.4", + "alloy-transport 0.1.4", + "futures", + "http 1.1.0", + "rustls 0.23.13", + "serde_json", + "tokio", + "tokio-tungstenite 0.23.1", + "tracing", + "ws_stream_wasm", +] + +[[package]] +name = "alloy-transport-ws" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7153b88690de6a50bba81c11e1d706bc41dbb90126d607404d60b763f6a3947f" +dependencies = [ + "alloy-pubsub 0.4.2", + "alloy-transport 0.4.2", + "futures", + "http 1.1.0", + "rustls 0.23.13", + "serde_json", + "tokio", + "tokio-tungstenite 0.24.0", + "tracing", + "ws_stream_wasm", +] + +[[package]] +name = "amq-protocol" +version = "7.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f0234884b3641db74d22ccc20fc2594db5f23d7d41ade5c93d7ee33d200960c" +dependencies = [ + "amq-protocol-tcp", + "amq-protocol-types", + "amq-protocol-uri", + "cookie-factory", + "nom", + "serde", +] + +[[package]] +name = "amq-protocol-tcp" +version = "7.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "265dca43d9dbb3d5bbb0b3ef1b0cd9044ce3aa5d697d5b66cde974d1f6063f09" +dependencies = [ + "amq-protocol-uri", + "tcp-stream", + "tracing", +] + +[[package]] +name = "amq-protocol-types" +version = "7.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7412353b58923fa012feb9a64ccc0c811747babee2e5a2fd63eb102dc8054c3" +dependencies = [ + "cookie-factory", + "nom", "serde", "serde_json", - "zeropool-bn", ] [[package]] -name = "blst" -version = "0.3.13" +name = "amq-protocol-uri" +version = "7.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2be91352c805d5704784e079117d5291fd5bf2569add53c914ebce6d1a795d33" +dependencies = [ + "amq-protocol-types", + "percent-encoding", + "url", +] + +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "anstream" +version = "0.6.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64e15c1ab1f89faffbf04a634d5e1962e9074f2741eef6d97f3c4e322426d526" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "is_terminal_polyfill", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bec1de6f59aedf83baf9ff929c98f2ad654b97c9510f4e70cf6f661d49fd5b1" + +[[package]] +name = "anstyle-parse" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb47de1e80c2b463c735db5b217a0ddc39d612e7ac9e2e96a5aed1f57616c1cb" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d36fc52c7f6c869915e99412912f22093507da8d9e942ceaf66fe4b7c14422a" +dependencies = [ + "windows-sys 0.52.0", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5bf74e1b6e971609db8ca7a9ce79fd5768ab6ae46441c572e46cf596f59e57f8" +dependencies = [ + "anstyle", + "windows-sys 0.52.0", +] + +[[package]] +name = "anyhow" +version = "1.0.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86fdf8605db99b54d3cd748a44c6d04df638eb5dafb219b135d0149bd0db01f6" + +[[package]] +name = "arbitrary" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d5a26814d8dcb93b0e5a0ff3c6d80a8843bafb21b39e8e18a6f05471870e110" +dependencies = [ + "derive_arbitrary", +] + +[[package]] +name = "arc-swap" +version = "1.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69f7f8c3906b62b754cd5326047894316021dcfe5a194c8ea52bdd94934a3457" + +[[package]] +name = "ark-bn254" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a22f4561524cd949590d78d7d4c5df8f592430d221f7f3c9497bbafd8972120f" +dependencies = [ + "ark-ec", + "ark-ff 0.4.2", + "ark-std 0.4.0", +] + +[[package]] +name = "ark-ec" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "defd9a439d56ac24968cca0571f598a61bc8c55f71d50a89cda591cb750670ba" +dependencies = [ + "ark-ff 0.4.2", + "ark-poly", + "ark-serialize 0.4.2", + "ark-std 0.4.0", + "derivative", + "hashbrown 0.13.2", + "itertools 0.10.5", + "num-traits", + "zeroize", +] + +[[package]] +name = "ark-ff" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b3235cc41ee7a12aaaf2c575a2ad7b46713a8a50bda2fc3b003a04845c05dd6" +dependencies = [ + "ark-ff-asm 0.3.0", + "ark-ff-macros 0.3.0", + "ark-serialize 0.3.0", + "ark-std 0.3.0", + "derivative", + "num-bigint 0.4.6", + "num-traits", + "paste", + "rustc_version 0.3.3", + "zeroize", +] + +[[package]] +name = "ark-ff" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec847af850f44ad29048935519032c33da8aa03340876d351dfab5660d2966ba" +dependencies = [ + "ark-ff-asm 0.4.2", + "ark-ff-macros 0.4.2", + "ark-serialize 0.4.2", + "ark-std 0.4.0", + "derivative", + "digest 0.10.7", + "itertools 0.10.5", + "num-bigint 0.4.6", + "num-traits", + "paste", + "rustc_version 0.4.1", + "zeroize", +] + +[[package]] +name = "ark-ff-asm" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db02d390bf6643fb404d3d22d31aee1c4bc4459600aef9113833d17e786c6e44" +dependencies = [ + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-ff-asm" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" +dependencies = [ + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-ff-macros" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db2fd794a08ccb318058009eefdf15bcaaaaf6f8161eb3345f907222bac38b20" +dependencies = [ + "num-bigint 0.4.6", + "num-traits", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-ff-macros" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" +dependencies = [ + "num-bigint 0.4.6", + "num-traits", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-poly" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d320bfc44ee185d899ccbadfa8bc31aab923ce1558716e1997a1e74057fe86bf" +dependencies = [ + "ark-ff 0.4.2", + "ark-serialize 0.4.2", + "ark-std 0.4.0", + "derivative", + "hashbrown 0.13.2", +] + +[[package]] +name = "ark-serialize" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d6c2b318ee6e10f8c2853e73a83adc0ccb88995aa978d8a3408d492ab2ee671" +dependencies = [ + "ark-std 0.3.0", + "digest 0.9.0", +] + +[[package]] +name = "ark-serialize" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" +dependencies = [ + "ark-serialize-derive", + "ark-std 0.4.0", + "digest 0.10.7", + "num-bigint 0.4.6", +] + +[[package]] +name = "ark-serialize-derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae3281bc6d0fd7e549af32b52511e1302185bd688fd3359fa36423346ff682ea" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-std" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1df2c09229cbc5a028b1d70e00fdb2acee28b1055dfb5ca73eea49c5a25c4e7c" +dependencies = [ + "num-traits", + "rand 0.8.5", +] + +[[package]] +name = "ark-std" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" +dependencies = [ + "num-traits", + "rand 0.8.5", +] + +[[package]] +name = "arrayref" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" + +[[package]] +name = "arrayvec" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" + +[[package]] +name = "arrayvec" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" + +[[package]] +name = "ascii-canvas" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8824ecca2e851cec16968d54a01dd372ef8f95b244fb84b84e70128be347c3c6" +dependencies = [ + "term", +] + +[[package]] +name = "asn1-rs" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5493c3bedbacf7fd7382c6346bbd66687d12bbaad3a89a2d2c303ee6cf20b048" +dependencies = [ + "asn1-rs-derive", + "asn1-rs-impl", + "displaydoc", + "nom", + "num-traits", + "rusticata-macros", + "thiserror", + "time", +] + +[[package]] +name = "asn1-rs-derive" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "965c2d33e53cb6b267e148a4cb0760bc01f4904c1cd4bb4002a085bb016d1490" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.77", + "synstructure", +] + +[[package]] +name = "asn1-rs-impl" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b18050c2cd6fe86c3a76584ef5e0baf286d038cda203eb6223df2cc413565f7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.77", +] + +[[package]] +name = "assert_matches" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b34d609dfbaf33d6889b2b7106d3ca345eacad44200913df5ba02bfd31d2ba9" + +[[package]] +name = "async-broadcast" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20cd0e2e25ea8e5f7e9df04578dc6cf5c83577fd09b1a46aaf5c85e1c33f2a7e" +dependencies = [ + "event-listener 5.3.1", + "event-listener-strategy", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-channel" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a" +dependencies = [ + "concurrent-queue", + "event-listener-strategy", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-executor" +version = "1.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30ca9a001c1e8ba5149f91a74362376cc6bc5b919d92d988668657bd570bdcec" +dependencies = [ + "async-task", + "concurrent-queue", + "fastrand 2.1.1", + "futures-lite 2.3.0", + "slab", +] + +[[package]] +name = "async-global-executor" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05b1b633a2115cd122d73b955eadd9916c18c8f510ec9cd1686404c60ad1c29c" +dependencies = [ + "async-channel", + "async-executor", + "async-io 2.3.4", + "async-lock 3.4.0", + "blocking", + "futures-lite 2.3.0", + "once_cell", +] + +[[package]] +name = "async-global-executor-trait" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33dd14c5a15affd2abcff50d84efd4009ada28a860f01c14f9d654f3e81b3f75" +dependencies = [ + "async-global-executor", + "async-trait", + "executor-trait", +] + +[[package]] +name = "async-io" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af" +dependencies = [ + "async-lock 2.8.0", + "autocfg", + "cfg-if 1.0.0", + "concurrent-queue", + "futures-lite 1.13.0", + "log", + "parking", + "polling 2.8.0", + "rustix 0.37.27", + "slab", + "socket2 0.4.10", + "waker-fn", +] + +[[package]] +name = "async-io" +version = "2.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "444b0228950ee6501b3568d3c93bf1176a1fdbc3b758dcd9475046d30f4dc7e8" +dependencies = [ + "async-lock 3.4.0", + "cfg-if 1.0.0", + "concurrent-queue", + "futures-io", + "futures-lite 2.3.0", + "parking", + "polling 3.7.3", + "rustix 0.38.37", + "slab", + "tracing", + "windows-sys 0.59.0", +] + +[[package]] +name = "async-lock" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b" +dependencies = [ + "event-listener 2.5.3", +] + +[[package]] +name = "async-lock" +version = "3.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" +dependencies = [ + "event-listener 5.3.1", + "event-listener-strategy", + "pin-project-lite", +] + +[[package]] +name = "async-reactor-trait" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a6012d170ad00de56c9ee354aef2e358359deb1ec504254e0e5a3774771de0e" +dependencies = [ + "async-io 1.13.0", + "async-trait", + "futures-core", + "reactor-trait", +] + +[[package]] +name = "async-stream" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd56dd203fef61ac097dd65721a419ddccb106b2d2b70ba60a6b529f03961a51" +dependencies = [ + "async-stream-impl", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-stream-impl" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.77", +] + +[[package]] +name = "async-task" +version = "4.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" + +[[package]] +name = "async-trait" +version = "0.1.82" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a27b8a3a6e1a44fa4c8baf1f653e4172e81486d4941f2237e20dc2d0cf4ddff1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.77", +] + +[[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 = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + +[[package]] +name = "attohttpc" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "262c3f7f5d61249d8c00e5546e2685cd15ebeeb1bc0f3cc5449350a1cb07319e" +dependencies = [ + "http 0.2.12", + "log", + "native-tls", + "openssl", + "serde", + "serde_json", + "url", + "wildmatch", +] + +[[package]] +name = "auto_impl" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c87f3f15e7794432337fc718554eaa4dc8f04c9677a950ffe366f20a162ae42" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.77", +] + +[[package]] +name = "autocfg" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" + +[[package]] +name = "awc" +version = "3.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79049b2461279b886e46f1107efc347ebecc7b88d74d023dda010551a124967b" +dependencies = [ + "actix-codec", + "actix-http", + "actix-rt", + "actix-service", + "actix-tls", + "actix-utils", + "base64 0.22.1", + "bytes", + "cfg-if 1.0.0", + "cookie", + "derive_more 0.99.18", + "futures-core", + "futures-util", + "h2 0.3.26", + "http 0.2.12", + "itoa", + "log", + "mime", + "openssl", + "percent-encoding", + "pin-project-lite", + "rand 0.8.5", + "serde", + "serde_json", + "serde_urlencoded", + "tokio", +] + +[[package]] +name = "aws-credential-types" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60e8f6b615cb5fc60a98132268508ad104310f0cfb25a1c22eee76efdf9154da" +dependencies = [ + "aws-smithy-async", + "aws-smithy-runtime-api", + "aws-smithy-types", + "zeroize", +] + +[[package]] +name = "aws-creds" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5aeeee1a5defa63cba39097a510dfe63ef53658fc8995202a610f6a8a4d03639" +dependencies = [ + "attohttpc", + "dirs 4.0.0", + "rust-ini", + "serde", + "serde-xml-rs", + "thiserror", + "time", + "url", +] + +[[package]] +name = "aws-lc-rs" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdd82dba44d209fddb11c190e0a94b78651f95299598e472215667417a03ff1d" +dependencies = [ + "aws-lc-sys", + "mirai-annotations", + "paste", + "zeroize", +] + +[[package]] +name = "aws-lc-sys" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df7a4168111d7eb622a31b214057b8509c0a7e1794f44c546d742330dc793972" +dependencies = [ + "bindgen 0.69.4", + "cc", + "cmake", + "dunce", + "fs_extra", + "libc", + "paste", +] + +[[package]] +name = "aws-region" +version = "0.25.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9aed3f9c7eac9be28662fdb3b0f4d1951e812f7c64fed4f0327ba702f459b3b" +dependencies = [ + "thiserror", +] + +[[package]] +name = "aws-runtime" +version = "1.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a10d5c055aa540164d9561a0e2e74ad30f0dcf7393c3a92f6733ddf9c5762468" +dependencies = [ + "aws-credential-types", + "aws-sigv4", + "aws-smithy-async", + "aws-smithy-http", + "aws-smithy-runtime", + "aws-smithy-runtime-api", + "aws-smithy-types", + "aws-types", + "bytes", + "fastrand 2.1.1", + "http 0.2.12", + "http-body 0.4.6", + "once_cell", + "percent-encoding", + "pin-project-lite", + "tracing", + "uuid 1.10.0", +] + +[[package]] +name = "aws-sdk-kms" +version = "1.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e33590e8d45206fdc4273ded8a1f292bcceaadd513037aa790fc67b237bc30ee" +dependencies = [ + "aws-credential-types", + "aws-runtime", + "aws-smithy-async", + "aws-smithy-http", + "aws-smithy-json", + "aws-smithy-runtime", + "aws-smithy-runtime-api", + "aws-smithy-types", + "aws-types", + "bytes", + "http 0.2.12", + "once_cell", + "regex-lite", + "tracing", +] + +[[package]] +name = "aws-sigv4" +version = "1.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc8db6904450bafe7473c6ca9123f88cc11089e41a025408f992db4e22d3be68" +dependencies = [ + "aws-credential-types", + "aws-smithy-http", + "aws-smithy-runtime-api", + "aws-smithy-types", + "bytes", + "form_urlencoded", + "hex", + "hmac", + "http 0.2.12", + "http 1.1.0", + "once_cell", + "percent-encoding", + "sha2", + "time", + "tracing", +] + +[[package]] +name = "aws-smithy-async" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62220bc6e97f946ddd51b5f1361f78996e704677afc518a4ff66b7a72ea1378c" +dependencies = [ + "futures-util", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "aws-smithy-http" +version = "0.60.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c8bc3e8fdc6b8d07d976e301c02fe553f72a39b7a9fea820e023268467d7ab6" +dependencies = [ + "aws-smithy-runtime-api", + "aws-smithy-types", + "bytes", + "bytes-utils", + "futures-core", + "http 0.2.12", + "http-body 0.4.6", + "once_cell", + "percent-encoding", + "pin-project-lite", + "pin-utils", + "tracing", +] + +[[package]] +name = "aws-smithy-json" +version = "0.60.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4683df9469ef09468dad3473d129960119a0d3593617542b7d52086c8486f2d6" +dependencies = [ + "aws-smithy-types", +] + +[[package]] +name = "aws-smithy-runtime" +version = "1.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1ce695746394772e7000b39fe073095db6d45a862d0767dd5ad0ac0d7f8eb87" +dependencies = [ + "aws-smithy-async", + "aws-smithy-http", + "aws-smithy-runtime-api", + "aws-smithy-types", + "bytes", + "fastrand 2.1.1", + "h2 0.3.26", + "http 0.2.12", + "http-body 0.4.6", + "http-body 1.0.1", + "httparse", + "hyper 0.14.30", + "hyper-rustls 0.24.2", + "once_cell", + "pin-project-lite", + "pin-utils", + "rustls 0.21.12", + "tokio", + "tracing", +] + +[[package]] +name = "aws-smithy-runtime-api" +version = "1.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e086682a53d3aa241192aa110fa8dfce98f2f5ac2ead0de84d41582c7e8fdb96" +dependencies = [ + "aws-smithy-async", + "aws-smithy-types", + "bytes", + "http 0.2.12", + "http 1.1.0", + "pin-project-lite", + "tokio", + "tracing", + "zeroize", +] + +[[package]] +name = "aws-smithy-types" +version = "1.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147100a7bea70fa20ef224a6bad700358305f5dc0f84649c53769761395b355b" +dependencies = [ + "base64-simd", + "bytes", + "bytes-utils", + "futures-core", + "http 0.2.12", + "http 1.1.0", + "http-body 0.4.6", + "http-body 1.0.1", + "http-body-util", + "itoa", + "num-integer", + "pin-project-lite", + "pin-utils", + "ryu", + "serde", + "time", + "tokio", + "tokio-util 0.7.12", +] + +[[package]] +name = "aws-types" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5221b91b3e441e6675310829fd8984801b772cb1546ef6c0e54dec9f1ac13fef" +dependencies = [ + "aws-credential-types", + "aws-smithy-async", + "aws-smithy-runtime-api", + "aws-smithy-types", + "rustc_version 0.4.1", + "tracing", +] + +[[package]] +name = "axum" +version = "0.6.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b829e4e32b91e643de6eafe82b1d90675f5874230191a4ffbc1b336dec4d6bf" +dependencies = [ + "async-trait", + "axum-core", + "bitflags 1.3.2", + "bytes", + "futures-util", + "http 0.2.12", + "http-body 0.4.6", + "hyper 0.14.30", + "itoa", + "matchit", + "memchr", + "mime", + "percent-encoding", + "pin-project-lite", + "rustversion", + "serde", + "sync_wrapper 0.1.2", + "tower 0.4.13", + "tower-layer", + "tower-service", +] + +[[package]] +name = "axum-core" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "759fa577a247914fd3f7f76d62972792636412fbfd634cd452f6a385a74d2d2c" +dependencies = [ + "async-trait", + "bytes", + "futures-util", + "http 0.2.12", + "http-body 0.4.6", + "mime", + "rustversion", + "tower-layer", + "tower-service", +] + +[[package]] +name = "backtrace" +version = "0.3.74" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" +dependencies = [ + "addr2line 0.24.1", + "cfg-if 1.0.0", + "libc", + "miniz_oxide", + "object 0.36.4", + "rustc-demangle", + "windows-targets 0.52.6", +] + +[[package]] +name = "base16ct" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" + +[[package]] +name = "base64" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3441f0f7b02788e948e47f457ca01f1d7e6d92c693bc132c22b087d3141c03ff" + +[[package]] +name = "base64" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" + +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "base64-simd" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "339abbe78e73178762e23bea9dfd08e697eb3f3301cd4be981c0f78ba5859195" +dependencies = [ + "outref", + "vsimd", +] + +[[package]] +name = "base64ct" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" + +[[package]] +name = "bech32" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d86b93f97252c47b41663388e6d155714a9d0c398b99f1005cbc5f978b29f445" + +[[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.65.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfdf7b466f9a4903edc73f95d6d2bcd5baf8ae620638762244d3f60143643cc5" +dependencies = [ + "bitflags 1.3.2", + "cexpr", + "clang-sys", + "lazy_static", + "lazycell", + "peeking_take_while", + "prettyplease", + "proc-macro2", + "quote", + "regex", + "rustc-hash 1.1.0", + "shlex", + "syn 2.0.77", +] + +[[package]] +name = "bindgen" +version = "0.69.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a00dc851838a2120612785d195287475a3ac45514741da670b735818822129a0" +dependencies = [ + "bitflags 2.6.0", + "cexpr", + "clang-sys", + "itertools 0.12.1", + "lazy_static", + "lazycell", + "log", + "prettyplease", + "proc-macro2", + "quote", + "regex", + "rustc-hash 1.1.0", + "shlex", + "syn 2.0.77", + "which", +] + +[[package]] +name = "bit-set" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" +dependencies = [ + "bit-vec", +] + +[[package]] +name = "bit-vec" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" + +[[package]] +name = "bitmaps" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "031043d04099746d8db04daf1fa424b2bc8bd69d92b25962dcde24da39ab64a2" +dependencies = [ + "typenum", +] + +[[package]] +name = "bitvec" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" +dependencies = [ + "funty", + "radium", + "tap", + "wyz", +] + +[[package]] +name = "blake2" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a4e37d16930f5459780f5621038b6382b9bb37c19016f39fb6b5808d831f174" +dependencies = [ + "crypto-mac", + "digest 0.9.0", + "opaque-debug", +] + +[[package]] +name = "blake2" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "blake3" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b64485778c4f16a6a5a9d335e80d449ac6c70cdd6a06d2af18a6f6f775a125b3" +dependencies = [ + "arrayref", + "arrayvec 0.5.2", + "cc", + "cfg-if 0.1.10", + "constant_time_eq", + "crypto-mac", + "digest 0.9.0", +] + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array 0.14.7", +] + +[[package]] +name = "block-padding" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8894febbff9f758034a5b8e12d87918f56dfc64a8e1fe757d65e29041538d93" +dependencies = [ + "generic-array 0.14.7", +] + +[[package]] +name = "block_on_proc" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b872f3528eeeb4370ee73b51194dc1cd93680c2d0eb6c7a223889038d2c1a167" +dependencies = [ + "quote", + "syn 1.0.109", +] + +[[package]] +name = "blocking" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea" +dependencies = [ + "async-channel", + "async-task", + "futures-io", + "futures-lite 2.3.0", + "piper", +] + +[[package]] +name = "bls-utils" +version = "0.1.0" +dependencies = [ + "clap", + "rand 0.8.5", + "serde", + "serde_json", + "zeropool-bn", +] + +[[package]] +name = "blst" +version = "0.3.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4378725facc195f1a538864863f6de233b500a8862747e7f165078a419d5e874" +dependencies = [ + "cc", + "glob", + "threadpool", + "zeroize", +] + +[[package]] +name = "bollard" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0aed08d3adb6ebe0eff737115056652670ae290f177759aac19c30456135f94c" +dependencies = [ + "base64 0.22.1", + "bollard-stubs", + "bytes", + "futures-core", + "futures-util", + "hex", + "home", + "http 1.1.0", + "http-body-util", + "hyper 1.4.1", + "hyper-named-pipe", + "hyper-rustls 0.26.0", + "hyper-util", + "hyperlocal-next", + "log", + "pin-project-lite", + "rustls 0.22.4", + "rustls-native-certs 0.7.3", + "rustls-pemfile 2.1.3", + "rustls-pki-types", + "serde", + "serde_derive", + "serde_json", + "serde_repr", + "serde_urlencoded", + "thiserror", + "tokio", + "tokio-util 0.7.12", + "tower-service", + "url", + "winapi", +] + +[[package]] +name = "bollard-stubs" +version = "1.44.0-rc.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "709d9aa1c37abb89d40f19f5d0ad6f0d88cb1581264e571c9350fc5bb89cf1c5" +dependencies = [ + "serde", + "serde_repr", + "serde_with", +] + +[[package]] +name = "borsh" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15bf3650200d8bffa99015595e10f1fbd17de07abbc25bb067da79e769939bfa" +dependencies = [ + "borsh-derive 0.9.3", + "hashbrown 0.11.2", +] + +[[package]] +name = "borsh" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6362ed55def622cddc70a4746a68554d7b687713770de539e59a739b249f8ed" +dependencies = [ + "borsh-derive 1.5.1", + "cfg_aliases", +] + +[[package]] +name = "borsh-derive" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6441c552f230375d18e3cc377677914d2ca2b0d36e52129fe15450a2dce46775" +dependencies = [ + "borsh-derive-internal", + "borsh-schema-derive-internal", + "proc-macro-crate 0.1.5", + "proc-macro2", + "syn 1.0.109", +] + +[[package]] +name = "borsh-derive" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3ef8005764f53cd4dca619f5bf64cafd4664dada50ece25e4d81de54c80cc0b" +dependencies = [ + "once_cell", + "proc-macro-crate 3.2.0", + "proc-macro2", + "quote", + "syn 2.0.77", + "syn_derive", +] + +[[package]] +name = "borsh-derive-internal" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5449c28a7b352f2d1e592a8a28bf139bc71afb0764a14f3c02500935d8c44065" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "borsh-schema-derive-internal" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdbd5696d8bfa21d53d9fe39a714a18538bad11492a42d066dbbc395fb1951c0" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "brotli" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74f7971dbd9326d58187408ab83117d8ac1bb9c17b085fdacd1cf2f598719b6b" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", + "brotli-decompressor", +] + +[[package]] +name = "brotli-decompressor" +version = "4.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a45bd2e4095a8b518033b128020dd4a55aab1c0a381ba4404a472630f4bc362" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", +] + +[[package]] +name = "bs58" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" + +[[package]] +name = "bs58" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" +dependencies = [ + "sha2", + "tinyvec", +] + +[[package]] +name = "bumpalo" +version = "3.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" + +[[package]] +name = "byte-slice-cast" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3ac9f8b63eca6fd385229b3675f6cc0dc5c8a5c8a54a59d4f52ffd670d87b0c" + +[[package]] +name = "bytecheck" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23cdc57ce23ac53c931e88a43d06d070a6fd142f2617be5855eb75efc9beb1c2" +dependencies = [ + "bytecheck_derive", + "ptr_meta", + "simdutf8", +] + +[[package]] +name = "bytecheck_derive" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3db406d29fbcd95542e92559bed4d8ad92636d1ca8b3b72ede10b4bcc010e659" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8318a53db07bb3f8dca91a600466bdb3f2eaadeedfdbcf02e1accbad9271ba50" +dependencies = [ + "serde", +] + +[[package]] +name = "bytes-utils" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dafe3a8757b027e2be6e4e5601ed563c55989fcf1546e933c66c8eb3a058d35" +dependencies = [ + "bytes", + "either", +] + +[[package]] +name = "bytesize" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3e368af43e418a04d52505cf3dbc23dda4e3407ae2fa99fd0e4f308ce546acc" +dependencies = [ + "serde", +] + +[[package]] +name = "bytestring" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74d80203ea6b29df88012294f62733de21cfeab47f17b41af3a38bc30a03ee72" +dependencies = [ + "bytes", +] + +[[package]] +name = "bzip2" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bdb116a6ef3f6c3698828873ad02c3014b3c85cadb88496095628e3ef1e347f8" +dependencies = [ + "bzip2-sys", + "libc", +] + +[[package]] +name = "bzip2-sys" +version = "0.1.11+1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc" +dependencies = [ + "cc", + "libc", + "pkg-config", +] + +[[package]] +name = "c-kzg" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0307f72feab3300336fb803a57134159f6e20139af1357f36c54cb90d8e8928" +dependencies = [ + "blst", + "cc", + "glob", + "hex", + "libc", + "once_cell", + "serde", +] + +[[package]] +name = "c2-chacha" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d27dae93fe7b1e0424dc57179ac396908c26b035a87234809f5c4dfd1b47dc80" +dependencies = [ + "cipher 0.2.5", + "ppv-lite86", +] + +[[package]] +name = "camino" +version = "1.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b96ec4966b5813e2c0507c1f86115c8c5abaadc3980879c3424042a02fd1ad3" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo-platform" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24b1f0365a6c6bb4020cd05806fd0d33c44d38046b8bd7f0e40814b9763cabfc" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo_metadata" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d886547e41f740c616ae73108f6eb70afe6d940c7bc697cb30f13daec073037" +dependencies = [ + "camino", + "cargo-platform", + "semver 1.0.23", + "serde", + "serde_json", + "thiserror", +] + +[[package]] +name = "cbc" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26b52a9543ae338f279b96b0b9fed9c8093744685043739079ce85cd58f289a6" +dependencies = [ + "cipher 0.4.4", +] + +[[package]] +name = "cbindgen" +version = "0.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fce8dd7fcfcbf3a0a87d8f515194b49d6135acab73e18bd380d1d93bb1a15eb" +dependencies = [ + "clap", + "heck 0.4.1", + "indexmap 2.5.0", + "log", + "proc-macro2", + "quote", + "serde", + "serde_json", + "syn 2.0.77", + "tempfile", + "toml 0.8.19", +] + +[[package]] +name = "cc" +version = "1.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d74707dde2ba56f86ae90effb3b43ddd369504387e718014de010cec7959800" +dependencies = [ + "jobserver", + "libc", + "shlex", +] + +[[package]] +name = "cexpr" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" +dependencies = [ + "nom", +] + +[[package]] +name = "cfg-if" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "cfg_aliases" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" + +[[package]] +name = "chrono" +version = "0.4.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "js-sys", + "num-traits", + "serde", + "wasm-bindgen", + "windows-targets 0.52.6", +] + +[[package]] +name = "cipher" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12f8e7987cbd042a63249497f41aed09f8e65add917ea6566effbc56578d6801" +dependencies = [ + "generic-array 0.14.7", +] + +[[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" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" +dependencies = [ + "glob", + "libc", + "libloading", +] + +[[package]] +name = "clap" +version = "4.5.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0956a43b323ac1afaffc053ed5c4b7c1f1800bacd1683c353aabbb752515dd3" +dependencies = [ + "clap_builder", + "clap_derive", +] + +[[package]] +name = "clap_builder" +version = "4.5.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d72166dd41634086d5803a47eb71ae740e61d84709c36f3c34110173db3961b" +dependencies = [ + "anstream", + "anstyle", + "clap_lex", + "strsim", +] + +[[package]] +name = "clap_derive" +version = "4.5.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ac6a0c7b1a9e9a5186361f67dfa1b88213572f427fb9ab038efb2bd8c582dab" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.77", +] + +[[package]] +name = "clap_lex" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1462739cb27611015575c0c11df5df7601141071f07518d56fcc1be504cbec97" + +[[package]] +name = "cloud-storage" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7602ac4363f68ac757d6b87dd5d850549a14d37489902ae639c06ecec06ad275" +dependencies = [ + "async-trait", + "base64 0.13.1", + "bytes", + "chrono", + "dotenv", + "futures-util", + "hex", + "jsonwebtoken 7.2.0", + "lazy_static", + "openssl", + "percent-encoding", + "reqwest 0.11.27", + "serde", + "serde_json", + "tokio", +] + +[[package]] +name = "cloudabi" +version = "0.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" +dependencies = [ + "bitflags 1.3.2", +] + +[[package]] +name = "cmake" +version = "0.1.51" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb1e43aa7fd152b1f968787f7dbcdeb306d1867ff373c69955211876c053f91a" +dependencies = [ + "cc", +] + +[[package]] +name = "cms" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b77c319abfd5219629c45c34c89ba945ed3c5e49fcde9d16b6c3885f118a730" +dependencies = [ + "const-oid", + "der", + "spki", + "x509-cert", +] + +[[package]] +name = "coins-bip32" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b6be4a5df2098cd811f3194f64ddb96c267606bffd9689ac7b0160097b01ad3" +dependencies = [ + "bs58 0.5.1", + "coins-core", + "digest 0.10.7", + "hmac", + "k256", + "serde", + "sha2", + "thiserror", +] + +[[package]] +name = "coins-bip39" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3db8fba409ce3dc04f7d804074039eb68b960b0829161f8e06c95fea3f122528" +dependencies = [ + "bitvec", + "coins-bip32", + "hmac", + "once_cell", + "pbkdf2 0.12.2", + "rand 0.8.5", + "sha2", + "thiserror", +] + +[[package]] +name = "coins-core" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5286a0843c21f8367f7be734f89df9b822e0321d8bcce8d6e735aadff7d74979" +dependencies = [ + "base64 0.21.7", + "bech32", + "bs58 0.5.1", + "digest 0.10.7", + "generic-array 0.14.7", + "hex", + "ripemd", + "serde", + "serde_derive", + "sha2", + "sha3", + "thiserror", +] + +[[package]] +name = "colorchoice" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3fd119d74b830634cea2a0f58bbd0d54540518a14397557951e79340abc28c0" + +[[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 = "console" +version = "0.15.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e1f83fc076bd6dd27517eacdf25fef6c4dfe5f1d7448bafaaf3a26f13b5e4eb" +dependencies = [ + "encode_unicode", + "lazy_static", + "libc", + "unicode-width", + "windows-sys 0.52.0", +] + +[[package]] +name = "const-hex" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94fb8a24a26d37e1ffd45343323dc9fe6654ceea44c12f2fcb3d7ac29e610bc6" +dependencies = [ + "cfg-if 1.0.0", + "cpufeatures", + "hex", + "proptest", + "serde", +] + +[[package]] +name = "const-oid" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" + +[[package]] +name = "constant_time_eq" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" + +[[package]] +name = "convert_case" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" + +[[package]] +name = "cookie" +version = "0.16.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e859cd57d0710d9e06c381b550c06e76992472a8c6d527aecd2fc673dcc231fb" +dependencies = [ + "percent-encoding", + "time", + "version_check", +] + +[[package]] +name = "cookie-factory" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9885fa71e26b8ab7855e2ec7cae6e9b380edff76cd052e07c683a0319d51b3a2" + +[[package]] +name = "core-foundation" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" + +[[package]] +name = "core-rs" +version = "0.1.0" +dependencies = [ + "alloy", + "anyhow", + "async-trait", + "futures-util", + "log", + "mockall", + "serde", + "serde_json", + "sha2", + "thiserror", + "tokio", + "tokio-test", +] + +[[package]] +name = "cpp_demangle" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eeaa953eaad386a53111e47172c2fedba671e5684c8dd601a5f474f4f118710f" +dependencies = [ + "cfg-if 1.0.0", +] + +[[package]] +name = "cpufeatures" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "608697df725056feaccfa42cffdaeeec3fccc4ffc38358ecd19b243e716a78e0" +dependencies = [ + "libc", +] + +[[package]] +name = "cranelift-bforest" +version = "0.101.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b5bb9245ec7dcc04d03110e538d31f0969d301c9d673145f4b4d5c3478539a3" +dependencies = [ + "cranelift-entity", +] + +[[package]] +name = "cranelift-codegen" +version = "0.101.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebb18d10e5ddac43ba4ca8fd4e310938569c3e484cc01b6372b27dc5bb4dfd28" +dependencies = [ + "bumpalo", + "cranelift-bforest", + "cranelift-codegen-meta", + "cranelift-codegen-shared", + "cranelift-control", + "cranelift-entity", + "cranelift-isle", + "gimli 0.28.1", + "hashbrown 0.14.5", + "log", + "regalloc2", + "smallvec", + "target-lexicon 0.12.16", +] + +[[package]] +name = "cranelift-codegen-meta" +version = "0.101.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a3ce6d22982c1b9b6b012654258bab1a13947bb12703518bef06b1a4867c3d6" +dependencies = [ + "cranelift-codegen-shared", +] + +[[package]] +name = "cranelift-codegen-shared" +version = "0.101.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47220fd4f9a0ce23541652b6f16f83868d282602c600d14934b2a4c166b4bd80" + +[[package]] +name = "cranelift-control" +version = "0.101.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed5a4c42672aea9b6e820046b52e47a1c05d3394a6cdf4cb3c3c4b702f954bd2" +dependencies = [ + "arbitrary", +] + +[[package]] +name = "cranelift-entity" +version = "0.101.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b4e9a3296fc827f9d35135dc2c0c8dd8d8359eb1ef904bae2d55d5bcb0c9f94" +dependencies = [ + "serde", + "serde_derive", +] + +[[package]] +name = "cranelift-frontend" +version = "0.101.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ec537d0f0b8e084517f3e7bfa1d89af343d7c7df455573fca9f272d4e01267" +dependencies = [ + "cranelift-codegen", + "log", + "smallvec", + "target-lexicon 0.12.16", +] + +[[package]] +name = "cranelift-isle" +version = "0.101.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45bab6d69919d210a50331d35cc6ce111567bc040aebac63a8ae130d0400a075" + +[[package]] +name = "cranelift-native" +version = "0.101.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f32e81605f352cf37af5463f11cd7deec7b6572741931a8d372f7fdd4a744f5d" +dependencies = [ + "cranelift-codegen", + "libc", + "target-lexicon 0.12.16", +] + +[[package]] +name = "cranelift-wasm" +version = "0.101.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0edaa4cbec1bc787395c074233df2652dd62f3e29d3ee60329514a0a51e6b045" +dependencies = [ + "cranelift-codegen", + "cranelift-entity", + "cranelift-frontend", + "itertools 0.10.5", + "log", + "smallvec", + "wasmparser 0.115.0", + "wasmtime-types", +] + +[[package]] +name = "crc" +version = "3.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69e6e4d7b33a94f0991c26729976b10ebde1d34c3ee82408fb536164fa10d636" +dependencies = [ + "crc-catalog", +] + +[[package]] +name = "crc-catalog" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" + +[[package]] +name = "crc32fast" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" +dependencies = [ + "cfg-if 1.0.0", +] + +[[package]] +name = "crossbeam" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1137cd7e7fc0fb5d3c5a8678be38ec56e819125d8d7907411fe24ccb943faca8" +dependencies = [ + "crossbeam-channel", + "crossbeam-deque", + "crossbeam-epoch", + "crossbeam-queue", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-channel" +version = "0.5.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4378725facc195f1a538864863f6de233b500a8862747e7f165078a419d5e874" +checksum = "33480d6946193aa8033910124896ca395333cae7e2d1113d1fef6c3272217df2" dependencies = [ - "cc", - "glob", - "threadpool", - "zeroize", + "crossbeam-utils", ] [[package]] -name = "borsh" -version = "0.9.3" +name = "crossbeam-deque" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15bf3650200d8bffa99015595e10f1fbd17de07abbc25bb067da79e769939bfa" +checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" dependencies = [ - "borsh-derive 0.9.3", - "hashbrown 0.11.2", + "crossbeam-epoch", + "crossbeam-utils", ] [[package]] -name = "borsh" -version = "1.5.1" +name = "crossbeam-epoch" +version = "0.9.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6362ed55def622cddc70a4746a68554d7b687713770de539e59a739b249f8ed" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" dependencies = [ - "borsh-derive 1.5.1", - "cfg_aliases", + "crossbeam-utils", ] [[package]] -name = "borsh-derive" -version = "0.9.3" +name = "crossbeam-queue" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6441c552f230375d18e3cc377677914d2ca2b0d36e52129fe15450a2dce46775" +checksum = "df0346b5d5e76ac2fe4e327c5fd1118d6be7c51dfb18f9b7922923f287471e35" dependencies = [ - "borsh-derive-internal", - "borsh-schema-derive-internal", - "proc-macro-crate 0.1.5", - "proc-macro2", - "syn 1.0.109", + "crossbeam-utils", ] [[package]] -name = "borsh-derive" -version = "1.5.1" +name = "crossbeam-utils" +version = "0.8.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3ef8005764f53cd4dca619f5bf64cafd4664dada50ece25e4d81de54c80cc0b" -dependencies = [ - "once_cell", - "proc-macro-crate 3.2.0", - "proc-macro2", - "quote", - "syn 2.0.77", - "syn_derive", -] +checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" [[package]] -name = "borsh-derive-internal" -version = "0.9.3" +name = "crunchy" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5449c28a7b352f2d1e592a8a28bf139bc71afb0764a14f3c02500935d8c44065" +checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" + +[[package]] +name = "crypto-bigint" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", + "generic-array 0.14.7", + "rand_core 0.6.4", + "subtle", + "zeroize", ] [[package]] -name = "borsh-schema-derive-internal" -version = "0.9.3" +name = "crypto-common" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdbd5696d8bfa21d53d9fe39a714a18538bad11492a42d066dbbc395fb1951c0" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", + "generic-array 0.14.7", + "typenum", ] [[package]] -name = "brotli" -version = "6.0.0" +name = "crypto-mac" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74f7971dbd9326d58187408ab83117d8ac1bb9c17b085fdacd1cf2f598719b6b" +checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab" dependencies = [ - "alloc-no-stdlib", - "alloc-stdlib", - "brotli-decompressor", + "generic-array 0.14.7", + "subtle", ] [[package]] -name = "brotli-decompressor" -version = "4.0.1" +name = "ctor" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a45bd2e4095a8b518033b128020dd4a55aab1c0a381ba4404a472630f4bc362" +checksum = "edb49164822f3ee45b17acd4a208cfc1251410cf0cad9a833234c9890774dd9f" dependencies = [ - "alloc-no-stdlib", - "alloc-stdlib", + "quote", + "syn 2.0.77", ] [[package]] -name = "bs58" -version = "0.4.0" +name = "ctr" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" +checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" +dependencies = [ + "cipher 0.4.4", +] [[package]] -name = "bumpalo" -version = "3.16.0" +name = "ctrlc" +version = "3.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" +checksum = "90eeab0aa92f3f9b4e87f258c72b139c207d251f9cbc1080a0086b86a8870dd3" +dependencies = [ + "nix 0.29.0", + "windows-sys 0.59.0", +] [[package]] -name = "bytecheck" -version = "0.6.12" +name = "curve25519-dalek" +version = "4.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23cdc57ce23ac53c931e88a43d06d070a6fd142f2617be5855eb75efc9beb1c2" +checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" dependencies = [ - "bytecheck_derive", - "ptr_meta", - "simdutf8", + "cfg-if 1.0.0", + "cpufeatures", + "curve25519-dalek-derive", + "digest 0.10.7", + "fiat-crypto", + "rand_core 0.6.4", + "rustc_version 0.4.1", + "subtle", + "zeroize", ] [[package]] -name = "bytecheck_derive" -version = "0.6.12" +name = "curve25519-dalek-derive" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3db406d29fbcd95542e92559bed4d8ad92636d1ca8b3b72ede10b4bcc010e659" +checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.77", ] [[package]] -name = "byteorder" -version = "1.5.0" +name = "darling" +version = "0.20.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" +checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" +dependencies = [ + "darling_core", + "darling_macro", +] [[package]] -name = "bytes" -version = "1.7.1" +name = "darling_core" +version = "0.20.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8318a53db07bb3f8dca91a600466bdb3f2eaadeedfdbcf02e1accbad9271ba50" +checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 2.0.77", +] [[package]] -name = "bytesize" -version = "1.3.0" +name = "darling_macro" +version = "0.20.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3e368af43e418a04d52505cf3dbc23dda4e3407ae2fa99fd0e4f308ce546acc" +checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ - "serde", + "darling_core", + "quote", + "syn 2.0.77", ] [[package]] -name = "bytestring" -version = "1.3.1" +name = "dashmap" +version = "5.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74d80203ea6b29df88012294f62733de21cfeab47f17b41af3a38bc30a03ee72" +checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" dependencies = [ - "bytes", + "cfg-if 1.0.0", + "hashbrown 0.14.5", + "lock_api 0.4.12", + "once_cell", + "parking_lot_core 0.9.10", ] [[package]] -name = "bzip2-sys" -version = "0.1.11+1.0.8" +name = "dashmap" +version = "6.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc" +checksum = "5041cc499144891f3790297212f32a74fb938e5136a14943f338ef9e0ae276cf" dependencies = [ - "cc", - "libc", - "pkg-config", + "cfg-if 1.0.0", + "crossbeam-utils", + "hashbrown 0.14.5", + "lock_api 0.4.12", + "once_cell", + "parking_lot_core 0.9.10", ] [[package]] -name = "cbc" -version = "0.1.2" +name = "data-encoding" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b52a9543ae338f279b96b0b9fed9c8093744685043739079ce85cd58f289a6" -dependencies = [ - "cipher", -] +checksum = "e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2" [[package]] -name = "cc" -version = "1.1.19" +name = "deadpool" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d74707dde2ba56f86ae90effb3b43ddd369504387e718014de010cec7959800" +checksum = "fb84100978c1c7b37f09ed3ce3e5f843af02c2a2c431bae5b19230dad2c1b490" dependencies = [ - "jobserver", - "libc", - "shlex", + "async-trait", + "deadpool-runtime", + "num_cpus", + "tokio", ] [[package]] -name = "cexpr" -version = "0.6.0" +name = "deadpool-lapin" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" +checksum = "ce11c0dc86703e59a8921bb9afee10b13c242e47624347bd3a3b545c41db556e" dependencies = [ - "nom", + "deadpool", + "lapin", + "tokio-executor-trait", ] [[package]] -name = "cfg-if" -version = "0.1.10" +name = "deadpool-runtime" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" +checksum = "092966b41edc516079bdf31ec78a2e0588d1d0c08f78b91d8307215928642b2b" +dependencies = [ + "tokio", +] [[package]] -name = "cfg-if" -version = "1.0.0" +name = "debugid" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +checksum = "bef552e6f588e446098f6ba40d89ac146c8c7b64aade83c051ee00bb5d2bc18d" +dependencies = [ + "uuid 1.10.0", +] [[package]] -name = "cfg_aliases" -version = "0.2.1" +name = "der" +version = "0.7.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" +checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0" +dependencies = [ + "const-oid", + "der_derive", + "flagset", + "pem-rfc7468", + "zeroize", +] [[package]] -name = "chrono" -version = "0.4.38" +name = "der-parser" +version = "9.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" +checksum = "5cd0a5c643689626bec213c4d8bd4d96acc8ffdb4ad4bb6bc16abf27d5f4b553" dependencies = [ - "android-tzdata", - "iana-time-zone", - "js-sys", + "asn1-rs", + "displaydoc", + "nom", + "num-bigint 0.4.6", "num-traits", - "serde", - "wasm-bindgen", - "windows-targets 0.52.6", + "rusticata-macros", ] [[package]] -name = "cipher" -version = "0.4.4" +name = "der_derive" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" +checksum = "8034092389675178f570469e6c3b0465d3d30b4505c294a6550db47f3c17ad18" dependencies = [ - "crypto-common", - "inout", + "proc-macro2", + "quote", + "syn 2.0.77", ] [[package]] -name = "clang-sys" -version = "1.8.1" +name = "deranged" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" dependencies = [ - "glob", - "libc", - "libloading", + "powerfmt", + "serde", ] [[package]] -name = "clap" -version = "4.5.17" +name = "derivative" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e5a21b8495e732f1b3c364c9949b201ca7bae518c502c80256c96ad79eaf6ac" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" dependencies = [ - "clap_builder", - "clap_derive", + "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] -name = "clap_builder" -version = "4.5.17" +name = "derive-where" +version = "1.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8cf2dd12af7a047ad9d6da2b6b249759a22a7abc0f474c1dae1777afa4b21a73" +checksum = "62d671cc41a825ebabc75757b62d3d168c577f9149b2d49ece1dad1f72119d25" dependencies = [ - "anstream", - "anstyle", - "clap_lex", - "strsim", + "proc-macro2", + "quote", + "syn 2.0.77", ] [[package]] -name = "clap_derive" -version = "4.5.13" +name = "derive_arbitrary" +version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "501d359d5f3dcaf6ecdeee48833ae73ec6e42723a1e52419c79abf9507eec0a0" +checksum = "67e77553c4162a157adbf834ebae5b415acbecbeafc7a74b0e886657506a7611" dependencies = [ - "heck 0.5.0", "proc-macro2", "quote", "syn 2.0.77", ] [[package]] -name = "clap_lex" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1462739cb27611015575c0c11df5df7601141071f07518d56fcc1be504cbec97" - -[[package]] -name = "cloud-storage" -version = "0.11.1" +name = "derive_more" +version = "0.99.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7602ac4363f68ac757d6b87dd5d850549a14d37489902ae639c06ecec06ad275" +checksum = "5f33878137e4dafd7fa914ad4e259e18a4e8e532b9617a2d0150262bf53abfce" dependencies = [ - "async-trait", - "base64 0.13.1", - "bytes", - "chrono", - "dotenv", - "futures-util", - "hex", - "jsonwebtoken", - "lazy_static", - "openssl", - "percent-encoding", - "reqwest", - "serde", - "serde_json", - "tokio", + "convert_case", + "proc-macro2", + "quote", + "rustc_version 0.4.1", + "syn 2.0.77", ] [[package]] -name = "cloudabi" -version = "0.0.3" +name = "derive_more" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" +checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05" dependencies = [ - "bitflags 1.3.2", + "derive_more-impl", ] [[package]] -name = "cms" -version = "0.2.3" +name = "derive_more-impl" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b77c319abfd5219629c45c34c89ba945ed3c5e49fcde9d16b6c3885f118a730" +checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" dependencies = [ - "const-oid", - "der", - "spki", - "x509-cert", + "proc-macro2", + "quote", + "syn 2.0.77", + "unicode-xid", ] [[package]] -name = "colorchoice" -version = "1.0.2" +name = "des" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3fd119d74b830634cea2a0f58bbd0d54540518a14397557951e79340abc28c0" +checksum = "ffdd80ce8ce993de27e9f063a444a4d53ce8e8db4c1f00cc03af5ad5a9867a1e" +dependencies = [ + "cipher 0.4.4", +] [[package]] -name = "concurrent-queue" -version = "2.5.0" +name = "digest" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" +checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5" dependencies = [ - "crossbeam-utils", + "generic-array 0.12.4", ] [[package]] -name = "console" -version = "0.15.8" +name = "digest" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e1f83fc076bd6dd27517eacdf25fef6c4dfe5f1d7448bafaaf3a26f13b5e4eb" +checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" dependencies = [ - "encode_unicode", - "lazy_static", - "libc", - "unicode-width", - "windows-sys 0.52.0", + "generic-array 0.14.7", ] [[package]] -name = "const-oid" -version = "0.9.6" +name = "digest" +version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "const-oid", + "crypto-common", + "subtle", +] [[package]] -name = "constant_time_eq" -version = "0.1.5" +name = "dirs" +version = "4.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" +checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059" +dependencies = [ + "dirs-sys 0.3.7", +] [[package]] -name = "convert_case" -version = "0.4.0" +name = "dirs" +version = "5.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" +checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" +dependencies = [ + "dirs-sys 0.4.1", +] [[package]] -name = "cookie" -version = "0.16.2" +name = "dirs-next" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e859cd57d0710d9e06c381b550c06e76992472a8c6d527aecd2fc673dcc231fb" +checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" dependencies = [ - "percent-encoding", - "time", - "version_check", + "cfg-if 1.0.0", + "dirs-sys-next", ] [[package]] -name = "cookie-factory" -version = "0.3.3" +name = "dirs-sys" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9885fa71e26b8ab7855e2ec7cae6e9b380edff76cd052e07c683a0319d51b3a2" +checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6" +dependencies = [ + "libc", + "redox_users", + "winapi", +] [[package]] -name = "core-foundation" -version = "0.9.4" +name = "dirs-sys" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" dependencies = [ - "core-foundation-sys", "libc", + "option-ext", + "redox_users", + "windows-sys 0.48.0", ] [[package]] -name = "core-foundation-sys" -version = "0.8.7" +name = "dirs-sys-next" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" +checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" +dependencies = [ + "libc", + "redox_users", + "winapi", +] [[package]] -name = "cpp_demangle" -version = "0.3.5" +name = "displaydoc" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eeaa953eaad386a53111e47172c2fedba671e5684c8dd601a5f474f4f118710f" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ - "cfg-if 1.0.0", + "proc-macro2", + "quote", + "syn 2.0.77", ] [[package]] -name = "cpufeatures" -version = "0.2.14" +name = "dissimilar" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "608697df725056feaccfa42cffdaeeec3fccc4ffc38358ecd19b243e716a78e0" -dependencies = [ - "libc", -] +checksum = "59f8e79d1fbf76bdfbde321e902714bf6c49df88a7dda6fc682fc2979226962d" [[package]] -name = "cranelift-bforest" -version = "0.101.4" +name = "dlv-list" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b5bb9245ec7dcc04d03110e538d31f0969d301c9d673145f4b4d5c3478539a3" -dependencies = [ - "cranelift-entity", -] +checksum = "0688c2a7f92e427f44895cd63841bff7b29f8d7a1648b9e7e07a4a365b2e1257" [[package]] -name = "cranelift-codegen" -version = "0.101.4" +name = "doc-comment" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebb18d10e5ddac43ba4ca8fd4e310938569c3e484cc01b6372b27dc5bb4dfd28" -dependencies = [ - "bumpalo", - "cranelift-bforest", - "cranelift-codegen-meta", - "cranelift-codegen-shared", - "cranelift-control", - "cranelift-entity", - "cranelift-isle", - "gimli 0.28.1", - "hashbrown 0.14.5", - "log", - "regalloc2", - "smallvec", - "target-lexicon 0.12.16", -] +checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" [[package]] -name = "cranelift-codegen-meta" -version = "0.101.4" +name = "docker_credential" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a3ce6d22982c1b9b6b012654258bab1a13947bb12703518bef06b1a4867c3d6" +checksum = "31951f49556e34d90ed28342e1df7e1cb7a229c4cab0aecc627b5d91edd41d07" dependencies = [ - "cranelift-codegen-shared", + "base64 0.21.7", + "serde", + "serde_json", ] [[package]] -name = "cranelift-codegen-shared" -version = "0.101.4" +name = "doctest-file" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47220fd4f9a0ce23541652b6f16f83868d282602c600d14934b2a4c166b4bd80" +checksum = "aac81fa3e28d21450aa4d2ac065992ba96a1d7303efbce51a95f4fd175b67562" [[package]] -name = "cranelift-control" -version = "0.101.4" +name = "dotenv" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed5a4c42672aea9b6e820046b52e47a1c05d3394a6cdf4cb3c3c4b702f954bd2" -dependencies = [ - "arbitrary", -] +checksum = "77c90badedccf4105eca100756a0b1289e191f6fcbdadd3cee1d2f614f97da8f" [[package]] -name = "cranelift-entity" -version = "0.101.4" +name = "downcast" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b4e9a3296fc827f9d35135dc2c0c8dd8d8359eb1ef904bae2d55d5bcb0c9f94" -dependencies = [ - "serde", - "serde_derive", -] +checksum = "1435fa1053d8b2fbbe9be7e97eca7f33d37b28409959813daefc1446a14247f1" [[package]] -name = "cranelift-frontend" -version = "0.101.4" +name = "dunce" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33ec537d0f0b8e084517f3e7bfa1d89af343d7c7df455573fca9f272d4e01267" -dependencies = [ - "cranelift-codegen", - "log", - "smallvec", - "target-lexicon 0.12.16", -] +checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" [[package]] -name = "cranelift-isle" -version = "0.101.4" +name = "dynasm" +version = "1.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45bab6d69919d210a50331d35cc6ce111567bc040aebac63a8ae130d0400a075" +checksum = "add9a102807b524ec050363f09e06f1504214b0e1c7797f64261c891022dce8b" +dependencies = [ + "bitflags 1.3.2", + "byteorder", + "lazy_static", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 1.0.109", +] [[package]] -name = "cranelift-native" -version = "0.101.4" +name = "dynasm" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f32e81605f352cf37af5463f11cd7deec7b6572741931a8d372f7fdd4a744f5d" +checksum = "33dc03612f42465a8ed7f5e354bc2b79ba54cedefa81d5bd3a064f1835adaba8" dependencies = [ - "cranelift-codegen", - "libc", - "target-lexicon 0.12.16", + "bitflags 1.3.2", + "byteorder", + "lazy_static", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] -name = "cranelift-wasm" -version = "0.101.4" +name = "dynasmrt" +version = "1.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0edaa4cbec1bc787395c074233df2652dd62f3e29d3ee60329514a0a51e6b045" +checksum = "64fba5a42bd76a17cad4bfa00de168ee1cbfa06a5e8ce992ae880218c05641a9" dependencies = [ - "cranelift-codegen", - "cranelift-entity", - "cranelift-frontend", - "itertools 0.10.5", - "log", - "smallvec", - "wasmparser 0.115.0", - "wasmtime-types", + "byteorder", + "dynasm 1.2.3", + "memmap2", ] [[package]] -name = "crc" -version = "3.2.1" +name = "dynasmrt" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69e6e4d7b33a94f0991c26729976b10ebde1d34c3ee82408fb536164fa10d636" +checksum = "f7dccc31a678058996aef614f6bd418ced384da70f284e83e2b7bf29b27b6a28" dependencies = [ - "crc-catalog", + "byteorder", + "dynasm 2.0.0", + "fnv", + "memmap2", ] [[package]] -name = "crc-catalog" -version = "2.4.0" +name = "easy-ext" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" +checksum = "53aff6fdc1b181225acdcb5b14c47106726fd8e486707315b1b138baed68ee31" [[package]] -name = "crc32fast" -version = "1.4.2" +name = "ecdsa" +version = "0.16.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" +checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" dependencies = [ - "cfg-if 1.0.0", + "der", + "digest 0.10.7", + "elliptic-curve", + "rfc6979", + "signature", + "spki", ] [[package]] -name = "crossbeam" -version = "0.8.4" +name = "ed25519" +version = "2.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1137cd7e7fc0fb5d3c5a8678be38ec56e819125d8d7907411fe24ccb943faca8" +checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" dependencies = [ - "crossbeam-channel", - "crossbeam-deque", - "crossbeam-epoch", - "crossbeam-queue", - "crossbeam-utils", + "signature", ] [[package]] -name = "crossbeam-channel" -version = "0.5.13" +name = "ed25519-dalek" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33480d6946193aa8033910124896ca395333cae7e2d1113d1fef6c3272217df2" +checksum = "4a3daa8e81a3963a60642bcc1f90a670680bd4a77535faa384e9d1c79d620871" dependencies = [ - "crossbeam-utils", + "curve25519-dalek", + "ed25519", + "rand_core 0.6.4", + "sha2", + "subtle", ] [[package]] -name = "crossbeam-deque" -version = "0.8.5" +name = "eigen-chainio-txmanager" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" -dependencies = [ - "crossbeam-epoch", - "crossbeam-utils", +checksum = "92a9242f761ef1403ada3fc268d5373b977c32cf755560019a211d881b343135" +dependencies = [ + "alloy-eips 0.1.4", + "alloy-network 0.1.4", + "alloy-primitives 0.7.7", + "alloy-provider 0.1.4", + "alloy-rpc-types-eth 0.1.4", + "alloy-signer-local 0.1.4", + "alloy-transport-http 0.1.4", + "eigen-logging", + "eigen-signer", + "k256", + "reqwest 0.12.8", + "thiserror", ] [[package]] -name = "crossbeam-epoch" -version = "0.9.18" +name = "eigen-client-avsregistry" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +checksum = "26b545b7b3bb97aa6f769fa329c43e121d3d3ef2c700528c51493d14b7ca4c2b" dependencies = [ - "crossbeam-utils", + "alloy-contract 0.1.4", + "alloy-primitives 0.7.7", + "alloy-provider 0.1.4", + "alloy-rpc-types 0.1.4", + "alloy-signer 0.1.4", + "alloy-signer-local 0.1.4", + "ark-ff 0.4.2", + "async-trait", + "eigen-client-elcontracts", + "eigen-crypto-bls", + "eigen-logging", + "eigen-types", + "eigen-utils", + "num-bigint 0.4.6", + "thiserror", + "tracing", ] [[package]] -name = "crossbeam-queue" -version = "0.3.11" +name = "eigen-client-elcontracts" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df0346b5d5e76ac2fe4e327c5fd1118d6be7c51dfb18f9b7922923f287471e35" +checksum = "46b72f6b15b8e641b4b43c1dced1df39cd1b4bcc6ce943ab1ce2280cba6e486f" dependencies = [ - "crossbeam-utils", + "alloy-contract 0.1.4", + "alloy-primitives 0.7.7", + "eigen-logging", + "eigen-types", + "eigen-utils", + "thiserror", + "tracing", ] [[package]] -name = "crossbeam-utils" -version = "0.8.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" - -[[package]] -name = "crunchy" -version = "0.2.2" +name = "eigen-client-eth" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" +checksum = "afc00e0508a9137355212339d6bc0b83b3ceb7dc4f541ec920e66171295bd9c3" +dependencies = [ + "alloy-consensus 0.1.4", + "alloy-eips 0.1.4", + "alloy-json-rpc 0.1.4", + "alloy-primitives 0.7.7", + "alloy-provider 0.1.4", + "alloy-pubsub 0.1.4", + "alloy-rlp", + "alloy-rpc-types-eth 0.1.4", + "alloy-transport 0.1.4", + "alloy-transport-http 0.1.4", + "alloy-transport-ws 0.1.4", + "async-trait", + "eigen-logging", + "eigen-metrics-collectors-rpc-calls", + "hex", + "thiserror", + "url", +] [[package]] -name = "crypto-common" -version = "0.1.6" +name = "eigen-client-fireblocks" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +checksum = "0327abf48cd09e672456be65e640ee609d23a1989ea1d310b0585e333829f124" dependencies = [ - "generic-array 0.14.7", - "typenum", + "alloy-contract 0.1.4", + "alloy-primitives 0.7.7", + "alloy-provider 0.1.4", + "alloy-rpc-types 0.1.4", + "chrono", + "eigen-utils", + "hex", + "jsonwebtoken 7.2.0", + "mime", + "once_cell", + "reqwest 0.11.27", + "serde", + "serde_json", + "sha2", + "thiserror", + "uuid 1.10.0", ] [[package]] -name = "crypto-mac" -version = "0.8.0" +name = "eigen-contract-bindings" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab" -dependencies = [ - "generic-array 0.14.7", - "subtle", -] +checksum = "f0a99d2a3c6b116d4013121fc20ff2a2f4e884475f6327c7d8300b175683fcb4" [[package]] -name = "curve25519-dalek" -version = "4.1.3" +name = "eigen-crypto-bls" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" +checksum = "4016b25de0e41e5f4a8b8c495cef35cbdf5d1946021b472a0ce10b656956465f" dependencies = [ - "cfg-if 1.0.0", - "cpufeatures", - "curve25519-dalek-derive", - "digest 0.10.7", - "fiat-crypto", - "rustc_version 0.4.1", - "subtle", - "zeroize", + "alloy-primitives 0.7.7", + "ark-bn254", + "ark-ec", + "ark-ff 0.4.2", + "ark-serialize 0.4.2", + "ark-std 0.4.0", + "eigen-crypto-bn254", + "eigen-utils", + "serde", + "thiserror", ] [[package]] -name = "curve25519-dalek-derive" -version = "0.1.1" +name = "eigen-crypto-bn254" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" +checksum = "bab240b582aa622c9a94e12bc7ac6fb65380b85053e1b0db08c8478c618a84a0" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.77", + "ark-bn254", + "ark-ec", + "ark-ff 0.4.2", + "num-bigint 0.4.6", + "rust-bls-bn254", ] [[package]] -name = "darling" -version = "0.20.10" +name = "eigen-logging" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" +checksum = "858b74ed2efc43af7de8db0f04e7c5d5b348aa8755c1a9000eb03d36f442c690" dependencies = [ - "darling_core", - "darling_macro", + "ctor", + "once_cell", + "tracing", + "tracing-subscriber", ] [[package]] -name = "darling_core" -version = "0.20.10" +name = "eigen-metrics" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" +checksum = "52e0fbdbdb429d03ff6f0be07abe4d58a942d6069328f7827938ca57157766df" dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim", - "syn 2.0.77", + "eigen-logging", + "metrics", + "metrics-exporter-prometheus", + "metrics-util", ] [[package]] -name = "darling_macro" -version = "0.20.10" +name = "eigen-metrics-collectors-rpc-calls" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" +checksum = "67563f8a7d1e242f8cab846729a4fec5d299c2e57abea66732400749c265ab92" dependencies = [ - "darling_core", - "quote", - "syn 2.0.77", + "eigen-logging", + "metrics", ] [[package]] -name = "data-encoding" -version = "2.6.0" +name = "eigen-nodeapi" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2" +checksum = "0d53c0275e3e0c8afc1358c0a3d1c781ac9815aadb0463a7d8e8cdc832569dca" +dependencies = [ + "ntex", + "serde", + "serde_json", + "thiserror", + "tracing", +] [[package]] -name = "deadpool" -version = "0.10.0" +name = "eigen-services-avsregistry" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb84100978c1c7b37f09ed3ce3e5f843af02c2a2c431bae5b19230dad2c1b490" -dependencies = [ - "async-trait", - "deadpool-runtime", - "num_cpus", - "tokio", +checksum = "6b8a3bf7010289fcac159db5a5d89fb3879236ac3c84e7c389366269d512c1da" +dependencies = [ + "alloy-primitives 0.7.7", + "ark-bn254", + "ark-ec", + "async-trait", + "eigen-client-avsregistry", + "eigen-crypto-bls", + "eigen-services-operatorsinfo", + "eigen-types", + "eigen-utils", ] [[package]] -name = "deadpool-lapin" -version = "0.11.0" +name = "eigen-services-blsaggregation" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce11c0dc86703e59a8921bb9afee10b13c242e47624347bd3a3b545c41db556e" +checksum = "4ccce420984d12deb996b6d85580f0080e5b8f6dc10c8858622c24f23953453b" dependencies = [ - "deadpool", - "lapin", - "tokio-executor-trait", + "alloy-primitives 0.7.7", + "ark-bn254", + "ark-ec", + "eigen-client-avsregistry", + "eigen-crypto-bls", + "eigen-crypto-bn254", + "eigen-services-avsregistry", + "eigen-types", + "parking_lot 0.12.3", + "serde", + "serde_json", + "thiserror", + "tokio", ] [[package]] -name = "deadpool-runtime" -version = "0.1.4" +name = "eigen-services-operatorsinfo" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "092966b41edc516079bdf31ec78a2e0588d1d0c08f78b91d8307215928642b2b" +checksum = "bc37b203588165d466fbff505e474b7fdfd4bfdd9095171f171209aeaf57919d" dependencies = [ + "alloy-primitives 0.7.7", + "alloy-provider 0.1.4", + "alloy-rpc-types 0.1.4", + "anyhow", + "async-trait", + "eigen-client-avsregistry", + "eigen-crypto-bls", + "eigen-logging", + "eigen-types", + "eigen-utils", + "futures-util", + "thiserror", "tokio", + "tokio-util 0.7.12", ] [[package]] -name = "debugid" -version = "0.8.0" +name = "eigen-signer" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef552e6f588e446098f6ba40d89ac146c8c7b64aade83c051ee00bb5d2bc18d" +checksum = "e981bde69979d705dbac089181df625f7e54ec01898983a8a1d8d1144b67b83b" dependencies = [ - "uuid", + "alloy-consensus 0.1.4", + "alloy-network 0.1.4", + "alloy-primitives 0.7.7", + "alloy-rpc-client 0.1.4", + "alloy-signer 0.1.4", + "alloy-signer-aws", + "alloy-signer-local 0.1.4", + "async-trait", + "aws-sdk-kms", + "eth-keystore", + "serde", + "thiserror", + "url", ] [[package]] -name = "der" -version = "0.7.9" +name = "eigen-testing-utils" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0" +checksum = "54b14a2ba9fbb5585ce0b3170243db2dfc551383ea7a46114a2c3f748da4515a" dependencies = [ - "const-oid", - "der_derive", - "flagset", - "pem-rfc7468", - "zeroize", + "alloy-network 0.1.4", + "alloy-primitives 0.7.7", + "alloy-provider 0.1.4", + "alloy-transport-http 0.1.4", + "eigen-utils", + "once_cell", + "serde", + "serde_json", + "testcontainers", + "tokio", ] [[package]] -name = "der-parser" -version = "9.0.0" +name = "eigen-types" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cd0a5c643689626bec213c4d8bd4d96acc8ffdb4ad4bb6bc16abf27d5f4b553" +checksum = "59467c722b271730a065a401002a6d3e7f6861233cf6241fda3a94bf863b4d74" dependencies = [ - "asn1-rs", - "displaydoc", - "nom", + "alloy-primitives 0.7.7", + "ark-serialize 0.4.2", + "eigen-crypto-bls", + "ethers", "num-bigint 0.4.6", - "num-traits", - "rusticata-macros", + "thiserror", + "tokio", ] [[package]] -name = "der_derive" -version = "0.7.3" +name = "eigen-utils" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8034092389675178f570469e6c3b0465d3d30b4505c294a6550db47f3c17ad18" +checksum = "781a0d9bc2ab3d3709a1d6b23dfca5c2ef2da29b38f10a04bf7f1991bb53293e" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.77", + "alloy-contract 0.1.4", + "alloy-json-rpc 0.1.4", + "alloy-network 0.1.4", + "alloy-provider 0.1.4", + "alloy-pubsub 0.1.4", + "alloy-signer-local 0.1.4", + "alloy-sol-types 0.7.7", + "alloy-transport 0.1.4", + "alloy-transport-http 0.1.4", + "reqwest 0.12.8", ] [[package]] -name = "deranged" -version = "0.3.11" +name = "eigensdk" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" -dependencies = [ - "powerfmt", - "serde", +checksum = "8683d526d79c3d8deaed773e0dd9a18383e0f710fa2d182615142ce26b448338" +dependencies = [ + "eigen-chainio-txmanager", + "eigen-client-avsregistry", + "eigen-client-elcontracts", + "eigen-client-eth", + "eigen-client-fireblocks", + "eigen-contract-bindings", + "eigen-crypto-bls", + "eigen-crypto-bn254", + "eigen-logging", + "eigen-metrics", + "eigen-nodeapi", + "eigen-services-avsregistry", + "eigen-services-blsaggregation", + "eigen-services-operatorsinfo", + "eigen-signer", + "eigen-testing-utils", + "eigen-types", + "eigen-utils", ] [[package]] -name = "derive-where" -version = "1.2.7" +name = "either" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62d671cc41a825ebabc75757b62d3d168c577f9149b2d49ece1dad1f72119d25" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.77", -] +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" [[package]] -name = "derive_arbitrary" -version = "1.3.2" +name = "elliptic-curve" +version = "0.13.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67e77553c4162a157adbf834ebae5b415acbecbeafc7a74b0e886657506a7611" +checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.77", + "base16ct", + "crypto-bigint", + "digest 0.10.7", + "ff", + "generic-array 0.14.7", + "group", + "pkcs8", + "rand_core 0.6.4", + "sec1", + "subtle", + "zeroize", ] [[package]] -name = "derive_more" -version = "0.99.18" +name = "ena" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f33878137e4dafd7fa914ad4e259e18a4e8e532b9617a2d0150262bf53abfce" +checksum = "3d248bdd43ce613d87415282f69b9bb99d947d290b10962dd6c56233312c2ad5" dependencies = [ - "convert_case", - "proc-macro2", - "quote", - "rustc_version 0.4.1", - "syn 2.0.77", + "log", ] [[package]] -name = "des" -version = "0.8.1" +name = "encode_unicode" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffdd80ce8ce993de27e9f063a444a4d53ce8e8db4c1f00cc03af5ad5a9867a1e" -dependencies = [ - "cipher", -] +checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" [[package]] -name = "digest" -version = "0.8.1" +name = "encoding_rs" +version = "0.8.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5" +checksum = "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59" dependencies = [ - "generic-array 0.12.4", + "cfg-if 1.0.0", ] [[package]] -name = "digest" -version = "0.9.0" +name = "endian-type" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" -dependencies = [ - "generic-array 0.14.7", -] +checksum = "c34f04666d835ff5d62e058c3995147c06f42fe86ff053337632bca83e42702d" [[package]] -name = "digest" -version = "0.10.7" +name = "enr" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +checksum = "2a3d8dc56e02f954cac8eb489772c552c473346fc34f67412bb6244fd647f7e4" dependencies = [ - "block-buffer", - "crypto-common", - "subtle", + "base64 0.21.7", + "bytes", + "hex", + "k256", + "log", + "rand 0.8.5", + "rlp", + "serde", + "sha3", + "zeroize", ] [[package]] -name = "dirs" -version = "4.0.0" +name = "enum-as-inner" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059" +checksum = "a1e6a265c649f3f5979b601d26f1d05ada116434c87741c9493cb56218f76cbc" dependencies = [ - "dirs-sys", + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.77", ] [[package]] -name = "dirs-sys" -version = "0.3.7" +name = "enum-map" +version = "2.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6" +checksum = "6866f3bfdf8207509a033af1a75a7b08abda06bbaaeae6669323fd5a097df2e9" dependencies = [ - "libc", - "redox_users", - "winapi", + "enum-map-derive", ] [[package]] -name = "displaydoc" -version = "0.2.5" +name = "enum-map-derive" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +checksum = "f282cfdfe92516eb26c2af8589c274c7c17681f5ecc03c18255fe741c6aa64eb" dependencies = [ "proc-macro2", "quote", @@ -1932,207 +4540,379 @@ dependencies = [ ] [[package]] -name = "dissimilar" -version = "1.0.9" +name = "enumset" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59f8e79d1fbf76bdfbde321e902714bf6c49df88a7dda6fc682fc2979226962d" +checksum = "d07a4b049558765cef5f0c1a273c3fc57084d768b44d2f98127aef4cceb17293" +dependencies = [ + "enumset_derive", +] [[package]] -name = "dlv-list" -version = "0.3.0" +name = "enumset_derive" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0688c2a7f92e427f44895cd63841bff7b29f8d7a1648b9e7e07a4a365b2e1257" +checksum = "59c3b24c345d8c314966bdc1832f6c2635bfcce8e7cf363bd115987bba2ee242" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 2.0.77", +] [[package]] -name = "doc-comment" -version = "0.3.3" +name = "equivalent" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] -name = "dotenv" -version = "0.15.0" +name = "errno" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77c90badedccf4105eca100756a0b1289e191f6fcbdadd3cee1d2f614f97da8f" +checksum = "f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1" +dependencies = [ + "errno-dragonfly", + "libc", + "winapi", +] [[package]] -name = "dynasm" -version = "1.2.3" +name = "errno" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "add9a102807b524ec050363f09e06f1504214b0e1c7797f64261c891022dce8b" +checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" dependencies = [ - "bitflags 1.3.2", - "byteorder", - "lazy_static", - "proc-macro-error", - "proc-macro2", - "quote", - "syn 1.0.109", + "libc", + "windows-sys 0.52.0", ] [[package]] -name = "dynasm" -version = "2.0.0" +name = "errno-dragonfly" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33dc03612f42465a8ed7f5e354bc2b79ba54cedefa81d5bd3a064f1835adaba8" +checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" dependencies = [ - "bitflags 1.3.2", - "byteorder", - "lazy_static", - "proc-macro-error", - "proc-macro2", - "quote", - "syn 1.0.109", + "cc", + "libc", ] [[package]] -name = "dynasmrt" -version = "1.2.3" +name = "eth-keystore" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64fba5a42bd76a17cad4bfa00de168ee1cbfa06a5e8ce992ae880218c05641a9" +checksum = "1fda3bf123be441da5260717e0661c25a2fd9cb2b2c1d20bf2e05580047158ab" dependencies = [ - "byteorder", - "dynasm 1.2.3", - "memmap2", + "aes", + "ctr", + "digest 0.10.7", + "hex", + "hmac", + "pbkdf2 0.11.0", + "rand 0.8.5", + "scrypt 0.10.0", + "serde", + "serde_json", + "sha2", + "sha3", + "thiserror", + "uuid 0.8.2", ] [[package]] -name = "dynasmrt" -version = "2.0.0" +name = "ethabi" +version = "18.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7dccc31a678058996aef614f6bd418ced384da70f284e83e2b7bf29b27b6a28" +checksum = "7413c5f74cc903ea37386a8965a936cbeb334bd270862fdece542c1b2dcbc898" dependencies = [ - "byteorder", - "dynasm 2.0.0", - "fnv", - "memmap2", + "ethereum-types", + "hex", + "once_cell", + "regex", + "serde", + "serde_json", + "sha3", + "thiserror", + "uint", ] [[package]] -name = "easy-ext" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53aff6fdc1b181225acdcb5b14c47106726fd8e486707315b1b138baed68ee31" - -[[package]] -name = "ed25519" -version = "2.2.3" +name = "ethbloom" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" +checksum = "c22d4b5885b6aa2fe5e8b9329fb8d232bf739e434e6b87347c63bdd00c120f60" dependencies = [ - "signature", + "crunchy", + "fixed-hash 0.8.0", + "impl-codec", + "impl-rlp", + "impl-serde", + "scale-info", + "tiny-keccak", ] [[package]] -name = "ed25519-dalek" -version = "2.1.1" +name = "ethereum-types" +version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a3daa8e81a3963a60642bcc1f90a670680bd4a77535faa384e9d1c79d620871" +checksum = "02d215cbf040552efcbe99a38372fe80ab9d00268e20012b79fcd0f073edd8ee" dependencies = [ - "curve25519-dalek", - "ed25519", - "rand_core", - "sha2", - "subtle", + "ethbloom", + "fixed-hash 0.8.0", + "impl-codec", + "impl-rlp", + "impl-serde", + "primitive-types 0.12.2", + "scale-info", + "uint", ] [[package]] -name = "either" -version = "1.13.0" +name = "ethers" +version = "2.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" +checksum = "816841ea989f0c69e459af1cf23a6b0033b19a55424a1ea3a30099becdb8dec0" +dependencies = [ + "ethers-addressbook", + "ethers-contract", + "ethers-core", + "ethers-etherscan", + "ethers-middleware", + "ethers-providers", + "ethers-signers", + "ethers-solc", +] [[package]] -name = "encode_unicode" -version = "0.3.6" +name = "ethers-addressbook" +version = "2.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" +checksum = "5495afd16b4faa556c3bba1f21b98b4983e53c1755022377051a975c3b021759" +dependencies = [ + "ethers-core", + "once_cell", + "serde", + "serde_json", +] [[package]] -name = "encoding_rs" -version = "0.8.34" +name = "ethers-contract" +version = "2.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59" +checksum = "6fceafa3578c836eeb874af87abacfb041f92b4da0a78a5edd042564b8ecdaaa" dependencies = [ - "cfg-if 1.0.0", + "const-hex", + "ethers-contract-abigen", + "ethers-contract-derive", + "ethers-core", + "ethers-providers", + "futures-util", + "once_cell", + "pin-project", + "serde", + "serde_json", + "thiserror", ] [[package]] -name = "enum-map" -version = "2.7.3" +name = "ethers-contract-abigen" +version = "2.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6866f3bfdf8207509a033af1a75a7b08abda06bbaaeae6669323fd5a097df2e9" +checksum = "04ba01fbc2331a38c429eb95d4a570166781f14290ef9fdb144278a90b5a739b" dependencies = [ - "enum-map-derive", + "Inflector", + "const-hex", + "dunce", + "ethers-core", + "ethers-etherscan", + "eyre", + "prettyplease", + "proc-macro2", + "quote", + "regex", + "reqwest 0.11.27", + "serde", + "serde_json", + "syn 2.0.77", + "toml 0.8.19", + "walkdir", ] [[package]] -name = "enum-map-derive" -version = "0.17.0" +name = "ethers-contract-derive" +version = "2.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f282cfdfe92516eb26c2af8589c274c7c17681f5ecc03c18255fe741c6aa64eb" +checksum = "87689dcabc0051cde10caaade298f9e9093d65f6125c14575db3fd8c669a168f" dependencies = [ + "Inflector", + "const-hex", + "ethers-contract-abigen", + "ethers-core", "proc-macro2", "quote", + "serde_json", "syn 2.0.77", ] [[package]] -name = "enumset" -version = "1.1.5" +name = "ethers-core" +version = "2.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d07a4b049558765cef5f0c1a273c3fc57084d768b44d2f98127aef4cceb17293" +checksum = "82d80cc6ad30b14a48ab786523af33b37f28a8623fc06afd55324816ef18fb1f" dependencies = [ - "enumset_derive", + "arrayvec 0.7.6", + "bytes", + "cargo_metadata", + "chrono", + "const-hex", + "elliptic-curve", + "ethabi", + "generic-array 0.14.7", + "k256", + "num_enum", + "once_cell", + "open-fastrlp", + "rand 0.8.5", + "rlp", + "serde", + "serde_json", + "strum 0.26.3", + "syn 2.0.77", + "tempfile", + "thiserror", + "tiny-keccak", + "unicode-xid", ] [[package]] -name = "enumset_derive" -version = "0.10.0" +name = "ethers-etherscan" +version = "2.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59c3b24c345d8c314966bdc1832f6c2635bfcce8e7cf363bd115987bba2ee242" +checksum = "e79e5973c26d4baf0ce55520bd732314328cabe53193286671b47144145b9649" dependencies = [ - "darling", - "proc-macro2", - "quote", - "syn 2.0.77", + "chrono", + "ethers-core", + "reqwest 0.11.27", + "semver 1.0.23", + "serde", + "serde_json", + "thiserror", + "tracing", ] [[package]] -name = "equivalent" -version = "1.0.1" +name = "ethers-middleware" +version = "2.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" +checksum = "48f9fdf09aec667c099909d91908d5eaf9be1bd0e2500ba4172c1d28bfaa43de" +dependencies = [ + "async-trait", + "auto_impl", + "ethers-contract", + "ethers-core", + "ethers-etherscan", + "ethers-providers", + "ethers-signers", + "futures-channel", + "futures-locks", + "futures-util", + "instant", + "reqwest 0.11.27", + "serde", + "serde_json", + "thiserror", + "tokio", + "tracing", + "tracing-futures", + "url", +] [[package]] -name = "errno" -version = "0.2.8" +name = "ethers-providers" +version = "2.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1" +checksum = "6434c9a33891f1effc9c75472e12666db2fa5a0fec4b29af6221680a6fe83ab2" dependencies = [ - "errno-dragonfly", - "libc", - "winapi", + "async-trait", + "auto_impl", + "base64 0.21.7", + "bytes", + "const-hex", + "enr", + "ethers-core", + "futures-core", + "futures-timer", + "futures-util", + "hashers", + "http 0.2.12", + "instant", + "jsonwebtoken 8.3.0", + "once_cell", + "pin-project", + "reqwest 0.11.27", + "serde", + "serde_json", + "thiserror", + "tokio", + "tokio-tungstenite 0.20.1", + "tracing", + "tracing-futures", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "ws_stream_wasm", ] [[package]] -name = "errno" -version = "0.3.9" +name = "ethers-signers" +version = "2.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" +checksum = "228875491c782ad851773b652dd8ecac62cda8571d3bc32a5853644dd26766c2" dependencies = [ - "libc", - "windows-sys 0.52.0", + "async-trait", + "coins-bip32", + "coins-bip39", + "const-hex", + "elliptic-curve", + "eth-keystore", + "ethers-core", + "rand 0.8.5", + "sha2", + "thiserror", + "tracing", ] [[package]] -name = "errno-dragonfly" -version = "0.1.2" +name = "ethers-solc" +version = "2.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" +checksum = "66244a771d9163282646dbeffe0e6eca4dda4146b6498644e678ac6089b11edd" dependencies = [ - "cc", - "libc", + "cfg-if 1.0.0", + "const-hex", + "dirs 5.0.1", + "dunce", + "ethers-core", + "glob", + "home", + "md-5", + "num_cpus", + "once_cell", + "path-slash", + "rayon", + "regex", + "semver 1.0.23", + "serde", + "serde_json", + "solang-parser", + "svm-rs", + "thiserror", + "tiny-keccak", + "tokio", + "tracing", + "walkdir", + "yansi", ] [[package]] @@ -2171,6 +4951,16 @@ dependencies = [ "async-trait", ] +[[package]] +name = "eyre" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cd915d99f24784cdc19fd37ef22b97e3ff0ae756c7e492e9fbfe897d61e2aec" +dependencies = [ + "indenter", + "once_cell", +] + [[package]] name = "fallible-iterator" version = "0.3.0" @@ -2192,6 +4982,27 @@ version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e8c02a5121d4ea3eb16a80748c74f5549a5665e4c21333c6098f283870fbdea6" +[[package]] +name = "fastrlp" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "139834ddba373bbdd213dffe02c8d110508dcf1726c2be27e8d1f7d7e1856418" +dependencies = [ + "arrayvec 0.7.6", + "auto_impl", + "bytes", +] + +[[package]] +name = "ff" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" +dependencies = [ + "rand_core 0.6.4", + "subtle", +] + [[package]] name = "fiat-crypto" version = "0.2.9" @@ -2223,6 +5034,24 @@ dependencies = [ "static_assertions", ] +[[package]] +name = "fixed-hash" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "835c052cb0c08c1acf6ffd71c022172e18723949c8282f2b9f27efbc51e64534" +dependencies = [ + "byteorder", + "rand 0.8.5", + "rustc-hex", + "static_assertions", +] + +[[package]] +name = "fixedbitset" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" + [[package]] name = "flagset" version = "0.4.6" @@ -2280,6 +5109,28 @@ dependencies = [ "percent-encoding", ] +[[package]] +name = "fragile" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c2141d6d6c8512188a7891b4b01590a45f6dac67afb4f255c4124dbb86d4eaa" + +[[package]] +name = "fs2" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9564fc758e15025b46aa6643b1b77d047d1a56a1aea6e01002ac0c7026876213" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "fs_extra" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" + [[package]] name = "funty" version = "2.0.0" @@ -2362,6 +5213,16 @@ dependencies = [ "pin-project-lite", ] +[[package]] +name = "futures-locks" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45ec6fe3675af967e67c5536c0b9d44e34e6c52f86bedc4ea49c5317b8e94d06" +dependencies = [ + "futures-channel", + "futures-task", +] + [[package]] name = "futures-macro" version = "0.3.30" @@ -2385,6 +5246,16 @@ version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" +[[package]] +name = "futures-timer" +version = "3.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" +dependencies = [ + "gloo-timers", + "send_wrapper 0.4.0", +] + [[package]] name = "futures-util" version = "0.3.30" @@ -2403,6 +5274,12 @@ dependencies = [ "slab", ] +[[package]] +name = "futures-utils-wasm" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42012b0f064e01aa58b545fe3727f90f7dd4020f4a3ea735b50344965f5a57e9" + [[package]] name = "fxhash" version = "0.2.1" @@ -2442,6 +5319,18 @@ checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" dependencies = [ "typenum", "version_check", + "zeroize", +] + +[[package]] +name = "getrandom" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" +dependencies = [ + "cfg-if 1.0.0", + "libc", + "wasi 0.9.0+wasi-snapshot-preview1", ] [[package]] @@ -2451,8 +5340,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ "cfg-if 1.0.0", + "js-sys", "libc", - "wasi", + "wasi 0.11.0+wasi-snapshot-preview1", + "wasm-bindgen", ] [[package]] @@ -2478,22 +5369,64 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" +[[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 = "group" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" +dependencies = [ + "ff", + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "h2" +version = "0.3.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http 0.2.12", + "indexmap 2.5.0", + "slab", + "tokio", + "tokio-util 0.7.12", + "tracing", +] + [[package]] name = "h2" -version = "0.3.26" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" +checksum = "524e8ac6999421f49a846c2d4411f337e53497d8ec55d67753beffa43c5d9205" dependencies = [ + "atomic-waker", "bytes", "fnv", "futures-core", "futures-sink", - "futures-util", - "http 0.2.12", + "http 1.1.0", "indexmap 2.5.0", "slab", "tokio", - "tokio-util", + "tokio-util 0.7.12", "tracing", ] @@ -2532,6 +5465,49 @@ checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" dependencies = [ "ahash 0.8.11", "allocator-api2", + "serde", +] + +[[package]] +name = "hashers" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2bca93b15ea5a746f220e56587f71e73c6165eab783df9e26590069953e3c30" +dependencies = [ + "fxhash", +] + +[[package]] +name = "headers" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06683b93020a07e3dbcf5f8c0f6d40080d725bea7936fc01ad345c01b97dc270" +dependencies = [ + "base64 0.21.7", + "bytes", + "headers-core", + "http 0.2.12", + "httpdate", + "mime", + "sha1", +] + +[[package]] +name = "headers-core" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7f66481bfee273957b1f20485a4ff3362987f85b2c236580d81b4eb7a326429" +dependencies = [ + "http 0.2.12", +] + +[[package]] +name = "heck" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" +dependencies = [ + "unicode-segmentation", ] [[package]] @@ -2567,6 +5543,66 @@ dependencies = [ "serde", ] +[[package]] +name = "hex-literal" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fe2267d4ed49bc07b63801559be28c718ea06c4738b7a03c94df7386d2cde46" + +[[package]] +name = "hickory-proto" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07698b8420e2f0d6447a436ba999ec85d8fbf2a398bbd737b82cac4a2e96e512" +dependencies = [ + "async-trait", + "cfg-if 1.0.0", + "data-encoding", + "enum-as-inner", + "futures-channel", + "futures-io", + "futures-util", + "idna 0.4.0", + "ipnet", + "once_cell", + "rand 0.8.5", + "thiserror", + "tinyvec", + "tokio", + "tracing", + "url", +] + +[[package]] +name = "hickory-resolver" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28757f23aa75c98f254cf0405e6d8c25b831b32921b050a66692427679b1f243" +dependencies = [ + "cfg-if 1.0.0", + "futures-util", + "hickory-proto", + "ipconfig", + "lru-cache", + "once_cell", + "parking_lot 0.12.3", + "rand 0.8.5", + "resolv-conf", + "smallvec", + "thiserror", + "tokio", + "tracing", +] + +[[package]] +name = "hkdf" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" +dependencies = [ + "hmac", +] + [[package]] name = "hmac" version = "0.12.1" @@ -2585,6 +5621,17 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "hostname" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867" +dependencies = [ + "libc", + "match_cfg", + "winapi", +] + [[package]] name = "http" version = "0.2.12" @@ -2618,6 +5665,29 @@ dependencies = [ "pin-project-lite", ] +[[package]] +name = "http-body" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +dependencies = [ + "bytes", + "http 1.1.0", +] + +[[package]] +name = "http-body-util" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" +dependencies = [ + "bytes", + "futures-util", + "http 1.1.0", + "http-body 1.0.1", + "pin-project-lite", +] + [[package]] name = "httparse" version = "1.9.4" @@ -2640,9 +5710,9 @@ dependencies = [ "futures-channel", "futures-core", "futures-util", - "h2", + "h2 0.3.26", "http 0.2.12", - "http-body", + "http-body 0.4.6", "httparse", "httpdate", "itoa", @@ -2654,13 +5724,104 @@ dependencies = [ "want", ] +[[package]] +name = "hyper" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50dfd22e0e76d0f662d429a5f80fcaf3855009297eab6a0a9f8543834744ba05" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "h2 0.4.6", + "http 1.1.0", + "http-body 1.0.1", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "smallvec", + "tokio", + "want", +] + +[[package]] +name = "hyper-named-pipe" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73b7d8abf35697b81a825e386fc151e0d503e8cb5fcb93cc8669c376dfd6f278" +dependencies = [ + "hex", + "hyper 1.4.1", + "hyper-util", + "pin-project-lite", + "tokio", + "tower-service", + "winapi", +] + +[[package]] +name = "hyper-rustls" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" +dependencies = [ + "futures-util", + "http 0.2.12", + "hyper 0.14.30", + "log", + "rustls 0.21.12", + "rustls-native-certs 0.6.3", + "tokio", + "tokio-rustls 0.24.1", +] + +[[package]] +name = "hyper-rustls" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0bea761b46ae2b24eb4aef630d8d1c398157b6fc29e6350ecf090a0b70c952c" +dependencies = [ + "futures-util", + "http 1.1.0", + "hyper 1.4.1", + "hyper-util", + "log", + "rustls 0.22.4", + "rustls-native-certs 0.7.3", + "rustls-pki-types", + "tokio", + "tokio-rustls 0.25.0", + "tower-service", +] + +[[package]] +name = "hyper-rustls" +version = "0.27.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08afdbb5c31130e3034af566421053ab03787c640246a446327f550d11bcb333" +dependencies = [ + "futures-util", + "http 1.1.0", + "hyper 1.4.1", + "hyper-util", + "log", + "rustls 0.23.13", + "rustls-native-certs 0.8.0", + "rustls-pki-types", + "tokio", + "tokio-rustls 0.26.0", + "tower-service", + "webpki-roots 0.26.6", +] + [[package]] name = "hyper-timeout" version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1" dependencies = [ - "hyper", + "hyper 0.14.30", "pin-project-lite", "tokio", "tokio-io-timeout", @@ -2673,10 +5834,60 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" dependencies = [ "bytes", - "hyper", + "hyper 0.14.30", + "native-tls", + "tokio", + "tokio-native-tls", +] + +[[package]] +name = "hyper-tls" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" +dependencies = [ + "bytes", + "http-body-util", + "hyper 1.4.1", + "hyper-util", "native-tls", "tokio", "tokio-native-tls", + "tower-service", +] + +[[package]] +name = "hyper-util" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41296eb09f183ac68eec06e03cdbea2e759633d4067b2f6552fc2e009bcad08b" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "http 1.1.0", + "http-body 1.0.1", + "hyper 1.4.1", + "pin-project-lite", + "socket2 0.5.7", + "tokio", + "tower-service", + "tracing", +] + +[[package]] +name = "hyperlocal-next" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acf569d43fa9848e510358c07b80f4adf34084ddc28c6a4a651ee8474c070dcc" +dependencies = [ + "hex", + "http-body-util", + "hyper 1.4.1", + "hyper-util", + "pin-project-lite", + "tokio", + "tower-service", ] [[package]] @@ -2708,6 +5919,16 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" +[[package]] +name = "idna" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + [[package]] name = "idna" version = "0.5.0" @@ -2725,18 +5946,62 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d0acd33ff0285af998aaf9b57342af478078f53492322fafc47450e09397e0e9" dependencies = [ "bitmaps", - "rand_core", + "rand_core 0.6.4", "rand_xoshiro", "sized-chunks", "typenum", "version_check", ] +[[package]] +name = "impl-codec" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba6a270039626615617f3f36d15fc827041df3b78c439da2cadfa47455a77f2f" +dependencies = [ + "parity-scale-codec", +] + [[package]] name = "impl-more" version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "206ca75c9c03ba3d4ace2460e57b189f39f43de612c2f85836e65c929701bb2d" +checksum = "206ca75c9c03ba3d4ace2460e57b189f39f43de612c2f85836e65c929701bb2d" + +[[package]] +name = "impl-rlp" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f28220f89297a075ddc7245cd538076ee98b01f2a9c23a53a4f1105d5a322808" +dependencies = [ + "rlp", +] + +[[package]] +name = "impl-serde" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc88fc67028ae3db0c853baa36269d398d5f45b6982f95549ff5def78c935cd" +dependencies = [ + "serde", +] + +[[package]] +name = "impl-trait-for-tuples" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11d7a9f6330b71fea57921c9b61c47ee6e84f72d394754eff6163ae67e7395eb" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "indenter" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" [[package]] name = "indexer" @@ -2753,11 +6018,12 @@ dependencies = [ "lapin", "near-client", "near-client-primitives", - "near-crypto", + "near-crypto 2.2.1-rc.1", "near-indexer", - "near-o11y", + "near-o11y 2.2.1-rc.1", "openssl-probe", "prometheus", + "reqwest 0.12.8", "serde", "serde_json", "serde_yaml", @@ -2822,6 +6088,21 @@ dependencies = [ "cfg-if 1.0.0", ] +[[package]] +name = "interprocess" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2f4e4a06d42fab3e85ab1b419ad32b09eab58b901d40c57935ff92db3287a13" +dependencies = [ + "doctest-file", + "futures-core", + "libc", + "recvmsg", + "tokio", + "widestring", + "windows-sys 0.52.0", +] + [[package]] name = "io-lifetimes" version = "1.0.11" @@ -2833,6 +6114,18 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "ipconfig" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f" +dependencies = [ + "socket2 0.5.7", + "widestring", + "windows-sys 0.48.0", + "winreg", +] + [[package]] name = "ipnet" version = "2.10.0" @@ -2854,6 +6147,15 @@ dependencies = [ "either", ] +[[package]] +name = "itertools" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" +dependencies = [ + "either", +] + [[package]] name = "itertools" version = "0.12.1" @@ -2863,6 +6165,15 @@ dependencies = [ "either", ] +[[package]] +name = "itertools" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" +dependencies = [ + "either", +] + [[package]] name = "itoa" version = "1.0.11" @@ -2900,11 +6211,54 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "afabcc15e437a6484fc4f12d0fd63068fe457bf93f1c148d3d9649c60b103f32" dependencies = [ "base64 0.12.3", - "pem", + "pem 0.8.3", + "ring 0.16.20", + "serde", + "serde_json", + "simple_asn1 0.4.1", +] + +[[package]] +name = "jsonwebtoken" +version = "8.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6971da4d9c3aa03c3d8f3ff0f4155b534aad021292003895a469716b2a230378" +dependencies = [ + "base64 0.21.7", + "pem 1.1.1", "ring 0.16.20", "serde", "serde_json", - "simple_asn1", + "simple_asn1 0.6.2", +] + +[[package]] +name = "jsonwebtoken" +version = "9.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9ae10193d25051e74945f1ea2d0b42e03cc3b890f7e4cc5faa44997d808193f" +dependencies = [ + "base64 0.21.7", + "js-sys", + "pem 3.0.4", + "ring 0.17.8", + "serde", + "serde_json", + "simple_asn1 0.6.2", +] + +[[package]] +name = "k256" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "956ff9b67e26e1a6a866cb758f12c6f8746208489e3e4a4b5580802f2f0a587b" +dependencies = [ + "cfg-if 1.0.0", + "ecdsa", + "elliptic-curve", + "once_cell", + "sha2", + "signature", ] [[package]] @@ -2916,6 +6270,46 @@ dependencies = [ "cpufeatures", ] +[[package]] +name = "keccak-asm" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "505d1856a39b200489082f90d897c3f07c455563880bc5952e38eabf731c83b6" +dependencies = [ + "digest 0.10.7", + "sha3-asm", +] + +[[package]] +name = "lalrpop" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55cb077ad656299f160924eb2912aa147d7339ea7d69e1b5517326fdcec3c1ca" +dependencies = [ + "ascii-canvas", + "bit-set", + "ena", + "itertools 0.11.0", + "lalrpop-util", + "petgraph", + "regex", + "regex-syntax 0.8.4", + "string_cache", + "term", + "tiny-keccak", + "unicode-xid", + "walkdir", +] + +[[package]] +name = "lalrpop-util" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "507460a910eb7b32ee961886ff48539633b788a36b65692b95f225b844c82553" +dependencies = [ + "regex-automata 0.4.7", +] + [[package]] name = "language-tags" version = "0.3.2" @@ -3003,7 +6397,7 @@ version = "0.11.0+8.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3386f101bcb4bd252d8e9d2fb41ec3b0862a15a62b478c355b2982efa469e3e" dependencies = [ - "bindgen", + "bindgen 0.65.1", "bzip2-sys", "cc", "glob", @@ -3025,6 +6419,12 @@ 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 = "linux-raw-sys" version = "0.3.8" @@ -3079,6 +6479,26 @@ version = "0.4.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" +[[package]] +name = "loupe" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b6a72dfa44fe15b5e76b94307eeb2ff995a8c5b283b55008940c02e0c5b634d" +dependencies = [ + "loupe-derive", + "rustversion", +] + +[[package]] +name = "loupe-derive" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0fbfc88337168279f2e9ae06e157cfed4efd3316e14dc96ed074d4f2e6c5952" +dependencies = [ + "quote", + "syn 1.0.109", +] + [[package]] name = "lru" version = "0.7.8" @@ -3097,6 +6517,15 @@ dependencies = [ "hashbrown 0.14.5", ] +[[package]] +name = "lru-cache" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31e24f1ad8321ca0e8a1e0ac13f23cb668e6f5466c2c57319f6a5cf1cc8e3b1c" +dependencies = [ + "linked-hash-map", +] + [[package]] name = "lz4-sys" version = "1.11.0" @@ -3136,6 +6565,12 @@ dependencies = [ "libc", ] +[[package]] +name = "match_cfg" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4" + [[package]] name = "matchers" version = "0.1.0" @@ -3239,6 +6674,56 @@ dependencies = [ "autocfg", ] +[[package]] +name = "metrics" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "884adb57038347dfbaf2d5065887b6cf4312330dc8e94bc30a1a839bd79d3261" +dependencies = [ + "ahash 0.8.11", + "portable-atomic", +] + +[[package]] +name = "metrics-exporter-prometheus" +version = "0.15.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4f0c8427b39666bf970460908b213ec09b3b350f20c0c2eabcbba51704a08e6" +dependencies = [ + "base64 0.22.1", + "http-body-util", + "hyper 1.4.1", + "hyper-rustls 0.27.3", + "hyper-util", + "indexmap 2.5.0", + "ipnet", + "metrics", + "metrics-util", + "quanta", + "thiserror", + "tokio", + "tracing", +] + +[[package]] +name = "metrics-util" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4259040465c955f9f2f1a4a8a16dc46726169bca0f88e8fb2dbeced487c3e828" +dependencies = [ + "aho-corasick", + "crossbeam-epoch", + "crossbeam-utils", + "hashbrown 0.14.5", + "indexmap 2.5.0", + "metrics", + "num_cpus", + "ordered-float", + "quanta", + "radix_trie", + "sketches-ddsketch", +] + [[package]] name = "mime" version = "0.3.17" @@ -3288,16 +6773,78 @@ dependencies = [ "hermit-abi 0.3.9", "libc", "log", - "wasi", + "wasi 0.11.0+wasi-snapshot-preview1", "windows-sys 0.52.0", ] +[[package]] +name = "mirai-annotations" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9be0862c1b3f26a88803c4a49de6889c10e608b3ee9344e6ef5b45fb37ad3d1" + +[[package]] +name = "mockall" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4c28b3fb6d753d28c20e826cd46ee611fda1cf3cde03a443a974043247c065a" +dependencies = [ + "cfg-if 1.0.0", + "downcast", + "fragile", + "mockall_derive", + "predicates", + "predicates-tree", +] + +[[package]] +name = "mockall_derive" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "341014e7f530314e9a1fdbc7400b244efea7122662c96bfa248c31da5bfb2020" +dependencies = [ + "cfg-if 1.0.0", + "proc-macro2", + "quote", + "syn 2.0.77", +] + [[package]] name = "more-asserts" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7843ec2de400bcbc6a6328c958dc38e5359da6e93e72e37bc5246bf1ae776389" +[[package]] +name = "multer" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01acbdc23469fd8fe07ab135923371d5f5a422fbf9c522158677c8eb15bc51c2" +dependencies = [ + "bytes", + "encoding_rs", + "futures-util", + "http 0.2.12", + "httparse", + "log", + "memchr", + "mime", + "spin 0.9.8", + "version_check", +] + +[[package]] +name = "multimap" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a" + +[[package]] +name = "nanorand" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a51313c5820b0b02bd422f4b44776fbf47961755c74ce64afc73bfad10226c3" + [[package]] name = "native-tls" version = "0.2.12" @@ -3331,10 +6878,10 @@ version = "2.2.1-rc.1" source = "git+https://github.com/near/nearcore?rev=b3d767e7664d8e123a35313ccc66c8ac1afb2058#b3d767e7664d8e123a35313ccc66c8ac1afb2058" dependencies = [ "actix", - "derive_more", + "derive_more 0.99.18", "futures", "near-async-derive", - "near-o11y", + "near-o11y 2.2.1-rc.1", "near-performance-metrics", "near-time", "once_cell", @@ -3355,6 +6902,15 @@ dependencies = [ "syn 2.0.77", ] +[[package]] +name = "near-cache" +version = "0.21.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b222afeb8daa3849626f0ce713806ce8be2b33e4aac54913dc7ef1db1fa83d7" +dependencies = [ + "lru 0.7.8", +] + [[package]] name = "near-cache" version = "2.2.1-rc.1" @@ -3380,29 +6936,29 @@ dependencies = [ "itoa", "lru 0.12.4", "near-async", - "near-cache", - "near-chain-configs", + "near-cache 2.2.1-rc.1", + "near-chain-configs 2.2.1-rc.1", "near-chain-primitives", "near-client-primitives", - "near-crypto", + "near-crypto 2.2.1-rc.1", "near-epoch-manager", "near-mainnet-res", "near-network", - "near-o11y", - "near-parameters", + "near-o11y 2.2.1-rc.1", + "near-parameters 2.2.1-rc.1", "near-performance-metrics", "near-performance-metrics-macros", "near-pool", - "near-primitives", + "near-primitives 2.2.1-rc.1", "near-store", - "near-vm-runner", + "near-vm-runner 2.2.1-rc.1", "node-runtime", "num-rational", "once_cell", - "rand", - "rand_chacha", + "rand 0.8.5", + "rand_chacha 0.3.1", "rayon", - "strum", + "strum 0.24.1", "tempfile", "thiserror", "time", @@ -3410,6 +6966,29 @@ dependencies = [ "yansi", ] +[[package]] +name = "near-chain-configs" +version = "0.21.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ac5ca8d44a732193603e117f57d490b8c29b1e8e756abb3f12d4eb19443cd1d" +dependencies = [ + "anyhow", + "bytesize", + "chrono", + "derive_more 0.99.18", + "near-config-utils 0.21.2", + "near-crypto 0.21.2", + "near-parameters 0.21.2", + "near-primitives 0.21.2", + "num-rational", + "once_cell", + "serde", + "serde_json", + "sha2", + "smart-default", + "tracing", +] + [[package]] name = "near-chain-configs" version = "2.2.1-rc.1" @@ -3418,12 +6997,12 @@ dependencies = [ "anyhow", "bytesize", "chrono", - "derive_more", - "near-config-utils", - "near-crypto", - "near-o11y", - "near-parameters", - "near-primitives", + "derive_more 0.99.18", + "near-config-utils 2.2.1-rc.1", + "near-crypto 2.2.1-rc.1", + "near-o11y 2.2.1-rc.1", + "near-parameters 2.2.1-rc.1", + "near-primitives 2.2.1-rc.1", "near-time", "num-rational", "once_cell", @@ -3440,8 +7019,8 @@ name = "near-chain-primitives" version = "2.2.1-rc.1" source = "git+https://github.com/near/nearcore?rev=b3d767e7664d8e123a35313ccc66c8ac1afb2058#b3d767e7664d8e123a35313ccc66c8ac1afb2058" dependencies = [ - "near-crypto", - "near-primitives", + "near-crypto 2.2.1-rc.1", + "near-primitives 2.2.1-rc.1", "near-time", "thiserror", "time", @@ -3456,27 +7035,27 @@ dependencies = [ "actix", "borsh 1.5.1", "chrono", - "derive_more", + "derive_more 0.99.18", "futures", "itertools 0.10.5", "lru 0.12.4", "near-async", "near-chain", - "near-chain-configs", + "near-chain-configs 2.2.1-rc.1", "near-chunks-primitives", - "near-crypto", + "near-crypto 2.2.1-rc.1", "near-epoch-manager", "near-network", - "near-o11y", + "near-o11y 2.2.1-rc.1", "near-performance-metrics", "near-performance-metrics-macros", "near-pool", - "near-primitives", + "near-primitives 2.2.1-rc.1", "near-store", "once_cell", - "rand", - "reed-solomon-erasure", - "strum", + "rand 0.8.5", + "reed-solomon-erasure 6.0.0", + "strum 0.24.1", "time", "tracing", ] @@ -3487,7 +7066,7 @@ version = "2.2.1-rc.1" source = "git+https://github.com/near/nearcore?rev=b3d767e7664d8e123a35313ccc66c8ac1afb2058#b3d767e7664d8e123a35313ccc66c8ac1afb2058" dependencies = [ "near-chain-primitives", - "near-primitives", + "near-primitives 2.2.1-rc.1", ] [[package]] @@ -3503,42 +7082,42 @@ dependencies = [ "bytesize", "chrono", "cloud-storage", - "derive_more", + "derive_more 0.99.18", "futures", "itertools 0.10.5", "lru 0.12.4", "near-async", - "near-cache", + "near-cache 2.2.1-rc.1", "near-chain", - "near-chain-configs", + "near-chain-configs 2.2.1-rc.1", "near-chain-primitives", "near-chunks", "near-client-primitives", - "near-crypto", + "near-crypto 2.2.1-rc.1", "near-dyn-configs", "near-epoch-manager", "near-network", - "near-o11y", - "near-parameters", + "near-o11y 2.2.1-rc.1", + "near-parameters 2.2.1-rc.1", "near-performance-metrics", "near-performance-metrics-macros", "near-pool", - "near-primitives", + "near-primitives 2.2.1-rc.1", "near-store", "near-telemetry", - "near-vm-runner", + "near-vm-runner 2.2.1-rc.1", "num-rational", "once_cell", "percent-encoding", - "rand", + "rand 0.8.5", "rayon", - "reed-solomon-erasure", + "reed-solomon-erasure 6.0.0", "regex", - "reqwest", + "reqwest 0.11.27", "rust-s3", "serde", "serde_json", - "strum", + "strum 0.24.1", "sysinfo", "tempfile", "thiserror", @@ -3555,21 +7134,33 @@ source = "git+https://github.com/near/nearcore?rev=b3d767e7664d8e123a35313ccc66c dependencies = [ "actix", "chrono", - "near-chain-configs", + "near-chain-configs 2.2.1-rc.1", "near-chain-primitives", "near-chunks-primitives", - "near-crypto", - "near-primitives", + "near-crypto 2.2.1-rc.1", + "near-primitives 2.2.1-rc.1", "near-time", "serde", "serde_json", - "strum", + "strum 0.24.1", "thiserror", "time", "tracing", "yansi", ] +[[package]] +name = "near-config-utils" +version = "0.21.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae1c9ff519efa8c778d341fa34971dee93e8adf4e8ae51feaefaa63bdf7e496a" +dependencies = [ + "anyhow", + "json_comments", + "thiserror", + "tracing", +] + [[package]] name = "near-config-utils" version = "2.2.1-rc.1" @@ -3581,29 +7172,90 @@ dependencies = [ "tracing", ] +[[package]] +name = "near-crypto" +version = "0.21.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d927e95742aea981b9fd60996fbeba3b61e90acafd54c2c3c2a4ed40065ff03" +dependencies = [ + "blake2 0.9.2", + "borsh 1.5.1", + "bs58 0.4.0", + "c2-chacha", + "curve25519-dalek", + "derive_more 0.99.18", + "ed25519-dalek", + "hex", + "near-account-id", + "near-config-utils 0.21.2", + "near-stdx 0.21.2", + "once_cell", + "primitive-types 0.10.1", + "rand 0.7.3", + "secp256k1", + "serde", + "serde_json", + "subtle", + "thiserror", +] + [[package]] name = "near-crypto" version = "2.2.1-rc.1" source = "git+https://github.com/near/nearcore?rev=b3d767e7664d8e123a35313ccc66c8ac1afb2058#b3d767e7664d8e123a35313ccc66c8ac1afb2058" dependencies = [ - "blake2", + "blake2 0.10.6", "borsh 1.5.1", - "bs58", + "bs58 0.4.0", "curve25519-dalek", - "derive_more", + "derive_more 0.99.18", "ed25519-dalek", "hex", "near-account-id", - "near-config-utils", - "near-stdx", + "near-config-utils 2.2.1-rc.1", + "near-stdx 2.2.1-rc.1", "once_cell", - "primitive-types", - "rand", + "primitive-types 0.10.1", + "rand 0.8.5", "secp256k1", "serde", "serde_json", - "subtle", - "thiserror", + "subtle", + "thiserror", +] + +[[package]] +name = "near-da-primitives" +version = "0.4.0" +source = "git+https://github.com/Nuffle-Labs/data-availability?branch=main#e182622aa50d4b1bee09f4cda85a2cc2b585f066" +dependencies = [ + "borsh 1.5.1", + "serde", + "serde_with", +] + +[[package]] +name = "near-da-rpc" +version = "0.4.0" +source = "git+https://github.com/Nuffle-Labs/data-availability?branch=main#e182622aa50d4b1bee09f4cda85a2cc2b585f066" +dependencies = [ + "async-trait", + "borsh 1.5.1", + "cbindgen", + "eyre", + "futures", + "near-crypto 0.21.2", + "near-da-primitives", + "near-jsonrpc-client 0.9.0", + "near-jsonrpc-primitives 0.21.2", + "near-primitives 0.21.2", + "serde", + "serde_json", + "serde_with", + "tokio", + "tracing", + "url", + "which", ] [[package]] @@ -3612,10 +7264,10 @@ version = "2.2.1-rc.1" source = "git+https://github.com/near/nearcore?rev=b3d767e7664d8e123a35313ccc66c8ac1afb2058#b3d767e7664d8e123a35313ccc66c8ac1afb2058" dependencies = [ "anyhow", - "near-chain-configs", - "near-crypto", - "near-o11y", - "near-primitives", + "near-chain-configs 2.2.1-rc.1", + "near-crypto 2.2.1-rc.1", + "near-o11y 2.2.1-rc.1", + "near-primitives 2.2.1-rc.1", "near-time", "once_cell", "prometheus", @@ -3633,29 +7285,38 @@ source = "git+https://github.com/near/nearcore?rev=b3d767e7664d8e123a35313ccc66c dependencies = [ "borsh 1.5.1", "itertools 0.10.5", - "near-cache", - "near-chain-configs", + "near-cache 2.2.1-rc.1", + "near-chain-configs 2.2.1-rc.1", "near-chain-primitives", - "near-crypto", - "near-o11y", - "near-primitives", + "near-crypto 2.2.1-rc.1", + "near-o11y 2.2.1-rc.1", + "near-primitives 2.2.1-rc.1", "near-store", "num-rational", "once_cell", - "primitive-types", - "rand", - "rand_hc", + "primitive-types 0.10.1", + "rand 0.8.5", + "rand_hc 0.3.2", "serde_json", "smart-default", "tracing", ] +[[package]] +name = "near-fmt" +version = "0.21.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a9aa862014eeedb79df494b1b8080c5b51cd014f978183e08a7918a50350558" +dependencies = [ + "near-primitives-core 0.21.2", +] + [[package]] name = "near-fmt" version = "2.2.1-rc.1" source = "git+https://github.com/near/nearcore?rev=b3d767e7664d8e123a35313ccc66c8ac1afb2058#b3d767e7664d8e123a35313ccc66c8ac1afb2058" dependencies = [ - "near-primitives-core", + "near-primitives-core 2.2.1-rc.1", ] [[package]] @@ -3667,14 +7328,14 @@ dependencies = [ "anyhow", "futures", "lazy_static", - "near-chain-configs", + "near-chain-configs 2.2.1-rc.1", "near-client", - "near-crypto", + "near-crypto 2.2.1-rc.1", "near-dyn-configs", "near-indexer-primitives", - "near-o11y", - "near-parameters", - "near-primitives", + "near-o11y 2.2.1-rc.1", + "near-parameters 2.2.1-rc.1", + "near-primitives 2.2.1-rc.1", "near-store", "nearcore", "node-runtime", @@ -3691,7 +7352,7 @@ name = "near-indexer-primitives" version = "2.2.1-rc.1" source = "git+https://github.com/near/nearcore?rev=b3d767e7664d8e123a35313ccc66c8ac1afb2058#b3d767e7664d8e123a35313ccc66c8ac1afb2058" dependencies = [ - "near-primitives", + "near-primitives 2.2.1-rc.1", "serde", "serde_json", ] @@ -3704,21 +7365,21 @@ dependencies = [ "actix", "actix-cors", "actix-web", - "bs58", - "derive_more", + "bs58 0.4.0", + "derive_more 0.99.18", "easy-ext", "futures", "hex", "near-async", - "near-chain-configs", + "near-chain-configs 2.2.1-rc.1", "near-client", "near-client-primitives", - "near-jsonrpc-client", - "near-jsonrpc-primitives", + "near-jsonrpc-client 2.2.1-rc.1", + "near-jsonrpc-primitives 2.2.1-rc.1", "near-network", - "near-o11y", - "near-primitives", - "near-rpc-error-macro", + "near-o11y 2.2.1-rc.1", + "near-primitives 2.2.1-rc.1", + "near-rpc-error-macro 2.2.1-rc.1", "once_cell", "serde", "serde_json", @@ -3728,6 +7389,25 @@ dependencies = [ "tracing-subscriber", ] +[[package]] +name = "near-jsonrpc-client" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5225c0f97a61fd4534dee3169959dd91bb812be7d0573c1130a3cf86fd16b3e" +dependencies = [ + "borsh 1.5.1", + "lazy_static", + "log", + "near-chain-configs 0.21.2", + "near-crypto 0.21.2", + "near-jsonrpc-primitives 0.21.2", + "near-primitives 0.21.2", + "reqwest 0.11.27", + "serde", + "serde_json", + "thiserror", +] + [[package]] name = "near-jsonrpc-client" version = "2.2.1-rc.1" @@ -3736,10 +7416,26 @@ dependencies = [ "actix-http", "awc", "futures", - "near-jsonrpc-primitives", - "near-primitives", + "near-jsonrpc-primitives 2.2.1-rc.1", + "near-primitives 2.2.1-rc.1", + "serde", + "serde_json", +] + +[[package]] +name = "near-jsonrpc-primitives" +version = "0.21.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63ba17af2bc4208fdc4f6a8088842ad1f0165ac46d8259db6a2719f15d039e06" +dependencies = [ + "arbitrary", + "near-chain-configs 0.21.2", + "near-crypto 0.21.2", + "near-primitives 0.21.2", + "near-rpc-error-macro 0.21.2", "serde", "serde_json", + "thiserror", ] [[package]] @@ -3748,11 +7444,11 @@ version = "2.2.1-rc.1" source = "git+https://github.com/near/nearcore?rev=b3d767e7664d8e123a35313ccc66c8ac1afb2058#b3d767e7664d8e123a35313ccc66c8ac1afb2058" dependencies = [ "arbitrary", - "near-chain-configs", + "near-chain-configs 2.2.1-rc.1", "near-client-primitives", - "near-crypto", - "near-primitives", - "near-rpc-error-macro", + "near-crypto 2.2.1-rc.1", + "near-primitives 2.2.1-rc.1", + "near-rpc-error-macro 2.2.1-rc.1", "serde", "serde_json", "thiserror", @@ -3765,8 +7461,8 @@ version = "2.2.1-rc.1" source = "git+https://github.com/near/nearcore?rev=b3d767e7664d8e123a35313ccc66c8ac1afb2058#b3d767e7664d8e123a35313ccc66c8ac1afb2058" dependencies = [ "near-account-id", - "near-chain-configs", - "near-primitives", + "near-chain-configs 2.2.1-rc.1", + "near-primitives 2.2.1-rc.1", "serde_json", ] @@ -3784,7 +7480,7 @@ dependencies = [ "bytesize", "chrono", "crossbeam-channel", - "derive_more", + "derive_more 0.99.18", "enum-map", "futures", "futures-util", @@ -3792,34 +7488,62 @@ dependencies = [ "itertools 0.10.5", "lru 0.12.4", "near-async", - "near-chain-configs", - "near-crypto", - "near-fmt", - "near-o11y", + "near-chain-configs 2.2.1-rc.1", + "near-crypto 2.2.1-rc.1", + "near-fmt 2.2.1-rc.1", + "near-o11y 2.2.1-rc.1", "near-performance-metrics", "near-performance-metrics-macros", - "near-primitives", + "near-primitives 2.2.1-rc.1", "near-store", "once_cell", - "opentelemetry", + "opentelemetry 0.22.0", "parking_lot 0.12.3", "pin-project", "protobuf 3.5.1", "protobuf-codegen", - "rand", + "rand 0.8.5", "rayon", - "reed-solomon-erasure", + "reed-solomon-erasure 6.0.0", "serde", "sha2", "smart-default", - "strum", + "strum 0.24.1", "stun", "thiserror", "time", "tokio", "tokio-stream", - "tokio-util", + "tokio-util 0.7.12", + "tracing", +] + +[[package]] +name = "near-o11y" +version = "0.21.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b64d008979998e436ac5ad2e60326d1a7f2d30dcb5a22c1a4657159f7f284342" +dependencies = [ + "actix", + "base64 0.21.7", + "clap", + "near-crypto 0.21.2", + "near-fmt 0.21.2", + "near-primitives-core 0.21.2", + "once_cell", + "opentelemetry 0.17.0", + "opentelemetry-otlp 0.10.0", + "opentelemetry-semantic-conventions 0.9.0", + "prometheus", + "serde", + "serde_json", + "strum 0.24.1", + "thiserror", + "tokio", "tracing", + "tracing-appender", + "tracing-opentelemetry 0.17.4", + "tracing-subscriber", ] [[package]] @@ -3830,12 +7554,12 @@ dependencies = [ "actix", "base64 0.21.7", "clap", - "near-crypto", - "near-primitives-core", + "near-crypto 2.2.1-rc.1", + "near-primitives-core 2.2.1-rc.1", "once_cell", - "opentelemetry", - "opentelemetry-otlp", - "opentelemetry-semantic-conventions", + "opentelemetry 0.22.0", + "opentelemetry-otlp 0.15.0", + "opentelemetry-semantic-conventions 0.14.0", "opentelemetry_sdk", "prometheus", "serde", @@ -3844,10 +7568,29 @@ dependencies = [ "tokio", "tracing", "tracing-appender", - "tracing-opentelemetry", + "tracing-opentelemetry 0.23.0", "tracing-subscriber", ] +[[package]] +name = "near-parameters" +version = "0.21.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a996c8654020f7eb3c11039cb39123fd4cd78654fde4c9e7c3fd6d092c84f342" +dependencies = [ + "assert_matches", + "borsh 1.5.1", + "enum-map", + "near-account-id", + "near-primitives-core 0.21.2", + "num-rational", + "serde", + "serde_repr", + "serde_yaml", + "strum 0.24.1", + "thiserror", +] + [[package]] name = "near-parameters" version = "2.2.1-rc.1" @@ -3856,12 +7599,12 @@ dependencies = [ "borsh 1.5.1", "enum-map", "near-account-id", - "near-primitives-core", + "near-primitives-core 2.2.1-rc.1", "num-rational", "serde", "serde_repr", "serde_yaml", - "strum", + "strum 0.24.1", "thiserror", ] @@ -3877,7 +7620,7 @@ dependencies = [ "libc", "once_cell", "tokio", - "tokio-util", + "tokio-util 0.7.12", "tracing", ] @@ -3896,11 +7639,53 @@ version = "2.2.1-rc.1" source = "git+https://github.com/near/nearcore?rev=b3d767e7664d8e123a35313ccc66c8ac1afb2058#b3d767e7664d8e123a35313ccc66c8ac1afb2058" dependencies = [ "borsh 1.5.1", - "near-crypto", - "near-o11y", - "near-primitives", + "near-crypto 2.2.1-rc.1", + "near-o11y 2.2.1-rc.1", + "near-primitives 2.2.1-rc.1", + "once_cell", + "rand 0.8.5", +] + +[[package]] +name = "near-primitives" +version = "0.21.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c880397c022d3b8f592cef18f85fd6e79181a2a04c31154afb1730f9fa21098" +dependencies = [ + "arbitrary", + "base64 0.21.7", + "borsh 1.5.1", + "bytesize", + "cfg-if 1.0.0", + "chrono", + "derive_more 0.99.18", + "easy-ext", + "enum-map", + "hex", + "near-crypto 0.21.2", + "near-fmt 0.21.2", + "near-o11y 0.21.2", + "near-parameters 0.21.2", + "near-primitives-core 0.21.2", + "near-rpc-error-macro 0.21.2", + "near-stdx 0.21.2", + "near-vm-runner 0.21.2", + "num-rational", "once_cell", - "rand", + "primitive-types 0.10.1", + "rand 0.8.5", + "rand_chacha 0.3.1", + "reed-solomon-erasure 4.0.2", + "serde", + "serde_json", + "serde_with", + "serde_yaml", + "sha3", + "smart-default", + "strum 0.24.1", + "thiserror", + "time", + "tracing", ] [[package]] @@ -3915,35 +7700,57 @@ dependencies = [ "bytesize", "cfg-if 1.0.0", "chrono", - "derive_more", + "derive_more 0.99.18", "easy-ext", "enum-map", "hex", "itertools 0.10.5", - "near-crypto", - "near-fmt", - "near-parameters", - "near-primitives-core", - "near-rpc-error-macro", - "near-stdx", + "near-crypto 2.2.1-rc.1", + "near-fmt 2.2.1-rc.1", + "near-parameters 2.2.1-rc.1", + "near-primitives-core 2.2.1-rc.1", + "near-rpc-error-macro 2.2.1-rc.1", + "near-stdx 2.2.1-rc.1", "near-structs-checker-lib", "near-time", "num-rational", "once_cell", "ordered-float", - "primitive-types", - "rand", - "rand_chacha", - "reed-solomon-erasure", + "primitive-types 0.10.1", + "rand 0.8.5", + "rand_chacha 0.3.1", + "reed-solomon-erasure 6.0.0", "serde", "serde_json", "serde_with", "sha3", "smart-default", - "strum", + "strum 0.24.1", "thiserror", "tracing", - "zstd", + "zstd 0.13.2", +] + +[[package]] +name = "near-primitives-core" +version = "0.21.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "082b1d3f6c7e273ec5cd9588e00bdbfc51be6cc9a3a7ec31fc899b4b7d2d3f9d" +dependencies = [ + "arbitrary", + "base64 0.21.7", + "borsh 1.5.1", + "bs58 0.4.0", + "derive_more 0.99.18", + "enum-map", + "near-account-id", + "num-rational", + "serde", + "serde_repr", + "serde_with", + "sha2", + "strum 0.24.1", + "thiserror", ] [[package]] @@ -3954,8 +7761,8 @@ dependencies = [ "arbitrary", "base64 0.21.7", "borsh 1.5.1", - "bs58", - "derive_more", + "bs58 0.4.0", + "derive_more 0.99.18", "enum-map", "near-account-id", "near-structs-checker-lib", @@ -3976,27 +7783,38 @@ dependencies = [ "actix-http", "actix-web", "awc", - "derive_more", + "derive_more 0.99.18", "futures", "hex", "near-account-id", - "near-chain-configs", + "near-chain-configs 2.2.1-rc.1", "near-client", "near-client-primitives", - "near-crypto", + "near-crypto 2.2.1-rc.1", "near-network", - "near-o11y", - "near-parameters", - "near-primitives", + "near-o11y 2.2.1-rc.1", + "near-parameters 2.2.1-rc.1", + "near-primitives 2.2.1-rc.1", "node-runtime", "paperclip", "serde", "serde_json", - "strum", + "strum 0.24.1", "thiserror", "tokio", ] +[[package]] +name = "near-rpc-error-core" +version = "0.21.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3610517a56329b7cce0c8c4cf2686fc4bbe0b155181b118acf20d2a301bf29b6" +dependencies = [ + "quote", + "serde", + "syn 2.0.77", +] + [[package]] name = "near-rpc-error-core" version = "2.2.1-rc.1" @@ -4007,16 +7825,34 @@ dependencies = [ "syn 2.0.77", ] +[[package]] +name = "near-rpc-error-macro" +version = "0.21.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa8db2fd2a6dbab8c56908e983f41570341e391daddb0d4c430746c6971107e3" +dependencies = [ + "fs2", + "near-rpc-error-core 0.21.2", + "serde", + "syn 2.0.77", +] + [[package]] name = "near-rpc-error-macro" version = "2.2.1-rc.1" source = "git+https://github.com/near/nearcore?rev=b3d767e7664d8e123a35313ccc66c8ac1afb2058#b3d767e7664d8e123a35313ccc66c8ac1afb2058" dependencies = [ - "near-rpc-error-core", + "near-rpc-error-core 2.2.1-rc.1", "serde", "syn 2.0.77", ] +[[package]] +name = "near-stdx" +version = "0.21.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73a697f311c110d0fabae6c8c49ab0a8eff0ec37df82cc860deba92156e77c43" + [[package]] name = "near-stdx" version = "2.2.1-rc.1" @@ -4034,32 +7870,32 @@ dependencies = [ "bytesize", "crossbeam", "derive-where", - "derive_more", + "derive_more 0.99.18", "enum-map", "hex", "itertools 0.10.5", "itoa", "lru 0.12.4", - "near-chain-configs", - "near-crypto", - "near-fmt", - "near-o11y", - "near-parameters", - "near-primitives", - "near-stdx", + "near-chain-configs 2.2.1-rc.1", + "near-crypto 2.2.1-rc.1", + "near-fmt 2.2.1-rc.1", + "near-o11y 2.2.1-rc.1", + "near-parameters 2.2.1-rc.1", + "near-primitives 2.2.1-rc.1", + "near-stdx 2.2.1-rc.1", "near-time", - "near-vm-runner", + "near-vm-runner 2.2.1-rc.1", "num_cpus", "once_cell", - "rand", + "rand 0.8.5", "rayon", - "reed-solomon-erasure", + "reed-solomon-erasure 6.0.0", "rlimit", "rocksdb", "serde", "serde_json", "smallvec", - "strum", + "strum 0.24.1", "tempfile", "thiserror", "tokio", @@ -4094,7 +7930,7 @@ dependencies = [ "awc", "futures", "near-async", - "near-o11y", + "near-o11y 2.2.1-rc.1", "near-performance-metrics", "near-performance-metrics-macros", "near-time", @@ -4116,6 +7952,24 @@ dependencies = [ "tokio", ] +[[package]] +name = "near-vm-compiler" +version = "0.21.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d6c12977e11cbc33921c367a8ae949317d099025c96531702d3afed6e5f44ce" +dependencies = [ + "enumset", + "finite-wasm", + "near-vm-types 0.21.2", + "near-vm-vm 0.21.2", + "rkyv", + "smallvec", + "target-lexicon 0.12.16", + "thiserror", + "tracing", + "wasmparser 0.99.0", +] + [[package]] name = "near-vm-compiler" version = "2.2.1-rc.1" @@ -4123,8 +7977,8 @@ source = "git+https://github.com/near/nearcore?rev=b3d767e7664d8e123a35313ccc66c dependencies = [ "enumset", "finite-wasm", - "near-vm-types", - "near-vm-vm", + "near-vm-types 2.2.1-rc.1", + "near-vm-vm 2.2.1-rc.1", "rkyv", "target-lexicon 0.12.16", "thiserror", @@ -4132,6 +7986,28 @@ dependencies = [ "wasmparser 0.99.0", ] +[[package]] +name = "near-vm-compiler-singlepass" +version = "0.21.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f883363f5d05502035f0f6c0416078fdf535557dbffc1b4177aaab87bd448528" +dependencies = [ + "dynasm 2.0.0", + "dynasmrt 2.0.0", + "enumset", + "finite-wasm", + "lazy_static", + "memoffset 0.8.0", + "more-asserts", + "near-vm-compiler 0.21.2", + "near-vm-types 0.21.2", + "near-vm-vm 0.21.2", + "rayon", + "smallvec", + "strum 0.24.1", + "tracing", +] + [[package]] name = "near-vm-compiler-singlepass" version = "2.2.1-rc.1" @@ -4144,12 +8020,36 @@ dependencies = [ "lazy_static", "memoffset 0.8.0", "more-asserts", - "near-vm-compiler", - "near-vm-types", - "near-vm-vm", + "near-vm-compiler 2.2.1-rc.1", + "near-vm-types 2.2.1-rc.1", + "near-vm-vm 2.2.1-rc.1", "rayon", "smallvec", - "strum", + "strum 0.24.1", + "tracing", +] + +[[package]] +name = "near-vm-engine" +version = "0.21.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c758c7ad8d551eafefd783aa286c2fa95f4ad6e89efedf1bd5f8629efd529ac" +dependencies = [ + "backtrace", + "cfg-if 1.0.0", + "enumset", + "finite-wasm", + "lazy_static", + "memmap2", + "more-asserts", + "near-vm-compiler 0.21.2", + "near-vm-types 0.21.2", + "near-vm-vm 0.21.2", + "region", + "rkyv", + "rustc-demangle", + "target-lexicon 0.12.16", + "thiserror", "tracing", ] @@ -4164,9 +8064,9 @@ dependencies = [ "finite-wasm", "lazy_static", "more-asserts", - "near-vm-compiler", - "near-vm-types", - "near-vm-vm", + "near-vm-compiler 2.2.1-rc.1", + "near-vm-types 2.2.1-rc.1", + "near-vm-vm 2.2.1-rc.1", "region", "rkyv", "rustc-demangle", @@ -4176,6 +8076,59 @@ dependencies = [ "tracing", ] +[[package]] +name = "near-vm-runner" +version = "0.21.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20569500ca56e161c6ed81da9a24c7bf7b974c4238b2f08b2582113b66fa0060" +dependencies = [ + "anyhow", + "base64 0.21.7", + "borsh 1.5.1", + "ed25519-dalek", + "enum-map", + "finite-wasm", + "loupe", + "memoffset 0.8.0", + "near-cache 0.21.2", + "near-crypto 0.21.2", + "near-parameters 0.21.2", + "near-primitives-core 0.21.2", + "near-stdx 0.21.2", + "near-vm-compiler 0.21.2", + "near-vm-compiler-singlepass 0.21.2", + "near-vm-engine 0.21.2", + "near-vm-types 0.21.2", + "near-vm-vm 0.21.2", + "num-rational", + "once_cell", + "parity-wasm 0.41.0", + "parity-wasm 0.42.2", + "prefix-sum-vec", + "pwasm-utils", + "ripemd", + "serde", + "serde_repr", + "serde_with", + "sha2", + "sha3", + "strum 0.24.1", + "thiserror", + "tracing", + "wasm-encoder 0.27.0", + "wasmer-compiler-near", + "wasmer-compiler-singlepass-near", + "wasmer-engine-near", + "wasmer-engine-universal-near", + "wasmer-runtime-core-near", + "wasmer-runtime-near", + "wasmer-types-near", + "wasmer-vm-near", + "wasmparser 0.78.2", + "wasmtime", + "zeropool-bn", +] + [[package]] name = "near-vm-runner" version = "2.2.1-rc.1" @@ -4190,16 +8143,16 @@ dependencies = [ "finite-wasm", "lru 0.12.4", "memoffset 0.8.0", - "near-crypto", - "near-o11y", - "near-parameters", - "near-primitives-core", - "near-stdx", - "near-vm-compiler", - "near-vm-compiler-singlepass", - "near-vm-engine", - "near-vm-types", - "near-vm-vm", + "near-crypto 2.2.1-rc.1", + "near-o11y 2.2.1-rc.1", + "near-parameters 2.2.1-rc.1", + "near-primitives-core 2.2.1-rc.1", + "near-stdx 2.2.1-rc.1", + "near-vm-compiler 2.2.1-rc.1", + "near-vm-compiler-singlepass 2.2.1-rc.1", + "near-vm-engine 2.2.1-rc.1", + "near-vm-types 2.2.1-rc.1", + "near-vm-vm 2.2.1-rc.1", "num-rational", "once_cell", "parity-wasm 0.41.0", @@ -4213,7 +8166,7 @@ dependencies = [ "serde_repr", "sha2", "sha3", - "strum", + "strum 0.24.1", "tempfile", "thiserror", "tracing", @@ -4231,6 +8184,18 @@ dependencies = [ "zeropool-bn", ] +[[package]] +name = "near-vm-types" +version = "0.21.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5e894a085d2a9ed4e8f10ae8766c95fa77b5aa47d3c0e85b89af22d5b253491" +dependencies = [ + "indexmap 1.9.3", + "num-traits", + "rkyv", + "thiserror", +] + [[package]] name = "near-vm-types" version = "2.2.1-rc.1" @@ -4242,6 +8207,29 @@ dependencies = [ "thiserror", ] +[[package]] +name = "near-vm-vm" +version = "0.21.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0c98a68706832b567cafa03375d40512bba8d95ae6d3b760f340b22a4b97893" +dependencies = [ + "backtrace", + "cc", + "cfg-if 1.0.0", + "finite-wasm", + "indexmap 1.9.3", + "libc", + "memoffset 0.8.0", + "more-asserts", + "near-vm-types 0.21.2", + "region", + "rkyv", + "thiserror", + "tracing", + "wasmparser 0.99.0", + "winapi", +] + [[package]] name = "near-vm-vm" version = "2.2.1-rc.1" @@ -4255,7 +8243,7 @@ dependencies = [ "libc", "memoffset 0.8.0", "more-asserts", - "near-vm-types", + "near-vm-types 2.2.1-rc.1", "region", "rkyv", "thiserror", @@ -4269,8 +8257,8 @@ version = "2.2.1-rc.1" source = "git+https://github.com/near/nearcore?rev=b3d767e7664d8e123a35313ccc66c8ac1afb2058#b3d767e7664d8e123a35313ccc66c8ac1afb2058" dependencies = [ "anyhow", - "near-primitives-core", - "near-vm-runner", + "near-primitives-core 2.2.1-rc.1", + "near-vm-runner 2.2.1-rc.1", "once_cell", ] @@ -4288,50 +8276,50 @@ dependencies = [ "bytesize", "chrono", "cloud-storage", - "dirs", + "dirs 4.0.0", "easy-ext", "futures", "hex", - "hyper", - "hyper-tls", + "hyper 0.14.30", + "hyper-tls 0.5.0", "indicatif", "near-async", "near-chain", - "near-chain-configs", + "near-chain-configs 2.2.1-rc.1", "near-chunks", "near-client", "near-client-primitives", - "near-config-utils", - "near-crypto", + "near-config-utils 2.2.1-rc.1", + "near-crypto 2.2.1-rc.1", "near-dyn-configs", "near-epoch-manager", "near-jsonrpc", - "near-jsonrpc-primitives", + "near-jsonrpc-primitives 2.2.1-rc.1", "near-mainnet-res", "near-network", - "near-o11y", - "near-parameters", + "near-o11y 2.2.1-rc.1", + "near-parameters 2.2.1-rc.1", "near-performance-metrics", "near-pool", - "near-primitives", + "near-primitives 2.2.1-rc.1", "near-rosetta-rpc", "near-store", "near-telemetry", - "near-vm-runner", + "near-vm-runner 2.2.1-rc.1", "node-runtime", "num-rational", "once_cell", - "rand", + "rand 0.8.5", "rayon", "regex", - "reqwest", + "reqwest 0.11.27", "rlimit", "rust-s3", "serde", "serde_ignored", "serde_json", "smart-default", - "strum", + "strum 0.24.1", "tempfile", "thiserror", "tokio", @@ -4339,6 +8327,21 @@ dependencies = [ "xz2", ] +[[package]] +name = "new_debug_unreachable" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" + +[[package]] +name = "nibble_vec" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a5d83df9f36fe23f0c3648c6bbb8b0298bb5f1939c8f2704431371f4b84d43" +dependencies = [ + "smallvec", +] + [[package]] name = "nix" version = "0.15.0" @@ -4364,24 +8367,36 @@ dependencies = [ "memoffset 0.6.5", ] +[[package]] +name = "nix" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" +dependencies = [ + "bitflags 2.6.0", + "cfg-if 1.0.0", + "cfg_aliases", + "libc", +] + [[package]] name = "node-runtime" version = "2.2.1-rc.1" source = "git+https://github.com/near/nearcore?rev=b3d767e7664d8e123a35313ccc66c8ac1afb2058#b3d767e7664d8e123a35313ccc66c8ac1afb2058" dependencies = [ "borsh 1.5.1", - "near-crypto", - "near-o11y", - "near-parameters", - "near-primitives", - "near-primitives-core", + "near-crypto 2.2.1-rc.1", + "near-o11y 2.2.1-rc.1", + "near-parameters 2.2.1-rc.1", + "near-primitives 2.2.1-rc.1", + "near-primitives-core 2.2.1-rc.1", "near-store", - "near-vm-runner", + "near-vm-runner 2.2.1-rc.1", "near-wallet-contract", "num-bigint 0.3.3", "num-traits", "once_cell", - "rand", + "rand 0.8.5", "rayon", "serde_json", "sha2", @@ -4408,6 +8423,244 @@ dependencies = [ "winapi", ] +[[package]] +name = "ntex" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93daf570cdedb9a01a3020ccd367b2ff37402b30c979aff2da23e3e84d2b6cfc" +dependencies = [ + "base64 0.22.1", + "bitflags 2.6.0", + "bytes", + "encoding_rs", + "httparse", + "httpdate", + "log", + "mime", + "nanorand", + "ntex-bytes", + "ntex-codec", + "ntex-h2", + "ntex-http", + "ntex-io", + "ntex-macros", + "ntex-net", + "ntex-router", + "ntex-rt", + "ntex-server", + "ntex-service", + "ntex-tls", + "ntex-util", + "percent-encoding", + "pin-project-lite", + "regex", + "serde", + "serde_json", + "serde_urlencoded", + "sha-1", + "thiserror", +] + +[[package]] +name = "ntex-bytes" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ffd6ac357a3fd885753ddeb4130ec92474e79d013362532eba4778854466981" +dependencies = [ + "bitflags 2.6.0", + "bytes", + "futures-core", + "serde", +] + +[[package]] +name = "ntex-codec" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69a7e111d946bb915d712df496728ca2a120b1b5643f66c580f13023bce46fda" +dependencies = [ + "ntex-bytes", +] + +[[package]] +name = "ntex-h2" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98763f0ee78f247c02fe1bcdf6380f306a08d95169f9c2d83619d5e1cb26c738" +dependencies = [ + "bitflags 2.6.0", + "fxhash", + "log", + "nanorand", + "ntex-bytes", + "ntex-codec", + "ntex-http", + "ntex-io", + "ntex-net", + "ntex-service", + "ntex-util", + "pin-project-lite", + "thiserror", +] + +[[package]] +name = "ntex-http" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f81e205c980c693cb426f55669078bc311973f7e27a34f7ea4d0ce4069dedd05" +dependencies = [ + "fxhash", + "http 1.1.0", + "itoa", + "log", + "ntex-bytes", + "serde", +] + +[[package]] +name = "ntex-io" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec68a2766bcc47426631e3461c8d7994f6eec194445f394ab61f83d92756ad12" +dependencies = [ + "bitflags 2.6.0", + "log", + "ntex-bytes", + "ntex-codec", + "ntex-service", + "ntex-util", + "pin-project-lite", +] + +[[package]] +name = "ntex-macros" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50a359f2a10c712b0446675070c22b1437d57a7cf08139f6a229e1e80817ed84" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ntex-net" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02f3d87616c8fc39c41d432402d98a118861e8e144df30037fe1400cdd29ac35" +dependencies = [ + "log", + "ntex-bytes", + "ntex-http", + "ntex-io", + "ntex-rt", + "ntex-service", + "ntex-tokio", + "ntex-util", + "thiserror", +] + +[[package]] +name = "ntex-router" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb9c68c26a87ffca54339be5f95223339db3e7bcc5d64733fef20812970a746f" +dependencies = [ + "http 1.1.0", + "log", + "ntex-bytes", + "regex", + "serde", +] + +[[package]] +name = "ntex-rt" +version = "0.4.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d24cfad65aab77e56ee1f1a218ca248c141a22f6f65aba8ed56037ec3c6f3a4" +dependencies = [ + "async-channel", + "futures-core", + "log", + "oneshot", + "tokio", +] + +[[package]] +name = "ntex-server" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b9c3f4b038d1bcc3aff4e457a4b8258828b8e119c9ef4fd1e42c8df5e732cee" +dependencies = [ + "async-broadcast", + "async-channel", + "ctrlc", + "log", + "ntex-bytes", + "ntex-net", + "ntex-rt", + "ntex-service", + "ntex-util", + "oneshot", + "polling 3.7.3", + "signal-hook", + "socket2 0.5.7", +] + +[[package]] +name = "ntex-service" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab2cc8f131d5fed702d758485fdc45a41dfab69d8ed71b84e2b910b4ea39f795" +dependencies = [ + "slab", +] + +[[package]] +name = "ntex-tls" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e08948d9a1d27d11c474c374e6b8c0eee7e2dd4a288967d5dcce13d7adbd80e" +dependencies = [ + "log", + "ntex-bytes", + "ntex-io", + "ntex-net", + "ntex-service", + "ntex-util", +] + +[[package]] +name = "ntex-tokio" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "623868ff022f737d7b94212dc85e471f895e58f6c59c72552cdc9a22c5f167ed" +dependencies = [ + "log", + "ntex-bytes", + "ntex-io", + "ntex-util", + "tokio", +] + +[[package]] +name = "ntex-util" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b95f0cf57859407e61c61a7e131cd339b05537046580b65abbf0a817f46917be" +dependencies = [ + "bitflags 2.6.0", + "futures-core", + "futures-sink", + "futures-timer", + "fxhash", + "log", + "ntex-rt", + "ntex-service", + "pin-project-lite", + "slab", +] + [[package]] name = "nu-ansi-term" version = "0.46.0" @@ -4448,6 +8701,7 @@ checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" dependencies = [ "num-integer", "num-traits", + "serde", ] [[package]] @@ -4485,6 +8739,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", + "libm", ] [[package]] @@ -4497,6 +8752,27 @@ dependencies = [ "libc", ] +[[package]] +name = "num_enum" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e613fc340b2220f734a8595782c551f1250e969d87d3be1ae0579e8d4065179" +dependencies = [ + "num_enum_derive", +] + +[[package]] +name = "num_enum_derive" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" +dependencies = [ + "proc-macro-crate 3.2.0", + "proc-macro2", + "quote", + "syn 2.0.77", +] + [[package]] name = "number_prefix" version = "0.3.0" @@ -4539,6 +8815,43 @@ version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" +[[package]] +name = "oneshot" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e296cf87e61c9cfc1a61c3c63a0f7f286ed4554e0e22be84e8a38e1d264a2a29" + +[[package]] +name = "opaque-debug" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" + +[[package]] +name = "open-fastrlp" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "786393f80485445794f6043fd3138854dd109cc6c4bd1a6383db304c9ce9b9ce" +dependencies = [ + "arrayvec 0.7.6", + "auto_impl", + "bytes", + "ethereum-types", + "open-fastrlp-derive", +] + +[[package]] +name = "open-fastrlp-derive" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "003b2be5c6c53c1cfeb0a238b8a1c3915cd410feb684457a36c10038f764bb1c" +dependencies = [ + "bytes", + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "openssl" version = "0.10.66" @@ -4593,6 +8906,27 @@ dependencies = [ "vcpkg", ] +[[package]] +name = "opentelemetry" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6105e89802af13fdf48c49d7646d3b533a70e536d818aae7e78ba0433d01acb8" +dependencies = [ + "async-trait", + "crossbeam-channel", + "futures-channel", + "futures-executor", + "futures-util", + "js-sys", + "lazy_static", + "percent-encoding", + "pin-project", + "rand 0.8.5", + "thiserror", + "tokio", + "tokio-stream", +] + [[package]] name = "opentelemetry" version = "0.22.0" @@ -4608,6 +8942,24 @@ dependencies = [ "urlencoding", ] +[[package]] +name = "opentelemetry-otlp" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d1a6ca9de4c8b00aa7f1a153bd76cb263287155cec642680d79d98706f3d28a" +dependencies = [ + "async-trait", + "futures", + "futures-util", + "http 0.2.12", + "opentelemetry 0.17.0", + "prost 0.9.0", + "thiserror", + "tokio", + "tonic 0.6.2", + "tonic-build", +] + [[package]] name = "opentelemetry-otlp" version = "0.15.0" @@ -4617,14 +8969,14 @@ dependencies = [ "async-trait", "futures-core", "http 0.2.12", - "opentelemetry", + "opentelemetry 0.22.0", "opentelemetry-proto", - "opentelemetry-semantic-conventions", + "opentelemetry-semantic-conventions 0.14.0", "opentelemetry_sdk", - "prost", + "prost 0.12.6", "thiserror", "tokio", - "tonic", + "tonic 0.11.0", ] [[package]] @@ -4633,10 +8985,19 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3a8fddc9b68f5b80dae9d6f510b88e02396f006ad48cac349411fbecc80caae4" dependencies = [ - "opentelemetry", + "opentelemetry 0.22.0", "opentelemetry_sdk", - "prost", - "tonic", + "prost 0.12.6", + "tonic 0.11.0", +] + +[[package]] +name = "opentelemetry-semantic-conventions" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "985cc35d832d412224b2cffe2f9194b1b89b6aa5d0bef76d080dce09d90e62bd" +dependencies = [ + "opentelemetry 0.17.0", ] [[package]] @@ -4658,15 +9019,55 @@ dependencies = [ "futures-util", "glob", "once_cell", - "opentelemetry", + "opentelemetry 0.22.0", "ordered-float", "percent-encoding", - "rand", + "rand 0.8.5", "thiserror", "tokio", - "tokio-stream", + "tokio-stream", +] + +[[package]] +name = "operator-rs" +version = "0.1.0" +dependencies = [ + "alloy", + "alloy-primitives 0.8.5", + "alloy-rlp", + "alloy-rpc-client 0.4.2", + "alloy-rpc-types 0.4.2", + "alloy-transport-ws 0.4.2", + "anyhow", + "bincode", + "borsh 1.5.1", + "clap", + "core-rs", + "eigensdk", + "eyre", + "futures-util", + "hex", + "lapin", + "near-da-primitives", + "near-da-rpc", + "prometheus", + "rand 0.8.5", + "serde", + "serde_json", + "serde_yaml", + "tempfile", + "tokio", + "tracing", + "tracing-subscriber", + "warp", ] +[[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.2.2" @@ -4675,7 +9076,7 @@ checksum = "4a91171844676f8c7990ce64959210cd2eaef32c2612c50f9fae9f8aaa6065a6" dependencies = [ "borsh 1.5.1", "num-traits", - "rand", + "rand 0.8.5", "serde", ] @@ -4689,6 +9090,12 @@ dependencies = [ "hashbrown 0.12.3", ] +[[package]] +name = "outref" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4030760ffd992bef45b0ae3f10ce1aba99e33464c90d14dd7c039884963ddc7a" + [[package]] name = "overload" version = "0.1.1" @@ -4709,7 +9116,7 @@ dependencies = [ "hmac", "pkcs12", "pkcs5", - "rand", + "rand 0.8.5", "rc2", "sha1", "sha2", @@ -4795,8 +9202,34 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "strum", - "strum_macros", + "strum 0.24.1", + "strum_macros 0.24.3", + "syn 1.0.109", +] + +[[package]] +name = "parity-scale-codec" +version = "3.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "306800abfa29c7f16596b5970a588435e3d5b3149683d00c12b699cc19f895ee" +dependencies = [ + "arrayvec 0.7.6", + "bitvec", + "byte-slice-cast", + "impl-trait-for-tuples", + "parity-scale-codec-derive", + "serde", +] + +[[package]] +name = "parity-scale-codec-derive" +version = "3.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d830939c76d294956402033aee57a6da7b438f2294eb94864c37b0569053a42c" +dependencies = [ + "proc-macro-crate 3.2.0", + "proc-macro2", + "quote", "syn 1.0.109", ] @@ -4890,12 +9323,77 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "parse-display" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "914a1c2265c98e2446911282c6ac86d8524f495792c38c5bd884f80499c7538a" +dependencies = [ + "parse-display-derive", + "regex", + "regex-syntax 0.8.4", +] + +[[package]] +name = "parse-display-derive" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ae7800a4c974efd12df917266338e79a7a74415173caf7e70aa0a0707345281" +dependencies = [ + "proc-macro2", + "quote", + "regex", + "regex-syntax 0.8.4", + "structmeta", + "syn 2.0.77", +] + +[[package]] +name = "password-hash" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7676374caaee8a325c9e7a2ae557f216c5563a171d6997b0ef8a65af35147700" +dependencies = [ + "base64ct", + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "password-hash" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "346f04948ba92c43e8469c1ee6736c7563d71012b17d40745260fe106aac2166" +dependencies = [ + "base64ct", + "rand_core 0.6.4", + "subtle", +] + [[package]] name = "paste" version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" +[[package]] +name = "path-slash" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e91099d4268b0e11973f036e885d652fb0b21fedcf69738c627f94db6a44f42" + +[[package]] +name = "pbkdf2" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917" +dependencies = [ + "digest 0.10.7", + "hmac", + "password-hash 0.4.2", + "sha2", +] + [[package]] name = "pbkdf2" version = "0.12.2" @@ -4923,6 +9421,25 @@ dependencies = [ "regex", ] +[[package]] +name = "pem" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8835c273a76a90455d7344889b0964598e3316e2a79ede8e36f16bdcf2228b8" +dependencies = [ + "base64 0.13.1", +] + +[[package]] +name = "pem" +version = "3.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e459365e590736a54c3fa561947c84837534b8e9af6fc5bf781307e82658fae" +dependencies = [ + "base64 0.22.1", + "serde", +] + [[package]] name = "pem-rfc7468" version = "0.7.0" @@ -4938,6 +9455,88 @@ version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" +[[package]] +name = "pest" +version = "2.7.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdbef9d1d47087a895abd220ed25eb4ad973a5e26f6a4367b038c25e28dfc2d9" +dependencies = [ + "memchr", + "thiserror", + "ucd-trie", +] + +[[package]] +name = "petgraph" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" +dependencies = [ + "fixedbitset", + "indexmap 2.5.0", +] + +[[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.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc" +dependencies = [ + "phf_macros", + "phf_shared 0.11.2", +] + +[[package]] +name = "phf_generator" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0" +dependencies = [ + "phf_shared 0.11.2", + "rand 0.8.5", +] + +[[package]] +name = "phf_macros" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3444646e286606587e49f3bcf1679b8cef1dc2c5ecc29ddacaffc305180d464b" +dependencies = [ + "phf_generator", + "phf_shared 0.11.2", + "proc-macro2", + "quote", + "syn 2.0.77", +] + +[[package]] +name = "phf_shared" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096" +dependencies = [ + "siphasher", +] + +[[package]] +name = "phf_shared" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b" +dependencies = [ + "siphasher", +] + [[package]] name = "pin-project" version = "1.1.5" @@ -5017,12 +9616,22 @@ dependencies = [ "aes", "cbc", "der", - "pbkdf2", - "scrypt", + "pbkdf2 0.12.2", + "scrypt 0.11.0", "sha2", "spki", ] +[[package]] +name = "pkcs8" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +dependencies = [ + "der", + "spki", +] + [[package]] name = "pkg-config" version = "0.3.30" @@ -5060,6 +9669,12 @@ dependencies = [ "windows-sys 0.59.0", ] +[[package]] +name = "portable-atomic" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc9c68a3f6da06753e9335d63e27f6b9754dd1920d941135b7ea8224f141adb2" + [[package]] name = "powerfmt" version = "0.2.0" @@ -5075,6 +9690,38 @@ dependencies = [ "zerocopy", ] +[[package]] +name = "precomputed-hash" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" + +[[package]] +name = "predicates" +version = "3.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e9086cc7640c29a356d1a29fd134380bee9d8f79a17410aa76e7ad295f42c97" +dependencies = [ + "anstyle", + "predicates-core", +] + +[[package]] +name = "predicates-core" +version = "1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae8177bee8e75d6846599c6b9ff679ed51e882816914eec639944d7c9aa11931" + +[[package]] +name = "predicates-tree" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41b740d195ed3166cd147c8047ec98db0e22ec019eb8eeb76d343b795304fb13" +dependencies = [ + "predicates-core", + "termtree", +] + [[package]] name = "prefix-sum-vec" version = "0.1.2" @@ -5097,7 +9744,21 @@ version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "05e4722c697a58a99d5d06a08c30821d7c082a4632198de1eaa5a6c22ef42373" dependencies = [ - "fixed-hash", + "fixed-hash 0.7.0", + "uint", +] + +[[package]] +name = "primitive-types" +version = "0.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b34d9fd68ae0b74a41b21c03c2f62847aa0ffea044eee893b4c140b37e244e2" +dependencies = [ + "fixed-hash 0.8.0", + "impl-codec", + "impl-rlp", + "impl-serde", + "scale-info", "uint", ] @@ -5107,7 +9768,7 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1d6ea3c4595b96363c13943497db34af4460fb474a95c43f4446ad341b8c9785" dependencies = [ - "toml", + "toml 0.5.11", ] [[package]] @@ -5144,37 +9805,122 @@ dependencies = [ ] [[package]] -name = "proc-macro2" -version = "1.0.86" +name = "proc-macro-error-attr2" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96de42df36bb9bba5542fe9f1a054b8cc87e172759a1868aa05c1f3acc89dfc5" +dependencies = [ + "proc-macro2", + "quote", +] + +[[package]] +name = "proc-macro-error2" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11ec05c52be0a07b08061f7dd003e7d7092e0472bc731b4af7bb1ef876109802" +dependencies = [ + "proc-macro-error-attr2", + "proc-macro2", + "quote", + "syn 2.0.77", +] + +[[package]] +name = "proc-macro2" +version = "1.0.86" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "prometheus" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d33c28a30771f7f96db69893f78b857f7450d7e0237e9c8fc6427a81bae7ed1" +dependencies = [ + "cfg-if 1.0.0", + "fnv", + "lazy_static", + "memchr", + "parking_lot 0.12.3", + "protobuf 2.28.0", + "thiserror", +] + +[[package]] +name = "proptest" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4c2511913b88df1637da85cc8d96ec8e43a3f8bb8ccb71ee1ac240d6f3df58d" +dependencies = [ + "bit-set", + "bit-vec", + "bitflags 2.6.0", + "lazy_static", + "num-traits", + "rand 0.8.5", + "rand_chacha 0.3.1", + "rand_xorshift", + "regex-syntax 0.8.4", + "rusty-fork", + "tempfile", + "unarray", +] + +[[package]] +name = "prost" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "444879275cb4fd84958b1a1d5420d15e6fcf7c235fe47f053c9c2a80aceb6001" +dependencies = [ + "bytes", + "prost-derive 0.9.0", +] + +[[package]] +name = "prost" +version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" +checksum = "deb1435c188b76130da55f17a466d252ff7b1418b2ad3e037d127b94e3411f29" dependencies = [ - "unicode-ident", + "bytes", + "prost-derive 0.12.6", ] [[package]] -name = "prometheus" -version = "0.13.4" +name = "prost-build" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d33c28a30771f7f96db69893f78b857f7450d7e0237e9c8fc6427a81bae7ed1" +checksum = "62941722fb675d463659e49c4f3fe1fe792ff24fe5bbaa9c08cd3b98a1c354f5" dependencies = [ - "cfg-if 1.0.0", - "fnv", + "bytes", + "heck 0.3.3", + "itertools 0.10.5", "lazy_static", - "memchr", - "parking_lot 0.12.3", - "protobuf 2.28.0", - "thiserror", + "log", + "multimap", + "petgraph", + "prost 0.9.0", + "prost-types", + "regex", + "tempfile", + "which", ] [[package]] -name = "prost" -version = "0.12.6" +name = "prost-derive" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "deb1435c188b76130da55f17a466d252ff7b1418b2ad3e037d127b94e3411f29" +checksum = "f9cc1a3263e07e0bf68e96268f37665207b49560d98739662cdfaae215c720fe" dependencies = [ - "bytes", - "prost-derive", + "anyhow", + "itertools 0.10.5", + "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] @@ -5190,6 +9936,16 @@ dependencies = [ "syn 2.0.77", ] +[[package]] +name = "prost-types" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "534b7a0e836e3c482d2693070f982e39e7611da9695d4d1f5a4b186b51faef0a" +dependencies = [ + "bytes", + "prost 0.9.0", +] + [[package]] name = "protobuf" version = "2.28.0" @@ -5287,6 +10043,75 @@ dependencies = [ "parity-wasm 0.41.0", ] +[[package]] +name = "quanta" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5167a477619228a0b284fac2674e3c388cba90631d7b7de620e6f1fcd08da5" +dependencies = [ + "crossbeam-utils", + "libc", + "once_cell", + "raw-cpuid", + "wasi 0.11.0+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 = "quinn" +version = "0.11.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c7c5fdde3cdae7203427dc4f0a68fe0ed09833edc525a03456b153b79828684" +dependencies = [ + "bytes", + "pin-project-lite", + "quinn-proto", + "quinn-udp", + "rustc-hash 2.0.0", + "rustls 0.23.13", + "socket2 0.5.7", + "thiserror", + "tokio", + "tracing", +] + +[[package]] +name = "quinn-proto" +version = "0.11.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fadfaed2cd7f389d0161bb73eeb07b7b78f8691047a6f3e73caaeae55310a4a6" +dependencies = [ + "bytes", + "rand 0.8.5", + "ring 0.17.8", + "rustc-hash 2.0.0", + "rustls 0.23.13", + "slab", + "thiserror", + "tinyvec", + "tracing", +] + +[[package]] +name = "quinn-udp" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fe68c2e9e1a1234e218683dbdf9f9dfcb094113c5ac2b938dfcb9bab4c4140b" +dependencies = [ + "libc", + "once_cell", + "socket2 0.5.7", + "tracing", + "windows-sys 0.59.0", +] + [[package]] name = "quote" version = "1.0.37" @@ -5302,6 +10127,29 @@ 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.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" +dependencies = [ + "getrandom 0.1.16", + "libc", + "rand_chacha 0.2.2", + "rand_core 0.5.1", + "rand_hc 0.2.0", +] + [[package]] name = "rand" version = "0.8.5" @@ -5309,11 +10157,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ "libc", - "rand_chacha", - "rand_core", + "rand_chacha 0.3.1", + "rand_core 0.6.4", "serde", ] +[[package]] +name = "rand_chacha" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" +dependencies = [ + "ppv-lite86", + "rand_core 0.5.1", +] + [[package]] name = "rand_chacha" version = "0.3.1" @@ -5321,7 +10179,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" dependencies = [ "ppv-lite86", - "rand_core", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_core" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" +dependencies = [ + "getrandom 0.1.16", ] [[package]] @@ -5330,17 +10197,35 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom", + "getrandom 0.2.15", "serde", ] +[[package]] +name = "rand_hc" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" +dependencies = [ + "rand_core 0.5.1", +] + [[package]] name = "rand_hc" version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7b363d4f6370f88d62bf586c80405657bde0f0e1b8945d47d2ad59b906cb4f54" dependencies = [ - "rand_core", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_xorshift" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d25bf25ec5ae4a3f1b92f929810509a2f53d7dca2f50b794ff57e3face536c8f" +dependencies = [ + "rand_core 0.6.4", ] [[package]] @@ -5349,7 +10234,16 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6f97cdb2a36ed4183de61b2f824cc45c9f1037f28afe0a322e9fff4c108b5aaa" dependencies = [ - "rand_core", + "rand_core 0.6.4", +] + +[[package]] +name = "raw-cpuid" +version = "11.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ab240315c661615f2ee9f0f2cd32d5a7343a84d5ebcccb99d46e6637565e7b0" +dependencies = [ + "bitflags 2.6.0", ] [[package]] @@ -5378,7 +10272,7 @@ version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "62c64daa8e9438b84aaae55010a93f396f8e60e3911590fcba770d04643fc1dd" dependencies = [ - "cipher", + "cipher 0.4.4", ] [[package]] @@ -5392,6 +10286,12 @@ dependencies = [ "futures-io", ] +[[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.1.57" @@ -5422,11 +10322,20 @@ version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" dependencies = [ - "getrandom", + "getrandom 0.2.15", "libredox", "thiserror", ] +[[package]] +name = "reed-solomon-erasure" +version = "4.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a415a013dd7c5d4221382329a5a3482566da675737494935cbbbcdec04662f9d" +dependencies = [ + "smallvec", +] + [[package]] name = "reed-solomon-erasure" version = "6.0.0" @@ -5448,7 +10357,7 @@ checksum = "ad156d539c879b7a24a363a2016d77961786e71f48f2e2fc8302a92abd2429a6" dependencies = [ "hashbrown 0.13.2", "log", - "rustc-hash", + "rustc-hash 1.1.0", "slice-group-by", "smallvec", ] @@ -5515,6 +10424,34 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "relayer-rs" +version = "0.1.0" +dependencies = [ + "alloy", + "alloy-primitives 0.8.5", + "alloy-rlp", + "alloy-rpc-client 0.4.2", + "alloy-rpc-types 0.4.2", + "alloy-transport-ws 0.4.2", + "anyhow", + "bincode", + "clap", + "eyre", + "futures-util", + "near-da-primitives", + "near-da-rpc", + "prometheus", + "serde", + "serde_json", + "serde_yaml", + "tempfile", + "tokio", + "tracing", + "tracing-subscriber", + "warp", +] + [[package]] name = "rend" version = "0.4.2" @@ -5535,11 +10472,12 @@ dependencies = [ "encoding_rs", "futures-core", "futures-util", - "h2", + "h2 0.3.26", "http 0.2.12", - "http-body", - "hyper", - "hyper-tls", + "http-body 0.4.6", + "hyper 0.14.30", + "hyper-rustls 0.24.2", + "hyper-tls 0.5.0", "ipnet", "js-sys", "log", @@ -5548,24 +10486,97 @@ dependencies = [ "once_cell", "percent-encoding", "pin-project-lite", + "rustls 0.21.12", "rustls-pemfile 1.0.4", "serde", "serde_json", "serde_urlencoded", - "sync_wrapper", - "system-configuration", + "sync_wrapper 0.1.2", + "system-configuration 0.5.1", "tokio", "tokio-native-tls", - "tokio-util", + "tokio-rustls 0.24.1", + "tokio-util 0.7.12", "tower-service", "url", "wasm-bindgen", "wasm-bindgen-futures", "wasm-streams", "web-sys", + "webpki-roots 0.25.4", "winreg", ] +[[package]] +name = "reqwest" +version = "0.12.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f713147fbe92361e52392c73b8c9e48c04c6625bce969ef54dc901e58e042a7b" +dependencies = [ + "base64 0.22.1", + "bytes", + "encoding_rs", + "futures-core", + "futures-util", + "h2 0.4.6", + "hickory-resolver", + "http 1.1.0", + "http-body 1.0.1", + "http-body-util", + "hyper 1.4.1", + "hyper-rustls 0.27.3", + "hyper-tls 0.6.0", + "hyper-util", + "ipnet", + "js-sys", + "log", + "mime", + "native-tls", + "once_cell", + "percent-encoding", + "pin-project-lite", + "quinn", + "rustls 0.23.13", + "rustls-native-certs 0.8.0", + "rustls-pemfile 2.1.3", + "rustls-pki-types", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper 1.0.1", + "system-configuration 0.6.1", + "tokio", + "tokio-native-tls", + "tokio-rustls 0.26.0", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "webpki-roots 0.26.6", + "windows-registry", +] + +[[package]] +name = "resolv-conf" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52e44394d2086d010551b14b53b1f24e31647570cd1deb0379e2c21b329aba00" +dependencies = [ + "hostname", + "quick-error", +] + +[[package]] +name = "rfc6979" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" +dependencies = [ + "hmac", + "subtle", +] + [[package]] name = "ring" version = "0.16.20" @@ -5589,7 +10600,7 @@ checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" dependencies = [ "cc", "cfg-if 1.0.0", - "getrandom", + "getrandom 0.2.15", "libc", "spin 0.9.8", "untrusted 0.9.0", @@ -5620,7 +10631,7 @@ dependencies = [ "rkyv_derive", "seahash", "tinyvec", - "uuid", + "uuid 1.10.0", ] [[package]] @@ -5635,22 +10646,102 @@ dependencies = [ ] [[package]] -name = "rlimit" -version = "0.7.0" +name = "rlimit" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "347703a5ae47adf1e693144157be231dde38c72bd485925cae7407ad3e52480b" +dependencies = [ + "libc", +] + +[[package]] +name = "rlp" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb919243f34364b6bd2fc10ef797edbfa75f33c252e7998527479c6d6b47e1ec" +dependencies = [ + "bytes", + "rlp-derive", + "rustc-hex", +] + +[[package]] +name = "rlp-derive" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e33d7b2abe0c340d8797fe2907d3f20d3b5ea5908683618bfe80df7f621f672a" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "rocksdb" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb6f170a4041d50a0ce04b0d2e14916d6ca863ea2e422689a5b694395d299ffe" +dependencies = [ + "libc", + "librocksdb-sys", +] + +[[package]] +name = "ruint" +version = "1.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c3cc4c2511671f327125da14133d0c5c5d137f006a1017a16f557bc85b16286" +dependencies = [ + "alloy-rlp", + "ark-ff 0.3.0", + "ark-ff 0.4.2", + "bytes", + "fastrlp", + "num-bigint 0.4.6", + "num-traits", + "parity-scale-codec", + "primitive-types 0.12.2", + "proptest", + "rand 0.8.5", + "rlp", + "ruint-macro", + "serde", + "valuable", + "zeroize", +] + +[[package]] +name = "ruint-macro" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "347703a5ae47adf1e693144157be231dde38c72bd485925cae7407ad3e52480b" -dependencies = [ - "libc", -] +checksum = "48fd7bd8a6377e15ad9d42a8ec25371b94ddc67abe7c8b9127bec79bebaaae18" [[package]] -name = "rocksdb" -version = "0.21.0" +name = "rust-bls-bn254" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb6f170a4041d50a0ce04b0d2e14916d6ca863ea2e422689a5b694395d299ffe" +checksum = "24ee74e41c4bdfb5720a8d5743e089cb7c7b3ea7dfed73de1fe0a02c5fe744f9" dependencies = [ - "libc", - "librocksdb-sys", + "aes", + "ark-bn254", + "ark-ec", + "ark-ff 0.4.2", + "ark-serialize 0.4.2", + "ark-std 0.4.0", + "ctr", + "hex", + "hkdf", + "num-bigint 0.4.6", + "num-traits", + "pbkdf2 0.12.2", + "rand 0.8.5", + "scrypt 0.11.0", + "serde", + "serde_json", + "sha2", + "thiserror", + "unicode-normalization", + "uuid 0.8.2", ] [[package]] @@ -5683,7 +10774,7 @@ dependencies = [ "md5", "minidom", "percent-encoding", - "reqwest", + "reqwest 0.11.27", "serde", "serde-xml-rs", "serde_derive", @@ -5707,6 +10798,12 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" +[[package]] +name = "rustc-hash" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "583034fd73374156e66797ed8e5b0d5690409c9226b22d87cb7f19821c05d152" + [[package]] name = "rustc-hex" version = "2.1.0" @@ -5722,6 +10819,15 @@ dependencies = [ "semver 0.9.0", ] +[[package]] +name = "rustc_version" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0dfe2087c51c460008730de8b57e6a320782fbfb312e1f4d520e6c6fae155ee" +dependencies = [ + "semver 0.11.0", +] + [[package]] name = "rustc_version" version = "0.4.1" @@ -5767,16 +10873,44 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "rustls" +version = "0.21.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" +dependencies = [ + "log", + "ring 0.17.8", + "rustls-webpki 0.101.7", + "sct", +] + +[[package]] +name = "rustls" +version = "0.22.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf4ef73721ac7bcd79b2b315da7779d8fc09718c6b3d2d1b2d94850eb8c18432" +dependencies = [ + "log", + "ring 0.17.8", + "rustls-pki-types", + "rustls-webpki 0.102.8", + "subtle", + "zeroize", +] + [[package]] name = "rustls" version = "0.23.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f2dabaac7466917e566adb06783a81ca48944c6898a1b08b9374106dd671f4c8" dependencies = [ + "aws-lc-rs", + "log", "once_cell", "ring 0.17.8", "rustls-pki-types", - "rustls-webpki", + "rustls-webpki 0.102.8", "subtle", "zeroize", ] @@ -5788,10 +10922,22 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2a980454b497c439c274f2feae2523ed8138bbd3d323684e1435fec62f800481" dependencies = [ "log", - "rustls", - "rustls-native-certs", + "rustls 0.23.13", + "rustls-native-certs 0.7.3", "rustls-pki-types", - "rustls-webpki", + "rustls-webpki 0.102.8", +] + +[[package]] +name = "rustls-native-certs" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9aace74cb666635c918e9c12bc0d348266037aa8eb599b5cba565709a8dff00" +dependencies = [ + "openssl-probe", + "rustls-pemfile 1.0.4", + "schannel", + "security-framework", ] [[package]] @@ -5807,6 +10953,19 @@ dependencies = [ "security-framework", ] +[[package]] +name = "rustls-native-certs" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcaf18a4f2be7326cd874a5fa579fae794320a0f388d365dca7e480e55f83f8a" +dependencies = [ + "openssl-probe", + "rustls-pemfile 2.1.3", + "rustls-pki-types", + "schannel", + "security-framework", +] + [[package]] name = "rustls-pemfile" version = "1.0.4" @@ -5832,12 +10991,23 @@ version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc0a2ce646f8655401bb81e7927b812614bd5d91dbc968696be50603510fcaf0" +[[package]] +name = "rustls-webpki" +version = "0.101.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" +dependencies = [ + "ring 0.17.8", + "untrusted 0.9.0", +] + [[package]] name = "rustls-webpki" version = "0.102.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" dependencies = [ + "aws-lc-rs", "ring 0.17.8", "rustls-pki-types", "untrusted 0.9.0", @@ -5849,6 +11019,18 @@ version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" +[[package]] +name = "rusty-fork" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb3dcc6e454c328bb824492db107ab7c0ae8fcffe4ad210136ef014458c1bc4f" +dependencies = [ + "fnv", + "quick-error", + "tempfile", + "wait-timeout", +] + [[package]] name = "rxml" version = "0.9.1" @@ -5878,7 +11060,40 @@ version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97a22f5af31f73a954c10289c93e8a50cc23d971e80ee446f1f6f7137a088213" dependencies = [ - "cipher", + "cipher 0.4.4", +] + +[[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 = "scale-info" +version = "2.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eca070c12893629e2cc820a9761bedf6ce1dcddc9852984d1dc734b8bd9bd024" +dependencies = [ + "cfg-if 1.0.0", + "derive_more 0.99.18", + "parity-scale-codec", + "scale-info-derive", +] + +[[package]] +name = "scale-info-derive" +version = "2.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d35494501194174bda522a32605929eefc9ecf7e0a326c26db1fdd85881eb62" +dependencies = [ + "proc-macro-crate 3.2.0", + "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] @@ -5890,36 +11105,79 @@ dependencies = [ "windows-sys 0.59.0", ] +[[package]] +name = "scoped-tls" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" + [[package]] name = "scopeguard" version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" +[[package]] +name = "scrypt" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f9e24d2b632954ded8ab2ef9fea0a0c769ea56ea98bddbafbad22caeeadf45d" +dependencies = [ + "hmac", + "pbkdf2 0.11.0", + "salsa20", + "sha2", +] + [[package]] name = "scrypt" version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0516a385866c09368f0b5bcd1caff3366aace790fcd46e2bb032697bb172fd1f" dependencies = [ - "pbkdf2", + "password-hash 0.5.0", + "pbkdf2 0.12.2", "salsa20", "sha2", ] +[[package]] +name = "sct" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" +dependencies = [ + "ring 0.17.8", + "untrusted 0.9.0", +] + [[package]] name = "seahash" version = "4.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b" +[[package]] +name = "sec1" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" +dependencies = [ + "base16ct", + "der", + "generic-array 0.14.7", + "pkcs8", + "subtle", + "zeroize", +] + [[package]] name = "secp256k1" version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "25996b82292a7a57ed3508f052cfff8640d38d32018784acd714758b43da9c8f" dependencies = [ - "rand", + "rand 0.8.5", "secp256k1-sys", ] @@ -5961,7 +11219,16 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" dependencies = [ - "semver-parser", + "semver-parser 0.7.0", +] + +[[package]] +name = "semver" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6" +dependencies = [ + "semver-parser 0.10.2", ] [[package]] @@ -5969,6 +11236,9 @@ name = "semver" version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" +dependencies = [ + "serde", +] [[package]] name = "semver-parser" @@ -5976,6 +11246,27 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" +[[package]] +name = "semver-parser" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0bef5b7f9e0df16536d3961cfb6e84331c065b4066afb39768d0e319411f7" +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.210" @@ -6059,6 +11350,15 @@ dependencies = [ "syn 2.0.77", ] +[[package]] +name = "serde_spanned" +version = "0.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb5b1b31579f3811bf615c144393417496f152e12ac8b7663bf664f4a815306d" +dependencies = [ + "serde", +] + [[package]] name = "serde_urlencoded" version = "0.7.1" @@ -6114,6 +11414,17 @@ dependencies = [ "unsafe-libyaml", ] +[[package]] +name = "sha-1" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5058ada175748e33390e40e872bd0fe59a19f265d0158daa551c5a88a76009c" +dependencies = [ + "cfg-if 1.0.0", + "cpufeatures", + "digest 0.10.7", +] + [[package]] name = "sha1" version = "0.10.6" @@ -6146,6 +11457,16 @@ dependencies = [ "keccak", ] +[[package]] +name = "sha3-asm" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c28efc5e327c837aa837c59eae585fc250715ef939ac32881bcc11677cd02d46" +dependencies = [ + "cc", + "cfg-if 1.0.0", +] + [[package]] name = "sharded-slab" version = "0.1.7" @@ -6161,6 +11482,16 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" +[[package]] +name = "signal-hook" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8621587d4798caf8eb44879d42e56b9a93ea5dcd315a6487c357130095b62801" +dependencies = [ + "libc", + "signal-hook-registry", +] + [[package]] name = "signal-hook-registry" version = "1.4.2" @@ -6175,6 +11506,10 @@ name = "signature" version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" +dependencies = [ + "digest 0.10.7", + "rand_core 0.6.4", +] [[package]] name = "simdutf8" @@ -6193,6 +11528,24 @@ dependencies = [ "num-traits", ] +[[package]] +name = "simple_asn1" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adc4e5204eb1910f40f9cfa375f6f05b68c3abac4b6fd879c8ff5e7ae8a0a085" +dependencies = [ + "num-bigint 0.4.6", + "num-traits", + "thiserror", + "time", +] + +[[package]] +name = "siphasher" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" + [[package]] name = "sized-chunks" version = "0.6.5" @@ -6203,6 +11556,12 @@ dependencies = [ "typenum", ] +[[package]] +name = "sketches-ddsketch" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85636c14b73d81f541e525f585c0a2109e6744e1565b5c1668e31c70c10ed65c" + [[package]] name = "slab" version = "0.4.9" @@ -6266,6 +11625,20 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "solang-parser" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c425ce1c59f4b154717592f0bdf4715c3a1d55058883622d3157e1f0908a5b26" +dependencies = [ + "itertools 0.11.0", + "lalrpop", + "lalrpop-util", + "phf", + "thiserror", + "unicode-xid", +] + [[package]] name = "spin" version = "0.5.2" @@ -6309,19 +11682,64 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" +[[package]] +name = "string_cache" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f91138e76242f575eb1d3b38b4f1362f10d3a43f47d182a5b359af488a02293b" +dependencies = [ + "new_debug_unreachable", + "once_cell", + "parking_lot 0.12.3", + "phf_shared 0.10.0", + "precomputed-hash", +] + [[package]] name = "strsim" version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" +[[package]] +name = "structmeta" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e1575d8d40908d70f6fd05537266b90ae71b15dbbe7a8b7dffa2b759306d329" +dependencies = [ + "proc-macro2", + "quote", + "structmeta-derive", + "syn 2.0.77", +] + +[[package]] +name = "structmeta-derive" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "152a0b65a590ff6c3da95cabe2353ee04e6167c896b28e3b14478c2636c922fc" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.77", +] + [[package]] name = "strum" version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f" dependencies = [ - "strum_macros", + "strum_macros 0.24.3", +] + +[[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]] @@ -6337,6 +11755,19 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "strum_macros" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "rustversion", + "syn 2.0.77", +] + [[package]] name = "stun" version = "0.4.4" @@ -6347,7 +11778,7 @@ dependencies = [ "crc", "lazy_static", "md-5", - "rand", + "rand 0.8.5", "ring 0.16.20", "subtle", "thiserror", @@ -6362,6 +11793,26 @@ version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" +[[package]] +name = "svm-rs" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11297baafe5fa0c99d5722458eac6a5e25c01eb1b8e5cd137f54079093daa7a4" +dependencies = [ + "dirs 5.0.1", + "fs2", + "hex", + "once_cell", + "reqwest 0.11.27", + "semver 1.0.23", + "serde", + "serde_json", + "sha2", + "thiserror", + "url", + "zip", +] + [[package]] name = "syn" version = "1.0.109" @@ -6384,6 +11835,30 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "syn-solidity" +version = "0.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c837dc8852cb7074e46b444afb81783140dab12c58867b49fb3898fbafedf7ea" +dependencies = [ + "paste", + "proc-macro2", + "quote", + "syn 2.0.77", +] + +[[package]] +name = "syn-solidity" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ab661c8148c2261222a4d641ad5477fd4bea79406a99056096a0b41b35617a5" +dependencies = [ + "paste", + "proc-macro2", + "quote", + "syn 2.0.77", +] + [[package]] name = "syn_derive" version = "0.1.8" @@ -6402,6 +11877,15 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" +[[package]] +name = "sync_wrapper" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7065abeca94b6a8a577f9bd45aa0867a2238b74e8eb67cf10d492bc39351394" +dependencies = [ + "futures-core", +] + [[package]] name = "synstructure" version = "0.13.1" @@ -6436,7 +11920,18 @@ checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" dependencies = [ "bitflags 1.3.2", "core-foundation", - "system-configuration-sys", + "system-configuration-sys 0.5.0", +] + +[[package]] +name = "system-configuration" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" +dependencies = [ + "bitflags 2.6.0", + "core-foundation", + "system-configuration-sys 0.6.0", ] [[package]] @@ -6449,6 +11944,16 @@ dependencies = [ "libc", ] +[[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 = "tap" version = "1.0.1" @@ -6492,6 +11997,52 @@ dependencies = [ "windows-sys 0.59.0", ] +[[package]] +name = "term" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c59df8ac95d96ff9bede18eb7300b0fda5e5d8d90960e76f8e14ae765eedbf1f" +dependencies = [ + "dirs-next", + "rustversion", + "winapi", +] + +[[package]] +name = "termtree" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3369f5ac52d5eb6ab48c6b4ffdc8efbcad6b89c765749064ba298f2c68a16a76" + +[[package]] +name = "testcontainers" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "725cbe485aafddfd8b2d01665937c95498d894c07fabd9c4e06a53c7da4ccc56" +dependencies = [ + "async-trait", + "bollard", + "bollard-stubs", + "bytes", + "dirs 5.0.1", + "docker_credential", + "either", + "futures", + "log", + "memchr", + "parse-display", + "pin-project-lite", + "reqwest 0.12.8", + "serde", + "serde_json", + "serde_with", + "thiserror", + "tokio", + "tokio-stream", + "tokio-util 0.7.12", + "url", +] + [[package]] name = "thiserror" version = "1.0.63" @@ -6572,6 +12123,15 @@ dependencies = [ "time-core", ] +[[package]] +name = "tiny-keccak" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" +dependencies = [ + "crunchy", +] + [[package]] name = "tinyvec" version = "1.8.0" @@ -6672,6 +12232,38 @@ dependencies = [ "tokio-stream", ] +[[package]] +name = "tokio-rustls" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" +dependencies = [ + "rustls 0.21.12", + "tokio", +] + +[[package]] +name = "tokio-rustls" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "775e0c0f0adb3a2f22a00c4745d728b479985fc15ee7ca6a2608388c5569860f" +dependencies = [ + "rustls 0.22.4", + "rustls-pki-types", + "tokio", +] + +[[package]] +name = "tokio-rustls" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" +dependencies = [ + "rustls 0.23.13", + "rustls-pki-types", + "tokio", +] + [[package]] name = "tokio-stream" version = "0.1.16" @@ -6681,6 +12273,93 @@ dependencies = [ "futures-core", "pin-project-lite", "tokio", + "tokio-util 0.7.12", +] + +[[package]] +name = "tokio-test" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2468baabc3311435b55dd935f702f42cd1b8abb7e754fb7dfb16bd36aa88f9f7" +dependencies = [ + "async-stream", + "bytes", + "futures-core", + "tokio", + "tokio-stream", +] + +[[package]] +name = "tokio-tungstenite" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "212d5dcb2a1ce06d81107c3d0ffa3121fe974b73f068c8282cb1c32328113b6c" +dependencies = [ + "futures-util", + "log", + "rustls 0.21.12", + "tokio", + "tokio-rustls 0.24.1", + "tungstenite 0.20.1", + "webpki-roots 0.25.4", +] + +[[package]] +name = "tokio-tungstenite" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c83b561d025642014097b66e6c1bb422783339e0909e4429cde4749d1990bc38" +dependencies = [ + "futures-util", + "log", + "tokio", + "tungstenite 0.21.0", +] + +[[package]] +name = "tokio-tungstenite" +version = "0.23.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6989540ced10490aaf14e6bad2e3d33728a2813310a0c71d1574304c49631cd" +dependencies = [ + "futures-util", + "log", + "rustls 0.23.13", + "rustls-pki-types", + "tokio", + "tokio-rustls 0.26.0", + "tungstenite 0.23.0", + "webpki-roots 0.26.6", +] + +[[package]] +name = "tokio-tungstenite" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edc5f74e248dc973e0dbb7b74c7e0d6fcc301c694ff50049504004ef4d0cdcd9" +dependencies = [ + "futures-util", + "log", + "rustls 0.23.13", + "rustls-pki-types", + "tokio", + "tokio-rustls 0.26.0", + "tungstenite 0.24.0", + "webpki-roots 0.26.6", +] + +[[package]] +name = "tokio-util" +version = "0.6.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36943ee01a6d67977dd3f84a5a1d2efeb4ada3a1ae771cadfaa535d9d9fc6507" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "log", + "pin-project-lite", + "tokio", ] [[package]] @@ -6705,11 +12384,26 @@ dependencies = [ "serde", ] +[[package]] +name = "toml" +version = "0.8.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit", +] + [[package]] name = "toml_datetime" version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" +dependencies = [ + "serde", +] [[package]] name = "toml_edit" @@ -6718,10 +12412,43 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "583c44c02ad26b0c3f3066fe629275e50627026c51ac2e595cca4c230ce1ce1d" dependencies = [ "indexmap 2.5.0", + "serde", + "serde_spanned", "toml_datetime", "winnow", ] +[[package]] +name = "tonic" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff08f4649d10a70ffa3522ca559031285d8e421d727ac85c60825761818f5d0a" +dependencies = [ + "async-stream", + "async-trait", + "base64 0.13.1", + "bytes", + "futures-core", + "futures-util", + "h2 0.3.26", + "http 0.2.12", + "http-body 0.4.6", + "hyper 0.14.30", + "hyper-timeout", + "percent-encoding", + "pin-project", + "prost 0.9.0", + "prost-derive 0.9.0", + "tokio", + "tokio-stream", + "tokio-util 0.6.10", + "tower 0.4.13", + "tower-layer", + "tower-service", + "tracing", + "tracing-futures", +] + [[package]] name = "tonic" version = "0.11.0" @@ -6733,40 +12460,66 @@ dependencies = [ "axum", "base64 0.21.7", "bytes", - "h2", + "h2 0.3.26", "http 0.2.12", - "http-body", - "hyper", + "http-body 0.4.6", + "hyper 0.14.30", "hyper-timeout", "percent-encoding", "pin-project", - "prost", + "prost 0.12.6", "tokio", "tokio-stream", - "tower", + "tower 0.4.13", "tower-layer", "tower-service", "tracing", ] +[[package]] +name = "tonic-build" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9403f1bafde247186684b230dc6f38b5cd514584e8bec1dd32514be4745fa757" +dependencies = [ + "proc-macro2", + "prost-build", + "quote", + "syn 1.0.109", +] + [[package]] name = "tower" version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" +checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" +dependencies = [ + "futures-core", + "futures-util", + "indexmap 1.9.3", + "pin-project", + "pin-project-lite", + "rand 0.8.5", + "slab", + "tokio", + "tokio-util 0.7.12", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2873938d487c3cfb9aed7546dc9f2711d867c9f90c46b889989a2cb84eba6b4f" dependencies = [ "futures-core", "futures-util", - "indexmap 1.9.3", - "pin-project", "pin-project-lite", - "rand", - "slab", - "tokio", - "tokio-util", + "sync_wrapper 0.1.2", "tower-layer", "tower-service", - "tracing", ] [[package]] @@ -6826,6 +12579,27 @@ dependencies = [ "valuable", ] +[[package]] +name = "tracing-futures" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2" +dependencies = [ + "pin-project", + "tracing", +] + +[[package]] +name = "tracing-log" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f751112709b4e791d8ce53e32c4ed2d353565a795ce84da2285393f41557bdf2" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + [[package]] name = "tracing-log" version = "0.2.0" @@ -6837,6 +12611,20 @@ dependencies = [ "tracing-core", ] +[[package]] +name = "tracing-opentelemetry" +version = "0.17.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbbe89715c1dbbb790059e2565353978564924ee85017b5fff365c872ff6721f" +dependencies = [ + "once_cell", + "opentelemetry 0.17.0", + "tracing", + "tracing-core", + "tracing-log 0.1.4", + "tracing-subscriber", +] + [[package]] name = "tracing-opentelemetry" version = "0.23.0" @@ -6845,16 +12633,26 @@ checksum = "a9be14ba1bbe4ab79e9229f7f89fab8d120b865859f10527f31c033e599d2284" dependencies = [ "js-sys", "once_cell", - "opentelemetry", + "opentelemetry 0.22.0", "opentelemetry_sdk", "smallvec", "tracing", "tracing-core", - "tracing-log", + "tracing-log 0.2.0", "tracing-subscriber", "web-time", ] +[[package]] +name = "tracing-serde" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc6b213177105856957181934e4920de57730fc69bf42c37ee5bb664d406d9e1" +dependencies = [ + "serde", + "tracing-core", +] + [[package]] name = "tracing-subscriber" version = "0.3.18" @@ -6865,12 +12663,15 @@ dependencies = [ "nu-ansi-term", "once_cell", "regex", + "serde", + "serde_json", "sharded-slab", "smallvec", "thread_local", "tracing", "tracing-core", - "tracing-log", + "tracing-log 0.2.0", + "tracing-serde", ] [[package]] @@ -6879,12 +12680,97 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" +[[package]] +name = "tungstenite" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e3dac10fd62eaf6617d3a904ae222845979aec67c615d1c842b4002c7666fb9" +dependencies = [ + "byteorder", + "bytes", + "data-encoding", + "http 0.2.12", + "httparse", + "log", + "rand 0.8.5", + "rustls 0.21.12", + "sha1", + "thiserror", + "url", + "utf-8", +] + +[[package]] +name = "tungstenite" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ef1a641ea34f399a848dea702823bbecfb4c486f911735368f1f137cb8257e1" +dependencies = [ + "byteorder", + "bytes", + "data-encoding", + "http 1.1.0", + "httparse", + "log", + "rand 0.8.5", + "sha1", + "thiserror", + "url", + "utf-8", +] + +[[package]] +name = "tungstenite" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e2e2ce1e47ed2994fd43b04c8f618008d4cabdd5ee34027cf14f9d918edd9c8" +dependencies = [ + "byteorder", + "bytes", + "data-encoding", + "http 1.1.0", + "httparse", + "log", + "rand 0.8.5", + "rustls 0.23.13", + "rustls-pki-types", + "sha1", + "thiserror", + "utf-8", +] + +[[package]] +name = "tungstenite" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18e5b8366ee7a95b16d32197d0b2604b43a0be89dc5fac9f8e96ccafbaedda8a" +dependencies = [ + "byteorder", + "bytes", + "data-encoding", + "http 1.1.0", + "httparse", + "log", + "rand 0.8.5", + "rustls 0.23.13", + "rustls-pki-types", + "sha1", + "thiserror", + "utf-8", +] + [[package]] name = "typenum" version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" +[[package]] +name = "ucd-trie" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed646292ffc8188ef8ea4d1e0e0150fb15a5c2e12ad9b8fc191ae7a8a7f3c4b9" + [[package]] name = "uint" version = "0.9.5" @@ -6897,6 +12783,12 @@ dependencies = [ "static_assertions", ] +[[package]] +name = "unarray" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94" + [[package]] name = "unicase" version = "2.7.0" @@ -6927,12 +12819,24 @@ dependencies = [ "tinyvec", ] +[[package]] +name = "unicode-segmentation" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" + [[package]] name = "unicode-width" version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0336d538f7abc86d282a4189614dfaa90810dfc2c6f6427eaf88e16311dd225d" +[[package]] +name = "unicode-xid" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" + [[package]] name = "unsafe-libyaml" version = "0.2.11" @@ -6958,8 +12862,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c" dependencies = [ "form_urlencoded", - "idna", + "idna 0.5.0", "percent-encoding", + "serde", ] [[package]] @@ -6968,17 +12873,36 @@ 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 = "utf8parse" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" +[[package]] +name = "uuid" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" +dependencies = [ + "getrandom 0.2.15", + "serde", +] + [[package]] name = "uuid" version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81dfa00651efa65069b0b6b651f4aaa31ba9e3c3ce0137aaad053604ee7e0314" +dependencies = [ + "getrandom 0.2.15", +] [[package]] name = "valuable" @@ -7004,12 +12928,37 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" +[[package]] +name = "vsimd" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c3082ca00d5a5ef149bb8b555a72ae84c9c59f7250f013ac822ac2e49b19c64" + +[[package]] +name = "wait-timeout" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f200f5b12eb75f8c1ed65abd4b2db8a6e1b138a20de009dacee265a2498f3f6" +dependencies = [ + "libc", +] + [[package]] name = "waker-fn" version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "317211a0dc0ceedd78fb2ca9a44aed3d7b9b26f81870d485c07122b4350673b7" +[[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" @@ -7019,6 +12968,41 @@ dependencies = [ "try-lock", ] +[[package]] +name = "warp" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4378d202ff965b011c64817db11d5829506d3404edeadb61f190d111da3f231c" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "headers", + "http 0.2.12", + "hyper 0.14.30", + "log", + "mime", + "mime_guess", + "multer", + "percent-encoding", + "pin-project", + "scoped-tls", + "serde", + "serde_json", + "serde_urlencoded", + "tokio", + "tokio-tungstenite 0.21.0", + "tokio-util 0.7.12", + "tower-service", + "tracing", +] + +[[package]] +name = "wasi" +version = "0.9.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" + [[package]] name = "wasi" version = "0.11.0+wasi-snapshot-preview1" @@ -7506,7 +13490,7 @@ dependencies = [ "memfd", "memoffset 0.9.1", "paste", - "rand", + "rand 0.8.5", "rustix 0.38.37", "sptr", "wasm-encoder 0.35.0", @@ -7568,6 +13552,21 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "webpki-roots" +version = "0.25.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" + +[[package]] +name = "webpki-roots" +version = "0.26.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "841c67bff177718f1d4dfefde8d8f0e78f9b6589319ba88312f567fc5841a958" +dependencies = [ + "rustls-pki-types", +] + [[package]] name = "webrtc-util" version = "0.7.0" @@ -7583,7 +13582,7 @@ dependencies = [ "libc", "log", "nix 0.24.3", - "rand", + "rand 0.8.5", "thiserror", "tokio", "winapi", @@ -7601,6 +13600,12 @@ dependencies = [ "rustix 0.38.37", ] +[[package]] +name = "widestring" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7219d36b6eac893fa81e84ebe06485e7dcbb616177469b142df14f1f4deb1311" + [[package]] name = "wildmatch" version = "2.3.4" @@ -7623,6 +13628,15 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" +[[package]] +name = "winapi-util" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" +dependencies = [ + "windows-sys 0.59.0", +] + [[package]] name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" @@ -7638,6 +13652,36 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "windows-registry" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e400001bb720a623c1c69032f8e3e4cf09984deec740f007dd2b03ec864804b0" +dependencies = [ + "windows-result", + "windows-strings", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-result" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-strings" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" +dependencies = [ + "windows-result", + "windows-targets 0.52.6", +] + [[package]] name = "windows-sys" version = "0.48.0" @@ -7805,6 +13849,25 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "ws_stream_wasm" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7999f5f4217fe3818726b66257a4475f71e74ffd190776ad053fa159e50737f5" +dependencies = [ + "async_io_stream", + "futures", + "js-sys", + "log", + "pharos", + "rustc_version 0.4.1", + "send_wrapper 0.6.0", + "thiserror", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + [[package]] name = "wyz" version = "0.5.1" @@ -7914,17 +13977,56 @@ dependencies = [ "byteorder", "crunchy", "lazy_static", - "rand", + "rand 0.8.5", "rustc-hex", ] +[[package]] +name = "zip" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "760394e246e4c28189f19d488c058bf16f564016aefac5d32bb1f3b51d5e9261" +dependencies = [ + "aes", + "byteorder", + "bzip2", + "constant_time_eq", + "crc32fast", + "crossbeam-utils", + "flate2", + "hmac", + "pbkdf2 0.11.0", + "sha1", + "time", + "zstd 0.11.2+zstd.1.5.2", +] + +[[package]] +name = "zstd" +version = "0.11.2+zstd.1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20cc960326ece64f010d2d2107537f26dc589a6573a316bd5b1dba685fa5fde4" +dependencies = [ + "zstd-safe 5.0.2+zstd.1.5.2", +] + [[package]] name = "zstd" version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fcf2b778a664581e31e389454a7072dab1647606d44f7feea22cd5abb9c9f3f9" dependencies = [ - "zstd-safe", + "zstd-safe 7.2.1", +] + +[[package]] +name = "zstd-safe" +version = "5.0.2+zstd.1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d2a5585e04f9eea4b2a3d1eca508c4dee9592a89ef6f450c11719da0726f4db" +dependencies = [ + "libc", + "zstd-sys", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 388cb0ea..b0cac027 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,6 +5,10 @@ resolver = "2" members = [ "indexer", "contracts/evm/test/ffi/bls-utils", + "relayer-rs", + "operator-rs", + "core-rs", + "workers", ] [workspace.package] @@ -12,5 +16,29 @@ version = "0.0.1" edition = "2021" repository = "https://github.com/NethermindEth/near-sffl" +[workspace.dependencies] +alloy = { version = "0.4.2", features = ["full", "node-bindings", "rpc-types-debug", "rpc-types-trace", "json-rpc", "rpc-client", "serde"] } +alloy-primitives = "0.8.3" +alloy-rpc-client = "0.4.2" +alloy-rpc-types = "0.4.2" +alloy-transport-ws = "0.4.2" +alloy-rlp = "0.3.8" +tokio = { version = "1.0", features = ["full"] } +prometheus = "0.13" +serde = { version = "1.0", features = ["derive"] } +serde_json = "1.0" +anyhow = "1.0" +tracing = "0.1" +tracing-subscriber = "0.3" +futures-util = "0.3.30" +eyre = "0.6" +bincode = "1.3" +serde_yaml = "0.9" +clap = "4.5.18" +tempfile = "3.10.0" +async-trait = "0.1" +log = "0.4" +core-rs = { path = "core-rs" } + [patch.crates-io] parity-secp256k1 = { git = 'https://github.com/paritytech/rust-secp256k1.git' } diff --git a/Makefile b/Makefile index 834bd035..3daa3625 100644 --- a/Makefile +++ b/Makefile @@ -103,6 +103,10 @@ start-indexer: ## cargo run -p indexer --release -- --home-dir ~/.near/localnet init --chain-id localnet cargo run -p indexer --release -- --home-dir ~/.near/localnet run --da-contract-ids da.test.near --rollup-ids 2 --rmq-address "amqp://127.0.0.1:5672" +start-indexer-with-fastnear: ## + cargo run --features use_fastnear -p indexer --release -- --home-dir ~/.near/localnet init --chain-id localnet + cargo run --features use_fastnear -p indexer --release -- --home-dir ~/.near/localnet run --da-contract-ids da.test.near --rollup-ids 2 --rmq-address "amqp://127.0.0.1:5672" + start-test-relayer: ## CGO_LDFLAGS="-L ./relayer/libs ${CGO_LDFLAGS}" go run relayer/cmd/main.go run-args --rpc-url ws://127.0.0.1:8546 --da-account-id da.test.near --key-path ~/.near-credentials/localnet/da.test.near.json diff --git a/contracts/evm/src/dvn/NuffDVN.sol b/contracts/evm/src/dvn/NuffDVN.sol new file mode 100644 index 00000000..1e78e70b --- /dev/null +++ b/contracts/evm/src/dvn/NuffDVN.sol @@ -0,0 +1,330 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.20; + +import "@openzeppelin/contracts/access/AccessControl.sol"; +import "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; +import "@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol"; + +import { ILayerZeroEndpointV2 } from "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol"; +import { ISendLib } from "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol"; +import { IDVN } from "@layerzerolabs/lz-evm-messagelib-v2/contracts/uld/interfaces/IDVN.sol"; +import { ILayerZeroDVN } from "@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroDVN.sol"; +import { PacketV1Codec } from "@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol"; +import { IReceiveUlnE2 } from "@layerzerolabs/lz-evm-messagelib-v2/contracts/uld/interfaces/IReceiveUlnE2.sol"; +import { IDVNFeeLib } from "@layerzerolabs/lz-evm-messagelib-v2/contracts/uld/interfaces/IDVNFeeLib.sol"; + +import { INuffClient } from "./interfaces/INuffClient.sol"; +import { INuffDVNConfig } from "./interfaces/INuffDVNConfig.sol"; + +import { ReentrancyGuard } from "@solady/src/utils/ReentrancyGuard.sol"; + +contract NuffDVNV2 is ILayerZeroDVN, AccessControl, IDVN, ReentrancyGuard { + using PacketV1Codec for bytes; + using ECDSA for bytes32; + using MessageHashUtils for bytes32; + + struct Job { + address origin; + uint32 srcEid; + uint32 dstEid; + bytes packetHeader; + bytes32 payloadHash; + uint64 confirmations; + address sender; + address receiver; + bytes options; + } + + bytes32 public constant ADMIN_ROLE = keccak256("ADMIN_ROLE"); + bytes32 public constant MESSAGE_LIB_ROLE = keccak256("MESSAGE_LIB_ROLE"); + + ILayerZeroEndpointV2 public layerZeroEndpointV2; + ILayerZeroEndpoint public layerZeroEndpointV1; + uint32 public immutable localEid; + + uint256 public lastJobId; + + uint256 public nuffAppId; + INuffClient.PublicKey public nuffPublicKey; + INuffClient public nuff; + INuffDVNConfig public dvnConfig; + + uint16 public defaultMultiplierBps; + uint64 public quorum; + address public priceFeed; + address public feeLib; + + // FIXME: everything is getting stored in cold storage; use a buffer instead + mapping(uint256 jobId => Job job) public jobs; + mapping(uint32 eid => bool isSupported) public supportedDstChain; + mapping(uint32 dstEid => DstConfig config) public dstConfig; + mapping(uint32 srcEid => mapping(uint256 jobId => bool isVerified)) public verifiedJobs; + + event JobAssigned(uint256 jobId); + event Verified(uint32 srcEid, uint256 jobId); + + constructor( + uint256 _nuffAppId, + INuffClient.PublicKey memory _nuffPublicKey, + address _nuff, + address _layerZeroEndpointV2, + address _layerZeroEndpointV1, + address _dvnConfig, + uint16 _defaultMultiplierBps, + uint64 _quorum, + address _priceFeed, + address _feeLib + ) { + nuffAppId = _nuffAppId; + nuffPublicKey = _nuffPublicKey; + nuff = INuffClient(_nuff); + layerZeroEndpointV2 = ILayerZeroEndpointV2(_layerZeroEndpointV2); + layerZeroEndpointV1 = ILayerZeroEndpoint(_layerZeroEndpointV1); + dvnConfig = INuffDVNConfig(_dvnConfig); + localEid = layerZeroEndpointV2.eid(); + defaultMultiplierBps = _defaultMultiplierBps; + quorum = _quorum; + priceFeed = _priceFeed; + feeLib = _feeLib; + _grantRole(DEFAULT_ADMIN_ROLE, msg.sender); + _grantRole(ADMIN_ROLE, msg.sender); + } + + function assignJob( + AssignJobParam calldata _param, + bytes calldata _options + ) + external + nonReentrant + payable + override + onlyRole(MESSAGE_LIB_ROLE) + returns (uint256 fee) + { + require(supportedDstChain[_param.dstEid], "Unsupported chain"); + + uint256 jobId = ++lastJobId; + Job storage newJob = jobs[jobId]; + + require(_param.sender != address(0), "Invalid sender address"); + + newJob.origin = msg.sender; + newJob.srcEid = localEid; + newJob.dstEid = _param.dstEid; + newJob.packetHeader = _param.packetHeader; + newJob.payloadHash = _param.payloadHash; + newJob.confirmations = _param.confirmations; + newJob.sender = _param.sender; + newJob.receiver = address( + uint160(uint256(_param.packetHeader.receiver())) + ); + newJob.options = _options; + + IDVNFeeLib.FeeParams memory feeParams = IDVNFeeLib.FeeParams( + priceFeed, + _param.dstEid, + _param.confirmations, + _param.sender, + quorum, + defaultMultiplierBps + ); + + fee = IDVNFeeLib(feeLib).getFeeOnSend( + feeParams, + dstConfig[_param.dstEid], + _options + ); + + emit JobAssigned(jobId); + } + + function verify( + uint32 _srcEid, + uint32 _dstEid, + uint256 _jobId, + bytes memory _packetHeader, + bytes32 _payloadHash, + uint64 _confirmations, + address _receiver, + bytes calldata _reqId, + INuffClient.BLSSign calldata _signature, + bytes calldata gatewaySignature + ) external nonReentrant { + require(_isLocal(_dstEid), "Invalid dstEid"); + require( + !verifiedJobs[_srcEid][_jobId], + "src jobId is already verified" + ); + + verifiedJobs[_srcEid][_jobId] = true; + + bytes32 hash = keccak256( + abi.encodePacked( + nuffAppId, + _reqId, + _srcEid, + _dstEid, + _jobId, + _packetHeader, + _payloadHash, + _confirmations, + _receiver + ) + ); + + _verifyNuffSig( + _reqId, + hash, + _signature, + dvnConfig.shieldNodes(_receiver), + gatewaySignature + ); + + _lzVerify( + _srcEid, + _packetHeader, + _payloadHash, + _confirmations, + _receiver + ); + + emit Verified(_srcEid, _jobId); + } + + function setNuffAppId(uint256 _nuffAppId) external onlyRole(ADMIN_ROLE) { + nuffAppId = _nuffAppId; + } + + function setNuffContract(address addr) external onlyRole(ADMIN_ROLE) { + nuff = INuffClient(addr); + } + + function setNuffPubKey( + INuffClient.PublicKey memory _nuffPublicKey + ) external onlyRole(ADMIN_ROLE) { + nuffPublicKey = _nuffPublicKey; + } + + function setLzEndpointV2( + address _layerZeroEndpointV2 + ) external onlyRole(ADMIN_ROLE) { + layerZeroEndpointV2 = ILayerZeroEndpointV2(_layerZeroEndpointV2); + } + + function updateSupportedDstChain( + uint32 eid, + bool status + ) external onlyRole(ADMIN_ROLE) { + supportedDstChain[eid] = status; + } + + function setPriceFeed(address _priceFeed) external onlyRole(ADMIN_ROLE) { + priceFeed = _priceFeed; + } + + function setDefaultMultiplierBps( + uint16 _multiplierBps + ) external onlyRole(ADMIN_ROLE) { + defaultMultiplierBps = _multiplierBps; + } + + function setDstConfig( + DstConfigParam[] calldata _params + ) external onlyRole(ADMIN_ROLE) { + for (uint256 i = 0; i < _params.length; ++i) { + DstConfigParam calldata param = _params[i]; + dstConfig[param.dstEid] = DstConfig( + param.gas, + param.multiplierBps, + param.floorMarginUSD + ); + } + emit SetDstConfig(_params); + } + + function setFeeLib(address _feeLib) external onlyRole(ADMIN_ROLE) { + feeLib = _feeLib; + } + + function withdrawFee( + address _lib, + address _to, + uint256 _amount + ) external onlyRole(ADMIN_ROLE) { + require(hasRole(MESSAGE_LIB_ROLE, _lib), "Invalid lib"); + ISendLib(_lib).withdrawFee(_to, _amount); + emit Withdraw(_lib, _to, _amount); + } + + function getFee( + uint32 _dstEid, + uint64 _confirmations, + address _sender, + bytes calldata _options + ) external nonReentrant view override returns (uint256 _fee) { + IDVNFeeLib.FeeParams memory params = IDVNFeeLib.FeeParams( + priceFeed, + _dstEid, + _confirmations, + _sender, + quorum, + defaultMultiplierBps + ); + return IDVNFeeLib(feeLib).getFee(params, dstConfig[_dstEid], _options); + } + + function _verifyNuffSig( + bytes calldata reqId, + bytes32 hash, + INuffClient.BLSSign calldata sign, + bytes calldata gatewaySignature + ) internal nonReentrant { + bool verified = nuff.nuffVerify( + reqId, + uint256(hash), + sign, + nuffPublicKey + ); + require(verified, "Invalid signature!"); + } + + function _lzVerify( + uint32 _srcEid, + bytes memory _packetHeader, + bytes32 _payloadHash, + uint64 _confirmations, + address _receiver + ) internal nonReentrant { + address receiverLib; + if (_isV2(_srcEid)) { + (receiverLib, ) = layerZeroEndpointV2.getReceiveLibrary( + _receiver, + _srcEid + ); + } else { + receiverLib = layerZeroEndpointV1.getReceiveLibraryAddress( + _receiver + ); + } + + IReceiveUlnE2(receiverLib).verify( + _packetHeader, + _payloadHash, + _confirmations + ); + } + + function _isLocal(uint32 _dstEid) internal view returns (bool) { + if (localEid == _dstEid || localEid == _dstEid + 30000) { + return true; + } + return false; + } + + function _isV2(uint32 _eid) internal pure returns (bool) { + if (_eid > 30000) { + return true; + } + return false; + } +} diff --git a/contracts/evm/src/dvn/interfaces/INuffClient.sol b/contracts/evm/src/dvn/interfaces/INuffClient.sol new file mode 100644 index 00000000..3a3ad0bb --- /dev/null +++ b/contracts/evm/src/dvn/interfaces/INuffClient.sol @@ -0,0 +1,27 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.20; + +interface INuffClient { + struct BLSSign { + Signature signature; + address owner; + address nonce; + } + + struct Signature { + uint256 X; + uint256 Y; + } + + struct PublicKey { + uint x; + uint y; + } + + function nuffVerify( + bytes calldata reqId, + uint256 hash, + BLSSign memory signature, + PublicKey memory pubKey + ) external returns (bool); +} diff --git a/contracts/evm/src/dvn/interfaces/INuffDVNConfig.sol b/contracts/evm/src/dvn/interfaces/INuffDVNConfig.sol new file mode 100644 index 00000000..9249853a --- /dev/null +++ b/contracts/evm/src/dvn/interfaces/INuffDVNConfig.sol @@ -0,0 +1,9 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.20; + +interface INuffDVNConfig { + function getInfo( + address oapp, + string[] memory _configKeys + ) external view returns (string[] memory); +} diff --git a/core-rs/Cargo.toml b/core-rs/Cargo.toml new file mode 100644 index 00000000..590b9bda --- /dev/null +++ b/core-rs/Cargo.toml @@ -0,0 +1,23 @@ +[package] +name = "core-rs" +version = "0.1.0" +edition = "2021" + +[dependencies] +tokio = { workspace = true } +async-trait = { workspace = true } +thiserror = "1.0" +anyhow = { workspace = true } + +alloy = { workspace = true } +mockall = "0.13.0" + +serde = { workspace = true } +serde_json = { workspace = true } +sha2 = "0.10.6" + +log = { workspace = true } +futures-util = { workspace = true } + +[dev-dependencies] +tokio-test = "0.4" diff --git a/core-rs/src/lib.rs b/core-rs/src/lib.rs new file mode 100644 index 00000000..e7ad11a8 --- /dev/null +++ b/core-rs/src/lib.rs @@ -0,0 +1,6 @@ +// pub mod chainio; +// pub mod config; +// pub mod metricable; +// pub mod smt; +// pub mod types; +pub mod safeclient; diff --git a/core-rs/src/safeclient/client.rs b/core-rs/src/safeclient/client.rs new file mode 100644 index 00000000..a426a88b --- /dev/null +++ b/core-rs/src/safeclient/client.rs @@ -0,0 +1,156 @@ +use alloy::eips::BlockNumberOrTag; +use alloy::primitives::{B256, U256}; +use alloy::providers::{Provider, ProviderBuilder, RootProvider, WsConnect}; +use alloy::pubsub::PubSubFrontend; +use alloy::rpc::types::{Block, Filter, Header, Log, Transaction, TransactionReceipt}; +use anyhow::Result; +use async_trait::async_trait; +use std::sync::Arc; +use std::time::Duration; +use tokio::sync::broadcast; +use futures_util::StreamExt; +use log::{error, warn}; + + +#[async_trait] +pub trait SafeClient: Send + Sync { + async fn block_number(&self) -> Result; + async fn get_block(&self, block_number: BlockNumberOrTag) -> Result>; + async fn get_transaction(&self, tx_hash: B256) -> Result>; + async fn get_transaction_receipt(&self, tx_hash: B256) -> Result>; + async fn get_logs(&self, filter: Filter) -> Result>; + async fn subscribe_logs(&self, filter: Filter) -> Result>; + async fn subscribe_new_heads(&self) -> Result>; + fn close(&self); +} + +pub struct SafeEthClient { + provider: Arc>, + log_resub_interval: Duration, + header_timeout: Duration, + block_chunk_size: u64, + block_max_range: u64, + close_sender: broadcast::Sender<()>, +} + +pub struct SafeEthClientOptions { + pub log_resub_interval: Duration, + pub header_timeout: Duration, + pub block_chunk_size: u64, + pub block_max_range: u64, +} + +impl Default for SafeEthClientOptions { + fn default() -> Self { + Self { + log_resub_interval: Duration::from_secs(300), + header_timeout: Duration::from_secs(30), + block_chunk_size: 100, + block_max_range: 100, + } + } +} + +impl SafeEthClient { + pub async fn new(ws_url: &str, options: SafeEthClientOptions) -> Result { + let ws = WsConnect::new(ws_url); + let provider = ProviderBuilder::new().on_ws(ws).await?; + let (close_sender, _) = broadcast::channel(1); + + Ok(Self { + provider: Arc::new(provider), + log_resub_interval: options.log_resub_interval, + header_timeout: options.header_timeout, + block_chunk_size: options.block_chunk_size, + block_max_range: options.block_max_range, + close_sender, + }) + } +} + +#[async_trait] +impl SafeClient for SafeEthClient { + async fn block_number(&self) -> Result { + Ok(U256::from(self.provider.get_block_number().await?)) + } + + async fn get_block(&self, block_number: BlockNumberOrTag) -> Result> { + Ok(self.provider.get_block(alloy::eips::BlockId::Number(block_number), alloy::rpc::types::BlockTransactionsKind::Hashes).await?) + } + + async fn get_transaction(&self, tx_hash: B256) -> Result> { + Ok(self.provider.get_transaction_by_hash(tx_hash).await?) + } + + async fn get_transaction_receipt(&self, tx_hash: B256) -> Result> { + Ok(self.provider.get_transaction_receipt(tx_hash).await?) + } + + async fn get_logs(&self, filter: Filter) -> Result> { + Ok(self.provider.get_logs(&filter).await?) + } + + async fn subscribe_logs(&self, filter: Filter) -> Result> { + let (tx, rx) = broadcast::channel(100); + let log_resub_interval = self.log_resub_interval; + let subscription = self.provider.subscribe_logs(&filter).await?; + let mut stream = subscription.into_stream(); + + tokio::spawn(async move { + loop { + tokio::select! { + Some(log) = stream.next() => { + if tx.send(log).is_err() { + error!("Error sending log: channel closed"); + break; + } + } + _ = tokio::time::sleep(log_resub_interval) => { + warn!("Timeout waiting for new log"); + break; + } + else => { + error!("Log stream ended unexpectedly"); + break; + } + } + } + }); + + Ok(rx) + } + + async fn subscribe_new_heads(&self) -> Result> { + let (tx, rx) = broadcast::channel(100); + let header_timeout = self.header_timeout; + let subscription = self.provider.subscribe_blocks().await?; + let mut stream = subscription.into_stream(); + + tokio::spawn(async move { + loop { + tokio::select! { + Some(block) = stream.next() => { + if tx.send(block.header).is_err() { + error!("Error sending header: channel closed"); + break; + } + } + _ = tokio::time::sleep(header_timeout) => { + warn!("Timeout waiting for new header"); + break; + } + else => { + error!("Header stream ended unexpectedly"); + break; + } + } + } + }); + + Ok(rx) + } + + fn close(&self) { + let _ = self.close_sender.send(()); + } +} diff --git a/core-rs/src/safeclient/mod.rs b/core-rs/src/safeclient/mod.rs new file mode 100644 index 00000000..b5e700b0 --- /dev/null +++ b/core-rs/src/safeclient/mod.rs @@ -0,0 +1,5 @@ +mod client; +mod utils; + +pub use client::{SafeClient, SafeEthClient, SafeEthClientOptions}; +pub use utils::*; \ No newline at end of file diff --git a/core-rs/src/safeclient/utils.rs b/core-rs/src/safeclient/utils.rs new file mode 100644 index 00000000..7a81cac5 --- /dev/null +++ b/core-rs/src/safeclient/utils.rs @@ -0,0 +1,26 @@ +use alloy::{primitives::B256, rpc::types::Log}; +use sha2::{Digest, Sha256}; + +pub fn hash_log(log: &Log) -> B256 { + let mut hasher = Sha256::new(); + + // Hash the log fields + hasher.update(log.address().as_slice()); + for topic in log.topics() { + hasher.update(topic.as_slice()); + } + hasher.update(log.data().data.clone()); + + // Hash additional block and tx info + if let Some(block_hash) = log.block_hash { + hasher.update(block_hash.as_slice()); + } + if let Some(transaction_hash) = log.transaction_hash { + hasher.update(transaction_hash.as_slice()); + } + if let Some(log_index) = log.log_index { + hasher.update(&log_index.to_be_bytes()); + } + + B256::from_slice(&hasher.finalize()) +} diff --git a/indexer/Cargo.toml b/indexer/Cargo.toml index 5591fee0..295e8089 100644 --- a/indexer/Cargo.toml +++ b/indexer/Cargo.toml @@ -9,29 +9,33 @@ edition = "2021" actix = "0.13.1" actix-web = "4.5.1" futures = "0.3.5" -tokio = { version = "1.28.2", features = ["sync", "time"] } +tokio = { workspace = true } deadpool = "0.10.0" lapin = "2.3.1" deadpool-lapin = "0.11.0" tokio-executor-trait = "2.1.0" tokio-reactor-trait = "1.1.0" -prometheus = "0.13.3" +prometheus = { workspace = true } -clap = { version = "4.4.11", features = ["color", "derive", "env"] } +clap = { workspace = true } openssl-probe = "0.1.4" -serde = { version = "1", features = ["derive"] } -serde_json = "1.0.68" +serde = { workspace = true } +serde_json = { workspace = true } -tracing = { version = "0.1.36", features = ["std"] } +tracing = { workspace = true } thiserror = "1.0.56" -anyhow = "1.0.79" +anyhow = { workspace = true } near-indexer = { git = "https://github.com/near/nearcore", rev = "b3d767e7664d8e123a35313ccc66c8ac1afb2058" } near-client = { git = "https://github.com/near/nearcore", rev = "b3d767e7664d8e123a35313ccc66c8ac1afb2058" } near-o11y = { git = "https://github.com/near/nearcore", rev = "b3d767e7664d8e123a35313ccc66c8ac1afb2058" } near-client-primitives = { git = "https://github.com/near/nearcore", rev = "b3d767e7664d8e123a35313ccc66c8ac1afb2058" } +reqwest = { version = "0.12.7", features = ["json"] } borsh = { version = "1.0.0", features = ["derive", "rc"] } -serde_yaml = "0.9.34" +serde_yaml = { workspace = true } [dev-dependencies] near-crypto = { git = "https://github.com/near/nearcore", rev = "b3d767e7664d8e123a35313ccc66c8ac1afb2058" } + +[features] +use_fastnear = [] diff --git a/indexer/Dockerfile b/indexer/Dockerfile index 0f9cf621..1440b64b 100644 --- a/indexer/Dockerfile +++ b/indexer/Dockerfile @@ -1,4 +1,4 @@ -FROM rust:1.79 AS builder +FROM rust:1.81 AS builder # Ensure matches rust-toolchain! WORKDIR /tmp/indexer # Copy from nearcore: @@ -14,11 +14,11 @@ RUN apt-get update -qq && \ llvm \ clang -COPY ./indexer/Cargo.toml . +COPY ./Cargo.toml . RUN mkdir ./src && echo "fn main() {}" > ./src/main.rs RUN cargo build --release -p indexer -COPY ./indexer . +COPY . . RUN touch ./src/main.rs RUN cargo build --release -p indexer @@ -29,7 +29,7 @@ WORKDIR /indexer-app RUN apt update && apt install -yy openssl ca-certificates jq curl COPY --from=builder /tmp/indexer/target/release/indexer . -COPY ./indexer/entrypoint.sh ./entrypoint.sh +COPY entrypoint.sh ./entrypoint.sh RUN chmod +x ./entrypoint.sh EXPOSE 3030 diff --git a/indexer/FastIndexer.dockerfile b/indexer/FastIndexer.dockerfile new file mode 100644 index 00000000..dbb21b9e --- /dev/null +++ b/indexer/FastIndexer.dockerfile @@ -0,0 +1,47 @@ +FROM rust:1.79-bookworm AS builder +WORKDIR /tmp/indexer + +# Copy from nearcore: +# https://github.com/near/nearcore/blob/master/Dockerfile +RUN apt-get update -qq && \ + apt-get install -y \ + git \ + cmake \ + g++ \ + pkg-config \ + libssl-dev \ + curl \ + llvm \ + clang + +COPY ./Cargo.toml . +RUN mkdir ./src && echo "fn main() {}" > ./src/main.rs +RUN cargo build --release -p indexer --features use_fastnear + +COPY . . +RUN touch ./src/main.rs + +RUN cargo build --release -p indexer --features use_fastnear + +FROM debian:bookworm-slim as runtime +WORKDIR /indexer-app + +RUN apt update && apt install -yy openssl ca-certificates jq curl + +COPY --from=builder /tmp/indexer/target/release/indexer . +COPY entrypoint.sh ./entrypoint.sh +RUN chmod +x ./entrypoint.sh + +EXPOSE 3030 + +HEALTHCHECK --interval=20s --timeout=30s --retries=10000 \ + CMD (curl -f -s -X POST -H "Content-Type: application/json" \ + -d '{"jsonrpc":"2.0","method":"block","params":{"finality":"optimistic"},"id":"dontcare"}' \ + http://localhost:3030 | \ + jq -es 'if . == [] then null else .[] | (now - (.result.header.timestamp / 1000000000)) < 10 end') && \ + (curl -f -s -X POST -H "Content-Type: application/json" \ + -d '{"jsonrpc":"2.0","method":"status","params":[],"id":"dontcare"}' \ + http://localhost:3030 | \ + jq -es 'if . == [] then null else .[] | .result.sync_info.syncing == false end') + +ENTRYPOINT [ "./entrypoint.sh" ] diff --git a/indexer/README.md b/indexer/README.md index c400320b..ba2c128e 100644 --- a/indexer/README.md +++ b/indexer/README.md @@ -21,4 +21,16 @@ $ cargo run --release -- --home-dir ~/.near/localnet/ run --da-contract-id "da.t Now the node have started, and we listen to "submit" method in DA contract. -Use [near-cli](https://github.com/near/near-shell) to "submit" calldata. \ No newline at end of file +Use [near-cli](https://github.com/near/near-shell) to "submit" calldata. + +### FastNear Mode + +To run the Indexer using FastNear endpoints, use the following command: + +```bash +$ cargo run --features use_fastnear -p indexer --release -- --home-dir ~/.near/testnet run --da-contract-ids da.testnet --rollup-ids 2 +``` + +This command will start the indexer using FastNEAR endpoints to fetch NEAR blocks more efficiently. The `--features use_fastnear` flag enables the FastNEAR mode. + +Note: FastNEAR will only work with NEAR mainnet and testnet. For local testing it is recommended to use a local NEAR node. \ No newline at end of file diff --git a/indexer/src/block_listener.rs b/indexer/src/block_listener.rs index a9a6c643..6f1c2695 100644 --- a/indexer/src/block_listener.rs +++ b/indexer/src/block_listener.rs @@ -17,8 +17,7 @@ use tracing::info; use crate::{ errors::Result, metrics::{make_block_listener_metrics, BlockEventListener, Metricable}, - types, - types::CandidateData, + types::{self, CandidateData}, INDEXER, }; @@ -240,9 +239,9 @@ impl BlockListener { } /// Filters indexer stream and returns receiving channel. - pub(crate) fn run(&self, indexer_stream: Receiver) -> (JoinHandle<()>, Receiver) { + pub(crate) fn run(&self, streamer: Receiver) -> (JoinHandle<()>, Receiver) { let (candidates_sender, candidates_receiver) = mpsc::channel(1000); - let handle = actix::spawn(Self::process_stream(self.clone(), indexer_stream, candidates_sender)); + let handle = actix::spawn(Self::process_stream(self.clone(), streamer, candidates_sender)); (handle, candidates_receiver) } @@ -338,6 +337,7 @@ mod tests { gas: 100, deposit: 100, }], + priority_fee: 0, signature: Signature::default(), hash: CryptoHash::default(), }, @@ -355,6 +355,7 @@ mod tests { nonce: 0, receiver_id: da_contract_id, actions: vec![ActionView::CreateAccount], + priority_fee: 0, signature: Signature::default(), hash: CryptoHash::default(), }, @@ -415,6 +416,7 @@ mod tests { nonce: 0, receiver_id: da_contract_id.clone(), actions, + priority_fee: 0, signature: Signature::default(), hash: CryptoHash::hash_bytes(b"test_tx_id"), }, diff --git a/indexer/src/errors.rs b/indexer/src/errors.rs index 74bb65db..cff7e22e 100644 --- a/indexer/src/errors.rs +++ b/indexer/src/errors.rs @@ -30,6 +30,14 @@ pub enum Error { ActixErrorKind(std::io::ErrorKind), #[error{"0"}] JoinError(#[from] tokio::task::JoinError), + #[error("Indexer not initialized")] + IndexerNotInitialized, + #[error("Network error: {0}")] + NetworkError(String), + #[error("API error: {0}")] + ApiError(String), + #[error("Deserialize jsonerror: {0}")] + DeserializeJsonError(String), } impl From> for Error { diff --git a/indexer/src/fastnear_indexer.rs b/indexer/src/fastnear_indexer.rs new file mode 100644 index 00000000..fc8d7fc6 --- /dev/null +++ b/indexer/src/fastnear_indexer.rs @@ -0,0 +1,195 @@ +use std::collections::HashMap; +use near_indexer::near_primitives::{types::AccountId, views::{ActionView, ExecutionStatusView, ReceiptEnumView}}; +use reqwest::Client; +use tokio::sync::{mpsc::{Sender, Receiver}, mpsc}; +use tracing::{info, error, debug, trace}; + +use crate::{errors::Error, rmq_publisher::{get_routing_key, PublishData, PublishOptions, PublishPayload, PublisherContext}, types::{BlockWithTxHashes, IndexerExecutionOutcomeWithReceiptAndTxHash, PartialCandidateData, PartialCandidateDataWithBlockTxHash}}; + +const FASTNEAR_ENDPOINT: &str = "https://testnet.neardata.xyz/v0/last_block/final"; + +#[derive(Debug)] +pub struct FastNearIndexer { + client: Client, + addresses_to_rollup_ids: HashMap, +} + +impl FastNearIndexer { + pub(crate) fn new(addresses_to_rollup_ids: HashMap) -> Self { + debug!(target: "fastnear_indexer", "Creating new FastNearIndexer"); + Self { + client: Client::new(), + addresses_to_rollup_ids, + } + } + + pub fn run(&self) -> Receiver { + info!(target: "fastnear_indexer", "Starting FastNearIndexer"); + let block_receiver = self.stream_latest_blocks(); + let (publish_sender, publish_receiver) = mpsc::channel(100); + + let addresses_to_rollup_ids = self.addresses_to_rollup_ids.clone(); + + tokio::spawn(async move { + Self::process_blocks(block_receiver, publish_sender, addresses_to_rollup_ids).await; + }); + + publish_receiver + } + + async fn process_blocks( + mut block_receiver: Receiver, + publish_sender: Sender, + addresses_to_rollup_ids: HashMap, + ) { + debug!(target: "fastnear_indexer", "Starting block processing"); + while let Some(block) = block_receiver.recv().await { + trace!(target: "fastnear_indexer", "Received block: {:?}", block.block.header.height); + if let Err(e) = Self::parse_and_publish_block(block, &publish_sender, &addresses_to_rollup_ids).await { + error!(target: "fastnear_indexer", "Error parsing and publishing block: {:?}", e); + } + } + } + + async fn parse_and_publish_block( + block: BlockWithTxHashes, + publish_sender: &Sender, + addresses_to_rollup_ids: &HashMap, + ) -> Result<(), Error> { + debug!(target: "fastnear_indexer", "Parsing block: {:?}", block.block.header.height); + for shard in block.shards { + for receipt_execution_outcome in shard.receipt_execution_outcomes { + let receiver_id = &receipt_execution_outcome.receipt.receiver_id; + debug!(target: "fastnear_indexer", "Processing receipt for receiver_id: {}", receiver_id); + if let Some(rollup_id) = addresses_to_rollup_ids.get(receiver_id) { + trace!(target: "fastnear_indexer", "Processing receipt for rollup_id: {}", rollup_id); + if !Self::is_successful_execution(&receipt_execution_outcome) { + trace!(target: "fastnear_indexer", "Skipping unsuccessful execution for rollup_id: {}", rollup_id); + continue; + } + + let partial_candidate_data = Self::receipt_filter_map( + receipt_execution_outcome.receipt.receipt, + *rollup_id + ); + + if let (Some(partial_data), Some(tx_hash)) = (partial_candidate_data, receipt_execution_outcome.tx_hash) { + let candidate_data = PartialCandidateDataWithBlockTxHash { + rollup_id: *rollup_id, + payloads: partial_data.payloads, + tx_hash, + block_hash: block.block.header.hash, + }; + debug!(target: "fastnear_indexer", "Sending candidate data for rollup_id: {}", rollup_id); + Self::send(&candidate_data, publish_sender).await?; + } + } + } + } + + Ok(()) + } + + pub fn stream_latest_blocks(&self) -> mpsc::Receiver { + info!(target: "fastnear_indexer", "Starting block stream"); + let (block_sender, block_receiver) = mpsc::channel(100); + let client = self.client.clone(); + + tokio::spawn(async move { + loop { + match Self::fetch_latest_block(&client).await { + Ok(block) => { + if block_sender.send(block.clone()).await.is_err() { + error!(target: "fastnear_indexer", "Failed to send block to channel"); + break; + } + info!(target: "fastnear_indexer", "Successfully fetched and sent latest block with id: {}", block.block.header.height); + } + Err(e) => error!(target: "fastnear_indexer", "Error fetching latest block: {:?}", e), + } + tokio::time::sleep(std::time::Duration::from_secs(1)).await; + } + }); + + block_receiver + } + + async fn fetch_latest_block(client: &Client) -> Result { + debug!(target: "fastnear_indexer", "Fetching latest block"); + let response = client.get(FASTNEAR_ENDPOINT) + .send() + .await + .and_then(|r| r.error_for_status()) + .map_err(|e| Error::NetworkError(e.to_string()))?; + + response.json::() + .await + .map_err(|e| Error::DeserializeJsonError(e.to_string())) + } + + async fn send(candidate_data: &PartialCandidateDataWithBlockTxHash, sender: &Sender) -> Result<(), Error> { + trace!(target: "fastnear_indexer", "Sending candidate data: {:?}", candidate_data); + for data in candidate_data.clone().payloads { + let publish_data = PublishData { + publish_options: PublishOptions { + routing_key: get_routing_key(candidate_data.rollup_id), + ..PublishOptions::default() + }, + cx: PublisherContext { + block_hash: candidate_data.block_hash, + }, + payload: PublishPayload { + transaction_id: candidate_data.tx_hash, + data, + }, + }; + sender.send(publish_data).await? + } + + Ok(()) + } + + fn is_successful_execution(receipt_execution_outcome: &IndexerExecutionOutcomeWithReceiptAndTxHash) -> bool { + let is_successful = matches!( + receipt_execution_outcome.execution_outcome.outcome.status, + ExecutionStatusView::SuccessValue(ref value) if value.is_empty() + ); + trace!(target: "fastnear_indexer", "Execution successful: {}", is_successful); + is_successful + } + + fn receipt_filter_map(receipt_enum_view: ReceiptEnumView, rollup_id: u32) -> Option { + trace!(target: "fastnear_indexer", "Filtering receipt for rollup_id: {}", rollup_id); + let payloads = match receipt_enum_view { + ReceiptEnumView::Action { actions, .. } => { + actions.into_iter() + .filter_map(Self::extract_args) + .collect::>>() + } + _ => return None, + }; + + if payloads.is_empty() { + trace!(target: "fastnear_indexer", "No payloads found for rollup_id: {}", rollup_id); + return None; + } + + Some(PartialCandidateData { + rollup_id, + payloads, + }) + } + + fn extract_args(action: ActionView) -> Option> { + match action { + ActionView::FunctionCall { method_name, args, .. } if method_name == "submit" => { + trace!(target: "fastnear_indexer", "Extracted args for 'submit' method"); + Some(args.into()) + }, + _ => { + trace!(target: "fastnear_indexer", "Skipped non-'submit' method"); + None + }, + } + } +} diff --git a/indexer/src/indexer_wrapper.rs b/indexer/src/indexer_wrapper.rs index 540905f4..53bfd0fd 100644 --- a/indexer/src/indexer_wrapper.rs +++ b/indexer/src/indexer_wrapper.rs @@ -1,23 +1,20 @@ use near_indexer::near_primitives::types::AccountId; use prometheus::Registry; use std::collections::HashMap; -use tokio::{sync::mpsc::Receiver, task::JoinHandle}; - +use tokio::{task::JoinHandle, sync::mpsc::Receiver}; use crate::{block_listener::BlockListener, errors::Result, metrics::Metricable, types}; - pub struct IndexerWrapper { - indexer: near_indexer::Indexer, + indexer: Option, block_listener: BlockListener, } impl IndexerWrapper { pub fn new(config: near_indexer::IndexerConfig, addresses_to_rollup_ids: HashMap) -> Self { - let indexer = near_indexer::Indexer::new(config).expect("Indexer::new()"); - let block_listener = BlockListener::new(addresses_to_rollup_ids); - - Self { - indexer, - block_listener, + let indexer: near_indexer::Indexer = near_indexer::Indexer::new(config).expect("Indexer::new()"); + let block_listener = BlockListener::new(addresses_to_rollup_ids); + Self { + indexer: Some(indexer), + block_listener, } } @@ -27,11 +24,16 @@ impl IndexerWrapper { actix::Addr, actix::Addr, ) { - self.indexer.client_actors() + //TODO: handle error + if let Some(indexer) = &self.indexer { + indexer.client_actors() + } else { + panic!("Indexer not initialized") + } } pub fn run(self) -> (JoinHandle<()>, Receiver) { - let indexer_stream = self.indexer.streamer(); + let indexer_stream = self.indexer.unwrap().streamer(); self.block_listener.run(indexer_stream) } } diff --git a/indexer/src/main.rs b/indexer/src/main.rs index feeb98fc..ee157102 100644 --- a/indexer/src/main.rs +++ b/indexer/src/main.rs @@ -1,7 +1,10 @@ use clap::Parser; use configs::{Opts, SubCommand}; +use fastnear_indexer::FastNearIndexer; use prometheus::Registry; use tracing::{error, info}; +use tokio::sync::mpsc::Receiver; +use crate::rmq_publisher::PublishData; use crate::{ candidates_validator::CandidatesValidator, configs::RunConfigArgs, errors::Error, errors::Result, @@ -17,6 +20,7 @@ mod metrics; mod metrics_server; mod rmq_publisher; mod types; +mod fastnear_indexer; const INDEXER: &str = "indexer"; @@ -37,30 +41,39 @@ fn run(home_dir: std::path::PathBuf, config: RunConfigArgs) -> Result<()> { } else { None }; - + // firat: added some logic to handle the case when fastnear is enabled. Needs tests and maybe refactoring for base case // TODO: refactor let block_res = system.block_on(async move { - let mut indexer = IndexerWrapper::new(indexer_config, addresses_to_rollup_ids); - if let Some(_) = config.metrics_ip_port_address { - indexer.enable_metrics(registry.clone())?; - } - - let (view_client, _) = indexer.client_actors(); - let (block_handle, candidates_stream) = indexer.run(); - let mut candidates_validator = CandidatesValidator::new(view_client); - if let Some(_) = config.metrics_ip_port_address { - candidates_validator.enable_metrics(registry.clone())?; + let validated_stream: Receiver; + if cfg!(feature = "use_fastnear") { + let fastnear_indexer = FastNearIndexer::new(addresses_to_rollup_ids); + validated_stream = fastnear_indexer.run(); + } else { + let mut indexer = IndexerWrapper::new(indexer_config, addresses_to_rollup_ids); + if config.metrics_ip_port_address.is_some() { + indexer.enable_metrics(registry.clone())?; + } + + let (view_client, _) = indexer.client_actors(); + let (block_handle, candidates_stream) = indexer.run(); + let mut candidates_validator = CandidatesValidator::new(view_client); + if config.metrics_ip_port_address.is_some() { + candidates_validator.enable_metrics(registry.clone())?; + } + + validated_stream = candidates_validator.run(candidates_stream); + + // TODO: Handle block_handle whether cancelled or panics + block_handle.await?; } - - let validated_stream = candidates_validator.run(candidates_stream); + let mut rmq_publisher = RmqPublisher::new(&config.rmq_address)?; - if let Some(_) = config.metrics_ip_port_address { + if config.metrics_ip_port_address.is_some() { rmq_publisher.enable_metrics(registry.clone())?; } rmq_publisher.run(validated_stream); - // TODO: block_handle wether cancelled or Panics. Can handle - Ok::<_, Error>(block_handle.await?) + Ok::<_, Error>(()) }); if let Some(handle) = server_handle { @@ -84,11 +97,7 @@ fn read_config( let config_str = std::fs::read_to_string(config_path)?; serde_yaml::from_str(&config_str).map_err(Into::into) } else { - if let Some(config_args) = config_args { - Ok(config_args) - } else { - panic!("Either config_path or config_args must be provided") - } + config_args.ok_or_else(|| Error::AnyhowError(anyhow::anyhow!("Either config_path or config_args must be provided"))) } } @@ -101,12 +110,12 @@ fn main() -> Result<()> { let env_filter = near_o11y::tracing_subscriber::EnvFilter::new( "nearcore=info,publisher=info,indexer=info,candidates_validator=info,\ metrics=info,tokio_reactor=info,near=info,stats=info,telemetry=info,\ - near-performance-metrics=info", + near-performance-metrics=info,fastnear_indexer=info", ); let _subscriber = near_o11y::default_subscriber(env_filter, &Default::default()).global(); let opts: Opts = Opts::parse(); - let home_dir = opts.home_dir.unwrap_or(near_indexer::get_default_home()); + let home_dir = opts.home_dir.unwrap_or_else(near_indexer::get_default_home); match opts.subcmd { SubCommand::Init(params) => { near_indexer::indexer_init_configs(&home_dir, read_config(params.config, params.args)?.into())?; diff --git a/indexer/src/types.rs b/indexer/src/types.rs index 7552b95e..247fc75f 100644 --- a/indexer/src/types.rs +++ b/indexer/src/types.rs @@ -2,6 +2,8 @@ use std::collections::VecDeque; use std::fmt::Formatter; use std::{fmt, sync}; use tokio::sync::Mutex; +use near_indexer::{near_primitives::{hash::CryptoHash, types::ShardId, views::{BlockView, ExecutionOutcomeWithIdView, ReceiptView, StateChangeWithCauseView}}, IndexerChunkView, StreamerMessage}; +use tokio::sync::mpsc::Receiver; pub(crate) type ProtectedQueue = sync::Arc>>; @@ -11,6 +13,57 @@ pub(crate) struct CandidateData { pub transaction: near_indexer::IndexerTransactionWithOutcome, pub payloads: Vec>, } +#[derive(Clone, Debug)] +pub (crate) struct PartialCandidateData { + pub rollup_id: u32, + pub payloads: Vec>, +} +#[derive(Clone, Debug)] +pub(crate) struct PartialCandidateDataWithBlockTxHash { + pub rollup_id: u32, + pub payloads: Vec>, + pub tx_hash: CryptoHash, + pub block_hash: CryptoHash, +} +#[derive(Debug, serde::Serialize, serde::Deserialize, Clone)] +pub struct BlockWithTxHashes { + pub block: BlockView, + pub shards: Vec, +} + +#[derive(Debug, serde::Serialize, serde::Deserialize, Clone)] +pub struct IndexerShardWithTxHashes { + pub shard_id: ShardId, + pub chunk: Option, + pub receipt_execution_outcomes: Vec, + pub state_changes: Vec, +} + + +pub enum IndexerStream { + StreamerMessage(Receiver), + BlockWithTxHashes(Receiver), +} + +impl From> for IndexerStream { + fn from(value: Receiver) -> Self { + IndexerStream::StreamerMessage(value) + } +} + +impl From> for IndexerStream { + fn from(value: Receiver) -> Self { + IndexerStream::BlockWithTxHashes(value) + } +} + +#[derive(Clone, Debug, serde::Serialize, serde::Deserialize)] +pub struct IndexerExecutionOutcomeWithReceiptAndTxHash { + pub execution_outcome: ExecutionOutcomeWithIdView, + pub receipt: ReceiptView, + pub tx_hash: Option, +} + impl fmt::Display for CandidateData { fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result { diff --git a/indexer/test_data/candidates/7dVA5Z3B4tVN38Cr3UzfEwy9RBGBKifFkTENuy7x1rR5.json b/indexer/test_data/candidates/7dVA5Z3B4tVN38Cr3UzfEwy9RBGBKifFkTENuy7x1rR5.json index d23927fe..6949faa2 100644 --- a/indexer/test_data/candidates/7dVA5Z3B4tVN38Cr3UzfEwy9RBGBKifFkTENuy7x1rR5.json +++ b/indexer/test_data/candidates/7dVA5Z3B4tVN38Cr3UzfEwy9RBGBKifFkTENuy7x1rR5.json @@ -1 +1 @@ -{"block":{"author":"test.near","header":{"height":45494,"prev_height":45493,"epoch_id":"8VT78YkYJRLxPHryKdzL7dFeREwiDaKhV5ygwLs7KUWV","next_epoch_id":"DyJqzm3mAuDc36X7nqEfZe8ASkLWFHtt3e7Hqey66WB8","hash":"7dVA5Z3B4tVN38Cr3UzfEwy9RBGBKifFkTENuy7x1rR5","prev_hash":"BGjj89jehuAAsevRuYxjUJQYCHPy83yMB15efc3QFBsx","prev_state_root":"5Gh6w63sJCuA9uaGaVPhKdtFRh92Hsb87CrEveRQuA6n","block_body_hash":"5o7GkxhPYpvjo9dJyJ5QHxSSqQXekygqKzwAZ5BirzTn","chunk_receipts_root":"9ETNjrt6MkwTgSVMMbpukfxRshSD1avBUUa4R4NuqwHv","chunk_headers_root":"CVcKzGspBhjLUW6zmhm2csDkZJF24Pnc8jrE67zbrVWx","chunk_tx_root":"5pWHvE8RAVrDgor1avRnkGzGjY6H5qJSu19BqQHaGGsj","outcome_root":"7tkzFg8RHBmMw1ncRJZCCZAizgq4rwCftTKYLce8RU8t","chunks_included":1,"challenges_root":"11111111111111111111111111111111","timestamp":1712136268560478000,"timestamp_nanosec":"1712136268560478000","random_value":"7kb1ZaogF1tuYDm2Wt5wQ2yrRgMaf7baCFjwUtnHPXP","validator_proposals":[],"chunk_mask":[true],"gas_price":"100000000","block_ordinal":45390,"rent_paid":"0","validator_reward":"0","total_supply":"2078635437075814263799527848111711","challenges_result":[],"last_final_block":"9HE1KKUEv7jh15BP4z1GxJpQjsw16L9BjWFYvkAfzkL1","last_ds_final_block":"BGjj89jehuAAsevRuYxjUJQYCHPy83yMB15efc3QFBsx","next_bp_hash":"DfVYbWFJSgjEXZCsh8EsWevHm5bvPKauFeCA5otu7Rka","block_merkle_root":"9fXi7aPKFDujAW4RLeA52r3UV5WGjHh7jedZhXRTjzct","epoch_sync_data_hash":null,"approvals":["ed25519:mrFqGkHWqVsUVwL1b72KipzCjxMT5NefDVWkrpcYnAffhB5wEvCSZnisQSHmQhUEKZjKuUwVfSGmAdb4uv7SFAe"],"signature":"ed25519:3Rdf8DpcA9P6JmnE4mSUyTTGpo8hhJPXuuApqzKL3ur1a4GeWuRd5oDcisnaVsf2eDPnWfYnk98E5MQ7AUYtwrNd","latest_protocol_version":64},"chunks":[{"chunk_hash":"23ciqLqeRf5ia3Zase13968vuyYXdy9sy1UmNzH4g8LQ","prev_block_hash":"BGjj89jehuAAsevRuYxjUJQYCHPy83yMB15efc3QFBsx","outcome_root":"11111111111111111111111111111111","prev_state_root":"GCUxiSvoF2pyuBJpGgDWAkXf7c9zruW6dP2SjgknemVF","encoded_merkle_root":"8fDpQiLoCjcp4HgN8BdKQpHdksxFDya88gvDwRHbLrZs","encoded_length":237,"height_created":45494,"height_included":45494,"shard_id":0,"gas_used":0,"gas_limit":1000000000000000,"rent_paid":"0","validator_reward":"0","balance_burnt":"0","outgoing_receipts_root":"H4Rd6SGeEBTbxkitsCdzfu9xL9HtZ2eHoPCQXUeZ6bW4","tx_root":"BrLejsYGeZL2doe6ZpXQ765Da5pKqizetksozpHiiucS","validator_proposals":[],"signature":"ed25519:34xLVAsZgpX7hxDcZEqzc4xCnw5WGueXDLHukU1iDQ7LDGcvsM8zqsEi5Ryag2rzQyKZ1FdEjCnEFEYaktX2GiNY"}]},"shards":[{"shard_id":0,"chunk":{"author":"test.near","header":{"chunk_hash":"23ciqLqeRf5ia3Zase13968vuyYXdy9sy1UmNzH4g8LQ","prev_block_hash":"BGjj89jehuAAsevRuYxjUJQYCHPy83yMB15efc3QFBsx","outcome_root":"11111111111111111111111111111111","prev_state_root":"GCUxiSvoF2pyuBJpGgDWAkXf7c9zruW6dP2SjgknemVF","encoded_merkle_root":"8fDpQiLoCjcp4HgN8BdKQpHdksxFDya88gvDwRHbLrZs","encoded_length":237,"height_created":45494,"height_included":0,"shard_id":0,"gas_used":0,"gas_limit":1000000000000000,"rent_paid":"0","validator_reward":"0","balance_burnt":"0","outgoing_receipts_root":"H4Rd6SGeEBTbxkitsCdzfu9xL9HtZ2eHoPCQXUeZ6bW4","tx_root":"BrLejsYGeZL2doe6ZpXQ765Da5pKqizetksozpHiiucS","validator_proposals":[],"signature":"ed25519:34xLVAsZgpX7hxDcZEqzc4xCnw5WGueXDLHukU1iDQ7LDGcvsM8zqsEi5Ryag2rzQyKZ1FdEjCnEFEYaktX2GiNY"},"transactions":[{"transaction":{"signer_id":"da.test.near","public_key":"ed25519:H2BvchWN5XvzhCzoCqRzapPwe6zDfMDw6nrFuxnMyha","nonce":6781000075,"receiver_id":"da.test.near","actions":[{"FunctionCall":{"method_name":"submit","args":"eyJ0ZXh0IjoiQWxvaGEifQ==","gas":30000000000000,"deposit":"0"}}],"signature":"ed25519:25b72WYZjSyiddaqhp8yw6GEmYtFLxUE5eeBCakidfWobk2EVzPrDrpSKW53v5T4LzXpkeLBGDPk2trKegtoozyW","hash":"5yfvfYtXqcLgfVifZyVgfUnmL8QiY5WCWoj21CYMuJi9"},"outcome":{"execution_outcome":{"proof":[{"hash":"Bt9voNmDne2LRW2Wt5VCgRPso2Jy5fc8NUPtuxNjHZ7s","direction":"Right"}],"block_hash":"7dVA5Z3B4tVN38Cr3UzfEwy9RBGBKifFkTENuy7x1rR5","id":"5yfvfYtXqcLgfVifZyVgfUnmL8QiY5WCWoj21CYMuJi9","outcome":{"logs":[],"receipt_ids":["8ZwSFbNdHpWVx46w9K5tpzirwJDp9YsScmp4655Vpbwm"],"gas_burnt":2427970190548,"tokens_burnt":"242797019054800000000","executor_id":"da.test.near","status":{"SuccessReceiptId":"8ZwSFbNdHpWVx46w9K5tpzirwJDp9YsScmp4655Vpbwm"},"metadata":{"version":1,"gas_profile":null}}},"receipt":null}}],"receipts":[{"predecessor_id":"da.test.near","receiver_id":"da.test.near","receipt_id":"8ZwSFbNdHpWVx46w9K5tpzirwJDp9YsScmp4655Vpbwm","receipt":{"Action":{"signer_id":"da.test.near","signer_public_key":"ed25519:H2BvchWN5XvzhCzoCqRzapPwe6zDfMDw6nrFuxnMyha","gas_price":"119405230","output_data_receivers":[],"input_data_ids":[],"actions":[{"FunctionCall":{"method_name":"submit","args":"eyJ0ZXh0IjoiQWxvaGEifQ==","gas":30000000000000,"deposit":"0"}}]}}}]},"receipt_execution_outcomes":[{"execution_outcome":{"proof":[{"hash":"B9RpVa877vT2uLbYVwPBzWSsMV3K6DiDSehKk7L9NvSL","direction":"Left"}],"block_hash":"7dVA5Z3B4tVN38Cr3UzfEwy9RBGBKifFkTENuy7x1rR5","id":"8ZwSFbNdHpWVx46w9K5tpzirwJDp9YsScmp4655Vpbwm","outcome":{"logs":[],"receipt_ids":["7bcvBfjp3H9F6VQJdVf9orWzbz4H1YVWPMCgbPnSpcXc"],"gas_burnt":2575843020487,"tokens_burnt":"257584302048700000000","executor_id":"da.test.near","status":{"SuccessValue":""},"metadata":{"version":3,"gas_profile":[{"cost_category":"WASM_HOST_COST","cost":"BASE","gas_used":"2647681110"},{"cost_category":"WASM_HOST_COST","cost":"CONTRACT_LOADING_BASE","gas_used":"35445963"},{"cost_category":"WASM_HOST_COST","cost":"CONTRACT_LOADING_BYTES","gas_used":"1874020500"},{"cost_category":"WASM_HOST_COST","cost":"READ_MEMORY_BASE","gas_used":"5219726400"},{"cost_category":"WASM_HOST_COST","cost":"READ_MEMORY_BYTE","gas_used":"7602666"},{"cost_category":"WASM_HOST_COST","cost":"READ_REGISTER_BASE","gas_used":"7551495558"},{"cost_category":"WASM_HOST_COST","cost":"READ_REGISTER_BYTE","gas_used":"3942480"},{"cost_category":"WASM_HOST_COST","cost":"STORAGE_HAS_KEY_BASE","gas_used":"54039896625"},{"cost_category":"WASM_HOST_COST","cost":"STORAGE_HAS_KEY_BYTE","gas_used":"30790845"},{"cost_category":"WASM_HOST_COST","cost":"STORAGE_READ_BASE","gas_used":"56356845750"},{"cost_category":"WASM_HOST_COST","cost":"STORAGE_READ_KEY_BYTE","gas_used":"30952533"},{"cost_category":"WASM_HOST_COST","cost":"STORAGE_READ_VALUE_BYTE","gas_used":"67332060"},{"cost_category":"WASM_HOST_COST","cost":"WASM_INSTRUCTION","gas_used":"2738131968"},{"cost_category":"WASM_HOST_COST","cost":"WRITE_MEMORY_BASE","gas_used":"8411384583"},{"cost_category":"WASM_HOST_COST","cost":"WRITE_MEMORY_BYTE","gas_used":"108950880"},{"cost_category":"WASM_HOST_COST","cost":"WRITE_REGISTER_BASE","gas_used":"8596567458"},{"cost_category":"WASM_HOST_COST","cost":"WRITE_REGISTER_BYTE","gas_used":"152062560"}]}}},"receipt":{"predecessor_id":"da.test.near","receiver_id":"da.test.near","receipt_id":"8ZwSFbNdHpWVx46w9K5tpzirwJDp9YsScmp4655Vpbwm","receipt":{"Action":{"signer_id":"da.test.near","signer_public_key":"ed25519:H2BvchWN5XvzhCzoCqRzapPwe6zDfMDw6nrFuxnMyha","gas_price":"119405230","output_data_receivers":[],"input_data_ids":[],"actions":[{"FunctionCall":{"method_name":"submit","args":"eyJ0ZXh0IjoiQWxvaGEifQ==","gas":30000000000000,"deposit":"0"}}]}}}}],"state_changes":[{"cause":{"type":"transaction_processing","tx_hash":"5yfvfYtXqcLgfVifZyVgfUnmL8QiY5WCWoj21CYMuJi9"},"type":"account_update","change":{"account_id":"da.test.near","amount":"99959578806260191572233960","locked":"0","code_hash":"AGe5t2yJ1NgyxxfvNfSenyY5w1mJybuoK3fKcY1juNwd","storage_usage":8923,"storage_paid_at":0}},{"cause":{"type":"receipt_processing","receipt_hash":"8ZwSFbNdHpWVx46w9K5tpzirwJDp9YsScmp4655Vpbwm"},"type":"account_update","change":{"account_id":"da.test.near","amount":"99959578806260191572233960","locked":"0","code_hash":"AGe5t2yJ1NgyxxfvNfSenyY5w1mJybuoK3fKcY1juNwd","storage_usage":8923,"storage_paid_at":0}},{"cause":{"type":"action_receipt_gas_reward","receipt_hash":"8ZwSFbNdHpWVx46w9K5tpzirwJDp9YsScmp4655Vpbwm"},"type":"account_update","change":{"account_id":"da.test.near","amount":"99959583242445089672233960","locked":"0","code_hash":"AGe5t2yJ1NgyxxfvNfSenyY5w1mJybuoK3fKcY1juNwd","storage_usage":8923,"storage_paid_at":0}},{"cause":{"type":"transaction_processing","tx_hash":"5yfvfYtXqcLgfVifZyVgfUnmL8QiY5WCWoj21CYMuJi9"},"type":"access_key_update","change":{"account_id":"da.test.near","public_key":"ed25519:H2BvchWN5XvzhCzoCqRzapPwe6zDfMDw6nrFuxnMyha","access_key":{"nonce":6781000075,"permission":"FullAccess"}}}]}]} \ No newline at end of file +{"block":{"author":"test.near","header":{"height":45494,"prev_height":45493,"epoch_id":"8VT78YkYJRLxPHryKdzL7dFeREwiDaKhV5ygwLs7KUWV","next_epoch_id":"DyJqzm3mAuDc36X7nqEfZe8ASkLWFHtt3e7Hqey66WB8","hash":"7dVA5Z3B4tVN38Cr3UzfEwy9RBGBKifFkTENuy7x1rR5","prev_hash":"BGjj89jehuAAsevRuYxjUJQYCHPy83yMB15efc3QFBsx","prev_state_root":"5Gh6w63sJCuA9uaGaVPhKdtFRh92Hsb87CrEveRQuA6n","block_body_hash":"5o7GkxhPYpvjo9dJyJ5QHxSSqQXekygqKzwAZ5BirzTn","chunk_receipts_root":"9ETNjrt6MkwTgSVMMbpukfxRshSD1avBUUa4R4NuqwHv","chunk_headers_root":"CVcKzGspBhjLUW6zmhm2csDkZJF24Pnc8jrE67zbrVWx","chunk_tx_root":"5pWHvE8RAVrDgor1avRnkGzGjY6H5qJSu19BqQHaGGsj","outcome_root":"7tkzFg8RHBmMw1ncRJZCCZAizgq4rwCftTKYLce8RU8t","chunks_included":1,"challenges_root":"11111111111111111111111111111111","timestamp":1712136268560478000,"timestamp_nanosec":"1712136268560478000","random_value":"7kb1ZaogF1tuYDm2Wt5wQ2yrRgMaf7baCFjwUtnHPXP","validator_proposals":[],"chunk_mask":[true],"gas_price":"100000000","block_ordinal":45390,"rent_paid":"0","validator_reward":"0","total_supply":"2078635437075814263799527848111711","challenges_result":[],"last_final_block":"9HE1KKUEv7jh15BP4z1GxJpQjsw16L9BjWFYvkAfzkL1","last_ds_final_block":"BGjj89jehuAAsevRuYxjUJQYCHPy83yMB15efc3QFBsx","next_bp_hash":"DfVYbWFJSgjEXZCsh8EsWevHm5bvPKauFeCA5otu7Rka","block_merkle_root":"9fXi7aPKFDujAW4RLeA52r3UV5WGjHh7jedZhXRTjzct","epoch_sync_data_hash":null,"approvals":["ed25519:mrFqGkHWqVsUVwL1b72KipzCjxMT5NefDVWkrpcYnAffhB5wEvCSZnisQSHmQhUEKZjKuUwVfSGmAdb4uv7SFAe"],"signature":"ed25519:3Rdf8DpcA9P6JmnE4mSUyTTGpo8hhJPXuuApqzKL3ur1a4GeWuRd5oDcisnaVsf2eDPnWfYnk98E5MQ7AUYtwrNd","latest_protocol_version":64},"chunks":[{"chunk_hash":"23ciqLqeRf5ia3Zase13968vuyYXdy9sy1UmNzH4g8LQ","prev_block_hash":"BGjj89jehuAAsevRuYxjUJQYCHPy83yMB15efc3QFBsx","outcome_root":"11111111111111111111111111111111","prev_state_root":"GCUxiSvoF2pyuBJpGgDWAkXf7c9zruW6dP2SjgknemVF","encoded_merkle_root":"8fDpQiLoCjcp4HgN8BdKQpHdksxFDya88gvDwRHbLrZs","encoded_length":237,"height_created":45494,"height_included":45494,"shard_id":0,"gas_used":0,"gas_limit":1000000000000000,"rent_paid":"0","validator_reward":"0","balance_burnt":"0","outgoing_receipts_root":"H4Rd6SGeEBTbxkitsCdzfu9xL9HtZ2eHoPCQXUeZ6bW4","tx_root":"BrLejsYGeZL2doe6ZpXQ765Da5pKqizetksozpHiiucS","validator_proposals":[],"signature":"ed25519:34xLVAsZgpX7hxDcZEqzc4xCnw5WGueXDLHukU1iDQ7LDGcvsM8zqsEi5Ryag2rzQyKZ1FdEjCnEFEYaktX2GiNY"}]},"shards":[{"shard_id":0,"chunk":{"author":"test.near","header":{"chunk_hash":"23ciqLqeRf5ia3Zase13968vuyYXdy9sy1UmNzH4g8LQ","prev_block_hash":"BGjj89jehuAAsevRuYxjUJQYCHPy83yMB15efc3QFBsx","outcome_root":"11111111111111111111111111111111","prev_state_root":"GCUxiSvoF2pyuBJpGgDWAkXf7c9zruW6dP2SjgknemVF","encoded_merkle_root":"8fDpQiLoCjcp4HgN8BdKQpHdksxFDya88gvDwRHbLrZs","encoded_length":237,"height_created":45494,"height_included":0,"shard_id":0,"gas_used":0,"gas_limit":1000000000000000,"rent_paid":"0","validator_reward":"0","balance_burnt":"0","outgoing_receipts_root":"H4Rd6SGeEBTbxkitsCdzfu9xL9HtZ2eHoPCQXUeZ6bW4","tx_root":"BrLejsYGeZL2doe6ZpXQ765Da5pKqizetksozpHiiucS","validator_proposals":[],"signature":"ed25519:34xLVAsZgpX7hxDcZEqzc4xCnw5WGueXDLHukU1iDQ7LDGcvsM8zqsEi5Ryag2rzQyKZ1FdEjCnEFEYaktX2GiNY"},"transactions":[{"transaction":{"priority_fee":0,"signer_id":"da.test.near","public_key":"ed25519:H2BvchWN5XvzhCzoCqRzapPwe6zDfMDw6nrFuxnMyha","nonce":6781000075,"receiver_id":"da.test.near","actions":[{"FunctionCall":{"method_name":"submit","args":"eyJ0ZXh0IjoiQWxvaGEifQ==","gas":30000000000000,"deposit":"0"}}],"signature":"ed25519:25b72WYZjSyiddaqhp8yw6GEmYtFLxUE5eeBCakidfWobk2EVzPrDrpSKW53v5T4LzXpkeLBGDPk2trKegtoozyW","hash":"5yfvfYtXqcLgfVifZyVgfUnmL8QiY5WCWoj21CYMuJi9"},"outcome":{"execution_outcome":{"proof":[{"hash":"Bt9voNmDne2LRW2Wt5VCgRPso2Jy5fc8NUPtuxNjHZ7s","direction":"Right"}],"block_hash":"7dVA5Z3B4tVN38Cr3UzfEwy9RBGBKifFkTENuy7x1rR5","id":"5yfvfYtXqcLgfVifZyVgfUnmL8QiY5WCWoj21CYMuJi9","outcome":{"logs":[],"receipt_ids":["8ZwSFbNdHpWVx46w9K5tpzirwJDp9YsScmp4655Vpbwm"],"gas_burnt":2427970190548,"tokens_burnt":"242797019054800000000","executor_id":"da.test.near","status":{"SuccessReceiptId":"8ZwSFbNdHpWVx46w9K5tpzirwJDp9YsScmp4655Vpbwm"},"metadata":{"version":1,"gas_profile":null}}},"receipt":null}}],"receipts":[{"predecessor_id":"da.test.near","receiver_id":"da.test.near","receipt_id":"8ZwSFbNdHpWVx46w9K5tpzirwJDp9YsScmp4655Vpbwm","priority":0,"receipt":{"Action":{"signer_id":"da.test.near","signer_public_key":"ed25519:H2BvchWN5XvzhCzoCqRzapPwe6zDfMDw6nrFuxnMyha","gas_price":"119405230","output_data_receivers":[],"input_data_ids":[],"actions":[{"FunctionCall":{"method_name":"submit","args":"eyJ0ZXh0IjoiQWxvaGEifQ==","gas":30000000000000,"deposit":"0"}}]}}}]},"receipt_execution_outcomes":[{"execution_outcome":{"proof":[{"hash":"B9RpVa877vT2uLbYVwPBzWSsMV3K6DiDSehKk7L9NvSL","direction":"Left"}],"block_hash":"7dVA5Z3B4tVN38Cr3UzfEwy9RBGBKifFkTENuy7x1rR5","id":"8ZwSFbNdHpWVx46w9K5tpzirwJDp9YsScmp4655Vpbwm","outcome":{"logs":[],"receipt_ids":["7bcvBfjp3H9F6VQJdVf9orWzbz4H1YVWPMCgbPnSpcXc"],"gas_burnt":2575843020487,"tokens_burnt":"257584302048700000000","executor_id":"da.test.near","status":{"SuccessValue":""},"metadata":{"version":3,"gas_profile":[{"cost_category":"WASM_HOST_COST","cost":"BASE","gas_used":"2647681110"},{"cost_category":"WASM_HOST_COST","cost":"CONTRACT_LOADING_BASE","gas_used":"35445963"},{"cost_category":"WASM_HOST_COST","cost":"CONTRACT_LOADING_BYTES","gas_used":"1874020500"},{"cost_category":"WASM_HOST_COST","cost":"READ_MEMORY_BASE","gas_used":"5219726400"},{"cost_category":"WASM_HOST_COST","cost":"READ_MEMORY_BYTE","gas_used":"7602666"},{"cost_category":"WASM_HOST_COST","cost":"READ_REGISTER_BASE","gas_used":"7551495558"},{"cost_category":"WASM_HOST_COST","cost":"READ_REGISTER_BYTE","gas_used":"3942480"},{"cost_category":"WASM_HOST_COST","cost":"STORAGE_HAS_KEY_BASE","gas_used":"54039896625"},{"cost_category":"WASM_HOST_COST","cost":"STORAGE_HAS_KEY_BYTE","gas_used":"30790845"},{"cost_category":"WASM_HOST_COST","cost":"STORAGE_READ_BASE","gas_used":"56356845750"},{"cost_category":"WASM_HOST_COST","cost":"STORAGE_READ_KEY_BYTE","gas_used":"30952533"},{"cost_category":"WASM_HOST_COST","cost":"STORAGE_READ_VALUE_BYTE","gas_used":"67332060"},{"cost_category":"WASM_HOST_COST","cost":"WASM_INSTRUCTION","gas_used":"2738131968"},{"cost_category":"WASM_HOST_COST","cost":"WRITE_MEMORY_BASE","gas_used":"8411384583"},{"cost_category":"WASM_HOST_COST","cost":"WRITE_MEMORY_BYTE","gas_used":"108950880"},{"cost_category":"WASM_HOST_COST","cost":"WRITE_REGISTER_BASE","gas_used":"8596567458"},{"cost_category":"WASM_HOST_COST","cost":"WRITE_REGISTER_BYTE","gas_used":"152062560"}]}}},"receipt":{"predecessor_id":"da.test.near","receiver_id":"da.test.near","receipt_id":"8ZwSFbNdHpWVx46w9K5tpzirwJDp9YsScmp4655Vpbwm","priority":0,"receipt":{"Action":{"signer_id":"da.test.near","signer_public_key":"ed25519:H2BvchWN5XvzhCzoCqRzapPwe6zDfMDw6nrFuxnMyha","gas_price":"119405230","output_data_receivers":[],"input_data_ids":[],"actions":[{"FunctionCall":{"method_name":"submit","args":"eyJ0ZXh0IjoiQWxvaGEifQ==","gas":30000000000000,"deposit":"0"}}]}}}}],"state_changes":[{"cause":{"type":"transaction_processing","tx_hash":"5yfvfYtXqcLgfVifZyVgfUnmL8QiY5WCWoj21CYMuJi9"},"type":"account_update","change":{"account_id":"da.test.near","amount":"99959578806260191572233960","locked":"0","code_hash":"AGe5t2yJ1NgyxxfvNfSenyY5w1mJybuoK3fKcY1juNwd","storage_usage":8923,"storage_paid_at":0}},{"cause":{"type":"receipt_processing","receipt_hash":"8ZwSFbNdHpWVx46w9K5tpzirwJDp9YsScmp4655Vpbwm"},"type":"account_update","change":{"account_id":"da.test.near","amount":"99959578806260191572233960","locked":"0","code_hash":"AGe5t2yJ1NgyxxfvNfSenyY5w1mJybuoK3fKcY1juNwd","storage_usage":8923,"storage_paid_at":0}},{"cause":{"type":"action_receipt_gas_reward","receipt_hash":"8ZwSFbNdHpWVx46w9K5tpzirwJDp9YsScmp4655Vpbwm"},"type":"account_update","change":{"account_id":"da.test.near","amount":"99959583242445089672233960","locked":"0","code_hash":"AGe5t2yJ1NgyxxfvNfSenyY5w1mJybuoK3fKcY1juNwd","storage_usage":8923,"storage_paid_at":0}},{"cause":{"type":"transaction_processing","tx_hash":"5yfvfYtXqcLgfVifZyVgfUnmL8QiY5WCWoj21CYMuJi9"},"type":"access_key_update","change":{"account_id":"da.test.near","public_key":"ed25519:H2BvchWN5XvzhCzoCqRzapPwe6zDfMDw6nrFuxnMyha","access_key":{"nonce":6781000075,"permission":"FullAccess"}}}]}]} \ No newline at end of file diff --git a/indexer/test_data/candidates/9zwSzRUA9xH3SXoeZkS7tQXFupEJz9f5XZdNbB3sgK2b.json b/indexer/test_data/candidates/9zwSzRUA9xH3SXoeZkS7tQXFupEJz9f5XZdNbB3sgK2b.json index d87ad8e6..9351c945 100644 --- a/indexer/test_data/candidates/9zwSzRUA9xH3SXoeZkS7tQXFupEJz9f5XZdNbB3sgK2b.json +++ b/indexer/test_data/candidates/9zwSzRUA9xH3SXoeZkS7tQXFupEJz9f5XZdNbB3sgK2b.json @@ -1 +1 @@ -{"block":{"author":"test.near","header":{"height":20698,"prev_height":20697,"epoch_id":"CMnJcardk5opU55K3Et8BXYqnkgVGT3KtTWGqcLHtmMW","next_epoch_id":"9nUfmUGN4N723qzHvz9iadU2ZyBMKgGLmMZFbGUWpqKf","hash":"9zwSzRUA9xH3SXoeZkS7tQXFupEJz9f5XZdNbB3sgK2b","prev_hash":"6zn12vnznJwmoSX8stU4dSpsuxW8FnrixXkhuSsVktrC","prev_state_root":"3VsNYUDXjziK1Gh5cRcJyXpjudPh3cjTzS8XR1Atv1k1","block_body_hash":"CJHjip8XBJryCjV8mbtMjH3UgjWjQHFYVDJPWAV3PoJh","chunk_receipts_root":"9ETNjrt6MkwTgSVMMbpukfxRshSD1avBUUa4R4NuqwHv","chunk_headers_root":"3NW4xy9p4EjHQYZ3cgLSTfpRTbnrYt3JxamSAfwNsThm","chunk_tx_root":"8HsRHvCQMDRPRFsAgDRjsZjs98LsnbuyARNXswb9FPFk","outcome_root":"7tkzFg8RHBmMw1ncRJZCCZAizgq4rwCftTKYLce8RU8t","chunks_included":1,"challenges_root":"11111111111111111111111111111111","timestamp":1705483122040186000,"timestamp_nanosec":"1705483122040186000","random_value":"GRxxxAVLQQuN7sAXqay9oCzynrndSuphTG9mrXh6fiY","validator_proposals":[],"chunk_mask":[true],"gas_price":"100000000","block_ordinal":20619,"rent_paid":"0","validator_reward":"0","total_supply":"2057726651765659617454023914896514","challenges_result":[],"last_final_block":"FFV2akG4vMF1LJ17ff2Jy2u21W4mFKzXwepCVRsxmWx","last_ds_final_block":"6zn12vnznJwmoSX8stU4dSpsuxW8FnrixXkhuSsVktrC","next_bp_hash":"C91UJTp3cn2wKoVpAArhq6hRXWFKBxjJ56cCxQaTR9f8","block_merkle_root":"6zw3KU77Zh7mXV5HFBtascbumiJdYSnZAEanY51mShSt","epoch_sync_data_hash":null,"approvals":["ed25519:5iJTKgspRYNzdwe72tnwtUnq77gfLgG3chM26sZicXkguSPTwcSoAwMm8yFm7GF13X7NFXhQNBrK43t8q9aBmgsQ"],"signature":"ed25519:63QB6kY4RrjT4CwhhDddHcguJNk4jppnX5mFgP6kFNdVPS574p6XGfDKuEFNZBFNLoYsKPBFvWJ3aK2wc9B91Y2n","latest_protocol_version":64},"chunks":[{"chunk_hash":"79Sa7iLgt6gMmPZvHXRXCVjQUReRsbvCLmCFXwFmoMey","prev_block_hash":"6zn12vnznJwmoSX8stU4dSpsuxW8FnrixXkhuSsVktrC","outcome_root":"11111111111111111111111111111111","prev_state_root":"81SNysrQR7Cyfirm4ZX3yB3YySxUTien5LSPNzGh1SoP","encoded_merkle_root":"BKK9nmVJimi6VgcwkdLesrXNP324SAhVgknj3Czj123W","encoded_length":240,"height_created":20698,"height_included":20698,"shard_id":0,"gas_used":0,"gas_limit":1000000000000000,"rent_paid":"0","validator_reward":"0","balance_burnt":"0","outgoing_receipts_root":"H4Rd6SGeEBTbxkitsCdzfu9xL9HtZ2eHoPCQXUeZ6bW4","tx_root":"3hS1fKVbrG5LiBcKwtsmKjrQN8mrURZcaqrzrCAbcMtz","validator_proposals":[],"signature":"ed25519:5CjxmCb34FdWZerQKNh3JQQpwbmPBkFyUyydkrd4X3e4Hazo5ExXLrsZKnutoAcfbQxR5vGU2obs9mptjsyJ6ABb"}]},"shards":[{"shard_id":0,"chunk":{"author":"test.near","header":{"chunk_hash":"79Sa7iLgt6gMmPZvHXRXCVjQUReRsbvCLmCFXwFmoMey","prev_block_hash":"6zn12vnznJwmoSX8stU4dSpsuxW8FnrixXkhuSsVktrC","outcome_root":"11111111111111111111111111111111","prev_state_root":"81SNysrQR7Cyfirm4ZX3yB3YySxUTien5LSPNzGh1SoP","encoded_merkle_root":"BKK9nmVJimi6VgcwkdLesrXNP324SAhVgknj3Czj123W","encoded_length":240,"height_created":20698,"height_included":0,"shard_id":0,"gas_used":0,"gas_limit":1000000000000000,"rent_paid":"0","validator_reward":"0","balance_burnt":"0","outgoing_receipts_root":"H4Rd6SGeEBTbxkitsCdzfu9xL9HtZ2eHoPCQXUeZ6bW4","tx_root":"3hS1fKVbrG5LiBcKwtsmKjrQN8mrURZcaqrzrCAbcMtz","validator_proposals":[],"signature":"ed25519:5CjxmCb34FdWZerQKNh3JQQpwbmPBkFyUyydkrd4X3e4Hazo5ExXLrsZKnutoAcfbQxR5vGU2obs9mptjsyJ6ABb"},"transactions":[{"transaction":{"signer_id":"da.test.near","public_key":"ed25519:H2BvchWN5XvzhCzoCqRzapPwe6zDfMDw6nrFuxnMyha","nonce":6781000048,"receiver_id":"da.test.near","actions":[{"FunctionCall":{"method_name":"submit","args":"eyJhcmczIjozLCJhcmc0IjoyfQ==","gas":30000000000000,"deposit":"0"}}],"signature":"ed25519:5EQ5FW8Gpp3MFbh5JNfL1ZtWfyDZDGz58DYbUWVgoqg6YnzJA6jESnJE9KjbuXYghdGMgP48yhCsdmNUy4VKd9J7","hash":"Hm9eSkit6WDrLRpjjvTe78kyR4fFd52hvhMcPqKoa1ef"},"outcome":{"execution_outcome":{"proof":[{"hash":"4MRZWSWoMPm34NzVQXHa36GicmKGym2uudNqCPH72xzc","direction":"Right"}],"block_hash":"9zwSzRUA9xH3SXoeZkS7tQXFupEJz9f5XZdNbB3sgK2b","id":"Hm9eSkit6WDrLRpjjvTe78kyR4fFd52hvhMcPqKoa1ef","outcome":{"logs":[],"receipt_ids":["D8amXow9Y2DxE57PwyYN6UQHezbQXTqSt7q51bVweErG"],"gas_burnt":2427976898350,"tokens_burnt":"242797689835000000000","executor_id":"da.test.near","status":{"SuccessReceiptId":"D8amXow9Y2DxE57PwyYN6UQHezbQXTqSt7q51bVweErG"},"metadata":{"version":1,"gas_profile":null}}},"receipt":null}}],"receipts":[{"predecessor_id":"da.test.near","receiver_id":"da.test.near","receipt_id":"D8amXow9Y2DxE57PwyYN6UQHezbQXTqSt7q51bVweErG","receipt":{"Action":{"signer_id":"da.test.near","signer_public_key":"ed25519:H2BvchWN5XvzhCzoCqRzapPwe6zDfMDw6nrFuxnMyha","gas_price":"119405230","output_data_receivers":[],"input_data_ids":[],"actions":[{"FunctionCall":{"method_name":"submit","args":"eyJhcmczIjozLCJhcmc0IjoyfQ==","gas":30000000000000,"deposit":"0"}}]}}}]},"receipt_execution_outcomes":[{"execution_outcome":{"proof":[{"hash":"746yoMpBrdHCKGbb5v88Wz7cV2pGLui51XvcEreeer84","direction":"Left"}],"block_hash":"9zwSzRUA9xH3SXoeZkS7tQXFupEJz9f5XZdNbB3sgK2b","id":"D8amXow9Y2DxE57PwyYN6UQHezbQXTqSt7q51bVweErG","outcome":{"logs":[],"receipt_ids":["DLM5dSvfNb5BPasqU8xNjwZBajR5FZQVmew7Swq9jHJ4"],"gas_burnt":2575869599983,"tokens_burnt":"257586959998300000000","executor_id":"da.test.near","status":{"SuccessValue":""},"metadata":{"version":3,"gas_profile":[{"cost_category":"WASM_HOST_COST","cost":"BASE","gas_used":"2647681110"},{"cost_category":"WASM_HOST_COST","cost":"CONTRACT_LOADING_BASE","gas_used":"35445963"},{"cost_category":"WASM_HOST_COST","cost":"CONTRACT_LOADING_BYTES","gas_used":"1874020500"},{"cost_category":"WASM_HOST_COST","cost":"READ_MEMORY_BASE","gas_used":"5219726400"},{"cost_category":"WASM_HOST_COST","cost":"READ_MEMORY_BYTE","gas_used":"7602666"},{"cost_category":"WASM_HOST_COST","cost":"READ_REGISTER_BASE","gas_used":"7551495558"},{"cost_category":"WASM_HOST_COST","cost":"READ_REGISTER_BYTE","gas_used":"4238166"},{"cost_category":"WASM_HOST_COST","cost":"STORAGE_HAS_KEY_BASE","gas_used":"54039896625"},{"cost_category":"WASM_HOST_COST","cost":"STORAGE_HAS_KEY_BYTE","gas_used":"30790845"},{"cost_category":"WASM_HOST_COST","cost":"STORAGE_READ_BASE","gas_used":"56356845750"},{"cost_category":"WASM_HOST_COST","cost":"STORAGE_READ_KEY_BYTE","gas_used":"30952533"},{"cost_category":"WASM_HOST_COST","cost":"STORAGE_READ_VALUE_BYTE","gas_used":"67332060"},{"cost_category":"WASM_HOST_COST","cost":"WASM_INSTRUCTION","gas_used":"2738131968"},{"cost_category":"WASM_HOST_COST","cost":"WRITE_MEMORY_BASE","gas_used":"8411384583"},{"cost_category":"WASM_HOST_COST","cost":"WRITE_MEMORY_BYTE","gas_used":"117122196"},{"cost_category":"WASM_HOST_COST","cost":"WRITE_REGISTER_BASE","gas_used":"8596567458"},{"cost_category":"WASM_HOST_COST","cost":"WRITE_REGISTER_BYTE","gas_used":"163467252"}]}}},"receipt":{"predecessor_id":"da.test.near","receiver_id":"da.test.near","receipt_id":"D8amXow9Y2DxE57PwyYN6UQHezbQXTqSt7q51bVweErG","receipt":{"Action":{"signer_id":"da.test.near","signer_public_key":"ed25519:H2BvchWN5XvzhCzoCqRzapPwe6zDfMDw6nrFuxnMyha","gas_price":"119405230","output_data_receivers":[],"input_data_ids":[],"actions":[{"FunctionCall":{"method_name":"submit","args":"eyJhcmczIjozLCJhcmc0IjoyfQ==","gas":30000000000000,"deposit":"0"}}]}}}}],"state_changes":[{"cause":{"type":"transaction_processing","tx_hash":"Hm9eSkit6WDrLRpjjvTe78kyR4fFd52hvhMcPqKoa1ef"},"type":"account_update","change":{"account_id":"da.test.near","amount":"99972928372489495131629500","locked":"0","code_hash":"AGe5t2yJ1NgyxxfvNfSenyY5w1mJybuoK3fKcY1juNwd","storage_usage":8923,"storage_paid_at":0}},{"cause":{"type":"receipt_processing","receipt_hash":"D8amXow9Y2DxE57PwyYN6UQHezbQXTqSt7q51bVweErG"},"type":"account_update","change":{"account_id":"da.test.near","amount":"99972928372489495131629500","locked":"0","code_hash":"AGe5t2yJ1NgyxxfvNfSenyY5w1mJybuoK3fKcY1juNwd","storage_usage":8923,"storage_paid_at":0}},{"cause":{"type":"action_receipt_gas_reward","receipt_hash":"D8amXow9Y2DxE57PwyYN6UQHezbQXTqSt7q51bVweErG"},"type":"account_update","change":{"account_id":"da.test.near","amount":"99972932809270544031629500","locked":"0","code_hash":"AGe5t2yJ1NgyxxfvNfSenyY5w1mJybuoK3fKcY1juNwd","storage_usage":8923,"storage_paid_at":0}},{"cause":{"type":"transaction_processing","tx_hash":"Hm9eSkit6WDrLRpjjvTe78kyR4fFd52hvhMcPqKoa1ef"},"type":"access_key_update","change":{"account_id":"da.test.near","public_key":"ed25519:H2BvchWN5XvzhCzoCqRzapPwe6zDfMDw6nrFuxnMyha","access_key":{"nonce":6781000048,"permission":"FullAccess"}}}]}]} \ No newline at end of file +{"block":{"author":"test.near","header":{"height":20698,"prev_height":20697,"epoch_id":"CMnJcardk5opU55K3Et8BXYqnkgVGT3KtTWGqcLHtmMW","next_epoch_id":"9nUfmUGN4N723qzHvz9iadU2ZyBMKgGLmMZFbGUWpqKf","hash":"9zwSzRUA9xH3SXoeZkS7tQXFupEJz9f5XZdNbB3sgK2b","prev_hash":"6zn12vnznJwmoSX8stU4dSpsuxW8FnrixXkhuSsVktrC","prev_state_root":"3VsNYUDXjziK1Gh5cRcJyXpjudPh3cjTzS8XR1Atv1k1","block_body_hash":"CJHjip8XBJryCjV8mbtMjH3UgjWjQHFYVDJPWAV3PoJh","chunk_receipts_root":"9ETNjrt6MkwTgSVMMbpukfxRshSD1avBUUa4R4NuqwHv","chunk_headers_root":"3NW4xy9p4EjHQYZ3cgLSTfpRTbnrYt3JxamSAfwNsThm","chunk_tx_root":"8HsRHvCQMDRPRFsAgDRjsZjs98LsnbuyARNXswb9FPFk","outcome_root":"7tkzFg8RHBmMw1ncRJZCCZAizgq4rwCftTKYLce8RU8t","chunks_included":1,"challenges_root":"11111111111111111111111111111111","timestamp":1705483122040186000,"timestamp_nanosec":"1705483122040186000","random_value":"GRxxxAVLQQuN7sAXqay9oCzynrndSuphTG9mrXh6fiY","validator_proposals":[],"chunk_mask":[true],"gas_price":"100000000","block_ordinal":20619,"rent_paid":"0","validator_reward":"0","total_supply":"2057726651765659617454023914896514","challenges_result":[],"last_final_block":"FFV2akG4vMF1LJ17ff2Jy2u21W4mFKzXwepCVRsxmWx","last_ds_final_block":"6zn12vnznJwmoSX8stU4dSpsuxW8FnrixXkhuSsVktrC","next_bp_hash":"C91UJTp3cn2wKoVpAArhq6hRXWFKBxjJ56cCxQaTR9f8","block_merkle_root":"6zw3KU77Zh7mXV5HFBtascbumiJdYSnZAEanY51mShSt","epoch_sync_data_hash":null,"approvals":["ed25519:5iJTKgspRYNzdwe72tnwtUnq77gfLgG3chM26sZicXkguSPTwcSoAwMm8yFm7GF13X7NFXhQNBrK43t8q9aBmgsQ"],"signature":"ed25519:63QB6kY4RrjT4CwhhDddHcguJNk4jppnX5mFgP6kFNdVPS574p6XGfDKuEFNZBFNLoYsKPBFvWJ3aK2wc9B91Y2n","latest_protocol_version":64},"chunks":[{"chunk_hash":"79Sa7iLgt6gMmPZvHXRXCVjQUReRsbvCLmCFXwFmoMey","prev_block_hash":"6zn12vnznJwmoSX8stU4dSpsuxW8FnrixXkhuSsVktrC","outcome_root":"11111111111111111111111111111111","prev_state_root":"81SNysrQR7Cyfirm4ZX3yB3YySxUTien5LSPNzGh1SoP","encoded_merkle_root":"BKK9nmVJimi6VgcwkdLesrXNP324SAhVgknj3Czj123W","encoded_length":240,"height_created":20698,"height_included":20698,"shard_id":0,"gas_used":0,"gas_limit":1000000000000000,"rent_paid":"0","validator_reward":"0","balance_burnt":"0","outgoing_receipts_root":"H4Rd6SGeEBTbxkitsCdzfu9xL9HtZ2eHoPCQXUeZ6bW4","tx_root":"3hS1fKVbrG5LiBcKwtsmKjrQN8mrURZcaqrzrCAbcMtz","validator_proposals":[],"signature":"ed25519:5CjxmCb34FdWZerQKNh3JQQpwbmPBkFyUyydkrd4X3e4Hazo5ExXLrsZKnutoAcfbQxR5vGU2obs9mptjsyJ6ABb"}]},"shards":[{"shard_id":0,"chunk":{"author":"test.near","header":{"chunk_hash":"79Sa7iLgt6gMmPZvHXRXCVjQUReRsbvCLmCFXwFmoMey","prev_block_hash":"6zn12vnznJwmoSX8stU4dSpsuxW8FnrixXkhuSsVktrC","outcome_root":"11111111111111111111111111111111","prev_state_root":"81SNysrQR7Cyfirm4ZX3yB3YySxUTien5LSPNzGh1SoP","encoded_merkle_root":"BKK9nmVJimi6VgcwkdLesrXNP324SAhVgknj3Czj123W","encoded_length":240,"height_created":20698,"height_included":0,"shard_id":0,"gas_used":0,"gas_limit":1000000000000000,"rent_paid":"0","validator_reward":"0","balance_burnt":"0","outgoing_receipts_root":"H4Rd6SGeEBTbxkitsCdzfu9xL9HtZ2eHoPCQXUeZ6bW4","tx_root":"3hS1fKVbrG5LiBcKwtsmKjrQN8mrURZcaqrzrCAbcMtz","validator_proposals":[],"signature":"ed25519:5CjxmCb34FdWZerQKNh3JQQpwbmPBkFyUyydkrd4X3e4Hazo5ExXLrsZKnutoAcfbQxR5vGU2obs9mptjsyJ6ABb"},"transactions":[{"transaction":{"signer_id":"da.test.near","public_key":"ed25519:H2BvchWN5XvzhCzoCqRzapPwe6zDfMDw6nrFuxnMyha","nonce":6781000048,"receiver_id":"da.test.near","priority_fee":0,"actions":[{"FunctionCall":{"method_name":"submit","args":"eyJhcmczIjozLCJhcmc0IjoyfQ==","gas":30000000000000,"deposit":"0"}}],"signature":"ed25519:5EQ5FW8Gpp3MFbh5JNfL1ZtWfyDZDGz58DYbUWVgoqg6YnzJA6jESnJE9KjbuXYghdGMgP48yhCsdmNUy4VKd9J7","hash":"Hm9eSkit6WDrLRpjjvTe78kyR4fFd52hvhMcPqKoa1ef"},"outcome":{"execution_outcome":{"proof":[{"hash":"4MRZWSWoMPm34NzVQXHa36GicmKGym2uudNqCPH72xzc","direction":"Right"}],"block_hash":"9zwSzRUA9xH3SXoeZkS7tQXFupEJz9f5XZdNbB3sgK2b","id":"Hm9eSkit6WDrLRpjjvTe78kyR4fFd52hvhMcPqKoa1ef","outcome":{"logs":[],"receipt_ids":["D8amXow9Y2DxE57PwyYN6UQHezbQXTqSt7q51bVweErG"],"gas_burnt":2427976898350,"tokens_burnt":"242797689835000000000","executor_id":"da.test.near","status":{"SuccessReceiptId":"D8amXow9Y2DxE57PwyYN6UQHezbQXTqSt7q51bVweErG"},"metadata":{"version":1,"gas_profile":null}}},"receipt":null}}],"receipts":[{"predecessor_id":"da.test.near","receiver_id":"da.test.near","receipt_id":"D8amXow9Y2DxE57PwyYN6UQHezbQXTqSt7q51bVweErG","priority":0,"receipt":{"Action":{"signer_id":"da.test.near","signer_public_key":"ed25519:H2BvchWN5XvzhCzoCqRzapPwe6zDfMDw6nrFuxnMyha","gas_price":"119405230","output_data_receivers":[],"input_data_ids":[],"actions":[{"FunctionCall":{"method_name":"submit","args":"eyJhcmczIjozLCJhcmc0IjoyfQ==","gas":30000000000000,"deposit":"0"}}]}}}]},"receipt_execution_outcomes":[{"execution_outcome":{"proof":[{"hash":"746yoMpBrdHCKGbb5v88Wz7cV2pGLui51XvcEreeer84","direction":"Left"}],"block_hash":"9zwSzRUA9xH3SXoeZkS7tQXFupEJz9f5XZdNbB3sgK2b","id":"D8amXow9Y2DxE57PwyYN6UQHezbQXTqSt7q51bVweErG","outcome":{"logs":[],"receipt_ids":["DLM5dSvfNb5BPasqU8xNjwZBajR5FZQVmew7Swq9jHJ4"],"gas_burnt":2575869599983,"tokens_burnt":"257586959998300000000","executor_id":"da.test.near","status":{"SuccessValue":""},"metadata":{"version":3,"gas_profile":[{"cost_category":"WASM_HOST_COST","cost":"BASE","gas_used":"2647681110"},{"cost_category":"WASM_HOST_COST","cost":"CONTRACT_LOADING_BASE","gas_used":"35445963"},{"cost_category":"WASM_HOST_COST","cost":"CONTRACT_LOADING_BYTES","gas_used":"1874020500"},{"cost_category":"WASM_HOST_COST","cost":"READ_MEMORY_BASE","gas_used":"5219726400"},{"cost_category":"WASM_HOST_COST","cost":"READ_MEMORY_BYTE","gas_used":"7602666"},{"cost_category":"WASM_HOST_COST","cost":"READ_REGISTER_BASE","gas_used":"7551495558"},{"cost_category":"WASM_HOST_COST","cost":"READ_REGISTER_BYTE","gas_used":"4238166"},{"cost_category":"WASM_HOST_COST","cost":"STORAGE_HAS_KEY_BASE","gas_used":"54039896625"},{"cost_category":"WASM_HOST_COST","cost":"STORAGE_HAS_KEY_BYTE","gas_used":"30790845"},{"cost_category":"WASM_HOST_COST","cost":"STORAGE_READ_BASE","gas_used":"56356845750"},{"cost_category":"WASM_HOST_COST","cost":"STORAGE_READ_KEY_BYTE","gas_used":"30952533"},{"cost_category":"WASM_HOST_COST","cost":"STORAGE_READ_VALUE_BYTE","gas_used":"67332060"},{"cost_category":"WASM_HOST_COST","cost":"WASM_INSTRUCTION","gas_used":"2738131968"},{"cost_category":"WASM_HOST_COST","cost":"WRITE_MEMORY_BASE","gas_used":"8411384583"},{"cost_category":"WASM_HOST_COST","cost":"WRITE_MEMORY_BYTE","gas_used":"117122196"},{"cost_category":"WASM_HOST_COST","cost":"WRITE_REGISTER_BASE","gas_used":"8596567458"},{"cost_category":"WASM_HOST_COST","cost":"WRITE_REGISTER_BYTE","gas_used":"163467252"}]}}},"receipt":{"predecessor_id":"da.test.near","receiver_id":"da.test.near","receipt_id":"D8amXow9Y2DxE57PwyYN6UQHezbQXTqSt7q51bVweErG","priority":0,"receipt":{"Action":{"signer_id":"da.test.near","signer_public_key":"ed25519:H2BvchWN5XvzhCzoCqRzapPwe6zDfMDw6nrFuxnMyha","gas_price":"119405230","output_data_receivers":[],"input_data_ids":[],"actions":[{"FunctionCall":{"method_name":"submit","args":"eyJhcmczIjozLCJhcmc0IjoyfQ==","gas":30000000000000,"deposit":"0"}}]}}}}],"state_changes":[{"cause":{"type":"transaction_processing","tx_hash":"Hm9eSkit6WDrLRpjjvTe78kyR4fFd52hvhMcPqKoa1ef"},"type":"account_update","change":{"account_id":"da.test.near","amount":"99972928372489495131629500","locked":"0","code_hash":"AGe5t2yJ1NgyxxfvNfSenyY5w1mJybuoK3fKcY1juNwd","storage_usage":8923,"storage_paid_at":0}},{"cause":{"type":"receipt_processing","receipt_hash":"D8amXow9Y2DxE57PwyYN6UQHezbQXTqSt7q51bVweErG"},"type":"account_update","change":{"account_id":"da.test.near","amount":"99972928372489495131629500","locked":"0","code_hash":"AGe5t2yJ1NgyxxfvNfSenyY5w1mJybuoK3fKcY1juNwd","storage_usage":8923,"storage_paid_at":0}},{"cause":{"type":"action_receipt_gas_reward","receipt_hash":"D8amXow9Y2DxE57PwyYN6UQHezbQXTqSt7q51bVweErG"},"type":"account_update","change":{"account_id":"da.test.near","amount":"99972932809270544031629500","locked":"0","code_hash":"AGe5t2yJ1NgyxxfvNfSenyY5w1mJybuoK3fKcY1juNwd","storage_usage":8923,"storage_paid_at":0}},{"cause":{"type":"transaction_processing","tx_hash":"Hm9eSkit6WDrLRpjjvTe78kyR4fFd52hvhMcPqKoa1ef"},"type":"access_key_update","change":{"account_id":"da.test.near","public_key":"ed25519:H2BvchWN5XvzhCzoCqRzapPwe6zDfMDw6nrFuxnMyha","access_key":{"nonce":6781000048,"permission":"FullAccess"}}}]}]} \ No newline at end of file diff --git a/indexer/test_data/candidates/AFhRAEcgFpV3SPvAQ4DF5QArCiPQgu6aSibPLCqsrvWa.json b/indexer/test_data/candidates/AFhRAEcgFpV3SPvAQ4DF5QArCiPQgu6aSibPLCqsrvWa.json index 4a0d19ec..5682ed32 100644 --- a/indexer/test_data/candidates/AFhRAEcgFpV3SPvAQ4DF5QArCiPQgu6aSibPLCqsrvWa.json +++ b/indexer/test_data/candidates/AFhRAEcgFpV3SPvAQ4DF5QArCiPQgu6aSibPLCqsrvWa.json @@ -1 +1 @@ -{"block":{"author":"test.near","header":{"height":45573,"prev_height":45572,"epoch_id":"DyJqzm3mAuDc36X7nqEfZe8ASkLWFHtt3e7Hqey66WB8","next_epoch_id":"Ch4bp426GrTbuuMxhoFhoBV7oCzeRyw7rPP6BNARnaHu","hash":"AFhRAEcgFpV3SPvAQ4DF5QArCiPQgu6aSibPLCqsrvWa","prev_hash":"2vqoUi31iNeE6GFeEZFqyeWXBJNRNzahNxfY7thVAkYX","prev_state_root":"F4YR5JhTXneH5ZLhcHWZDX3QESb2DHy6TGscyVBvsysM","block_body_hash":"DiQXUS7TsqxhCErhSqbkK9WxT2QgXEk6iutAv5PMGbmX","chunk_receipts_root":"9ETNjrt6MkwTgSVMMbpukfxRshSD1avBUUa4R4NuqwHv","chunk_headers_root":"DZL9zXLwRYYVZsCVtDePEniVDCT4ityddiEipj8QnDA5","chunk_tx_root":"G2MjizDEzxCHhkoNu7U7oJT2cWCpS28oSmxs4zcoheQm","outcome_root":"7tkzFg8RHBmMw1ncRJZCCZAizgq4rwCftTKYLce8RU8t","chunks_included":1,"challenges_root":"11111111111111111111111111111111","timestamp":1712136317429970000,"timestamp_nanosec":"1712136317429970000","random_value":"DHh3hX4JKtStebCthdCgnETf9MXAEoP68iT75C449gtw","validator_proposals":[],"chunk_mask":[true],"gas_price":"100000000","block_ordinal":45469,"rent_paid":"0","validator_reward":"0","total_supply":"2080376991499652586745873350984976","challenges_result":[],"last_final_block":"AcmtUMM4KEuFZvEL6C31eKRCb8H1BE9HDt4DoQgssWx","last_ds_final_block":"2vqoUi31iNeE6GFeEZFqyeWXBJNRNzahNxfY7thVAkYX","next_bp_hash":"BUt5pmFdnnPQ98hvyHEiXhXR2N3DYUpRJ8RLA27AXpKE","block_merkle_root":"3Keqa5hNyihtjTXJDpPxuP8Kvic8Ryq9V6hMoH8iQUiT","epoch_sync_data_hash":null,"approvals":["ed25519:4h6dY8dYhNgwDdWXYNtK4YcXAK55DPaN1zEkUDGZTTFXrVPV7sdA9Xm8j946aNWRB5vkSHzrHXj5k1pE9J77VSpP"],"signature":"ed25519:2J87gEM3FPhaExwdmCASARmHfPgQN7ho8KJd17YmkF7d1BLM74jyqcmEagxUhcDZuyGARpaUTs7eE29iFjkdppBm","latest_protocol_version":64},"chunks":[{"chunk_hash":"F7KdAxV81d9U2vAz2Z2aiPLJZm9mpzWRDbVNNvyK5ZXr","prev_block_hash":"2vqoUi31iNeE6GFeEZFqyeWXBJNRNzahNxfY7thVAkYX","outcome_root":"11111111111111111111111111111111","prev_state_root":"B5BvEvy7qeCoGt7dAodXjhKrU6vvPuRiyTC12C8FEcx1","encoded_merkle_root":"26BSZwi83ryJvvUQddsJz4XxwrjwdoQjxa7XMtxYNA1p","encoded_length":230,"height_created":45573,"height_included":45573,"shard_id":0,"gas_used":0,"gas_limit":1000000000000000,"rent_paid":"0","validator_reward":"0","balance_burnt":"0","outgoing_receipts_root":"H4Rd6SGeEBTbxkitsCdzfu9xL9HtZ2eHoPCQXUeZ6bW4","tx_root":"HR9J4UXCrtSDJwRQQBGpwL5jrhVUNc1Sj13fKAqziHrB","validator_proposals":[],"signature":"ed25519:YwWRjmTxLRqCpbqLVhZYxthHLWJow8TaGeVqyXTH7gaaDWkUDDPcrKdp6mDQNqS9H8qZLqjhavd67oBEpz6YzqT"}]},"shards":[{"shard_id":0,"chunk":{"author":"test.near","header":{"chunk_hash":"F7KdAxV81d9U2vAz2Z2aiPLJZm9mpzWRDbVNNvyK5ZXr","prev_block_hash":"2vqoUi31iNeE6GFeEZFqyeWXBJNRNzahNxfY7thVAkYX","outcome_root":"11111111111111111111111111111111","prev_state_root":"B5BvEvy7qeCoGt7dAodXjhKrU6vvPuRiyTC12C8FEcx1","encoded_merkle_root":"26BSZwi83ryJvvUQddsJz4XxwrjwdoQjxa7XMtxYNA1p","encoded_length":230,"height_created":45573,"height_included":0,"shard_id":0,"gas_used":0,"gas_limit":1000000000000000,"rent_paid":"0","validator_reward":"0","balance_burnt":"0","outgoing_receipts_root":"H4Rd6SGeEBTbxkitsCdzfu9xL9HtZ2eHoPCQXUeZ6bW4","tx_root":"HR9J4UXCrtSDJwRQQBGpwL5jrhVUNc1Sj13fKAqziHrB","validator_proposals":[],"signature":"ed25519:YwWRjmTxLRqCpbqLVhZYxthHLWJow8TaGeVqyXTH7gaaDWkUDDPcrKdp6mDQNqS9H8qZLqjhavd67oBEpz6YzqT"},"transactions":[{"transaction":{"signer_id":"da.test.near","public_key":"ed25519:H2BvchWN5XvzhCzoCqRzapPwe6zDfMDw6nrFuxnMyha","nonce":6781000077,"receiver_id":"da.test.near","actions":[{"FunctionCall":{"method_name":"submit","args":"eyJhcmciOjF9","gas":30000000000000,"deposit":"0"}}],"signature":"ed25519:4JZH6mE4q4wGPiNZJK1WVwxnySJkWVJbDR2KhorRdT5Bo4dhVE8pb6TEMumC19FS4zbNeHAb3tcirau18WzeVxUT","hash":"EpYUUmFnkQo2kh958m7mNr7UPb2fiqSWkASWF5wzLDWc"},"outcome":{"execution_outcome":{"proof":[{"hash":"BkqKwPwa95NHHyyskKd1NjCKN5xwKRFc4y5fMz56MDpL","direction":"Right"}],"block_hash":"AFhRAEcgFpV3SPvAQ4DF5QArCiPQgu6aSibPLCqsrvWa","id":"EpYUUmFnkQo2kh958m7mNr7UPb2fiqSWkASWF5wzLDWc","outcome":{"logs":[],"receipt_ids":["8k43iA164wRGKDZekjHuNTVNFVexPFUmz71cNCnRh2ou"],"gas_burnt":2427954539010,"tokens_burnt":"242795453901000000000","executor_id":"da.test.near","status":{"SuccessReceiptId":"8k43iA164wRGKDZekjHuNTVNFVexPFUmz71cNCnRh2ou"},"metadata":{"version":1,"gas_profile":null}}},"receipt":null}}],"receipts":[{"predecessor_id":"da.test.near","receiver_id":"da.test.near","receipt_id":"8k43iA164wRGKDZekjHuNTVNFVexPFUmz71cNCnRh2ou","receipt":{"Action":{"signer_id":"da.test.near","signer_public_key":"ed25519:H2BvchWN5XvzhCzoCqRzapPwe6zDfMDw6nrFuxnMyha","gas_price":"119405230","output_data_receivers":[],"input_data_ids":[],"actions":[{"FunctionCall":{"method_name":"submit","args":"eyJhcmciOjF9","gas":30000000000000,"deposit":"0"}}]}}}]},"receipt_execution_outcomes":[{"execution_outcome":{"proof":[{"hash":"AkdF2JbB9Eyb3CL6QqKFMCSbnRGoLyd5nLuXjJ9ZhLtw","direction":"Left"}],"block_hash":"AFhRAEcgFpV3SPvAQ4DF5QArCiPQgu6aSibPLCqsrvWa","id":"8k43iA164wRGKDZekjHuNTVNFVexPFUmz71cNCnRh2ou","outcome":{"logs":[],"receipt_ids":["EExgvxnFr9ViJyrfPwsGu3nWVyqmCq2YChp7NECTfDqk"],"gas_burnt":2575781001663,"tokens_burnt":"257578100166300000000","executor_id":"da.test.near","status":{"SuccessValue":""},"metadata":{"version":3,"gas_profile":[{"cost_category":"WASM_HOST_COST","cost":"BASE","gas_used":"2647681110"},{"cost_category":"WASM_HOST_COST","cost":"CONTRACT_LOADING_BASE","gas_used":"35445963"},{"cost_category":"WASM_HOST_COST","cost":"CONTRACT_LOADING_BYTES","gas_used":"1874020500"},{"cost_category":"WASM_HOST_COST","cost":"READ_MEMORY_BASE","gas_used":"5219726400"},{"cost_category":"WASM_HOST_COST","cost":"READ_MEMORY_BYTE","gas_used":"7602666"},{"cost_category":"WASM_HOST_COST","cost":"READ_REGISTER_BASE","gas_used":"7551495558"},{"cost_category":"WASM_HOST_COST","cost":"READ_REGISTER_BYTE","gas_used":"3252546"},{"cost_category":"WASM_HOST_COST","cost":"STORAGE_HAS_KEY_BASE","gas_used":"54039896625"},{"cost_category":"WASM_HOST_COST","cost":"STORAGE_HAS_KEY_BYTE","gas_used":"30790845"},{"cost_category":"WASM_HOST_COST","cost":"STORAGE_READ_BASE","gas_used":"56356845750"},{"cost_category":"WASM_HOST_COST","cost":"STORAGE_READ_KEY_BYTE","gas_used":"30952533"},{"cost_category":"WASM_HOST_COST","cost":"STORAGE_READ_VALUE_BYTE","gas_used":"67332060"},{"cost_category":"WASM_HOST_COST","cost":"WASM_INSTRUCTION","gas_used":"2738131968"},{"cost_category":"WASM_HOST_COST","cost":"WRITE_MEMORY_BASE","gas_used":"8411384583"},{"cost_category":"WASM_HOST_COST","cost":"WRITE_MEMORY_BYTE","gas_used":"89884476"},{"cost_category":"WASM_HOST_COST","cost":"WRITE_REGISTER_BASE","gas_used":"8596567458"},{"cost_category":"WASM_HOST_COST","cost":"WRITE_REGISTER_BYTE","gas_used":"125451612"}]}}},"receipt":{"predecessor_id":"da.test.near","receiver_id":"da.test.near","receipt_id":"8k43iA164wRGKDZekjHuNTVNFVexPFUmz71cNCnRh2ou","receipt":{"Action":{"signer_id":"da.test.near","signer_public_key":"ed25519:H2BvchWN5XvzhCzoCqRzapPwe6zDfMDw6nrFuxnMyha","gas_price":"119405230","output_data_receivers":[],"input_data_ids":[],"actions":[{"FunctionCall":{"method_name":"submit","args":"eyJhcmciOjF9","gas":30000000000000,"deposit":"0"}}]}}}}],"state_changes":[{"cause":{"type":"transaction_processing","tx_hash":"EpYUUmFnkQo2kh958m7mNr7UPb2fiqSWkASWF5wzLDWc"},"type":"account_update","change":{"account_id":"da.test.near","amount":"99958586925797827666977700","locked":"0","code_hash":"AGe5t2yJ1NgyxxfvNfSenyY5w1mJybuoK3fKcY1juNwd","storage_usage":8923,"storage_paid_at":0}},{"cause":{"type":"receipt_processing","receipt_hash":"8k43iA164wRGKDZekjHuNTVNFVexPFUmz71cNCnRh2ou"},"type":"account_update","change":{"account_id":"da.test.near","amount":"99958586925797827666977700","locked":"0","code_hash":"AGe5t2yJ1NgyxxfvNfSenyY5w1mJybuoK3fKcY1juNwd","storage_usage":8923,"storage_paid_at":0}},{"cause":{"type":"action_receipt_gas_reward","receipt_hash":"8k43iA164wRGKDZekjHuNTVNFVexPFUmz71cNCnRh2ou"},"type":"account_update","change":{"account_id":"da.test.near","amount":"99958591360591707166977700","locked":"0","code_hash":"AGe5t2yJ1NgyxxfvNfSenyY5w1mJybuoK3fKcY1juNwd","storage_usage":8923,"storage_paid_at":0}},{"cause":{"type":"transaction_processing","tx_hash":"EpYUUmFnkQo2kh958m7mNr7UPb2fiqSWkASWF5wzLDWc"},"type":"access_key_update","change":{"account_id":"da.test.near","public_key":"ed25519:H2BvchWN5XvzhCzoCqRzapPwe6zDfMDw6nrFuxnMyha","access_key":{"nonce":6781000077,"permission":"FullAccess"}}}]}]} \ No newline at end of file +{"block":{"author":"test.near","header":{"height":45573,"prev_height":45572,"epoch_id":"DyJqzm3mAuDc36X7nqEfZe8ASkLWFHtt3e7Hqey66WB8","next_epoch_id":"Ch4bp426GrTbuuMxhoFhoBV7oCzeRyw7rPP6BNARnaHu","hash":"AFhRAEcgFpV3SPvAQ4DF5QArCiPQgu6aSibPLCqsrvWa","prev_hash":"2vqoUi31iNeE6GFeEZFqyeWXBJNRNzahNxfY7thVAkYX","prev_state_root":"F4YR5JhTXneH5ZLhcHWZDX3QESb2DHy6TGscyVBvsysM","block_body_hash":"DiQXUS7TsqxhCErhSqbkK9WxT2QgXEk6iutAv5PMGbmX","chunk_receipts_root":"9ETNjrt6MkwTgSVMMbpukfxRshSD1avBUUa4R4NuqwHv","chunk_headers_root":"DZL9zXLwRYYVZsCVtDePEniVDCT4ityddiEipj8QnDA5","chunk_tx_root":"G2MjizDEzxCHhkoNu7U7oJT2cWCpS28oSmxs4zcoheQm","outcome_root":"7tkzFg8RHBmMw1ncRJZCCZAizgq4rwCftTKYLce8RU8t","chunks_included":1,"challenges_root":"11111111111111111111111111111111","timestamp":1712136317429970000,"timestamp_nanosec":"1712136317429970000","random_value":"DHh3hX4JKtStebCthdCgnETf9MXAEoP68iT75C449gtw","validator_proposals":[],"chunk_mask":[true],"gas_price":"100000000","block_ordinal":45469,"rent_paid":"0","validator_reward":"0","total_supply":"2080376991499652586745873350984976","challenges_result":[],"last_final_block":"AcmtUMM4KEuFZvEL6C31eKRCb8H1BE9HDt4DoQgssWx","last_ds_final_block":"2vqoUi31iNeE6GFeEZFqyeWXBJNRNzahNxfY7thVAkYX","next_bp_hash":"BUt5pmFdnnPQ98hvyHEiXhXR2N3DYUpRJ8RLA27AXpKE","block_merkle_root":"3Keqa5hNyihtjTXJDpPxuP8Kvic8Ryq9V6hMoH8iQUiT","epoch_sync_data_hash":null,"approvals":["ed25519:4h6dY8dYhNgwDdWXYNtK4YcXAK55DPaN1zEkUDGZTTFXrVPV7sdA9Xm8j946aNWRB5vkSHzrHXj5k1pE9J77VSpP"],"signature":"ed25519:2J87gEM3FPhaExwdmCASARmHfPgQN7ho8KJd17YmkF7d1BLM74jyqcmEagxUhcDZuyGARpaUTs7eE29iFjkdppBm","latest_protocol_version":64},"chunks":[{"chunk_hash":"F7KdAxV81d9U2vAz2Z2aiPLJZm9mpzWRDbVNNvyK5ZXr","prev_block_hash":"2vqoUi31iNeE6GFeEZFqyeWXBJNRNzahNxfY7thVAkYX","outcome_root":"11111111111111111111111111111111","prev_state_root":"B5BvEvy7qeCoGt7dAodXjhKrU6vvPuRiyTC12C8FEcx1","encoded_merkle_root":"26BSZwi83ryJvvUQddsJz4XxwrjwdoQjxa7XMtxYNA1p","encoded_length":230,"height_created":45573,"height_included":45573,"shard_id":0,"gas_used":0,"gas_limit":1000000000000000,"rent_paid":"0","validator_reward":"0","balance_burnt":"0","outgoing_receipts_root":"H4Rd6SGeEBTbxkitsCdzfu9xL9HtZ2eHoPCQXUeZ6bW4","tx_root":"HR9J4UXCrtSDJwRQQBGpwL5jrhVUNc1Sj13fKAqziHrB","validator_proposals":[],"signature":"ed25519:YwWRjmTxLRqCpbqLVhZYxthHLWJow8TaGeVqyXTH7gaaDWkUDDPcrKdp6mDQNqS9H8qZLqjhavd67oBEpz6YzqT"}]},"shards":[{"shard_id":0,"chunk":{"author":"test.near","header":{"chunk_hash":"F7KdAxV81d9U2vAz2Z2aiPLJZm9mpzWRDbVNNvyK5ZXr","prev_block_hash":"2vqoUi31iNeE6GFeEZFqyeWXBJNRNzahNxfY7thVAkYX","outcome_root":"11111111111111111111111111111111","prev_state_root":"B5BvEvy7qeCoGt7dAodXjhKrU6vvPuRiyTC12C8FEcx1","encoded_merkle_root":"26BSZwi83ryJvvUQddsJz4XxwrjwdoQjxa7XMtxYNA1p","encoded_length":230,"height_created":45573,"height_included":0,"shard_id":0,"gas_used":0,"gas_limit":1000000000000000,"rent_paid":"0","validator_reward":"0","balance_burnt":"0","outgoing_receipts_root":"H4Rd6SGeEBTbxkitsCdzfu9xL9HtZ2eHoPCQXUeZ6bW4","tx_root":"HR9J4UXCrtSDJwRQQBGpwL5jrhVUNc1Sj13fKAqziHrB","validator_proposals":[],"signature":"ed25519:YwWRjmTxLRqCpbqLVhZYxthHLWJow8TaGeVqyXTH7gaaDWkUDDPcrKdp6mDQNqS9H8qZLqjhavd67oBEpz6YzqT"},"transactions":[{"transaction":{"priority_fee":0,"signer_id":"da.test.near","public_key":"ed25519:H2BvchWN5XvzhCzoCqRzapPwe6zDfMDw6nrFuxnMyha","nonce":6781000077,"receiver_id":"da.test.near","actions":[{"FunctionCall":{"method_name":"submit","args":"eyJhcmciOjF9","gas":30000000000000,"deposit":"0"}}],"signature":"ed25519:4JZH6mE4q4wGPiNZJK1WVwxnySJkWVJbDR2KhorRdT5Bo4dhVE8pb6TEMumC19FS4zbNeHAb3tcirau18WzeVxUT","hash":"EpYUUmFnkQo2kh958m7mNr7UPb2fiqSWkASWF5wzLDWc"},"outcome":{"execution_outcome":{"proof":[{"hash":"BkqKwPwa95NHHyyskKd1NjCKN5xwKRFc4y5fMz56MDpL","direction":"Right"}],"block_hash":"AFhRAEcgFpV3SPvAQ4DF5QArCiPQgu6aSibPLCqsrvWa","id":"EpYUUmFnkQo2kh958m7mNr7UPb2fiqSWkASWF5wzLDWc","outcome":{"logs":[],"receipt_ids":["8k43iA164wRGKDZekjHuNTVNFVexPFUmz71cNCnRh2ou"],"gas_burnt":2427954539010,"tokens_burnt":"242795453901000000000","executor_id":"da.test.near","status":{"SuccessReceiptId":"8k43iA164wRGKDZekjHuNTVNFVexPFUmz71cNCnRh2ou"},"metadata":{"version":1,"gas_profile":null}}},"receipt":null}}],"receipts":[{"predecessor_id":"da.test.near","receiver_id":"da.test.near","receipt_id":"8k43iA164wRGKDZekjHuNTVNFVexPFUmz71cNCnRh2ou","priority":0,"receipt":{"Action":{"signer_id":"da.test.near","signer_public_key":"ed25519:H2BvchWN5XvzhCzoCqRzapPwe6zDfMDw6nrFuxnMyha","gas_price":"119405230","output_data_receivers":[],"input_data_ids":[],"actions":[{"FunctionCall":{"method_name":"submit","args":"eyJhcmciOjF9","gas":30000000000000,"deposit":"0"}}]}}}]},"receipt_execution_outcomes":[{"execution_outcome":{"proof":[{"hash":"AkdF2JbB9Eyb3CL6QqKFMCSbnRGoLyd5nLuXjJ9ZhLtw","direction":"Left"}],"block_hash":"AFhRAEcgFpV3SPvAQ4DF5QArCiPQgu6aSibPLCqsrvWa","id":"8k43iA164wRGKDZekjHuNTVNFVexPFUmz71cNCnRh2ou","outcome":{"logs":[],"receipt_ids":["EExgvxnFr9ViJyrfPwsGu3nWVyqmCq2YChp7NECTfDqk"],"gas_burnt":2575781001663,"tokens_burnt":"257578100166300000000","executor_id":"da.test.near","status":{"SuccessValue":""},"metadata":{"version":3,"gas_profile":[{"cost_category":"WASM_HOST_COST","cost":"BASE","gas_used":"2647681110"},{"cost_category":"WASM_HOST_COST","cost":"CONTRACT_LOADING_BASE","gas_used":"35445963"},{"cost_category":"WASM_HOST_COST","cost":"CONTRACT_LOADING_BYTES","gas_used":"1874020500"},{"cost_category":"WASM_HOST_COST","cost":"READ_MEMORY_BASE","gas_used":"5219726400"},{"cost_category":"WASM_HOST_COST","cost":"READ_MEMORY_BYTE","gas_used":"7602666"},{"cost_category":"WASM_HOST_COST","cost":"READ_REGISTER_BASE","gas_used":"7551495558"},{"cost_category":"WASM_HOST_COST","cost":"READ_REGISTER_BYTE","gas_used":"3252546"},{"cost_category":"WASM_HOST_COST","cost":"STORAGE_HAS_KEY_BASE","gas_used":"54039896625"},{"cost_category":"WASM_HOST_COST","cost":"STORAGE_HAS_KEY_BYTE","gas_used":"30790845"},{"cost_category":"WASM_HOST_COST","cost":"STORAGE_READ_BASE","gas_used":"56356845750"},{"cost_category":"WASM_HOST_COST","cost":"STORAGE_READ_KEY_BYTE","gas_used":"30952533"},{"cost_category":"WASM_HOST_COST","cost":"STORAGE_READ_VALUE_BYTE","gas_used":"67332060"},{"cost_category":"WASM_HOST_COST","cost":"WASM_INSTRUCTION","gas_used":"2738131968"},{"cost_category":"WASM_HOST_COST","cost":"WRITE_MEMORY_BASE","gas_used":"8411384583"},{"cost_category":"WASM_HOST_COST","cost":"WRITE_MEMORY_BYTE","gas_used":"89884476"},{"cost_category":"WASM_HOST_COST","cost":"WRITE_REGISTER_BASE","gas_used":"8596567458"},{"cost_category":"WASM_HOST_COST","cost":"WRITE_REGISTER_BYTE","gas_used":"125451612"}]}}},"receipt":{"predecessor_id":"da.test.near","receiver_id":"da.test.near","receipt_id":"8k43iA164wRGKDZekjHuNTVNFVexPFUmz71cNCnRh2ou","priority":0,"receipt":{"Action":{"signer_id":"da.test.near","signer_public_key":"ed25519:H2BvchWN5XvzhCzoCqRzapPwe6zDfMDw6nrFuxnMyha","gas_price":"119405230","output_data_receivers":[],"input_data_ids":[],"actions":[{"FunctionCall":{"method_name":"submit","args":"eyJhcmciOjF9","gas":30000000000000,"deposit":"0"}}]}}}}],"state_changes":[{"cause":{"type":"transaction_processing","tx_hash":"EpYUUmFnkQo2kh958m7mNr7UPb2fiqSWkASWF5wzLDWc"},"type":"account_update","change":{"account_id":"da.test.near","amount":"99958586925797827666977700","locked":"0","code_hash":"AGe5t2yJ1NgyxxfvNfSenyY5w1mJybuoK3fKcY1juNwd","storage_usage":8923,"storage_paid_at":0}},{"cause":{"type":"receipt_processing","receipt_hash":"8k43iA164wRGKDZekjHuNTVNFVexPFUmz71cNCnRh2ou"},"type":"account_update","change":{"account_id":"da.test.near","amount":"99958586925797827666977700","locked":"0","code_hash":"AGe5t2yJ1NgyxxfvNfSenyY5w1mJybuoK3fKcY1juNwd","storage_usage":8923,"storage_paid_at":0}},{"cause":{"type":"action_receipt_gas_reward","receipt_hash":"8k43iA164wRGKDZekjHuNTVNFVexPFUmz71cNCnRh2ou"},"type":"account_update","change":{"account_id":"da.test.near","amount":"99958591360591707166977700","locked":"0","code_hash":"AGe5t2yJ1NgyxxfvNfSenyY5w1mJybuoK3fKcY1juNwd","storage_usage":8923,"storage_paid_at":0}},{"cause":{"type":"transaction_processing","tx_hash":"EpYUUmFnkQo2kh958m7mNr7UPb2fiqSWkASWF5wzLDWc"},"type":"access_key_update","change":{"account_id":"da.test.near","public_key":"ed25519:H2BvchWN5XvzhCzoCqRzapPwe6zDfMDw6nrFuxnMyha","access_key":{"nonce":6781000077,"permission":"FullAccess"}}}]}]} \ No newline at end of file diff --git a/indexer/test_data/candidates/HKnmoD4cpBStpdWC1Mahm1NRWc4FZayjUEURzGuWpU18.json b/indexer/test_data/candidates/HKnmoD4cpBStpdWC1Mahm1NRWc4FZayjUEURzGuWpU18.json index d40507a2..731e2f17 100644 --- a/indexer/test_data/candidates/HKnmoD4cpBStpdWC1Mahm1NRWc4FZayjUEURzGuWpU18.json +++ b/indexer/test_data/candidates/HKnmoD4cpBStpdWC1Mahm1NRWc4FZayjUEURzGuWpU18.json @@ -1 +1 @@ -{"block":{"author":"test.near","header":{"height":45546,"prev_height":45545,"epoch_id":"DyJqzm3mAuDc36X7nqEfZe8ASkLWFHtt3e7Hqey66WB8","next_epoch_id":"Ch4bp426GrTbuuMxhoFhoBV7oCzeRyw7rPP6BNARnaHu","hash":"HKnmoD4cpBStpdWC1Mahm1NRWc4FZayjUEURzGuWpU18","prev_hash":"3DE7kshnvgRRc8fi4aL7HwFsdA9z86bUrAVjiM1mhk4g","prev_state_root":"FgSyVMwKpZNEkZGypzqytUafT8HFsL9GphDgSsKq8Goi","block_body_hash":"79tJRBZpaGWUTLH2EGGAGfSqteHFMcoH4uRFnRdY69F","chunk_receipts_root":"9ETNjrt6MkwTgSVMMbpukfxRshSD1avBUUa4R4NuqwHv","chunk_headers_root":"o97r29NVyeCBhFZp23TZe8Pi6EmNGeFgJpd4Rji9pSj","chunk_tx_root":"7ny5Z55CtZpCxfCjg7vBa9uxcKWuLjc9JcAJeSWMg4m1","outcome_root":"7tkzFg8RHBmMw1ncRJZCCZAizgq4rwCftTKYLce8RU8t","chunks_included":1,"challenges_root":"11111111111111111111111111111111","timestamp":1712136300728082000,"timestamp_nanosec":"1712136300728082000","random_value":"GuafCAcM7WTzWjGov8cF8sMnBffL1TEkEeKrhwqUkFFt","validator_proposals":[],"chunk_mask":[true],"gas_price":"100000000","block_ordinal":45442,"rent_paid":"0","validator_reward":"0","total_supply":"2080376991500148525506061150984976","challenges_result":[],"last_final_block":"FVKB7J3qLRTGb3t7P41sdzx1YFqQYKySJAmKF8Do8r9U","last_ds_final_block":"3DE7kshnvgRRc8fi4aL7HwFsdA9z86bUrAVjiM1mhk4g","next_bp_hash":"BUt5pmFdnnPQ98hvyHEiXhXR2N3DYUpRJ8RLA27AXpKE","block_merkle_root":"9nxsfJV5hG4r2hmYes8MPFEQbkvSgRLnMWpAy1CJgsZE","epoch_sync_data_hash":null,"approvals":["ed25519:s6WvBGZPtmE5U5XTmJhMEz6kvMVZSqYQqu8GXryPvtyodcpizG3rg7PwS3yog9ThGEH71yoC21NMPgfQFgM9eus"],"signature":"ed25519:4xEaEKXKBt4ciBsC9cFsWD2pfDMSC2tX7p7c4eFPdwD7XiT1Zcbzj12nCeouaDpfnjJch7R4ku9v7JHGYRNr1pfg","latest_protocol_version":64},"chunks":[{"chunk_hash":"6NXsCLF2HWSn8pRw7Nonb34VtZyiyFyK3iVm8ycPucHK","prev_block_hash":"3DE7kshnvgRRc8fi4aL7HwFsdA9z86bUrAVjiM1mhk4g","outcome_root":"11111111111111111111111111111111","prev_state_root":"Fwep6RG6Jt4YstGrJ5Z51bFHtojhsE62m43oyxjTPVPC","encoded_merkle_root":"GpVdeADTkxm73mHYaZv6RWvGDv8J8HE27zusK1roToA1","encoded_length":230,"height_created":45546,"height_included":45546,"shard_id":0,"gas_used":0,"gas_limit":1000000000000000,"rent_paid":"0","validator_reward":"0","balance_burnt":"0","outgoing_receipts_root":"H4Rd6SGeEBTbxkitsCdzfu9xL9HtZ2eHoPCQXUeZ6bW4","tx_root":"GekgbPeYX2tM2cguXPiXAy4PrxoNriL3Vc75w3tPquFx","validator_proposals":[],"signature":"ed25519:AJC4BwFn6m1aRXPFomLZf347ChmSX6MfGqJwHsmRZC54B9757PkobH9c6j6qNjmLuiwyTmtPF11Q6cuwzXcTFHr"}]},"shards":[{"shard_id":0,"chunk":{"author":"test.near","header":{"chunk_hash":"6NXsCLF2HWSn8pRw7Nonb34VtZyiyFyK3iVm8ycPucHK","prev_block_hash":"3DE7kshnvgRRc8fi4aL7HwFsdA9z86bUrAVjiM1mhk4g","outcome_root":"11111111111111111111111111111111","prev_state_root":"Fwep6RG6Jt4YstGrJ5Z51bFHtojhsE62m43oyxjTPVPC","encoded_merkle_root":"GpVdeADTkxm73mHYaZv6RWvGDv8J8HE27zusK1roToA1","encoded_length":230,"height_created":45546,"height_included":0,"shard_id":0,"gas_used":0,"gas_limit":1000000000000000,"rent_paid":"0","validator_reward":"0","balance_burnt":"0","outgoing_receipts_root":"H4Rd6SGeEBTbxkitsCdzfu9xL9HtZ2eHoPCQXUeZ6bW4","tx_root":"GekgbPeYX2tM2cguXPiXAy4PrxoNriL3Vc75w3tPquFx","validator_proposals":[],"signature":"ed25519:AJC4BwFn6m1aRXPFomLZf347ChmSX6MfGqJwHsmRZC54B9757PkobH9c6j6qNjmLuiwyTmtPF11Q6cuwzXcTFHr"},"transactions":[{"transaction":{"signer_id":"da.test.near","public_key":"ed25519:H2BvchWN5XvzhCzoCqRzapPwe6zDfMDw6nrFuxnMyha","nonce":6781000076,"receiver_id":"da.test.near","actions":[{"FunctionCall":{"method_name":"submit","args":"eyJhcmciOjF9","gas":30000000000000,"deposit":"0"}}],"signature":"ed25519:2rRkV7oSqiBKBcw9Npd79U1Sud84zGeaU12iQQV7YVfofXYd6AbiqkSBD94T7mvfbeHphr7swp5hvuTPK175UALz","hash":"J7Rq24qywM5XiyZX1cmbEkrBWN77gh4i4mcMFA52S6R8"},"outcome":{"execution_outcome":{"proof":[{"hash":"7rjuH4tf61MM2vo2XxT6LcwpY36xurWUFuEVFmr3JA8N","direction":"Right"}],"block_hash":"HKnmoD4cpBStpdWC1Mahm1NRWc4FZayjUEURzGuWpU18","id":"J7Rq24qywM5XiyZX1cmbEkrBWN77gh4i4mcMFA52S6R8","outcome":{"logs":[],"receipt_ids":["7rbQU1cWoGiQuUQjTTKoxzpQkQmA3cGLKLYSaSQsM5GD"],"gas_burnt":2427954539010,"tokens_burnt":"242795453901000000000","executor_id":"da.test.near","status":{"SuccessReceiptId":"7rbQU1cWoGiQuUQjTTKoxzpQkQmA3cGLKLYSaSQsM5GD"},"metadata":{"version":1,"gas_profile":null}}},"receipt":null}}],"receipts":[{"predecessor_id":"da.test.near","receiver_id":"da.test.near","receipt_id":"7rbQU1cWoGiQuUQjTTKoxzpQkQmA3cGLKLYSaSQsM5GD","receipt":{"Action":{"signer_id":"da.test.near","signer_public_key":"ed25519:H2BvchWN5XvzhCzoCqRzapPwe6zDfMDw6nrFuxnMyha","gas_price":"119405230","output_data_receivers":[],"input_data_ids":[],"actions":[{"FunctionCall":{"method_name":"submit","args":"eyJhcmciOjF9","gas":30000000000000,"deposit":"0"}}]}}}]},"receipt_execution_outcomes":[{"execution_outcome":{"proof":[{"hash":"AJ46727JkMeoQyhkV9JmiBSKQvhMA17xAv4JBR7ozACk","direction":"Left"}],"block_hash":"HKnmoD4cpBStpdWC1Mahm1NRWc4FZayjUEURzGuWpU18","id":"7rbQU1cWoGiQuUQjTTKoxzpQkQmA3cGLKLYSaSQsM5GD","outcome":{"logs":[],"receipt_ids":["2y5YoNEmN5GioXbHJaYb6H12ky3BCmCFHtiaHnmyjUmq"],"gas_burnt":2575781001663,"tokens_burnt":"257578100166300000000","executor_id":"da.test.near","status":{"SuccessValue":""},"metadata":{"version":3,"gas_profile":[{"cost_category":"WASM_HOST_COST","cost":"BASE","gas_used":"2647681110"},{"cost_category":"WASM_HOST_COST","cost":"CONTRACT_LOADING_BASE","gas_used":"35445963"},{"cost_category":"WASM_HOST_COST","cost":"CONTRACT_LOADING_BYTES","gas_used":"1874020500"},{"cost_category":"WASM_HOST_COST","cost":"READ_MEMORY_BASE","gas_used":"5219726400"},{"cost_category":"WASM_HOST_COST","cost":"READ_MEMORY_BYTE","gas_used":"7602666"},{"cost_category":"WASM_HOST_COST","cost":"READ_REGISTER_BASE","gas_used":"7551495558"},{"cost_category":"WASM_HOST_COST","cost":"READ_REGISTER_BYTE","gas_used":"3252546"},{"cost_category":"WASM_HOST_COST","cost":"STORAGE_HAS_KEY_BASE","gas_used":"54039896625"},{"cost_category":"WASM_HOST_COST","cost":"STORAGE_HAS_KEY_BYTE","gas_used":"30790845"},{"cost_category":"WASM_HOST_COST","cost":"STORAGE_READ_BASE","gas_used":"56356845750"},{"cost_category":"WASM_HOST_COST","cost":"STORAGE_READ_KEY_BYTE","gas_used":"30952533"},{"cost_category":"WASM_HOST_COST","cost":"STORAGE_READ_VALUE_BYTE","gas_used":"67332060"},{"cost_category":"WASM_HOST_COST","cost":"WASM_INSTRUCTION","gas_used":"2738131968"},{"cost_category":"WASM_HOST_COST","cost":"WRITE_MEMORY_BASE","gas_used":"8411384583"},{"cost_category":"WASM_HOST_COST","cost":"WRITE_MEMORY_BYTE","gas_used":"89884476"},{"cost_category":"WASM_HOST_COST","cost":"WRITE_REGISTER_BASE","gas_used":"8596567458"},{"cost_category":"WASM_HOST_COST","cost":"WRITE_REGISTER_BYTE","gas_used":"125451612"}]}}},"receipt":{"predecessor_id":"da.test.near","receiver_id":"da.test.near","receipt_id":"7rbQU1cWoGiQuUQjTTKoxzpQkQmA3cGLKLYSaSQsM5GD","receipt":{"Action":{"signer_id":"da.test.near","signer_public_key":"ed25519:H2BvchWN5XvzhCzoCqRzapPwe6zDfMDw6nrFuxnMyha","gas_price":"119405230","output_data_receivers":[],"input_data_ids":[],"actions":[{"FunctionCall":{"method_name":"submit","args":"eyJhcmciOjF9","gas":30000000000000,"deposit":"0"}}]}}}}],"state_changes":[{"cause":{"type":"transaction_processing","tx_hash":"J7Rq24qywM5XiyZX1cmbEkrBWN77gh4i4mcMFA52S6R8"},"type":"account_update","change":{"account_id":"da.test.near","amount":"99959082864558015466977700","locked":"0","code_hash":"AGe5t2yJ1NgyxxfvNfSenyY5w1mJybuoK3fKcY1juNwd","storage_usage":8923,"storage_paid_at":0}},{"cause":{"type":"receipt_processing","receipt_hash":"7rbQU1cWoGiQuUQjTTKoxzpQkQmA3cGLKLYSaSQsM5GD"},"type":"account_update","change":{"account_id":"da.test.near","amount":"99959082864558015466977700","locked":"0","code_hash":"AGe5t2yJ1NgyxxfvNfSenyY5w1mJybuoK3fKcY1juNwd","storage_usage":8923,"storage_paid_at":0}},{"cause":{"type":"action_receipt_gas_reward","receipt_hash":"7rbQU1cWoGiQuUQjTTKoxzpQkQmA3cGLKLYSaSQsM5GD"},"type":"account_update","change":{"account_id":"da.test.near","amount":"99959087299351894966977700","locked":"0","code_hash":"AGe5t2yJ1NgyxxfvNfSenyY5w1mJybuoK3fKcY1juNwd","storage_usage":8923,"storage_paid_at":0}},{"cause":{"type":"transaction_processing","tx_hash":"J7Rq24qywM5XiyZX1cmbEkrBWN77gh4i4mcMFA52S6R8"},"type":"access_key_update","change":{"account_id":"da.test.near","public_key":"ed25519:H2BvchWN5XvzhCzoCqRzapPwe6zDfMDw6nrFuxnMyha","access_key":{"nonce":6781000076,"permission":"FullAccess"}}}]}]} \ No newline at end of file +{"block":{"author":"test.near","header":{"height":45546,"prev_height":45545,"epoch_id":"DyJqzm3mAuDc36X7nqEfZe8ASkLWFHtt3e7Hqey66WB8","next_epoch_id":"Ch4bp426GrTbuuMxhoFhoBV7oCzeRyw7rPP6BNARnaHu","hash":"HKnmoD4cpBStpdWC1Mahm1NRWc4FZayjUEURzGuWpU18","prev_hash":"3DE7kshnvgRRc8fi4aL7HwFsdA9z86bUrAVjiM1mhk4g","prev_state_root":"FgSyVMwKpZNEkZGypzqytUafT8HFsL9GphDgSsKq8Goi","block_body_hash":"79tJRBZpaGWUTLH2EGGAGfSqteHFMcoH4uRFnRdY69F","chunk_receipts_root":"9ETNjrt6MkwTgSVMMbpukfxRshSD1avBUUa4R4NuqwHv","chunk_headers_root":"o97r29NVyeCBhFZp23TZe8Pi6EmNGeFgJpd4Rji9pSj","chunk_tx_root":"7ny5Z55CtZpCxfCjg7vBa9uxcKWuLjc9JcAJeSWMg4m1","outcome_root":"7tkzFg8RHBmMw1ncRJZCCZAizgq4rwCftTKYLce8RU8t","chunks_included":1,"challenges_root":"11111111111111111111111111111111","timestamp":1712136300728082000,"timestamp_nanosec":"1712136300728082000","random_value":"GuafCAcM7WTzWjGov8cF8sMnBffL1TEkEeKrhwqUkFFt","validator_proposals":[],"chunk_mask":[true],"gas_price":"100000000","block_ordinal":45442,"rent_paid":"0","validator_reward":"0","total_supply":"2080376991500148525506061150984976","challenges_result":[],"last_final_block":"FVKB7J3qLRTGb3t7P41sdzx1YFqQYKySJAmKF8Do8r9U","last_ds_final_block":"3DE7kshnvgRRc8fi4aL7HwFsdA9z86bUrAVjiM1mhk4g","next_bp_hash":"BUt5pmFdnnPQ98hvyHEiXhXR2N3DYUpRJ8RLA27AXpKE","block_merkle_root":"9nxsfJV5hG4r2hmYes8MPFEQbkvSgRLnMWpAy1CJgsZE","epoch_sync_data_hash":null,"approvals":["ed25519:s6WvBGZPtmE5U5XTmJhMEz6kvMVZSqYQqu8GXryPvtyodcpizG3rg7PwS3yog9ThGEH71yoC21NMPgfQFgM9eus"],"signature":"ed25519:4xEaEKXKBt4ciBsC9cFsWD2pfDMSC2tX7p7c4eFPdwD7XiT1Zcbzj12nCeouaDpfnjJch7R4ku9v7JHGYRNr1pfg","latest_protocol_version":64},"chunks":[{"chunk_hash":"6NXsCLF2HWSn8pRw7Nonb34VtZyiyFyK3iVm8ycPucHK","prev_block_hash":"3DE7kshnvgRRc8fi4aL7HwFsdA9z86bUrAVjiM1mhk4g","outcome_root":"11111111111111111111111111111111","prev_state_root":"Fwep6RG6Jt4YstGrJ5Z51bFHtojhsE62m43oyxjTPVPC","encoded_merkle_root":"GpVdeADTkxm73mHYaZv6RWvGDv8J8HE27zusK1roToA1","encoded_length":230,"height_created":45546,"height_included":45546,"shard_id":0,"gas_used":0,"gas_limit":1000000000000000,"rent_paid":"0","validator_reward":"0","balance_burnt":"0","outgoing_receipts_root":"H4Rd6SGeEBTbxkitsCdzfu9xL9HtZ2eHoPCQXUeZ6bW4","tx_root":"GekgbPeYX2tM2cguXPiXAy4PrxoNriL3Vc75w3tPquFx","validator_proposals":[],"signature":"ed25519:AJC4BwFn6m1aRXPFomLZf347ChmSX6MfGqJwHsmRZC54B9757PkobH9c6j6qNjmLuiwyTmtPF11Q6cuwzXcTFHr"}]},"shards":[{"shard_id":0,"chunk":{"author":"test.near","header":{"chunk_hash":"6NXsCLF2HWSn8pRw7Nonb34VtZyiyFyK3iVm8ycPucHK","prev_block_hash":"3DE7kshnvgRRc8fi4aL7HwFsdA9z86bUrAVjiM1mhk4g","outcome_root":"11111111111111111111111111111111","prev_state_root":"Fwep6RG6Jt4YstGrJ5Z51bFHtojhsE62m43oyxjTPVPC","encoded_merkle_root":"GpVdeADTkxm73mHYaZv6RWvGDv8J8HE27zusK1roToA1","encoded_length":230,"height_created":45546,"height_included":0,"shard_id":0,"gas_used":0,"gas_limit":1000000000000000,"rent_paid":"0","validator_reward":"0","balance_burnt":"0","outgoing_receipts_root":"H4Rd6SGeEBTbxkitsCdzfu9xL9HtZ2eHoPCQXUeZ6bW4","tx_root":"GekgbPeYX2tM2cguXPiXAy4PrxoNriL3Vc75w3tPquFx","validator_proposals":[],"signature":"ed25519:AJC4BwFn6m1aRXPFomLZf347ChmSX6MfGqJwHsmRZC54B9757PkobH9c6j6qNjmLuiwyTmtPF11Q6cuwzXcTFHr"},"transactions":[{"transaction":{"priority_fee":0,"signer_id":"da.test.near","public_key":"ed25519:H2BvchWN5XvzhCzoCqRzapPwe6zDfMDw6nrFuxnMyha","nonce":6781000076,"receiver_id":"da.test.near","actions":[{"FunctionCall":{"method_name":"submit","args":"eyJhcmciOjF9","gas":30000000000000,"deposit":"0"}}],"signature":"ed25519:2rRkV7oSqiBKBcw9Npd79U1Sud84zGeaU12iQQV7YVfofXYd6AbiqkSBD94T7mvfbeHphr7swp5hvuTPK175UALz","hash":"J7Rq24qywM5XiyZX1cmbEkrBWN77gh4i4mcMFA52S6R8"},"outcome":{"execution_outcome":{"proof":[{"hash":"7rjuH4tf61MM2vo2XxT6LcwpY36xurWUFuEVFmr3JA8N","direction":"Right"}],"block_hash":"HKnmoD4cpBStpdWC1Mahm1NRWc4FZayjUEURzGuWpU18","id":"J7Rq24qywM5XiyZX1cmbEkrBWN77gh4i4mcMFA52S6R8","outcome":{"logs":[],"receipt_ids":["7rbQU1cWoGiQuUQjTTKoxzpQkQmA3cGLKLYSaSQsM5GD"],"gas_burnt":2427954539010,"tokens_burnt":"242795453901000000000","executor_id":"da.test.near","status":{"SuccessReceiptId":"7rbQU1cWoGiQuUQjTTKoxzpQkQmA3cGLKLYSaSQsM5GD"},"metadata":{"version":1,"gas_profile":null}}},"receipt":null}}],"receipts":[{"predecessor_id":"da.test.near","receiver_id":"da.test.near","receipt_id":"7rbQU1cWoGiQuUQjTTKoxzpQkQmA3cGLKLYSaSQsM5GD","priority":0,"receipt":{"Action":{"signer_id":"da.test.near","signer_public_key":"ed25519:H2BvchWN5XvzhCzoCqRzapPwe6zDfMDw6nrFuxnMyha","gas_price":"119405230","output_data_receivers":[],"input_data_ids":[],"actions":[{"FunctionCall":{"method_name":"submit","args":"eyJhcmciOjF9","gas":30000000000000,"deposit":"0"}}]}}}]},"receipt_execution_outcomes":[{"execution_outcome":{"proof":[{"hash":"AJ46727JkMeoQyhkV9JmiBSKQvhMA17xAv4JBR7ozACk","direction":"Left"}],"block_hash":"HKnmoD4cpBStpdWC1Mahm1NRWc4FZayjUEURzGuWpU18","id":"7rbQU1cWoGiQuUQjTTKoxzpQkQmA3cGLKLYSaSQsM5GD","outcome":{"logs":[],"receipt_ids":["2y5YoNEmN5GioXbHJaYb6H12ky3BCmCFHtiaHnmyjUmq"],"gas_burnt":2575781001663,"tokens_burnt":"257578100166300000000","executor_id":"da.test.near","status":{"SuccessValue":""},"metadata":{"version":3,"gas_profile":[{"cost_category":"WASM_HOST_COST","cost":"BASE","gas_used":"2647681110"},{"cost_category":"WASM_HOST_COST","cost":"CONTRACT_LOADING_BASE","gas_used":"35445963"},{"cost_category":"WASM_HOST_COST","cost":"CONTRACT_LOADING_BYTES","gas_used":"1874020500"},{"cost_category":"WASM_HOST_COST","cost":"READ_MEMORY_BASE","gas_used":"5219726400"},{"cost_category":"WASM_HOST_COST","cost":"READ_MEMORY_BYTE","gas_used":"7602666"},{"cost_category":"WASM_HOST_COST","cost":"READ_REGISTER_BASE","gas_used":"7551495558"},{"cost_category":"WASM_HOST_COST","cost":"READ_REGISTER_BYTE","gas_used":"3252546"},{"cost_category":"WASM_HOST_COST","cost":"STORAGE_HAS_KEY_BASE","gas_used":"54039896625"},{"cost_category":"WASM_HOST_COST","cost":"STORAGE_HAS_KEY_BYTE","gas_used":"30790845"},{"cost_category":"WASM_HOST_COST","cost":"STORAGE_READ_BASE","gas_used":"56356845750"},{"cost_category":"WASM_HOST_COST","cost":"STORAGE_READ_KEY_BYTE","gas_used":"30952533"},{"cost_category":"WASM_HOST_COST","cost":"STORAGE_READ_VALUE_BYTE","gas_used":"67332060"},{"cost_category":"WASM_HOST_COST","cost":"WASM_INSTRUCTION","gas_used":"2738131968"},{"cost_category":"WASM_HOST_COST","cost":"WRITE_MEMORY_BASE","gas_used":"8411384583"},{"cost_category":"WASM_HOST_COST","cost":"WRITE_MEMORY_BYTE","gas_used":"89884476"},{"cost_category":"WASM_HOST_COST","cost":"WRITE_REGISTER_BASE","gas_used":"8596567458"},{"cost_category":"WASM_HOST_COST","cost":"WRITE_REGISTER_BYTE","gas_used":"125451612"}]}}},"receipt":{"predecessor_id":"da.test.near","receiver_id":"da.test.near","receipt_id":"7rbQU1cWoGiQuUQjTTKoxzpQkQmA3cGLKLYSaSQsM5GD","priority":0,"receipt":{"Action":{"signer_id":"da.test.near","signer_public_key":"ed25519:H2BvchWN5XvzhCzoCqRzapPwe6zDfMDw6nrFuxnMyha","gas_price":"119405230","output_data_receivers":[],"input_data_ids":[],"actions":[{"FunctionCall":{"method_name":"submit","args":"eyJhcmciOjF9","gas":30000000000000,"deposit":"0"}}]}}}}],"state_changes":[{"cause":{"type":"transaction_processing","tx_hash":"J7Rq24qywM5XiyZX1cmbEkrBWN77gh4i4mcMFA52S6R8"},"type":"account_update","change":{"account_id":"da.test.near","amount":"99959082864558015466977700","locked":"0","code_hash":"AGe5t2yJ1NgyxxfvNfSenyY5w1mJybuoK3fKcY1juNwd","storage_usage":8923,"storage_paid_at":0}},{"cause":{"type":"receipt_processing","receipt_hash":"7rbQU1cWoGiQuUQjTTKoxzpQkQmA3cGLKLYSaSQsM5GD"},"type":"account_update","change":{"account_id":"da.test.near","amount":"99959082864558015466977700","locked":"0","code_hash":"AGe5t2yJ1NgyxxfvNfSenyY5w1mJybuoK3fKcY1juNwd","storage_usage":8923,"storage_paid_at":0}},{"cause":{"type":"action_receipt_gas_reward","receipt_hash":"7rbQU1cWoGiQuUQjTTKoxzpQkQmA3cGLKLYSaSQsM5GD"},"type":"account_update","change":{"account_id":"da.test.near","amount":"99959087299351894966977700","locked":"0","code_hash":"AGe5t2yJ1NgyxxfvNfSenyY5w1mJybuoK3fKcY1juNwd","storage_usage":8923,"storage_paid_at":0}},{"cause":{"type":"transaction_processing","tx_hash":"J7Rq24qywM5XiyZX1cmbEkrBWN77gh4i4mcMFA52S6R8"},"type":"access_key_update","change":{"account_id":"da.test.near","public_key":"ed25519:H2BvchWN5XvzhCzoCqRzapPwe6zDfMDw6nrFuxnMyha","access_key":{"nonce":6781000076,"permission":"FullAccess"}}}]}]} \ No newline at end of file diff --git a/operator-rs/Cargo.toml b/operator-rs/Cargo.toml new file mode 100644 index 00000000..3b65eeab --- /dev/null +++ b/operator-rs/Cargo.toml @@ -0,0 +1,36 @@ +[package] +name = "operator-rs" +version = "0.1.0" +edition = "2021" + +[dependencies] +alloy = { workspace = true } +alloy-primitives = { workspace = true } +alloy-rpc-client = { workspace = true } +alloy-rpc-types = { workspace = true } +alloy-transport-ws = { workspace = true } +alloy-rlp = { workspace = true } +tokio = { workspace = true } +prometheus = { workspace = true } +serde = { workspace = true } +serde_json = { workspace = true } +anyhow = { workspace = true } +tracing = { workspace = true } +tracing-subscriber = { workspace = true } +futures-util = { workspace = true } +eyre = { workspace = true } +bincode = { workspace = true } +serde_yaml = { workspace = true } +clap = { workspace = true } +tempfile = { workspace = true } +core-rs = { workspace = true } + +# Dependencies specific to operator-rs +near-da-rpc = { git = "https://github.com/Nuffle-Labs/data-availability", branch = "main" } +near-da-primitives = { git = "https://github.com/Nuffle-Labs/data-availability", branch = "main" } +warp = "0.3" +hex = "0.4" +rand = "0.8" +eigensdk = { version = "0.1.0", features = ["full", "types", "crypto-bls", "utils"] } +borsh = "1.5.1" +lapin = "2.3.1" diff --git a/operator-rs/Dockerfile b/operator-rs/Dockerfile new file mode 100644 index 00000000..80e9f06c --- /dev/null +++ b/operator-rs/Dockerfile @@ -0,0 +1,41 @@ +# Use the official Rust image as a parent image +FROM rust:1.79-bookworm AS builder + +# Install system dependencies +RUN apt-get update && apt-get install -y \ + clang \ + libclang-dev \ + llvm-dev \ + libssl-dev \ + && rm -rf /var/lib/apt/lists/* + +# Find and set the LIBCLANG_PATH +RUN echo "export LIBCLANG_PATH=$(llvm-config --prefix)/lib" >> ~/.bashrc + +# Set the working directory in the container +WORKDIR /usr/src/operator-rs + +# Copy the Cargo.toml file +COPY Cargo.toml ./ + +# Copy the source code +COPY . /usr/src/operator-rs +COPY ../core-rs /usr/src/core-rs + +# Build the application +RUN . ~/.bashrc && cargo build --release + +# Start a new stage for a smaller final image +FROM debian:bookworm-slim + +# Install OpenSSL and CA certificates +RUN apt-get update && apt-get install -y openssl ca-certificates && rm -rf /var/lib/apt/lists/* + +# Copy the binary from the builder stage +COPY --from=builder /usr/src/operator-rs/target/release/operator-rs /usr/local/bin/operator-rs + +# Set the entrypoint to the operator-rs binary +ENTRYPOINT ["operator-rs"] + +# Default command (can be overridden) +CMD ["--help"] diff --git a/operator-rs/src/attestor/event_listener.rs b/operator-rs/src/attestor/event_listener.rs new file mode 100644 index 00000000..1fb1624a --- /dev/null +++ b/operator-rs/src/attestor/event_listener.rs @@ -0,0 +1,142 @@ +use prometheus::{Registry, Counter, CounterVec, Gauge, GaugeVec, opts}; +use anyhow::Result; + +pub trait EventListener: Send + Sync { + fn on_missed_mq_block(&self, rollup_id: u32); + fn on_block_mismatch(&self, rollup_id: u32); + fn on_block_received(&self, rollup_id: u32); + fn observe_last_block_received(&self, rollup_id: u32, block_number: u64); + fn observe_last_block_received_timestamp(&self, rollup_id: u32, timestamp: u64); + fn observe_initialization_initial_block_number(&self, rollup_id: u32, block_number: u64); +} + +pub struct SelectiveEventListener { + on_missed_mq_block_cb: Option>, + on_block_mismatch_cb: Option>, + on_block_received_cb: Option>, + observe_last_block_received_cb: Option>, + observe_last_block_received_timestamp_cb: Option>, + observe_initialization_initial_block_number_cb: Option>, +} + +impl Default for SelectiveEventListener { + fn default() -> Self { + Self { + on_missed_mq_block_cb: None, + on_block_mismatch_cb: None, + on_block_received_cb: None, + observe_last_block_received_cb: None, + observe_last_block_received_timestamp_cb: None, + observe_initialization_initial_block_number_cb: None, + } + } +} + +impl EventListener for SelectiveEventListener { + fn on_missed_mq_block(&self, rollup_id: u32) { + if let Some(cb) = &self.on_missed_mq_block_cb { + cb(rollup_id); + } + } + + fn on_block_mismatch(&self, rollup_id: u32) { + if let Some(cb) = &self.on_block_mismatch_cb { + cb(rollup_id); + } + } + + fn on_block_received(&self, rollup_id: u32) { + if let Some(cb) = &self.on_block_received_cb { + cb(rollup_id); + } + } + + fn observe_last_block_received(&self, rollup_id: u32, block_number: u64) { + if let Some(cb) = &self.observe_last_block_received_cb { + cb(rollup_id, block_number); + } + } + + fn observe_last_block_received_timestamp(&self, rollup_id: u32, timestamp: u64) { + if let Some(cb) = &self.observe_last_block_received_timestamp_cb { + cb(rollup_id, timestamp); + } + } + + fn observe_initialization_initial_block_number(&self, rollup_id: u32, block_number: u64) { + if let Some(cb) = &self.observe_initialization_initial_block_number_cb { + cb(rollup_id, block_number); + } + } +} + +const OPERATOR_NAMESPACE: &str = "sffl_operator"; +const ATTESTOR_SUBSYSTEM: &str = "attestor"; + +pub fn make_attestor_metrics(registry: &Registry) -> Result { + let num_missed_mq_blocks = CounterVec::new( + opts!("num_of_missed_mq_blocks", "The number of late blocks from MQ") + .namespace(OPERATOR_NAMESPACE) + .subsystem(ATTESTOR_SUBSYSTEM), + &["rollup_id"], + )?; + registry.register(Box::new(num_missed_mq_blocks.clone()))?; + + let num_blocks_mismatched = CounterVec::new( + opts!("num_of_mismatched_blocks", "The number of blocks from MQ mismatched with RPC ones") + .namespace(OPERATOR_NAMESPACE) + .subsystem(ATTESTOR_SUBSYSTEM), + &["rollup_id"], + )?; + registry.register(Box::new(num_blocks_mismatched.clone()))?; + + let num_blocks_received = CounterVec::new( + opts!("num_of_received_blocks", "The number of blocks received from RPC") + .namespace(OPERATOR_NAMESPACE) + .subsystem(ATTESTOR_SUBSYSTEM), + &["rollup_id"], + )?; + registry.register(Box::new(num_blocks_received.clone()))?; + + let last_block_received = GaugeVec::new( + opts!("last_block_received", "Last block received per rollup ID") + .namespace(OPERATOR_NAMESPACE), + &["rollup_id"], + )?; + registry.register(Box::new(last_block_received.clone()))?; + + let last_block_received_timestamp = GaugeVec::new( + opts!("last_block_received_timestamp", "Timestamp of last block received per rollup ID") + .namespace(OPERATOR_NAMESPACE), + &["rollup_id"], + )?; + registry.register(Box::new(last_block_received_timestamp.clone()))?; + + let initialization_initial_block_number = GaugeVec::new( + opts!("initialization_initial_block_number", "Initialization initial block number per rollup ID") + .namespace(OPERATOR_NAMESPACE), + &["rollup_id"], + )?; + registry.register(Box::new(initialization_initial_block_number.clone()))?; + + Ok(SelectiveEventListener { + on_missed_mq_block_cb: Some(Box::new(move |rollup_id| { + num_missed_mq_blocks.with_label_values(&[&rollup_id.to_string()]).inc(); + })), + on_block_mismatch_cb: Some(Box::new(move |rollup_id| { + num_blocks_mismatched.with_label_values(&[&rollup_id.to_string()]).inc(); + })), + on_block_received_cb: Some(Box::new(move |rollup_id| { + num_blocks_received.with_label_values(&[&rollup_id.to_string()]).inc(); + })), + observe_last_block_received_cb: Some(Box::new(move |rollup_id, block_number| { + last_block_received.with_label_values(&[&rollup_id.to_string()]).set(block_number as f64); + })), + observe_last_block_received_timestamp_cb: Some(Box::new(move |rollup_id, timestamp| { + last_block_received_timestamp.with_label_values(&[&rollup_id.to_string()]).set(timestamp as f64); + })), + observe_initialization_initial_block_number_cb: Some(Box::new(move |rollup_id, block_number| { + initialization_initial_block_number.with_label_values(&[&rollup_id.to_string()]).set(block_number as f64); + })), + }) +} \ No newline at end of file diff --git a/operator-rs/src/attestor/mod.rs b/operator-rs/src/attestor/mod.rs new file mode 100644 index 00000000..f2c36df2 --- /dev/null +++ b/operator-rs/src/attestor/mod.rs @@ -0,0 +1,331 @@ +mod notifier; +mod event_listener; +use crate::consumer::Consumer; +use crate::consumer::config::ConsumerConfig; + +use std::collections::HashMap; +use std::sync::Arc; +use alloy_rpc_types::Header; +use tokio::sync::mpsc; +use tokio::time::Duration; +use anyhow::{Result, anyhow}; +use tracing::{error, info, warn}; +use prometheus::Registry; +use alloy_rpc_types::Block; +use tokio::sync::Mutex; +use core_rs::safeclient::{SafeClient, SafeEthClient, SafeEthClientOptions}; + +use crate::types::{BlockData, NFFLNodeConfig, SignedStateRootUpdateMessage, StateRootUpdateMessage}; +use self::notifier::Notifier; +use self::event_listener::{EventListener, SelectiveEventListener}; +use eigensdk::crypto_bls::{BlsKeyPair, BlsSignature}; +use tokio::sync::broadcast; + +// Constants +const MQ_WAIT_TIMEOUT: Duration = Duration::from_secs(30); + +// TODO: Replace with actual types from eigensdk-rs +type OperatorId = eigensdk::types::operator::OperatorId; + +struct SharedState { + notifier: Arc, + consumer: Mutex, + listener: Box, + signed_root_tx: broadcast::Sender, +} + +pub struct Attestor { + shared: Arc, + rollup_ids_to_urls: HashMap, + clients: HashMap>, + rpc_calls_collectors: HashMap, // Replace with actual RPC calls collector + config: NFFLNodeConfig, + bls_keypair: BlsKeyPair, + operator_id: OperatorId, + registry: Registry, +} + +impl Attestor { + #[allow(clippy::too_many_arguments)] + pub fn new(config: NFFLNodeConfig, bls_keypair: BlsKeyPair, + operator_id: OperatorId, registry: Registry) -> Result { + info!("Creating new Attestor instance"); + let consumer = Consumer::new(ConsumerConfig { + rollup_ids: config.near_da_indexer_rollup_ids.clone(), + id: hex::encode(&operator_id), + }); + + let mut clients = HashMap::new(); + let mut rpc_calls_collectors = HashMap::new(); + + for (rollup_id, url) in &config.rollup_ids_to_rpc_urls { + info!("Creating SafeClient for rollup_id: {}, url: {}", rollup_id, url); + let client: Arc = Arc::new(create_safe_client(url)?); + clients.insert(*rollup_id, client); + + if config.enable_metrics { + info!("Metrics enabled, creating RPC calls collector for rollup_id: {}", rollup_id); + // Create and add RPC calls collector (mock for now) + rpc_calls_collectors.insert(*rollup_id, ()); + } + } + + let (signed_root_tx, _) = broadcast::channel(100); + + let shared = Arc::new(SharedState { + notifier: Arc::new(Notifier::new()), + consumer: Mutex::new(consumer), + listener: Box::new(SelectiveEventListener::default()), + signed_root_tx, + }); + + info!("Attestor instance created successfully"); + Ok(Self { + shared, + rollup_ids_to_urls: config.rollup_ids_to_rpc_urls.clone(), + clients, + rpc_calls_collectors, + config, + bls_keypair, + operator_id, + registry, + }) + } + + pub fn enable_metrics(&mut self, registry: &Registry) -> Result<()> { + info!("Enabling metrics for Attestor"); + let _listener = event_listener::make_attestor_metrics(registry)?; + // TODO: Implement metrics enabling logic + info!("Metrics enabled successfully"); + Ok(()) + } + + pub async fn start(&self) -> Result<()> { + info!("Starting Attestor"); + let addr = self.config.near_da_indexer_rmq_ip_port_address.clone(); + + let shared = Arc::clone(&self.shared); + tokio::spawn(async move { + loop { + let mut consumer = shared.consumer.lock().await; + if let Err(e) = consumer.start(&addr).await { + error!("Consumer error: {:?}", e); + info!("Retrying consumer start in 5 seconds"); + tokio::time::sleep(Duration::from_secs(5)).await; + } + } + }); + + let mut headers_rxs = HashMap::new(); + + for (rollup_id, client) in &self.clients { + info!("Setting up header subscription for rollup_id: {}", rollup_id); + let headers_rx = client.subscribe_new_heads().await?; + let block_number = client.block_number().await?; + + info!("Observing initial block number {} for rollup_id: {}", block_number, rollup_id); + self.shared.listener.observe_initialization_initial_block_number(*rollup_id, block_number.to::()); + + headers_rxs.insert(*rollup_id, headers_rx); + } + + let shared = Arc::clone(&self.shared); + tokio::spawn(async move { + if let Err(e) = Self::process_mq_blocks(shared).await { + error!("Error processing MQ blocks: {:?}", e); + } + }); + + for (rollup_id, headers_rx) in headers_rxs { + let cloned_operator_id = self.operator_id.clone(); + let cloned_keypair = self.bls_keypair.clone(); + let self_ref = Arc::clone(&self.shared); + info!("Spawning task to process rollup headers for rollup_id: {}", rollup_id); + tokio::spawn(async move { + if let Err(e) = Self::process_rollup_headers(&self_ref, rollup_id, cloned_operator_id, &cloned_keypair, headers_rx).await { + error!("Error processing rollup headers for rollup {}: {:?}", rollup_id, e); + } + }); + } + + info!("Attestor started successfully"); + Ok(()) + } + + async fn process_mq_blocks(shared: Arc) -> Result<()> { + info!("Starting MQ blocks processing"); + loop { + let consumer = shared.consumer.lock().await; + let mut mq_block_rx = consumer.get_block_stream(); + drop(consumer); // Release the lock + + loop { + match mq_block_rx.recv().await { + Ok(mq_block) => { + info!("Notifying - rollupId: {}, height: {}", mq_block.rollup_id, get_block_number(&mq_block.block)); + if let Err(e) = shared.notifier.notify(mq_block.rollup_id, mq_block) { + error!("Notifier error: {}", e); + } + }, + Err(tokio::sync::broadcast::error::RecvError::Closed) => { + warn!("MQ block channel closed"); + break; // Break the inner loop to reconnect + }, + Err(tokio::sync::broadcast::error::RecvError::Lagged(skipped)) => { + warn!("Skipped {} messages due to slow processing", skipped); + // Continue processing + } + } + } + + // If we've broken out of the inner loop, wait a bit before trying to reconnect + info!("Waiting 5 seconds before attempting to reconnect to MQ"); + tokio::time::sleep(Duration::from_secs(5)).await; + } + } + + async fn process_rollup_headers(shared: &Arc, rollup_id: u32, operator_id: OperatorId, keypair: &BlsKeyPair, mut headers_rx: broadcast::Receiver
) -> Result<()> { + info!("Starting to process rollup headers for rollup_id: {}", rollup_id); + while let Ok(header) = headers_rx.recv().await { + if let Err(e) = Self::process_header(shared, rollup_id, operator_id, keypair, header).await { + error!("Error processing header for rollup {}: {:?}", rollup_id, e); + } + } + warn!("Finished processing rollup headers for rollup_id: {}", rollup_id); + Ok(()) + } + + async fn process_header(shared: &Arc, rollup_id: u32, operator_id: OperatorId, keypair: &BlsKeyPair, rollup_header: Header) -> Result<()> { + let header_number = get_header_number(&rollup_header); + let header_timestamp = get_header_timestamp(&rollup_header); + let header_root = get_header_root(&rollup_header); + + info!("Processing header - rollup_id: {}, header_number: {}", rollup_id, header_number); + + shared.listener.observe_last_block_received(rollup_id, header_number); + shared.listener.observe_last_block_received_timestamp(rollup_id, header_timestamp); + shared.listener.on_block_received(rollup_id); + + let predicate = move |mq_block: &BlockData| { + mq_block.rollup_id == rollup_id + && header_number == get_block_number(&mq_block.block) + && get_block_root(&mq_block.block) == header_root + }; + + let notifier = Arc::clone(&shared.notifier); + let (mut mq_blocks_rx, id) = notifier.subscribe(rollup_id, predicate); + + let mut transaction_id = [0u8; 32]; + let mut da_commitment = [0u8; 32]; + + let result = tokio::time::timeout(MQ_WAIT_TIMEOUT, mq_blocks_rx.recv()).await; + + match result { + Ok(Some(mq_block)) => { + info!("MQ block found - height: {}, rollupId: {}", get_block_number(&mq_block.block), mq_block.rollup_id); + transaction_id = mq_block.transaction_id; + da_commitment = mq_block.commitment; + } + Ok(None) => { + warn!("MQ channel closed unexpectedly - rollupId: {}, height: {}", rollup_id, header_number); + } + Err(_) => { + warn!("MQ timeout - rollupId: {}, height: {}", rollup_id, header_number); + shared.listener.on_missed_mq_block(rollup_id); + } + } + + notifier.unsubscribe(rollup_id, id); + + let message = StateRootUpdateMessage { + rollup_id, + block_height: header_number, + timestamp: header_timestamp, + state_root: header_root, + near_da_transaction_id: transaction_id, + near_da_commitment: da_commitment, + }; + + match sign_state_root_update_message(keypair, &message) { + Ok(signature) => { + let signed_message = SignedStateRootUpdateMessage { + message, + bls_signature: signature, + operator_id, + }; + if let Err(e) = shared.signed_root_tx.send(signed_message) { + warn!("Failed to send signed state root update: {}", e); + } else { + info!("Successfully sent signed state root update for rollup_id: {}, height: {}", rollup_id, header_number); + } + } + Err(e) => { + error!("State root sign failed: {}", e); + return Err(anyhow!("State root sign failed: {}", e)); + } + } + Ok(()) + } + + pub fn get_signed_root_rx(&self) -> broadcast::Receiver { + info!("Getting signed root receiver"); + self.shared.signed_root_tx.subscribe() + } + + pub async fn close(&self) -> Result<()> { + info!("Closing Attestor"); + let mut consumer = self.shared.consumer.lock().await; + consumer.close().await?; + for (rollup_id, client) in &self.clients { + info!("Closing client for rollup_id: {}", rollup_id); + client.close(); + } + info!("Attestor closed successfully"); + Ok(()) + } +} + +// Helper functions implementations +fn create_safe_client(url: &str) -> Result { + let options = SafeEthClientOptions { + log_resub_interval: Duration::from_secs(300), + header_timeout: Duration::from_secs(30), + block_chunk_size: 100, + block_max_range: 100, + }; + + let client = tokio::runtime::Runtime::new()?.block_on(async { + SafeEthClient::new(url, options).await + })?; + + info!("Created SafeEthClient"); + Ok(client) +} + +fn sign_state_root_update_message(_keypair: &BlsKeyPair, _message: &StateRootUpdateMessage) -> Result { + // In a real implementation, you'd use the actual BLS signing logic + // For now, we'll create a mock signature + info!("Creating mock BLS signature"); + let mock_signature = BlsSignature::default(); // Assuming BlsSignature has a default implementation + Ok(mock_signature) +} + +fn get_header_number(header: &Header) -> u64 { + header.number +} + +fn get_header_timestamp(header: &Header) -> u64 { + header.timestamp +} + +fn get_header_root(header: &Header) -> [u8; 32] { + header.state_root.into() +} + +fn get_block_number(block: &Block) -> u64 { + block.header.number +} + +fn get_block_root(block: &Block) -> [u8; 32] { + block.header.state_root.into() +} diff --git a/operator-rs/src/attestor/notifier.rs b/operator-rs/src/attestor/notifier.rs new file mode 100644 index 00000000..1dddb063 --- /dev/null +++ b/operator-rs/src/attestor/notifier.rs @@ -0,0 +1,182 @@ +use std::collections::HashMap; +use std::sync::{Arc, Mutex}; +use tokio::sync::mpsc; +use anyhow::{Result, anyhow}; + +use crate::types::BlockData; + +type BlockPredicate = Arc bool + Send + Sync>; + +struct SubscriberData { + predicate: BlockPredicate, + notifier_tx: mpsc::Sender, +} + +pub struct Notifier { + rollup_ids_to_subscribers: Arc>>>, +} + +impl Notifier { + pub fn new() -> Self { + Self { + rollup_ids_to_subscribers: Arc::new(Mutex::new(HashMap::new())), + } + } + + pub fn subscribe(&self, rollup_id: u32, predicate: impl Fn(&BlockData) -> bool + Send + Sync + 'static) -> (mpsc::Receiver, usize) { + let mut subscribers = self.rollup_ids_to_subscribers.lock().unwrap(); + let subscribers_for_rollup = subscribers.entry(rollup_id).or_insert_with(Vec::new); + + let (tx, rx) = mpsc::channel(100); + let subscriber = SubscriberData { + predicate: Arc::new(predicate), + notifier_tx: tx, + }; + + let id = subscribers_for_rollup.len(); + subscribers_for_rollup.push(subscriber); + + (rx, id) + } + + pub fn notify(&self, rollup_id: u32, block: BlockData) -> Result<()> { + let subscribers = self.rollup_ids_to_subscribers.lock().unwrap(); + let subscribers_for_rollup = subscribers.get(&rollup_id).ok_or_else(|| anyhow!("Unknown rollup ID"))?; + + for subscriber in subscribers_for_rollup { + if (subscriber.predicate)(&block) { + if let Err(e) = subscriber.notifier_tx.try_send(block.clone()) { + eprintln!("Failed to send block to subscriber: {:?}", e); + } + } + } + + Ok(()) + } + + pub fn unsubscribe(&self, rollup_id: u32, id: usize) { + let mut subscribers = self.rollup_ids_to_subscribers.lock().unwrap(); + if let Some(subscribers_for_rollup) = subscribers.get_mut(&rollup_id) { + subscribers_for_rollup.remove(id); + } + } +} + +impl Clone for Notifier { + fn clone(&self) -> Self { + Self { + rollup_ids_to_subscribers: self.rollup_ids_to_subscribers.clone(), + } + } +} + +#[cfg(test)] +mod tests { + use super::*; + use std::sync::Arc; + use tokio::runtime::Runtime; + + #[test] + fn test_notifier_subscribe_and_notify() { + let rt = Runtime::new().unwrap(); + rt.block_on(async { + let notifier = Notifier::new(); + let rollup_id = 1; + + // Subscribe to notifications + let (mut rx, id) = notifier.subscribe(rollup_id, move |block| block.rollup_id == rollup_id); + + // Create a test block + let test_block = BlockData { + rollup_id, + block: Default::default(), // You might need to adjust this based on your Block type + transaction_id: [0; 32], + commitment: [0; 32], + }; + + // Notify the subscribers + notifier.notify(rollup_id, test_block.clone()).unwrap(); + + // Check if we received the notification + let received_block = rx.recv().await.unwrap(); + assert_eq!(received_block.rollup_id, test_block.rollup_id); + + // Unsubscribe + notifier.unsubscribe(rollup_id, id); + }); + } + + #[test] + fn test_notifier_multiple_subscribers() { + let rt = Runtime::new().unwrap(); + rt.block_on(async { + let notifier = Notifier::new(); + let rollup_id = 1; + + // Subscribe two listeners + let (mut rx1, id1) = notifier.subscribe(rollup_id, move |block| block.rollup_id == rollup_id); + let (mut rx2, id2) = notifier.subscribe(rollup_id, move |block| block.rollup_id == rollup_id); + + // Create a test block + let test_block = BlockData { + rollup_id, + block: Default::default(), + transaction_id: [0; 32], + commitment: [0; 32], + }; + + // Notify the subscribers + notifier.notify(rollup_id, test_block.clone()).unwrap(); + + // Check if both subscribers received the notification + let received_block1 = rx1.recv().await.unwrap(); + let received_block2 = rx2.recv().await.unwrap(); + assert_eq!(received_block1.rollup_id, test_block.rollup_id); + assert_eq!(received_block2.rollup_id, test_block.rollup_id); + + // Unsubscribe + notifier.unsubscribe(rollup_id, id1); + notifier.unsubscribe(rollup_id, id2); + }); + } + + #[test] + fn test_notifier_predicate_filtering() { + let rt = Runtime::new().unwrap(); + rt.block_on(async { + let notifier = Notifier::new(); + let rollup_id = 1; + + // Subscribe with a specific predicate + let (mut rx, id) = notifier.subscribe(rollup_id, move |block| block.rollup_id == rollup_id && block.transaction_id[0] == 1); + + // Create test blocks + let matching_block = BlockData { + rollup_id, + block: Default::default(), + transaction_id: [1; 32], + commitment: [0; 32], + }; + let non_matching_block = BlockData { + rollup_id, + block: Default::default(), + transaction_id: [0; 32], + commitment: [0; 32], + }; + + // Notify the subscribers + notifier.notify(rollup_id, matching_block.clone()).unwrap(); + notifier.notify(rollup_id, non_matching_block.clone()).unwrap(); + + // Check if only the matching block was received + let received_block = rx.recv().await.unwrap(); + assert_eq!(received_block.transaction_id[0], 1); + + // Ensure no more blocks were received + assert!(rx.try_recv().is_err()); + + // Unsubscribe + notifier.unsubscribe(rollup_id, id); + }); + } +} \ No newline at end of file diff --git a/operator-rs/src/config.rs b/operator-rs/src/config.rs new file mode 100644 index 00000000..e5c9044a --- /dev/null +++ b/operator-rs/src/config.rs @@ -0,0 +1,11 @@ +use crate::NFFLNodeConfig; +use std::path::PathBuf; +use anyhow::Result; + + +// TODO: Add checks on the validation of the config file +pub fn load_config(path: PathBuf) -> Result { + let config_str = std::fs::read_to_string(path)?; + let config: NFFLNodeConfig = serde_yaml::from_str(&config_str)?; + Ok(config) +} \ No newline at end of file diff --git a/operator-rs/src/consumer/config.rs b/operator-rs/src/consumer/config.rs new file mode 100644 index 00000000..3ec0f2ec --- /dev/null +++ b/operator-rs/src/consumer/config.rs @@ -0,0 +1,19 @@ +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, Deserialize, Serialize)] +pub struct ConsumerConfig { + pub rollup_ids: Vec, + pub id: String, +} + +pub fn get_queue_name(rollup_id: u32, id: &str) -> String { + format!("rollup{}-{}", rollup_id, id) +} + +pub fn get_routing_key(rollup_id: u32) -> String { + format!("rollup{}", rollup_id) +} + +pub fn get_consumer_tag(rollup_id: u32) -> String { + format!("operator{}", rollup_id) +} \ No newline at end of file diff --git a/operator-rs/src/consumer/event_listener.rs b/operator-rs/src/consumer/event_listener.rs new file mode 100644 index 00000000..4852289b --- /dev/null +++ b/operator-rs/src/consumer/event_listener.rs @@ -0,0 +1,56 @@ +use prometheus::{Registry, IntCounter}; +use anyhow::Result; +use std::sync::Arc; + +pub trait EventListener: Send + Sync { + fn on_arrival(&self); + fn on_format_error(&self); +} + +#[derive(Default)] +pub struct SelectiveListener { + on_arrival_cb: Option>, + on_format_error_cb: Option>, +} + +impl EventListener for SelectiveListener { + fn on_arrival(&self) { + if let Some(cb) = &self.on_arrival_cb { + cb(); + } + } + + fn on_format_error(&self) { + if let Some(cb) = &self.on_format_error_cb { + cb(); + } + } +} + +impl Clone for SelectiveListener { + fn clone(&self) -> Self { + Self { + on_arrival_cb: self.on_arrival_cb.clone(), + on_format_error_cb: self.on_format_error_cb.clone(), + } + } +} + +pub fn make_consumer_metrics(registry: &Registry) -> Result> { + let num_blocks_arrived = IntCounter::new( + "num_of_mq_arrivals", + "The number of consumed blocks from MQ", + )?; + registry.register(Box::new(num_blocks_arrived.clone()))?; + + let num_format_errors = IntCounter::new( + "num_of_mismatched_blocks", + "The number of blocks from MQ with invalid format", + )?; + registry.register(Box::new(num_format_errors.clone()))?; + + Ok(Arc::new(SelectiveListener { + on_arrival_cb: Some(Arc::new(move || num_blocks_arrived.inc())), + on_format_error_cb: Some(Arc::new(move || num_format_errors.inc())), + })) +} \ No newline at end of file diff --git a/operator-rs/src/consumer/mod.rs b/operator-rs/src/consumer/mod.rs new file mode 100644 index 00000000..e7a324d9 --- /dev/null +++ b/operator-rs/src/consumer/mod.rs @@ -0,0 +1,139 @@ +pub mod config; +mod event_listener; +mod queues_listener; + +use std::sync::Arc; +use tokio::sync::broadcast; +use tokio::time::{Duration, sleep}; +use anyhow::{Result, anyhow}; +use tracing::{info, warn, error}; +use lapin::{Connection, ConnectionProperties}; +use prometheus::Registry; +use crate::types::BlockData; + +use self::config::ConsumerConfig; +use self::event_listener::EventListener; +use self::queues_listener::QueuesListener; + +const RECONNECT_DELAY: Duration = Duration::from_secs(5); +const RECHANNEL_DELAY: Duration = Duration::from_secs(2); +const EXCHANGE_NAME: &str = "rollup_exchange"; + +pub struct Consumer { + received_blocks_tx: Arc>, + queues_listener: Option>, + config: ConsumerConfig, + event_listener: Arc, + connection: Option, +} + +impl Consumer { + pub fn new(config: ConsumerConfig) -> Self { + let (received_blocks_tx, _) = broadcast::channel(100); + let received_blocks_tx = Arc::new(received_blocks_tx); + Self { + received_blocks_tx, + queues_listener: None, + config, + event_listener: Arc::new(event_listener::SelectiveListener::default()), + connection: None, + } + } + + pub fn enable_metrics(&mut self, registry: &Registry) -> Result<()> { + self.event_listener = event_listener::make_consumer_metrics(registry)?; + Ok(()) + } + + pub async fn start(&mut self, addr: &str) -> Result<()> { + loop { + match self.connect(addr).await { + Ok(conn) => { + self.connection = Some(conn); + if let Err(e) = self.setup_channel().await { + error!("Failed to setup channel: {:?}", e); + sleep(RECHANNEL_DELAY).await; + continue; + } + info!("Connected and channel set up"); + } + Err(e) => { + error!("Failed to connect: {:?}", e); + sleep(RECONNECT_DELAY).await; + continue; + } + } + + if let Some(conn) = &self.connection { + match conn.status().connected() { + true => { + // Connection is still active, wait for a while before checking again + sleep(Duration::from_secs(30)).await; + } + false => { + warn!("Connection lost, attempting to reconnect"); + self.connection = None; + sleep(RECONNECT_DELAY).await; + } + } + } else { + warn!("No active connection, attempting to reconnect"); + sleep(RECONNECT_DELAY).await; + } + } + } + + async fn connect(&self, addr: &str) -> Result { + Connection::connect( + addr, + ConnectionProperties::default(), + ).await.map_err(|e| anyhow::anyhow!("Failed to connect: {:?}", e)) + } + + async fn setup_channel(&mut self) -> Result<()> { + let conn = self.connection.as_ref().ok_or_else(|| anyhow!("No active connection"))?; + let channel = conn.create_channel().await?; + + let mut queues_listener = QueuesListener::new(Arc::clone(&self.received_blocks_tx), Arc::clone(&self.event_listener)); + + for &rollup_id in &self.config.rollup_ids { + let queue_name = config::get_queue_name(rollup_id, &self.config.id); + let queue = channel.queue_declare(&queue_name, Default::default(), Default::default()).await?; + + if queue.message_count() > 0 { + info!("Queue '{}' declared with {} messages", queue_name, queue.message_count()); + } + + channel.queue_bind( + &queue_name, + EXCHANGE_NAME, + &config::get_routing_key(rollup_id), + Default::default(), + Default::default(), + ).await?; + + let consumer = channel.basic_consume( + &queue_name, + &config::get_consumer_tag(rollup_id), + Default::default(), + Default::default(), + ).await?; + + queues_listener.add(rollup_id, consumer).await?; + } + + self.queues_listener = Some(Arc::new(queues_listener)); + Ok(()) + } + + pub async fn close(&mut self) -> Result<()> { + if let Some(conn) = self.connection.take() { + conn.close(0, "Consumer closed").await?; + } + Ok(()) + } + + pub fn get_block_stream(&self) -> broadcast::Receiver { + self.received_blocks_tx.subscribe() + } +} \ No newline at end of file diff --git a/operator-rs/src/consumer/queues_listener.rs b/operator-rs/src/consumer/queues_listener.rs new file mode 100644 index 00000000..b21aea84 --- /dev/null +++ b/operator-rs/src/consumer/queues_listener.rs @@ -0,0 +1,125 @@ +use std::collections::HashMap; +use std::sync::{Arc, Mutex}; +use alloy_rpc_types::Block; +use tokio::sync::broadcast; +use anyhow::{Result, anyhow}; +use lapin::{message::Delivery, Consumer}; +use tracing::{info, error}; +use borsh::BorshDeserialize; +use alloy_rlp::{Rlp, Decodable}; +use futures_util::StreamExt; +use serde_json::Value; +use crate::types::BlockData; + +use super::EventListener; +use crate::types::{Blob, Namespace, PublishPayload, SubmitRequest}; + +pub struct QueuesListener { + received_blocks_tx: Arc>, + queue_consumers: Arc>>, + event_listener: Arc, +} + +impl QueuesListener { + pub fn new( + received_blocks_tx: Arc>, + event_listener: Arc, + ) -> Self { + Self { + received_blocks_tx, + queue_consumers: Arc::new(Mutex::new(HashMap::new())), + event_listener, + } + } + + pub async fn add(&self, rollup_id: u32, consumer: Consumer) -> Result<()> { + let mut consumers = self.queue_consumers.lock().unwrap(); + consumers.insert(rollup_id, consumer); + Ok(()) + } + + pub fn remove(&self, rollup_id: u32) { + let mut consumers = self.queue_consumers.lock().unwrap(); + consumers.remove(&rollup_id); + } + + pub async fn listen(&self, rollup_id: u32) -> Result<()> { + let mut consumer = { + let consumers = self.queue_consumers.lock().unwrap(); + consumers.get(&rollup_id).cloned().ok_or_else(|| anyhow!("Consumer not found"))? + }; + + loop { + match consumer.next().await { + Some(Ok(delivery)) => { + if let Err(e) = self.process_delivery(rollup_id, delivery).await { + error!("Failed to process delivery: {:?}", e); + } + } + Some(Err(e)) => error!("Failed to get delivery: {:?}", e), + None => { + info!("Consumer channel closed"); + return Ok(()); + } + } + } + } + + async fn process_delivery(&self, rollup_id: u32, delivery: Delivery) -> Result<()> { + info!("New delivery, rollup_id: {}", rollup_id); + self.event_listener.on_arrival(); + + let publish_payload = PublishPayload::try_from_slice(&delivery.data) + .map_err(|e| { + self.event_listener.on_format_error(); + anyhow!("Error deserializing payload: {:?}", e) + })?; + + let submit_request = SubmitRequest::try_from_slice(&publish_payload.data) + .map_err(|e| { + self.event_listener.on_format_error(); + anyhow!("Invalid blob: {:?}", e) + })?; + + for blob in submit_request.blobs { + // Decode the blob data into Blocks + let mut rlp = Rlp::new(&blob.data)?; + let mut blocks = Vec::new(); + if let Some(block_vec) = rlp.get_next::>>()? { + for block_bytes in block_vec { + let json_block: Value = serde_json::from_slice(&block_bytes) + .map_err(|e| anyhow!("Failed to parse JSON block: {:?}", e))?; + let block: Block = serde_json::from_value(json_block) + .map_err(|e| anyhow!("Failed to convert JSON to Block: {:?}", e))?; + blocks.push(block); + } + }; + + for block in blocks { + let block_data = BlockData { + rollup_id, + transaction_id: publish_payload.transaction_id, + commitment: blob.commitment, + block + }; + + info!( + "MQ Block received: rollup_id={}, block_height={}, transaction_id={}, commitment={}", + rollup_id, + block_data.block.header.number, + hex::encode(block_data.transaction_id), + hex::encode(block_data.commitment) + ); + + if let Err(e) = self.received_blocks_tx.send(block_data) { + error!("Failed to send block data: {:?}", e); + } + } + } + + delivery.ack(Default::default()).await + .map_err(|e| anyhow!("Failed to ack delivery: {:?}", e))?; + + Ok(()) + } +} diff --git a/operator-rs/src/lib.rs b/operator-rs/src/lib.rs new file mode 100644 index 00000000..280ba06f --- /dev/null +++ b/operator-rs/src/lib.rs @@ -0,0 +1,8 @@ +pub mod types; +pub mod config; +pub mod operator; +pub mod attestor; +pub mod consumer; + +// Re-export NFFLNodeConfig +pub use crate::types::NFFLNodeConfig; \ No newline at end of file diff --git a/operator-rs/src/main.rs b/operator-rs/src/main.rs new file mode 100644 index 00000000..ec40c2a5 --- /dev/null +++ b/operator-rs/src/main.rs @@ -0,0 +1,136 @@ +use anyhow::Result; +use clap::{Command, Arg}; +use eigensdk::logging::logger::Logger; +use operator_rs::attestor::Attestor; +use operator_rs::consumer::Consumer; +use operator_rs::operator::Operator; +use operator_rs::types::NFFLNodeConfig; +use prometheus::Registry; +use std::path::PathBuf; +use tracing_subscriber::FmtSubscriber; +use serde_json::Value; +use eigensdk::crypto_bls::BlsKeyPair; + + +mod config; + +#[tokio::main] +async fn main() -> Result<()> { + // Print all arguments for debugging + println!("Received arguments: {:?}", std::env::args().collect::>()); + + let matches = Command::new("sffl-operator") + .about("SFFL Operator") + .subcommand( + Command::new("run-args") + .about("Start the operator with direct CLI options") + .arg(Arg::new("production").long("production").help("Run in production logging mode")) + .arg(Arg::new("rpc-url").long("rpc-url").value_name("URL").help("Connect to the indicated RPC")) + .arg(Arg::new("ws-url").long("ws-url").value_name("URL").help("Connect to the indicated WebSocket")) + .arg(Arg::new("operator-address").long("operator-address").value_name("ADDRESS").help("Operator's Ethereum address")) + .arg(Arg::new("bls-key-path").long("bls-key-path").value_name("FILE").help("Path to BLS key file")) + .arg(Arg::new("ecdsa-key-path").long("ecdsa-key-path").value_name("FILE").help("Path to ECDSA key file")) + .arg(Arg::new("avs-registry-coordinator").long("avs-registry-coordinator").value_name("ADDRESS").help("AVS Registry Coordinator address")) + .arg(Arg::new("operator-state-retriever").long("operator-state-retriever").value_name("ADDRESS").help("Operator State Retriever address")) + .arg(Arg::new("aggregator-server-ip-port").long("aggregator-server-ip-port").value_name("IP:PORT").help("Aggregator server IP and port")) + .arg(Arg::new("enable-metrics").long("enable-metrics").help("Enable metrics collection")) + .arg(Arg::new("eigen-metrics-ip-port").long("eigen-metrics-ip-port").value_name("IP:PORT").help("EigenMetrics IP and port")) + .arg(Arg::new("node-api-ip-port").long("node-api-ip-port").value_name("IP:PORT").help("Node API IP and port")) + .arg(Arg::new("task-response-wait-ms").long("task-response-wait-ms").value_name("MS").help("Task response wait time in milliseconds")) + .arg(Arg::new("register-operator-on-startup").long("register-operator-on-startup").help("Register operator on startup")) + .arg(Arg::new("token-strategy-addr").long("token-strategy-addr").value_name("ADDRESS").help("Token strategy address")) + .arg(Arg::new("enable-node-api").long("enable-node-api").help("Enable Node API")) + .arg(Arg::new("near-da-indexer-rmq-ip-port-address").long("near-da-indexer-rmq-ip-port-address").value_name("IP:PORT").help("NEAR DA Indexer RabbitMQ IP and port")) + .arg(Arg::new("near-da-indexer-rollup-ids").long("near-da-indexer-rollup-ids").value_name("IDS").help("Comma-separated list of NEAR DA Indexer rollup IDs")) + .arg(Arg::new("rollup-ids-to-rpc-urls").long("rollup-ids-to-rpc-urls").value_name("ID:URL").help("Comma-separated list of rollup ID to RPC URL mappings")) + ) + .subcommand( + Command::new("run-config") + .about("Start the operator using a configuration file") + .arg(Arg::new("path").short('p').long("path").required(true).value_name("FILE").help("Load configuration from FILE")), + ) + .get_matches(); + + match matches.subcommand() { + Some(("run-args", args)) => { + let config = NFFLNodeConfig { + enable_node_api: args.contains_id("enable-node-api"), + near_da_indexer_rmq_ip_port_address: args.get_one::("near-da-indexer-rmq-ip-port-address") + .map(|s| s.to_string()) + .unwrap_or_default(), + near_da_indexer_rollup_ids: args.get_one::("near-da-indexer-rollup-ids") + .map(|s| s.split(',').filter_map(|id| id.parse().ok()).collect()) + .unwrap_or_default(), + rollup_ids_to_rpc_urls: args.get_one::("rollup-ids-to-rpc-urls") + .map(|s| s.split(',') + .filter_map(|pair| { + let mut parts = pair.split(':'); + let id = parts.next()?.parse().ok()?; + let url = parts.next()?.to_string(); + Some((id, url)) + }) + .collect()) + .unwrap_or_default(), + production: args.contains_id("production"), + eth_rpc_url: args.get_one::("rpc-url").map(|s| s.to_string()).unwrap_or_default(), + eth_ws_url: args.get_one::("ws-url").map(|s| s.to_string()).unwrap_or_default(), + operator_address: args.get_one::("operator-address").map(|s| s.to_string()).unwrap_or_default(), + ecdsa_private_key_store_path: args.get_one::("ecdsa-key-path").map(|s| s.to_string()).unwrap_or_default(), + bls_keypair: args.get_one::("bls-key-path").map(|s| s.to_string()).unwrap_or_default(), + avs_registry_coordinator_address: args.get_one::("avs-registry-coordinator").map(|s| s.to_string()).unwrap_or_default(), + operator_state_retriever_address: args.get_one::("operator-state-retriever").map(|s| s.to_string()).unwrap_or_default(), + aggregator_server_ip_port_address: args.get_one::("aggregator-server-ip-port").map(|s| s.to_string()).unwrap_or_default(), + enable_metrics: args.contains_id("enable-metrics"), + eigen_metrics_ip_port_address: args.get_one::("eigen-metrics-ip-port").map(|s| s.to_string()).unwrap_or_default(), + node_api_ip_port_address: args.get_one::("node-api-ip-port").map(|s| s.to_string()).unwrap_or_default(), + task_response_wait_ms: args.get_one::("task-response-wait-ms") + .and_then(|s| s.parse().ok()) + .unwrap_or(0), + register_operator_on_startup: args.contains_id("register-operator-on-startup"), + token_strategy_addr: args.get_one::("token-strategy-addr").map(|s| s.to_string()).unwrap_or_default(), + }; + operator_main(config).await + } + Some(("run-config", args)) => { + let config_path = args.get_one::("path").unwrap(); + let config = config::load_config(PathBuf::from(config_path))?; + operator_main(config).await + } + _ => Err(anyhow::anyhow!("Invalid subcommand")), + } +} + +async fn operator_main(config: NFFLNodeConfig) -> Result<()> { + let log_level = if config.production { + tracing::Level::INFO + } else { + tracing::Level::DEBUG + }; + + let subscriber = FmtSubscriber::builder() + .with_max_level(log_level) + .finish(); + tracing::subscriber::set_global_default(subscriber)?; + + tracing::info!("Initializing Operator"); + tracing::info!("Read config: {:?}", config); + + let attestor_config = config.clone(); + let attestor = Attestor::new( + attestor_config, + BlsKeyPair::new(config.bls_keypair)?, + eigensdk::types::operator::OperatorId::from([1u8; 32]), + Registry::default(), + )?; + + // Start the attestor + attestor.start().await?; + + // Uncomment these lines when you're ready to use the Operator + // let operator = Operator::new(config).await?; + // tracing::info!("Starting operator"); + // let mut ctx = operator_rs::operator::Context::default(); + // operator.start(&mut ctx).await?; + + Ok(()) +} diff --git a/operator-rs/src/operator.rs b/operator-rs/src/operator.rs new file mode 100644 index 00000000..9240c9ac --- /dev/null +++ b/operator-rs/src/operator.rs @@ -0,0 +1,374 @@ +use alloy::providers::{Provider, ProviderBuilder}; +use alloy::pubsub::PubSubFrontend; +use alloy_primitives::{Address, U256}; +use alloy_rpc_types::{Block, BlockId}; +use alloy_transport_ws::WsConnect; +use anyhow::Result; +use prometheus::Registry; +use serde::{Deserialize, Serialize}; +use std::sync::Arc; +use tokio::time::{self, Duration}; +use tracing::{debug, error, info, warn}; + +// Constants +const AVS_NAME: &str = "super-fast-finality-layer"; +const SEM_VER: &str = "0.0.1"; + +// Mock implementations for missing types and traits +mod mock { + use super::*; + + #[derive(Clone)] + pub struct BlsKeyPair; + impl BlsKeyPair { + pub fn sign_message(&self, _message: &[u8]) -> BlsSignature { + BlsSignature + } + pub fn get_pub_key_g1(&self) -> G1Point { + G1Point + } + pub fn get_pub_key_g2(&self) -> G2Point { + G2Point + } + } + + #[derive(Clone, Debug)] + pub struct BlsSignature; + + #[derive(Clone, Debug)] + pub struct G1Point; + + #[derive(Clone, Debug)] + pub struct G2Point; + + #[derive(Clone)] + pub struct OperatorId([u8; 32]); + + #[derive(Clone)] + pub struct AvsManager; + + #[derive(Clone)] + pub struct Attestor; + + #[derive(Clone)] + pub struct AggregatorRpcClient; + + pub struct NodeApi; + + pub struct EigenMetrics; + + pub struct Logger; +} + +use mock::*; +use crate::types::NFFLNodeConfig; + +pub struct Operator { + config: NFFLNodeConfig, + logger: Logger, + provider: Arc>, + metrics_reg: Registry, + metrics: Option, + node_api: Option, + avs_manager: AvsManager, + bls_keypair: BlsKeyPair, + operator_addr: Address, + aggregator_server_ip_port_addr: String, + aggregator_rpc_client: AggregatorRpcClient, + registry_coordinator_addr: Address, + operator_id: OperatorId, + task_response_wait: Duration, + attestor: Attestor, +} + +// impl Operator { +// pub async fn new_from_config(config: NodeConfig) -> Result { +// let logger = Logger; // Mock implementation +// debug!(logger, "Creating operator from config", config = ?config); + +// let node_api = if config.enable_metrics { +// Some(NodeApi::new(AVS_NAME, SEM_VER, &config.node_api_ip_port_address.unwrap(), &logger)) +// } else { +// None +// }; + +// let bls_key_password = std::env::var("OPERATOR_BLS_KEY_PASSWORD").unwrap_or_else(|_| { +// warn!(logger, "OPERATOR_BLS_KEY_PASSWORD env var not set. using empty string"); +// String::new() +// }); + +// let bls_keypair = BlsKeyPair; // Mock implementation +// let operator_id = OperatorId([0; 32]); // Mock implementation + +// let ecdsa_key_password = std::env::var("OPERATOR_ECDSA_KEY_PASSWORD").unwrap_or_else(|_| { +// warn!(logger, "OPERATOR_ECDSA_KEY_PASSWORD env var not set. using empty string"); +// String::new() +// }); + +// let metrics_reg = Registry::new(); +// let id = format!("{}OperatorSubsytem", config.operator_address); + +// let ws = WsConnect::new(&config.eth_ws_url); +// let provider = ProviderBuilder::new().on_ws(ws).await?; + +// let registry_coordinator_addr = config.avs_registry_coordinator_address.parse()?; +// let operator_state_retriever_addr = config.operator_state_retriever_address.parse()?; + +// let aggregator_rpc_client = AggregatorRpcClient; // Mock implementation + +// let avs_manager = AvsManager; // Mock implementation + +// let attestor = Attestor; // Mock implementation + +// let metrics = if config.enable_metrics { +// Some(EigenMetrics::new(AVS_NAME, &config.eigen_metrics_ip_port_address.unwrap(), &metrics_reg, &logger)) +// } else { +// None +// }; + +// let operator = Self { +// config: config.clone(), +// logger, +// provider: Arc::new(provider), +// metrics_reg, +// metrics, +// node_api, +// avs_manager, +// bls_keypair, +// operator_addr: config.operator_address.parse()?, +// aggregator_server_ip_port_addr: config.aggregator_server_ip_port_address, +// aggregator_rpc_client, +// registry_coordinator_addr, +// operator_id, +// task_response_wait: Duration::from_millis(config.task_response_wait_ms), +// attestor, +// }; + +// if config.register_operator_on_startup { +// operator.register_operator_on_startup()?; +// } + +// info!(operator.logger, "Operator info"; +// "operatorId" => ?operator.operator_id, +// "operatorAddr" => ?config.operator_address, +// "operatorG1Pubkey" => ?operator.bls_keypair.get_pub_key_g1(), +// "operatorG2Pubkey" => ?operator.bls_keypair.get_pub_key_g2(), +// ); + +// Ok(operator) +// } + +// pub async fn start(&self, ctx: &mut Context) -> Result<()> { +// info!("Starting operator"); + +// if let Some(node_api) = &self.node_api { +// node_api.start(); +// } + +// let metrics_err_chan = if let Some(metrics) = &self.metrics { +// metrics.start(ctx, &self.metrics_reg) +// } else { +// tokio::sync::mpsc::channel(1).1 +// }; + +// let signed_roots_rx = self.attestor.get_signed_root_rx(); +// let checkpoint_task_created_rx = self.avs_manager.get_checkpoint_task_created_rx(); +// let operator_set_update_rx = self.avs_manager.get_operator_set_update_rx(); + +// loop { +// tokio::select! { +// _ = ctx.done() => { +// return self.close(); +// } +// Some(err) = metrics_err_chan.recv() => { +// error!(self.logger, "Error in metrics server"; "err" => ?err); +// } +// Some(signed_state_root_update_message) = signed_roots_rx.recv() => { +// tokio::spawn(async move { +// self.aggregator_rpc_client.send_signed_state_root_update_to_aggregator(&signed_state_root_update_message).await; +// }); +// } +// Some(checkpoint_task_created_event) = checkpoint_task_created_rx.recv() => { +// tokio::spawn(async move { +// if let Err(e) = self.process_checkpoint_task(checkpoint_task_created_event).await { +// error!(self.logger, "Error processing checkpoint task"; "err" => ?e); +// } +// }); +// } +// Some(operator_set_update) = operator_set_update_rx.recv() => { +// tokio::spawn(async move { +// match self.sign_operator_set_update(operator_set_update) { +// Ok(signed_update) => { +// self.aggregator_rpc_client.send_signed_operator_set_update_to_aggregator(&signed_update).await; +// } +// Err(e) => { +// error!(self.logger, "Failed to sign operator set update"; "err" => ?e); +// } +// } +// }); +// } +// } +// } +// } + +// async fn close(&self) -> Result<()> { +// self.attestor.close()?; +// Ok(()) +// } + +// fn sign_task_response(&self, task_response: &CheckpointTaskResponse) -> Result { +// let task_response_hash = task_response.digest()?; +// let bls_signature = self.bls_keypair.sign_message(&task_response_hash); +// Ok(SignedCheckpointTaskResponse { +// task_response: task_response.clone(), +// bls_signature, +// operator_id: self.operator_id.clone(), +// }) +// } + +// fn sign_operator_set_update(&self, message: OperatorSetUpdateMessage) -> Result { +// let message_hash = message.digest()?; +// let signature = self.bls_keypair.sign_message(&message_hash); +// Ok(SignedOperatorSetUpdateMessage { +// message, +// operator_id: self.operator_id.clone(), +// bls_signature: signature, +// }) +// } + +// async fn process_checkpoint_task(&self, event: CheckpointTaskCreatedEvent) -> Result<()> { +// if self.task_response_wait > Duration::from_millis(0) { +// tokio::time::sleep(self.task_response_wait).await; +// } + +// let checkpoint_messages = self.aggregator_rpc_client.get_aggregated_checkpoint_messages( +// event.task.from_timestamp, +// event.task.to_timestamp, +// ).await?; + +// let checkpoint_task_response = CheckpointTaskResponse::new_from_messages( +// event.task_index, +// checkpoint_messages, +// )?; + +// let signed_checkpoint_task_response = self.sign_task_response(&checkpoint_task_response)?; + +// self.aggregator_rpc_client.send_signed_checkpoint_task_response_to_aggregator(&signed_checkpoint_task_response).await; + +// Ok(()) +// } + +// pub async fn register_operator_with_avs(&self, operator_ecdsa_key_pair: &EcdsaKeyPair) -> Result<()> { +// self.avs_manager.register_operator_with_avs(&self.provider, operator_ecdsa_key_pair, &self.bls_keypair).await +// } + +// pub async fn deposit_into_strategy(&self, strategy_addr: Address, amount: U256) -> Result<()> { +// self.avs_manager.deposit_into_strategy(self.operator_addr, strategy_addr, amount).await +// } + +// pub async fn register_operator_with_eigenlayer(&self) -> Result<()> { +// self.avs_manager.register_operator_with_eigenlayer(self.operator_addr).await +// } + +// pub async fn print_operator_status(&self) -> Result<()> { +// let operator_id = self.avs_manager.get_operator_id(self.operator_addr).await?; +// let pubkeys_registered = operator_id != [0; 32]; +// let registered_with_avs = self.operator_id.0 != [0; 32]; + +// let operator_status = OperatorStatus { +// ecdsa_address: self.operator_addr.to_string(), +// pubkeys_registered, +// g1_pubkey: hex::encode(self.bls_keypair.get_pub_key_g1().to_bytes()), +// g2_pubkey: hex::encode(self.bls_keypair.get_pub_key_g2().to_bytes()), +// registered_with_avs, +// operator_id: hex::encode(self.operator_id.0), +// }; + +// println!("{}", serde_json::to_string_pretty(&operator_status)?); +// Ok(()) +// } + +// fn register_operator_on_startup(&self) -> Result<()> { +// // Implementation omitted for brevity +// Ok(()) +// } + +// pub fn bls_pubkey_g1(&self) -> G1Point { +// self.bls_keypair.get_pub_key_g1() +// } +// } + +#[derive(Serialize)] +struct OperatorStatus { + ecdsa_address: String, + pubkeys_registered: bool, + g1_pubkey: String, + g2_pubkey: String, + registered_with_avs: bool, + operator_id: String, +} + +#[derive(Clone)] +pub struct CheckpointTaskCreatedEvent { + pub task: CheckpointTask, + pub task_index: u64, +} + +#[derive(Clone)] +pub struct CheckpointTask { + pub from_timestamp: u64, + pub to_timestamp: u64, +} + +#[derive(Clone)] +pub struct CheckpointTaskResponse { + // Fields omitted for brevity +} + +impl CheckpointTaskResponse { + pub fn new_from_messages(_task_index: u64, _messages: Vec) -> Result { + // Implementation omitted for brevity + Ok(Self {}) + } + + pub fn digest(&self) -> Result> { + // Implementation omitted for brevity + Ok(vec![]) + } +} + +#[derive(Clone)] +pub struct SignedCheckpointTaskResponse { + pub task_response: CheckpointTaskResponse, + pub bls_signature: BlsSignature, + pub operator_id: OperatorId, +} + +#[derive(Clone)] +pub struct OperatorSetUpdateMessage { + // Fields omitted for brevity +} + +impl OperatorSetUpdateMessage { + pub fn digest(&self) -> Result> { + // Implementation omitted for brevity + Ok(vec![]) + } +} + +#[derive(Clone)] +pub struct SignedOperatorSetUpdateMessage { + pub message: OperatorSetUpdateMessage, + pub operator_id: OperatorId, + pub bls_signature: BlsSignature, +} + +#[derive(Clone)] +pub struct CheckpointMessage { + // Fields omitted for brevity +} + +pub struct EcdsaKeyPair; + +// Implement necessary traits and methods for AvsManager, Attestor, AggregatorRpcClient, etc. +// These implementations are omitted for brevity but would need to be filled in for a complete solution. \ No newline at end of file diff --git a/operator-rs/src/types.rs b/operator-rs/src/types.rs new file mode 100644 index 00000000..9fbbd569 --- /dev/null +++ b/operator-rs/src/types.rs @@ -0,0 +1,171 @@ +use std::collections::HashMap; +use borsh::BorshDeserialize; +use eigensdk::{crypto_bls::BlsSignature, types::operator::OperatorId}; +use serde::{Deserialize, Serialize}; +use alloy_rpc_types::Block; +use eigensdk::logging::logger::Logger; +use tracing::{debug, error, info, warn}; + +#[derive(Debug, Serialize, Deserialize, Clone)] +pub struct NFFLNodeConfig { + pub production: bool, + pub operator_address: String, + pub operator_state_retriever_address: String, + pub avs_registry_coordinator_address: String, + pub token_strategy_addr: String, + pub eth_rpc_url: String, + pub eth_ws_url: String, + pub ecdsa_private_key_store_path: String, + // Replace bls_private_key_store_path with bls_keypair + pub bls_keypair: String, + pub aggregator_server_ip_port_address: String, + pub register_operator_on_startup: bool, + pub eigen_metrics_ip_port_address: String, + pub enable_metrics: bool, + pub node_api_ip_port_address: String, + pub enable_node_api: bool, + pub near_da_indexer_rmq_ip_port_address: String, + pub near_da_indexer_rollup_ids: Vec, + pub rollup_ids_to_rpc_urls: HashMap, + pub task_response_wait_ms: u32, +} + +#[derive(Clone, Debug)] +pub struct SignedStateRootUpdateMessage { + pub message: StateRootUpdateMessage, + pub bls_signature: BlsSignature, + pub operator_id: OperatorId, +} + +#[derive(Clone, Debug, Serialize, Deserialize)] +pub struct StateRootUpdateMessage { + pub rollup_id: u32, + pub block_height: u64, + pub timestamp: u64, + pub state_root: [u8; 32], + pub near_da_transaction_id: [u8; 32], + pub near_da_commitment: [u8; 32], +} + + +#[derive(Clone, Debug)] +pub struct BlockData { + pub rollup_id: u32, + pub commitment: [u8; 32], + pub transaction_id: [u8; 32], + pub block: Block, +} + + +#[derive(Clone, Debug)] +pub struct SubmitRequest { + pub blobs: Vec, +} + +#[derive(Clone, Debug)] +pub struct Blob { + pub namespace: Namespace, + pub share_version: u32, + pub commitment: [u8; 32], + pub data: Vec, +} + +#[derive(Clone, Debug)] +pub struct Namespace { + pub version: u8, + pub id: u32, +} +#[derive(Clone, Debug)] +pub struct PublishPayload { + pub transaction_id: [u8; 32], + pub data: Vec, +} + + +impl BorshDeserialize for PublishPayload { + fn deserialize_reader(reader: &mut R) -> std::io::Result { + let mut transaction_id = [0u8; 32]; + reader.read_exact(&mut transaction_id)?; + let mut data = Vec::new(); + reader.read_to_end(&mut data)?; + Ok(PublishPayload { transaction_id, data }) + } +} + +impl BorshDeserialize for SubmitRequest { + fn deserialize_reader(reader: &mut R) -> std::io::Result { + let blobs_len = u32::deserialize_reader(reader)? as usize; + let mut blobs = Vec::with_capacity(blobs_len); + for _ in 0..blobs_len { + blobs.push(Blob::deserialize_reader(reader)?); + } + Ok(SubmitRequest { blobs }) + } +} + + + + +impl BorshDeserialize for Blob { + fn deserialize_reader(reader: &mut R) -> std::io::Result { + Ok(Blob { + namespace: Namespace::deserialize_reader(reader)?, + share_version: u32::deserialize_reader(reader)?, + commitment: { + let mut commitment = [0u8; 32]; + reader.read_exact(&mut commitment)?; + commitment + }, + data: { + let data_len = u32::deserialize_reader(reader)? as usize; + let mut data = vec![0u8; data_len]; + reader.read_exact(&mut data)?; + data + }, + }) + } +} + +impl BorshDeserialize for Namespace { + fn deserialize_reader(reader: &mut R) -> std::io::Result { + Ok(Namespace { + version: u8::deserialize_reader(reader)?, + id: u32::deserialize_reader(reader)?, + }) + } +} + +// Add this struct and implementation at the end of the file +#[derive(Debug)] +pub struct DefaultLogger; + +impl Logger for DefaultLogger { + fn info(&self, target: &str, message: &str) { + info!(target = target, "{}", message); + } + + fn warn(&self, target: &str, message: &str) { + warn!(target = target, "{}", message); + } + + fn error(&self, target: &str, message: &str) { + error!(target = target, "{}", message); + } + + fn debug(&self, target: &str, message: &str) { + debug!(target = target, "{}", message); + } + + fn fatal(&self, target: &str, message: &str) { + error!(target = target, "FATAL: {}", message); + } + + fn log(&self, target: &str, message: &str) { + info!(target: "default_logger", "{}: {}", target, message); + } +} + +// Function to create a new logger instance +pub fn create_default_logger() -> Box { + Box::new(DefaultLogger) +} diff --git a/relayer-rs/Cargo.toml b/relayer-rs/Cargo.toml new file mode 100644 index 00000000..0fe2c99b --- /dev/null +++ b/relayer-rs/Cargo.toml @@ -0,0 +1,28 @@ +[package] +name = "relayer-rs" +version = "0.1.0" +edition = "2021" + +[dependencies] +alloy = { workspace = true } +alloy-primitives = { workspace = true } +alloy-rpc-client = { workspace = true } +alloy-rpc-types = { workspace = true } +alloy-transport-ws = { workspace = true } +alloy-rlp = { workspace = true } +near-da-rpc = { git = "https://github.com/Nuffle-Labs/data-availability", branch = "main" } +near-da-primitives = { git = "https://github.com/Nuffle-Labs/data-availability", branch = "main" } +tokio = { workspace = true } +prometheus = { workspace = true } +warp = "0.3" +serde = { workspace = true } +serde_json = { workspace = true } +anyhow = { workspace = true } +tracing = { workspace = true } +tracing-subscriber = { workspace = true } +futures-util = { workspace = true } +eyre = { workspace = true } +bincode = { workspace = true } +serde_yaml = { workspace = true } +clap = { workspace = true } +tempfile = { workspace = true } diff --git a/relayer-rs/Dockerfile b/relayer-rs/Dockerfile new file mode 100644 index 00000000..4703c88d --- /dev/null +++ b/relayer-rs/Dockerfile @@ -0,0 +1,29 @@ +# Use the official Rust image as a parent image +FROM rust:1.79.0 as builder + +# Set the working directory in the container +WORKDIR /usr/src/relayer-rs + +# Copy the Cargo.toml file +COPY Cargo.toml ./ + +# Copy the source code +COPY src ./src + +# Build the application +RUN cargo build --release + +# Start a new stage for a smaller final image +FROM debian:bookworm-slim + +# Install OpenSSL and CA certificates +RUN apt-get update && apt-get install -y openssl ca-certificates && rm -rf /var/lib/apt/lists/* + +# Copy the binary from the builder stage +COPY --from=builder /usr/src/relayer-rs/target/release/relayer-rs /usr/local/bin/relayer-rs + +# Set the entrypoint to the relayer-rs binary +ENTRYPOINT ["/usr/local/bin/relayer-rs"] + +# Default command (can be overridden) +CMD ["--help"] \ No newline at end of file diff --git a/relayer-rs/src/config.rs b/relayer-rs/src/config.rs new file mode 100644 index 00000000..0bfa1e5e --- /dev/null +++ b/relayer-rs/src/config.rs @@ -0,0 +1,108 @@ +use std::path::PathBuf; + +use serde::Deserialize; +#[derive(Debug, Deserialize)] +pub struct RelayerConfig { + pub production: bool, + pub rpc_url: String, + pub da_account_id: String, + pub key_path: String, + pub network: String, + pub metrics_ip_port_addr: Option, +} + +impl RelayerConfig { + pub fn compile_cmd(&self) -> Vec { + let mut cmd = vec!["run-args".to_string()]; + + if self.production { + cmd.push("--production".to_string()); + } + + cmd.extend_from_slice(&[ + "--key-path".to_string(), + self.key_path.clone(), + "--rpc-url".to_string(), + self.rpc_url.clone(), + "--da-account-id".to_string(), + self.da_account_id.clone(), + "--network".to_string(), + self.network.clone(), + ]); + + if let Some(metrics_addr) = &self.metrics_ip_port_addr { + cmd.extend_from_slice(&[ + "--metrics-ip-port-address".to_string(), + metrics_addr.clone(), + ]); + } + + cmd + } +} + +pub fn load_config(path: PathBuf) -> Result { + let config_str = std::fs::read_to_string(path)?; + let config: RelayerConfig = serde_yaml::from_str(&config_str)?; + Ok(config) +} + +#[cfg(test)] +mod tests { + use super::*; + use tempfile::NamedTempFile; + use std::io::Write; + + #[test] + fn test_relayer_config_compile_cmd() { + let config = RelayerConfig { + production: true, + rpc_url: "http://example.com".to_string(), + da_account_id: "test.near".to_string(), + key_path: "/path/to/key".to_string(), + network: "testnet".to_string(), + metrics_ip_port_addr: Some("127.0.0.1:8080".to_string()), + }; + + let cmd = config.compile_cmd(); + + assert_eq!(cmd[0], "run-args"); + assert!(cmd.contains(&"--production".to_string())); + assert!(cmd.contains(&"--rpc-url".to_string())); + assert!(cmd.contains(&"http://example.com".to_string())); + assert!(cmd.contains(&"--da-account-id".to_string())); + assert!(cmd.contains(&"test.near".to_string())); + assert!(cmd.contains(&"--key-path".to_string())); + assert!(cmd.contains(&"/path/to/key".to_string())); + assert!(cmd.contains(&"--network".to_string())); + assert!(cmd.contains(&"testnet".to_string())); + assert!(cmd.contains(&"--metrics-ip-port-address".to_string())); + assert!(cmd.contains(&"127.0.0.1:8080".to_string())); + } + + #[test] + fn test_load_config() -> eyre::Result<()> { + let config_content = r#" + production: true + rpc_url: "http://example.com" + da_account_id: "test.near" + key_path: "/path/to/key" + network: "testnet" + metrics_ip_port_addr: "127.0.0.1:8080" + "#; + + let temp_file = NamedTempFile::new()?; + write!(temp_file.as_file(), "{}", config_content)?; + + let config = load_config(temp_file.path().to_path_buf())?; + + assert!(config.production); + assert_eq!(config.rpc_url, "http://example.com"); + assert_eq!(config.da_account_id, "test.near"); + assert_eq!(config.key_path, "/path/to/key"); + assert_eq!(config.network, "testnet"); + assert_eq!(config.metrics_ip_port_addr, Some("127.0.0.1:8080".to_string())); + + Ok(()) + } +} \ No newline at end of file diff --git a/relayer-rs/src/main.rs b/relayer-rs/src/main.rs new file mode 100644 index 00000000..35acc9b1 --- /dev/null +++ b/relayer-rs/src/main.rs @@ -0,0 +1,81 @@ +use crate::config::RelayerConfig; +use crate::relayer::Relayer; +use anyhow::Result; +use clap::{Command, Arg}; +use prometheus::Registry; +use std::path::PathBuf; +use tracing_subscriber::FmtSubscriber; + +mod config; +mod metrics; +mod relayer; + +#[tokio::main] +async fn main() -> Result<()> { + let matches = Command::new("sffl-test-relayer") + .about("SFFL Test Relayer") + .subcommand( + Command::new("run-args") + .about("Start the relayer with direct CLI options") + .arg(Arg::new("production").long("production").help("Run in production logging mode")) + .arg(Arg::new("rpc-url").long("rpc-url").required(true).value_name("URL").help("Connect to the indicated RPC")) + .arg(Arg::new("da-account-id").long("da-account-id").required(true).value_name("ACCOUNT").help("Publish block data to the indicated NEAR account")) + .arg(Arg::new("key-path").long("key-path").required(true).value_name("FILE").help("Path to NEAR account's key file")) + .arg(Arg::new("network").long("network").value_name("URL").default_value("http://127.0.0.1:3030").help("Network for NEAR client to use")) + .arg(Arg::new("metrics-ip-port-address").long("metrics-ip-port-address").value_name("ADDRESS").help("Metrics scrape address")), + ) + .subcommand( + Command::new("run-config") + .about("Start the relayer using a configuration file") + .arg(Arg::new("path").short('p').long("path").required(true).value_name("FILE").help("Load configuration from FILE")), + ) + .get_matches(); + + match matches.subcommand() { + Some(("run-args", args)) => { + let config = RelayerConfig { + production: args.contains_id("production"), + rpc_url: args.get_one::("rpc-url").unwrap().to_string(), + da_account_id: args.get_one::("da-account-id").unwrap().to_string(), + key_path: args.get_one::("key-path").unwrap().to_string(), + network: args.get_one::("network").unwrap().to_string(), + metrics_ip_port_addr: args.get_one::("metrics-ip-port-address").map(|s| s.to_string()), + }; + relayer_main(config).await + } + Some(("run-config", args)) => { + let config_path = args.get_one::("path").unwrap(); + let config = config::load_config(PathBuf::from(config_path)).map_err(|e| anyhow::anyhow!(e))?; + relayer_main(config).await + } + _ => Err(anyhow::anyhow!("Invalid subcommand")), + } +} + +async fn relayer_main(config: RelayerConfig) -> Result<()> { + let log_level = if config.production { + tracing::Level::INFO + } else { + tracing::Level::DEBUG + }; + + let subscriber = FmtSubscriber::builder() + .with_max_level(log_level) + .finish(); + tracing::subscriber::set_global_default(subscriber)?; + + tracing::info!("Initializing Relayer"); + tracing::info!("Read config: {:?}", config); + + let mut relayer = Relayer::new(&config).await?; + + if let Some(metrics_addr) = config.metrics_ip_port_addr { + let registry = Registry::new(); + tokio::spawn(metrics::start_metrics_server(metrics_addr, registry)); + } + + tracing::info!("Starting relayer"); + relayer.start().await?; + + Ok(()) +} \ No newline at end of file diff --git a/relayer-rs/src/metrics.rs b/relayer-rs/src/metrics.rs new file mode 100644 index 00000000..6660b73f --- /dev/null +++ b/relayer-rs/src/metrics.rs @@ -0,0 +1,136 @@ +use prometheus::{Encoder, Histogram, HistogramOpts, IntCounter, Registry}; +use std::sync::Arc; +use tokio::time::Duration; +use warp::Filter; +use anyhow::Result; + +const RELAYER_NAMESPACE: &str = "sffl_relayer"; + +pub struct RelayerMetrics { + pub num_blocks_received: IntCounter, + pub num_da_submissions_failed: IntCounter, + pub submission_duration_ms: Histogram, + pub retries_histogram: Histogram, + pub num_of_invalid_nonces: IntCounter, + pub num_of_expired_txs: IntCounter, + pub num_of_timeout_txs: IntCounter, +} + +impl RelayerMetrics { + pub fn new(registry: &Registry) -> Result> { + let num_blocks_received = IntCounter::new( + format!("{}_num_blocks_received", RELAYER_NAMESPACE), + "The number of blocks received from rollup", + )?; + registry.register(Box::new(num_blocks_received.clone()))?; + + let num_da_submissions_failed = IntCounter::new( + format!("{}_num_da_submissions_failed", RELAYER_NAMESPACE), + "The number of failed da submissions", + )?; + registry.register(Box::new(num_da_submissions_failed.clone()))?; + + let latency_buckets = vec![ + 1.0, 25.0, 50.0, 75.0, 100.0, 250.0, 500.0, 1000.0, 2000.0, 3000.0, 4000.0, 5000.0, + 10000.0, f64::INFINITY, + ]; + + let submission_duration_ms = Histogram::with_opts( + HistogramOpts::new( + format!("{}_submission_duration_ms", RELAYER_NAMESPACE), + "Duration of successful DA submissions", + ) + .buckets(latency_buckets), + )?; + registry.register(Box::new(submission_duration_ms.clone()))?; + + let retries_histogram = Histogram::with_opts( + HistogramOpts::new( + format!("{}_retries_histogram", RELAYER_NAMESPACE), + "Histogram of retry counts", + ) + .buckets(prometheus::linear_buckets(0.0, 1.0, 3).unwrap()), + )?; + registry.register(Box::new(retries_histogram.clone()))?; + + let num_of_invalid_nonces = IntCounter::new( + format!("{}_num_of_invalid_nonces", RELAYER_NAMESPACE), + "Number of InvalidNonce error", + )?; + registry.register(Box::new(num_of_invalid_nonces.clone()))?; + + let num_of_expired_txs = IntCounter::new( + format!("{}_num_of_expired_txs", RELAYER_NAMESPACE), + "Number of Expired transactions", + )?; + registry.register(Box::new(num_of_expired_txs.clone()))?; + + let num_of_timeout_txs = IntCounter::new( + format!("{}_num_of_timeout_txs", RELAYER_NAMESPACE), + "Number of Timeout transactions", + )?; + registry.register(Box::new(num_of_timeout_txs.clone()))?; + + Ok(Arc::new(Self { + num_blocks_received, + num_da_submissions_failed, + submission_duration_ms, + retries_histogram, + num_of_invalid_nonces, + num_of_expired_txs, + num_of_timeout_txs, + })) + } +} + +pub async fn start_metrics_server(metrics_addr: String, registry: Registry) { + let metrics_route = warp::path!("metrics").and(warp::get()).map(move || { + let encoder = prometheus::TextEncoder::new(); + let mut buffer = Vec::new(); + encoder.encode(®istry.gather(), &mut buffer).unwrap(); + String::from_utf8(buffer).unwrap() + }); + + let socket_addr: std::net::SocketAddr = metrics_addr.parse().expect("Failed to parse metrics address"); + warp::serve(metrics_route).run(socket_addr).await; +} + +pub trait EventListener { + fn on_block_received(&self); + fn on_da_submission_failed(&self); + fn on_da_submitted(&self, duration: Duration); + fn on_retries_required(&self, retries: i32); + fn on_invalid_nonce(&self); + fn on_expired_tx(&self); + fn on_timeout_tx(&self); +} + +impl EventListener for Arc { + fn on_block_received(&self) { + self.num_blocks_received.inc(); + } + + fn on_da_submission_failed(&self) { + self.num_da_submissions_failed.inc(); + } + + fn on_da_submitted(&self, duration: Duration) { + self.submission_duration_ms.observe(duration.as_millis() as f64); + } + + fn on_retries_required(&self, retries: i32) { + self.retries_histogram.observe(retries as f64); + } + + fn on_invalid_nonce(&self) { + self.num_of_invalid_nonces.inc(); + } + + fn on_expired_tx(&self) { + self.num_of_expired_txs.inc(); + } + + fn on_timeout_tx(&self) { + self.num_of_timeout_txs.inc(); + } +} \ No newline at end of file diff --git a/relayer-rs/src/relayer.rs b/relayer-rs/src/relayer.rs new file mode 100644 index 00000000..4fcf703e --- /dev/null +++ b/relayer-rs/src/relayer.rs @@ -0,0 +1,113 @@ +use crate::config::RelayerConfig; +use crate::metrics::RelayerMetrics; +use alloy::pubsub::PubSubFrontend; +use anyhow::Result; +use alloy_rpc_types::Block; +use alloy_transport_ws::WsConnect; +use prometheus::Registry; +use std::{path::PathBuf, sync::Arc}; +use std::time::Duration; +use tokio::time; +use tracing::{error, info}; +use near_da_rpc::*; +use alloy::providers::{Provider, ProviderBuilder, RootProvider}; +use futures_util::StreamExt; + +const NAMESPACE_ID: u8 = 1; +const SUBMIT_BLOCK_INTERVAL: Duration = Duration::from_millis(2500); +const SUBMIT_BLOCK_RETRY_TIMEOUT: Duration = Duration::from_secs(2); +const SUBMIT_BLOCK_RETRIES: usize = 3; + +pub struct Relayer { + provider: Arc>, + near_da_client: near_da_rpc::near::Client, + metrics: Arc, +} + +impl Relayer { + pub async fn new(config: &RelayerConfig) -> Result { + let ws = WsConnect::new(&config.rpc_url); + let provider = ProviderBuilder::new().on_ws(ws).await?; + + let config = near_da_rpc::near::config::Config { + key: near_da_rpc::near::config::KeyType::File(PathBuf::from(config.key_path.clone())), + contract: config.da_account_id.clone(), + network: near_da_rpc::near::config::Network::Custom(config.network.clone()), + namespace: Some(near_da_primitives::Namespace::new(NAMESPACE_ID, 1)), + mode: near_da_primitives::Mode::Standard, + }; + let near_da_client = near_da_rpc::near::Client::new(&config); + let registry = Registry::new(); + let metrics = RelayerMetrics::new(®istry)?; + + Ok(Self { + provider: Arc::new(provider), + near_da_client, + metrics, + }) + } + + pub async fn start(&mut self) -> Result<()> { + let mut interval = time::interval(SUBMIT_BLOCK_INTERVAL); + + let mut blocks = Vec::new(); + // Subscribe to blocks. + let subscription = self.provider.subscribe_blocks().await?; + let mut stream = subscription.into_stream(); + + loop { + tokio::select! { + Some(block) = stream.next() => { + info!("Received rollup block header: {:?}", block.header.number); + self.metrics.num_blocks_received.inc(); + blocks.push(block); + } + _ = interval.tick() => { + if !blocks.is_empty() { + if let Err(e) = self.handle_blocks(&blocks).await { + error!("Error handling blocks: {:?}", e); + } + blocks.clear(); + } + } + } + } + } + + async fn handle_blocks(&self, blocks: &[Block]) -> Result<()> { + info!("Submitting blocks to NEAR: {:?}", blocks.iter().map(|b| b.header.number).collect::>()); + let serialized_blocks = serde_json::to_vec(blocks)?; + let encoded_blocks = alloy_rlp::encode(&serialized_blocks); + self.submit_encoded_blocks(encoded_blocks).await?; + + Ok(()) + } + + async fn submit_encoded_blocks(&self, encoded_blocks: Vec) -> Result<()> { + let start_time = std::time::Instant::now(); + for i in 0..SUBMIT_BLOCK_RETRIES { + match self.near_da_client.submit(Blob::from(encoded_blocks.to_vec())).await { + Ok(out) => { + self.metrics.submission_duration_ms.observe(start_time.elapsed().as_millis() as f64); + self.metrics.retries_histogram.observe(i as f64); + info!("Blocks submitted successfully: {:?}", out); + return Ok(()); + } + Err(e) => { + error!("Error submitting blocks to NEAR, retrying: {:?}", e); + if e.to_string().contains("InvalidNonce") { + self.metrics.num_of_invalid_nonces.inc(); + } else if e.to_string().contains("Expired") { + self.metrics.num_of_expired_txs.inc(); + } else if e.to_string().contains("Timeout") { + self.metrics.num_of_timeout_txs.inc(); + } + time::sleep(SUBMIT_BLOCK_RETRY_TIMEOUT).await; + } + } + } + + self.metrics.num_da_submissions_failed.inc(); + Err(anyhow::anyhow!("Failed to submit blocks to NEAR after retries")) + } +} \ No newline at end of file diff --git a/setup/fastnear-indexer/config/.env.example b/setup/fastnear-indexer/config/.env.example new file mode 100644 index 00000000..19868c8b --- /dev/null +++ b/setup/fastnear-indexer/config/.env.example @@ -0,0 +1,14 @@ +# Tagged release for SFFL containers +SFFL_RELEASE=latest + +# NEAR chain ID +NEAR_CHAIN_ID=testnet + +# Path to the directory containing the keys for the relayer DA account +NEAR_KEYS_DIR=~/.near-credentials + +# Home dir +NEAR_HOME_DIR=~/.near + +# RPC URL of the NEAR network +NEAR_RPC_URL=https://rpc.testnet.near.org \ No newline at end of file diff --git a/setup/fastnear-indexer/config/indexer.yaml b/setup/fastnear-indexer/config/indexer.yaml new file mode 100644 index 00000000..9e49b0c8 --- /dev/null +++ b/setup/fastnear-indexer/config/indexer.yaml @@ -0,0 +1,14 @@ +# RMQ address +rmq_address: amqp://rmq:5672 + +# AVS network contract IDs +da_contract_ids: + - sfrelayer421614-2.testnet + - sfrelayer21155420-2.testnet + +# Rollup IDs, must follow the same order as da_contract_ids +rollup_ids: + - 421614 + - 11155420 + +metrics_ip_port_address: "0.0.0.0:9092" \ No newline at end of file diff --git a/setup/fastnear-indexer/docker-compose.yml b/setup/fastnear-indexer/docker-compose.yml new file mode 100644 index 00000000..0285e111 --- /dev/null +++ b/setup/fastnear-indexer/docker-compose.yml @@ -0,0 +1,60 @@ +networks: + fastnear: + name: fastnear + driver: bridge + +services: + rmq: + image: rabbitmq:3-management-alpine + container_name: rmq + user: rabbitmq + ports: + - "127.0.0.1:5672:5672" + - "127.0.0.1:15672:15672" + environment: + - RABBITMQ_DEFAULT_USER=guest + - RABBITMQ_DEFAULT_PASS=guest + healthcheck: + test: rabbitmq-diagnostics check_port_connectivity + interval: 1s + timeout: 3s + retries: 30 + networks: + - fastnear + + fastnear-indexer: + profiles: [indexer] + build: + context: ../../indexer + dockerfile: FastIndexer.dockerfile + container_name: fastnear-indexer + depends_on: + rmq: + condition: service_healthy + ports: + - "127.0.0.1:3030:3030" + - "127.0.0.1:9092:9092" + environment: + - CHAIN_ID=${NEAR_CHAIN_ID:-testnet} + volumes: + - ./:/fastnear-indexer/ + - ${NEAR_HOME_DIR:-~/.near}:/root/.near + - ${NEAR_KEYS_DIR:-~/.near-credentials}:/root/.near-credentials + command: + - run + - --da-contract-ids + - da.testnet + - --rollup-ids + - "2" + - --rmq-address + - "amqp://rmq:5672" + entrypoint: ["/indexer-app/indexer"] + restart: unless-stopped + networks: + - fastnear + logging: + driver: "json-file" + options: + max-size: "1g" + max-file: "10" + compress: "true" \ No newline at end of file diff --git a/setup/i-r-a/.env.example b/setup/i-r-a/.env.example new file mode 100644 index 00000000..6ca384b1 --- /dev/null +++ b/setup/i-r-a/.env.example @@ -0,0 +1,17 @@ + +# Tagged release for SFFL containers +SFFL_RELEASE=latest + +# NEAR chain ID +NEAR_CHAIN_ID=testnet + +# NEAR home and keys directories +NEAR_HOME_DIR=~/.near +NEAR_KEYS_DIR=~/.near-credentials + +# Operator BLS key password (from config/keys files) +OPERATOR_BLS_KEY_PASSWORD=fDUMDLmBROwlzzPXyIcy + +# Operator BLS key password (from config/keys files) +# Only set this if you're using the `register_on_startup` configuration +OPERATOR_ECDSA_KEY_PASSWORD=EnJuncq01CiVk9UbuBYl diff --git a/setup/i-r-a/config/.env.example b/setup/i-r-a/config/.env.example new file mode 100644 index 00000000..19868c8b --- /dev/null +++ b/setup/i-r-a/config/.env.example @@ -0,0 +1,14 @@ +# Tagged release for SFFL containers +SFFL_RELEASE=latest + +# NEAR chain ID +NEAR_CHAIN_ID=testnet + +# Path to the directory containing the keys for the relayer DA account +NEAR_KEYS_DIR=~/.near-credentials + +# Home dir +NEAR_HOME_DIR=~/.near + +# RPC URL of the NEAR network +NEAR_RPC_URL=https://rpc.testnet.near.org \ No newline at end of file diff --git a/setup/i-r-a/config/indexer.yaml b/setup/i-r-a/config/indexer.yaml new file mode 100644 index 00000000..9e49b0c8 --- /dev/null +++ b/setup/i-r-a/config/indexer.yaml @@ -0,0 +1,14 @@ +# RMQ address +rmq_address: amqp://rmq:5672 + +# AVS network contract IDs +da_contract_ids: + - sfrelayer421614-2.testnet + - sfrelayer21155420-2.testnet + +# Rollup IDs, must follow the same order as da_contract_ids +rollup_ids: + - 421614 + - 11155420 + +metrics_ip_port_address: "0.0.0.0:9092" \ No newline at end of file diff --git a/setup/i-r-a/config/keys/bls.example.json b/setup/i-r-a/config/keys/bls.example.json new file mode 100644 index 00000000..72306d85 --- /dev/null +++ b/setup/i-r-a/config/keys/bls.example.json @@ -0,0 +1 @@ +{"pubKey":"E([19408553463882111916887171276012224475029133183214861480489485386352635269635,17418827901203159022109906145273000034647571131322064812191371351028964064220])","crypto":{"cipher":"aes-128-ctr","ciphertext":"f2e5a3df524234426297f84b80c3c69e008ca17960fa512845b250a5308a7a6c","cipherparams":{"iv":"64528130796bc7227f48b0b01030b4c2"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"7ceca78a0011e3ab5dce8b4f562b0615f60d8642b841d751bc676fb7dc574938"},"mac":"f9e5050e1077e2558a66f82fad05259ebc9e81da6e5ef8025f34d8fbc7e6e8ac"}} \ No newline at end of file diff --git a/setup/i-r-a/config/keys/ecdsa.example.json b/setup/i-r-a/config/keys/ecdsa.example.json new file mode 100644 index 00000000..aa11e4c9 --- /dev/null +++ b/setup/i-r-a/config/keys/ecdsa.example.json @@ -0,0 +1 @@ +{"address":"d5a0359da7b310917d7760385516b2426e86ab7f","crypto":{"cipher":"aes-128-ctr","ciphertext":"91a55f690a65c9b352a24783d1db851a7b2f826763ff979a877bb78ae63860eb","cipherparams":{"iv":"313c5db87ccef736f2844c218b0728c2"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"64e28acc8270b64aa22fb6554a694657face2887ceb6cc209c607db11c4338d7"},"mac":"9087dd2b17322a7237505b368eac0462dd8c87637516cd80740fafe7d2f3ae5b"},"id":"96c2a806-cd73-4e95-8d65-e0933a3e7e1c","version":3} \ No newline at end of file diff --git a/setup/i-r-a/config/operator.yaml b/setup/i-r-a/config/operator.yaml new file mode 100644 index 00000000..c90dae8f --- /dev/null +++ b/setup/i-r-a/config/operator.yaml @@ -0,0 +1,52 @@ +# Production flag for logging - false for printing debug logs +production: false + +# Operator ECDSA address +operator_address: 0xD5A0359da7B310917d7760385516B2426E86ab7f + +# AVS contract addresses +avs_registry_coordinator_address: 0x0069A298e68c09B047E5447b3b762E42114a99a2 +operator_state_retriever_address: 0x8D0b27Df027bc5C41855Da352Da4B5B2C406c1F0 + +# AVS network RPCs +# *Important*: The WS RPC must allow event subscriptions. As Public Node +# doesn't support it, you should use a different RPC provider. +eth_rpc_url: https://ethereum-holesky-rpc.publicnode.com +eth_ws_url: wss://ethereum-holesky-rpc.publicnode.com # You should change this! + +# EigenLayer ECDSA private key path +ecdsa_private_key_store_path: /near-sffl/config/keys/ecdsa.json + +# BLS private key as a decimal string (example) +bls_keypair: "6357264453605833890416165025677756558252870029365952232381486360336261321079" + +# Aggregator server IP and port +aggregator_server_ip_port_address: near-sffl-aggregator:8090 + +# Operator EigenLayer metrics server IP and port +enable_metrics: true +eigen_metrics_ip_port_address: 0.0.0.0:9091 + +enable_node_api: true +node_api_ip_port_address: 0.0.0.0:9010 + +# Whether to try and register the operator in the AVS and in EL on startup. +# It will not re-register the operator if already registered. +# If unset, the operator will not be registered on startup! You'll need to +# manually register the operator. +register_operator_on_startup: false + +# RMQ address and indexer rollup IDs +near_da_indexer_rmq_ip_port_address: amqp://rmq:5672 +near_da_indexer_rollup_ids: [1, 2] + +# Rollup RPCs +rollup_ids_to_rpc_urls: + 1: wss://arbitrum-sepolia-rpc.publicnode.com + 2: wss://optimism-sepolia-rpc.publicnode.com + +task_response_wait_ms: 60000 + +# Token strategy address +# Mock strategy to deposit when registering (only used for testing) +token_strategy_addr: 0x0000000000000000000000000000000000000000 diff --git a/setup/i-r-a/docker-compose.yml b/setup/i-r-a/docker-compose.yml new file mode 100644 index 00000000..d526529f --- /dev/null +++ b/setup/i-r-a/docker-compose.yml @@ -0,0 +1,138 @@ +version: "3" + +networks: + fastnear: + name: fastnear + driver: bridge + near-sffl-relayer-rs: + driver: bridge + +services: + rmq: + image: rabbitmq:3-management-alpine + container_name: rmq + user: rabbitmq + ports: + - "127.0.0.1:5672:5672" + - "127.0.0.1:15672:15672" + environment: + - RABBITMQ_DEFAULT_USER=guest + - RABBITMQ_DEFAULT_PASS=guest + healthcheck: + test: rabbitmq-diagnostics check_port_connectivity + interval: 1s + timeout: 3s + retries: 30 + networks: + - fastnear + + fastnear-indexer: + build: + context: ../../indexer + dockerfile: FastIndexer.dockerfile + container_name: fastnear-indexer + depends_on: + rmq: + condition: service_healthy + ports: + - "127.0.0.1:3030:3030" + - "127.0.0.1:9092:9092" + environment: + - CHAIN_ID=${NEAR_CHAIN_ID:-testnet} + volumes: + - ./:/fastnear-indexer/ + - ${NEAR_HOME_DIR:-~/.near}:/root/.near + - ${NEAR_KEYS_DIR:-~/.near-credentials}:/root/.near-credentials + command: + - run + - --da-contract-ids + - sfrelayer21155420-2.testnet + - --rollup-ids + - "2" + - --rmq-address + - "amqp://rmq:5672" + entrypoint: ["/indexer-app/indexer"] + restart: unless-stopped + networks: + - fastnear + logging: + driver: "json-file" + options: + max-size: "1g" + max-file: "10" + compress: "true" + + relayer_11155420_rs: + build: + context: ../../relayer-rs + dockerfile: Dockerfile + container_name: near-sffl-relayer-rs-21155420 + volumes: + - ${NEAR_KEYS_DIR}:/root/.near-credentials + networks: + - near-sffl-relayer-rs + expose: + - 9094 + command: + - run-args + - --rpc-url + - wss://optimism-sepolia-rpc.publicnode.com + - --da-account-id + - sfrelayer21155420-2.testnet + - --key-path + - /root/.near-credentials/${NEAR_CHAIN_ID}/sfrelayer21155420-2.testnet.json + - --network + - ${NEAR_RPC_URL} + - --metrics-ip-port-address + - near-sffl-relayer-rs-21155420:9094 + restart: unless-stopped + logging: + driver: "json-file" + options: + max-size: "1g" + max-file: "20" + compress: "true" + + operator-rs: + build: + context: ../.. # Set this to the parent directory of both operator-rs and core-rs + dockerfile: operator-rs/Dockerfile + container_name: near-sffl-operator-rs + volumes: + - ./config:/near-sffl/config + - ${NEAR_KEYS_DIR:-~/.near-credentials}:/root/.near-credentials + - ../../tests/keys/bls:/near-sffl/bls_keys + networks: + - fastnear + - near-sffl-relayer-rs + expose: + - ${OPERATOR_METRICS_PORT:-9095} + environment: + - PRODUCTION=${PRODUCTION:-false} + - ETH_RPC_URL=${ETH_RPC_URL:-https://optimism-sepolia-rpc.publicnode.com} + - ETH_WS_URL=${ETH_WS_URL:-wss://optimism-sepolia-rpc.publicnode.com} + - OPERATOR_ADDRESS=${OPERATOR_ADDRESS} + - BLS_KEY_PATH=/near-sffl/bls_keys/1/key.json + - BLS_KEY_PASSWORD_PATH=/near-sffl/bls_keys/1/password.txt + - ECDSA_KEY_PATH=${ECDSA_KEY_PATH:-/root/.near-credentials/ecdsa_key.json} + - AVS_REGISTRY_COORDINATOR_ADDRESS=${AVS_REGISTRY_COORDINATOR_ADDRESS} + - OPERATOR_STATE_RETRIEVER_ADDRESS=${OPERATOR_STATE_RETRIEVER_ADDRESS} + - AGGREGATOR_SERVER_IP_PORT=${AGGREGATOR_SERVER_IP_PORT} + - ENABLE_METRICS=${ENABLE_METRICS:-true} + - EIGEN_METRICS_IP_PORT=${EIGEN_METRICS_IP_PORT:-0.0.0.0:9095} + - NEAR_DA_INDEXER_RMQ_ADDRESS=${NEAR_DA_INDEXER_RMQ_ADDRESS:-amqp://rmq:5672} + - NEAR_DA_INDEXER_ROLLUP_IDS=${NEAR_DA_INDEXER_ROLLUP_IDS:-2} + - ROLLUP_IDS_TO_RPC_URLS=${ROLLUP_IDS_TO_RPC_URLS:-2:https://optimism-sepolia-rpc.publicnode.com} + - TASK_RESPONSE_WAIT_MS=${TASK_RESPONSE_WAIT_MS:-60000} + - TOKEN_STRATEGY_ADDR=${TOKEN_STRATEGY_ADDR:-0x0000000000000000000000000000000000000000} + command: + - run-config + - --path + - /near-sffl/config/operator.yaml + restart: unless-stopped + logging: + driver: "json-file" + options: + max-size: "1g" + max-file: "20" + compress: "true" diff --git a/setup/i-r-a/prometheus/prometheus.yml b/setup/i-r-a/prometheus/prometheus.yml new file mode 100644 index 00000000..7295f931 --- /dev/null +++ b/setup/i-r-a/prometheus/prometheus.yml @@ -0,0 +1,26 @@ +global: + scrape_interval: 15s + + # Attach these labels to any time series or alerts when communicating with + # external systems (federation, remote storage, Alertmanager). + external_labels: + monitor: "docker-host-alpha" + +# A scrape configuration containing exactly one endpoint to scrape. +scrape_configs: + - job_name: "prometheus" + scrape_interval: 10s + static_configs: + - targets: ["localhost:9090"] + + - job_name: "sffl-relayer-rs" + scrape_interval: 5s + static_configs: + - targets: ["near-sffl-relayer-rs-421614:9093"] + labels: + role: "relayer" + instance: "1" + - targets: ["near-sffl-relayer-rs-11155420:9094"] + labels: + role: "relayer" + instance: "2" \ No newline at end of file diff --git a/setup/indexer-relayer-testnet/config/.env.example b/setup/indexer-relayer-testnet/config/.env.example new file mode 100644 index 00000000..19868c8b --- /dev/null +++ b/setup/indexer-relayer-testnet/config/.env.example @@ -0,0 +1,14 @@ +# Tagged release for SFFL containers +SFFL_RELEASE=latest + +# NEAR chain ID +NEAR_CHAIN_ID=testnet + +# Path to the directory containing the keys for the relayer DA account +NEAR_KEYS_DIR=~/.near-credentials + +# Home dir +NEAR_HOME_DIR=~/.near + +# RPC URL of the NEAR network +NEAR_RPC_URL=https://rpc.testnet.near.org \ No newline at end of file diff --git a/setup/indexer-relayer-testnet/config/indexer.yaml b/setup/indexer-relayer-testnet/config/indexer.yaml new file mode 100644 index 00000000..9e49b0c8 --- /dev/null +++ b/setup/indexer-relayer-testnet/config/indexer.yaml @@ -0,0 +1,14 @@ +# RMQ address +rmq_address: amqp://rmq:5672 + +# AVS network contract IDs +da_contract_ids: + - sfrelayer421614-2.testnet + - sfrelayer21155420-2.testnet + +# Rollup IDs, must follow the same order as da_contract_ids +rollup_ids: + - 421614 + - 11155420 + +metrics_ip_port_address: "0.0.0.0:9092" \ No newline at end of file diff --git a/setup/indexer-relayer-testnet/docker-compose.yml b/setup/indexer-relayer-testnet/docker-compose.yml new file mode 100644 index 00000000..6962b6c8 --- /dev/null +++ b/setup/indexer-relayer-testnet/docker-compose.yml @@ -0,0 +1,94 @@ +version: "3" + +networks: + fastnear: + name: fastnear + driver: bridge + near-sffl-relayer-rs: + driver: bridge + +services: + rmq: + image: rabbitmq:3-management-alpine + container_name: rmq + user: rabbitmq + ports: + - "127.0.0.1:5672:5672" + - "127.0.0.1:15672:15672" + environment: + - RABBITMQ_DEFAULT_USER=guest + - RABBITMQ_DEFAULT_PASS=guest + healthcheck: + test: rabbitmq-diagnostics check_port_connectivity + interval: 1s + timeout: 3s + retries: 30 + networks: + - fastnear + + fastnear-indexer: + build: + context: ../../indexer + dockerfile: FastIndexer.dockerfile + container_name: fastnear-indexer + depends_on: + rmq: + condition: service_healthy + ports: + - "127.0.0.1:3030:3030" + - "127.0.0.1:9092:9092" + environment: + - CHAIN_ID=${NEAR_CHAIN_ID:-testnet} + volumes: + - ./:/fastnear-indexer/ + - ${NEAR_HOME_DIR:-~/.near}:/root/.near + - ${NEAR_KEYS_DIR:-~/.near-credentials}:/root/.near-credentials + command: + - run + - --da-contract-ids + - sfrelayer21155420-2.testnet + - --rollup-ids + - "2" + - --rmq-address + - "amqp://rmq:5672" + entrypoint: ["/indexer-app/indexer"] + restart: unless-stopped + networks: + - fastnear + logging: + driver: "json-file" + options: + max-size: "1g" + max-file: "10" + compress: "true" + + relayer_11155420_rs: + build: + context: ../../relayer-rs + dockerfile: Dockerfile + container_name: near-sffl-relayer-rs-21155420 + volumes: + - ${NEAR_KEYS_DIR}:/root/.near-credentials + networks: + - near-sffl-relayer-rs + expose: + - 9094 + command: + - run-args + - --rpc-url + - wss://optimism-sepolia-rpc.publicnode.com + - --da-account-id + - sfrelayer21155420-2.testnet + - --key-path + - /root/.near-credentials/${NEAR_CHAIN_ID}/sfrelayer21155420-2.testnet.json + - --network + - ${NEAR_RPC_URL} + - --metrics-ip-port-address + - near-sffl-relayer-rs-21155420:9094 + restart: unless-stopped + logging: + driver: "json-file" + options: + max-size: "1g" + max-file: "20" + compress: "true" \ No newline at end of file diff --git a/setup/indexer-relayer-testnet/prometheus/prometheus.yml b/setup/indexer-relayer-testnet/prometheus/prometheus.yml new file mode 100644 index 00000000..7295f931 --- /dev/null +++ b/setup/indexer-relayer-testnet/prometheus/prometheus.yml @@ -0,0 +1,26 @@ +global: + scrape_interval: 15s + + # Attach these labels to any time series or alerts when communicating with + # external systems (federation, remote storage, Alertmanager). + external_labels: + monitor: "docker-host-alpha" + +# A scrape configuration containing exactly one endpoint to scrape. +scrape_configs: + - job_name: "prometheus" + scrape_interval: 10s + static_configs: + - targets: ["localhost:9090"] + + - job_name: "sffl-relayer-rs" + scrape_interval: 5s + static_configs: + - targets: ["near-sffl-relayer-rs-421614:9093"] + labels: + role: "relayer" + instance: "1" + - targets: ["near-sffl-relayer-rs-11155420:9094"] + labels: + role: "relayer" + instance: "2" \ No newline at end of file diff --git a/setup/relayer-rs/.env.example b/setup/relayer-rs/.env.example new file mode 100644 index 00000000..9c5cc074 --- /dev/null +++ b/setup/relayer-rs/.env.example @@ -0,0 +1,11 @@ +# Tagged release for SFFL containers +SFFL_RELEASE=latest + +# NEAR chain ID +NEAR_CHAIN_ID=testnet + +# Path to the directory containing the keys for the relayer DA account +NEAR_KEYS_DIR=~/.near-credentials + +# RPC URL of the NEAR network +NEAR_RPC_URL=https://rpc.testnet.near.org \ No newline at end of file diff --git a/setup/relayer-rs/docker-compose.yml b/setup/relayer-rs/docker-compose.yml new file mode 100644 index 00000000..f999110e --- /dev/null +++ b/setup/relayer-rs/docker-compose.yml @@ -0,0 +1,112 @@ +version: "3" + +networks: + near-sffl-relayer-rs: + driver: bridge + +services: + # relayer_431614_rs: + # build: + # context: ../../relayer-rs + # dockerfile: Dockerfile + # container_name: near-sffl-relayer-rs-421614 + # volumes: + # - ${NEAR_KEYS_DIR}:/root/.near-credentials + # networks: + # - near-sffl-relayer-rs + # expose: + # - 9093 + # command: + # - run-args + # - --rpc-url + # - wss://arbitrum-sepolia-rpc.publicnode.com + # - --da-account-id + # - sfrelayer431614-2.testnet + # - --key-path + # - /root/.near-credentials/${NEAR_CHAIN_ID}/sfrelayer431614-2.testnet.json + # - --network + # - ${NEAR_RPC_URL} + # - --metrics-ip-port-address + # - near-sffl-relayer-rs-431614:9093 + # restart: unless-stopped + # logging: + # driver: "json-file" + # options: + # max-size: "1g" + # max-file: "20" + # compress: "true" + + relayer_11155420_rs: + build: + context: ../../relayer-rs + dockerfile: Dockerfile + container_name: near-sffl-relayer-rs-21155420 + volumes: + - ${NEAR_KEYS_DIR}:/root/.near-credentials + networks: + - near-sffl-relayer-rs + expose: + - 9094 + command: + - run-args + - --rpc-url + - wss://optimism-sepolia-rpc.publicnode.com + - --da-account-id + - sfrelayer21155420-2.testnet + - --key-path + - /root/.near-credentials/${NEAR_CHAIN_ID}/sfrelayer21155420-2.testnet.json + - --network + - ${NEAR_RPC_URL} + - --metrics-ip-port-address + - near-sffl-relayer-rs-21155420:9094 + restart: unless-stopped + logging: + driver: "json-file" + options: + max-size: "1g" + max-file: "20" + compress: "true" + + grafana: + profiles: ["monitoring"] + image: grafana/grafana:9.4.1 + container_name: grafana-rs + volumes: + - grafana_data_relayer_rs:/var/lib/grafana + - ../../grafana/provisioning:/etc/grafana/provisioning + networks: + - near-sffl-relayer-rs + environment: + - GF_SECURITY_ADMIN_USER=${ADMIN_USER:-admin} + - GF_SECURITY_ADMIN_PASSWORD=${ADMIN_PASSWORD:-admin} + - GF_USERS_ALLOW_SIGN_UP=false + restart: unless-stopped + ports: + - "127.0.0.1:3002:3000" + + prometheus: + profiles: ["monitoring"] + image: prom/prometheus:v2.42.0 + container_name: prometheus-rs + volumes: + - ./prometheus:/etc/prometheus + - prometheus_data_relayer_rs:/prometheus + networks: + - near-sffl-relayer-rs + command: + - "--config.file=/etc/prometheus/prometheus.yml" + - "--storage.tsdb.path=/prometheus" + - "--web.console.libraries=/etc/prometheus/console_libraries" + - "--web.console.templates=/etc/prometheus/consoles" + - "--storage.tsdb.retention.time=200h" + - "--web.enable-lifecycle" + - --web.enable-remote-write-receiver + restart: unless-stopped + ports: + - "127.0.0.1:9092:9090" + extra_hosts: + - "host.docker.internal:host-gateway" + +volumes: + prometheus_data_relayer_rs: + grafana_data_relayer_rs: \ No newline at end of file diff --git a/setup/relayer-rs/prometheus/prometheus.yml b/setup/relayer-rs/prometheus/prometheus.yml new file mode 100644 index 00000000..7295f931 --- /dev/null +++ b/setup/relayer-rs/prometheus/prometheus.yml @@ -0,0 +1,26 @@ +global: + scrape_interval: 15s + + # Attach these labels to any time series or alerts when communicating with + # external systems (federation, remote storage, Alertmanager). + external_labels: + monitor: "docker-host-alpha" + +# A scrape configuration containing exactly one endpoint to scrape. +scrape_configs: + - job_name: "prometheus" + scrape_interval: 10s + static_configs: + - targets: ["localhost:9090"] + + - job_name: "sffl-relayer-rs" + scrape_interval: 5s + static_configs: + - targets: ["near-sffl-relayer-rs-421614:9093"] + labels: + role: "relayer" + instance: "1" + - targets: ["near-sffl-relayer-rs-11155420:9094"] + labels: + role: "relayer" + instance: "2" \ No newline at end of file diff --git a/workers/Cargo.toml b/workers/Cargo.toml new file mode 100644 index 00000000..69cc89a1 --- /dev/null +++ b/workers/Cargo.toml @@ -0,0 +1,21 @@ +[package] +name = "workers" +version = "0.1.0" +edition = "2021" + +[[bin]] +name = "dvn" +path = "src/bin/dvn.rs" + +[dependencies] +alloy.workspace = true +blsful = "2.5.7" +bytes = "1.7.2" +config = { version = "0.14.0", features = ["toml"] } +eyre.workspace = true +futures = "0.3.31" +serde.workspace = true +serde_json.workspace = true +tokio.workspace = true +tracing.workspace = true +tracing-subscriber = {workspace = true, features = ["env-filter"] } diff --git a/workers/README.md b/workers/README.md new file mode 100644 index 00000000..d9694042 --- /dev/null +++ b/workers/README.md @@ -0,0 +1,12 @@ +# Workers for offchain workflows + +## DVN + +Nuff's DVN for LayerZero integration lives under `bin/dvn.rs`. + +To run it, do `$ RUST_LOG=debug cargo run --bin dvn` to see everything, or `$ RUST_LOG=info cargo run --bin dvn` for something less. + +## Configuration + +To run different binaries, some configuration is needed. It usually loads some environment variables from an `.env` file. + diff --git a/workers/abi/L0V2Endpoint.json b/workers/abi/L0V2Endpoint.json new file mode 100644 index 00000000..33f4ede9 --- /dev/null +++ b/workers/abi/L0V2Endpoint.json @@ -0,0 +1 @@ +{"abi":[{"inputs":[{"internalType":"uint32","name":"_eid","type":"uint32"},{"internalType":"address","name":"_owner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"LZ_AlreadyRegistered","type":"error"},{"inputs":[],"name":"LZ_ComposeExists","type":"error"},{"inputs":[{"internalType":"bytes32","name":"expected","type":"bytes32"},{"internalType":"bytes32","name":"actual","type":"bytes32"}],"name":"LZ_ComposeNotFound","type":"error"},{"inputs":[],"name":"LZ_DefaultReceiveLibUnavailable","type":"error"},{"inputs":[],"name":"LZ_DefaultSendLibUnavailable","type":"error"},{"inputs":[{"internalType":"uint256","name":"requiredNative","type":"uint256"},{"internalType":"uint256","name":"suppliedNative","type":"uint256"},{"internalType":"uint256","name":"requiredLzToken","type":"uint256"},{"internalType":"uint256","name":"suppliedLzToken","type":"uint256"}],"name":"LZ_InsufficientFee","type":"error"},{"inputs":[],"name":"LZ_InvalidExpiry","type":"error"},{"inputs":[{"internalType":"uint64","name":"nonce","type":"uint64"}],"name":"LZ_InvalidNonce","type":"error"},{"inputs":[],"name":"LZ_InvalidPayloadHash","type":"error"},{"inputs":[],"name":"LZ_InvalidReceiveLibrary","type":"error"},{"inputs":[],"name":"LZ_LzTokenUnavailable","type":"error"},{"inputs":[],"name":"LZ_OnlyNonDefaultLib","type":"error"},{"inputs":[],"name":"LZ_OnlyReceiveLib","type":"error"},{"inputs":[],"name":"LZ_OnlyRegisteredLib","type":"error"},{"inputs":[],"name":"LZ_OnlyRegisteredOrDefaultLib","type":"error"},{"inputs":[],"name":"LZ_OnlySendLib","type":"error"},{"inputs":[],"name":"LZ_PathNotInitializable","type":"error"},{"inputs":[],"name":"LZ_PathNotVerifiable","type":"error"},{"inputs":[{"internalType":"bytes32","name":"expected","type":"bytes32"},{"internalType":"bytes32","name":"actual","type":"bytes32"}],"name":"LZ_PayloadHashNotFound","type":"error"},{"inputs":[],"name":"LZ_SameValue","type":"error"},{"inputs":[],"name":"LZ_SendReentrancy","type":"error"},{"inputs":[],"name":"LZ_Unauthorized","type":"error"},{"inputs":[],"name":"LZ_UnsupportedEid","type":"error"},{"inputs":[],"name":"LZ_UnsupportedInterface","type":"error"},{"inputs":[],"name":"LZ_ZeroLzTokenFee","type":"error"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Transfer_NativeFailed","type":"error"},{"inputs":[],"name":"Transfer_ToAddressIsZero","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"bytes32","name":"guid","type":"bytes32"},{"indexed":false,"internalType":"uint16","name":"index","type":"uint16"}],"name":"ComposeDelivered","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"bytes32","name":"guid","type":"bytes32"},{"indexed":false,"internalType":"uint16","name":"index","type":"uint16"},{"indexed":false,"internalType":"bytes","name":"message","type":"bytes"}],"name":"ComposeSent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint32","name":"eid","type":"uint32"},{"indexed":false,"internalType":"address","name":"newLib","type":"address"}],"name":"DefaultReceiveLibrarySet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint32","name":"eid","type":"uint32"},{"indexed":false,"internalType":"address","name":"oldLib","type":"address"},{"indexed":false,"internalType":"uint256","name":"expiry","type":"uint256"}],"name":"DefaultReceiveLibraryTimeoutSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint32","name":"eid","type":"uint32"},{"indexed":false,"internalType":"address","name":"newLib","type":"address"}],"name":"DefaultSendLibrarySet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"address","name":"delegate","type":"address"}],"name":"DelegateSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint32","name":"srcEid","type":"uint32"},{"indexed":false,"internalType":"bytes32","name":"sender","type":"bytes32"},{"indexed":false,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint64","name":"nonce","type":"uint64"}],"name":"InboundNonceSkipped","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newLib","type":"address"}],"name":"LibraryRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"address","name":"executor","type":"address"},{"indexed":false,"internalType":"bytes32","name":"guid","type":"bytes32"},{"indexed":false,"internalType":"uint16","name":"index","type":"uint16"},{"indexed":false,"internalType":"uint256","name":"gas","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"message","type":"bytes"},{"indexed":false,"internalType":"bytes","name":"extraData","type":"bytes"},{"indexed":false,"internalType":"bytes","name":"reason","type":"bytes"}],"name":"LzComposeAlert","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":true,"internalType":"address","name":"executor","type":"address"},{"components":[{"internalType":"uint32","name":"srcEid","type":"uint32"},{"internalType":"bytes32","name":"sender","type":"bytes32"},{"internalType":"uint64","name":"nonce","type":"uint64"}],"indexed":false,"internalType":"struct Origin","name":"origin","type":"tuple"},{"indexed":false,"internalType":"bytes32","name":"guid","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"gas","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"message","type":"bytes"},{"indexed":false,"internalType":"bytes","name":"extraData","type":"bytes"},{"indexed":false,"internalType":"bytes","name":"reason","type":"bytes"}],"name":"LzReceiveAlert","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"}],"name":"LzTokenSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint32","name":"srcEid","type":"uint32"},{"indexed":false,"internalType":"bytes32","name":"sender","type":"bytes32"},{"indexed":false,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint64","name":"nonce","type":"uint64"},{"indexed":false,"internalType":"bytes32","name":"payloadHash","type":"bytes32"}],"name":"PacketBurnt","type":"event"},{"anonymous":false,"inputs":[{"components":[{"internalType":"uint32","name":"srcEid","type":"uint32"},{"internalType":"bytes32","name":"sender","type":"bytes32"},{"internalType":"uint64","name":"nonce","type":"uint64"}],"indexed":false,"internalType":"struct Origin","name":"origin","type":"tuple"},{"indexed":false,"internalType":"address","name":"receiver","type":"address"}],"name":"PacketDelivered","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint32","name":"srcEid","type":"uint32"},{"indexed":false,"internalType":"bytes32","name":"sender","type":"bytes32"},{"indexed":false,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint64","name":"nonce","type":"uint64"},{"indexed":false,"internalType":"bytes32","name":"payloadHash","type":"bytes32"}],"name":"PacketNilified","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes","name":"encodedPayload","type":"bytes"},{"indexed":false,"internalType":"bytes","name":"options","type":"bytes"},{"indexed":false,"internalType":"address","name":"sendLibrary","type":"address"}],"name":"PacketSent","type":"event"},{"anonymous":false,"inputs":[{"components":[{"internalType":"uint32","name":"srcEid","type":"uint32"},{"internalType":"bytes32","name":"sender","type":"bytes32"},{"internalType":"uint64","name":"nonce","type":"uint64"}],"indexed":false,"internalType":"struct Origin","name":"origin","type":"tuple"},{"indexed":false,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"bytes32","name":"payloadHash","type":"bytes32"}],"name":"PacketVerified","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint32","name":"eid","type":"uint32"},{"indexed":false,"internalType":"address","name":"newLib","type":"address"}],"name":"ReceiveLibrarySet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint32","name":"eid","type":"uint32"},{"indexed":false,"internalType":"address","name":"oldLib","type":"address"},{"indexed":false,"internalType":"uint256","name":"timeout","type":"uint256"}],"name":"ReceiveLibraryTimeoutSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint32","name":"eid","type":"uint32"},{"indexed":false,"internalType":"address","name":"newLib","type":"address"}],"name":"SendLibrarySet","type":"event"},{"inputs":[],"name":"EMPTY_PAYLOAD_HASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NIL_PAYLOAD_HASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blockedLibrary","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_oapp","type":"address"},{"internalType":"uint32","name":"_srcEid","type":"uint32"},{"internalType":"bytes32","name":"_sender","type":"bytes32"},{"internalType":"uint64","name":"_nonce","type":"uint64"},{"internalType":"bytes32","name":"_payloadHash","type":"bytes32"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_oapp","type":"address"},{"components":[{"internalType":"uint32","name":"srcEid","type":"uint32"},{"internalType":"bytes32","name":"sender","type":"bytes32"},{"internalType":"uint64","name":"nonce","type":"uint64"}],"internalType":"struct Origin","name":"_origin","type":"tuple"},{"internalType":"bytes32","name":"_guid","type":"bytes32"},{"internalType":"bytes","name":"_message","type":"bytes"}],"name":"clear","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"bytes32","name":"guid","type":"bytes32"},{"internalType":"uint16","name":"index","type":"uint16"}],"name":"composeQueue","outputs":[{"internalType":"bytes32","name":"messageHash","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"srcEid","type":"uint32"}],"name":"defaultReceiveLibrary","outputs":[{"internalType":"address","name":"lib","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"srcEid","type":"uint32"}],"name":"defaultReceiveLibraryTimeout","outputs":[{"internalType":"address","name":"lib","type":"address"},{"internalType":"uint256","name":"expiry","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"dstEid","type":"uint32"}],"name":"defaultSendLibrary","outputs":[{"internalType":"address","name":"lib","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"oapp","type":"address"}],"name":"delegates","outputs":[{"internalType":"address","name":"delegate","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"eid","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_oapp","type":"address"},{"internalType":"address","name":"_lib","type":"address"},{"internalType":"uint32","name":"_eid","type":"uint32"},{"internalType":"uint32","name":"_configType","type":"uint32"}],"name":"getConfig","outputs":[{"internalType":"bytes","name":"config","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"uint32","name":"_srcEid","type":"uint32"}],"name":"getReceiveLibrary","outputs":[{"internalType":"address","name":"lib","type":"address"},{"internalType":"bool","name":"isDefault","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRegisteredLibraries","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSendContext","outputs":[{"internalType":"uint32","name":"","type":"uint32"},{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"},{"internalType":"uint32","name":"_dstEid","type":"uint32"}],"name":"getSendLibrary","outputs":[{"internalType":"address","name":"lib","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"uint32","name":"_srcEid","type":"uint32"},{"internalType":"bytes32","name":"_sender","type":"bytes32"}],"name":"inboundNonce","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint32","name":"srcEid","type":"uint32"},{"internalType":"bytes32","name":"sender","type":"bytes32"},{"internalType":"uint64","name":"inboundNonce","type":"uint64"}],"name":"inboundPayloadHash","outputs":[{"internalType":"bytes32","name":"payloadHash","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"srcEid","type":"uint32"},{"internalType":"bytes32","name":"sender","type":"bytes32"},{"internalType":"uint64","name":"nonce","type":"uint64"}],"internalType":"struct Origin","name":"_origin","type":"tuple"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"initializable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"},{"internalType":"uint32","name":"_dstEid","type":"uint32"}],"name":"isDefaultSendLibrary","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"lib","type":"address"}],"name":"isRegisteredLibrary","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSendingMessage","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"_eid","type":"uint32"}],"name":"isSupportedEid","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"uint32","name":"_srcEid","type":"uint32"},{"internalType":"address","name":"_actualReceiveLib","type":"address"}],"name":"isValidReceiveLibrary","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint32","name":"srcEid","type":"uint32"},{"internalType":"bytes32","name":"sender","type":"bytes32"}],"name":"lazyInboundNonce","outputs":[{"internalType":"uint64","name":"nonce","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"bytes32","name":"_guid","type":"bytes32"},{"internalType":"uint16","name":"_index","type":"uint16"},{"internalType":"bytes","name":"_message","type":"bytes"},{"internalType":"bytes","name":"_extraData","type":"bytes"}],"name":"lzCompose","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"bytes32","name":"_guid","type":"bytes32"},{"internalType":"uint16","name":"_index","type":"uint16"},{"internalType":"uint256","name":"_gas","type":"uint256"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"bytes","name":"_message","type":"bytes"},{"internalType":"bytes","name":"_extraData","type":"bytes"},{"internalType":"bytes","name":"_reason","type":"bytes"}],"name":"lzComposeAlert","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"srcEid","type":"uint32"},{"internalType":"bytes32","name":"sender","type":"bytes32"},{"internalType":"uint64","name":"nonce","type":"uint64"}],"internalType":"struct Origin","name":"_origin","type":"tuple"},{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"bytes32","name":"_guid","type":"bytes32"},{"internalType":"bytes","name":"_message","type":"bytes"},{"internalType":"bytes","name":"_extraData","type":"bytes"}],"name":"lzReceive","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"srcEid","type":"uint32"},{"internalType":"bytes32","name":"sender","type":"bytes32"},{"internalType":"uint64","name":"nonce","type":"uint64"}],"internalType":"struct Origin","name":"_origin","type":"tuple"},{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"bytes32","name":"_guid","type":"bytes32"},{"internalType":"uint256","name":"_gas","type":"uint256"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"bytes","name":"_message","type":"bytes"},{"internalType":"bytes","name":"_extraData","type":"bytes"},{"internalType":"bytes","name":"_reason","type":"bytes"}],"name":"lzReceiveAlert","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lzToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nativeToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"},{"internalType":"uint32","name":"_dstEid","type":"uint32"},{"internalType":"bytes32","name":"_receiver","type":"bytes32"}],"name":"nextGuid","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_oapp","type":"address"},{"internalType":"uint32","name":"_srcEid","type":"uint32"},{"internalType":"bytes32","name":"_sender","type":"bytes32"},{"internalType":"uint64","name":"_nonce","type":"uint64"},{"internalType":"bytes32","name":"_payloadHash","type":"bytes32"}],"name":"nilify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint32","name":"dstEid","type":"uint32"},{"internalType":"bytes32","name":"receiver","type":"bytes32"}],"name":"outboundNonce","outputs":[{"internalType":"uint64","name":"nonce","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"dstEid","type":"uint32"},{"internalType":"bytes32","name":"receiver","type":"bytes32"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes","name":"options","type":"bytes"},{"internalType":"bool","name":"payInLzToken","type":"bool"}],"internalType":"struct MessagingParams","name":"_params","type":"tuple"},{"internalType":"address","name":"_sender","type":"address"}],"name":"quote","outputs":[{"components":[{"internalType":"uint256","name":"nativeFee","type":"uint256"},{"internalType":"uint256","name":"lzTokenFee","type":"uint256"}],"internalType":"struct MessagingFee","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint32","name":"srcEid","type":"uint32"}],"name":"receiveLibraryTimeout","outputs":[{"internalType":"address","name":"lib","type":"address"},{"internalType":"uint256","name":"expiry","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"recoverToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_lib","type":"address"}],"name":"registerLibrary","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"dstEid","type":"uint32"},{"internalType":"bytes32","name":"receiver","type":"bytes32"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes","name":"options","type":"bytes"},{"internalType":"bool","name":"payInLzToken","type":"bool"}],"internalType":"struct MessagingParams","name":"_params","type":"tuple"},{"internalType":"address","name":"_refundAddress","type":"address"}],"name":"send","outputs":[{"components":[{"internalType":"bytes32","name":"guid","type":"bytes32"},{"internalType":"uint64","name":"nonce","type":"uint64"},{"components":[{"internalType":"uint256","name":"nativeFee","type":"uint256"},{"internalType":"uint256","name":"lzTokenFee","type":"uint256"}],"internalType":"struct MessagingFee","name":"fee","type":"tuple"}],"internalType":"struct MessagingReceipt","name":"","type":"tuple"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"bytes32","name":"_guid","type":"bytes32"},{"internalType":"uint16","name":"_index","type":"uint16"},{"internalType":"bytes","name":"_message","type":"bytes"}],"name":"sendCompose","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_oapp","type":"address"},{"internalType":"address","name":"_lib","type":"address"},{"components":[{"internalType":"uint32","name":"eid","type":"uint32"},{"internalType":"uint32","name":"configType","type":"uint32"},{"internalType":"bytes","name":"config","type":"bytes"}],"internalType":"struct SetConfigParam[]","name":"_params","type":"tuple[]"}],"name":"setConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"_eid","type":"uint32"},{"internalType":"address","name":"_newLib","type":"address"},{"internalType":"uint256","name":"_gracePeriod","type":"uint256"}],"name":"setDefaultReceiveLibrary","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"_eid","type":"uint32"},{"internalType":"address","name":"_lib","type":"address"},{"internalType":"uint256","name":"_expiry","type":"uint256"}],"name":"setDefaultReceiveLibraryTimeout","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"_eid","type":"uint32"},{"internalType":"address","name":"_newLib","type":"address"}],"name":"setDefaultSendLibrary","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_delegate","type":"address"}],"name":"setDelegate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_lzToken","type":"address"}],"name":"setLzToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_oapp","type":"address"},{"internalType":"uint32","name":"_eid","type":"uint32"},{"internalType":"address","name":"_newLib","type":"address"},{"internalType":"uint256","name":"_gracePeriod","type":"uint256"}],"name":"setReceiveLibrary","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_oapp","type":"address"},{"internalType":"uint32","name":"_eid","type":"uint32"},{"internalType":"address","name":"_lib","type":"address"},{"internalType":"uint256","name":"_expiry","type":"uint256"}],"name":"setReceiveLibraryTimeout","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_oapp","type":"address"},{"internalType":"uint32","name":"_eid","type":"uint32"},{"internalType":"address","name":"_newLib","type":"address"}],"name":"setSendLibrary","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_oapp","type":"address"},{"internalType":"uint32","name":"_srcEid","type":"uint32"},{"internalType":"bytes32","name":"_sender","type":"bytes32"},{"internalType":"uint64","name":"_nonce","type":"uint64"}],"name":"skip","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"srcEid","type":"uint32"},{"internalType":"bytes32","name":"sender","type":"bytes32"},{"internalType":"uint64","name":"nonce","type":"uint64"}],"internalType":"struct Origin","name":"_origin","type":"tuple"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"verifiable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"srcEid","type":"uint32"},{"internalType":"bytes32","name":"sender","type":"bytes32"},{"internalType":"uint64","name":"nonce","type":"uint64"}],"internalType":"struct Origin","name":"_origin","type":"tuple"},{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"bytes32","name":"_payloadHash","type":"bytes32"}],"name":"verify","outputs":[],"stateMutability":"nonpayable","type":"function"}]} diff --git a/workers/abi/ReceiveLibUln302.json b/workers/abi/ReceiveLibUln302.json new file mode 100644 index 00000000..9b9ad405 --- /dev/null +++ b/workers/abi/ReceiveLibUln302.json @@ -0,0 +1 @@ +{"abi":[{"inputs":[{"internalType":"address","name":"_endpoint","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"LZ_MessageLib_OnlyEndpoint","type":"error"},{"inputs":[],"name":"LZ_ULN_AtLeastOneDVN","type":"error"},{"inputs":[{"internalType":"uint32","name":"configType","type":"uint32"}],"name":"LZ_ULN_InvalidConfigType","type":"error"},{"inputs":[],"name":"LZ_ULN_InvalidConfirmations","type":"error"},{"inputs":[],"name":"LZ_ULN_InvalidEid","type":"error"},{"inputs":[],"name":"LZ_ULN_InvalidOptionalDVNCount","type":"error"},{"inputs":[],"name":"LZ_ULN_InvalidOptionalDVNThreshold","type":"error"},{"inputs":[],"name":"LZ_ULN_InvalidPacketHeader","type":"error"},{"inputs":[],"name":"LZ_ULN_InvalidPacketVersion","type":"error"},{"inputs":[],"name":"LZ_ULN_InvalidRequiredDVNCount","type":"error"},{"inputs":[],"name":"LZ_ULN_Unsorted","type":"error"},{"inputs":[{"internalType":"uint32","name":"eid","type":"uint32"}],"name":"LZ_ULN_UnsupportedEid","type":"error"},{"inputs":[],"name":"LZ_ULN_Verifying","type":"error"},{"anonymous":false,"inputs":[{"components":[{"internalType":"uint32","name":"eid","type":"uint32"},{"components":[{"internalType":"uint64","name":"confirmations","type":"uint64"},{"internalType":"uint8","name":"requiredDVNCount","type":"uint8"},{"internalType":"uint8","name":"optionalDVNCount","type":"uint8"},{"internalType":"uint8","name":"optionalDVNThreshold","type":"uint8"},{"internalType":"address[]","name":"requiredDVNs","type":"address[]"},{"internalType":"address[]","name":"optionalDVNs","type":"address[]"}],"internalType":"struct UlnConfig","name":"config","type":"tuple"}],"indexed":false,"internalType":"struct SetDefaultUlnConfigParam[]","name":"params","type":"tuple[]"}],"name":"DefaultUlnConfigsSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"dvn","type":"address"},{"indexed":false,"internalType":"bytes","name":"header","type":"bytes"},{"indexed":false,"internalType":"uint256","name":"confirmations","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"proofHash","type":"bytes32"}],"name":"PayloadVerified","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oapp","type":"address"},{"indexed":false,"internalType":"uint32","name":"eid","type":"uint32"},{"components":[{"internalType":"uint64","name":"confirmations","type":"uint64"},{"internalType":"uint8","name":"requiredDVNCount","type":"uint8"},{"internalType":"uint8","name":"optionalDVNCount","type":"uint8"},{"internalType":"uint8","name":"optionalDVNThreshold","type":"uint8"},{"internalType":"address[]","name":"requiredDVNs","type":"address[]"},{"internalType":"address[]","name":"optionalDVNs","type":"address[]"}],"indexed":false,"internalType":"struct UlnConfig","name":"config","type":"tuple"}],"name":"UlnConfigSet","type":"event"},{"inputs":[{"internalType":"bytes","name":"_packetHeader","type":"bytes"},{"internalType":"uint32","name":"_localEid","type":"uint32"}],"name":"assertHeader","outputs":[],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes","name":"_packetHeader","type":"bytes"},{"internalType":"bytes32","name":"_payloadHash","type":"bytes32"}],"name":"commitVerification","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_oapp","type":"address"},{"internalType":"uint32","name":"_remoteEid","type":"uint32"}],"name":"getAppUlnConfig","outputs":[{"components":[{"internalType":"uint64","name":"confirmations","type":"uint64"},{"internalType":"uint8","name":"requiredDVNCount","type":"uint8"},{"internalType":"uint8","name":"optionalDVNCount","type":"uint8"},{"internalType":"uint8","name":"optionalDVNThreshold","type":"uint8"},{"internalType":"address[]","name":"requiredDVNs","type":"address[]"},{"internalType":"address[]","name":"optionalDVNs","type":"address[]"}],"internalType":"struct UlnConfig","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"_eid","type":"uint32"},{"internalType":"address","name":"_oapp","type":"address"},{"internalType":"uint32","name":"_configType","type":"uint32"}],"name":"getConfig","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_oapp","type":"address"},{"internalType":"uint32","name":"_remoteEid","type":"uint32"}],"name":"getUlnConfig","outputs":[{"components":[{"internalType":"uint64","name":"confirmations","type":"uint64"},{"internalType":"uint8","name":"requiredDVNCount","type":"uint8"},{"internalType":"uint8","name":"optionalDVNCount","type":"uint8"},{"internalType":"uint8","name":"optionalDVNThreshold","type":"uint8"},{"internalType":"address[]","name":"requiredDVNs","type":"address[]"},{"internalType":"address[]","name":"optionalDVNs","type":"address[]"}],"internalType":"struct UlnConfig","name":"rtnConfig","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"headerHash","type":"bytes32"},{"internalType":"bytes32","name":"payloadHash","type":"bytes32"},{"internalType":"address","name":"dvn","type":"address"}],"name":"hashLookup","outputs":[{"internalType":"bool","name":"submitted","type":"bool"},{"internalType":"uint64","name":"confirmations","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"_eid","type":"uint32"}],"name":"isSupportedEid","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"messageLibType","outputs":[{"internalType":"enum MessageLibType","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_oapp","type":"address"},{"components":[{"internalType":"uint32","name":"eid","type":"uint32"},{"internalType":"uint32","name":"configType","type":"uint32"},{"internalType":"bytes","name":"config","type":"bytes"}],"internalType":"struct SetConfigParam[]","name":"_params","type":"tuple[]"}],"name":"setConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"eid","type":"uint32"},{"components":[{"internalType":"uint64","name":"confirmations","type":"uint64"},{"internalType":"uint8","name":"requiredDVNCount","type":"uint8"},{"internalType":"uint8","name":"optionalDVNCount","type":"uint8"},{"internalType":"uint8","name":"optionalDVNThreshold","type":"uint8"},{"internalType":"address[]","name":"requiredDVNs","type":"address[]"},{"internalType":"address[]","name":"optionalDVNs","type":"address[]"}],"internalType":"struct UlnConfig","name":"config","type":"tuple"}],"internalType":"struct SetDefaultUlnConfigParam[]","name":"_params","type":"tuple[]"}],"name":"setDefaultUlnConfigs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"_interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint64","name":"confirmations","type":"uint64"},{"internalType":"uint8","name":"requiredDVNCount","type":"uint8"},{"internalType":"uint8","name":"optionalDVNCount","type":"uint8"},{"internalType":"uint8","name":"optionalDVNThreshold","type":"uint8"},{"internalType":"address[]","name":"requiredDVNs","type":"address[]"},{"internalType":"address[]","name":"optionalDVNs","type":"address[]"}],"internalType":"struct UlnConfig","name":"_config","type":"tuple"},{"internalType":"bytes32","name":"_headerHash","type":"bytes32"},{"internalType":"bytes32","name":"_payloadHash","type":"bytes32"}],"name":"verifiable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_packetHeader","type":"bytes"},{"internalType":"bytes32","name":"_payloadHash","type":"bytes32"},{"internalType":"uint64","name":"_confirmations","type":"uint64"}],"name":"verify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"uint64","name":"major","type":"uint64"},{"internalType":"uint8","name":"minor","type":"uint8"},{"internalType":"uint8","name":"endpointVersion","type":"uint8"}],"stateMutability":"pure","type":"function"}]} diff --git a/workers/abi/SendLibUln302.json b/workers/abi/SendLibUln302.json new file mode 100644 index 00000000..ed8a8f21 --- /dev/null +++ b/workers/abi/SendLibUln302.json @@ -0,0 +1 @@ +{"abi":[{"inputs":[{"internalType":"address","name":"_endpoint","type":"address"},{"internalType":"uint256","name":"_treasuryGasLimit","type":"uint256"},{"internalType":"uint256","name":"_treasuryGasForFeeCap","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"DVN_InvalidDVNIdx","type":"error"},{"inputs":[{"internalType":"uint256","name":"cursor","type":"uint256"}],"name":"DVN_InvalidDVNOptions","type":"error"},{"inputs":[],"name":"LZ_MessageLib_CannotWithdrawAltToken","type":"error"},{"inputs":[{"internalType":"uint256","name":"requested","type":"uint256"},{"internalType":"uint256","name":"available","type":"uint256"}],"name":"LZ_MessageLib_InvalidAmount","type":"error"},{"inputs":[],"name":"LZ_MessageLib_InvalidExecutor","type":"error"},{"inputs":[{"internalType":"uint256","name":"actual","type":"uint256"},{"internalType":"uint256","name":"max","type":"uint256"}],"name":"LZ_MessageLib_InvalidMessageSize","type":"error"},{"inputs":[],"name":"LZ_MessageLib_NotTreasury","type":"error"},{"inputs":[],"name":"LZ_MessageLib_OnlyEndpoint","type":"error"},{"inputs":[],"name":"LZ_MessageLib_TransferFailed","type":"error"},{"inputs":[],"name":"LZ_MessageLib_ZeroMessageSize","type":"error"},{"inputs":[],"name":"LZ_ULN_AtLeastOneDVN","type":"error"},{"inputs":[{"internalType":"uint32","name":"configType","type":"uint32"}],"name":"LZ_ULN_InvalidConfigType","type":"error"},{"inputs":[],"name":"LZ_ULN_InvalidConfirmations","type":"error"},{"inputs":[],"name":"LZ_ULN_InvalidLegacyType1Option","type":"error"},{"inputs":[],"name":"LZ_ULN_InvalidLegacyType2Option","type":"error"},{"inputs":[],"name":"LZ_ULN_InvalidOptionalDVNCount","type":"error"},{"inputs":[],"name":"LZ_ULN_InvalidOptionalDVNThreshold","type":"error"},{"inputs":[],"name":"LZ_ULN_InvalidRequiredDVNCount","type":"error"},{"inputs":[{"internalType":"uint8","name":"workerId","type":"uint8"}],"name":"LZ_ULN_InvalidWorkerId","type":"error"},{"inputs":[{"internalType":"uint256","name":"cursor","type":"uint256"}],"name":"LZ_ULN_InvalidWorkerOptions","type":"error"},{"inputs":[],"name":"LZ_ULN_Unsorted","type":"error"},{"inputs":[{"internalType":"uint32","name":"eid","type":"uint32"}],"name":"LZ_ULN_UnsupportedEid","type":"error"},{"inputs":[{"internalType":"uint16","name":"optionType","type":"uint16"}],"name":"LZ_ULN_UnsupportedOptionType","type":"error"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Transfer_NativeFailed","type":"error"},{"inputs":[],"name":"Transfer_ToAddressIsZero","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"requiredDVNs","type":"address[]"},{"indexed":false,"internalType":"address[]","name":"optionalDVNs","type":"address[]"},{"indexed":false,"internalType":"uint256[]","name":"fees","type":"uint256[]"}],"name":"DVNFeePaid","type":"event"},{"anonymous":false,"inputs":[{"components":[{"internalType":"uint32","name":"eid","type":"uint32"},{"components":[{"internalType":"uint32","name":"maxMessageSize","type":"uint32"},{"internalType":"address","name":"executor","type":"address"}],"internalType":"struct ExecutorConfig","name":"config","type":"tuple"}],"indexed":false,"internalType":"struct SetDefaultExecutorConfigParam[]","name":"params","type":"tuple[]"}],"name":"DefaultExecutorConfigsSet","type":"event"},{"anonymous":false,"inputs":[{"components":[{"internalType":"uint32","name":"eid","type":"uint32"},{"components":[{"internalType":"uint64","name":"confirmations","type":"uint64"},{"internalType":"uint8","name":"requiredDVNCount","type":"uint8"},{"internalType":"uint8","name":"optionalDVNCount","type":"uint8"},{"internalType":"uint8","name":"optionalDVNThreshold","type":"uint8"},{"internalType":"address[]","name":"requiredDVNs","type":"address[]"},{"internalType":"address[]","name":"optionalDVNs","type":"address[]"}],"internalType":"struct UlnConfig","name":"config","type":"tuple"}],"indexed":false,"internalType":"struct SetDefaultUlnConfigParam[]","name":"params","type":"tuple[]"}],"name":"DefaultUlnConfigsSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oapp","type":"address"},{"indexed":false,"internalType":"uint32","name":"eid","type":"uint32"},{"components":[{"internalType":"uint32","name":"maxMessageSize","type":"uint32"},{"internalType":"address","name":"executor","type":"address"}],"indexed":false,"internalType":"struct ExecutorConfig","name":"config","type":"tuple"}],"name":"ExecutorConfigSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"executor","type":"address"},{"indexed":false,"internalType":"uint256","name":"fee","type":"uint256"}],"name":"ExecutorFeePaid","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"lzToken","type":"address"},{"indexed":false,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"LzTokenFeeWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"worker","type":"address"},{"indexed":false,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"NativeFeeWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newTreasuryNativeFeeCap","type":"uint256"}],"name":"TreasuryNativeFeeCapSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"treasury","type":"address"}],"name":"TreasurySet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oapp","type":"address"},{"indexed":false,"internalType":"uint32","name":"eid","type":"uint32"},{"components":[{"internalType":"uint64","name":"confirmations","type":"uint64"},{"internalType":"uint8","name":"requiredDVNCount","type":"uint8"},{"internalType":"uint8","name":"optionalDVNCount","type":"uint8"},{"internalType":"uint8","name":"optionalDVNThreshold","type":"uint8"},{"internalType":"address[]","name":"requiredDVNs","type":"address[]"},{"internalType":"address[]","name":"optionalDVNs","type":"address[]"}],"indexed":false,"internalType":"struct UlnConfig","name":"config","type":"tuple"}],"name":"UlnConfigSet","type":"event"},{"inputs":[{"internalType":"address","name":"oapp","type":"address"},{"internalType":"uint32","name":"eid","type":"uint32"}],"name":"executorConfigs","outputs":[{"internalType":"uint32","name":"maxMessageSize","type":"uint32"},{"internalType":"address","name":"executor","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"worker","type":"address"}],"name":"fees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_oapp","type":"address"},{"internalType":"uint32","name":"_remoteEid","type":"uint32"}],"name":"getAppUlnConfig","outputs":[{"components":[{"internalType":"uint64","name":"confirmations","type":"uint64"},{"internalType":"uint8","name":"requiredDVNCount","type":"uint8"},{"internalType":"uint8","name":"optionalDVNCount","type":"uint8"},{"internalType":"uint8","name":"optionalDVNThreshold","type":"uint8"},{"internalType":"address[]","name":"requiredDVNs","type":"address[]"},{"internalType":"address[]","name":"optionalDVNs","type":"address[]"}],"internalType":"struct UlnConfig","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"_eid","type":"uint32"},{"internalType":"address","name":"_oapp","type":"address"},{"internalType":"uint32","name":"_configType","type":"uint32"}],"name":"getConfig","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_oapp","type":"address"},{"internalType":"uint32","name":"_remoteEid","type":"uint32"}],"name":"getExecutorConfig","outputs":[{"components":[{"internalType":"uint32","name":"maxMessageSize","type":"uint32"},{"internalType":"address","name":"executor","type":"address"}],"internalType":"struct ExecutorConfig","name":"rtnConfig","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_oapp","type":"address"},{"internalType":"uint32","name":"_remoteEid","type":"uint32"}],"name":"getUlnConfig","outputs":[{"components":[{"internalType":"uint64","name":"confirmations","type":"uint64"},{"internalType":"uint8","name":"requiredDVNCount","type":"uint8"},{"internalType":"uint8","name":"optionalDVNCount","type":"uint8"},{"internalType":"uint8","name":"optionalDVNThreshold","type":"uint8"},{"internalType":"address[]","name":"requiredDVNs","type":"address[]"},{"internalType":"address[]","name":"optionalDVNs","type":"address[]"}],"internalType":"struct UlnConfig","name":"rtnConfig","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"_eid","type":"uint32"}],"name":"isSupportedEid","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"messageLibType","outputs":[{"internalType":"enum MessageLibType","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint64","name":"nonce","type":"uint64"},{"internalType":"uint32","name":"srcEid","type":"uint32"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint32","name":"dstEid","type":"uint32"},{"internalType":"bytes32","name":"receiver","type":"bytes32"},{"internalType":"bytes32","name":"guid","type":"bytes32"},{"internalType":"bytes","name":"message","type":"bytes"}],"internalType":"struct Packet","name":"_packet","type":"tuple"},{"internalType":"bytes","name":"_options","type":"bytes"},{"internalType":"bool","name":"_payInLzToken","type":"bool"}],"name":"quote","outputs":[{"components":[{"internalType":"uint256","name":"nativeFee","type":"uint256"},{"internalType":"uint256","name":"lzTokenFee","type":"uint256"}],"internalType":"struct MessagingFee","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint64","name":"nonce","type":"uint64"},{"internalType":"uint32","name":"srcEid","type":"uint32"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint32","name":"dstEid","type":"uint32"},{"internalType":"bytes32","name":"receiver","type":"bytes32"},{"internalType":"bytes32","name":"guid","type":"bytes32"},{"internalType":"bytes","name":"message","type":"bytes"}],"internalType":"struct Packet","name":"_packet","type":"tuple"},{"internalType":"bytes","name":"_options","type":"bytes"},{"internalType":"bool","name":"_payInLzToken","type":"bool"}],"name":"send","outputs":[{"components":[{"internalType":"uint256","name":"nativeFee","type":"uint256"},{"internalType":"uint256","name":"lzTokenFee","type":"uint256"}],"internalType":"struct MessagingFee","name":"","type":"tuple"},{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_oapp","type":"address"},{"components":[{"internalType":"uint32","name":"eid","type":"uint32"},{"internalType":"uint32","name":"configType","type":"uint32"},{"internalType":"bytes","name":"config","type":"bytes"}],"internalType":"struct SetConfigParam[]","name":"_params","type":"tuple[]"}],"name":"setConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"eid","type":"uint32"},{"components":[{"internalType":"uint32","name":"maxMessageSize","type":"uint32"},{"internalType":"address","name":"executor","type":"address"}],"internalType":"struct ExecutorConfig","name":"config","type":"tuple"}],"internalType":"struct SetDefaultExecutorConfigParam[]","name":"_params","type":"tuple[]"}],"name":"setDefaultExecutorConfigs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"eid","type":"uint32"},{"components":[{"internalType":"uint64","name":"confirmations","type":"uint64"},{"internalType":"uint8","name":"requiredDVNCount","type":"uint8"},{"internalType":"uint8","name":"optionalDVNCount","type":"uint8"},{"internalType":"uint8","name":"optionalDVNThreshold","type":"uint8"},{"internalType":"address[]","name":"requiredDVNs","type":"address[]"},{"internalType":"address[]","name":"optionalDVNs","type":"address[]"}],"internalType":"struct UlnConfig","name":"config","type":"tuple"}],"internalType":"struct SetDefaultUlnConfigParam[]","name":"_params","type":"tuple[]"}],"name":"setDefaultUlnConfigs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_treasury","type":"address"}],"name":"setTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newTreasuryNativeFeeCap","type":"uint256"}],"name":"setTreasuryNativeFeeCap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"_interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasury","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"uint64","name":"major","type":"uint64"},{"internalType":"uint8","name":"minor","type":"uint8"},{"internalType":"uint8","name":"endpointVersion","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_lzToken","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawLzTokenFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]} diff --git a/workers/src/abi.rs b/workers/src/abi.rs new file mode 100644 index 00000000..b0170fa4 --- /dev/null +++ b/workers/src/abi.rs @@ -0,0 +1,41 @@ +//! Types create from the JSON ABI files. +//! +//! For example, to be able to decode the logs' data, or call contracts' methods. +//! +//! To obtain the corresponding ABI, there are two ways: +//! - Manually downloading the ABI from the contract's source code (we use this one for now); +//! - Using `alloy` to download the ABI from a contract's address (if possible). + +use alloy::sol; +use serde::{Deserialize, Serialize}; + +sol!( + #[allow(missing_docs)] + #[sol(abi, rpc)] + #[derive(Debug, Serialize, Deserialize)] + SendLibraryAbi, + "abi/SendLibUln302.json" +); + +sol!( + #[allow(missing_docs)] + #[sol(abi, rpc)] + #[derive(Debug, Serialize, Deserialize)] + L0V2EndpointAbi, + "abi/L0V2Endpoint.json" +); + +//sol!( +// #[allow(missing_docs)] +// #[sol(abi)] +// #[derive(Debug, PartialEq, Eq)] +// struct Packet { +// uint64 nonce; +// uint32 src_eid; +// bytes32 sender; +// uint32 dst_eid; +// bytes32 receiver; +// bytes32 guid; +// bytes message; +// } +//); diff --git a/workers/src/bin/dvn.rs b/workers/src/bin/dvn.rs new file mode 100644 index 00000000..c6d3fe31 --- /dev/null +++ b/workers/src/bin/dvn.rs @@ -0,0 +1,125 @@ +//! Main offchain workflow for Nuff DVN. + +use alloy::primitives::U256; +use eyre::{OptionExt, Result}; +use futures::stream::StreamExt; +use tracing::{debug, error, info, warn}; +use tracing_subscriber::EnvFilter; +use workers::{ + abi::{L0V2EndpointAbi::PacketSent, SendLibraryAbi::DVNFeePaid}, + chain::{ + connections::{build_subscriptions, get_abi_from_path, get_http_provider}, + contracts::{create_contract_instance, query_already_verified, query_confirmations, verify}, + }, + data::dvn::Dvn, +}; + +#[tokio::main] +async fn main() -> Result<()> { + // Initialize tracing + tracing_subscriber::fmt() + .with_target(false) + .with_env_filter(EnvFilter::from_default_env()) + .init(); + + let mut dvn_data = Dvn::new_from_env()?; + + // Create the WS subscriptions for listening to the events. + let (_provider, mut endpoint_stream, mut sendlib_stream) = build_subscriptions(&dvn_data.config).await?; + + // Create an HTTP provider to call contract functions. + let http_provider = get_http_provider(&dvn_data.config)?; + + // Get the relevant contract ABI, and create contract. + let receivelib_abi = get_abi_from_path("./abi/ReceiveLibUln302.json")?; + let receivelib_contract = + create_contract_instance(dvn_data.config.receivelib_uln302_addr, http_provider, receivelib_abi)?; + + info!("Listening to chain events..."); + + // FIXME: refactor the operations from this loop into smaller, testable containers. + loop { + dvn_data.listening(); + tokio::select! { + Some(log) = endpoint_stream.next() => { + match log.log_decode::() { + Err(e) => { + error!("Received a `PacketSent` event but failed to decode it: {:?}", e); + } + Ok(inner_log) => { + debug!("PacketSent event found and decoded."); + dvn_data.packet_received(inner_log.data().clone()); + }, + } + } + Some(log) = sendlib_stream.next() => { + match log.log_decode::() { + Err(e) => { + error!("Received a `DVNFeePaid` event but failed to decode it: {:?}", e); + } + Ok(inner_log) if dvn_data.packet.is_some() => { + info!("DVNFeePaid event found and decoded."); + let required_dvns = &inner_log.inner.requiredDVNs; + let own_dvn_addr = dvn_data.config.dvn_addr; + + if required_dvns.contains(&own_dvn_addr) { + debug!("Found DVN in required DVNs."); + + // Query how many confirmations are required. + let eid = U256::from(dvn_data.config.network_eid); + let required_confirmations = query_confirmations(&receivelib_contract, eid).await?; + + // Prepare the header hash. + let header_hash = dvn_data.get_header_hash(); + // Prepate the payload hash. + let message_hash = dvn_data.get_message_hash(); + + // Check if the info from the payload could have been extracted. + match (header_hash, message_hash) { + (Some(header_hash), Some(message_hash)) => { + let already_verified = query_already_verified( + &receivelib_contract, + own_dvn_addr, + header_hash.as_ref(), + message_hash.as_ref(), + required_confirmations, + ) + .await?; + + if already_verified { + debug!("Packet already verified."); + } else { + dvn_data.verifying(); + debug!("Packet NOT verified. Calling verification."); + + // FIXME: logic for NFFL verification + + verify( + &receivelib_contract, + dvn_data.get_header().ok_or_eyre("Cannot extract header from payload")?, + message_hash.as_ref(), + required_confirmations, + ).await?; + } + } + (_, None) => { + error!("Cannot hash payload"); + } + (None, _) => { + error!("Cannot hash message"); + } + } + } else { + dvn_data.reset_packet(); + } + + } + Ok(_)=> { + warn!("Received a `DVNFeePaid` event but don't have information about the `Packet` to be verified"); + } + } + }, + } + dvn_data.reset_packet(); + } +} diff --git a/workers/src/chain/connections.rs b/workers/src/chain/connections.rs new file mode 100644 index 00000000..b1763323 --- /dev/null +++ b/workers/src/chain/connections.rs @@ -0,0 +1,66 @@ +//! Utilities related to connection with a blockchain. + +use crate::{ + chain::HttpProvider, + config::{DVNConfig, DVNEvent}, +}; +use alloy::{ + eips::BlockNumberOrTag, + json_abi::JsonAbi, + providers::{Provider, ProviderBuilder, RootProvider, WsConnect}, + pubsub::{PubSubFrontend, SubscriptionStream}, + rpc::types::{Filter, Log}, +}; +use eyre::{OptionExt, Result}; + +/// Create the subscriptions for the DVN workflow. +pub async fn build_subscriptions( + config: &DVNConfig, +) -> Result<( + RootProvider, + SubscriptionStream, + SubscriptionStream, +)> { + // Create the provider + let ws = WsConnect::new(config.ws_rpc_url.clone()); + let provider = ProviderBuilder::new().on_ws(ws).await?; + + // layerzero endpoint filter + let packet_filter = Filter::new() + .address(config.l0_endpoint_addr) + .event(DVNEvent::PacketSent.as_ref()) + .from_block(BlockNumberOrTag::Latest); + + // messagelib endpoint filter + let fee_paid_filter = Filter::new() + .address(config.sendlib_uln302_addr) + .event(DVNEvent::FeePaid.as_ref()) + .from_block(BlockNumberOrTag::Latest); + + // Subscribe to logs + let endpoint_sub = provider.subscribe_logs(&packet_filter).await?; + let sendlib_sub = provider.subscribe_logs(&fee_paid_filter).await?; + + // Create some streams from the subscriptions + let endpoint_stream = endpoint_sub.into_stream(); + let sendlib_stream = sendlib_sub.into_stream(); + + Ok((provider, endpoint_stream, sendlib_stream)) +} + +/// Load the MessageLib ABI. +pub fn get_abi_from_path(path: &str) -> Result { + // Get the SendLib ABI + let artifact = std::fs::read(path)?; + let json: serde_json::Value = serde_json::from_slice(&artifact)?; + // SAFETY: Assume `unwrap` is safe since the key has been harcoded + let abi_value = json.get("abi").ok_or_eyre("ABI not found in artifact")?; + let abi = serde_json::from_str(&abi_value.to_string())?; + Ok(abi) +} + +/// Construct an HTTP provider given the config. +pub fn get_http_provider(config: &DVNConfig) -> Result { + let http_provider = ProviderBuilder::new().on_http(config.http_rpc_url.to_string().parse()?); + Ok(http_provider) +} diff --git a/workers/src/chain/contracts.rs b/workers/src/chain/contracts.rs new file mode 100644 index 00000000..51d44c80 --- /dev/null +++ b/workers/src/chain/contracts.rs @@ -0,0 +1,145 @@ +//! Utilities for interacting with onchain contracts. + +use crate::chain::{ContractInst, HttpProvider}; +use alloy::{ + contract::{ContractInstance, Interface}, + dyn_abi::DynSolValue, + json_abi::JsonAbi, + network::Ethereum, + primitives::{keccak256, Address, U256}, + transports::http::{Client, Http}, +}; +use eyre::{eyre, OptionExt, Result}; +use tracing::{debug, error}; + +/// Create a contract instance from the ABI to interact with on-chain instance. +pub fn create_contract_instance(addr: Address, http_provider: HttpProvider, abi: JsonAbi) -> Result { + let contract: ContractInstance, _, Ethereum> = + ContractInstance::new(addr, http_provider, Interface::new(abi)); + Ok(contract) +} + +/// Get the address of the MessageLib on the destination chain +pub async fn get_messagelib_addr(contract: &ContractInst, eid: U256) -> Result
{ + // Call the `getUlnConfig` function on the contract + let receive_library = contract + .function( + "getReceiveLibrary", + &[DynSolValue::Address(*contract.address()), DynSolValue::Uint(eid, 32)], + )? + .call() + .await?; + + match receive_library + .first() + .ok_or_eyre("ReceiveLibrary not found in contract")? + { + DynSolValue::Address(address) if address.len() == 20 => Ok(*address), + _ => { + error!("Failed to get a valid address"); + Err(eyre!("Failed to get a valid address")) + } + } +} + +/// Get the number of required confirmations by the ULN. +/// +/// The value returned is a solidity `UlnConfig[]` with, at least, one value. +/// +/// See: https://github.com/LayerZero-Labs/LayerZero-v2/blob/main/packages/layerzero-v2/evm/messagelib/contracts/uln/UlnBase.sol +/// The struct `UlnConfig` is defined as follows: +/// +/// ```solidity +/// struct UlnConfig { +/// uint64 confirmations; +/// uint8 requiredDVNCount; +/// uint8 optionalDVNCount; +/// uint8 optionalDVNThreshold; +/// address[] requiredDVNs; +/// address[] optionalDVNs; +/// } +/// ``` +/// +/// and we require only the first value. +pub async fn query_confirmations(contract: &ContractInst, eid: U256) -> Result { + // Call the `getUlnConfig` function on the contract + let uln_config = contract + .function( + "getUlnConfig", + &[DynSolValue::Address(*contract.address()), DynSolValue::Uint(eid, 32)], + )? + .call() + .await?; + + match &uln_config.first().ok_or_eyre("ULN config not found in contract")? { + DynSolValue::Tuple(tupled_int) => { + let value = tupled_int[0] + .as_uint() + .ok_or_eyre("Cannot parse response from MessageLib")?; + Ok(value.0) + } + _ => { + error!("Failed to get confirmations"); + Err(eyre!("Failed to get confirmations")) + } + } +} + +/// Idempotent check to see if there's work to do for the DVN. +pub async fn query_already_verified( + contract: &ContractInst, + dvn_address: Address, + header_hash: &[u8], + payload_hash: &[u8], + required_confirmations: U256, +) -> Result { + // Call the `_verified` function on the 302 contract, to check if the DVN has already verified + // the packet. + debug!("Calling _verified on contract's ReceiveLib"); + + let contract_state = contract + .function( + "_verified", + &[ + DynSolValue::Address(dvn_address), // DVN address + DynSolValue::Bytes(header_hash.to_vec()), // HeaderHash + DynSolValue::Bytes(payload_hash.to_vec()), // PayloadHash + DynSolValue::Uint(required_confirmations, 32), // confirmations + ], + )? + .call() + .await?; + + let packet_state = match contract_state + .first() + .ok_or(eyre!("Empty response when querying `_verified`"))? + { + DynSolValue::Bool(b) => Ok(b), + _ => { + error!("Failed to parse response from ReceiveLib for `_verified`"); + Err(eyre!("Failed to parse response from ReceiveLib for `_verified`")) + } + }?; + + Ok(*packet_state) +} + +pub async fn verify(contract: &ContractInst, packet_header: &[u8], payload: &[u8], confirmations: U256) -> Result<()> { + //// Create the hash of the payload + let payload_hash = keccak256(payload); + + // Call the `verified` function on the contract + let _ = contract + .function( + "verify", + &[ + DynSolValue::Bytes(packet_header.to_vec()), // PacketHeader + DynSolValue::FixedBytes(payload_hash, 32), // PayloadHash + DynSolValue::Uint(confirmations, 64), // Confirmations + ], + )? + .call() + .await?; + + Ok(()) +} diff --git a/workers/src/chain/mod.rs b/workers/src/chain/mod.rs new file mode 100644 index 00000000..b6f18ad3 --- /dev/null +++ b/workers/src/chain/mod.rs @@ -0,0 +1,16 @@ +//! Utilities for interacting with the blockchain. + +use alloy::{ + contract::ContractInstance, + network::Ethereum, + providers::RootProvider, + transports::http::{Client, Http}, +}; + +pub mod connections; +pub mod contracts; + +/// Alias for a contract instance in the Ethereum network. +pub type ContractInst = ContractInstance, RootProvider>, Ethereum>; +/// Alias for an HTTP provider. +pub type HttpProvider = RootProvider>; diff --git a/workers/src/config.rs b/workers/src/config.rs new file mode 100644 index 00000000..6e754aa3 --- /dev/null +++ b/workers/src/config.rs @@ -0,0 +1,63 @@ +//! Configuration for the DVN offchain workflow. + +use alloy::primitives::Address; +use config::Config; +use eyre::Result; +use serde::Deserialize; + +#[derive(Debug, Deserialize)] +pub struct DVNConfig { + /// The Websocket RPC URL to connect to the Ethereum network. + pub ws_rpc_url: String, + /// The HTTP RPC URL to connect to the Ethereum network. + pub http_rpc_url: String, + /// The LayerZero endpoint address. + pub l0_endpoint_addr: Address, + /// The SendLib Ultra Light Node 302 address. + pub sendlib_uln302_addr: Address, + /// The ReceiveLib Ultra Light Node 302 address. + pub receivelib_uln302_addr: Address, + /// The SendLib Ultra Light Node 301 address. + pub sendlib_uln301_addr: Address, + /// The ReceiveLib Ultra Light Node 301 address. + pub receivelib_uln301_addr: Address, + /// The Ethereum network ID. + pub network_eid: u64, + /// Own DVN address. Used to check when the DVN is assigned to a task. + pub dvn_addr: Address, +} + +impl DVNConfig { + /// Load environment variables. + pub fn load_from_env() -> Result { + let settings = Config::builder() + .add_source(config::File::with_name("./config_dvn")) + .build()?; + Ok(settings.try_deserialize::()?) + } +} + +/// Useful events for the DVN workflow. +pub enum DVNEvent { + PacketSent, + FeePaid, +} + +impl AsRef for DVNEvent { + fn as_ref(&self) -> &str { + match self { + DVNEvent::PacketSent => "PacketSent(bytes,bytes,address)", + DVNEvent::FeePaid => "DVNFeePaid(address[],address[],uint256[])", + } + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn load_config_from_env() { + let _conf = DVNConfig::load_from_env().unwrap(); + } +} diff --git a/workers/src/data/bytes_utils.rs b/workers/src/data/bytes_utils.rs new file mode 100644 index 00000000..ade89725 --- /dev/null +++ b/workers/src/data/bytes_utils.rs @@ -0,0 +1,128 @@ +//! Utilities for manipulating byte arrays. + +pub trait BytesUtils { + fn to_u8(&self, start: usize) -> u8; + fn to_u32(&self, start: usize) -> u32; + fn to_u64(&self, start: usize) -> u64; + fn to_bytes32(&self, start: usize) -> &[u8]; + fn to_byte_array(&self, start: usize) -> [u8; N]; +} + +impl BytesUtils for &[u8] { + fn to_u8(&self, start: usize) -> u8 { + self[start] + } + + fn to_u32(&self, start: usize) -> u32 { + let mut bytes: [u8; 4] = [0; 4]; + bytes.copy_from_slice(&self[start..start + 4]); + u32::from_be_bytes(bytes) + } + + fn to_u64(&self, start: usize) -> u64 { + let mut bytes: [u8; 8] = [0; 8]; + bytes.copy_from_slice(&self[start..start + 8]); + u64::from_be_bytes(bytes) + } + + fn to_bytes32(&self, start: usize) -> &[u8] { + &self[start..start + 32] + } + + fn to_byte_array(&self, start: usize) -> [u8; N] { + let mut bytes: [u8; N] = [0; N]; + bytes.copy_from_slice(&self[start..start + N]); + bytes + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_to_u8() { + let bytes = &[1_u8, 2][..]; + assert_eq!(bytes.to_u8(0), 1); + } + + #[test] + fn test_to_u8_start1() { + let bytes = &[1_u8, 2][..]; + assert_eq!(bytes.to_u8(1), 2); + } + + #[test] + fn test_to_u32() { + let bytes = &[1_u8, 1, 1, 1, 2][..]; + assert_eq!(bytes.to_u32(0), 2_u32.pow(24) + 2_u32.pow(16) + 2_u32.pow(8) + 1); + } + + #[test] + fn test_to_u32_start1() { + let bytes = &[1_u8, 1, 1, 1, 2][..]; + assert_eq!(bytes.to_u32(1), 2_u32.pow(24) + 2_u32.pow(16) + 2_u32.pow(8) + 2); + } + + #[test] + fn test_to_u64() { + let bytes = &[1_u8, 1, 1, 1, 1, 1, 1, 1, 2][..]; + assert_eq!( + bytes.to_u64(0), + 2_u64.pow(56) + + 2_u64.pow(48) + + 2_u64.pow(40) + + 2_u64.pow(32) + + 2_u64.pow(24) + + 2_u64.pow(16) + + 2_u64.pow(8) + + 1 + ); + } + + #[test] + fn test_to_u64_start1() { + let bytes = &[1_u8, 1, 1, 1, 1, 1, 1, 1, 2][..]; + assert_eq!( + bytes.to_u64(1), + 2_u64.pow(56) + + 2_u64.pow(48) + + 2_u64.pow(40) + + 2_u64.pow(32) + + 2_u64.pow(24) + + 2_u64.pow(16) + + 2_u64.pow(8) + + 2 + ); + } + + #[test] + fn test_to_bytes32() { + let bytes = &[ + 1_u8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + ][..]; + assert_eq!(bytes.to_bytes32(0), &[1_u8; 32]); + } + + #[test] + fn test_to_bytes32_start1() { + let bytes = &[ + 2_u8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + ][..]; + assert_eq!(bytes.to_bytes32(1), &[1_u8; 32]); + } + + #[test] + fn test_to_byte_array() { + let bytes = &[1_u8; 64][..]; + assert_eq!(bytes.to_byte_array::<32>(0), [1_u8; 32]); + } + + #[test] + fn test_to_byte_array_start1() { + let bytes = &[ + 2_u8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + ][..]; + assert_eq!(bytes.to_byte_array::<32>(1), [1_u8; 32]); + } +} diff --git a/workers/src/data/dvn.rs b/workers/src/data/dvn.rs new file mode 100644 index 00000000..8bb28991 --- /dev/null +++ b/workers/src/data/dvn.rs @@ -0,0 +1,88 @@ +use crate::{ + abi::L0V2EndpointAbi::PacketSent, + config::{self, DVNConfig}, + data::packet_v1_codec::{header, message}, +}; +use alloy::primitives::{keccak256, B256}; +use eyre::{eyre, Result}; +use tracing::debug; + +pub struct Dvn { + pub config: DVNConfig, + pub status: DvnStatus, + pub packet: Option, +} + +pub enum DvnStatus { + Stopped, + Listening, + PacketReceived, + Verifying, +} + +impl Dvn { + pub fn new(config: DVNConfig) -> Self { + Self { + config, + status: DvnStatus::Stopped, + packet: None, + } + } + + pub fn new_from_env() -> Result { + Ok(Dvn::new(config::DVNConfig::load_from_env()?)) + } + + pub fn listening(&mut self) { + self.status = DvnStatus::Listening; + } + + pub fn packet_received(&mut self, packet: PacketSent) { + self.packet = Some(packet); + self.status = DvnStatus::PacketReceived; + } + + pub fn reset_packet(&mut self) { + self.packet = None; + self.status = DvnStatus::Listening; + debug!("DVN not required, stored packet dropped") + } + + pub fn verifying(&mut self) { + self.status = DvnStatus::Verifying; + } + + pub fn get_header(&self) -> Option<&[u8]> { + if let Some(packet) = self.packet.as_ref() { + Some(header(packet.encodedPayload.as_ref())) + } else { + None + } + } + + pub fn get_header_hash(&self) -> Option { + self.packet + .as_ref() + .map(|packet| keccak256(header(packet.encodedPayload.as_ref()))) + } + pub fn get_header_hash_result(&self) -> Result { + if let Some(packet) = self.packet.as_ref() { + Ok(keccak256(header(packet.encodedPayload.as_ref()))) + } else { + Err(eyre!("There's no header to hash")) + } + } + + pub fn get_message_hash(&self) -> Option { + self.packet + .as_ref() + .map(|packet| keccak256(message(packet.encodedPayload.as_ref()))) + } + pub fn get_message_hash_result(&self) -> Result { + if let Some(packet) = self.packet.as_ref() { + Ok(keccak256(message(packet.encodedPayload.as_ref()))) + } else { + Err(eyre!("There's no message to hash")) + } + } +} diff --git a/workers/src/data/mod.rs b/workers/src/data/mod.rs new file mode 100644 index 00000000..fd9b7559 --- /dev/null +++ b/workers/src/data/mod.rs @@ -0,0 +1,3 @@ +pub mod bytes_utils; +pub mod dvn; +pub mod packet_v1_codec; diff --git a/workers/src/data/packet_v1_codec.rs b/workers/src/data/packet_v1_codec.rs new file mode 100644 index 00000000..5b8dcd8b --- /dev/null +++ b/workers/src/data/packet_v1_codec.rs @@ -0,0 +1,239 @@ +//! Encoding and decoding as PacketV1Codec from LayerZero. + +use crate::data::bytes_utils::BytesUtils; + +pub const PACKET_VERSION: u8 = 1; +pub const PACKET_HEADER_SIZE: usize = 81; + +// header (version + nonce + path) +// version +const PACKET_VERSION_OFFSET: usize = 0; +// nonce +const NONCE_OFFSET: usize = 1; +// path +const SRC_EID_OFFSET: usize = 9; +const SENDER_OFFSET: usize = 13; +const DST_EID_OFFSET: usize = 45; +const RECEIVER_OFFSET: usize = 49; +// payload (guid + message) +const GUID_OFFSET: usize = 81; +const MESSAGE_OFFSET: usize = 113; + +/// Packet struct as defined in messagelib. +pub struct Packet { + pub nonce: u64, + pub src_eid: u32, + pub sender: [u8; 32], + pub dst_eid: u32, + pub receiver: [u8; 32], + pub guid: [u8; 32], + pub message: Vec, +} + +/// Encode a whole [`Packet`] into a byte array. +pub fn encode(packet: &Packet) -> Vec { + [ + &PACKET_VERSION.to_be_bytes()[..], + &packet.nonce.to_be_bytes()[..], + &packet.src_eid.to_be_bytes()[..], + &packet.sender.to_vec()[..], + &packet.dst_eid.to_be_bytes()[..], + &packet.receiver[..], + &packet.guid[..], + &packet.message, + ] + .concat() +} + +/// Encode only the [`Packet`]'s header into a byte array. +pub fn encode_packet_header(packet: &Packet) -> Vec { + [ + &PACKET_VERSION.to_be_bytes()[..], + &packet.nonce.to_be_bytes()[..], + &packet.src_eid.to_be_bytes()[..], + &packet.sender.to_vec()[..], + &packet.dst_eid.to_be_bytes()[..], + &packet.receiver[..], + ] + .concat() +} + +pub fn header(packet: &[u8]) -> &[u8] { + &packet[0..GUID_OFFSET] +} + +pub fn version(packet: &[u8]) -> u8 { + packet.to_u8(PACKET_VERSION_OFFSET) +} + +pub fn nonce(packet: &[u8]) -> u64 { + packet.to_u64(NONCE_OFFSET) +} + +pub fn src_eid(packet: &[u8]) -> u32 { + packet.to_u32(SRC_EID_OFFSET) +} + +pub fn sender(packet: &[u8]) -> [u8; 32] { + packet.to_byte_array(SENDER_OFFSET) +} + +pub fn dst_eid(packet: &[u8]) -> u32 { + packet.to_u32(DST_EID_OFFSET) +} + +pub fn receiver(packet: &[u8]) -> [u8; 32] { + packet.to_byte_array(RECEIVER_OFFSET) +} + +pub fn guid(packet: &[u8]) -> [u8; 32] { + packet.to_byte_array(GUID_OFFSET) +} + +pub fn message(packet: &[u8]) -> &[u8] { + &packet[MESSAGE_OFFSET..] +} + +pub fn payload(packet: &[u8]) -> &[u8] { + &packet[GUID_OFFSET..] +} + +#[cfg(test)] +mod tests { + use alloy::hex; + + use super::*; + + #[test] + fn test_encode() { + let packet = Packet { + nonce: 1, + src_eid: 101, + sender: [1; 32], + dst_eid: 102, + receiver: [3; 32], + guid: [2; 32], + message: vec![1, 2, 3], + }; + + let encoded = encode(&packet); + assert_eq!(version(&encoded), PACKET_VERSION); + assert_eq!(nonce(&encoded), packet.nonce); + assert_eq!(src_eid(&encoded), packet.src_eid); + assert_eq!(sender(&encoded), packet.sender); + assert_eq!(dst_eid(&encoded), packet.dst_eid); + assert_eq!(receiver(&encoded), packet.receiver); + assert_eq!(guid(&encoded), packet.guid); + assert_eq!(message(&encoded), packet.message); + + // assert payload, should equal to guid + message + let payload_bytes = [&packet.guid[..], packet.message.as_slice()].concat(); + assert_eq!(payload(&encoded), payload_bytes.as_slice()); + + // assert header, should equal to version + nonce + path + let header_bytes = [ + // version + &PACKET_VERSION.to_be_bytes()[..], + // nonce + &packet.nonce.to_be_bytes()[..], + // path + &packet.src_eid.to_be_bytes()[..], + &packet.sender[..], + &packet.dst_eid.to_be_bytes()[..], + &packet.receiver[..], + ] + .concat(); + assert_eq!(header(&encoded), header_bytes.as_slice()); + + // assert sender + assert_eq!(sender(&encoded), packet.sender); + + // assert receiver + assert_eq!(receiver(&encoded), packet.receiver); + } + + #[test] + fn test_encode_packet_header() { + let packet = Packet { + nonce: 1, + src_eid: 101, + sender: [1; 32], + dst_eid: 102, + receiver: [3; 32], + guid: [2; 32], + message: vec![1, 2, 3], + }; + + let encoded = encode_packet_header(&packet); + assert_eq!(version(&encoded), PACKET_VERSION); + assert_eq!(nonce(&encoded), packet.nonce); + assert_eq!(src_eid(&encoded), packet.src_eid); + assert_eq!(sender(&encoded), packet.sender); + assert_eq!(dst_eid(&encoded), packet.dst_eid); + assert_eq!(receiver(&encoded), packet.receiver); + + // assert header, should equal to version + nonce + path + let header_bytes = [ + // version + &PACKET_VERSION.to_be_bytes()[..], + // nonce + &packet.nonce.to_be_bytes()[..], + // path + &packet.src_eid.to_be_bytes()[..], + &packet.sender[..], + &packet.dst_eid.to_be_bytes()[..], + &packet.receiver[..], + ] + .concat(); + assert_eq!(header(&encoded), header_bytes.as_slice()); + } + + /// Fixture using Typescript package `lz-utilities-v2` from LayerZero. + #[test] + fn decode() { + let packet = hex::decode("0x010000000000012c810000759e00000000000000000000000019cfce47ed54a88614648dc3f19a5980097007dd000075e80000000000000000000000005634c4a5fed09819e3c46d86a965dd9447d86e479527645d4aecaa3325a0225a2b593eea5f0d26a44b97af7276bc0a80ed43047b0200000000000000000000000000000000000000000000000000002d79883d2000000d00000000000000000000000051a9ffd0c6026dcd59b5f2f42cc119deaa7347d0000000000000000e00000d0000000000000000000000005c8fbdbbc01d3474e7e40de14538e1e58fd485b3000000000000206b00").unwrap(); + + let version = version(&packet); + assert_eq!(version, PACKET_VERSION); + + let nonce = nonce(&packet); + assert_eq!(nonce, 76929); + + let src_eid = src_eid(&packet); + assert_eq!(src_eid, 30110); + + let sender = sender(&packet); + assert_eq!( + sender, + hex::decode("0x00000000000000000000000019cfce47ed54a88614648dc3f19a5980097007dd") + .unwrap() + .as_slice() + ); + + let dst_eid = dst_eid(&packet); + assert_eq!(dst_eid, 30184); + + let receiver = receiver(&packet); + assert_eq!( + receiver, + hex::decode("0x0000000000000000000000005634c4a5fed09819e3c46d86a965dd9447d86e47") + .unwrap() + .as_slice() + ); + + let guid = guid(&packet); + assert_eq!( + guid, + hex::decode("0x9527645d4aecaa3325a0225a2b593eea5f0d26a44b97af7276bc0a80ed43047b") + .unwrap() + .as_slice() + ); + + let payload = payload(&packet); + assert_eq!( + payload, + hex::decode("0x9527645d4aecaa3325a0225a2b593eea5f0d26a44b97af7276bc0a80ed43047b0200000000000000000000000000000000000000000000000000002d79883d2000000d00000000000000000000000051a9ffd0c6026dcd59b5f2f42cc119deaa7347d0000000000000000e00000d0000000000000000000000005c8fbdbbc01d3474e7e40de14538e1e58fd485b3000000000000206b00") + .unwrap().as_slice() + ); + } +} diff --git a/workers/src/lib.rs b/workers/src/lib.rs new file mode 100644 index 00000000..5bfaf915 --- /dev/null +++ b/workers/src/lib.rs @@ -0,0 +1,6 @@ +//! Tools to build offchain workers for the LayerZero protocol. + +pub mod abi; +pub mod chain; +pub mod config; +pub mod data;