diff --git a/Cargo.lock b/Cargo.lock index 2b0047ce..a7132168 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -45,7 +45,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", @@ -68,15 +68,16 @@ checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" [[package]] name = "alloy" -version = "0.7.3" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02b0561294ccedc6181e5528b850b4579e3fbde696507baa00109bfd9054c5bb" +checksum = "bbcc41e8a11a4975b18ec6afba2cc48d591fa63336a4c526dacb50479a8d6b35" dependencies = [ "alloy-consensus", "alloy-contract", "alloy-core", "alloy-eips", "alloy-genesis", + "alloy-json-rpc", "alloy-network", "alloy-provider", "alloy-pubsub", @@ -94,20 +95,20 @@ dependencies = [ [[package]] name = "alloy-chains" -version = "0.1.48" +version = "0.1.62" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0161082e0edd9013d23083465cc04b20e44b7a15646d36ba7b0cdb7cd6fe18f" +checksum = "1317fde6d2d3cd6082a15144c23230697a5e1a91a27d1facc146715d3b4b2046" dependencies = [ "alloy-primitives", "num_enum", - "strum", + "strum 0.27.1", ] [[package]] name = "alloy-consensus" -version = "0.7.3" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a101d4d016f47f13890a74290fdd17b05dd175191d9337bc600791fb96e4dea8" +checksum = "f4138dc275554afa6f18c4217262ac9388790b2fc393c2dfe03c51d357abf013" dependencies = [ "alloy-eips", "alloy-primitives", @@ -123,9 +124,9 @@ dependencies = [ [[package]] name = "alloy-consensus-any" -version = "0.7.3" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa60357dda9a3d0f738f18844bd6d0f4a5924cc5cf00bfad2ff1369897966123" +checksum = "0fa04e1882c31288ce1028fdf31b6ea94cfa9eafa2e497f903ded631c8c6a42c" dependencies = [ "alloy-consensus", "alloy-eips", @@ -137,9 +138,9 @@ dependencies = [ [[package]] name = "alloy-contract" -version = "0.7.3" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2869e4fb31331d3b8c58c7db567d1e4e4e94ef64640beda3b6dd9b7045690941" +checksum = "5f21886c1fea0626f755a49b2ac653b396fb345233f6170db2da3d0ada31560c" dependencies = [ "alloy-dyn-abi", "alloy-json-abi", @@ -153,14 +154,14 @@ dependencies = [ "alloy-transport", "futures", "futures-util", - "thiserror 2.0.7", + "thiserror 2.0.11", ] [[package]] name = "alloy-core" -version = "0.8.15" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c618bd382f0bc2ac26a7e4bfae01c9b015ca8f21b37ca40059ae35a7e62b3dc6" +checksum = "482f377cebceed4bb1fb5e7970f0805e2ab123d06701be9351b67ed6341e74aa" dependencies = [ "alloy-dyn-abi", "alloy-json-abi", @@ -171,9 +172,9 @@ dependencies = [ [[package]] name = "alloy-dyn-abi" -version = "0.8.15" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41056bde53ae10ffbbf11618efbe1e0290859e5eab0fe9ef82ebdb62f12a866f" +checksum = "555896f0b8578adb522b1453b6e6cc6704c3027bd0af20058befdde992cee8e9" dependencies = [ "alloy-json-abi", "alloy-primitives", @@ -199,9 +200,9 @@ dependencies = [ [[package]] name = "alloy-eip7702" -version = "0.4.2" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c986539255fb839d1533c128e190e557e52ff652c9ef62939e233a81dd93f7e" +checksum = "cabf647eb4650c91a9d38cb6f972bb320009e7e9d61765fb688a86f1563b33e8" dependencies = [ "alloy-primitives", "alloy-rlp", @@ -212,9 +213,9 @@ dependencies = [ [[package]] name = "alloy-eips" -version = "0.7.3" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b6755b093afef5925f25079dd5a7c8d096398b804ba60cb5275397b06b31689" +checksum = "52dd5869ed09e399003e0e0ec6903d981b2a92e74c5d37e6b40890bad2517526" dependencies = [ "alloy-eip2930", "alloy-eip7702", @@ -230,10 +231,11 @@ dependencies = [ [[package]] name = "alloy-genesis" -version = "0.7.3" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aeec8e6eab6e52b7c9f918748c9b811e87dbef7312a2e3a2ca1729a92966a6af" +checksum = "e7d2a7fe5c1a9bd6793829ea21a636f30fc2b3f5d2e7418ba86d96e41dd1f460" dependencies = [ + "alloy-eips", "alloy-primitives", "alloy-serde", "alloy-trie", @@ -242,9 +244,9 @@ dependencies = [ [[package]] name = "alloy-json-abi" -version = "0.8.15" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c357da577dfb56998d01f574d81ad7a1958d248740a7981b205d69d65a7da404" +checksum = "4012581681b186ba0882007ed873987cc37f86b1b488fe6b91d5efd0b585dc41" dependencies = [ "alloy-primitives", "alloy-sol-type-parser", @@ -254,23 +256,23 @@ dependencies = [ [[package]] name = "alloy-json-rpc" -version = "0.7.3" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fa077efe0b834bcd89ff4ba547f48fb081e4fdc3673dd7da1b295a2cf2bb7b7" +checksum = "2008bedb8159a255b46b7c8614516eda06679ea82f620913679afbd8031fea72" dependencies = [ "alloy-primitives", "alloy-sol-types", "serde", "serde_json", - "thiserror 2.0.7", + "thiserror 2.0.11", "tracing", ] [[package]] name = "alloy-network" -version = "0.7.3" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "209a1882a08e21aca4aac6e2a674dc6fcf614058ef8cb02947d63782b1899552" +checksum = "4556f01fe41d0677495df10a648ddcf7ce118b0e8aa9642a0e2b6dd1fb7259de" dependencies = [ "alloy-consensus", "alloy-consensus-any", @@ -288,14 +290,14 @@ dependencies = [ "futures-utils-wasm", "serde", "serde_json", - "thiserror 2.0.7", + "thiserror 2.0.11", ] [[package]] name = "alloy-network-primitives" -version = "0.7.3" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c20219d1ad261da7a6331c16367214ee7ded41d001fabbbd656fbf71898b2773" +checksum = "f31c3c6b71340a1d076831823f09cb6e02de01de5c6630a9631bdb36f947ff80" dependencies = [ "alloy-consensus", "alloy-eips", @@ -306,9 +308,9 @@ dependencies = [ [[package]] name = "alloy-primitives" -version = "0.8.15" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6259a506ab13e1d658796c31e6e39d2e2ee89243bcc505ddc613b35732e0a430" +checksum = "478bedf4d24e71ea48428d1bc278553bd7c6ae07c30ca063beb0b09fe58a9e74" dependencies = [ "alloy-rlp", "bytes", @@ -317,8 +319,7 @@ dependencies = [ "derive_more", "foldhash", "hashbrown 0.15.2", - "hex-literal", - "indexmap 2.7.0", + "indexmap 2.7.1", "itoa", "k256", "keccak-asm", @@ -326,7 +327,7 @@ dependencies = [ "proptest", "rand", "ruint", - "rustc-hash 2.1.0", + "rustc-hash 2.1.1", "serde", "sha3", "tiny-keccak", @@ -334,9 +335,9 @@ dependencies = [ [[package]] name = "alloy-provider" -version = "0.7.3" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9eefa6f4c798ad01f9b4202d02cea75f5ec11fa180502f4701e2b47965a8c0bb" +checksum = "5a22c4441b3ebe2d77fa9cf629ba68c3f713eb91779cff84275393db97eddd82" dependencies = [ "alloy-chains", "alloy-consensus", @@ -361,11 +362,11 @@ dependencies = [ "lru", "parking_lot 0.12.3", "pin-project", - "reqwest 0.12.9", + "reqwest 0.12.12", "schnellru", "serde", "serde_json", - "thiserror 2.0.7", + "thiserror 2.0.11", "tokio", "tracing", "url", @@ -374,9 +375,9 @@ dependencies = [ [[package]] name = "alloy-pubsub" -version = "0.7.3" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aac9a7210e0812b1d814118f426f57eb7fc260a419224dd1c76d169879c06907" +checksum = "2269fd635f7b505f27c63a3cb293148cd02301efce4c8bdd9ff54fbfc4a20e23" dependencies = [ "alloy-json-rpc", "alloy-primitives", @@ -393,9 +394,9 @@ dependencies = [ [[package]] name = "alloy-rlp" -version = "0.3.10" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f542548a609dca89fcd72b3b9f355928cf844d4363c5eed9c5273a3dd225e097" +checksum = "3d6c1d995bff8d011f7cd6c81820d51825e6e06d6db73914c1630ecf544d83d6" dependencies = [ "alloy-rlp-derive", "arrayvec", @@ -404,20 +405,20 @@ dependencies = [ [[package]] name = "alloy-rlp-derive" -version = "0.3.10" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a833d97bf8a5f0f878daf2c8451fff7de7f9de38baa5a45d936ec718d81255a" +checksum = "a40e1ef334153322fd878d07e86af7a529bcb86b2439525920a88eba87bcf943" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.98", ] [[package]] name = "alloy-rpc-client" -version = "0.7.3" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed30bf1041e84cabc5900f52978ca345dd9969f2194a945e6fdec25b0620705c" +checksum = "d06a292b37e182e514903ede6e623b9de96420e8109ce300da288a96d88b7e4b" dependencies = [ "alloy-json-rpc", "alloy-primitives", @@ -428,7 +429,7 @@ dependencies = [ "alloy-transport-ws", "futures", "pin-project", - "reqwest 0.12.9", + "reqwest 0.12.12", "serde", "serde_json", "tokio", @@ -441,9 +442,9 @@ dependencies = [ [[package]] name = "alloy-rpc-types" -version = "0.7.3" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ab686b0fa475d2a4f5916c5f07797734a691ec58e44f0f55d4746ea39cbcefb" +checksum = "9383845dd924939e7ab0298bbfe231505e20928907d7905aa3bf112287305e06" dependencies = [ "alloy-primitives", "alloy-rpc-types-engine", @@ -454,9 +455,9 @@ dependencies = [ [[package]] name = "alloy-rpc-types-any" -version = "0.7.3" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "200661999b6e235d9840be5d60a6e8ae2f0af9eb2a256dd378786744660e36ec" +checksum = "ca445cef0eb6c2cf51cfb4e214fbf1ebd00893ae2e6f3b944c8101b07990f988" dependencies = [ "alloy-consensus-any", "alloy-rpc-types-eth", @@ -465,9 +466,9 @@ dependencies = [ [[package]] name = "alloy-rpc-types-engine" -version = "0.7.3" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d297268357e3eae834ddd6888b15f764cbc0f4b3be9265f5f6ec239013f3d68" +checksum = "4a5f821f30344862a0b6eb9a1c2eb91dfb2ff44c7489f37152a526cdcab79264" dependencies = [ "alloy-consensus", "alloy-eips", @@ -476,14 +477,14 @@ dependencies = [ "alloy-serde", "derive_more", "serde", - "strum", + "strum 0.26.3", ] [[package]] name = "alloy-rpc-types-eth" -version = "0.7.3" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0600b8b5e2dc0cab12cbf91b5a885c35871789fb7b3a57b434bd4fced5b7a8b" +checksum = "0938bc615c02421bd86c1733ca7205cc3d99a122d9f9bff05726bd604b76a5c2" dependencies = [ "alloy-consensus", "alloy-consensus-any", @@ -493,17 +494,17 @@ dependencies = [ "alloy-rlp", "alloy-serde", "alloy-sol-types", - "derive_more", "itertools 0.13.0", "serde", "serde_json", + "thiserror 2.0.11", ] [[package]] name = "alloy-serde" -version = "0.7.3" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9afa753a97002a33b2ccb707d9f15f31c81b8c1b786c95b73cc62bb1d1fd0c3f" +checksum = "ae0465c71d4dced7525f408d84873aeebb71faf807d22d74c4a426430ccd9b55" dependencies = [ "alloy-primitives", "serde", @@ -512,23 +513,23 @@ dependencies = [ [[package]] name = "alloy-signer" -version = "0.7.3" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b2cbff01a673936c2efd7e00d4c0e9a4dbbd6d600e2ce298078d33efbb19cd7" +checksum = "9bfa395ad5cc952c82358d31e4c68b27bf4a89a5456d9b27e226e77dac50e4ff" dependencies = [ "alloy-primitives", "async-trait", "auto_impl", "elliptic-curve", "k256", - "thiserror 2.0.7", + "thiserror 2.0.11", ] [[package]] name = "alloy-signer-aws" -version = "0.7.3" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71ce77227fdb9059fd7a3b38a8679c0dae95d81886ee8c13ef8ad99d74866bbd" +checksum = "0eb06810c34427d499863817eb506acf57cb9ded9224b374116cae4e22dbd4e9" dependencies = [ "alloy-consensus", "alloy-network", @@ -538,15 +539,15 @@ dependencies = [ "aws-sdk-kms", "k256", "spki", - "thiserror 2.0.7", + "thiserror 2.0.11", "tracing", ] [[package]] name = "alloy-signer-local" -version = "0.7.3" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd6d988cb6cd7d2f428a74476515b1a6e901e08c796767f9f93311ab74005c8b" +checksum = "fbdc63ce9eda1283fcbaca66ba4a414b841c0e3edbeef9c86a71242fc9e84ccc" dependencies = [ "alloy-consensus", "alloy-network", @@ -556,47 +557,47 @@ dependencies = [ "eth-keystore", "k256", "rand", - "thiserror 2.0.7", + "thiserror 2.0.11", ] [[package]] name = "alloy-sol-macro" -version = "0.8.15" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9d64f851d95619233f74b310f12bcf16e0cbc27ee3762b6115c14a84809280a" +checksum = "a2708e27f58d747423ae21d31b7a6625159bd8d867470ddd0256f396a68efa11" dependencies = [ "alloy-sol-macro-expander", "alloy-sol-macro-input", "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.98", ] [[package]] name = "alloy-sol-macro-expander" -version = "0.8.15" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bf7ed1574b699f48bf17caab4e6e54c6d12bc3c006ab33d58b1e227c1c3559f" +checksum = "c6b7984d7e085dec382d2c5ef022b533fcdb1fe6129200af30ebf5afddb6a361" dependencies = [ "alloy-json-abi", "alloy-sol-macro-input", "const-hex", "heck", - "indexmap 2.7.0", + "indexmap 2.7.1", "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.98", "syn-solidity", "tiny-keccak", ] [[package]] name = "alloy-sol-macro-input" -version = "0.8.15" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c02997ccef5f34f9c099277d4145f183b422938ed5322dc57a089fe9b9ad9ee" +checksum = "33d6a9fc4ed1a3c70bdb2357bec3924551c1a59f24e5a04a74472c755b37f87d" dependencies = [ "alloy-json-abi", "const-hex", @@ -605,15 +606,15 @@ dependencies = [ "proc-macro2", "quote", "serde_json", - "syn 2.0.90", + "syn 2.0.98", "syn-solidity", ] [[package]] name = "alloy-sol-type-parser" -version = "0.8.15" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce13ff37285b0870d0a0746992a4ae48efaf34b766ae4c2640fa15e5305f8e73" +checksum = "1b1b3e9a48a6dd7bb052a111c8d93b5afc7956ed5e2cb4177793dc63bb1d2a36" dependencies = [ "serde", "winnow", @@ -621,9 +622,9 @@ dependencies = [ [[package]] name = "alloy-sol-types" -version = "0.8.15" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1174cafd6c6d810711b4e00383037bdb458efc4fe3dbafafa16567e0320c54d8" +checksum = "6044800da35c38118fd4b98e18306bd3b91af5dedeb54c1b768cf1b4fb68f549" dependencies = [ "alloy-json-abi", "alloy-primitives", @@ -634,9 +635,9 @@ dependencies = [ [[package]] name = "alloy-transport" -version = "0.7.3" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d69d36982b9e46075ae6b792b0f84208c6c2c15ad49f6c500304616ef67b70e0" +checksum = "d17722a198f33bbd25337660787aea8b8f57814febb7c746bc30407bdfc39448" dependencies = [ "alloy-json-rpc", "base64 0.22.1", @@ -644,7 +645,7 @@ dependencies = [ "futures-utils-wasm", "serde", "serde_json", - "thiserror 2.0.7", + "thiserror 2.0.11", "tokio", "tower", "tracing", @@ -654,13 +655,13 @@ dependencies = [ [[package]] name = "alloy-transport-http" -version = "0.7.3" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e02ffd5d93ffc51d72786e607c97de3b60736ca3e636ead0ec1f7dce68ea3fd" +checksum = "6e1509599021330a31c4a6816b655e34bf67acb1cc03c564e09fd8754ff6c5de" dependencies = [ "alloy-json-rpc", "alloy-transport", - "reqwest 0.12.9", + "reqwest 0.12.12", "serde_json", "tower", "tracing", @@ -669,9 +670,9 @@ dependencies = [ [[package]] name = "alloy-transport-ipc" -version = "0.7.3" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b6f8b87cb84bae6d81ae6604b37741c8116f84f9784a0ecc6038c302e679d23" +checksum = "fa4da44bc9a5155ab599666d26decafcf12204b72a80eeaba7c5e234ee8ac205" dependencies = [ "alloy-json-rpc", "alloy-pubsub", @@ -688,15 +689,15 @@ dependencies = [ [[package]] name = "alloy-transport-ws" -version = "0.7.3" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c085c4e1e7680b723ffc558f61a22c061ed3f70eb3436f93f3936779c59cec1" +checksum = "58011745b2f17b334db40df9077d75b181f78360a5bc5c35519e15d4bfce15e2" dependencies = [ "alloy-pubsub", "alloy-transport", "futures", "http 1.2.0", - "rustls 0.23.20", + "rustls 0.23.23", "serde_json", "tokio", "tokio-tungstenite 0.24.0", @@ -706,9 +707,9 @@ dependencies = [ [[package]] name = "alloy-trie" -version = "0.7.6" +version = "0.7.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a5fd8fea044cc9a8c8a50bb6f28e31f0385d820f116c5b98f6f4e55d6e5590b" +checksum = "d95a94854e420f07e962f7807485856cde359ab99ab6413883e15235ad996e8b" dependencies = [ "alloy-primitives", "alloy-rlp", @@ -776,11 +777,12 @@ dependencies = [ [[package]] name = "anstyle-wincon" -version = "3.0.6" +version = "3.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2109dbce0e72be3ec00bed26e6a7479ca384ad226efdd66db8fa2e3a38c83125" +checksum = "ca3534e77181a9cc07539ad51f2141fe32f6c3ffd4df76db8ad92346b003ae4e" dependencies = [ "anstyle", + "once_cell", "windows-sys 0.59.0", ] @@ -930,7 +932,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "62945a2f7e6de02a31fe400aa489f0e0f5b2502e69f95f853adb82a96c7a6b60" dependencies = [ "quote", - "syn 2.0.90", + "syn 2.0.98", ] [[package]] @@ -968,7 +970,7 @@ dependencies = [ "num-traits", "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.98", ] [[package]] @@ -1082,7 +1084,7 @@ checksum = "213888f660fddcca0d257e88e54ac05bca01885f258ccdf695bafd77031bb69d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.98", ] [[package]] @@ -1135,9 +1137,9 @@ dependencies = [ [[package]] name = "async-broadcast" -version = "0.7.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20cd0e2e25ea8e5f7e9df04578dc6cf5c83577fd09b1a46aaf5c85e1c33f2a7e" +checksum = "435a87a52755b8f27fcf321ac4f04b2802e337c8c4872923137471ec39c37532" dependencies = [ "event-listener", "event-listener-strategy", @@ -1176,18 +1178,18 @@ checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.98", ] [[package]] name = "async-trait" -version = "0.1.83" +version = "0.1.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd" +checksum = "644dd749086bf3771a2fbc5f256fdb982d53f011c7d5d560304eafeecebce79d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.98", ] [[package]] @@ -1209,13 +1211,13 @@ checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] name = "auto_impl" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c87f3f15e7794432337fc718554eaa4dc8f04c9677a950ffe366f20a162ae42" +checksum = "e12882f59de5360c748c4cbf569a042d5fb0eb515f7bea9c1f470b47f6ffbd73" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.98", ] [[package]] @@ -1238,9 +1240,9 @@ dependencies = [ [[package]] name = "aws-lc-rs" -version = "1.11.1" +version = "1.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f47bb8cc16b669d267eeccf585aea077d0882f4777b1c1f740217885d6e6e5a3" +checksum = "4c2b7ddaa2c56a367ad27a094ad8ef4faacf8a617c2575acb2ba88949df999ca" dependencies = [ "aws-lc-sys", "paste", @@ -1249,24 +1251,23 @@ dependencies = [ [[package]] name = "aws-lc-sys" -version = "0.23.1" +version = "0.25.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2101df3813227bbaaaa0b04cd61c534c7954b22bd68d399b440be937dc63ff7" +checksum = "54ac4f13dad353b209b34cbec082338202cbc01c8f00336b55c750c13ac91f8f" dependencies = [ "bindgen", "cc", "cmake", "dunce", "fs_extra", - "libc", "paste", ] [[package]] name = "aws-runtime" -version = "1.4.4" +version = "1.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5ac934720fbb46206292d2c75b57e67acfc56fe7dfd34fb9a02334af08409ea" +checksum = "76dd04d39cc12844c0994f2c9c5a6f5184c22e9188ec1ff723de41910a21dcad" dependencies = [ "aws-credential-types", "aws-sigv4", @@ -1284,14 +1285,14 @@ dependencies = [ "percent-encoding", "pin-project-lite", "tracing", - "uuid 1.11.0", + "uuid 1.13.2", ] [[package]] name = "aws-sdk-kms" -version = "1.51.0" +version = "1.60.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c30f6fd5646b99d9b45ec3a0c22e67112c175b2383100c960d7ee39d96c8d96" +checksum = "adc36035f7393a24719069c9a2f52e20972f7ee8472bd788e863968736acc449" dependencies = [ "aws-credential-types", "aws-runtime", @@ -1311,9 +1312,9 @@ dependencies = [ [[package]] name = "aws-sigv4" -version = "1.2.6" +version = "1.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d3820e0c08d0737872ff3c7c1f21ebbb6693d832312d6152bf18ef50a5471c2" +checksum = "9bfe75fad52793ce6dec0dc3d4b1f388f038b5eb866c8d4d7f3a8e21b5ea5051" dependencies = [ "aws-credential-types", "aws-smithy-http", @@ -1334,9 +1335,9 @@ dependencies = [ [[package]] name = "aws-smithy-async" -version = "1.2.2" +version = "1.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8aa8ff1492fd9fb99ae28e8467af0dbbb7c31512b16fabf1a0f10d7bb6ef78bb" +checksum = "fa59d1327d8b5053c54bf2eaae63bf629ba9e904434d0835a28ed3c0ed0a614e" dependencies = [ "futures-util", "pin-project-lite", @@ -1345,9 +1346,9 @@ dependencies = [ [[package]] name = "aws-smithy-http" -version = "0.60.11" +version = "0.60.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c8bc3e8fdc6b8d07d976e301c02fe553f72a39b7a9fea820e023268467d7ab6" +checksum = "7809c27ad8da6a6a68c454e651d4962479e81472aa19ae99e59f9aba1f9713cc" dependencies = [ "aws-smithy-runtime-api", "aws-smithy-types", @@ -1365,18 +1366,18 @@ dependencies = [ [[package]] name = "aws-smithy-json" -version = "0.61.1" +version = "0.61.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee4e69cc50921eb913c6b662f8d909131bb3e6ad6cb6090d3a39b66fc5c52095" +checksum = "623a51127f24c30776c8b374295f2df78d92517386f77ba30773f15a30ce1422" dependencies = [ "aws-smithy-types", ] [[package]] name = "aws-smithy-runtime" -version = "1.7.5" +version = "1.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "431a10d0e07e09091284ef04453dae4069283aa108d209974d67e77ae1caa658" +checksum = "d526a12d9ed61fadefda24abe2e682892ba288c2018bcb38b1b4c111d13f6d92" dependencies = [ "aws-smithy-async", "aws-smithy-http", @@ -1414,9 +1415,9 @@ dependencies = [ [[package]] name = "aws-smithy-types" -version = "1.2.10" +version = "1.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ecbf4d5dfb169812e2b240a4350f15ad3c6b03a54074e5712818801615f2dc5" +checksum = "c7b8a53819e42f10d0821f56da995e1470b199686a1809168db6ca485665f042" dependencies = [ "base64-simd", "bytes", @@ -1437,9 +1438,9 @@ dependencies = [ [[package]] name = "aws-types" -version = "1.3.3" +version = "1.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5221b91b3e441e6675310829fd8984801b772cb1546ef6c0e54dec9f1ac13fef" +checksum = "dfbd0a668309ec1f66c0f6bda4840dd6d4796ae26d699ebc266d7cc95c6d040f" dependencies = [ "aws-credential-types", "aws-smithy-async", @@ -1522,7 +1523,7 @@ version = "0.69.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "271383c67ccabffb7381723dea0672a673f292304fcb45c01cc648c7a8d58088" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.8.0", "cexpr", "clang-sys", "itertools 0.12.1", @@ -1535,7 +1536,7 @@ dependencies = [ "regex", "rustc-hash 1.1.0", "shlex", - "syn 2.0.90", + "syn 2.0.98", "which", ] @@ -1545,7 +1546,16 @@ version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" dependencies = [ - "bit-vec", + "bit-vec 0.6.3", +] + +[[package]] +name = "bit-set" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" +dependencies = [ + "bit-vec 0.8.0", ] [[package]] @@ -1554,6 +1564,12 @@ version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" +[[package]] +name = "bit-vec" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" + [[package]] name = "bitflags" version = "1.3.2" @@ -1562,9 +1578,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.6.0" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" +checksum = "8f68f53c83ab957f72c32642f3868eec03eb974d1fb82e453128456482613d36" [[package]] name = "bitvec" @@ -1589,9 +1605,9 @@ dependencies = [ [[package]] name = "blst" -version = "0.3.13" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4378725facc195f1a538864863f6de233b500a8862747e7f165078a419d5e874" +checksum = "47c79a94619fade3c0b887670333513a67ac28a6a7e653eb260bf0d4103db38d" dependencies = [ "cc", "glob", @@ -1601,9 +1617,9 @@ dependencies = [ [[package]] name = "bollard" -version = "0.17.1" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d41711ad46fda47cd701f6908e59d1bd6b9a2b7464c0d0aeab95c6d37096ff8a" +checksum = "97ccca1260af6a459d75994ad5acc1651bcabcbdbc41467cc9786519ab854c30" dependencies = [ "base64 0.22.1", "bollard-stubs", @@ -1614,15 +1630,15 @@ dependencies = [ "home", "http 1.2.0", "http-body-util", - "hyper 1.5.2", + "hyper 1.6.0", "hyper-named-pipe", - "hyper-rustls 0.27.3", + "hyper-rustls 0.27.5", "hyper-util", "hyperlocal", "log", "pin-project-lite", - "rustls 0.23.20", - "rustls-native-certs 0.7.3", + "rustls 0.23.23", + "rustls-native-certs", "rustls-pemfile 2.2.0", "rustls-pki-types", "serde", @@ -1630,7 +1646,7 @@ dependencies = [ "serde_json", "serde_repr", "serde_urlencoded", - "thiserror 1.0.69", + "thiserror 2.0.11", "tokio", "tokio-util 0.7.13", "tower-service", @@ -1640,9 +1656,9 @@ dependencies = [ [[package]] name = "bollard-stubs" -version = "1.45.0-rc.26.0.1" +version = "1.47.1-rc.27.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d7c5415e3a6bc6d3e99eff6268e488fd4ee25e7b28c10f08fa6760bd9de16e4" +checksum = "3f179cfbddb6e77a5472703d4b30436bff32929c0aa8a9008ecf23d1d3cdd0da" dependencies = [ "serde", "serde_repr", @@ -1661,9 +1677,9 @@ dependencies = [ [[package]] name = "bstr" -version = "1.11.1" +version = "1.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "786a307d683a5bf92e6fd5fd69a7eb613751668d1d8d67d802846dfe367c62c8" +checksum = "531a9155a481e2ee699d4f98f43c0ca4ff8ee1bfd55c31e9e98fb29d2b176fe0" dependencies = [ "memchr", "serde", @@ -1671,9 +1687,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.16.0" +version = "3.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" +checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" [[package]] name = "byte-slice-cast" @@ -1689,9 +1705,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.9.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "325918d6fe32f23b19878fe4b34794ae41fc19ddbe53b10571a4874d44ffd39b" +checksum = "f61dac84819c6588b558454b194026eb1f09c293b9036ae9b159e74e73ab6cf9" dependencies = [ "serde", ] @@ -1718,9 +1734,9 @@ dependencies = [ [[package]] name = "bzip2-sys" -version = "0.1.11+1.0.8" +version = "0.1.12+1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc" +checksum = "72ebc2f1a417f01e1da30ef264ee86ae31d2dcd2d603ea283d3c244a883ca2a9" dependencies = [ "cc", "libc", @@ -1768,7 +1784,7 @@ checksum = "2d886547e41f740c616ae73108f6eb70afe6d940c7bc697cb30f13daec073037" dependencies = [ "camino", "cargo-platform", - "semver 1.0.24", + "semver 1.0.25", "serde", "serde_json", "thiserror 1.0.69", @@ -1776,9 +1792,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.4" +version = "1.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9157bbaa6b165880c27a4293a474c91cdcf265cc68cc829bf10be0964a391caf" +checksum = "0c3d1b2e905a3a7b00a6141adb0e4c0bb941d11caf55349d863942a1cc44e3c9" dependencies = [ "jobserver", "libc", @@ -1848,9 +1864,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.23" +version = "4.5.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3135e7ec2ef7b10c6ed8950f0f792ed96ee093fa088608f1c76e569722700c84" +checksum = "92b7b18d71fad5313a1e320fa9897994228ce274b60faa4d694fe0ea89cd9e6d" dependencies = [ "clap_builder", "clap_derive", @@ -1858,9 +1874,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.23" +version = "4.5.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30582fc632330df2bd26877bde0c1f4470d57c582bbc070376afcd04d8cb4838" +checksum = "a35db2071778a7344791a4fb4f95308b5673d219dee3ae348b86642574ecc90c" dependencies = [ "anstream", "anstyle", @@ -1870,14 +1886,14 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.18" +version = "4.5.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ac6a0c7b1a9e9a5186361f67dfa1b88213572f427fb9ab038efb2bd8c582dab" +checksum = "bf4ced95c6f4a675af3da73304b9ac4ed991640c36374e4b46795c49e17cf1ed" dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.98", ] [[package]] @@ -1888,9 +1904,9 @@ checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" [[package]] name = "cmake" -version = "0.1.52" +version = "0.1.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c682c223677e0e5b6b7f63a64b9351844c3f1b1678a68b7ee617e30fb082620e" +checksum = "e7caa3f9de89ddbe2c607f4101924c5abec803763ae9534e4f4d7d8f84aa81f0" dependencies = [ "cc", ] @@ -1953,16 +1969,6 @@ version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" -[[package]] -name = "colored" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "117725a109d387c937a1533ce01b450cbde6b88abceea8473c4d7a85853cda3c" -dependencies = [ - "lazy_static", - "windows-sys 0.59.0", -] - [[package]] name = "concurrent-queue" version = "2.5.0" @@ -2003,6 +2009,26 @@ version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" +[[package]] +name = "const_format" +version = "0.2.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "126f97965c8ad46d6d9163268ff28432e8f6a1196a55578867832e3049df63dd" +dependencies = [ + "const_format_proc_macros", +] + +[[package]] +name = "const_format_proc_macros" +version = "0.2.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d57c2eccfb16dbac1f4e61e206105db5820c9d26c3c472bc17c774259ef7744" +dependencies = [ + "proc-macro2", + "quote", + "unicode-xid", +] + [[package]] name = "constant_time_eq" version = "0.1.5" @@ -2035,11 +2061,22 @@ version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" +[[package]] +name = "core_affinity" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "622892f5635ce1fc38c8f16dfc938553ed64af482edb5e150bf4caedbfcb2304" +dependencies = [ + "libc", + "num_cpus", + "winapi", +] + [[package]] name = "cpufeatures" -version = "0.2.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16b80225097f2e5ae4e7179dd2266824648f3e2f49d9134d584b76389d31c4c3" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" dependencies = [ "libc", ] @@ -2080,9 +2117,9 @@ checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" [[package]] name = "crunchy" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" +checksum = "43da5946c66ffcc7745f48db692ffbb10a83bfe0afd96235c5c2a4fb23994929" [[package]] name = "crypto-bigint" @@ -2113,7 +2150,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a2785755761f3ddc1492979ce1e48d2c00d09311c39e4466429188f3dd6501" dependencies = [ "quote", - "syn 2.0.90", + "syn 2.0.98", ] [[package]] @@ -2156,7 +2193,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.90", + "syn 2.0.98", ] [[package]] @@ -2167,7 +2204,7 @@ checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ "darling_core", "quote", - "syn 2.0.90", + "syn 2.0.98", ] [[package]] @@ -2186,9 +2223,9 @@ dependencies = [ [[package]] name = "data-encoding" -version = "2.6.0" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2" +checksum = "575f75dfd25738df5b91b8e43e14d44bda14637a58fae779fd2b064f8bf3e010" [[package]] name = "der" @@ -2238,7 +2275,7 @@ checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.98", "unicode-xid", ] @@ -2322,7 +2359,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.98", ] [[package]] @@ -2371,54 +2408,44 @@ dependencies = [ "enum-ordinalize", "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.98", ] [[package]] -name = "eigen-cli" -version = "0.1.1" -source = "git+https://github.com/Layr-Labs/eigensdk-rs?rev=046d497#046d497e5128507c9db6d894a5dfbf399fdc6471" +name = "eigen-aggregator" +version = "0.3.0" +source = "git+https://github.com/Layr-Labs/eigensdk-rs?branch=sdk-ux-improvment#deecc715f7750d5fa37639ee1e79031d77aa3b60" dependencies = [ "alloy", - "alloy-json-rpc", - "alloy-primitives", - "alloy-provider", - "alloy-transport", - "ark-ec 0.5.0", - "ark-ff 0.5.0", - "ark-serialize 0.5.0", - "clap", - "colored", + "eigen-client-avsregistry", + "eigen-common", "eigen-crypto-bls", - "eigen-testing-utils", + "eigen-logging", + "eigen-services-avsregistry", + "eigen-services-blsaggregation", + "eigen-services-operatorsinfo", "eigen-types", "eigen-utils", - "eth-keystore", - "hex", - "k256", - "num-bigint", - "rand", - "rand_core", - "rust-bls-bn254 0.2.1", + "futures-util", + "jsonrpc-core", + "jsonrpc-http-server", "serde", - "serde_json", "thiserror 1.0.69", "tokio", - "uuid 1.11.0", + "tokio-util 0.7.13", + "tracing", ] [[package]] name = "eigen-client-avsregistry" -version = "0.1.1" -source = "git+https://github.com/Layr-Labs/eigensdk-rs?rev=046d497#046d497e5128507c9db6d894a5dfbf399fdc6471" +version = "0.3.0" +source = "git+https://github.com/Layr-Labs/eigensdk-rs?branch=sdk-ux-improvment#deecc715f7750d5fa37639ee1e79031d77aa3b60" dependencies = [ "alloy", - "alloy-primitives", - "alloy-signer", - "alloy-signer-local", "ark-ff 0.5.0", "async-trait", "eigen-client-elcontracts", + "eigen-common", "eigen-crypto-bls", "eigen-logging", "eigen-types", @@ -2430,12 +2457,11 @@ dependencies = [ [[package]] name = "eigen-client-elcontracts" -version = "0.1.1" -source = "git+https://github.com/Layr-Labs/eigensdk-rs?rev=046d497#046d497e5128507c9db6d894a5dfbf399fdc6471" +version = "0.3.0" +source = "git+https://github.com/Layr-Labs/eigensdk-rs?branch=sdk-ux-improvment#deecc715f7750d5fa37639ee1e79031d77aa3b60" dependencies = [ "alloy", - "alloy-primitives", - "alloy-sol-types", + "eigen-common", "eigen-crypto-bls", "eigen-logging", "eigen-types", @@ -2446,13 +2472,10 @@ dependencies = [ [[package]] name = "eigen-client-eth" -version = "0.1.1" -source = "git+https://github.com/Layr-Labs/eigensdk-rs?rev=046d497#046d497e5128507c9db6d894a5dfbf399fdc6471" +version = "0.3.0" +source = "git+https://github.com/Layr-Labs/eigensdk-rs?branch=sdk-ux-improvment#deecc715f7750d5fa37639ee1e79031d77aa3b60" dependencies = [ "alloy", - "alloy-json-rpc", - "alloy-primitives", - "alloy-rlp", "async-trait", "eigen-logging", "eigen-metrics-collectors-rpc-calls", @@ -2461,12 +2484,32 @@ dependencies = [ "url", ] +[[package]] +name = "eigen-common" +version = "0.3.0" +source = "git+https://github.com/Layr-Labs/eigensdk-rs?branch=sdk-ux-improvment#deecc715f7750d5fa37639ee1e79031d77aa3b60" +dependencies = [ + "alloy", + "url", +] + +[[package]] +name = "eigen-config" +version = "0.3.0" +source = "git+https://github.com/Layr-Labs/eigensdk-rs?branch=sdk-ux-improvment#deecc715f7750d5fa37639ee1e79031d77aa3b60" +dependencies = [ + "hex", + "ruint", + "serde", + "thiserror 1.0.69", +] + [[package]] name = "eigen-crypto-bls" -version = "0.1.1" -source = "git+https://github.com/Layr-Labs/eigensdk-rs?rev=046d497#046d497e5128507c9db6d894a5dfbf399fdc6471" +version = "0.3.0" +source = "git+https://github.com/Layr-Labs/eigensdk-rs?branch=sdk-ux-improvment#deecc715f7750d5fa37639ee1e79031d77aa3b60" dependencies = [ - "alloy-primitives", + "alloy", "ark-bn254 0.5.0", "ark-ec 0.5.0", "ark-ff 0.5.0", @@ -2480,8 +2523,8 @@ dependencies = [ [[package]] name = "eigen-crypto-bn254" -version = "0.1.1" -source = "git+https://github.com/Layr-Labs/eigensdk-rs?rev=046d497#046d497e5128507c9db6d894a5dfbf399fdc6471" +version = "0.3.0" +source = "git+https://github.com/Layr-Labs/eigensdk-rs?branch=sdk-ux-improvment#deecc715f7750d5fa37639ee1e79031d77aa3b60" dependencies = [ "ark-bn254 0.5.0", "ark-ec 0.5.0", @@ -2491,8 +2534,8 @@ dependencies = [ [[package]] name = "eigen-logging" -version = "0.1.1" -source = "git+https://github.com/Layr-Labs/eigensdk-rs?rev=046d497#046d497e5128507c9db6d894a5dfbf399fdc6471" +version = "0.3.0" +source = "git+https://github.com/Layr-Labs/eigensdk-rs?branch=sdk-ux-improvment#deecc715f7750d5fa37639ee1e79031d77aa3b60" dependencies = [ "ctor", "once_cell", @@ -2502,8 +2545,8 @@ dependencies = [ [[package]] name = "eigen-metrics" -version = "0.1.1" -source = "git+https://github.com/Layr-Labs/eigensdk-rs?rev=046d497#046d497e5128507c9db6d894a5dfbf399fdc6471" +version = "0.3.0" +source = "git+https://github.com/Layr-Labs/eigensdk-rs?branch=sdk-ux-improvment#deecc715f7750d5fa37639ee1e79031d77aa3b60" dependencies = [ "eigen-logging", "metrics", @@ -2513,8 +2556,8 @@ dependencies = [ [[package]] name = "eigen-metrics-collectors-rpc-calls" -version = "0.1.1" -source = "git+https://github.com/Layr-Labs/eigensdk-rs?rev=046d497#046d497e5128507c9db6d894a5dfbf399fdc6471" +version = "0.3.0" +source = "git+https://github.com/Layr-Labs/eigensdk-rs?branch=sdk-ux-improvment#deecc715f7750d5fa37639ee1e79031d77aa3b60" dependencies = [ "eigen-logging", "metrics", @@ -2522,8 +2565,8 @@ dependencies = [ [[package]] name = "eigen-nodeapi" -version = "0.1.1" -source = "git+https://github.com/Layr-Labs/eigensdk-rs?rev=046d497#046d497e5128507c9db6d894a5dfbf399fdc6471" +version = "0.3.0" +source = "git+https://github.com/Layr-Labs/eigensdk-rs?branch=sdk-ux-improvment#deecc715f7750d5fa37639ee1e79031d77aa3b60" dependencies = [ "ntex", "serde", @@ -2532,12 +2575,39 @@ dependencies = [ "tracing", ] +[[package]] +name = "eigen-operator" +version = "0.3.0" +source = "git+https://github.com/Layr-Labs/eigensdk-rs?branch=sdk-ux-improvment#deecc715f7750d5fa37639ee1e79031d77aa3b60" +dependencies = [ + "alloy", + "eigen-aggregator", + "eigen-client-avsregistry", + "eigen-config", + "eigen-crypto-bls", + "eigen-crypto-bn254", + "eigen-logging", + "eigen-types", + "eigen-utils", + "futures-util", + "hex", + "rand_core", + "reqwest 0.12.12", + "rust-bls-bn254 0.2.1", + "serde", + "serde_json", + "thiserror 1.0.69", + "tokio", + "tracing", + "url", +] + [[package]] name = "eigen-services-avsregistry" -version = "0.1.1" -source = "git+https://github.com/Layr-Labs/eigensdk-rs?rev=046d497#046d497e5128507c9db6d894a5dfbf399fdc6471" +version = "0.3.0" +source = "git+https://github.com/Layr-Labs/eigensdk-rs?branch=sdk-ux-improvment#deecc715f7750d5fa37639ee1e79031d77aa3b60" dependencies = [ - "alloy-primitives", + "alloy", "ark-bn254 0.5.0", "ark-ec 0.5.0", "async-trait", @@ -2550,14 +2620,14 @@ dependencies = [ [[package]] name = "eigen-services-blsaggregation" -version = "0.1.1" -source = "git+https://github.com/Layr-Labs/eigensdk-rs?rev=046d497#046d497e5128507c9db6d894a5dfbf399fdc6471" +version = "0.3.0" +source = "git+https://github.com/Layr-Labs/eigensdk-rs?branch=sdk-ux-improvment#deecc715f7750d5fa37639ee1e79031d77aa3b60" dependencies = [ "alloy", - "alloy-primitives", "ark-bn254 0.5.0", "ark-ec 0.5.0", "eigen-client-avsregistry", + "eigen-common", "eigen-crypto-bls", "eigen-crypto-bn254", "eigen-logging", @@ -2572,13 +2642,13 @@ dependencies = [ [[package]] name = "eigen-services-operatorsinfo" -version = "0.1.1" -source = "git+https://github.com/Layr-Labs/eigensdk-rs?rev=046d497#046d497e5128507c9db6d894a5dfbf399fdc6471" +version = "0.3.0" +source = "git+https://github.com/Layr-Labs/eigensdk-rs?branch=sdk-ux-improvment#deecc715f7750d5fa37639ee1e79031d77aa3b60" dependencies = [ "alloy", - "alloy-primitives", "async-trait", "eigen-client-avsregistry", + "eigen-common", "eigen-crypto-bls", "eigen-logging", "eigen-types", @@ -2593,14 +2663,11 @@ dependencies = [ [[package]] name = "eigen-testing-utils" -version = "0.1.1" -source = "git+https://github.com/Layr-Labs/eigensdk-rs?rev=046d497#046d497e5128507c9db6d894a5dfbf399fdc6471" +version = "0.3.0" +source = "git+https://github.com/Layr-Labs/eigensdk-rs?branch=sdk-ux-improvment#deecc715f7750d5fa37639ee1e79031d77aa3b60" dependencies = [ "alloy", - "alloy-primitives", - "alloy-provider", - "alloy-rpc-types", - "alloy-transport", + "eigen-common", "eigen-utils", "serde", "serde_json", @@ -2610,10 +2677,10 @@ dependencies = [ [[package]] name = "eigen-types" -version = "0.1.1" -source = "git+https://github.com/Layr-Labs/eigensdk-rs?rev=046d497#046d497e5128507c9db6d894a5dfbf399fdc6471" +version = "0.3.0" +source = "git+https://github.com/Layr-Labs/eigensdk-rs?branch=sdk-ux-improvment#deecc715f7750d5fa37639ee1e79031d77aa3b60" dependencies = [ - "alloy-primitives", + "alloy", "eigen-crypto-bls", "ethers", "num-bigint", @@ -2623,11 +2690,11 @@ dependencies = [ [[package]] name = "eigen-utils" -version = "0.1.1" -source = "git+https://github.com/Layr-Labs/eigensdk-rs?rev=046d497#046d497e5128507c9db6d894a5dfbf399fdc6471" +version = "0.3.0" +source = "git+https://github.com/Layr-Labs/eigensdk-rs?branch=sdk-ux-improvment#deecc715f7750d5fa37639ee1e79031d77aa3b60" dependencies = [ "alloy", - "reqwest 0.12.9", + "reqwest 0.12.12", ] [[package]] @@ -2714,14 +2781,14 @@ checksum = "0d28318a75d4aead5c4db25382e8ef717932d0346600cacae6357eb5941bc5ff" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.98", ] [[package]] name = "equivalent" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "errno" @@ -2880,7 +2947,7 @@ dependencies = [ "reqwest 0.11.27", "serde", "serde_json", - "syn 2.0.90", + "syn 2.0.98", "toml", "walkdir", ] @@ -2898,7 +2965,7 @@ dependencies = [ "proc-macro2", "quote", "serde_json", - "syn 2.0.90", + "syn 2.0.98", ] [[package]] @@ -2923,8 +2990,8 @@ dependencies = [ "rlp", "serde", "serde_json", - "strum", - "syn 2.0.90", + "strum 0.26.3", + "syn 2.0.98", "tempfile", "thiserror 1.0.69", "tiny-keccak", @@ -2940,7 +3007,7 @@ dependencies = [ "chrono", "ethers-core", "reqwest 0.11.27", - "semver 1.0.24", + "semver 1.0.25", "serde", "serde_json", "thiserror 1.0.69", @@ -3049,7 +3116,7 @@ dependencies = [ "path-slash", "rayon", "regex", - "semver 1.0.24", + "semver 1.0.25", "serde", "serde_json", "solang-parser", @@ -3064,9 +3131,9 @@ dependencies = [ [[package]] name = "event-listener" -version = "5.3.1" +version = "5.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6032be9bd27023a771701cc49f9f053c751055f71efb2e0ae5c15809093675ba" +checksum = "3492acde4c3fc54c845eaab3eed8bd00c7a7d881f78bfc801e43a93dec1331ae" dependencies = [ "concurrent-queue", "parking", @@ -3179,9 +3246,9 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "foldhash" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f81ec6369c545a7d40e4589b5597581fa1c441fe1cce96dd1de43159910a36a2" +checksum = "a0d2fde1f7b3d48b8395d5f2de76c18a528bd6a9cdde438df747bfcba3e05d6f" [[package]] name = "foreign-types" @@ -3295,7 +3362,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.98", ] [[package]] @@ -3372,7 +3439,19 @@ checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ "cfg-if 1.0.0", "libc", - "wasi", + "wasi 0.11.0+wasi-snapshot-preview1", +] + +[[package]] +name = "getrandom" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a49c392881ce6d5c3b8cb70f98717b7c07aabbdff06687b9030dbfbe2725f8" +dependencies = [ + "cfg-if 1.0.0", + "libc", + "wasi 0.13.3+wasi-0.2.2", + "windows-targets 0.52.6", ] [[package]] @@ -3383,9 +3462,9 @@ checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" [[package]] name = "glob" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" +checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" [[package]] name = "globset" @@ -3435,7 +3514,7 @@ dependencies = [ "futures-sink", "futures-util", "http 0.2.12", - "indexmap 2.7.0", + "indexmap 2.7.1", "slab", "tokio", "tokio-util 0.7.13", @@ -3444,9 +3523,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.4.7" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccae279728d634d083c00f6099cb58f01cc99c145b84b8be2f6c74618d79922e" +checksum = "5017294ff4bb30944501348f6f8e42e6ad28f42c8bbef7a74029aff064a4e3c2" dependencies = [ "atomic-waker", "bytes", @@ -3454,7 +3533,7 @@ dependencies = [ "futures-core", "futures-sink", "http 1.2.0", - "indexmap 2.7.0", + "indexmap 2.7.1", "slab", "tokio", "tokio-util 0.7.13", @@ -3530,12 +3609,6 @@ dependencies = [ "serde", ] -[[package]] -name = "hex-literal" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fe2267d4ed49bc07b63801559be28c718ea06c4738b7a03c94df7386d2cde46" - [[package]] name = "hkdf" version = "0.12.4" @@ -3621,9 +3694,9 @@ dependencies = [ [[package]] name = "httparse" -version = "1.9.5" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d71d3574edd2771538b901e6549113b4006ece66150fb69c0fb6d9a2adae946" +checksum = "f2d708df4e7140240a16cd6ab0ab65c972d7433ab77819ea693fde9c43811e2a" [[package]] name = "httpdate" @@ -3657,14 +3730,14 @@ dependencies = [ [[package]] name = "hyper" -version = "1.5.2" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "256fb8d4bd6413123cc9d91832d78325c48ff41677595be797d90f42969beae0" +checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80" dependencies = [ "bytes", "futures-channel", "futures-util", - "h2 0.4.7", + "h2 0.4.8", "http 1.2.0", "http-body 1.0.1", "httparse", @@ -3683,7 +3756,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "73b7d8abf35697b81a825e386fc151e0d503e8cb5fcb93cc8669c376dfd6f278" dependencies = [ "hex", - "hyper 1.5.2", + "hyper 1.6.0", "hyper-util", "pin-project-lite", "tokio", @@ -3707,16 +3780,16 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.27.3" +version = "0.27.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08afdbb5c31130e3034af566421053ab03787c640246a446327f550d11bcb333" +checksum = "2d191583f3da1305256f22463b9bb0471acad48a4e534a5218b9963e9c1f59b2" dependencies = [ "futures-util", "http 1.2.0", - "hyper 1.5.2", + "hyper 1.6.0", "hyper-util", - "rustls 0.23.20", - "rustls-native-certs 0.8.1", + "rustls 0.23.23", + "rustls-native-certs", "rustls-pki-types", "tokio", "tokio-rustls 0.26.1", @@ -3731,7 +3804,7 @@ checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" dependencies = [ "bytes", "http-body-util", - "hyper 1.5.2", + "hyper 1.6.0", "hyper-util", "native-tls", "tokio", @@ -3750,7 +3823,7 @@ dependencies = [ "futures-util", "http 1.2.0", "http-body 1.0.1", - "hyper 1.5.2", + "hyper 1.6.0", "pin-project-lite", "socket2", "tokio", @@ -3766,7 +3839,7 @@ checksum = "986c5ce3b994526b3cd75578e62554abd09f0899d6206de48b3e96ab34ccc8c7" dependencies = [ "hex", "http-body-util", - "hyper 1.5.2", + "hyper 1.6.0", "hyper-util", "pin-project-lite", "tokio", @@ -3911,7 +3984,7 @@ checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.98", ] [[package]] @@ -3976,7 +4049,7 @@ checksum = "a0eb5a3343abf848c0984fe4604b2b105da9539376e24fc0a3b0007411ae4fd9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.98", ] [[package]] @@ -3984,11 +4057,10 @@ name = "incredible-aggregator" version = "0.0.1-alpha" dependencies = [ "alloy", - "ark-bn254 0.5.0", - "ark-ec 0.5.0", - "ark-serialize 0.4.2", "ark-std 0.4.0", + "eigen-aggregator", "eigen-client-avsregistry", + "eigen-common", "eigen-crypto-bls", "eigen-logging", "eigen-services-avsregistry", @@ -4002,14 +4074,13 @@ dependencies = [ "incredible-bindings", "incredible-chainio", "incredible-config", - "incredible-metrics", "incredible-operator", "incredible-testing-utils", "jsonrpc-core", "jsonrpc-http-server", - "reqwest 0.12.9", + "reqwest 0.12.12", "serde", - "thiserror 2.0.7", + "thiserror 2.0.11", "tokio", "tokio-util 0.7.13", "toml", @@ -4021,8 +4092,10 @@ name = "incredible-avs" version = "0.0.1-alpha" dependencies = [ "alloy", - "clap", + "eigen-client-avsregistry", + "eigen-logging", "eigen-nodeapi", + "eigen-operator", "eyre", "futures", "incredible-aggregator", @@ -4030,13 +4103,11 @@ dependencies = [ "incredible-config", "incredible-metrics", "incredible-operator", - "incredible-operator-2", "incredible-task-generator", "metrics", - "metrics-util", "ntex", "serde", - "thiserror 2.0.7", + "thiserror 2.0.11", "tokio", "tracing", ] @@ -4055,6 +4126,7 @@ version = "0.0.1-alpha" dependencies = [ "alloy", "eigen-client-avsregistry", + "eigen-common", "eigen-logging", "eigen-types", "eigen-utils", @@ -4062,8 +4134,8 @@ dependencies = [ "futures-util", "incredible-bindings", "incredible-config", - "reqwest 0.12.9", - "thiserror 2.0.7", + "reqwest 0.12.12", + "thiserror 2.0.11", "tokio", "tracing", ] @@ -4073,7 +4145,7 @@ name = "incredible-challenger" version = "0.0.1-alpha" dependencies = [ "alloy", - "alloy-provider", + "eigen-common", "eigen-utils", "eyre", "futures-util", @@ -4082,7 +4154,7 @@ dependencies = [ "incredible-config", "incredible-task-generator", "incredible-testing-utils", - "thiserror 2.0.7", + "thiserror 2.0.11", "tokio", "toml", "tracing", @@ -4109,7 +4181,7 @@ dependencies = [ "ruint", "serde", "tempfile", - "thiserror 2.0.7", + "thiserror 2.0.11", "tokio", "toml", "tracing", @@ -4120,7 +4192,6 @@ name = "incredible-metrics" version = "0.0.1-alpha" dependencies = [ "alloy", - "alloy-provider", "eigen-metrics", "eyre", "futures-util", @@ -4128,8 +4199,8 @@ dependencies = [ "incredible-config", "metrics", "metrics-util", - "reqwest 0.12.9", - "thiserror 2.0.7", + "reqwest 0.12.12", + "thiserror 2.0.11", "tokio", ] @@ -4138,52 +4209,16 @@ name = "incredible-operator" version = "0.0.1-alpha" dependencies = [ "alloy", - "alloy-provider", - "ark-ec 0.5.0", - "ark-ff 0.5.0", - "eigen-cli", - "eigen-client-avsregistry", - "eigen-client-eth", - "eigen-crypto-bls", - "eigen-crypto-bn254", - "eigen-logging", - "eigen-metrics-collectors-rpc-calls", - "eigen-types", - "eigen-utils", - "eyre", - "futures-util", - "hex", - "incredible-aggregator", - "incredible-bindings", - "incredible-config", - "incredible-metrics", - "incredible-testing-utils", - "rand_core", - "reqwest 0.12.9", - "rust-bls-bn254 0.1.0", - "serde_json", - "tempfile", - "thiserror 2.0.7", - "tokio", - "toml", - "tracing", -] - -[[package]] -name = "incredible-operator-2" -version = "0.0.1-alpha" -dependencies = [ - "alloy", - "alloy-provider", "ark-ec 0.5.0", "ark-ff 0.5.0", - "eigen-cli", + "eigen-aggregator", "eigen-client-avsregistry", "eigen-client-eth", "eigen-crypto-bls", "eigen-crypto-bn254", "eigen-logging", "eigen-metrics-collectors-rpc-calls", + "eigen-operator", "eigen-types", "eigen-utils", "eyre", @@ -4192,15 +4227,14 @@ dependencies = [ "incredible-aggregator", "incredible-bindings", "incredible-config", - "incredible-metrics", - "incredible-operator", "incredible-testing-utils", "rand_core", - "reqwest 0.12.9", + "reqwest 0.12.12", "rust-bls-bn254 0.1.0", + "serde", "serde_json", "tempfile", - "thiserror 2.0.7", + "thiserror 2.0.11", "tokio", "toml", "tracing", @@ -4218,6 +4252,7 @@ dependencies = [ "clap", "eigen-client-avsregistry", "eigen-client-elcontracts", + "eigen-common", "eigen-crypto-bls", "eigen-logging", "eigen-metrics", @@ -4246,15 +4281,15 @@ name = "incredible-task-generator" version = "0.0.1-alpha" dependencies = [ "alloy", - "alloy-provider", + "eigen-common", "eigen-utils", "eyre", "futures-util", "incredible-bindings", "incredible-config", "lazy_static", - "reqwest 0.12.9", - "thiserror 2.0.7", + "reqwest 0.12.12", + "thiserror 2.0.11", "tokio", "tracing", ] @@ -4264,6 +4299,7 @@ name = "incredible-testing-utils" version = "0.0.1-alpha" dependencies = [ "alloy", + "eigen-common", "eigen-testing-utils", "eigen-utils", "tracing", @@ -4288,9 +4324,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.7.0" +version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62f822373a4fe84d4bb149bf54e584a7f4abec90e072ed49cda0edea5b95471f" +checksum = "8c9c992b02b5b4c94ea26e32fe5bccb7aa7d9f390ab5c1221ff895bc7ea8b652" dependencies = [ "equivalent", "hashbrown 0.15.2", @@ -4332,9 +4368,9 @@ dependencies = [ [[package]] name = "ipnet" -version = "2.10.1" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddc24109865250148c2e0f3d25d4f0f479571723792d3802153c60922a4fb708" +checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" [[package]] name = "is_terminal_polyfill" @@ -4395,9 +4431,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.76" +version = "0.3.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6717b6b5b077764fb5966237269cb3c64edddde4b14ce42647430a78ced9e7b7" +checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" dependencies = [ "once_cell", "wasm-bindgen", @@ -4506,7 +4542,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "55cb077ad656299f160924eb2912aa147d7339ea7d69e1b5517326fdcec3c1ca" dependencies = [ "ascii-canvas", - "bit-set", + "bit-set 0.5.3", "ena", "itertools 0.11.0", "lalrpop-util", @@ -4543,9 +4579,9 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] name = "libc" -version = "0.2.168" +version = "0.2.169" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aaeb2981e0606ca11d79718f8bb01164f1d6ed75080182d3abf017e6d244b6d" +checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" [[package]] name = "libloading" @@ -4569,16 +4605,16 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.8.0", "libc", "redox_syscall 0.5.8", ] [[package]] name = "linux-raw-sys" -version = "0.4.14" +version = "0.4.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" +checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" [[package]] name = "litemap" @@ -4598,9 +4634,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.22" +version = "0.4.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" +checksum = "04cbf5b083de1c7e0222a7a51dbfdba1cbe1c6ab0b15e29fff3f6c077fd9cd9f" [[package]] name = "lru" @@ -4639,16 +4675,16 @@ dependencies = [ [[package]] name = "metrics-exporter-prometheus" -version = "0.16.1" +version = "0.16.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12779523996a67c13c84906a876ac6fe4d07a6e1adb54978378e13f199251a62" +checksum = "dd7399781913e5393588a8d8c6a2867bf85fb38eaf2502fdce465aad2dc6f034" dependencies = [ "base64 0.22.1", "http-body-util", - "hyper 1.5.2", - "hyper-rustls 0.27.3", + "hyper 1.6.0", + "hyper-rustls 0.27.5", "hyper-util", - "indexmap 2.7.0", + "indexmap 2.7.1", "ipnet", "metrics", "metrics-util", @@ -4668,7 +4704,7 @@ dependencies = [ "crossbeam-epoch", "crossbeam-utils", "hashbrown 0.15.2", - "indexmap 2.7.0", + "indexmap 2.7.1", "metrics", "ordered-float", "quanta", @@ -4692,9 +4728,9 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.8.0" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" +checksum = "b3b1c9bd4fe1f0f8b387f6eb9eb3b4a1aa26185e5750efb9140301703f62cd1b" dependencies = [ "adler2", ] @@ -4706,7 +4742,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" dependencies = [ "libc", - "wasi", + "wasi 0.11.0+wasi-snapshot-preview1", "windows-sys 0.52.0", ] @@ -4718,9 +4754,9 @@ checksum = "6a51313c5820b0b02bd422f4b44776fbf47961755c74ce64afc73bfad10226c3" [[package]] name = "native-tls" -version = "0.2.12" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8614eb2c83d59d1c8cc974dd3f920198647674a0a035e1af1fa58707e317466" +checksum = "0dab59f8e050d5df8e4dd87d9206fb6f65a483e20ac9fda365ade4fab353196c" dependencies = [ "libc", "log", @@ -4765,7 +4801,7 @@ version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.8.0", "cfg-if 1.0.0", "cfg_aliases", "libc", @@ -4783,12 +4819,12 @@ dependencies = [ [[package]] name = "ntex" -version = "2.10.0" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1988f5a24be40f4cd06c5a1d66ff71da4dcf161f19a61013e6f967642c3c5bc" +checksum = "5f9733b93874b834484947eafbbb8136544b20ea8473a46be40e197cb148284b" dependencies = [ "base64 0.22.1", - "bitflags 2.6.0", + "bitflags 2.8.0", "bytes", "encoding_rs", "httparse", @@ -4825,7 +4861,7 @@ version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2ffd6ac357a3fd885753ddeb4130ec92474e79d013362532eba4778854466981" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.8.0", "bytes", "futures-core", "serde", @@ -4842,11 +4878,11 @@ dependencies = [ [[package]] name = "ntex-h2" -version = "1.5.0" +version = "1.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b235208bb51db69da394f3c77361bed9b62dc50b424842952ff636b1b36f800" +checksum = "8f17e4eec506679d78f67b32c42ee4e35d0dcd97451251a4d891184185187520" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.8.0", "fxhash", "log", "nanorand", @@ -4855,7 +4891,6 @@ dependencies = [ "ntex-http", "ntex-io", "ntex-net", - "ntex-rt", "ntex-service", "ntex-util", "pin-project-lite", @@ -4879,15 +4914,14 @@ dependencies = [ [[package]] name = "ntex-io" -version = "2.9.2" +version = "2.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "857063bbe358ab1d9b49ce3fdcdaf39394aea018818d0bdae3add00ad6dc27c1" +checksum = "3d53ae6ec303f77f56ab6bba7fc32a05932174d088ec24502a1e4942284b32e2" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.8.0", "log", "ntex-bytes", "ntex-codec", - "ntex-rt", "ntex-service", "ntex-util", "pin-project-lite", @@ -4936,9 +4970,9 @@ dependencies = [ [[package]] name = "ntex-rt" -version = "0.4.23" +version = "0.4.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f81c034a141eb612cd22f8699592a049ab528c812272b071484c13fbf6b6a4f3" +checksum = "c6ff00071886fd8f78f335f7bc8d369822c7ea8b0504fa796f8bbd4a33bde29f" dependencies = [ "async-channel", "futures-core", @@ -4949,12 +4983,13 @@ dependencies = [ [[package]] name = "ntex-server" -version = "2.6.0" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36cc0ec66ac03f7a76637a1264a57e3234bd95c478fc282ace88c3bde908dc5f" +checksum = "ebf31f5c770cb0244a8125aba1c5dfaca38f145807a42ba33df30c35bb0c33f7" dependencies = [ "async-broadcast", "async-channel", + "core_affinity", "ctrlc", "log", "ntex-bytes", @@ -4979,9 +5014,9 @@ dependencies = [ [[package]] name = "ntex-tls" -version = "2.3.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b6df536ec6f8f2499f5e3a2e2893cfc1b775408ee0c917d0570821025dc22e3" +checksum = "09365414dfba07030f914123f24631ae04caeed8ead42e219a5d7b54d3f52518" dependencies = [ "log", "ntex-bytes", @@ -5007,11 +5042,11 @@ dependencies = [ [[package]] name = "ntex-util" -version = "2.8.0" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73a7a68f2b6508ac7da46cc5b78cd9c997580473b3673a308c0f1e27c643a402" +checksum = "043bbb0b520d813f90c52edc3c8cf225621f4c959ad931e5d8420136f57f63d2" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.8.0", "futures-core", "futures-sink", "futures-timer", @@ -5097,14 +5132,14 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.98", ] [[package]] name = "nybbles" -version = "0.2.1" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95f06be0417d97f81fe4e5c86d7d01b392655a9cac9c19a848aa033e18937b23" +checksum = "8983bb634df7248924ee0c4c3a749609b5abcb082c28fffe3254b3eb3602b307" dependencies = [ "alloy-rlp", "const-hex", @@ -5115,24 +5150,24 @@ dependencies = [ [[package]] name = "object" -version = "0.36.5" +version = "0.36.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aedf0a2d09c573ed1d8d85b30c119153926a2b36dce0ab28322c09a117a4683e" +checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" dependencies = [ "memchr", ] [[package]] name = "once_cell" -version = "1.20.2" +version = "1.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" +checksum = "945462a4b81e43c4e3ba96bd7b49d834c6f61198356aa858733bc4acf3cbe62e" [[package]] name = "oneshot" -version = "0.1.8" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e296cf87e61c9cfc1a61c3c63a0f7f286ed4554e0e22be84e8a38e1d264a2a29" +checksum = "79d72a7c0f743d2ebb0a2ad1d219db75fdc799092ed3a884c9144c42a31225bd" [[package]] name = "open-fastrlp" @@ -5161,11 +5196,11 @@ dependencies = [ [[package]] name = "openssl" -version = "0.10.68" +version = "0.10.71" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6174bc48f102d208783c2c84bf931bb75927a617866870de8a4ea85597f871f5" +checksum = "5e14130c6a98cd258fdcb0fb6d744152343ff729cbfcb28c656a9d12b999fbcd" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.8.0", "cfg-if 1.0.0", "foreign-types", "libc", @@ -5182,20 +5217,20 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.98", ] [[package]] name = "openssl-probe" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" +checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" [[package]] name = "openssl-sys" -version = "0.9.104" +version = "0.9.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45abf306cbf99debc8195b66b7346498d7b10c210de50418b5ccd7ceba08c741" +checksum = "8bb61ea9811cc39e3c2069f40b8b8e2e70d8569b361f879786cc7ed48b777cdd" dependencies = [ "cc", "libc", @@ -5211,18 +5246,18 @@ checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" [[package]] name = "ordered-float" -version = "4.5.0" +version = "4.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c65ee1f9701bf938026630b455d5315f490640234259037edb259798b3bcf85e" +checksum = "7bb71e1b3fa6ca1c61f383464aaf2bb0e2f8e772a1f01d486832464de363b951" dependencies = [ "num-traits", ] [[package]] name = "outref" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4030760ffd992bef45b0ae3f10ce1aba99e33464c90d14dd7c039884963ddc7a" +checksum = "1a80800c0488c3a21695ea981a54918fbb37abf04f4d0720c453632255e2ff0e" [[package]] name = "overload" @@ -5232,28 +5267,30 @@ checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" [[package]] name = "parity-scale-codec" -version = "3.6.12" +version = "3.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "306800abfa29c7f16596b5970a588435e3d5b3149683d00c12b699cc19f895ee" +checksum = "c9fde3d0718baf5bc92f577d652001da0f8d54cd03a7974e118d04fc888dc23d" dependencies = [ "arrayvec", "bitvec", "byte-slice-cast", + "const_format", "impl-trait-for-tuples", "parity-scale-codec-derive", + "rustversion", "serde", ] [[package]] name = "parity-scale-codec-derive" -version = "3.6.12" +version = "3.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d830939c76d294956402033aee57a6da7b438f2294eb94864c37b0569053a42c" +checksum = "581c837bb6b9541ce7faa9377c20616e4fb7650f6b0f68bc93c827ee504fb7b3" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.98", ] [[package]] @@ -5332,7 +5369,7 @@ dependencies = [ "regex", "regex-syntax", "structmeta", - "syn 2.0.90", + "syn 2.0.98", ] [[package]] @@ -5413,7 +5450,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b7cafe60d6cf8e62e1b9b2ea516a089c008945bb5a275416789e7db0bc199dc" dependencies = [ "memchr", - "thiserror 2.0.7", + "thiserror 2.0.11", "ucd-trie", ] @@ -5424,7 +5461,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" dependencies = [ "fixedbitset", - "indexmap 2.7.0", + "indexmap 2.7.1", ] [[package]] @@ -5439,80 +5476,71 @@ dependencies = [ [[package]] name = "phf" -version = "0.11.2" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc" +checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" dependencies = [ "phf_macros", - "phf_shared 0.11.2", + "phf_shared", ] [[package]] name = "phf_generator" -version = "0.11.2" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0" +checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" dependencies = [ - "phf_shared 0.11.2", + "phf_shared", "rand", ] [[package]] name = "phf_macros" -version = "0.11.2" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3444646e286606587e49f3bcf1679b8cef1dc2c5ecc29ddacaffc305180d464b" +checksum = "f84ac04429c13a7ff43785d75ad27569f2951ce0ffd30a3321230db2fc727216" dependencies = [ "phf_generator", - "phf_shared 0.11.2", + "phf_shared", "proc-macro2", "quote", - "syn 2.0.90", -] - -[[package]] -name = "phf_shared" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096" -dependencies = [ - "siphasher", + "syn 2.0.98", ] [[package]] name = "phf_shared" -version = "0.11.2" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b" +checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" dependencies = [ "siphasher", ] [[package]] name = "pin-project" -version = "1.1.7" +version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be57f64e946e500c8ee36ef6331845d40a93055567ec57e8fae13efd33759b95" +checksum = "dfe2e71e1471fe07709406bf725f710b02927c9c54b2b5b2ec0e8087d97c327d" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.7" +version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c0f5fad0874fc7abcd4d750e76917eaebbecaa2c20bde22e1dbeeba8beb758c" +checksum = "f6e859e6e5bd50440ab63c47e3ebabc90f26251f7c73c3d3e837b74a1cc3fa67" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.98", ] [[package]] name = "pin-project-lite" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "915a1e146535de9163f3987b8944ed8cf49a18bb0056bcebcdcece385cece4ff" +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" [[package]] name = "pin-utils" @@ -5580,12 +5608,12 @@ checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" [[package]] name = "prettyplease" -version = "0.2.25" +version = "0.2.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64d1ec885c64d0457d564db4ec299b2dae3f9c02808b8ad9c3a089c591b18033" +checksum = "6924ced06e1f7dfe3fa48d57b9f74f55d8915f5036121bef647ef4b204895fac" dependencies = [ "proc-macro2", - "syn 2.0.90", + "syn 2.0.98", ] [[package]] @@ -5630,27 +5658,27 @@ dependencies = [ "proc-macro-error-attr2", "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.98", ] [[package]] name = "proc-macro2" -version = "1.0.92" +version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0" +checksum = "60946a68e5f9d28b0dc1c21bb8a97ee7d018a8b322fa57838ba31cc878e22d99" dependencies = [ "unicode-ident", ] [[package]] name = "proptest" -version = "1.5.0" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4c2511913b88df1637da85cc8d96ec8e43a3f8bb8ccb71ee1ac240d6f3df58d" +checksum = "14cae93065090804185d3b75f0bf93b8eeda30c7a9b4a33d3bdb3988d6229e50" dependencies = [ - "bit-set", - "bit-vec", - "bitflags 2.6.0", + "bit-set 0.8.0", + "bit-vec 0.8.0", + "bitflags 2.8.0", "lazy_static", "num-traits", "rand", @@ -5664,15 +5692,15 @@ dependencies = [ [[package]] name = "quanta" -version = "0.12.4" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773ce68d0bb9bc7ef20be3536ffe94e223e1f365bd374108b2659fac0c65cfe6" +checksum = "3bd1fe6824cea6538803de3ff1bc0cf3949024db3d43c9643024bfb33a807c0e" dependencies = [ "crossbeam-utils", "libc", "once_cell", "raw-cpuid", - "wasi", + "wasi 0.11.0+wasi-snapshot-preview1", "web-sys", "winapi", ] @@ -5685,9 +5713,9 @@ checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" [[package]] name = "quote" -version = "1.0.37" +version = "1.0.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" +checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc" dependencies = [ "proc-macro2", ] @@ -5736,7 +5764,7 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom", + "getrandom 0.2.15", ] [[package]] @@ -5759,11 +5787,11 @@ dependencies = [ [[package]] name = "raw-cpuid" -version = "11.2.0" +version = "11.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ab240315c661615f2ee9f0f2cd32d5a7343a84d5ebcccb99d46e6637565e7b0" +checksum = "529468c1335c1c03919960dfefdb1b3648858c20d7ec2d0663e728e4a717efbc" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.8.0", ] [[package]] @@ -5816,7 +5844,7 @@ version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "03a862b389f93e68874fbf580b9de08dd02facb9a788ebadaf4a3fd33cf58834" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.8.0", ] [[package]] @@ -5825,7 +5853,7 @@ version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" dependencies = [ - "getrandom", + "getrandom 0.2.15", "libredox", "thiserror 1.0.69", ] @@ -5908,21 +5936,21 @@ dependencies = [ [[package]] name = "reqwest" -version = "0.12.9" +version = "0.12.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a77c62af46e79de0a562e1a9849205ffcb7fc1238876e9bd743357570e04046f" +checksum = "43e734407157c3c2034e0258f5e4473ddb361b1e85f95a66690d67264d7cd1da" dependencies = [ "base64 0.22.1", "bytes", "encoding_rs", "futures-core", "futures-util", - "h2 0.4.7", + "h2 0.4.8", "http 1.2.0", "http-body 1.0.1", "http-body-util", - "hyper 1.5.2", - "hyper-rustls 0.27.3", + "hyper 1.6.0", + "hyper-rustls 0.27.5", "hyper-tls", "hyper-util", "ipnet", @@ -5941,6 +5969,7 @@ dependencies = [ "system-configuration 0.6.1", "tokio", "tokio-native-tls", + "tower", "tower-service", "url", "wasm-bindgen", @@ -5968,7 +5997,7 @@ dependencies = [ "cc", "libc", "once_cell", - "spin 0.5.2", + "spin", "untrusted 0.7.1", "web-sys", "winapi", @@ -5976,15 +6005,14 @@ dependencies = [ [[package]] name = "ring" -version = "0.17.8" +version = "0.17.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" +checksum = "e75ec5e92c4d8aede845126adc388046234541629e76029599ed35a003c7ed24" dependencies = [ "cc", "cfg-if 1.0.0", - "getrandom", + "getrandom 0.2.15", "libc", - "spin 0.9.8", "untrusted 0.9.0", "windows-sys 0.52.0", ] @@ -6022,9 +6050,9 @@ dependencies = [ [[package]] name = "ruint" -version = "1.12.4" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5ef8fb1dd8de3870cb8400d51b4c2023854bbafd5431a3ac7e7317243e22d2f" +checksum = "825df406ec217a8116bd7b06897c6cc8f65ffefc15d030ae2c9540acc9ed50b6" dependencies = [ "alloy-rlp", "ark-ff 0.3.0", @@ -6121,9 +6149,9 @@ checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" [[package]] name = "rustc-hash" -version = "2.1.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7fb8039b3032c191086b10f11f319a6e99e1e82889c5cc6046f515c9db1d497" +checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" [[package]] name = "rustc-hex" @@ -6146,16 +6174,16 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" dependencies = [ - "semver 1.0.24", + "semver 1.0.25", ] [[package]] name = "rustix" -version = "0.38.42" +version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f93dc38ecbab2eb790ff964bb77fa94faf256fd3e73285fd7ba0903b76bedb85" +checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.8.0", "errno", "libc", "linux-raw-sys", @@ -6169,39 +6197,26 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" dependencies = [ "log", - "ring 0.17.8", + "ring 0.17.9", "rustls-webpki 0.101.7", "sct", ] [[package]] name = "rustls" -version = "0.23.20" +version = "0.23.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5065c3f250cbd332cd894be57c40fa52387247659b14a2d6041d121547903b1b" +checksum = "47796c98c480fce5406ef69d1c76378375492c3b0a0de587be0c1d9feb12f395" dependencies = [ "aws-lc-rs", "once_cell", - "ring 0.17.8", + "ring 0.17.9", "rustls-pki-types", "rustls-webpki 0.102.8", "subtle", "zeroize", ] -[[package]] -name = "rustls-native-certs" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5bfb394eeed242e909609f56089eecfe5fda225042e8b171791b9c95f5931e5" -dependencies = [ - "openssl-probe", - "rustls-pemfile 2.2.0", - "rustls-pki-types", - "schannel", - "security-framework 2.11.1", -] - [[package]] name = "rustls-native-certs" version = "0.8.1" @@ -6211,7 +6226,7 @@ dependencies = [ "openssl-probe", "rustls-pki-types", "schannel", - "security-framework 3.0.1", + "security-framework 3.2.0", ] [[package]] @@ -6234,9 +6249,9 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.10.1" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2bf47e6ff922db3825eb750c4e2ff784c6ff8fb9e13046ef6a1d1c5401b0b37" +checksum = "917ce264624a4b4db1c364dcc35bfca9ded014d0a958cd47ad3e960e988ea51c" [[package]] name = "rustls-webpki" @@ -6244,7 +6259,7 @@ version = "0.101.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" dependencies = [ - "ring 0.17.8", + "ring 0.17.9", "untrusted 0.9.0", ] @@ -6255,16 +6270,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" dependencies = [ "aws-lc-rs", - "ring 0.17.8", + "ring 0.17.9", "rustls-pki-types", "untrusted 0.9.0", ] [[package]] name = "rustversion" -version = "1.0.18" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e819f2bc632f285be6d7cd36e25940d45b2391dd6d9b939e79de557f7014248" +checksum = "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4" [[package]] name = "rusty-fork" @@ -6280,9 +6295,9 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.18" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" +checksum = "6ea1a2d0a644769cc99faa24c3ad26b379b786fe7c36fd3c546254801650e6dd" [[package]] name = "salsa20" @@ -6323,7 +6338,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.98", ] [[package]] @@ -6337,9 +6352,9 @@ dependencies = [ [[package]] name = "schnellru" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9a8ef13a93c54d20580de1e5c413e624e53121d42fc7e2c11d10ef7f8b02367" +checksum = "356285bbf17bea63d9e52e96bd18f039672ac92b55b8cb997d6162a2a37d1649" dependencies = [ "ahash", "cfg-if 1.0.0", @@ -6382,7 +6397,7 @@ version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" dependencies = [ - "ring 0.17.8", + "ring 0.17.9", "untrusted 0.9.0", ] @@ -6406,7 +6421,7 @@ version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.8.0", "core-foundation 0.9.4", "core-foundation-sys", "libc", @@ -6415,11 +6430,11 @@ dependencies = [ [[package]] name = "security-framework" -version = "3.0.1" +version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1415a607e92bec364ea2cf9264646dcce0f91e6d65281bd6f2819cca3bf39c8" +checksum = "271720403f46ca04f7ba6f55d438f8bd878d6b8ca0a1046e8228c4145bcbb316" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.8.0", "core-foundation 0.10.0", "core-foundation-sys", "libc", @@ -6428,9 +6443,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.12.1" +version = "2.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa39c7303dc58b5543c94d22c1766b0d31f2ee58306363ea622b10bbc075eaa2" +checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" dependencies = [ "core-foundation-sys", "libc", @@ -6447,9 +6462,9 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.24" +version = "1.0.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3cb6eb87a131f756572d7fb904f6e7b68633f09cca868c5df1c4b8d1a694bbba" +checksum = "f79dfe2d285b0488816f30e700a7438c5a73d816b5b7d3ac72fbc48b0d185e03" dependencies = [ "serde", ] @@ -6477,29 +6492,29 @@ checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" [[package]] name = "serde" -version = "1.0.216" +version = "1.0.217" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b9781016e935a97e8beecf0c933758c97a5520d32930e460142b4cd80c6338e" +checksum = "02fc4265df13d6fa1d00ecff087228cc0a2b5f3c0e87e258d8b94a156e984c70" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.216" +version = "1.0.217" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46f859dbbf73865c6627ed570e78961cd3ac92407a2d117204c49232485da55e" +checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.98", ] [[package]] name = "serde_json" -version = "1.0.133" +version = "1.0.138" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7fceb2473b9166b2294ef05efcb65a3db80803f0b03ef86a5fc88a2b85ee377" +checksum = "d434192e7da787e94a6ea7e9670b26a036d0ca41e0b7efb2676dd32bae872949" dependencies = [ "itoa", "memchr", @@ -6515,7 +6530,7 @@ checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.98", ] [[package]] @@ -6541,15 +6556,15 @@ dependencies = [ [[package]] name = "serde_with" -version = "3.11.0" +version = "3.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e28bdad6db2b8340e449f7108f020b3b092e8583a9e3fb82713e1d4e71fe817" +checksum = "d6b6f7f2fcb69f747921f79f3926bd1e203fce4fef62c268dd3abfb6d86029aa" dependencies = [ "base64 0.22.1", "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.7.0", + "indexmap 2.7.1", "serde", "serde_derive", "serde_json", @@ -6559,14 +6574,14 @@ dependencies = [ [[package]] name = "serde_with_macros" -version = "3.11.0" +version = "3.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d846214a9854ef724f3da161b426242d8de7c1fc7de2f89bb1efcb154dca79d" +checksum = "8d00caa5193a3c8362ac2b73be6b9e768aa5a4b2f721d8f4b339600c3cb51f8e" dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.98", ] [[package]] @@ -6668,21 +6683,21 @@ dependencies = [ [[package]] name = "simple_asn1" -version = "0.6.2" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adc4e5204eb1910f40f9cfa375f6f05b68c3abac4b6fd879c8ff5e7ae8a0a085" +checksum = "297f631f50729c8c99b84667867963997ec0b50f32b2a7dbcab828ef0541e8bb" dependencies = [ "num-bigint", "num-traits", - "thiserror 1.0.69", + "thiserror 2.0.11", "time", ] [[package]] name = "siphasher" -version = "0.3.11" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" +checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" [[package]] name = "sketches-ddsketch" @@ -6701,9 +6716,9 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.13.2" +version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" +checksum = "7fcf8323ef1faaee30a44a340193b1ac6814fd9b7b4e88e9d4519a3e4abe1cfd" dependencies = [ "serde", ] @@ -6738,12 +6753,6 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" -[[package]] -name = "spin" -version = "0.9.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" - [[package]] name = "spki" version = "0.7.3" @@ -6768,14 +6777,13 @@ checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" [[package]] name = "string_cache" -version = "0.8.7" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f91138e76242f575eb1d3b38b4f1362f10d3a43f47d182a5b359af488a02293b" +checksum = "938d512196766101d333398efde81bc1f37b00cb42c2f8350e5df639f040bbbe" dependencies = [ "new_debug_unreachable", - "once_cell", "parking_lot 0.12.3", - "phf_shared 0.10.0", + "phf_shared", "precomputed-hash", ] @@ -6794,7 +6802,7 @@ dependencies = [ "proc-macro2", "quote", "structmeta-derive", - "syn 2.0.90", + "syn 2.0.98", ] [[package]] @@ -6805,7 +6813,7 @@ checksum = "152a0b65a590ff6c3da95cabe2353ee04e6167c896b28e3b14478c2636c922fc" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.98", ] [[package]] @@ -6814,7 +6822,16 @@ version = "0.26.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" dependencies = [ - "strum_macros", + "strum_macros 0.26.4", +] + +[[package]] +name = "strum" +version = "0.27.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f64def088c51c9510a8579e3c5d67c65349dcf755e5479ad3d010aa6454e2c32" +dependencies = [ + "strum_macros 0.27.1", ] [[package]] @@ -6827,7 +6844,20 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.90", + "syn 2.0.98", +] + +[[package]] +name = "strum_macros" +version = "0.27.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c77a8c5abcaf0f9ce05d62342b7d298c346515365c36b673df4ebe3ced01fde8" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "rustversion", + "syn 2.0.98", ] [[package]] @@ -6847,7 +6877,7 @@ dependencies = [ "hex", "once_cell", "reqwest 0.11.27", - "semver 1.0.24", + "semver 1.0.25", "serde", "serde_json", "sha2", @@ -6869,9 +6899,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.90" +version = "2.0.98" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "919d3b74a5dd0ccd15aeb8f93e7006bd9e14c295087c9896a110f490752bcf31" +checksum = "36147f1a48ae0ec2b5b3bc5b537d267457555a10dc06f3dbc8cb11ba3006d3b1" dependencies = [ "proc-macro2", "quote", @@ -6880,14 +6910,14 @@ dependencies = [ [[package]] name = "syn-solidity" -version = "0.8.15" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "219389c1ebe89f8333df8bdfb871f6631c552ff399c23cac02480b6088aad8f0" +checksum = "9c2de690018098e367beeb793991c7d4dc7270f42c9d2ac4ccc876c1368ca430" dependencies = [ "paste", "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.98", ] [[package]] @@ -6913,7 +6943,7 @@ checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.98", ] [[package]] @@ -6933,7 +6963,7 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.8.0", "core-foundation 0.9.4", "system-configuration-sys 0.6.0", ] @@ -6966,12 +6996,13 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "tempfile" -version = "3.14.0" +version = "3.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28cce251fcbc87fac86a866eeb0d6c2d536fc16d06f184bb61aeae11aa4cee0c" +checksum = "22e5a0acb1f3f55f65cc4a866c361b2fb2a0ff6366785ae6fbb5f85df07ba230" dependencies = [ "cfg-if 1.0.0", "fastrand", + "getrandom 0.3.1", "once_cell", "rustix", "windows-sys 0.59.0", @@ -6990,9 +7021,9 @@ dependencies = [ [[package]] name = "testcontainers" -version = "0.23.1" +version = "0.23.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f40cc2bd72e17f328faf8ca7687fe337e61bccd8acf9674fa78dd3792b045e1" +checksum = "042009c52a4204476bff461ca8ef17bab6f1a91628504a8a36c6fd2c1cde2d5e" dependencies = [ "async-trait", "bollard", @@ -7009,7 +7040,7 @@ dependencies = [ "serde", "serde_json", "serde_with", - "thiserror 1.0.69", + "thiserror 2.0.11", "tokio", "tokio-stream", "tokio-tar", @@ -7028,11 +7059,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.7" +version = "2.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93605438cbd668185516ab499d589afb7ee1859ea3d5fc8f6b0755e1c7443767" +checksum = "d452f284b73e6d76dd36758a0c8684b1d5be31f92b89d07fd5822175732206fc" dependencies = [ - "thiserror-impl 2.0.7", + "thiserror-impl 2.0.11", ] [[package]] @@ -7043,18 +7074,18 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.98", ] [[package]] name = "thiserror-impl" -version = "2.0.7" +version = "2.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1d8749b4531af2117677a5fcd12b1348a3fe2b81e36e61ffeac5c4aa3273e36" +checksum = "26afc1baea8a989337eeb52b6e72a039780ce45c3edfcc9c5b9d112feeb173c2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.98", ] [[package]] @@ -7128,9 +7159,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.8.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" +checksum = "022db8904dfa342efe721985167e9fcd16c29b226db4397ed752a761cfce81e8" dependencies = [ "tinyvec_macros", ] @@ -7143,9 +7174,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.42.0" +version = "1.43.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cec9b21b0450273377fc97bd4c33a8acffc8c996c987a7c5b319a0083707551" +checksum = "3d61fa4ffa3de412bfea335c6ecff681de2b609ba3c77ef3e00e521813a9ed9e" dependencies = [ "backtrace", "bytes", @@ -7161,13 +7192,13 @@ dependencies = [ [[package]] name = "tokio-macros" -version = "2.4.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" +checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.98", ] [[package]] @@ -7196,7 +7227,7 @@ version = "0.26.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5f6d0975eaace0cf0fcadee4e4aaa5da15b5c079146f2cffb67c113be122bf37" dependencies = [ - "rustls 0.23.20", + "rustls 0.23.23", "tokio", ] @@ -7250,12 +7281,12 @@ checksum = "edc5f74e248dc973e0dbb7b74c7e0d6fcc301c694ff50049504004ef4d0cdcd9" dependencies = [ "futures-util", "log", - "rustls 0.23.20", + "rustls 0.23.23", "rustls-pki-types", "tokio", "tokio-rustls 0.26.1", "tungstenite 0.24.0", - "webpki-roots 0.26.7", + "webpki-roots 0.26.8", ] [[package]] @@ -7287,9 +7318,9 @@ dependencies = [ [[package]] name = "toml" -version = "0.8.19" +version = "0.8.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e" +checksum = "cd87a5cdd6ffab733b2f74bc4fd7ee5fff6634124999ac278c35fc78c6120148" dependencies = [ "serde", "serde_spanned", @@ -7308,11 +7339,11 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.22.22" +version = "0.22.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" +checksum = "17b4795ff5edd201c7cd6dca065ae59972ce77d1b80fa0a84d94950ece7d1474" dependencies = [ - "indexmap 2.7.0", + "indexmap 2.7.1", "serde", "serde_spanned", "toml_datetime", @@ -7329,6 +7360,7 @@ dependencies = [ "futures-util", "pin-project-lite", "sync_wrapper 1.0.2", + "tokio", "tower-layer", "tower-service", ] @@ -7364,7 +7396,7 @@ checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.98", ] [[package]] @@ -7473,7 +7505,7 @@ dependencies = [ "httparse", "log", "rand", - "rustls 0.23.20", + "rustls 0.23.23", "rustls-pki-types", "sha1", "thiserror 1.0.69", @@ -7482,9 +7514,9 @@ dependencies = [ [[package]] name = "typenum" -version = "1.17.0" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" +checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" [[package]] name = "ucd-trie" @@ -7512,15 +7544,15 @@ checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94" [[package]] name = "unicase" -version = "2.8.0" +version = "2.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e51b68083f157f853b6379db119d1c1be0e6e4dec98101079dec41f6f5cf6df" +checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539" [[package]] name = "unicode-ident" -version = "1.0.14" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83" +checksum = "a210d160f08b701c8721ba1c726c11662f877ea6b7094007e1ca9a1041945034" [[package]] name = "unicode-normalization" @@ -7591,24 +7623,21 @@ version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" dependencies = [ - "getrandom", + "getrandom 0.2.15", "serde", ] [[package]] name = "uuid" -version = "1.11.0" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8c5f0a0af699448548ad1a2fbf920fb4bee257eae39953ba95cb84891a0446a" -dependencies = [ - "getrandom", -] +checksum = "8c1f41ffb7cf259f1ecc2876861a17e7142e63ead296f671f81f6ae85903e0d6" [[package]] name = "valuable" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" +checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" [[package]] name = "vcpkg" @@ -7630,9 +7659,9 @@ checksum = "5c3082ca00d5a5ef149bb8b555a72ae84c9c59f7250f013ac822ac2e49b19c64" [[package]] name = "wait-timeout" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f200f5b12eb75f8c1ed65abd4b2db8a6e1b138a20de009dacee265a2498f3f6" +checksum = "09ac3b126d3914f9849036f826e054cbabdc8519970b8998ddaf3b5bd3c65f11" dependencies = [ "libc", ] @@ -7662,36 +7691,46 @@ version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +[[package]] +name = "wasi" +version = "0.13.3+wasi-0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26816d2e1a4a36a2940b96c5296ce403917633dff8f3440e9b236ed6f6bacad2" +dependencies = [ + "wit-bindgen-rt", +] + [[package]] name = "wasm-bindgen" -version = "0.2.99" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a474f6281d1d70c17ae7aa6a613c87fce69a127e2624002df63dcb39d6cf6396" +checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" dependencies = [ "cfg-if 1.0.0", "once_cell", + "rustversion", "wasm-bindgen-macro", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.99" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f89bb38646b4f81674e8f5c3fb81b562be1fd936d84320f3264486418519c79" +checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" dependencies = [ "bumpalo", "log", "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.98", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.49" +version = "0.4.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38176d9b44ea84e9184eff0bc34cc167ed044f816accfe5922e54d84cf48eca2" +checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" dependencies = [ "cfg-if 1.0.0", "js-sys", @@ -7702,9 +7741,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.99" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2cc6181fd9a7492eef6fef1f33961e3695e4579b9872a6f7c83aee556666d4fe" +checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -7712,22 +7751,25 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.99" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30d7a95b763d3c45903ed6c81f156801839e5ee968bb07e534c44df0fcd330c2" +checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.98", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.99" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "943aab3fdaaa029a6e0271b35ea10b72b943135afe9bffca82384098ad0e06a6" +checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +dependencies = [ + "unicode-ident", +] [[package]] name = "wasmtimer" @@ -7745,9 +7787,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.76" +version = "0.3.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04dd7223427d52553d3702c004d3b2fe07c148165faa56313cb00211e31c12bc" +checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" dependencies = [ "js-sys", "wasm-bindgen", @@ -7761,9 +7803,9 @@ checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" [[package]] name = "webpki-roots" -version = "0.26.7" +version = "0.26.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d642ff16b7e79272ae451b7322067cdc17cadf68c23264be9d94a32319efe7e" +checksum = "2210b291f7ea53617fbafcc4939f10914214ec15aace5ba62293a668f322c5c9" dependencies = [ "rustls-pki-types", ] @@ -8006,9 +8048,9 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winnow" -version = "0.6.20" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36c1fec1a2bb5866f07c25f68c26e565c4c200aebb96d7e55710c19d3e8ac49b" +checksum = "59690dea168f2198d1a3b0cac23b8063efcd11012f10ae4698f284808c8ef603" dependencies = [ "memchr", ] @@ -8023,6 +8065,15 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "wit-bindgen-rt" +version = "0.33.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3268f3d866458b787f390cf61f4bbb563b922d091359f9608842999eaee3943c" +dependencies = [ + "bitflags 2.8.0", +] + [[package]] name = "write16" version = "1.0.0" @@ -8065,9 +8116,9 @@ dependencies = [ [[package]] name = "xattr" -version = "1.3.1" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8da84f1a25939b27f6820d92aed108f83ff920fdf11a7b19366c27c4cda81d4f" +checksum = "e105d177a3871454f754b33bb0ee637ecaaac997446375fd3e5d43a2ed00c909" dependencies = [ "libc", "linux-raw-sys", @@ -8100,7 +8151,7 @@ checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.98", "synstructure", ] @@ -8122,7 +8173,7 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.98", ] [[package]] @@ -8142,7 +8193,7 @@ checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.98", "synstructure", ] @@ -8163,7 +8214,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.98", ] [[package]] @@ -8185,7 +8236,7 @@ checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.98", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index baab2e6f..496fde30 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,17 +1,17 @@ [workspace] -members = ["crates/aggregator", -"crates/operator", -"bin/incredible-squaring-avs", -"crates/cli", -"crates/config", -"crates/bindings", -"crates/avs", -"crates/challenger", -"crates/chainio", -"crates/testing-utils", -"crates/task_generator", -"crates/operator_2", -"crates/slasher" +members = [ + "crates/aggregator", + "crates/operator", + "bin/incredible-squaring-avs", + "crates/cli", + "crates/config", + "crates/bindings", + "crates/avs", + "crates/challenger", + "crates/chainio", + "crates/testing-utils", + "crates/task_generator", + "crates/slasher", ] resolver = "2" @@ -40,57 +40,59 @@ clap = "4.5.11" eyre = "0.6.12" tokio = { version = "1.21", default-features = false } thiserror = "2" -ark-bn254 = { version = "0.5.0", features = ["curve"], default-features = false } +ark-bn254 = { version = "0.5.0", features = [ + "curve", +], default-features = false } futures-util = "0.3.31" metrics = "0.24.0" metrics-util = "0.19.0" reqwest = "0.12.9" serde_json = "1.0.120" #alloy -alloy = { version = "0.7", features = ["full","signer-keystore","reqwest"] } +alloy = { version = "0.9", features = ["full", "signer-keystore", "reqwest"] } alloy-primitives = "0.8" -alloy-provider = "0.7" serde = "1.0.203" tracing = "0.1.40" tempfile = "3" -rust-bls-bn254 = {git = "https://github.com/Layr-Labs/rust-bls-bn254.git", rev = "be3ef87", features = ["std"] } +rust-bls-bn254 = { git = "https://github.com/Layr-Labs/rust-bls-bn254.git", rev = "be3ef87", features = [ + "std", +] } rand_core = "0.6" toml = "0.8" -incredible-operator = {path = "crates/operator/" , features = ["default"]} -incredible-aggregator = {path = "crates/aggregator/"} -incredible-squaring-avs = {path = "bin/incredible-squaring-avs/"} -incredible-cli-runner = {path = "crates/cli/"} -incredible-config = {path = "crates/config/"} -incredible-bindings = {path = "crates/bindings/"} -incredible-metrics = {path = "crates/metrics/"} -incredible-avs = {path = "crates/avs/"} -incredible-challenger = {path = "crates/challenger/"} -incredible-chainio = {path = "crates/chainio/"} -incredible-testing-utils = {path = "crates/testing-utils/"} -incredible-task-generator = {path = "crates/task_generator/"} -incredible-operator-2 = {path = "crates/operator_2/" , features = ["default"]} -incredible-slasher = {path = "crates/slasher/"} -# eigensdk-rs - -eigen-client-avsregistry = { git = "https://github.com/Layr-Labs/eigensdk-rs", rev = "046d497"} -eigen-testing-utils ={ git = "https://github.com/Layr-Labs/eigensdk-rs", rev = "046d497"} -eigen-crypto-bls = { git = "https://github.com/Layr-Labs/eigensdk-rs", rev = "046d497"} -eigen-types = { git = "https://github.com/Layr-Labs/eigensdk-rs", rev = "046d497"} -eigen-metrics = { git = "https://github.com/Layr-Labs/eigensdk-rs", rev = "046d497"} -eigen-utils = { git = "https://github.com/Layr-Labs/eigensdk-rs", rev = "046d497"} -eigen-contract-bindings = { git = "https://github.com/Layr-Labs/eigensdk-rs", rev = "046d497"} -eigen-cli ={ git = "https://github.com/Layr-Labs/eigensdk-rs", rev = "046d497"} -eigen-logging ={ git = "https://github.com/Layr-Labs/eigensdk-rs", rev = "046d497"} -eigen-crypto-bn254 = { git = "https://github.com/Layr-Labs/eigensdk-rs", rev = "046d497"} -eigen-client-elcontracts = { git = "https://github.com/Layr-Labs/eigensdk-rs", rev = "046d497"} -eigen-services-operatorsinfo = { git = "https://github.com/Layr-Labs/eigensdk-rs", rev = "046d497"} -eigen-services-avsregistry = { git = "https://github.com/Layr-Labs/eigensdk-rs", rev = "046d497"} -eigen-services-blsaggregation = { git = "https://github.com/Layr-Labs/eigensdk-rs", rev = "046d497"} -eigen-metrics-collectors-rpc-calls = { git = "https://github.com/Layr-Labs/eigensdk-rs", rev = "046d497"} -eigen-client-eth = { git = "https://github.com/Layr-Labs/eigensdk-rs", rev = "046d497"} -eigen-nodeapi = { git = "https://github.com/Layr-Labs/eigensdk-rs", rev = "046d497"} - - +incredible-operator = { path = "crates/operator/", features = ["default"] } +incredible-aggregator = { path = "crates/aggregator/" } +incredible-squaring-avs = { path = "bin/incredible-squaring-avs/" } +incredible-cli-runner = { path = "crates/cli/" } +incredible-config = { path = "crates/config/" } +incredible-bindings = { path = "crates/bindings/" } +incredible-metrics = { path = "crates/metrics/" } +incredible-avs = { path = "crates/avs/" } +incredible-challenger = { path = "crates/challenger/" } +incredible-chainio = { path = "crates/chainio/" } +incredible-testing-utils = { path = "crates/testing-utils/" } +incredible-task-generator = { path = "crates/task_generator/" } +incredible-slasher = { path = "crates/slasher/" } +# eigensdk-rs +eigen-aggregator = { git = "https://github.com/Layr-Labs/eigensdk-rs", branch = "sdk-ux-improvment" } +eigen-operator = { git = "https://github.com/Layr-Labs/eigensdk-rs", branch = "sdk-ux-improvment" } +eigen-common = { git = "https://github.com/Layr-Labs/eigensdk-rs", branch = "sdk-ux-improvment" } +eigen-client-avsregistry = { git = "https://github.com/Layr-Labs/eigensdk-rs", branch = "sdk-ux-improvment" } +eigen-testing-utils = { git = "https://github.com/Layr-Labs/eigensdk-rs", branch = "sdk-ux-improvment" } +eigen-crypto-bls = { git = "https://github.com/Layr-Labs/eigensdk-rs", branch = "sdk-ux-improvment" } +eigen-types = { git = "https://github.com/Layr-Labs/eigensdk-rs", branch = "sdk-ux-improvment" } +eigen-metrics = { git = "https://github.com/Layr-Labs/eigensdk-rs", branch = "sdk-ux-improvment" } +eigen-utils = { git = "https://github.com/Layr-Labs/eigensdk-rs", branch = "sdk-ux-improvment" } +eigen-contract-bindings = { git = "https://github.com/Layr-Labs/eigensdk-rs", branch = "sdk-ux-improvment" } +eigen-cli = { git = "https://github.com/Layr-Labs/eigensdk-rs", branch = "sdk-ux-improvment" } +eigen-logging = { git = "https://github.com/Layr-Labs/eigensdk-rs", branch = "sdk-ux-improvment" } +eigen-crypto-bn254 = { git = "https://github.com/Layr-Labs/eigensdk-rs", branch = "sdk-ux-improvment" } +eigen-client-elcontracts = { git = "https://github.com/Layr-Labs/eigensdk-rs", branch = "sdk-ux-improvment" } +eigen-services-operatorsinfo = { git = "https://github.com/Layr-Labs/eigensdk-rs", branch = "sdk-ux-improvment" } +eigen-services-avsregistry = { git = "https://github.com/Layr-Labs/eigensdk-rs", branch = "sdk-ux-improvment" } +eigen-services-blsaggregation = { git = "https://github.com/Layr-Labs/eigensdk-rs", branch = "sdk-ux-improvment" } +eigen-metrics-collectors-rpc-calls = { git = "https://github.com/Layr-Labs/eigensdk-rs", branch = "sdk-ux-improvment" } +eigen-client-eth = { git = "https://github.com/Layr-Labs/eigensdk-rs", branch = "sdk-ux-improvment" } +eigen-nodeapi = { git = "https://github.com/Layr-Labs/eigensdk-rs", branch = "sdk-ux-improvment" } diff --git a/bin/incredible-squaring-avs/Cargo.toml b/bin/incredible-squaring-avs/Cargo.toml index f91bfa19..ea60d4d3 100644 --- a/bin/incredible-squaring-avs/Cargo.toml +++ b/bin/incredible-squaring-avs/Cargo.toml @@ -6,13 +6,13 @@ rust-version.workspace = true repository.workspace = true license.workspace = true description = "incredible squaring avs in rust" - + [lints] workspace = true [dependencies] incredible-aggregator.workspace = true -incredible-operator = {workspace = true , features = ["default"]} +incredible-operator = { workspace = true, features = ["default"] } incredible-cli-runner.workspace = true incredible-config.workspace = true incredible-avs.workspace = true @@ -29,6 +29,7 @@ rust-bls-bn254.workspace = true eigen-crypto-bls.workspace = true metrics-util.workspace = true # eigensdk-rs +eigen-common.workspace = true eigen-testing-utils.workspace = true eigen-logging.workspace = true eigen-utils.workspace = true @@ -43,4 +44,4 @@ tokio.workspace = true [[bin]] name = "incredible-squaring-avs" -path = "src/main.rs" \ No newline at end of file +path = "src/main.rs" diff --git a/bin/incredible-squaring-avs/src/commands/avs/mod.rs b/bin/incredible-squaring-avs/src/commands/avs/mod.rs index 6cd6bcaa..3432d57c 100644 --- a/bin/incredible-squaring-avs/src/commands/avs/mod.rs +++ b/bin/incredible-squaring-avs/src/commands/avs/mod.rs @@ -7,6 +7,7 @@ use clap::value_parser; use clap::{Args, Parser}; use eigen_client_elcontracts::reader::ELChainReader; use eigen_client_elcontracts::{error::ElContractsError, writer::ELChainWriter}; +use eigen_common::{get_provider, get_signer}; use eigen_crypto_bls::BlsKeyPair; use eigen_logging::{get_logger, init_logger, log_level::LogLevel}; use eigen_metrics::prometheus::init_registry; @@ -16,11 +17,11 @@ use eigen_testing_utils::anvil_constants::{ get_strategy_manager_address, ANVIL_HTTP_URL, }; use eigen_types::operator::Operator; -use eigen_utils::allocationmanager::AllocationManager::{self, OperatorSet}; -use eigen_utils::allocationmanager::IAllocationManagerTypes::AllocateParams; -use eigen_utils::registrycoordinator::RegistryCoordinator; -use eigen_utils::{get_provider, get_signer}; -use incredible_avs::builder::{AvsBuilder, DefaultAvsLauncher, LaunchAvs}; +use eigen_utils::rewardsv2::middleware::registrycoordinator::{ + IRegistryCoordinator, IStakeRegistry, RegistryCoordinator, +}; +use eigen_utils::slashing::core::allocationmanager::AllocationManager::{self, OperatorSet}; +use eigen_utils::slashing::core::allocationmanager::IAllocationManagerTypes::AllocateParams; use incredible_config::IncredibleConfig; use incredible_testing_utils::{ get_incredible_squaring_operator_state_retriever, get_incredible_squaring_registry_coordinator, @@ -665,9 +666,7 @@ impl AvsCommand { mine_anvil_block(&rpc_url, current_block_number); } - let avs_launcher = DefaultAvsLauncher::new(); - let avs_builder = AvsBuilder::new(config); - let _ = avs_launcher.launch_avs(avs_builder).await; + let _ = incredible_avs::launch_avs(config).await; Ok(()) } @@ -701,20 +700,20 @@ pub async fn register_operator_with_el_and_deposit_tokens_in_strategy( let s = signer.to_field_bytes(); let el_chain_reader = ELChainReader::new( get_logger(), - allocation_manager, + Some(allocation_manager), delegation_manager_address, rewards_coordinator, avs_directory_address, - permission_controller_address, + Some(permission_controller_address), rpc_url.clone(), ); let el_chain_writer = ELChainWriter::new( delegation_manager_address, strategy_manager_address, - rewards_coordinator, - permission_controller_address, + Some(rewards_coordinator), + Some(permission_controller_address), allocation_manager, - registry_coordinator_address, + Some(registry_coordinator_address), el_chain_reader.clone(), rpc_url.clone(), hex::encode(s).to_string(), @@ -788,19 +787,16 @@ pub async fn create_total_delegated_stake_quorum( let registry_coordinator_instance = RegistryCoordinator::new(registry_coordinator_address, get_signer(&pvt_key, rpc_url)); - let operator_set_param = - eigen_utils::registrycoordinator::IRegistryCoordinator::OperatorSetParam { - maxOperatorCount: 3, - kickBIPsOfOperatorStake: 100, - kickBIPsOfTotalStake: 1000, - }; + let operator_set_param = IRegistryCoordinator::OperatorSetParam { + maxOperatorCount: 3, + kickBIPsOfOperatorStake: 100, + kickBIPsOfTotalStake: 1000, + }; let minimum_stake: U96 = U96::from(0); - let strategy_params = vec![ - eigen_utils::registrycoordinator::IStakeRegistry::StrategyParams { - strategy: strategy_address, - multiplier: U96::from(1), - }, - ]; + let strategy_params = vec![IStakeRegistry::StrategyParams { + strategy: strategy_address, + multiplier: U96::from(1), + }]; let s = registry_coordinator_instance .createTotalDelegatedStakeQuorum(operator_set_param, minimum_stake, strategy_params) diff --git a/crates/aggregator/Cargo.toml b/crates/aggregator/Cargo.toml index a3b7be7a..f5df1c73 100644 --- a/crates/aggregator/Cargo.toml +++ b/crates/aggregator/Cargo.toml @@ -5,25 +5,23 @@ edition.workspace = true rust-version.workspace = true repository.workspace = true license.workspace = true -description = "eigen layer aggregator utils " - +description = "eigen layer aggregator" + [lints] workspace = true [dependencies] +eigen-aggregator.workspace = true incredible-bindings.workspace = true -ark-bn254.workspace = true -ark-ec.workspace = true alloy.workspace = true eigen-types.workspace = true serde.workspace = true -ark-serialize = "0.4.2" hex = "0.4.3" eigen-crypto-bls.workspace = true eyre.workspace = true incredible-chainio.workspace = true incredible-config.workspace = true -incredible-metrics.workspace = true +eigen-common.workspace = true eigen-services-operatorsinfo.workspace = true eigen-logging.workspace = true eigen-client-avsregistry.workspace = true @@ -43,4 +41,4 @@ incredible-testing-utils.workspace = true toml.workspace = true ark-std = { version = "0.4.0", default-features = false } incredible-operator.workspace = true -reqwest.workspace = true \ No newline at end of file +reqwest.workspace = true diff --git a/crates/aggregator/src/error.rs b/crates/aggregator/src/error.rs deleted file mode 100644 index 446fe670..00000000 --- a/crates/aggregator/src/error.rs +++ /dev/null @@ -1,55 +0,0 @@ -use alloy::contract::Error as ContractError; -use alloy::transports::{RpcError, TransportErrorKind}; -use eigen_client_avsregistry::error::AvsRegistryError; -use eigen_crypto_bls::error::BlsError; -use eigen_services_blsaggregation::bls_aggregation_service_error::BlsAggregationServiceError; -use eigen_services_operatorsinfo::operatorsinfo_inmemory::OperatorInfoServiceError; -use incredible_chainio::error::ChainIoError; -use incredible_config::error::ConfigError; -use jsonrpc_core::serde_json::Error; -use thiserror::Error; - -/// Error returned by chainio -#[derive(Debug, Error)] -pub enum AggregatorError { - /// Bls Aggregation Service Error - #[error("Bls Aggregation Service Error : {0}")] - BlsAggregationServiceError(#[from] BlsAggregationServiceError), - /// Task Response not found - #[error("Task Response not found")] - TaskResponseNotFound, - /// parse error - #[error("Config parse error")] - ParseError(#[from] ConfigError), - /// Build avs registry chain reader - #[error("Failed to build avs registry chain reader ")] - BuildAvsRegistryChainReader(#[from] AvsRegistryError), - - /// build avswriter - #[error("Failed to build avs wrtier in chain io ")] - BuildAvsWriter(#[from] ChainIoError), - - /// Bls crate error - #[error("Bls Crate Error SDK")] - Bls(#[from] BlsError), - - /// alloy rpc error - #[error("Alloy rpc error")] - AlloyRpc(#[from] RpcError), - - /// serde json error - #[error("Serde json error")] - SerdeError(#[from] Error), - - /// IO error - #[error("IO error")] - IOError(#[from] std::io::Error), - - /// Operator Info service error - #[error("Operator Info Service error")] - OperatorInfoServiceError(#[from] OperatorInfoServiceError), - - /// Alloy Contract Error - #[error("Alloy Contract Error")] - ContractError(#[from] ContractError), -} diff --git a/crates/aggregator/src/fake_aggregator.rs b/crates/aggregator/src/fake_aggregator.rs deleted file mode 100644 index cab36e96..00000000 --- a/crates/aggregator/src/fake_aggregator.rs +++ /dev/null @@ -1,464 +0,0 @@ -use crate::error::AggregatorError; -use alloy::providers::Provider; -use alloy::providers::{ProviderBuilder, WsConnect}; -use alloy::rpc::types::Filter; -use alloy::sol_types::SolEvent; -use eigen_client_avsregistry::reader::AvsRegistryChainReader; -use eigen_crypto_bls::{convert_to_g1_point, convert_to_g2_point}; -use eigen_logging::{get_logger, get_test_logger}; -use eigen_services_avsregistry::chaincaller::AvsRegistryServiceChainCaller; -use eigen_services_blsaggregation::bls_agg::BlsAggregatorService; -use eigen_services_blsaggregation::bls_aggregation_service_error::BlsAggregationServiceError; -use eigen_services_blsaggregation::bls_aggregation_service_response::BlsAggregationServiceResponse; -use eigen_services_operatorsinfo::operatorsinfo_inmemory::OperatorInfoServiceInMemory; -use eigen_types::avs::TaskResponseDigest; -use eigen_utils::get_ws_provider; -use futures_util::StreamExt; -use incredible_bindings::incrediblesquaringtaskmanager::IBLSSignatureChecker::NonSignerStakesAndSignature; -use incredible_bindings::incrediblesquaringtaskmanager::IIncredibleSquaringTaskManager::{ - Task, TaskResponse, -}; -use incredible_bindings::incrediblesquaringtaskmanager::IncredibleSquaringTaskManager::NewTaskCreated; -use incredible_bindings::incrediblesquaringtaskmanager::BN254::{G1Point, G2Point}; -use incredible_config::IncredibleConfig; -use jsonrpc_core::serde_json; -use jsonrpc_core::{Error, IoHandler, Params, Value}; -use jsonrpc_http_server::{AccessControlAllowOrigin, DomainsValidation, ServerBuilder}; -use std::collections::HashMap; -use std::net::SocketAddr; -use std::sync::Arc; -use tracing::info; - -/// Task Challenge Window Block : 100 blocks -pub const TASK_CHALLENGE_WINDOW_BLOCK: u32 = 100; -/// Block Time Seconds : 12 seconds -pub const BLOCK_TIME_SECONDS: u32 = 12; - -/// Aggregator -#[derive(Debug)] -pub struct FakeAggregator { - port_address: String, - bls_aggregation_service: BlsAggregatorService< - AvsRegistryServiceChainCaller, - >, - /// HashMap to store tasks - pub tasks: HashMap, - /// HashMap to store task responses - pub tasks_responses: HashMap>, -} - -impl FakeAggregator { - /// Creates a new FakeAggregator - /// - /// # Arguments - /// - /// * `config` - The configuration for the FakeAggregator - /// - /// # Returns - /// - /// * `Self` - The FakeAggregator - pub async fn new(config: IncredibleConfig) -> Self { - let avs_registry_chain_reader = AvsRegistryChainReader::new( - get_test_logger(), - config.registry_coordinator_addr().unwrap(), - config.operator_state_retriever_addr().unwrap(), - config.http_rpc_url(), - ) - .await - .unwrap(); - - let avs_reader = AvsRegistryChainReader::new( - get_test_logger(), - config.registry_coordinator_addr().unwrap(), - config.operator_state_retriever_addr().unwrap(), - config.http_rpc_url(), - ) - .await - .unwrap(); - - let operators_info_service = OperatorInfoServiceInMemory::new( - get_test_logger(), - avs_registry_chain_reader, - config.ws_rpc_url(), - ) - .await - .unwrap() - .0; - let token = tokio_util::sync::CancellationToken::new().clone(); - let avs_registry_service_chaincaller = - AvsRegistryServiceChainCaller::new(avs_reader, operators_info_service.clone()); - let provider = get_ws_provider(config.ws_rpc_url().as_str()).await.unwrap(); - - tokio::spawn(async move { - let _ = operators_info_service - .start_service(&token, 0, provider.get_block_number().await.unwrap()) - .await; - }); - - let bls_aggregation_service = - BlsAggregatorService::new(avs_registry_service_chaincaller, get_logger()); - - Self { - port_address: config.aggregator_ip_addr(), - tasks_responses: HashMap::new(), - tasks: HashMap::new(), - bls_aggregation_service, - } - } - - /// Starts the aggregator service - pub async fn start(self, ws_rpc_url: String) -> eyre::Result<()> { - info!("Starting aggregator"); - - let aggregator = Arc::new(tokio::sync::Mutex::new(self)); - - // Spawn two tasks: one for the server and one for processing tasks - let server_handle = tokio::spawn(Self::start_server(Arc::clone(&aggregator))); - let process_handle = tokio::spawn(Self::process_tasks( - ws_rpc_url.clone(), - Arc::clone(&aggregator), - )); - - // Wait for both tasks to complete and handle potential errors - match tokio::try_join!(server_handle, process_handle) { - Ok((server_result, process_result)) => { - server_result?; - process_result?; - } - Err(e) => { - eprintln!("Error in task execution: {:?}", e); - return Err(eyre::eyre!("Task execution failed")); - } - } - - Ok(()) - } - - /// Starts the RPC server - /// - /// # Arguments - /// - /// * `aggregator` - The aggregator - /// - /// # Returns - /// - /// * `eyre::Result<()>` - The result of the operation - pub async fn start_server(aggregator: Arc>) -> eyre::Result<()> { - let mut io = IoHandler::new(); - io.add_method("process_signed_task_response", { - let aggregator = Arc::clone(&aggregator); - move |params: Params| { - let aggregator = Arc::clone(&aggregator); - async move { - let signed_task_response: crate::rpc_server::SignedTaskResponse = match params { - Params::Map(map) => serde_json::from_value(map["params"].clone()).unwrap(), - _ => return Err(Error::invalid_params("Expected a map")), - }; - - // Call the process_signed_task_response function - let result = aggregator - .lock() - .await - .process_signed_task_response(signed_task_response) - .await; - match result { - Ok(_) => Ok(Value::Bool(true)), - Err(_) => Err(Error::invalid_params("invalid")), - } - } - } - }); - let socket: SocketAddr = aggregator - .lock() - .await - .port_address - .parse() - .expect("Unable to parse socket address"); - let server = ServerBuilder::new(io) - .cors(DomainsValidation::AllowOnly(vec![ - AccessControlAllowOrigin::Any, - ])) - .start_http(&socket) - .expect("Unable to start RPC server"); - - info!("Server running at {}", socket); - - server.wait(); - - Ok(()) - } - - /// Processes the tasks - /// - /// # Arguments - /// - /// * `ws_rpc_url` - The websocket RPC URL - /// * `aggregator` - The aggregator - /// - /// # Returns - /// - /// * `eyre::Result<()>` - The result of the operation - pub async fn process_tasks( - ws_rpc_url: String, - aggregator: Arc>, - ) -> eyre::Result<()> { - let ws = WsConnect::new(ws_rpc_url.clone()); - let provider = ProviderBuilder::new().on_ws(ws).await?; - - let filter = Filter::new().event_signature(NewTaskCreated::SIGNATURE_HASH); - let sub = provider.subscribe_logs(&filter).await?; - let mut stream = sub.into_stream(); - - while let Some(log) = stream.next().await { - info!("received new task created in aggregator "); - - let NewTaskCreated { taskIndex, task } = log.log_decode()?.inner.data; - - aggregator - .lock() - .await - .tasks - .insert(taskIndex, task.clone()); - - let mut quorum_nums: Vec = vec![]; - let mut quorum_threshold_percentages = Vec::with_capacity(task.quorumNumbers.len()); - for _ in &task.quorumNumbers { - quorum_threshold_percentages - .push(task.quorumThresholdPercentage.try_into().unwrap()); - } - - for val in task.quorumNumbers.iter() { - quorum_nums.push(*val); - } - - let time_to_expiry = tokio::time::Duration::from_secs( - (TASK_CHALLENGE_WINDOW_BLOCK * BLOCK_TIME_SECONDS).into(), - ); - info!("initializing new task in bls aggregation service"); - - let _ = aggregator - .lock() - .await - .bls_aggregation_service - .initialize_new_task( - taskIndex, - task.taskCreatedBlock, - quorum_nums.clone(), - quorum_threshold_percentages.clone(), - time_to_expiry, - ) - .await - .map_err(|e: BlsAggregationServiceError| eyre::eyre!(e)); - - info!("initialized new task in bls aggregation service"); - } - - Ok(()) - } - - /// Processes the signed task response - /// - /// # Arguments - /// - /// * [`SignedTaskResponse`] - The signed task response - /// - /// # Returns - /// - /// * `eyre::Result<()>` - The result of the operation - pub async fn process_signed_task_response( - &mut self, - _signed_task_response: crate::rpc_server::SignedTaskResponse, - ) -> Result { - // let task_index = signed_task_response.task_response.referenceTaskIndex; - - // let task_response_digest = - // alloy::primitives::keccak256(IncredibleSquaringTaskManager::TaskResponse::abi_encode( - // &signed_task_response.task_response, - // )); - - // let response = - // check_double_mapping(&self.tasks_responses, task_index, task_response_digest); - - // if response.is_none() { - // let mut inner_map = HashMap::new(); - // inner_map.insert( - // task_response_digest, - // signed_task_response.clone().task_response, - // ); - // self.tasks_responses.insert(task_index, inner_map); - // } - - // self.bls_aggregation_service - // .process_new_signature( - // task_index, - // task_response_digest, - // signed_task_response.signature(), - // signed_task_response.operator_id(), - // ) - // .await - // .unwrap(); - // info!("processed signature for index {:?}", task_index); - - // if let Some(aggregated_response) = self - // .bls_aggregation_service - // .aggregated_response_receiver - // .lock() - // .await - // .recv() - // .await - // { - // let res = self.send_aggregated_response_to_contract(aggregated_response.unwrap()) - // .await; - // return Ok(res); - // } - Ok(true) - } - - /// Sends the aggregated response to the contract - /// - /// # Arguments - /// - /// * [`BlsAggregationServiceResponse`] - The aggregated response - /// - /// # Returns - /// - /// * `eyre::Result<()>` - The result of the operation - pub async fn send_aggregated_response_to_contract( - &self, - response: BlsAggregationServiceResponse, - ) -> bool { - let mut non_signer_pub_keys = Vec::::new(); - for pub_key in response.non_signers_pub_keys_g1.iter() { - let g1 = convert_to_g1_point(pub_key.g1()).unwrap(); - non_signer_pub_keys.push(G1Point { X: g1.X, Y: g1.Y }) - } - - let mut quorum_apks = Vec::::new(); - for pub_key in response.quorum_apks_g1.iter() { - let g1 = convert_to_g1_point(pub_key.g1()).unwrap(); - quorum_apks.push(G1Point { X: g1.X, Y: g1.Y }) - } - - let _non_signer_stakes_and_signature = NonSignerStakesAndSignature { - nonSignerPubkeys: non_signer_pub_keys, - nonSignerQuorumBitmapIndices: response.non_signer_quorum_bitmap_indices, - quorumApks: quorum_apks, - apkG2: G2Point { - X: convert_to_g2_point(response.signers_apk_g2.g2()).unwrap().X, - Y: convert_to_g2_point(response.signers_apk_g2.g2()).unwrap().Y, - }, - sigma: G1Point { - X: convert_to_g1_point(response.signers_agg_sig_g1.g1_point().g1()) - .unwrap() - .X, - Y: convert_to_g1_point(response.signers_agg_sig_g1.g1_point().g1()) - .unwrap() - .Y, - }, - quorumApkIndices: response.quorum_apk_indices, - totalStakeIndices: response.total_stake_indices, - nonSignerStakeIndices: response.non_signer_stake_indices, - }; - - let _task = &self.tasks[&response.task_index]; - let _task_response = - &self.tasks_responses[&response.task_index][&response.task_response_digest]; - true // don't actually send the call, return true - } -} - -#[cfg(test)] -mod tests { - - use alloy::primitives::{FixedBytes, U256}; - use eigen_crypto_bls::BlsKeyPair; - use eigen_logging::init_logger; - use eigen_types::test::TestOperator; - use incredible_testing_utils::{ - get_incredible_squaring_operator_state_retriever, - get_incredible_squaring_registry_coordinator, - }; - use std::time::Duration; - - use super::*; - const INCREDIBLE_CONFIG_FILE: &str = r#" - [rpc_config] - chain_id = 31337 - http_rpc_url = "http://localhost:8545" - ws_rpc_url = "ws://localhost:8545" - signer = "0x337edbf6fef9af147f49c04c1004da47a8bf9f88c01022b7dd108e31c037f075" - - [ecdsa_config] - keystore_path = "../testing-utils/src/ecdsakeystore.json" - keystore_password = "test" - - [bls_config] - keystore_path = "../testing-utils/src/blskeystore.json" - keystore_password = "testpassword" - keystore_2_path = "../testing-utils/src/bls_keystore_2.json" - keystore_2_password = "test" - - [operator_config] - operator_address = "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266" - operator_id = "0xb345f720903a3ecfd59f3de456dd9d266c2ce540b05e8c909106962684d9afa3" - operator_2_address = "0x0b065a0423f076a340f37e16e1ce22e23d66caf2" - operator_2_id = "0x17a0935b43b64cc3536d48621208fddb680ef8998561f0a1669a3ccda66676be" - operator_set_id = "1" - operator_1_token_amount = "5000000000000000000000" - operator_2_token_amount = "7000000000000000000000" - allocation_delay = "1" - slash_simulate = false - - [aggregator_config] - ip_address = "127.0.0.1:8080" - - "#; - - const PRIVATE_KEY_DECIMAL: &str = - "12248929636257230549931416853095037629726205319386239410403476017439825112537"; - const OPERATOR_ID: &str = "b345f720903a3ecfd59f3de456dd9d266c2ce540b05e8c909106962684d9afa3"; - #[allow(unused)] - fn build_test_operator() -> TestOperator { - let bls_keypair = BlsKeyPair::new(PRIVATE_KEY_DECIMAL.into()).unwrap(); - let operator_id = - FixedBytes::<32>::from_slice(hex::decode(OPERATOR_ID).unwrap().as_slice()); - TestOperator { - operator_id, - bls_keypair: bls_keypair.clone(), - stake_per_quorum: HashMap::from([(1u8, U256::from(123))]), - } - } - - async fn build_aggregator() -> FakeAggregator { - let mut incredible_config: IncredibleConfig = - toml::from_str(INCREDIBLE_CONFIG_FILE).unwrap(); - incredible_config.set_registry_coordinator_addr( - get_incredible_squaring_registry_coordinator() - .await - .to_string(), - ); - incredible_config.set_operator_state_retriever( - get_incredible_squaring_operator_state_retriever() - .await - .to_string(), - ); - FakeAggregator::new(incredible_config).await - } - - #[tokio::test] - async fn test_build() { - init_logger(eigen_logging::log_level::LogLevel::Info); - let fake_aggregator = build_aggregator().await; - fake_aggregator - .bls_aggregation_service - .initialize_new_task( - 0, - 5, - ["0".parse().unwrap()].to_vec(), - ["100".parse().unwrap()].to_vec(), - Duration::from_secs(1200), - ) - .await - .unwrap(); - } -} diff --git a/crates/aggregator/src/lib.rs b/crates/aggregator/src/lib.rs index 4b26b77f..f652ce6d 100644 --- a/crates/aggregator/src/lib.rs +++ b/crates/aggregator/src/lib.rs @@ -1,430 +1,148 @@ -//! Aggregator crate +// TODO: add docs +#![allow(missing_docs)] +use std::{collections::HashMap, sync::Arc}; -/// Aggregator error -pub mod error; -#[allow(missing_docs)] -pub mod fake_aggregator; -/// RPC server -pub mod rpc_server; -use alloy::dyn_abi::SolType; -use alloy::primitives::aliases::U96; -use alloy::primitives::Address; -use alloy::providers::Provider; -use alloy::providers::{ProviderBuilder, WsConnect}; -use alloy::rpc::types::Filter; -use alloy::sol_types::SolEvent; -use ark_ec::AffineRepr; -use eigen_client_avsregistry::reader::AvsRegistryChainReader; -use eigen_crypto_bls::{convert_to_g1_point, convert_to_g2_point}; -use eigen_logging::get_logger; -use eigen_services_avsregistry::chaincaller::AvsRegistryServiceChainCaller; -use eigen_services_blsaggregation::bls_aggregation_service_error::BlsAggregationServiceError; -use eigen_services_blsaggregation::{ - bls_agg::BlsAggregatorService, bls_aggregation_service_response::BlsAggregationServiceResponse, +use alloy::{ + primitives::{keccak256, Address, B256, U256}, + sol_types::SolValue, +}; +use eigen_aggregator::{ + rpc_server::SignedTaskResponse as SignedTaskResponseImpl, + traits::{box_error, TaskProcessor, TaskProcessorError, TaskResponse}, }; -use eigen_services_operatorsinfo::operatorsinfo_inmemory::OperatorInfoServiceInMemory; -use eigen_types::avs::TaskResponseDigest; -use eigen_utils::operatorstateretriever::OperatorStateRetriever; -use eigen_utils::registrycoordinator::RegistryCoordinator; -use eigen_utils::{get_provider, get_ws_provider}; -pub use error::AggregatorError; -use futures_util::StreamExt; -use incredible_bindings::incrediblesquaringtaskmanager::IBLSSignatureChecker::NonSignerStakesAndSignature; -use incredible_bindings::incrediblesquaringtaskmanager::IIncredibleSquaringTaskManager::{ - Task, TaskResponse, +use eigen_crypto_bls::{convert_to_g1_point, convert_to_g2_point}; +use eigen_services_blsaggregation::bls_agg::TaskMetadata; +use eigen_services_blsaggregation::bls_aggregation_service_response::BlsAggregationServiceResponse; +use eigen_types::avs::TaskIndex; +use incredible_bindings::incrediblesquaringtaskmanager::{ + IBLSSignatureChecker::NonSignerStakesAndSignature, + IIncredibleSquaringTaskManager::{Task, TaskResponse as SolTaskResponse}, + IncredibleSquaringTaskManager::NewTaskCreated, + BN254::{G1Point, G2Point}, }; -use incredible_bindings::incrediblesquaringtaskmanager::IncredibleSquaringTaskManager::NewTaskCreated; -use incredible_bindings::incrediblesquaringtaskmanager::BN254::{G1Point, G2Point}; -use incredible_chainio::AvsWriter; -use incredible_config::IncredibleConfig; -use jsonrpc_core::serde_json; -use jsonrpc_core::{Error, IoHandler, Params, Value}; -use jsonrpc_http_server::{AccessControlAllowOrigin, DomainsValidation, ServerBuilder}; -pub use rpc_server::SignedTaskResponse; -use std::collections::HashMap; -use std::net::SocketAddr; -use std::sync::Arc; -use tracing::info; +use incredible_chainio::{error::ChainIoError, AvsWriter}; -/// Task Challenge Window Block : 100 blocks -pub const TASK_CHALLENGE_WINDOW_BLOCK: u32 = 100; -/// Block Time Seconds : 12 seconds -pub const BLOCK_TIME_SECONDS: u32 = 12; +pub use eigen_aggregator::{Aggregator, AggregatorConfig}; + +pub type SignedTaskResponse = SignedTaskResponseImpl; -/// Aggregator #[derive(Debug)] -pub struct Aggregator { - port_address: String, - /// avs writer - pub avs_writer: AvsWriter, - bls_aggregation_service: BlsAggregatorService< - AvsRegistryServiceChainCaller, - >, - task_quorum: HashMap, +/// Task Processor for the Incredible Squaring Task Manager +pub struct ISTaskProcessor { /// HashMap to store tasks - pub tasks: HashMap, - /// HashMap to store task responses - pub tasks_responses: HashMap>, + tasks: Arc>>, + /// HashMap to store tasks + task_responses: Arc>>, + /// AVS Writer + avs_writer: AvsWriter, } -impl Aggregator { - /// Creates a new aggregator - /// - /// # Arguments - /// - /// * `config` - The configuration for the aggregator - /// - /// # Returns - /// - /// * `Self` - The aggregator - pub async fn new(config: IncredibleConfig) -> Result { - let avs_registry_chain_reader = AvsRegistryChainReader::new( - get_logger(), - config.registry_coordinator_addr()?, - config.operator_state_retriever_addr()?, - config.http_rpc_url(), - ) - .await?; - - let avs_writer = AvsWriter::new( - config.registry_coordinator_addr()?, - config.http_rpc_url(), - config.get_signer(), - ) - .await?; - - let operators_info_service = OperatorInfoServiceInMemory::new( - get_logger(), - avs_registry_chain_reader.clone(), - config.ws_rpc_url(), - ) - .await? - .0; - let token = tokio_util::sync::CancellationToken::new(); - let avs_registry_service_chaincaller = AvsRegistryServiceChainCaller::new( - avs_registry_chain_reader, - operators_info_service.clone(), - ); - let provider = get_ws_provider(config.ws_rpc_url().as_str()).await?; - - let current_block_number = provider.get_block_number().await?; - tokio::spawn(async move { - let _ = operators_info_service - .start_service(&token, 0, current_block_number) - .await; - }); - - let bls_aggregation_service = - BlsAggregatorService::new(avs_registry_service_chaincaller, get_logger()); - - Ok(Self { - port_address: config.aggregator_ip_addr(), +impl ISTaskProcessor { + /// Creates a new task processor for the Incredible Squaring + pub async fn new( + regcoord_addr: Address, + http_rpc_url: String, + signer: String, + ) -> Result { + let avs_writer = AvsWriter::new(regcoord_addr, http_rpc_url, signer).await?; + Ok(ISTaskProcessor { + tasks: Arc::new(tokio::sync::Mutex::new(HashMap::new())), + task_responses: Arc::new(tokio::sync::Mutex::new(HashMap::new())), avs_writer, - tasks_responses: HashMap::new(), - tasks: HashMap::new(), - task_quorum: HashMap::new(), - bls_aggregation_service, }) } +} - /// Starts the aggregator service - pub async fn start( - self, - ws_rpc_url: String, - operator_state_retriever: Address, - registry_coordinator: Address, - ) -> eyre::Result<()> { - info!("Starting aggregator"); - - let aggregator = Arc::new(tokio::sync::Mutex::new(self)); - - // Spawn two tasks: one for the server and one for processing tasks - let server_handle = tokio::spawn(Self::start_server( - Arc::clone(&aggregator), - operator_state_retriever, - registry_coordinator, - )); - let process_handle = tokio::spawn(Self::process_tasks( - ws_rpc_url.clone(), - Arc::clone(&aggregator), - )); +/// Task Challenge Window Block : 100 blocks +const TASK_CHALLENGE_WINDOW_BLOCK: u32 = 100; +/// Block Time Seconds : 12 seconds +const BLOCK_TIME_SECONDS: u32 = 12; - // Wait for both tasks to complete and handle potential errors - match tokio::try_join!(server_handle, process_handle) { - Ok((server_result, process_result)) => { - server_result?; - process_result?; - } - Err(e) => { - eprintln!("Error in task execution: {:?}", e); - return Err(eyre::eyre!("Task execution failed")); - } - } +#[derive(Debug, serde::Serialize, serde::Deserialize, Clone)] +pub struct ISTaskResponse(pub SolTaskResponse); - Ok(()) +impl ISTaskResponse { + pub fn new(task_index: u32, number_squared: U256) -> Self { + ISTaskResponse(SolTaskResponse { + referenceTaskIndex: task_index, + numberSquared: number_squared, + }) } +} - /// Starts the RPC server - /// - /// # Arguments - /// - /// * `aggregator` - The aggregator - /// - /// # Returns - /// - /// * `eyre::Result<()>` - The result of the operation - pub async fn start_server( - aggregator: Arc>, - operator_state_retriever: Address, - registry_coordinator: Address, - ) -> eyre::Result<(), AggregatorError> { - let mut io = IoHandler::new(); - io.add_method("process_signed_task_response", { - let aggregator = Arc::clone(&aggregator); - move |params: Params| { - let aggregator = Arc::clone(&aggregator); - async move { - let signed_task_response: SignedTaskResponse = match params { - Params::Map(map) => serde_json::from_value(map["params"].clone()).expect( - "Error in adding method in io handler for start_server function", - ), - _ => return Err(Error::invalid_params("Expected a map")), - }; - // Call the process_signed_task_response function - let result = aggregator - .lock() - .await - .process_signed_task_response( - signed_task_response, - operator_state_retriever, - registry_coordinator, - ) - .await; - match result { - Ok(_) => Ok(Value::Bool(true)), - Err(_) => Err(Error::invalid_params("invalid")), - } - } - } - }); - let socket: SocketAddr = aggregator.lock().await.port_address.parse().map_err(|e| { - AggregatorError::IOError(std::io::Error::new(std::io::ErrorKind::InvalidInput, e)) - })?; - let server = ServerBuilder::new(io) - .cors(DomainsValidation::AllowOnly(vec![ - AccessControlAllowOrigin::Any, - ])) - .start_http(&socket)?; - - info!("Server running at {}", socket); - - server.wait(); - - Ok(()) +impl TaskResponse for ISTaskResponse { + fn task_index(&self) -> TaskIndex { + self.0.referenceTaskIndex } - /// Processes the tasks - /// - /// # Arguments - /// - /// * `ws_rpc_url` - The websocket RPC URL - /// * `aggregator` - The aggregator - /// - /// # Returns - /// - /// * `eyre::Result<()>` - The result of the operation - pub async fn process_tasks( - ws_rpc_url: String, - aggregator: Arc>, - ) -> eyre::Result<()> { - let ws = WsConnect::new(ws_rpc_url.clone()); - let provider = ProviderBuilder::new().on_ws(ws).await?; - - let filter = Filter::new().event_signature(NewTaskCreated::SIGNATURE_HASH); - let sub = provider.subscribe_logs(&filter).await?; - let mut stream = sub.into_stream(); - - while let Some(log) = stream.next().await { - let NewTaskCreated { taskIndex, task } = log.log_decode()?.inner.data; - - aggregator - .lock() - .await - .tasks - .insert(taskIndex, task.clone()); - - let mut quorum_nums: Vec = vec![]; - let mut quorum_threshold_percentages = Vec::with_capacity(task.quorumNumbers.len()); - for _ in &task.quorumNumbers { - quorum_threshold_percentages.push(task.quorumThresholdPercentage.try_into()?); - } - - for val in task.quorumNumbers.iter() { - quorum_nums.push(*val); - } - - let time_to_expiry = tokio::time::Duration::from_secs( - (TASK_CHALLENGE_WINDOW_BLOCK * BLOCK_TIME_SECONDS).into(), - ); - let _ = aggregator - .lock() - .await - .bls_aggregation_service - .initialize_new_task( - taskIndex, - task.taskCreatedBlock, - quorum_nums.clone(), - quorum_threshold_percentages.clone(), - time_to_expiry, - ) - .await - .map_err(|e: BlsAggregationServiceError| eyre::eyre!(e)); - } - - Ok(()) + fn digest(&self) -> B256 { + keccak256(self.0.abi_encode()) } +} - /// Processes the signed task response - /// - /// # Arguments - /// - /// * [`SignedTaskResponse`] - The signed task response - /// - /// # Returns - /// - /// * `eyre::Result<()>` - The result of the operation - pub async fn process_signed_task_response( - &mut self, - signed_task_response: SignedTaskResponse, - operator_state_retriever: Address, - registry_coordinator: Address, - ) -> Result<(), AggregatorError> { - let task_index = signed_task_response.task_response.referenceTaskIndex; - - let task_response_digest = alloy::primitives::keccak256(TaskResponse::abi_encode( - &signed_task_response.task_response, - )); - - let response = - check_double_mapping(&self.tasks_responses, task_index, task_response_digest); +impl TaskProcessor for ISTaskProcessor { + type NewTaskEvent = NewTaskCreated; + type TaskResponse = ISTaskResponse; - if response.is_none() { - let mut inner_map = HashMap::new(); - inner_map.insert( - task_response_digest, - signed_task_response.clone().task_response, + async fn process_new_task( + &self, + event: Self::NewTaskEvent, + ) -> Result { + let NewTaskCreated { + taskIndex: task_index, + task, + } = event; + self.tasks.lock().await.insert(task_index, task.clone()); + + let mut quorum_numbers: Vec = vec![]; + let mut quorum_threshold_percentages = Vec::with_capacity(task.quorumNumbers.len()); + for _ in &task.quorumNumbers { + quorum_threshold_percentages.push( + task.quorumThresholdPercentage + .try_into() + .map_err(box_error)?, ); - self.tasks_responses.insert(task_index, inner_map); } - let entry = self.task_quorum.entry(task_index).or_insert(U96::from(0)); - let old_entry = *entry; - let quorum_reached = { - let registry_coordinator_instance = RegistryCoordinator::new( - registry_coordinator, - get_provider(&self.avs_writer.rpc_url), - ); - let op_state = OperatorStateRetriever::new( - operator_state_retriever, - get_provider(&self.avs_writer.rpc_url), - ); - if let Some(task) = self.tasks.get(&task_index) { - let state = op_state - .getOperatorState_0( - registry_coordinator, - task.quorumNumbers.clone(), - task.taskCreatedBlock, - ) - .call() - .await? - ._0; - let operator_address = registry_coordinator_instance - .getOperatorFromId(signed_task_response.operator_id()) - .call() - .await? - ._0; - for operators in state.iter() { - for operator in operators { - if operator.operator == operator_address { - *entry += operator.stake; - } - } - } - } - if old_entry < U96::from(4800) { - self.bls_aggregation_service - .process_new_signature( - task_index, - task_response_digest, - signed_task_response.signature(), - signed_task_response.operator_id(), - ) - .await?; - } + for val in task.quorumNumbers.iter() { + quorum_numbers.push(*val); + } - *entry >= U96::from(4800) // total stake is 12000. quorum threshold percentag in new task is 40% . hence 4800. - }; + let time_to_expiry = tokio::time::Duration::from_secs( + (TASK_CHALLENGE_WINDOW_BLOCK * BLOCK_TIME_SECONDS).into(), + ); - if quorum_reached && (old_entry < U96::from(4800)) { - info!("quorum reached for task index: {:?}", task_index); - if let Some(aggregated_response) = self - .bls_aggregation_service - .aggregated_response_receiver - .lock() - .await - .recv() - .await - { - let response = - aggregated_response.map_err(AggregatorError::BlsAggregationServiceError)?; - self.send_aggregated_response_to_contract(response, signed_task_response) - .await?; - } - } else if old_entry >= U96::from(4800) { - info!( - "quorum already reached for index{:?}, ignoring more signatures", - task_index - ); - } else { - info!( - "quorum not reached yet for index:{:?}. waiting to receive more signatures ", - task_index - ); - } + Ok(TaskMetadata::new( + task_index, + u64::from(task.taskCreatedBlock), + quorum_numbers, + quorum_threshold_percentages, + time_to_expiry, + )) + } - Ok(()) + async fn process_task_response( + &self, + task_response: Self::TaskResponse, + ) -> Result { + let hash = task_response.digest(); + self.task_responses.lock().await.insert(hash, task_response); + Ok(hash) } - /// Sends the aggregated response to the contract - /// - /// # Arguments - /// - /// * [`BlsAggregationServiceResponse`] - The aggregated response - /// - /// # Returns - /// - /// * `eyre::Result<()>` - The result of the operation - pub async fn send_aggregated_response_to_contract( + async fn process_aggregated_response( &self, response: BlsAggregationServiceResponse, - signed_task_response: SignedTaskResponse, - ) -> Result<(), AggregatorError> { + ) -> Result<(), TaskProcessorError> { let mut non_signer_pub_keys = Vec::::new(); for pub_key in response.non_signers_pub_keys_g1.iter() { - if pub_key.g1().x().is_some() { - let g1 = convert_to_g1_point(pub_key.g1())?; - non_signer_pub_keys.push(G1Point { X: g1.X, Y: g1.Y }) - } else { - info!( - "Zero non_signers for the task index :{:?}", - response.task_index - ); - } + let g1 = convert_to_g1_point(pub_key.g1()).map_err(box_error)?; + non_signer_pub_keys.push(G1Point { X: g1.X, Y: g1.Y }) } let mut quorum_apks = Vec::::new(); for pub_key in response.quorum_apks_g1.iter() { - let g1 = convert_to_g1_point(pub_key.g1())?; + let g1 = convert_to_g1_point(pub_key.g1()).map_err(box_error)?; quorum_apks.push(G1Point { X: g1.X, Y: g1.Y }) } @@ -433,62 +151,35 @@ impl Aggregator { nonSignerQuorumBitmapIndices: response.non_signer_quorum_bitmap_indices, quorumApks: quorum_apks, apkG2: G2Point { - X: convert_to_g2_point(response.signers_apk_g2.g2())?.X, - Y: convert_to_g2_point(response.signers_apk_g2.g2())?.Y, + X: convert_to_g2_point(response.signers_apk_g2.g2()) + .map_err(box_error)? + .X, + Y: convert_to_g2_point(response.signers_apk_g2.g2()) + .map_err(box_error)? + .Y, }, sigma: G1Point { - X: convert_to_g1_point(response.signers_agg_sig_g1.g1_point().g1())?.X, - Y: convert_to_g1_point(response.signers_agg_sig_g1.g1_point().g1())?.Y, + X: convert_to_g1_point(response.signers_agg_sig_g1.g1_point().g1()) + .map_err(box_error)? + .X, + Y: convert_to_g1_point(response.signers_agg_sig_g1.g1_point().g1()) + .map_err(box_error)? + .Y, }, quorumApkIndices: response.quorum_apk_indices, totalStakeIndices: response.total_stake_indices, nonSignerStakeIndices: response.non_signer_stake_indices, }; - let task = &self.tasks[&response.task_index]; - let task_response = signed_task_response.task_response; + let task = &self.tasks.lock().await[&response.task_index]; + let task_response = self.task_responses.lock().await[&response.task_response_digest] + .0 + .clone(); self.avs_writer - .send_aggregated_response( - task.clone(), - task_response.clone(), - non_signer_stakes_and_signature, - ) - .await?; - Ok(()) - } -} + .send_aggregated_response(task.clone(), task_response, non_signer_stakes_and_signature) + .await + .map_err(box_error)?; -fn check_double_mapping( - outer_map: &HashMap>, - outer_key: u32, - inner_key: TaskResponseDigest, -) -> Option<&TaskResponse> { - if let Some(inner_map) = outer_map.get(&outer_key) { - if let Some(value) = inner_map.get(&inner_key) { - return Some(value); - } - } - None -} - -#[cfg(test)] -mod tests { - - use super::*; - - #[test] - fn test_check_double_mapping() { - let mut outer_map = HashMap::new(); - let mut inner_map = HashMap::new(); - inner_map.insert( - TaskResponseDigest::default(), - TaskResponse { - referenceTaskIndex: "0".parse().unwrap(), - numberSquared: "0".parse().unwrap(), - }, - ); - outer_map.insert(1, inner_map); - let result = check_double_mapping(&outer_map, 1, TaskResponseDigest::default()); - assert!(result.is_some()); + Ok(()) } } diff --git a/crates/aggregator/src/rpc_server.rs b/crates/aggregator/src/rpc_server.rs deleted file mode 100644 index c150d63f..00000000 --- a/crates/aggregator/src/rpc_server.rs +++ /dev/null @@ -1,38 +0,0 @@ -use eigen_crypto_bls::Signature; -use eigen_types::operator::OperatorId; -use incredible_bindings::incrediblesquaringtaskmanager::IIncredibleSquaringTaskManager::TaskResponse; -use serde::{Deserialize, Serialize}; -// use alloy::sol_types::SolCall; -/// Signed Task Response -#[derive(Debug, Clone, Serialize, Deserialize)] -pub struct SignedTaskResponse { - /// Task Response - pub task_response: TaskResponse, - signature: Signature, - operator_id: OperatorId, -} - -impl SignedTaskResponse { - /// Create a new [`SignedTaskResponse`] - pub fn new( - task_response: TaskResponse, - bls_signature: Signature, - operator_id: OperatorId, - ) -> Self { - Self { - task_response, - signature: bls_signature, - operator_id, - } - } - - /// [`Signature`] - pub fn signature(&self) -> Signature { - self.signature.clone() - } - - /// [`OperatorId`] - pub fn operator_id(&self) -> OperatorId { - self.operator_id - } -} diff --git a/crates/avs/Cargo.toml b/crates/avs/Cargo.toml index a2f3bed1..53f53cf0 100644 --- a/crates/avs/Cargo.toml +++ b/crates/avs/Cargo.toml @@ -6,7 +6,7 @@ rust-version.workspace = true repository.workspace = true license.workspace = true description = "incredible avs builder " - + [lints] workspace = true @@ -16,17 +16,21 @@ serde.workspace = true eyre.workspace = true tracing.workspace = true metrics.workspace = true -metrics-util.workspace = true -#incredible -incredible-operator-2.workspace = true +# incredible incredible-config.workspace = true incredible-operator.workspace = true incredible-challenger.workspace = true incredible-aggregator.workspace = true incredible-task-generator.workspace = true incredible-metrics.workspace = true + +# eigen-rs +eigen-client-avsregistry.workspace = true +eigen-logging.workspace = true eigen-nodeapi.workspace = true +eigen-operator.workspace = true + #tokio tokio.workspace = true @@ -36,5 +40,4 @@ futures = "0.3.30" #thiserror thiserror.workspace = true -clap.workspace = true ntex = { version = "2.0", features = ["tokio"] } diff --git a/crates/avs/src/builder/mod.rs b/crates/avs/src/builder/mod.rs deleted file mode 100644 index 301a8e67..00000000 --- a/crates/avs/src/builder/mod.rs +++ /dev/null @@ -1,115 +0,0 @@ -//! Builder module for the AVS. Starts all the services for the AVS using futures simulatenously. -use eigen_nodeapi::{create_server, NodeApi}; -use futures::TryFutureExt; -use incredible_aggregator::Aggregator; -use incredible_challenger::Challenger; -use incredible_config::IncredibleConfig; -use incredible_operator::builder::OperatorBuilder; -use incredible_operator_2::builder::OperatorBuilder as OperatorBuilder2; -use incredible_task_generator::TaskManager; -use ntex::rt::System; -use std::{future::Future, sync::Arc}; -use tracing::info; -/// Launch Avs trait -pub trait LaunchAvs { - /// Launch Avs - fn launch_avs(self, avs: T) -> impl Future> + Send; -} - -/// Avs builder -#[derive(Debug)] -pub struct AvsBuilder { - config: IncredibleConfig, -} - -impl AvsBuilder { - /// new - pub fn new(config: IncredibleConfig) -> Self { - Self { config } - } -} - -/// Default avs launcher -#[derive(Debug)] -pub struct DefaultAvsLauncher {} - -impl DefaultAvsLauncher { - /// new - pub const fn new() -> Self { - Self {} - } -} - -impl Default for DefaultAvsLauncher { - fn default() -> Self { - Self::new() - } -} - -impl LaunchAvs for DefaultAvsLauncher { - async fn launch_avs(self, avs: AvsBuilder) -> eyre::Result<()> { - info!("launching crates: incredible-squaring-avs-rs"); - incredible_metrics::new(); - // start operator - let mut operator_builder = OperatorBuilder::build(avs.config.clone()).await?; - let mut operator_builder2 = OperatorBuilder2::build( - avs.config.clone(), - Some(Arc::new(operator_builder.client.clone())), - ) - .await?; - - let mut challenge = Challenger::build(avs.config.clone()).await?; - let operator_service = operator_builder - .start_operator() - .map_err(|e| eyre::eyre!("Operator error: {:?}", e)); - - let operator2_service = operator_builder2 - .start_operator() - .map_err(|e| eyre::eyre!("Operator error: {:?}", e)); - - let challenger_service = challenge - .start_challenger() - .map_err(|e| eyre::eyre!("Challenger error: {:?}", e)); - let aggregator = Aggregator::new(avs.config.clone()).await?; - - let aggregator_service_with_rpc_client = aggregator - .start( - avs.config.ws_rpc_url().clone(), - avs.config.operator_state_retriever_addr()?, - avs.config.registry_coordinator_addr()?, - ) - .map_err(|e| eyre::eyre!("Aggregator error {e:?}")); - - let task_manager = TaskManager::new( - avs.config.task_manager_addr()?, - avs.config.http_rpc_url(), - avs.config.task_manager_signer(), - ); - - let task_spam_service = task_manager - .start() - .map_err(|e| eyre::eyre!("Task manager error {e:?}")); - - let node_api = NodeApi::new("incredible-squaring", "v0.0.1"); - let node_api_address = avs.config.node_api_port_address(); - info!("node_api_address{:?}", node_api_address); - - std::thread::spawn(move || { - let _ = System::new("node_api_system").block_on(async move { - let node_api_server = create_server(node_api, node_api_address).unwrap(); - node_api_server.await - }); - }); - - let _ = futures::future::try_join5( - operator_service, - operator2_service, - challenger_service, - aggregator_service_with_rpc_client, - task_spam_service, - ) - .await?; - - Ok(()) - } -} diff --git a/crates/avs/src/lib.rs b/crates/avs/src/lib.rs index c0aa99d8..4f0e104b 100644 --- a/crates/avs/src/lib.rs +++ b/crates/avs/src/lib.rs @@ -1,2 +1,136 @@ -//! Starts all the services for the AVS using futures -pub mod builder; +//! Starts all the services for the AVS simultaneously. +use eigen_client_avsregistry::reader::AvsRegistryChainReader; +use eigen_logging::get_logger; +use eigen_nodeapi::{create_server, NodeApi}; +use eigen_operator::traits::Operator; +use futures::TryFutureExt; +use incredible_aggregator::ISTaskProcessor; +use incredible_aggregator::{Aggregator, AggregatorConfig}; +use incredible_challenger::Challenger; +use incredible_config::IncredibleConfig; +use incredible_operator::incredible_square_operator::IncredibleSquareOperator; +use incredible_task_generator::TaskManager; +use ntex::rt::System; +use tracing::info; + +/// Launches all the services for the AVS. +pub async fn launch_avs(avs_config: IncredibleConfig) -> eyre::Result<()> { + info!("launching crates: incredible-squaring-avs-rs"); + incredible_metrics::new(); + // start operator + let cfg1 = avs_config.clone(); + let operator_builder = IncredibleSquareOperator::new(cfg1).await?; + + let mut cfg2 = avs_config.clone(); + cfg2.set_bls_keystore_path(avs_config.bls_keystore_2_path()); + cfg2.set_bls_keystore_password(avs_config.bls_keystore_2_password()); + cfg2.set_operator_address(avs_config.operator_2_address()?.to_string()); + cfg2.set_operator_id(avs_config.get_operator_2_id()?.to_string()); + let operator_builder2 = IncredibleSquareOperator::new(cfg2).await?; + + let mut challenge = Challenger::build(avs_config.clone()).await?; + let registry_coordinator = operator_builder.registry_coordinator; + let operator_state_retriever = operator_builder.operator_state_retriever; + let http_rpc_url = avs_config.http_rpc_url().clone(); + let avs_registry_reader = AvsRegistryChainReader::new( + get_logger(), + registry_coordinator, + operator_state_retriever, + http_rpc_url, + ) + .await?; + + // Start Operator 1 + let key_pair = &operator_builder.key_pair; + let operator_id = &operator_builder.operator_id; + let operator_address = operator_builder.operator_addr; + let operator_name = "operator1"; + let client_aggregator = &operator_builder.client; + let ws_rpc_url = &operator_builder.ws_rpc_url; + let operator_service = IncredibleSquareOperator::start_operator( + &avs_registry_reader, + key_pair, + operator_id, + operator_address, + operator_name, + client_aggregator, + ws_rpc_url, + ) + .map_err(|e| eyre::eyre!("Operator error: {:?}", e)); + + // Start operator 2 + let key_pair = &operator_builder2.key_pair; + let operator_id = &operator_builder2.operator_id; + let operator_address = operator_builder2.operator_addr; + let operator_name = "operator2"; + let client_aggregator = operator_builder.client.clone(); + let ws_rpc_url = &operator_builder2.ws_rpc_url; + let operator2_service = IncredibleSquareOperator::start_operator( + &avs_registry_reader, + key_pair, + operator_id, + operator_address, + operator_name, + &client_aggregator, + ws_rpc_url, + ) + .map_err(|e| eyre::eyre!("Operator error: {:?}", e)); + + let challenger_service = challenge + .start_challenger() + .map_err(|e| eyre::eyre!("Challenger error: {:?}", e)); + + let task_processor = ISTaskProcessor::new( + avs_config.registry_coordinator_addr()?, + avs_config.http_rpc_url(), + avs_config.get_signer(), + ) + .await?; + + let aggregator_cfg = AggregatorConfig { + server_address: avs_config.aggregator_ip_addr(), + http_rpc_url: avs_config.http_rpc_url(), + ws_rpc_url: avs_config.ws_rpc_url(), + registry_coordinator: avs_config.registry_coordinator_addr()?, + operator_state_retriever: avs_config.operator_state_retriever_addr()?, + }; + let aggregator = Aggregator::new(aggregator_cfg, task_processor) + .await + .map_err(|e| eyre::eyre!("Aggregator new error {e:?}"))?; + + let aggregator_service_with_rpc_client = aggregator + .start(avs_config.ws_rpc_url().clone()) + .map_err(|e| eyre::eyre!("Aggregator start error {e:?}")); + + let task_manager = TaskManager::new( + avs_config.task_manager_addr()?, + avs_config.http_rpc_url(), + avs_config.task_manager_signer(), + ); + + let task_spam_service = task_manager + .start() + .map_err(|e| eyre::eyre!("Task manager error {e:?}")); + + let node_api = NodeApi::new("incredible-squaring", "v0.0.1"); + let node_api_address = avs_config.node_api_port_address(); + info!("node_api_address{:?}", node_api_address); + + std::thread::spawn(move || { + let _ = System::new("node_api_system").block_on(async move { + let node_api_server = create_server(node_api, node_api_address).unwrap(); + node_api_server.await + }); + }); + + let _ = futures::future::try_join5( + operator_service, + operator2_service, + challenger_service, + aggregator_service_with_rpc_client, + task_spam_service, + ) + .await?; + + Ok(()) +} diff --git a/crates/chainio/Cargo.toml b/crates/chainio/Cargo.toml index ba592298..4640984e 100644 --- a/crates/chainio/Cargo.toml +++ b/crates/chainio/Cargo.toml @@ -6,7 +6,7 @@ rust-version.workspace = true repository.workspace = true license.workspace = true description = "incredible squaring chainio " - + [lints] workspace = true @@ -22,7 +22,8 @@ tracing.workspace = true reqwest.workspace = true #eigen-rs +eigen-common.workspace = true eigen-client-avsregistry.workspace = true eigen-types.workspace = true eigen-utils.workspace = true -eigen-logging.workspace = true \ No newline at end of file +eigen-logging.workspace = true diff --git a/crates/chainio/src/fake_avs_writer.rs b/crates/chainio/src/fake_avs_writer.rs index eb342b05..562dcf92 100644 --- a/crates/chainio/src/fake_avs_writer.rs +++ b/crates/chainio/src/fake_avs_writer.rs @@ -1,6 +1,6 @@ use crate::error::ChainIoError; use alloy::primitives::{Address, TxHash}; -use eigen_utils::get_signer; +use eigen_common::get_signer; use incredible_bindings::incrediblesquaringtaskmanager::{ IBLSSignatureChecker::NonSignerStakesAndSignature, IIncredibleSquaringTaskManager::{Task, TaskResponse, TaskResponseMetadata}, diff --git a/crates/chainio/src/lib.rs b/crates/chainio/src/lib.rs index 6bbdc962..dbf3d758 100644 --- a/crates/chainio/src/lib.rs +++ b/crates/chainio/src/lib.rs @@ -9,10 +9,10 @@ use alloy::{ primitives::{Address, U256}, rpc::types::TransactionReceipt, }; +use eigen_common::{get_provider, get_signer}; use eigen_types::operator::{QuorumNum, QuorumThresholdPercentage}; -use eigen_utils::{ - get_provider, get_signer, - registrycoordinator::RegistryCoordinator::{self, serviceManagerReturn}, +use eigen_utils::slashing::middleware::registrycoordinator::RegistryCoordinator::{ + self, serviceManagerReturn, }; use error::ChainIoError; use incredible_bindings::incrediblesquaringtaskmanager::IIncredibleSquaringTaskManager::{ diff --git a/crates/challenger/Cargo.toml b/crates/challenger/Cargo.toml index d3d92047..ae5b39d2 100644 --- a/crates/challenger/Cargo.toml +++ b/crates/challenger/Cargo.toml @@ -6,14 +6,13 @@ rust-version.workspace = true repository.workspace = true license.workspace = true description = "incredible squaring challenger " - + [lints] workspace = true [dependencies] incredible-config.workspace = true eyre.workspace = true -alloy-provider.workspace = true incredible-bindings.workspace = true futures-util.workspace = true alloy.workspace = true @@ -26,7 +25,8 @@ incredible-testing-utils.workspace = true incredible-chainio.workspace = true #eigen-rs +eigen-common.workspace = true eigen-utils.workspace = true [dev-dependencies] -incredible-task-generator.workspace = true \ No newline at end of file +incredible-task-generator.workspace = true diff --git a/crates/challenger/src/lib.rs b/crates/challenger/src/lib.rs index c96496ed..a5e5f2c8 100644 --- a/crates/challenger/src/lib.rs +++ b/crates/challenger/src/lib.rs @@ -1,6 +1,6 @@ //! Challenger crate use alloy::consensus::Transaction; -use eigen_utils::{get_provider, get_ws_provider}; +use eigen_common::{get_provider, get_ws_provider}; use incredible_bindings::incrediblesquaringtaskmanager::IIncredibleSquaringTaskManager::{ Task, TaskResponse, TaskResponseMetadata, }; diff --git a/crates/metrics/Cargo.toml b/crates/metrics/Cargo.toml index ed12b994..494f5ca6 100644 --- a/crates/metrics/Cargo.toml +++ b/crates/metrics/Cargo.toml @@ -6,13 +6,12 @@ rust-version.workspace = true repository.workspace = true license.workspace = true description = "incredible-metrics" - + [lints] workspace = true [dependencies] alloy.workspace = true -alloy-provider.workspace = true incredible-config.workspace = true thiserror.workspace = true incredible-bindings.workspace = true @@ -26,4 +25,4 @@ metrics-util.workspace = true [dev-dependencies] eigen-metrics.workspace = true tokio.workspace = true -reqwest.workspace = true \ No newline at end of file +reqwest.workspace = true diff --git a/crates/operator/Cargo.toml b/crates/operator/Cargo.toml index 0d9c3820..ca4a9752 100644 --- a/crates/operator/Cargo.toml +++ b/crates/operator/Cargo.toml @@ -6,44 +6,43 @@ rust-version.workspace = true repository.workspace = true license.workspace = true description = "eigen layer operator" - + [lints] workspace = true [dependencies] alloy.workspace = true -alloy-provider.workspace = true incredible-config.workspace = true thiserror.workspace = true incredible-bindings.workspace = true eyre.workspace = true futures-util.workspace = true +incredible-aggregator.workspace = true + # eigen-rs eigen-client-avsregistry.workspace = true +eigen-client-eth.workspace = true eigen-crypto-bls.workspace = true -eigen-cli.workspace = true +eigen-crypto-bn254.workspace = true +eigen-logging.workspace = true +eigen-metrics-collectors-rpc-calls.workspace = true +eigen-operator.workspace = true eigen-types.workspace = true - -incredible-metrics.workspace = true +eigen-utils.workspace = true +eigen-aggregator.workspace = true rust-bls-bn254.workspace = true -#incredible -incredible-aggregator.workspace = true reqwest.workspace = true -hex = {version = "0.4.3" , features = ["alloc"]} +hex = { version = "0.4.3", features = ["alloc"] } tokio.workspace = true +serde.workspace = true serde_json.workspace = true toml.workspace = true tracing.workspace = true rand_core.workspace = true -eigen-logging.workspace = true -eigen-crypto-bn254.workspace = true -eigen-metrics-collectors-rpc-calls.workspace = true -eigen-client-eth.workspace = true -eigen-utils.workspace = true [dev-dependencies] incredible-testing-utils.workspace = true @@ -53,4 +52,4 @@ ark-ff = "0.5.0" [features] default = [] -integration_tests = [] \ No newline at end of file +integration_tests = [] diff --git a/crates/operator/src/builder.rs b/crates/operator/src/builder.rs deleted file mode 100644 index f0c23911..00000000 --- a/crates/operator/src/builder.rs +++ /dev/null @@ -1,317 +0,0 @@ -use std::sync::Arc; - -use crate::client::ClientAggregator; -use crate::error::OperatorError; -use alloy::{ - primitives::{keccak256, Address}, - providers::WsConnect, - rpc::types::Filter, - sol_types::{SolEvent, SolValue}, -}; - -use alloy::primitives::U256; -use alloy_provider::{Provider, ProviderBuilder}; -use eigen_client_avsregistry::reader::AvsRegistryChainReader; -use eigen_client_eth::instrumented_client::InstrumentedClient; -use eigen_crypto_bls::BlsKeyPair; -use eigen_logging::get_logger; -use eigen_types::operator::OperatorId; -use eyre::Result; -use futures_util::StreamExt; -use incredible_aggregator::rpc_server::SignedTaskResponse; -use incredible_bindings::incrediblesquaringtaskmanager::IIncredibleSquaringTaskManager::TaskResponse; -use incredible_bindings::incrediblesquaringtaskmanager::IncredibleSquaringTaskManager::{ - self, NewTaskCreated, -}; -use incredible_config::IncredibleConfig; -use rust_bls_bn254::keystores::base_keystore::Keystore; -use tracing::info; - -/// Main Operator -#[derive(Debug)] -pub struct OperatorBuilder { - http_rpc_url: String, - - ws_rpc_url: String, - - operator_addr: Address, - - key_pair: BlsKeyPair, - - operator_id: OperatorId, - /// [`ClientAggregator`] - pub client: ClientAggregator, - - registry_coordinator: Address, - - operator_state_retriever: Address, - - slash_simulate: bool, -} - -impl OperatorBuilder { - /// Build the Operator Builder - pub async fn build(config: IncredibleConfig) -> Result { - let _instrumented_client = InstrumentedClient::new(&config.http_rpc_url()).await; - // Read BlsKey from path - let keystore = Keystore::from_file(&config.bls_keystore_path())? - .decrypt(&config.bls_keystore_password())?; - - // TODO(supernova): Add this method in sdk in bls crate - let fr_key: String = keystore.iter().map(|&value| value as char).collect(); - let key_pair = BlsKeyPair::new(fr_key)?; - let operator_id = config.get_operator_id()?; - let registry_coordinator_addr = config.registry_coordinator_addr()?; - let operator_statr_retriever_addr = config.operator_state_retriever_addr()?; - let operator_address = config.operator_address()?; - let mut client = ClientAggregator::new(config.aggregator_ip_addr()); - let _ = client.dial_aggregator_rpc_client(); - let slash = config.slash_simulate(); - - Ok(Self { - http_rpc_url: config.http_rpc_url(), - ws_rpc_url: config.ws_rpc_url(), - operator_addr: operator_address, - key_pair, - operator_id, - client, - registry_coordinator: registry_coordinator_addr, - operator_state_retriever: operator_statr_retriever_addr, - slash_simulate: slash, - }) - } - - /// Get the [`BlsKeyPair`] - pub fn bls_key_pair(&self) -> BlsKeyPair { - self.key_pair.clone() - } - - /// Processes new task - pub fn process_new_task(&self, new_task_created: NewTaskCreated) -> TaskResponse { - #[allow(unused_mut)] - #[allow(unused_assignments)] - let mut number_to_be_squared = new_task_created.task.numberToBeSquared; - - #[cfg(feature = "integration_tests")] - { - number_to_be_squared = U256::from(9); - info!("Challenger test: setting number to be squared to 9"); - } - - let num_squared = if self.slash_simulate { - U256::from(28) // not a perfect square, so it can't be correct in any input - } else { - number_to_be_squared * number_to_be_squared - }; - - TaskResponse { - referenceTaskIndex: new_task_created.taskIndex, - numberSquared: num_squared, - } - } - - /// Start the operator - pub async fn start_operator(&mut self) -> Result<()> { - let avs_registry_reader = AvsRegistryChainReader::new( - get_logger(), - self.registry_coordinator, - self.operator_state_retriever, - self.http_rpc_url.clone(), - ) - .await - .unwrap(); - let is_registered = avs_registry_reader - .is_operator_registered(self.operator_addr) - .await?; - info!("is_operator1_registered {}", is_registered); - let arc_client = Arc::new(self.client.clone()); - if is_registered { - info!("Starting operator"); - - let ws = WsConnect::new(self.ws_rpc_url.clone()); - let provider = ProviderBuilder::new().on_ws(ws).await?; - - let filter = Filter::new().event_signature(NewTaskCreated::SIGNATURE_HASH); - let sub = provider.subscribe_logs(&filter).await?; - let mut stream = sub.into_stream(); - - while let Some(log) = stream.next().await { - let task_option = log - .log_decode::() - .ok(); - if let Some(task) = task_option { - let data = task.data(); - let new_task_created = NewTaskCreated { - task: data.task.clone(), - taskIndex: data.taskIndex, - }; - info!( - "operator1 picked up a new task , index: {} ", - data.taskIndex - ); - incredible_metrics::increment_num_tasks_received(); - let task_response = self.process_new_task(new_task_created); - let signed_task_response = self.sign_task_response(task_response)?; - let _ = arc_client - .send_signed_task_response(signed_task_response) - .await; - } - } - } - Ok(()) - } - - /// Sign the task response - pub fn sign_task_response( - &self, - task_response: TaskResponse, - ) -> Result { - let encoded_response = TaskResponse::abi_encode(&task_response); - let hash_msg = keccak256(encoded_response); - - let signed_msg = self.key_pair.sign_message(&hash_msg); - let signed_task_response = - SignedTaskResponse::new(task_response, signed_msg, self.operator_id); - Ok(signed_task_response) - } -} - -#[cfg(test)] -mod tests { - - use super::*; - use alloy::primitives::Bytes; - use alloy::primitives::U256; - use ark_ec::AffineRepr; - use ark_ff::fields::PrimeField; - use eigen_crypto_bn254::utils::verify_message; - use incredible_bindings::incrediblesquaringtaskmanager::IIncredibleSquaringTaskManager::Task; - use incredible_testing_utils::{ - get_incredible_squaring_operator_state_retriever, - get_incredible_squaring_registry_coordinator, - }; - use std::fs; - use std::path::Path; - use std::str::FromStr; - - fn get_config_path() -> String { - let config_path = Path::new(env!("CARGO_MANIFEST_DIR")) - .parent() - .unwrap() - .join("operator/operator_test_config.toml"); - fs::read_to_string(config_path).unwrap() - } - - #[tokio::test] - async fn test_bls_keystore() { - let mut incredible_config: IncredibleConfig = toml::from_str(&get_config_path()).unwrap(); - incredible_config.set_registry_coordinator_addr( - get_incredible_squaring_registry_coordinator() - .await - .to_string(), - ); - incredible_config.set_operator_state_retriever( - get_incredible_squaring_operator_state_retriever() - .await - .to_string(), - ); - let operator_builder = OperatorBuilder::build(incredible_config).await.unwrap(); - - assert_eq!( - U256::from_limbs( - operator_builder - .key_pair - .public_key() - .g1() - .x() - .unwrap() - .into_bigint() - .0 - ), - U256::from_str( - "277950648056014144722774518899051149098728246263316284984520891067822832300" - ) - .unwrap() - ); - } - - #[tokio::test] - async fn test_process_new_task() { - let new_task_created = NewTaskCreated { - taskIndex: 1, - task: Task { - numberToBeSquared: U256::from(4), - taskCreatedBlock: 105, - quorumNumbers: Bytes::from_str("0x40").unwrap(), - quorumThresholdPercentage: 5, - }, - }; - - let mut incredible_config: IncredibleConfig = toml::from_str(&get_config_path()).unwrap(); - incredible_config.set_registry_coordinator_addr( - get_incredible_squaring_registry_coordinator() - .await - .to_string(), - ); - incredible_config.set_operator_state_retriever( - get_incredible_squaring_operator_state_retriever() - .await - .to_string(), - ); - let operator_builder = OperatorBuilder::build(incredible_config).await.unwrap(); - - let task_response = operator_builder.process_new_task(new_task_created); - - assert_eq!(task_response.numberSquared, U256::from(16)); - assert_eq!(task_response.referenceTaskIndex, 1u32); - } - - #[tokio::test] - async fn test_build_operator() { - let mut incredible_config: IncredibleConfig = toml::from_str(&get_config_path()).unwrap(); - incredible_config.set_registry_coordinator_addr( - get_incredible_squaring_registry_coordinator() - .await - .to_string(), - ); - incredible_config.set_operator_state_retriever( - get_incredible_squaring_operator_state_retriever() - .await - .to_string(), - ); - let _ = OperatorBuilder::build(incredible_config).await.unwrap(); - } - - #[tokio::test] - async fn test_sign_task_response() { - let task_response = TaskResponse { - referenceTaskIndex: 1, - numberSquared: U256::from(16), - }; - - let mut incredible_config: IncredibleConfig = toml::from_str(&get_config_path()).unwrap(); - incredible_config.set_registry_coordinator_addr( - get_incredible_squaring_registry_coordinator() - .await - .to_string(), - ); - incredible_config.set_operator_state_retriever( - get_incredible_squaring_operator_state_retriever() - .await - .to_string(), - ); - let operator_builder = OperatorBuilder::build(incredible_config).await.unwrap(); - let signed_task_response = operator_builder - .sign_task_response(task_response.clone()) - .unwrap(); - - let bls_key_pair = operator_builder.bls_key_pair(); - let encoded_response = TaskResponse::abi_encode(&task_response); - let hash_msg = keccak256(encoded_response); - assert!(verify_message( - bls_key_pair.public_key_g2().g2(), - &hash_msg, - signed_task_response.signature().g1_point().g1() - )); - } -} diff --git a/crates/operator/src/client.rs b/crates/operator/src/client.rs deleted file mode 100644 index 780700a1..00000000 --- a/crates/operator/src/client.rs +++ /dev/null @@ -1,77 +0,0 @@ -use alloy::rpc::client::{ReqwestClient, RpcClient}; -use eyre::Result; -pub use incredible_aggregator::rpc_server::SignedTaskResponse; -use reqwest::Client; -use serde_json::json; -use tokio::time::{sleep, Duration}; -use tracing::{debug, info}; - -/// Client Aggregator -#[derive(Debug, Clone)] -pub struct ClientAggregator { - /// Alloy rpc client to send requests to aggregator - pub client: Option>>, - aggregator_ip_port_address: String, -} - -impl ClientAggregator { - /// new - pub fn new(aggregator_ip_port_address: String) -> Self { - Self { - client: None, - aggregator_ip_port_address, - } - } - - /// new http rpc client instance using the aggregator ip port address - pub fn dial_aggregator_rpc_client(&mut self) -> Result<()> { - let url = reqwest::Url::parse(&format!("http://{}", &self.aggregator_ip_port_address))?; - let client = ReqwestClient::new_http(url); - - self.client = Some(client); - Ok(()) - } - - /// Send signed task response - pub async fn send_signed_task_response( - &self, - signed_task_response: SignedTaskResponse, - ) -> Result<()> { - #[allow(unused_mut)] - let mut delay = Duration::from_secs(1); - - for _ in 0..5 { - let params = &json!({ - "params": signed_task_response, - "id": 1, - "jsonrpc": "2.0" - }); - if let Some(request) = self.client.as_ref() { - let s: bool = request - .request("process_signed_task_response", params) - .await?; - - if s { - incredible_metrics::inc_num_tasks_accepted_by_aggregator(); - return Ok(()); - } - - // Exponential backoff - info!("Retrying in {} seconds...", delay.as_secs()); - sleep(delay).await; - delay *= 2; // Double the delay for the next retry - } - } - debug!("Could not send signed task response to aggregator. Tried 5 times."); - Ok(()) - } -} - -mod tests { - - #[test] - fn test_new_client() { - let mut client = crate::client::ClientAggregator::new("127.0.0.1:8545".to_string()); - let _ = client.dial_aggregator_rpc_client(); - } -} diff --git a/crates/operator/src/error.rs b/crates/operator/src/error.rs deleted file mode 100644 index 89523e7c..00000000 --- a/crates/operator/src/error.rs +++ /dev/null @@ -1,41 +0,0 @@ -use alloy::signers::local::LocalSignerError; -use eigen_crypto_bls::error::BlsError; -use incredible_config::error::ConfigError; -use rust_bls_bn254::errors::KeystoreError; -use thiserror::Error; - -/// Error returned by AvsRegistry -#[derive(Debug, Error)] -pub enum OperatorError { - /// Failed to parse ECDSA keystore signer - #[error("Failed to parse ecdsa keystore signer")] - ECDSAKeystoreSigner, - - /// Failed to derive Cargo Manfest Dir - #[error("Could not derive cargo manifest path")] - CargoManifestDir, - /// Failed to build avsregistry reader - #[error("Failed to build avsregistry reader")] - AvsRegistryChainReader, - /// Could not sign the hash using keypair - #[error("Could not sign the hash using keypair")] - SignUsingBlsKeyPair, - /// Failed to create Encoded bls keystore - #[error("Failed to create Encoded bls keystore ")] - EncodedKeystore, - /// Failed to parse bls keystore path - #[error("failed to parse bls keystore path ")] - BlsKeystorePath, - /// Failed to parse config - #[error("Config error {0}")] - ConfigParseError(#[from] ConfigError), - /// Local signer error - #[error("Local signer error ")] - AlloySignerError(#[from] LocalSignerError), - /// Bls Keystore error - #[error("Bls Keystore error ")] - BlsKeystoreError(#[from] KeystoreError), - /// Bls crate(SDK) error - #[error("Bls crate(SDK) error")] - EigenBlsError(#[from] BlsError), -} diff --git a/crates/operator/src/incredible_square_operator.rs b/crates/operator/src/incredible_square_operator.rs new file mode 100644 index 00000000..0264069a --- /dev/null +++ b/crates/operator/src/incredible_square_operator.rs @@ -0,0 +1,240 @@ +use alloy::primitives::Address; +use eigen_client_eth::instrumented_client::InstrumentedClient; +use eigen_crypto_bls::BlsKeyPair; +use eigen_operator::traits::Operator; +use eigen_operator::{client::ClientAggregator, error::OperatorError}; +use eigen_types::operator::OperatorId; +use eyre::Result; +use incredible_aggregator::ISTaskResponse; +use incredible_bindings::incrediblesquaringtaskmanager::IncredibleSquaringTaskManager::NewTaskCreated; +use incredible_config::IncredibleConfig; +use rust_bls_bn254::keystores::base_keystore::Keystore; + +/// Main Operator +#[derive(Debug)] +pub struct IncredibleSquareOperator { + /// HTTP RPC URL + pub http_rpc_url: String, + /// WS RPC URL + pub ws_rpc_url: String, + /// Operator Address + pub operator_addr: Address, + /// [`BlsKeyPair`] + pub key_pair: BlsKeyPair, + /// Operator ID + pub operator_id: OperatorId, + /// [`ClientAggregator`] + pub client: ClientAggregator, + /// Registry Coordinator Address + pub registry_coordinator: Address, + /// Operator State Retriever Address + pub operator_state_retriever: Address, +} + +impl Operator for IncredibleSquareOperator { + type TaskResponse = ISTaskResponse; + type NewTaskEvent = NewTaskCreated; + + fn process_new_task(new_task_created: Self::NewTaskEvent) -> Self::TaskResponse { + #[allow(unused_mut)] + #[allow(unused_assignments)] + let mut number_to_be_squared = new_task_created.task.numberToBeSquared; + + #[cfg(feature = "integration_tests")] + { + use tracing::info; + + number_to_be_squared = alloy::primitives::U256::from(9); + info!("Challenger test: setting number to be squared to 9"); + } + + let num_squared = number_to_be_squared * number_to_be_squared; + + ISTaskResponse::new(new_task_created.taskIndex, num_squared) + } +} + +impl IncredibleSquareOperator { + /// Build the Operator Builder + pub async fn new(config: IncredibleConfig) -> Result { + let _instrumented_client = InstrumentedClient::new(&config.http_rpc_url()).await; + // Read BlsKey from path + let keystore = Keystore::from_file(&config.bls_keystore_path()) + .map_err(|_| OperatorError::RegistrationError)? // TODO: change error type + .decrypt(&config.bls_keystore_password()) + .map_err(|_| OperatorError::RegistrationError)?; // TODO: change error type + + // TODO(supernova): Add this method in sdk in bls crate + let fr_key: String = keystore.iter().map(|&value| value as char).collect(); + let key_pair = BlsKeyPair::new(fr_key)?; + let operator_id = config + .get_operator_id() + .map_err(|_| OperatorError::RegistrationError)?; // TODO: change error type + let registry_coordinator_addr = config + .registry_coordinator_addr() + .map_err(|_| OperatorError::RegistrationError)?; // TODO: change error type + let operator_statr_retriever_addr = config + .operator_state_retriever_addr() + .map_err(|_| OperatorError::RegistrationError)?; // TODO: change error type + let operator_address = config + .operator_address() + .map_err(|_| OperatorError::RegistrationError)?; // TODO change error type + let mut client = ClientAggregator::new(config.aggregator_ip_addr()); + let _ = client.dial_aggregator_rpc_client(); + Ok(Self { + http_rpc_url: config.http_rpc_url(), + ws_rpc_url: config.ws_rpc_url(), + operator_addr: operator_address, + key_pair, + operator_id, + client, + registry_coordinator: registry_coordinator_addr, + operator_state_retriever: operator_statr_retriever_addr, + }) + } +} + +#[cfg(test)] +mod tests { + use super::*; + use alloy::primitives::{Bytes, U256}; + use ark_ec::AffineRepr; + use ark_ff::fields::PrimeField; + use eigen_aggregator::traits::TaskResponse; + use eigen_crypto_bn254::utils::verify_message; + use eigen_operator::traits::Operator; + use incredible_bindings::incrediblesquaringtaskmanager::IIncredibleSquaringTaskManager::Task; + use incredible_bindings::incrediblesquaringtaskmanager::IncredibleSquaringTaskManager::NewTaskCreated; + use incredible_testing_utils::{ + get_incredible_squaring_operator_state_retriever, + get_incredible_squaring_registry_coordinator, + }; + use std::fs; + use std::path::Path; + use std::str::FromStr; + + fn get_config_path() -> String { + let config_path = Path::new(env!("CARGO_MANIFEST_DIR")) + .parent() + .unwrap() + .join("operator/operator_test_config.toml"); + fs::read_to_string(config_path).unwrap() + } + + #[tokio::test] + async fn test_bls_keystore() { + let mut incredible_config: IncredibleConfig = toml::from_str(&get_config_path()).unwrap(); + incredible_config.set_registry_coordinator_addr( + get_incredible_squaring_registry_coordinator() + .await + .to_string(), + ); + incredible_config.set_operator_state_retriever( + get_incredible_squaring_operator_state_retriever() + .await + .to_string(), + ); + let operator_builder = IncredibleSquareOperator::new(incredible_config) + .await + .unwrap(); + + assert_eq!( + U256::from_limbs( + operator_builder + .key_pair + .public_key() + .g1() + .x() + .unwrap() + .into_bigint() + .0 + ), + U256::from_str( + "277950648056014144722774518899051149098728246263316284984520891067822832300" + ) + .unwrap() + ); + } + + #[tokio::test] + async fn test_process_new_task() { + let new_task_created = NewTaskCreated { + taskIndex: 1, + task: Task { + numberToBeSquared: U256::from(4), + taskCreatedBlock: 105, + quorumNumbers: Bytes::from_str("0x40").unwrap(), + quorumThresholdPercentage: 5, + }, + }; + + let mut incredible_config: IncredibleConfig = toml::from_str(&get_config_path()).unwrap(); + incredible_config.set_registry_coordinator_addr( + get_incredible_squaring_registry_coordinator() + .await + .to_string(), + ); + incredible_config.set_operator_state_retriever( + get_incredible_squaring_operator_state_retriever() + .await + .to_string(), + ); + + let task_response = IncredibleSquareOperator::process_new_task(new_task_created); + + assert_eq!(task_response.0.numberSquared, U256::from(16)); + assert_eq!(task_response.0.referenceTaskIndex, 1u32); + } + + #[tokio::test] + async fn test_build_operator() { + let mut incredible_config: IncredibleConfig = toml::from_str(&get_config_path()).unwrap(); + incredible_config.set_registry_coordinator_addr( + get_incredible_squaring_registry_coordinator() + .await + .to_string(), + ); + incredible_config.set_operator_state_retriever( + get_incredible_squaring_operator_state_retriever() + .await + .to_string(), + ); + let _ = IncredibleSquareOperator::new(incredible_config) + .await + .unwrap(); + } + + #[tokio::test] + async fn test_sign_task_response() { + let task_response = ISTaskResponse::new(1, U256::from(16)); + + let mut incredible_config: IncredibleConfig = toml::from_str(&get_config_path()).unwrap(); + incredible_config.set_registry_coordinator_addr( + get_incredible_squaring_registry_coordinator() + .await + .to_string(), + ); + incredible_config.set_operator_state_retriever( + get_incredible_squaring_operator_state_retriever() + .await + .to_string(), + ); + let operator_builder = IncredibleSquareOperator::new(incredible_config) + .await + .unwrap(); + let signed_task_response = IncredibleSquareOperator::sign_task_response( + &operator_builder.key_pair, + &operator_builder.operator_id, + task_response.clone(), + ) + .unwrap(); + + let bls_key_pair = &operator_builder.key_pair; + let hash_msg = task_response.digest(); + assert!(verify_message( + bls_key_pair.public_key_g2().g2(), + &hash_msg, + signed_task_response.signature.g1_point().g1() + )); + } +} diff --git a/crates/operator/src/lib.rs b/crates/operator/src/lib.rs index 5d7763a4..dd139ba0 100644 --- a/crates/operator/src/lib.rs +++ b/crates/operator/src/lib.rs @@ -1,8 +1,3 @@ //! Operator with alloy rpc client to send signed task response to aggregator /// Operator builder -pub mod builder; -/// Error -pub mod error; - -/// Alloy Rpc Client -pub mod client; +pub mod incredible_square_operator; diff --git a/crates/operator_2/Cargo.toml b/crates/operator_2/Cargo.toml deleted file mode 100644 index 8ac9e0ae..00000000 --- a/crates/operator_2/Cargo.toml +++ /dev/null @@ -1,57 +0,0 @@ -[package] -name = "incredible-operator-2" -version.workspace = true -edition.workspace = true -rust-version.workspace = true -repository.workspace = true -license.workspace = true -description = "eigen layer operator" - -[lints] -workspace = true - -[dependencies] -alloy.workspace = true -alloy-provider.workspace = true -incredible-config.workspace = true -thiserror.workspace = true -incredible-bindings.workspace = true -eyre.workspace = true -futures-util.workspace = true -incredible-operator.workspace = true - -# eigen-rs -eigen-client-avsregistry.workspace = true -eigen-crypto-bls.workspace = true -eigen-cli.workspace = true -eigen-types.workspace = true - -incredible-metrics.workspace = true - -rust-bls-bn254.workspace = true - -#incredible -incredible-aggregator.workspace = true -reqwest.workspace = true - -hex = {version = "0.4.3" , features = ["alloc"]} -tokio.workspace = true -serde_json.workspace = true -toml.workspace = true -tracing.workspace = true -rand_core.workspace = true -eigen-logging.workspace = true -eigen-crypto-bn254.workspace = true -eigen-metrics-collectors-rpc-calls.workspace = true -eigen-client-eth.workspace = true -eigen-utils.workspace = true - -[dev-dependencies] -incredible-testing-utils.workspace = true -tempfile.workspace = true -ark-ec = "0.5.0" -ark-ff = "0.5.0" - -[features] -default = [] -integration_tests = [] \ No newline at end of file diff --git a/crates/operator_2/src/builder.rs b/crates/operator_2/src/builder.rs deleted file mode 100644 index f157e937..00000000 --- a/crates/operator_2/src/builder.rs +++ /dev/null @@ -1,322 +0,0 @@ -use std::sync::Arc; - -use alloy::{ - primitives::{keccak256, Address}, - providers::WsConnect, - rpc::types::Filter, - sol_types::{SolEvent, SolValue}, -}; -use incredible_operator::{client::ClientAggregator, error::OperatorError}; - -use alloy::primitives::U256; -use alloy_provider::{Provider, ProviderBuilder}; -use eigen_client_avsregistry::reader::AvsRegistryChainReader; -use eigen_client_eth::instrumented_client::InstrumentedClient; -use eigen_crypto_bls::BlsKeyPair; -use eigen_logging::get_logger; -use eigen_types::operator::OperatorId; -use eyre::Result; -use futures_util::StreamExt; -use incredible_aggregator::rpc_server::SignedTaskResponse; -use incredible_bindings::incrediblesquaringtaskmanager::IIncredibleSquaringTaskManager::TaskResponse; -use incredible_bindings::incrediblesquaringtaskmanager::IncredibleSquaringTaskManager::{ - self, NewTaskCreated, -}; -use incredible_config::IncredibleConfig; -use rust_bls_bn254::keystores::base_keystore::Keystore; -use tracing::info; - -/// Main Operator -#[derive(Debug)] -pub struct OperatorBuilder { - http_rpc_url: String, - - ws_rpc_url: String, - - operator_addr: Address, - - key_pair: BlsKeyPair, - - operator_id: OperatorId, - - client: Option>, - - registry_coordinator: Address, - - operator_state_retriever: Address, - - slash_simulate: bool, -} - -impl OperatorBuilder { - /// Build the Operator Builder - pub async fn build( - config: IncredibleConfig, - client: Option>, - ) -> Result { - let _instrumented_client = InstrumentedClient::new(&config.http_rpc_url()).await; - // Read BlsKey from path - let keystore = Keystore::from_file(&config.bls_keystore_2_path())? - .decrypt(&config.bls_keystore_2_password())?; - - // TODO(supernova): Add this method in sdk in bls crate - let fr_key: String = keystore.iter().map(|&value| value as char).collect(); - let key_pair = BlsKeyPair::new(fr_key)?; - let operator_id = config.get_operator_2_id()?; - let registry_coordinator_addr = config.registry_coordinator_addr()?; - let operator_statr_retriever_addr = config.operator_state_retriever_addr()?; - let operator_address = config.operator_2_address()?; - let slash = config.slash_simulate(); - Ok(Self { - http_rpc_url: config.http_rpc_url(), - ws_rpc_url: config.ws_rpc_url(), - operator_addr: operator_address, - key_pair, - operator_id, - client, - registry_coordinator: registry_coordinator_addr, - operator_state_retriever: operator_statr_retriever_addr, - slash_simulate: slash, - }) - } - - /// Get the [`BlsKeyPair`] - pub fn bls_key_pair(&self) -> BlsKeyPair { - self.key_pair.clone() - } - - /// Processes new task - pub fn process_new_task(&self, new_task_created: NewTaskCreated) -> TaskResponse { - #[allow(unused_mut)] - #[allow(unused_assignments)] - let mut number_to_be_squared = new_task_created.task.numberToBeSquared; - - #[cfg(feature = "integration_tests")] - { - number_to_be_squared = U256::from(9); - info!("Challenger test: setting number to be squared to 9"); - } - - let num_squared = if self.slash_simulate { - U256::from(24) // not a perfect square, so it can't be correct in any input - } else { - number_to_be_squared * number_to_be_squared - }; - - TaskResponse { - referenceTaskIndex: new_task_created.taskIndex, - numberSquared: num_squared, - } - } - - /// Start the operator - pub async fn start_operator(&mut self) -> Result<()> { - let avs_registry_reader = AvsRegistryChainReader::new( - get_logger(), - self.registry_coordinator, - self.operator_state_retriever, - self.http_rpc_url.clone(), - ) - .await?; - let is_registered = avs_registry_reader - .is_operator_registered(self.operator_addr) - .await?; - info!("is_operator2_registered {}", is_registered); - if is_registered { - info!("Starting operator"); - - let ws = WsConnect::new(self.ws_rpc_url.clone()); - let provider = ProviderBuilder::new().on_ws(ws).await?; - - let filter = Filter::new().event_signature(NewTaskCreated::SIGNATURE_HASH); - let sub = provider.subscribe_logs(&filter).await?; - let mut stream = sub.into_stream(); - - while let Some(log) = stream.next().await { - let task_option = log - .log_decode::() - .ok(); - if let Some(task) = task_option { - let data = task.data(); - let new_task_created = NewTaskCreated { - task: data.task.clone(), - taskIndex: data.taskIndex, - }; - info!( - "operator2 picked up a new task , index: {} ", - data.taskIndex - ); - incredible_metrics::increment_num_tasks_received(); - let task_response = self.process_new_task(new_task_created); - let signed_task_response = self.sign_task_response(task_response)?; - if let Some(client) = &self.client { - let _ = client.send_signed_task_response(signed_task_response).await; - } - } - } - } - Ok(()) - } - - /// Sign the task response - pub fn sign_task_response( - &self, - task_response: TaskResponse, - ) -> Result { - let encoded_response = TaskResponse::abi_encode(&task_response); - let hash_msg = keccak256(encoded_response); - - let signed_msg = self.key_pair.sign_message(&hash_msg); - let signed_task_response = - SignedTaskResponse::new(task_response, signed_msg, self.operator_id); - Ok(signed_task_response) - } -} - -#[cfg(test)] -mod tests { - - use super::*; - use alloy::primitives::Bytes; - use alloy::primitives::U256; - use ark_ec::AffineRepr; - use ark_ff::PrimeField; - use eigen_crypto_bn254::utils::verify_message; - use incredible_bindings::incrediblesquaringtaskmanager::IIncredibleSquaringTaskManager::Task; - use incredible_testing_utils::{ - get_incredible_squaring_operator_state_retriever, - get_incredible_squaring_registry_coordinator, - }; - use std::fs; - use std::path::Path; - use std::str::FromStr; - - fn get_config_path() -> String { - let config_path = Path::new(env!("CARGO_MANIFEST_DIR")) - .parent() - .unwrap() - .join("operator/operator_test_config.toml"); - fs::read_to_string(config_path).unwrap() - } - - #[tokio::test] - async fn test_bls_keystore() { - let mut incredible_config: IncredibleConfig = toml::from_str(&get_config_path()).unwrap(); - incredible_config.set_registry_coordinator_addr( - get_incredible_squaring_registry_coordinator() - .await - .to_string(), - ); - incredible_config.set_operator_state_retriever( - get_incredible_squaring_operator_state_retriever() - .await - .to_string(), - ); - let operator_builder = OperatorBuilder::build(incredible_config, None) - .await - .unwrap(); - - assert_eq!( - U256::from_limbs( - operator_builder - .key_pair - .public_key() - .g1() - .x() - .unwrap() - .into_bigint() - .0 - ), - U256::from_str( - "654664748928620715566514527065607787384626422829919343002201686008542704547" - ) - .unwrap() - ); - } - - #[tokio::test] - async fn test_process_new_task() { - let new_task_created = NewTaskCreated { - taskIndex: 1, - task: Task { - numberToBeSquared: U256::from(4), - taskCreatedBlock: 105, - quorumNumbers: Bytes::from_str("0x40").unwrap(), - quorumThresholdPercentage: 5, - }, - }; - - let mut incredible_config: IncredibleConfig = toml::from_str(&get_config_path()).unwrap(); - incredible_config.set_registry_coordinator_addr( - get_incredible_squaring_registry_coordinator() - .await - .to_string(), - ); - incredible_config.set_operator_state_retriever( - get_incredible_squaring_operator_state_retriever() - .await - .to_string(), - ); - let operator_builder = OperatorBuilder::build(incredible_config, None) - .await - .unwrap(); - - let task_response = operator_builder.process_new_task(new_task_created); - - assert_eq!(task_response.numberSquared, U256::from(16)); - assert_eq!(task_response.referenceTaskIndex, 1u32); - } - - #[tokio::test] - async fn test_build_operator() { - let mut incredible_config: IncredibleConfig = toml::from_str(&get_config_path()).unwrap(); - incredible_config.set_registry_coordinator_addr( - get_incredible_squaring_registry_coordinator() - .await - .to_string(), - ); - incredible_config.set_operator_state_retriever( - get_incredible_squaring_operator_state_retriever() - .await - .to_string(), - ); - let _ = OperatorBuilder::build(incredible_config, None) - .await - .unwrap(); - } - - #[tokio::test] - async fn test_sign_task_response() { - let task_response = TaskResponse { - referenceTaskIndex: 1, - numberSquared: U256::from(16), - }; - - let mut incredible_config: IncredibleConfig = toml::from_str(&get_config_path()).unwrap(); - incredible_config.set_registry_coordinator_addr( - get_incredible_squaring_registry_coordinator() - .await - .to_string(), - ); - incredible_config.set_operator_state_retriever( - get_incredible_squaring_operator_state_retriever() - .await - .to_string(), - ); - let operator_builder = OperatorBuilder::build(incredible_config, None) - .await - .unwrap(); - let signed_task_response = operator_builder - .sign_task_response(task_response.clone()) - .unwrap(); - - let bls_key_pair = operator_builder.bls_key_pair(); - let encoded_response = TaskResponse::abi_encode(&task_response); - let hash_msg = keccak256(encoded_response); - assert!(verify_message( - bls_key_pair.public_key_g2().g2(), - &hash_msg, - signed_task_response.signature().g1_point().g1() - )); - } -} diff --git a/crates/operator_2/src/lib.rs b/crates/operator_2/src/lib.rs deleted file mode 100644 index 9837dfcb..00000000 --- a/crates/operator_2/src/lib.rs +++ /dev/null @@ -1,3 +0,0 @@ -//! Operator with alloy rpc client to send signed task response to aggregator -/// Operator builder2 -pub mod builder; diff --git a/crates/task_generator/Cargo.toml b/crates/task_generator/Cargo.toml index 090de088..89bb047f 100644 --- a/crates/task_generator/Cargo.toml +++ b/crates/task_generator/Cargo.toml @@ -6,7 +6,7 @@ rust-version.workspace = true repository.workspace = true license.workspace = true description = "eigen layer operator" - + [lints] rust.missing_docs = "allow" rust.missing_debug_implementations = "warn" @@ -17,7 +17,6 @@ rustdoc.all = "warn" [dependencies] alloy.workspace = true -alloy-provider.workspace = true incredible-config.workspace = true thiserror.workspace = true incredible-bindings.workspace = true @@ -29,5 +28,5 @@ tracing.workspace = true reqwest.workspace = true # eigen-rs +eigen-common.workspace = true eigen-utils.workspace = true - diff --git a/crates/task_generator/src/lib.rs b/crates/task_generator/src/lib.rs index e0e227ad..c7be241a 100644 --- a/crates/task_generator/src/lib.rs +++ b/crates/task_generator/src/lib.rs @@ -6,7 +6,7 @@ use alloy::{ rpc::types::TransactionReceipt, signers::local::PrivateKeySigner, }; -use eigen_utils::get_signer; +use eigen_common::get_signer; use incredible_bindings::incrediblesquaringtaskmanager::IIncredibleSquaringTaskManager::{ Task, TaskResponse, }; diff --git a/crates/testing-utils/Cargo.toml b/crates/testing-utils/Cargo.toml index 66a06a9c..15148d16 100644 --- a/crates/testing-utils/Cargo.toml +++ b/crates/testing-utils/Cargo.toml @@ -6,12 +6,13 @@ rust-version.workspace = true repository.workspace = true license.workspace = true description = "eigen layer operator" - + [lints] workspace = true [dependencies] +eigen-common.workspace = true eigen-utils.workspace = true eigen-testing-utils.workspace = true alloy.workspace = true -tracing.workspace = true \ No newline at end of file +tracing.workspace = true diff --git a/crates/testing-utils/src/lib.rs b/crates/testing-utils/src/lib.rs index 2f079558..57a0e9b3 100644 --- a/crates/testing-utils/src/lib.rs +++ b/crates/testing-utils/src/lib.rs @@ -1,33 +1,8 @@ //! testing utils for incredible squaring rs use alloy::primitives::{address, Address}; -use alloy::sol; +use eigen_common::get_provider; use eigen_testing_utils::anvil_constants::ANVIL_HTTP_URL; -use eigen_utils::{ - // contractsregistry::ContractsRegistry::{self}, - get_provider, -}; -use ContractsRegistry::contractsReturn; - -sol! { - #[derive(Debug)] - #[allow(missing_docs)] - #[sol(rpc)] - contract ContractsRegistry { - mapping(string => address) public contracts; - mapping(uint256 => string) public contractNames; - uint256 public contractCount; - - function registerContract(string memory name, address _contract) public { - // we treat redeploys as a bug since this is only meant to be used for testing. - // If new contracts need to be deployed just start from a fresh anvil state. - require(contracts[name] == address(0), "contract already registered"); - contracts[name] = _contract; - contractNames[contractCount] = name; - contractCount++; - } - - } -} +use eigen_utils::rewardsv2::sdk::contractsregistry::ContractsRegistry::{self, contractsReturn}; /// Local anvil ContractsRegistry which contains a mapping of all locally deployed EL contracts. pub const CONTRACTS_REGISTRY: Address = address!("5FbDB2315678afecb367f032d93F642f64180aa3"); diff --git a/integration-tests/Cargo.toml b/integration-tests/Cargo.toml index 41b398dc..fc1c6878 100644 --- a/integration-tests/Cargo.toml +++ b/integration-tests/Cargo.toml @@ -9,26 +9,33 @@ license = "Business Source License 1.1" description = "integration tests for incredible avs" [dependencies] -alloy = { version = "0.7", features = ["full","signer-keystore","node-bindings"] } -eigen-utils = {git = "https://github.com/layr-labs/eigensdk-rs" , rev = "046d497"} -eigen-logging = {git = "https://github.com/layr-labs/eigensdk-rs" , rev = "046d497"} -incredible-config = {path = "../crates/config/"} -incredible-challenger = {path = "../crates/challenger/"} -incredible-bindings = {path = "../crates/bindings/"} -incredible-testing-utils = {path = "../crates/testing-utils/"} -incredible-task-generator = {path = "../crates/task_generator/"} -incredible-operator = {path = "../crates/operator/" , features = ["integration_tests"]} -incredible-operator-2 = {path = "../crates/operator_2/" , features = ["integration_tests"]} -incredible-aggregator = {path = "../crates/aggregator/"} +alloy = { version = "0.7", features = [ + "full", + "signer-keystore", + "node-bindings", +] } +eigen-utils = { git = "https://github.com/layr-labs/eigensdk-rs", rev = "046d497" } +eigen-logging = { git = "https://github.com/layr-labs/eigensdk-rs", rev = "046d497" } +incredible-config = { path = "../crates/config/" } +incredible-challenger = { path = "../crates/challenger/" } +incredible-bindings = { path = "../crates/bindings/" } +incredible-testing-utils = { path = "../crates/testing-utils/" } +incredible-task-generator = { path = "../crates/task_generator/" } +incredible-operator = { path = "../crates/operator/", features = [ + "integration_tests", +] } +incredible-aggregator = { path = "../crates/aggregator/" } toml = "0.8" [dev-dependencies] tokio = { version = "1.21", default-features = false } eyre = "0.6.12" -incredible-squaring-avs = {path = "../bin/incredible-squaring-avs/"} -eigen-testing-utils = {git = "https://github.com/layr-labs/eigensdk-rs" , rev = "046d497"} +incredible-squaring-avs = { path = "../bin/incredible-squaring-avs/" } +eigen-testing-utils = { git = "https://github.com/layr-labs/eigensdk-rs", rev = "046d497" } serial_test = "3.1.1" -rust-bls-bn254 = {git = "https://github.com/Layr-Labs/rust-bls-bn254.git", rev = "be3ef87", features = ["std"] } -eigen-crypto-bls = {git = "https://github.com/layr-labs/eigensdk-rs" , rev = "046d497"} +rust-bls-bn254 = { git = "https://github.com/Layr-Labs/rust-bls-bn254.git", rev = "be3ef87", features = [ + "std", +] } +eigen-crypto-bls = { git = "https://github.com/layr-labs/eigensdk-rs", rev = "046d497" } -[workspace] \ No newline at end of file +[workspace]