From af465bb834dbe2c38de6be0d59d9a1584792b58c Mon Sep 17 00:00:00 2001 From: eloylp Date: Tue, 6 Feb 2024 20:44:15 +0100 Subject: [PATCH 001/109] Add initial POC scaffolding of Solana workerset verifier --- Cargo.lock | 3892 ++++++++++++++--- Cargo.toml | 14 + ampd/Cargo.toml | 25 +- ampd/src/handlers/config.rs | 36 + ampd/src/handlers/mod.rs | 1 + ampd/src/handlers/solana_verify_worker_set.rs | 177 + ampd/src/lib.rs | 16 + ampd/src/solana/json_rpc.rs | 77 + ampd/src/solana/mod.rs | 4 + ampd/src/solana/pub_key_wrapper.rs | 38 + ampd/src/solana/verifier.rs | 100 + 11 files changed, 3668 insertions(+), 712 deletions(-) create mode 100644 ampd/src/handlers/solana_verify_worker_set.rs create mode 100644 ampd/src/solana/json_rpc.rs create mode 100644 ampd/src/solana/mod.rs create mode 100644 ampd/src/solana/pub_key_wrapper.rs create mode 100644 ampd/src/solana/verifier.rs diff --git a/Cargo.lock b/Cargo.lock index 635f5ef56..4595bd797 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -38,6 +38,15 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +[[package]] +name = "aead" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b613b8e1e3cf911a086f53f03bf286f52fd7a7258e4fa606f0ef220d39d8877" +dependencies = [ + "generic-array", +] + [[package]] name = "aead" version = "0.5.2" @@ -48,6 +57,18 @@ dependencies = [ "generic-array", ] +[[package]] +name = "aes" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e8b47f52ea9bae42228d07ec09eb676433d7c4ed1ebdf0f1d1c29ed446f1ab8" +dependencies = [ + "cfg-if", + "cipher 0.3.0", + "cpufeatures", + "opaque-debug", +] + [[package]] name = "aes" version = "0.8.3" @@ -55,7 +76,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac1f845298e95f983ff1944b728ae08b8cebab80d684f0a832ed0fc74dfa27e2" dependencies = [ "cfg-if", - "cipher", + "cipher 0.4.4", "cpufeatures", ] @@ -65,21 +86,35 @@ version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "209b47e8954a928e1d72e86eca7000ebb6655fe1436d33eefc2201cad027e237" dependencies = [ - "aead", - "aes", - "cipher", - "ctr", + "aead 0.5.2", + "aes 0.8.3", + "cipher 0.4.4", + "ctr 0.9.2", "ghash", "subtle", ] +[[package]] +name = "aes-gcm-siv" +version = "0.10.3" +source = "git+https://github.com/RustCrypto/AEADs?rev=6105d7a5591aefa646a95d12b5e8d3f55a9214ef#6105d7a5591aefa646a95d12b5e8d3f55a9214ef" +dependencies = [ + "aead 0.4.3", + "aes 0.7.5", + "cipher 0.3.0", + "ctr 0.8.0", + "polyval 0.5.3", + "subtle", + "zeroize", +] + [[package]] name = "aggregate-verifier" version = "0.1.0" dependencies = [ - "axelar-wasm-std", - "axelar-wasm-std-derive", - "connection-router", + "axelar-wasm-std 0.1.0", + "axelar-wasm-std-derive 0.1.0", + "connection-router 0.1.0", "cosmwasm-schema", "cosmwasm-std", "cosmwasm-storage", @@ -87,12 +122,34 @@ dependencies = [ "cw-storage-plus 1.1.0", "cw-utils 1.0.1", "error-stack", - "report", + "report 0.1.0", + "schemars", + "serde", + "serde_json", + "thiserror", + "voting-verifier 0.1.0", +] + +[[package]] +name = "aggregate-verifier" +version = "0.1.0" +source = "git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f#c0904e1c72c99a174a93b5f6c18b30f52d20b71f" +dependencies = [ + "axelar-wasm-std 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "axelar-wasm-std-derive 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "connection-router 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "cosmwasm-schema", + "cosmwasm-std", + "cosmwasm-storage", + "cw-storage-plus 1.1.0", + "cw-utils 1.0.1", + "error-stack", + "report 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", "schemars", "serde", "serde_json", "thiserror", - "voting-verifier", + "voting-verifier 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", ] [[package]] @@ -101,20 +158,22 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" dependencies = [ - "getrandom", + "getrandom 0.2.10", "once_cell", "version_check", ] [[package]] name = "ahash" -version = "0.8.3" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f" +checksum = "77c3a9648d43b9cd48db467b3f87fdd6e146bcc88ab0180006cef2179fe11d01" dependencies = [ "cfg-if", + "getrandom 0.2.10", "once_cell", "version_check", + "zerocopy", ] [[package]] @@ -152,12 +211,13 @@ name = "ampd" version = "0.1.0" dependencies = [ "async-trait", - "axelar-wasm-std", - "base64 0.21.4", + "axelar-wasm-std 0.1.0", + "base64 0.21.7", "bcs", - "clap", + "borsh 1.3.1", + "clap 4.4.4", "config", - "connection-router", + "connection-router 0.1.0", "cosmos-sdk-proto 0.16.0", "cosmrs", "cosmwasm-std", @@ -172,6 +232,7 @@ dependencies = [ "events", "events-derive", "futures", + "gateway 0.1.0 (git+ssh://git@github.com/eigerco/solana-axelar.git?branch=poc)", "generic-array", "hex", "humantime-serde", @@ -179,15 +240,19 @@ dependencies = [ "k256", "mockall", "move-core-types", - "multisig", + "multisig 0.1.0", "prost 0.11.9", - "rand", + "rand 0.8.5", "random-string", - "report", + "report 0.1.0", "serde", "serde_json", "serde_with 3.3.0", - "service-registry", + "service-registry 0.1.0", + "solana-client", + "solana-program", + "solana-sdk", + "solana-transaction-status", "sui-json-rpc-types", "sui-types", "tendermint 0.33.0", @@ -205,7 +270,7 @@ dependencies = [ "url", "valuable", "valuable-serde", - "voting-verifier", + "voting-verifier 0.1.0", ] [[package]] @@ -241,14 +306,14 @@ dependencies = [ "pkcs8 0.9.0", "quinn", "quinn-proto", - "rand", - "rcgen", - "ring", - "rustls 0.21.7", - "rustls-webpki 0.101.5", + "rand 0.8.5", + "rcgen 0.9.3", + "ring 0.16.20", + "rustls 0.21.10", + "rustls-webpki", "serde", "serde_json", - "socket2 0.5.4", + "socket2 0.5.5", "tap", "thiserror", "tokio", @@ -258,6 +323,15 @@ dependencies = [ "x509-parser", ] +[[package]] +name = "ansi_term" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" +dependencies = [ + "winapi", +] + [[package]] name = "anstream" version = "0.5.0" @@ -350,7 +424,7 @@ dependencies = [ "blake2", "derivative", "digest 0.10.7", - "sha2 0.10.7", + "sha2 0.10.8", ] [[package]] @@ -396,7 +470,7 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" dependencies = [ - "quote 1.0.33", + "quote 1.0.35", "syn 1.0.109", ] @@ -408,8 +482,8 @@ checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" dependencies = [ "num-bigint 0.4.4", "num-traits", - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.78", + "quote 1.0.35", "syn 1.0.109", ] @@ -481,8 +555,8 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ae3281bc6d0fd7e549af32b52511e1302185bd688fd3359fa36423346ff682ea" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.78", + "quote 1.0.35", "syn 1.0.109", ] @@ -505,7 +579,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" dependencies = [ "num-traits", - "rand", + "rand 0.8.5", ] [[package]] @@ -520,6 +594,12 @@ version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" +[[package]] +name = "ascii" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eab1c04a571841102f5345a8fc0f6bb3d31c315dec879b5c6e42e40ce7ffa34e" + [[package]] name = "ascii-canvas" version = "3.0.0" @@ -551,8 +631,8 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "726535892e8eae7e70657b4c8ea93d26b8553afb1ce617caee529ef96d7dee6c" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.78", + "quote 1.0.35", "syn 1.0.109", "synstructure", ] @@ -563,11 +643,28 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2777730b2039ac0f95f093556e61b6d26cebed5393ca6f152717777cec3a42ed" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.78", + "quote 1.0.35", "syn 1.0.109", ] +[[package]] +name = "assert_matches" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b34d609dfbaf33d6889b2b7106d3ca345eacad44200913df5ba02bfd31d2ba9" + +[[package]] +name = "async-channel" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" +dependencies = [ + "concurrent-queue", + "event-listener", + "futures-core", +] + [[package]] name = "async-compression" version = "0.3.15" @@ -582,6 +679,29 @@ dependencies = [ "tokio", ] +[[package]] +name = "async-compression" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a116f46a969224200a0a97f29cfd4c50e7534e4b4826bd23ea2c3c533039c82c" +dependencies = [ + "brotli", + "flate2", + "futures-core", + "memchr", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "async-mutex" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "479db852db25d9dbf6204e6cb6253698f175c15726470f78af0d918e99d6156e" +dependencies = [ + "event-listener", +] + [[package]] name = "async-stream" version = "0.3.5" @@ -599,9 +719,9 @@ version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2 1.0.78", + "quote 1.0.35", + "syn 2.0.48", ] [[package]] @@ -611,13 +731,13 @@ source = "git+https://github.com/mystenmark/async-task?rev=4e45b26e11126b191701b [[package]] name = "async-trait" -version = "0.1.73" +version = "0.1.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc00ceb34980c03614e35a3a4e218276a0a824e911d07651cd0d858a51e8c0f0" +checksum = "c980ee35e870bd1a4d2c8294d4c04d0499e67bca1e4b5cefcc693c2fa00caea9" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2 1.0.78", + "quote 1.0.35", + "syn 2.0.48", ] [[package]] @@ -631,6 +751,17 @@ dependencies = [ "rustc_version", ] +[[package]] +name = "atty" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" +dependencies = [ + "hermit-abi 0.1.19", + "libc", + "winapi", +] + [[package]] name = "auto_impl" version = "1.1.0" @@ -638,8 +769,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fee3da8ef1276b0bee5dd1c7258010d8fffd31801447323115a25560e1327b89" dependencies = [ "proc-macro-error", - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.78", + "quote 1.0.35", "syn 1.0.109", ] @@ -668,8 +799,30 @@ dependencies = [ "flagset", "hex", "num-traits", - "rand", - "report", + "rand 0.8.5", + "report 0.1.0", + "schemars", + "serde", + "serde_json", + "sha3 0.10.8", + "strum 0.25.0", + "thiserror", + "valuable", +] + +[[package]] +name = "axelar-wasm-std" +version = "0.1.0" +source = "git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f#c0904e1c72c99a174a93b5f6c18b30f52d20b71f" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "cosmwasm-storage", + "cw-storage-plus 1.1.0", + "error-stack", + "flagset", + "num-traits", + "report 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", "schemars", "serde", "serde_json", @@ -683,11 +836,24 @@ dependencies = [ name = "axelar-wasm-std-derive" version = "0.1.0" dependencies = [ - "axelar-wasm-std", + "axelar-wasm-std 0.1.0", + "error-stack", + "quote 1.0.35", + "report 0.1.0", + "syn 2.0.48", + "thiserror", +] + +[[package]] +name = "axelar-wasm-std-derive" +version = "0.1.0" +source = "git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f#c0904e1c72c99a174a93b5f6c18b30f52d20b71f" +dependencies = [ + "axelar-wasm-std 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", "error-stack", - "quote 1.0.33", - "report", - "syn 2.0.37", + "quote 1.0.35", + "report 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "syn 2.0.48", "thiserror", ] @@ -699,7 +865,7 @@ checksum = "3b829e4e32b91e643de6eafe82b1d90675f5874230191a4ffbc1b336dec4d6bf" dependencies = [ "async-trait", "axum-core", - "base64 0.21.4", + "base64 0.21.7", "bitflags 1.3.2", "bytes", "futures-util", @@ -771,6 +937,12 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" +[[package]] +name = "base64" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3441f0f7b02788e948e47f457ca01f1d7e6d92c693bc132c22b087d3141c03ff" + [[package]] name = "base64" version = "0.13.1" @@ -779,9 +951,9 @@ checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" [[package]] name = "base64" -version = "0.21.4" +version = "0.21.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ba43ea6f343b788c8764558649e08df62f86c6ef251fdaeb1ffd010a9ae50a2" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" [[package]] name = "base64ct" @@ -793,20 +965,20 @@ checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" name = "batching" version = "0.1.0" dependencies = [ - "axelar-wasm-std", - "axelar-wasm-std-derive", + "axelar-wasm-std 0.1.0", + "axelar-wasm-std-derive 0.1.0", "cosmwasm-schema", "cosmwasm-std", "error-stack", - "report", + "report 0.1.0", "thiserror", ] [[package]] name = "bcs" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bd3ffe8b19a604421a5d461d4a70346223e535903fbc3067138bddbebddcf77" +checksum = "85b6598a2f5d564fb7855dc6b06fd1c38cff5a72bd8b863a4d021938497b440a" dependencies = [ "serde", "thiserror", @@ -842,6 +1014,12 @@ dependencies = [ "thiserror", ] +[[package]] +name = "bimap" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "230c5f1ca6a325a32553f8640d31ac9b49f2411e901e427570154868b46da4f7" + [[package]] name = "bincode" version = "1.3.3" @@ -864,12 +1042,12 @@ dependencies = [ "lazycell", "peeking_take_while", "prettyplease 0.2.15", - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.78", + "quote 1.0.35", "regex", "rustc-hash", "shlex", - "syn 2.0.37", + "syn 2.0.48", ] [[package]] @@ -879,13 +1057,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7e141fb0f8be1c7b45887af94c88b182472b57c96b56773250ae00cd6a14a164" dependencies = [ "bs58 0.5.0", - "hmac", + "hmac 0.12.1", "k256", "once_cell", "pbkdf2 0.12.2", "rand_core 0.6.4", "ripemd", - "sha2 0.10.7", + "sha2 0.10.8", "subtle", "zeroize", ] @@ -928,9 +1106,12 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.4.0" +version = "2.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635" +checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" +dependencies = [ + "serde", +] [[package]] name = "bitmaps" @@ -998,9 +1179,9 @@ dependencies = [ [[package]] name = "blake3" -version = "1.4.1" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "199c42ab6972d92c9f8995f086273d25c42fc0f7b2a1fcefba465c1352d25ba5" +checksum = "0231f06152bf547e9c2b5194f247cd97aacf6dcd8b15d8e5ec0663f64580da87" dependencies = [ "arrayref", "arrayvec", @@ -1075,9 +1256,127 @@ dependencies = [ [[package]] name = "bnum" -version = "0.8.0" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56953345e39537a3e18bdaeba4cb0c58a78c1f61f361dc0fa7c5c7340ae87c5f" +dependencies = [ + "serde", + "serde-big-array", +] + +[[package]] +name = "borsh" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15bf3650200d8bffa99015595e10f1fbd17de07abbc25bb067da79e769939bfa" +dependencies = [ + "borsh-derive 0.9.3", + "hashbrown 0.11.2", +] + +[[package]] +name = "borsh" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4114279215a005bc675e386011e594e1d9b800918cea18fcadadcce864a2046b" +dependencies = [ + "borsh-derive 0.10.3", + "hashbrown 0.13.2", +] + +[[package]] +name = "borsh" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f58b559fd6448c6e2fd0adb5720cd98a2506594cafa4737ff98c396f3e82f667" +dependencies = [ + "borsh-derive 1.3.1", + "cfg_aliases", +] + +[[package]] +name = "borsh-derive" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6441c552f230375d18e3cc377677914d2ca2b0d36e52129fe15450a2dce46775" +dependencies = [ + "borsh-derive-internal 0.9.3", + "borsh-schema-derive-internal 0.9.3", + "proc-macro-crate 0.1.5", + "proc-macro2 1.0.78", + "syn 1.0.109", +] + +[[package]] +name = "borsh-derive" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0754613691538d51f329cce9af41d7b7ca150bc973056f1156611489475f54f7" +dependencies = [ + "borsh-derive-internal 0.10.3", + "borsh-schema-derive-internal 0.10.3", + "proc-macro-crate 0.1.5", + "proc-macro2 1.0.78", + "syn 1.0.109", +] + +[[package]] +name = "borsh-derive" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7aadb5b6ccbd078890f6d7003694e33816e6b784358f18e15e7e6d9f065a57cd" +dependencies = [ + "once_cell", + "proc-macro-crate 3.1.0", + "proc-macro2 1.0.78", + "quote 1.0.35", + "syn 2.0.48", + "syn_derive", +] + +[[package]] +name = "borsh-derive-internal" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5449c28a7b352f2d1e592a8a28bf139bc71afb0764a14f3c02500935d8c44065" +dependencies = [ + "proc-macro2 1.0.78", + "quote 1.0.35", + "syn 1.0.109", +] + +[[package]] +name = "borsh-derive-internal" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "afb438156919598d2c7bad7e1c0adf3d26ed3840dbc010db1a882a65583ca2fb" +dependencies = [ + "proc-macro2 1.0.78", + "quote 1.0.35", + "syn 1.0.109", +] + +[[package]] +name = "borsh-schema-derive-internal" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdbd5696d8bfa21d53d9fe39a714a18538bad11492a42d066dbbc395fb1951c0" +dependencies = [ + "proc-macro2 1.0.78", + "quote 1.0.35", + "syn 1.0.109", +] + +[[package]] +name = "borsh-schema-derive-internal" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "128a44527fc0d6abf05f9eda748b9027536e12dff93f5acc8449f51583309350" +checksum = "634205cc43f74a1b9046ef87c4540ebda95696ec0f315024860cad7c5b0f5ccd" +dependencies = [ + "proc-macro2 1.0.78", + "quote 1.0.35", + "syn 1.0.109", +] [[package]] name = "brotli" @@ -1112,7 +1411,7 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f5353f36341f7451062466f0b755b96ac3a9547e4d7f6b70d603fc721a7d7896" dependencies = [ - "sha2 0.10.7", + "sha2 0.10.8", "tinyvec", ] @@ -1127,7 +1426,7 @@ dependencies = [ "curve25519-dalek-ng", "digest 0.9.0", "merlin", - "rand", + "rand 0.8.5", "rand_core 0.6.4", "serde", "serde_derive", @@ -1142,6 +1441,16 @@ version = "3.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" +[[package]] +name = "bv" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8834bb1d8ee5dc048ee3124f2c7c1afcc6bc9aed03f11e9dfd8c69470a5db340" +dependencies = [ + "feature-probe", + "serde", +] + [[package]] name = "byte-slice-cast" version = "1.2.2" @@ -1159,12 +1468,26 @@ name = "bytemuck" version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "374d28ec25809ee0e23827c2ab573d729e293f281dfe393500e7ad618baa61c6" +dependencies = [ + "bytemuck_derive", +] + +[[package]] +name = "bytemuck_derive" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "965ab7eb5f8f97d2a083c799f3a1b994fc397b2fe2da5d1da1626ce15a39f2b1" +dependencies = [ + "proc-macro2 1.0.78", + "quote 1.0.35", + "syn 2.0.48", +] [[package]] name = "byteorder" -version = "1.4.3" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" @@ -1205,6 +1528,16 @@ dependencies = [ "serde", ] +[[package]] +name = "caps" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "190baaad529bcfbde9e1a19022c42781bdb6ff9de25721abdb8fd98c0807730b" +dependencies = [ + "libc", + "thiserror", +] + [[package]] name = "cargo-platform" version = "0.1.3" @@ -1234,7 +1567,7 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "26b52a9543ae338f279b96b0b9fed9c8093744685043739079ce85cd58f289a6" dependencies = [ - "cipher", + "cipher 0.4.4", ] [[package]] @@ -1262,6 +1595,12 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "cfg_aliases" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" + [[package]] name = "chrono" version = "0.4.31" @@ -1270,11 +1609,22 @@ checksum = "7f2c685bad3eb3d45a01354cedb7d5faa66194d1d58ba6e267a8de788f79db38" dependencies = [ "android-tzdata", "iana-time-zone", + "js-sys", "num-traits", "serde", + "wasm-bindgen", "windows-targets 0.48.5", ] +[[package]] +name = "cipher" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7" +dependencies = [ + "generic-array", +] + [[package]] name = "cipher" version = "0.4.4" @@ -1298,26 +1648,57 @@ dependencies = [ [[package]] name = "clap" -version = "4.4.4" +version = "2.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1d7b8d5ec32af0fadc644bf1fd509a688c2103b185644bb1e29d164e0703136" +checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c" dependencies = [ - "clap_builder", - "clap_derive", + "ansi_term", + "atty", + "bitflags 1.3.2", + "strsim 0.8.0", + "textwrap 0.11.0", + "unicode-width", + "vec_map", ] [[package]] -name = "clap_builder" -version = "4.4.4" +name = "clap" +version = "3.2.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5179bb514e4d7c2051749d8fcefa2ed6d06a9f4e6d69faf3805f5d80b8cf8d56" +checksum = "4ea181bf566f71cb9a5d17a59e1871af638180a18fb0035c92ae62b705207123" dependencies = [ - "anstream", - "anstyle", - "clap_lex", - "strsim", -] - + "atty", + "bitflags 1.3.2", + "clap_lex 0.2.4", + "indexmap 1.9.3", + "once_cell", + "strsim 0.10.0", + "termcolor", + "textwrap 0.16.0", +] + +[[package]] +name = "clap" +version = "4.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1d7b8d5ec32af0fadc644bf1fd509a688c2103b185644bb1e29d164e0703136" +dependencies = [ + "clap_builder", + "clap_derive", +] + +[[package]] +name = "clap_builder" +version = "4.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5179bb514e4d7c2051749d8fcefa2ed6d06a9f4e6d69faf3805f5d80b8cf8d56" +dependencies = [ + "anstream", + "anstyle", + "clap_lex 0.5.1", + "strsim 0.10.0", +] + [[package]] name = "clap_derive" version = "4.4.2" @@ -1325,9 +1706,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0862016ff20d69b84ef8247369fabf5c008a7417002411897d40ee1f4532b873" dependencies = [ "heck 0.4.1", - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2 1.0.78", + "quote 1.0.35", + "syn 2.0.48", +] + +[[package]] +name = "clap_lex" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5" +dependencies = [ + "os_str_bytes", ] [[package]] @@ -1375,10 +1765,10 @@ dependencies = [ "bs58 0.5.0", "coins-core", "digest 0.10.7", - "hmac", + "hmac 0.12.1", "k256", "serde", - "sha2 0.10.7", + "sha2 0.10.8", "thiserror", ] @@ -1390,11 +1780,11 @@ checksum = "3db8fba409ce3dc04f7d804074039eb68b960b0829161f8e06c95fea3f122528" dependencies = [ "bitvec 1.0.1", "coins-bip32", - "hmac", + "hmac 0.12.1", "once_cell", "pbkdf2 0.12.2", - "rand", - "sha2 0.10.7", + "rand 0.8.5", + "sha2 0.10.8", "thiserror", ] @@ -1404,7 +1794,7 @@ version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5286a0843c21f8367f7be734f89df9b822e0321d8bcce8d6e735aadff7d74979" dependencies = [ - "base64 0.21.4", + "base64 0.21.7", "bech32", "bs58 0.5.0", "digest 0.10.7", @@ -1413,7 +1803,7 @@ dependencies = [ "ripemd", "serde", "serde_derive", - "sha2 0.10.7", + "sha2 0.10.8", "sha3 0.10.8", "thiserror", ] @@ -1441,6 +1831,28 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "combine" +version = "3.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da3da6baa321ec19e1cc41d31bf599f00c783d0517095cdaf0332e3fe8d20680" +dependencies = [ + "ascii", + "byteorder", + "either", + "memchr", + "unreachable", +] + +[[package]] +name = "concurrent-queue" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d16048cd947b08fa32c24458a22f5dc5e835264f689f4f5653210c69fd107363" +dependencies = [ + "crossbeam-utils", +] + [[package]] name = "config" version = "0.13.3" @@ -1464,8 +1876,8 @@ dependencies = [ name = "connection-router" version = "0.1.0" dependencies = [ - "axelar-wasm-std", - "axelar-wasm-std-derive", + "axelar-wasm-std 0.1.0", + "axelar-wasm-std-derive 0.1.0", "cosmwasm-schema", "cosmwasm-std", "cosmwasm-storage", @@ -1476,8 +1888,32 @@ dependencies = [ "hex", "itertools 0.11.0", "mockall", - "rand", - "report", + "rand 0.8.5", + "report 0.1.0", + "schemars", + "serde", + "serde_json", + "sha3 0.10.8", + "thiserror", + "valuable", +] + +[[package]] +name = "connection-router" +version = "0.1.0" +source = "git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f#c0904e1c72c99a174a93b5f6c18b30f52d20b71f" +dependencies = [ + "axelar-wasm-std 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "axelar-wasm-std-derive 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "cosmwasm-schema", + "cosmwasm-std", + "cosmwasm-storage", + "cw-storage-plus 1.1.0", + "error-stack", + "flagset", + "itertools 0.11.0", + "mockall", + "report 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", "schemars", "serde", "serde_json", @@ -1490,7 +1926,7 @@ dependencies = [ name = "connection-router-api" version = "0.1.0" dependencies = [ - "axelar-wasm-std", + "axelar-wasm-std 0.1.0", "cosmwasm-schema", "cosmwasm-std", "cw-storage-plus 1.1.0", @@ -1505,14 +1941,35 @@ dependencies = [ [[package]] name = "console" -version = "0.15.7" +version = "0.15.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c926e00cc70edefdc64d3a5ff31cc65bb97a3460097762bd23afb4d8145fccf8" +checksum = "0e1f83fc076bd6dd27517eacdf25fef6c4dfe5f1d7448bafaaf3a26f13b5e4eb" dependencies = [ "encode_unicode", "lazy_static", "libc", - "windows-sys 0.45.0", + "unicode-width", + "windows-sys 0.52.0", +] + +[[package]] +name = "console_error_panic_hook" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc" +dependencies = [ + "cfg-if", + "wasm-bindgen", +] + +[[package]] +name = "console_log" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e89f72f65e8501878b8a004d5a1afb780987e2ce2b4532c562e367a72c57499f" +dependencies = [ + "log", + "web-sys", ] [[package]] @@ -1527,6 +1984,12 @@ dependencies = [ "serde", ] +[[package]] +name = "const-oid" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4c78c047431fee22c1a7bb92e00ad095a02a983affe4d8a72e2a2c62c1b94f3" + [[package]] name = "const-oid" version = "0.9.5" @@ -1618,7 +2081,7 @@ dependencies = [ "cosmos-sdk-proto 0.19.0", "ecdsa", "eyre", - "getrandom", + "getrandom 0.2.10", "k256", "rand_core 0.6.4", "serde", @@ -1630,11 +2093,12 @@ dependencies = [ [[package]] name = "cosmwasm-crypto" -version = "1.4.0" +version = "1.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ca101fbf2f76723711a30ea3771ef312ec3ec254ad021b237871ed802f9f175" +checksum = "9934c79e58d9676edfd592557dee765d2a6ef54c09d5aa2edb06156b00148966" dependencies = [ "digest 0.10.7", + "ecdsa", "ed25519-zebra", "k256", "rand_core 0.6.4", @@ -1643,9 +2107,9 @@ dependencies = [ [[package]] name = "cosmwasm-derive" -version = "1.4.0" +version = "1.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c73d2dd292f60e42849d2b07c03d809cf31e128a4299a805abd6d24553bcaaf5" +checksum = "bc5e72e330bd3bdab11c52b5ecbdeb6a8697a004c57964caeb5d876f0b088b3c" dependencies = [ "syn 1.0.109", ] @@ -1669,18 +2133,19 @@ version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96694ec781a7dd6dea1f968a2529ade009c21ad999c88b5f53d6cc495b3b96f7" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.78", + "quote 1.0.35", "syn 1.0.109", ] [[package]] name = "cosmwasm-std" -version = "1.4.0" +version = "1.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a44d3f9c25b2f864737c6605a98f2e4675d53fd8bbc7cf4d7c02475661a793d" +checksum = "ef8666e572a3a2519010dde88c04d16e9339ae751b56b2bb35081fe3f7d6be74" dependencies = [ - "base64 0.21.4", + "base64 0.21.7", + "bech32", "bnum", "cosmwasm-crypto", "cosmwasm-derive", @@ -1690,7 +2155,8 @@ dependencies = [ "schemars", "serde", "serde-json-wasm", - "sha2 0.10.7", + "sha2 0.10.8", + "static_assertions", "thiserror", ] @@ -1724,11 +2190,10 @@ dependencies = [ [[package]] name = "crossbeam-channel" -version = "0.5.8" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200" +checksum = "176dc175b78f56c0f321911d9c8eb2b77a78a4860b9c19db83835fea1a46649b" dependencies = [ - "cfg-if", "crossbeam-utils", ] @@ -1752,18 +2217,15 @@ dependencies = [ "autocfg", "cfg-if", "crossbeam-utils", - "memoffset", + "memoffset 0.9.0", "scopeguard", ] [[package]] name = "crossbeam-utils" -version = "0.8.16" +version = "0.8.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294" -dependencies = [ - "cfg-if", -] +checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" [[package]] name = "crunchy" @@ -1794,6 +2256,16 @@ dependencies = [ "typenum", ] +[[package]] +name = "crypto-mac" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab" +dependencies = [ + "generic-array", + "subtle", +] + [[package]] name = "ct-logs" version = "0.8.0" @@ -1803,24 +2275,33 @@ dependencies = [ "sct 0.6.1", ] +[[package]] +name = "ctr" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "049bb91fb4aaf0e3c7efa6cd5ef877dbbbd15b39dad06d9948de4ec8a75761ea" +dependencies = [ + "cipher 0.3.0", +] + [[package]] name = "ctr" version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" dependencies = [ - "cipher", + "cipher 0.4.4", ] [[package]] name = "curve25519-dalek" -version = "3.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b9fdf9972b2bd6af2d913799d9ebc165ea4d2e65878e329d9c6b372c4491b61" +version = "3.2.1" +source = "git+https://github.com/dalek-cryptography/curve25519-dalek?rev=8274d5cbb6fc3f38cdc742b4798173895cd2a290#8274d5cbb6fc3f38cdc742b4798173895cd2a290" dependencies = [ "byteorder", "digest 0.9.0", "rand_core 0.5.1", + "serde", "subtle", "zeroize", ] @@ -1848,9 +2329,9 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2 1.0.78", + "quote 1.0.35", + "syn 2.0.48", ] [[package]] @@ -1993,9 +2474,9 @@ checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0" dependencies = [ "fnv", "ident_case", - "proc-macro2 1.0.67", - "quote 1.0.33", - "strsim", + "proc-macro2 1.0.78", + "quote 1.0.35", + "strsim 0.10.0", "syn 1.0.109", ] @@ -2007,10 +2488,10 @@ checksum = "177e3443818124b357d8e76f53be906d60937f0d3a90773a664fa63fa253e621" dependencies = [ "fnv", "ident_case", - "proc-macro2 1.0.67", - "quote 1.0.33", - "strsim", - "syn 2.0.37", + "proc-macro2 1.0.78", + "quote 1.0.35", + "strsim 0.10.0", + "syn 2.0.48", ] [[package]] @@ -2020,7 +2501,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e" dependencies = [ "darling_core 0.14.4", - "quote 1.0.33", + "quote 1.0.35", "syn 1.0.109", ] @@ -2031,8 +2512,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "836a9bbc7ad63342d6d6e7b815ccab164bc77a2d95d84bc3117a8c0d5c98e2d5" dependencies = [ "darling_core 0.20.3", - "quote 1.0.33", - "syn 2.0.37", + "quote 1.0.35", + "syn 2.0.48", ] [[package]] @@ -2042,7 +2523,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" dependencies = [ "cfg-if", - "hashbrown 0.14.0", + "hashbrown 0.14.3", "lock_api", "once_cell", "parking_lot_core", @@ -2074,13 +2555,22 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "der" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6919815d73839e7ad218de758883aae3a257ba6759ce7a9992501efbb53d705c" +dependencies = [ + "const-oid 0.7.1", +] + [[package]] name = "der" version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f1a467a65c5e759bce6e65eaf91cc29f466cdc57cb65777bd646872a8a1fd4de" dependencies = [ - "const-oid", + "const-oid 0.9.5", "pem-rfc7468 0.6.0", "zeroize", ] @@ -2091,7 +2581,7 @@ version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fffa369a668c8af7dbf8b5e56c9f744fbd399949ed171606040001947de40b1c" dependencies = [ - "const-oid", + "const-oid 0.9.5", "der_derive", "pem-rfc7468 0.7.0", "zeroize", @@ -2117,9 +2607,9 @@ version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5fe87ce4529967e0ba1dcf8450bab64d97dfd5010a6256187ffe2e43e6f0e049" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2 1.0.78", + "quote 1.0.35", + "syn 2.0.48", ] [[package]] @@ -2137,19 +2627,25 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4255bb7dd538590188bd0aea52e48bd699b19bd90b0d069ec2ced8461fe23273" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.78", + "quote 1.0.35", "syn 1.0.109", ] +[[package]] +name = "derivation-path" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e5c37193a1db1d8ed868c03ec7b152175f26160a5b740e5e484143877e0adf0" + [[package]] name = "derivative" version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.78", + "quote 1.0.35", "syn 1.0.109", ] @@ -2169,8 +2665,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c11bdc11a0c47bc7d37d582b5285da6849c96681023680b906673c5707af7b0f" dependencies = [ "darling 0.14.4", - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.78", + "quote 1.0.35", "syn 1.0.109", ] @@ -2191,12 +2687,24 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" dependencies = [ "convert_case 0.4.0", - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.78", + "quote 1.0.35", "rustc_version", "syn 1.0.109", ] +[[package]] +name = "dialoguer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59c6f2989294b9a498d3ad5491a79c6deb604617378e1cdc4bfc1c1361fe2f87" +dependencies = [ + "console", + "shell-words", + "tempfile", + "zeroize", +] + [[package]] name = "diff" version = "0.1.13" @@ -2231,7 +2739,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ "block-buffer 0.10.4", - "const-oid", + "const-oid 0.9.5", "crypto-common", "subtle", ] @@ -2284,9 +2792,32 @@ version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "487585f4d0c6655fe74905e2504d8ad6908e4db67f744eb140876906c2f3175d" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2 1.0.78", + "quote 1.0.35", + "syn 2.0.48", +] + +[[package]] +name = "dlopen2" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09b4f5f101177ff01b8ec4ecc81eead416a8aa42819a2869311b3420fa114ffa" +dependencies = [ + "dlopen2_derive", + "libc", + "once_cell", + "winapi", +] + +[[package]] +name = "dlopen2_derive" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6cbae11b3de8fce2a456e8ea3dada226b35fe791f0dc1d360c0941f0bb681f3" +dependencies = [ + "proc-macro2 1.0.78", + "quote 1.0.35", + "syn 2.0.48", ] [[package]] @@ -2319,6 +2850,12 @@ version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "23d2f3407d9a573d666de4b5bdf10569d73ca9478087346697dcbae6244bfbcd" +[[package]] +name = "eager" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "abe71d579d1812060163dff96056261deb5bf6729b100fa2e36a68b9649ba3d3" + [[package]] name = "ec-gpu" version = "0.2.0" @@ -2375,6 +2912,20 @@ dependencies = [ "zeroize", ] +[[package]] +name = "ed25519-dalek" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c762bae6dcaf24c4c84667b8579785430908723d5c889f469d76a41d59cc7a9d" +dependencies = [ + "curve25519-dalek 3.2.1", + "ed25519 1.5.3", + "rand 0.7.3", + "serde", + "sha2 0.9.9", + "zeroize", +] + [[package]] name = "ed25519-dalek" version = "2.1.0" @@ -2385,19 +2936,31 @@ dependencies = [ "ed25519 2.2.2", "rand_core 0.6.4", "serde", - "sha2 0.10.7", + "sha2 0.10.8", "signature 2.1.0", "subtle", "zeroize", ] +[[package]] +name = "ed25519-dalek-bip32" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d2be62a4061b872c8c0873ee4fc6f101ce7b889d039f019c5fa2af471a59908" +dependencies = [ + "derivation-path", + "ed25519-dalek 1.0.1", + "hmac 0.12.1", + "sha2 0.10.8", +] + [[package]] name = "ed25519-zebra" version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c24f403d068ad0b359e577a77f92392118be3f3c927538f2bb544a5ecd828c6" dependencies = [ - "curve25519-dalek 3.2.0", + "curve25519-dalek 3.2.1", "hashbrown 0.12.3", "hex", "rand_core 0.6.4", @@ -2462,12 +3025,12 @@ version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fe81b5c06ecfdbc71dd845216f225f53b62a10cb8a16c946836a3467f701d05b" dependencies = [ - "base64 0.21.4", + "base64 0.21.7", "bytes", "hex", "k256", "log", - "rand", + "rand 0.8.5", "rlp", "serde", "sha3 0.10.8", @@ -2488,11 +3051,31 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f16ef37b2a9b242295d61a154ee91ae884afff6b8b933b486b12481cc58310ca" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.78", + "quote 1.0.35", "syn 1.0.109", ] +[[package]] +name = "enum-iterator" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fd242f399be1da0a5354aa462d57b4ab2b4ee0683cc552f7c007d2d12d36e94" +dependencies = [ + "enum-iterator-derive", +] + +[[package]] +name = "enum-iterator-derive" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03cdc46ec28bd728e67540c528013c6a10eb69a02eb31078a1bda695438cbfb8" +dependencies = [ + "proc-macro2 1.0.78", + "quote 1.0.35", + "syn 2.0.48", +] + [[package]] name = "enum_dispatch" version = "0.3.12" @@ -2500,9 +3083,22 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f33313078bb8d4d05a2733a94ac4c2d8a0df9a2b84424ebf4f33bfc224a890e" dependencies = [ "once_cell", - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2 1.0.78", + "quote 1.0.35", + "syn 2.0.48", +] + +[[package]] +name = "env_logger" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a12e6657c4c97ebab115a42dcee77225f7f482cdd841cf7088c657a42e9e00e7" +dependencies = [ + "atty", + "humantime", + "log", + "regex", + "termcolor", ] [[package]] @@ -2559,17 +3155,17 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1fda3bf123be441da5260717e0661c25a2fd9cb2b2c1d20bf2e05580047158ab" dependencies = [ - "aes", - "ctr", + "aes 0.8.3", + "ctr 0.9.2", "digest 0.10.7", "hex", - "hmac", + "hmac 0.12.1", "pbkdf2 0.11.0", - "rand", + "rand 0.8.5", "scrypt", "serde", "serde_json", - "sha2 0.10.7", + "sha2 0.10.8", "sha3 0.10.8", "thiserror", "uuid 0.8.2", @@ -2683,13 +3279,13 @@ dependencies = [ "ethers-etherscan", "eyre", "prettyplease 0.2.15", - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.78", + "quote 1.0.35", "regex", "reqwest", "serde", "serde_json", - "syn 2.0.37", + "syn 2.0.48", "toml 0.7.8", "walkdir", ] @@ -2704,10 +3300,10 @@ dependencies = [ "const-hex", "ethers-contract-abigen", "ethers-core", - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.78", + "quote 1.0.35", "serde_json", - "syn 2.0.37", + "syn 2.0.48", ] [[package]] @@ -2725,15 +3321,15 @@ dependencies = [ "ethabi", "generic-array", "k256", - "num_enum", + "num_enum 0.7.2", "once_cell", "open-fastrlp", - "rand", + "rand 0.8.5", "rlp", "serde", "serde_json", "strum 0.25.0", - "syn 2.0.37", + "syn 2.0.48", "tempfile", "thiserror", "tiny-keccak", @@ -2790,7 +3386,7 @@ checksum = "6838fa110e57d572336178b7c79e94ff88ef976306852d8cb87d9e5b1fc7c0b5" dependencies = [ "async-trait", "auto_impl", - "base64 0.21.4", + "base64 0.21.7", "bytes", "const-hex", "enr", @@ -2832,8 +3428,8 @@ dependencies = [ "elliptic-curve", "eth-keystore", "ethers-core", - "rand", - "sha2 0.10.7", + "rand 0.8.5", + "sha2 0.10.8", "thiserror", "tracing", ] @@ -2876,12 +3472,18 @@ version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c8ff382b2fa527fb7fb06eeebfc5bbb3f17e3cc6b9d70b006c41daa8824adac" +[[package]] +name = "event-listener" +version = "2.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" + [[package]] name = "events" version = "0.1.0" dependencies = [ - "axelar-wasm-std", - "base64 0.21.4", + "axelar-wasm-std 0.1.0", + "base64 0.21.7", "error-stack", "serde_json", "tendermint 0.33.0", @@ -2894,10 +3496,10 @@ version = "0.1.0" dependencies = [ "error-stack", "events", - "quote 1.0.33", + "quote 1.0.35", "serde", "serde_json", - "syn 2.0.37", + "syn 2.0.48", ] [[package]] @@ -2915,7 +3517,7 @@ name = "fastcrypto" version = "0.1.7" source = "git+https://github.com/MystenLabs/fastcrypto?rev=69180dc7275f5f0efb69e11e9d03f6db338d1dd6#69180dc7275f5f0efb69e11e9d03f6db338d1dd6" dependencies = [ - "aes", + "aes 0.8.3", "aes-gcm", "ark-ec", "ark-ff", @@ -2930,7 +3532,7 @@ dependencies = [ "bs58 0.4.0", "bulletproofs", "cbc", - "ctr", + "ctr 0.9.2", "curve25519-dalek-ng", "derive_more", "digest 0.10.7", @@ -2946,7 +3548,7 @@ dependencies = [ "merlin", "once_cell", "p256", - "rand", + "rand 0.8.5", "readonly", "rfc6979", "rsa", @@ -2956,7 +3558,7 @@ dependencies = [ "serde_bytes", "serde_json", "serde_with 2.3.3", - "sha2 0.10.7", + "sha2 0.10.8", "sha3 0.10.8", "signature 2.1.0", "static_assertions", @@ -2972,8 +3574,8 @@ version = "0.1.3" source = "git+https://github.com/MystenLabs/fastcrypto?rev=69180dc7275f5f0efb69e11e9d03f6db338d1dd6#69180dc7275f5f0efb69e11e9d03f6db338d1dd6" dependencies = [ "convert_case 0.6.0", - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.78", + "quote 1.0.35", "syn 1.0.109", ] @@ -2989,7 +3591,7 @@ dependencies = [ "fastcrypto-derive", "hex", "itertools 0.10.5", - "rand", + "rand 0.8.5", "serde", "sha3 0.10.8", "tap", @@ -3024,7 +3626,7 @@ dependencies = [ "once_cell", "regex", "reqwest", - "rustls-webpki 0.101.5", + "rustls-webpki", "schemars", "serde", "serde_json", @@ -3055,6 +3657,12 @@ dependencies = [ "libc", ] +[[package]] +name = "feature-probe" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "835a3dc7d1ec9e75e2b5fb4ba75396837112d2060b03f7d43bc1897c7f7211da" + [[package]] name = "ff" version = "0.13.0" @@ -3079,8 +3687,8 @@ dependencies = [ "num-bigint 0.3.3", "num-integer", "num-traits", - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.78", + "quote 1.0.35", "syn 1.0.109", ] @@ -3097,7 +3705,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cfcf0ed7fe52a17a03854ec54a9f76d6d84508d1c0e66bc1793301c73fc8493c" dependencies = [ "byteorder", - "rand", + "rand 0.8.5", "rustc-hex", "static_assertions", ] @@ -3109,7 +3717,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "835c052cb0c08c1acf6ffd71c022172e18723949c8282f2b9f27efbc51e64534" dependencies = [ "byteorder", - "rand", + "rand 0.8.5", "rustc-hex", "static_assertions", ] @@ -3172,9 +3780,9 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "form_urlencoded" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" dependencies = [ "percent-encoding", ] @@ -3215,9 +3823,9 @@ checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" [[package]] name = "futures" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40" +checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" dependencies = [ "futures-channel", "futures-core", @@ -3230,9 +3838,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2" +checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" dependencies = [ "futures-core", "futures-sink", @@ -3240,15 +3848,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" +checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" [[package]] name = "futures-executor" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0" +checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" dependencies = [ "futures-core", "futures-task", @@ -3257,9 +3865,9 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964" +checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" [[package]] name = "futures-locks" @@ -3273,26 +3881,26 @@ dependencies = [ [[package]] name = "futures-macro" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" +checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2 1.0.78", + "quote 1.0.35", + "syn 2.0.48", ] [[package]] name = "futures-sink" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e" +checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" [[package]] name = "futures-task" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65" +checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" [[package]] name = "futures-timer" @@ -3306,9 +3914,9 @@ dependencies = [ [[package]] name = "futures-util" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533" +checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" dependencies = [ "futures-channel", "futures-core", @@ -3335,10 +3943,10 @@ dependencies = [ name = "gateway" version = "0.1.0" dependencies = [ - "aggregate-verifier", - "axelar-wasm-std", - "axelar-wasm-std-derive", - "connection-router", + "aggregate-verifier 0.1.0", + "axelar-wasm-std 0.1.0", + "axelar-wasm-std-derive 0.1.0", + "connection-router 0.1.0", "cosmwasm-schema", "cosmwasm-std", "cosmwasm-storage", @@ -3347,7 +3955,56 @@ dependencies = [ "error-stack", "itertools 0.11.0", "mockall", - "report", + "report 0.1.0", + "schemars", + "serde", + "serde_json", + "thiserror", +] + +[[package]] +name = "gateway" +version = "0.1.0" +source = "git+ssh://git@github.com/eigerco/solana-axelar.git?branch=poc#983e0ecd16dbc2509f931a91bf07bf8bbb057e99" +dependencies = [ + "base64 0.21.7", + "bcs", + "bimap", + "bnum", + "borsh 1.3.1", + "bytemuck", + "connection-router 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "cosmwasm-std", + "hex", + "itertools 0.12.1", + "libsecp256k1 0.7.1", + "multisig 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "multisig-prover 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "num-derive 0.4.1", + "num-traits", + "serde", + "sha3 0.10.8", + "solana-program", + "thiserror", +] + +[[package]] +name = "gateway" +version = "0.1.0" +source = "git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f#c0904e1c72c99a174a93b5f6c18b30f52d20b71f" +dependencies = [ + "aggregate-verifier 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "axelar-wasm-std 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "axelar-wasm-std-derive 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "connection-router 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "cosmwasm-schema", + "cosmwasm-std", + "cosmwasm-storage", + "cw-storage-plus 1.1.0", + "error-stack", + "itertools 0.11.0", + "mockall", + "report 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", "schemars", "serde", "serde_json", @@ -3375,16 +4032,39 @@ dependencies = [ ] [[package]] -name = "getrandom" -version = "0.2.10" +name = "gethostname" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427" +checksum = "c1ebd34e35c46e00bb73e81363248d627782724609fe1b6396f553f68fe3862e" dependencies = [ - "cfg-if", - "js-sys", "libc", - "wasi", - "wasm-bindgen", + "winapi", +] + +[[package]] +name = "getrandom" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "wasi 0.9.0+wasi-snapshot-preview1", + "wasm-bindgen", +] + +[[package]] +name = "getrandom" +version = "0.2.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", + "wasm-bindgen", ] [[package]] @@ -3394,7 +4074,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d930750de5717d2dd0b8c0d42c076c0e884c81a73e6cab859bbd2339c71e3e40" dependencies = [ "opaque-debug", - "polyval", + "polyval 0.6.1", ] [[package]] @@ -3421,6 +4101,17 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "goblin" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7666983ed0dd8d21a6f6576ee00053ca0926fb281a5522577a4dbd0f1b54143" +dependencies = [ + "log", + "plain", + "scroll", +] + [[package]] name = "group" version = "0.13.0" @@ -3428,7 +4119,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" dependencies = [ "ff", - "rand", + "rand 0.8.5", "rand_core 0.6.4", "rand_xorshift", "subtle", @@ -3453,6 +4144,24 @@ dependencies = [ "tracing", ] +[[package]] +name = "hash32" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0c35f58762feb77d74ebe43bdbc3210f09be9fe6742234d573bacc26ed92b67" +dependencies = [ + "byteorder", +] + +[[package]] +name = "hashbrown" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" +dependencies = [ + "ahash 0.7.6", +] + [[package]] name = "hashbrown" version = "0.12.3" @@ -3468,14 +4177,14 @@ version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" dependencies = [ - "ahash 0.8.3", + "ahash 0.8.7", ] [[package]] name = "hashbrown" -version = "0.14.0" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a" +checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" [[package]] name = "hashers" @@ -3506,7 +4215,7 @@ version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06683b93020a07e3dbcf5f8c0f6d40080d725bea7936fc01ad345c01b97dc270" dependencies = [ - "base64 0.21.4", + "base64 0.21.7", "bytes", "headers-core", "http", @@ -3539,6 +4248,15 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" +[[package]] +name = "hermit-abi" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" +dependencies = [ + "libc", +] + [[package]] name = "hermit-abi" version = "0.3.3" @@ -3554,13 +4272,29 @@ dependencies = [ "serde", ] +[[package]] +name = "histogram" +version = "0.6.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12cb882ccb290b8646e554b157ab0b71e64e8d5bef775cd66b6531e52d302669" + [[package]] name = "hkdf" version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "791a029f6b9fc27657f6f188ec6e5e43f6911f6f878e0dc5501396e09809d437" dependencies = [ - "hmac", + "hmac 0.12.1", +] + +[[package]] +name = "hmac" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "126888268dcc288495a26bf004b38c5fdbb31682f992c84ceb046a1f0fe38840" +dependencies = [ + "crypto-mac", + "digest 0.9.0", ] [[package]] @@ -3572,6 +4306,17 @@ dependencies = [ "digest 0.10.7", ] +[[package]] +name = "hmac-drbg" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17ea0a1394df5b6574da6e0c1ade9e78868c9fb0a4e5ef4428e32da4676b85b1" +dependencies = [ + "digest 0.9.0", + "generic-array", + "hmac 0.8.1", +] + [[package]] name = "home" version = "0.5.5" @@ -3673,7 +4418,7 @@ dependencies = [ "http", "hyper", "hyper-rustls 0.22.1", - "rustls-native-certs", + "rustls-native-certs 0.5.0", "tokio", "tokio-rustls 0.22.0", "tower-service", @@ -3691,7 +4436,7 @@ dependencies = [ "hyper", "log", "rustls 0.19.1", - "rustls-native-certs", + "rustls-native-certs 0.5.0", "tokio", "tokio-rustls 0.22.0", "webpki", @@ -3707,7 +4452,7 @@ dependencies = [ "futures-util", "http", "hyper", - "rustls 0.21.7", + "rustls 0.21.10", "tokio", "tokio-rustls 0.24.1", ] @@ -3755,9 +4500,9 @@ checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" [[package]] name = "idna" -version = "0.4.0" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c" +checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" dependencies = [ "unicode-bidi", "unicode-normalization", @@ -3772,6 +4517,8 @@ dependencies = [ "bitmaps", "rand_core 0.6.4", "rand_xoshiro", + "rayon", + "serde", "sized-chunks", "typenum", "version_check", @@ -3828,8 +4575,8 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "11d7a9f6330b71fea57921c9b61c47ee6e84f72d394754eff6163ae67e7395eb" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.78", + "quote 1.0.35", "syn 1.0.109", ] @@ -3852,15 +4599,28 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.0.0" +version = "2.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5477fe2230a79769d8dc68e0eabf5437907c0457a5614a9e8dddb67f65eb65d" +checksum = "824b2ae422412366ba479e8111fd301f7b5faece8149317bb81925979a53f520" dependencies = [ "equivalent", - "hashbrown 0.14.0", + "hashbrown 0.14.3", "serde", ] +[[package]] +name = "indicatif" +version = "0.17.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb28741c9db9a713d93deb3bb9515c20788cef5815265bee4980e87bde7e0f25" +dependencies = [ + "console", + "instant", + "number_prefix", + "portable-atomic", + "unicode-width", +] + [[package]] name = "inout" version = "0.1.3" @@ -3900,31 +4660,31 @@ dependencies = [ name = "integration-tests" version = "0.1.0" dependencies = [ - "aggregate-verifier", - "axelar-wasm-std", - "axelar-wasm-std-derive", - "connection-router", + "aggregate-verifier 0.1.0", + "axelar-wasm-std 0.1.0", + "axelar-wasm-std-derive 0.1.0", + "connection-router 0.1.0", "cosmwasm-schema", "cosmwasm-std", "cosmwasm-storage", "cw-multi-test", "cw-storage-plus 1.1.0", "error-stack", - "gateway", + "gateway 0.1.0", "itertools 0.11.0", "k256", "mockall", - "multisig", - "multisig-prover", - "report", - "rewards", + "multisig 0.1.0", + "multisig-prover 0.1.0", + "report 0.1.0", + "rewards 0.1.0", "schemars", "serde", "serde_json", - "service-registry", + "service-registry 0.1.0", "thiserror", "tofn", - "voting-verifier", + "voting-verifier 0.1.0", ] [[package]] @@ -3961,7 +4721,7 @@ version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b" dependencies = [ - "hermit-abi", + "hermit-abi 0.3.3", "rustix", "windows-sys 0.48.0", ] @@ -3984,6 +4744,15 @@ dependencies = [ "either", ] +[[package]] +name = "itertools" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +dependencies = [ + "either", +] + [[package]] name = "itoa" version = "1.0.9" @@ -4001,9 +4770,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.64" +version = "0.3.67" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a" +checksum = "9a1d36f1235bc969acba30b7f5990b864423a6068a10f7c90ae8f0112e3a59d1" dependencies = [ "wasm-bindgen", ] @@ -4028,15 +4797,30 @@ dependencies = [ "tabled", ] +[[package]] +name = "jsonrpc-core" +version = "18.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14f7f76aef2d054868398427f6c54943cf3d1caa9a7ec7d0c38d69df97a965eb" +dependencies = [ + "futures", + "futures-executor", + "futures-util", + "log", + "serde", + "serde_derive", + "serde_json", +] + [[package]] name = "jsonwebtoken" version = "8.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6971da4d9c3aa03c3d8f3ff0f4155b534aad021292003895a469716b2a230378" dependencies = [ - "base64 0.21.4", + "base64 0.21.7", "pem", - "ring", + "ring 0.16.20", "serde", "serde_json", "simple_asn1", @@ -4052,7 +4836,7 @@ dependencies = [ "ecdsa", "elliptic-curve", "once_cell", - "sha2 0.10.7", + "sha2 0.10.8", "signature 2.1.0", ] @@ -4099,7 +4883,7 @@ version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" dependencies = [ - "spin", + "spin 0.5.2", ] [[package]] @@ -4110,9 +4894,9 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] name = "libc" -version = "0.2.148" +version = "0.2.153" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cdc71e17332e86d2e1d38c1f99edcb6288ee11b815fb1a4b049eaa2114d369b" +checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" [[package]] name = "libloading" @@ -4146,6 +4930,102 @@ dependencies = [ "zstd-sys", ] +[[package]] +name = "libsecp256k1" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9d220bc1feda2ac231cb78c3d26f27676b8cf82c96971f7aeef3d0cf2797c73" +dependencies = [ + "arrayref", + "base64 0.12.3", + "digest 0.9.0", + "hmac-drbg", + "libsecp256k1-core 0.2.2", + "libsecp256k1-gen-ecmult 0.2.1", + "libsecp256k1-gen-genmult 0.2.1", + "rand 0.7.3", + "serde", + "sha2 0.9.9", + "typenum", +] + +[[package]] +name = "libsecp256k1" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95b09eff1b35ed3b33b877ced3a691fc7a481919c7e29c53c906226fcf55e2a1" +dependencies = [ + "arrayref", + "base64 0.13.1", + "digest 0.9.0", + "hmac-drbg", + "libsecp256k1-core 0.3.0", + "libsecp256k1-gen-ecmult 0.3.0", + "libsecp256k1-gen-genmult 0.3.0", + "rand 0.8.5", + "serde", + "sha2 0.9.9", + "typenum", +] + +[[package]] +name = "libsecp256k1-core" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0f6ab710cec28cef759c5f18671a27dae2a5f952cdaaee1d8e2908cb2478a80" +dependencies = [ + "crunchy", + "digest 0.9.0", + "subtle", +] + +[[package]] +name = "libsecp256k1-core" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5be9b9bb642d8522a44d533eab56c16c738301965504753b03ad1de3425d5451" +dependencies = [ + "crunchy", + "digest 0.9.0", + "subtle", +] + +[[package]] +name = "libsecp256k1-gen-ecmult" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccab96b584d38fac86a83f07e659f0deafd0253dc096dab5a36d53efe653c5c3" +dependencies = [ + "libsecp256k1-core 0.2.2", +] + +[[package]] +name = "libsecp256k1-gen-ecmult" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3038c808c55c87e8a172643a7d87187fc6c4174468159cb3090659d55bcb4809" +dependencies = [ + "libsecp256k1-core 0.3.0", +] + +[[package]] +name = "libsecp256k1-gen-genmult" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67abfe149395e3aa1c48a2beb32b068e2334402df8181f818d3aee2b304c4f5d" +dependencies = [ + "libsecp256k1-core 0.2.2", +] + +[[package]] +name = "libsecp256k1-gen-genmult" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3db8d6ba2cec9eacc40e6e8ccc98931840301f1006e95647ceb2dd5c3aa06f7c" +dependencies = [ + "libsecp256k1-core 0.3.0", +] + [[package]] name = "libz-sys" version = "1.1.12" @@ -4157,6 +5037,18 @@ dependencies = [ "vcpkg", ] +[[package]] +name = "light-poseidon" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c9a85a9752c549ceb7578064b4ed891179d20acd85f27318573b64d2d7ee7ee" +dependencies = [ + "ark-bn254", + "ark-ff", + "num-bigint 0.4.4", + "thiserror", +] + [[package]] name = "linked-hash-map" version = "0.5.6" @@ -4231,6 +5123,24 @@ version = "2.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f232d6ef707e1956a43342693d2a31e72989554d58299d7a88738cc95b0d35c" +[[package]] +name = "memmap2" +version = "0.5.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83faa42c0a078c393f6b29d5db232d8be22776a891f8f56e5284faee4a20b327" +dependencies = [ + "libc", +] + +[[package]] +name = "memoffset" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4" +dependencies = [ + "autocfg", +] + [[package]] name = "memoffset" version = "0.9.0" @@ -4291,7 +5201,7 @@ checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2" dependencies = [ "libc", "log", - "wasi", + "wasi 0.11.0+wasi-snapshot-preview1", "windows-sys 0.48.0", ] @@ -4317,8 +5227,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "22ce75669015c4f47b289fd4d4f56e894e4c96003ffdf3ac51313126f94c6cbb" dependencies = [ "cfg-if", - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.78", + "quote 1.0.35", "syn 1.0.109", ] @@ -4427,7 +5337,7 @@ source = "git+https://github.com/mystenlabs/sui?tag=mainnet-v1.14.2#299cbeafbb6a dependencies = [ "anyhow", "bcs", - "clap", + "clap 4.4.4", "codespan-reporting", "hex", "move-binary-format", @@ -4457,10 +5367,10 @@ dependencies = [ "ethnum", "hex", "move-proc-macros", - "num", + "num 0.4.1", "once_cell", "primitive-types 0.10.1", - "rand", + "rand 0.8.5", "ref-cast", "serde", "serde_bytes", @@ -4474,7 +5384,7 @@ source = "git+https://github.com/mystenlabs/sui?tag=mainnet-v1.14.2#299cbeafbb6a dependencies = [ "anyhow", "bcs", - "clap", + "clap 4.4.4", "codespan", "colored", "move-binary-format", @@ -4493,7 +5403,7 @@ source = "git+https://github.com/mystenlabs/sui?tag=mainnet-v1.14.2#299cbeafbb6a dependencies = [ "anyhow", "bcs", - "clap", + "clap 4.4.4", "colored", "hex", "move-binary-format", @@ -4517,7 +5427,7 @@ dependencies = [ "log", "move-compiler", "move-model", - "num", + "num 0.4.1", "once_cell", "regex", "serde", @@ -4586,7 +5496,7 @@ dependencies = [ "move-disassembler", "move-ir-types", "move-symbol-pool", - "num", + "num 0.4.1", "once_cell", "regex", "serde", @@ -4598,7 +5508,7 @@ version = "0.1.0" source = "git+https://github.com/mystenlabs/sui?tag=mainnet-v1.14.2#299cbeafbb6aa5601e08f00ac24bd647c61a63e2" dependencies = [ "anyhow", - "clap", + "clap 4.4.4", "colored", "move-abigen", "move-binary-format", @@ -4630,8 +5540,8 @@ version = "0.1.0" source = "git+https://github.com/mystenlabs/sui?tag=mainnet-v1.14.2#299cbeafbb6aa5601e08f00ac24bd647c61a63e2" dependencies = [ "enum-compat-util", - "quote 1.0.33", - "syn 2.0.37", + "quote 1.0.35", + "syn 2.0.48", ] [[package]] @@ -4708,7 +5618,7 @@ dependencies = [ "msim-macros", "naive-timer", "pin-project-lite", - "rand", + "rand 0.8.5", "real_tokio", "serde", "socket2 0.4.9", @@ -4725,8 +5635,8 @@ version = "0.1.0" source = "git+https://github.com/MystenLabs/mysten-sim.git?rev=1a52783d6600ecc22e15253a982f77881bd47c77#1a52783d6600ecc22e15253a982f77881bd47c77" dependencies = [ "darling 0.14.4", - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.78", + "quote 1.0.35", "syn 1.0.109", ] @@ -4777,10 +5687,10 @@ version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1d6d4752e6230d8ef7adf7bd5d8c4b1f6561c1014c5ba9a37445ccefe18aa1db" dependencies = [ - "proc-macro-crate", + "proc-macro-crate 1.1.3", "proc-macro-error", - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.78", + "quote 1.0.35", "syn 1.0.109", "synstructure", ] @@ -4795,9 +5705,9 @@ checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a" name = "multisig" version = "0.1.0" dependencies = [ - "axelar-wasm-std", - "axelar-wasm-std-derive", - "connection-router", + "axelar-wasm-std 0.1.0", + "axelar-wasm-std-derive 0.1.0", + "connection-router 0.1.0", "cosmwasm-crypto", "cosmwasm-schema", "cosmwasm-std", @@ -4806,10 +5716,36 @@ dependencies = [ "cw-storage-plus 1.1.0", "enum-display-derive", "error-stack", - "getrandom", + "getrandom 0.2.10", + "k256", + "report 0.1.0", + "rewards 0.1.0", + "schemars", + "serde", + "serde_json", + "sha3 0.10.8", + "thiserror", +] + +[[package]] +name = "multisig" +version = "0.1.0" +source = "git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f#c0904e1c72c99a174a93b5f6c18b30f52d20b71f" +dependencies = [ + "axelar-wasm-std 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "axelar-wasm-std-derive 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "connection-router 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "cosmwasm-crypto", + "cosmwasm-schema", + "cosmwasm-std", + "cosmwasm-storage", + "cw-storage-plus 1.1.0", + "enum-display-derive", + "error-stack", + "getrandom 0.2.10", "k256", - "report", - "rewards", + "report 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "rewards 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", "schemars", "serde", "serde_json", @@ -4822,10 +5758,10 @@ name = "multisig-prover" version = "0.1.0" dependencies = [ "anyhow", - "axelar-wasm-std", - "axelar-wasm-std-derive", + "axelar-wasm-std 0.1.0", + "axelar-wasm-std-derive 0.1.0", "bcs", - "connection-router", + "connection-router 0.1.0", "cosmwasm-schema", "cosmwasm-std", "cosmwasm-storage", @@ -4837,20 +5773,52 @@ dependencies = [ "error-stack", "ethabi", "ethers", - "gateway", + "gateway 0.1.0", "generic-array", "hex", "itertools 0.11.0", "k256", - "multisig", - "report", + "multisig 0.1.0", + "report 0.1.0", + "schemars", + "serde", + "serde_json", + "service-registry 0.1.0", + "sha3 0.10.8", + "thiserror", + "voting-verifier 0.1.0", +] + +[[package]] +name = "multisig-prover" +version = "0.1.0" +source = "git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f#c0904e1c72c99a174a93b5f6c18b30f52d20b71f" +dependencies = [ + "axelar-wasm-std 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "axelar-wasm-std-derive 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "bcs", + "connection-router 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "cosmwasm-schema", + "cosmwasm-std", + "cosmwasm-storage", + "cw-storage-plus 1.1.0", + "cw-utils 1.0.1", + "either", + "error-stack", + "ethabi", + "gateway 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "hex", + "itertools 0.11.0", + "k256", + "multisig 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "report 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", "schemars", "serde", "serde_json", - "service-registry", + "service-registry 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", "sha3 0.10.8", "thiserror", - "voting-verifier", + "voting-verifier 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", ] [[package]] @@ -4923,7 +5891,7 @@ name = "mysten-util-mem-derive" version = "0.1.0" source = "git+https://github.com/mystenlabs/sui?tag=mainnet-v1.14.2#299cbeafbb6aa5601e08f00ac24bd647c61a63e2" dependencies = [ - "proc-macro2 1.0.67", + "proc-macro2 1.0.78", "syn 1.0.109", "synstructure", "workspace-hack", @@ -4960,7 +5928,7 @@ dependencies = [ "mysten-network", "mysten-util-mem", "narwhal-crypto", - "rand", + "rand 0.8.5", "serde", "serde_json", "thiserror", @@ -5010,21 +5978,34 @@ checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54" name = "nexus-gateway" version = "0.1.0" dependencies = [ - "axelar-wasm-std", - "axelar-wasm-std-derive", - "connection-router", + "axelar-wasm-std 0.1.0", + "axelar-wasm-std-derive 0.1.0", + "connection-router 0.1.0", "cosmwasm-schema", "cosmwasm-std", "cw-storage-plus 1.1.0", "error-stack", "hex", "mockall", - "report", + "report 0.1.0", "schemars", "serde", "thiserror", ] +[[package]] +name = "nix" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b" +dependencies = [ + "bitflags 1.3.2", + "cfg-if", + "libc", + "memoffset 0.7.1", + "pin-utils", +] + [[package]] name = "nom" version = "7.1.3" @@ -5053,22 +6034,47 @@ dependencies = [ [[package]] name = "num" -version = "0.4.1" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b05180d69e3da0e530ba2a1dae5110317e49e3b7f3d41be227dc5f92e49ee7af" +checksum = "b8536030f9fea7127f841b45bb6243b27255787fb4eb83958aa1ef9d2fdc0c36" dependencies = [ - "num-bigint 0.4.4", - "num-complex", + "num-bigint 0.2.6", + "num-complex 0.2.4", "num-integer", "num-iter", - "num-rational", + "num-rational 0.2.4", "num-traits", ] [[package]] -name = "num-bigint" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" +name = "num" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b05180d69e3da0e530ba2a1dae5110317e49e3b7f3d41be227dc5f92e49ee7af" +dependencies = [ + "num-bigint 0.4.4", + "num-complex 0.4.4", + "num-integer", + "num-iter", + "num-rational 0.4.1", + "num-traits", +] + +[[package]] +name = "num-bigint" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "090c7f9998ee0ff65aa5b723e4009f7b217707f1fb5ea551329cc4d6231fb304" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-bigint" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5f6f7833f2cbf2360a6cfd58cd41a53aa7a90bd4c202f5b1c7dd2ed73c57b2c3" dependencies = [ "autocfg", @@ -5085,7 +6091,7 @@ dependencies = [ "autocfg", "num-integer", "num-traits", - "rand", + "rand 0.8.5", ] [[package]] @@ -5100,11 +6106,21 @@ dependencies = [ "num-integer", "num-iter", "num-traits", - "rand", + "rand 0.8.5", "smallvec", "zeroize", ] +[[package]] +name = "num-complex" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6b19411a9719e753aff12e5187b74d60d3dc449ec3f4dc21e3989c3f554bc95" +dependencies = [ + "autocfg", + "num-traits", +] + [[package]] name = "num-complex" version = "0.4.4" @@ -5120,11 +6136,22 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.78", + "quote 1.0.35", "syn 1.0.109", ] +[[package]] +name = "num-derive" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfb77679af88f8b125209d354a202862602672222e7f2313fdd6dc349bad4712" +dependencies = [ + "proc-macro2 1.0.78", + "quote 1.0.35", + "syn 2.0.48", +] + [[package]] name = "num-integer" version = "0.1.45" @@ -5146,6 +6173,18 @@ dependencies = [ "num-traits", ] +[[package]] +name = "num-rational" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c000134b5dbf44adc5cb772486d335293351644b801551abe8f75c84cfa4aef" +dependencies = [ + "autocfg", + "num-bigint 0.2.6", + "num-integer", + "num-traits", +] + [[package]] name = "num-rational" version = "0.4.1" @@ -5174,31 +6213,58 @@ version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" dependencies = [ - "hermit-abi", + "hermit-abi 0.3.3", "libc", ] [[package]] name = "num_enum" -version = "0.7.0" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a015b430d3c108a207fd776d2e2196aaf8b1cf8cf93253e3a097ff3085076a1" +dependencies = [ + "num_enum_derive 0.6.1", +] + +[[package]] +name = "num_enum" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70bf6736f74634d299d00086f02986875b3c2d924781a6a2cb6c201e73da0ceb" +checksum = "02339744ee7253741199f897151b38e72257d13802d4ee837285cc2990a90845" dependencies = [ - "num_enum_derive", + "num_enum_derive 0.7.2", ] [[package]] name = "num_enum_derive" -version = "0.7.0" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96667db765a921f7b295ffee8b60472b686a51d4f21c2ee4ffdb94c7013b65a6" +dependencies = [ + "proc-macro-crate 1.1.3", + "proc-macro2 1.0.78", + "quote 1.0.35", + "syn 2.0.48", +] + +[[package]] +name = "num_enum_derive" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56ea360eafe1022f7cc56cd7b869ed57330fb2453d0c7831d99b74c65d2f5597" +checksum = "681030a937600a36906c185595136d26abfebb4aa9c65701cefcaf8578bb982b" dependencies = [ - "proc-macro-crate", - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro-crate 1.1.3", + "proc-macro2 1.0.78", + "quote 1.0.35", + "syn 2.0.48", ] +[[package]] +name = "number_prefix" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" + [[package]] name = "object" version = "0.32.1" @@ -5249,8 +6315,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "003b2be5c6c53c1cfeb0a238b8a1c3915cd410feb684457a36c10038f764bb1c" dependencies = [ "bytes", - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.78", + "quote 1.0.35", "syn 1.0.109", ] @@ -5276,6 +6342,12 @@ dependencies = [ "hashbrown 0.12.3", ] +[[package]] +name = "os_str_bytes" +version = "6.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2355d85b9a3786f481747ced0e0ff2ba35213a1f9bd406ed906554d7af805a1" + [[package]] name = "ouroboros" version = "0.17.2" @@ -5295,9 +6367,9 @@ checksum = "ec4c6225c69b4ca778c0aea097321a64c421cf4577b331c61b229267edabb6f8" dependencies = [ "heck 0.4.1", "proc-macro-error", - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2 1.0.78", + "quote 1.0.35", + "syn 2.0.48", ] [[package]] @@ -5315,7 +6387,7 @@ dependencies = [ "ecdsa", "elliptic-curve", "primeorder", - "sha2 0.10.7", + "sha2 0.10.8", ] [[package]] @@ -5372,9 +6444,9 @@ version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1557010476e0595c9b568d16dcfb81b93cdeb157612726f5170d31aa707bed27" dependencies = [ - "proc-macro-crate", - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro-crate 1.1.3", + "proc-macro2 1.0.78", + "quote 1.0.35", "syn 1.0.109", ] @@ -5384,9 +6456,9 @@ version = "3.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "312270ee71e1cd70289dacf597cab7b207aa107d2f28191c2ae45b2ece18a260" dependencies = [ - "proc-macro-crate", - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro-crate 1.1.3", + "proc-macro2 1.0.78", + "quote 1.0.35", "syn 1.0.109", ] @@ -5436,7 +6508,7 @@ dependencies = [ "group", "hex", "lazy_static", - "rand", + "rand 0.8.5", "serde", "static_assertions", "subtle", @@ -5460,6 +6532,15 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd" +[[package]] +name = "pbkdf2" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "216eaa586a190f0a738f2f918511eecfa90f13295abec0e457cdebcceda80cbd" +dependencies = [ + "crypto-mac", +] + [[package]] name = "pbkdf2" version = "0.11.0" @@ -5467,9 +6548,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917" dependencies = [ "digest 0.10.7", - "hmac", + "hmac 0.12.1", "password-hash", - "sha2 0.10.7", + "sha2 0.10.8", ] [[package]] @@ -5479,7 +6560,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" dependencies = [ "digest 0.10.7", - "hmac", + "hmac 0.12.1", ] [[package]] @@ -5505,8 +6586,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b5aa52829b8decbef693af90202711348ab001456803ba2a98eb4ec8fb70844c" dependencies = [ "peg-runtime", - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.78", + "quote 1.0.35", ] [[package]] @@ -5544,9 +6625,18 @@ dependencies = [ [[package]] name = "percent-encoding" -version = "2.3.0" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" + +[[package]] +name = "percentage" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94" +checksum = "2fd23b938276f14057220b707937bcb42fa76dda7560e57a2da30cb52d557937" +dependencies = [ + "num 0.2.1", +] [[package]] name = "pest" @@ -5577,9 +6667,9 @@ checksum = "d1511785c5e98d79a05e8a6bc34b4ac2168a0e3e92161862030ad84daa223141" dependencies = [ "pest", "pest_meta", - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2 1.0.78", + "quote 1.0.35", + "syn 2.0.48", ] [[package]] @@ -5590,7 +6680,7 @@ checksum = "b42f0394d3123e33353ca5e1e89092e533d2cc490389f2bd6131c43c634ebc5f" dependencies = [ "once_cell", "pest", - "sha2 0.10.7", + "sha2 0.10.8", ] [[package]] @@ -5610,7 +6700,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" dependencies = [ "fixedbitset 0.4.2", - "indexmap 2.0.0", + "indexmap 2.2.2", ] [[package]] @@ -5640,7 +6730,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0" dependencies = [ "phf_shared 0.11.2", - "rand", + "rand 0.8.5", ] [[package]] @@ -5651,9 +6741,9 @@ checksum = "3444646e286606587e49f3bcf1679b8cef1dc2c5ecc29ddacaffc305180d464b" dependencies = [ "phf_generator", "phf_shared 0.11.2", - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2 1.0.78", + "quote 1.0.35", + "syn 2.0.48", ] [[package]] @@ -5689,9 +6779,9 @@ version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2 1.0.78", + "quote 1.0.35", + "syn 2.0.48", ] [[package]] @@ -5718,6 +6808,17 @@ dependencies = [ "zeroize", ] +[[package]] +name = "pkcs8" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cabda3fb821068a9a4fab19a683eac3af12edf0f34b94a8be53c4972b8149d0" +dependencies = [ + "der 0.5.1", + "spki 0.5.4", + "zeroize", +] + [[package]] name = "pkcs8" version = "0.9.0" @@ -5744,12 +6845,30 @@ version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" +[[package]] +name = "plain" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" + [[package]] name = "platforms" version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "14e6ab3f592e6fb464fc9712d8d6e6912de6473954635fd76a589d832cffcbb0" +[[package]] +name = "polyval" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8419d2b623c7c0896ff2d5d96e2cb4ede590fed28fcc34934f4c33c036e620a1" +dependencies = [ + "cfg-if", + "cpufeatures", + "opaque-debug", + "universal-hash 0.4.1", +] + [[package]] name = "polyval" version = "0.6.1" @@ -5759,9 +6878,15 @@ dependencies = [ "cfg-if", "cpufeatures", "opaque-debug", - "universal-hash", + "universal-hash 0.5.1", ] +[[package]] +name = "portable-atomic" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7170ef9988bc169ba16dd36a7fa041e5c4cbeb6a35b76d4c03daded371eae7c0" + [[package]] name = "ppv-lite86" version = "0.2.17" @@ -5810,7 +6935,7 @@ version = "0.1.25" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c8646e95016a7a6c4adea95bafa8a16baab64b583356217f2c85db4a39d9a86" dependencies = [ - "proc-macro2 1.0.67", + "proc-macro2 1.0.78", "syn 1.0.109", ] @@ -5820,8 +6945,8 @@ version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ae005bd773ab59b4725093fd7df83fd7892f7d8eafb48dbd7de6e024e4215f9d" dependencies = [ - "proc-macro2 1.0.67", - "syn 2.0.37", + "proc-macro2 1.0.78", + "syn 2.0.48", ] [[package]] @@ -5859,6 +6984,15 @@ dependencies = [ "uint", ] +[[package]] +name = "proc-macro-crate" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d6ea3c4595b96363c13943497db34af4460fb474a95c43f4446ad341b8c9785" +dependencies = [ + "toml 0.5.11", +] + [[package]] name = "proc-macro-crate" version = "1.1.3" @@ -5869,6 +7003,15 @@ dependencies = [ "toml 0.5.11", ] +[[package]] +name = "proc-macro-crate" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284" +dependencies = [ + "toml_edit 0.21.1", +] + [[package]] name = "proc-macro-error" version = "1.0.4" @@ -5876,8 +7019,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" dependencies = [ "proc-macro-error-attr", - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.78", + "quote 1.0.35", "syn 1.0.109", "version_check", ] @@ -5888,8 +7031,8 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.78", + "quote 1.0.35", "version_check", ] @@ -5904,9 +7047,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.67" +version = "1.0.78" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d433d9f1a3e8c1263d9456598b16fec66f4acc9a74dacffd35c7bb09b3a1328" +checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae" dependencies = [ "unicode-ident", ] @@ -5948,8 +7091,8 @@ dependencies = [ "byteorder", "lazy_static", "num-traits", - "rand", - "rand_chacha", + "rand 0.8.5", + "rand_chacha 0.3.1", "rand_xorshift", "regex-syntax 0.6.29", "rusty-fork", @@ -6028,8 +7171,8 @@ checksum = "f9cc1a3263e07e0bf68e96268f37665207b49560d98739662cdfaae215c720fe" dependencies = [ "anyhow", "itertools 0.10.5", - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.78", + "quote 1.0.35", "syn 1.0.109", ] @@ -6041,8 +7184,8 @@ checksum = "e5d2d8d10f3c6ded6da8b05b5fb3b8a5082514344d56c9f871412d29b4e075b4" dependencies = [ "anyhow", "itertools 0.10.5", - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.78", + "quote 1.0.35", "syn 1.0.109", ] @@ -6054,9 +7197,9 @@ checksum = "efb6c9a1dd1def8e2124d17e83a20af56f1570d6c2d2bd9e266ccb768df3840e" dependencies = [ "anyhow", "itertools 0.11.0", - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2 1.0.78", + "quote 1.0.35", + "syn 2.0.48", ] [[package]] @@ -6077,6 +7220,26 @@ dependencies = [ "bytes", ] +[[package]] +name = "qstring" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d464fae65fff2680baf48019211ce37aaec0c78e9264c84a3e484717f965104e" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "qualifier_attr" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e2e25ee72f5b24d773cae88422baddefff7714f97aab68d96fe2b6fc4a28fb2" +dependencies = [ + "proc-macro2 1.0.78", + "quote 1.0.35", + "syn 2.0.48", +] + [[package]] name = "quick-error" version = "1.2.3" @@ -6095,7 +7258,7 @@ dependencies = [ "quinn-proto", "quinn-udp", "rustc-hash", - "rustls 0.21.7", + "rustls 0.21.10", "thiserror", "tokio", "tracing", @@ -6103,15 +7266,16 @@ dependencies = [ [[package]] name = "quinn-proto" -version = "0.10.4" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13f81c9a9d574310b8351f8666f5a93ac3b0069c45c28ad52c10291389a7cf9" +checksum = "141bf7dfde2fbc246bfd3fe12f2455aa24b0fbd9af535d8c86c7bd1381ff2b1a" dependencies = [ "bytes", - "rand", - "ring", + "rand 0.8.5", + "ring 0.16.20", "rustc-hash", - "rustls 0.21.7", + "rustls 0.21.10", + "rustls-native-certs 0.6.3", "slab", "thiserror", "tinyvec", @@ -6126,7 +7290,7 @@ checksum = "055b4e778e8feb9f93c4e439f71dc2156ef13360b432b799e179a8c4cdf0b1d7" dependencies = [ "bytes", "libc", - "socket2 0.5.4", + "socket2 0.5.5", "tracing", "windows-sys 0.48.0", ] @@ -6142,11 +7306,11 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.33" +version = "1.0.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" +checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" dependencies = [ - "proc-macro2 1.0.67", + "proc-macro2 1.0.78", ] [[package]] @@ -6161,6 +7325,19 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" +[[package]] +name = "rand" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" +dependencies = [ + "getrandom 0.1.16", + "libc", + "rand_chacha 0.2.2", + "rand_core 0.5.1", + "rand_hc", +] + [[package]] name = "rand" version = "0.8.5" @@ -6168,10 +7345,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ "libc", - "rand_chacha", + "rand_chacha 0.3.1", "rand_core 0.6.4", ] +[[package]] +name = "rand_chacha" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" +dependencies = [ + "ppv-lite86", + "rand_core 0.5.1", +] + [[package]] name = "rand_chacha" version = "0.3.1" @@ -6187,6 +7374,9 @@ name = "rand_core" version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" +dependencies = [ + "getrandom 0.1.16", +] [[package]] name = "rand_core" @@ -6194,7 +7384,16 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom", + "getrandom 0.2.10", +] + +[[package]] +name = "rand_hc" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" +dependencies = [ + "rand_core 0.5.1", ] [[package]] @@ -6226,9 +7425,9 @@ dependencies = [ [[package]] name = "rayon" -version = "1.7.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b" +checksum = "fa7237101a77a10773db45d62004a272517633fbcc3df19d96455ede1122e051" dependencies = [ "either", "rayon-core", @@ -6236,14 +7435,12 @@ dependencies = [ [[package]] name = "rayon-core" -version = "1.11.0" +version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" dependencies = [ - "crossbeam-channel", "crossbeam-deque", "crossbeam-utils", - "num_cpus", ] [[package]] @@ -6253,7 +7450,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6413f3de1edee53342e6138e75b56d32e7bc6e332b3bd62d497b1929d4cfbcdd" dependencies = [ "pem", - "ring", + "ring 0.16.20", + "time", + "yasna", +] + +[[package]] +name = "rcgen" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffbe84efe2f38dea12e9bfc1f65377fdf03e53a18cb3b995faedf7934c7e785b" +dependencies = [ + "pem", + "ring 0.16.20", "time", "yasna", ] @@ -6264,9 +7473,9 @@ version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8f439da1766942fe069954da6058b2e6c1760eb878bae76f5be9fc29f56f574" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2 1.0.78", + "quote 1.0.35", + "syn 2.0.48", ] [[package]] @@ -6311,7 +7520,7 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" dependencies = [ - "getrandom", + "getrandom 0.2.10", "redox_syscall 0.2.16", "thiserror", ] @@ -6331,9 +7540,9 @@ version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f7473c2cfcf90008193dd0e3e16599455cb601a9fce322b5bb55de799664925" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2 1.0.78", + "quote 1.0.35", + "syn 2.0.48", ] [[package]] @@ -6388,13 +7597,26 @@ dependencies = [ "valuable", ] +[[package]] +name = "report" +version = "0.1.0" +source = "git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f#c0904e1c72c99a174a93b5f6c18b30f52d20b71f" +dependencies = [ + "error-stack", + "eyre", + "itertools 0.11.0", + "thiserror", + "valuable", +] + [[package]] name = "reqwest" -version = "0.11.20" +version = "0.11.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e9ad3fe7488d7e34558a2033d45a0c90b72d97b4f80705666fea71472e2e6a1" +checksum = "c6920094eb85afde5e4a138be3f2de8bbdf28000f0029e72c45025a56b042251" dependencies = [ - "base64 0.21.4", + "async-compression 0.4.6", + "base64 0.21.7", "bytes", "encoding_rs", "futures-core", @@ -6411,13 +7633,16 @@ dependencies = [ "once_cell", "percent-encoding", "pin-project-lite", - "rustls 0.21.7", + "rustls 0.21.10", "rustls-pemfile", "serde", "serde_json", "serde_urlencoded", + "sync_wrapper", + "system-configuration", "tokio", "tokio-rustls 0.24.1", + "tokio-util 0.7.9", "tower-service", "url", "wasm-bindgen", @@ -6437,8 +7662,8 @@ checksum = "8c31b5c4033f8fdde8700e4657be2c497e7288f01515be52168c631e2e4d4086" name = "rewards" version = "0.1.0" dependencies = [ - "axelar-wasm-std", - "axelar-wasm-std-derive", + "axelar-wasm-std 0.1.0", + "axelar-wasm-std-derive 0.1.0", "cosmwasm-schema", "cosmwasm-std", "cw-multi-test", @@ -6446,7 +7671,25 @@ dependencies = [ "error-stack", "itertools 0.11.0", "mockall", - "report", + "report 0.1.0", + "serde", + "thiserror", +] + +[[package]] +name = "rewards" +version = "0.1.0" +source = "git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f#c0904e1c72c99a174a93b5f6c18b30f52d20b71f" +dependencies = [ + "axelar-wasm-std 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "axelar-wasm-std-derive 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "cosmwasm-schema", + "cosmwasm-std", + "cw-storage-plus 1.1.0", + "error-stack", + "itertools 0.11.0", + "mockall", + "report 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", "serde", "thiserror", ] @@ -6457,7 +7700,7 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" dependencies = [ - "hmac", + "hmac 0.12.1", "subtle", ] @@ -6470,12 +7713,26 @@ dependencies = [ "cc", "libc", "once_cell", - "spin", - "untrusted", + "spin 0.5.2", + "untrusted 0.7.1", "web-sys", "winapi", ] +[[package]] +name = "ring" +version = "0.17.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "688c63d65483050968b2a8937f7995f443e27041a0f7700aa59b0822aedebb74" +dependencies = [ + "cc", + "getrandom 0.2.10", + "libc", + "spin 0.9.8", + "untrusted 0.9.0", + "windows-sys 0.48.0", +] + [[package]] name = "ripemd" version = "0.1.3" @@ -6502,8 +7759,8 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e33d7b2abe0c340d8797fe2907d3f20d3b5ea5908683618bfe80df7f621f672a" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.78", + "quote 1.0.35", "syn 1.0.109", ] @@ -6539,6 +7796,17 @@ dependencies = [ "serde", ] +[[package]] +name = "rpassword" +version = "7.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80472be3c897911d0137b2d2b9055faf6eeac5b14e324073d83bc17b191d7e3f" +dependencies = [ + "libc", + "rtoolbox", + "windows-sys 0.48.0", +] + [[package]] name = "rsa" version = "0.8.2" @@ -6554,12 +7822,22 @@ dependencies = [ "pkcs1", "pkcs8 0.9.0", "rand_core 0.6.4", - "sha2 0.10.7", + "sha2 0.10.8", "signature 2.1.0", "subtle", "zeroize", ] +[[package]] +name = "rtoolbox" +version = "0.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c247d24e63230cdb56463ae328478bd5eac8b8faa8c69461a77e8e323afac90e" +dependencies = [ + "libc", + "windows-sys 0.48.0", +] + [[package]] name = "rust-ini" version = "0.18.0" @@ -6612,7 +7890,7 @@ version = "0.38.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "747c788e9ce8e92b12cd485c49ddf90723550b654b32508f979b71a7b1ecda4f" dependencies = [ - "bitflags 2.4.0", + "bitflags 2.4.2", "errno", "libc", "linux-raw-sys", @@ -6627,20 +7905,20 @@ checksum = "35edb675feee39aec9c99fa5ff985081995a06d594114ae14cbe797ad7b7a6d7" dependencies = [ "base64 0.13.1", "log", - "ring", + "ring 0.16.20", "sct 0.6.1", "webpki", ] [[package]] name = "rustls" -version = "0.21.7" +version = "0.21.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd8d6c9f025a446bc4d18ad9632e69aec8f287aa84499ee335599fabd20c3fd8" +checksum = "f9d5a6813c0759e4609cd494e8e725babae6a2ca7b62a5536a13daaec6fcb7ba" dependencies = [ "log", - "ring", - "rustls-webpki 0.101.5", + "ring 0.17.7", + "rustls-webpki", "sct 0.7.0", ] @@ -6657,32 +7935,34 @@ dependencies = [ ] [[package]] -name = "rustls-pemfile" -version = "1.0.3" +name = "rustls-native-certs" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d3987094b1d07b653b7dfdc3f70ce9a1da9c51ac18c1b06b662e4f9a0e9f4b2" +checksum = "a9aace74cb666635c918e9c12bc0d348266037aa8eb599b5cba565709a8dff00" dependencies = [ - "base64 0.21.4", + "openssl-probe", + "rustls-pemfile", + "schannel", + "security-framework", ] [[package]] -name = "rustls-webpki" -version = "0.100.3" +name = "rustls-pemfile" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f6a5fc258f1c1276dfe3016516945546e2d5383911efc0fc4f1cdc5df3a4ae3" +checksum = "2d3987094b1d07b653b7dfdc3f70ce9a1da9c51ac18c1b06b662e4f9a0e9f4b2" dependencies = [ - "ring", - "untrusted", + "base64 0.21.7", ] [[package]] name = "rustls-webpki" -version = "0.101.5" +version = "0.101.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45a27e3b59326c16e23d30aeb7a36a24cc0d29e71d68ff611cdfb4a01d013bed" +checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" dependencies = [ - "ring", - "untrusted", + "ring 0.17.7", + "untrusted 0.9.0", ] [[package]] @@ -6715,7 +7995,7 @@ version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97a22f5af31f73a954c10289c93e8a50cc23d971e80ee446f1f6f7137a088213" dependencies = [ - "cipher", + "cipher 0.4.4", ] [[package]] @@ -6745,9 +8025,9 @@ version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "912e55f6d20e0e80d63733872b40e1227c0bce1e1ab81ba67d696339bfd7fd29" dependencies = [ - "proc-macro-crate", - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro-crate 1.1.3", + "proc-macro2 1.0.78", + "quote 1.0.35", "syn 1.0.109", ] @@ -6779,8 +8059,8 @@ version = "0.8.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e85e2a16b12bdb763244c69ab79363d71db2b4b918a2def53f80b02e0574b13c" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.78", + "quote 1.0.35", "serde_derive_internals", "syn 1.0.109", ] @@ -6792,15 +8072,35 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] -name = "scrypt" -version = "0.10.0" +name = "scroll" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f9e24d2b632954ded8ab2ef9fea0a0c769ea56ea98bddbafbad22caeeadf45d" +checksum = "04c565b551bafbef4157586fa379538366e4385d42082f255bfd96e4fe8519da" dependencies = [ - "hmac", - "pbkdf2 0.11.0", + "scroll_derive", +] + +[[package]] +name = "scroll_derive" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1db149f81d46d2deba7cd3c50772474707729550221e69588478ebf9ada425ae" +dependencies = [ + "proc-macro2 1.0.78", + "quote 1.0.35", + "syn 2.0.48", +] + +[[package]] +name = "scrypt" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f9e24d2b632954ded8ab2ef9fea0a0c769ea56ea98bddbafbad22caeeadf45d" +dependencies = [ + "hmac 0.12.1", + "pbkdf2 0.11.0", "salsa20", - "sha2 0.10.7", + "sha2 0.10.8", ] [[package]] @@ -6809,8 +8109,8 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b362b83898e0e69f38515b82ee15aa80636befe47c3b6d3d89a911e78fc228ce" dependencies = [ - "ring", - "untrusted", + "ring 0.16.20", + "untrusted 0.7.1", ] [[package]] @@ -6819,8 +8119,8 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4" dependencies = [ - "ring", - "untrusted", + "ring 0.16.20", + "untrusted 0.7.1", ] [[package]] @@ -6844,7 +8144,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "25996b82292a7a57ed3508f052cfff8640d38d32018784acd714758b43da9c8f" dependencies = [ "bitcoin_hashes", - "rand", + "rand 0.8.5", "secp256k1-sys", ] @@ -6882,9 +8182,9 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.18" +version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0293b4b29daaf487284529cc2f5675b8e57c61f70167ba415a463651fd6a918" +checksum = "b97ed7a9823b74f99c7742f5336af7be5ecd3eeafcb1507d1fa93347b1d589b0" dependencies = [ "serde", ] @@ -6903,18 +8203,27 @@ checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" [[package]] name = "serde" -version = "1.0.188" +version = "1.0.196" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf9e0fcba69a370eed61bcf2b728575f726b50b55cba78064753d708ddc7549e" +checksum = "870026e60fa08c69f064aa766c10f10b1d62db9ccd4d0abb206472bee0ce3b32" dependencies = [ "serde_derive", ] [[package]] -name = "serde-json-wasm" +name = "serde-big-array" version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16a62a1fad1e1828b24acac8f2b468971dade7b8c3c2e672bcadefefb1f8c137" +checksum = "11fc7cc2c76d73e0f27ee52abbd64eec84d46f370c88371120433196934e4b7f" +dependencies = [ + "serde", +] + +[[package]] +name = "serde-json-wasm" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e9213a07d53faa0b8dd81e767a54a8188a242fdb9be99ab75ec576a774bfdd7" dependencies = [ "serde", ] @@ -6942,22 +8251,22 @@ dependencies = [ [[package]] name = "serde_bytes" -version = "0.11.12" +version = "0.11.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab33ec92f677585af6d88c65593ae2375adde54efdbf16d597f2cbc7a6d368ff" +checksum = "8b8497c313fd43ab992087548117643f6fcd935cbf36f176ffda0aacf9591734" dependencies = [ "serde", ] [[package]] name = "serde_derive" -version = "1.0.188" +version = "1.0.196" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4eca7ac642d82aa35b60049a6eccb4be6be75e599bd2e9adb5f875a737654af2" +checksum = "33c85360c95e7d137454dc81d9a4ed2b8efd8fbe19cee57357b32b9771fccb67" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2 1.0.78", + "quote 1.0.35", + "syn 2.0.48", ] [[package]] @@ -6966,18 +8275,18 @@ version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "85bf8229e7920a9f636479437026331ce11aa132b4dde37d121944a44d6e5f3c" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.78", + "quote 1.0.35", "syn 1.0.109", ] [[package]] name = "serde_json" -version = "1.0.107" +version = "1.0.113" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b420ce6e3d8bd882e9b243c6eed35dbc9a6110c9769e74b584e0d68d1f20c65" +checksum = "69801b70b1c3dac963ecb03a364ba0ceda9cf60c71cfe475e99864759c8b8a79" dependencies = [ - "indexmap 2.0.0", + "indexmap 2.2.2", "itoa", "ryu", "serde", @@ -6999,9 +8308,9 @@ version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8725e1dfadb3a50f7e5ce0b1a540466f6ed3fe7a0fca2ac2b8b831d31316bd00" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2 1.0.78", + "quote 1.0.35", + "syn 2.0.48", ] [[package]] @@ -7047,11 +8356,11 @@ version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1ca3b16a3d82c4088f343b7480a93550b3eabe1a358569c2dfe38bbcead07237" dependencies = [ - "base64 0.21.4", + "base64 0.21.7", "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.0.0", + "indexmap 2.2.2", "serde", "serde_json", "serde_with_macros 3.3.0", @@ -7065,9 +8374,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "881b6f881b17d13214e5d494c939ebab463d01264ce1811e9d4ac3a882e7695f" dependencies = [ "darling 0.20.3", - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2 1.0.78", + "quote 1.0.35", + "syn 2.0.48", ] [[package]] @@ -7077,9 +8386,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2e6be15c453eb305019bfa438b1593c731f36a289a7853f7707ee29e870b3b3c" dependencies = [ "darling 0.20.3", - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2 1.0.78", + "quote 1.0.35", + "syn 2.0.48", ] [[package]] @@ -7098,16 +8407,35 @@ dependencies = [ name = "service-registry" version = "0.1.0" dependencies = [ - "axelar-wasm-std", - "axelar-wasm-std-derive", - "connection-router", + "axelar-wasm-std 0.1.0", + "axelar-wasm-std-derive 0.1.0", + "connection-router 0.1.0", "cosmwasm-schema", "cosmwasm-std", "cosmwasm-storage", "cw-multi-test", "cw-storage-plus 1.1.0", "error-stack", - "report", + "report 0.1.0", + "schemars", + "serde", + "thiserror", +] + +[[package]] +name = "service-registry" +version = "0.1.0" +source = "git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f#c0904e1c72c99a174a93b5f6c18b30f52d20b71f" +dependencies = [ + "axelar-wasm-std 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "axelar-wasm-std-derive 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "connection-router 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "cosmwasm-schema", + "cosmwasm-std", + "cosmwasm-storage", + "cw-storage-plus 1.1.0", + "error-stack", + "report 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", "schemars", "serde", "thiserror", @@ -7139,9 +8467,9 @@ dependencies = [ [[package]] name = "sha2" -version = "0.10.7" +version = "0.10.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "479fb9d862239e610720565ca91403019f2f00410f1864c5aa7479b950a76ed8" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" dependencies = [ "cfg-if", "cpufeatures", @@ -7202,6 +8530,12 @@ dependencies = [ "workspace-hack", ] +[[package]] +name = "shell-words" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24188a676b6ae68c3b2cb3a01be17fbf7240ce009799bb56d5b1409051e78fde" + [[package]] name = "shlex" version = "1.2.0" @@ -7240,112 +8574,1066 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "420acb44afdae038210c99e69aae24109f32f15500aa708e81d46c9f29d55fcf" [[package]] -name = "simple_asn1" -version = "0.6.2" +name = "simple_asn1" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adc4e5204eb1910f40f9cfa375f6f05b68c3abac4b6fd879c8ff5e7ae8a0a085" +dependencies = [ + "num-bigint 0.4.4", + "num-traits", + "thiserror", + "time", +] + +[[package]] +name = "siphasher" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" + +[[package]] +name = "sized-chunks" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16d69225bde7a69b235da73377861095455d298f2b970996eec25ddbb42b3d1e" +dependencies = [ + "bitmaps", + "typenum", +] + +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + +[[package]] +name = "smallvec" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "942b4a808e05215192e39f4ab80813e599068285906cc91aa64f923db842bd5a" + +[[package]] +name = "snap" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e9f0ab6ef7eb7353d9119c170a436d1bf248eea575ac42d19d12f4e34130831" + +[[package]] +name = "socket2" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "socket2" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9" +dependencies = [ + "libc", + "windows-sys 0.48.0", +] + +[[package]] +name = "solana-account-decoder" +version = "1.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06cc3f73c655469ddab1a7b8f9687e674737fc657dc2fa1e23a7abad2ec541fc" +dependencies = [ + "Inflector", + "base64 0.21.7", + "bincode", + "bs58 0.4.0", + "bv", + "lazy_static", + "serde", + "serde_derive", + "serde_json", + "solana-config-program", + "solana-sdk", + "spl-token", + "spl-token-2022", + "spl-token-group-interface", + "spl-token-metadata-interface", + "thiserror", + "zstd", +] + +[[package]] +name = "solana-clap-utils" +version = "1.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09392e795b353fa6527f19dc36cb9fa9cd40afb71215027fbafce73a6da63383" +dependencies = [ + "chrono", + "clap 2.34.0", + "rpassword", + "solana-remote-wallet", + "solana-sdk", + "thiserror", + "tiny-bip39", + "uriparse", + "url", +] + +[[package]] +name = "solana-client" +version = "1.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5515041f760618a2a669f236abc409f8aea9c865400563cdc8030eca5156f979" +dependencies = [ + "async-trait", + "bincode", + "dashmap", + "futures", + "futures-util", + "indexmap 2.2.2", + "indicatif", + "log", + "quinn", + "rayon", + "solana-connection-cache", + "solana-measure", + "solana-metrics", + "solana-pubsub-client", + "solana-quic-client", + "solana-rpc-client", + "solana-rpc-client-api", + "solana-rpc-client-nonce-utils", + "solana-sdk", + "solana-streamer", + "solana-thin-client", + "solana-tpu-client", + "solana-udp-client", + "thiserror", + "tokio", +] + +[[package]] +name = "solana-config-program" +version = "1.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17da53f316ec29baa40c8be233418da94d2cfcb79f77b8b0bb96ddd30b919525" +dependencies = [ + "bincode", + "chrono", + "serde", + "serde_derive", + "solana-program-runtime", + "solana-sdk", +] + +[[package]] +name = "solana-connection-cache" +version = "1.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90651b04cc5dd1edd4cecae2db5736ac67fafd1150fa6c8502d5957fbde8fc37" +dependencies = [ + "async-trait", + "bincode", + "crossbeam-channel", + "futures-util", + "indexmap 2.2.2", + "log", + "rand 0.8.5", + "rayon", + "rcgen 0.10.0", + "solana-measure", + "solana-metrics", + "solana-sdk", + "thiserror", + "tokio", +] + +[[package]] +name = "solana-frozen-abi" +version = "1.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b24a0e5179387f145afba79d72b27db817cecf1b9494f7cd55d42aa986ed3141" +dependencies = [ + "block-buffer 0.10.4", + "bs58 0.4.0", + "bv", + "either", + "generic-array", + "im", + "lazy_static", + "log", + "memmap2", + "rustc_version", + "serde", + "serde_bytes", + "serde_derive", + "sha2 0.10.8", + "solana-frozen-abi-macro", + "subtle", + "thiserror", +] + +[[package]] +name = "solana-frozen-abi-macro" +version = "1.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92970a9898903eb1433d42f53ca4e8f497bc05382b7bc170ea81d4d3c6ff5d58" +dependencies = [ + "proc-macro2 1.0.78", + "quote 1.0.35", + "rustc_version", + "syn 2.0.48", +] + +[[package]] +name = "solana-logger" +version = "1.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dea25cdb22fe3dfed39a9ef59b836153d226fb9e3984a1f5b6134061bfa94528" +dependencies = [ + "env_logger", + "lazy_static", + "log", +] + +[[package]] +name = "solana-measure" +version = "1.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cda9ee9ea9115543ae59f81a45d6329ecd9dca0b96dac4a55be73aab714f7ed4" +dependencies = [ + "log", + "solana-sdk", +] + +[[package]] +name = "solana-metrics" +version = "1.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f69472348763363003c51c3af98de759c0153e99a31573a649330351a45f851" +dependencies = [ + "crossbeam-channel", + "gethostname", + "lazy_static", + "log", + "reqwest", + "solana-sdk", + "thiserror", +] + +[[package]] +name = "solana-net-utils" +version = "1.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89d35642b3a76cb0920b8d044321ecd945f8d42a1c510b1d730b776ad8352b72" +dependencies = [ + "bincode", + "clap 3.2.25", + "crossbeam-channel", + "log", + "nix", + "rand 0.8.5", + "serde", + "serde_derive", + "socket2 0.5.5", + "solana-logger", + "solana-sdk", + "solana-version", + "tokio", + "url", +] + +[[package]] +name = "solana-perf" +version = "1.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbad7e94d4faf1a99b12c70c881d3f241f0e740fb595ee55d61ba0bfeee79b8f" +dependencies = [ + "ahash 0.8.7", + "bincode", + "bv", + "caps", + "curve25519-dalek 3.2.1", + "dlopen2", + "fnv", + "lazy_static", + "libc", + "log", + "nix", + "rand 0.8.5", + "rayon", + "rustc_version", + "serde", + "solana-frozen-abi", + "solana-frozen-abi-macro", + "solana-metrics", + "solana-rayon-threadlimit", + "solana-sdk", + "solana-vote-program", +] + +[[package]] +name = "solana-program" +version = "1.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0ce0a1f4487b0b9e5e53610e8c17e558d17069145281aaae9f825bfef84b16e" +dependencies = [ + "ark-bn254", + "ark-ec", + "ark-ff", + "ark-serialize", + "base64 0.21.7", + "bincode", + "bitflags 2.4.2", + "blake3", + "borsh 0.10.3", + "borsh 0.9.3", + "borsh 1.3.1", + "bs58 0.4.0", + "bv", + "bytemuck", + "cc", + "console_error_panic_hook", + "console_log", + "curve25519-dalek 3.2.1", + "getrandom 0.2.10", + "itertools 0.10.5", + "js-sys", + "lazy_static", + "libc", + "libsecp256k1 0.6.0", + "light-poseidon", + "log", + "memoffset 0.9.0", + "num-bigint 0.4.4", + "num-derive 0.4.1", + "num-traits", + "parking_lot", + "rand 0.8.5", + "rustc_version", + "rustversion", + "serde", + "serde_bytes", + "serde_derive", + "serde_json", + "sha2 0.10.8", + "sha3 0.10.8", + "solana-frozen-abi", + "solana-frozen-abi-macro", + "solana-sdk-macro", + "thiserror", + "tiny-bip39", + "wasm-bindgen", + "zeroize", +] + +[[package]] +name = "solana-program-runtime" +version = "1.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b89a4eaf965a6d6ab917bcb427997e416e9cf6d23549b713d0fba6f7f861e63" +dependencies = [ + "base64 0.21.7", + "bincode", + "eager", + "enum-iterator", + "itertools 0.10.5", + "libc", + "log", + "num-derive 0.4.1", + "num-traits", + "percentage", + "rand 0.8.5", + "rustc_version", + "serde", + "solana-frozen-abi", + "solana-frozen-abi-macro", + "solana-measure", + "solana-metrics", + "solana-sdk", + "solana_rbpf", + "thiserror", +] + +[[package]] +name = "solana-pubsub-client" +version = "1.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e84d25c9d389e243b7ebfd92ed3c7ba539fc95dbc95e09e5b9fc34aa6ef2d658" +dependencies = [ + "crossbeam-channel", + "futures-util", + "log", + "reqwest", + "semver", + "serde", + "serde_derive", + "serde_json", + "solana-account-decoder", + "solana-rpc-client-api", + "solana-sdk", + "thiserror", + "tokio", + "tokio-stream", + "tokio-tungstenite", + "tungstenite", + "url", +] + +[[package]] +name = "solana-quic-client" +version = "1.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "049cb69a18bc5023ca2adb4f20fdc9e10e97aff0a922d925a7ecb3042e67bcd1" +dependencies = [ + "async-mutex", + "async-trait", + "futures", + "itertools 0.10.5", + "lazy_static", + "log", + "quinn", + "quinn-proto", + "rcgen 0.10.0", + "rustls 0.21.10", + "solana-connection-cache", + "solana-measure", + "solana-metrics", + "solana-net-utils", + "solana-rpc-client-api", + "solana-sdk", + "solana-streamer", + "thiserror", + "tokio", +] + +[[package]] +name = "solana-rayon-threadlimit" +version = "1.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "322615866c372ac1521b41cec073a0a5df6d492794b49418c8ed47eb74114652" +dependencies = [ + "lazy_static", + "num_cpus", +] + +[[package]] +name = "solana-remote-wallet" +version = "1.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1239d53b3b544b9c5b27a65dc5d3d1fab77c124626a0aa09277e10b36badf9d3" +dependencies = [ + "console", + "dialoguer", + "log", + "num-derive 0.4.1", + "num-traits", + "parking_lot", + "qstring", + "semver", + "solana-sdk", + "thiserror", + "uriparse", +] + +[[package]] +name = "solana-rpc-client" +version = "1.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b70fe092aac226e94df0289045fce6520025141d3c131e556a19119eaac26c59" +dependencies = [ + "async-trait", + "base64 0.21.7", + "bincode", + "bs58 0.4.0", + "indicatif", + "log", + "reqwest", + "semver", + "serde", + "serde_derive", + "serde_json", + "solana-account-decoder", + "solana-rpc-client-api", + "solana-sdk", + "solana-transaction-status", + "solana-version", + "solana-vote-program", + "tokio", +] + +[[package]] +name = "solana-rpc-client-api" +version = "1.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c4d480cff245c3ba367d396da87e908095160cdf57f33efb5d1b08a7763d490" +dependencies = [ + "base64 0.21.7", + "bs58 0.4.0", + "jsonrpc-core", + "reqwest", + "semver", + "serde", + "serde_derive", + "serde_json", + "solana-account-decoder", + "solana-sdk", + "solana-transaction-status", + "solana-version", + "spl-token-2022", + "thiserror", +] + +[[package]] +name = "solana-rpc-client-nonce-utils" +version = "1.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fc78ba1bb353500b23983f0f01957c6f37f54607f1275e4a7e4de1a77743cdc" +dependencies = [ + "clap 2.34.0", + "solana-clap-utils", + "solana-rpc-client", + "solana-sdk", + "thiserror", +] + +[[package]] +name = "solana-sdk" +version = "1.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90134b382769b2e7a1d87ae97d6242f1b7ce237591e06520641ad6e2df07653c" +dependencies = [ + "assert_matches", + "base64 0.21.7", + "bincode", + "bitflags 2.4.2", + "borsh 1.3.1", + "bs58 0.4.0", + "bytemuck", + "byteorder", + "chrono", + "derivation-path", + "digest 0.10.7", + "ed25519-dalek 1.0.1", + "ed25519-dalek-bip32", + "generic-array", + "hmac 0.12.1", + "itertools 0.10.5", + "js-sys", + "lazy_static", + "libsecp256k1 0.6.0", + "log", + "memmap2", + "num-derive 0.4.1", + "num-traits", + "num_enum 0.7.2", + "pbkdf2 0.11.0", + "qstring", + "qualifier_attr", + "rand 0.7.3", + "rand 0.8.5", + "rustc_version", + "rustversion", + "serde", + "serde_bytes", + "serde_derive", + "serde_json", + "serde_with 2.3.3", + "sha2 0.10.8", + "sha3 0.10.8", + "siphasher", + "solana-frozen-abi", + "solana-frozen-abi-macro", + "solana-logger", + "solana-program", + "solana-sdk-macro", + "thiserror", + "uriparse", + "wasm-bindgen", +] + +[[package]] +name = "solana-sdk-macro" +version = "1.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3e3cdf8616a66e99343c3f99c39f311b4dc3e13977a4c96d7bbaa82dffd2fc5" +dependencies = [ + "bs58 0.4.0", + "proc-macro2 1.0.78", + "quote 1.0.35", + "rustversion", + "syn 2.0.48", +] + +[[package]] +name = "solana-security-txt" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "468aa43b7edb1f9b7b7b686d5c3aeb6630dc1708e86e31343499dd5c4d775183" + +[[package]] +name = "solana-streamer" +version = "1.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d18572dc946c176ff564c353a97c4bd8ce89774a95d98f1a9345c28e223948cd" +dependencies = [ + "async-channel", + "bytes", + "crossbeam-channel", + "futures-util", + "histogram", + "indexmap 2.2.2", + "itertools 0.10.5", + "libc", + "log", + "nix", + "pem", + "percentage", + "pkcs8 0.8.0", + "quinn", + "quinn-proto", + "rand 0.8.5", + "rcgen 0.10.0", + "rustls 0.21.10", + "solana-metrics", + "solana-perf", + "solana-sdk", + "thiserror", + "tokio", + "x509-parser", +] + +[[package]] +name = "solana-thin-client" +version = "1.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "994469881eda11c8160b6ad7f42b3eb53125b91cc4328675fcfb784a79a878e4" +dependencies = [ + "bincode", + "log", + "rayon", + "solana-connection-cache", + "solana-rpc-client", + "solana-rpc-client-api", + "solana-sdk", +] + +[[package]] +name = "solana-tpu-client" +version = "1.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6bc1d8362ac84b281a880705faf5c0c4f813c4b335bac2456e89f4fee93aab7" +dependencies = [ + "async-trait", + "bincode", + "futures-util", + "indexmap 2.2.2", + "indicatif", + "log", + "rayon", + "solana-connection-cache", + "solana-measure", + "solana-metrics", + "solana-pubsub-client", + "solana-rpc-client", + "solana-rpc-client-api", + "solana-sdk", + "thiserror", + "tokio", +] + +[[package]] +name = "solana-transaction-status" +version = "1.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49b96a0b16e7bba624f778efd7ee532f91b0c540d453e25a02e9a43d590901bb" +dependencies = [ + "Inflector", + "base64 0.21.7", + "bincode", + "borsh 0.10.3", + "bs58 0.4.0", + "lazy_static", + "log", + "serde", + "serde_derive", + "serde_json", + "solana-account-decoder", + "solana-sdk", + "spl-associated-token-account", + "spl-memo", + "spl-token", + "spl-token-2022", + "thiserror", +] + +[[package]] +name = "solana-udp-client" +version = "1.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d0bf02c785bd19e539801a0dd0ac603c6fb268237a21bdd330c3610d0140395" +dependencies = [ + "async-trait", + "solana-connection-cache", + "solana-net-utils", + "solana-sdk", + "solana-streamer", + "thiserror", + "tokio", +] + +[[package]] +name = "solana-version" +version = "1.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f184e53aa8f66521fcae40cab29817ff665e86c683f40e2acde9def04e928cb" +dependencies = [ + "log", + "rustc_version", + "semver", + "serde", + "serde_derive", + "solana-frozen-abi", + "solana-frozen-abi-macro", + "solana-sdk", +] + +[[package]] +name = "solana-vote-program" +version = "1.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f1e7878ebcdd5b3c681493e674f53bdfcee7d9a455d32e8813484c602ffd74c" +dependencies = [ + "bincode", + "log", + "num-derive 0.4.1", + "num-traits", + "rustc_version", + "serde", + "serde_derive", + "solana-frozen-abi", + "solana-frozen-abi-macro", + "solana-metrics", + "solana-program", + "solana-program-runtime", + "solana-sdk", + "thiserror", +] + +[[package]] +name = "solana-zk-token-sdk" +version = "1.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29693ea4eac0f076b9beb54db7c11d0220b110620aeee56a32ff2a49a170ebe8" +dependencies = [ + "aes-gcm-siv", + "base64 0.21.7", + "bincode", + "bytemuck", + "byteorder", + "curve25519-dalek 3.2.1", + "getrandom 0.1.16", + "itertools 0.10.5", + "lazy_static", + "merlin", + "num-derive 0.4.1", + "num-traits", + "rand 0.7.3", + "serde", + "serde_json", + "sha3 0.9.1", + "solana-program", + "solana-sdk", + "subtle", + "thiserror", + "zeroize", +] + +[[package]] +name = "solana_rbpf" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d457cc2ba742c120492a64b7fa60e22c575e891f6b55039f4d736568fb112a3" +dependencies = [ + "byteorder", + "combine", + "goblin", + "hash32", + "libc", + "log", + "rand 0.8.5", + "rustc-demangle", + "scroll", + "thiserror", + "winapi", +] + +[[package]] +name = "solang-parser" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cb9fa2fa2fa6837be8a2495486ff92e3ffe68a99b6eeba288e139efdd842457" +dependencies = [ + "itertools 0.11.0", + "lalrpop", + "lalrpop-util", + "phf", + "thiserror", + "unicode-xid 0.2.4", +] + +[[package]] +name = "spin" +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.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d01ac02a6ccf3e07db148d2be087da624fea0221a16152ed01f0496a6b0a27" +dependencies = [ + "base64ct", + "der 0.5.1", +] + +[[package]] +name = "spki" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67cf02bbac7a337dc36e4f5a693db6c21e7863f45070f7064577eb4367a3212b" +dependencies = [ + "base64ct", + "der 0.6.1", +] + +[[package]] +name = "spki" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d1e996ef02c474957d681f1b05213dfb0abab947b446a62d37770b23500184a" +dependencies = [ + "base64ct", + "der 0.7.8", +] + +[[package]] +name = "spl-associated-token-account" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "992d9c64c2564cc8f63a4b508bf3ebcdf2254b0429b13cd1d31adb6162432a5f" +dependencies = [ + "assert_matches", + "borsh 0.10.3", + "num-derive 0.4.1", + "num-traits", + "solana-program", + "spl-token", + "spl-token-2022", + "thiserror", +] + +[[package]] +name = "spl-discriminator" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cce5d563b58ef1bb2cdbbfe0dfb9ffdc24903b10ae6a4df2d8f425ece375033f" +dependencies = [ + "bytemuck", + "solana-program", + "spl-discriminator-derive", +] + +[[package]] +name = "spl-discriminator-derive" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fadbefec4f3c678215ca72bd71862697bb06b41fd77c0088902dd3203354387b" +dependencies = [ + "quote 1.0.35", + "spl-discriminator-syn", + "syn 2.0.48", +] + +[[package]] +name = "spl-discriminator-syn" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adc4e5204eb1910f40f9cfa375f6f05b68c3abac4b6fd879c8ff5e7ae8a0a085" +checksum = "0e5f2044ca42c8938d54d1255ce599c79a1ffd86b677dfab695caa20f9ffc3f2" dependencies = [ - "num-bigint 0.4.4", - "num-traits", + "proc-macro2 1.0.78", + "quote 1.0.35", + "sha2 0.10.8", + "syn 2.0.48", "thiserror", - "time", ] [[package]] -name = "siphasher" -version = "0.3.11" +name = "spl-memo" +version = "4.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" +checksum = "f0f180b03318c3dbab3ef4e1e4d46d5211ae3c780940dd0a28695aba4b59a75a" +dependencies = [ + "solana-program", +] [[package]] -name = "sized-chunks" -version = "0.6.5" +name = "spl-pod" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16d69225bde7a69b235da73377861095455d298f2b970996eec25ddbb42b3d1e" +checksum = "2881dddfca792737c0706fa0175345ab282b1b0879c7d877bad129645737c079" dependencies = [ - "bitmaps", - "typenum", + "borsh 0.10.3", + "bytemuck", + "solana-program", + "solana-zk-token-sdk", + "spl-program-error", ] [[package]] -name = "slab" -version = "0.4.9" +name = "spl-program-error" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +checksum = "249e0318493b6bcf27ae9902600566c689b7dfba9f1bdff5893e92253374e78c" dependencies = [ - "autocfg", + "num-derive 0.4.1", + "num-traits", + "solana-program", + "spl-program-error-derive", + "thiserror", ] [[package]] -name = "smallvec" -version = "1.11.1" +name = "spl-program-error-derive" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "942b4a808e05215192e39f4ab80813e599068285906cc91aa64f923db842bd5a" +checksum = "ab5269c8e868da17b6552ef35a51355a017bd8e0eae269c201fef830d35fa52c" +dependencies = [ + "proc-macro2 1.0.78", + "quote 1.0.35", + "sha2 0.10.8", + "syn 2.0.48", +] [[package]] -name = "snap" -version = "1.1.0" +name = "spl-tlv-account-resolution" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e9f0ab6ef7eb7353d9119c170a436d1bf248eea575ac42d19d12f4e34130831" +checksum = "615d381f48ddd2bb3c57c7f7fb207591a2a05054639b18a62e785117dd7a8683" +dependencies = [ + "bytemuck", + "solana-program", + "spl-discriminator", + "spl-pod", + "spl-program-error", + "spl-type-length-value", +] [[package]] -name = "socket2" -version = "0.4.9" +name = "spl-token" +version = "4.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662" +checksum = "08459ba1b8f7c1020b4582c4edf0f5c7511a5e099a7a97570c9698d4f2337060" dependencies = [ - "libc", - "winapi", + "arrayref", + "bytemuck", + "num-derive 0.3.3", + "num-traits", + "num_enum 0.6.1", + "solana-program", + "thiserror", ] [[package]] -name = "socket2" -version = "0.5.4" +name = "spl-token-2022" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4031e820eb552adee9295814c0ced9e5cf38ddf1e8b7d566d6de8e2538ea989e" +checksum = "d697fac19fd74ff472dfcc13f0b442dd71403178ce1de7b5d16f83a33561c059" dependencies = [ - "libc", - "windows-sys 0.48.0", + "arrayref", + "bytemuck", + "num-derive 0.4.1", + "num-traits", + "num_enum 0.7.2", + "solana-program", + "solana-security-txt", + "solana-zk-token-sdk", + "spl-memo", + "spl-pod", + "spl-token", + "spl-token-group-interface", + "spl-token-metadata-interface", + "spl-transfer-hook-interface", + "spl-type-length-value", + "thiserror", ] [[package]] -name = "solang-parser" -version = "0.3.2" +name = "spl-token-group-interface" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cb9fa2fa2fa6837be8a2495486ff92e3ffe68a99b6eeba288e139efdd842457" +checksum = "b889509d49fa74a4a033ca5dae6c2307e9e918122d97e58562f5c4ffa795c75d" dependencies = [ - "itertools 0.11.0", - "lalrpop", - "lalrpop-util", - "phf", - "thiserror", - "unicode-xid 0.2.4", + "bytemuck", + "solana-program", + "spl-discriminator", + "spl-pod", + "spl-program-error", ] [[package]] -name = "spin" -version = "0.5.2" +name = "spl-token-metadata-interface" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" +checksum = "4c16ce3ba6979645fb7627aa1e435576172dd63088dc7848cb09aa331fa1fe4f" +dependencies = [ + "borsh 0.10.3", + "solana-program", + "spl-discriminator", + "spl-pod", + "spl-program-error", + "spl-type-length-value", +] [[package]] -name = "spki" -version = "0.6.0" +name = "spl-transfer-hook-interface" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67cf02bbac7a337dc36e4f5a693db6c21e7863f45070f7064577eb4367a3212b" +checksum = "7aabdb7c471566f6ddcee724beb8618449ea24b399e58d464d6b5bc7db550259" dependencies = [ - "base64ct", - "der 0.6.1", + "arrayref", + "bytemuck", + "solana-program", + "spl-discriminator", + "spl-pod", + "spl-program-error", + "spl-tlv-account-resolution", + "spl-type-length-value", ] [[package]] -name = "spki" -version = "0.7.2" +name = "spl-type-length-value" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d1e996ef02c474957d681f1b05213dfb0abab947b446a62d37770b23500184a" +checksum = "a468e6f6371f9c69aae760186ea9f1a01c2908351b06a5e0026d21cfc4d7ecac" dependencies = [ - "base64ct", - "der 0.7.8", + "bytemuck", + "solana-program", + "spl-discriminator", + "spl-pod", + "spl-program-error", ] [[package]] @@ -7367,6 +9655,12 @@ dependencies = [ "precomputed-hash", ] +[[package]] +name = "strsim" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" + [[package]] name = "strsim" version = "0.10.0" @@ -7398,8 +9692,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59" dependencies = [ "heck 0.4.1", - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.78", + "quote 1.0.35", "rustversion", "syn 1.0.109", ] @@ -7411,10 +9705,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ad8d03b598d3d0fff69bf533ee3ef19b8eeb342729596df84bcc7e1f96ec4059" dependencies = [ "heck 0.4.1", - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.78", + "quote 1.0.35", "rustversion", - "syn 2.0.37", + "syn 2.0.48", ] [[package]] @@ -7555,10 +9849,10 @@ version = "0.7.0" source = "git+https://github.com/mystenlabs/sui?tag=mainnet-v1.14.2#299cbeafbb6aa5601e08f00ac24bd647c61a63e2" dependencies = [ "msim-macros", - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.78", + "quote 1.0.35", "sui-enum-compat-util", - "syn 2.0.37", + "syn 2.0.48", "workspace-hack", ] @@ -7567,7 +9861,7 @@ name = "sui-protocol-config" version = "0.1.0" source = "git+https://github.com/mystenlabs/sui?tag=mainnet-v1.14.2#299cbeafbb6aa5601e08f00ac24bd647c61a63e2" dependencies = [ - "clap", + "clap 4.4.4", "insta", "schemars", "serde", @@ -7582,8 +9876,8 @@ name = "sui-protocol-config-macros" version = "0.1.0" source = "git+https://github.com/mystenlabs/sui?tag=mainnet-v1.14.2#299cbeafbb6aa5601e08f00ac24bd647c61a63e2" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.78", + "quote 1.0.35", "syn 1.0.109", "workspace-hack", ] @@ -7624,7 +9918,7 @@ dependencies = [ "prometheus", "proptest", "proptest-derive", - "rand", + "rand 0.8.5", "roaring", "schemars", "serde", @@ -7676,7 +9970,7 @@ dependencies = [ "semver", "serde", "serde_json", - "sha2 0.10.7", + "sha2 0.10.8", "thiserror", "url", "zip", @@ -7699,22 +9993,34 @@ version = "1.0.109" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.78", + "quote 1.0.35", "unicode-ident", ] [[package]] name = "syn" -version = "2.0.37" +version = "2.0.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7303ef2c05cd654186cb250d29049a24840ca25d2747c25c0381c8d9e2f582e8" +checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.78", + "quote 1.0.35", "unicode-ident", ] +[[package]] +name = "syn_derive" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1329189c02ff984e9736652b1631330da25eaa6bc639089ed4915d25446cbe7b" +dependencies = [ + "proc-macro-error", + "proc-macro2 1.0.78", + "quote 1.0.35", + "syn 2.0.48", +] + [[package]] name = "sync_wrapper" version = "0.1.2" @@ -7727,12 +10033,33 @@ version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.78", + "quote 1.0.35", "syn 1.0.109", "unicode-xid 0.2.4", ] +[[package]] +name = "system-configuration" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "tabled" version = "0.12.2" @@ -7752,8 +10079,8 @@ checksum = "99f688a08b54f4f02f0a3c382aefdb7884d3d69609f785bd253dc033243e3fe4" dependencies = [ "heck 0.4.1", "proc-macro-error", - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.78", + "quote 1.0.35", "syn 1.0.109", ] @@ -7798,7 +10125,7 @@ dependencies = [ "serde_bytes", "serde_json", "serde_repr", - "sha2 0.10.7", + "sha2 0.10.8", "signature 2.1.0", "subtle", "subtle-encoding", @@ -7826,7 +10153,7 @@ dependencies = [ "serde_bytes", "serde_json", "serde_repr", - "sha2 0.10.7", + "sha2 0.10.8", "signature 2.1.0", "subtle", "subtle-encoding", @@ -7856,7 +10183,7 @@ checksum = "d5895470f28c530f8ae8c4071bf8190304ce00bd131d25e81730453124a3375c" dependencies = [ "bytes", "flex-error", - "num-derive", + "num-derive 0.3.3", "num-traits", "prost 0.11.9", "prost-types", @@ -7874,7 +10201,7 @@ checksum = "c0cec054567d16d85e8c3f6a3139963d1a66d9d3051ed545d31562550e9bcc3d" dependencies = [ "bytes", "flex-error", - "num-derive", + "num-derive 0.3.3", "num-traits", "prost 0.11.9", "prost-types", @@ -7891,7 +10218,7 @@ source = "git+https://github.com/axelarnetwork/tendermint-rs.git?branch=v0.33.x# dependencies = [ "bytes", "flex-error", - "num-derive", + "num-derive 0.3.3", "num-traits", "prost 0.11.9", "prost-types", @@ -7910,7 +10237,7 @@ dependencies = [ "bytes", "flex-error", "futures", - "getrandom", + "getrandom 0.2.10", "http", "hyper", "hyper-proxy", @@ -7961,24 +10288,39 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3369f5ac52d5eb6ab48c6b4ffdc8efbcad6b89c765749064ba298f2c68a16a76" +[[package]] +name = "textwrap" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" +dependencies = [ + "unicode-width", +] + +[[package]] +name = "textwrap" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d" + [[package]] name = "thiserror" -version = "1.0.48" +version = "1.0.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d6d7a740b8a666a7e828dd00da9c0dc290dff53154ea77ac109281de90589b7" +checksum = "d54378c645627613241d077a3a79db965db602882668f9136ac42af9ecb730ad" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.48" +version = "1.0.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49922ecae66cc8a249b77e68d1d0623c1b2c514f0060c27cdc68bd62a1219d35" +checksum = "fa0faa943b50f3db30a20aa7e265dbc66076993efed8463e8de414e5d06d3471" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2 1.0.78", + "quote 1.0.35", + "syn 2.0.48", ] [[package]] @@ -8028,6 +10370,25 @@ dependencies = [ "time-core", ] +[[package]] +name = "tiny-bip39" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffc59cb9dfc85bb312c3a78fd6aa8a8582e310b0fa885d5bb877f6dcc601839d" +dependencies = [ + "anyhow", + "hmac 0.8.1", + "once_cell", + "pbkdf2 0.4.0", + "rand 0.7.3", + "rustc-hash", + "sha2 0.9.9", + "thiserror", + "unicode-normalization", + "wasm-bindgen", + "zeroize", +] + [[package]] name = "tiny-keccak" version = "2.0.2" @@ -8062,13 +10423,13 @@ dependencies = [ "der 0.7.8", "ecdsa", "ed25519 2.2.2", - "ed25519-dalek", - "hmac", + "ed25519-dalek 2.1.0", + "hmac 0.12.1", "k256", - "rand", - "rand_chacha", + "rand 0.8.5", + "rand_chacha 0.3.1", "serde", - "sha2 0.10.7", + "sha2 0.10.8", "tracing", "zeroize", ] @@ -8087,7 +10448,7 @@ dependencies = [ "parking_lot", "pin-project-lite", "signal-hook-registry", - "socket2 0.5.4", + "socket2 0.5.5", "tokio-macros 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "windows-sys 0.48.0", ] @@ -8108,9 +10469,9 @@ version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2 1.0.78", + "quote 1.0.35", + "syn 2.0.48", ] [[package]] @@ -8118,9 +10479,9 @@ name = "tokio-macros" version = "2.1.0" source = "git+https://github.com/mystenmark/tokio-madsim-fork.git?rev=e4693500118d5e79ce098ee6dfc2c48f3ef19e45#e4693500118d5e79ce098ee6dfc2c48f3ef19e45" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2 1.0.78", + "quote 1.0.35", + "syn 2.0.48", ] [[package]] @@ -8140,7 +10501,7 @@ version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" dependencies = [ - "rustls 0.21.7", + "rustls 0.21.10", "tokio", ] @@ -8158,17 +10519,17 @@ dependencies = [ [[package]] name = "tokio-tungstenite" -version = "0.20.0" +version = "0.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b2dbec703c26b00d74844519606ef15d09a7d6857860f84ad223dec002ddea2" +checksum = "212d5dcb2a1ce06d81107c3d0ffa3121fe974b73f068c8282cb1c32328113b6c" dependencies = [ "futures-util", "log", - "rustls 0.21.7", + "rustls 0.21.10", "tokio", "tokio-rustls 0.24.1", "tungstenite", - "webpki-roots 0.23.1", + "webpki-roots 0.25.2", ] [[package]] @@ -8220,14 +10581,14 @@ dependencies = [ "serde", "serde_spanned", "toml_datetime", - "toml_edit", + "toml_edit 0.19.15", ] [[package]] name = "toml_datetime" -version = "0.6.3" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" +checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" dependencies = [ "serde", ] @@ -8238,13 +10599,24 @@ version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap 2.0.0", + "indexmap 2.2.2", "serde", "serde_spanned", "toml_datetime", "winnow", ] +[[package]] +name = "toml_edit" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" +dependencies = [ + "indexmap 2.2.2", + "toml_datetime", + "winnow", +] + [[package]] name = "tonic" version = "0.8.3" @@ -8286,7 +10658,7 @@ dependencies = [ "async-stream", "async-trait", "axum", - "base64 0.21.4", + "base64 0.21.7", "bytes", "h2", "http", @@ -8296,7 +10668,7 @@ dependencies = [ "percent-encoding", "pin-project", "prost 0.12.3", - "rustls 0.21.7", + "rustls 0.21.10", "rustls-pemfile", "tokio", "tokio-rustls 0.24.1", @@ -8314,9 +10686,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5bf5e9b9c0f7e0a7c027dcfaba7b2c60816c7049171f679d99ee2ff65d0de8c4" dependencies = [ "prettyplease 0.1.25", - "proc-macro2 1.0.67", + "proc-macro2 1.0.78", "prost-build", - "quote 1.0.33", + "quote 1.0.35", "syn 1.0.109", ] @@ -8345,7 +10717,7 @@ dependencies = [ "indexmap 1.9.3", "pin-project", "pin-project-lite", - "rand", + "rand 0.8.5", "slab", "tokio", "tokio-util 0.7.9", @@ -8360,7 +10732,7 @@ version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f873044bf02dd1e8239e9c1293ea39dad76dc594ec16185d0a1bf31d8dc8d858" dependencies = [ - "async-compression", + "async-compression 0.3.15", "base64 0.13.1", "bitflags 1.3.2", "bytes", @@ -8415,9 +10787,9 @@ version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2 1.0.78", + "quote 1.0.35", + "syn 2.0.48", ] [[package]] @@ -8488,8 +10860,8 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b79e2e9c9ab44c6d7c20d5976961b47e8f49ac199154daa514b77cd1ab536625" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.78", + "quote 1.0.35", "syn 1.0.109", ] @@ -8507,9 +10879,9 @@ checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" [[package]] name = "tungstenite" -version = "0.20.0" +version = "0.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e862a1c4128df0112ab625f55cd5c934bcb4312ba80b39ae4b4835a3fd58e649" +checksum = "9e3dac10fd62eaf6617d3a904ae222845979aec67c615d1c842b4002c7666fb9" dependencies = [ "byteorder", "bytes", @@ -8517,12 +10889,13 @@ dependencies = [ "http", "httparse", "log", - "rand", - "rustls 0.21.7", + "rand 0.8.5", + "rustls 0.21.10", "sha1", "thiserror", "url", "utf-8", + "webpki-roots 0.24.0", ] [[package]] @@ -8542,7 +10915,7 @@ dependencies = [ "once_cell", "ouroboros", "prometheus", - "rand", + "rand 0.8.5", "rocksdb", "serde", "sui-macros", @@ -8637,6 +11010,16 @@ version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" +[[package]] +name = "universal-hash" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f214e8f697e925001e66ec2c6e37a4ef93f0f78c2eed7814394e10c62025b05" +dependencies = [ + "generic-array", + "subtle", +] + [[package]] name = "universal-hash" version = "0.5.1" @@ -8647,6 +11030,15 @@ dependencies = [ "subtle", ] +[[package]] +name = "unreachable" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "382810877fe448991dfc7f0dd6e3ae5d58088fd0ea5e35189655f84e6814fa56" +dependencies = [ + "void", +] + [[package]] name = "unsigned-varint" version = "0.7.2" @@ -8659,11 +11051,27 @@ version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + +[[package]] +name = "uriparse" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0200d0fc04d809396c2ad43f3c95da3582a2556eba8d453c1087f4120ee352ff" +dependencies = [ + "fnv", + "lazy_static", +] + [[package]] name = "url" -version = "2.4.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "143b538f18257fac9cad154828a57c6bf5157e1aa604d4816b5995bf6de87ae5" +checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" dependencies = [ "form_urlencoded", "idna", @@ -8688,7 +11096,7 @@ version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" dependencies = [ - "getrandom", + "getrandom 0.2.10", "serde", ] @@ -8698,8 +11106,8 @@ version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "79daa5ed5740825c40b389c5e50312b9c86df53fccd33f281df655642b43869d" dependencies = [ - "getrandom", - "rand", + "getrandom 0.2.10", + "rand 0.8.5", ] [[package]] @@ -8717,8 +11125,8 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d44690c645190cfce32f91a1582281654b2338c6073fa250b0949fd25c55b32" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.78", + "quote 1.0.35", "syn 1.0.109", ] @@ -8738,7 +11146,7 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aae2faf80ac463422992abf4de234731279c058aaf33171ca70277c98406b124" dependencies = [ - "quote 1.0.33", + "quote 1.0.35", "syn 1.0.109", ] @@ -8748,19 +11156,31 @@ version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" +[[package]] +name = "vec_map" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" + [[package]] name = "version_check" version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +[[package]] +name = "void" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" + [[package]] name = "voting-verifier" version = "0.1.0" dependencies = [ - "axelar-wasm-std", - "axelar-wasm-std-derive", - "connection-router", + "axelar-wasm-std 0.1.0", + "axelar-wasm-std-derive 0.1.0", + "connection-router 0.1.0", "cosmwasm-schema", "cosmwasm-std", "cosmwasm-storage", @@ -8768,12 +11188,36 @@ dependencies = [ "cw-storage-plus 1.1.0", "either", "error-stack", - "report", - "rewards", + "report 0.1.0", + "rewards 0.1.0", + "schemars", + "serde", + "serde_json", + "service-registry 0.1.0", + "sha3 0.10.8", + "thiserror", +] + +[[package]] +name = "voting-verifier" +version = "0.1.0" +source = "git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f#c0904e1c72c99a174a93b5f6c18b30f52d20b71f" +dependencies = [ + "axelar-wasm-std 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "axelar-wasm-std-derive 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "connection-router 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "cosmwasm-schema", + "cosmwasm-std", + "cosmwasm-storage", + "cw-storage-plus 1.1.0", + "either", + "error-stack", + "report 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "rewards 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", "schemars", "serde", "serde_json", - "service-registry", + "service-registry 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", "sha3 0.10.8", "thiserror", ] @@ -8806,6 +11250,12 @@ dependencies = [ "try-lock", ] +[[package]] +name = "wasi" +version = "0.9.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" + [[package]] name = "wasi" version = "0.11.0+wasi-snapshot-preview1" @@ -8814,9 +11264,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.87" +version = "0.2.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342" +checksum = "b1223296a201415c7fad14792dbefaace9bd52b62d33453ade1c5b5f07555406" dependencies = [ "cfg-if", "wasm-bindgen-macro", @@ -8824,16 +11274,16 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.87" +version = "0.2.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd" +checksum = "fcdc935b63408d58a32f8cc9738a0bffd8f05cc7c002086c6ef20b7312ad9dcd" dependencies = [ "bumpalo", "log", "once_cell", - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2 1.0.78", + "quote 1.0.35", + "syn 2.0.48", "wasm-bindgen-shared", ] @@ -8851,32 +11301,32 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.87" +version = "0.2.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d" +checksum = "3e4c238561b2d428924c49815533a8b9121c664599558a5d9ec51f8a1740a999" dependencies = [ - "quote 1.0.33", + "quote 1.0.35", "wasm-bindgen-macro-support", ] [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.87" +version = "0.2.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b" +checksum = "bae1abb6806dc1ad9e560ed242107c0f6c84335f1749dd4e8ddb012ebd5e25a7" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2 1.0.78", + "quote 1.0.35", + "syn 2.0.48", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.87" +version = "0.2.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1" +checksum = "4d91413b1c31d7539ba5ef2451af3f0b833a005eb27a631cec32bc0635a8602b" [[package]] name = "web-sys" @@ -8894,8 +11344,8 @@ version = "0.21.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8e38c0608262c46d4a56202ebabdeb094cef7e560ca7a226c6bf055188aa4ea" dependencies = [ - "ring", - "untrusted", + "ring 0.16.20", + "untrusted 0.7.1", ] [[package]] @@ -8909,11 +11359,11 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "0.23.1" +version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b03058f88386e5ff5310d9111d53f48b17d732b401aeb83a8d5190f2ac459338" +checksum = "b291546d5d9d1eab74f069c77749f2cb8504a12caa20f0f2de93ddbf6f411888" dependencies = [ - "rustls-webpki 0.100.3", + "rustls-webpki", ] [[package]] @@ -8990,15 +11440,6 @@ dependencies = [ "windows-targets 0.48.5", ] -[[package]] -name = "windows-sys" -version = "0.45.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" -dependencies = [ - "windows-targets 0.42.2", -] - [[package]] name = "windows-sys" version = "0.48.0" @@ -9009,18 +11450,12 @@ dependencies = [ ] [[package]] -name = "windows-targets" -version = "0.42.2" +name = "windows-sys" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows_aarch64_gnullvm 0.42.2", - "windows_aarch64_msvc 0.42.2", - "windows_i686_gnu 0.42.2", - "windows_i686_msvc 0.42.2", - "windows_x86_64_gnu 0.42.2", - "windows_x86_64_gnullvm 0.42.2", - "windows_x86_64_msvc 0.42.2", + "windows-targets 0.52.0", ] [[package]] @@ -9039,10 +11474,19 @@ dependencies = [ ] [[package]] -name = "windows_aarch64_gnullvm" -version = "0.42.2" +name = "windows-targets" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" +checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd" +dependencies = [ + "windows_aarch64_gnullvm 0.52.0", + "windows_aarch64_msvc 0.52.0", + "windows_i686_gnu 0.52.0", + "windows_i686_msvc 0.52.0", + "windows_x86_64_gnu 0.52.0", + "windows_x86_64_gnullvm 0.52.0", + "windows_x86_64_msvc 0.52.0", +] [[package]] name = "windows_aarch64_gnullvm" @@ -9051,10 +11495,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" [[package]] -name = "windows_aarch64_msvc" -version = "0.42.2" +name = "windows_aarch64_gnullvm" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" +checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea" [[package]] name = "windows_aarch64_msvc" @@ -9063,10 +11507,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" [[package]] -name = "windows_i686_gnu" -version = "0.42.2" +name = "windows_aarch64_msvc" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" +checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef" [[package]] name = "windows_i686_gnu" @@ -9075,10 +11519,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" [[package]] -name = "windows_i686_msvc" -version = "0.42.2" +name = "windows_i686_gnu" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" +checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313" [[package]] name = "windows_i686_msvc" @@ -9087,10 +11531,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" [[package]] -name = "windows_x86_64_gnu" -version = "0.42.2" +name = "windows_i686_msvc" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" +checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a" [[package]] name = "windows_x86_64_gnu" @@ -9099,10 +11543,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" [[package]] -name = "windows_x86_64_gnullvm" -version = "0.42.2" +name = "windows_x86_64_gnu" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" +checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd" [[package]] name = "windows_x86_64_gnullvm" @@ -9111,10 +11555,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" [[package]] -name = "windows_x86_64_msvc" -version = "0.42.2" +name = "windows_x86_64_gnullvm" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" +checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e" [[package]] name = "windows_x86_64_msvc" @@ -9122,6 +11566,12 @@ version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" + [[package]] name = "winnow" version = "0.5.15" @@ -9223,6 +11673,26 @@ dependencies = [ "time", ] +[[package]] +name = "zerocopy" +version = "0.7.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6" +dependencies = [ + "proc-macro2 1.0.78", + "quote 1.0.35", + "syn 2.0.48", +] + [[package]] name = "zeroize" version = "1.6.0" @@ -9238,9 +11708,9 @@ version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2 1.0.78", + "quote 1.0.35", + "syn 2.0.48", ] [[package]] @@ -9249,14 +11719,14 @@ version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "760394e246e4c28189f19d488c058bf16f564016aefac5d32bb1f3b51d5e9261" dependencies = [ - "aes", + "aes 0.8.3", "byteorder", "bzip2", "constant_time_eq 0.1.5", "crc32fast", "crossbeam-utils", "flate2", - "hmac", + "hmac 0.12.1", "pbkdf2 0.11.0", "sha1", "time", diff --git a/Cargo.toml b/Cargo.toml index b0c180b50..e7299c55c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -38,3 +38,17 @@ debug-assertions = false codegen-units = 1 incremental = false overflow-checks = true + +[patch.crates-io] +# aes-gcm-siv 0.10.3 and curve25519-dalek 3.x pin zeroize to <1.4 +# which conflicts with other dependencies requiring zeroize ^1.5. +# We’re patching both crates to unpin zeroize. +# +# For aes-gcm-siv we’re using the same revision Solana uses in +# an (as of now) unreleased commit, see +# https://github.com/solana-labs/solana/commit/01f1bf27994d9813fadfcd134befd3a449aaa0bd +# +# For curve25519-dalek we’re using commit from a PR, see +# https://github.com/dalek-cryptography/curve25519-dalek/pull/606 +aes-gcm-siv = { git = "https://github.com/RustCrypto/AEADs", rev = "6105d7a5591aefa646a95d12b5e8d3f55a9214ef" } +curve25519-dalek = { git = "https://github.com/dalek-cryptography/curve25519-dalek", rev = "8274d5cbb6fc3f38cdc742b4798173895cd2a290" } diff --git a/ampd/Cargo.toml b/ampd/Cargo.toml index 144f9d96a..bcb51f725 100644 --- a/ampd/Cargo.toml +++ b/ampd/Cargo.toml @@ -9,6 +9,7 @@ async-trait = "0.1.59" axelar-wasm-std = { workspace = true } base64 = "0.21.2" bcs = "0.1.5" +borsh = { version = "1.2.0", features = ["derive"] } clap = { version = "4.2.7", features = ["derive", "cargo"] } config = "0.13.2" connection-router = { workspace = true } @@ -38,8 +39,14 @@ serde = { version = "1.0.147", features = ["derive"] } serde_json = "1.0.89" serde_with = "3.2.0" service-registry = { workspace = true } +solana-client = "1.18.1" +solana-program = "1.18.1" +solana-sdk = "1.18.1" +solana-transaction-status = "1.17.9" sui-json-rpc-types = { git = "https://github.com/mystenlabs/sui", tag = "mainnet-v1.14.2" } -sui-types = { git = "https://github.com/mystenlabs/sui", features = ["test-utils"], tag = "mainnet-v1.14.2" } +sui-types = { git = "https://github.com/mystenlabs/sui", features = [ + "test-utils", +], tag = "mainnet-v1.14.2" } # Need to switch to our own fork of tendermint and tendermint-rpc due to event attribute value being nullable. # Can switch back once https://github.com/informalsystems/tendermint-rs/issues/1216 is resolved. # The fix for the issue is at https://github.com/axelarnetwork/tendermint-rs/commit/e97033e20e660a7e707ea86db174ec047bbba50d. @@ -66,7 +73,23 @@ elliptic-curve = "0.13.5" generic-array = "0.14.7" rand = "0.8.5" random-string = "1.0.0" +gateway = { git = "ssh://git@github.com/eigerco/solana-axelar.git", branch = "poc" } ## Temporary POC repo import while its not public. [build-dependencies] ethers = "2.0.8" tonic-build = "0.8.3" + +[patch.crates-io] +# aes-gcm-siv 0.10.3 and curve25519-dalek 3.x pin zeroize to <1.4 +# which conflicts with other dependencies requiring zeroize ^1.5. +# We’re patching both crates to unpin zeroize. +# +# For aes-gcm-siv we’re using the same revision Solana uses in +# an (as of now) unreleased commit, see +# https://github.com/solana-labs/solana/commit/01f1bf27994d9813fadfcd134befd3a449aaa0bd +# +# For curve25519-dalek we’re using commit from a PR, see +# https://github.com/dalek-cryptography/curve25519-dalek/pull/606 +aes-gcm-siv = { git = "https://github.com/RustCrypto/AEADs", rev = "6105d7a5591aefa646a95d12b5e8d3f55a9214ef" } +curve25519-dalek = { git = "https://github.com/dalek-cryptography/curve25519-dalek", rev = "8274d5cbb6fc3f38cdc742b4798173895cd2a290" } +ahash = "=0.8.6" diff --git a/ampd/src/handlers/config.rs b/ampd/src/handlers/config.rs index 30742c763..2a5ca4d63 100644 --- a/ampd/src/handlers/config.rs +++ b/ampd/src/handlers/config.rs @@ -13,6 +13,13 @@ pub struct Chain { pub rpc_url: Url, } + +#[derive(Debug, Deserialize, Serialize, PartialEq)] +pub struct GenericChain { + pub name: connection_router::state::ChainName, + pub rpc_url: Url, +} + with_prefix!(chain "chain_"); #[derive(Debug, Deserialize, Serialize, PartialEq)] #[serde(tag = "type")] @@ -38,6 +45,11 @@ pub enum Config { cosmwasm_contract: TMAddress, rpc_url: Url, }, + SolanaWorkerSetVerifier { + cosmwasm_contract: TMAddress, + #[serde(flatten, with = "chain")] + chain: GenericChain, + }, } fn validate_multisig_signer_config<'de, D>(configs: &[Config]) -> Result<(), D::Error> @@ -133,6 +145,29 @@ where } } +fn validate_solana_worker_set_verifier_configs<'de, D>(configs: &[Config]) -> Result<(), D::Error> +where + D: Deserializer<'de>, +{ + if !configs + .iter() + .filter_map(|config| match config { + Config::SolanaWorkerSetVerifier { + chain: GenericChain { name, .. }, + .. + } => Some(name), + _ => None, + }) + .all_unique() + { + return Err(de::Error::custom( + "the chain name Solana worker set verifier configs must be unique", + )); + } + + Ok(()) +} + pub fn deserialize_handler_configs<'de, D>(deserializer: D) -> Result, D::Error> where D: Deserializer<'de>, @@ -144,6 +179,7 @@ where validate_multisig_signer_config::(&configs)?; validate_sui_msg_verifier_config::(&configs)?; validate_sui_worker_set_verifier_config::(&configs)?; + validate_solana_worker_set_verifier_configs::(&configs)?; Ok(configs) } diff --git a/ampd/src/handlers/mod.rs b/ampd/src/handlers/mod.rs index e87db6573..6e59586c8 100644 --- a/ampd/src/handlers/mod.rs +++ b/ampd/src/handlers/mod.rs @@ -5,6 +5,7 @@ mod errors; pub mod evm_verify_msg; pub mod evm_verify_worker_set; pub mod multisig; +pub mod solana_verify_worker_set; pub mod sui_verify_msg; pub mod sui_verify_worker_set; diff --git a/ampd/src/handlers/solana_verify_worker_set.rs b/ampd/src/handlers/solana_verify_worker_set.rs new file mode 100644 index 000000000..c56a59c89 --- /dev/null +++ b/ampd/src/handlers/solana_verify_worker_set.rs @@ -0,0 +1,177 @@ +use std::convert::TryInto; + +use cosmrs::cosmwasm::MsgExecuteContract; +use error_stack::ResultExt; +use serde::Deserialize; +use tokio::sync::watch::Receiver; +use tracing::info; + +use async_trait::async_trait; +use events::Error::EventTypeMismatch; +use events_derive::try_from; + +use axelar_wasm_std::voting::{PollId, Vote}; +use connection_router::state::ChainName; +use voting_verifier::msg::ExecuteMsg; + +use crate::event_processor::EventHandler; +use crate::handlers::errors::Error; +use crate::queue::queued_broadcaster::BroadcasterClient; +use crate::solana::json_rpc::SolanaClient; +use crate::solana::verifier::{parse_gateway_event, verify_worker_set, GatewayEvent}; +use crate::types::{TMAddress, U256}; + +type Result = error_stack::Result; + +#[derive(Deserialize, Debug)] +pub struct Operators { + pub weights_by_addresses: Vec<(String, U256)>, + pub threshold: U256, +} + +#[derive(Deserialize, Debug)] +pub struct WorkerSetConfirmation { + pub tx_id: String, + pub event_index: u64, + pub operators: Operators, +} + +#[derive(Deserialize, Debug)] +#[try_from("wasm-worker_set_poll_started")] +struct PollStartedEvent { + #[serde(rename = "_contract_address")] + contract_address: TMAddress, + worker_set: WorkerSetConfirmation, + poll_id: PollId, + source_chain: connection_router::state::ChainName, + source_gateway_address: String, + expires_at: u64, + confirmation_height: u64, + participants: Vec, +} + +pub struct Handler +where + C: SolanaClient + Send + Sync, + B: BroadcasterClient, +{ + worker: TMAddress, + voting_verifier: TMAddress, + chain: ChainName, + rpc_client: C, + broadcast_client: B, + latest_block_height: Receiver, +} + +impl Handler +where + C: SolanaClient + Send + Sync, + B: BroadcasterClient, +{ + pub fn new( + worker: TMAddress, + voting_verifier: TMAddress, + chain: ChainName, + rpc_client: C, + broadcast_client: B, + latest_block_height: Receiver, + ) -> Self { + Self { + worker, + voting_verifier, + chain, + rpc_client, + broadcast_client, + latest_block_height, + } + } + + async fn broadcast_vote(&self, poll_id: PollId, vote: Vote) -> Result<()> { + let msg = serde_json::to_vec(&ExecuteMsg::Vote { + poll_id, + votes: vec![vote], + }) + .expect("vote msg should serialize"); + let tx = MsgExecuteContract { + sender: self.worker.as_ref().clone(), + contract: self.voting_verifier.as_ref().clone(), + msg, + funds: vec![], + }; + + self.broadcast_client + .broadcast(tx) + .await + .change_context(Error::Broadcaster) + } +} + +#[async_trait] +impl EventHandler for Handler +where + C: SolanaClient + Send + Sync, + B: BroadcasterClient + Send + Sync, +{ + type Err = Error; + + async fn handle(&self, event: &events::Event) -> Result<()> { + let PollStartedEvent { + contract_address, + poll_id, + source_chain, + source_gateway_address, + expires_at, + confirmation_height: _, + participants, + worker_set, + } = match event.try_into() as error_stack::Result<_, _> { + Err(report) if matches!(report.current_context(), EventTypeMismatch(_)) => { + return Ok(()) + } + event => event.change_context(Error::DeserializeEvent)?, + }; + + if self.voting_verifier != contract_address { + return Ok(()); + } + + if self.chain != source_chain { + return Ok(()); + } + + if !participants.contains(&self.worker) { + return Ok(()); + } + + let latest_block_height = *self.latest_block_height.borrow(); + if latest_block_height >= expires_at { + info!(poll_id = poll_id.to_string(), "skipping expired poll"); + return Ok(()); + } + + let sol_tx = self + .rpc_client + .get_transaction(&worker_set.tx_id) + .await + .map_err(|_| Error::TxReceipts)?; + + let gw_event = parse_gateway_event(&sol_tx).map_err(|_| Error::DeserializeEvent)?; + + let pub_key = match gw_event { + GatewayEvent::OperatorshipTransferred { + info_account_address, + } => info_account_address, + _ => return self.broadcast_vote(poll_id, Vote::FailedOnChain).await, + }; + + let account_info = self + .rpc_client + .get_account(&pub_key.to_string()) + .await + .map_err(|_| Error::TxReceipts)?; + + let vote = + verify_worker_set(&source_gateway_address, &sol_tx, &worker_set, &account_info).await; + self.broadcast_vote(poll_id, vote).await + } +} diff --git a/ampd/src/lib.rs b/ampd/src/lib.rs index 5945fa2df..e8e214a17 100644 --- a/ampd/src/lib.rs +++ b/ampd/src/lib.rs @@ -35,6 +35,7 @@ mod evm; mod handlers; mod json_rpc; mod queue; +mod solana; pub mod state; mod sui; mod tm_client; @@ -256,6 +257,21 @@ where self.block_height_monitor.latest_block_height(), ), ), + handlers::config::Config::SolanaWorkerSetVerifier { + cosmwasm_contract, + chain, + } => self.configure_handler( + format!("{}-worker-set-verifier", chain.name), + handlers::solana_verify_worker_set::Handler::new( + worker.clone(), + cosmwasm_contract, + connection_router::state::ChainName::from(chain.name), + json_rpc::Client::new_http(&chain.rpc_url) + .change_context(Error::Connection)?, + self.broadcaster.client(), + self.block_height_monitor.latest_block_height(), + ), + ), } } diff --git a/ampd/src/solana/json_rpc.rs b/ampd/src/solana/json_rpc.rs new file mode 100644 index 000000000..1da6a4857 --- /dev/null +++ b/ampd/src/solana/json_rpc.rs @@ -0,0 +1,77 @@ +use async_trait::async_trait; +use ethers::providers::{JsonRpcClient, ProviderError}; +use mockall::automock; +use serde::{Deserialize, Serialize}; +// use solana_sdk::transaction::Transaction; + +use crate::json_rpc::Client; + +type Result = error_stack::Result; + +// TODO: This should come from solana-sdk crate +#[derive(Debug, PartialEq, Serialize, Deserialize)] +pub struct Transaction { + pub message: SolMessage, + pub signatures: Vec, +} + +#[derive(Debug, PartialEq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct SolMessage { + pub instructions: Vec, + pub account_keys: Vec, +} + +#[derive(Debug, PartialEq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct UiTransactionStatusMeta { + pub log_messages: Option>, +} + +#[derive(Debug, PartialEq, Serialize, Deserialize)] +pub struct SolInstruction { + pub data: String, +} + +// TODO: This should come from the solana-transaction-status crate +#[derive(Debug, PartialEq, Serialize, Deserialize)] +pub struct EncodedConfirmedTransactionWithStatusMeta { + pub transaction: Transaction, + pub meta: UiTransactionStatusMeta, +} + +#[derive(Debug, PartialEq, Serialize, Deserialize)] +pub struct AccountInfo { + pub data: Vec>, +} + +#[automock] +#[async_trait] +pub trait SolanaClient { + async fn get_transaction( + &self, + signature_str: &str, + ) -> Result; + + async fn get_account(&self, pub_key: &str) -> Result; +} + +#[async_trait] +impl

SolanaClient for Client

+where + P: JsonRpcClient + Send + Sync + 'static, +{ + // Gets an account with default commitment set to finalized. See (https://solana.com/docs/rpc/http/gettransaction) + async fn get_transaction( + &self, + signature_str: &str, + ) -> Result { + self.request("getTransaction", [signature_str, &String::from("json")]) + .await + } + // Gets an account with default commitment set to finalized. See (https://solana.com/docs/rpc/http/getaccountinfo) + async fn get_account(&self, pub_key: &str) -> Result { + self.request("getAccount", [pub_key, &String::from("json")]) + .await + } +} diff --git a/ampd/src/solana/mod.rs b/ampd/src/solana/mod.rs new file mode 100644 index 000000000..e5ce33273 --- /dev/null +++ b/ampd/src/solana/mod.rs @@ -0,0 +1,4 @@ +pub mod json_rpc; +mod pub_key_wrapper; +pub mod verifier; + diff --git a/ampd/src/solana/pub_key_wrapper.rs b/ampd/src/solana/pub_key_wrapper.rs new file mode 100644 index 000000000..66b1f2db6 --- /dev/null +++ b/ampd/src/solana/pub_key_wrapper.rs @@ -0,0 +1,38 @@ +//! Module for the [`PubkeyWrapper`] type. + +use std::ops::Deref; + +use borsh::{BorshDeserialize, BorshSerialize}; +use solana_program::pubkey::Pubkey; + +/// Wrapper type used to implement Borsh traits for [`Pubkey`] +#[repr(transparent)] +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct PubkeyWrapper(Pubkey); + +impl From for PubkeyWrapper { + fn from(value: Pubkey) -> Self { + Self(value) + } +} + +impl Deref for PubkeyWrapper { + type Target = Pubkey; + + fn deref(&self) -> &Self::Target { + &self.0 + } +} + +impl BorshDeserialize for PubkeyWrapper { + fn deserialize_reader(reader: &mut R) -> std::io::Result { + let inner: [u8; 32] = <[u8; 32]>::deserialize_reader(reader)?; + Ok(PubkeyWrapper(inner.into())) + } +} + +impl BorshSerialize for PubkeyWrapper { + fn serialize(&self, writer: &mut W) -> std::io::Result<()> { + <[u8; 32]>::serialize(&self.0.to_bytes(), writer) + } +} diff --git a/ampd/src/solana/verifier.rs b/ampd/src/solana/verifier.rs new file mode 100644 index 000000000..1a68ff6e2 --- /dev/null +++ b/ampd/src/solana/verifier.rs @@ -0,0 +1,100 @@ +use axelar_wasm_std::voting::Vote; +use base64::Engine as _; +use borsh::{BorshDeserialize, BorshSerialize}; + +use base64::{self, engine::general_purpose}; +use thiserror::Error; +use tracing::info; + +use crate::handlers::solana_verify_worker_set::WorkerSetConfirmation; + +use super::{ + json_rpc::{AccountInfo, EncodedConfirmedTransactionWithStatusMeta}, + pub_key_wrapper::PubkeyWrapper, +}; + +// Gateway program logs. +// Logged when the Gateway receives an outbound message. +#[derive(Debug, PartialEq, BorshDeserialize, BorshSerialize, Clone)] +#[repr(u8)] +pub enum GatewayEvent { + OperatorshipTransferred { + /// Pubkey of the account that stores the key rotation information. + info_account_address: PubkeyWrapper, + }, +} + +impl GatewayEvent { + // Try to parse a [`CallContractEvent`] out of a Solana program log line. + fn parse_log(log: &String) -> Option { + let cleaned_input = log + .trim() + .trim_start_matches("Program data:") + .split_whitespace() + .flat_map(decode_base64) + .next()?; + borsh::from_slice(&cleaned_input).ok() + } +} + +#[inline] +fn decode_base64(input: &str) -> Option> { + general_purpose::STANDARD.decode(input).ok() +} + +#[derive(Error, Debug)] +pub enum VerificationError { + #[error("Failed to parse tx log messages")] + NoLogMessages, + #[error("Tried to get gw event from program logs, but couldn't find anything.")] + NoGatewayEventFound, +} + +type Result = std::result::Result; + +pub fn parse_gateway_event(tx: &EncodedConfirmedTransactionWithStatusMeta) -> Result { + if let None = tx.meta.log_messages { + return Err(VerificationError::NoLogMessages); + } + let program_data = tx.meta.log_messages.as_ref().unwrap(); + program_data + .into_iter() + .find_map(|program_log| GatewayEvent::parse_log(program_log)) + .ok_or(VerificationError::NoGatewayEventFound) +} + +pub async fn verify_worker_set( + source_gateway_address: &String, + sol_tx: &EncodedConfirmedTransactionWithStatusMeta, + worker_set: &WorkerSetConfirmation, + account_info: &AccountInfo, +) -> Vote { + if !sol_tx + .transaction + .message + .account_keys + .contains(source_gateway_address) + { + info!( + tx_id = &worker_set.tx_id, + "tx does not contains source_gateway_address" + ); + return Vote::FailedOnChain; + } + + if worker_set.tx_id != sol_tx.transaction.signatures[0] { + info!(tx_id = &worker_set.tx_id, "tx_id do not match"); + return Vote::FailedOnChain; + } + + let verified = verify_worker_set_data(&worker_set, &account_info); + + match verified { + true => Vote::SucceededOnChain, + false => Vote::FailedOnChain, + } +} + +fn verify_worker_set_data(worker_set: &WorkerSetConfirmation, account_info: &AccountInfo) -> bool { + todo!("Properly parse account info and cross check with axelar worker_set") +} From 28a3cacc1d0d1c1f6db4e9299c55afbecc01ee95 Mon Sep 17 00:00:00 2001 From: eloylp Date: Wed, 7 Feb 2024 11:44:25 +0100 Subject: [PATCH 002/109] refactor, remove unnecessary String indirection --- ampd/src/solana/json_rpc.rs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/ampd/src/solana/json_rpc.rs b/ampd/src/solana/json_rpc.rs index 1da6a4857..fe760aeb4 100644 --- a/ampd/src/solana/json_rpc.rs +++ b/ampd/src/solana/json_rpc.rs @@ -66,12 +66,14 @@ where &self, signature_str: &str, ) -> Result { - self.request("getTransaction", [signature_str, &String::from("json")]) + self.request("getTransaction", [signature_str, "json"]) .await } // Gets an account with default commitment set to finalized. See (https://solana.com/docs/rpc/http/getaccountinfo) async fn get_account(&self, pub_key: &str) -> Result { - self.request("getAccount", [pub_key, &String::from("json")]) + self.request("getAccount", [pub_key, "json"]).await + } +} .await } } From ee49734602185df59224908f01f0ea9f64f35978 Mon Sep 17 00:00:00 2001 From: eloylp Date: Wed, 7 Feb 2024 11:44:58 +0100 Subject: [PATCH 003/109] Add some todos --- ampd/src/handlers/solana_verify_worker_set.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ampd/src/handlers/solana_verify_worker_set.rs b/ampd/src/handlers/solana_verify_worker_set.rs index c56a59c89..7761fe468 100644 --- a/ampd/src/handlers/solana_verify_worker_set.rs +++ b/ampd/src/handlers/solana_verify_worker_set.rs @@ -153,7 +153,7 @@ where .rpc_client .get_transaction(&worker_set.tx_id) .await - .map_err(|_| Error::TxReceipts)?; + .map_err(|_| Error::TxReceipts)?; // Todo, maybe we should check wether this is an empty response or a network failure. The later, should throw Error::TxReceipts. But if the RPC clients fails on a not found entity, we should probably emit Vote::FailedOnChain vote instead. let gw_event = parse_gateway_event(&sol_tx).map_err(|_| Error::DeserializeEvent)?; @@ -168,7 +168,7 @@ where .rpc_client .get_account(&pub_key.to_string()) .await - .map_err(|_| Error::TxReceipts)?; + .map_err(|_| Error::TxReceipts)?; // Todo, maybe we should check wether this is an empty response or a network failure. The later, should throw Error::TxReceipts. But if the RPC clients fails on a not found entity, we should probably emit Vote::FailedOnChain vote instead. let vote = verify_worker_set(&source_gateway_address, &sol_tx, &worker_set, &account_info).await; From 83f97cc147fab3b7da7a21f715cab75d203f5dea Mon Sep 17 00:00:00 2001 From: eloylp Date: Sun, 11 Feb 2024 14:11:54 +0100 Subject: [PATCH 004/109] * Add auth-weighted as dependency (needed for types) * Add Solana account parsing tools. --- Cargo.lock | 528 +++++++++++++----------------------------------- ampd/Cargo.toml | 3 +- 2 files changed, 138 insertions(+), 393 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 4595bd797..964c47c71 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -112,9 +112,9 @@ dependencies = [ name = "aggregate-verifier" version = "0.1.0" dependencies = [ - "axelar-wasm-std 0.1.0", - "axelar-wasm-std-derive 0.1.0", - "connection-router 0.1.0", + "axelar-wasm-std", + "axelar-wasm-std-derive", + "connection-router", "cosmwasm-schema", "cosmwasm-std", "cosmwasm-storage", @@ -122,34 +122,12 @@ dependencies = [ "cw-storage-plus 1.1.0", "cw-utils 1.0.1", "error-stack", - "report 0.1.0", + "report", "schemars", "serde", "serde_json", "thiserror", - "voting-verifier 0.1.0", -] - -[[package]] -name = "aggregate-verifier" -version = "0.1.0" -source = "git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f#c0904e1c72c99a174a93b5f6c18b30f52d20b71f" -dependencies = [ - "axelar-wasm-std 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", - "axelar-wasm-std-derive 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", - "connection-router 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", - "cosmwasm-schema", - "cosmwasm-std", - "cosmwasm-storage", - "cw-storage-plus 1.1.0", - "cw-utils 1.0.1", - "error-stack", - "report 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", - "schemars", - "serde", - "serde_json", - "thiserror", - "voting-verifier 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "voting-verifier", ] [[package]] @@ -211,13 +189,14 @@ name = "ampd" version = "0.1.0" dependencies = [ "async-trait", - "axelar-wasm-std 0.1.0", + "auth-weighted", + "axelar-wasm-std", "base64 0.21.7", "bcs", "borsh 1.3.1", "clap 4.4.4", "config", - "connection-router 0.1.0", + "connection-router", "cosmos-sdk-proto 0.16.0", "cosmrs", "cosmwasm-std", @@ -232,7 +211,6 @@ dependencies = [ "events", "events-derive", "futures", - "gateway 0.1.0 (git+ssh://git@github.com/eigerco/solana-axelar.git?branch=poc)", "generic-array", "hex", "humantime-serde", @@ -240,15 +218,16 @@ dependencies = [ "k256", "mockall", "move-core-types", - "multisig 0.1.0", + "multisig", "prost 0.11.9", "rand 0.8.5", "random-string", - "report 0.1.0", + "report", "serde", "serde_json", "serde_with 3.3.0", - "service-registry 0.1.0", + "service-registry", + "solana-account-decoder", "solana-client", "solana-program", "solana-sdk", @@ -270,7 +249,7 @@ dependencies = [ "url", "valuable", "valuable-serde", - "voting-verifier 0.1.0", + "voting-verifier", ] [[package]] @@ -762,6 +741,25 @@ dependencies = [ "winapi", ] +[[package]] +name = "auth-weighted" +version = "0.1.0" +source = "git+ssh://git@github.com/eigerco/solana-axelar.git?branch=poc#a5263b804ff4bb4db16b2899c019967832e6dfe1" +dependencies = [ + "base64 0.21.7", + "bimap", + "bnum 0.10.0", + "borsh 1.3.1", + "bytemuck", + "hex", + "k256", + "libsecp256k1 0.7.1", + "num-derive 0.4.1", + "num-traits", + "solana-program", + "thiserror", +] + [[package]] name = "auto_impl" version = "1.1.0" @@ -800,7 +798,7 @@ dependencies = [ "hex", "num-traits", "rand 0.8.5", - "report 0.1.0", + "report", "schemars", "serde", "serde_json", @@ -810,49 +808,14 @@ dependencies = [ "valuable", ] -[[package]] -name = "axelar-wasm-std" -version = "0.1.0" -source = "git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f#c0904e1c72c99a174a93b5f6c18b30f52d20b71f" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cosmwasm-storage", - "cw-storage-plus 1.1.0", - "error-stack", - "flagset", - "num-traits", - "report 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", - "schemars", - "serde", - "serde_json", - "sha3 0.10.8", - "strum 0.25.0", - "thiserror", - "valuable", -] - -[[package]] -name = "axelar-wasm-std-derive" -version = "0.1.0" -dependencies = [ - "axelar-wasm-std 0.1.0", - "error-stack", - "quote 1.0.35", - "report 0.1.0", - "syn 2.0.48", - "thiserror", -] - [[package]] name = "axelar-wasm-std-derive" version = "0.1.0" -source = "git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f#c0904e1c72c99a174a93b5f6c18b30f52d20b71f" dependencies = [ - "axelar-wasm-std 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "axelar-wasm-std", "error-stack", "quote 1.0.35", - "report 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "report", "syn 2.0.48", "thiserror", ] @@ -965,12 +928,12 @@ checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" name = "batching" version = "0.1.0" dependencies = [ - "axelar-wasm-std 0.1.0", - "axelar-wasm-std-derive 0.1.0", + "axelar-wasm-std", + "axelar-wasm-std-derive", "cosmwasm-schema", "cosmwasm-std", "error-stack", - "report 0.1.0", + "report", "thiserror", ] @@ -1254,6 +1217,12 @@ dependencies = [ "subtle", ] +[[package]] +name = "bnum" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab9008b6bb9fc80b5277f2fe481c09e828743d9151203e804583eb4c9e15b31d" + [[package]] name = "bnum" version = "0.10.0" @@ -1876,8 +1845,8 @@ dependencies = [ name = "connection-router" version = "0.1.0" dependencies = [ - "axelar-wasm-std 0.1.0", - "axelar-wasm-std-derive 0.1.0", + "axelar-wasm-std", + "axelar-wasm-std-derive", "cosmwasm-schema", "cosmwasm-std", "cosmwasm-storage", @@ -1889,31 +1858,7 @@ dependencies = [ "itertools 0.11.0", "mockall", "rand 0.8.5", - "report 0.1.0", - "schemars", - "serde", - "serde_json", - "sha3 0.10.8", - "thiserror", - "valuable", -] - -[[package]] -name = "connection-router" -version = "0.1.0" -source = "git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f#c0904e1c72c99a174a93b5f6c18b30f52d20b71f" -dependencies = [ - "axelar-wasm-std 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", - "axelar-wasm-std-derive 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", - "cosmwasm-schema", - "cosmwasm-std", - "cosmwasm-storage", - "cw-storage-plus 1.1.0", - "error-stack", - "flagset", - "itertools 0.11.0", - "mockall", - "report 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "report", "schemars", "serde", "serde_json", @@ -1926,7 +1871,7 @@ dependencies = [ name = "connection-router-api" version = "0.1.0" dependencies = [ - "axelar-wasm-std 0.1.0", + "axelar-wasm-std", "cosmwasm-schema", "cosmwasm-std", "cw-storage-plus 1.1.0", @@ -2093,9 +2038,9 @@ dependencies = [ [[package]] name = "cosmwasm-crypto" -version = "1.5.3" +version = "1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9934c79e58d9676edfd592557dee765d2a6ef54c09d5aa2edb06156b00148966" +checksum = "8ed6aa9f904de106fa16443ad14ec2abe75e94ba003bb61c681c0e43d4c58d2a" dependencies = [ "digest 0.10.7", "ecdsa", @@ -2140,13 +2085,13 @@ dependencies = [ [[package]] name = "cosmwasm-std" -version = "1.5.3" +version = "1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef8666e572a3a2519010dde88c04d16e9339ae751b56b2bb35081fe3f7d6be74" +checksum = "ad011ae7447188e26e4a7dbca2fcd0fc186aa21ae5c86df0503ea44c78f9e469" dependencies = [ "base64 0.21.7", "bech32", - "bnum", + "bnum 0.8.1", "cosmwasm-crypto", "cosmwasm-derive", "derivative", @@ -2977,9 +2922,9 @@ checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" [[package]] name = "elliptic-curve" -version = "0.13.5" +version = "0.13.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "968405c8fdc9b3bf4df0a6638858cc0b52462836ab6b1c87377785dd09cf1c0b" +checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" dependencies = [ "base16ct", "crypto-bigint", @@ -3119,23 +3064,12 @@ dependencies = [ [[package]] name = "errno" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "136526188508e25c6fef639d7927dfb3e0e3084488bf202267829cf7fc23dbdd" -dependencies = [ - "errno-dragonfly", - "libc", - "windows-sys 0.48.0", -] - -[[package]] -name = "errno-dragonfly" -version = "0.1.2" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" +checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" dependencies = [ - "cc", "libc", + "windows-sys 0.52.0", ] [[package]] @@ -3482,7 +3416,7 @@ checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" name = "events" version = "0.1.0" dependencies = [ - "axelar-wasm-std 0.1.0", + "axelar-wasm-std", "base64 0.21.7", "error-stack", "serde_json", @@ -3644,9 +3578,9 @@ dependencies = [ [[package]] name = "fastrand" -version = "2.0.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6999dc1837253364c2ebb0704ba97994bd874e8f195d665c50b7548f6ea92764" +checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" [[package]] name = "fdlimit" @@ -3745,9 +3679,9 @@ dependencies = [ [[package]] name = "flate2" -version = "1.0.27" +version = "1.0.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6c98ee8095e9d1dcbf2fcc6d95acccb90d1c81db1e44725c6a984b1dbdfb010" +checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e" dependencies = [ "crc32fast", "miniz_oxide", @@ -3943,10 +3877,10 @@ dependencies = [ name = "gateway" version = "0.1.0" dependencies = [ - "aggregate-verifier 0.1.0", - "axelar-wasm-std 0.1.0", - "axelar-wasm-std-derive 0.1.0", - "connection-router 0.1.0", + "aggregate-verifier", + "axelar-wasm-std", + "axelar-wasm-std-derive", + "connection-router", "cosmwasm-schema", "cosmwasm-std", "cosmwasm-storage", @@ -3955,56 +3889,7 @@ dependencies = [ "error-stack", "itertools 0.11.0", "mockall", - "report 0.1.0", - "schemars", - "serde", - "serde_json", - "thiserror", -] - -[[package]] -name = "gateway" -version = "0.1.0" -source = "git+ssh://git@github.com/eigerco/solana-axelar.git?branch=poc#983e0ecd16dbc2509f931a91bf07bf8bbb057e99" -dependencies = [ - "base64 0.21.7", - "bcs", - "bimap", - "bnum", - "borsh 1.3.1", - "bytemuck", - "connection-router 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", - "cosmwasm-std", - "hex", - "itertools 0.12.1", - "libsecp256k1 0.7.1", - "multisig 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", - "multisig-prover 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", - "num-derive 0.4.1", - "num-traits", - "serde", - "sha3 0.10.8", - "solana-program", - "thiserror", -] - -[[package]] -name = "gateway" -version = "0.1.0" -source = "git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f#c0904e1c72c99a174a93b5f6c18b30f52d20b71f" -dependencies = [ - "aggregate-verifier 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", - "axelar-wasm-std 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", - "axelar-wasm-std-derive 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", - "connection-router 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", - "cosmwasm-schema", - "cosmwasm-std", - "cosmwasm-storage", - "cw-storage-plus 1.1.0", - "error-stack", - "itertools 0.11.0", - "mockall", - "report 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "report", "schemars", "serde", "serde_json", @@ -4328,9 +4213,9 @@ dependencies = [ [[package]] name = "http" -version = "0.2.9" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482" +checksum = "8947b1a6fad4393052c7ba1f4cd97bed3e953a95c79c92ad9b051a04611d9fbb" dependencies = [ "bytes", "fnv", @@ -4384,9 +4269,9 @@ dependencies = [ [[package]] name = "hyper" -version = "0.14.27" +version = "0.14.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468" +checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80" dependencies = [ "bytes", "futures-channel", @@ -4399,7 +4284,7 @@ dependencies = [ "httpdate", "itoa", "pin-project-lite", - "socket2 0.4.9", + "socket2 0.5.5", "tokio", "tower-service", "tracing", @@ -4660,31 +4545,31 @@ dependencies = [ name = "integration-tests" version = "0.1.0" dependencies = [ - "aggregate-verifier 0.1.0", - "axelar-wasm-std 0.1.0", - "axelar-wasm-std-derive 0.1.0", - "connection-router 0.1.0", + "aggregate-verifier", + "axelar-wasm-std", + "axelar-wasm-std-derive", + "connection-router", "cosmwasm-schema", "cosmwasm-std", "cosmwasm-storage", "cw-multi-test", "cw-storage-plus 1.1.0", "error-stack", - "gateway 0.1.0", + "gateway", "itertools 0.11.0", "k256", "mockall", - "multisig 0.1.0", - "multisig-prover 0.1.0", - "report 0.1.0", - "rewards 0.1.0", + "multisig", + "multisig-prover", + "report", + "rewards", "schemars", "serde", "serde_json", - "service-registry 0.1.0", + "service-registry", "thiserror", "tofn", - "voting-verifier 0.1.0", + "voting-verifier", ] [[package]] @@ -4744,15 +4629,6 @@ dependencies = [ "either", ] -[[package]] -name = "itertools" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" -dependencies = [ - "either", -] - [[package]] name = "itoa" version = "1.0.9" @@ -4828,9 +4704,9 @@ dependencies = [ [[package]] name = "k256" -version = "0.13.1" +version = "0.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cadb76004ed8e97623117f3df85b17aaa6626ab0b0831e6573f104df16cd1bcc" +checksum = "956ff9b67e26e1a6a866cb758f12c6f8746208489e3e4a4b5580802f2f0a587b" dependencies = [ "cfg-if", "ecdsa", @@ -5057,9 +4933,9 @@ checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" [[package]] name = "linux-raw-sys" -version = "0.4.7" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a9bad9f94746442c783ca431b22403b519cd7fbeed0533fdd6328b2f2212128" +checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" [[package]] name = "lock_api" @@ -5705,9 +5581,9 @@ checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a" name = "multisig" version = "0.1.0" dependencies = [ - "axelar-wasm-std 0.1.0", - "axelar-wasm-std-derive 0.1.0", - "connection-router 0.1.0", + "axelar-wasm-std", + "axelar-wasm-std-derive", + "connection-router", "cosmwasm-crypto", "cosmwasm-schema", "cosmwasm-std", @@ -5718,34 +5594,8 @@ dependencies = [ "error-stack", "getrandom 0.2.10", "k256", - "report 0.1.0", - "rewards 0.1.0", - "schemars", - "serde", - "serde_json", - "sha3 0.10.8", - "thiserror", -] - -[[package]] -name = "multisig" -version = "0.1.0" -source = "git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f#c0904e1c72c99a174a93b5f6c18b30f52d20b71f" -dependencies = [ - "axelar-wasm-std 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", - "axelar-wasm-std-derive 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", - "connection-router 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", - "cosmwasm-crypto", - "cosmwasm-schema", - "cosmwasm-std", - "cosmwasm-storage", - "cw-storage-plus 1.1.0", - "enum-display-derive", - "error-stack", - "getrandom 0.2.10", - "k256", - "report 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", - "rewards 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "report", + "rewards", "schemars", "serde", "serde_json", @@ -5758,10 +5608,10 @@ name = "multisig-prover" version = "0.1.0" dependencies = [ "anyhow", - "axelar-wasm-std 0.1.0", - "axelar-wasm-std-derive 0.1.0", + "axelar-wasm-std", + "axelar-wasm-std-derive", "bcs", - "connection-router 0.1.0", + "connection-router", "cosmwasm-schema", "cosmwasm-std", "cosmwasm-storage", @@ -5773,52 +5623,20 @@ dependencies = [ "error-stack", "ethabi", "ethers", - "gateway 0.1.0", + "gateway", "generic-array", "hex", "itertools 0.11.0", "k256", - "multisig 0.1.0", - "report 0.1.0", - "schemars", - "serde", - "serde_json", - "service-registry 0.1.0", - "sha3 0.10.8", - "thiserror", - "voting-verifier 0.1.0", -] - -[[package]] -name = "multisig-prover" -version = "0.1.0" -source = "git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f#c0904e1c72c99a174a93b5f6c18b30f52d20b71f" -dependencies = [ - "axelar-wasm-std 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", - "axelar-wasm-std-derive 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", - "bcs", - "connection-router 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", - "cosmwasm-schema", - "cosmwasm-std", - "cosmwasm-storage", - "cw-storage-plus 1.1.0", - "cw-utils 1.0.1", - "either", - "error-stack", - "ethabi", - "gateway 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", - "hex", - "itertools 0.11.0", - "k256", - "multisig 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", - "report 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "multisig", + "report", "schemars", "serde", "serde_json", - "service-registry 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "service-registry", "sha3 0.10.8", "thiserror", - "voting-verifier 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "voting-verifier", ] [[package]] @@ -5978,16 +5796,16 @@ checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54" name = "nexus-gateway" version = "0.1.0" dependencies = [ - "axelar-wasm-std 0.1.0", - "axelar-wasm-std-derive 0.1.0", - "connection-router 0.1.0", + "axelar-wasm-std", + "axelar-wasm-std-derive", + "connection-router", "cosmwasm-schema", "cosmwasm-std", "cw-storage-plus 1.1.0", "error-stack", "hex", "mockall", - "report 0.1.0", + "report", "schemars", "serde", "thiserror", @@ -6253,7 +6071,7 @@ version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "681030a937600a36906c185595136d26abfebb4aa9c65701cefcaf8578bb982b" dependencies = [ - "proc-macro-crate 1.1.3", + "proc-macro-crate 3.1.0", "proc-macro2 1.0.78", "quote 1.0.35", "syn 2.0.48", @@ -6285,9 +6103,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.18.0" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" [[package]] name = "opaque-debug" @@ -7547,9 +7365,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.10.2" +version = "1.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343" +checksum = "b62dbe01f0b06f9d8dc7d49e05a0785f153b00b2c227856282f671e0318c9b15" dependencies = [ "aho-corasick", "memchr", @@ -7559,9 +7377,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.3" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f" +checksum = "5bb987efffd3c6d0d8f5f89510bb458559eab11e4f869acb20bf845e016259cd" dependencies = [ "aho-corasick", "memchr", @@ -7597,18 +7415,6 @@ dependencies = [ "valuable", ] -[[package]] -name = "report" -version = "0.1.0" -source = "git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f#c0904e1c72c99a174a93b5f6c18b30f52d20b71f" -dependencies = [ - "error-stack", - "eyre", - "itertools 0.11.0", - "thiserror", - "valuable", -] - [[package]] name = "reqwest" version = "0.11.24" @@ -7662,8 +7468,8 @@ checksum = "8c31b5c4033f8fdde8700e4657be2c497e7288f01515be52168c631e2e4d4086" name = "rewards" version = "0.1.0" dependencies = [ - "axelar-wasm-std 0.1.0", - "axelar-wasm-std-derive 0.1.0", + "axelar-wasm-std", + "axelar-wasm-std-derive", "cosmwasm-schema", "cosmwasm-std", "cw-multi-test", @@ -7671,25 +7477,7 @@ dependencies = [ "error-stack", "itertools 0.11.0", "mockall", - "report 0.1.0", - "serde", - "thiserror", -] - -[[package]] -name = "rewards" -version = "0.1.0" -source = "git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f#c0904e1c72c99a174a93b5f6c18b30f52d20b71f" -dependencies = [ - "axelar-wasm-std 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", - "axelar-wasm-std-derive 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", - "cosmwasm-schema", - "cosmwasm-std", - "cw-storage-plus 1.1.0", - "error-stack", - "itertools 0.11.0", - "mockall", - "report 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "report", "serde", "thiserror", ] @@ -7886,15 +7674,15 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.14" +version = "0.38.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "747c788e9ce8e92b12cd485c49ddf90723550b654b32508f979b71a7b1ecda4f" +checksum = "6ea3e1a662af26cd7a3ba09c0297a31af215563ecf42817c98df621387f4e949" dependencies = [ "bitflags 2.4.2", "errno", "libc", "linux-raw-sys", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] @@ -8407,35 +8195,16 @@ dependencies = [ name = "service-registry" version = "0.1.0" dependencies = [ - "axelar-wasm-std 0.1.0", - "axelar-wasm-std-derive 0.1.0", - "connection-router 0.1.0", + "axelar-wasm-std", + "axelar-wasm-std-derive", + "connection-router", "cosmwasm-schema", "cosmwasm-std", "cosmwasm-storage", "cw-multi-test", "cw-storage-plus 1.1.0", "error-stack", - "report 0.1.0", - "schemars", - "serde", - "thiserror", -] - -[[package]] -name = "service-registry" -version = "0.1.0" -source = "git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f#c0904e1c72c99a174a93b5f6c18b30f52d20b71f" -dependencies = [ - "axelar-wasm-std 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", - "axelar-wasm-std-derive 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", - "connection-router 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", - "cosmwasm-schema", - "cosmwasm-std", - "cosmwasm-storage", - "cw-storage-plus 1.1.0", - "error-stack", - "report 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "report", "schemars", "serde", "thiserror", @@ -8612,9 +8381,9 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.11.1" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "942b4a808e05215192e39f4ab80813e599068285906cc91aa64f923db842bd5a" +checksum = "e6ecd384b10a64542d77071bd64bd7b231f4ed5940fba55e98c3de13824cf3d7" [[package]] name = "snap" @@ -10092,15 +9861,14 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "tempfile" -version = "3.8.0" +version = "3.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb94d2f3cc536af71caac6b6fcebf65860b347e7ce0cc9ebe8f70d3e521054ef" +checksum = "a365e8cd18e44762ef95d87f284f4b5cd04107fec2ff3052bd6a3e6069669e67" dependencies = [ "cfg-if", - "fastrand 2.0.0", - "redox_syscall 0.3.5", + "fastrand 2.0.1", "rustix", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] @@ -11178,9 +10946,9 @@ checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" name = "voting-verifier" version = "0.1.0" dependencies = [ - "axelar-wasm-std 0.1.0", - "axelar-wasm-std-derive 0.1.0", - "connection-router 0.1.0", + "axelar-wasm-std", + "axelar-wasm-std-derive", + "connection-router", "cosmwasm-schema", "cosmwasm-std", "cosmwasm-storage", @@ -11188,36 +10956,12 @@ dependencies = [ "cw-storage-plus 1.1.0", "either", "error-stack", - "report 0.1.0", - "rewards 0.1.0", + "report", + "rewards", "schemars", "serde", "serde_json", - "service-registry 0.1.0", - "sha3 0.10.8", - "thiserror", -] - -[[package]] -name = "voting-verifier" -version = "0.1.0" -source = "git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f#c0904e1c72c99a174a93b5f6c18b30f52d20b71f" -dependencies = [ - "axelar-wasm-std 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", - "axelar-wasm-std-derive 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", - "connection-router 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", - "cosmwasm-schema", - "cosmwasm-std", - "cosmwasm-storage", - "cw-storage-plus 1.1.0", - "either", - "error-stack", - "report 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", - "rewards 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", - "schemars", - "serde", - "serde_json", - "service-registry 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "service-registry", "sha3 0.10.8", "thiserror", ] @@ -11695,9 +11439,9 @@ dependencies = [ [[package]] name = "zeroize" -version = "1.6.0" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9" +checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" dependencies = [ "zeroize_derive", ] diff --git a/ampd/Cargo.toml b/ampd/Cargo.toml index bcb51f725..fd5bdf930 100644 --- a/ampd/Cargo.toml +++ b/ampd/Cargo.toml @@ -39,6 +39,7 @@ serde = { version = "1.0.147", features = ["derive"] } serde_json = "1.0.89" serde_with = "3.2.0" service-registry = { workspace = true } +solana-account-decoder = "1.18.1" solana-client = "1.18.1" solana-program = "1.18.1" solana-sdk = "1.18.1" @@ -67,13 +68,13 @@ url = "2.3.1" valuable = { version = "0.1.0", features = ["derive"] } valuable-serde = { version = "0.1.0", features = ["std"] } voting-verifier = { workspace = true } +auth-weighted = { git = "ssh://git@github.com/eigerco/solana-axelar.git", branch = "poc"} ## Temporary POC repo import while its not public. [dev-dependencies] elliptic-curve = "0.13.5" generic-array = "0.14.7" rand = "0.8.5" random-string = "1.0.0" -gateway = { git = "ssh://git@github.com/eigerco/solana-axelar.git", branch = "poc" } ## Temporary POC repo import while its not public. [build-dependencies] ethers = "2.0.8" From 7d606908dc875d69f88fc12f67e0be5e626c8639 Mon Sep 17 00:00:00 2001 From: eloylp Date: Sun, 11 Feb 2024 14:14:46 +0100 Subject: [PATCH 005/109] Expose binary serialisation for U256 --- ampd/src/types.rs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/ampd/src/types.rs b/ampd/src/types.rs index b6cab2902..b74f11c97 100644 --- a/ampd/src/types.rs +++ b/ampd/src/types.rs @@ -17,6 +17,12 @@ pub type PublicKey = crypto::PublicKey; #[serde(from = "Uint256")] pub struct U256(ethers::types::U256); +impl U256 { + pub fn to_little_endian(&self, bytes: &mut [u8]) { + self.0.to_little_endian(bytes) + } +} + impl From for U256 { fn from(value: Uint256) -> Self { Self(ethers::types::U256::from_big_endian( From 645e491e00d08356fcbe96b5b20c1e1e56c6b762 Mon Sep 17 00:00:00 2001 From: eloylp Date: Sun, 11 Feb 2024 14:18:16 +0100 Subject: [PATCH 006/109] Propagate Clone,Copy traits to wrapper type --- ampd/src/types.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ampd/src/types.rs b/ampd/src/types.rs index b74f11c97..febf78254 100644 --- a/ampd/src/types.rs +++ b/ampd/src/types.rs @@ -13,7 +13,7 @@ pub type EVMAddress = Address; pub type Hash = H256; pub type PublicKey = crypto::PublicKey; -#[derive(Deserialize, Debug)] +#[derive(Deserialize, Debug, Clone, Copy)] #[serde(from = "Uint256")] pub struct U256(ethers::types::U256); From f5f9212e2e2b68a999b28074c7f4e78614a80299 Mon Sep 17 00:00:00 2001 From: eloylp Date: Sun, 11 Feb 2024 14:19:22 +0100 Subject: [PATCH 007/109] Add needed solana RPC methods for workerset verification logic --- ampd/src/handlers/solana_verify_worker_set.rs | 2 +- ampd/src/solana/json_rpc.rs | 55 +++++++++++++++++-- 2 files changed, 52 insertions(+), 5 deletions(-) diff --git a/ampd/src/handlers/solana_verify_worker_set.rs b/ampd/src/handlers/solana_verify_worker_set.rs index 7761fe468..2e21f8b25 100644 --- a/ampd/src/handlers/solana_verify_worker_set.rs +++ b/ampd/src/handlers/solana_verify_worker_set.rs @@ -166,7 +166,7 @@ where let account_info = self .rpc_client - .get_account(&pub_key.to_string()) + .get_account_info(&pub_key.to_string()) .await .map_err(|_| Error::TxReceipts)?; // Todo, maybe we should check wether this is an empty response or a network failure. The later, should throw Error::TxReceipts. But if the RPC clients fails on a not found entity, we should probably emit Vote::FailedOnChain vote instead. diff --git a/ampd/src/solana/json_rpc.rs b/ampd/src/solana/json_rpc.rs index fe760aeb4..ef51111fd 100644 --- a/ampd/src/solana/json_rpc.rs +++ b/ampd/src/solana/json_rpc.rs @@ -2,6 +2,8 @@ use async_trait::async_trait; use ethers::providers::{JsonRpcClient, ProviderError}; use mockall::automock; use serde::{Deserialize, Serialize}; +use solana_account_decoder::UiAccountEncoding; +use solana_sdk::commitment_config::{CommitmentConfig, CommitmentLevel}; // use solana_sdk::transaction::Transaction; use crate::json_rpc::Client; @@ -42,7 +44,12 @@ pub struct EncodedConfirmedTransactionWithStatusMeta { #[derive(Debug, PartialEq, Serialize, Deserialize)] pub struct AccountInfo { - pub data: Vec>, + pub value: AccountInfoValue, +} + +#[derive(Debug, PartialEq, Serialize, Deserialize)] +pub struct AccountInfoValue { + pub data: Vec, } #[automock] @@ -53,7 +60,7 @@ pub trait SolanaClient { signature_str: &str, ) -> Result; - async fn get_account(&self, pub_key: &str) -> Result; + async fn get_account_info(&self, pub_key: &str) -> Result; } #[async_trait] @@ -70,10 +77,50 @@ where .await } // Gets an account with default commitment set to finalized. See (https://solana.com/docs/rpc/http/getaccountinfo) - async fn get_account(&self, pub_key: &str) -> Result { - self.request("getAccount", [pub_key, "json"]).await + async fn get_account_info(&self, pub_key: &str) -> Result { + let config = solana_client::rpc_config::RpcAccountInfoConfig { + commitment: Some(CommitmentConfig { + commitment: CommitmentLevel::Finalized, + }), + encoding: Some(UiAccountEncoding::Base64), + data_slice: None, + min_context_slot: None, + }; + self.request("getAccountInfo", (pub_key, config)).await } } + +// Exploratory tests for checking integration with Solana. This could be automated in some way +// in the future. See https://solana.com/developers/guides/getstarted/setup-local-development . + +#[cfg(test)] +mod tests { + + use std::str::FromStr; + + use super::*; + use crate::url::Url; + use tokio::test as async_test; + + const RPC_URL: &str = "http://127.0.0.1:8899"; // default. + + #[async_test] + async fn test_get_transaction_works() { + // pubkey: EHgEeD1Z3pc29s3JKhfVv9AGk7HkQFZKkcHbkypdN1h6 + let url = Url::from_str(RPC_URL).unwrap(); + let client = Client::new_http(&url).unwrap(); + let tx = client.get_transaction("").await.unwrap(); + println!("tx - {}", tx.transaction.signatures[0]); + } + + #[async_test] + async fn test_get_account_works() { + let url = Url::from_str(RPC_URL).unwrap(); + let client = Client::new_http(&url).unwrap(); + let acc = client + .get_account_info("") .await + .unwrap(); + println!("acc - {:?}", acc.value.data); } } From ca7d699f91321b5e58181635e0a86291c6a65ca9 Mon Sep 17 00:00:00 2001 From: eloylp Date: Sun, 11 Feb 2024 14:23:20 +0100 Subject: [PATCH 008/109] Complete the Solana working set verification logic, core verification functions. --- ampd/src/solana/verifier.rs | 340 +++++++++++++++++++++++++++++++++++- 1 file changed, 333 insertions(+), 7 deletions(-) diff --git a/ampd/src/solana/verifier.rs b/ampd/src/solana/verifier.rs index 1a68ff6e2..8b475646b 100644 --- a/ampd/src/solana/verifier.rs +++ b/ampd/src/solana/verifier.rs @@ -1,12 +1,15 @@ +use std::collections::HashMap; + use axelar_wasm_std::voting::Vote; use base64::Engine as _; use borsh::{BorshDeserialize, BorshSerialize}; +use auth_weighted::types::operator::Operators; use base64::{self, engine::general_purpose}; use thiserror::Error; use tracing::info; -use crate::handlers::solana_verify_worker_set::WorkerSetConfirmation; +use crate::handlers::solana_verify_worker_set::{self, WorkerSetConfirmation}; use super::{ json_rpc::{AccountInfo, EncodedConfirmedTransactionWithStatusMeta}, @@ -42,12 +45,14 @@ fn decode_base64(input: &str) -> Option> { general_purpose::STANDARD.decode(input).ok() } -#[derive(Error, Debug)] +#[derive(Error, Debug, PartialEq)] pub enum VerificationError { #[error("Failed to parse tx log messages")] NoLogMessages, - #[error("Tried to get gw event from program logs, but couldn't find anything.")] + #[error("Tried to get gateway event from program logs, but couldn't find anything.")] NoGatewayEventFound, + #[error("Parsing error: {0}")] + ParsingError(String), } type Result = std::result::Result; @@ -82,19 +87,340 @@ pub async fn verify_worker_set( return Vote::FailedOnChain; } + if sol_tx.transaction.signatures.is_empty() { + info!(tx_id = &worker_set.tx_id, "tx do not contain signatures"); + return Vote::FailedOnChain; + } + if worker_set.tx_id != sol_tx.transaction.signatures[0] { info!(tx_id = &worker_set.tx_id, "tx_id do not match"); return Vote::FailedOnChain; } - let verified = verify_worker_set_data(&worker_set, &account_info); + let onchain_operators = match parse_onchain_operators(account_info) { + Ok(ops) => ops, + Err(err) => { + info!(tx_id = &worker_set.tx_id, err = err.to_string()); + return Vote::FailedOnChain; + } + }; - match verified { + match verify_worker_set_operators_data(&worker_set.operators, &onchain_operators) { true => Vote::SucceededOnChain, false => Vote::FailedOnChain, } } -fn verify_worker_set_data(worker_set: &WorkerSetConfirmation, account_info: &AccountInfo) -> bool { - todo!("Properly parse account info and cross check with axelar worker_set") +fn verify_worker_set_operators_data( + ops: &solana_verify_worker_set::Operators, + aw_ops: &Operators, +) -> bool { + ops == aw_ops +} + +fn parse_onchain_operators(account_info: &AccountInfo) -> Result { + if account_info.value.data.len() < 2 { + return Err(VerificationError::ParsingError( + "Could not find solana account data.".to_string(), + )); + } + + let account_data = match decode_base64(&account_info.value.data[0]) { + Some(data) => data, + None => { + return Err(VerificationError::ParsingError( + "Cannot base64 decode account data.".to_string(), + )) + } + }; + + let operators = match borsh::de::from_slice::(&account_data) { + Ok(ops) => ops, + Err(err) => { + return Err(VerificationError::ParsingError(format!( + "Cannot borsh decode account data: {}", + err.to_string() + ))) + } + }; + + Ok(operators) +} + +impl PartialEq for solana_verify_worker_set::Operators { + fn eq(&self, aw_ops: &auth_weighted::types::operator::Operators) -> bool { + if self.threshold != *aw_ops.threshold() { + return false; + } + + // Creating a hashmap for querying the data later. Using a not fixed size key like + // Vec could not be the best. We expect a 33 bytes slice as address. See ['auth_weighted::types::Address::ECDSA_COMPRESSED_PUBKEY_LEN'] + // So probably we should try to use that after testing the first POC in order to reduce the domain of the key. + let addresses_weights_res: Result, crate::types::U256>> = self + .weights_by_addresses + .iter() + // We are assuming here the solana address to come hex encoded. So we decode it. + .map(|(sol_addr_hex, sol_weight)| { + let sol_addr = hex::decode(sol_addr_hex).map_err(|e| { + VerificationError::ParsingError(format!( + "Failed hex-decoding sol address: {}", + e.to_string() + )) + })?; + Ok((sol_addr, sol_weight.clone())) + }) + .collect(); + + let addresses_weights = match addresses_weights_res { + Ok(addr_weight_map) => addr_weight_map, + Err(_) => return false, // Todo, omitting some err info here. This could be indicating the + // internal hex parse operation should not be happening here. Maybe we need scale up that logic, + // and preparing conversions beforehand in another type. + }; + + // Iterate both iterators axelar addresses and weights which at the same time, + // while querying the previously created map, which contains + match aw_ops + .addresses() + .iter() + .zip(aw_ops.weights()) + .try_for_each(|(address, weight)| { + let axelar_addr_weight = addresses_weights.get_key_value(address.as_ref()); + if axelar_addr_weight.is_none() { + return Err(()); + } + let (axelar_address, axelar_weight) = axelar_addr_weight.unwrap(); + + if address.as_ref() != axelar_address { + return Err(()); + } + + if weight != axelar_weight { + return Err(()); + } + Ok(()) + }) { + Ok(_) => true, + Err(_) => false, + } + } +} + +impl PartialEq for auth_weighted::types::u256::U256 { + fn eq(&self, loc_u256: &crate::types::U256) -> bool { + let mut b: [u8; 32] = [0; 32]; + loc_u256.to_little_endian(&mut b); + self.to_le_bytes() == b + } +} + +impl PartialEq for crate::types::U256 { + fn eq(&self, aw_u256: &auth_weighted::types::u256::U256) -> bool { + let mut b: [u8; 32] = [0; 32]; + self.to_little_endian(&mut b); + aw_u256.to_le_bytes() == b + } +} + +#[cfg(test)] +mod tests { + use crate::{ + handlers::solana_verify_worker_set::Operators, solana::json_rpc::AccountInfoValue, + }; + + use super::*; + use auth_weighted::types::{address::Address, u256::U256}; + use cosmwasm_std::Uint256; + use std::convert::TryFrom; + + #[test] + fn test_correct_deserialization_auth_weight_operators() { + let onchain_operators = auth_weighted::types::operator::Operators::new( + vec![ + Address::try_from( + "03f57d1a813febaccbe6429603f9ec57969511b76cd680452dba91fa01f54e756d", + ) + .unwrap(), + Address::try_from( + "03f57d1a813febaccbe6429603f9ec57969511b76cd680452dba91fa01f54e756e", + ) + .unwrap(), + ], + vec![U256::from(100u8), U256::from(200u8)], + U256::from(1u8), + ); + + let mut op_buff = Vec::new(); + onchain_operators.serialize(&mut op_buff).unwrap(); + let onchain_operators_b64 = general_purpose::STANDARD.encode(op_buff); + + let onchain_account_info = AccountInfo { + value: AccountInfoValue { + data: vec![onchain_operators_b64, "base64".to_string()], + }, + }; + + assert_eq!( + onchain_operators, + parse_onchain_operators(&onchain_account_info).unwrap() + ) + } + + #[test] + fn test_incorrect_deserialization_auth_weight_operators_failing_index() { + let onchain_account_info = AccountInfo { + value: AccountInfoValue { + data: vec![], // No data + }, + }; + + assert_eq!( + parse_onchain_operators(&onchain_account_info), + Err(VerificationError::ParsingError( + "Could not find solana account data.".to_string() + )) + ) + } + + #[test] + fn test_incorrect_deserialization_auth_weight_operators_failing_base64() { + let onchain_account_info = AccountInfo { + value: AccountInfoValue { + data: vec!["22".to_string(), "base64".to_string()], // Bad data base64. + }, + }; + + assert_eq!( + parse_onchain_operators(&onchain_account_info), + Err(VerificationError::ParsingError( + "Cannot base64 decode account data.".to_string() + )) + ) + } + + #[test] + fn test_incorrect_deserialization_auth_weight_operators_failing_borsh_deserialization() { + let onchain_operators = auth_weighted::types::operator::Operators::new( + vec![ + Address::try_from( + "03f57d1a813febaccbe6429603f9ec57969511b76cd680452dba91fa01f54e756d", + ) + .unwrap(), + Address::try_from( + "03f57d1a813febaccbe6429603f9ec57969511b76cd680452dba91fa01f54e756e", + ) + .unwrap(), + ], + vec![U256::from(100u8), U256::from(200u8)], + U256::from(1u8), + ); + + let mut op_buff = Vec::new(); + onchain_operators.serialize(&mut op_buff).unwrap(); + op_buff[0] = 1; // We mangle the data in order to borsh to fail. + let onchain_operators_b64 = general_purpose::STANDARD.encode(op_buff); + + let onchain_account_info = AccountInfo { + value: AccountInfoValue { + data: vec![onchain_operators_b64, "base64".to_string()], + }, + }; + + assert_eq!( + parse_onchain_operators(&onchain_account_info), + Err(VerificationError::ParsingError( + "Cannot borsh decode account data: failed to fill whole buffer".to_string() + )) + ); + } + + #[test] + fn test_verify_worker_set_operators_data_happy_path() { + let (ops, sol_ops) = matching_axelar_operators_and_onchain_operators(); + assert!(verify_worker_set_operators_data(&ops, &sol_ops)) + } + + #[test] + fn test_verify_worker_set_operators_data_fails_not_eq_threshold() { + let (mut ops, sol_ops) = matching_axelar_operators_and_onchain_operators(); + ops.threshold = crate::types::U256::from(Uint256::MAX); + assert_eq!(false, verify_worker_set_operators_data(&ops, &sol_ops)) + } + + #[test] + fn test_verify_worker_set_operators_data_fails_not_eq_op_addresses() { + let (mut ops, sol_ops) = matching_axelar_operators_and_onchain_operators(); + ops.weights_by_addresses = vec![ + ( + "03f57d1a813febaccbe6429603f9ec57969511b76cd680452dba91fa01f54e756d".to_string(), + crate::types::U256::from(Uint256::from_u128(100)), + ), + ( + //"03f57d1a813febaccbe6429603f9ec57969511b76cd680452dba91fa01f54e756e" --> original. + "03f57d1a813febaccbe6429603f9ec57969511b76cd680452dba91fa01f54e756a" // --> changed last character. + .to_string(), + crate::types::U256::from(Uint256::from_u128(200)), + ), + ]; + assert_eq!(false, verify_worker_set_operators_data(&ops, &sol_ops)) + } + + #[test] + fn test_verify_worker_set_operators_data_fails_not_eq_op_weights() { + let (mut ops, sol_ops) = matching_axelar_operators_and_onchain_operators(); + ops.weights_by_addresses = vec![ + ( + "03f57d1a813febaccbe6429603f9ec57969511b76cd680452dba91fa01f54e756d".to_string(), + crate::types::U256::from(Uint256::from_u128(100)), + ), + ( + "03f57d1a813febaccbe6429603f9ec57969511b76cd680452dba91fa01f54e756e".to_string(), + crate::types::U256::from(Uint256::from_u128(1)), // here is a different weight than expected. + ), + ]; + assert_eq!(false, verify_worker_set_operators_data(&ops, &sol_ops)) + } + + fn matching_axelar_operators_and_onchain_operators( + ) -> (Operators, auth_weighted::types::operator::Operators) { + let onchain_operators = auth_weighted::types::operator::Operators::new( + vec![ + Address::try_from( + "03f57d1a813febaccbe6429603f9ec57969511b76cd680452dba91fa01f54e756d", + ) + .unwrap(), + Address::try_from( + "03f57d1a813febaccbe6429603f9ec57969511b76cd680452dba91fa01f54e756e", + ) + .unwrap(), + ], + vec![U256::from(100u8), U256::from(200u8)], + U256::from(1u8), + ); + + let axelar_operators = Operators { + weights_by_addresses: vec![ + ( + "03f57d1a813febaccbe6429603f9ec57969511b76cd680452dba91fa01f54e756d" + .to_string(), + crate::types::U256::from(Uint256::from_u128(100)), + ), + ( + "03f57d1a813febaccbe6429603f9ec57969511b76cd680452dba91fa01f54e756e" + .to_string(), + crate::types::U256::from(Uint256::from_u128(200)), + ), + ], + threshold: crate::types::U256::from(Uint256::from_u128(1)), + }; + + (axelar_operators, onchain_operators) + } + + #[test] + fn comparing_u256_and_aw_u256_works() { + let u256 = crate::types::U256::from(Uint256::MAX); + let aw_u256 = auth_weighted::types::u256::U256::from_le_bytes([255; 32]); // Does not have a U256::MAX + assert!(u256 == aw_u256); + } } From 6a2dbb9221806394dcf2846cf96ec2179098f05f Mon Sep 17 00:00:00 2001 From: eloylp Date: Sun, 11 Feb 2024 14:29:44 +0100 Subject: [PATCH 009/109] Solana code refactors (clippy) --- ampd/src/lib.rs | 2 +- ampd/src/solana/verifier.rs | 25 +++++++++++-------------- 2 files changed, 12 insertions(+), 15 deletions(-) diff --git a/ampd/src/lib.rs b/ampd/src/lib.rs index e8e214a17..f13e50d7c 100644 --- a/ampd/src/lib.rs +++ b/ampd/src/lib.rs @@ -265,7 +265,7 @@ where handlers::solana_verify_worker_set::Handler::new( worker.clone(), cosmwasm_contract, - connection_router::state::ChainName::from(chain.name), + chain.name, json_rpc::Client::new_http(&chain.rpc_url) .change_context(Error::Connection)?, self.broadcaster.client(), diff --git a/ampd/src/solana/verifier.rs b/ampd/src/solana/verifier.rs index 8b475646b..a42822fa6 100644 --- a/ampd/src/solana/verifier.rs +++ b/ampd/src/solana/verifier.rs @@ -58,13 +58,13 @@ pub enum VerificationError { type Result = std::result::Result; pub fn parse_gateway_event(tx: &EncodedConfirmedTransactionWithStatusMeta) -> Result { - if let None = tx.meta.log_messages { + if tx.meta.log_messages.is_none() { return Err(VerificationError::NoLogMessages); } let program_data = tx.meta.log_messages.as_ref().unwrap(); program_data - .into_iter() - .find_map(|program_log| GatewayEvent::parse_log(program_log)) + .iter() + .find_map(GatewayEvent::parse_log) .ok_or(VerificationError::NoGatewayEventFound) } @@ -139,7 +139,7 @@ fn parse_onchain_operators(account_info: &AccountInfo) -> Result { Err(err) => { return Err(VerificationError::ParsingError(format!( "Cannot borsh decode account data: {}", - err.to_string() + err ))) } }; @@ -164,10 +164,10 @@ impl PartialEq for solana_verify_work let sol_addr = hex::decode(sol_addr_hex).map_err(|e| { VerificationError::ParsingError(format!( "Failed hex-decoding sol address: {}", - e.to_string() + e )) })?; - Ok((sol_addr, sol_weight.clone())) + Ok((sol_addr, *sol_weight)) }) .collect(); @@ -180,7 +180,7 @@ impl PartialEq for solana_verify_work // Iterate both iterators axelar addresses and weights which at the same time, // while querying the previously created map, which contains - match aw_ops + aw_ops .addresses() .iter() .zip(aw_ops.weights()) @@ -199,10 +199,7 @@ impl PartialEq for solana_verify_work return Err(()); } Ok(()) - }) { - Ok(_) => true, - Err(_) => false, - } + }).is_ok() } } @@ -344,7 +341,7 @@ mod tests { fn test_verify_worker_set_operators_data_fails_not_eq_threshold() { let (mut ops, sol_ops) = matching_axelar_operators_and_onchain_operators(); ops.threshold = crate::types::U256::from(Uint256::MAX); - assert_eq!(false, verify_worker_set_operators_data(&ops, &sol_ops)) + assert!(!verify_worker_set_operators_data(&ops, &sol_ops)) } #[test] @@ -362,7 +359,7 @@ mod tests { crate::types::U256::from(Uint256::from_u128(200)), ), ]; - assert_eq!(false, verify_worker_set_operators_data(&ops, &sol_ops)) + assert!(!verify_worker_set_operators_data(&ops, &sol_ops)) } #[test] @@ -378,7 +375,7 @@ mod tests { crate::types::U256::from(Uint256::from_u128(1)), // here is a different weight than expected. ), ]; - assert_eq!(false, verify_worker_set_operators_data(&ops, &sol_ops)) + assert!(!verify_worker_set_operators_data(&ops, &sol_ops)) } fn matching_axelar_operators_and_onchain_operators( From 862a8235b609515cc5b667bddf2c123b9def93dd Mon Sep 17 00:00:00 2001 From: eloylp Date: Sun, 11 Feb 2024 20:20:09 +0100 Subject: [PATCH 010/109] Add unhappy path tests for Solana workerset verification logic --- ampd/src/handlers/solana_verify_worker_set.rs | 183 ++++++++++++++++++ 1 file changed, 183 insertions(+) diff --git a/ampd/src/handlers/solana_verify_worker_set.rs b/ampd/src/handlers/solana_verify_worker_set.rs index 2e21f8b25..8b58878a5 100644 --- a/ampd/src/handlers/solana_verify_worker_set.rs +++ b/ampd/src/handlers/solana_verify_worker_set.rs @@ -175,3 +175,186 @@ where self.broadcast_vote(poll_id, vote).await } } + +#[cfg(test)] +mod tests { + use std::str::FromStr; + + use axelar_wasm_std::{nonempty, operators::Operators}; + use cosmwasm_std::HexBinary; + use prost::Message; + use tokio::sync::watch; + use voting_verifier::events::{PollMetadata, PollStarted, WorkerSetConfirmation}; + + use crate::{ + handlers::tests::get_event, queue::queued_broadcaster::MockBroadcasterClient, + solana::json_rpc::MockSolanaClient, PREFIX, + }; + + use tokio::test as async_test; + + use super::*; + + #[async_test] + async fn must_abort_if_voting_verifier_is_same_as_contract_address() { + let worker = TMAddress::random(PREFIX); + let voting_verifier = TMAddress::random(PREFIX); + + let mut rpc_client = MockSolanaClient::new(); + rpc_client.expect_get_transaction().never(); + rpc_client.expect_get_account_info().never(); + + let broadcast_client = MockBroadcasterClient::new(); + + let expiration = 100u64; + let (_, rx) = watch::channel(expiration - 1); + + let handler = Handler::new( + worker.clone(), + voting_verifier.clone(), + ChainName::from_str("solana").unwrap(), + rpc_client, + broadcast_client, + rx, + ); + + let event = get_event( + worker_set_poll_started_event(participants(2, Some(worker.clone())), expiration), + &TMAddress::random(PREFIX), + ); + + handler.handle(&event).await.unwrap(); + } + + #[async_test] + async fn must_abort_chain_does_not_match() { + let worker = TMAddress::random(PREFIX); + let voting_verifier = TMAddress::random(PREFIX); + + let mut rpc_client = MockSolanaClient::new(); + rpc_client.expect_get_transaction().never(); + rpc_client.expect_get_account_info().never(); + + let broadcast_client = MockBroadcasterClient::new(); + let expiration = 100u64; + let (_, rx) = watch::channel(expiration - 1); + + let handler = Handler::new( + worker.clone(), + voting_verifier.clone(), + ChainName::from_str("not_matching_chain").unwrap(), + rpc_client, + broadcast_client, + rx, + ); + + let event = get_event( + worker_set_poll_started_event(participants(2, Some(worker.clone())), expiration), + &voting_verifier, + ); + + handler.handle(&event).await.unwrap(); + } + + #[async_test] + async fn must_abort_if_worker_is_not_participant() { + let worker = TMAddress::random(PREFIX); + let voting_verifier = TMAddress::random(PREFIX); + + let mut rpc_client = MockSolanaClient::new(); + rpc_client.expect_get_transaction().never(); + rpc_client.expect_get_account_info().never(); + + let broadcast_client = MockBroadcasterClient::new(); + let expiration = 100u64; + let (_, rx) = watch::channel(expiration - 1); + + let handler = Handler::new( + worker.clone(), + voting_verifier.clone(), + ChainName::from_str("solana").unwrap(), + rpc_client, + broadcast_client, + rx, + ); + + let event = get_event( + worker_set_poll_started_event(participants(2, None), expiration), // worker is not here. + &voting_verifier, + ); + + handler.handle(&event).await.unwrap(); + } + + #[async_test] + async fn must_abort_on_expired_poll() { + let worker = TMAddress::random(PREFIX); + let voting_verifier = TMAddress::random(PREFIX); + + let mut rpc_client = MockSolanaClient::new(); + rpc_client.expect_get_transaction().never(); + rpc_client.expect_get_account_info().never(); + + let broadcast_client = MockBroadcasterClient::new(); + let expiration = 100u64; + let (_, rx) = watch::channel(expiration); + + let handler = Handler::new( + worker.clone(), + voting_verifier.clone(), + ChainName::from_str("solana").unwrap(), + rpc_client, + broadcast_client, + rx, + ); + + let event = get_event( + worker_set_poll_started_event(participants(2, Some(worker.clone())), expiration), + &voting_verifier, + ); + + handler.handle(&event).await.unwrap(); + } + + fn worker_set_poll_started_event(participants: Vec, expires_at: u64) -> PollStarted { + PollStarted::WorkerSet { + metadata: PollMetadata { + poll_id: "100".parse().unwrap(), + source_chain: "solana".parse().unwrap(), + source_gateway_address: nonempty::String::from_str( + "03f57d1a813febaccbe6429603f9ec57969511b76cd680452dba91fa01f54e756a", + ) + .unwrap(), + confirmation_height: 1, + expires_at, + participants: participants + .into_iter() + .map(|addr| cosmwasm_std::Addr::unchecked(addr.to_string())) + .collect(), + }, + worker_set: WorkerSetConfirmation { + tx_id: nonempty::String::from_str("value").unwrap(), + event_index: 1, + operators: Operators::new( + vec![( + HexBinary::from( + "03f57d1a813febaccbe6429603f9ec57969511b76cd680452dba91fa01f54e756d" + .to_string() + .encode_to_vec(), + ), + 1u64.into(), + )], + 2u64.into(), + ), + }, + } + } + + fn participants(n: u8, worker: Option) -> Vec { + (0..n) + .into_iter() + .map(|_| TMAddress::random(PREFIX)) + .chain(worker.into_iter()) + .collect() + } +} From c818eaf5c5e2b3ceea29af8ccfb70f2927e8feb2 Mon Sep 17 00:00:00 2001 From: eloylp Date: Sun, 11 Feb 2024 20:45:55 +0100 Subject: [PATCH 011/109] Complete comment --- ampd/src/solana/verifier.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ampd/src/solana/verifier.rs b/ampd/src/solana/verifier.rs index a42822fa6..6dc911f37 100644 --- a/ampd/src/solana/verifier.rs +++ b/ampd/src/solana/verifier.rs @@ -178,8 +178,8 @@ impl PartialEq for solana_verify_work // and preparing conversions beforehand in another type. }; - // Iterate both iterators axelar addresses and weights which at the same time, - // while querying the previously created map, which contains + // Iterate both iterators (addresses and weights) coming from Solana chain. At the same time, + // while querying the previously created map, which contains the Axelar counterpart. aw_ops .addresses() .iter() From 1c47e3229984a805ad56464d1f70971c598035b5 Mon Sep 17 00:00:00 2001 From: eloylp Date: Sun, 11 Feb 2024 20:46:06 +0100 Subject: [PATCH 012/109] Formatting --- ampd/src/solana/verifier.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ampd/src/solana/verifier.rs b/ampd/src/solana/verifier.rs index 6dc911f37..c3113a981 100644 --- a/ampd/src/solana/verifier.rs +++ b/ampd/src/solana/verifier.rs @@ -199,7 +199,8 @@ impl PartialEq for solana_verify_work return Err(()); } Ok(()) - }).is_ok() + }) + .is_ok() } } From a6cc4aecb57c6aa64a969742f904589b5d5c058a Mon Sep 17 00:00:00 2001 From: Stoyan Kirov Date: Thu, 22 Feb 2024 12:30:13 +0200 Subject: [PATCH 013/109] Solana verifier (#5) * Add solana verification functionality * Add unit tests to Solana message verifier * Refactor * Solana msg verifier reshape (#4) * remove comment * Use Solana types from Solana crates We were using hand crafted Solana types for interacting with RPC. * refactor: make clippy happy * Add some traces to Solana msg verifier * Remove outdated todos * refactor: re-use already calculated variable * Clarify test code usage * Solana msg verifier, try till one program log matches gw event * Add note to axelar to review when in PR * fail if tx_id is not found in signatures * Always fail on chain at handler level * Handle errors in case a tx cannot be found (finish the handler) * Remove commented code * Use original type from solana-axelar repo * Ensure that we verify sender address in sol msg verifier * Do not panic on PartialEq * refactor: clippy * remove no longer used code * Add more tests definition to solana msg verify iteration logic --------- Co-authored-by: eloylp --- Cargo.lock | 4655 ++++++++++++++----- Cargo.toml | 15 +- ampd/Cargo.lock | 5672 ------------------------ ampd/Cargo.toml | 25 +- ampd/src/handlers/config.rs | 21 + ampd/src/handlers/mod.rs | 1 + ampd/src/handlers/multisig.rs | 5 + ampd/src/handlers/solana_verify_msg.rs | 430 ++ ampd/src/lib.rs | 14 + ampd/src/solana/json_rpc.rs | 31 + ampd/src/solana/mod.rs | 3 + ampd/src/solana/tests/solana_tx.json | 36 + ampd/src/solana/verifier.rs | 381 ++ 13 files changed, 4524 insertions(+), 6765 deletions(-) delete mode 100644 ampd/Cargo.lock create mode 100644 ampd/src/handlers/solana_verify_msg.rs create mode 100644 ampd/src/solana/json_rpc.rs create mode 100644 ampd/src/solana/mod.rs create mode 100644 ampd/src/solana/tests/solana_tx.json create mode 100644 ampd/src/solana/verifier.rs diff --git a/Cargo.lock b/Cargo.lock index 635f5ef56..66c24a668 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -38,6 +38,15 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +[[package]] +name = "aead" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b613b8e1e3cf911a086f53f03bf286f52fd7a7258e4fa606f0ef220d39d8877" +dependencies = [ + "generic-array", +] + [[package]] name = "aead" version = "0.5.2" @@ -48,6 +57,18 @@ dependencies = [ "generic-array", ] +[[package]] +name = "aes" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e8b47f52ea9bae42228d07ec09eb676433d7c4ed1ebdf0f1d1c29ed446f1ab8" +dependencies = [ + "cfg-if", + "cipher 0.3.0", + "cpufeatures", + "opaque-debug", +] + [[package]] name = "aes" version = "0.8.3" @@ -55,73 +76,111 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac1f845298e95f983ff1944b728ae08b8cebab80d684f0a832ed0fc74dfa27e2" dependencies = [ "cfg-if", - "cipher", + "cipher 0.4.4", "cpufeatures", ] [[package]] name = "aes-gcm" -version = "0.10.2" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "209b47e8954a928e1d72e86eca7000ebb6655fe1436d33eefc2201cad027e237" +checksum = "831010a0f742e1209b3bcea8fab6a8e149051ba6099432c8cb2cc117dec3ead1" dependencies = [ - "aead", - "aes", - "cipher", - "ctr", + "aead 0.5.2", + "aes 0.8.3", + "cipher 0.4.4", + "ctr 0.9.2", "ghash", "subtle", ] +[[package]] +name = "aes-gcm-siv" +version = "0.10.3" +source = "git+https://github.com/RustCrypto/AEADs?rev=6105d7a5591aefa646a95d12b5e8d3f55a9214ef#6105d7a5591aefa646a95d12b5e8d3f55a9214ef" +dependencies = [ + "aead 0.4.3", + "aes 0.7.5", + "cipher 0.3.0", + "ctr 0.8.0", + "polyval 0.5.3", + "subtle", + "zeroize", +] + [[package]] name = "aggregate-verifier" version = "0.1.0" dependencies = [ - "axelar-wasm-std", - "axelar-wasm-std-derive", - "connection-router", + "axelar-wasm-std 0.1.0", + "axelar-wasm-std-derive 0.1.0", + "connection-router 0.1.0", "cosmwasm-schema", "cosmwasm-std", "cosmwasm-storage", "cw-multi-test", - "cw-storage-plus 1.1.0", - "cw-utils 1.0.1", + "cw-storage-plus 1.2.0", + "cw-utils 1.0.3", + "error-stack", + "report 0.1.0", + "schemars", + "serde", + "serde_json", + "thiserror", + "voting-verifier 0.1.0", +] + +[[package]] +name = "aggregate-verifier" +version = "0.1.0" +source = "git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f#c0904e1c72c99a174a93b5f6c18b30f52d20b71f" +dependencies = [ + "axelar-wasm-std 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "axelar-wasm-std-derive 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "connection-router 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "cosmwasm-schema", + "cosmwasm-std", + "cosmwasm-storage", + "cw-storage-plus 1.2.0", + "cw-utils 1.0.3", "error-stack", - "report", + "report 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", "schemars", "serde", "serde_json", "thiserror", - "voting-verifier", + "voting-verifier 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", ] [[package]] name = "ahash" -version = "0.7.6" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" +checksum = "5a824f2aa7e75a0c98c5a504fceb80649e9c35265d44525b5f94de4771a395cd" dependencies = [ - "getrandom", + "getrandom 0.2.12", "once_cell", "version_check", ] [[package]] name = "ahash" -version = "0.8.3" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f" +checksum = "77c3a9648d43b9cd48db467b3f87fdd6e146bcc88ab0180006cef2179fe11d01" dependencies = [ "cfg-if", + "getrandom 0.2.12", "once_cell", "version_check", + "zerocopy", ] [[package]] name = "aho-corasick" -version = "1.1.1" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea5d730647d4fadd988536d06fecce94b7b4f2a7efdae548f1cf4b63205518ab" +checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" dependencies = [ "memchr", ] @@ -152,12 +211,13 @@ name = "ampd" version = "0.1.0" dependencies = [ "async-trait", - "axelar-wasm-std", - "base64 0.21.4", + "axelar-wasm-std 0.1.0", + "base64 0.21.7", "bcs", - "clap", + "borsh 1.3.1", + "clap 4.4.17", "config", - "connection-router", + "connection-router 0.1.0", "cosmos-sdk-proto 0.16.0", "cosmrs", "cosmwasm-std", @@ -172,6 +232,7 @@ dependencies = [ "events", "events-derive", "futures", + "gateway 0.1.0 (git+ssh://git@github.com/eigerco/solana-axelar.git?branch=poc)", "generic-array", "hex", "humantime-serde", @@ -179,15 +240,19 @@ dependencies = [ "k256", "mockall", "move-core-types", - "multisig", + "multisig 0.1.0", "prost 0.11.9", - "rand", + "rand 0.8.5", "random-string", - "report", + "report 0.1.0", "serde", "serde_json", - "serde_with 3.3.0", - "service-registry", + "serde_with 3.4.0", + "service-registry 0.1.0", + "solana-client", + "solana-program", + "solana-sdk", + "solana-transaction-status", "sui-json-rpc-types", "sui-types", "tendermint 0.33.0", @@ -195,7 +260,7 @@ dependencies = [ "thiserror", "tokio", "tokio-stream", - "tokio-util 0.7.9", + "tokio-util 0.7.10", "toml 0.5.11", "tonic 0.8.3", "tonic-build", @@ -205,7 +270,7 @@ dependencies = [ "url", "valuable", "valuable-serde", - "voting-verifier", + "voting-verifier 0.1.0", ] [[package]] @@ -241,28 +306,37 @@ dependencies = [ "pkcs8 0.9.0", "quinn", "quinn-proto", - "rand", - "rcgen", - "ring", - "rustls 0.21.7", - "rustls-webpki 0.101.5", + "rand 0.8.5", + "rcgen 0.9.3", + "ring 0.16.20", + "rustls 0.21.10", + "rustls-webpki", "serde", "serde_json", - "socket2 0.5.4", + "socket2 0.5.5", "tap", "thiserror", "tokio", - "tokio-util 0.7.9", + "tokio-util 0.7.10", "tower", "tracing", "x509-parser", ] +[[package]] +name = "ansi_term" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" +dependencies = [ + "winapi", +] + [[package]] name = "anstream" -version = "0.5.0" +version = "0.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1f58811cfac344940f1a400b6e6231ce35171f614f26439e80f8c1465c5cc0c" +checksum = "4cd2405b3ac1faab2990b74d728624cd9fd115651fcecc7c2d8daf01376275ba" dependencies = [ "anstyle", "anstyle-parse", @@ -274,43 +348,43 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b84bf0a05bbb2a83e5eb6fa36bb6e87baa08193c35ff52bbf6b38d8af2890e46" +checksum = "7079075b41f533b8c61d2a4d073c4676e1f8b249ff94a393b0595db304e0dd87" [[package]] name = "anstyle-parse" -version = "0.2.1" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "938874ff5980b03a87c5524b3ae5b59cf99b1d6bc836848df7bc5ada9643c333" +checksum = "c75ac65da39e5fe5ab759307499ddad880d724eed2f6ce5b5e8a26f4f387928c" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.0.0" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b" +checksum = "e28923312444cdd728e4738b3f9c9cac739500909bb3d3c94b43551b16517648" dependencies = [ - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] name = "anstyle-wincon" -version = "2.1.0" +version = "3.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58f54d10c6dfa51283a066ceab3ec1ab78d13fae00aa49243a45e4571fb79dfd" +checksum = "1cd54b81ec8d6180e24654d0b371ad22fc3dd083b6ff8ba325b72e00c87660a7" dependencies = [ "anstyle", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] name = "anyhow" -version = "1.0.75" +version = "1.0.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6" +checksum = "080e9890a082662b09c1ad45f567faeeb47f22b5fb23895fbe1e651e718e25ca" [[package]] name = "ark-bls12-381" @@ -350,7 +424,7 @@ dependencies = [ "blake2", "derivative", "digest 0.10.7", - "sha2 0.10.7", + "sha2 0.10.8", ] [[package]] @@ -396,7 +470,7 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" dependencies = [ - "quote 1.0.33", + "quote 1.0.35", "syn 1.0.109", ] @@ -408,8 +482,8 @@ checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" dependencies = [ "num-bigint 0.4.4", "num-traits", - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.78", + "quote 1.0.35", "syn 1.0.109", ] @@ -481,8 +555,8 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ae3281bc6d0fd7e549af32b52511e1302185bd688fd3359fa36423346ff682ea" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.78", + "quote 1.0.35", "syn 1.0.109", ] @@ -505,7 +579,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" dependencies = [ "num-traits", - "rand", + "rand 0.8.5", ] [[package]] @@ -520,6 +594,12 @@ version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" +[[package]] +name = "ascii" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eab1c04a571841102f5345a8fc0f6bb3d31c315dec879b5c6e42e40ce7ffa34e" + [[package]] name = "ascii-canvas" version = "3.0.0" @@ -551,8 +631,8 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "726535892e8eae7e70657b4c8ea93d26b8553afb1ce617caee529ef96d7dee6c" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.78", + "quote 1.0.35", "syn 1.0.109", "synstructure", ] @@ -563,11 +643,28 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2777730b2039ac0f95f093556e61b6d26cebed5393ca6f152717777cec3a42ed" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.78", + "quote 1.0.35", "syn 1.0.109", ] +[[package]] +name = "assert_matches" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b34d609dfbaf33d6889b2b7106d3ca345eacad44200913df5ba02bfd31d2ba9" + +[[package]] +name = "async-channel" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" +dependencies = [ + "concurrent-queue", + "event-listener", + "futures-core", +] + [[package]] name = "async-compression" version = "0.3.15" @@ -582,6 +679,29 @@ dependencies = [ "tokio", ] +[[package]] +name = "async-compression" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc2d0cfb2a7388d34f590e76686704c494ed7aaceed62ee1ba35cbf363abc2a5" +dependencies = [ + "brotli", + "flate2", + "futures-core", + "memchr", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "async-mutex" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "479db852db25d9dbf6204e6cb6253698f175c15726470f78af0d918e99d6156e" +dependencies = [ + "event-listener", +] + [[package]] name = "async-stream" version = "0.3.5" @@ -599,9 +719,9 @@ version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2 1.0.78", + "quote 1.0.35", + "syn 2.0.48", ] [[package]] @@ -611,13 +731,13 @@ source = "git+https://github.com/mystenmark/async-task?rev=4e45b26e11126b191701b [[package]] name = "async-trait" -version = "0.1.73" +version = "0.1.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc00ceb34980c03614e35a3a4e218276a0a824e911d07651cd0d858a51e8c0f0" +checksum = "c980ee35e870bd1a4d2c8294d4c04d0499e67bca1e4b5cefcc693c2fa00caea9" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2 1.0.78", + "quote 1.0.35", + "syn 2.0.48", ] [[package]] @@ -631,6 +751,17 @@ dependencies = [ "rustc_version", ] +[[package]] +name = "atty" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" +dependencies = [ + "hermit-abi 0.1.19", + "libc", + "winapi", +] + [[package]] name = "auto_impl" version = "1.1.0" @@ -638,8 +769,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fee3da8ef1276b0bee5dd1c7258010d8fffd31801447323115a25560e1327b89" dependencies = [ "proc-macro-error", - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.78", + "quote 1.0.35", "syn 1.0.109", ] @@ -663,13 +794,35 @@ dependencies = [ "cosmwasm-std", "cosmwasm-storage", "cw-multi-test", - "cw-storage-plus 1.1.0", + "cw-storage-plus 1.2.0", "error-stack", "flagset", "hex", "num-traits", - "rand", - "report", + "rand 0.8.5", + "report 0.1.0", + "schemars", + "serde", + "serde_json", + "sha3 0.10.8", + "strum 0.25.0", + "thiserror", + "valuable", +] + +[[package]] +name = "axelar-wasm-std" +version = "0.1.0" +source = "git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f#c0904e1c72c99a174a93b5f6c18b30f52d20b71f" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "cosmwasm-storage", + "cw-storage-plus 1.2.0", + "error-stack", + "flagset", + "num-traits", + "report 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", "schemars", "serde", "serde_json", @@ -683,11 +836,24 @@ dependencies = [ name = "axelar-wasm-std-derive" version = "0.1.0" dependencies = [ - "axelar-wasm-std", + "axelar-wasm-std 0.1.0", + "error-stack", + "quote 1.0.35", + "report 0.1.0", + "syn 2.0.48", + "thiserror", +] + +[[package]] +name = "axelar-wasm-std-derive" +version = "0.1.0" +source = "git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f#c0904e1c72c99a174a93b5f6c18b30f52d20b71f" +dependencies = [ + "axelar-wasm-std 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", "error-stack", - "quote 1.0.33", - "report", - "syn 2.0.37", + "quote 1.0.35", + "report 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "syn 2.0.48", "thiserror", ] @@ -699,7 +865,7 @@ checksum = "3b829e4e32b91e643de6eafe82b1d90675f5874230191a4ffbc1b336dec4d6bf" dependencies = [ "async-trait", "axum-core", - "base64 0.21.4", + "base64 0.21.7", "bitflags 1.3.2", "bytes", "futures-util", @@ -708,7 +874,7 @@ dependencies = [ "http-body", "hyper", "itoa", - "matchit 0.7.2", + "matchit 0.7.3", "memchr", "mime", "percent-encoding", @@ -771,6 +937,12 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" +[[package]] +name = "base64" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3441f0f7b02788e948e47f457ca01f1d7e6d92c693bc132c22b087d3141c03ff" + [[package]] name = "base64" version = "0.13.1" @@ -779,9 +951,9 @@ checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" [[package]] name = "base64" -version = "0.21.4" +version = "0.21.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ba43ea6f343b788c8764558649e08df62f86c6ef251fdaeb1ffd010a9ae50a2" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" [[package]] name = "base64ct" @@ -793,20 +965,20 @@ checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" name = "batching" version = "0.1.0" dependencies = [ - "axelar-wasm-std", - "axelar-wasm-std-derive", + "axelar-wasm-std 0.1.0", + "axelar-wasm-std-derive 0.1.0", "cosmwasm-schema", "cosmwasm-std", "error-stack", - "report", + "report 0.1.0", "thiserror", ] [[package]] name = "bcs" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bd3ffe8b19a604421a5d461d4a70346223e535903fbc3067138bddbebddcf77" +checksum = "85b6598a2f5d564fb7855dc6b06fd1c38cff5a72bd8b863a4d021938497b440a" dependencies = [ "serde", "thiserror", @@ -842,6 +1014,12 @@ dependencies = [ "thiserror", ] +[[package]] +name = "bimap" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "230c5f1ca6a325a32553f8640d31ac9b49f2411e901e427570154868b46da4f7" + [[package]] name = "bincode" version = "1.3.3" @@ -863,13 +1041,13 @@ dependencies = [ "lazy_static", "lazycell", "peeking_take_while", - "prettyplease 0.2.15", - "proc-macro2 1.0.67", - "quote 1.0.33", + "prettyplease 0.2.16", + "proc-macro2 1.0.78", + "quote 1.0.35", "regex", "rustc-hash", "shlex", - "syn 2.0.37", + "syn 2.0.48", ] [[package]] @@ -879,13 +1057,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7e141fb0f8be1c7b45887af94c88b182472b57c96b56773250ae00cd6a14a164" dependencies = [ "bs58 0.5.0", - "hmac", + "hmac 0.12.1", "k256", "once_cell", "pbkdf2 0.12.2", "rand_core 0.6.4", "ripemd", - "sha2 0.10.7", + "sha2 0.10.8", "subtle", "zeroize", ] @@ -928,9 +1106,12 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.4.0" +version = "2.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635" +checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" +dependencies = [ + "serde", +] [[package]] name = "bitmaps" @@ -998,9 +1179,9 @@ dependencies = [ [[package]] name = "blake3" -version = "1.4.1" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "199c42ab6972d92c9f8995f086273d25c42fc0f7b2a1fcefba465c1352d25ba5" +checksum = "0231f06152bf547e9c2b5194f247cd97aacf6dcd8b15d8e5ec0663f64580da87" dependencies = [ "arrayref", "arrayvec", @@ -1075,15 +1256,139 @@ dependencies = [ [[package]] name = "bnum" -version = "0.8.0" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab9008b6bb9fc80b5277f2fe481c09e828743d9151203e804583eb4c9e15b31d" + +[[package]] +name = "bnum" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56953345e39537a3e18bdaeba4cb0c58a78c1f61f361dc0fa7c5c7340ae87c5f" +dependencies = [ + "serde", + "serde-big-array", +] + +[[package]] +name = "borsh" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15bf3650200d8bffa99015595e10f1fbd17de07abbc25bb067da79e769939bfa" +dependencies = [ + "borsh-derive 0.9.3", + "hashbrown 0.11.2", +] + +[[package]] +name = "borsh" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4114279215a005bc675e386011e594e1d9b800918cea18fcadadcce864a2046b" +dependencies = [ + "borsh-derive 0.10.3", + "hashbrown 0.13.2", +] + +[[package]] +name = "borsh" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f58b559fd6448c6e2fd0adb5720cd98a2506594cafa4737ff98c396f3e82f667" +dependencies = [ + "borsh-derive 1.3.1", + "cfg_aliases", +] + +[[package]] +name = "borsh-derive" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6441c552f230375d18e3cc377677914d2ca2b0d36e52129fe15450a2dce46775" +dependencies = [ + "borsh-derive-internal 0.9.3", + "borsh-schema-derive-internal 0.9.3", + "proc-macro-crate 0.1.5", + "proc-macro2 1.0.78", + "syn 1.0.109", +] + +[[package]] +name = "borsh-derive" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0754613691538d51f329cce9af41d7b7ca150bc973056f1156611489475f54f7" +dependencies = [ + "borsh-derive-internal 0.10.3", + "borsh-schema-derive-internal 0.10.3", + "proc-macro-crate 0.1.5", + "proc-macro2 1.0.78", + "syn 1.0.109", +] + +[[package]] +name = "borsh-derive" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7aadb5b6ccbd078890f6d7003694e33816e6b784358f18e15e7e6d9f065a57cd" +dependencies = [ + "once_cell", + "proc-macro-crate 3.0.0", + "proc-macro2 1.0.78", + "quote 1.0.35", + "syn 2.0.48", + "syn_derive", +] + +[[package]] +name = "borsh-derive-internal" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5449c28a7b352f2d1e592a8a28bf139bc71afb0764a14f3c02500935d8c44065" +dependencies = [ + "proc-macro2 1.0.78", + "quote 1.0.35", + "syn 1.0.109", +] + +[[package]] +name = "borsh-derive-internal" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "afb438156919598d2c7bad7e1c0adf3d26ed3840dbc010db1a882a65583ca2fb" +dependencies = [ + "proc-macro2 1.0.78", + "quote 1.0.35", + "syn 1.0.109", +] + +[[package]] +name = "borsh-schema-derive-internal" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdbd5696d8bfa21d53d9fe39a714a18538bad11492a42d066dbbc395fb1951c0" +dependencies = [ + "proc-macro2 1.0.78", + "quote 1.0.35", + "syn 1.0.109", +] + +[[package]] +name = "borsh-schema-derive-internal" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "128a44527fc0d6abf05f9eda748b9027536e12dff93f5acc8449f51583309350" +checksum = "634205cc43f74a1b9046ef87c4540ebda95696ec0f315024860cad7c5b0f5ccd" +dependencies = [ + "proc-macro2 1.0.78", + "quote 1.0.35", + "syn 1.0.109", +] [[package]] name = "brotli" -version = "3.3.4" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1a0b1dbcc8ae29329621f8d4f0d835787c1c38bb1401979b49d13b0b305ff68" +checksum = "516074a47ef4bce09577a3b379392300159ce5b1ba2e501ff1c819950066100f" dependencies = [ "alloc-no-stdlib", "alloc-stdlib", @@ -1092,9 +1397,9 @@ dependencies = [ [[package]] name = "brotli-decompressor" -version = "2.3.4" +version = "2.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b6561fd3f895a11e8f72af2cb7d22e08366bebc2b6b57f7744c4bda27034744" +checksum = "4e2e4afe60d7dd600fdd3de8d0f08c2b7ec039712e3b6137ff98b7004e82de4f" dependencies = [ "alloc-no-stdlib", "alloc-stdlib", @@ -1112,7 +1417,7 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f5353f36341f7451062466f0b755b96ac3a9547e4d7f6b70d603fc721a7d7896" dependencies = [ - "sha2 0.10.7", + "sha2 0.10.8", "tinyvec", ] @@ -1127,7 +1432,7 @@ dependencies = [ "curve25519-dalek-ng", "digest 0.9.0", "merlin", - "rand", + "rand 0.8.5", "rand_core 0.6.4", "serde", "serde_derive", @@ -1142,6 +1447,16 @@ version = "3.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" +[[package]] +name = "bv" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8834bb1d8ee5dc048ee3124f2c7c1afcc6bc9aed03f11e9dfd8c69470a5db340" +dependencies = [ + "feature-probe", + "serde", +] + [[package]] name = "byte-slice-cast" version = "1.2.2" @@ -1159,12 +1474,26 @@ name = "bytemuck" version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "374d28ec25809ee0e23827c2ab573d729e293f281dfe393500e7ad618baa61c6" +dependencies = [ + "bytemuck_derive", +] + +[[package]] +name = "bytemuck_derive" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "965ab7eb5f8f97d2a083c799f3a1b994fc397b2fe2da5d1da1626ce15a39f2b1" +dependencies = [ + "proc-macro2 1.0.78", + "quote 1.0.35", + "syn 2.0.48", +] [[package]] name = "byteorder" -version = "1.4.3" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" @@ -1205,20 +1534,30 @@ dependencies = [ "serde", ] +[[package]] +name = "caps" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "190baaad529bcfbde9e1a19022c42781bdb6ff9de25721abdb8fd98c0807730b" +dependencies = [ + "libc", + "thiserror", +] + [[package]] name = "cargo-platform" -version = "0.1.3" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2cfa25e60aea747ec7e1124f238816749faa93759c6ff5b31f1ccdda137f4479" +checksum = "ceed8ef69d8518a5dda55c07425450b58a4e1946f4951eab6d7191ee86c2443d" dependencies = [ "serde", ] [[package]] name = "cargo_metadata" -version = "0.17.0" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7daec1a2a2129eeba1644b220b4647ec537b0b5d4bfd6876fcc5a540056b592" +checksum = "2d886547e41f740c616ae73108f6eb70afe6d940c7bc697cb30f13daec073037" dependencies = [ "camino", "cargo-platform", @@ -1234,7 +1573,7 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "26b52a9543ae338f279b96b0b9fed9c8093744685043739079ce85cd58f289a6" dependencies = [ - "cipher", + "cipher 0.4.4", ] [[package]] @@ -1262,6 +1601,12 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "cfg_aliases" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" + [[package]] name = "chrono" version = "0.4.31" @@ -1270,14 +1615,25 @@ checksum = "7f2c685bad3eb3d45a01354cedb7d5faa66194d1d58ba6e267a8de788f79db38" dependencies = [ "android-tzdata", "iana-time-zone", + "js-sys", "num-traits", "serde", + "wasm-bindgen", "windows-targets 0.48.5", ] [[package]] name = "cipher" -version = "0.4.4" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7" +dependencies = [ + "generic-array", +] + +[[package]] +name = "cipher" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" dependencies = [ @@ -1287,9 +1643,9 @@ dependencies = [ [[package]] name = "clang-sys" -version = "1.6.1" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c688fc74432808e3eb684cae8830a86be1d66a2bd58e1f248ed0960a590baf6f" +checksum = "67523a3b4be3ce1989d607a828d036249522dd9c1c8de7f4dd2dae43a37369d1" dependencies = [ "glob", "libc", @@ -1298,9 +1654,40 @@ dependencies = [ [[package]] name = "clap" -version = "4.4.4" +version = "2.34.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c" +dependencies = [ + "ansi_term", + "atty", + "bitflags 1.3.2", + "strsim 0.8.0", + "textwrap 0.11.0", + "unicode-width", + "vec_map", +] + +[[package]] +name = "clap" +version = "3.2.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ea181bf566f71cb9a5d17a59e1871af638180a18fb0035c92ae62b705207123" +dependencies = [ + "atty", + "bitflags 1.3.2", + "clap_lex 0.2.4", + "indexmap 1.9.3", + "once_cell", + "strsim 0.10.0", + "termcolor", + "textwrap 0.16.0", +] + +[[package]] +name = "clap" +version = "4.4.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1d7b8d5ec32af0fadc644bf1fd509a688c2103b185644bb1e29d164e0703136" +checksum = "80932e03c33999b9235edb8655bc9df3204adc9887c2f95b50cb1deb9fd54253" dependencies = [ "clap_builder", "clap_derive", @@ -1308,33 +1695,42 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.4.4" +version = "4.4.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5179bb514e4d7c2051749d8fcefa2ed6d06a9f4e6d69faf3805f5d80b8cf8d56" +checksum = "d6c0db58c659eef1c73e444d298c27322a1b52f6927d2ad470c0c0f96fa7b8fa" dependencies = [ "anstream", "anstyle", - "clap_lex", - "strsim", + "clap_lex 0.6.0", + "strsim 0.10.0", ] [[package]] name = "clap_derive" -version = "4.4.2" +version = "4.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0862016ff20d69b84ef8247369fabf5c008a7417002411897d40ee1f4532b873" +checksum = "cf9804afaaf59a91e75b022a30fb7229a7901f60c755489cc61c9b423b836442" dependencies = [ "heck 0.4.1", - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2 1.0.78", + "quote 1.0.35", + "syn 2.0.48", ] [[package]] name = "clap_lex" -version = "0.5.1" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd7cc57abe963c6d3b9d8be5b06ba7c8957a930305ca90304f24ef040aa6f961" +checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5" +dependencies = [ + "os_str_bytes", +] + +[[package]] +name = "clap_lex" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "702fc72eb24e5a1e48ce58027a675bc24edd52096d5397d4aea7c6dd9eca0bd1" [[package]] name = "clear_on_drop" @@ -1375,10 +1771,10 @@ dependencies = [ "bs58 0.5.0", "coins-core", "digest 0.10.7", - "hmac", + "hmac 0.12.1", "k256", "serde", - "sha2 0.10.7", + "sha2 0.10.8", "thiserror", ] @@ -1390,11 +1786,11 @@ checksum = "3db8fba409ce3dc04f7d804074039eb68b960b0829161f8e06c95fea3f122528" dependencies = [ "bitvec 1.0.1", "coins-bip32", - "hmac", + "hmac 0.12.1", "once_cell", "pbkdf2 0.12.2", - "rand", - "sha2 0.10.7", + "rand 0.8.5", + "sha2 0.10.8", "thiserror", ] @@ -1404,7 +1800,7 @@ version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5286a0843c21f8367f7be734f89df9b822e0321d8bcce8d6e735aadff7d74979" dependencies = [ - "base64 0.21.4", + "base64 0.21.7", "bech32", "bs58 0.5.0", "digest 0.10.7", @@ -1413,7 +1809,7 @@ dependencies = [ "ripemd", "serde", "serde_derive", - "sha2 0.10.7", + "sha2 0.10.8", "sha3 0.10.8", "thiserror", ] @@ -1432,20 +1828,41 @@ checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" [[package]] name = "colored" -version = "2.0.4" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2674ec482fbc38012cf31e6c42ba0177b431a0cb6f15fe40efa5aab1bda516f6" +checksum = "cbf2150cce219b664a8a70df7a1f933836724b503f8a413af9365b4dcc4d90b8" dependencies = [ - "is-terminal", "lazy_static", "windows-sys 0.48.0", ] +[[package]] +name = "combine" +version = "3.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da3da6baa321ec19e1cc41d31bf599f00c783d0517095cdaf0332e3fe8d20680" +dependencies = [ + "ascii", + "byteorder", + "either", + "memchr", + "unreachable", +] + +[[package]] +name = "concurrent-queue" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d16048cd947b08fa32c24458a22f5dc5e835264f689f4f5653210c69fd107363" +dependencies = [ + "crossbeam-utils", +] + [[package]] name = "config" -version = "0.13.3" +version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d379af7f68bfc21714c6c7dea883544201741d2ce8274bb12fa54f89507f52a7" +checksum = "23738e11972c7643e4ec947840fc463b6a571afcd3e735bdfce7d03c7a784aca" dependencies = [ "async-trait", "json5", @@ -1464,20 +1881,44 @@ dependencies = [ name = "connection-router" version = "0.1.0" dependencies = [ - "axelar-wasm-std", - "axelar-wasm-std-derive", + "axelar-wasm-std 0.1.0", + "axelar-wasm-std-derive 0.1.0", "cosmwasm-schema", "cosmwasm-std", "cosmwasm-storage", "cw-multi-test", - "cw-storage-plus 1.1.0", + "cw-storage-plus 1.2.0", "error-stack", "flagset", "hex", "itertools 0.11.0", "mockall", - "rand", - "report", + "rand 0.8.5", + "report 0.1.0", + "schemars", + "serde", + "serde_json", + "sha3 0.10.8", + "thiserror", + "valuable", +] + +[[package]] +name = "connection-router" +version = "0.1.0" +source = "git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f#c0904e1c72c99a174a93b5f6c18b30f52d20b71f" +dependencies = [ + "axelar-wasm-std 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "axelar-wasm-std-derive 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "cosmwasm-schema", + "cosmwasm-std", + "cosmwasm-storage", + "cw-storage-plus 1.2.0", + "error-stack", + "flagset", + "itertools 0.11.0", + "mockall", + "report 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", "schemars", "serde", "serde_json", @@ -1490,10 +1931,10 @@ dependencies = [ name = "connection-router-api" version = "0.1.0" dependencies = [ - "axelar-wasm-std", + "axelar-wasm-std 0.1.0", "cosmwasm-schema", "cosmwasm-std", - "cw-storage-plus 1.1.0", + "cw-storage-plus 1.2.0", "error-stack", "flagset", "regex", @@ -1505,33 +1946,61 @@ dependencies = [ [[package]] name = "console" -version = "0.15.7" +version = "0.15.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c926e00cc70edefdc64d3a5ff31cc65bb97a3460097762bd23afb4d8145fccf8" +checksum = "0e1f83fc076bd6dd27517eacdf25fef6c4dfe5f1d7448bafaaf3a26f13b5e4eb" dependencies = [ "encode_unicode", "lazy_static", "libc", - "windows-sys 0.45.0", + "unicode-width", + "windows-sys 0.52.0", +] + +[[package]] +name = "console_error_panic_hook" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc" +dependencies = [ + "cfg-if", + "wasm-bindgen", +] + +[[package]] +name = "console_log" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e89f72f65e8501878b8a004d5a1afb780987e2ce2b4532c562e367a72c57499f" +dependencies = [ + "log", + "web-sys", ] [[package]] name = "const-hex" -version = "1.8.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08849ed393c907c90016652a01465a12d86361cd38ad2a7de026c56a520cc259" +checksum = "a5104de16b218eddf8e34ffe2f86f74bfa4e61e95a1b89732fccf6325efd0557" dependencies = [ "cfg-if", "cpufeatures", "hex", + "proptest", "serde", ] [[package]] name = "const-oid" -version = "0.9.5" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4c78c047431fee22c1a7bb92e00ad095a02a983affe4d8a72e2a2c62c1b94f3" + +[[package]] +name = "const-oid" +version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28c122c3980598d243d63d9a704629a2d748d101f278052ff068be5a4423ab6f" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" [[package]] name = "constant_time_eq" @@ -1562,9 +2031,9 @@ dependencies = [ [[package]] name = "core-foundation" -version = "0.9.3" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" dependencies = [ "core-foundation-sys", "libc", @@ -1572,9 +2041,9 @@ dependencies = [ [[package]] name = "core-foundation-sys" -version = "0.8.4" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" +checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" [[package]] name = "core2" @@ -1618,7 +2087,7 @@ dependencies = [ "cosmos-sdk-proto 0.19.0", "ecdsa", "eyre", - "getrandom", + "getrandom 0.2.12", "k256", "rand_core 0.6.4", "serde", @@ -1630,11 +2099,12 @@ dependencies = [ [[package]] name = "cosmwasm-crypto" -version = "1.4.0" +version = "1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ca101fbf2f76723711a30ea3771ef312ec3ec254ad021b237871ed802f9f175" +checksum = "8ed6aa9f904de106fa16443ad14ec2abe75e94ba003bb61c681c0e43d4c58d2a" dependencies = [ "digest 0.10.7", + "ecdsa", "ed25519-zebra", "k256", "rand_core 0.6.4", @@ -1643,18 +2113,18 @@ dependencies = [ [[package]] name = "cosmwasm-derive" -version = "1.4.0" +version = "1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c73d2dd292f60e42849d2b07c03d809cf31e128a4299a805abd6d24553bcaaf5" +checksum = "40abec852f3d4abec6d44ead9a58b78325021a1ead1e7229c3471414e57b2e49" dependencies = [ "syn 1.0.109", ] [[package]] name = "cosmwasm-schema" -version = "1.4.0" +version = "1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ce34a08020433989af5cc470104f6bd22134320fe0221bd8aeb919fd5ec92d5" +checksum = "b166215fbfe93dc5575bae062aa57ae7bb41121cffe53bac33b033257949d2a9" dependencies = [ "cosmwasm-schema-derive", "schemars", @@ -1665,23 +2135,24 @@ dependencies = [ [[package]] name = "cosmwasm-schema-derive" -version = "1.4.0" +version = "1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96694ec781a7dd6dea1f968a2529ade009c21ad999c88b5f53d6cc495b3b96f7" +checksum = "8bf12f8e20bb29d1db66b7ca590bc2f670b548d21e9be92499bc0f9022a994a8" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.78", + "quote 1.0.35", "syn 1.0.109", ] [[package]] name = "cosmwasm-std" -version = "1.4.0" +version = "1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a44d3f9c25b2f864737c6605a98f2e4675d53fd8bbc7cf4d7c02475661a793d" +checksum = "ad011ae7447188e26e4a7dbca2fcd0fc186aa21ae5c86df0503ea44c78f9e469" dependencies = [ - "base64 0.21.4", - "bnum", + "base64 0.21.7", + "bech32", + "bnum 0.8.1", "cosmwasm-crypto", "cosmwasm-derive", "derivative", @@ -1690,15 +2161,16 @@ dependencies = [ "schemars", "serde", "serde-json-wasm", - "sha2 0.10.7", + "sha2 0.10.8", + "static_assertions", "thiserror", ] [[package]] name = "cosmwasm-storage" -version = "1.4.0" +version = "1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab544dfcad7c9e971933d522d99ec75cc8ddfa338854bb992b092e11bcd7e818" +checksum = "66de2ab9db04757bcedef2b5984fbe536903ada4a8a9766717a4a71197ef34f6" dependencies = [ "cosmwasm-std", "serde", @@ -1706,9 +2178,9 @@ dependencies = [ [[package]] name = "cpufeatures" -version = "0.2.9" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a17b76ff3a4162b0b27f354a0c87015ddad39d35f9c0c36607a3bdd175dde1f1" +checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" dependencies = [ "libc", ] @@ -1724,46 +2196,37 @@ dependencies = [ [[package]] name = "crossbeam-channel" -version = "0.5.8" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200" +checksum = "176dc175b78f56c0f321911d9c8eb2b77a78a4860b9c19db83835fea1a46649b" dependencies = [ - "cfg-if", "crossbeam-utils", ] [[package]] name = "crossbeam-deque" -version = "0.8.3" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef" +checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" dependencies = [ - "cfg-if", "crossbeam-epoch", "crossbeam-utils", ] [[package]] name = "crossbeam-epoch" -version = "0.9.15" +version = "0.9.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" dependencies = [ - "autocfg", - "cfg-if", "crossbeam-utils", - "memoffset", - "scopeguard", ] [[package]] name = "crossbeam-utils" -version = "0.8.16" +version = "0.8.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294" -dependencies = [ - "cfg-if", -] +checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" [[package]] name = "crunchy" @@ -1773,9 +2236,9 @@ checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" [[package]] name = "crypto-bigint" -version = "0.5.3" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "740fe28e594155f10cfc383984cbefd529d7396050557148f79cb0f621204124" +checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" dependencies = [ "generic-array", "rand_core 0.6.4", @@ -1794,6 +2257,16 @@ dependencies = [ "typenum", ] +[[package]] +name = "crypto-mac" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab" +dependencies = [ + "generic-array", + "subtle", +] + [[package]] name = "ct-logs" version = "0.8.0" @@ -1803,24 +2276,33 @@ dependencies = [ "sct 0.6.1", ] +[[package]] +name = "ctr" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "049bb91fb4aaf0e3c7efa6cd5ef877dbbbd15b39dad06d9948de4ec8a75761ea" +dependencies = [ + "cipher 0.3.0", +] + [[package]] name = "ctr" version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" dependencies = [ - "cipher", + "cipher 0.4.4", ] [[package]] name = "curve25519-dalek" -version = "3.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b9fdf9972b2bd6af2d913799d9ebc165ea4d2e65878e329d9c6b372c4491b61" +version = "3.2.1" +source = "git+https://github.com/dalek-cryptography/curve25519-dalek?rev=8274d5cbb6fc3f38cdc742b4798173895cd2a290#8274d5cbb6fc3f38cdc742b4798173895cd2a290" dependencies = [ "byteorder", "digest 0.9.0", "rand_core 0.5.1", + "serde", "subtle", "zeroize", ] @@ -1848,9 +2330,9 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2 1.0.78", + "quote 1.0.35", + "syn 2.0.48", ] [[package]] @@ -1899,9 +2381,9 @@ dependencies = [ [[package]] name = "cw-storage-plus" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f0e92a069d62067f3472c62e30adedb4cab1754725c0f2a682b3128d2bf3c79" +checksum = "d5ff29294ee99373e2cd5fd21786a3c0ced99a52fec2ca347d565489c61b723c" dependencies = [ "cosmwasm-std", "schemars", @@ -1925,13 +2407,13 @@ dependencies = [ [[package]] name = "cw-utils" -version = "1.0.1" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c80e93d1deccb8588db03945016a292c3c631e6325d349ebb35d2db6f4f946f7" +checksum = "1c4a657e5caacc3a0d00ee96ca8618745d050b8f757c709babafb81208d4239c" dependencies = [ "cosmwasm-schema", "cosmwasm-std", - "cw2 1.1.0", + "cw2 1.1.2", "schemars", "semver", "serde", @@ -1953,14 +2435,15 @@ dependencies = [ [[package]] name = "cw2" -version = "1.1.0" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29ac2dc7a55ad64173ca1e0a46697c31b7a5c51342f55a1e84a724da4eb99908" +checksum = "c6c120b24fbbf5c3bedebb97f2cc85fbfa1c3287e09223428e7e597b5293c1fa" dependencies = [ "cosmwasm-schema", "cosmwasm-std", - "cw-storage-plus 1.1.0", + "cw-storage-plus 1.2.0", "schemars", + "semver", "serde", "thiserror", ] @@ -1993,9 +2476,9 @@ checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0" dependencies = [ "fnv", "ident_case", - "proc-macro2 1.0.67", - "quote 1.0.33", - "strsim", + "proc-macro2 1.0.78", + "quote 1.0.35", + "strsim 0.10.0", "syn 1.0.109", ] @@ -2007,10 +2490,10 @@ checksum = "177e3443818124b357d8e76f53be906d60937f0d3a90773a664fa63fa253e621" dependencies = [ "fnv", "ident_case", - "proc-macro2 1.0.67", - "quote 1.0.33", - "strsim", - "syn 2.0.37", + "proc-macro2 1.0.78", + "quote 1.0.35", + "strsim 0.10.0", + "syn 2.0.48", ] [[package]] @@ -2020,7 +2503,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e" dependencies = [ "darling_core 0.14.4", - "quote 1.0.33", + "quote 1.0.35", "syn 1.0.109", ] @@ -2031,8 +2514,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "836a9bbc7ad63342d6d6e7b815ccab164bc77a2d95d84bc3117a8c0d5c98e2d5" dependencies = [ "darling_core 0.20.3", - "quote 1.0.33", - "syn 2.0.37", + "quote 1.0.35", + "syn 2.0.48", ] [[package]] @@ -2042,7 +2525,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" dependencies = [ "cfg-if", - "hashbrown 0.14.0", + "hashbrown 0.14.3", "lock_api", "once_cell", "parking_lot_core", @@ -2050,15 +2533,15 @@ dependencies = [ [[package]] name = "data-encoding" -version = "2.4.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2e66c9d817f1720209181c316d28635c050fa304f9c79e47a520882661b7308" +checksum = "7e962a19be5cfc3f3bf6dd8f61eb50107f356ad6270fbb3ed41476571db78be5" [[package]] name = "data-encoding-macro" -version = "0.1.13" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c904b33cc60130e1aeea4956ab803d08a3f4a0ca82d64ed757afac3891f2bb99" +checksum = "20c01c06f5f429efdf2bae21eb67c28b3df3cf85b7dd2d8ef09c0838dac5d33e" dependencies = [ "data-encoding", "data-encoding-macro-internal", @@ -2066,21 +2549,30 @@ dependencies = [ [[package]] name = "data-encoding-macro-internal" -version = "0.1.11" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fdf3fce3ce863539ec1d7fd1b6dcc3c645663376b43ed376bbf887733e4f772" +checksum = "0047d07f2c89b17dd631c80450d69841a6b5d7fb17278cbc43d7e4cfcf2576f3" dependencies = [ "data-encoding", "syn 1.0.109", ] +[[package]] +name = "der" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6919815d73839e7ad218de758883aae3a257ba6759ce7a9992501efbb53d705c" +dependencies = [ + "const-oid 0.7.1", +] + [[package]] name = "der" version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f1a467a65c5e759bce6e65eaf91cc29f466cdc57cb65777bd646872a8a1fd4de" dependencies = [ - "const-oid", + "const-oid 0.9.6", "pem-rfc7468 0.6.0", "zeroize", ] @@ -2091,7 +2583,7 @@ version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fffa369a668c8af7dbf8b5e56c9f744fbd399949ed171606040001947de40b1c" dependencies = [ - "const-oid", + "const-oid 0.9.6", "der_derive", "pem-rfc7468 0.7.0", "zeroize", @@ -2117,17 +2609,18 @@ version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5fe87ce4529967e0ba1dcf8450bab64d97dfd5010a6256187ffe2e43e6f0e049" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2 1.0.78", + "quote 1.0.35", + "syn 2.0.48", ] [[package]] name = "deranged" -version = "0.3.8" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2696e8a945f658fd14dc3b87242e6b80cd0f36ff04ea560fa39082368847946" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" dependencies = [ + "powerfmt", "serde", ] @@ -2137,19 +2630,25 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4255bb7dd538590188bd0aea52e48bd699b19bd90b0d069ec2ced8461fe23273" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.78", + "quote 1.0.35", "syn 1.0.109", ] +[[package]] +name = "derivation-path" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e5c37193a1db1d8ed868c03ec7b152175f26160a5b740e5e484143877e0adf0" + [[package]] name = "derivative" version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.78", + "quote 1.0.35", "syn 1.0.109", ] @@ -2169,8 +2668,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c11bdc11a0c47bc7d37d582b5285da6849c96681023680b906673c5707af7b0f" dependencies = [ "darling 0.14.4", - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.78", + "quote 1.0.35", "syn 1.0.109", ] @@ -2191,12 +2690,24 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" dependencies = [ "convert_case 0.4.0", - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.78", + "quote 1.0.35", "rustc_version", "syn 1.0.109", ] +[[package]] +name = "dialoguer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59c6f2989294b9a498d3ad5491a79c6deb604617378e1cdc4bfc1c1361fe2f87" +dependencies = [ + "console", + "shell-words", + "tempfile", + "zeroize", +] + [[package]] name = "diff" version = "0.1.13" @@ -2231,7 +2742,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ "block-buffer 0.10.4", - "const-oid", + "const-oid 0.9.6", "crypto-common", "subtle", ] @@ -2284,9 +2795,32 @@ version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "487585f4d0c6655fe74905e2504d8ad6908e4db67f744eb140876906c2f3175d" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2 1.0.78", + "quote 1.0.35", + "syn 2.0.48", +] + +[[package]] +name = "dlopen2" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09b4f5f101177ff01b8ec4ecc81eead416a8aa42819a2869311b3420fa114ffa" +dependencies = [ + "dlopen2_derive", + "libc", + "once_cell", + "winapi", +] + +[[package]] +name = "dlopen2_derive" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6cbae11b3de8fce2a456e8ea3dada226b35fe791f0dc1d360c0941f0bb681f3" +dependencies = [ + "proc-macro2 1.0.78", + "quote 1.0.35", + "syn 2.0.48", ] [[package]] @@ -2315,9 +2849,15 @@ checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b" [[package]] name = "dyn-clone" -version = "1.0.14" +version = "1.0.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "545b22097d44f8a9581187cdf93de7a71e4722bf51200cfaba810865b49a495d" + +[[package]] +name = "eager" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23d2f3407d9a573d666de4b5bdf10569d73ca9478087346697dcbae6244bfbcd" +checksum = "abe71d579d1812060163dff96056261deb5bf6729b100fa2e36a68b9649ba3d3" [[package]] name = "ec-gpu" @@ -2327,16 +2867,16 @@ checksum = "bd63582de2b59ea1aa48d7c1941b5d87618d95484397521b3acdfa0e1e9f5e45" [[package]] name = "ecdsa" -version = "0.16.8" +version = "0.16.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4b1e0c257a9e9f25f90ff76d7a68360ed497ee519c8e428d1825ef0000799d4" +checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" dependencies = [ "der 0.7.8", "digest 0.10.7", "elliptic-curve", "rfc6979", - "signature 2.1.0", - "spki 0.7.2", + "signature 2.2.0", + "spki 0.7.3", ] [[package]] @@ -2352,12 +2892,12 @@ dependencies = [ [[package]] name = "ed25519" -version = "2.2.2" +version = "2.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60f6d271ca33075c88028be6f04d502853d63a5ece419d269c15315d4fc1cf1d" +checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" dependencies = [ "pkcs8 0.10.2", - "signature 2.1.0", + "signature 2.2.0", ] [[package]] @@ -2375,6 +2915,20 @@ dependencies = [ "zeroize", ] +[[package]] +name = "ed25519-dalek" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c762bae6dcaf24c4c84667b8579785430908723d5c889f469d76a41d59cc7a9d" +dependencies = [ + "curve25519-dalek 3.2.1", + "ed25519 1.5.3", + "rand 0.7.3", + "serde", + "sha2 0.9.9", + "zeroize", +] + [[package]] name = "ed25519-dalek" version = "2.1.0" @@ -2382,22 +2936,34 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1f628eaec48bfd21b865dc2950cfa014450c01d2fa2b69a86c2fd5844ec523c0" dependencies = [ "curve25519-dalek 4.1.1", - "ed25519 2.2.2", + "ed25519 2.2.3", "rand_core 0.6.4", "serde", - "sha2 0.10.7", - "signature 2.1.0", + "sha2 0.10.8", + "signature 2.2.0", "subtle", "zeroize", ] +[[package]] +name = "ed25519-dalek-bip32" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d2be62a4061b872c8c0873ee4fc6f101ce7b889d039f019c5fa2af471a59908" +dependencies = [ + "derivation-path", + "ed25519-dalek 1.0.1", + "hmac 0.12.1", + "sha2 0.10.8", +] + [[package]] name = "ed25519-zebra" version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c24f403d068ad0b359e577a77f92392118be3f3c927538f2bb544a5ecd828c6" dependencies = [ - "curve25519-dalek 3.2.0", + "curve25519-dalek 3.2.1", "hashbrown 0.12.3", "hex", "rand_core 0.6.4", @@ -2414,9 +2980,9 @@ checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" [[package]] name = "elliptic-curve" -version = "0.13.5" +version = "0.13.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "968405c8fdc9b3bf4df0a6638858cc0b52462836ab6b1c87377785dd09cf1c0b" +checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" dependencies = [ "base16ct", "crypto-bigint", @@ -2462,12 +3028,12 @@ version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fe81b5c06ecfdbc71dd845216f225f53b62a10cb8a16c946836a3467f701d05b" dependencies = [ - "base64 0.21.4", + "base64 0.21.7", "bytes", "hex", "k256", "log", - "rand", + "rand 0.8.5", "rlp", "serde", "sha3 0.10.8", @@ -2488,11 +3054,31 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f16ef37b2a9b242295d61a154ee91ae884afff6b8b933b486b12481cc58310ca" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.78", + "quote 1.0.35", "syn 1.0.109", ] +[[package]] +name = "enum-iterator" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fd242f399be1da0a5354aa462d57b4ab2b4ee0683cc552f7c007d2d12d36e94" +dependencies = [ + "enum-iterator-derive", +] + +[[package]] +name = "enum-iterator-derive" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03cdc46ec28bd728e67540c528013c6a10eb69a02eb31078a1bda695438cbfb8" +dependencies = [ + "proc-macro2 1.0.78", + "quote 1.0.35", + "syn 2.0.48", +] + [[package]] name = "enum_dispatch" version = "0.3.12" @@ -2500,9 +3086,22 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f33313078bb8d4d05a2733a94ac4c2d8a0df9a2b84424ebf4f33bfc224a890e" dependencies = [ "once_cell", - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2 1.0.78", + "quote 1.0.35", + "syn 2.0.48", +] + +[[package]] +name = "env_logger" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a12e6657c4c97ebab115a42dcee77225f7f482cdd841cf7088c657a42e9e00e7" +dependencies = [ + "atty", + "humantime", + "log", + "regex", + "termcolor", ] [[package]] @@ -2523,23 +3122,12 @@ dependencies = [ [[package]] name = "errno" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "136526188508e25c6fef639d7927dfb3e0e3084488bf202267829cf7fc23dbdd" -dependencies = [ - "errno-dragonfly", - "libc", - "windows-sys 0.48.0", -] - -[[package]] -name = "errno-dragonfly" -version = "0.1.2" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" +checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" dependencies = [ - "cc", "libc", + "windows-sys 0.52.0", ] [[package]] @@ -2559,17 +3147,17 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1fda3bf123be441da5260717e0661c25a2fd9cb2b2c1d20bf2e05580047158ab" dependencies = [ - "aes", - "ctr", + "aes 0.8.3", + "ctr 0.9.2", "digest 0.10.7", "hex", - "hmac", + "hmac 0.12.1", "pbkdf2 0.11.0", - "rand", + "rand 0.8.5", "scrypt", "serde", "serde_json", - "sha2 0.10.7", + "sha2 0.10.8", "sha3 0.10.8", "thiserror", "uuid 0.8.2", @@ -2618,16 +3206,16 @@ dependencies = [ "impl-codec 0.6.0", "impl-rlp", "impl-serde 0.4.0", - "primitive-types 0.12.1", + "primitive-types 0.12.2", "scale-info", "uint", ] [[package]] name = "ethers" -version = "2.0.10" +version = "2.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ad13497f6e0a24292fc7b408e30d22fe9dc262da1f40d7b542c3a44e7fc0476" +checksum = "1a5344eea9b20effb5efeaad29418215c4d27017639fd1f908260f59cbbd226e" dependencies = [ "ethers-addressbook", "ethers-contract", @@ -2641,9 +3229,9 @@ dependencies = [ [[package]] name = "ethers-addressbook" -version = "2.0.10" +version = "2.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6e9e8acd0ed348403cc73a670c24daba3226c40b98dc1a41903766b3ab6240a" +checksum = "9bf35eb7d2e2092ad41f584951e08ec7c077b142dba29c4f1b8f52d2efddc49c" dependencies = [ "ethers-core", "once_cell", @@ -2653,9 +3241,9 @@ dependencies = [ [[package]] name = "ethers-contract" -version = "2.0.10" +version = "2.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d79269278125006bb0552349c03593ffa9702112ca88bc7046cc669f148fb47c" +checksum = "0111ead599d17a7bff6985fd5756f39ca7033edc79a31b23026a8d5d64fa95cd" dependencies = [ "const-hex", "ethers-contract-abigen", @@ -2672,9 +3260,9 @@ dependencies = [ [[package]] name = "ethers-contract-abigen" -version = "2.0.10" +version = "2.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce95a43c939b2e4e2f3191c5ad4a1f279780b8a39139c9905b43a7433531e2ab" +checksum = "bbdfb952aafd385b31d316ed80d7b76215ce09743c172966d840e96924427e0c" dependencies = [ "Inflector", "const-hex", @@ -2682,39 +3270,39 @@ dependencies = [ "ethers-core", "ethers-etherscan", "eyre", - "prettyplease 0.2.15", - "proc-macro2 1.0.67", - "quote 1.0.33", + "prettyplease 0.2.16", + "proc-macro2 1.0.78", + "quote 1.0.35", "regex", "reqwest", "serde", "serde_json", - "syn 2.0.37", - "toml 0.7.8", + "syn 2.0.48", + "toml 0.8.8", "walkdir", ] [[package]] name = "ethers-contract-derive" -version = "2.0.10" +version = "2.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e9ce44906fc871b3ee8c69a695ca7ec7f70e50cb379c9b9cb5e532269e492f6" +checksum = "7465c814a2ecd0de0442160da13584205d1cdc08f4717a6511cad455bd5d7dc4" dependencies = [ "Inflector", "const-hex", "ethers-contract-abigen", "ethers-core", - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.78", + "quote 1.0.35", "serde_json", - "syn 2.0.37", + "syn 2.0.48", ] [[package]] name = "ethers-core" -version = "2.0.10" +version = "2.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0a17f0708692024db9956b31d7a20163607d2745953f5ae8125ab368ba280ad" +checksum = "918b1a9ba585ea61022647def2f27c29ba19f6d2a4a4c8f68a9ae97fd5769737" dependencies = [ "arrayvec", "bytes", @@ -2725,15 +3313,15 @@ dependencies = [ "ethabi", "generic-array", "k256", - "num_enum", + "num_enum 0.7.2", "once_cell", "open-fastrlp", - "rand", + "rand 0.8.5", "rlp", "serde", "serde_json", "strum 0.25.0", - "syn 2.0.37", + "syn 2.0.48", "tempfile", "thiserror", "tiny-keccak", @@ -2742,10 +3330,11 @@ dependencies = [ [[package]] name = "ethers-etherscan" -version = "2.0.10" +version = "2.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e53451ea4a8128fbce33966da71132cf9e1040dcfd2a2084fd7733ada7b2045" +checksum = "facabf8551b4d1a3c08cb935e7fca187804b6c2525cc0dafb8e5a6dd453a24de" dependencies = [ + "chrono", "ethers-core", "reqwest", "semver", @@ -2757,9 +3346,9 @@ dependencies = [ [[package]] name = "ethers-middleware" -version = "2.0.10" +version = "2.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "473f1ccd0c793871bbc248729fa8df7e6d2981d6226e4343e3bbaa9281074d5d" +checksum = "681ece6eb1d10f7cf4f873059a77c04ff1de4f35c63dd7bccde8f438374fcb93" dependencies = [ "async-trait", "auto_impl", @@ -2784,13 +3373,13 @@ dependencies = [ [[package]] name = "ethers-providers" -version = "2.0.10" +version = "2.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6838fa110e57d572336178b7c79e94ff88ef976306852d8cb87d9e5b1fc7c0b5" +checksum = "25d6c0c9455d93d4990c06e049abf9b30daf148cf461ee939c11d88907c60816" dependencies = [ "async-trait", "auto_impl", - "base64 0.21.4", + "base64 0.21.7", "bytes", "const-hex", "enr", @@ -2821,9 +3410,9 @@ dependencies = [ [[package]] name = "ethers-signers" -version = "2.0.10" +version = "2.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ea44bec930f12292866166f9ddbea6aa76304850e4d8dcd66dc492b43d00ff1" +checksum = "0cb1b714e227bbd2d8c53528adb580b203009728b17d0d0e4119353aa9bc5532" dependencies = [ "async-trait", "coins-bip32", @@ -2832,17 +3421,17 @@ dependencies = [ "elliptic-curve", "eth-keystore", "ethers-core", - "rand", - "sha2 0.10.7", + "rand 0.8.5", + "sha2 0.10.8", "thiserror", "tracing", ] [[package]] name = "ethers-solc" -version = "2.0.10" +version = "2.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de34e484e7ae3cab99fbfd013d6c5dc7f9013676a4e0e414d8b12e1213e8b3ba" +checksum = "cc2e46e3ec8ef0c986145901fa9864205dc4dcee701f9846be2d56112d34bdea" dependencies = [ "cfg-if", "const-hex", @@ -2872,16 +3461,22 @@ dependencies = [ [[package]] name = "ethnum" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c8ff382b2fa527fb7fb06eeebfc5bbb3f17e3cc6b9d70b006c41daa8824adac" +checksum = "b90ca2580b73ab6a1f724b76ca11ab632df820fd6040c336200d2c1df7b3c82c" + +[[package]] +name = "event-listener" +version = "2.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" [[package]] name = "events" version = "0.1.0" dependencies = [ - "axelar-wasm-std", - "base64 0.21.4", + "axelar-wasm-std 0.1.0", + "base64 0.21.7", "error-stack", "serde_json", "tendermint 0.33.0", @@ -2894,17 +3489,17 @@ version = "0.1.0" dependencies = [ "error-stack", "events", - "quote 1.0.33", + "quote 1.0.35", "serde", "serde_json", - "syn 2.0.37", + "syn 2.0.48", ] [[package]] name = "eyre" -version = "0.6.8" +version = "0.6.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c2b6b5a29c02cdc822728b7d7b8ae1bab3e3b05d44522770ddd49722eeac7eb" +checksum = "b6267a1fa6f59179ea4afc8e50fd8612a3cc60bc858f786ff877a4a8cb042799" dependencies = [ "indenter", "once_cell", @@ -2915,7 +3510,7 @@ name = "fastcrypto" version = "0.1.7" source = "git+https://github.com/MystenLabs/fastcrypto?rev=69180dc7275f5f0efb69e11e9d03f6db338d1dd6#69180dc7275f5f0efb69e11e9d03f6db338d1dd6" dependencies = [ - "aes", + "aes 0.8.3", "aes-gcm", "ark-ec", "ark-ff", @@ -2930,7 +3525,7 @@ dependencies = [ "bs58 0.4.0", "bulletproofs", "cbc", - "ctr", + "ctr 0.9.2", "curve25519-dalek-ng", "derive_more", "digest 0.10.7", @@ -2946,7 +3541,7 @@ dependencies = [ "merlin", "once_cell", "p256", - "rand", + "rand 0.8.5", "readonly", "rfc6979", "rsa", @@ -2956,9 +3551,9 @@ dependencies = [ "serde_bytes", "serde_json", "serde_with 2.3.3", - "sha2 0.10.7", + "sha2 0.10.8", "sha3 0.10.8", - "signature 2.1.0", + "signature 2.2.0", "static_assertions", "thiserror", "tokio", @@ -2972,8 +3567,8 @@ version = "0.1.3" source = "git+https://github.com/MystenLabs/fastcrypto?rev=69180dc7275f5f0efb69e11e9d03f6db338d1dd6#69180dc7275f5f0efb69e11e9d03f6db338d1dd6" dependencies = [ "convert_case 0.6.0", - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.78", + "quote 1.0.35", "syn 1.0.109", ] @@ -2989,7 +3584,7 @@ dependencies = [ "fastcrypto-derive", "hex", "itertools 0.10.5", - "rand", + "rand 0.8.5", "serde", "sha3 0.10.8", "tap", @@ -3024,7 +3619,7 @@ dependencies = [ "once_cell", "regex", "reqwest", - "rustls-webpki 0.101.5", + "rustls-webpki", "schemars", "serde", "serde_json", @@ -3042,9 +3637,9 @@ dependencies = [ [[package]] name = "fastrand" -version = "2.0.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6999dc1837253364c2ebb0704ba97994bd874e8f195d665c50b7548f6ea92764" +checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" [[package]] name = "fdlimit" @@ -3055,6 +3650,12 @@ dependencies = [ "libc", ] +[[package]] +name = "feature-probe" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "835a3dc7d1ec9e75e2b5fb4ba75396837112d2060b03f7d43bc1897c7f7211da" + [[package]] name = "ff" version = "0.13.0" @@ -3079,8 +3680,8 @@ dependencies = [ "num-bigint 0.3.3", "num-integer", "num-traits", - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.78", + "quote 1.0.35", "syn 1.0.109", ] @@ -3097,7 +3698,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cfcf0ed7fe52a17a03854ec54a9f76d6d84508d1c0e66bc1793301c73fc8493c" dependencies = [ "byteorder", - "rand", + "rand 0.8.5", "rustc-hex", "static_assertions", ] @@ -3109,7 +3710,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "835c052cb0c08c1acf6ffd71c022172e18723949c8282f2b9f27efbc51e64534" dependencies = [ "byteorder", - "rand", + "rand 0.8.5", "rustc-hex", "static_assertions", ] @@ -3137,9 +3738,9 @@ dependencies = [ [[package]] name = "flate2" -version = "1.0.27" +version = "1.0.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6c98ee8095e9d1dcbf2fcc6d95acccb90d1c81db1e44725c6a984b1dbdfb010" +checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e" dependencies = [ "crc32fast", "miniz_oxide", @@ -3172,9 +3773,9 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "form_urlencoded" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" dependencies = [ "percent-encoding", ] @@ -3215,9 +3816,9 @@ checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" [[package]] name = "futures" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40" +checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" dependencies = [ "futures-channel", "futures-core", @@ -3230,9 +3831,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2" +checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" dependencies = [ "futures-core", "futures-sink", @@ -3240,15 +3841,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" +checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" [[package]] name = "futures-executor" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0" +checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" dependencies = [ "futures-core", "futures-task", @@ -3257,9 +3858,9 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964" +checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" [[package]] name = "futures-locks" @@ -3273,26 +3874,26 @@ dependencies = [ [[package]] name = "futures-macro" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" +checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2 1.0.78", + "quote 1.0.35", + "syn 2.0.48", ] [[package]] name = "futures-sink" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e" +checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" [[package]] name = "futures-task" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65" +checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" [[package]] name = "futures-timer" @@ -3306,9 +3907,9 @@ dependencies = [ [[package]] name = "futures-util" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533" +checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" dependencies = [ "futures-channel", "futures-core", @@ -3335,19 +3936,68 @@ dependencies = [ name = "gateway" version = "0.1.0" dependencies = [ - "aggregate-verifier", - "axelar-wasm-std", - "axelar-wasm-std-derive", - "connection-router", + "aggregate-verifier 0.1.0", + "axelar-wasm-std 0.1.0", + "axelar-wasm-std-derive 0.1.0", + "connection-router 0.1.0", "cosmwasm-schema", "cosmwasm-std", "cosmwasm-storage", "cw-multi-test", - "cw-storage-plus 1.1.0", + "cw-storage-plus 1.2.0", + "error-stack", + "itertools 0.11.0", + "mockall", + "report 0.1.0", + "schemars", + "serde", + "serde_json", + "thiserror", +] + +[[package]] +name = "gateway" +version = "0.1.0" +source = "git+ssh://git@github.com/eigerco/solana-axelar.git?branch=poc#89f41af92eb7f30e1264f7310ffc4921f36947f5" +dependencies = [ + "base64 0.21.7", + "bcs", + "bimap", + "bnum 0.10.0", + "borsh 1.3.1", + "bytemuck", + "connection-router 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "cosmwasm-std", + "hex", + "itertools 0.12.1", + "libsecp256k1 0.7.1", + "multisig 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "multisig-prover 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "num-derive 0.4.1", + "num-traits", + "serde", + "sha3 0.10.8", + "solana-program", + "thiserror", +] + +[[package]] +name = "gateway" +version = "0.1.0" +source = "git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f#c0904e1c72c99a174a93b5f6c18b30f52d20b71f" +dependencies = [ + "aggregate-verifier 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "axelar-wasm-std 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "axelar-wasm-std-derive 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "connection-router 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "cosmwasm-schema", + "cosmwasm-std", + "cosmwasm-storage", + "cw-storage-plus 1.2.0", "error-stack", "itertools 0.11.0", "mockall", - "report", + "report 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", "schemars", "serde", "serde_json", @@ -3374,16 +4024,39 @@ dependencies = [ "zeroize", ] +[[package]] +name = "gethostname" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1ebd34e35c46e00bb73e81363248d627782724609fe1b6396f553f68fe3862e" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "getrandom" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "wasi 0.9.0+wasi-snapshot-preview1", + "wasm-bindgen", +] + [[package]] name = "getrandom" -version = "0.2.10" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427" +checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5" dependencies = [ "cfg-if", "js-sys", "libc", - "wasi", + "wasi 0.11.0+wasi-snapshot-preview1", "wasm-bindgen", ] @@ -3394,14 +4067,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d930750de5717d2dd0b8c0d42c076c0e884c81a73e6cab859bbd2339c71e3e40" dependencies = [ "opaque-debug", - "polyval", + "polyval 0.6.1", ] [[package]] name = "gimli" -version = "0.28.0" +version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0" +checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" [[package]] name = "glob" @@ -3421,6 +4094,17 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "goblin" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7666983ed0dd8d21a6f6576ee00053ca0926fb281a5522577a4dbd0f1b54143" +dependencies = [ + "log", + "plain", + "scroll", +] + [[package]] name = "group" version = "0.13.0" @@ -3428,7 +4112,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" dependencies = [ "ff", - "rand", + "rand 0.8.5", "rand_core 0.6.4", "rand_xorshift", "subtle", @@ -3436,9 +4120,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.3.21" +version = "0.3.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91fc23aa11be92976ef4729127f1a74adf36d8436f7816b185d18df956790833" +checksum = "b553656127a00601c8ae5590fcfdc118e4083a7924b6cf4ffc1ea4b99dc429d7" dependencies = [ "bytes", "fnv", @@ -3446,20 +4130,38 @@ dependencies = [ "futures-sink", "futures-util", "http", - "indexmap 1.9.3", + "indexmap 2.1.0", "slab", "tokio", - "tokio-util 0.7.9", + "tokio-util 0.7.10", "tracing", ] +[[package]] +name = "hash32" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0c35f58762feb77d74ebe43bdbc3210f09be9fe6742234d573bacc26ed92b67" +dependencies = [ + "byteorder", +] + +[[package]] +name = "hashbrown" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" +dependencies = [ + "ahash 0.7.7", +] + [[package]] name = "hashbrown" version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" dependencies = [ - "ahash 0.7.6", + "ahash 0.7.7", ] [[package]] @@ -3468,14 +4170,14 @@ version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" dependencies = [ - "ahash 0.8.3", + "ahash 0.8.7", ] [[package]] name = "hashbrown" -version = "0.14.0" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a" +checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" [[package]] name = "hashers" @@ -3488,11 +4190,11 @@ dependencies = [ [[package]] name = "hdrhistogram" -version = "7.5.2" +version = "7.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f19b9f54f7c7f55e31401bb647626ce0cf0f67b0004982ce815b3ee72a02aa8" +checksum = "765c9198f173dd59ce26ff9f95ef0aafd0a0fe01fb9d72841bc5066a4c06511d" dependencies = [ - "base64 0.13.1", + "base64 0.21.7", "byteorder", "crossbeam-channel", "flate2", @@ -3506,7 +4208,7 @@ version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06683b93020a07e3dbcf5f8c0f6d40080d725bea7936fc01ad345c01b97dc270" dependencies = [ - "base64 0.21.4", + "base64 0.21.7", "bytes", "headers-core", "http", @@ -3539,6 +4241,15 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" +[[package]] +name = "hermit-abi" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" +dependencies = [ + "libc", +] + [[package]] name = "hermit-abi" version = "0.3.3" @@ -3554,13 +4265,29 @@ dependencies = [ "serde", ] +[[package]] +name = "histogram" +version = "0.6.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12cb882ccb290b8646e554b157ab0b71e64e8d5bef775cd66b6531e52d302669" + [[package]] name = "hkdf" -version = "0.12.3" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" +dependencies = [ + "hmac 0.12.1", +] + +[[package]] +name = "hmac" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "791a029f6b9fc27657f6f188ec6e5e43f6911f6f878e0dc5501396e09809d437" +checksum = "126888268dcc288495a26bf004b38c5fdbb31682f992c84ceb046a1f0fe38840" dependencies = [ - "hmac", + "crypto-mac", + "digest 0.9.0", ] [[package]] @@ -3572,20 +4299,31 @@ dependencies = [ "digest 0.10.7", ] +[[package]] +name = "hmac-drbg" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17ea0a1394df5b6574da6e0c1ade9e78868c9fb0a4e5ef4428e32da4676b85b1" +dependencies = [ + "digest 0.9.0", + "generic-array", + "hmac 0.8.1", +] + [[package]] name = "home" -version = "0.5.5" +version = "0.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5444c27eef6923071f7ebcc33e3444508466a76f7a2b93da00ed6e19f30c1ddb" +checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" dependencies = [ - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] name = "http" -version = "0.2.9" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482" +checksum = "8947b1a6fad4393052c7ba1f4cd97bed3e953a95c79c92ad9b051a04611d9fbb" dependencies = [ "bytes", "fnv", @@ -3594,9 +4332,9 @@ dependencies = [ [[package]] name = "http-body" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" +checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" dependencies = [ "bytes", "http", @@ -3639,9 +4377,9 @@ dependencies = [ [[package]] name = "hyper" -version = "0.14.27" +version = "0.14.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468" +checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80" dependencies = [ "bytes", "futures-channel", @@ -3654,7 +4392,7 @@ dependencies = [ "httpdate", "itoa", "pin-project-lite", - "socket2 0.4.9", + "socket2 0.5.5", "tokio", "tower-service", "tracing", @@ -3673,7 +4411,7 @@ dependencies = [ "http", "hyper", "hyper-rustls 0.22.1", - "rustls-native-certs", + "rustls-native-certs 0.5.0", "tokio", "tokio-rustls 0.22.0", "tower-service", @@ -3691,7 +4429,7 @@ dependencies = [ "hyper", "log", "rustls 0.19.1", - "rustls-native-certs", + "rustls-native-certs 0.5.0", "tokio", "tokio-rustls 0.22.0", "webpki", @@ -3700,14 +4438,14 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.24.1" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d78e1e73ec14cf7375674f74d7dde185c8206fd9dea6fb6295e8a98098aaa97" +checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" dependencies = [ "futures-util", "http", "hyper", - "rustls 0.21.7", + "rustls 0.21.10", "tokio", "tokio-rustls 0.24.1", ] @@ -3726,16 +4464,16 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.57" +version = "0.1.59" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fad5b825842d2b38bd206f3e81d6957625fd7f0a361e345c30e01a0ae2dd613" +checksum = "b6a67363e2aa4443928ce15e57ebae94fd8949958fd1223c4cfc0cd473ad7539" dependencies = [ "android_system_properties", "core-foundation-sys", "iana-time-zone-haiku", "js-sys", "wasm-bindgen", - "windows", + "windows-core", ] [[package]] @@ -3755,9 +4493,9 @@ checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" [[package]] name = "idna" -version = "0.4.0" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c" +checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" dependencies = [ "unicode-bidi", "unicode-normalization", @@ -3772,6 +4510,8 @@ dependencies = [ "bitmaps", "rand_core 0.6.4", "rand_xoshiro", + "rayon", + "serde", "sized-chunks", "typenum", "version_check", @@ -3792,7 +4532,7 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba6a270039626615617f3f36d15fc827041df3b78c439da2cadfa47455a77f2f" dependencies = [ - "parity-scale-codec 3.6.5", + "parity-scale-codec 3.6.9", ] [[package]] @@ -3828,8 +4568,8 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "11d7a9f6330b71fea57921c9b61c47ee6e84f72d394754eff6163ae67e7395eb" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.78", + "quote 1.0.35", "syn 1.0.109", ] @@ -3852,15 +4592,28 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.0.0" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5477fe2230a79769d8dc68e0eabf5437907c0457a5614a9e8dddb67f65eb65d" +checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" dependencies = [ "equivalent", - "hashbrown 0.14.0", + "hashbrown 0.14.3", "serde", ] +[[package]] +name = "indicatif" +version = "0.17.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb28741c9db9a713d93deb3bb9515c20788cef5815265bee4980e87bde7e0f25" +dependencies = [ + "console", + "instant", + "number_prefix", + "portable-atomic", + "unicode-width", +] + [[package]] name = "inout" version = "0.1.3" @@ -3873,9 +4626,9 @@ dependencies = [ [[package]] name = "insta" -version = "1.31.0" +version = "1.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0770b0a3d4c70567f0d58331f3088b0e4c4f56c9b8d764efe654b4a5d46de3a" +checksum = "5d64600be34b2fcfc267740a243fa7744441bb4947a619ac4e5bb6507f35fbfc" dependencies = [ "console", "lazy_static", @@ -3900,31 +4653,31 @@ dependencies = [ name = "integration-tests" version = "0.1.0" dependencies = [ - "aggregate-verifier", - "axelar-wasm-std", - "axelar-wasm-std-derive", - "connection-router", + "aggregate-verifier 0.1.0", + "axelar-wasm-std 0.1.0", + "axelar-wasm-std-derive 0.1.0", + "connection-router 0.1.0", "cosmwasm-schema", "cosmwasm-std", "cosmwasm-storage", "cw-multi-test", - "cw-storage-plus 1.1.0", + "cw-storage-plus 1.2.0", "error-stack", - "gateway", + "gateway 0.1.0", "itertools 0.11.0", "k256", "mockall", - "multisig", - "multisig-prover", - "report", - "rewards", + "multisig 0.1.0", + "multisig-prover 0.1.0", + "report 0.1.0", + "rewards 0.1.0", "schemars", "serde", "serde_json", - "service-registry", + "service-registry 0.1.0", "thiserror", "tofn", - "voting-verifier", + "voting-verifier 0.1.0", ] [[package]] @@ -3933,7 +4686,7 @@ version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6ab388864246d58a276e60e7569a833d9cc4cd75c66e5ca77c177dad38e59996" dependencies = [ - "ahash 0.7.6", + "ahash 0.7.7", "dashmap", "hashbrown 0.12.3", "once_cell", @@ -3942,9 +4695,9 @@ dependencies = [ [[package]] name = "ipnet" -version = "2.8.0" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28b29a3cd74f0f4598934efe3aeba42bae0eb4680554128851ebbecb02af14e6" +checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" [[package]] name = "iri-string" @@ -3957,13 +4710,13 @@ dependencies = [ [[package]] name = "is-terminal" -version = "0.4.9" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b" +checksum = "0bad00257d07be169d870ab665980b06cdb366d792ad690bf2e76876dc503455" dependencies = [ - "hermit-abi", + "hermit-abi 0.3.3", "rustix", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] @@ -3984,26 +4737,35 @@ dependencies = [ "either", ] +[[package]] +name = "itertools" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +dependencies = [ + "either", +] + [[package]] name = "itoa" -version = "1.0.9" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" +checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" [[package]] name = "jobserver" -version = "0.1.26" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2" +checksum = "8c37f63953c4c63420ed5fd3d6d398c719489b9f872b9fa683262f8edd363c7d" dependencies = [ "libc", ] [[package]] name = "js-sys" -version = "0.3.64" +version = "0.3.67" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a" +checksum = "9a1d36f1235bc969acba30b7f5990b864423a6068a10f7c90ae8f0112e3a59d1" dependencies = [ "wasm-bindgen", ] @@ -4028,15 +4790,30 @@ dependencies = [ "tabled", ] +[[package]] +name = "jsonrpc-core" +version = "18.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14f7f76aef2d054868398427f6c54943cf3d1caa9a7ec7d0c38d69df97a965eb" +dependencies = [ + "futures", + "futures-executor", + "futures-util", + "log", + "serde", + "serde_derive", + "serde_json", +] + [[package]] name = "jsonwebtoken" version = "8.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6971da4d9c3aa03c3d8f3ff0f4155b534aad021292003895a469716b2a230378" dependencies = [ - "base64 0.21.4", + "base64 0.21.7", "pem", - "ring", + "ring 0.16.20", "serde", "serde_json", "simple_asn1", @@ -4044,23 +4821,23 @@ dependencies = [ [[package]] name = "k256" -version = "0.13.1" +version = "0.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cadb76004ed8e97623117f3df85b17aaa6626ab0b0831e6573f104df16cd1bcc" +checksum = "956ff9b67e26e1a6a866cb758f12c6f8746208489e3e4a4b5580802f2f0a587b" dependencies = [ "cfg-if", "ecdsa", "elliptic-curve", "once_cell", - "sha2 0.10.7", - "signature 2.1.0", + "sha2 0.10.8", + "signature 2.2.0", ] [[package]] name = "keccak" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f6d5ed8676d904364de097082f4e7d240b571b67989ced0240f08b7f966f940" +checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654" dependencies = [ "cpufeatures", ] @@ -4099,7 +4876,7 @@ version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" dependencies = [ - "spin", + "spin 0.5.2", ] [[package]] @@ -4110,25 +4887,36 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] name = "libc" -version = "0.2.148" +version = "0.2.152" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cdc71e17332e86d2e1d38c1f99edcb6288ee11b815fb1a4b049eaa2114d369b" +checksum = "13e3bf6590cbc649f4d1a3eefc9d5d6eb746f5200ffb04e5e142700b8faa56e7" [[package]] name = "libloading" -version = "0.7.4" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" +checksum = "c571b676ddfc9a8c12f1f3d3085a7b163966a8fd8098a90640953ce5f6170161" dependencies = [ "cfg-if", - "winapi", + "windows-sys 0.48.0", ] [[package]] name = "libm" -version = "0.2.7" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" + +[[package]] +name = "libredox" +version = "0.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7012b1bbb0719e1097c47611d3898568c546d597c2e74d66f6087edd5233ff4" +checksum = "85c833ca1e66078851dba29046874e38f08b2c883700aa29a03ddd3b23814ee8" +dependencies = [ + "bitflags 2.4.2", + "libc", + "redox_syscall", +] [[package]] name = "librocksdb-sys" @@ -4146,17 +4934,125 @@ dependencies = [ "zstd-sys", ] +[[package]] +name = "libsecp256k1" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9d220bc1feda2ac231cb78c3d26f27676b8cf82c96971f7aeef3d0cf2797c73" +dependencies = [ + "arrayref", + "base64 0.12.3", + "digest 0.9.0", + "hmac-drbg", + "libsecp256k1-core 0.2.2", + "libsecp256k1-gen-ecmult 0.2.1", + "libsecp256k1-gen-genmult 0.2.1", + "rand 0.7.3", + "serde", + "sha2 0.9.9", + "typenum", +] + +[[package]] +name = "libsecp256k1" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95b09eff1b35ed3b33b877ced3a691fc7a481919c7e29c53c906226fcf55e2a1" +dependencies = [ + "arrayref", + "base64 0.13.1", + "digest 0.9.0", + "hmac-drbg", + "libsecp256k1-core 0.3.0", + "libsecp256k1-gen-ecmult 0.3.0", + "libsecp256k1-gen-genmult 0.3.0", + "rand 0.8.5", + "serde", + "sha2 0.9.9", + "typenum", +] + +[[package]] +name = "libsecp256k1-core" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0f6ab710cec28cef759c5f18671a27dae2a5f952cdaaee1d8e2908cb2478a80" +dependencies = [ + "crunchy", + "digest 0.9.0", + "subtle", +] + +[[package]] +name = "libsecp256k1-core" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5be9b9bb642d8522a44d533eab56c16c738301965504753b03ad1de3425d5451" +dependencies = [ + "crunchy", + "digest 0.9.0", + "subtle", +] + +[[package]] +name = "libsecp256k1-gen-ecmult" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccab96b584d38fac86a83f07e659f0deafd0253dc096dab5a36d53efe653c5c3" +dependencies = [ + "libsecp256k1-core 0.2.2", +] + +[[package]] +name = "libsecp256k1-gen-ecmult" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3038c808c55c87e8a172643a7d87187fc6c4174468159cb3090659d55bcb4809" +dependencies = [ + "libsecp256k1-core 0.3.0", +] + +[[package]] +name = "libsecp256k1-gen-genmult" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67abfe149395e3aa1c48a2beb32b068e2334402df8181f818d3aee2b304c4f5d" +dependencies = [ + "libsecp256k1-core 0.2.2", +] + +[[package]] +name = "libsecp256k1-gen-genmult" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3db8d6ba2cec9eacc40e6e8ccc98931840301f1006e95647ceb2dd5c3aa06f7c" +dependencies = [ + "libsecp256k1-core 0.3.0", +] + [[package]] name = "libz-sys" -version = "1.1.12" +version = "1.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d97137b25e321a73eef1418d1d5d2eda4d77e12813f8e6dead84bc52c5870a7b" +checksum = "295c17e837573c8c821dbaeb3cceb3d745ad082f7572191409e69cbc1b3fd050" dependencies = [ "cc", "pkg-config", "vcpkg", ] +[[package]] +name = "light-poseidon" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c9a85a9752c549ceb7578064b4ed891179d20acd85f27318573b64d2d7ee7ee" +dependencies = [ + "ark-bn254", + "ark-ff", + "num-bigint 0.4.4", + "thiserror", +] + [[package]] name = "linked-hash-map" version = "0.5.6" @@ -4165,15 +5061,15 @@ checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" [[package]] name = "linux-raw-sys" -version = "0.4.7" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a9bad9f94746442c783ca431b22403b519cd7fbeed0533fdd6328b2f2212128" +checksum = "c4cd1a83af159aa67994778be9070f0ae1bd732942279cabb14f86f986a21456" [[package]] name = "lock_api" -version = "0.4.10" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16" +checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" dependencies = [ "autocfg", "scopeguard", @@ -4212,27 +5108,46 @@ checksum = "73cbba799671b762df5a175adf59ce145165747bb891505c43d09aefbbf38beb" [[package]] name = "matchit" -version = "0.7.2" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed1202b2a6f884ae56f04cff409ab315c5ce26b5e58d7412e484f01fd52f52ef" +checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" [[package]] name = "md-5" -version = "0.10.5" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6365506850d44bff6e2fbcb5176cf63650e48bd45ef2fe2665ae1570e0f4b9ca" +checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" dependencies = [ + "cfg-if", "digest 0.10.7", ] [[package]] name = "memchr" -version = "2.6.3" +version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f232d6ef707e1956a43342693d2a31e72989554d58299d7a88738cc95b0d35c" +checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" [[package]] -name = "memoffset" +name = "memmap2" +version = "0.5.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83faa42c0a078c393f6b29d5db232d8be22776a891f8f56e5284faee4a20b327" +dependencies = [ + "libc", +] + +[[package]] +name = "memoffset" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4" +dependencies = [ + "autocfg", +] + +[[package]] +name = "memoffset" version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c" @@ -4285,13 +5200,13 @@ dependencies = [ [[package]] name = "mio" -version = "0.8.8" +version = "0.8.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2" +checksum = "8f3d0b296e374a4e6f3c7b0a1f5a51d748a0d34c85e7dc48fc3fa9a87657fe09" dependencies = [ "libc", "log", - "wasi", + "wasi 0.11.0+wasi-snapshot-preview1", "windows-sys 0.48.0", ] @@ -4317,8 +5232,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "22ce75669015c4f47b289fd4d4f56e894e4c96003ffdf3ac51313126f94c6cbb" dependencies = [ "cfg-if", - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.78", + "quote 1.0.35", "syn 1.0.109", ] @@ -4427,7 +5342,7 @@ source = "git+https://github.com/mystenlabs/sui?tag=mainnet-v1.14.2#299cbeafbb6a dependencies = [ "anyhow", "bcs", - "clap", + "clap 4.4.17", "codespan-reporting", "hex", "move-binary-format", @@ -4457,10 +5372,10 @@ dependencies = [ "ethnum", "hex", "move-proc-macros", - "num", + "num 0.4.1", "once_cell", "primitive-types 0.10.1", - "rand", + "rand 0.8.5", "ref-cast", "serde", "serde_bytes", @@ -4474,7 +5389,7 @@ source = "git+https://github.com/mystenlabs/sui?tag=mainnet-v1.14.2#299cbeafbb6a dependencies = [ "anyhow", "bcs", - "clap", + "clap 4.4.17", "codespan", "colored", "move-binary-format", @@ -4493,7 +5408,7 @@ source = "git+https://github.com/mystenlabs/sui?tag=mainnet-v1.14.2#299cbeafbb6a dependencies = [ "anyhow", "bcs", - "clap", + "clap 4.4.17", "colored", "hex", "move-binary-format", @@ -4517,7 +5432,7 @@ dependencies = [ "log", "move-compiler", "move-model", - "num", + "num 0.4.1", "once_cell", "regex", "serde", @@ -4586,7 +5501,7 @@ dependencies = [ "move-disassembler", "move-ir-types", "move-symbol-pool", - "num", + "num 0.4.1", "once_cell", "regex", "serde", @@ -4598,7 +5513,7 @@ version = "0.1.0" source = "git+https://github.com/mystenlabs/sui?tag=mainnet-v1.14.2#299cbeafbb6aa5601e08f00ac24bd647c61a63e2" dependencies = [ "anyhow", - "clap", + "clap 4.4.17", "colored", "move-abigen", "move-binary-format", @@ -4630,8 +5545,8 @@ version = "0.1.0" source = "git+https://github.com/mystenlabs/sui?tag=mainnet-v1.14.2#299cbeafbb6aa5601e08f00ac24bd647c61a63e2" dependencies = [ "enum-compat-util", - "quote 1.0.33", - "syn 2.0.37", + "quote 1.0.35", + "syn 2.0.48", ] [[package]] @@ -4695,7 +5610,7 @@ name = "msim" version = "0.1.0" source = "git+https://github.com/MystenLabs/mysten-sim.git?rev=1a52783d6600ecc22e15253a982f77881bd47c77#1a52783d6600ecc22e15253a982f77881bd47c77" dependencies = [ - "ahash 0.7.6", + "ahash 0.7.7", "async-task", "bincode", "bytes", @@ -4708,10 +5623,10 @@ dependencies = [ "msim-macros", "naive-timer", "pin-project-lite", - "rand", + "rand 0.8.5", "real_tokio", "serde", - "socket2 0.4.9", + "socket2 0.4.10", "tap", "tokio-util 0.7.7", "toml 0.5.11", @@ -4725,8 +5640,8 @@ version = "0.1.0" source = "git+https://github.com/MystenLabs/mysten-sim.git?rev=1a52783d6600ecc22e15253a982f77881bd47c77#1a52783d6600ecc22e15253a982f77881bd47c77" dependencies = [ "darling 0.14.4", - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.78", + "quote 1.0.35", "syn 1.0.109", ] @@ -4777,10 +5692,10 @@ version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1d6d4752e6230d8ef7adf7bd5d8c4b1f6561c1014c5ba9a37445ccefe18aa1db" dependencies = [ - "proc-macro-crate", + "proc-macro-crate 1.1.3", "proc-macro-error", - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.78", + "quote 1.0.35", "syn 1.0.109", "synstructure", ] @@ -4795,21 +5710,47 @@ checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a" name = "multisig" version = "0.1.0" dependencies = [ - "axelar-wasm-std", - "axelar-wasm-std-derive", - "connection-router", + "axelar-wasm-std 0.1.0", + "axelar-wasm-std-derive 0.1.0", + "connection-router 0.1.0", "cosmwasm-crypto", "cosmwasm-schema", "cosmwasm-std", "cosmwasm-storage", "cw-multi-test", - "cw-storage-plus 1.1.0", + "cw-storage-plus 1.2.0", + "enum-display-derive", + "error-stack", + "getrandom 0.2.12", + "k256", + "report 0.1.0", + "rewards 0.1.0", + "schemars", + "serde", + "serde_json", + "sha3 0.10.8", + "thiserror", +] + +[[package]] +name = "multisig" +version = "0.1.0" +source = "git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f#c0904e1c72c99a174a93b5f6c18b30f52d20b71f" +dependencies = [ + "axelar-wasm-std 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "axelar-wasm-std-derive 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "connection-router 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "cosmwasm-crypto", + "cosmwasm-schema", + "cosmwasm-std", + "cosmwasm-storage", + "cw-storage-plus 1.2.0", "enum-display-derive", "error-stack", - "getrandom", + "getrandom 0.2.12", "k256", - "report", - "rewards", + "report 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "rewards 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", "schemars", "serde", "serde_json", @@ -4822,35 +5763,67 @@ name = "multisig-prover" version = "0.1.0" dependencies = [ "anyhow", - "axelar-wasm-std", - "axelar-wasm-std-derive", + "axelar-wasm-std 0.1.0", + "axelar-wasm-std-derive 0.1.0", "bcs", - "connection-router", + "connection-router 0.1.0", "cosmwasm-schema", "cosmwasm-std", "cosmwasm-storage", "cw-multi-test", - "cw-storage-plus 1.1.0", - "cw-utils 1.0.1", + "cw-storage-plus 1.2.0", + "cw-utils 1.0.3", "either", "elliptic-curve", "error-stack", "ethabi", "ethers", - "gateway", + "gateway 0.1.0", "generic-array", "hex", "itertools 0.11.0", "k256", - "multisig", - "report", + "multisig 0.1.0", + "report 0.1.0", + "schemars", + "serde", + "serde_json", + "service-registry 0.1.0", + "sha3 0.10.8", + "thiserror", + "voting-verifier 0.1.0", +] + +[[package]] +name = "multisig-prover" +version = "0.1.0" +source = "git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f#c0904e1c72c99a174a93b5f6c18b30f52d20b71f" +dependencies = [ + "axelar-wasm-std 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "axelar-wasm-std-derive 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "bcs", + "connection-router 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "cosmwasm-schema", + "cosmwasm-std", + "cosmwasm-storage", + "cw-storage-plus 1.2.0", + "cw-utils 1.0.3", + "either", + "error-stack", + "ethabi", + "gateway 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "hex", + "itertools 0.11.0", + "k256", + "multisig 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "report 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", "schemars", "serde", "serde_json", - "service-registry", + "service-registry 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", "sha3 0.10.8", "thiserror", - "voting-verifier", + "voting-verifier 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", ] [[package]] @@ -4870,7 +5843,7 @@ dependencies = [ "tap", "tokio", "tracing", - "uuid 1.4.1", + "uuid 1.6.1", "workspace-hack", ] @@ -4923,7 +5896,7 @@ name = "mysten-util-mem-derive" version = "0.1.0" source = "git+https://github.com/mystenlabs/sui?tag=mainnet-v1.14.2#299cbeafbb6aa5601e08f00ac24bd647c61a63e2" dependencies = [ - "proc-macro2 1.0.67", + "proc-macro2 1.0.78", "syn 1.0.109", "synstructure", "workspace-hack", @@ -4960,7 +5933,7 @@ dependencies = [ "mysten-network", "mysten-util-mem", "narwhal-crypto", - "rand", + "rand 0.8.5", "serde", "serde_json", "thiserror", @@ -5010,21 +5983,34 @@ checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54" name = "nexus-gateway" version = "0.1.0" dependencies = [ - "axelar-wasm-std", - "axelar-wasm-std-derive", - "connection-router", + "axelar-wasm-std 0.1.0", + "axelar-wasm-std-derive 0.1.0", + "connection-router 0.1.0", "cosmwasm-schema", "cosmwasm-std", - "cw-storage-plus 1.1.0", + "cw-storage-plus 1.2.0", "error-stack", "hex", "mockall", - "report", + "report 0.1.0", "schemars", "serde", "thiserror", ] +[[package]] +name = "nix" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b" +dependencies = [ + "bitflags 1.3.2", + "cfg-if", + "libc", + "memoffset 0.7.1", + "pin-utils", +] + [[package]] name = "nom" version = "7.1.3" @@ -5051,6 +6037,20 @@ dependencies = [ "winapi", ] +[[package]] +name = "num" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8536030f9fea7127f841b45bb6243b27255787fb4eb83958aa1ef9d2fdc0c36" +dependencies = [ + "num-bigint 0.2.6", + "num-complex 0.2.4", + "num-integer", + "num-iter", + "num-rational 0.2.4", + "num-traits", +] + [[package]] name = "num" version = "0.4.1" @@ -5058,10 +6058,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b05180d69e3da0e530ba2a1dae5110317e49e3b7f3d41be227dc5f92e49ee7af" dependencies = [ "num-bigint 0.4.4", - "num-complex", + "num-complex 0.4.4", "num-integer", "num-iter", - "num-rational", + "num-rational 0.4.1", + "num-traits", +] + +[[package]] +name = "num-bigint" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "090c7f9998ee0ff65aa5b723e4009f7b217707f1fb5ea551329cc4d6231fb304" +dependencies = [ + "autocfg", + "num-integer", "num-traits", ] @@ -5085,7 +6096,7 @@ dependencies = [ "autocfg", "num-integer", "num-traits", - "rand", + "rand 0.8.5", ] [[package]] @@ -5100,11 +6111,21 @@ dependencies = [ "num-integer", "num-iter", "num-traits", - "rand", + "rand 0.8.5", "smallvec", "zeroize", ] +[[package]] +name = "num-complex" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6b19411a9719e753aff12e5187b74d60d3dc449ec3f4dc21e3989c3f554bc95" +dependencies = [ + "autocfg", + "num-traits", +] + [[package]] name = "num-complex" version = "0.4.4" @@ -5120,11 +6141,22 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.78", + "quote 1.0.35", "syn 1.0.109", ] +[[package]] +name = "num-derive" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfb77679af88f8b125209d354a202862602672222e7f2313fdd6dc349bad4712" +dependencies = [ + "proc-macro2 1.0.78", + "quote 1.0.35", + "syn 2.0.48", +] + [[package]] name = "num-integer" version = "0.1.45" @@ -5146,6 +6178,18 @@ dependencies = [ "num-traits", ] +[[package]] +name = "num-rational" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c000134b5dbf44adc5cb772486d335293351644b801551abe8f75c84cfa4aef" +dependencies = [ + "autocfg", + "num-bigint 0.2.6", + "num-integer", + "num-traits", +] + [[package]] name = "num-rational" version = "0.4.1" @@ -5160,9 +6204,9 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f30b0abd723be7e2ffca1272140fac1a2f084c77ec3e123c192b66af1ee9e6c2" +checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" dependencies = [ "autocfg", "libm", @@ -5174,36 +6218,63 @@ version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" dependencies = [ - "hermit-abi", + "hermit-abi 0.3.3", "libc", ] [[package]] name = "num_enum" -version = "0.7.0" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a015b430d3c108a207fd776d2e2196aaf8b1cf8cf93253e3a097ff3085076a1" +dependencies = [ + "num_enum_derive 0.6.1", +] + +[[package]] +name = "num_enum" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70bf6736f74634d299d00086f02986875b3c2d924781a6a2cb6c201e73da0ceb" +checksum = "02339744ee7253741199f897151b38e72257d13802d4ee837285cc2990a90845" dependencies = [ - "num_enum_derive", + "num_enum_derive 0.7.2", ] [[package]] name = "num_enum_derive" -version = "0.7.0" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96667db765a921f7b295ffee8b60472b686a51d4f21c2ee4ffdb94c7013b65a6" +dependencies = [ + "proc-macro-crate 1.1.3", + "proc-macro2 1.0.78", + "quote 1.0.35", + "syn 2.0.48", +] + +[[package]] +name = "num_enum_derive" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56ea360eafe1022f7cc56cd7b869ed57330fb2453d0c7831d99b74c65d2f5597" +checksum = "681030a937600a36906c185595136d26abfebb4aa9c65701cefcaf8578bb982b" dependencies = [ - "proc-macro-crate", - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro-crate 3.0.0", + "proc-macro2 1.0.78", + "quote 1.0.35", + "syn 2.0.48", ] +[[package]] +name = "number_prefix" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" + [[package]] name = "object" -version = "0.32.1" +version = "0.32.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0" +checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" dependencies = [ "memchr", ] @@ -5219,9 +6290,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.18.0" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" [[package]] name = "opaque-debug" @@ -5249,8 +6320,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "003b2be5c6c53c1cfeb0a238b8a1c3915cd410feb684457a36c10038f764bb1c" dependencies = [ "bytes", - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.78", + "quote 1.0.35", "syn 1.0.109", ] @@ -5276,6 +6347,12 @@ dependencies = [ "hashbrown 0.12.3", ] +[[package]] +name = "os_str_bytes" +version = "6.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2355d85b9a3786f481747ced0e0ff2ba35213a1f9bd406ed906554d7af805a1" + [[package]] name = "ouroboros" version = "0.17.2" @@ -5295,9 +6372,9 @@ checksum = "ec4c6225c69b4ca778c0aea097321a64c421cf4577b331c61b229267edabb6f8" dependencies = [ "heck 0.4.1", "proc-macro-error", - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2 1.0.78", + "quote 1.0.35", + "syn 2.0.48", ] [[package]] @@ -5315,7 +6392,7 @@ dependencies = [ "ecdsa", "elliptic-curve", "primeorder", - "sha2 0.10.7", + "sha2 0.10.8", ] [[package]] @@ -5354,15 +6431,15 @@ dependencies = [ [[package]] name = "parity-scale-codec" -version = "3.6.5" +version = "3.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dec8a8073036902368c2cdc0387e85ff9a37054d7e7c98e592145e0c92cd4fb" +checksum = "881331e34fa842a2fb61cc2db9643a8fedc615e47cfcc52597d1af0db9a7e8fe" dependencies = [ "arrayvec", "bitvec 1.0.1", "byte-slice-cast", "impl-trait-for-tuples", - "parity-scale-codec-derive 3.6.5", + "parity-scale-codec-derive 3.6.9", "serde", ] @@ -5372,21 +6449,21 @@ version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1557010476e0595c9b568d16dcfb81b93cdeb157612726f5170d31aa707bed27" dependencies = [ - "proc-macro-crate", - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro-crate 1.1.3", + "proc-macro2 1.0.78", + "quote 1.0.35", "syn 1.0.109", ] [[package]] name = "parity-scale-codec-derive" -version = "3.6.5" +version = "3.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "312270ee71e1cd70289dacf597cab7b207aa107d2f28191c2ae45b2ece18a260" +checksum = "be30eaf4b0a9fba5336683b38de57bb86d179a35862ba6bfcf57625d006bde5b" dependencies = [ - "proc-macro-crate", - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro-crate 2.0.0", + "proc-macro2 1.0.78", + "quote 1.0.35", "syn 1.0.109", ] @@ -5402,13 +6479,13 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.8" +version = "0.9.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447" +checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.3.5", + "redox_syscall", "smallvec", "windows-targets 0.48.5", ] @@ -5436,7 +6513,7 @@ dependencies = [ "group", "hex", "lazy_static", - "rand", + "rand 0.8.5", "serde", "static_assertions", "subtle", @@ -5460,6 +6537,15 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd" +[[package]] +name = "pbkdf2" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "216eaa586a190f0a738f2f918511eecfa90f13295abec0e457cdebcceda80cbd" +dependencies = [ + "crypto-mac", +] + [[package]] name = "pbkdf2" version = "0.11.0" @@ -5467,9 +6553,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917" dependencies = [ "digest 0.10.7", - "hmac", + "hmac 0.12.1", "password-hash", - "sha2 0.10.7", + "sha2 0.10.8", ] [[package]] @@ -5479,7 +6565,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" dependencies = [ "digest 0.10.7", - "hmac", + "hmac 0.12.1", ] [[package]] @@ -5505,8 +6591,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b5aa52829b8decbef693af90202711348ab001456803ba2a98eb4ec8fb70844c" dependencies = [ "peg-runtime", - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.78", + "quote 1.0.35", ] [[package]] @@ -5544,15 +6630,24 @@ dependencies = [ [[package]] name = "percent-encoding" -version = "2.3.0" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" + +[[package]] +name = "percentage" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94" +checksum = "2fd23b938276f14057220b707937bcb42fa76dda7560e57a2da30cb52d557937" +dependencies = [ + "num 0.2.1", +] [[package]] name = "pest" -version = "2.7.3" +version = "2.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7a4d085fd991ac8d5b05a147b437791b4260b76326baf0fc60cf7c9c27ecd33" +checksum = "1f200d8d83c44a45b21764d1916299752ca035d15ecd46faca3e9a2a2bf6ad06" dependencies = [ "memchr", "thiserror", @@ -5561,9 +6656,9 @@ dependencies = [ [[package]] name = "pest_derive" -version = "2.7.3" +version = "2.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2bee7be22ce7918f641a33f08e3f43388c7656772244e2bbb2477f44cc9021a" +checksum = "bcd6ab1236bbdb3a49027e920e693192ebfe8913f6d60e294de57463a493cfde" dependencies = [ "pest", "pest_generator", @@ -5571,26 +6666,26 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.7.3" +version = "2.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1511785c5e98d79a05e8a6bc34b4ac2168a0e3e92161862030ad84daa223141" +checksum = "2a31940305ffc96863a735bef7c7994a00b325a7138fdbc5bda0f1a0476d3275" dependencies = [ "pest", "pest_meta", - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2 1.0.78", + "quote 1.0.35", + "syn 2.0.48", ] [[package]] name = "pest_meta" -version = "2.7.3" +version = "2.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b42f0394d3123e33353ca5e1e89092e533d2cc490389f2bd6131c43c634ebc5f" +checksum = "a7ff62f5259e53b78d1af898941cdcdccfae7385cf7d793a6e55de5d05bb4b7d" dependencies = [ "once_cell", "pest", - "sha2 0.10.7", + "sha2 0.10.8", ] [[package]] @@ -5610,7 +6705,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" dependencies = [ "fixedbitset 0.4.2", - "indexmap 2.0.0", + "indexmap 2.1.0", ] [[package]] @@ -5640,7 +6735,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0" dependencies = [ "phf_shared 0.11.2", - "rand", + "rand 0.8.5", ] [[package]] @@ -5651,9 +6746,9 @@ checksum = "3444646e286606587e49f3bcf1679b8cef1dc2c5ecc29ddacaffc305180d464b" dependencies = [ "phf_generator", "phf_shared 0.11.2", - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2 1.0.78", + "quote 1.0.35", + "syn 2.0.48", ] [[package]] @@ -5689,9 +6784,9 @@ version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2 1.0.78", + "quote 1.0.35", + "syn 2.0.48", ] [[package]] @@ -5718,6 +6813,17 @@ dependencies = [ "zeroize", ] +[[package]] +name = "pkcs8" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cabda3fb821068a9a4fab19a683eac3af12edf0f34b94a8be53c4972b8149d0" +dependencies = [ + "der 0.5.1", + "spki 0.5.4", + "zeroize", +] + [[package]] name = "pkcs8" version = "0.9.0" @@ -5735,20 +6841,38 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" dependencies = [ "der 0.7.8", - "spki 0.7.2", + "spki 0.7.3", ] [[package]] name = "pkg-config" -version = "0.3.27" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" +checksum = "69d3587f8a9e599cc7ec2c00e331f71c4e69a5f9a4b8a6efd5b07466b9736f9a" + +[[package]] +name = "plain" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" [[package]] name = "platforms" -version = "3.2.0" +version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14e6ab3f592e6fb464fc9712d8d6e6912de6473954635fd76a589d832cffcbb0" +checksum = "626dec3cac7cc0e1577a2ec3fc496277ec2baa084bebad95bb6fdbfae235f84c" + +[[package]] +name = "polyval" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8419d2b623c7c0896ff2d5d96e2cb4ede590fed28fcc34934f4c33c036e620a1" +dependencies = [ + "cfg-if", + "cpufeatures", + "opaque-debug", + "universal-hash 0.4.1", +] [[package]] name = "polyval" @@ -5759,9 +6883,21 @@ dependencies = [ "cfg-if", "cpufeatures", "opaque-debug", - "universal-hash", + "universal-hash 0.5.1", ] +[[package]] +name = "portable-atomic" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7170ef9988bc169ba16dd36a7fa041e5c4cbeb6a35b76d4c03daded371eae7c0" + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + [[package]] name = "ppv-lite86" version = "0.2.17" @@ -5810,25 +6946,25 @@ version = "0.1.25" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c8646e95016a7a6c4adea95bafa8a16baab64b583356217f2c85db4a39d9a86" dependencies = [ - "proc-macro2 1.0.67", + "proc-macro2 1.0.78", "syn 1.0.109", ] [[package]] name = "prettyplease" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae005bd773ab59b4725093fd7df83fd7892f7d8eafb48dbd7de6e024e4215f9d" +checksum = "a41cf62165e97c7f814d2221421dbb9afcbcdb0a88068e5ea206e19951c2cbb5" dependencies = [ - "proc-macro2 1.0.67", - "syn 2.0.37", + "proc-macro2 1.0.78", + "syn 2.0.48", ] [[package]] name = "primeorder" -version = "0.13.2" +version = "0.13.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c2fcef82c0ec6eefcc179b978446c399b3cdf73c392c35604e399eee6df1ee3" +checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6" dependencies = [ "elliptic-curve", ] @@ -5847,9 +6983,9 @@ dependencies = [ [[package]] name = "primitive-types" -version = "0.12.1" +version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f3486ccba82358b11a77516035647c34ba167dfa53312630de83b12bd4f3d66" +checksum = "0b34d9fd68ae0b74a41b21c03c2f62847aa0ffea044eee893b4c140b37e244e2" dependencies = [ "fixed-hash 0.8.0", "impl-codec 0.6.0", @@ -5859,6 +6995,15 @@ dependencies = [ "uint", ] +[[package]] +name = "proc-macro-crate" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d6ea3c4595b96363c13943497db34af4460fb474a95c43f4446ad341b8c9785" +dependencies = [ + "toml 0.5.11", +] + [[package]] name = "proc-macro-crate" version = "1.1.3" @@ -5869,6 +7014,24 @@ dependencies = [ "toml 0.5.11", ] +[[package]] +name = "proc-macro-crate" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e8366a6159044a37876a2b9817124296703c586a5c92e2c53751fa06d8d43e8" +dependencies = [ + "toml_edit 0.20.7", +] + +[[package]] +name = "proc-macro-crate" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b2685dd208a3771337d8d386a89840f0f43cd68be8dae90a5f8c2384effc9cd" +dependencies = [ + "toml_edit 0.21.0", +] + [[package]] name = "proc-macro-error" version = "1.0.4" @@ -5876,8 +7039,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" dependencies = [ "proc-macro-error-attr", - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.78", + "quote 1.0.35", "syn 1.0.109", "version_check", ] @@ -5888,8 +7051,8 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.78", + "quote 1.0.35", "version_check", ] @@ -5904,9 +7067,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.67" +version = "1.0.78" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d433d9f1a3e8c1263d9456598b16fec66f4acc9a74dacffd35c7bb09b3a1328" +checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae" dependencies = [ "unicode-ident", ] @@ -5939,19 +7102,19 @@ dependencies = [ [[package]] name = "proptest" -version = "1.2.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e35c06b98bf36aba164cc17cb25f7e232f5c4aeea73baa14b8a9f0d92dbfa65" +checksum = "31b476131c3c86cb68032fdc5cb6d5a1045e3e42d96b69fa599fd77701e1f5bf" dependencies = [ "bit-set", - "bitflags 1.3.2", - "byteorder", + "bit-vec", + "bitflags 2.4.2", "lazy_static", "num-traits", - "rand", - "rand_chacha", + "rand 0.8.5", + "rand_chacha 0.3.1", "rand_xorshift", - "regex-syntax 0.6.29", + "regex-syntax 0.8.2", "rusty-fork", "tempfile", "unarray", @@ -6028,8 +7191,8 @@ checksum = "f9cc1a3263e07e0bf68e96268f37665207b49560d98739662cdfaae215c720fe" dependencies = [ "anyhow", "itertools 0.10.5", - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.78", + "quote 1.0.35", "syn 1.0.109", ] @@ -6041,8 +7204,8 @@ checksum = "e5d2d8d10f3c6ded6da8b05b5fb3b8a5082514344d56c9f871412d29b4e075b4" dependencies = [ "anyhow", "itertools 0.10.5", - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.78", + "quote 1.0.35", "syn 1.0.109", ] @@ -6054,9 +7217,9 @@ checksum = "efb6c9a1dd1def8e2124d17e83a20af56f1570d6c2d2bd9e266ccb768df3840e" dependencies = [ "anyhow", "itertools 0.11.0", - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2 1.0.78", + "quote 1.0.35", + "syn 2.0.48", ] [[package]] @@ -6077,6 +7240,26 @@ dependencies = [ "bytes", ] +[[package]] +name = "qstring" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d464fae65fff2680baf48019211ce37aaec0c78e9264c84a3e484717f965104e" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "qualifier_attr" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e2e25ee72f5b24d773cae88422baddefff7714f97aab68d96fe2b6fc4a28fb2" +dependencies = [ + "proc-macro2 1.0.78", + "quote 1.0.35", + "syn 2.0.48", +] + [[package]] name = "quick-error" version = "1.2.3" @@ -6095,7 +7278,7 @@ dependencies = [ "quinn-proto", "quinn-udp", "rustc-hash", - "rustls 0.21.7", + "rustls 0.21.10", "thiserror", "tokio", "tracing", @@ -6103,15 +7286,16 @@ dependencies = [ [[package]] name = "quinn-proto" -version = "0.10.4" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13f81c9a9d574310b8351f8666f5a93ac3b0069c45c28ad52c10291389a7cf9" +checksum = "141bf7dfde2fbc246bfd3fe12f2455aa24b0fbd9af535d8c86c7bd1381ff2b1a" dependencies = [ "bytes", - "rand", - "ring", + "rand 0.8.5", + "ring 0.16.20", "rustc-hash", - "rustls 0.21.7", + "rustls 0.21.10", + "rustls-native-certs 0.6.3", "slab", "thiserror", "tinyvec", @@ -6126,7 +7310,7 @@ checksum = "055b4e778e8feb9f93c4e439f71dc2156ef13360b432b799e179a8c4cdf0b1d7" dependencies = [ "bytes", "libc", - "socket2 0.5.4", + "socket2 0.5.5", "tracing", "windows-sys 0.48.0", ] @@ -6142,11 +7326,11 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.33" +version = "1.0.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" +checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" dependencies = [ - "proc-macro2 1.0.67", + "proc-macro2 1.0.78", ] [[package]] @@ -6161,6 +7345,19 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" +[[package]] +name = "rand" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" +dependencies = [ + "getrandom 0.1.16", + "libc", + "rand_chacha 0.2.2", + "rand_core 0.5.1", + "rand_hc", +] + [[package]] name = "rand" version = "0.8.5" @@ -6168,10 +7365,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ "libc", - "rand_chacha", + "rand_chacha 0.3.1", "rand_core 0.6.4", ] +[[package]] +name = "rand_chacha" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" +dependencies = [ + "ppv-lite86", + "rand_core 0.5.1", +] + [[package]] name = "rand_chacha" version = "0.3.1" @@ -6187,6 +7394,9 @@ name = "rand_core" version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" +dependencies = [ + "getrandom 0.1.16", +] [[package]] name = "rand_core" @@ -6194,12 +7404,21 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom", + "getrandom 0.2.12", ] [[package]] -name = "rand_xorshift" -version = "0.3.0" +name = "rand_hc" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" +dependencies = [ + "rand_core 0.5.1", +] + +[[package]] +name = "rand_xorshift" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d25bf25ec5ae4a3f1b92f929810509a2f53d7dca2f50b794ff57e3face536c8f" dependencies = [ @@ -6217,18 +7436,18 @@ dependencies = [ [[package]] name = "random-string" -version = "1.0.0" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf4e63111ec5292d8af9c220f06fe3bb87991cc78b6f1f7e291d1ae6b8a60817" +checksum = "f70fd13c3024ae3f17381bb5c4d409c6dc9ea6895c08fa2147aba305bea3c4af" dependencies = [ "fastrand 1.9.0", ] [[package]] name = "rayon" -version = "1.7.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b" +checksum = "fa7237101a77a10773db45d62004a272517633fbcc3df19d96455ede1122e051" dependencies = [ "either", "rayon-core", @@ -6236,14 +7455,12 @@ dependencies = [ [[package]] name = "rayon-core" -version = "1.11.0" +version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" dependencies = [ - "crossbeam-channel", "crossbeam-deque", "crossbeam-utils", - "num_cpus", ] [[package]] @@ -6253,20 +7470,32 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6413f3de1edee53342e6138e75b56d32e7bc6e332b3bd62d497b1929d4cfbcdd" dependencies = [ "pem", - "ring", + "ring 0.16.20", + "time", + "yasna", +] + +[[package]] +name = "rcgen" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffbe84efe2f38dea12e9bfc1f65377fdf03e53a18cb3b995faedf7934c7e785b" +dependencies = [ + "pem", + "ring 0.16.20", "time", "yasna", ] [[package]] name = "readonly" -version = "0.2.11" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8f439da1766942fe069954da6058b2e6c1760eb878bae76f5be9fc29f56f574" +checksum = "a25d631e41bfb5fdcde1d4e2215f62f7f0afa3ff11e26563765bd6ea1d229aeb" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2 1.0.78", + "quote 1.0.35", + "syn 2.0.48", ] [[package]] @@ -6282,58 +7511,49 @@ dependencies = [ "parking_lot", "pin-project-lite", "signal-hook-registry", - "socket2 0.4.9", - "tokio-macros 2.1.0 (git+https://github.com/mystenmark/tokio-madsim-fork.git?rev=e4693500118d5e79ce098ee6dfc2c48f3ef19e45)", + "socket2 0.4.10", + "tokio-macros 2.1.0", "windows-sys 0.48.0", ] [[package]] name = "redox_syscall" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" -dependencies = [ - "bitflags 1.3.2", -] - -[[package]] -name = "redox_syscall" -version = "0.3.5" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" +checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" dependencies = [ "bitflags 1.3.2", ] [[package]] name = "redox_users" -version = "0.4.3" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" +checksum = "a18479200779601e498ada4e8c1e1f50e3ee19deb0259c25825a98b5603b2cb4" dependencies = [ - "getrandom", - "redox_syscall 0.2.16", + "getrandom 0.2.12", + "libredox", "thiserror", ] [[package]] name = "ref-cast" -version = "1.0.20" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acde58d073e9c79da00f2b5b84eed919c8326832648a5b109b3fce1bb1175280" +checksum = "c4846d4c50d1721b1a3bef8af76924eef20d5e723647333798c1b519b3a9473f" dependencies = [ "ref-cast-impl", ] [[package]] name = "ref-cast-impl" -version = "1.0.20" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f7473c2cfcf90008193dd0e3e16599455cb601a9fce322b5bb55de799664925" +checksum = "5fddb4f8d99b0a2ebafc65a87a69a7b9875e4b1ae1f00db265d300ef7f28bccc" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2 1.0.78", + "quote 1.0.35", + "syn 2.0.48", ] [[package]] @@ -6359,12 +7579,6 @@ dependencies = [ "regex-syntax 0.8.2", ] -[[package]] -name = "regex-syntax" -version = "0.6.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" - [[package]] name = "regex-syntax" version = "0.7.5" @@ -6388,13 +7602,26 @@ dependencies = [ "valuable", ] +[[package]] +name = "report" +version = "0.1.0" +source = "git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f#c0904e1c72c99a174a93b5f6c18b30f52d20b71f" +dependencies = [ + "error-stack", + "eyre", + "itertools 0.11.0", + "thiserror", + "valuable", +] + [[package]] name = "reqwest" -version = "0.11.20" +version = "0.11.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e9ad3fe7488d7e34558a2033d45a0c90b72d97b4f80705666fea71472e2e6a1" +checksum = "37b1ae8d9ac08420c66222fb9096fc5de435c3c48542bc5336c51892cffafb41" dependencies = [ - "base64 0.21.4", + "async-compression 0.4.5", + "base64 0.21.7", "bytes", "encoding_rs", "futures-core", @@ -6403,7 +7630,7 @@ dependencies = [ "http", "http-body", "hyper", - "hyper-rustls 0.24.1", + "hyper-rustls 0.24.2", "ipnet", "js-sys", "log", @@ -6411,19 +7638,21 @@ dependencies = [ "once_cell", "percent-encoding", "pin-project-lite", - "rustls 0.21.7", + "rustls 0.21.10", "rustls-pemfile", "serde", "serde_json", "serde_urlencoded", + "system-configuration", "tokio", "tokio-rustls 0.24.1", + "tokio-util 0.7.10", "tower-service", "url", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", - "webpki-roots 0.25.2", + "webpki-roots 0.25.3", "winreg", ] @@ -6437,16 +7666,34 @@ checksum = "8c31b5c4033f8fdde8700e4657be2c497e7288f01515be52168c631e2e4d4086" name = "rewards" version = "0.1.0" dependencies = [ - "axelar-wasm-std", - "axelar-wasm-std-derive", + "axelar-wasm-std 0.1.0", + "axelar-wasm-std-derive 0.1.0", "cosmwasm-schema", "cosmwasm-std", "cw-multi-test", - "cw-storage-plus 1.1.0", + "cw-storage-plus 1.2.0", + "error-stack", + "itertools 0.11.0", + "mockall", + "report 0.1.0", + "serde", + "thiserror", +] + +[[package]] +name = "rewards" +version = "0.1.0" +source = "git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f#c0904e1c72c99a174a93b5f6c18b30f52d20b71f" +dependencies = [ + "axelar-wasm-std 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "axelar-wasm-std-derive 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "cosmwasm-schema", + "cosmwasm-std", + "cw-storage-plus 1.2.0", "error-stack", "itertools 0.11.0", "mockall", - "report", + "report 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", "serde", "thiserror", ] @@ -6457,7 +7704,7 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" dependencies = [ - "hmac", + "hmac 0.12.1", "subtle", ] @@ -6470,12 +7717,26 @@ dependencies = [ "cc", "libc", "once_cell", - "spin", - "untrusted", + "spin 0.5.2", + "untrusted 0.7.1", "web-sys", "winapi", ] +[[package]] +name = "ring" +version = "0.17.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "688c63d65483050968b2a8937f7995f443e27041a0f7700aa59b0822aedebb74" +dependencies = [ + "cc", + "getrandom 0.2.12", + "libc", + "spin 0.9.8", + "untrusted 0.9.0", + "windows-sys 0.48.0", +] + [[package]] name = "ripemd" version = "0.1.3" @@ -6502,8 +7763,8 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e33d7b2abe0c340d8797fe2907d3f20d3b5ea5908683618bfe80df7f621f672a" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.78", + "quote 1.0.35", "syn 1.0.109", ] @@ -6539,6 +7800,17 @@ dependencies = [ "serde", ] +[[package]] +name = "rpassword" +version = "7.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80472be3c897911d0137b2d2b9055faf6eeac5b14e324073d83bc17b191d7e3f" +dependencies = [ + "libc", + "rtoolbox", + "windows-sys 0.48.0", +] + [[package]] name = "rsa" version = "0.8.2" @@ -6554,12 +7826,22 @@ dependencies = [ "pkcs1", "pkcs8 0.9.0", "rand_core 0.6.4", - "sha2 0.10.7", - "signature 2.1.0", + "sha2 0.10.8", + "signature 2.2.0", "subtle", "zeroize", ] +[[package]] +name = "rtoolbox" +version = "0.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c247d24e63230cdb56463ae328478bd5eac8b8faa8c69461a77e8e323afac90e" +dependencies = [ + "libc", + "windows-sys 0.48.0", +] + [[package]] name = "rust-ini" version = "0.18.0" @@ -6608,15 +7890,15 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.14" +version = "0.38.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "747c788e9ce8e92b12cd485c49ddf90723550b654b32508f979b71a7b1ecda4f" +checksum = "322394588aaf33c24007e8bb3238ee3e4c5c09c084ab32bc73890b99ff326bca" dependencies = [ - "bitflags 2.4.0", + "bitflags 2.4.2", "errno", "libc", "linux-raw-sys", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] @@ -6627,21 +7909,21 @@ checksum = "35edb675feee39aec9c99fa5ff985081995a06d594114ae14cbe797ad7b7a6d7" dependencies = [ "base64 0.13.1", "log", - "ring", + "ring 0.16.20", "sct 0.6.1", "webpki", ] [[package]] name = "rustls" -version = "0.21.7" +version = "0.21.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd8d6c9f025a446bc4d18ad9632e69aec8f287aa84499ee335599fabd20c3fd8" +checksum = "f9d5a6813c0759e4609cd494e8e725babae6a2ca7b62a5536a13daaec6fcb7ba" dependencies = [ "log", - "ring", - "rustls-webpki 0.101.5", - "sct 0.7.0", + "ring 0.17.7", + "rustls-webpki", + "sct 0.7.1", ] [[package]] @@ -6657,32 +7939,34 @@ dependencies = [ ] [[package]] -name = "rustls-pemfile" -version = "1.0.3" +name = "rustls-native-certs" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d3987094b1d07b653b7dfdc3f70ce9a1da9c51ac18c1b06b662e4f9a0e9f4b2" +checksum = "a9aace74cb666635c918e9c12bc0d348266037aa8eb599b5cba565709a8dff00" dependencies = [ - "base64 0.21.4", + "openssl-probe", + "rustls-pemfile", + "schannel", + "security-framework", ] [[package]] -name = "rustls-webpki" -version = "0.100.3" +name = "rustls-pemfile" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f6a5fc258f1c1276dfe3016516945546e2d5383911efc0fc4f1cdc5df3a4ae3" +checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" dependencies = [ - "ring", - "untrusted", + "base64 0.21.7", ] [[package]] name = "rustls-webpki" -version = "0.101.5" +version = "0.101.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45a27e3b59326c16e23d30aeb7a36a24cc0d29e71d68ff611cdfb4a01d013bed" +checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" dependencies = [ - "ring", - "untrusted", + "ring 0.17.7", + "untrusted 0.9.0", ] [[package]] @@ -6705,9 +7989,9 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.15" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741" +checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c" [[package]] name = "salsa20" @@ -6715,7 +7999,7 @@ version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97a22f5af31f73a954c10289c93e8a50cc23d971e80ee446f1f6f7137a088213" dependencies = [ - "cipher", + "cipher 0.4.4", ] [[package]] @@ -6729,42 +8013,42 @@ dependencies = [ [[package]] name = "scale-info" -version = "2.9.0" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35c0a159d0c45c12b20c5a844feb1fe4bea86e28f17b92a5f0c42193634d3782" +checksum = "7f7d66a1128282b7ef025a8ead62a4a9fcf017382ec53b8ffbf4d7bf77bd3c60" dependencies = [ "cfg-if", "derive_more", - "parity-scale-codec 3.6.5", + "parity-scale-codec 3.6.9", "scale-info-derive", ] [[package]] name = "scale-info-derive" -version = "2.9.0" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "912e55f6d20e0e80d63733872b40e1227c0bce1e1ab81ba67d696339bfd7fd29" +checksum = "abf2c68b89cafb3b8d918dd07b42be0da66ff202cf1155c5739a4e0c1ea0dc19" dependencies = [ - "proc-macro-crate", - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro-crate 1.1.3", + "proc-macro2 1.0.78", + "quote 1.0.35", "syn 1.0.109", ] [[package]] name = "schannel" -version = "0.1.22" +version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c3733bf4cf7ea0880754e19cb5a462007c4a8c1914bff372ccc95b464f1df88" +checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534" dependencies = [ - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] name = "schemars" -version = "0.8.15" +version = "0.8.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f7b0ce13155372a76ee2e1c5ffba1fe61ede73fbea5630d61eee6fac4929c0c" +checksum = "45a28f4c49489add4ce10783f7911893516f15afe45d015608d41faca6bc4d29" dependencies = [ "dyn-clone", "either", @@ -6775,12 +8059,12 @@ dependencies = [ [[package]] name = "schemars_derive" -version = "0.8.15" +version = "0.8.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e85e2a16b12bdb763244c69ab79363d71db2b4b918a2def53f80b02e0574b13c" +checksum = "c767fd6fa65d9ccf9cf026122c1b555f2ef9a4f0cea69da4d7dbc3e258d30967" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.78", + "quote 1.0.35", "serde_derive_internals", "syn 1.0.109", ] @@ -6791,16 +8075,36 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" +[[package]] +name = "scroll" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04c565b551bafbef4157586fa379538366e4385d42082f255bfd96e4fe8519da" +dependencies = [ + "scroll_derive", +] + +[[package]] +name = "scroll_derive" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1db149f81d46d2deba7cd3c50772474707729550221e69588478ebf9ada425ae" +dependencies = [ + "proc-macro2 1.0.78", + "quote 1.0.35", + "syn 2.0.48", +] + [[package]] name = "scrypt" version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9f9e24d2b632954ded8ab2ef9fea0a0c769ea56ea98bddbafbad22caeeadf45d" dependencies = [ - "hmac", + "hmac 0.12.1", "pbkdf2 0.11.0", "salsa20", - "sha2 0.10.7", + "sha2 0.10.8", ] [[package]] @@ -6809,18 +8113,18 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b362b83898e0e69f38515b82ee15aa80636befe47c3b6d3d89a911e78fc228ce" dependencies = [ - "ring", - "untrusted", + "ring 0.16.20", + "untrusted 0.7.1", ] [[package]] name = "sct" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4" +checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" dependencies = [ - "ring", - "untrusted", + "ring 0.17.7", + "untrusted 0.9.0", ] [[package]] @@ -6844,7 +8148,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "25996b82292a7a57ed3508f052cfff8640d38d32018784acd714758b43da9c8f" dependencies = [ "bitcoin_hashes", - "rand", + "rand 0.8.5", "secp256k1-sys", ] @@ -6882,9 +8186,9 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.18" +version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0293b4b29daaf487284529cc2f5675b8e57c61f70167ba415a463651fd6a918" +checksum = "b97ed7a9823b74f99c7742f5336af7be5ecd3eeafcb1507d1fa93347b1d589b0" dependencies = [ "serde", ] @@ -6903,13 +8207,22 @@ checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" [[package]] name = "serde" -version = "1.0.188" +version = "1.0.195" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf9e0fcba69a370eed61bcf2b728575f726b50b55cba78064753d708ddc7549e" +checksum = "63261df402c67811e9ac6def069e4786148c4563f4b50fd4bf30aa370d626b02" dependencies = [ "serde_derive", ] +[[package]] +name = "serde-big-array" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11fc7cc2c76d73e0f27ee52abbd64eec84d46f370c88371120433196934e4b7f" +dependencies = [ + "serde", +] + [[package]] name = "serde-json-wasm" version = "0.5.1" @@ -6942,22 +8255,22 @@ dependencies = [ [[package]] name = "serde_bytes" -version = "0.11.12" +version = "0.11.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab33ec92f677585af6d88c65593ae2375adde54efdbf16d597f2cbc7a6d368ff" +checksum = "8b8497c313fd43ab992087548117643f6fcd935cbf36f176ffda0aacf9591734" dependencies = [ "serde", ] [[package]] name = "serde_derive" -version = "1.0.188" +version = "1.0.195" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4eca7ac642d82aa35b60049a6eccb4be6be75e599bd2e9adb5f875a737654af2" +checksum = "46fe8f8603d81ba86327b23a2e9cdf49e1255fb94a4c5f297f6ee0547178ea2c" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2 1.0.78", + "quote 1.0.35", + "syn 2.0.48", ] [[package]] @@ -6966,18 +8279,18 @@ version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "85bf8229e7920a9f636479437026331ce11aa132b4dde37d121944a44d6e5f3c" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.78", + "quote 1.0.35", "syn 1.0.109", ] [[package]] name = "serde_json" -version = "1.0.107" +version = "1.0.111" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b420ce6e3d8bd882e9b243c6eed35dbc9a6110c9769e74b584e0d68d1f20c65" +checksum = "176e46fa42316f18edd598015a5166857fc835ec732f5215eac6b7bdbf0a84f4" dependencies = [ - "indexmap 2.0.0", + "indexmap 2.1.0", "itoa", "ryu", "serde", @@ -6985,9 +8298,9 @@ dependencies = [ [[package]] name = "serde_path_to_error" -version = "0.1.14" +version = "0.1.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4beec8bce849d58d06238cb50db2e1c417cfeafa4c63f692b15c82b7c80f8335" +checksum = "ebd154a240de39fdebcf5775d2675c204d7c13cf39a4c697be6493c8e734337c" dependencies = [ "itoa", "serde", @@ -6995,20 +8308,20 @@ dependencies = [ [[package]] name = "serde_repr" -version = "0.1.16" +version = "0.1.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8725e1dfadb3a50f7e5ce0b1a540466f6ed3fe7a0fca2ac2b8b831d31316bd00" +checksum = "0b2e6b945e9d3df726b65d6ee24060aff8e3533d431f677a9695db04eff9dfdb" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2 1.0.78", + "quote 1.0.35", + "syn 2.0.48", ] [[package]] name = "serde_spanned" -version = "0.6.3" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96426c9936fd7a0124915f9185ea1d20aa9445cc9821142f0a73bc9207a2e186" +checksum = "eb3622f419d1296904700073ea6cc23ad690adbd66f13ea683df73298736f0c1" dependencies = [ "serde", ] @@ -7043,18 +8356,18 @@ dependencies = [ [[package]] name = "serde_with" -version = "3.3.0" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ca3b16a3d82c4088f343b7480a93550b3eabe1a358569c2dfe38bbcead07237" +checksum = "64cd236ccc1b7a29e7e2739f27c0b2dd199804abc4290e32f59f3b68d6405c23" dependencies = [ - "base64 0.21.4", + "base64 0.21.7", "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.0.0", + "indexmap 2.1.0", "serde", "serde_json", - "serde_with_macros 3.3.0", + "serde_with_macros 3.4.0", "time", ] @@ -7065,21 +8378,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "881b6f881b17d13214e5d494c939ebab463d01264ce1811e9d4ac3a882e7695f" dependencies = [ "darling 0.20.3", - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2 1.0.78", + "quote 1.0.35", + "syn 2.0.48", ] [[package]] name = "serde_with_macros" -version = "3.3.0" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e6be15c453eb305019bfa438b1593c731f36a289a7853f7707ee29e870b3b3c" +checksum = "93634eb5f75a2323b16de4748022ac4297f9e76b6dced2be287a099f41b5e788" dependencies = [ "darling 0.20.3", - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2 1.0.78", + "quote 1.0.35", + "syn 2.0.48", ] [[package]] @@ -7098,16 +8411,35 @@ dependencies = [ name = "service-registry" version = "0.1.0" dependencies = [ - "axelar-wasm-std", - "axelar-wasm-std-derive", - "connection-router", + "axelar-wasm-std 0.1.0", + "axelar-wasm-std-derive 0.1.0", + "connection-router 0.1.0", "cosmwasm-schema", "cosmwasm-std", "cosmwasm-storage", "cw-multi-test", - "cw-storage-plus 1.1.0", + "cw-storage-plus 1.2.0", + "error-stack", + "report 0.1.0", + "schemars", + "serde", + "thiserror", +] + +[[package]] +name = "service-registry" +version = "0.1.0" +source = "git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f#c0904e1c72c99a174a93b5f6c18b30f52d20b71f" +dependencies = [ + "axelar-wasm-std 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "axelar-wasm-std-derive 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "connection-router 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "cosmwasm-schema", + "cosmwasm-std", + "cosmwasm-storage", + "cw-storage-plus 1.2.0", "error-stack", - "report", + "report 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", "schemars", "serde", "thiserror", @@ -7115,9 +8447,9 @@ dependencies = [ [[package]] name = "sha1" -version = "0.10.5" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" dependencies = [ "cfg-if", "cpufeatures", @@ -7139,9 +8471,9 @@ dependencies = [ [[package]] name = "sha2" -version = "0.10.7" +version = "0.10.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "479fb9d862239e610720565ca91403019f2f00410f1864c5aa7479b950a76ed8" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" dependencies = [ "cfg-if", "cpufeatures", @@ -7182,9 +8514,9 @@ dependencies = [ [[package]] name = "sharded-slab" -version = "0.1.4" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" dependencies = [ "lazy_static", ] @@ -7202,6 +8534,12 @@ dependencies = [ "workspace-hack", ] +[[package]] +name = "shell-words" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24188a676b6ae68c3b2cb3a01be17fbf7240ce009799bb56d5b1409051e78fde" + [[package]] name = "shlex" version = "1.2.0" @@ -7225,9 +8563,9 @@ checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c" [[package]] name = "signature" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e1788eed21689f9cf370582dfc467ef36ed9c707f073528ddafa8d83e3b8500" +checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" dependencies = [ "digest 0.10.7", "rand_core 0.6.4", @@ -7235,9 +8573,9 @@ dependencies = [ [[package]] name = "similar" -version = "2.2.1" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "420acb44afdae038210c99e69aae24109f32f15500aa708e81d46c9f29d55fcf" +checksum = "32fea41aca09ee824cc9724996433064c89f7777e60762749a4170a14abbfa21" [[package]] name = "simple_asn1" @@ -7271,81 +8609,1035 @@ dependencies = [ name = "slab" version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + +[[package]] +name = "smallvec" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2593d31f82ead8df961d8bd23a64c2ccf2eb5dd34b0a34bfb4dd54011c72009e" + +[[package]] +name = "snap" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b6b67fb9a61334225b5b790716f609cd58395f895b3fe8b328786812a40bc3b" + +[[package]] +name = "socket2" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "socket2" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9" +dependencies = [ + "libc", + "windows-sys 0.48.0", +] + +[[package]] +name = "solana-account-decoder" +version = "1.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06cc3f73c655469ddab1a7b8f9687e674737fc657dc2fa1e23a7abad2ec541fc" +dependencies = [ + "Inflector", + "base64 0.21.7", + "bincode", + "bs58 0.4.0", + "bv", + "lazy_static", + "serde", + "serde_derive", + "serde_json", + "solana-config-program", + "solana-sdk", + "spl-token", + "spl-token-2022", + "spl-token-group-interface", + "spl-token-metadata-interface", + "thiserror", + "zstd", +] + +[[package]] +name = "solana-clap-utils" +version = "1.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09392e795b353fa6527f19dc36cb9fa9cd40afb71215027fbafce73a6da63383" +dependencies = [ + "chrono", + "clap 2.34.0", + "rpassword", + "solana-remote-wallet", + "solana-sdk", + "thiserror", + "tiny-bip39", + "uriparse", + "url", +] + +[[package]] +name = "solana-client" +version = "1.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5515041f760618a2a669f236abc409f8aea9c865400563cdc8030eca5156f979" +dependencies = [ + "async-trait", + "bincode", + "dashmap", + "futures", + "futures-util", + "indexmap 2.1.0", + "indicatif", + "log", + "quinn", + "rayon", + "solana-connection-cache", + "solana-measure", + "solana-metrics", + "solana-pubsub-client", + "solana-quic-client", + "solana-rpc-client", + "solana-rpc-client-api", + "solana-rpc-client-nonce-utils", + "solana-sdk", + "solana-streamer", + "solana-thin-client", + "solana-tpu-client", + "solana-udp-client", + "thiserror", + "tokio", +] + +[[package]] +name = "solana-config-program" +version = "1.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17da53f316ec29baa40c8be233418da94d2cfcb79f77b8b0bb96ddd30b919525" +dependencies = [ + "bincode", + "chrono", + "serde", + "serde_derive", + "solana-program-runtime", + "solana-sdk", +] + +[[package]] +name = "solana-connection-cache" +version = "1.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90651b04cc5dd1edd4cecae2db5736ac67fafd1150fa6c8502d5957fbde8fc37" +dependencies = [ + "async-trait", + "bincode", + "crossbeam-channel", + "futures-util", + "indexmap 2.1.0", + "log", + "rand 0.8.5", + "rayon", + "rcgen 0.10.0", + "solana-measure", + "solana-metrics", + "solana-sdk", + "thiserror", + "tokio", +] + +[[package]] +name = "solana-frozen-abi" +version = "1.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b24a0e5179387f145afba79d72b27db817cecf1b9494f7cd55d42aa986ed3141" +dependencies = [ + "block-buffer 0.10.4", + "bs58 0.4.0", + "bv", + "either", + "generic-array", + "im", + "lazy_static", + "log", + "memmap2", + "rustc_version", + "serde", + "serde_bytes", + "serde_derive", + "sha2 0.10.8", + "solana-frozen-abi-macro", + "subtle", + "thiserror", +] + +[[package]] +name = "solana-frozen-abi-macro" +version = "1.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92970a9898903eb1433d42f53ca4e8f497bc05382b7bc170ea81d4d3c6ff5d58" +dependencies = [ + "proc-macro2 1.0.78", + "quote 1.0.35", + "rustc_version", + "syn 2.0.48", +] + +[[package]] +name = "solana-logger" +version = "1.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dea25cdb22fe3dfed39a9ef59b836153d226fb9e3984a1f5b6134061bfa94528" +dependencies = [ + "env_logger", + "lazy_static", + "log", +] + +[[package]] +name = "solana-measure" +version = "1.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cda9ee9ea9115543ae59f81a45d6329ecd9dca0b96dac4a55be73aab714f7ed4" +dependencies = [ + "log", + "solana-sdk", +] + +[[package]] +name = "solana-metrics" +version = "1.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f69472348763363003c51c3af98de759c0153e99a31573a649330351a45f851" +dependencies = [ + "crossbeam-channel", + "gethostname", + "lazy_static", + "log", + "reqwest", + "solana-sdk", + "thiserror", +] + +[[package]] +name = "solana-net-utils" +version = "1.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89d35642b3a76cb0920b8d044321ecd945f8d42a1c510b1d730b776ad8352b72" +dependencies = [ + "bincode", + "clap 3.2.25", + "crossbeam-channel", + "log", + "nix", + "rand 0.8.5", + "serde", + "serde_derive", + "socket2 0.5.5", + "solana-logger", + "solana-sdk", + "solana-version", + "tokio", + "url", +] + +[[package]] +name = "solana-perf" +version = "1.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbad7e94d4faf1a99b12c70c881d3f241f0e740fb595ee55d61ba0bfeee79b8f" +dependencies = [ + "ahash 0.8.7", + "bincode", + "bv", + "caps", + "curve25519-dalek 3.2.1", + "dlopen2", + "fnv", + "lazy_static", + "libc", + "log", + "nix", + "rand 0.8.5", + "rayon", + "rustc_version", + "serde", + "solana-frozen-abi", + "solana-frozen-abi-macro", + "solana-metrics", + "solana-rayon-threadlimit", + "solana-sdk", + "solana-vote-program", +] + +[[package]] +name = "solana-program" +version = "1.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0ce0a1f4487b0b9e5e53610e8c17e558d17069145281aaae9f825bfef84b16e" +dependencies = [ + "ark-bn254", + "ark-ec", + "ark-ff", + "ark-serialize", + "base64 0.21.7", + "bincode", + "bitflags 2.4.2", + "blake3", + "borsh 0.10.3", + "borsh 0.9.3", + "borsh 1.3.1", + "bs58 0.4.0", + "bv", + "bytemuck", + "cc", + "console_error_panic_hook", + "console_log", + "curve25519-dalek 3.2.1", + "getrandom 0.2.12", + "itertools 0.10.5", + "js-sys", + "lazy_static", + "libc", + "libsecp256k1 0.6.0", + "light-poseidon", + "log", + "memoffset 0.9.0", + "num-bigint 0.4.4", + "num-derive 0.4.1", + "num-traits", + "parking_lot", + "rand 0.8.5", + "rustc_version", + "rustversion", + "serde", + "serde_bytes", + "serde_derive", + "serde_json", + "sha2 0.10.8", + "sha3 0.10.8", + "solana-frozen-abi", + "solana-frozen-abi-macro", + "solana-sdk-macro", + "thiserror", + "tiny-bip39", + "wasm-bindgen", + "zeroize", +] + +[[package]] +name = "solana-program-runtime" +version = "1.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b89a4eaf965a6d6ab917bcb427997e416e9cf6d23549b713d0fba6f7f861e63" +dependencies = [ + "base64 0.21.7", + "bincode", + "eager", + "enum-iterator", + "itertools 0.10.5", + "libc", + "log", + "num-derive 0.4.1", + "num-traits", + "percentage", + "rand 0.8.5", + "rustc_version", + "serde", + "solana-frozen-abi", + "solana-frozen-abi-macro", + "solana-measure", + "solana-metrics", + "solana-sdk", + "solana_rbpf", + "thiserror", +] + +[[package]] +name = "solana-pubsub-client" +version = "1.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e84d25c9d389e243b7ebfd92ed3c7ba539fc95dbc95e09e5b9fc34aa6ef2d658" +dependencies = [ + "crossbeam-channel", + "futures-util", + "log", + "reqwest", + "semver", + "serde", + "serde_derive", + "serde_json", + "solana-account-decoder", + "solana-rpc-client-api", + "solana-sdk", + "thiserror", + "tokio", + "tokio-stream", + "tokio-tungstenite", + "tungstenite", + "url", +] + +[[package]] +name = "solana-quic-client" +version = "1.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "049cb69a18bc5023ca2adb4f20fdc9e10e97aff0a922d925a7ecb3042e67bcd1" +dependencies = [ + "async-mutex", + "async-trait", + "futures", + "itertools 0.10.5", + "lazy_static", + "log", + "quinn", + "quinn-proto", + "rcgen 0.10.0", + "rustls 0.21.10", + "solana-connection-cache", + "solana-measure", + "solana-metrics", + "solana-net-utils", + "solana-rpc-client-api", + "solana-sdk", + "solana-streamer", + "thiserror", + "tokio", +] + +[[package]] +name = "solana-rayon-threadlimit" +version = "1.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "322615866c372ac1521b41cec073a0a5df6d492794b49418c8ed47eb74114652" +dependencies = [ + "lazy_static", + "num_cpus", +] + +[[package]] +name = "solana-remote-wallet" +version = "1.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1239d53b3b544b9c5b27a65dc5d3d1fab77c124626a0aa09277e10b36badf9d3" +dependencies = [ + "console", + "dialoguer", + "log", + "num-derive 0.4.1", + "num-traits", + "parking_lot", + "qstring", + "semver", + "solana-sdk", + "thiserror", + "uriparse", +] + +[[package]] +name = "solana-rpc-client" +version = "1.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b70fe092aac226e94df0289045fce6520025141d3c131e556a19119eaac26c59" +dependencies = [ + "async-trait", + "base64 0.21.7", + "bincode", + "bs58 0.4.0", + "indicatif", + "log", + "reqwest", + "semver", + "serde", + "serde_derive", + "serde_json", + "solana-account-decoder", + "solana-rpc-client-api", + "solana-sdk", + "solana-transaction-status", + "solana-version", + "solana-vote-program", + "tokio", +] + +[[package]] +name = "solana-rpc-client-api" +version = "1.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c4d480cff245c3ba367d396da87e908095160cdf57f33efb5d1b08a7763d490" +dependencies = [ + "base64 0.21.7", + "bs58 0.4.0", + "jsonrpc-core", + "reqwest", + "semver", + "serde", + "serde_derive", + "serde_json", + "solana-account-decoder", + "solana-sdk", + "solana-transaction-status", + "solana-version", + "spl-token-2022", + "thiserror", +] + +[[package]] +name = "solana-rpc-client-nonce-utils" +version = "1.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fc78ba1bb353500b23983f0f01957c6f37f54607f1275e4a7e4de1a77743cdc" +dependencies = [ + "clap 2.34.0", + "solana-clap-utils", + "solana-rpc-client", + "solana-sdk", + "thiserror", +] + +[[package]] +name = "solana-sdk" +version = "1.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90134b382769b2e7a1d87ae97d6242f1b7ce237591e06520641ad6e2df07653c" +dependencies = [ + "assert_matches", + "base64 0.21.7", + "bincode", + "bitflags 2.4.2", + "borsh 1.3.1", + "bs58 0.4.0", + "bytemuck", + "byteorder", + "chrono", + "derivation-path", + "digest 0.10.7", + "ed25519-dalek 1.0.1", + "ed25519-dalek-bip32", + "generic-array", + "hmac 0.12.1", + "itertools 0.10.5", + "js-sys", + "lazy_static", + "libsecp256k1 0.6.0", + "log", + "memmap2", + "num-derive 0.4.1", + "num-traits", + "num_enum 0.7.2", + "pbkdf2 0.11.0", + "qstring", + "qualifier_attr", + "rand 0.7.3", + "rand 0.8.5", + "rustc_version", + "rustversion", + "serde", + "serde_bytes", + "serde_derive", + "serde_json", + "serde_with 2.3.3", + "sha2 0.10.8", + "sha3 0.10.8", + "siphasher", + "solana-frozen-abi", + "solana-frozen-abi-macro", + "solana-logger", + "solana-program", + "solana-sdk-macro", + "thiserror", + "uriparse", + "wasm-bindgen", +] + +[[package]] +name = "solana-sdk-macro" +version = "1.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3e3cdf8616a66e99343c3f99c39f311b4dc3e13977a4c96d7bbaa82dffd2fc5" +dependencies = [ + "bs58 0.4.0", + "proc-macro2 1.0.78", + "quote 1.0.35", + "rustversion", + "syn 2.0.48", +] + +[[package]] +name = "solana-security-txt" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "468aa43b7edb1f9b7b7b686d5c3aeb6630dc1708e86e31343499dd5c4d775183" + +[[package]] +name = "solana-streamer" +version = "1.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d18572dc946c176ff564c353a97c4bd8ce89774a95d98f1a9345c28e223948cd" +dependencies = [ + "async-channel", + "bytes", + "crossbeam-channel", + "futures-util", + "histogram", + "indexmap 2.1.0", + "itertools 0.10.5", + "libc", + "log", + "nix", + "pem", + "percentage", + "pkcs8 0.8.0", + "quinn", + "quinn-proto", + "rand 0.8.5", + "rcgen 0.10.0", + "rustls 0.21.10", + "solana-metrics", + "solana-perf", + "solana-sdk", + "thiserror", + "tokio", + "x509-parser", +] + +[[package]] +name = "solana-thin-client" +version = "1.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "994469881eda11c8160b6ad7f42b3eb53125b91cc4328675fcfb784a79a878e4" +dependencies = [ + "bincode", + "log", + "rayon", + "solana-connection-cache", + "solana-rpc-client", + "solana-rpc-client-api", + "solana-sdk", +] + +[[package]] +name = "solana-tpu-client" +version = "1.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6bc1d8362ac84b281a880705faf5c0c4f813c4b335bac2456e89f4fee93aab7" +dependencies = [ + "async-trait", + "bincode", + "futures-util", + "indexmap 2.1.0", + "indicatif", + "log", + "rayon", + "solana-connection-cache", + "solana-measure", + "solana-metrics", + "solana-pubsub-client", + "solana-rpc-client", + "solana-rpc-client-api", + "solana-sdk", + "thiserror", + "tokio", +] + +[[package]] +name = "solana-transaction-status" +version = "1.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49b96a0b16e7bba624f778efd7ee532f91b0c540d453e25a02e9a43d590901bb" +dependencies = [ + "Inflector", + "base64 0.21.7", + "bincode", + "borsh 0.10.3", + "bs58 0.4.0", + "lazy_static", + "log", + "serde", + "serde_derive", + "serde_json", + "solana-account-decoder", + "solana-sdk", + "spl-associated-token-account", + "spl-memo", + "spl-token", + "spl-token-2022", + "thiserror", +] + +[[package]] +name = "solana-udp-client" +version = "1.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d0bf02c785bd19e539801a0dd0ac603c6fb268237a21bdd330c3610d0140395" +dependencies = [ + "async-trait", + "solana-connection-cache", + "solana-net-utils", + "solana-sdk", + "solana-streamer", + "thiserror", + "tokio", +] + +[[package]] +name = "solana-version" +version = "1.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f184e53aa8f66521fcae40cab29817ff665e86c683f40e2acde9def04e928cb" +dependencies = [ + "log", + "rustc_version", + "semver", + "serde", + "serde_derive", + "solana-frozen-abi", + "solana-frozen-abi-macro", + "solana-sdk", +] + +[[package]] +name = "solana-vote-program" +version = "1.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f1e7878ebcdd5b3c681493e674f53bdfcee7d9a455d32e8813484c602ffd74c" +dependencies = [ + "bincode", + "log", + "num-derive 0.4.1", + "num-traits", + "rustc_version", + "serde", + "serde_derive", + "solana-frozen-abi", + "solana-frozen-abi-macro", + "solana-metrics", + "solana-program", + "solana-program-runtime", + "solana-sdk", + "thiserror", +] + +[[package]] +name = "solana-zk-token-sdk" +version = "1.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29693ea4eac0f076b9beb54db7c11d0220b110620aeee56a32ff2a49a170ebe8" +dependencies = [ + "aes-gcm-siv", + "base64 0.21.7", + "bincode", + "bytemuck", + "byteorder", + "curve25519-dalek 3.2.1", + "getrandom 0.1.16", + "itertools 0.10.5", + "lazy_static", + "merlin", + "num-derive 0.4.1", + "num-traits", + "rand 0.7.3", + "serde", + "serde_json", + "sha3 0.9.1", + "solana-program", + "solana-sdk", + "subtle", + "thiserror", + "zeroize", +] + +[[package]] +name = "solana_rbpf" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d457cc2ba742c120492a64b7fa60e22c575e891f6b55039f4d736568fb112a3" +dependencies = [ + "byteorder", + "combine", + "goblin", + "hash32", + "libc", + "log", + "rand 0.8.5", + "rustc-demangle", + "scroll", + "thiserror", + "winapi", +] + +[[package]] +name = "solang-parser" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c425ce1c59f4b154717592f0bdf4715c3a1d55058883622d3157e1f0908a5b26" +dependencies = [ + "itertools 0.11.0", + "lalrpop", + "lalrpop-util", + "phf", + "thiserror", + "unicode-xid 0.2.4", +] + +[[package]] +name = "spin" +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.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d01ac02a6ccf3e07db148d2be087da624fea0221a16152ed01f0496a6b0a27" +dependencies = [ + "base64ct", + "der 0.5.1", +] + +[[package]] +name = "spki" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67cf02bbac7a337dc36e4f5a693db6c21e7863f45070f7064577eb4367a3212b" +dependencies = [ + "base64ct", + "der 0.6.1", +] + +[[package]] +name = "spki" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" +dependencies = [ + "base64ct", + "der 0.7.8", +] + +[[package]] +name = "spl-associated-token-account" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "992d9c64c2564cc8f63a4b508bf3ebcdf2254b0429b13cd1d31adb6162432a5f" +dependencies = [ + "assert_matches", + "borsh 0.10.3", + "num-derive 0.4.1", + "num-traits", + "solana-program", + "spl-token", + "spl-token-2022", + "thiserror", +] + +[[package]] +name = "spl-discriminator" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cce5d563b58ef1bb2cdbbfe0dfb9ffdc24903b10ae6a4df2d8f425ece375033f" +dependencies = [ + "bytemuck", + "solana-program", + "spl-discriminator-derive", +] + +[[package]] +name = "spl-discriminator-derive" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fadbefec4f3c678215ca72bd71862697bb06b41fd77c0088902dd3203354387b" +dependencies = [ + "quote 1.0.35", + "spl-discriminator-syn", + "syn 2.0.48", +] + +[[package]] +name = "spl-discriminator-syn" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e5f2044ca42c8938d54d1255ce599c79a1ffd86b677dfab695caa20f9ffc3f2" +dependencies = [ + "proc-macro2 1.0.78", + "quote 1.0.35", + "sha2 0.10.8", + "syn 2.0.48", + "thiserror", +] + +[[package]] +name = "spl-memo" +version = "4.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0f180b03318c3dbab3ef4e1e4d46d5211ae3c780940dd0a28695aba4b59a75a" +dependencies = [ + "solana-program", +] + +[[package]] +name = "spl-pod" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2881dddfca792737c0706fa0175345ab282b1b0879c7d877bad129645737c079" +dependencies = [ + "borsh 0.10.3", + "bytemuck", + "solana-program", + "solana-zk-token-sdk", + "spl-program-error", +] + +[[package]] +name = "spl-program-error" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "249e0318493b6bcf27ae9902600566c689b7dfba9f1bdff5893e92253374e78c" dependencies = [ - "autocfg", + "num-derive 0.4.1", + "num-traits", + "solana-program", + "spl-program-error-derive", + "thiserror", ] [[package]] -name = "smallvec" -version = "1.11.1" +name = "spl-program-error-derive" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "942b4a808e05215192e39f4ab80813e599068285906cc91aa64f923db842bd5a" +checksum = "ab5269c8e868da17b6552ef35a51355a017bd8e0eae269c201fef830d35fa52c" +dependencies = [ + "proc-macro2 1.0.78", + "quote 1.0.35", + "sha2 0.10.8", + "syn 2.0.48", +] [[package]] -name = "snap" -version = "1.1.0" +name = "spl-tlv-account-resolution" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e9f0ab6ef7eb7353d9119c170a436d1bf248eea575ac42d19d12f4e34130831" +checksum = "615d381f48ddd2bb3c57c7f7fb207591a2a05054639b18a62e785117dd7a8683" +dependencies = [ + "bytemuck", + "solana-program", + "spl-discriminator", + "spl-pod", + "spl-program-error", + "spl-type-length-value", +] [[package]] -name = "socket2" -version = "0.4.9" +name = "spl-token" +version = "4.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662" +checksum = "08459ba1b8f7c1020b4582c4edf0f5c7511a5e099a7a97570c9698d4f2337060" dependencies = [ - "libc", - "winapi", + "arrayref", + "bytemuck", + "num-derive 0.3.3", + "num-traits", + "num_enum 0.6.1", + "solana-program", + "thiserror", ] [[package]] -name = "socket2" -version = "0.5.4" +name = "spl-token-2022" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4031e820eb552adee9295814c0ced9e5cf38ddf1e8b7d566d6de8e2538ea989e" +checksum = "d697fac19fd74ff472dfcc13f0b442dd71403178ce1de7b5d16f83a33561c059" dependencies = [ - "libc", - "windows-sys 0.48.0", + "arrayref", + "bytemuck", + "num-derive 0.4.1", + "num-traits", + "num_enum 0.7.2", + "solana-program", + "solana-security-txt", + "solana-zk-token-sdk", + "spl-memo", + "spl-pod", + "spl-token", + "spl-token-group-interface", + "spl-token-metadata-interface", + "spl-transfer-hook-interface", + "spl-type-length-value", + "thiserror", ] [[package]] -name = "solang-parser" -version = "0.3.2" +name = "spl-token-group-interface" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cb9fa2fa2fa6837be8a2495486ff92e3ffe68a99b6eeba288e139efdd842457" +checksum = "b889509d49fa74a4a033ca5dae6c2307e9e918122d97e58562f5c4ffa795c75d" dependencies = [ - "itertools 0.11.0", - "lalrpop", - "lalrpop-util", - "phf", - "thiserror", - "unicode-xid 0.2.4", + "bytemuck", + "solana-program", + "spl-discriminator", + "spl-pod", + "spl-program-error", ] [[package]] -name = "spin" -version = "0.5.2" +name = "spl-token-metadata-interface" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" +checksum = "4c16ce3ba6979645fb7627aa1e435576172dd63088dc7848cb09aa331fa1fe4f" +dependencies = [ + "borsh 0.10.3", + "solana-program", + "spl-discriminator", + "spl-pod", + "spl-program-error", + "spl-type-length-value", +] [[package]] -name = "spki" -version = "0.6.0" +name = "spl-transfer-hook-interface" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67cf02bbac7a337dc36e4f5a693db6c21e7863f45070f7064577eb4367a3212b" +checksum = "7aabdb7c471566f6ddcee724beb8618449ea24b399e58d464d6b5bc7db550259" dependencies = [ - "base64ct", - "der 0.6.1", + "arrayref", + "bytemuck", + "solana-program", + "spl-discriminator", + "spl-pod", + "spl-program-error", + "spl-tlv-account-resolution", + "spl-type-length-value", ] [[package]] -name = "spki" -version = "0.7.2" +name = "spl-type-length-value" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d1e996ef02c474957d681f1b05213dfb0abab947b446a62d37770b23500184a" +checksum = "a468e6f6371f9c69aae760186ea9f1a01c2908351b06a5e0026d21cfc4d7ecac" dependencies = [ - "base64ct", - "der 0.7.8", + "bytemuck", + "solana-program", + "spl-discriminator", + "spl-pod", + "spl-program-error", ] [[package]] @@ -7367,6 +9659,12 @@ dependencies = [ "precomputed-hash", ] +[[package]] +name = "strsim" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" + [[package]] name = "strsim" version = "0.10.0" @@ -7388,7 +9686,7 @@ version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "290d54ea6f91c969195bdbcd7442c8c2a2ba87da8bf60a7ee86a235d4bc1e125" dependencies = [ - "strum_macros 0.25.2", + "strum_macros 0.25.3", ] [[package]] @@ -7398,23 +9696,23 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59" dependencies = [ "heck 0.4.1", - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.78", + "quote 1.0.35", "rustversion", "syn 1.0.109", ] [[package]] name = "strum_macros" -version = "0.25.2" +version = "0.25.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad8d03b598d3d0fff69bf533ee3ef19b8eeb342729596df84bcc7e1f96ec4059" +checksum = "23dc1fa9ac9c169a78ba62f0b841814b7abae11bdd047b9c58f893439e309ea0" dependencies = [ "heck 0.4.1", - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.78", + "quote 1.0.35", "rustversion", - "syn 2.0.37", + "syn 2.0.48", ] [[package]] @@ -7555,10 +9853,10 @@ version = "0.7.0" source = "git+https://github.com/mystenlabs/sui?tag=mainnet-v1.14.2#299cbeafbb6aa5601e08f00ac24bd647c61a63e2" dependencies = [ "msim-macros", - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.78", + "quote 1.0.35", "sui-enum-compat-util", - "syn 2.0.37", + "syn 2.0.48", "workspace-hack", ] @@ -7567,7 +9865,7 @@ name = "sui-protocol-config" version = "0.1.0" source = "git+https://github.com/mystenlabs/sui?tag=mainnet-v1.14.2#299cbeafbb6aa5601e08f00ac24bd647c61a63e2" dependencies = [ - "clap", + "clap 4.4.17", "insta", "schemars", "serde", @@ -7582,8 +9880,8 @@ name = "sui-protocol-config-macros" version = "0.1.0" source = "git+https://github.com/mystenlabs/sui?tag=mainnet-v1.14.2#299cbeafbb6aa5601e08f00ac24bd647c61a63e2" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.78", + "quote 1.0.35", "syn 1.0.109", "workspace-hack", ] @@ -7624,7 +9922,7 @@ dependencies = [ "prometheus", "proptest", "proptest-derive", - "rand", + "rand 0.8.5", "roaring", "schemars", "serde", @@ -7664,9 +9962,9 @@ dependencies = [ [[package]] name = "svm-rs" -version = "0.3.0" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "597e3a746727984cb7ea2487b6a40726cad0dbe86628e7d429aa6b8c4c153db4" +checksum = "20689c7d03b6461b502d0b95d6c24874c7d24dea2688af80486a130a06af3b07" dependencies = [ "dirs", "fs2", @@ -7676,7 +9974,7 @@ dependencies = [ "semver", "serde", "serde_json", - "sha2 0.10.7", + "sha2 0.10.8", "thiserror", "url", "zip", @@ -7699,22 +9997,34 @@ version = "1.0.109" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.78", + "quote 1.0.35", "unicode-ident", ] [[package]] name = "syn" -version = "2.0.37" +version = "2.0.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7303ef2c05cd654186cb250d29049a24840ca25d2747c25c0381c8d9e2f582e8" +checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.78", + "quote 1.0.35", "unicode-ident", ] +[[package]] +name = "syn_derive" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1329189c02ff984e9736652b1631330da25eaa6bc639089ed4915d25446cbe7b" +dependencies = [ + "proc-macro-error", + "proc-macro2 1.0.78", + "quote 1.0.35", + "syn 2.0.48", +] + [[package]] name = "sync_wrapper" version = "0.1.2" @@ -7727,12 +10037,33 @@ version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.78", + "quote 1.0.35", "syn 1.0.109", "unicode-xid 0.2.4", ] +[[package]] +name = "system-configuration" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "tabled" version = "0.12.2" @@ -7752,8 +10083,8 @@ checksum = "99f688a08b54f4f02f0a3c382aefdb7884d3d69609f785bd253dc033243e3fe4" dependencies = [ "heck 0.4.1", "proc-macro-error", - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.78", + "quote 1.0.35", "syn 1.0.109", ] @@ -7765,15 +10096,15 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "tempfile" -version = "3.8.0" +version = "3.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb94d2f3cc536af71caac6b6fcebf65860b347e7ce0cc9ebe8f70d3e521054ef" +checksum = "01ce4141aa927a6d1bd34a041795abd0db1cccba5d5f24b009f694bdf3a1f3fa" dependencies = [ "cfg-if", - "fastrand 2.0.0", - "redox_syscall 0.3.5", + "fastrand 2.0.1", + "redox_syscall", "rustix", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] @@ -7784,7 +10115,7 @@ checksum = "3f0a7d05cf78524782337f8edd55cbc578d159a16ad4affe2135c92f7dbac7f0" dependencies = [ "bytes", "digest 0.10.7", - "ed25519 2.2.2", + "ed25519 2.2.3", "ed25519-consensus", "flex-error", "futures", @@ -7798,8 +10129,8 @@ dependencies = [ "serde_bytes", "serde_json", "serde_repr", - "sha2 0.10.7", - "signature 2.1.0", + "sha2 0.10.8", + "signature 2.2.0", "subtle", "subtle-encoding", "tendermint-proto 0.32.2", @@ -7814,7 +10145,7 @@ source = "git+https://github.com/axelarnetwork/tendermint-rs.git?branch=v0.33.x# dependencies = [ "bytes", "digest 0.10.7", - "ed25519 2.2.2", + "ed25519 2.2.3", "ed25519-consensus", "flex-error", "futures", @@ -7826,8 +10157,8 @@ dependencies = [ "serde_bytes", "serde_json", "serde_repr", - "sha2 0.10.7", - "signature 2.1.0", + "sha2 0.10.8", + "signature 2.2.0", "subtle", "subtle-encoding", "tendermint-proto 0.33.0", @@ -7856,7 +10187,7 @@ checksum = "d5895470f28c530f8ae8c4071bf8190304ce00bd131d25e81730453124a3375c" dependencies = [ "bytes", "flex-error", - "num-derive", + "num-derive 0.3.3", "num-traits", "prost 0.11.9", "prost-types", @@ -7874,7 +10205,7 @@ checksum = "c0cec054567d16d85e8c3f6a3139963d1a66d9d3051ed545d31562550e9bcc3d" dependencies = [ "bytes", "flex-error", - "num-derive", + "num-derive 0.3.3", "num-traits", "prost 0.11.9", "prost-types", @@ -7891,7 +10222,7 @@ source = "git+https://github.com/axelarnetwork/tendermint-rs.git?branch=v0.33.x# dependencies = [ "bytes", "flex-error", - "num-derive", + "num-derive 0.3.3", "num-traits", "prost 0.11.9", "prost-types", @@ -7910,7 +10241,7 @@ dependencies = [ "bytes", "flex-error", "futures", - "getrandom", + "getrandom 0.2.12", "http", "hyper", "hyper-proxy", @@ -7948,9 +10279,9 @@ dependencies = [ [[package]] name = "termcolor" -version = "1.1.3" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755" +checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" dependencies = [ "winapi-util", ] @@ -7961,24 +10292,39 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3369f5ac52d5eb6ab48c6b4ffdc8efbcad6b89c765749064ba298f2c68a16a76" +[[package]] +name = "textwrap" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" +dependencies = [ + "unicode-width", +] + +[[package]] +name = "textwrap" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d" + [[package]] name = "thiserror" -version = "1.0.48" +version = "1.0.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d6d7a740b8a666a7e828dd00da9c0dc290dff53154ea77ac109281de90589b7" +checksum = "d54378c645627613241d077a3a79db965db602882668f9136ac42af9ecb730ad" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.48" +version = "1.0.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49922ecae66cc8a249b77e68d1d0623c1b2c514f0060c27cdc68bd62a1219d35" +checksum = "fa0faa943b50f3db30a20aa7e265dbc66076993efed8463e8de414e5d06d3471" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2 1.0.78", + "quote 1.0.35", + "syn 2.0.48", ] [[package]] @@ -8002,12 +10348,13 @@ dependencies = [ [[package]] name = "time" -version = "0.3.28" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17f6bb557fd245c28e6411aa56b6403c689ad95061f50e4be16c274e70a17e48" +checksum = "f657ba42c3f86e7680e53c8cd3af8abbe56b5491790b46e22e19c0d57463583e" dependencies = [ "deranged", "itoa", + "powerfmt", "serde", "time-core", "time-macros", @@ -8015,19 +10362,38 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7300fbefb4dadc1af235a9cef3737cea692a9d97e1b9cbcd4ebdae6f8868e6fb" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" [[package]] name = "time-macros" -version = "0.2.14" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a942f44339478ef67935ab2bbaec2fb0322496cf3cbe84b261e06ac3814c572" +checksum = "26197e33420244aeb70c3e8c78376ca46571bc4e701e4791c2cd9f57dcb3a43f" dependencies = [ "time-core", ] +[[package]] +name = "tiny-bip39" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffc59cb9dfc85bb312c3a78fd6aa8a8582e310b0fa885d5bb877f6dcc601839d" +dependencies = [ + "anyhow", + "hmac 0.8.1", + "once_cell", + "pbkdf2 0.4.0", + "rand 0.7.3", + "rustc-hash", + "sha2 0.9.9", + "thiserror", + "unicode-normalization", + "wasm-bindgen", + "zeroize", +] + [[package]] name = "tiny-keccak" version = "2.0.2" @@ -8061,23 +10427,23 @@ dependencies = [ "crypto-bigint", "der 0.7.8", "ecdsa", - "ed25519 2.2.2", - "ed25519-dalek", - "hmac", + "ed25519 2.2.3", + "ed25519-dalek 2.1.0", + "hmac 0.12.1", "k256", - "rand", - "rand_chacha", + "rand 0.8.5", + "rand_chacha 0.3.1", "serde", - "sha2 0.10.7", + "sha2 0.10.8", "tracing", "zeroize", ] [[package]] name = "tokio" -version = "1.32.0" +version = "1.35.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17ed6077ed6cd6c74735e21f37eb16dc3935f96878b1fe961074089cc80893f9" +checksum = "c89b4efa943be685f629b149f53829423f8f5531ea21249408e8e2f8671ec104" dependencies = [ "backtrace", "bytes", @@ -8087,8 +10453,8 @@ dependencies = [ "parking_lot", "pin-project-lite", "signal-hook-registry", - "socket2 0.5.4", - "tokio-macros 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "socket2 0.5.5", + "tokio-macros 2.2.0", "windows-sys 0.48.0", ] @@ -8105,22 +10471,22 @@ dependencies = [ [[package]] name = "tokio-macros" version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e" +source = "git+https://github.com/mystenmark/tokio-madsim-fork.git?rev=e4693500118d5e79ce098ee6dfc2c48f3ef19e45#e4693500118d5e79ce098ee6dfc2c48f3ef19e45" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2 1.0.78", + "quote 1.0.35", + "syn 2.0.48", ] [[package]] name = "tokio-macros" -version = "2.1.0" -source = "git+https://github.com/mystenmark/tokio-madsim-fork.git?rev=e4693500118d5e79ce098ee6dfc2c48f3ef19e45#e4693500118d5e79ce098ee6dfc2c48f3ef19e45" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2 1.0.78", + "quote 1.0.35", + "syn 2.0.48", ] [[package]] @@ -8140,7 +10506,7 @@ version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" dependencies = [ - "rustls 0.21.7", + "rustls 0.21.10", "tokio", ] @@ -8153,22 +10519,22 @@ dependencies = [ "futures-core", "pin-project-lite", "tokio", - "tokio-util 0.7.9", + "tokio-util 0.7.10", ] [[package]] name = "tokio-tungstenite" -version = "0.20.0" +version = "0.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b2dbec703c26b00d74844519606ef15d09a7d6857860f84ad223dec002ddea2" +checksum = "212d5dcb2a1ce06d81107c3d0ffa3121fe974b73f068c8282cb1c32328113b6c" dependencies = [ "futures-util", "log", - "rustls 0.21.7", + "rustls 0.21.10", "tokio", "tokio-rustls 0.24.1", "tungstenite", - "webpki-roots 0.23.1", + "webpki-roots 0.25.3", ] [[package]] @@ -8190,9 +10556,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.9" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d68074620f57a0b21594d9735eb2e98ab38b17f80d3fcb189fca266771ca60d" +checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" dependencies = [ "bytes", "futures-core", @@ -8213,32 +10579,43 @@ dependencies = [ [[package]] name = "toml" -version = "0.7.8" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd79e69d3b627db300ff956027cc6c3798cef26d22526befdfcd12feeb6d2257" +checksum = "a1a195ec8c9da26928f773888e0742ca3ca1040c6cd859c919c9f59c1954ab35" dependencies = [ "serde", "serde_spanned", "toml_datetime", - "toml_edit", + "toml_edit 0.21.0", ] [[package]] name = "toml_datetime" -version = "0.6.3" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" +checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" dependencies = [ "serde", ] [[package]] name = "toml_edit" -version = "0.19.15" +version = "0.20.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70f427fce4d84c72b5b732388bf4a9f4531b53f74e2887e3ecb2481f68f66d81" +dependencies = [ + "indexmap 2.1.0", + "toml_datetime", + "winnow", +] + +[[package]] +name = "toml_edit" +version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +checksum = "d34d383cd00a163b4a5b85053df514d45bc330f6de7737edfe0a93311d1eaa03" dependencies = [ - "indexmap 2.0.0", + "indexmap 2.1.0", "serde", "serde_spanned", "toml_datetime", @@ -8269,7 +10646,7 @@ dependencies = [ "prost-derive 0.11.9", "tokio", "tokio-stream", - "tokio-util 0.7.9", + "tokio-util 0.7.10", "tower", "tower-layer", "tower-service", @@ -8286,7 +10663,7 @@ dependencies = [ "async-stream", "async-trait", "axum", - "base64 0.21.4", + "base64 0.21.7", "bytes", "h2", "http", @@ -8296,7 +10673,7 @@ dependencies = [ "percent-encoding", "pin-project", "prost 0.12.3", - "rustls 0.21.7", + "rustls 0.21.10", "rustls-pemfile", "tokio", "tokio-rustls 0.24.1", @@ -8314,9 +10691,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5bf5e9b9c0f7e0a7c027dcfaba7b2c60816c7049171f679d99ee2ff65d0de8c4" dependencies = [ "prettyplease 0.1.25", - "proc-macro2 1.0.67", + "proc-macro2 1.0.78", "prost-build", - "quote 1.0.33", + "quote 1.0.35", "syn 1.0.109", ] @@ -8345,10 +10722,10 @@ dependencies = [ "indexmap 1.9.3", "pin-project", "pin-project-lite", - "rand", + "rand 0.8.5", "slab", "tokio", - "tokio-util 0.7.9", + "tokio-util 0.7.10", "tower-layer", "tower-service", "tracing", @@ -8360,7 +10737,7 @@ version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f873044bf02dd1e8239e9c1293ea39dad76dc594ec16185d0a1bf31d8dc8d858" dependencies = [ - "async-compression", + "async-compression 0.3.15", "base64 0.13.1", "bitflags 1.3.2", "bytes", @@ -8376,12 +10753,12 @@ dependencies = [ "percent-encoding", "pin-project-lite", "tokio", - "tokio-util 0.7.9", + "tokio-util 0.7.10", "tower", "tower-layer", "tower-service", "tracing", - "uuid 1.4.1", + "uuid 1.6.1", ] [[package]] @@ -8398,11 +10775,10 @@ checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" [[package]] name = "tracing" -version = "0.1.37" +version = "0.1.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" dependencies = [ - "cfg-if", "log", "pin-project-lite", "tracing-attributes", @@ -8411,20 +10787,20 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.26" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2 1.0.78", + "quote 1.0.35", + "syn 2.0.48", ] [[package]] name = "tracing-core" -version = "0.1.31" +version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" dependencies = [ "once_cell", "valuable", @@ -8442,12 +10818,12 @@ dependencies = [ [[package]] name = "tracing-log" -version = "0.1.3" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" dependencies = [ - "lazy_static", "log", + "once_cell", "tracing-core", ] @@ -8465,9 +10841,9 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.3.17" +version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30a651bc37f915e81f087d86e62a18eec5f79550c7faff886f7090b4ea757c77" +checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" dependencies = [ "nu-ansi-term", "serde", @@ -8488,8 +10864,8 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b79e2e9c9ab44c6d7c20d5976961b47e8f49ac199154daa514b77cd1ab536625" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.78", + "quote 1.0.35", "syn 1.0.109", ] @@ -8501,15 +10877,15 @@ checksum = "a7f741b240f1a48843f9b8e0444fb55fb2a4ff67293b50a9179dfd5ea67f8d41" [[package]] name = "try-lock" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "tungstenite" -version = "0.20.0" +version = "0.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e862a1c4128df0112ab625f55cd5c934bcb4312ba80b39ae4b4835a3fd58e649" +checksum = "9e3dac10fd62eaf6617d3a904ae222845979aec67c615d1c842b4002c7666fb9" dependencies = [ "byteorder", "bytes", @@ -8517,12 +10893,13 @@ dependencies = [ "http", "httparse", "log", - "rand", - "rustls 0.21.7", + "rand 0.8.5", + "rustls 0.21.10", "sha1", "thiserror", "url", "utf-8", + "webpki-roots 0.24.0", ] [[package]] @@ -8542,7 +10919,7 @@ dependencies = [ "once_cell", "ouroboros", "prometheus", - "rand", + "rand 0.8.5", "rocksdb", "serde", "sui-macros", @@ -8594,9 +10971,9 @@ dependencies = [ [[package]] name = "unicode-bidi" -version = "0.3.13" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" +checksum = "6f2528f27a9eb2b21e69c95319b30bd0efd85d09c379741b0f78ea1d86be2416" [[package]] name = "unicode-ident" @@ -8637,6 +11014,16 @@ version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" +[[package]] +name = "universal-hash" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f214e8f697e925001e66ec2c6e37a4ef93f0f78c2eed7814394e10c62025b05" +dependencies = [ + "generic-array", + "subtle", +] + [[package]] name = "universal-hash" version = "0.5.1" @@ -8647,6 +11034,15 @@ dependencies = [ "subtle", ] +[[package]] +name = "unreachable" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "382810877fe448991dfc7f0dd6e3ae5d58088fd0ea5e35189655f84e6814fa56" +dependencies = [ + "void", +] + [[package]] name = "unsigned-varint" version = "0.7.2" @@ -8659,11 +11055,27 @@ version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + +[[package]] +name = "uriparse" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0200d0fc04d809396c2ad43f3c95da3582a2556eba8d453c1087f4120ee352ff" +dependencies = [ + "fnv", + "lazy_static", +] + [[package]] name = "url" -version = "2.4.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "143b538f18257fac9cad154828a57c6bf5157e1aa604d4816b5995bf6de87ae5" +checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" dependencies = [ "form_urlencoded", "idna", @@ -8688,18 +11100,18 @@ version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" dependencies = [ - "getrandom", + "getrandom 0.2.12", "serde", ] [[package]] name = "uuid" -version = "1.4.1" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79daa5ed5740825c40b389c5e50312b9c86df53fccd33f281df655642b43869d" +checksum = "5e395fcf16a7a3d8127ec99782007af141946b4795001f876d54fb0d55978560" dependencies = [ - "getrandom", - "rand", + "getrandom 0.2.12", + "rand 0.8.5", ] [[package]] @@ -8717,8 +11129,8 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d44690c645190cfce32f91a1582281654b2338c6073fa250b0949fd25c55b32" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.78", + "quote 1.0.35", "syn 1.0.109", ] @@ -8738,7 +11150,7 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aae2faf80ac463422992abf4de234731279c058aaf33171ca70277c98406b124" dependencies = [ - "quote 1.0.33", + "quote 1.0.35", "syn 1.0.109", ] @@ -8748,32 +11160,68 @@ version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" +[[package]] +name = "vec_map" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" + [[package]] name = "version_check" version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +[[package]] +name = "void" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" + [[package]] name = "voting-verifier" version = "0.1.0" dependencies = [ - "axelar-wasm-std", - "axelar-wasm-std-derive", - "connection-router", + "axelar-wasm-std 0.1.0", + "axelar-wasm-std-derive 0.1.0", + "connection-router 0.1.0", "cosmwasm-schema", "cosmwasm-std", "cosmwasm-storage", "cw-multi-test", - "cw-storage-plus 1.1.0", + "cw-storage-plus 1.2.0", + "either", + "error-stack", + "report 0.1.0", + "rewards 0.1.0", + "schemars", + "serde", + "serde_json", + "service-registry 0.1.0", + "sha3 0.10.8", + "thiserror", +] + +[[package]] +name = "voting-verifier" +version = "0.1.0" +source = "git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f#c0904e1c72c99a174a93b5f6c18b30f52d20b71f" +dependencies = [ + "axelar-wasm-std 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "axelar-wasm-std-derive 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "connection-router 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "cosmwasm-schema", + "cosmwasm-std", + "cosmwasm-storage", + "cw-storage-plus 1.2.0", "either", "error-stack", - "report", - "rewards", + "report 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "rewards 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", "schemars", "serde", "serde_json", - "service-registry", + "service-registry 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", "sha3 0.10.8", "thiserror", ] @@ -8806,6 +11254,12 @@ dependencies = [ "try-lock", ] +[[package]] +name = "wasi" +version = "0.9.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" + [[package]] name = "wasi" version = "0.11.0+wasi-snapshot-preview1" @@ -8814,9 +11268,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.87" +version = "0.2.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342" +checksum = "b1223296a201415c7fad14792dbefaace9bd52b62d33453ade1c5b5f07555406" dependencies = [ "cfg-if", "wasm-bindgen-macro", @@ -8824,24 +11278,24 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.87" +version = "0.2.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd" +checksum = "fcdc935b63408d58a32f8cc9738a0bffd8f05cc7c002086c6ef20b7312ad9dcd" dependencies = [ "bumpalo", "log", "once_cell", - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2 1.0.78", + "quote 1.0.35", + "syn 2.0.48", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.37" +version = "0.4.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c02dbc21516f9f1f04f187958890d7e6026df8d16540b7ad9492bc34a67cea03" +checksum = "bde2032aeb86bdfaecc8b261eef3cba735cc426c1f3a3416d1e0791be95fc461" dependencies = [ "cfg-if", "js-sys", @@ -8851,38 +11305,38 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.87" +version = "0.2.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d" +checksum = "3e4c238561b2d428924c49815533a8b9121c664599558a5d9ec51f8a1740a999" dependencies = [ - "quote 1.0.33", + "quote 1.0.35", "wasm-bindgen-macro-support", ] [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.87" +version = "0.2.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b" +checksum = "bae1abb6806dc1ad9e560ed242107c0f6c84335f1749dd4e8ddb012ebd5e25a7" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2 1.0.78", + "quote 1.0.35", + "syn 2.0.48", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.87" +version = "0.2.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1" +checksum = "4d91413b1c31d7539ba5ef2451af3f0b833a005eb27a631cec32bc0635a8602b" [[package]] name = "web-sys" -version = "0.3.64" +version = "0.3.67" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b85cbef8c220a6abc02aefd892dfc0fc23afb1c6a426316ec33253a3877249b" +checksum = "58cd2333b6e0be7a39605f0e255892fd7418a682d8da8fe042fe25128794d2ed" dependencies = [ "js-sys", "wasm-bindgen", @@ -8894,8 +11348,8 @@ version = "0.21.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8e38c0608262c46d4a56202ebabdeb094cef7e560ca7a226c6bf055188aa4ea" dependencies = [ - "ring", - "untrusted", + "ring 0.16.20", + "untrusted 0.7.1", ] [[package]] @@ -8909,18 +11363,18 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "0.23.1" +version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b03058f88386e5ff5310d9111d53f48b17d732b401aeb83a8d5190f2ac459338" +checksum = "b291546d5d9d1eab74f069c77749f2cb8504a12caa20f0f2de93ddbf6f411888" dependencies = [ - "rustls-webpki 0.100.3", + "rustls-webpki", ] [[package]] name = "webpki-roots" -version = "0.25.2" +version = "0.25.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14247bb57be4f377dfb94c72830b8ce8fc6beac03cf4bf7b9732eadd414123fc" +checksum = "1778a42e8b3b90bff8d0f5032bf22250792889a5cdc752aa0020c84abe3aaf10" [[package]] name = "which" @@ -8982,21 +11436,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] -name = "windows" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" -dependencies = [ - "windows-targets 0.48.5", -] - -[[package]] -name = "windows-sys" -version = "0.45.0" +name = "windows-core" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" dependencies = [ - "windows-targets 0.42.2", + "windows-targets 0.52.0", ] [[package]] @@ -9009,18 +11454,12 @@ dependencies = [ ] [[package]] -name = "windows-targets" -version = "0.42.2" +name = "windows-sys" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows_aarch64_gnullvm 0.42.2", - "windows_aarch64_msvc 0.42.2", - "windows_i686_gnu 0.42.2", - "windows_i686_msvc 0.42.2", - "windows_x86_64_gnu 0.42.2", - "windows_x86_64_gnullvm 0.42.2", - "windows_x86_64_msvc 0.42.2", + "windows-targets 0.52.0", ] [[package]] @@ -9039,10 +11478,19 @@ dependencies = [ ] [[package]] -name = "windows_aarch64_gnullvm" -version = "0.42.2" +name = "windows-targets" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" +checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd" +dependencies = [ + "windows_aarch64_gnullvm 0.52.0", + "windows_aarch64_msvc 0.52.0", + "windows_i686_gnu 0.52.0", + "windows_i686_msvc 0.52.0", + "windows_x86_64_gnu 0.52.0", + "windows_x86_64_gnullvm 0.52.0", + "windows_x86_64_msvc 0.52.0", +] [[package]] name = "windows_aarch64_gnullvm" @@ -9051,10 +11499,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" [[package]] -name = "windows_aarch64_msvc" -version = "0.42.2" +name = "windows_aarch64_gnullvm" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" +checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea" [[package]] name = "windows_aarch64_msvc" @@ -9063,10 +11511,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" [[package]] -name = "windows_i686_gnu" -version = "0.42.2" +name = "windows_aarch64_msvc" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" +checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef" [[package]] name = "windows_i686_gnu" @@ -9075,10 +11523,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" [[package]] -name = "windows_i686_msvc" -version = "0.42.2" +name = "windows_i686_gnu" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" +checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313" [[package]] name = "windows_i686_msvc" @@ -9087,10 +11535,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" [[package]] -name = "windows_x86_64_gnu" -version = "0.42.2" +name = "windows_i686_msvc" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" +checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a" [[package]] name = "windows_x86_64_gnu" @@ -9099,10 +11547,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" [[package]] -name = "windows_x86_64_gnullvm" -version = "0.42.2" +name = "windows_x86_64_gnu" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" +checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd" [[package]] name = "windows_x86_64_gnullvm" @@ -9111,10 +11559,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" [[package]] -name = "windows_x86_64_msvc" -version = "0.42.2" +name = "windows_x86_64_gnullvm" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" +checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e" [[package]] name = "windows_x86_64_msvc" @@ -9122,11 +11570,17 @@ version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" + [[package]] name = "winnow" -version = "0.5.15" +version = "0.5.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c2e3184b9c4e92ad5167ca73039d0c42476302ab603e2fec4487511f38ccefc" +checksum = "b7cf47b659b318dccbd69cc4797a39ae128f533dce7902a1096044d1967b9c16" dependencies = [ "memchr", ] @@ -9223,11 +11677,31 @@ dependencies = [ "time", ] +[[package]] +name = "zerocopy" +version = "0.7.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6" +dependencies = [ + "proc-macro2 1.0.78", + "quote 1.0.35", + "syn 2.0.48", +] + [[package]] name = "zeroize" -version = "1.6.0" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9" +checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" dependencies = [ "zeroize_derive", ] @@ -9238,9 +11712,9 @@ version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2 1.0.78", + "quote 1.0.35", + "syn 2.0.48", ] [[package]] @@ -9249,14 +11723,14 @@ version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "760394e246e4c28189f19d488c058bf16f564016aefac5d32bb1f3b51d5e9261" dependencies = [ - "aes", + "aes 0.8.3", "byteorder", "bzip2", "constant_time_eq 0.1.5", "crc32fast", "crossbeam-utils", "flate2", - "hmac", + "hmac 0.12.1", "pbkdf2 0.11.0", "sha1", "time", @@ -9284,11 +11758,10 @@ dependencies = [ [[package]] name = "zstd-sys" -version = "2.0.8+zstd.1.5.5" +version = "2.0.9+zstd.1.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5556e6ee25d32df2586c098bbfa278803692a20d0ab9565e049480d52707ec8c" +checksum = "9e16efa8a874a0481a574084d34cc26fdb3b99627480f785888deb6386506656" dependencies = [ "cc", - "libc", "pkg-config", ] diff --git a/Cargo.toml b/Cargo.toml index b0c180b50..0b66b6bcb 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -19,7 +19,6 @@ multisig-prover = { version = "^0.1.0", path = "contracts/multisig-prover" } service-registry = { version = "^0.1.0", path = "contracts/service-registry" } aggregate-verifier = { version = "^0.1.0", path = "contracts/aggregate-verifier" } gateway = { version = "^0.1.0", path = "contracts/gateway" } -gateway-api = { version = "^0.1.0", path = "packages/gateway-api" } connection-router-api = { version = "^0.1.0", path = "packages/connection-router-api" } report = { version = "^0.1.0", path = "packages/report" } rewards = { version = "^0.1.0", path = "contracts/rewards" } @@ -38,3 +37,17 @@ debug-assertions = false codegen-units = 1 incremental = false overflow-checks = true + +[patch.crates-io] +# aes-gcm-siv 0.10.3 and curve25519-dalek 3.x pin zeroize to <1.4 +# which conflicts with other dependencies requiring zeroize ^1.5. +# We’re patching both crates to unpin zeroize. +# +# For aes-gcm-siv we’re using the same revision Solana uses in +# an (as of now) unreleased commit, see +# https://github.com/solana-labs/solana/commit/01f1bf27994d9813fadfcd134befd3a449aaa0bd +# +# For curve25519-dalek we’re using commit from a PR, see +# https://github.com/dalek-cryptography/curve25519-dalek/pull/606 +aes-gcm-siv = { git = "https://github.com/RustCrypto/AEADs", rev = "6105d7a5591aefa646a95d12b5e8d3f55a9214ef" } +curve25519-dalek = { git = "https://github.com/dalek-cryptography/curve25519-dalek", rev = "8274d5cbb6fc3f38cdc742b4798173895cd2a290" } diff --git a/ampd/Cargo.lock b/ampd/Cargo.lock deleted file mode 100644 index b861b75a5..000000000 --- a/ampd/Cargo.lock +++ /dev/null @@ -1,5672 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[package]] -name = "Inflector" -version = "0.11.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3" -dependencies = [ - "lazy_static", - "regex", -] - -[[package]] -name = "addr2line" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4fa78e18c64fce05e902adecd7a5eed15a5e0a3439f7b0e169f0252214865e3" -dependencies = [ - "gimli", -] - -[[package]] -name = "adler" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" - -[[package]] -name = "aes" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac1f845298e95f983ff1944b728ae08b8cebab80d684f0a832ed0fc74dfa27e2" -dependencies = [ - "cfg-if", - "cipher", - "cpufeatures", -] - -[[package]] -name = "ahash" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" -dependencies = [ - "getrandom", - "once_cell", - "version_check", -] - -[[package]] -name = "aho-corasick" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43f6cb1bf222025340178f382c426f13757b2960e89779dfcb319c32542a5a41" -dependencies = [ - "memchr", -] - -[[package]] -name = "ampd" -version = "0.1.0" -dependencies = [ - "async-trait", - "axelar-wasm-std", - "base64 0.21.2", - "clap", - "config", - "connection-router", - "cosmos-sdk-proto 0.16.0", - "cosmrs", - "cosmwasm-std", - "deref-derive", - "ecdsa 0.16.7", - "enum-display-derive", - "error-stack", - "ethers", - "futures", - "hex", - "humantime-serde", - "k256 0.13.1", - "mockall", - "multisig", - "prost", - "rand", - "random-string", - "serde", - "serde_json", - "serde_with", - "tendermint 0.33.0", - "tendermint-rpc", - "thiserror", - "tokio", - "tokio-stream", - "tokio-util", - "toml 0.5.11", - "tonic", - "tonic-build", - "tracing", - "tracing-core", - "tracing-subscriber", - "url", - "valuable", - "voting-verifier", -] - -[[package]] -name = "android-tzdata" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" - -[[package]] -name = "android_system_properties" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" -dependencies = [ - "libc", -] - -[[package]] -name = "anstream" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ca84f3628370c59db74ee214b3263d58f9aadd9b4fe7e711fd87dc452b7f163" -dependencies = [ - "anstyle", - "anstyle-parse", - "anstyle-query", - "anstyle-wincon", - "colorchoice", - "is-terminal", - "utf8parse", -] - -[[package]] -name = "anstyle" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41ed9a86bf92ae6580e0a31281f65a1b1d867c0cc68d5346e2ae128dddfa6a7d" - -[[package]] -name = "anstyle-parse" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e765fd216e48e067936442276d1d57399e37bce53c264d6fefbe298080cb57ee" -dependencies = [ - "utf8parse", -] - -[[package]] -name = "anstyle-query" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b" -dependencies = [ - "windows-sys 0.48.0", -] - -[[package]] -name = "anstyle-wincon" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "180abfa45703aebe0093f79badacc01b8fd4ea2e35118747e5811127f926e188" -dependencies = [ - "anstyle", - "windows-sys 0.48.0", -] - -[[package]] -name = "anyhow" -version = "1.0.68" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2cb2f989d18dd141ab8ae82f64d1a8cdd37e0840f73a406896cf5e99502fab61" - -[[package]] -name = "arrayvec" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6" - -[[package]] -name = "ascii-canvas" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8824ecca2e851cec16968d54a01dd372ef8f95b244fb84b84e70128be347c3c6" -dependencies = [ - "term", -] - -[[package]] -name = "async-stream" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dad5c83079eae9969be7fadefe640a1c566901f05ff91ab221de4b6f68d9507e" -dependencies = [ - "async-stream-impl", - "futures-core", -] - -[[package]] -name = "async-stream-impl" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10f203db73a71dfa2fb6dd22763990fa26f3d2625a6da2da900d23b87d26be27" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.107", -] - -[[package]] -name = "async-trait" -version = "0.1.72" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc6dde6e4ed435a4c1ee4e73592f5ba9da2151af10076cc04858746af9352d09" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.27", -] - -[[package]] -name = "async_io_stream" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6d7b9decdf35d8908a7e3ef02f64c5e9b1695e230154c0e8de3969142d9b94c" -dependencies = [ - "futures", - "pharos", - "rustc_version", -] - -[[package]] -name = "atty" -version = "0.2.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" -dependencies = [ - "hermit-abi 0.1.19", - "libc", - "winapi", -] - -[[package]] -name = "auto_impl" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fee3da8ef1276b0bee5dd1c7258010d8fffd31801447323115a25560e1327b89" -dependencies = [ - "proc-macro-error", - "proc-macro2", - "quote", - "syn 1.0.107", -] - -[[package]] -name = "autocfg" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" - -[[package]] -name = "axelar-wasm-std" -version = "0.1.0" -source = "git+https://github.com/axelarnetwork/axelar-amplifier.git#a314da5d2d40702d5f20ef9ab0e697a3b88f48b3" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cosmwasm-storage", - "cw-storage-plus 1.1.0", - "flagset", - "num-traits", - "schemars", - "serde", - "serde_json", - "thiserror", -] - -[[package]] -name = "axum" -version = "0.6.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13d8068b6ccb8b34db9de397c7043f91db8b4c66414952c6db944f238c4d3db3" -dependencies = [ - "async-trait", - "axum-core", - "bitflags", - "bytes", - "futures-util", - "http", - "http-body", - "hyper", - "itoa", - "matchit", - "memchr", - "mime", - "percent-encoding", - "pin-project-lite", - "rustversion", - "serde", - "sync_wrapper", - "tower", - "tower-layer", - "tower-service", -] - -[[package]] -name = "axum-core" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2f958c80c248b34b9a877a643811be8dbca03ca5ba827f2b63baf3a81e5fc4e" -dependencies = [ - "async-trait", - "bytes", - "futures-util", - "http", - "http-body", - "mime", - "rustversion", - "tower-layer", - "tower-service", -] - -[[package]] -name = "backtrace" -version = "0.3.68" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4319208da049c43661739c5fade2ba182f09d1dc2299b32298d3a31692b17e12" -dependencies = [ - "addr2line", - "cc", - "cfg-if", - "libc", - "miniz_oxide", - "object", - "rustc-demangle", -] - -[[package]] -name = "base16ct" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "349a06037c7bf932dd7e7d1f653678b2038b9ad46a74102f1fc7bd7872678cce" - -[[package]] -name = "base16ct" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" - -[[package]] -name = "base64" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" - -[[package]] -name = "base64" -version = "0.21.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "604178f6c5c21f02dc555784810edfb88d34ac2c73b2eae109655649ee73ce3d" - -[[package]] -name = "base64ct" -version = "1.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b645a089122eccb6111b4f81cbc1a49f5900ac4666bb93ac027feaecf15607bf" - -[[package]] -name = "bech32" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dabbe35f96fb9507f7330793dc490461b2962659ac5d427181e451a623751d1" - -[[package]] -name = "bincode" -version = "1.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" -dependencies = [ - "serde", -] - -[[package]] -name = "bip32" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e40748d60a3296653e45e87e64c6989aebfad607bccce59cc4156c5d81b2f70" -dependencies = [ - "bs58", - "hmac", - "k256 0.13.1", - "once_cell", - "pbkdf2 0.12.1", - "rand_core 0.6.4", - "ripemd", - "sha2 0.10.6", - "subtle", - "zeroize", -] - -[[package]] -name = "bit-set" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" -dependencies = [ - "bit-vec", -] - -[[package]] -name = "bit-vec" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" - -[[package]] -name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - -[[package]] -name = "bitvec" -version = "0.17.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41262f11d771fd4a61aa3ce019fca363b4b6c282fca9da2a31186d3965a47a5c" -dependencies = [ - "either", - "radium 0.3.0", -] - -[[package]] -name = "bitvec" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" -dependencies = [ - "funty", - "radium 0.7.0", - "tap", - "wyz", -] - -[[package]] -name = "block-buffer" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" -dependencies = [ - "generic-array", -] - -[[package]] -name = "block-buffer" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e" -dependencies = [ - "generic-array", -] - -[[package]] -name = "bnum" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "845141a4fade3f790628b7daaaa298a25b204fb28907eb54febe5142db6ce653" - -[[package]] -name = "bs58" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" -dependencies = [ - "sha2 0.9.9", -] - -[[package]] -name = "bumpalo" -version = "3.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535" - -[[package]] -name = "byte-slice-cast" -version = "1.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3ac9f8b63eca6fd385229b3675f6cc0dc5c8a5c8a54a59d4f52ffd670d87b0c" - -[[package]] -name = "byteorder" -version = "1.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" - -[[package]] -name = "bytes" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" -dependencies = [ - "serde", -] - -[[package]] -name = "bzip2" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdb116a6ef3f6c3698828873ad02c3014b3c85cadb88496095628e3ef1e347f8" -dependencies = [ - "bzip2-sys", - "libc", -] - -[[package]] -name = "bzip2-sys" -version = "0.1.11+1.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc" -dependencies = [ - "cc", - "libc", - "pkg-config", -] - -[[package]] -name = "camino" -version = "1.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c59e92b5a388f549b863a7bea62612c09f24c8393560709a54558a9abdfb3b9c" -dependencies = [ - "serde", -] - -[[package]] -name = "cargo-platform" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2cfa25e60aea747ec7e1124f238816749faa93759c6ff5b31f1ccdda137f4479" -dependencies = [ - "serde", -] - -[[package]] -name = "cargo_metadata" -version = "0.15.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eee4243f1f26fc7a42710e7439c149e2b10b05472f88090acce52632f231a73a" -dependencies = [ - "camino", - "cargo-platform", - "semver", - "serde", - "serde_json", - "thiserror", -] - -[[package]] -name = "cc" -version = "1.0.79" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" -dependencies = [ - "jobserver", -] - -[[package]] -name = "cfg-if" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" - -[[package]] -name = "chrono" -version = "0.4.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec837a71355b28f6556dbd569b37b3f363091c0bd4b2e735674521b4c5fd9bc5" -dependencies = [ - "android-tzdata", - "iana-time-zone", - "num-traits", - "serde", - "winapi", -] - -[[package]] -name = "cipher" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" -dependencies = [ - "crypto-common", - "inout", -] - -[[package]] -name = "clap" -version = "4.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34d21f9bf1b425d2968943631ec91202fe5e837264063503708b83013f8fc938" -dependencies = [ - "clap_builder", - "clap_derive", - "once_cell", -] - -[[package]] -name = "clap_builder" -version = "4.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "914c8c79fb560f238ef6429439a30023c862f7a28e688c58f7203f12b29970bd" -dependencies = [ - "anstream", - "anstyle", - "bitflags", - "clap_lex", - "once_cell", - "strsim", -] - -[[package]] -name = "clap_derive" -version = "4.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9644cd56d6b87dbe899ef8b053e331c0637664e9e21a33dfcdc36093f5c5c4" -dependencies = [ - "heck", - "proc-macro2", - "quote", - "syn 2.0.27", -] - -[[package]] -name = "clap_lex" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a2dd5a6fe8c6e3502f568a6353e5273bbb15193ad9a89e457b9970798efbea1" - -[[package]] -name = "coins-bip32" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b30a84aab436fcb256a2ab3c80663d8aec686e6bae12827bb05fef3e1e439c9f" -dependencies = [ - "bincode", - "bs58", - "coins-core", - "digest 0.10.6", - "getrandom", - "hmac", - "k256 0.13.1", - "lazy_static", - "serde", - "sha2 0.10.6", - "thiserror", -] - -[[package]] -name = "coins-bip39" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84f4d04ee18e58356accd644896aeb2094ddeafb6a713e056cef0c0a8e468c15" -dependencies = [ - "bitvec 0.17.4", - "coins-bip32", - "getrandom", - "hmac", - "once_cell", - "pbkdf2 0.12.1", - "rand", - "sha2 0.10.6", - "thiserror", -] - -[[package]] -name = "coins-core" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b949a1c63fb7eb591eb7ba438746326aedf0ae843e51ec92ba6bec5bb382c4f" -dependencies = [ - "base64 0.21.2", - "bech32", - "bs58", - "digest 0.10.6", - "generic-array", - "hex", - "ripemd", - "serde", - "serde_derive", - "sha2 0.10.6", - "sha3", - "thiserror", -] - -[[package]] -name = "colorchoice" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" - -[[package]] -name = "config" -version = "0.13.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d379af7f68bfc21714c6c7dea883544201741d2ce8274bb12fa54f89507f52a7" -dependencies = [ - "async-trait", - "json5", - "lazy_static", - "nom", - "pathdiff", - "ron", - "rust-ini", - "serde", - "serde_json", - "toml 0.5.11", - "yaml-rust", -] - -[[package]] -name = "connection-router" -version = "0.1.0" -source = "git+https://github.com/axelarnetwork/axelar-amplifier.git#a314da5d2d40702d5f20ef9ab0e697a3b88f48b3" -dependencies = [ - "axelar-wasm-std", - "cosmwasm-schema", - "cosmwasm-std", - "cosmwasm-storage", - "cw-storage-plus 1.1.0", - "cw2", - "flagset", - "schemars", - "serde", - "serde_json", - "thiserror", -] - -[[package]] -name = "const-oid" -version = "0.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "520fbf3c07483f94e3e3ca9d0cfd913d7718ef2483d2cfd91c0d9e91474ab913" - -[[package]] -name = "constant_time_eq" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" - -[[package]] -name = "core-foundation" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "core-foundation-sys" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" - -[[package]] -name = "cosmos-sdk-proto" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4776e787b24d9568dd61d3237eeb4eb321d622fb881b858c7b82806420e87d4" -dependencies = [ - "prost", - "prost-types", - "tendermint-proto 0.27.0", - "tonic", -] - -[[package]] -name = "cosmos-sdk-proto" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73c9d2043a9e617b0d602fbc0a0ecd621568edbf3a9774890a6d562389bd8e1c" -dependencies = [ - "prost", - "prost-types", - "tendermint-proto 0.32.0", -] - -[[package]] -name = "cosmrs" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af13955d6f356272e6def9ff5e2450a7650df536d8934f47052a20c76513d2f6" -dependencies = [ - "bip32", - "cosmos-sdk-proto 0.19.0", - "ecdsa 0.16.7", - "eyre", - "getrandom", - "k256 0.13.1", - "rand_core 0.6.4", - "serde", - "serde_json", - "subtle-encoding", - "tendermint 0.32.0", - "thiserror", -] - -[[package]] -name = "cosmwasm-crypto" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d076a08ec01ed23c4396aca98ec73a38fa1fee5f310465add52b4108181c7a8" -dependencies = [ - "digest 0.10.6", - "ed25519-zebra", - "k256 0.11.6", - "rand_core 0.6.4", - "thiserror", -] - -[[package]] -name = "cosmwasm-derive" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dec361f3c09d7b41221948fc17be9b3c96cb58e55a02f82da36f888a651f2584" -dependencies = [ - "syn 1.0.107", -] - -[[package]] -name = "cosmwasm-schema" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb6b2fb76758ef59cddc77f2e2ae91c22f77da49037e9f182e9c2833f0e959b1" -dependencies = [ - "cosmwasm-schema-derive", - "schemars", - "serde", - "serde_json", - "thiserror", -] - -[[package]] -name = "cosmwasm-schema-derive" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bfa39422f0d9f1c9a6fd3711573258495314dfa3aae738ea825ecd9964bc659" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.107", -] - -[[package]] -name = "cosmwasm-std" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f6dc2ee23313add5ecacc3ccac217b9967ad9d2d11bd56e5da6aa65a9da6138" -dependencies = [ - "base64 0.13.1", - "bnum", - "cosmwasm-crypto", - "cosmwasm-derive", - "derivative", - "forward_ref", - "hex", - "schemars", - "serde", - "serde-json-wasm", - "sha2 0.10.6", - "thiserror", -] - -[[package]] -name = "cosmwasm-storage" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18b4c99c6479e554ef1516950f1fa3d88bd7d0a8fc2367321c07ca0a33997dfc" -dependencies = [ - "cosmwasm-std", - "serde", -] - -[[package]] -name = "cpufeatures" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320" -dependencies = [ - "libc", -] - -[[package]] -name = "crc32fast" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "crossbeam-channel" -version = "0.5.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200" -dependencies = [ - "cfg-if", - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-deque" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef" -dependencies = [ - "cfg-if", - "crossbeam-epoch", - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-epoch" -version = "0.9.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7" -dependencies = [ - "autocfg", - "cfg-if", - "crossbeam-utils", - "memoffset", - "scopeguard", -] - -[[package]] -name = "crossbeam-utils" -version = "0.8.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "crunchy" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" - -[[package]] -name = "crypto-bigint" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef2b4b23cddf68b89b8f8069890e8c270d54e2d5fe1b143820234805e4cb17ef" -dependencies = [ - "generic-array", - "rand_core 0.6.4", - "subtle", - "zeroize", -] - -[[package]] -name = "crypto-bigint" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf4c2f4e1afd912bc40bfd6fed5d9dc1f288e0ba01bfcc835cc5bc3eb13efe15" -dependencies = [ - "generic-array", - "rand_core 0.6.4", - "subtle", - "zeroize", -] - -[[package]] -name = "crypto-common" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" -dependencies = [ - "generic-array", - "typenum", -] - -[[package]] -name = "ct-logs" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1a816186fa68d9e426e3cb4ae4dff1fcd8e4a2c34b781bf7a822574a0d0aac8" -dependencies = [ - "sct 0.6.1", -] - -[[package]] -name = "ctr" -version = "0.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" -dependencies = [ - "cipher", -] - -[[package]] -name = "curve25519-dalek" -version = "3.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b9fdf9972b2bd6af2d913799d9ebc165ea4d2e65878e329d9c6b372c4491b61" -dependencies = [ - "byteorder", - "digest 0.9.0", - "rand_core 0.5.1", - "subtle", - "zeroize", -] - -[[package]] -name = "curve25519-dalek-ng" -version = "4.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c359b7249347e46fb28804470d071c921156ad62b3eef5d34e2ba867533dec8" -dependencies = [ - "byteorder", - "digest 0.9.0", - "rand_core 0.6.4", - "subtle-ng", - "zeroize", -] - -[[package]] -name = "cw-storage-plus" -version = "0.15.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc6cf70ef7686e2da9ad7b067c5942cd3e88dd9453f7af42f54557f8af300fb0" -dependencies = [ - "cosmwasm-std", - "schemars", - "serde", -] - -[[package]] -name = "cw-storage-plus" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f0e92a069d62067f3472c62e30adedb4cab1754725c0f2a682b3128d2bf3c79" -dependencies = [ - "cosmwasm-std", - "schemars", - "serde", -] - -[[package]] -name = "cw0" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ae676b6cced78a3d38ad4b01ab4ed66fc78ac191c3c0d6bfd5372cb2efd473b" -dependencies = [ - "cosmwasm-std", - "schemars", - "serde", - "thiserror", -] - -[[package]] -name = "cw2" -version = "0.15.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5abb8ecea72e09afff830252963cb60faf945ce6cef2c20a43814516082653da" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cw-storage-plus 0.15.1", - "schemars", - "serde", -] - -[[package]] -name = "darling" -version = "0.20.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0209d94da627ab5605dcccf08bb18afa5009cfbef48d8a8b7d7bdbc79be25c5e" -dependencies = [ - "darling_core", - "darling_macro", -] - -[[package]] -name = "darling_core" -version = "0.20.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "177e3443818124b357d8e76f53be906d60937f0d3a90773a664fa63fa253e621" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim", - "syn 2.0.27", -] - -[[package]] -name = "darling_macro" -version = "0.20.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "836a9bbc7ad63342d6d6e7b815ccab164bc77a2d95d84bc3117a8c0d5c98e2d5" -dependencies = [ - "darling_core", - "quote", - "syn 2.0.27", -] - -[[package]] -name = "data-encoding" -version = "2.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2e66c9d817f1720209181c316d28635c050fa304f9c79e47a520882661b7308" - -[[package]] -name = "der" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1a467a65c5e759bce6e65eaf91cc29f466cdc57cb65777bd646872a8a1fd4de" -dependencies = [ - "const-oid", - "zeroize", -] - -[[package]] -name = "der" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05e58dffcdcc8ee7b22f0c1f71a69243d7c2d9ad87b5a14361f2424a1565c219" -dependencies = [ - "const-oid", - "zeroize", -] - -[[package]] -name = "deref-derive" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4255bb7dd538590188bd0aea52e48bd699b19bd90b0d069ec2ced8461fe23273" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.107", -] - -[[package]] -name = "derivative" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.107", -] - -[[package]] -name = "derive_more" -version = "0.99.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.107", -] - -[[package]] -name = "diff" -version = "0.1.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8" - -[[package]] -name = "difflib" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6184e33543162437515c2e2b48714794e37845ec9851711914eec9d308f6ebe8" - -[[package]] -name = "digest" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" -dependencies = [ - "generic-array", -] - -[[package]] -name = "digest" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f" -dependencies = [ - "block-buffer 0.10.3", - "const-oid", - "crypto-common", - "subtle", -] - -[[package]] -name = "dirs-next" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" -dependencies = [ - "cfg-if", - "dirs-sys-next", -] - -[[package]] -name = "dirs-sys-next" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" -dependencies = [ - "libc", - "redox_users", - "winapi", -] - -[[package]] -name = "dlv-list" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0688c2a7f92e427f44895cd63841bff7b29f8d7a1648b9e7e07a4a365b2e1257" - -[[package]] -name = "downcast" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1435fa1053d8b2fbbe9be7e97eca7f33d37b28409959813daefc1446a14247f1" - -[[package]] -name = "dunce" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b" - -[[package]] -name = "dyn-clone" -version = "1.0.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9b0705efd4599c15a38151f4721f7bc388306f61084d3bfd50bd07fbca5cb60" - -[[package]] -name = "ecdsa" -version = "0.14.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "413301934810f597c1d19ca71c8710e99a3f1ba28a0d2ebc01551a2daeea3c5c" -dependencies = [ - "der 0.6.1", - "elliptic-curve 0.12.3", - "rfc6979 0.3.1", - "signature 1.6.4", -] - -[[package]] -name = "ecdsa" -version = "0.16.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0997c976637b606099b9985693efa3581e84e41f5c11ba5255f88711058ad428" -dependencies = [ - "der 0.7.5", - "digest 0.10.6", - "elliptic-curve 0.13.4", - "rfc6979 0.4.0", - "signature 2.1.0", - "spki 0.7.2", -] - -[[package]] -name = "ed25519" -version = "2.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fb04eee5d9d907f29e80ee6b0e78f7e2c82342c63e3580d8c4f69d9d5aad963" -dependencies = [ - "pkcs8 0.10.2", - "signature 2.1.0", -] - -[[package]] -name = "ed25519-consensus" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c8465edc8ee7436ffea81d21a019b16676ee3db267aa8d5a8d729581ecf998b" -dependencies = [ - "curve25519-dalek-ng", - "hex", - "rand_core 0.6.4", - "sha2 0.9.9", - "zeroize", -] - -[[package]] -name = "ed25519-zebra" -version = "3.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c24f403d068ad0b359e577a77f92392118be3f3c927538f2bb544a5ecd828c6" -dependencies = [ - "curve25519-dalek", - "hashbrown 0.12.3", - "hex", - "rand_core 0.6.4", - "serde", - "sha2 0.9.9", - "zeroize", -] - -[[package]] -name = "either" -version = "1.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91" - -[[package]] -name = "elliptic-curve" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7bb888ab5300a19b8e5bceef25ac745ad065f3c9f7efc6de1b91958110891d3" -dependencies = [ - "base16ct 0.1.1", - "crypto-bigint 0.4.9", - "der 0.6.1", - "digest 0.10.6", - "ff 0.12.1", - "generic-array", - "group 0.12.1", - "pkcs8 0.9.0", - "rand_core 0.6.4", - "sec1 0.3.0", - "subtle", - "zeroize", -] - -[[package]] -name = "elliptic-curve" -version = "0.13.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75c71eaa367f2e5d556414a8eea812bc62985c879748d6403edabd9cb03f16e7" -dependencies = [ - "base16ct 0.2.0", - "crypto-bigint 0.5.2", - "digest 0.10.6", - "ff 0.13.0", - "generic-array", - "group 0.13.0", - "pkcs8 0.10.2", - "rand_core 0.6.4", - "sec1 0.7.1", - "subtle", - "zeroize", -] - -[[package]] -name = "ena" -version = "0.14.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c533630cf40e9caa44bd91aadc88a75d75a4c3a12b4cfde353cbed41daa1e1f1" -dependencies = [ - "log", -] - -[[package]] -name = "encoding_rs" -version = "0.8.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071a31f4ee85403370b58aca746f01041ede6f0da2730960ad001edc2b71b394" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "enr" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf56acd72bb22d2824e66ae8e9e5ada4d0de17a69c7fd35569dde2ada8ec9116" -dependencies = [ - "base64 0.13.1", - "bytes", - "hex", - "k256 0.13.1", - "log", - "rand", - "rlp", - "serde", - "sha3", - "zeroize", -] - -[[package]] -name = "enum-display-derive" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f16ef37b2a9b242295d61a154ee91ae884afff6b8b933b486b12481cc58310ca" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.107", -] - -[[package]] -name = "equivalent" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" - -[[package]] -name = "errno" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a" -dependencies = [ - "errno-dragonfly", - "libc", - "windows-sys 0.48.0", -] - -[[package]] -name = "errno-dragonfly" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" -dependencies = [ - "cc", - "libc", -] - -[[package]] -name = "error-stack" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "859d224e04b2d93d974c08e375dac9b8d1a513846e44c6666450a57b1ed963f9" -dependencies = [ - "anyhow", - "eyre", - "owo-colors", - "rustc_version", -] - -[[package]] -name = "eth-keystore" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fda3bf123be441da5260717e0661c25a2fd9cb2b2c1d20bf2e05580047158ab" -dependencies = [ - "aes", - "ctr", - "digest 0.10.6", - "hex", - "hmac", - "pbkdf2 0.11.0", - "rand", - "scrypt", - "serde", - "serde_json", - "sha2 0.10.6", - "sha3", - "thiserror", - "uuid", -] - -[[package]] -name = "ethabi" -version = "18.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7413c5f74cc903ea37386a8965a936cbeb334bd270862fdece542c1b2dcbc898" -dependencies = [ - "ethereum-types", - "hex", - "once_cell", - "regex", - "serde", - "serde_json", - "sha3", - "thiserror", - "uint", -] - -[[package]] -name = "ethbloom" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c22d4b5885b6aa2fe5e8b9329fb8d232bf739e434e6b87347c63bdd00c120f60" -dependencies = [ - "crunchy", - "fixed-hash", - "impl-codec", - "impl-rlp", - "impl-serde", - "scale-info", - "tiny-keccak", -] - -[[package]] -name = "ethereum-types" -version = "0.14.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02d215cbf040552efcbe99a38372fe80ab9d00268e20012b79fcd0f073edd8ee" -dependencies = [ - "ethbloom", - "fixed-hash", - "impl-codec", - "impl-rlp", - "impl-serde", - "primitive-types", - "scale-info", - "uint", -] - -[[package]] -name = "ethers" -version = "2.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96b4026b97da8281276744741fac7eb385da905f6093c583331fa2953fdd4253" -dependencies = [ - "ethers-addressbook", - "ethers-contract", - "ethers-core", - "ethers-etherscan", - "ethers-middleware", - "ethers-providers", - "ethers-signers", - "ethers-solc", -] - -[[package]] -name = "ethers-addressbook" -version = "2.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edcb6ffefc230d8c42874c51b28dc11dbb8de50b27a8fdf92648439d6baa68dc" -dependencies = [ - "ethers-core", - "once_cell", - "serde", - "serde_json", -] - -[[package]] -name = "ethers-contract" -version = "2.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d4719a44c3d37ab07c6dea99ab174068d8c35e441b60b6c20ce4e48357273e8" -dependencies = [ - "ethers-contract-abigen", - "ethers-contract-derive", - "ethers-core", - "ethers-providers", - "ethers-signers", - "futures-util", - "hex", - "once_cell", - "pin-project", - "serde", - "serde_json", - "thiserror", -] - -[[package]] -name = "ethers-contract-abigen" -version = "2.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "155ea1b84d169d231317ed86e307af6f2bed6b40dd17e5e94bc84da21cadb21c" -dependencies = [ - "Inflector", - "dunce", - "ethers-core", - "ethers-etherscan", - "eyre", - "hex", - "prettyplease 0.2.12", - "proc-macro2", - "quote", - "regex", - "reqwest", - "serde", - "serde_json", - "syn 2.0.27", - "toml 0.7.6", - "walkdir", -] - -[[package]] -name = "ethers-contract-derive" -version = "2.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8567ff196c4a37c1a8c90ec73bda0ad2062e191e4f0a6dc4d943e2ec4830fc88" -dependencies = [ - "Inflector", - "ethers-contract-abigen", - "ethers-core", - "hex", - "proc-macro2", - "quote", - "serde_json", - "syn 2.0.27", -] - -[[package]] -name = "ethers-core" -version = "2.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60ca2514feb98918a0a31de7e1983c29f2267ebf61b2dc5d4294f91e5b866623" -dependencies = [ - "arrayvec", - "bytes", - "cargo_metadata", - "chrono", - "elliptic-curve 0.13.4", - "ethabi", - "generic-array", - "hex", - "k256 0.13.1", - "num_enum", - "once_cell", - "open-fastrlp", - "rand", - "rlp", - "serde", - "serde_json", - "strum", - "syn 2.0.27", - "tempfile", - "thiserror", - "tiny-keccak", - "unicode-xid", -] - -[[package]] -name = "ethers-etherscan" -version = "2.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22b3a8269d3df0ed6364bc05b4735b95f4bf830ce3aef87d5e760fb0e93e5b91" -dependencies = [ - "ethers-core", - "reqwest", - "semver", - "serde", - "serde_json", - "thiserror", - "tracing", -] - -[[package]] -name = "ethers-middleware" -version = "2.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0c339aad74ae5c451d27e0e49c7a3c7d22620b119b4f9291d7aa21f72d7f366" -dependencies = [ - "async-trait", - "auto_impl", - "ethers-contract", - "ethers-core", - "ethers-etherscan", - "ethers-providers", - "ethers-signers", - "futures-channel", - "futures-locks", - "futures-util", - "instant", - "reqwest", - "serde", - "serde_json", - "thiserror", - "tokio", - "tracing", - "tracing-futures", - "url", -] - -[[package]] -name = "ethers-providers" -version = "2.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b411b119f1cf0efb69e2190883dee731251882bb21270f893ee9513b3a697c48" -dependencies = [ - "async-trait", - "auto_impl", - "base64 0.21.2", - "bytes", - "enr", - "ethers-core", - "futures-core", - "futures-timer", - "futures-util", - "hashers", - "hex", - "http", - "instant", - "once_cell", - "pin-project", - "reqwest", - "serde", - "serde_json", - "thiserror", - "tokio", - "tokio-tungstenite", - "tracing", - "tracing-futures", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "ws_stream_wasm", -] - -[[package]] -name = "ethers-signers" -version = "2.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4864d387456a9c09a1157fa10e1528b29d90f1d859443acf06a1b23365fb518c" -dependencies = [ - "async-trait", - "coins-bip32", - "coins-bip39", - "elliptic-curve 0.13.4", - "eth-keystore", - "ethers-core", - "hex", - "rand", - "sha2 0.10.6", - "thiserror", - "tracing", -] - -[[package]] -name = "ethers-solc" -version = "2.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a6c2b9625a2c639d46625f88acc2092a3cb35786c37f7c2128b3ca20f639b3c" -dependencies = [ - "cfg-if", - "dunce", - "ethers-core", - "glob", - "hex", - "home", - "md-5", - "num_cpus", - "once_cell", - "path-slash", - "rayon", - "regex", - "semver", - "serde", - "serde_json", - "solang-parser", - "svm-rs", - "thiserror", - "tiny-keccak", - "tokio", - "tracing", - "walkdir", - "yansi", -] - -[[package]] -name = "eyre" -version = "0.6.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c2b6b5a29c02cdc822728b7d7b8ae1bab3e3b05d44522770ddd49722eeac7eb" -dependencies = [ - "indenter", - "once_cell", -] - -[[package]] -name = "fastrand" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" -dependencies = [ - "instant", -] - -[[package]] -name = "ff" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d013fc25338cc558c5c2cfbad646908fb23591e2404481826742b651c9af7160" -dependencies = [ - "rand_core 0.6.4", - "subtle", -] - -[[package]] -name = "ff" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" -dependencies = [ - "rand_core 0.6.4", - "subtle", -] - -[[package]] -name = "fixed-hash" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "835c052cb0c08c1acf6ffd71c022172e18723949c8282f2b9f27efbc51e64534" -dependencies = [ - "byteorder", - "rand", - "rustc-hex", - "static_assertions", -] - -[[package]] -name = "fixedbitset" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" - -[[package]] -name = "flagset" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cda653ca797810c02f7ca4b804b40b8b95ae046eb989d356bce17919a8c25499" -dependencies = [ - "serde", -] - -[[package]] -name = "flate2" -version = "1.0.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b9429470923de8e8cbd4d2dc513535400b4b3fef0319fb5c4e1f520a7bef743" -dependencies = [ - "crc32fast", - "miniz_oxide", -] - -[[package]] -name = "flex-error" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c606d892c9de11507fa0dcffc116434f94e105d0bbdc4e405b61519464c49d7b" -dependencies = [ - "eyre", - "paste", -] - -[[package]] -name = "float-cmp" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4" -dependencies = [ - "num-traits", -] - -[[package]] -name = "fnv" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" - -[[package]] -name = "form_urlencoded" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8" -dependencies = [ - "percent-encoding", -] - -[[package]] -name = "forward_ref" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8cbd1169bd7b4a0a20d92b9af7a7e0422888bd38a6f5ec29c1fd8c1558a272e" - -[[package]] -name = "fragile" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c2141d6d6c8512188a7891b4b01590a45f6dac67afb4f255c4124dbb86d4eaa" - -[[package]] -name = "fs2" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9564fc758e15025b46aa6643b1b77d047d1a56a1aea6e01002ac0c7026876213" -dependencies = [ - "libc", - "winapi", -] - -[[package]] -name = "funty" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" - -[[package]] -name = "futures" -version = "0.3.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13e2792b0ff0340399d58445b88fd9770e3489eff258a4cbc1523418f12abf84" -dependencies = [ - "futures-channel", - "futures-core", - "futures-executor", - "futures-io", - "futures-sink", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-channel" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2" -dependencies = [ - "futures-core", - "futures-sink", -] - -[[package]] -name = "futures-core" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" - -[[package]] -name = "futures-executor" -version = "0.3.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8de0a35a6ab97ec8869e32a2473f4b1324459e14c29275d14b10cb1fd19b50e" -dependencies = [ - "futures-core", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-io" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964" - -[[package]] -name = "futures-locks" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45ec6fe3675af967e67c5536c0b9d44e34e6c52f86bedc4ea49c5317b8e94d06" -dependencies = [ - "futures-channel", - "futures-task", -] - -[[package]] -name = "futures-macro" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.27", -] - -[[package]] -name = "futures-sink" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e" - -[[package]] -name = "futures-task" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65" - -[[package]] -name = "futures-timer" -version = "3.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e64b03909df88034c26dc1547e8970b91f98bdb65165d6a4e9110d94263dbb2c" -dependencies = [ - "gloo-timers", - "send_wrapper 0.4.0", -] - -[[package]] -name = "futures-util" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533" -dependencies = [ - "futures-channel", - "futures-core", - "futures-io", - "futures-macro", - "futures-sink", - "futures-task", - "memchr", - "pin-project-lite", - "pin-utils", - "slab", -] - -[[package]] -name = "fxhash" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" -dependencies = [ - "byteorder", -] - -[[package]] -name = "generic-array" -version = "0.14.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" -dependencies = [ - "typenum", - "version_check", - "zeroize", -] - -[[package]] -name = "getrandom" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31" -dependencies = [ - "cfg-if", - "js-sys", - "libc", - "wasi", - "wasm-bindgen", -] - -[[package]] -name = "gimli" -version = "0.27.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6c80984affa11d98d1b88b66ac8853f143217b399d3c74116778ff8fdb4ed2e" - -[[package]] -name = "glob" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" - -[[package]] -name = "gloo-timers" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b995a66bb87bebce9a0f4a95aed01daca4872c050bfcb21653361c03bc35e5c" -dependencies = [ - "futures-channel", - "futures-core", - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "group" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dfbfb3a6cfbd390d5c9564ab283a0349b9b9fcd46a706c1eb10e0db70bfbac7" -dependencies = [ - "ff 0.12.1", - "rand_core 0.6.4", - "subtle", -] - -[[package]] -name = "group" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" -dependencies = [ - "ff 0.13.0", - "rand_core 0.6.4", - "subtle", -] - -[[package]] -name = "h2" -version = "0.3.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d357c7ae988e7d2182f7d7871d0b963962420b0678b0997ce7de72001aeab782" -dependencies = [ - "bytes", - "fnv", - "futures-core", - "futures-sink", - "futures-util", - "http", - "indexmap 1.9.2", - "slab", - "tokio", - "tokio-util", - "tracing", -] - -[[package]] -name = "hashbrown" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" -dependencies = [ - "ahash", -] - -[[package]] -name = "hashbrown" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a" - -[[package]] -name = "hashers" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2bca93b15ea5a746f220e56587f71e73c6165eab783df9e26590069953e3c30" -dependencies = [ - "fxhash", -] - -[[package]] -name = "headers" -version = "0.3.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3e372db8e5c0d213e0cd0b9be18be2aca3d44cf2fe30a9d46a65581cd454584" -dependencies = [ - "base64 0.13.1", - "bitflags", - "bytes", - "headers-core", - "http", - "httpdate", - "mime", - "sha1", -] - -[[package]] -name = "headers-core" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7f66481bfee273957b1f20485a4ff3362987f85b2c236580d81b4eb7a326429" -dependencies = [ - "http", -] - -[[package]] -name = "heck" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" - -[[package]] -name = "hermit-abi" -version = "0.1.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" -dependencies = [ - "libc", -] - -[[package]] -name = "hermit-abi" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7" -dependencies = [ - "libc", -] - -[[package]] -name = "hermit-abi" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286" - -[[package]] -name = "hex" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" -dependencies = [ - "serde", -] - -[[package]] -name = "hmac" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" -dependencies = [ - "digest 0.10.6", -] - -[[package]] -name = "home" -version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5444c27eef6923071f7ebcc33e3444508466a76f7a2b93da00ed6e19f30c1ddb" -dependencies = [ - "windows-sys 0.48.0", -] - -[[package]] -name = "http" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482" -dependencies = [ - "bytes", - "fnv", - "itoa", -] - -[[package]] -name = "http-body" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" -dependencies = [ - "bytes", - "http", - "pin-project-lite", -] - -[[package]] -name = "httparse" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" - -[[package]] -name = "httpdate" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" - -[[package]] -name = "humantime" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" - -[[package]] -name = "humantime-serde" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57a3db5ea5923d99402c94e9feb261dc5ee9b4efa158b0315f788cf549cc200c" -dependencies = [ - "humantime", - "serde", -] - -[[package]] -name = "hyper" -version = "0.14.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab302d72a6f11a3b910431ff93aae7e773078c769f0a3ef15fb9ec692ed147d4" -dependencies = [ - "bytes", - "futures-channel", - "futures-core", - "futures-util", - "h2", - "http", - "http-body", - "httparse", - "httpdate", - "itoa", - "pin-project-lite", - "socket2", - "tokio", - "tower-service", - "tracing", - "want", -] - -[[package]] -name = "hyper-proxy" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca815a891b24fdfb243fa3239c86154392b0953ee584aa1a2a1f66d20cbe75cc" -dependencies = [ - "bytes", - "futures", - "headers", - "http", - "hyper", - "hyper-rustls 0.22.1", - "rustls-native-certs", - "tokio", - "tokio-rustls 0.22.0", - "tower-service", - "webpki 0.21.4", -] - -[[package]] -name = "hyper-rustls" -version = "0.22.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f9f7a97316d44c0af9b0301e65010573a853a9fc97046d7331d7f6bc0fd5a64" -dependencies = [ - "ct-logs", - "futures-util", - "hyper", - "log", - "rustls 0.19.1", - "rustls-native-certs", - "tokio", - "tokio-rustls 0.22.0", - "webpki 0.21.4", - "webpki-roots 0.21.1", -] - -[[package]] -name = "hyper-rustls" -version = "0.24.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d78e1e73ec14cf7375674f74d7dde185c8206fd9dea6fb6295e8a98098aaa97" -dependencies = [ - "futures-util", - "http", - "hyper", - "rustls 0.21.5", - "tokio", - "tokio-rustls 0.24.1", -] - -[[package]] -name = "hyper-timeout" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1" -dependencies = [ - "hyper", - "pin-project-lite", - "tokio", - "tokio-io-timeout", -] - -[[package]] -name = "iana-time-zone" -version = "0.1.57" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fad5b825842d2b38bd206f3e81d6957625fd7f0a361e345c30e01a0ae2dd613" -dependencies = [ - "android_system_properties", - "core-foundation-sys", - "iana-time-zone-haiku", - "js-sys", - "wasm-bindgen", - "windows", -] - -[[package]] -name = "iana-time-zone-haiku" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" -dependencies = [ - "cc", -] - -[[package]] -name = "ident_case" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" - -[[package]] -name = "idna" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" -dependencies = [ - "unicode-bidi", - "unicode-normalization", -] - -[[package]] -name = "impl-codec" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba6a270039626615617f3f36d15fc827041df3b78c439da2cadfa47455a77f2f" -dependencies = [ - "parity-scale-codec", -] - -[[package]] -name = "impl-rlp" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f28220f89297a075ddc7245cd538076ee98b01f2a9c23a53a4f1105d5a322808" -dependencies = [ - "rlp", -] - -[[package]] -name = "impl-serde" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc88fc67028ae3db0c853baa36269d398d5f45b6982f95549ff5def78c935cd" -dependencies = [ - "serde", -] - -[[package]] -name = "impl-trait-for-tuples" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11d7a9f6330b71fea57921c9b61c47ee6e84f72d394754eff6163ae67e7395eb" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.107", -] - -[[package]] -name = "indenter" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" - -[[package]] -name = "indexmap" -version = "1.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399" -dependencies = [ - "autocfg", - "hashbrown 0.12.3", - "serde", -] - -[[package]] -name = "indexmap" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5477fe2230a79769d8dc68e0eabf5437907c0457a5614a9e8dddb67f65eb65d" -dependencies = [ - "equivalent", - "hashbrown 0.14.0", - "serde", -] - -[[package]] -name = "inout" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" -dependencies = [ - "generic-array", -] - -[[package]] -name = "instant" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "io-lifetimes" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7d6c6f8c91b4b9ed43484ad1a938e393caf35960fce7f82a040497207bd8e9e" -dependencies = [ - "libc", - "windows-sys 0.42.0", -] - -[[package]] -name = "ipnet" -version = "2.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28b29a3cd74f0f4598934efe3aeba42bae0eb4680554128851ebbecb02af14e6" - -[[package]] -name = "is-terminal" -version = "0.4.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adcf93614601c8129ddf72e2d5633df827ba6551541c6d8c59520a371475be1f" -dependencies = [ - "hermit-abi 0.3.1", - "io-lifetimes", - "rustix", - "windows-sys 0.48.0", -] - -[[package]] -name = "is_ci" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "616cde7c720bb2bb5824a224687d8f77bfd38922027f01d825cd7453be5099fb" - -[[package]] -name = "itertools" -version = "0.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" -dependencies = [ - "either", -] - -[[package]] -name = "itoa" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fad582f4b9e86b6caa621cabeb0963332d92eea04729ab12892c2533951e6440" - -[[package]] -name = "jobserver" -version = "0.1.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2" -dependencies = [ - "libc", -] - -[[package]] -name = "js-sys" -version = "0.3.60" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49409df3e3bf0856b916e2ceaca09ee28e6871cf7d9ce97a692cacfdb2a25a47" -dependencies = [ - "wasm-bindgen", -] - -[[package]] -name = "json5" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96b0db21af676c1ce64250b5f40f3ce2cf27e4e47cb91ed91eb6fe9350b430c1" -dependencies = [ - "pest", - "pest_derive", - "serde", -] - -[[package]] -name = "k256" -version = "0.11.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72c1e0b51e7ec0a97369623508396067a486bd0cbed95a2659a4b863d28cfc8b" -dependencies = [ - "cfg-if", - "ecdsa 0.14.8", - "elliptic-curve 0.12.3", - "sha2 0.10.6", -] - -[[package]] -name = "k256" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cadb76004ed8e97623117f3df85b17aaa6626ab0b0831e6573f104df16cd1bcc" -dependencies = [ - "cfg-if", - "ecdsa 0.16.7", - "elliptic-curve 0.13.4", - "once_cell", - "sha2 0.10.6", - "signature 2.1.0", -] - -[[package]] -name = "keccak" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3afef3b6eff9ce9d8ff9b3601125eec7f0c8cbac7abd14f355d053fa56c98768" -dependencies = [ - "cpufeatures", -] - -[[package]] -name = "lalrpop" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da4081d44f4611b66c6dd725e6de3169f9f63905421e8626fcb86b6a898998b8" -dependencies = [ - "ascii-canvas", - "bit-set", - "diff", - "ena", - "is-terminal", - "itertools", - "lalrpop-util", - "petgraph", - "regex", - "regex-syntax", - "string_cache", - "term", - "tiny-keccak", - "unicode-xid", -] - -[[package]] -name = "lalrpop-util" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f35c735096c0293d313e8f2a641627472b83d01b937177fe76e5e2708d31e0d" - -[[package]] -name = "lazy_static" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" - -[[package]] -name = "libc" -version = "0.2.147" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3" - -[[package]] -name = "linked-hash-map" -version = "0.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" - -[[package]] -name = "linux-raw-sys" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ece97ea872ece730aed82664c424eb4c8291e1ff2480247ccf7409044bc6479f" - -[[package]] -name = "lock_api" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df" -dependencies = [ - "autocfg", - "scopeguard", -] - -[[package]] -name = "log" -version = "0.4.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "matchit" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b87248edafb776e59e6ee64a79086f65890d3510f2c656c000bf2a7e8a0aea40" - -[[package]] -name = "md-5" -version = "0.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6365506850d44bff6e2fbcb5176cf63650e48bd45ef2fe2665ae1570e0f4b9ca" -dependencies = [ - "digest 0.10.6", -] - -[[package]] -name = "memchr" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" - -[[package]] -name = "memoffset" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c" -dependencies = [ - "autocfg", -] - -[[package]] -name = "mime" -version = "0.3.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" - -[[package]] -name = "minimal-lexical" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" - -[[package]] -name = "miniz_oxide" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" -dependencies = [ - "adler", -] - -[[package]] -name = "mio" -version = "0.8.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2" -dependencies = [ - "libc", - "wasi", - "windows-sys 0.48.0", -] - -[[package]] -name = "mockall" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50e4a1c770583dac7ab5e2f6c139153b783a53a1bbee9729613f193e59828326" -dependencies = [ - "cfg-if", - "downcast", - "fragile", - "lazy_static", - "mockall_derive", - "predicates", - "predicates-tree", -] - -[[package]] -name = "mockall_derive" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "832663583d5fa284ca8810bf7015e46c9fff9622d3cf34bd1eea5003fec06dd0" -dependencies = [ - "cfg-if", - "proc-macro2", - "quote", - "syn 1.0.107", -] - -[[package]] -name = "multimap" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a" - -[[package]] -name = "multisig" -version = "0.1.0" -source = "git+https://github.com/axelarnetwork/axelar-amplifier.git#a314da5d2d40702d5f20ef9ab0e697a3b88f48b3" -dependencies = [ - "axelar-wasm-std", - "cosmwasm-crypto", - "cosmwasm-schema", - "cosmwasm-std", - "cosmwasm-storage", - "cw-storage-plus 1.1.0", - "cw2", - "getrandom", - "schemars", - "serde", - "serde_json", - "thiserror", -] - -[[package]] -name = "new_debug_unreachable" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54" - -[[package]] -name = "nom" -version = "7.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" -dependencies = [ - "memchr", - "minimal-lexical", -] - -[[package]] -name = "nom8" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae01545c9c7fc4486ab7debaf2aad7003ac19431791868fb2e8066df97fad2f8" -dependencies = [ - "memchr", -] - -[[package]] -name = "normalize-line-endings" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be" - -[[package]] -name = "nu-ansi-term" -version = "0.46.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" -dependencies = [ - "overload", - "winapi", -] - -[[package]] -name = "num-derive" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.107", -] - -[[package]] -name = "num-traits" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" -dependencies = [ - "autocfg", -] - -[[package]] -name = "num_cpus" -version = "1.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b" -dependencies = [ - "hermit-abi 0.2.6", - "libc", -] - -[[package]] -name = "num_enum" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a015b430d3c108a207fd776d2e2196aaf8b1cf8cf93253e3a097ff3085076a1" -dependencies = [ - "num_enum_derive", -] - -[[package]] -name = "num_enum_derive" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96667db765a921f7b295ffee8b60472b686a51d4f21c2ee4ffdb94c7013b65a6" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn 2.0.27", -] - -[[package]] -name = "object" -version = "0.31.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bda667d9f2b5051b8833f59f3bf748b28ef54f850f4fcb389a252aa383866d1" -dependencies = [ - "memchr", -] - -[[package]] -name = "once_cell" -version = "1.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" - -[[package]] -name = "opaque-debug" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" - -[[package]] -name = "open-fastrlp" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "786393f80485445794f6043fd3138854dd109cc6c4bd1a6383db304c9ce9b9ce" -dependencies = [ - "arrayvec", - "auto_impl", - "bytes", - "ethereum-types", - "open-fastrlp-derive", -] - -[[package]] -name = "open-fastrlp-derive" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "003b2be5c6c53c1cfeb0a238b8a1c3915cd410feb684457a36c10038f764bb1c" -dependencies = [ - "bytes", - "proc-macro2", - "quote", - "syn 1.0.107", -] - -[[package]] -name = "openssl-probe" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" - -[[package]] -name = "ordered-multimap" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccd746e37177e1711c20dd619a1620f34f5c8b569c53590a72dedd5344d8924a" -dependencies = [ - "dlv-list", - "hashbrown 0.12.3", -] - -[[package]] -name = "overload" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" - -[[package]] -name = "owo-colors" -version = "3.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1b04fb49957986fdce4d6ee7a65027d55d4b6d2265e5848bbb507b58ccfdb6f" -dependencies = [ - "supports-color", -] - -[[package]] -name = "parity-scale-codec" -version = "3.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd8e946cc0cc711189c0b0249fb8b599cbeeab9784d83c415719368bb8d4ac64" -dependencies = [ - "arrayvec", - "bitvec 1.0.1", - "byte-slice-cast", - "impl-trait-for-tuples", - "parity-scale-codec-derive", - "serde", -] - -[[package]] -name = "parity-scale-codec-derive" -version = "3.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a296c3079b5fefbc499e1de58dc26c09b1b9a5952d26694ee89f04a43ebbb3e" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn 1.0.107", -] - -[[package]] -name = "parking_lot" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" -dependencies = [ - "lock_api", - "parking_lot_core", -] - -[[package]] -name = "parking_lot_core" -version = "0.9.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba1ef8814b5c993410bb3adfad7a5ed269563e4a2f90c41f5d85be7fb47133bf" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall 0.2.16", - "smallvec", - "windows-sys 0.42.0", -] - -[[package]] -name = "password-hash" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7676374caaee8a325c9e7a2ae557f216c5563a171d6997b0ef8a65af35147700" -dependencies = [ - "base64ct", - "rand_core 0.6.4", - "subtle", -] - -[[package]] -name = "paste" -version = "1.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d01a5bd0424d00070b0098dd17ebca6f961a959dead1dbcbbbc1d1cd8d3deeba" - -[[package]] -name = "path-slash" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e91099d4268b0e11973f036e885d652fb0b21fedcf69738c627f94db6a44f42" - -[[package]] -name = "pathdiff" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd" - -[[package]] -name = "pbkdf2" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917" -dependencies = [ - "digest 0.10.6", - "hmac", - "password-hash", - "sha2 0.10.6", -] - -[[package]] -name = "pbkdf2" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0ca0b5a68607598bf3bad68f32227a8164f6254833f84eafaac409cd6746c31" -dependencies = [ - "digest 0.10.6", - "hmac", -] - -[[package]] -name = "peg" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07c0b841ea54f523f7aa556956fbd293bcbe06f2e67d2eb732b7278aaf1d166a" -dependencies = [ - "peg-macros", - "peg-runtime", -] - -[[package]] -name = "peg-macros" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5aa52829b8decbef693af90202711348ab001456803ba2a98eb4ec8fb70844c" -dependencies = [ - "peg-runtime", - "proc-macro2", - "quote", -] - -[[package]] -name = "peg-runtime" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c719dcf55f09a3a7e764c6649ab594c18a177e3599c467983cdf644bfc0a4088" - -[[package]] -name = "percent-encoding" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" - -[[package]] -name = "pest" -version = "2.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ab62d2fa33726dbe6321cc97ef96d8cde531e3eeaf858a058de53a8a6d40d8f" -dependencies = [ - "thiserror", - "ucd-trie", -] - -[[package]] -name = "pest_derive" -version = "2.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bf026e2d0581559db66d837fe5242320f525d85c76283c61f4d51a1238d65ea" -dependencies = [ - "pest", - "pest_generator", -] - -[[package]] -name = "pest_generator" -version = "2.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b27bd18aa01d91c8ed2b61ea23406a676b42d82609c6e2581fba42f0c15f17f" -dependencies = [ - "pest", - "pest_meta", - "proc-macro2", - "quote", - "syn 1.0.107", -] - -[[package]] -name = "pest_meta" -version = "2.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f02b677c1859756359fc9983c2e56a0237f18624a3789528804406b7e915e5d" -dependencies = [ - "once_cell", - "pest", - "sha2 0.10.6", -] - -[[package]] -name = "petgraph" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dd7d28ee937e54fe3080c91faa1c3a46c06de6252988a7f4592ba2310ef22a4" -dependencies = [ - "fixedbitset", - "indexmap 1.9.2", -] - -[[package]] -name = "pharos" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9567389417feee6ce15dd6527a8a1ecac205ef62c2932bcf3d9f6fc5b78b414" -dependencies = [ - "futures", - "rustc_version", -] - -[[package]] -name = "phf" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc" -dependencies = [ - "phf_macros", - "phf_shared 0.11.2", -] - -[[package]] -name = "phf_generator" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0" -dependencies = [ - "phf_shared 0.11.2", - "rand", -] - -[[package]] -name = "phf_macros" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3444646e286606587e49f3bcf1679b8cef1dc2c5ecc29ddacaffc305180d464b" -dependencies = [ - "phf_generator", - "phf_shared 0.11.2", - "proc-macro2", - "quote", - "syn 2.0.27", -] - -[[package]] -name = "phf_shared" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096" -dependencies = [ - "siphasher", -] - -[[package]] -name = "phf_shared" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b" -dependencies = [ - "siphasher", -] - -[[package]] -name = "pin-project" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "030ad2bc4db10a8944cb0d837f158bdfec4d4a4873ab701a95046770d11f8842" -dependencies = [ - "pin-project-internal", -] - -[[package]] -name = "pin-project-internal" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec2e072ecce94ec471b13398d5402c188e76ac03cf74dd1a975161b23a3f6d9c" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.27", -] - -[[package]] -name = "pin-project-lite" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" - -[[package]] -name = "pin-utils" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" - -[[package]] -name = "pkcs8" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9eca2c590a5f85da82668fa685c09ce2888b9430e83299debf1f34b65fd4a4ba" -dependencies = [ - "der 0.6.1", - "spki 0.6.0", -] - -[[package]] -name = "pkcs8" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" -dependencies = [ - "der 0.7.5", - "spki 0.7.2", -] - -[[package]] -name = "pkg-config" -version = "0.3.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" - -[[package]] -name = "ppv-lite86" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" - -[[package]] -name = "precomputed-hash" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" - -[[package]] -name = "predicates" -version = "2.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59230a63c37f3e18569bdb90e4a89cbf5bf8b06fea0b84e65ea10cc4df47addd" -dependencies = [ - "difflib", - "float-cmp", - "itertools", - "normalize-line-endings", - "predicates-core", - "regex", -] - -[[package]] -name = "predicates-core" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72f883590242d3c6fc5bf50299011695fa6590c2c70eac95ee1bdb9a733ad1a2" - -[[package]] -name = "predicates-tree" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54ff541861505aabf6ea722d2131ee980b8276e10a1297b94e896dd8b621850d" -dependencies = [ - "predicates-core", - "termtree", -] - -[[package]] -name = "prettyplease" -version = "0.1.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c8646e95016a7a6c4adea95bafa8a16baab64b583356217f2c85db4a39d9a86" -dependencies = [ - "proc-macro2", - "syn 1.0.107", -] - -[[package]] -name = "prettyplease" -version = "0.2.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c64d9ba0963cdcea2e1b2230fbae2bab30eb25a174be395c41e764bfb65dd62" -dependencies = [ - "proc-macro2", - "syn 2.0.27", -] - -[[package]] -name = "primitive-types" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f3486ccba82358b11a77516035647c34ba167dfa53312630de83b12bd4f3d66" -dependencies = [ - "fixed-hash", - "impl-codec", - "impl-rlp", - "impl-serde", - "scale-info", - "uint", -] - -[[package]] -name = "proc-macro-crate" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66618389e4ec1c7afe67d51a9bf34ff9236480f8d51e7489b7d5ab0303c13f34" -dependencies = [ - "once_cell", - "toml_edit 0.18.1", -] - -[[package]] -name = "proc-macro-error" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" -dependencies = [ - "proc-macro-error-attr", - "proc-macro2", - "quote", - "syn 1.0.107", - "version_check", -] - -[[package]] -name = "proc-macro-error-attr" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" -dependencies = [ - "proc-macro2", - "quote", - "version_check", -] - -[[package]] -name = "proc-macro2" -version = "1.0.66" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "prost" -version = "0.11.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b82eaa1d779e9a4bc1c3217db8ffbeabaae1dca241bf70183242128d48681cd" -dependencies = [ - "bytes", - "prost-derive", -] - -[[package]] -name = "prost-build" -version = "0.11.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "119533552c9a7ffacc21e099c24a0ac8bb19c2a2a3f363de84cd9b844feab270" -dependencies = [ - "bytes", - "heck", - "itertools", - "lazy_static", - "log", - "multimap", - "petgraph", - "prettyplease 0.1.25", - "prost", - "prost-types", - "regex", - "syn 1.0.107", - "tempfile", - "which", -] - -[[package]] -name = "prost-derive" -version = "0.11.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5d2d8d10f3c6ded6da8b05b5fb3b8a5082514344d56c9f871412d29b4e075b4" -dependencies = [ - "anyhow", - "itertools", - "proc-macro2", - "quote", - "syn 1.0.107", -] - -[[package]] -name = "prost-types" -version = "0.11.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "213622a1460818959ac1181aaeb2dc9c7f63df720db7d788b3e24eacd1983e13" -dependencies = [ - "prost", -] - -[[package]] -name = "quote" -version = "1.0.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fe8a65d69dd0808184ebb5f836ab526bb259db23c657efa38711b1072ee47f0" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "radium" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "def50a86306165861203e7f84ecffbbdfdea79f0e51039b33de1e952358c47ac" - -[[package]] -name = "radium" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" - -[[package]] -name = "rand" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" -dependencies = [ - "libc", - "rand_chacha", - "rand_core 0.6.4", -] - -[[package]] -name = "rand_chacha" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" -dependencies = [ - "ppv-lite86", - "rand_core 0.6.4", -] - -[[package]] -name = "rand_core" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" - -[[package]] -name = "rand_core" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" -dependencies = [ - "getrandom", -] - -[[package]] -name = "random-string" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf4e63111ec5292d8af9c220f06fe3bb87991cc78b6f1f7e291d1ae6b8a60817" -dependencies = [ - "fastrand", -] - -[[package]] -name = "rayon" -version = "1.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b" -dependencies = [ - "either", - "rayon-core", -] - -[[package]] -name = "rayon-core" -version = "1.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d" -dependencies = [ - "crossbeam-channel", - "crossbeam-deque", - "crossbeam-utils", - "num_cpus", -] - -[[package]] -name = "redox_syscall" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" -dependencies = [ - "bitflags", -] - -[[package]] -name = "redox_syscall" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" -dependencies = [ - "bitflags", -] - -[[package]] -name = "redox_users" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" -dependencies = [ - "getrandom", - "redox_syscall 0.2.16", - "thiserror", -] - -[[package]] -name = "regex" -version = "1.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2eae68fc220f7cf2532e4494aded17545fce192d59cd996e0fe7887f4ceb575" -dependencies = [ - "aho-corasick", - "memchr", - "regex-automata", - "regex-syntax", -] - -[[package]] -name = "regex-automata" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39354c10dd07468c2e73926b23bb9c2caca74c5501e38a35da70406f1d923310" -dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax", -] - -[[package]] -name = "regex-syntax" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5ea92a5b6195c6ef2a0295ea818b312502c6fc94dde986c5553242e18fd4ce2" - -[[package]] -name = "reqwest" -version = "0.11.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cde824a14b7c14f85caff81225f411faacc04a2013f41670f41443742b1c1c55" -dependencies = [ - "base64 0.21.2", - "bytes", - "encoding_rs", - "futures-core", - "futures-util", - "h2", - "http", - "http-body", - "hyper", - "hyper-rustls 0.24.1", - "ipnet", - "js-sys", - "log", - "mime", - "once_cell", - "percent-encoding", - "pin-project-lite", - "rustls 0.21.5", - "rustls-pemfile", - "serde", - "serde_json", - "serde_urlencoded", - "tokio", - "tokio-rustls 0.24.1", - "tower-service", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "webpki-roots 0.22.6", - "winreg", -] - -[[package]] -name = "rfc6979" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7743f17af12fa0b03b803ba12cd6a8d9483a587e89c69445e3909655c0b9fabb" -dependencies = [ - "crypto-bigint 0.4.9", - "hmac", - "zeroize", -] - -[[package]] -name = "rfc6979" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" -dependencies = [ - "hmac", - "subtle", -] - -[[package]] -name = "ring" -version = "0.16.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" -dependencies = [ - "cc", - "libc", - "once_cell", - "spin", - "untrusted", - "web-sys", - "winapi", -] - -[[package]] -name = "ripemd" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd124222d17ad93a644ed9d011a40f4fb64aa54275c08cc216524a9ea82fb09f" -dependencies = [ - "digest 0.10.6", -] - -[[package]] -name = "rlp" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb919243f34364b6bd2fc10ef797edbfa75f33c252e7998527479c6d6b47e1ec" -dependencies = [ - "bytes", - "rlp-derive", - "rustc-hex", -] - -[[package]] -name = "rlp-derive" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e33d7b2abe0c340d8797fe2907d3f20d3b5ea5908683618bfe80df7f621f672a" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.107", -] - -[[package]] -name = "ron" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88073939a61e5b7680558e6be56b419e208420c2adb92be54921fa6b72283f1a" -dependencies = [ - "base64 0.13.1", - "bitflags", - "serde", -] - -[[package]] -name = "rust-ini" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6d5f2436026b4f6e79dc829837d467cc7e9a55ee40e750d716713540715a2df" -dependencies = [ - "cfg-if", - "ordered-multimap", -] - -[[package]] -name = "rustc-demangle" -version = "0.1.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" - -[[package]] -name = "rustc-hex" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e75f6a532d0fd9f7f13144f392b6ad56a32696bfcd9c78f797f16bbb6f072d6" - -[[package]] -name = "rustc_version" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" -dependencies = [ - "semver", -] - -[[package]] -name = "rustix" -version = "0.37.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b24138615de35e32031d041a09032ef3487a616d901ca4db224e7d557efae2" -dependencies = [ - "bitflags", - "errno", - "io-lifetimes", - "libc", - "linux-raw-sys", - "windows-sys 0.45.0", -] - -[[package]] -name = "rustls" -version = "0.19.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35edb675feee39aec9c99fa5ff985081995a06d594114ae14cbe797ad7b7a6d7" -dependencies = [ - "base64 0.13.1", - "log", - "ring", - "sct 0.6.1", - "webpki 0.21.4", -] - -[[package]] -name = "rustls" -version = "0.21.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79ea77c539259495ce8ca47f53e66ae0330a8819f67e23ac96ca02f50e7b7d36" -dependencies = [ - "log", - "ring", - "rustls-webpki 0.101.1", - "sct 0.7.0", -] - -[[package]] -name = "rustls-native-certs" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a07b7c1885bd8ed3831c289b7870b13ef46fe0e856d288c30d9cc17d75a2092" -dependencies = [ - "openssl-probe", - "rustls 0.19.1", - "schannel", - "security-framework", -] - -[[package]] -name = "rustls-pemfile" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d194b56d58803a43635bdc398cd17e383d6f71f9182b9a192c127ca42494a59b" -dependencies = [ - "base64 0.21.2", -] - -[[package]] -name = "rustls-webpki" -version = "0.100.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6207cd5ed3d8dca7816f8f3725513a34609c0c765bf652b8c3cb4cfd87db46b" -dependencies = [ - "ring", - "untrusted", -] - -[[package]] -name = "rustls-webpki" -version = "0.101.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15f36a6828982f422756984e47912a7a51dcbc2a197aa791158f8ca61cd8204e" -dependencies = [ - "ring", - "untrusted", -] - -[[package]] -name = "rustversion" -version = "1.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5583e89e108996506031660fe09baa5011b9dd0341b89029313006d1fb508d70" - -[[package]] -name = "ryu" -version = "1.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b4b9743ed687d4b4bcedf9ff5eaa7398495ae14e61cba0a295704edbc7decde" - -[[package]] -name = "salsa20" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97a22f5af31f73a954c10289c93e8a50cc23d971e80ee446f1f6f7137a088213" -dependencies = [ - "cipher", -] - -[[package]] -name = "same-file" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" -dependencies = [ - "winapi-util", -] - -[[package]] -name = "scale-info" -version = "2.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35c0a159d0c45c12b20c5a844feb1fe4bea86e28f17b92a5f0c42193634d3782" -dependencies = [ - "cfg-if", - "derive_more", - "parity-scale-codec", - "scale-info-derive", -] - -[[package]] -name = "scale-info-derive" -version = "2.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "912e55f6d20e0e80d63733872b40e1227c0bce1e1ab81ba67d696339bfd7fd29" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn 1.0.107", -] - -[[package]] -name = "schannel" -version = "0.1.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "713cfb06c7059f3588fb8044c0fad1d09e3c01d225e25b9220dbfdcf16dbb1b3" -dependencies = [ - "windows-sys 0.42.0", -] - -[[package]] -name = "schemars" -version = "0.8.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a5fb6c61f29e723026dc8e923d94c694313212abbecbbe5f55a7748eec5b307" -dependencies = [ - "dyn-clone", - "schemars_derive", - "serde", - "serde_json", -] - -[[package]] -name = "schemars_derive" -version = "0.8.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f188d036977451159430f3b8dc82ec76364a42b7e289c2b18a9a18f4470058e9" -dependencies = [ - "proc-macro2", - "quote", - "serde_derive_internals", - "syn 1.0.107", -] - -[[package]] -name = "scopeguard" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" - -[[package]] -name = "scrypt" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f9e24d2b632954ded8ab2ef9fea0a0c769ea56ea98bddbafbad22caeeadf45d" -dependencies = [ - "hmac", - "pbkdf2 0.11.0", - "salsa20", - "sha2 0.10.6", -] - -[[package]] -name = "sct" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b362b83898e0e69f38515b82ee15aa80636befe47c3b6d3d89a911e78fc228ce" -dependencies = [ - "ring", - "untrusted", -] - -[[package]] -name = "sct" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4" -dependencies = [ - "ring", - "untrusted", -] - -[[package]] -name = "sec1" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3be24c1842290c45df0a7bf069e0c268a747ad05a192f2fd7dcfdbc1cba40928" -dependencies = [ - "base16ct 0.1.1", - "der 0.6.1", - "generic-array", - "pkcs8 0.9.0", - "subtle", - "zeroize", -] - -[[package]] -name = "sec1" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48518a2b5775ba8ca5b46596aae011caa431e6ce7e4a67ead66d92f08884220e" -dependencies = [ - "base16ct 0.2.0", - "der 0.7.5", - "generic-array", - "pkcs8 0.10.2", - "subtle", - "zeroize", -] - -[[package]] -name = "security-framework" -version = "2.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a332be01508d814fed64bf28f798a146d73792121129962fdf335bb3c49a4254" -dependencies = [ - "bitflags", - "core-foundation", - "core-foundation-sys", - "libc", - "security-framework-sys", -] - -[[package]] -name = "security-framework-sys" -version = "2.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31c9bb296072e961fcbd8853511dd39c2d8be2deb1e17c6860b1d30732b323b4" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "semver" -version = "1.0.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58bc9567378fc7690d6b2addae4e60ac2eeea07becb2c64b9f218b53865cba2a" -dependencies = [ - "serde", -] - -[[package]] -name = "send_wrapper" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f638d531eccd6e23b980caf34876660d38e265409d8e99b397ab71eb3612fad0" - -[[package]] -name = "send_wrapper" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" - -[[package]] -name = "serde" -version = "1.0.174" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b88756493a5bd5e5395d53baa70b194b05764ab85b59e43e4b8f4e1192fa9b1" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde-json-wasm" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a15bee9b04dd165c3f4e142628982ddde884c2022a89e8ddf99c4829bf2c3a58" -dependencies = [ - "serde", -] - -[[package]] -name = "serde_bytes" -version = "0.11.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "718dc5fff5b36f99093fc49b280cfc96ce6fc824317783bff5a1fed0c7a64819" -dependencies = [ - "serde", -] - -[[package]] -name = "serde_derive" -version = "1.0.174" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e5c3a298c7f978e53536f95a63bdc4c4a64550582f31a0359a9afda6aede62e" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.27", -] - -[[package]] -name = "serde_derive_internals" -version = "0.26.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85bf8229e7920a9f636479437026331ce11aa132b4dde37d121944a44d6e5f3c" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.107", -] - -[[package]] -name = "serde_json" -version = "1.0.91" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "877c235533714907a8c2464236f5c4b2a17262ef1bd71f38f35ea592c8da6883" -dependencies = [ - "itoa", - "ryu", - "serde", -] - -[[package]] -name = "serde_repr" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a5ec9fa74a20ebbe5d9ac23dac1fc96ba0ecfe9f50f2843b52e537b10fbcb4e" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.107", -] - -[[package]] -name = "serde_spanned" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96426c9936fd7a0124915f9185ea1d20aa9445cc9821142f0a73bc9207a2e186" -dependencies = [ - "serde", -] - -[[package]] -name = "serde_urlencoded" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" -dependencies = [ - "form_urlencoded", - "itoa", - "ryu", - "serde", -] - -[[package]] -name = "serde_with" -version = "3.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1402f54f9a3b9e2efe71c1cea24e648acce55887983553eeb858cf3115acfd49" -dependencies = [ - "base64 0.21.2", - "chrono", - "hex", - "indexmap 1.9.2", - "indexmap 2.0.0", - "serde", - "serde_json", - "serde_with_macros", - "time", -] - -[[package]] -name = "serde_with_macros" -version = "3.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9197f1ad0e3c173a0222d3c4404fb04c3afe87e962bcb327af73e8301fa203c7" -dependencies = [ - "darling", - "proc-macro2", - "quote", - "syn 2.0.27", -] - -[[package]] -name = "service-registry" -version = "0.1.0" -source = "git+https://github.com/axelarnetwork/axelar-amplifier.git#a314da5d2d40702d5f20ef9ab0e697a3b88f48b3" -dependencies = [ - "axelar-wasm-std", - "cosmwasm-schema", - "cosmwasm-std", - "cosmwasm-storage", - "cw-storage-plus 0.15.1", - "cw2", - "schemars", - "serde", - "thiserror", -] - -[[package]] -name = "sha1" -version = "0.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest 0.10.6", -] - -[[package]] -name = "sha2" -version = "0.9.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" -dependencies = [ - "block-buffer 0.9.0", - "cfg-if", - "cpufeatures", - "digest 0.9.0", - "opaque-debug", -] - -[[package]] -name = "sha2" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest 0.10.6", -] - -[[package]] -name = "sha3" -version = "0.10.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54c2bb1a323307527314a36bfb73f24febb08ce2b8a554bf4ffd6f51ad15198c" -dependencies = [ - "digest 0.10.6", - "keccak", -] - -[[package]] -name = "sharded-slab" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31" -dependencies = [ - "lazy_static", -] - -[[package]] -name = "signal-hook-registry" -version = "1.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" -dependencies = [ - "libc", -] - -[[package]] -name = "signature" -version = "1.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c" -dependencies = [ - "digest 0.10.6", - "rand_core 0.6.4", -] - -[[package]] -name = "signature" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e1788eed21689f9cf370582dfc467ef36ed9c707f073528ddafa8d83e3b8500" -dependencies = [ - "digest 0.10.6", - "rand_core 0.6.4", -] - -[[package]] -name = "siphasher" -version = "0.3.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de" - -[[package]] -name = "slab" -version = "0.4.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef" -dependencies = [ - "autocfg", -] - -[[package]] -name = "smallvec" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" - -[[package]] -name = "socket2" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662" -dependencies = [ - "libc", - "winapi", -] - -[[package]] -name = "solang-parser" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c792fe9fae2a2f716846f214ca10d5a1e21133e0bf36cef34bcc4a852467b21" -dependencies = [ - "itertools", - "lalrpop", - "lalrpop-util", - "phf", - "thiserror", - "unicode-xid", -] - -[[package]] -name = "spin" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" - -[[package]] -name = "spki" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67cf02bbac7a337dc36e4f5a693db6c21e7863f45070f7064577eb4367a3212b" -dependencies = [ - "base64ct", - "der 0.6.1", -] - -[[package]] -name = "spki" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d1e996ef02c474957d681f1b05213dfb0abab947b446a62d37770b23500184a" -dependencies = [ - "base64ct", - "der 0.7.5", -] - -[[package]] -name = "static_assertions" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" - -[[package]] -name = "string_cache" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f91138e76242f575eb1d3b38b4f1362f10d3a43f47d182a5b359af488a02293b" -dependencies = [ - "new_debug_unreachable", - "once_cell", - "parking_lot", - "phf_shared 0.10.0", - "precomputed-hash", -] - -[[package]] -name = "strsim" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" - -[[package]] -name = "strum" -version = "0.25.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "290d54ea6f91c969195bdbcd7442c8c2a2ba87da8bf60a7ee86a235d4bc1e125" -dependencies = [ - "strum_macros", -] - -[[package]] -name = "strum_macros" -version = "0.25.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6069ca09d878a33f883cc06aaa9718ede171841d3832450354410b718b097232" -dependencies = [ - "heck", - "proc-macro2", - "quote", - "rustversion", - "syn 2.0.27", -] - -[[package]] -name = "subtle" -version = "2.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" - -[[package]] -name = "subtle-encoding" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7dcb1ed7b8330c5eed5441052651dd7a12c75e2ed88f2ec024ae1fa3a5e59945" -dependencies = [ - "zeroize", -] - -[[package]] -name = "subtle-ng" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "734676eb262c623cec13c3155096e08d1f8f29adce39ba17948b18dad1e54142" - -[[package]] -name = "supports-color" -version = "1.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ba6faf2ca7ee42fdd458f4347ae0a9bd6bcc445ad7cb57ad82b383f18870d6f" -dependencies = [ - "atty", - "is_ci", -] - -[[package]] -name = "svm-rs" -version = "0.2.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a04fc4f5cd35c700153b233f5575ccb3237e0f941fa5049d9e98254d10bf2fe" -dependencies = [ - "fs2", - "hex", - "home", - "once_cell", - "reqwest", - "semver", - "serde", - "serde_json", - "sha2 0.10.6", - "thiserror", - "url", - "zip", -] - -[[package]] -name = "syn" -version = "1.0.107" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f4064b5b16e03ae50984a5a8ed5d4f8803e6bc1fd170a3cda91a1be4b18e3f5" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "syn" -version = "2.0.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b60f673f44a8255b9c8c657daf66a596d435f2da81a555b06dc644d080ba45e0" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "sync_wrapper" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20518fe4a4c9acf048008599e464deb21beeae3d3578418951a189c235a7a9a8" - -[[package]] -name = "synstructure" -version = "0.12.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.107", - "unicode-xid", -] - -[[package]] -name = "tap" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" - -[[package]] -name = "tempfile" -version = "3.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9fbec84f381d5795b08656e4912bec604d162bff9291d6189a78f4c8ab87998" -dependencies = [ - "cfg-if", - "fastrand", - "redox_syscall 0.3.5", - "rustix", - "windows-sys 0.45.0", -] - -[[package]] -name = "tendermint" -version = "0.32.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a46ec6b25b028097ab682ffae11d09d64fe1e2535833b902f26a278a0f88a705" -dependencies = [ - "bytes", - "digest 0.10.6", - "ed25519", - "ed25519-consensus", - "flex-error", - "futures", - "k256 0.13.1", - "num-traits", - "once_cell", - "prost", - "prost-types", - "ripemd", - "serde", - "serde_bytes", - "serde_json", - "serde_repr", - "sha2 0.10.6", - "signature 2.1.0", - "subtle", - "subtle-encoding", - "tendermint-proto 0.32.0", - "time", - "zeroize", -] - -[[package]] -name = "tendermint" -version = "0.33.0" -source = "git+https://github.com/axelarnetwork/tendermint-rs.git?branch=v0.33.x#e97033e20e660a7e707ea86db174ec047bbba50d" -dependencies = [ - "bytes", - "digest 0.10.6", - "ed25519", - "ed25519-consensus", - "flex-error", - "futures", - "num-traits", - "once_cell", - "prost", - "prost-types", - "serde", - "serde_bytes", - "serde_json", - "serde_repr", - "sha2 0.10.6", - "signature 2.1.0", - "subtle", - "subtle-encoding", - "tendermint-proto 0.33.0", - "time", - "zeroize", -] - -[[package]] -name = "tendermint-config" -version = "0.33.0" -source = "git+https://github.com/axelarnetwork/tendermint-rs.git?branch=v0.33.x#e97033e20e660a7e707ea86db174ec047bbba50d" -dependencies = [ - "flex-error", - "serde", - "serde_json", - "tendermint 0.33.0", - "toml 0.5.11", - "url", -] - -[[package]] -name = "tendermint-proto" -version = "0.27.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5895470f28c530f8ae8c4071bf8190304ce00bd131d25e81730453124a3375c" -dependencies = [ - "bytes", - "flex-error", - "num-derive", - "num-traits", - "prost", - "prost-types", - "serde", - "serde_bytes", - "subtle-encoding", - "time", -] - -[[package]] -name = "tendermint-proto" -version = "0.32.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ce23c8ff0e6634eb4c3c4aeed45076dc97dac91aac5501a905a67fa222e165b" -dependencies = [ - "bytes", - "flex-error", - "num-derive", - "num-traits", - "prost", - "prost-types", - "serde", - "serde_bytes", - "subtle-encoding", - "time", -] - -[[package]] -name = "tendermint-proto" -version = "0.33.0" -source = "git+https://github.com/axelarnetwork/tendermint-rs.git?branch=v0.33.x#e97033e20e660a7e707ea86db174ec047bbba50d" -dependencies = [ - "bytes", - "flex-error", - "num-derive", - "num-traits", - "prost", - "prost-types", - "serde", - "serde_bytes", - "subtle-encoding", - "time", -] - -[[package]] -name = "tendermint-rpc" -version = "0.33.0" -source = "git+https://github.com/axelarnetwork/tendermint-rs.git?branch=v0.33.x#e97033e20e660a7e707ea86db174ec047bbba50d" -dependencies = [ - "async-trait", - "bytes", - "flex-error", - "futures", - "getrandom", - "http", - "hyper", - "hyper-proxy", - "hyper-rustls 0.22.1", - "peg", - "pin-project", - "semver", - "serde", - "serde_bytes", - "serde_json", - "subtle", - "subtle-encoding", - "tendermint 0.33.0", - "tendermint-config", - "tendermint-proto 0.33.0", - "thiserror", - "time", - "tokio", - "tracing", - "url", - "uuid", - "walkdir", -] - -[[package]] -name = "term" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c59df8ac95d96ff9bede18eb7300b0fda5e5d8d90960e76f8e14ae765eedbf1f" -dependencies = [ - "dirs-next", - "rustversion", - "winapi", -] - -[[package]] -name = "termtree" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95059e91184749cb66be6dc994f67f182b6d897cb3df74a5bf66b5e709295fd8" - -[[package]] -name = "thiserror" -version = "1.0.38" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a9cd18aa97d5c45c6603caea1da6628790b37f7a34b6ca89522331c5180fed0" -dependencies = [ - "thiserror-impl", -] - -[[package]] -name = "thiserror-impl" -version = "1.0.38" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fb327af4685e4d03fa8cbcf1716380da910eeb2bb8be417e7f9fd3fb164f36f" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.107", -] - -[[package]] -name = "thread_local" -version = "1.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5516c27b78311c50bf42c071425c560ac799b11c30b31f87e3081965fe5e0180" -dependencies = [ - "once_cell", -] - -[[package]] -name = "time" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a561bf4617eebd33bca6434b988f39ed798e527f51a1e797d0ee4f61c0a38376" -dependencies = [ - "itoa", - "serde", - "time-core", - "time-macros", -] - -[[package]] -name = "time-core" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd" - -[[package]] -name = "time-macros" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d967f99f534ca7e495c575c62638eebc2898a8c84c119b89e250477bc4ba16b2" -dependencies = [ - "time-core", -] - -[[package]] -name = "tiny-keccak" -version = "2.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" -dependencies = [ - "crunchy", -] - -[[package]] -name = "tinyvec" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" -dependencies = [ - "tinyvec_macros", -] - -[[package]] -name = "tinyvec_macros" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" - -[[package]] -name = "tokio" -version = "1.29.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "532826ff75199d5833b9d2c5fe410f29235e25704ee5f0ef599fb51c21f4a4da" -dependencies = [ - "autocfg", - "backtrace", - "bytes", - "libc", - "mio", - "num_cpus", - "pin-project-lite", - "signal-hook-registry", - "socket2", - "tokio-macros", - "windows-sys 0.48.0", -] - -[[package]] -name = "tokio-io-timeout" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30b74022ada614a1b4834de765f9bb43877f910cc8ce4be40e89042c9223a8bf" -dependencies = [ - "pin-project-lite", - "tokio", -] - -[[package]] -name = "tokio-macros" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.27", -] - -[[package]] -name = "tokio-rustls" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc6844de72e57df1980054b38be3a9f4702aba4858be64dd700181a8a6d0e1b6" -dependencies = [ - "rustls 0.19.1", - "tokio", - "webpki 0.21.4", -] - -[[package]] -name = "tokio-rustls" -version = "0.24.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" -dependencies = [ - "rustls 0.21.5", - "tokio", -] - -[[package]] -name = "tokio-stream" -version = "0.1.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d660770404473ccd7bc9f8b28494a811bc18542b915c0855c51e8f419d5223ce" -dependencies = [ - "futures-core", - "pin-project-lite", - "tokio", - "tokio-util", -] - -[[package]] -name = "tokio-tungstenite" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec509ac96e9a0c43427c74f003127d953a265737636129424288d27cb5c4b12c" -dependencies = [ - "futures-util", - "log", - "rustls 0.21.5", - "tokio", - "tokio-rustls 0.24.1", - "tungstenite", - "webpki-roots 0.23.1", -] - -[[package]] -name = "tokio-util" -version = "0.7.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "806fe8c2c87eccc8b3267cbae29ed3ab2d0bd37fca70ab622e46aaa9375ddb7d" -dependencies = [ - "bytes", - "futures-core", - "futures-sink", - "pin-project-lite", - "tokio", - "tracing", -] - -[[package]] -name = "toml" -version = "0.5.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" -dependencies = [ - "serde", -] - -[[package]] -name = "toml" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c17e963a819c331dcacd7ab957d80bc2b9a9c1e71c804826d2f283dd65306542" -dependencies = [ - "serde", - "serde_spanned", - "toml_datetime 0.6.3", - "toml_edit 0.19.14", -] - -[[package]] -name = "toml_datetime" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4553f467ac8e3d374bc9a177a26801e5d0f9b211aa1673fb137a403afd1c9cf5" - -[[package]] -name = "toml_datetime" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" -dependencies = [ - "serde", -] - -[[package]] -name = "toml_edit" -version = "0.18.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56c59d8dd7d0dcbc6428bf7aa2f0e823e26e43b3c9aca15bbc9475d23e5fa12b" -dependencies = [ - "indexmap 1.9.2", - "nom8", - "toml_datetime 0.5.1", -] - -[[package]] -name = "toml_edit" -version = "0.19.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8123f27e969974a3dfba720fdb560be359f57b44302d280ba72e76a74480e8a" -dependencies = [ - "indexmap 2.0.0", - "serde", - "serde_spanned", - "toml_datetime 0.6.3", - "winnow", -] - -[[package]] -name = "tonic" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f219fad3b929bef19b1f86fbc0358d35daed8f2cac972037ac0dc10bbb8d5fb" -dependencies = [ - "async-stream", - "async-trait", - "axum", - "base64 0.13.1", - "bytes", - "futures-core", - "futures-util", - "h2", - "http", - "http-body", - "hyper", - "hyper-timeout", - "percent-encoding", - "pin-project", - "prost", - "prost-derive", - "tokio", - "tokio-stream", - "tokio-util", - "tower", - "tower-layer", - "tower-service", - "tracing", - "tracing-futures", -] - -[[package]] -name = "tonic-build" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bf5e9b9c0f7e0a7c027dcfaba7b2c60816c7049171f679d99ee2ff65d0de8c4" -dependencies = [ - "prettyplease 0.1.25", - "proc-macro2", - "prost-build", - "quote", - "syn 1.0.107", -] - -[[package]] -name = "tower" -version = "0.4.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" -dependencies = [ - "futures-core", - "futures-util", - "indexmap 1.9.2", - "pin-project", - "pin-project-lite", - "rand", - "slab", - "tokio", - "tokio-util", - "tower-layer", - "tower-service", - "tracing", -] - -[[package]] -name = "tower-layer" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" - -[[package]] -name = "tower-service" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" - -[[package]] -name = "tracing" -version = "0.1.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" -dependencies = [ - "cfg-if", - "log", - "pin-project-lite", - "tracing-attributes", - "tracing-core", -] - -[[package]] -name = "tracing-attributes" -version = "0.1.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.107", -] - -[[package]] -name = "tracing-core" -version = "0.1.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a" -dependencies = [ - "once_cell", - "valuable", -] - -[[package]] -name = "tracing-futures" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2" -dependencies = [ - "pin-project", - "tracing", -] - -[[package]] -name = "tracing-log" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922" -dependencies = [ - "lazy_static", - "log", - "tracing-core", -] - -[[package]] -name = "tracing-serde" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc6b213177105856957181934e4920de57730fc69bf42c37ee5bb664d406d9e1" -dependencies = [ - "serde", - "tracing-core", - "valuable", - "valuable-serde", -] - -[[package]] -name = "tracing-subscriber" -version = "0.3.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6176eae26dd70d0c919749377897b54a9276bd7061339665dd68777926b5a70" -dependencies = [ - "nu-ansi-term", - "serde", - "serde_json", - "sharded-slab", - "smallvec", - "thread_local", - "tracing-core", - "tracing-log", - "tracing-serde", - "valuable", - "valuable-serde", -] - -[[package]] -name = "try-lock" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" - -[[package]] -name = "tungstenite" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15fba1a6d6bb030745759a9a2a588bfe8490fc8b4751a277db3a0be1c9ebbf67" -dependencies = [ - "byteorder", - "bytes", - "data-encoding", - "http", - "httparse", - "log", - "rand", - "rustls 0.21.5", - "sha1", - "thiserror", - "url", - "utf-8", - "webpki 0.22.0", -] - -[[package]] -name = "typenum" -version = "1.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" - -[[package]] -name = "ucd-trie" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e79c4d996edb816c91e4308506774452e55e95c3c9de07b6729e17e15a5ef81" - -[[package]] -name = "uint" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76f64bba2c53b04fcab63c01a7d7427eadc821e3bc48c34dc9ba29c501164b52" -dependencies = [ - "byteorder", - "crunchy", - "hex", - "static_assertions", -] - -[[package]] -name = "unicode-bidi" -version = "0.3.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d54675592c1dbefd78cbd98db9bacd89886e1ca50692a0692baefffdeb92dd58" - -[[package]] -name = "unicode-ident" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc" - -[[package]] -name = "unicode-normalization" -version = "0.1.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" -dependencies = [ - "tinyvec", -] - -[[package]] -name = "unicode-xid" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" - -[[package]] -name = "untrusted" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" - -[[package]] -name = "url" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643" -dependencies = [ - "form_urlencoded", - "idna", - "percent-encoding", -] - -[[package]] -name = "utf-8" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" - -[[package]] -name = "utf8parse" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" - -[[package]] -name = "uuid" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" -dependencies = [ - "getrandom", - "serde", -] - -[[package]] -name = "valuable" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" -dependencies = [ - "valuable-derive", -] - -[[package]] -name = "valuable-derive" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d44690c645190cfce32f91a1582281654b2338c6073fa250b0949fd25c55b32" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.107", -] - -[[package]] -name = "valuable-serde" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5285cfff30cdabe26626736a54d989687dd9cab84f51f4048b61d6d0ae8b0907" -dependencies = [ - "serde", - "valuable", -] - -[[package]] -name = "version_check" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" - -[[package]] -name = "voting-verifier" -version = "0.1.0" -source = "git+https://github.com/axelarnetwork/axelar-amplifier.git#a314da5d2d40702d5f20ef9ab0e697a3b88f48b3" -dependencies = [ - "axelar-wasm-std", - "connection-router", - "cosmwasm-schema", - "cosmwasm-std", - "cosmwasm-storage", - "cw-storage-plus 1.1.0", - "cw0", - "cw2", - "either", - "schemars", - "serde", - "serde_json", - "service-registry", - "thiserror", -] - -[[package]] -name = "walkdir" -version = "2.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" -dependencies = [ - "same-file", - "winapi", - "winapi-util", -] - -[[package]] -name = "want" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" -dependencies = [ - "log", - "try-lock", -] - -[[package]] -name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" - -[[package]] -name = "wasm-bindgen" -version = "0.2.83" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eaf9f5aceeec8be17c128b2e93e031fb8a4d469bb9c4ae2d7dc1888b26887268" -dependencies = [ - "cfg-if", - "wasm-bindgen-macro", -] - -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.83" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c8ffb332579b0557b52d268b91feab8df3615f265d5270fec2a8c95b17c1142" -dependencies = [ - "bumpalo", - "log", - "once_cell", - "proc-macro2", - "quote", - "syn 1.0.107", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-futures" -version = "0.4.33" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23639446165ca5a5de86ae1d8896b737ae80319560fbaa4c2887b7da6e7ebd7d" -dependencies = [ - "cfg-if", - "js-sys", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "wasm-bindgen-macro" -version = "0.2.83" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "052be0f94026e6cbc75cdefc9bae13fd6052cdcaf532fa6c45e7ae33a1e6c810" -dependencies = [ - "quote", - "wasm-bindgen-macro-support", -] - -[[package]] -name = "wasm-bindgen-macro-support" -version = "0.2.83" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07bc0c051dc5f23e307b13285f9d75df86bfdf816c5721e573dec1f9b8aa193c" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.107", - "wasm-bindgen-backend", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-shared" -version = "0.2.83" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c38c045535d93ec4f0b4defec448e4291638ee608530863b1e2ba115d4fff7f" - -[[package]] -name = "web-sys" -version = "0.3.60" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcda906d8be16e728fd5adc5b729afad4e444e106ab28cd1c7256e54fa61510f" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "webpki" -version = "0.21.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8e38c0608262c46d4a56202ebabdeb094cef7e560ca7a226c6bf055188aa4ea" -dependencies = [ - "ring", - "untrusted", -] - -[[package]] -name = "webpki" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd" -dependencies = [ - "ring", - "untrusted", -] - -[[package]] -name = "webpki-roots" -version = "0.21.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aabe153544e473b775453675851ecc86863d2a81d786d741f6b76778f2a48940" -dependencies = [ - "webpki 0.21.4", -] - -[[package]] -name = "webpki-roots" -version = "0.22.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6c71e40d7d2c34a5106301fb632274ca37242cd0c9d3e64dbece371a40a2d87" -dependencies = [ - "webpki 0.22.0", -] - -[[package]] -name = "webpki-roots" -version = "0.23.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b03058f88386e5ff5310d9111d53f48b17d732b401aeb83a8d5190f2ac459338" -dependencies = [ - "rustls-webpki 0.100.1", -] - -[[package]] -name = "which" -version = "4.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2441c784c52b289a054b7201fc93253e288f094e2f4be9058343127c4226a269" -dependencies = [ - "either", - "libc", - "once_cell", -] - -[[package]] -name = "winapi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" -dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", -] - -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" - -[[package]] -name = "winapi-util" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" -dependencies = [ - "winapi", -] - -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" - -[[package]] -name = "windows" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" -dependencies = [ - "windows-targets 0.48.0", -] - -[[package]] -name = "windows-sys" -version = "0.42.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" -dependencies = [ - "windows_aarch64_gnullvm 0.42.1", - "windows_aarch64_msvc 0.42.1", - "windows_i686_gnu 0.42.1", - "windows_i686_msvc 0.42.1", - "windows_x86_64_gnu 0.42.1", - "windows_x86_64_gnullvm 0.42.1", - "windows_x86_64_msvc 0.42.1", -] - -[[package]] -name = "windows-sys" -version = "0.45.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" -dependencies = [ - "windows-targets 0.42.1", -] - -[[package]] -name = "windows-sys" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" -dependencies = [ - "windows-targets 0.48.0", -] - -[[package]] -name = "windows-targets" -version = "0.42.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e2522491fbfcd58cc84d47aeb2958948c4b8982e9a2d8a2a35bbaed431390e7" -dependencies = [ - "windows_aarch64_gnullvm 0.42.1", - "windows_aarch64_msvc 0.42.1", - "windows_i686_gnu 0.42.1", - "windows_i686_msvc 0.42.1", - "windows_x86_64_gnu 0.42.1", - "windows_x86_64_gnullvm 0.42.1", - "windows_x86_64_msvc 0.42.1", -] - -[[package]] -name = "windows-targets" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5" -dependencies = [ - "windows_aarch64_gnullvm 0.48.0", - "windows_aarch64_msvc 0.48.0", - "windows_i686_gnu 0.48.0", - "windows_i686_msvc 0.48.0", - "windows_x86_64_gnu 0.48.0", - "windows_x86_64_gnullvm 0.48.0", - "windows_x86_64_msvc 0.48.0", -] - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.42.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c9864e83243fdec7fc9c5444389dcbbfd258f745e7853198f365e3c4968a608" - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.42.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c8b1b673ffc16c47a9ff48570a9d85e25d265735c503681332589af6253c6c7" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" - -[[package]] -name = "windows_i686_gnu" -version = "0.42.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de3887528ad530ba7bdbb1faa8275ec7a1155a45ffa57c37993960277145d640" - -[[package]] -name = "windows_i686_gnu" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" - -[[package]] -name = "windows_i686_msvc" -version = "0.42.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf4d1122317eddd6ff351aa852118a2418ad4214e6613a50e0191f7004372605" - -[[package]] -name = "windows_i686_msvc" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.42.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1040f221285e17ebccbc2591ffdc2d44ee1f9186324dd3e84e99ac68d699c45" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.42.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "628bfdf232daa22b0d64fdb62b09fcc36bb01f05a3939e20ab73aaf9470d0463" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.42.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "447660ad36a13288b1db4d4248e857b510e8c3a225c822ba4fb748c0aafecffd" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" - -[[package]] -name = "winnow" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81fac9742fd1ad1bd9643b991319f72dd031016d44b77039a26977eb667141e7" -dependencies = [ - "memchr", -] - -[[package]] -name = "winreg" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d" -dependencies = [ - "winapi", -] - -[[package]] -name = "ws_stream_wasm" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7999f5f4217fe3818726b66257a4475f71e74ffd190776ad053fa159e50737f5" -dependencies = [ - "async_io_stream", - "futures", - "js-sys", - "log", - "pharos", - "rustc_version", - "send_wrapper 0.6.0", - "thiserror", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - -[[package]] -name = "wyz" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" -dependencies = [ - "tap", -] - -[[package]] -name = "yaml-rust" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85" -dependencies = [ - "linked-hash-map", -] - -[[package]] -name = "yansi" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec" - -[[package]] -name = "zeroize" -version = "1.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c394b5bd0c6f669e7275d9c20aa90ae064cb22e75a1cad54e1b34088034b149f" -dependencies = [ - "zeroize_derive", -] - -[[package]] -name = "zeroize_derive" -version = "1.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44bf07cb3e50ea2003396695d58bf46bc9887a1f362260446fad6bc4e79bd36c" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.107", - "synstructure", -] - -[[package]] -name = "zip" -version = "0.6.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "760394e246e4c28189f19d488c058bf16f564016aefac5d32bb1f3b51d5e9261" -dependencies = [ - "aes", - "byteorder", - "bzip2", - "constant_time_eq", - "crc32fast", - "crossbeam-utils", - "flate2", - "hmac", - "pbkdf2 0.11.0", - "sha1", - "time", - "zstd", -] - -[[package]] -name = "zstd" -version = "0.11.2+zstd.1.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20cc960326ece64f010d2d2107537f26dc589a6573a316bd5b1dba685fa5fde4" -dependencies = [ - "zstd-safe", -] - -[[package]] -name = "zstd-safe" -version = "5.0.2+zstd.1.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d2a5585e04f9eea4b2a3d1eca508c4dee9592a89ef6f450c11719da0726f4db" -dependencies = [ - "libc", - "zstd-sys", -] - -[[package]] -name = "zstd-sys" -version = "2.0.8+zstd.1.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5556e6ee25d32df2586c098bbfa278803692a20d0ab9565e049480d52707ec8c" -dependencies = [ - "cc", - "libc", - "pkg-config", -] diff --git a/ampd/Cargo.toml b/ampd/Cargo.toml index 144f9d96a..6b47ec58e 100644 --- a/ampd/Cargo.toml +++ b/ampd/Cargo.toml @@ -9,6 +9,7 @@ async-trait = "0.1.59" axelar-wasm-std = { workspace = true } base64 = "0.21.2" bcs = "0.1.5" +borsh = { version = "1.2.0", features = ["derive"] } clap = { version = "4.2.7", features = ["derive", "cargo"] } config = "0.13.2" connection-router = { workspace = true } @@ -38,8 +39,14 @@ serde = { version = "1.0.147", features = ["derive"] } serde_json = "1.0.89" serde_with = "3.2.0" service-registry = { workspace = true } +solana-client = "1.18.1" +solana-program = "1.18.1" +solana-sdk = "1.18.1" +solana-transaction-status = "1.18.1" sui-json-rpc-types = { git = "https://github.com/mystenlabs/sui", tag = "mainnet-v1.14.2" } -sui-types = { git = "https://github.com/mystenlabs/sui", features = ["test-utils"], tag = "mainnet-v1.14.2" } +sui-types = { git = "https://github.com/mystenlabs/sui", features = [ + "test-utils", +], tag = "mainnet-v1.14.2" } # Need to switch to our own fork of tendermint and tendermint-rpc due to event attribute value being nullable. # Can switch back once https://github.com/informalsystems/tendermint-rs/issues/1216 is resolved. # The fix for the issue is at https://github.com/axelarnetwork/tendermint-rs/commit/e97033e20e660a7e707ea86db174ec047bbba50d. @@ -60,6 +67,7 @@ url = "2.3.1" valuable = { version = "0.1.0", features = ["derive"] } valuable-serde = { version = "0.1.0", features = ["std"] } voting-verifier = { workspace = true } +gateway = { git = "ssh://git@github.com/eigerco/solana-axelar.git", branch = "poc" } [dev-dependencies] elliptic-curve = "0.13.5" @@ -70,3 +78,18 @@ random-string = "1.0.0" [build-dependencies] ethers = "2.0.8" tonic-build = "0.8.3" + +[patch.crates-io] +# aes-gcm-siv 0.10.3 and curve25519-dalek 3.x pin zeroize to <1.4 +# which conflicts with other dependencies requiring zeroize ^1.5. +# We’re patching both crates to unpin zeroize. +# +# For aes-gcm-siv we’re using the same revision Solana uses in +# an (as of now) unreleased commit, see +# https://github.com/solana-labs/solana/commit/01f1bf27994d9813fadfcd134befd3a449aaa0bd +# +# For curve25519-dalek we’re using commit from a PR, see +# https://github.com/dalek-cryptography/curve25519-dalek/pull/606 +aes-gcm-siv = { git = "https://github.com/RustCrypto/AEADs", rev = "6105d7a5591aefa646a95d12b5e8d3f55a9214ef" } +curve25519-dalek = { git = "https://github.com/dalek-cryptography/curve25519-dalek", rev = "8274d5cbb6fc3f38cdc742b4798173895cd2a290" } +ahash = "=0.8.6" diff --git a/ampd/src/handlers/config.rs b/ampd/src/handlers/config.rs index 30742c763..7ba206499 100644 --- a/ampd/src/handlers/config.rs +++ b/ampd/src/handlers/config.rs @@ -38,6 +38,10 @@ pub enum Config { cosmwasm_contract: TMAddress, rpc_url: Url, }, + SolanaMsgVerifier { + cosmwasm_contract: TMAddress, + rpc_url: Url, + }, } fn validate_multisig_signer_config<'de, D>(configs: &[Config]) -> Result<(), D::Error> @@ -133,6 +137,22 @@ where } } +fn validate_solana_msg_verifier_config<'de, D>(configs: &[Config]) -> Result<(), D::Error> +where + D: Deserializer<'de>, +{ + match configs + .iter() + .filter(|config| matches!(config, Config::SolanaMsgVerifier { .. })) + .count() + { + count if count > 1 => Err(de::Error::custom( + "only one Solana msg verifier config is allowed", + )), + _ => Ok(()), + } +} + pub fn deserialize_handler_configs<'de, D>(deserializer: D) -> Result, D::Error> where D: Deserializer<'de>, @@ -144,6 +164,7 @@ where validate_multisig_signer_config::(&configs)?; validate_sui_msg_verifier_config::(&configs)?; validate_sui_worker_set_verifier_config::(&configs)?; + validate_solana_msg_verifier_config::(&configs)?; Ok(configs) } diff --git a/ampd/src/handlers/mod.rs b/ampd/src/handlers/mod.rs index e87db6573..7ca21da41 100644 --- a/ampd/src/handlers/mod.rs +++ b/ampd/src/handlers/mod.rs @@ -5,6 +5,7 @@ mod errors; pub mod evm_verify_msg; pub mod evm_verify_worker_set; pub mod multisig; +pub mod solana_verify_msg; pub mod sui_verify_msg; pub mod sui_verify_worker_set; diff --git a/ampd/src/handlers/multisig.rs b/ampd/src/handlers/multisig.rs index 8c1d469b9..765c9ffcb 100644 --- a/ampd/src/handlers/multisig.rs +++ b/ampd/src/handlers/multisig.rs @@ -153,6 +153,11 @@ where Some(pub_key) => { let signature = self .signer + // NOTE from Eiger to Axelar, when in PR: With our local setup + // sign() function works only when we pass in the string "axelar" + // as a first argument. + // Is there something specific we should do anything special + // with that first argument or it should work the way it is now? .sign(self.multisig.to_string().as_str(), msg.clone(), pub_key) .await .change_context(Error::Sign)?; diff --git a/ampd/src/handlers/solana_verify_msg.rs b/ampd/src/handlers/solana_verify_msg.rs new file mode 100644 index 000000000..546de3be9 --- /dev/null +++ b/ampd/src/handlers/solana_verify_msg.rs @@ -0,0 +1,430 @@ +use async_trait::async_trait; +use cosmrs::cosmwasm::MsgExecuteContract; +use error_stack::ResultExt; +use serde::Deserialize; +use solana_transaction_status::EncodedConfirmedTransactionWithStatusMeta; +use std::collections::HashSet; +use std::convert::TryInto; +use tracing::info; + +use axelar_wasm_std::voting::{PollId, Vote}; +use events::{Error::EventTypeMismatch, Event}; +use events_derive::try_from; +use tokio::sync::watch::Receiver; +use voting_verifier::msg::ExecuteMsg; + +use crate::event_processor::EventHandler; +use crate::handlers::errors::Error; +use crate::queue::queued_broadcaster::BroadcasterClient; +use crate::solana::{json_rpc::SolanaClient, verifier::verify_message}; +use crate::types::TMAddress; + +type Result = error_stack::Result; + +#[derive(Deserialize, Debug, PartialEq)] +pub struct Message { + pub tx_id: String, + pub event_index: u64, + pub destination_address: String, + pub destination_chain: connection_router::state::ChainName, + pub source_address: String, + #[serde(with = "axelar_wasm_std::hex")] + pub payload_hash: [u8; 32], +} + +#[derive(Deserialize, Debug)] +#[try_from("wasm-messages_poll_started")] +struct PollStartedEvent { + #[serde(rename = "_contract_address")] + contract_address: TMAddress, + poll_id: PollId, + source_gateway_address: String, + messages: Vec, + participants: Vec, + expires_at: u64, +} + +pub struct Handler +where + C: SolanaClient + Send + Sync, + B: BroadcasterClient, +{ + worker: TMAddress, + voting_verifier: TMAddress, + rpc_client: C, + broadcast_client: B, + latest_block_height: Receiver, +} + +impl Handler +where + C: SolanaClient + Send + Sync, + B: BroadcasterClient, +{ + pub fn new( + worker: TMAddress, + voting_verifier: TMAddress, + rpc_client: C, + broadcast_client: B, + latest_block_height: Receiver, + ) -> Self { + Self { + worker, + voting_verifier, + rpc_client, + broadcast_client, + latest_block_height, + } + } + async fn broadcast_votes(&self, poll_id: PollId, votes: Vec) -> Result<()> { + let msg = serde_json::to_vec(&ExecuteMsg::Vote { poll_id, votes }) + .expect("vote msg should serialize"); + let tx = MsgExecuteContract { + sender: self.worker.as_ref().clone(), + contract: self.voting_verifier.as_ref().clone(), + msg, + funds: vec![], + }; + + self.broadcast_client + .broadcast(tx) + .await + .change_context(Error::Broadcaster) + } +} + +#[async_trait] +impl EventHandler for Handler +where + C: SolanaClient + Send + Sync, + B: BroadcasterClient + Send + Sync, +{ + type Err = Error; + + async fn handle(&self, event: &Event) -> Result<()> { + let PollStartedEvent { + contract_address, + poll_id, + source_gateway_address, + messages, + participants, + expires_at, + .. + } = match event.try_into() as error_stack::Result<_, _> { + Err(report) if matches!(report.current_context(), EventTypeMismatch(_)) => { + return Ok(()); + } + event => event.change_context(Error::DeserializeEvent)?, + }; + + if self.voting_verifier != contract_address { + return Ok(()); + } + + if !participants.contains(&self.worker) { + return Ok(()); + } + + let latest_block_height = *self.latest_block_height.borrow(); + if latest_block_height >= expires_at { + info!(poll_id = poll_id.to_string(), "skipping expired poll"); + return Ok(()); + } + + let tx_ids_from_msg: HashSet<_> = messages.iter().map(|msg| msg.tx_id.clone()).collect(); + + let mut sol_txs: Vec = Vec::new(); + for msg_tx in tx_ids_from_msg { + let sol_tx = self.rpc_client.get_transaction(msg_tx).await.map_err(|_|Error::TxReceipts)?; + sol_txs.push(sol_tx); + } + + let mut votes: Vec = vec![Vote::NotFound; messages.len()]; + for msg in messages { + votes = sol_txs + .iter() + .map(|tx| verify_message(&source_gateway_address, tx, &msg)) + .collect(); + } + + self.broadcast_votes(poll_id, votes).await + } +} + +#[cfg(test)] +mod test { + + use axelar_wasm_std::nonempty; + use base64::{engine::general_purpose::STANDARD, Engine}; + use events::Event; + use tendermint::abci; + use tokio::sync::watch; + use voting_verifier::events::{PollMetadata, PollStarted, TxEventConfirmation}; + + use crate::{ + queue::queued_broadcaster::MockBroadcasterClient, + solana::json_rpc::MockSolanaClient, + types::{EVMAddress, Hash}, + PREFIX, + }; + use tokio::test as async_test; + + use super::*; + + #[async_test] + async fn must_correctly_broadcast_message_validation() { + // Setup the context + let voting_verifier = TMAddress::random(PREFIX); + let worker = TMAddress::random(PREFIX); + let expiration = 100u64; + let (_, rx) = watch::channel(expiration - 1); + + // Prepare the message verifier and the vote broadcaster + let mut broadcast_client = MockBroadcasterClient::new(); + broadcast_client + .expect_broadcast::() + .once() + .returning(|_| Ok(())); + let mut sol_client = MockSolanaClient::new(); + sol_client + .expect_get_transaction() + .times(2) + .returning(|_| Ok(dummy_tx_type())); + + let event: Event = get_event( + get_poll_started_event(participants(5, Some(worker.clone())), 100), + &voting_verifier, + ); + + let handler = + super::Handler::new(worker, voting_verifier, sol_client, broadcast_client, rx); + + handler.handle(&event).await.unwrap(); + } + + #[async_test] + async fn must_skip_duplicated_tx() { + // Setup the context + let voting_verifier = TMAddress::random(PREFIX); + let worker = TMAddress::random(PREFIX); + let expiration = 100u64; + let (_, rx) = watch::channel(expiration - 1); + + // Prepare the message verifier and the vote broadcaster + let mut broadcast_client = MockBroadcasterClient::new(); + broadcast_client + .expect_broadcast::() + .once() + .returning(|_| Ok(())); + let mut sol_client = MockSolanaClient::new(); + sol_client + .expect_get_transaction() + .once() // Only the first msg is verified, skipping the duplicated one. + .returning(|_| Ok(dummy_tx_type())); + + let event: Event = get_event( + get_poll_started_event_with_duplicates(participants(5, Some(worker.clone())), 100), + &voting_verifier, + ); + + let handler = + super::Handler::new(worker, voting_verifier, sol_client, broadcast_client, rx); + + handler.handle(&event).await.unwrap(); + } + + fn dummy_tx_type() -> EncodedConfirmedTransactionWithStatusMeta { + // Example from https://solana.com/docs/rpc/http/gettransaction + serde_json::from_str(include_str!("../solana/tests/solana_tx.json")).unwrap() + } + + #[async_test] + async fn ignores_poll_event_if_voting_verifier_address_not_match_event_address() { + // Setup the context + let voting_verifier = TMAddress::random(PREFIX); + let worker = TMAddress::random(PREFIX); + let expiration = 100u64; + let (_, rx) = watch::channel(expiration - 1); + + // Prepare the message verifier and the vote broadcaster + let mut broadcast_client = MockBroadcasterClient::new(); + broadcast_client + .expect_broadcast::() + .never(); + + let mut sol_client = MockSolanaClient::new(); + sol_client.expect_get_transaction().never(); + + let event: Event = get_event( + get_poll_started_event(participants(5, Some(worker.clone())), 100), + &TMAddress::random(PREFIX), // A different, unexpected address comes from the event. + ); + + let handler = + super::Handler::new(worker, voting_verifier, sol_client, broadcast_client, rx); + + handler.handle(&event).await.unwrap(); + } + + #[async_test] + async fn ignores_poll_event_if_worker_not_part_of_participants() { + // Setup the context + let voting_verifier = TMAddress::random(PREFIX); + let worker = TMAddress::random(PREFIX); + let expiration = 100u64; + let (_, rx) = watch::channel(expiration - 1); + + // Prepare the message verifier and the vote broadcaster + let mut broadcast_client = MockBroadcasterClient::new(); + broadcast_client + .expect_broadcast::() + .never(); + + let mut sol_client = MockSolanaClient::new(); + sol_client.expect_get_transaction().never(); + + let event: Event = get_event( + get_poll_started_event(participants(5, None), 100), // This worker is not in participant set. So will skip the event. + &voting_verifier, + ); + + let handler = + super::Handler::new(worker, voting_verifier, sol_client, broadcast_client, rx); + + handler.handle(&event).await.unwrap(); + } + + #[async_test] + async fn ignores_expired_poll_event() { + // Setup the context + let voting_verifier = TMAddress::random(PREFIX); + let worker = TMAddress::random(PREFIX); + let expiration = 100u64; + let (_, rx) = watch::channel(expiration); // expired ! + + // Prepare the message verifier and the vote broadcaster + let mut broadcast_client = MockBroadcasterClient::new(); + broadcast_client + .expect_broadcast::() + .never(); + + let mut sol_client = MockSolanaClient::new(); + sol_client.expect_get_transaction().never(); + + let event: Event = get_event( + get_poll_started_event(participants(5, Some(worker.clone())), 100), + &voting_verifier, + ); + + let handler = + super::Handler::new(worker, voting_verifier, sol_client, broadcast_client, rx); + + handler.handle(&event).await.unwrap(); + } + + fn get_event(event: impl Into, contract_address: &TMAddress) -> Event { + let mut event: cosmwasm_std::Event = event.into(); + + event.ty = format!("wasm-{}", event.ty); + event = event.add_attribute("_contract_address", contract_address.to_string()); + + abci::Event::new( + event.ty, + event + .attributes + .into_iter() + .map(|cosmwasm_std::Attribute { key, value }| { + (STANDARD.encode(key), STANDARD.encode(value)) + }), + ) + .try_into() + .unwrap() + } + + fn get_poll_started_event(participants: Vec, expires_at: u64) -> PollStarted { + get_poll_started_event_with_source_chain(participants, expires_at, "starknet") + } + + fn get_poll_started_event_with_source_chain( + participants: Vec, + expires_at: u64, + source_chain: &str, + ) -> PollStarted { + PollStarted::Messages { + metadata: PollMetadata { + poll_id: "100".parse().unwrap(), + source_chain: source_chain.parse().unwrap(), + source_gateway_address: "sol".to_string().parse().unwrap(), + confirmation_height: 15, + expires_at, + participants: participants + .into_iter() + .map(|addr| cosmwasm_std::Addr::unchecked(addr.to_string())) + .collect(), + }, + messages: vec![ + TxEventConfirmation { + tx_id: format!("0x{:x}", Hash::random()).parse().unwrap(), + event_index: 10, + source_address: "sol".to_string().parse().unwrap(), + destination_chain: "ethereum".parse().unwrap(), + destination_address: format!("0x{:x}", EVMAddress::random()).parse().unwrap(), + payload_hash: Hash::random().to_fixed_bytes(), + }, + TxEventConfirmation { + tx_id: format!("0x{:x}", Hash::random()).parse().unwrap(), + event_index: 11, + source_address: "sol".to_string().parse().unwrap(), + destination_chain: "ethereum".parse().unwrap(), + destination_address: format!("0x{:x}", EVMAddress::random()).parse().unwrap(), + payload_hash: Hash::random().to_fixed_bytes(), + }, + ], + } + } + + fn get_poll_started_event_with_duplicates( + participants: Vec, + expires_at: u64, + ) -> PollStarted { + let tx_id: nonempty::String = format!("0x{:x}", Hash::random()).parse().unwrap(); + PollStarted::Messages { + metadata: PollMetadata { + poll_id: "100".parse().unwrap(), + source_chain: "solana".parse().unwrap(), + source_gateway_address: "sol".to_string().parse().unwrap(), + confirmation_height: 15, + expires_at, + participants: participants + .into_iter() + .map(|addr| cosmwasm_std::Addr::unchecked(addr.to_string())) + .collect(), + }, + messages: vec![ + TxEventConfirmation { + tx_id: tx_id.clone(), + event_index: 10, + source_address: "sol".to_string().parse().unwrap(), + destination_chain: "ethereum".parse().unwrap(), + destination_address: format!("0x{:x}", EVMAddress::random()).parse().unwrap(), + payload_hash: Hash::random().to_fixed_bytes(), + }, + TxEventConfirmation { + tx_id, + event_index: 10, + source_address: "sol".to_string().parse().unwrap(), + destination_chain: "ethereum".parse().unwrap(), + destination_address: format!("0x{:x}", EVMAddress::random()).parse().unwrap(), + payload_hash: Hash::random().to_fixed_bytes(), + }, + ], + } + } + + fn participants(n: u8, worker: Option) -> Vec { + (0..n) + .map(|_| TMAddress::random(PREFIX)) + .chain(worker) + .collect() + } +} diff --git a/ampd/src/lib.rs b/ampd/src/lib.rs index 5945fa2df..29938e38b 100644 --- a/ampd/src/lib.rs +++ b/ampd/src/lib.rs @@ -35,6 +35,7 @@ mod evm; mod handlers; mod json_rpc; mod queue; +mod solana; pub mod state; mod sui; mod tm_client; @@ -256,6 +257,19 @@ where self.block_height_monitor.latest_block_height(), ), ), + handlers::config::Config::SolanaMsgVerifier { + cosmwasm_contract, + rpc_url, + } => self.configure_handler( + "solana-msg-verifier", + handlers::solana_verify_msg::Handler::new( + worker.clone(), + cosmwasm_contract, + json_rpc::Client::new_http(&rpc_url).change_context(Error::Connection)?, + self.broadcaster.client(), + self.block_height_monitor.latest_block_height(), + ), + ), } } diff --git a/ampd/src/solana/json_rpc.rs b/ampd/src/solana/json_rpc.rs new file mode 100644 index 000000000..5fce35433 --- /dev/null +++ b/ampd/src/solana/json_rpc.rs @@ -0,0 +1,31 @@ +use async_trait::async_trait; +use ethers::providers::{JsonRpcClient, ProviderError}; +use mockall::automock; +use solana_transaction_status::EncodedConfirmedTransactionWithStatusMeta; + +use crate::json_rpc::Client; + +type Result = error_stack::Result; + +#[automock] +#[async_trait] +pub trait SolanaClient { + async fn get_transaction( + &self, + signature_str: String, + ) -> Result; +} + +#[async_trait] +impl

SolanaClient for Client

+where + P: JsonRpcClient + Send + Sync + 'static, +{ + async fn get_transaction( + &self, + signature_str: String, + ) -> Result { + self.request("getTransaction", [signature_str, String::from("json")]) + .await + } +} diff --git a/ampd/src/solana/mod.rs b/ampd/src/solana/mod.rs new file mode 100644 index 000000000..7ef391328 --- /dev/null +++ b/ampd/src/solana/mod.rs @@ -0,0 +1,3 @@ +pub mod json_rpc; +pub mod verifier; + diff --git a/ampd/src/solana/tests/solana_tx.json b/ampd/src/solana/tests/solana_tx.json new file mode 100644 index 000000000..a40d4ae5d --- /dev/null +++ b/ampd/src/solana/tests/solana_tx.json @@ -0,0 +1,36 @@ +{ + "meta": { + "fee": 5000, + "postBalances": [], + "postTokenBalances": [], + "preBalances": [], + "status": { + "Ok": null + }, + "logMessages": [ + "BAD_LOG_MESSAGE", + "Program data: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAGFicgMAAAAweDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=", + "Program data: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAGV0aAMAAAAweDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=" + ] + }, + "slot": 430, + "transaction": { + "message": { + "accountKeys": [ + "sol_gateway_addr" + ], + "header": { + "numReadonlySignedAccounts": 0, + "numReadonlyUnsignedAccounts": 1, + "numRequiredSignatures": 1 + }, + "instructions": [], + "recentBlockhash": "mfcyqEXB3DnHXki6KjjmZck6YjmZLvpAByy2fj4nh6B" + }, + "signatures": [ + "fake_tx_id" + ] + }, + "blockTime": null, + "id": 1 +} \ No newline at end of file diff --git a/ampd/src/solana/verifier.rs b/ampd/src/solana/verifier.rs new file mode 100644 index 000000000..4e752113a --- /dev/null +++ b/ampd/src/solana/verifier.rs @@ -0,0 +1,381 @@ +use axelar_wasm_std::voting::Vote; +use base64::Engine as _; + +use base64::{self, engine::general_purpose}; +use gateway::events::GatewayEvent; +use solana_transaction_status::{ + option_serializer::OptionSerializer, EncodedConfirmedTransactionWithStatusMeta, +}; +use tracing::error; + +use crate::handlers::solana_verify_msg::Message; + +impl PartialEq<&Message> for GatewayEvent { + fn eq(&self, msg: &&Message) -> bool { + match self { + GatewayEvent::CallContract { + sender, + destination_chain, + destination_address, + payload: _, + payload_hash, + } => { + let event_dest_addr = String::from_utf8(destination_address.to_owned()); + let event_dest_chain = String::from_utf8(destination_chain.to_owned()); + + event_dest_addr.is_ok() + && sender.to_string() == msg.source_address + && event_dest_chain.is_ok() + && event_dest_addr.unwrap() == msg.destination_address + && msg.destination_chain == event_dest_chain.unwrap() + && *payload_hash == msg.payload_hash + } + _ => false, + } + } +} + +#[inline] +fn decode_base64(input: &str) -> Option> { + general_purpose::STANDARD.decode(input).ok() +} + +pub fn verify_message( + source_gateway_address: &String, + tx: &EncodedConfirmedTransactionWithStatusMeta, + message: &Message, +) -> Vote { + let ui_tx = match &tx.transaction.transaction { + solana_transaction_status::EncodedTransaction::Json(tx) => tx, + _ => { + error!("failed to parse solana tx."); + return Vote::FailedOnChain; + } + }; + + // NOTE: first signature is always tx_id + let tx_id = match ui_tx.signatures.first() { + Some(tx) => tx, + None => { + error!("failed to parse solana tx signatures."); + return Vote::FailedOnChain; + } + }; + + let tx_meta = match &tx.transaction.meta { + Some(meta) => meta, + None => { + error!( + tx_id = tx_id, + "Theres no available tx metadata to parse log messages from." + ); + return Vote::FailedOnChain; + } + }; + + let log_messages = match &tx_meta.log_messages { + OptionSerializer::Some(log) => log, + _ => { + error!(tx_id = tx_id, "Theres no log messages in tx."); + return Vote::FailedOnChain; + } + }; + + let ui_parsed_msg = match &ui_tx.message { + solana_transaction_status::UiMessage::Raw(msg) => msg, + _ => { + error!( + tx_id = tx_id, + "Could not gather tx message for checking account keys." + ); + return Vote::FailedOnChain; + } + }; + + match find_first_log_message_match( + tx_id, + log_messages, + message, + &ui_parsed_msg.account_keys, + source_gateway_address, + ) { + Some(_) => Vote::SucceededOnChain, + None => Vote::FailedOnChain, + } +} + +// This function iterates over all Solana tx log messages +// trying to find at least one log msg that matches the +// Axelar provided one. For doing that, its necessary to: +// +// 1. Deserialize the tx log message, which contains the gateway event. +// 2. The parsed gateway event from 1 matches the Axelar message. +// +// This function is only intended for use inside this crate +// and its arguments are basically parts of the Solana tx plus +// the Axelar counterpart for verification purposes. +// +// When the first matching log message is found, its index will be returned. +fn find_first_log_message_match( + tx_id: &str, + log_messages: &Vec, + message: &Message, + account_keys: &Vec, + source_gateway_address: &String, +) -> Option { + for (i, log) in log_messages.iter().enumerate() { + match GatewayEvent::parse_log(log) { + Some(parsed_ev) => { + let verified = parsed_ev == message + && *tx_id == message.tx_id + && account_keys.contains(source_gateway_address); + + if verified { + return Some(i); + } + } + None => continue, + } + } + None +} + +#[cfg(test)] +mod tests { + use borsh::BorshSerialize; + use gateway::types::PubkeyWrapper; + + use std::str::FromStr; + + use connection_router::state::ChainName; + use solana_program::pubkey::Pubkey; + + use super::*; + + #[test] + fn should_verify_msg_if_correct() { + let (source_gateway_address, _, tx, msg) = get_matching_msg_and_tx_block(); + assert_eq!( + Vote::SucceededOnChain, + verify_message(&source_gateway_address, &tx, &msg) + ); + } + + // Provides a matching [`EncodedConfirmedTransactionWithStatusMeta`] and [`Message`] fixtures for testing. + // Other tests may slightly modify the above provided test fixtures for generating negative + // cases. + fn get_matching_msg_and_tx_block() -> ( + String, + String, + EncodedConfirmedTransactionWithStatusMeta, + Message, + ) { + // Common fields among tx and message. + let tx_id = "fake_tx_id".to_string(); + let destination_chain = "eth".to_string(); + let destination_address = "0x0".to_string(); + let _payload: Vec = Vec::new(); + let payload_hash: [u8; 32] = [0; 32]; + let source_gateway_address: String = "sol_gateway_addr".to_string(); + let source_pubkey = Pubkey::from([0; 32]); + let source_address = PubkeyWrapper::from(source_pubkey); + + // Code below helps on generating the program log line for adding in the + // tests/solana_tx.json file and use it as test fixture. See the "logMessages" field + // on it. + + // println!( + // "------> {}", + // get_tx_log_message( + // source_address.clone(), + // destination_chain.clone().into_bytes(), + // destination_address.clone().into_bytes(), + // payload, + // payload_hash + // ) + // ); + + // We prefer to parse a tx from a json file, as its cleaner than filling types. + // Changing this "golden file" may result in broken tests. + let tx: EncodedConfirmedTransactionWithStatusMeta = + serde_json::from_str(include_str!("tests/solana_tx.json")).unwrap(); + + let message = Message { + tx_id: tx_id.clone(), + event_index: 0, + destination_address: destination_address.clone(), + destination_chain: ChainName::from_str(&destination_chain).unwrap(), + source_address: source_address.to_string(), + payload_hash, + }; + + (source_gateway_address, tx_id, tx, message) + } + + fn get_tx_log_message( + sender: PubkeyWrapper, + destination_chain: Vec, + destination_address: Vec, + payload: Vec, + payload_hash: [u8; 32], + ) -> String { + let event = gateway::events::GatewayEvent::CallContract { + sender, + destination_chain, + destination_address, + payload, + payload_hash, + }; + + let mut event_data = Vec::new(); + event.serialize(&mut event_data).unwrap(); + let event_data_b64 = general_purpose::STANDARD.encode(event_data); + let mut log_message = "Program data: ".to_string(); + log_message.push_str(&event_data_b64); + log_message + } + + #[test] + fn should_not_verify_msg_if_tx_id_does_not_match() { + let (source_gateway_address, _, tx, mut msg) = get_matching_msg_and_tx_block(); + msg.tx_id = "wrong_tx_id".to_string(); + assert_eq!( + Vote::FailedOnChain, + verify_message(&source_gateway_address, &tx, &msg) + ); + } + + #[ignore = "We are not checking the event index in production code."] + #[test] + fn should_not_verify_msg_if_event_index_does_not_match() { + let (gateway_address, _, tx, mut msg) = get_matching_msg_and_tx_block(); + msg.event_index = rand::random::(); + assert_eq!(Vote::NotFound, verify_message(&gateway_address, &tx, &msg)); + } + + #[test] + fn should_not_verify_msg_if_destination_chain_does_not_match() { + let (gateway_address, _, tx, mut msg) = get_matching_msg_and_tx_block(); + msg.destination_chain = ChainName::from_str("bad_chain").unwrap(); + assert_eq!( + Vote::FailedOnChain, + verify_message(&gateway_address, &tx, &msg) + ); + } + + #[test] + fn should_not_verify_msg_if_source_address_does_not_match() { + let (source_gateway_address, _, tx, mut msg) = get_matching_msg_and_tx_block(); + msg.source_address = PubkeyWrapper::from(Pubkey::from([13; 32])).to_string(); + assert_eq!( + Vote::FailedOnChain, + verify_message(&source_gateway_address, &tx, &msg) + ); + } + + #[test] + fn should_not_verify_msg_if_destination_address_does_not_match() { + let (gateway_address, _, tx, mut msg) = get_matching_msg_and_tx_block(); + msg.destination_address = "bad_address".to_string(); + assert_eq!( + Vote::FailedOnChain, + verify_message(&gateway_address, &tx, &msg) + ); + } + + #[test] + fn should_not_verify_msg_if_payload_hash_does_not_match() { + let (gateway_address, _, tx, mut msg) = get_matching_msg_and_tx_block(); + msg.payload_hash = [1; 32]; + assert_eq!( + Vote::FailedOnChain, + verify_message(&gateway_address, &tx, &msg) + ); + } + + #[test] + fn find_first_log_message_match_should_iterate_until_valid_match_found() { + let (gateway_address, tx_id, _, msg) = get_matching_msg_and_tx_block(); + + let log_messages = vec![ + bad_tx_log_message(), + not_matching_tx_log_message(&msg), + matching_tx_log_message(&msg), + ]; + + assert_eq!( + Some(2), + find_first_log_message_match( + &tx_id, + &log_messages, + &msg, + &vec![gateway_address.clone()], + &gateway_address + ) + ); + } + + fn bad_tx_log_message() -> String { + "BAD_LOG_MESSAGE".to_string() + } + + fn not_matching_tx_log_message(msg: &Message) -> String { + get_tx_log_message( + PubkeyWrapper::from(Pubkey::from_str(&msg.source_address).unwrap()), + "abr".as_bytes().to_vec(), + msg.destination_address.clone().into_bytes(), + Vec::new(), + msg.payload_hash, + ) // changing destination chain. + } + + fn matching_tx_log_message(msg: &Message) -> String { + get_tx_log_message( + PubkeyWrapper::from(Pubkey::from_str(&msg.source_address).unwrap()), + msg.destination_chain.to_string().into_bytes(), + msg.destination_address.clone().into_bytes(), + Vec::new(), + msg.payload_hash, + ) // not changing anything. Should match + } + + #[test] + fn find_first_log_message_match_should_stop_on_first_valid_match_found() { + let (gateway_address, tx_id, _, msg) = get_matching_msg_and_tx_block(); + + let log_messages = vec![ + not_matching_tx_log_message(&msg), + matching_tx_log_message(&msg), + matching_tx_log_message(&msg), + ]; + + assert_eq!( + Some(1), // index 1 + find_first_log_message_match( + &tx_id, + &log_messages, + &msg, + &vec![gateway_address.clone()], + &gateway_address + ) + ); + } + + #[test] + fn find_first_log_message_match_should_return_none_if_not_match() { + let (gateway_address, tx_id, _, msg) = get_matching_msg_and_tx_block(); + + let log_messages = vec![not_matching_tx_log_message(&msg), bad_tx_log_message()]; + + assert_eq!( + None, // index 1 + find_first_log_message_match( + &tx_id, + &log_messages, + &msg, + &vec![gateway_address.clone()], + &gateway_address + ) + ); + } +} From 50c07d13051cd8cab85ff571f58db1bd8907672b Mon Sep 17 00:00:00 2001 From: eloylp Date: Fri, 23 Feb 2024 12:45:51 +0100 Subject: [PATCH 014/109] refactor: move workerset verifier logic to its own file --- ampd/src/handlers/solana_verify_worker_set.rs | 2 +- ampd/src/solana/mod.rs | 2 +- ampd/src/solana/{verifier.rs => ws_verifier.rs} | 0 3 files changed, 2 insertions(+), 2 deletions(-) rename ampd/src/solana/{verifier.rs => ws_verifier.rs} (100%) diff --git a/ampd/src/handlers/solana_verify_worker_set.rs b/ampd/src/handlers/solana_verify_worker_set.rs index 8b58878a5..d2b5afeda 100644 --- a/ampd/src/handlers/solana_verify_worker_set.rs +++ b/ampd/src/handlers/solana_verify_worker_set.rs @@ -18,7 +18,7 @@ use crate::event_processor::EventHandler; use crate::handlers::errors::Error; use crate::queue::queued_broadcaster::BroadcasterClient; use crate::solana::json_rpc::SolanaClient; -use crate::solana::verifier::{parse_gateway_event, verify_worker_set, GatewayEvent}; +use crate::solana::ws_verifier::{parse_gateway_event, verify_worker_set, GatewayEvent}; use crate::types::{TMAddress, U256}; type Result = error_stack::Result; diff --git a/ampd/src/solana/mod.rs b/ampd/src/solana/mod.rs index e5ce33273..a159ca38b 100644 --- a/ampd/src/solana/mod.rs +++ b/ampd/src/solana/mod.rs @@ -1,4 +1,4 @@ pub mod json_rpc; mod pub_key_wrapper; -pub mod verifier; +pub mod ws_verifier; diff --git a/ampd/src/solana/verifier.rs b/ampd/src/solana/ws_verifier.rs similarity index 100% rename from ampd/src/solana/verifier.rs rename to ampd/src/solana/ws_verifier.rs From 914f52c1b412a8eb4ec20082a8a5222c6794e8ba Mon Sep 17 00:00:00 2001 From: eloylp Date: Sat, 24 Feb 2024 12:01:01 +0100 Subject: [PATCH 015/109] refactor: Move solana msg verification helpers to its own file. --- ampd/src/handlers/solana_verify_msg.rs | 2 +- ampd/src/solana/mod.rs | 2 +- ampd/src/solana/{verifier.rs => msg_verifier.rs} | 0 3 files changed, 2 insertions(+), 2 deletions(-) rename ampd/src/solana/{verifier.rs => msg_verifier.rs} (100%) diff --git a/ampd/src/handlers/solana_verify_msg.rs b/ampd/src/handlers/solana_verify_msg.rs index 91a51fa3b..c826dd7d2 100644 --- a/ampd/src/handlers/solana_verify_msg.rs +++ b/ampd/src/handlers/solana_verify_msg.rs @@ -16,7 +16,7 @@ use voting_verifier::msg::ExecuteMsg; use crate::event_processor::EventHandler; use crate::handlers::errors::Error; use crate::queue::queued_broadcaster::BroadcasterClient; -use crate::solana::{json_rpc::SolanaClient, verifier::verify_message}; +use crate::solana::{json_rpc::SolanaClient, msg_verifier::verify_message}; use crate::types::TMAddress; type Result = error_stack::Result; diff --git a/ampd/src/solana/mod.rs b/ampd/src/solana/mod.rs index c09953328..73600170a 100644 --- a/ampd/src/solana/mod.rs +++ b/ampd/src/solana/mod.rs @@ -1,4 +1,4 @@ pub mod json_rpc; pub mod ws_verifier; -pub mod verifier; +pub mod msg_verifier; diff --git a/ampd/src/solana/verifier.rs b/ampd/src/solana/msg_verifier.rs similarity index 100% rename from ampd/src/solana/verifier.rs rename to ampd/src/solana/msg_verifier.rs From 135867524461db6b483297bf22e58e0f10a8bbf3 Mon Sep 17 00:00:00 2001 From: eloylp Date: Sun, 25 Feb 2024 12:26:30 +0100 Subject: [PATCH 016/109] Ignore exploratory tests --- ampd/src/solana/json_rpc.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ampd/src/solana/json_rpc.rs b/ampd/src/solana/json_rpc.rs index 028794a27..f92aa0bf6 100644 --- a/ampd/src/solana/json_rpc.rs +++ b/ampd/src/solana/json_rpc.rs @@ -72,6 +72,7 @@ mod tests { const RPC_URL: &str = "http://127.0.0.1:8899"; // default. + #[ignore = "Exploratory test, still not intended to run in CI"] #[async_test] async fn test_get_transaction_works() { // pubkey: EHgEeD1Z3pc29s3JKhfVv9AGk7HkQFZKkcHbkypdN1h6 @@ -84,6 +85,7 @@ mod tests { println!("tx - {:?}", tx.transaction); } + #[ignore = "Exploratory test, still not intended to run in CI"] #[async_test] async fn test_get_account_works() { let url = Url::from_str(RPC_URL).unwrap(); From 30b3b73ee04a00a583cc10a591a0392975fd7102 Mon Sep 17 00:00:00 2001 From: eloylp Date: Mon, 26 Feb 2024 16:45:02 +0100 Subject: [PATCH 017/109] Replace raw rpc client with solana non blocking RPC client --- Cargo.lock | 132 +++++++++--------- ampd/Cargo.toml | 4 +- ampd/src/handlers/solana_verify_msg.rs | 95 ++++++++----- ampd/src/handlers/solana_verify_worker_set.rs | 62 ++++---- ampd/src/lib.rs | 13 +- ampd/src/solana/json_rpc.rs | 99 +++---------- ampd/src/solana/mod.rs | 2 + ampd/src/solana/msg_verifier.rs | 2 +- ampd/src/solana/test_utils.rs | 128 +++++++++++++++++ ampd/src/solana/tests/solana_tx.json | 2 +- ampd/src/solana/ws_verifier.rs | 68 ++------- 11 files changed, 336 insertions(+), 271 deletions(-) create mode 100644 ampd/src/solana/test_utils.rs diff --git a/Cargo.lock b/Cargo.lock index 0b2753ac2..70ce8a689 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -253,8 +253,10 @@ dependencies = [ "solana-account-decoder", "solana-client", "solana-program", + "solana-rpc-client-api", "solana-sdk", "solana-transaction-status", + "solana-version", "sui-json-rpc-types", "sui-types", "tendermint 0.33.0", @@ -767,7 +769,7 @@ dependencies = [ [[package]] name = "auth-weighted" version = "0.1.0" -source = "git+ssh://git@github.com/eigerco/solana-axelar.git?branch=poc#13016c2786b1e2a5dcfa1978dab24c6f95498ae8" +source = "git+ssh://git@github.com/eigerco/solana-axelar.git?branch=poc#465b8510cfdebd10d2a43eba70175af5c7793f70" dependencies = [ "base64 0.21.7", "bimap", @@ -4091,7 +4093,7 @@ dependencies = [ [[package]] name = "gmp-gateway" version = "0.1.0" -source = "git+ssh://git@github.com/eigerco/solana-axelar.git?branch=poc#13016c2786b1e2a5dcfa1978dab24c6f95498ae8" +source = "git+ssh://git@github.com/eigerco/solana-axelar.git?branch=poc#465b8510cfdebd10d2a43eba70175af5c7793f70" dependencies = [ "base64 0.21.7", "bcs", @@ -7103,7 +7105,7 @@ dependencies = [ [[package]] name = "program-utils" version = "0.1.0" -source = "git+ssh://git@github.com/eigerco/solana-axelar.git?branch=poc#13016c2786b1e2a5dcfa1978dab24c6f95498ae8" +source = "git+ssh://git@github.com/eigerco/solana-axelar.git?branch=poc#465b8510cfdebd10d2a43eba70175af5c7793f70" dependencies = [ "borsh 1.3.1", "solana-program", @@ -8680,9 +8682,9 @@ dependencies = [ [[package]] name = "solana-account-decoder" -version = "1.18.2" +version = "1.18.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bd91a5ca8d11b9a5298afc32ecb857a98ba048a6b1e19e929f272f6bb239651" +checksum = "9f5ba1852904b2b26c5f190ca975a2d7e8aee6bdff366ca82736319dace48605" dependencies = [ "Inflector", "base64 0.21.7", @@ -8705,9 +8707,9 @@ dependencies = [ [[package]] name = "solana-clap-utils" -version = "1.18.2" +version = "1.18.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "789723b125f742e4d409736d49cb67bf3f87247560e951e5cd2c52d639233a7e" +checksum = "081e1011b51057b0eb6ade69765044202382d1b069ef972affd94d1ffeb2e2f3" dependencies = [ "chrono", "clap 2.34.0", @@ -8722,9 +8724,9 @@ dependencies = [ [[package]] name = "solana-client" -version = "1.18.2" +version = "1.18.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "669f4ecaff8253fe9d73ce73525fe821e9996bdb176beba3379be755bfbcd492" +checksum = "cb98421ed1cf332cc70bc20bcae20d20d346a2b25e6c3881a59a8b777d003d42" dependencies = [ "async-trait", "bincode", @@ -8755,9 +8757,9 @@ dependencies = [ [[package]] name = "solana-config-program" -version = "1.18.2" +version = "1.18.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39c9dae6fffda9e8cc9d2589a267b0c2a26e7f91144c05be09417196c91a2219" +checksum = "08a47ba0f28136be5ddae79eff27284c4f961200ceef93c1277a11a366dacf0f" dependencies = [ "bincode", "chrono", @@ -8769,9 +8771,9 @@ dependencies = [ [[package]] name = "solana-connection-cache" -version = "1.18.2" +version = "1.18.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fec914cc2e0cde1c332a9ffb2b2dd8735916847b0280d2b01f9bc3e38386c062" +checksum = "9d179cb54022a4a14375f8dd6120213d6390a002c7d48eef4d052ff975c44216" dependencies = [ "async-trait", "bincode", @@ -8791,9 +8793,9 @@ dependencies = [ [[package]] name = "solana-frozen-abi" -version = "1.18.2" +version = "1.18.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f97bbed79e7fd14e1c48411ce217f305972e7151f14b3124f3956fc13aac76b" +checksum = "6b502de106324a6feecf2abedab8ab8cb16c180b3797d16579c4206bb5550176" dependencies = [ "block-buffer 0.10.4", "bs58 0.4.0", @@ -8816,9 +8818,9 @@ dependencies = [ [[package]] name = "solana-frozen-abi-macro" -version = "1.18.2" +version = "1.18.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22b989fb872d2ba530ecb6e504284e3e1244eeb7541056c40fe2d87c7d0bb9d1" +checksum = "ade5285dc4d89b156de13ad308239fdda7bb0ff4eaeb1de6cd289520a9418a3b" dependencies = [ "proc-macro2 1.0.78", "quote 1.0.35", @@ -8828,9 +8830,9 @@ dependencies = [ [[package]] name = "solana-logger" -version = "1.18.2" +version = "1.18.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51eacf4e4043d28190ad0c5ff9443fa5fc19f91fabb3ffe72ad22c428231f1a0" +checksum = "ed8e63a05f8f78cab42d8a034aefeb8e0d57d6d9cb7de10afb67f2a0645c99d0" dependencies = [ "env_logger", "lazy_static", @@ -8839,9 +8841,9 @@ dependencies = [ [[package]] name = "solana-measure" -version = "1.18.2" +version = "1.18.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c3723604fb5fd8a6d032597aea2fc677d124a7835022eed5ae41bb3d7017e9f" +checksum = "26e9310bc7cbbde27adf633c5698c8d62016afd1709559a62187c245a23fd884" dependencies = [ "log", "solana-sdk", @@ -8849,9 +8851,9 @@ dependencies = [ [[package]] name = "solana-metrics" -version = "1.18.2" +version = "1.18.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89bd1112e5fd71344b1de1bbbffb23b9e28c698bdc8fac3c034e5b84b2179f4e" +checksum = "ce9cf34086c6d81a615bbd4937e5807c2ffb0476fe8bd248afa5e281b9b19523" dependencies = [ "crossbeam-channel", "gethostname", @@ -8864,9 +8866,9 @@ dependencies = [ [[package]] name = "solana-net-utils" -version = "1.18.2" +version = "1.18.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c77d3226d7baa8aa34d28e2b72d2e8c7a426b7195da73e62a5b5b1ff398a49d4" +checksum = "a7e8b06d387917c3e523651ccf204d2cd8460435d00aa4a2eb593292e5ac2111" dependencies = [ "bincode", "clap 3.2.25", @@ -8886,9 +8888,9 @@ dependencies = [ [[package]] name = "solana-perf" -version = "1.18.2" +version = "1.18.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a60ebbc10fce91bdbe4f970011ac474eba97138bda48416564100c73882ac1d7" +checksum = "8f0e455bf3b4ca20bb3fc9408715443e4afcfc9842e289f9677d7fff51b16b03" dependencies = [ "ahash 0.8.9", "bincode", @@ -8915,9 +8917,9 @@ dependencies = [ [[package]] name = "solana-program" -version = "1.18.2" +version = "1.18.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b5d8a2694dc792ee9ae4af09cf8995e21cc9366846001e8ee1e6f060a837518" +checksum = "0d8f5554522403aa27017aafb452adc63a37429d83f6e44a16b2c50fbb528688" dependencies = [ "ark-bn254", "ark-ec", @@ -8970,9 +8972,9 @@ dependencies = [ [[package]] name = "solana-program-runtime" -version = "1.18.2" +version = "1.18.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a93561006a60b9c9d3466a2309a35778b5b4ee7d6a7c2f6e5aef3d9cfdf288e8" +checksum = "42360d5eb170d5159584d36583685abce29bd2cdf19635eed81dbbf372221bcc" dependencies = [ "base64 0.21.7", "bincode", @@ -8998,9 +9000,9 @@ dependencies = [ [[package]] name = "solana-pubsub-client" -version = "1.18.2" +version = "1.18.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1599618f845531fee0463d4bf161cf9ef0f8b305cf4f3763504c7f89db216f37" +checksum = "6758dfbe81eb3ed01abb85ad576223e0820ca91e21ae12ee0b5ea28cb4713dd3" dependencies = [ "crossbeam-channel", "futures-util", @@ -9023,9 +9025,9 @@ dependencies = [ [[package]] name = "solana-quic-client" -version = "1.18.2" +version = "1.18.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "add1050ce19ea95bf304902188c9728c0cb2455b5c812e6256354fd36a0c0fa8" +checksum = "19b1ce631a1d9d946cb0c3eddb7466553a825c748da1ca1761af87cbd4bb1b4d" dependencies = [ "async-mutex", "async-trait", @@ -9050,9 +9052,9 @@ dependencies = [ [[package]] name = "solana-rayon-threadlimit" -version = "1.18.2" +version = "1.18.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af715bdffdb5a6f6206fa9e333b61e5335364e0ecd7a057a8b56e5a330bc03f8" +checksum = "98ea35b9744ad906cdd7992c6395dd1fc862581f49057950a1a3e62ad5ce3de9" dependencies = [ "lazy_static", "num_cpus", @@ -9060,9 +9062,9 @@ dependencies = [ [[package]] name = "solana-remote-wallet" -version = "1.18.2" +version = "1.18.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25328c0b1547e8645548416e84348eb0219458b09da5e1328705f58fe7022c16" +checksum = "c6074895494a5792c6a74db23722b72ff09753c3cdd526b4134f101e6f6e799a" dependencies = [ "console", "dialoguer", @@ -9079,9 +9081,9 @@ dependencies = [ [[package]] name = "solana-rpc-client" -version = "1.18.2" +version = "1.18.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f99d307eb6792a6c572378bf37d4bfa77524ab60e93511dc15b3764372bfbd14" +checksum = "f728fdda62cc13a02ab21cdf312ec750f7afb703988cf38770888bc99899adff" dependencies = [ "async-trait", "base64 0.21.7", @@ -9105,9 +9107,9 @@ dependencies = [ [[package]] name = "solana-rpc-client-api" -version = "1.18.2" +version = "1.18.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5ed446ea327a13a1856f2d521733785131fe726af365616b61fbc011add8c9b" +checksum = "caefbfc9992fda91faccd9b6f2215411184038336731c2349702aeaad3ccc26a" dependencies = [ "base64 0.21.7", "bs58 0.4.0", @@ -9127,9 +9129,9 @@ dependencies = [ [[package]] name = "solana-rpc-client-nonce-utils" -version = "1.18.2" +version = "1.18.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00f55595decb6f1f5c4c7a8f1fe792594de9fe730b0d0aa97d3d1f8add8fe1a2" +checksum = "0e56227b0379a01ebe4c7f021459ad0d567daeff8528f93e180d7e736186427e" dependencies = [ "clap 2.34.0", "solana-clap-utils", @@ -9140,9 +9142,9 @@ dependencies = [ [[package]] name = "solana-sdk" -version = "1.18.2" +version = "1.18.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ca911aefaa0fee2995bdfeb532ece9b35358e48566a41701c0ed33e716d07b3" +checksum = "ff3a1e6cff76b833f3e0fff142a53ab2f1b4db5001b92694f1ba4081b0c004f5" dependencies = [ "assert_matches", "base64 0.21.7", @@ -9195,9 +9197,9 @@ dependencies = [ [[package]] name = "solana-sdk-macro" -version = "1.18.2" +version = "1.18.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2395961f455e2b2ec9b64d945e3e9db760ccce10716f40a3e947a1e399c7511e" +checksum = "19298eac5bb77a1f0ffff810dca03c32d92ae9013d1ad4e50dc32b01b74b3a4d" dependencies = [ "bs58 0.4.0", "proc-macro2 1.0.78", @@ -9214,9 +9216,9 @@ checksum = "468aa43b7edb1f9b7b7b686d5c3aeb6630dc1708e86e31343499dd5c4d775183" [[package]] name = "solana-streamer" -version = "1.18.2" +version = "1.18.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e232660917f042dd90f9b91d72e650118251b590d45e545102fc66bc4de89ee3" +checksum = "934e383746f8e8804f242952336cc6de81addba809cfcbfc48de3c4e9925c9e6" dependencies = [ "async-channel", "bytes", @@ -9246,9 +9248,9 @@ dependencies = [ [[package]] name = "solana-thin-client" -version = "1.18.2" +version = "1.18.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2bbcca3e1eb0967e922db81f04055da00cc6b40a010c7c25474efc3146e6419" +checksum = "a07c9758cb44c5f9deff886f007bd30407f3aa9e0635e005f262344e43c0360d" dependencies = [ "bincode", "log", @@ -9261,9 +9263,9 @@ dependencies = [ [[package]] name = "solana-tpu-client" -version = "1.18.2" +version = "1.18.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c62e92fee2205af028d4c9915e8d8eacf88fad6a66376975141e81a17da043e" +checksum = "0bbf44a593af745b854340dd47b7445b86381c4b44371056858dcba016de260c" dependencies = [ "async-trait", "bincode", @@ -9285,9 +9287,9 @@ dependencies = [ [[package]] name = "solana-transaction-status" -version = "1.18.2" +version = "1.18.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24195f4eb0d29463172854a01946b7b3dd9a657cc69e474c8477c29fa98fb932" +checksum = "2a7584071ddb3ad598e19871145e23765a30f53caa2bd61a6acd075d11132423" dependencies = [ "Inflector", "base64 0.21.7", @@ -9310,9 +9312,9 @@ dependencies = [ [[package]] name = "solana-udp-client" -version = "1.18.2" +version = "1.18.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbb650239ab659864da1066c23d4cc60a9547e1f5c27e5fcae4c429799bb9f3e" +checksum = "35c7c0fd0015d4d06dc5fe5fc46e741b34edd28c246196b205516a77ebf68f5c" dependencies = [ "async-trait", "solana-connection-cache", @@ -9325,9 +9327,9 @@ dependencies = [ [[package]] name = "solana-version" -version = "1.18.2" +version = "1.18.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2070bbdf2292d094a397520128d1aacaef898bbb2ce44cb45f8b66af48c7791" +checksum = "ed3f96d4347f0dc9794880c111ad63ad7838f8efa74924f96b9dc6d2596dff70" dependencies = [ "log", "rustc_version", @@ -9341,9 +9343,9 @@ dependencies = [ [[package]] name = "solana-vote-program" -version = "1.18.2" +version = "1.18.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9feb0404020b99dffa176aea9247a21e536cc1c2d603750076999ebc6770a09d" +checksum = "9b52ae9fe3dbdd762af58be3e79bddb08530b74aedbfdb64a1ff5a5dc745129b" dependencies = [ "bincode", "log", @@ -9363,9 +9365,9 @@ dependencies = [ [[package]] name = "solana-zk-token-sdk" -version = "1.18.2" +version = "1.18.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36c59afea5e1d64af06f803ed41733f6e829874daff054ca6add36b320db74e2" +checksum = "1b416ff09bc07d5974a7ea225e92ab284437983cd164fd3f8be4b44e8723eb07" dependencies = [ "aes-gcm-siv", "base64 0.21.7", diff --git a/ampd/Cargo.toml b/ampd/Cargo.toml index f586831d1..25c22b58a 100644 --- a/ampd/Cargo.toml +++ b/ampd/Cargo.toml @@ -43,6 +43,8 @@ solana-account-decoder = "1.18.1" solana-client = "1.18.1" solana-program = "1.18.1" solana-sdk = "1.18.1" +solana-rpc-client-api = "1.18.1" +solana-version = "1.18.1" solana-transaction-status = "1.18.1" sui-json-rpc-types = { git = "https://github.com/mystenlabs/sui", tag = "mainnet-v1.14.2" } sui-types = { git = "https://github.com/mystenlabs/sui", features = [ @@ -68,7 +70,7 @@ url = "2.3.1" valuable = { version = "0.1.0", features = ["derive"] } valuable-serde = { version = "0.1.0", features = ["std"] } voting-verifier = { workspace = true } -auth-weighted = { git = "ssh://git@github.com/eigerco/solana-axelar.git", branch = "poc"} ## Temporary POC repo import while its not public. +auth-weighted = { git = "ssh://git@github.com/eigerco/solana-axelar.git", branch = "poc" } ## Temporary POC repo import while its not public. gmp-gateway = { git = "ssh://git@github.com/eigerco/solana-axelar.git", branch = "poc" } [dev-dependencies] diff --git a/ampd/src/handlers/solana_verify_msg.rs b/ampd/src/handlers/solana_verify_msg.rs index c826dd7d2..72d497c2e 100644 --- a/ampd/src/handlers/solana_verify_msg.rs +++ b/ampd/src/handlers/solana_verify_msg.rs @@ -2,9 +2,12 @@ use async_trait::async_trait; use cosmrs::cosmwasm::MsgExecuteContract; use error_stack::ResultExt; use serde::Deserialize; -use solana_transaction_status::EncodedConfirmedTransactionWithStatusMeta; +use solana_client::nonblocking::rpc_client::RpcClient; +use solana_sdk::signature::Signature; +use solana_transaction_status::{EncodedConfirmedTransactionWithStatusMeta, UiTransactionEncoding}; use std::collections::HashSet; use std::convert::TryInto; +use std::str::FromStr; use tracing::info; use axelar_wasm_std::voting::{PollId, Vote}; @@ -16,7 +19,7 @@ use voting_verifier::msg::ExecuteMsg; use crate::event_processor::EventHandler; use crate::handlers::errors::Error; use crate::queue::queued_broadcaster::BroadcasterClient; -use crate::solana::{json_rpc::SolanaClient, msg_verifier::verify_message}; +use crate::solana::msg_verifier::verify_message; use crate::types::TMAddress; type Result = error_stack::Result; @@ -44,27 +47,25 @@ struct PollStartedEvent { expires_at: u64, } -pub struct Handler +pub struct Handler where - C: SolanaClient + Send + Sync, B: BroadcasterClient, { worker: TMAddress, voting_verifier: TMAddress, - rpc_client: C, + rpc_client: RpcClient, broadcast_client: B, latest_block_height: Receiver, } -impl Handler +impl Handler where - C: SolanaClient + Send + Sync, B: BroadcasterClient, { pub fn new( worker: TMAddress, voting_verifier: TMAddress, - rpc_client: C, + rpc_client: RpcClient, broadcast_client: B, latest_block_height: Receiver, ) -> Self { @@ -94,9 +95,8 @@ where } #[async_trait] -impl EventHandler for Handler +impl EventHandler for Handler where - C: SolanaClient + Send + Sync, B: BroadcasterClient + Send + Sync, { type Err = Error; @@ -135,7 +135,14 @@ where let mut sol_txs: Vec = Vec::new(); for msg_tx in tx_ids_from_msg { - let sol_tx = self.rpc_client.get_transaction(&msg_tx).await.map_err(|_|Error::TxReceipts)?; + let sol_tx = self + .rpc_client + .get_transaction( + &Signature::from_str(&msg_tx).unwrap(), + UiTransactionEncoding::Json, + ) + .await + .map_err(|_| Error::TxReceipts)?; sol_txs.push(sol_tx); } @@ -157,13 +164,14 @@ mod test { use axelar_wasm_std::nonempty; use base64::{engine::general_purpose::STANDARD, Engine}; use events::Event; + use solana_client::rpc_request::RpcRequest; use tendermint::abci; use tokio::sync::watch; use voting_verifier::events::{PollMetadata, PollStarted, TxEventConfirmation}; use crate::{ queue::queued_broadcaster::MockBroadcasterClient, - solana::json_rpc::MockSolanaClient, + solana::test_utils::rpc_client_with_recorder, types::{EVMAddress, Hash}, PREFIX, }; @@ -185,11 +193,8 @@ mod test { .expect_broadcast::() .once() .returning(|_| Ok(())); - let mut sol_client = MockSolanaClient::new(); - sol_client - .expect_get_transaction() - .times(2) - .returning(|_| Ok(dummy_tx_type())); + + let (rpc_client, rpc_recorder) = rpc_client_with_recorder(); let event: Event = get_event( get_poll_started_event(participants(5, Some(worker.clone())), 100), @@ -197,9 +202,13 @@ mod test { ); let handler = - super::Handler::new(worker, voting_verifier, sol_client, broadcast_client, rx); + super::Handler::new(worker, voting_verifier, rpc_client, broadcast_client, rx); handler.handle(&event).await.unwrap(); + assert_eq!( + Some(&2), + rpc_recorder.read().await.get(&RpcRequest::GetTransaction) + ); } #[async_test] @@ -216,11 +225,8 @@ mod test { .expect_broadcast::() .once() .returning(|_| Ok(())); - let mut sol_client = MockSolanaClient::new(); - sol_client - .expect_get_transaction() - .once() // Only the first msg is verified, skipping the duplicated one. - .returning(|_| Ok(dummy_tx_type())); + + let (rpc_client, rpc_recorder) = rpc_client_with_recorder(); let event: Event = get_event( get_poll_started_event_with_duplicates(participants(5, Some(worker.clone())), 100), @@ -228,9 +234,14 @@ mod test { ); let handler = - super::Handler::new(worker, voting_verifier, sol_client, broadcast_client, rx); + super::Handler::new(worker, voting_verifier, rpc_client, broadcast_client, rx); handler.handle(&event).await.unwrap(); + + assert_eq!( + Some(&1), + rpc_recorder.read().await.get(&RpcRequest::GetTransaction) + ); } fn dummy_tx_type() -> EncodedConfirmedTransactionWithStatusMeta { @@ -252,8 +263,7 @@ mod test { .expect_broadcast::() .never(); - let mut sol_client = MockSolanaClient::new(); - sol_client.expect_get_transaction().never(); + let (rpc_client, rpc_recorder) = rpc_client_with_recorder(); let event: Event = get_event( get_poll_started_event(participants(5, Some(worker.clone())), 100), @@ -261,9 +271,14 @@ mod test { ); let handler = - super::Handler::new(worker, voting_verifier, sol_client, broadcast_client, rx); + super::Handler::new(worker, voting_verifier, rpc_client, broadcast_client, rx); handler.handle(&event).await.unwrap(); + + assert_eq!( + None, + rpc_recorder.read().await.get(&RpcRequest::GetTransaction) + ); } #[async_test] @@ -280,8 +295,7 @@ mod test { .expect_broadcast::() .never(); - let mut sol_client = MockSolanaClient::new(); - sol_client.expect_get_transaction().never(); + let (rpc_client, rpc_recorder) = rpc_client_with_recorder(); let event: Event = get_event( get_poll_started_event(participants(5, None), 100), // This worker is not in participant set. So will skip the event. @@ -289,9 +303,14 @@ mod test { ); let handler = - super::Handler::new(worker, voting_verifier, sol_client, broadcast_client, rx); + super::Handler::new(worker, voting_verifier, rpc_client, broadcast_client, rx); handler.handle(&event).await.unwrap(); + + assert_eq!( + None, + rpc_recorder.read().await.get(&RpcRequest::GetTransaction) + ); } #[async_test] @@ -308,8 +327,7 @@ mod test { .expect_broadcast::() .never(); - let mut sol_client = MockSolanaClient::new(); - sol_client.expect_get_transaction().never(); + let (rpc_client, rpc_recorder) = rpc_client_with_recorder(); let event: Event = get_event( get_poll_started_event(participants(5, Some(worker.clone())), 100), @@ -317,9 +335,14 @@ mod test { ); let handler = - super::Handler::new(worker, voting_verifier, sol_client, broadcast_client, rx); + super::Handler::new(worker, voting_verifier, rpc_client, broadcast_client, rx); handler.handle(&event).await.unwrap(); + + assert_eq!( + None, + rpc_recorder.read().await.get(&RpcRequest::GetTransaction) + ); } fn get_event(event: impl Into, contract_address: &TMAddress) -> Event { @@ -364,7 +387,7 @@ mod test { }, messages: vec![ TxEventConfirmation { - tx_id: format!("0x{:x}", Hash::random()).parse().unwrap(), + tx_id: nonempty::String::from_str("3GLo4z4siudHxW1BMHBbkTKy7kfbssNFaxLR5hTjhEXCUzp2Pi2VVwybc1s96pEKjRre7CcKKeLhni79zWTNUseP").unwrap(), event_index: 10, source_address: "sol".to_string().parse().unwrap(), destination_chain: "ethereum".parse().unwrap(), @@ -372,7 +395,7 @@ mod test { payload_hash: Hash::random().to_fixed_bytes(), }, TxEventConfirmation { - tx_id: format!("0x{:x}", Hash::random()).parse().unwrap(), + tx_id: nonempty::String::from_str("41SgBTfsWbkdixDdVNESM6YmDAzEcKEubGPkaXmtTVUd2EhMaqPEy3qh5ReTtTb4Le4F16SSBFjQCxkekamNrFNT").unwrap(), event_index: 11, source_address: "sol".to_string().parse().unwrap(), destination_chain: "ethereum".parse().unwrap(), @@ -387,7 +410,7 @@ mod test { participants: Vec, expires_at: u64, ) -> PollStarted { - let tx_id: nonempty::String = format!("0x{:x}", Hash::random()).parse().unwrap(); + let tx_id = nonempty::String::from_str("41SgBTfsWbkdixDdVNESM6YmDAzEcKEubGPkaXmtTVUd2EhMaqPEy3qh5ReTtTb4Le4F16SSBFjQCxkekamNrFNT").unwrap(); PollStarted::Messages { metadata: PollMetadata { poll_id: "100".parse().unwrap(), diff --git a/ampd/src/handlers/solana_verify_worker_set.rs b/ampd/src/handlers/solana_verify_worker_set.rs index a69bc0b3b..c80df30f1 100644 --- a/ampd/src/handlers/solana_verify_worker_set.rs +++ b/ampd/src/handlers/solana_verify_worker_set.rs @@ -3,6 +3,9 @@ use std::convert::TryInto; use cosmrs::cosmwasm::MsgExecuteContract; use error_stack::ResultExt; use serde::Deserialize; +use solana_sdk::signature::Signature; +use solana_transaction_status::UiTransactionEncoding; +use std::str::FromStr; use tokio::sync::watch::Receiver; use tracing::info; @@ -12,12 +15,12 @@ use events_derive::try_from; use axelar_wasm_std::voting::{PollId, Vote}; use connection_router::state::ChainName; +use solana_client::nonblocking::rpc_client::RpcClient; use voting_verifier::msg::ExecuteMsg; use crate::event_processor::EventHandler; use crate::handlers::errors::Error; use crate::queue::queued_broadcaster::BroadcasterClient; -use crate::solana::json_rpc::SolanaClient; use crate::solana::ws_verifier::{parse_gateway_event, verify_worker_set}; use crate::types::{TMAddress, U256}; @@ -52,29 +55,27 @@ struct PollStartedEvent { participants: Vec, } -pub struct Handler +pub struct Handler where - C: SolanaClient + Send + Sync, B: BroadcasterClient, { worker: TMAddress, voting_verifier: TMAddress, chain: ChainName, - rpc_client: C, + rpc_client: RpcClient, broadcast_client: B, latest_block_height: Receiver, } -impl Handler +impl Handler where - C: SolanaClient + Send + Sync, B: BroadcasterClient, { pub fn new( worker: TMAddress, voting_verifier: TMAddress, chain: ChainName, - rpc_client: C, + rpc_client: RpcClient, broadcast_client: B, latest_block_height: Receiver, ) -> Self { @@ -109,9 +110,8 @@ where } #[async_trait] -impl EventHandler for Handler +impl EventHandler for Handler where - C: SolanaClient + Send + Sync, B: BroadcasterClient + Send + Sync, { type Err = Error; @@ -153,7 +153,10 @@ where let sol_tx = self .rpc_client - .get_transaction(&worker_set.tx_id) + .get_transaction( + &Signature::from_str(&worker_set.tx_id).unwrap(), + UiTransactionEncoding::Json, + ) .await .map_err(|_| Error::TxReceipts)?; // Todo, maybe we should check wether this is an empty response or a network failure. The later, should throw Error::TxReceipts. But if the RPC clients fails on a not found entity, we should probably emit Vote::FailedOnChain vote instead. @@ -166,14 +169,14 @@ where _ => return self.broadcast_vote(poll_id, Vote::FailedOnChain).await, }; - let account_info = self + let account_data = self .rpc_client - .get_account_info(&pub_key.to_string()) + .get_account_data(&pub_key) .await .map_err(|_| Error::TxReceipts)?; // Todo, maybe we should check wether this is an empty response or a network failure. The later, should throw Error::TxReceipts. But if the RPC clients fails on a not found entity, we should probably emit Vote::FailedOnChain vote instead. let vote = - verify_worker_set(&source_gateway_address, &sol_tx, &worker_set, &account_info).await; + verify_worker_set(&source_gateway_address, &sol_tx, &worker_set, &account_data).await; self.broadcast_vote(poll_id, vote).await } } @@ -185,12 +188,13 @@ mod tests { use axelar_wasm_std::{nonempty, operators::Operators}; use cosmwasm_std::HexBinary; use prost::Message; + use solana_client::rpc_request::RpcRequest; use tokio::sync::watch; use voting_verifier::events::{PollMetadata, PollStarted, WorkerSetConfirmation}; use crate::{ handlers::tests::get_event, queue::queued_broadcaster::MockBroadcasterClient, - solana::json_rpc::MockSolanaClient, PREFIX, + solana::test_utils::rpc_client_with_recorder, PREFIX, }; use tokio::test as async_test; @@ -202,9 +206,7 @@ mod tests { let worker = TMAddress::random(PREFIX); let voting_verifier = TMAddress::random(PREFIX); - let mut rpc_client = MockSolanaClient::new(); - rpc_client.expect_get_transaction().never(); - rpc_client.expect_get_account_info().never(); + let (rpc_client, rpc_recorder) = rpc_client_with_recorder(); let broadcast_client = MockBroadcasterClient::new(); @@ -226,6 +228,9 @@ mod tests { ); handler.handle(&event).await.unwrap(); + + assert_eq!(None, rpc_recorder.read().await.get(&RpcRequest::GetTransaction)); + assert_eq!(None, rpc_recorder.read().await.get(&RpcRequest::GetAccountInfo)); } #[async_test] @@ -233,9 +238,7 @@ mod tests { let worker = TMAddress::random(PREFIX); let voting_verifier = TMAddress::random(PREFIX); - let mut rpc_client = MockSolanaClient::new(); - rpc_client.expect_get_transaction().never(); - rpc_client.expect_get_account_info().never(); + let (rpc_client, rpc_recorder) = rpc_client_with_recorder(); let broadcast_client = MockBroadcasterClient::new(); let expiration = 100u64; @@ -255,7 +258,10 @@ mod tests { &voting_verifier, ); - handler.handle(&event).await.unwrap(); + handler.handle(&event).await.unwrap(); + + assert_eq!(None, rpc_recorder.read().await.get(&RpcRequest::GetTransaction)); + assert_eq!(None, rpc_recorder.read().await.get(&RpcRequest::GetAccountInfo)); } #[async_test] @@ -263,9 +269,7 @@ mod tests { let worker = TMAddress::random(PREFIX); let voting_verifier = TMAddress::random(PREFIX); - let mut rpc_client = MockSolanaClient::new(); - rpc_client.expect_get_transaction().never(); - rpc_client.expect_get_account_info().never(); + let (rpc_client, rpc_recorder) = rpc_client_with_recorder(); let broadcast_client = MockBroadcasterClient::new(); let expiration = 100u64; @@ -286,6 +290,9 @@ mod tests { ); handler.handle(&event).await.unwrap(); + + assert_eq!(None, rpc_recorder.read().await.get(&RpcRequest::GetTransaction)); + assert_eq!(None, rpc_recorder.read().await.get(&RpcRequest::GetAccountInfo)); } #[async_test] @@ -293,9 +300,7 @@ mod tests { let worker = TMAddress::random(PREFIX); let voting_verifier = TMAddress::random(PREFIX); - let mut rpc_client = MockSolanaClient::new(); - rpc_client.expect_get_transaction().never(); - rpc_client.expect_get_account_info().never(); + let (rpc_client, rpc_recorder) = rpc_client_with_recorder(); let broadcast_client = MockBroadcasterClient::new(); let expiration = 100u64; @@ -316,6 +321,9 @@ mod tests { ); handler.handle(&event).await.unwrap(); + + assert_eq!(None, rpc_recorder.read().await.get(&RpcRequest::GetTransaction)); + assert_eq!(None, rpc_recorder.read().await.get(&RpcRequest::GetAccountInfo)); } fn worker_set_poll_started_event(participants: Vec, expires_at: u64) -> PollStarted { diff --git a/ampd/src/lib.rs b/ampd/src/lib.rs index 56293984f..b65198068 100644 --- a/ampd/src/lib.rs +++ b/ampd/src/lib.rs @@ -5,6 +5,8 @@ use cosmos_sdk_proto::cosmos::{ auth::v1beta1::query_client::QueryClient, tx::v1beta1::service_client::ServiceClient, }; use error_stack::{FutureExt, Result, ResultExt}; +use solana_client::nonblocking::rpc_client::RpcClient; +use solana_sdk::commitment_config::CommitmentConfig; use thiserror::Error; use tokio::signal::unix::{signal, SignalKind}; use tokio::sync::oneshot; @@ -265,7 +267,10 @@ where handlers::solana_verify_msg::Handler::new( worker.clone(), cosmwasm_contract, - json_rpc::Client::new_http(&rpc_url).change_context(Error::Connection)?, + RpcClient::new_with_commitment( + rpc_url.to_string(), + CommitmentConfig::finalized(), + ), self.broadcaster.client(), self.block_height_monitor.latest_block_height(), ), @@ -279,8 +284,10 @@ where worker.clone(), cosmwasm_contract, chain.name, - json_rpc::Client::new_http(&chain.rpc_url) - .change_context(Error::Connection)?, + RpcClient::new_with_commitment( + chain.rpc_url.to_string(), + CommitmentConfig::finalized(), + ), self.broadcaster.client(), self.block_height_monitor.latest_block_height(), ), diff --git a/ampd/src/solana/json_rpc.rs b/ampd/src/solana/json_rpc.rs index f92aa0bf6..a4fe7b274 100644 --- a/ampd/src/solana/json_rpc.rs +++ b/ampd/src/solana/json_rpc.rs @@ -1,73 +1,9 @@ -use async_trait::async_trait; -use ethers::providers::{JsonRpcClient, ProviderError}; -use mockall::automock; -use serde::{Deserialize, Serialize}; -use solana_account_decoder::UiAccountEncoding; -use solana_sdk::commitment_config::{CommitmentConfig, CommitmentLevel}; -use solana_transaction_status::EncodedConfirmedTransactionWithStatusMeta; - -use crate::json_rpc::Client; - -type Result = error_stack::Result; - -#[derive(Debug, PartialEq, Serialize, Deserialize)] -pub struct AccountInfo { - pub value: AccountInfoValue, -} - -#[derive(Debug, PartialEq, Serialize, Deserialize)] -pub struct AccountInfoValue { - pub data: Vec, -} - -#[automock] -#[async_trait] -pub trait SolanaClient { - async fn get_transaction( - &self, - signature_str: &str, - ) -> Result; - - async fn get_account_info(&self, pub_key: &str) -> Result; -} - -#[async_trait] -impl

SolanaClient for Client

-where - P: JsonRpcClient + Send + Sync + 'static, -{ - // Gets an account with default commitment set to finalized. See (https://solana.com/docs/rpc/http/gettransaction) - async fn get_transaction( - &self, - signature_str: &str, - ) -> Result { - self.request("getTransaction", [signature_str, "json"]) - .await - } - // Gets an account with default commitment set to finalized. See (https://solana.com/docs/rpc/http/getaccountinfo) - async fn get_account_info(&self, pub_key: &str) -> Result { - let config = solana_client::rpc_config::RpcAccountInfoConfig { - commitment: Some(CommitmentConfig { - commitment: CommitmentLevel::Finalized, - }), - encoding: Some(UiAccountEncoding::Base64), - data_slice: None, - min_context_slot: None, - }; - self.request("getAccountInfo", (pub_key, config)).await - } -} - -// Exploratory tests for checking integration with Solana. This could be automated in some way -// in the future. See https://solana.com/developers/guides/getstarted/setup-local-development . - #[cfg(test)] mod tests { + use solana_sdk::{pubkey::Pubkey, signature::Signature}; + use solana_transaction_status::UiTransactionEncoding; use std::str::FromStr; - - use super::*; - use crate::url::Url; use tokio::test as async_test; const RPC_URL: &str = "http://127.0.0.1:8899"; // default. @@ -75,25 +11,30 @@ mod tests { #[ignore = "Exploratory test, still not intended to run in CI"] #[async_test] async fn test_get_transaction_works() { - // pubkey: EHgEeD1Z3pc29s3JKhfVv9AGk7HkQFZKkcHbkypdN1h6 - let url = Url::from_str(RPC_URL).unwrap(); - let client = Client::new_http(&url).unwrap(); - let tx = client - .get_transaction("") - .await - .unwrap(); + let rpc_client = + solana_client::nonblocking::rpc_client::RpcClient::new(RPC_URL.to_string()); + + let tx = rpc_client + .get_transaction( + &Signature::from_str("3GLo4z4siudHxW1BMHBbkTKy7kfbssNFaxLR5hTjhEXCUzp2Pi2VVwybc1s96pEKjRre7CcKKeLhni79zWTNUseP").unwrap(), + UiTransactionEncoding::JsonParsed, + ) + .await.unwrap(); + println!("tx - {:?}", tx.transaction); } #[ignore = "Exploratory test, still not intended to run in CI"] #[async_test] - async fn test_get_account_works() { - let url = Url::from_str(RPC_URL).unwrap(); - let client = Client::new_http(&url).unwrap(); - let acc = client - .get_account_info("") + async fn test_get_account_data_works() { + let rpc_client = + solana_client::nonblocking::rpc_client::RpcClient::new(RPC_URL.to_string()); + let acc = rpc_client + .get_account_data( + &Pubkey::from_str("EHgEeD1Z3pc29s3JKhfVv9AGk7HkQFZKkcHbkypdN1h6").unwrap(), + ) .await .unwrap(); - println!("acc - {:?}", acc.value.data); + println!("acc - {:?}", acc); } } diff --git a/ampd/src/solana/mod.rs b/ampd/src/solana/mod.rs index 73600170a..9664537f9 100644 --- a/ampd/src/solana/mod.rs +++ b/ampd/src/solana/mod.rs @@ -2,3 +2,5 @@ pub mod json_rpc; pub mod ws_verifier; pub mod msg_verifier; +#[cfg(test)] +pub mod test_utils; diff --git a/ampd/src/solana/msg_verifier.rs b/ampd/src/solana/msg_verifier.rs index 71fe1011a..f72f63fb1 100644 --- a/ampd/src/solana/msg_verifier.rs +++ b/ampd/src/solana/msg_verifier.rs @@ -171,7 +171,7 @@ mod tests { Message, ) { // Common fields among tx and message. - let tx_id = "fake_tx_id".to_string(); + let tx_id = "3GLo4z4siudHxW1BMHBbkTKy7kfbssNFaxLR5hTjhEXCUzp2Pi2VVwybc1s96pEKjRre7CcKKeLhni79zWTNUseP".to_string(); let destination_chain = "eth".to_string(); let destination_address = "0x0".to_string(); let _payload: Vec = Vec::new(); diff --git a/ampd/src/solana/test_utils.rs b/ampd/src/solana/test_utils.rs new file mode 100644 index 000000000..0136d5fb6 --- /dev/null +++ b/ampd/src/solana/test_utils.rs @@ -0,0 +1,128 @@ +use std::{collections::HashMap, net::SocketAddr, sync::Arc}; + +use serde_json::{json, Value}; +use solana_client::{ + nonblocking::rpc_client::RpcClient, rpc_client::RpcClientConfig, rpc_request::RpcRequest, rpc_response::{Response, RpcContactInfo, RpcResponseContext, RpcVersionInfo}, rpc_sender::{RpcSender, RpcTransportStats} +}; +use solana_sdk::{message::MessageHeader, transaction::TransactionVersion}; +use solana_transaction_status::{option_serializer::OptionSerializer, EncodedConfirmedTransactionWithStatusMeta, EncodedTransaction, EncodedTransactionWithStatusMeta, UiCompiledInstruction, UiMessage, UiRawMessage, UiTransaction, UiTransactionStatusMeta}; +use solana_version::Version; + +use solana_rpc_client_api::client_error::Result; +use tokio::sync::RwLock; +use tonic::async_trait; + +pub const PUBKEY: &str = "7RoSF9fUmdphVCpabEoefH81WwrW7orsWonXWqTXkKV8"; + +type Registry = Arc>>; + +pub struct RpcRecorder { + record: Arc>>, +} + +impl RpcRecorder { + pub fn new() -> (Self, Registry) { + let registry = Arc::new(RwLock::new(HashMap::new())); + let self_v = Self { + record: registry.clone(), + }; + (self_v, registry) + } +} + +/// Reference: https://docs.rs/solana-rpc-client/1.18.3/src/solana_rpc_client/mock_sender.rs.html#97-488 +#[async_trait] +impl RpcSender for RpcRecorder { + fn get_transport_stats(&self) -> RpcTransportStats { + RpcTransportStats::default() + } + + async fn send( + &self, + request: RpcRequest, + params: serde_json::Value, + ) -> Result { + + let mut acquired_record = self.record.write().await; + + acquired_record + .entry(request) + .and_modify(|count| *count += 1) + .or_insert(1); + + let method = &request.build_request_json(42, params.clone())["method"]; + + let val = match method.as_str().unwrap() { + "getAccountInfo" => serde_json::to_value(Response { + context: RpcResponseContext { slot: 1, api_version: None }, + value: Value::Null, + })?, + "getTransaction" => serde_json::to_value(EncodedConfirmedTransactionWithStatusMeta { + slot: 2, + transaction: EncodedTransactionWithStatusMeta { + version: Some(TransactionVersion::LEGACY), + transaction: EncodedTransaction::Json( + UiTransaction { + signatures: vec!["3AsdoALgZFuq2oUVWrDYhg2pNeaLJKPLf8hU2mQ6U8qJxeJ6hsrPVpMn9ma39DtfYCrDQSvngWRP8NnTpEhezJpE".to_string()], + message: UiMessage::Raw( + UiRawMessage { + header: MessageHeader { + num_required_signatures: 1, + num_readonly_signed_accounts: 0, + num_readonly_unsigned_accounts: 1, + }, + account_keys: vec![ + "C6eBmAXKg6JhJWkajGa5YRGUfG4YKXwbxF5Ufv7PtExZ".to_string(), + "2Gd5eoR5J4BV89uXbtunpbNhjmw3wa1NbRHxTHzDzZLX".to_string(), + "11111111111111111111111111111111".to_string(), + ], + recent_blockhash: "D37n3BSG71oUWcWjbZ37jZP7UfsxG2QMKeuALJ1PYvM6".to_string(), + instructions: vec![UiCompiledInstruction { + program_id_index: 2, + accounts: vec![0, 1], + data: "3Bxs49DitAvXtoDR".to_string(), + stack_height: None, + }], + address_table_lookups: None, + }) + }), + meta: Some(UiTransactionStatusMeta { + err: None, + status: Ok(()), + fee: 0, + pre_balances: vec![499999999999999950, 50, 1], + post_balances: vec![499999999999999950, 50, 1], + inner_instructions: OptionSerializer::None, + log_messages: OptionSerializer::None, + pre_token_balances: OptionSerializer::None, + post_token_balances: OptionSerializer::None, + rewards: OptionSerializer::None, + loaded_addresses: OptionSerializer::Skip, + return_data: OptionSerializer::Skip, + compute_units_consumed: OptionSerializer::Skip, + }), + }, + block_time: Some(1628633791), + })?, + "getVersion" => { + let version = Version::default(); + json!(RpcVersionInfo { + solana_core: version.to_string(), + feature_set: Some(version.feature_set), + }) + } + _ => Value::Null, + }; + Ok(val) + } + + fn url(&self) -> String { + "MockSender".to_string() + } +} + +pub fn rpc_client_with_recorder() -> (RpcClient, Registry) { + let (rpc_recorder, registry) = RpcRecorder::new(); + let rpc_client = RpcClient::new_sender(rpc_recorder, RpcClientConfig::default()); + (rpc_client, registry) +} \ No newline at end of file diff --git a/ampd/src/solana/tests/solana_tx.json b/ampd/src/solana/tests/solana_tx.json index a40d4ae5d..973a7a259 100644 --- a/ampd/src/solana/tests/solana_tx.json +++ b/ampd/src/solana/tests/solana_tx.json @@ -28,7 +28,7 @@ "recentBlockhash": "mfcyqEXB3DnHXki6KjjmZck6YjmZLvpAByy2fj4nh6B" }, "signatures": [ - "fake_tx_id" + "3GLo4z4siudHxW1BMHBbkTKy7kfbssNFaxLR5hTjhEXCUzp2Pi2VVwybc1s96pEKjRre7CcKKeLhni79zWTNUseP" ] }, "blockTime": null, diff --git a/ampd/src/solana/ws_verifier.rs b/ampd/src/solana/ws_verifier.rs index 25a6cfd2d..714cf1db7 100644 --- a/ampd/src/solana/ws_verifier.rs +++ b/ampd/src/solana/ws_verifier.rs @@ -2,7 +2,6 @@ use std::collections::HashMap; use axelar_wasm_std::voting::Vote; use base64::Engine as _; -use borsh::{BorshDeserialize, BorshSerialize}; use auth_weighted::types::operator::Operators; use base64::{self, engine::general_purpose}; @@ -12,7 +11,6 @@ use tracing::{error, info}; use crate::handlers::solana_verify_worker_set::{self, WorkerSetConfirmation}; -use super::{json_rpc::AccountInfo}; use gmp_gateway::events::GatewayEvent; #[inline] @@ -54,7 +52,7 @@ pub async fn verify_worker_set( source_gateway_address: &String, sol_tx: &EncodedConfirmedTransactionWithStatusMeta, worker_set: &WorkerSetConfirmation, - account_info: &AccountInfo, + account_data: &Vec, ) -> Vote { let ui_tx = match &sol_tx.transaction.transaction { solana_transaction_status::EncodedTransaction::Json(tx) => tx, @@ -97,7 +95,7 @@ pub async fn verify_worker_set( return Vote::FailedOnChain; } - let onchain_operators = match parse_onchain_operators(account_info) { + let onchain_operators = match parse_onchain_operators(account_data) { Ok(ops) => ops, Err(err) => { info!(tx_id = &worker_set.tx_id, err = err.to_string()); @@ -118,23 +116,14 @@ fn verify_worker_set_operators_data( ops == aw_ops } -fn parse_onchain_operators(account_info: &AccountInfo) -> Result { - if account_info.value.data.len() < 2 { +fn parse_onchain_operators(account_data: &Vec) -> Result { + if account_data.is_empty() { return Err(VerificationError::ParsingError( "Could not find solana account data.".to_string(), )); } - let account_data = match decode_base64(&account_info.value.data[0]) { - Some(data) => data, - None => { - return Err(VerificationError::ParsingError( - "Cannot base64 decode account data.".to_string(), - )) - } - }; - - let operators = match borsh::de::from_slice::(&account_data) { + let operators = match borsh::de::from_slice::(account_data) { Ok(ops) => ops, Err(err) => { return Err(VerificationError::ParsingError(format!( @@ -222,12 +211,11 @@ impl PartialEq for crate::types::U256 { #[cfg(test)] mod tests { - use crate::{ - handlers::solana_verify_worker_set::Operators, solana::json_rpc::AccountInfoValue, - }; + use crate::handlers::solana_verify_worker_set::Operators; use super::*; use auth_weighted::types::{address::Address, u256::U256}; + use borsh::BorshSerialize; use cosmwasm_std::Uint256; use std::convert::TryFrom; @@ -250,52 +238,23 @@ mod tests { let mut op_buff = Vec::new(); onchain_operators.serialize(&mut op_buff).unwrap(); - let onchain_operators_b64 = general_purpose::STANDARD.encode(op_buff); - - let onchain_account_info = AccountInfo { - value: AccountInfoValue { - data: vec![onchain_operators_b64, "base64".to_string()], - }, - }; assert_eq!( onchain_operators, - parse_onchain_operators(&onchain_account_info).unwrap() + parse_onchain_operators(&op_buff).unwrap() ) } #[test] fn test_incorrect_deserialization_auth_weight_operators_failing_index() { - let onchain_account_info = AccountInfo { - value: AccountInfoValue { - data: vec![], // No data - }, - }; - assert_eq!( - parse_onchain_operators(&onchain_account_info), + parse_onchain_operators(&vec![]), Err(VerificationError::ParsingError( "Could not find solana account data.".to_string() )) ) } - #[test] - fn test_incorrect_deserialization_auth_weight_operators_failing_base64() { - let onchain_account_info = AccountInfo { - value: AccountInfoValue { - data: vec!["22".to_string(), "base64".to_string()], // Bad data base64. - }, - }; - - assert_eq!( - parse_onchain_operators(&onchain_account_info), - Err(VerificationError::ParsingError( - "Cannot base64 decode account data.".to_string() - )) - ) - } - #[test] fn test_incorrect_deserialization_auth_weight_operators_failing_borsh_deserialization() { let onchain_operators = auth_weighted::types::operator::Operators::new( @@ -316,16 +275,9 @@ mod tests { let mut op_buff = Vec::new(); onchain_operators.serialize(&mut op_buff).unwrap(); op_buff[0] = 1; // We mangle the data in order to borsh to fail. - let onchain_operators_b64 = general_purpose::STANDARD.encode(op_buff); - - let onchain_account_info = AccountInfo { - value: AccountInfoValue { - data: vec![onchain_operators_b64, "base64".to_string()], - }, - }; assert_eq!( - parse_onchain_operators(&onchain_account_info), + parse_onchain_operators(&op_buff), Err(VerificationError::ParsingError( "Cannot borsh decode account data: failed to fill whole buffer".to_string() )) From f654716fa30dd7dbc68fe89d58eb5883cd4584bd Mon Sep 17 00:00:00 2001 From: eloylp Date: Mon, 26 Feb 2024 21:46:06 +0100 Subject: [PATCH 018/109] Discern among not found results and RPC errors --- ampd/src/handlers/solana_verify_worker_set.rs | 68 ++++++++++++++----- 1 file changed, 52 insertions(+), 16 deletions(-) diff --git a/ampd/src/handlers/solana_verify_worker_set.rs b/ampd/src/handlers/solana_verify_worker_set.rs index c80df30f1..b6546d9a4 100644 --- a/ampd/src/handlers/solana_verify_worker_set.rs +++ b/ampd/src/handlers/solana_verify_worker_set.rs @@ -151,14 +151,22 @@ where return Ok(()); } - let sol_tx = self + let sol_tx = match self .rpc_client .get_transaction( &Signature::from_str(&worker_set.tx_id).unwrap(), UiTransactionEncoding::Json, ) .await - .map_err(|_| Error::TxReceipts)?; // Todo, maybe we should check wether this is an empty response or a network failure. The later, should throw Error::TxReceipts. But if the RPC clients fails on a not found entity, we should probably emit Vote::FailedOnChain vote instead. + { + Ok(tx) => tx, + Err(err) => match err.kind() { + solana_client::client_error::ClientErrorKind::SerdeJson(_) => { + return self.broadcast_vote(poll_id, Vote::NotFound).await + } + _ => return Err(Error::TxReceipts)?, + }, + }; let gw_event = parse_gateway_event(&sol_tx).map_err(|_| Error::DeserializeEvent)?; @@ -169,11 +177,15 @@ where _ => return self.broadcast_vote(poll_id, Vote::FailedOnChain).await, }; - let account_data = self - .rpc_client - .get_account_data(&pub_key) - .await - .map_err(|_| Error::TxReceipts)?; // Todo, maybe we should check wether this is an empty response or a network failure. The later, should throw Error::TxReceipts. But if the RPC clients fails on a not found entity, we should probably emit Vote::FailedOnChain vote instead. + let account_data = match self.rpc_client.get_account_data(&pub_key).await { + Ok(data) => data, + Err(err) => match err.kind() { + solana_client::client_error::ClientErrorKind::SerdeJson(_) => { + return self.broadcast_vote(poll_id, Vote::FailedOnChain).await + } + _ => return Err(Error::TxReceipts)?, + }, + }; let vote = verify_worker_set(&source_gateway_address, &sol_tx, &worker_set, &account_data).await; @@ -229,8 +241,14 @@ mod tests { handler.handle(&event).await.unwrap(); - assert_eq!(None, rpc_recorder.read().await.get(&RpcRequest::GetTransaction)); - assert_eq!(None, rpc_recorder.read().await.get(&RpcRequest::GetAccountInfo)); + assert_eq!( + None, + rpc_recorder.read().await.get(&RpcRequest::GetTransaction) + ); + assert_eq!( + None, + rpc_recorder.read().await.get(&RpcRequest::GetAccountInfo) + ); } #[async_test] @@ -258,10 +276,16 @@ mod tests { &voting_verifier, ); - handler.handle(&event).await.unwrap(); + handler.handle(&event).await.unwrap(); - assert_eq!(None, rpc_recorder.read().await.get(&RpcRequest::GetTransaction)); - assert_eq!(None, rpc_recorder.read().await.get(&RpcRequest::GetAccountInfo)); + assert_eq!( + None, + rpc_recorder.read().await.get(&RpcRequest::GetTransaction) + ); + assert_eq!( + None, + rpc_recorder.read().await.get(&RpcRequest::GetAccountInfo) + ); } #[async_test] @@ -291,8 +315,14 @@ mod tests { handler.handle(&event).await.unwrap(); - assert_eq!(None, rpc_recorder.read().await.get(&RpcRequest::GetTransaction)); - assert_eq!(None, rpc_recorder.read().await.get(&RpcRequest::GetAccountInfo)); + assert_eq!( + None, + rpc_recorder.read().await.get(&RpcRequest::GetTransaction) + ); + assert_eq!( + None, + rpc_recorder.read().await.get(&RpcRequest::GetAccountInfo) + ); } #[async_test] @@ -322,8 +352,14 @@ mod tests { handler.handle(&event).await.unwrap(); - assert_eq!(None, rpc_recorder.read().await.get(&RpcRequest::GetTransaction)); - assert_eq!(None, rpc_recorder.read().await.get(&RpcRequest::GetAccountInfo)); + assert_eq!( + None, + rpc_recorder.read().await.get(&RpcRequest::GetTransaction) + ); + assert_eq!( + None, + rpc_recorder.read().await.get(&RpcRequest::GetAccountInfo) + ); } fn worker_set_poll_started_event(participants: Vec, expires_at: u64) -> PollStarted { From 259af2e0229997595cb96341a97df542ed76819a Mon Sep 17 00:00:00 2001 From: eloylp Date: Tue, 27 Feb 2024 10:17:47 +0100 Subject: [PATCH 019/109] Fix clippy --- ampd/src/handlers/solana_verify_worker_set.rs | 3 +-- ampd/src/solana/test_utils.rs | 4 ++-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/ampd/src/handlers/solana_verify_worker_set.rs b/ampd/src/handlers/solana_verify_worker_set.rs index b6546d9a4..6e1957eda 100644 --- a/ampd/src/handlers/solana_verify_worker_set.rs +++ b/ampd/src/handlers/solana_verify_worker_set.rs @@ -398,9 +398,8 @@ mod tests { fn participants(n: u8, worker: Option) -> Vec { (0..n) - .into_iter() .map(|_| TMAddress::random(PREFIX)) - .chain(worker.into_iter()) + .chain(worker) .collect() } } diff --git a/ampd/src/solana/test_utils.rs b/ampd/src/solana/test_utils.rs index 0136d5fb6..8a07ef5e3 100644 --- a/ampd/src/solana/test_utils.rs +++ b/ampd/src/solana/test_utils.rs @@ -1,8 +1,8 @@ -use std::{collections::HashMap, net::SocketAddr, sync::Arc}; +use std::{collections::HashMap, sync::Arc}; use serde_json::{json, Value}; use solana_client::{ - nonblocking::rpc_client::RpcClient, rpc_client::RpcClientConfig, rpc_request::RpcRequest, rpc_response::{Response, RpcContactInfo, RpcResponseContext, RpcVersionInfo}, rpc_sender::{RpcSender, RpcTransportStats} + nonblocking::rpc_client::RpcClient, rpc_client::RpcClientConfig, rpc_request::RpcRequest, rpc_response::{Response, RpcResponseContext, RpcVersionInfo}, rpc_sender::{RpcSender, RpcTransportStats} }; use solana_sdk::{message::MessageHeader, transaction::TransactionVersion}; use solana_transaction_status::{option_serializer::OptionSerializer, EncodedConfirmedTransactionWithStatusMeta, EncodedTransaction, EncodedTransactionWithStatusMeta, UiCompiledInstruction, UiMessage, UiRawMessage, UiTransaction, UiTransactionStatusMeta}; From fd81c80edf1862b6de738bfb423ecaaa21da6163 Mon Sep 17 00:00:00 2001 From: eloylp Date: Tue, 27 Feb 2024 10:28:51 +0100 Subject: [PATCH 020/109] Do not panic when parsing solana tx signatures --- ampd/src/handlers/solana_verify_msg.rs | 19 +++++++++++++----- ampd/src/handlers/solana_verify_worker_set.rs | 20 ++++++++++++++----- 2 files changed, 29 insertions(+), 10 deletions(-) diff --git a/ampd/src/handlers/solana_verify_msg.rs b/ampd/src/handlers/solana_verify_msg.rs index 72d497c2e..9739e2c5a 100644 --- a/ampd/src/handlers/solana_verify_msg.rs +++ b/ampd/src/handlers/solana_verify_msg.rs @@ -8,7 +8,7 @@ use solana_transaction_status::{EncodedConfirmedTransactionWithStatusMeta, UiTra use std::collections::HashSet; use std::convert::TryInto; use std::str::FromStr; -use tracing::info; +use tracing::{error, info}; use axelar_wasm_std::voting::{PollId, Vote}; use events::{Error::EventTypeMismatch, Event}; @@ -135,12 +135,21 @@ where let mut sol_txs: Vec = Vec::new(); for msg_tx in tx_ids_from_msg { + let sol_tx_signature = match Signature::from_str(&msg_tx) { + Ok(sig) => sig, + Err(err) => { + error!( + poll_id = poll_id.to_string(), + err = err.to_string(), + "Cannot decode solana tx signature" + ); + continue; + } + }; + let sol_tx = self .rpc_client - .get_transaction( - &Signature::from_str(&msg_tx).unwrap(), - UiTransactionEncoding::Json, - ) + .get_transaction(&sol_tx_signature, UiTransactionEncoding::Json) .await .map_err(|_| Error::TxReceipts)?; sol_txs.push(sol_tx); diff --git a/ampd/src/handlers/solana_verify_worker_set.rs b/ampd/src/handlers/solana_verify_worker_set.rs index 6e1957eda..80d7c2b09 100644 --- a/ampd/src/handlers/solana_verify_worker_set.rs +++ b/ampd/src/handlers/solana_verify_worker_set.rs @@ -7,7 +7,7 @@ use solana_sdk::signature::Signature; use solana_transaction_status::UiTransactionEncoding; use std::str::FromStr; use tokio::sync::watch::Receiver; -use tracing::info; +use tracing::{error, info}; use async_trait::async_trait; use events::Error::EventTypeMismatch; @@ -151,12 +151,22 @@ where return Ok(()); } + let sol_tx_signature = match Signature::from_str(&worker_set.tx_id) { + Ok(sig) => sig, + Err(err) => { + error!( + poll_id = poll_id.to_string(), + err = err.to_string(), + "Cannot decode solana tx signature" + ); + + return self.broadcast_vote(poll_id, Vote::FailedOnChain).await; + } + }; + let sol_tx = match self .rpc_client - .get_transaction( - &Signature::from_str(&worker_set.tx_id).unwrap(), - UiTransactionEncoding::Json, - ) + .get_transaction(&sol_tx_signature, UiTransactionEncoding::Json) .await { Ok(tx) => tx, From dd0674d0672b8e6e61dade0a2db15bbf22d72d24 Mon Sep 17 00:00:00 2001 From: eloylp Date: Tue, 27 Feb 2024 18:55:58 +0100 Subject: [PATCH 021/109] Ensure we log errors while fetching transactions --- ampd/src/handlers/solana_verify_msg.rs | 27 ++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/ampd/src/handlers/solana_verify_msg.rs b/ampd/src/handlers/solana_verify_msg.rs index 9739e2c5a..f986999b5 100644 --- a/ampd/src/handlers/solana_verify_msg.rs +++ b/ampd/src/handlers/solana_verify_msg.rs @@ -147,11 +147,34 @@ where } }; - let sol_tx = self + let sol_tx = match self .rpc_client .get_transaction(&sol_tx_signature, UiTransactionEncoding::Json) .await - .map_err(|_| Error::TxReceipts)?; + { + Ok(tx) => tx, + Err(err) => match err.kind() { + // When tx is not found a null is returned. + solana_client::client_error::ClientErrorKind::SerdeJson(_) => { + error!( + tx_id = msg_tx, + poll_id = poll_id.to_string(), + err = err.to_string(), + "Cannot find solana tx signature" + ); + continue; + } + _ => { + error!( + tx_id = msg_tx, + poll_id = poll_id.to_string(), + "RPC error while fetching solana tx" + ); + continue; + } + }, + }; + sol_txs.push(sol_tx); } From 33782a597779e5d7e9668dc62643be1ef594ee83 Mon Sep 17 00:00:00 2001 From: eloylp Date: Tue, 27 Feb 2024 18:57:51 +0100 Subject: [PATCH 022/109] remove non used tests Were only intended during development to understand the API. --- ampd/src/solana/json_rpc.rs | 40 ------------------------------------- 1 file changed, 40 deletions(-) delete mode 100644 ampd/src/solana/json_rpc.rs diff --git a/ampd/src/solana/json_rpc.rs b/ampd/src/solana/json_rpc.rs deleted file mode 100644 index a4fe7b274..000000000 --- a/ampd/src/solana/json_rpc.rs +++ /dev/null @@ -1,40 +0,0 @@ -#[cfg(test)] -mod tests { - - use solana_sdk::{pubkey::Pubkey, signature::Signature}; - use solana_transaction_status::UiTransactionEncoding; - use std::str::FromStr; - use tokio::test as async_test; - - const RPC_URL: &str = "http://127.0.0.1:8899"; // default. - - #[ignore = "Exploratory test, still not intended to run in CI"] - #[async_test] - async fn test_get_transaction_works() { - let rpc_client = - solana_client::nonblocking::rpc_client::RpcClient::new(RPC_URL.to_string()); - - let tx = rpc_client - .get_transaction( - &Signature::from_str("3GLo4z4siudHxW1BMHBbkTKy7kfbssNFaxLR5hTjhEXCUzp2Pi2VVwybc1s96pEKjRre7CcKKeLhni79zWTNUseP").unwrap(), - UiTransactionEncoding::JsonParsed, - ) - .await.unwrap(); - - println!("tx - {:?}", tx.transaction); - } - - #[ignore = "Exploratory test, still not intended to run in CI"] - #[async_test] - async fn test_get_account_data_works() { - let rpc_client = - solana_client::nonblocking::rpc_client::RpcClient::new(RPC_URL.to_string()); - let acc = rpc_client - .get_account_data( - &Pubkey::from_str("EHgEeD1Z3pc29s3JKhfVv9AGk7HkQFZKkcHbkypdN1h6").unwrap(), - ) - .await - .unwrap(); - println!("acc - {:?}", acc); - } -} From 3c125984e86a1f7621d11005685be375714ed567 Mon Sep 17 00:00:00 2001 From: eloylp Date: Tue, 27 Feb 2024 19:06:53 +0100 Subject: [PATCH 023/109] replace unwrap by let-else syntax Co-authored-by: tilacog --- ampd/src/solana/ws_verifier.rs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/ampd/src/solana/ws_verifier.rs b/ampd/src/solana/ws_verifier.rs index 714cf1db7..fa72ec8c0 100644 --- a/ampd/src/solana/ws_verifier.rs +++ b/ampd/src/solana/ws_verifier.rs @@ -31,12 +31,10 @@ pub enum VerificationError { type Result = std::result::Result; pub fn parse_gateway_event(tx: &EncodedConfirmedTransactionWithStatusMeta) -> Result { - if tx.transaction.meta.is_none() { + let Some(meta) = tx.transaction.meta else { return Err(VerificationError::NoLogMessages); } - let meta = tx.transaction.meta.as_ref().unwrap(); - let log_messages = match &meta.log_messages { solana_transaction_status::option_serializer::OptionSerializer::Some(log_msg) => log_msg, _ => return Err(VerificationError::NoLogMessages), From 357bc3971047a78c374a68d8503ec7c4b50de325 Mon Sep 17 00:00:00 2001 From: eloylp Date: Tue, 27 Feb 2024 19:08:20 +0100 Subject: [PATCH 024/109] Use let if syntax Co-authored-by: tilacog --- ampd/src/solana/ws_verifier.rs | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/ampd/src/solana/ws_verifier.rs b/ampd/src/solana/ws_verifier.rs index fa72ec8c0..61a7933fa 100644 --- a/ampd/src/solana/ws_verifier.rs +++ b/ampd/src/solana/ws_verifier.rs @@ -61,12 +61,9 @@ pub async fn verify_worker_set( }; // NOTE: first signature is always tx_id - let tx_id = match ui_tx.signatures.first() { - Some(tx) => tx, - None => { - error!("failed to parse solana tx signatures."); - return Vote::FailedOnChain; - } + let Some(tx_id) = match ui_tx.signatures.first() else { + error!("failed to parse solana tx signatures."); + return Vote::FailedOnChain; }; if worker_set.tx_id != *tx_id { From db242204273108486c632f94a3461ee125a7038d Mon Sep 17 00:00:00 2001 From: eloylp Date: Tue, 27 Feb 2024 19:09:38 +0100 Subject: [PATCH 025/109] Properly log error message --- ampd/src/solana/ws_verifier.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ampd/src/solana/ws_verifier.rs b/ampd/src/solana/ws_verifier.rs index 61a7933fa..ab95ce0a8 100644 --- a/ampd/src/solana/ws_verifier.rs +++ b/ampd/src/solana/ws_verifier.rs @@ -67,7 +67,7 @@ pub async fn verify_worker_set( }; if worker_set.tx_id != *tx_id { - info!(tx_id = &worker_set.tx_id, "tx_id do not match"); + error!(tx_id = &worker_set.tx_id, "tx_id do not match"); return Vote::FailedOnChain; } From 42bee6dd8a6f9180e4687179e870c3c9f3c3d830 Mon Sep 17 00:00:00 2001 From: eloylp Date: Tue, 27 Feb 2024 19:11:05 +0100 Subject: [PATCH 026/109] Use let if syntax Co-authored-by: tilacog --- ampd/src/solana/ws_verifier.rs | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/ampd/src/solana/ws_verifier.rs b/ampd/src/solana/ws_verifier.rs index ab95ce0a8..83cdcf612 100644 --- a/ampd/src/solana/ws_verifier.rs +++ b/ampd/src/solana/ws_verifier.rs @@ -71,15 +71,12 @@ pub async fn verify_worker_set( return Vote::FailedOnChain; } - let ui_parsed_msg = match &ui_tx.message { - solana_transaction_status::UiMessage::Raw(msg) => msg, - _ => { - error!( - tx_id = tx_id, - "Could not gather tx message for checking account keys." - ); - return Vote::FailedOnChain; - } + let solana_transaction_status::UiMessage::Raw(ui_parsed_msg) = &ui_tx.message else { + error!( + tx_id = tx_id, + "Could not gather tx message for checking account keys." + ); + return Vote::FailedOnChain; }; if !ui_parsed_msg.account_keys.contains(source_gateway_address) { From 46685940c87d133f4f55e474b5a726b2ab1144db Mon Sep 17 00:00:00 2001 From: eloylp Date: Tue, 27 Feb 2024 19:12:05 +0100 Subject: [PATCH 027/109] Remove redundant comparison function Co-authored-by: tilacog --- ampd/src/solana/ws_verifier.rs | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/ampd/src/solana/ws_verifier.rs b/ampd/src/solana/ws_verifier.rs index 83cdcf612..c19b4cf32 100644 --- a/ampd/src/solana/ws_verifier.rs +++ b/ampd/src/solana/ws_verifier.rs @@ -95,19 +95,13 @@ pub async fn verify_worker_set( } }; - match verify_worker_set_operators_data(&worker_set.operators, &onchain_operators) { - true => Vote::SucceededOnChain, - false => Vote::FailedOnChain, + if worker_set.operators == onchain_operators) { + Vote::SucceededOnChain + } else { + Vote::FailedOnChain, } } -fn verify_worker_set_operators_data( - ops: &solana_verify_worker_set::Operators, - aw_ops: &Operators, -) -> bool { - ops == aw_ops -} - fn parse_onchain_operators(account_data: &Vec) -> Result { if account_data.is_empty() { return Err(VerificationError::ParsingError( From c9acc10e336d34b0d3f1d0e1b596f1f2a6fddb4d Mon Sep 17 00:00:00 2001 From: eloylp Date: Tue, 27 Feb 2024 19:12:53 +0100 Subject: [PATCH 028/109] clarify log message Co-authored-by: tilacog --- ampd/src/solana/ws_verifier.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ampd/src/solana/ws_verifier.rs b/ampd/src/solana/ws_verifier.rs index c19b4cf32..25c3a7508 100644 --- a/ampd/src/solana/ws_verifier.rs +++ b/ampd/src/solana/ws_verifier.rs @@ -105,7 +105,7 @@ pub async fn verify_worker_set( fn parse_onchain_operators(account_data: &Vec) -> Result { if account_data.is_empty() { return Err(VerificationError::ParsingError( - "Could not find solana account data.".to_string(), + "Solana account is empty.".to_string(), )); } From e3c23c27090bedc822e8577aea85be840257ef21 Mon Sep 17 00:00:00 2001 From: eloylp Date: Tue, 27 Feb 2024 20:32:10 +0100 Subject: [PATCH 029/109] FIx test and compilation errors --- ampd/src/solana/mod.rs | 1 - ampd/src/solana/ws_verifier.rs | 20 ++++++++++---------- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/ampd/src/solana/mod.rs b/ampd/src/solana/mod.rs index 9664537f9..39e9c830a 100644 --- a/ampd/src/solana/mod.rs +++ b/ampd/src/solana/mod.rs @@ -1,4 +1,3 @@ -pub mod json_rpc; pub mod ws_verifier; pub mod msg_verifier; diff --git a/ampd/src/solana/ws_verifier.rs b/ampd/src/solana/ws_verifier.rs index 25c3a7508..28b6abb15 100644 --- a/ampd/src/solana/ws_verifier.rs +++ b/ampd/src/solana/ws_verifier.rs @@ -31,9 +31,9 @@ pub enum VerificationError { type Result = std::result::Result; pub fn parse_gateway_event(tx: &EncodedConfirmedTransactionWithStatusMeta) -> Result { - let Some(meta) = tx.transaction.meta else { + let Some(meta) = &tx.transaction.meta else { return Err(VerificationError::NoLogMessages); - } + }; let log_messages = match &meta.log_messages { solana_transaction_status::option_serializer::OptionSerializer::Some(log_msg) => log_msg, @@ -61,7 +61,7 @@ pub async fn verify_worker_set( }; // NOTE: first signature is always tx_id - let Some(tx_id) = match ui_tx.signatures.first() else { + let Some(tx_id) = ui_tx.signatures.first() else { error!("failed to parse solana tx signatures."); return Vote::FailedOnChain; }; @@ -95,10 +95,10 @@ pub async fn verify_worker_set( } }; - if worker_set.operators == onchain_operators) { + if worker_set.operators == onchain_operators { Vote::SucceededOnChain } else { - Vote::FailedOnChain, + Vote::FailedOnChain } } @@ -236,7 +236,7 @@ mod tests { assert_eq!( parse_onchain_operators(&vec![]), Err(VerificationError::ParsingError( - "Could not find solana account data.".to_string() + "Solana account is empty.".to_string() )) ) } @@ -273,14 +273,14 @@ mod tests { #[test] fn test_verify_worker_set_operators_data_happy_path() { let (ops, sol_ops) = matching_axelar_operators_and_onchain_operators(); - assert!(verify_worker_set_operators_data(&ops, &sol_ops)) + assert!(&ops == &sol_ops) } #[test] fn test_verify_worker_set_operators_data_fails_not_eq_threshold() { let (mut ops, sol_ops) = matching_axelar_operators_and_onchain_operators(); ops.threshold = crate::types::U256::from(Uint256::MAX); - assert!(!verify_worker_set_operators_data(&ops, &sol_ops)) + assert!(&ops != &sol_ops) } #[test] @@ -298,7 +298,7 @@ mod tests { crate::types::U256::from(Uint256::from_u128(200)), ), ]; - assert!(!verify_worker_set_operators_data(&ops, &sol_ops)) + assert!(&ops != &sol_ops) } #[test] @@ -314,7 +314,7 @@ mod tests { crate::types::U256::from(Uint256::from_u128(1)), // here is a different weight than expected. ), ]; - assert!(!verify_worker_set_operators_data(&ops, &sol_ops)) + assert!(&ops != &sol_ops) } fn matching_axelar_operators_and_onchain_operators( From 092ef7969498fa58c966308e2779fcc6b1661aca Mon Sep 17 00:00:00 2001 From: eloylp Date: Tue, 27 Feb 2024 20:41:17 +0100 Subject: [PATCH 030/109] Ensure elements are of same length while suing zip() --- ampd/src/solana/ws_verifier.rs | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/ampd/src/solana/ws_verifier.rs b/ampd/src/solana/ws_verifier.rs index 28b6abb15..fbca2cbab 100644 --- a/ampd/src/solana/ws_verifier.rs +++ b/ampd/src/solana/ws_verifier.rs @@ -153,6 +153,10 @@ impl PartialEq for solana_verify_work // and preparing conversions beforehand in another type. }; + if aw_ops.weights_len() != aw_ops.addresses_len() { + return false; + } + // Iterate both iterators (addresses and weights) coming from Solana chain. At the same time, // while querying the previously created map, which contains the Axelar counterpart. aw_ops @@ -317,6 +321,28 @@ mod tests { assert!(&ops != &sol_ops) } + #[test] + fn test_verify_worker_set_operators_data_fails_not_same_elements() { + let (ops, _) = matching_axelar_operators_and_onchain_operators(); + + let sol_ops = auth_weighted::types::operator::Operators::new( + vec![ + Address::try_from( + "03f57d1a813febaccbe6429603f9ec57969511b76cd680452dba91fa01f54e756d", + ) + .unwrap(), + Address::try_from( + "03f57d1a813febaccbe6429603f9ec57969511b76cd680452dba91fa01f54e756e", + ) + .unwrap(), + ], + vec![U256::from(100u8)], // missing element ! + U256::from(1u8), + ); + + assert!(&ops != &sol_ops) + } + fn matching_axelar_operators_and_onchain_operators( ) -> (Operators, auth_weighted::types::operator::Operators) { let onchain_operators = auth_weighted::types::operator::Operators::new( From e1f409f0dff2c29b5dde54c6d3d5a56ff59491c9 Mon Sep 17 00:00:00 2001 From: eloylp Date: Tue, 27 Feb 2024 20:46:49 +0100 Subject: [PATCH 031/109] remove discontinued auth-weighted dependency in favour of gmp-gateway --- Cargo.lock | 20 -------------------- ampd/Cargo.toml | 1 - ampd/src/solana/ws_verifier.rs | 30 +++++++++++++++--------------- 3 files changed, 15 insertions(+), 36 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 70ce8a689..0a94176f8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -211,7 +211,6 @@ name = "ampd" version = "0.1.0" dependencies = [ "async-trait", - "auth-weighted", "axelar-wasm-std 0.1.0", "base64 0.21.7", "bcs", @@ -766,25 +765,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "auth-weighted" -version = "0.1.0" -source = "git+ssh://git@github.com/eigerco/solana-axelar.git?branch=poc#465b8510cfdebd10d2a43eba70175af5c7793f70" -dependencies = [ - "base64 0.21.7", - "bimap", - "bnum 0.10.0", - "borsh 1.3.1", - "bytemuck", - "hex", - "k256", - "libsecp256k1 0.7.1", - "num-derive 0.4.2", - "num-traits", - "solana-program", - "thiserror", -] - [[package]] name = "auto_impl" version = "1.1.2" diff --git a/ampd/Cargo.toml b/ampd/Cargo.toml index 25c22b58a..3d88bcdb6 100644 --- a/ampd/Cargo.toml +++ b/ampd/Cargo.toml @@ -70,7 +70,6 @@ url = "2.3.1" valuable = { version = "0.1.0", features = ["derive"] } valuable-serde = { version = "0.1.0", features = ["std"] } voting-verifier = { workspace = true } -auth-weighted = { git = "ssh://git@github.com/eigerco/solana-axelar.git", branch = "poc" } ## Temporary POC repo import while its not public. gmp-gateway = { git = "ssh://git@github.com/eigerco/solana-axelar.git", branch = "poc" } [dev-dependencies] diff --git a/ampd/src/solana/ws_verifier.rs b/ampd/src/solana/ws_verifier.rs index fbca2cbab..86fd366f9 100644 --- a/ampd/src/solana/ws_verifier.rs +++ b/ampd/src/solana/ws_verifier.rs @@ -3,7 +3,7 @@ use std::collections::HashMap; use axelar_wasm_std::voting::Vote; use base64::Engine as _; -use auth_weighted::types::operator::Operators; +use gmp_gateway::types::operator::Operators; use base64::{self, engine::general_purpose}; use solana_transaction_status::EncodedConfirmedTransactionWithStatusMeta; use thiserror::Error; @@ -122,14 +122,14 @@ fn parse_onchain_operators(account_data: &Vec) -> Result { Ok(operators) } -impl PartialEq for solana_verify_worker_set::Operators { - fn eq(&self, aw_ops: &auth_weighted::types::operator::Operators) -> bool { +impl PartialEq for solana_verify_worker_set::Operators { + fn eq(&self, aw_ops: &gmp_gateway::types::operator::Operators) -> bool { if self.threshold != *aw_ops.threshold() { return false; } // Creating a hashmap for querying the data later. Using a not fixed size key like - // Vec could not be the best. We expect a 33 bytes slice as address. See ['auth_weighted::types::Address::ECDSA_COMPRESSED_PUBKEY_LEN'] + // Vec could not be the best. We expect a 33 bytes slice as address. See ['gmp_gateway::types::Address::ECDSA_COMPRESSED_PUBKEY_LEN'] // So probably we should try to use that after testing the first POC in order to reduce the domain of the key. let addresses_weights_res: Result, crate::types::U256>> = self .weights_by_addresses @@ -153,7 +153,7 @@ impl PartialEq for solana_verify_work // and preparing conversions beforehand in another type. }; - if aw_ops.weights_len() != aw_ops.addresses_len() { + if aw_ops.weights().len() != aw_ops.addresses().len() { return false; } @@ -183,7 +183,7 @@ impl PartialEq for solana_verify_work } } -impl PartialEq for auth_weighted::types::u256::U256 { +impl PartialEq for gmp_gateway::types::u256::U256 { fn eq(&self, loc_u256: &crate::types::U256) -> bool { let mut b: [u8; 32] = [0; 32]; loc_u256.to_little_endian(&mut b); @@ -191,8 +191,8 @@ impl PartialEq for auth_weighted::types::u256::U256 { } } -impl PartialEq for crate::types::U256 { - fn eq(&self, aw_u256: &auth_weighted::types::u256::U256) -> bool { +impl PartialEq for crate::types::U256 { + fn eq(&self, aw_u256: &gmp_gateway::types::u256::U256) -> bool { let mut b: [u8; 32] = [0; 32]; self.to_little_endian(&mut b); aw_u256.to_le_bytes() == b @@ -204,14 +204,14 @@ mod tests { use crate::handlers::solana_verify_worker_set::Operators; use super::*; - use auth_weighted::types::{address::Address, u256::U256}; + use gmp_gateway::types::{address::Address, u256::U256}; use borsh::BorshSerialize; use cosmwasm_std::Uint256; use std::convert::TryFrom; #[test] fn test_correct_deserialization_auth_weight_operators() { - let onchain_operators = auth_weighted::types::operator::Operators::new( + let onchain_operators = gmp_gateway::types::operator::Operators::new( vec![ Address::try_from( "03f57d1a813febaccbe6429603f9ec57969511b76cd680452dba91fa01f54e756d", @@ -247,7 +247,7 @@ mod tests { #[test] fn test_incorrect_deserialization_auth_weight_operators_failing_borsh_deserialization() { - let onchain_operators = auth_weighted::types::operator::Operators::new( + let onchain_operators = gmp_gateway::types::operator::Operators::new( vec![ Address::try_from( "03f57d1a813febaccbe6429603f9ec57969511b76cd680452dba91fa01f54e756d", @@ -325,7 +325,7 @@ mod tests { fn test_verify_worker_set_operators_data_fails_not_same_elements() { let (ops, _) = matching_axelar_operators_and_onchain_operators(); - let sol_ops = auth_weighted::types::operator::Operators::new( + let sol_ops = gmp_gateway::types::operator::Operators::new( vec![ Address::try_from( "03f57d1a813febaccbe6429603f9ec57969511b76cd680452dba91fa01f54e756d", @@ -344,8 +344,8 @@ mod tests { } fn matching_axelar_operators_and_onchain_operators( - ) -> (Operators, auth_weighted::types::operator::Operators) { - let onchain_operators = auth_weighted::types::operator::Operators::new( + ) -> (Operators, gmp_gateway::types::operator::Operators) { + let onchain_operators = gmp_gateway::types::operator::Operators::new( vec![ Address::try_from( "03f57d1a813febaccbe6429603f9ec57969511b76cd680452dba91fa01f54e756d", @@ -382,7 +382,7 @@ mod tests { #[test] fn comparing_u256_and_aw_u256_works() { let u256 = crate::types::U256::from(Uint256::MAX); - let aw_u256 = auth_weighted::types::u256::U256::from_le_bytes([255; 32]); // Does not have a U256::MAX + let aw_u256 = gmp_gateway::types::u256::U256::from_le_bytes([255; 32]); // Does not have a U256::MAX assert!(u256 == aw_u256); } } From 1f827b02ea25b8111406c147cd66d0541765e741 Mon Sep 17 00:00:00 2001 From: eloylp Date: Tue, 27 Feb 2024 21:00:21 +0100 Subject: [PATCH 032/109] remove dead code --- ampd/src/solana/ws_verifier.rs | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/ampd/src/solana/ws_verifier.rs b/ampd/src/solana/ws_verifier.rs index 86fd366f9..bc3a7f1ea 100644 --- a/ampd/src/solana/ws_verifier.rs +++ b/ampd/src/solana/ws_verifier.rs @@ -1,10 +1,8 @@ use std::collections::HashMap; use axelar_wasm_std::voting::Vote; -use base64::Engine as _; use gmp_gateway::types::operator::Operators; -use base64::{self, engine::general_purpose}; use solana_transaction_status::EncodedConfirmedTransactionWithStatusMeta; use thiserror::Error; use tracing::{error, info}; @@ -13,11 +11,6 @@ use crate::handlers::solana_verify_worker_set::{self, WorkerSetConfirmation}; use gmp_gateway::events::GatewayEvent; -#[inline] -fn decode_base64(input: &str) -> Option> { - general_purpose::STANDARD.decode(input).ok() -} - #[derive(Error, Debug, PartialEq)] pub enum VerificationError { #[error("Failed to parse tx log messages")] @@ -204,9 +197,9 @@ mod tests { use crate::handlers::solana_verify_worker_set::Operators; use super::*; - use gmp_gateway::types::{address::Address, u256::U256}; use borsh::BorshSerialize; use cosmwasm_std::Uint256; + use gmp_gateway::types::{address::Address, u256::U256}; use std::convert::TryFrom; #[test] From b6fa596b78c76dfcb241c6ee1927de644a37f363 Mon Sep 17 00:00:00 2001 From: eloylp Date: Tue, 27 Feb 2024 21:01:00 +0100 Subject: [PATCH 033/109] use let/else syntax Co-authored-by: tilacog --- ampd/src/solana/ws_verifier.rs | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/ampd/src/solana/ws_verifier.rs b/ampd/src/solana/ws_verifier.rs index 86fd366f9..e9f22196b 100644 --- a/ampd/src/solana/ws_verifier.rs +++ b/ampd/src/solana/ws_verifier.rs @@ -164,11 +164,9 @@ impl PartialEq for solana_verify_worker .iter() .zip(aw_ops.weights()) .try_for_each(|(address, weight)| { - let axelar_addr_weight = addresses_weights.get_key_value(address.as_ref()); - if axelar_addr_weight.is_none() { + let Some((axelar_address, axelar_weight)) = addresses_weights.get_key_value(address.as_ref()) else { return Err(()); - } - let (axelar_address, axelar_weight) = axelar_addr_weight.unwrap(); + }; if address.as_ref() != axelar_address { return Err(()); From ea250b29ecc161bc46a47a925b68e94be99e02c2 Mon Sep 17 00:00:00 2001 From: eloylp Date: Tue, 27 Feb 2024 21:05:00 +0100 Subject: [PATCH 034/109] Do not panic broadcasting votes --- ampd/src/handlers/solana_verify_worker_set.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ampd/src/handlers/solana_verify_worker_set.rs b/ampd/src/handlers/solana_verify_worker_set.rs index 80d7c2b09..58c486bae 100644 --- a/ampd/src/handlers/solana_verify_worker_set.rs +++ b/ampd/src/handlers/solana_verify_worker_set.rs @@ -94,7 +94,8 @@ where poll_id, votes: vec![vote], }) - .expect("vote msg should serialize"); + .map_err(|_| Error::Broadcaster)?; + let tx = MsgExecuteContract { sender: self.worker.as_ref().clone(), contract: self.voting_verifier.as_ref().clone(), From f4e3c843a284dae26315a4f5c0bd21c2908fa10b Mon Sep 17 00:00:00 2001 From: eloylp Date: Wed, 28 Feb 2024 08:59:09 +0100 Subject: [PATCH 035/109] Ensure proper logging in case of errors --- ampd/src/handlers/solana_verify_worker_set.rs | 43 ++++++++++++++----- 1 file changed, 33 insertions(+), 10 deletions(-) diff --git a/ampd/src/handlers/solana_verify_worker_set.rs b/ampd/src/handlers/solana_verify_worker_set.rs index 58c486bae..8ad935ed9 100644 --- a/ampd/src/handlers/solana_verify_worker_set.rs +++ b/ampd/src/handlers/solana_verify_worker_set.rs @@ -172,10 +172,23 @@ where { Ok(tx) => tx, Err(err) => match err.kind() { - solana_client::client_error::ClientErrorKind::SerdeJson(_) => { - return self.broadcast_vote(poll_id, Vote::NotFound).await + solana_client::client_error::ClientErrorKind::SerdeJson(err) => { + error!( + tx_signature = sol_tx_signature.to_string(), + err = err.to_string(), + poll_id = poll_id.to_string(), + "Could not find solana transaction." + ); + return self.broadcast_vote(poll_id, Vote::NotFound).await; + } + _ => { + error!( + tx_signature = sol_tx_signature.to_string(), + poll_id = poll_id.to_string(), + "RPC error while fetching transaction." + ); + return Err(Error::TxReceipts)?; } - _ => return Err(Error::TxReceipts)?, }, }; @@ -185,17 +198,27 @@ where GatewayEvent::OperatorshipTransferred { info_account_address, } => info_account_address, - _ => return self.broadcast_vote(poll_id, Vote::FailedOnChain).await, + _ => { + error!( + tx_signature = sol_tx_signature.to_string(), + poll_id = poll_id.to_string(), + "Error parsing gateway event." + ); + return self.broadcast_vote(poll_id, Vote::FailedOnChain).await; + } }; let account_data = match self.rpc_client.get_account_data(&pub_key).await { Ok(data) => data, - Err(err) => match err.kind() { - solana_client::client_error::ClientErrorKind::SerdeJson(_) => { - return self.broadcast_vote(poll_id, Vote::FailedOnChain).await - } - _ => return Err(Error::TxReceipts)?, - }, + Err(err) => { + error!( + tx_signature = sol_tx_signature.to_string(), + pub_key = pub_key.to_string(), + poll_id = poll_id.to_string(), + err = format!("Error fetching account data: {}", err), + ); + return self.broadcast_vote(poll_id, Vote::FailedOnChain).await; + } }; let vote = From c8ce69983cd06474f4e34833970a929cae31b496 Mon Sep 17 00:00:00 2001 From: eloylp Date: Sun, 3 Mar 2024 20:13:25 +0100 Subject: [PATCH 036/109] Ensure Solana message verifier ignores other chains events --- ampd/src/handlers/config.rs | 19 ++++ ampd/src/handlers/solana_verify_msg.rs | 137 +++++++++++++++++++++---- ampd/src/lib.rs | 4 +- 3 files changed, 141 insertions(+), 19 deletions(-) diff --git a/ampd/src/handlers/config.rs b/ampd/src/handlers/config.rs index b76ba9309..23724e05d 100644 --- a/ampd/src/handlers/config.rs +++ b/ampd/src/handlers/config.rs @@ -47,6 +47,8 @@ pub enum Config { SolanaMsgVerifier { cosmwasm_contract: TMAddress, rpc_url: Url, + #[serde(flatten, with = "chain")] + chain: GenericChain, }, SolanaWorkerSetVerifier { cosmwasm_contract: TMAddress, @@ -152,6 +154,23 @@ fn validate_solana_msg_verifier_config<'de, D>(configs: &[Config]) -> Result<(), where D: Deserializer<'de>, { + + if !configs + .iter() + .filter_map(|config| match config { + Config::SolanaMsgVerifier { + chain: GenericChain { name, .. }, + .. + } => Some(name), + _ => None, + }) + .all_unique() + { + return Err(de::Error::custom( + "the chain name Solana msg verifier configs must be unique", + )); + } + match configs .iter() .filter(|config| matches!(config, Config::SolanaMsgVerifier { .. })) diff --git a/ampd/src/handlers/solana_verify_msg.rs b/ampd/src/handlers/solana_verify_msg.rs index f986999b5..c16171812 100644 --- a/ampd/src/handlers/solana_verify_msg.rs +++ b/ampd/src/handlers/solana_verify_msg.rs @@ -1,4 +1,5 @@ use async_trait::async_trait; +use connection_router::state::ChainName; use cosmrs::cosmwasm::MsgExecuteContract; use error_stack::ResultExt; use serde::Deserialize; @@ -42,6 +43,7 @@ struct PollStartedEvent { contract_address: TMAddress, poll_id: PollId, source_gateway_address: String, + source_chain: ChainName, messages: Vec, participants: Vec, expires_at: u64, @@ -54,6 +56,7 @@ where worker: TMAddress, voting_verifier: TMAddress, rpc_client: RpcClient, + chain: ChainName, broadcast_client: B, latest_block_height: Receiver, } @@ -65,6 +68,7 @@ where pub fn new( worker: TMAddress, voting_verifier: TMAddress, + chain: ChainName, rpc_client: RpcClient, broadcast_client: B, latest_block_height: Receiver, @@ -72,6 +76,7 @@ where Self { worker, voting_verifier, + chain, rpc_client, broadcast_client, latest_block_height, @@ -105,6 +110,7 @@ where let PollStartedEvent { contract_address, poll_id, + source_chain, source_gateway_address, messages, participants, @@ -117,6 +123,10 @@ where event => event.change_context(Error::DeserializeEvent)?, }; + if self.chain != source_chain { + return Ok(()); + } + if self.voting_verifier != contract_address { return Ok(()); } @@ -218,6 +228,7 @@ mod test { let worker = TMAddress::random(PREFIX); let expiration = 100u64; let (_, rx) = watch::channel(expiration - 1); + let source_chain = ChainName::from_str("solana").unwrap(); // Prepare the message verifier and the vote broadcaster let mut broadcast_client = MockBroadcasterClient::new(); @@ -229,12 +240,18 @@ mod test { let (rpc_client, rpc_recorder) = rpc_client_with_recorder(); let event: Event = get_event( - get_poll_started_event(participants(5, Some(worker.clone())), 100), + get_poll_started_event(participants(5, Some(worker.clone())), 100, source_chain.clone()), &voting_verifier, ); - let handler = - super::Handler::new(worker, voting_verifier, rpc_client, broadcast_client, rx); + let handler = super::Handler::new( + worker, + voting_verifier, + source_chain, + rpc_client, + broadcast_client, + rx, + ); handler.handle(&event).await.unwrap(); assert_eq!( @@ -243,6 +260,50 @@ mod test { ); } + #[async_test] + async fn ignores_events_from_other_chains() { + // Setup the context + let voting_verifier = TMAddress::random(PREFIX); + let worker = TMAddress::random(PREFIX); + let expiration = 100u64; + let (_, rx) = watch::channel(expiration - 1); + let source_chain = ChainName::from_str("solana").unwrap(); + let poll_started_source_chain = ChainName::from_str("other_chain").unwrap(); // A different, unexpected source chain. + + // Prepare the message verifier and the vote broadcaster + let mut broadcast_client = MockBroadcasterClient::new(); + broadcast_client + .expect_broadcast::() + .never(); + + let (rpc_client, rpc_recorder) = rpc_client_with_recorder(); + + let event: Event = get_event( + get_poll_started_event( + participants(5, Some(worker.clone())), + 100, + poll_started_source_chain, + ), + &voting_verifier, + ); + + let handler = super::Handler::new( + worker, + voting_verifier, + source_chain, + rpc_client, + broadcast_client, + rx, + ); + + handler.handle(&event).await.unwrap(); + + assert_eq!( + None, + rpc_recorder.read().await.get(&RpcRequest::GetTransaction) + ); + } + #[async_test] async fn must_skip_duplicated_tx() { // Setup the context @@ -250,6 +311,7 @@ mod test { let worker = TMAddress::random(PREFIX); let expiration = 100u64; let (_, rx) = watch::channel(expiration - 1); + let source_chain = ChainName::from_str("solana").unwrap(); // Prepare the message verifier and the vote broadcaster let mut broadcast_client = MockBroadcasterClient::new(); @@ -265,8 +327,14 @@ mod test { &voting_verifier, ); - let handler = - super::Handler::new(worker, voting_verifier, rpc_client, broadcast_client, rx); + let handler = super::Handler::new( + worker, + voting_verifier, + source_chain, + rpc_client, + broadcast_client, + rx, + ); handler.handle(&event).await.unwrap(); @@ -288,6 +356,7 @@ mod test { let worker = TMAddress::random(PREFIX); let expiration = 100u64; let (_, rx) = watch::channel(expiration - 1); + let source_chain = ChainName::from_str("solana").unwrap(); // Prepare the message verifier and the vote broadcaster let mut broadcast_client = MockBroadcasterClient::new(); @@ -298,12 +367,22 @@ mod test { let (rpc_client, rpc_recorder) = rpc_client_with_recorder(); let event: Event = get_event( - get_poll_started_event(participants(5, Some(worker.clone())), 100), + get_poll_started_event( + participants(5, Some(worker.clone())), + 100, + source_chain.clone(), + ), &TMAddress::random(PREFIX), // A different, unexpected address comes from the event. ); - let handler = - super::Handler::new(worker, voting_verifier, rpc_client, broadcast_client, rx); + let handler = super::Handler::new( + worker, + voting_verifier, + source_chain, + rpc_client, + broadcast_client, + rx, + ); handler.handle(&event).await.unwrap(); @@ -320,6 +399,7 @@ mod test { let worker = TMAddress::random(PREFIX); let expiration = 100u64; let (_, rx) = watch::channel(expiration - 1); + let source_chain = ChainName::from_str("solana").unwrap(); // Prepare the message verifier and the vote broadcaster let mut broadcast_client = MockBroadcasterClient::new(); @@ -330,12 +410,18 @@ mod test { let (rpc_client, rpc_recorder) = rpc_client_with_recorder(); let event: Event = get_event( - get_poll_started_event(participants(5, None), 100), // This worker is not in participant set. So will skip the event. + get_poll_started_event(participants(5, None), 100, source_chain.clone()), // This worker is not in participant set. So will skip the event. &voting_verifier, ); - let handler = - super::Handler::new(worker, voting_verifier, rpc_client, broadcast_client, rx); + let handler = super::Handler::new( + worker, + voting_verifier, + source_chain, + rpc_client, + broadcast_client, + rx, + ); handler.handle(&event).await.unwrap(); @@ -352,6 +438,7 @@ mod test { let worker = TMAddress::random(PREFIX); let expiration = 100u64; let (_, rx) = watch::channel(expiration); // expired ! + let source_chain = ChainName::from_str("solana").unwrap(); // Prepare the message verifier and the vote broadcaster let mut broadcast_client = MockBroadcasterClient::new(); @@ -362,12 +449,22 @@ mod test { let (rpc_client, rpc_recorder) = rpc_client_with_recorder(); let event: Event = get_event( - get_poll_started_event(participants(5, Some(worker.clone())), 100), + get_poll_started_event( + participants(5, Some(worker.clone())), + 100, + source_chain.clone(), + ), &voting_verifier, ); - let handler = - super::Handler::new(worker, voting_verifier, rpc_client, broadcast_client, rx); + let handler = super::Handler::new( + worker, + voting_verifier, + source_chain, + rpc_client, + broadcast_client, + rx, + ); handler.handle(&event).await.unwrap(); @@ -396,19 +493,23 @@ mod test { .unwrap() } - fn get_poll_started_event(participants: Vec, expires_at: u64) -> PollStarted { - get_poll_started_event_with_source_chain(participants, expires_at, "starknet") + fn get_poll_started_event( + participants: Vec, + expires_at: u64, + source_chain: ChainName, + ) -> PollStarted { + get_poll_started_event_with_source_chain(participants, expires_at, source_chain) } fn get_poll_started_event_with_source_chain( participants: Vec, expires_at: u64, - source_chain: &str, + source_chain: ChainName, ) -> PollStarted { PollStarted::Messages { metadata: PollMetadata { poll_id: "100".parse().unwrap(), - source_chain: source_chain.parse().unwrap(), + source_chain, source_gateway_address: "sol".to_string().parse().unwrap(), confirmation_height: 15, expires_at, diff --git a/ampd/src/lib.rs b/ampd/src/lib.rs index b65198068..4e4a9b266 100644 --- a/ampd/src/lib.rs +++ b/ampd/src/lib.rs @@ -262,11 +262,13 @@ where handlers::config::Config::SolanaMsgVerifier { cosmwasm_contract, rpc_url, + chain, } => self.configure_handler( - "solana-msg-verifier", + format!("{}-msg-verifier", chain.name), handlers::solana_verify_msg::Handler::new( worker.clone(), cosmwasm_contract, + chain.name, RpcClient::new_with_commitment( rpc_url.to_string(), CommitmentConfig::finalized(), From a51c0fba8d791668e48ca5cc6c9109cc7828d99d Mon Sep 17 00:00:00 2001 From: eloylp Date: Sun, 3 Mar 2024 21:19:31 +0100 Subject: [PATCH 037/109] Add solana tx RPC cache wrapper --- ampd/src/solana/mod.rs | 1 + ampd/src/solana/rpc.rs | 71 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 72 insertions(+) create mode 100644 ampd/src/solana/rpc.rs diff --git a/ampd/src/solana/mod.rs b/ampd/src/solana/mod.rs index 39e9c830a..f946c85ff 100644 --- a/ampd/src/solana/mod.rs +++ b/ampd/src/solana/mod.rs @@ -1,5 +1,6 @@ pub mod ws_verifier; pub mod msg_verifier; +pub mod rpc; #[cfg(test)] pub mod test_utils; diff --git a/ampd/src/solana/rpc.rs b/ampd/src/solana/rpc.rs new file mode 100644 index 000000000..9c7cb0075 --- /dev/null +++ b/ampd/src/solana/rpc.rs @@ -0,0 +1,71 @@ +use std::{collections::HashMap, sync::Arc}; + +use solana_client::nonblocking::rpc_client::RpcClient; +use solana_rpc_client_api::client_error::Result as ClientResult; +use solana_sdk::signature::Signature; +use solana_transaction_status::{EncodedConfirmedTransactionWithStatusMeta, UiTransactionEncoding}; +use tokio::sync::RwLock; +pub struct RpcCacheWrapper { + rpc_client: RpcClient, + tx_cache: RwLock>>, +} + +impl RpcCacheWrapper { + pub fn new(rpc_client: RpcClient) -> Self { + Self { + rpc_client, + tx_cache: RwLock::new(HashMap::new()), + } + } + + pub async fn get_transaction( + &self, + signature: &Signature, + encoding: UiTransactionEncoding, + ) -> ClientResult> { + if let Some(cached_tx) = self.tx_cache.read().await.get(signature) { + return Ok(cached_tx.to_owned()); + } + + let tx = Arc::new(self.rpc_client.get_transaction(signature, encoding).await?); + + self.tx_cache + .write() + .await + .insert(signature.clone(), tx.clone()); + + Ok(tx) + } +} + +#[cfg(test)] +mod tests { + + use crate::solana::test_utils::rpc_client_with_recorder; + + use super::*; + use solana_client::rpc_request::RpcRequest; + use tokio::test as async_test; + + #[async_test] + async fn rpc_cache_wrapper_works() { + let (rpc_client, rpc_recorder) = rpc_client_with_recorder(); + let wrapped_rpc_client = RpcCacheWrapper::new(rpc_client); + + let tx_signature = Signature::new_unique(); + + wrapped_rpc_client + .get_transaction(&tx_signature, UiTransactionEncoding::Json) + .await + .unwrap(); + wrapped_rpc_client + .get_transaction(&tx_signature, UiTransactionEncoding::Json) + .await + .unwrap(); + + assert_eq!( + Some(&1), + rpc_recorder.read().await.get(&RpcRequest::GetTransaction) + ); + } +} From dd3356ec9b47628d8de0135409bd820722d01ce8 Mon Sep 17 00:00:00 2001 From: eloylp Date: Sun, 3 Mar 2024 21:45:07 +0100 Subject: [PATCH 038/109] Use cache enabled RPC client (sol msg verifier) --- ampd/src/handlers/solana_verify_msg.rs | 54 +++++++++++++++++++------- ampd/src/lib.rs | 5 ++- 2 files changed, 43 insertions(+), 16 deletions(-) diff --git a/ampd/src/handlers/solana_verify_msg.rs b/ampd/src/handlers/solana_verify_msg.rs index f986999b5..70eea9f59 100644 --- a/ampd/src/handlers/solana_verify_msg.rs +++ b/ampd/src/handlers/solana_verify_msg.rs @@ -2,12 +2,12 @@ use async_trait::async_trait; use cosmrs::cosmwasm::MsgExecuteContract; use error_stack::ResultExt; use serde::Deserialize; -use solana_client::nonblocking::rpc_client::RpcClient; use solana_sdk::signature::Signature; use solana_transaction_status::{EncodedConfirmedTransactionWithStatusMeta, UiTransactionEncoding}; use std::collections::HashSet; use std::convert::TryInto; use std::str::FromStr; +use std::sync::Arc; use tracing::{error, info}; use axelar_wasm_std::voting::{PollId, Vote}; @@ -20,6 +20,7 @@ use crate::event_processor::EventHandler; use crate::handlers::errors::Error; use crate::queue::queued_broadcaster::BroadcasterClient; use crate::solana::msg_verifier::verify_message; +use crate::solana::rpc::RpcCacheWrapper; use crate::types::TMAddress; type Result = error_stack::Result; @@ -53,7 +54,7 @@ where { worker: TMAddress, voting_verifier: TMAddress, - rpc_client: RpcClient, + rpc_client: RpcCacheWrapper, broadcast_client: B, latest_block_height: Receiver, } @@ -65,7 +66,7 @@ where pub fn new( worker: TMAddress, voting_verifier: TMAddress, - rpc_client: RpcClient, + rpc_client: RpcCacheWrapper, broadcast_client: B, latest_block_height: Receiver, ) -> Self { @@ -133,7 +134,7 @@ where let tx_ids_from_msg: HashSet<_> = messages.iter().map(|msg| msg.tx_id.clone()).collect(); - let mut sol_txs: Vec = Vec::new(); + let mut sol_txs: Vec> = Vec::new(); for msg_tx in tx_ids_from_msg { let sol_tx_signature = match Signature::from_str(&msg_tx) { Ok(sig) => sig, @@ -233,8 +234,13 @@ mod test { &voting_verifier, ); - let handler = - super::Handler::new(worker, voting_verifier, rpc_client, broadcast_client, rx); + let handler = super::Handler::new( + worker, + voting_verifier, + RpcCacheWrapper::new(rpc_client), + broadcast_client, + rx, + ); handler.handle(&event).await.unwrap(); assert_eq!( @@ -265,8 +271,13 @@ mod test { &voting_verifier, ); - let handler = - super::Handler::new(worker, voting_verifier, rpc_client, broadcast_client, rx); + let handler = super::Handler::new( + worker, + voting_verifier, + RpcCacheWrapper::new(rpc_client), + broadcast_client, + rx, + ); handler.handle(&event).await.unwrap(); @@ -302,8 +313,13 @@ mod test { &TMAddress::random(PREFIX), // A different, unexpected address comes from the event. ); - let handler = - super::Handler::new(worker, voting_verifier, rpc_client, broadcast_client, rx); + let handler = super::Handler::new( + worker, + voting_verifier, + RpcCacheWrapper::new(rpc_client), + broadcast_client, + rx, + ); handler.handle(&event).await.unwrap(); @@ -334,8 +350,13 @@ mod test { &voting_verifier, ); - let handler = - super::Handler::new(worker, voting_verifier, rpc_client, broadcast_client, rx); + let handler = super::Handler::new( + worker, + voting_verifier, + RpcCacheWrapper::new(rpc_client), + broadcast_client, + rx, + ); handler.handle(&event).await.unwrap(); @@ -366,8 +387,13 @@ mod test { &voting_verifier, ); - let handler = - super::Handler::new(worker, voting_verifier, rpc_client, broadcast_client, rx); + let handler = super::Handler::new( + worker, + voting_verifier, + RpcCacheWrapper::new(rpc_client), + broadcast_client, + rx, + ); handler.handle(&event).await.unwrap(); diff --git a/ampd/src/lib.rs b/ampd/src/lib.rs index b65198068..877ae4980 100644 --- a/ampd/src/lib.rs +++ b/ampd/src/lib.rs @@ -5,6 +5,7 @@ use cosmos_sdk_proto::cosmos::{ auth::v1beta1::query_client::QueryClient, tx::v1beta1::service_client::ServiceClient, }; use error_stack::{FutureExt, Result, ResultExt}; +use solana::rpc::RpcCacheWrapper; use solana_client::nonblocking::rpc_client::RpcClient; use solana_sdk::commitment_config::CommitmentConfig; use thiserror::Error; @@ -267,10 +268,10 @@ where handlers::solana_verify_msg::Handler::new( worker.clone(), cosmwasm_contract, - RpcClient::new_with_commitment( + RpcCacheWrapper::new(RpcClient::new_with_commitment( rpc_url.to_string(), CommitmentConfig::finalized(), - ), + )), self.broadcaster.client(), self.block_height_monitor.latest_block_height(), ), From 880fceaa93a788b4241e32de4fe8befc5c217021 Mon Sep 17 00:00:00 2001 From: eloylp Date: Sun, 3 Mar 2024 22:08:25 +0100 Subject: [PATCH 039/109] Fix/improve msg verifier logic Now we iterate per each message, doing the necessary RPC calls and making the vote decision. The RPC client is now caching requested transactions. Per each message, we search in all sol tx logs, as each tx can hold multiple messages. --- ampd/src/handlers/solana_verify_msg.rs | 27 +++++++++----------------- ampd/src/solana/msg_verifier.rs | 18 +++++++++-------- 2 files changed, 19 insertions(+), 26 deletions(-) diff --git a/ampd/src/handlers/solana_verify_msg.rs b/ampd/src/handlers/solana_verify_msg.rs index 70eea9f59..506d3809f 100644 --- a/ampd/src/handlers/solana_verify_msg.rs +++ b/ampd/src/handlers/solana_verify_msg.rs @@ -4,10 +4,8 @@ use error_stack::ResultExt; use serde::Deserialize; use solana_sdk::signature::Signature; use solana_transaction_status::{EncodedConfirmedTransactionWithStatusMeta, UiTransactionEncoding}; -use std::collections::HashSet; use std::convert::TryInto; use std::str::FromStr; -use std::sync::Arc; use tracing::{error, info}; use axelar_wasm_std::voting::{PollId, Vote}; @@ -132,11 +130,10 @@ where return Ok(()); } - let tx_ids_from_msg: HashSet<_> = messages.iter().map(|msg| msg.tx_id.clone()).collect(); + let mut votes: Vec = Vec::new(); - let mut sol_txs: Vec> = Vec::new(); - for msg_tx in tx_ids_from_msg { - let sol_tx_signature = match Signature::from_str(&msg_tx) { + for msg in messages { + let sol_tx_signature = match Signature::from_str(&msg.tx_id) { Ok(sig) => sig, Err(err) => { error!( @@ -144,6 +141,7 @@ where err = err.to_string(), "Cannot decode solana tx signature" ); + votes.push(Vote::FailedOnChain); continue; } }; @@ -158,33 +156,26 @@ where // When tx is not found a null is returned. solana_client::client_error::ClientErrorKind::SerdeJson(_) => { error!( - tx_id = msg_tx, + tx_id = msg.tx_id, poll_id = poll_id.to_string(), err = err.to_string(), "Cannot find solana tx signature" ); + votes.push(Vote::NotFound); continue; } _ => { error!( - tx_id = msg_tx, + tx_id = msg.tx_id, poll_id = poll_id.to_string(), "RPC error while fetching solana tx" ); - continue; + return Err(Error::TxReceipts)?; } }, }; - sol_txs.push(sol_tx); - } - - let mut votes: Vec = vec![Vote::NotFound; messages.len()]; - for msg in messages { - votes = sol_txs - .iter() - .map(|tx| verify_message(&source_gateway_address, tx, &msg)) - .collect(); + votes.push(verify_message(&source_gateway_address, sol_tx, &msg)); } self.broadcast_votes(poll_id, votes).await diff --git a/ampd/src/solana/msg_verifier.rs b/ampd/src/solana/msg_verifier.rs index f72f63fb1..410c3d62f 100644 --- a/ampd/src/solana/msg_verifier.rs +++ b/ampd/src/solana/msg_verifier.rs @@ -1,3 +1,5 @@ +use std::sync::Arc; + use axelar_wasm_std::voting::Vote; use base64::Engine as _; @@ -42,7 +44,7 @@ fn decode_base64(input: &str) -> Option> { pub fn verify_message( source_gateway_address: &String, - tx: &EncodedConfirmedTransactionWithStatusMeta, + tx: Arc, message: &Message, ) -> Vote { let ui_tx = match &tx.transaction.transaction { @@ -157,7 +159,7 @@ mod tests { let (source_gateway_address, _, tx, msg) = get_matching_msg_and_tx_block(); assert_eq!( Vote::SucceededOnChain, - verify_message(&source_gateway_address, &tx, &msg) + verify_message(&source_gateway_address, Arc::new(tx), &msg) ); } @@ -241,7 +243,7 @@ mod tests { msg.tx_id = "wrong_tx_id".to_string(); assert_eq!( Vote::FailedOnChain, - verify_message(&source_gateway_address, &tx, &msg) + verify_message(&source_gateway_address, Arc::new(tx), &msg) ); } @@ -250,7 +252,7 @@ mod tests { fn should_not_verify_msg_if_event_index_does_not_match() { let (gateway_address, _, tx, mut msg) = get_matching_msg_and_tx_block(); msg.event_index = rand::random::(); - assert_eq!(Vote::NotFound, verify_message(&gateway_address, &tx, &msg)); + assert_eq!(Vote::NotFound, verify_message(&gateway_address, Arc::new(tx), &msg)); } #[test] @@ -259,7 +261,7 @@ mod tests { msg.destination_chain = ChainName::from_str("bad_chain").unwrap(); assert_eq!( Vote::FailedOnChain, - verify_message(&gateway_address, &tx, &msg) + verify_message(&gateway_address, Arc::new(tx), &msg) ); } @@ -269,7 +271,7 @@ mod tests { msg.source_address = PubkeyWrapper::from(Pubkey::from([13; 32])).to_string(); assert_eq!( Vote::FailedOnChain, - verify_message(&source_gateway_address, &tx, &msg) + verify_message(&source_gateway_address, Arc::new(tx), &msg) ); } @@ -279,7 +281,7 @@ mod tests { msg.destination_address = "bad_address".to_string(); assert_eq!( Vote::FailedOnChain, - verify_message(&gateway_address, &tx, &msg) + verify_message(&gateway_address, Arc::new(tx), &msg) ); } @@ -289,7 +291,7 @@ mod tests { msg.payload_hash = [1; 32]; assert_eq!( Vote::FailedOnChain, - verify_message(&gateway_address, &tx, &msg) + verify_message(&gateway_address, Arc::new(tx), &msg) ); } From 5db98756b571c136e514f36e399d53b457dbd716 Mon Sep 17 00:00:00 2001 From: eloylp Date: Sun, 3 Mar 2024 22:10:36 +0100 Subject: [PATCH 040/109] clippy --- ampd/src/handlers/solana_verify_msg.rs | 2 +- ampd/src/solana/rpc.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ampd/src/handlers/solana_verify_msg.rs b/ampd/src/handlers/solana_verify_msg.rs index 506d3809f..31c531d8e 100644 --- a/ampd/src/handlers/solana_verify_msg.rs +++ b/ampd/src/handlers/solana_verify_msg.rs @@ -3,7 +3,7 @@ use cosmrs::cosmwasm::MsgExecuteContract; use error_stack::ResultExt; use serde::Deserialize; use solana_sdk::signature::Signature; -use solana_transaction_status::{EncodedConfirmedTransactionWithStatusMeta, UiTransactionEncoding}; +use solana_transaction_status::{UiTransactionEncoding}; use std::convert::TryInto; use std::str::FromStr; use tracing::{error, info}; diff --git a/ampd/src/solana/rpc.rs b/ampd/src/solana/rpc.rs index 9c7cb0075..4bd44992d 100644 --- a/ampd/src/solana/rpc.rs +++ b/ampd/src/solana/rpc.rs @@ -32,7 +32,7 @@ impl RpcCacheWrapper { self.tx_cache .write() .await - .insert(signature.clone(), tx.clone()); + .insert(*signature, tx.clone()); Ok(tx) } From 509a3a3f2e3398ea7516fef078c81eb40e711b79 Mon Sep 17 00:00:00 2001 From: eloylp Date: Sun, 3 Mar 2024 22:15:43 +0100 Subject: [PATCH 041/109] Remove dead code --- ampd/src/handlers/solana_verify_msg.rs | 5 ----- ampd/src/solana/msg_verifier.rs | 17 ++++++----------- ampd/src/solana/test_utils.rs | 2 -- 3 files changed, 6 insertions(+), 18 deletions(-) diff --git a/ampd/src/handlers/solana_verify_msg.rs b/ampd/src/handlers/solana_verify_msg.rs index 31c531d8e..13c092382 100644 --- a/ampd/src/handlers/solana_verify_msg.rs +++ b/ampd/src/handlers/solana_verify_msg.rs @@ -278,11 +278,6 @@ mod test { ); } - fn dummy_tx_type() -> EncodedConfirmedTransactionWithStatusMeta { - // Example from https://solana.com/docs/rpc/http/gettransaction - serde_json::from_str(include_str!("../solana/tests/solana_tx.json")).unwrap() - } - #[async_test] async fn ignores_poll_event_if_voting_verifier_address_not_match_event_address() { // Setup the context diff --git a/ampd/src/solana/msg_verifier.rs b/ampd/src/solana/msg_verifier.rs index 410c3d62f..05cbbdd9d 100644 --- a/ampd/src/solana/msg_verifier.rs +++ b/ampd/src/solana/msg_verifier.rs @@ -1,13 +1,9 @@ -use std::sync::Arc; - use axelar_wasm_std::voting::Vote; -use base64::Engine as _; - -use base64::{self, engine::general_purpose}; use gmp_gateway::events::GatewayEvent; use solana_transaction_status::{ option_serializer::OptionSerializer, EncodedConfirmedTransactionWithStatusMeta, }; +use std::sync::Arc; use tracing::error; use crate::handlers::solana_verify_msg::Message; @@ -37,11 +33,6 @@ impl PartialEq<&Message> for GatewayEvent { } } -#[inline] -fn decode_base64(input: &str) -> Option> { - general_purpose::STANDARD.decode(input).ok() -} - pub fn verify_message( source_gateway_address: &String, tx: Arc, @@ -144,6 +135,7 @@ fn find_first_log_message_match( #[cfg(test)] mod tests { + use base64::{engine::general_purpose, Engine}; use borsh::BorshSerialize; use gmp_gateway::types::PubkeyWrapper; @@ -252,7 +244,10 @@ mod tests { fn should_not_verify_msg_if_event_index_does_not_match() { let (gateway_address, _, tx, mut msg) = get_matching_msg_and_tx_block(); msg.event_index = rand::random::(); - assert_eq!(Vote::NotFound, verify_message(&gateway_address, Arc::new(tx), &msg)); + assert_eq!( + Vote::NotFound, + verify_message(&gateway_address, Arc::new(tx), &msg) + ); } #[test] diff --git a/ampd/src/solana/test_utils.rs b/ampd/src/solana/test_utils.rs index 8a07ef5e3..c87e56d0b 100644 --- a/ampd/src/solana/test_utils.rs +++ b/ampd/src/solana/test_utils.rs @@ -12,8 +12,6 @@ use solana_rpc_client_api::client_error::Result; use tokio::sync::RwLock; use tonic::async_trait; -pub const PUBKEY: &str = "7RoSF9fUmdphVCpabEoefH81WwrW7orsWonXWqTXkKV8"; - type Registry = Arc>>; pub struct RpcRecorder { From 023d8daa92d1d1c7c106512aca1d9b99683973b7 Mon Sep 17 00:00:00 2001 From: eloylp Date: Mon, 4 Mar 2024 14:56:37 +0100 Subject: [PATCH 042/109] Use LRU tx cache implementation for solana msg verifier --- Cargo.lock | 20 +++++++++++ ampd/Cargo.toml | 1 + ampd/src/handlers/config.rs | 1 + ampd/src/handlers/solana_verify_msg.rs | 12 ++++--- ampd/src/lib.rs | 13 +++++--- ampd/src/solana/rpc.rs | 46 ++++++++++++++++++++------ 6 files changed, 74 insertions(+), 19 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0a94176f8..04296eab4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -206,6 +206,12 @@ dependencies = [ "alloc-no-stdlib", ] +[[package]] +name = "allocator-api2" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5" + [[package]] name = "ampd" version = "0.1.0" @@ -238,6 +244,7 @@ dependencies = [ "humantime-serde", "itertools 0.11.0", "k256", + "lru", "mockall", "move-core-types", "multisig 0.1.0", @@ -4181,6 +4188,10 @@ name = "hashbrown" version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" +dependencies = [ + "ahash 0.8.9", + "allocator-api2", +] [[package]] name = "hashers" @@ -5087,6 +5098,15 @@ dependencies = [ "serde", ] +[[package]] +name = "lru" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3262e75e648fce39813cb56ac41f3c3e3f65217ebf3844d818d1f9398cfb0dc" +dependencies = [ + "hashbrown 0.14.3", +] + [[package]] name = "lz4-sys" version = "1.9.4" diff --git a/ampd/Cargo.toml b/ampd/Cargo.toml index 3d88bcdb6..7e291f239 100644 --- a/ampd/Cargo.toml +++ b/ampd/Cargo.toml @@ -71,6 +71,7 @@ valuable = { version = "0.1.0", features = ["derive"] } valuable-serde = { version = "0.1.0", features = ["std"] } voting-verifier = { workspace = true } gmp-gateway = { git = "ssh://git@github.com/eigerco/solana-axelar.git", branch = "poc" } +lru = "0.12.3" [dev-dependencies] elliptic-curve = "0.13.5" diff --git a/ampd/src/handlers/config.rs b/ampd/src/handlers/config.rs index b76ba9309..57d7620f4 100644 --- a/ampd/src/handlers/config.rs +++ b/ampd/src/handlers/config.rs @@ -47,6 +47,7 @@ pub enum Config { SolanaMsgVerifier { cosmwasm_contract: TMAddress, rpc_url: Url, + max_tx_cache_entries: usize }, SolanaWorkerSetVerifier { cosmwasm_contract: TMAddress, diff --git a/ampd/src/handlers/solana_verify_msg.rs b/ampd/src/handlers/solana_verify_msg.rs index 13c092382..b1c85fc14 100644 --- a/ampd/src/handlers/solana_verify_msg.rs +++ b/ampd/src/handlers/solana_verify_msg.rs @@ -185,6 +185,8 @@ where #[cfg(test)] mod test { + use std::num::NonZeroUsize; + use axelar_wasm_std::nonempty; use base64::{engine::general_purpose::STANDARD, Engine}; use events::Event; @@ -228,7 +230,7 @@ mod test { let handler = super::Handler::new( worker, voting_verifier, - RpcCacheWrapper::new(rpc_client), + RpcCacheWrapper::new(rpc_client, NonZeroUsize::new(10).unwrap()), broadcast_client, rx, ); @@ -265,7 +267,7 @@ mod test { let handler = super::Handler::new( worker, voting_verifier, - RpcCacheWrapper::new(rpc_client), + RpcCacheWrapper::new(rpc_client, NonZeroUsize::new(10).unwrap()), broadcast_client, rx, ); @@ -302,7 +304,7 @@ mod test { let handler = super::Handler::new( worker, voting_verifier, - RpcCacheWrapper::new(rpc_client), + RpcCacheWrapper::new(rpc_client, NonZeroUsize::new(10).unwrap()), broadcast_client, rx, ); @@ -339,7 +341,7 @@ mod test { let handler = super::Handler::new( worker, voting_verifier, - RpcCacheWrapper::new(rpc_client), + RpcCacheWrapper::new(rpc_client, NonZeroUsize::new(10).unwrap()), broadcast_client, rx, ); @@ -376,7 +378,7 @@ mod test { let handler = super::Handler::new( worker, voting_verifier, - RpcCacheWrapper::new(rpc_client), + RpcCacheWrapper::new(rpc_client, NonZeroUsize::new(10).unwrap()), broadcast_client, rx, ); diff --git a/ampd/src/lib.rs b/ampd/src/lib.rs index 877ae4980..680456258 100644 --- a/ampd/src/lib.rs +++ b/ampd/src/lib.rs @@ -1,3 +1,4 @@ +use std::num::NonZeroUsize; use std::pin::Pin; use block_height_monitor::BlockHeightMonitor; @@ -263,15 +264,19 @@ where handlers::config::Config::SolanaMsgVerifier { cosmwasm_contract, rpc_url, + max_tx_cache_entries, } => self.configure_handler( "solana-msg-verifier", handlers::solana_verify_msg::Handler::new( worker.clone(), cosmwasm_contract, - RpcCacheWrapper::new(RpcClient::new_with_commitment( - rpc_url.to_string(), - CommitmentConfig::finalized(), - )), + RpcCacheWrapper::new( + RpcClient::new_with_commitment( + rpc_url.to_string(), + CommitmentConfig::finalized(), + ), + NonZeroUsize::new(max_tx_cache_entries).unwrap(), + ), self.broadcaster.client(), self.block_height_monitor.latest_block_height(), ), diff --git a/ampd/src/solana/rpc.rs b/ampd/src/solana/rpc.rs index 4bd44992d..ef5d752a3 100644 --- a/ampd/src/solana/rpc.rs +++ b/ampd/src/solana/rpc.rs @@ -1,20 +1,24 @@ -use std::{collections::HashMap, sync::Arc}; +use std::{num::NonZeroUsize, sync::Arc}; +use lru::LruCache; use solana_client::nonblocking::rpc_client::RpcClient; use solana_rpc_client_api::client_error::Result as ClientResult; use solana_sdk::signature::Signature; use solana_transaction_status::{EncodedConfirmedTransactionWithStatusMeta, UiTransactionEncoding}; use tokio::sync::RwLock; + +type SyncTxLruCache = RwLock>>; + pub struct RpcCacheWrapper { rpc_client: RpcClient, - tx_cache: RwLock>>, + tx_cache: SyncTxLruCache, } impl RpcCacheWrapper { - pub fn new(rpc_client: RpcClient) -> Self { + pub fn new(rpc_client: RpcClient, max_cache_entries: NonZeroUsize) -> Self { Self { rpc_client, - tx_cache: RwLock::new(HashMap::new()), + tx_cache: RwLock::new(LruCache::new(max_cache_entries)), } } @@ -23,24 +27,29 @@ impl RpcCacheWrapper { signature: &Signature, encoding: UiTransactionEncoding, ) -> ClientResult> { - if let Some(cached_tx) = self.tx_cache.read().await.get(signature) { + let mut tx_cache = self.tx_cache.write().await; + + if let Some(cached_tx) = tx_cache.get(signature) { return Ok(cached_tx.to_owned()); } let tx = Arc::new(self.rpc_client.get_transaction(signature, encoding).await?); - self.tx_cache - .write() - .await - .insert(*signature, tx.clone()); + tx_cache.put(*signature, tx.clone()); Ok(tx) } + + pub async fn entries(&self) -> usize { + self.tx_cache.read().await.len() + } } #[cfg(test)] mod tests { + use std::num::NonZeroUsize; + use crate::solana::test_utils::rpc_client_with_recorder; use super::*; @@ -50,7 +59,7 @@ mod tests { #[async_test] async fn rpc_cache_wrapper_works() { let (rpc_client, rpc_recorder) = rpc_client_with_recorder(); - let wrapped_rpc_client = RpcCacheWrapper::new(rpc_client); + let wrapped_rpc_client = RpcCacheWrapper::new(rpc_client, NonZeroUsize::new(2).unwrap()); let tx_signature = Signature::new_unique(); @@ -68,4 +77,21 @@ mod tests { rpc_recorder.read().await.get(&RpcRequest::GetTransaction) ); } + + #[async_test] + async fn rpc_cache_wrapper_discards_old_entries() { + let (rpc_client, _) = rpc_client_with_recorder(); + let wrapped_rpc_client = RpcCacheWrapper::new(rpc_client, NonZeroUsize::new(2).unwrap()); + + for _ in 0..10 { + let tx_signature = Signature::new_unique(); + + wrapped_rpc_client + .get_transaction(&tx_signature, UiTransactionEncoding::Json) + .await + .unwrap(); + } + + assert_eq!(2, wrapped_rpc_client.entries().await); + } } From 7c706594cd8b7f51e605e421240c221a93383a56 Mon Sep 17 00:00:00 2001 From: eloylp Date: Mon, 4 Mar 2024 19:00:00 +0100 Subject: [PATCH 043/109] refactor: Solana message verifier extract message processing logic --- ampd/src/handlers/solana_verify_msg.rs | 86 +++++++++++++------------- 1 file changed, 43 insertions(+), 43 deletions(-) diff --git a/ampd/src/handlers/solana_verify_msg.rs b/ampd/src/handlers/solana_verify_msg.rs index dd1264a84..ae6210b22 100644 --- a/ampd/src/handlers/solana_verify_msg.rs +++ b/ampd/src/handlers/solana_verify_msg.rs @@ -96,6 +96,48 @@ where .await .change_context(Error::Broadcaster) } + + async fn process_message( + &self, + msg: &Message, + source_gateway_address: &String, + ) -> Result { + let sol_tx_signature = match Signature::from_str(&msg.tx_id) { + Ok(sig) => sig, + Err(err) => { + error!( + tx_id = msg.tx_id.to_string(), + err = err.to_string(), + "Cannot decode solana tx signature" + ); + return Ok(Vote::FailedOnChain); + } + }; + + let sol_tx = match self + .rpc_client + .get_transaction(&sol_tx_signature, UiTransactionEncoding::Json) + .await + { + Ok(tx) => tx, + Err(err) => match err.kind() { + // When tx is not found a null is returned. + solana_client::client_error::ClientErrorKind::SerdeJson(_) => { + error!( + tx_id = msg.tx_id, + err = err.to_string(), + "Cannot find solana tx signature" + ); + return Ok(Vote::NotFound); + } + _ => { + error!(tx_id = msg.tx_id, "RPC error while fetching solana tx"); + return Err(Error::TxReceipts)?; + } + }, + }; + Ok(verify_message(source_gateway_address, sol_tx, &msg)) + } } #[async_trait] @@ -143,49 +185,7 @@ where let mut votes: Vec = Vec::new(); for msg in messages { - let sol_tx_signature = match Signature::from_str(&msg.tx_id) { - Ok(sig) => sig, - Err(err) => { - error!( - poll_id = poll_id.to_string(), - err = err.to_string(), - "Cannot decode solana tx signature" - ); - votes.push(Vote::FailedOnChain); - continue; - } - }; - - let sol_tx = match self - .rpc_client - .get_transaction(&sol_tx_signature, UiTransactionEncoding::Json) - .await - { - Ok(tx) => tx, - Err(err) => match err.kind() { - // When tx is not found a null is returned. - solana_client::client_error::ClientErrorKind::SerdeJson(_) => { - error!( - tx_id = msg.tx_id, - poll_id = poll_id.to_string(), - err = err.to_string(), - "Cannot find solana tx signature" - ); - votes.push(Vote::NotFound); - continue; - } - _ => { - error!( - tx_id = msg.tx_id, - poll_id = poll_id.to_string(), - "RPC error while fetching solana tx" - ); - return Err(Error::TxReceipts)?; - } - }, - }; - - votes.push(verify_message(&source_gateway_address, sol_tx, &msg)); + votes.push(self.process_message(&msg, &source_gateway_address).await?); } self.broadcast_votes(poll_id, votes).await From dce45b0e42d4dfc55bc750480a8539f839d8a25a Mon Sep 17 00:00:00 2001 From: eloylp Date: Mon, 4 Mar 2024 19:44:41 +0100 Subject: [PATCH 044/109] sol msg verifier: Add concurrency for message processing with streams --- ampd/src/handlers/solana_verify_msg.rs | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/ampd/src/handlers/solana_verify_msg.rs b/ampd/src/handlers/solana_verify_msg.rs index ae6210b22..00a9bee4e 100644 --- a/ampd/src/handlers/solana_verify_msg.rs +++ b/ampd/src/handlers/solana_verify_msg.rs @@ -2,6 +2,8 @@ use async_trait::async_trait; use connection_router::state::ChainName; use cosmrs::cosmwasm::MsgExecuteContract; use error_stack::ResultExt; +use futures::stream::FuturesOrdered; +use futures::{StreamExt, TryStreamExt}; use serde::Deserialize; use solana_sdk::signature::Signature; use solana_transaction_status::UiTransactionEncoding; @@ -183,9 +185,14 @@ where } let mut votes: Vec = Vec::new(); + let mut ord_fut = FuturesOrdered::new(); - for msg in messages { - votes.push(self.process_message(&msg, &source_gateway_address).await?); + messages + .iter() + .for_each(|msg| ord_fut.push_back(self.process_message(&msg, &source_gateway_address))); + + while let Some(vote_result) = ord_fut.next().await { + votes.push(vote_result?) // If there is a failure, its due to a network error, so we abort this handler operation and all messages need to be processed again. } self.broadcast_votes(poll_id, votes).await From 41a426b2dd6289e10cbec9cb337095977a676b79 Mon Sep 17 00:00:00 2001 From: eloylp Date: Tue, 5 Mar 2024 11:21:21 +0100 Subject: [PATCH 045/109] Simplify iterator use in msg processing Co-authored-by: tilacog --- ampd/src/handlers/solana_verify_msg.rs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/ampd/src/handlers/solana_verify_msg.rs b/ampd/src/handlers/solana_verify_msg.rs index 00a9bee4e..7e43f808d 100644 --- a/ampd/src/handlers/solana_verify_msg.rs +++ b/ampd/src/handlers/solana_verify_msg.rs @@ -187,9 +187,10 @@ where let mut votes: Vec = Vec::new(); let mut ord_fut = FuturesOrdered::new(); - messages + let mut ord_fut: FuturesOrdered<_> = messages .iter() - .for_each(|msg| ord_fut.push_back(self.process_message(&msg, &source_gateway_address))); + .map(|msg| self.process_message(msg, &source_gateway_address)) + .collect(); while let Some(vote_result) = ord_fut.next().await { votes.push(vote_result?) // If there is a failure, its due to a network error, so we abort this handler operation and all messages need to be processed again. From 0c3c7cfb599b9565871261dc5d452daa0b424c26 Mon Sep 17 00:00:00 2001 From: eloylp Date: Mon, 10 Jun 2024 10:30:04 +0200 Subject: [PATCH 046/109] Add initial integration (POC) of the axelar-encoding crate --- Cargo.lock | 103 ++++++++++++++++ Cargo.toml | 1 + contracts/multisig-prover/Cargo.toml | 1 + contracts/multisig-prover/src/encoding/mod.rs | 2 + .../multisig-prover/src/encoding/sol/mod.rs | 115 ++++++++++++++++++ contracts/multisig-prover/src/error.rs | 5 + contracts/multisig-prover/src/payload.rs | 27 +++- 7 files changed, 253 insertions(+), 1 deletion(-) create mode 100644 contracts/multisig-prover/src/encoding/sol/mod.rs diff --git a/Cargo.lock b/Cargo.lock index 86f4f019f..53fc5dab7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -746,6 +746,16 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +[[package]] +name = "axelar-encoding" +version = "0.1.0" +source = "git+ssh://git@github.com/eigerco/solana-axelar-internal.git?branch=main#4321554e61d8f35fcb8b259b7c3be02ef01ec3b6" +dependencies = [ + "rkyv", + "sha3 0.10.8", + "thiserror", +] + [[package]] name = "axelar-wasm-std" version = "0.1.0" @@ -1289,6 +1299,28 @@ version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3ac9f8b63eca6fd385229b3675f6cc0dc5c8a5c8a54a59d4f52ffd670d87b0c" +[[package]] +name = "bytecheck" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23cdc57ce23ac53c931e88a43d06d070a6fd142f2617be5855eb75efc9beb1c2" +dependencies = [ + "bytecheck_derive", + "ptr_meta", + "simdutf8", +] + +[[package]] +name = "bytecheck_derive" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3db406d29fbcd95542e92559bed4d8ad92636d1ca8b3b72ede10b4bcc010e659" +dependencies = [ + "proc-macro2 1.0.67", + "quote 1.0.33", + "syn 1.0.109", +] + [[package]] name = "bytecount" version = "0.6.7" @@ -5117,6 +5149,7 @@ dependencies = [ "alloy-primitives", "alloy-sol-types", "anyhow", + "axelar-encoding", "axelar-wasm-std", "axelar-wasm-std-derive", "bcs", @@ -6442,6 +6475,26 @@ dependencies = [ "bytes", ] +[[package]] +name = "ptr_meta" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0738ccf7ea06b608c10564b31debd4f5bc5e197fc8bfe088f68ae5ce81e7a4f1" +dependencies = [ + "ptr_meta_derive", +] + +[[package]] +name = "ptr_meta_derive" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16b845dbfca988fa33db069c0e230574d15a3088f147a87b64c7589eb662c9ac" +dependencies = [ + "proc-macro2 1.0.67", + "quote 1.0.33", + "syn 1.0.109", +] + [[package]] name = "quick-error" version = "1.2.3" @@ -6736,6 +6789,15 @@ version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" +[[package]] +name = "rend" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71fe3824f5629716b1589be05dacd749f6aa084c87e00e016714a8cdfccc997c" +dependencies = [ + "bytecheck", +] + [[package]] name = "report" version = "0.1.0" @@ -6889,6 +6951,35 @@ dependencies = [ "digest 0.10.7", ] +[[package]] +name = "rkyv" +version = "0.7.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cba464629b3394fc4dbc6f940ff8f5b4ff5c7aef40f29166fd4ad12acbc99c0" +dependencies = [ + "bitvec 1.0.1", + "bytecheck", + "bytes", + "hashbrown 0.12.3", + "ptr_meta", + "rend", + "rkyv_derive", + "seahash", + "tinyvec", + "uuid 1.4.1", +] + +[[package]] +name = "rkyv_derive" +version = "0.7.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7dddfff8de25e6f62b9d64e6e432bf1c6736c57d20323e15ee10435fbda7c65" +dependencies = [ + "proc-macro2 1.0.67", + "quote 1.0.33", + "syn 1.0.109", +] + [[package]] name = "rlp" version = "0.5.2" @@ -7309,6 +7400,12 @@ dependencies = [ "untrusted", ] +[[package]] +name = "seahash" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b" + [[package]] name = "sec1" version = "0.7.3" @@ -7737,6 +7834,12 @@ version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" +[[package]] +name = "simdutf8" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f27f6278552951f1f2b8cf9da965d10969b2efdea95a6ec47987ab46edfe263a" + [[package]] name = "similar" version = "2.2.1" diff --git a/Cargo.toml b/Cargo.toml index 01387b218..ee9da4014 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -37,6 +37,7 @@ serde_json = "1.0.89" schemars = "0.8.10" sha3 = { version = "0.10.8", default-features = false, features = [] } signature-verifier-api = { version = "^0.1.0", path = "packages/signature-verifier-api" } +axelar-encoding = { git = "ssh://git@github.com/eigerco/solana-axelar-internal.git", branch = "main"} [workspace.lints.clippy] arithmetic_side_effects = "deny" diff --git a/contracts/multisig-prover/Cargo.toml b/contracts/multisig-prover/Cargo.toml index e50323090..30713f7b5 100644 --- a/contracts/multisig-prover/Cargo.toml +++ b/contracts/multisig-prover/Cargo.toml @@ -59,6 +59,7 @@ service-registry = { workspace = true } sha3 = { workspace = true } thiserror = { workspace = true } voting-verifier = { workspace = true, features = ["library"] } +axelar-encoding = { workspace = true } [dev-dependencies] anyhow = "1.0" diff --git a/contracts/multisig-prover/src/encoding/mod.rs b/contracts/multisig-prover/src/encoding/mod.rs index 3ab989f42..6a7367f20 100644 --- a/contracts/multisig-prover/src/encoding/mod.rs +++ b/contracts/multisig-prover/src/encoding/mod.rs @@ -1,4 +1,5 @@ pub mod abi; +pub mod sol; use cosmwasm_schema::cw_serde; @@ -7,4 +8,5 @@ use cosmwasm_schema::cw_serde; pub enum Encoder { Abi, Bcs, + Solana } diff --git a/contracts/multisig-prover/src/encoding/sol/mod.rs b/contracts/multisig-prover/src/encoding/sol/mod.rs new file mode 100644 index 000000000..c40a9a2f5 --- /dev/null +++ b/contracts/multisig-prover/src/encoding/sol/mod.rs @@ -0,0 +1,115 @@ +use std::collections::BTreeMap; + +use axelar_encoding::types::{ + CrossChainId, Message, Payload, PublicKey, Signature, Signer, WeightedSignature, WorkerSet, + U256, +}; + +use itertools::Itertools; +use multisig::{msg::SignerWithSig, verifier_set::VerifierSet}; + +const ECDSA_COMPRESSED_PUBKEY_LEN: usize = 33; // this should be probably a public constant in axelar_encoding. +const ED25519_PUBKEY_LEN: usize = 32; // this should be probably a public constant in axelar_encoding. + +pub fn to_worker_set(vs: &VerifierSet) -> WorkerSet { + let signers: BTreeMap = vs + .signers + .iter() + .map(|(address, signer)| { + let enc_signer = signer.address.to_string(); + let enc_pubkey = to_pub_key(&signer.pub_key); + + let enc_weight = U256::from_be(to_u256_be(signer.weight.u128())); + + ( + address.clone(), + Signer::new(enc_signer, enc_pubkey, enc_weight), + ) + }) + .collect(); + + WorkerSet::new( + vs.created_at, + signers, + U256::from_be(to_u256_be(vs.threshold.u128())), + ) +} + +fn to_pub_key(pk: &multisig::key::PublicKey) -> PublicKey { + match pk { + multisig::key::PublicKey::Ecdsa(hb) => { + PublicKey::new_ecdsa(hb.to_array::().unwrap()) + } + multisig::key::PublicKey::Ed25519(hb) => { + PublicKey::new_ed25519(hb.to_array::().unwrap()) + } + } +} + +// Fits a u128 into a u256 in big endian representation. +fn to_u256_be(u: u128) -> [u8; 32] { + let mut uin256 = [0u8; 32]; + uin256[16..32].copy_from_slice(&u.to_be_bytes()); + uin256 +} + +impl From<&crate::payload::Payload> for Payload { + fn from(value: &crate::payload::Payload) -> Self { + match value { + crate::payload::Payload::Messages(msgs) => { + Payload::new_messages(msgs.iter().map(to_msg).collect_vec()) + } + crate::payload::Payload::VerifierSet(vs) => Payload::new_worker_set(to_worker_set(&vs)), + } + } +} + +fn to_msg(msg: &router_api::Message) -> Message { + let enc_cc_id = CrossChainId::new(msg.cc_id.chain.to_string(), msg.cc_id.id.to_string()); + + Message::new( + enc_cc_id, + msg.source_address.to_string(), + msg.destination_chain.to_string(), + msg.destination_address.to_string(), + msg.payload_hash, + ) +} + +pub fn to_weighted_signature(sig: &SignerWithSig) -> WeightedSignature { + let enc_pub_key = to_pub_key(&sig.signer.pub_key); + let enc_signature = to_signature(&sig.signature); + let enc_weight = U256::from_be(to_u256_be(sig.signer.weight.u128())); + + WeightedSignature::new(enc_pub_key, enc_signature, enc_weight) +} + +fn to_signature(sig: &multisig::key::Signature) -> Signature { + match sig { + multisig::key::Signature::Ecdsa(_) => unimplemented!(), // Todo: should we implement this in axelar_encoding ? + + // Following 2: We are just moving the bytes around, hoping this conversions match. Not sure if `HexBinary` + // representation will match here with the decoding part. + multisig::key::Signature::EcdsaRecoverable(r) => { + Signature::EcdsaRecoverable(r.as_ref().try_into().unwrap()) + } + multisig::key::Signature::Ed25519(ed) => { + Signature::new_ed25519(ed.as_slice().try_into().unwrap()) + } + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn conversion_to_u256_be_works() { + let integer = to_u256_be(u128::MAX); + let expected = [ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + ]; + assert_eq!(expected, integer); + } +} diff --git a/contracts/multisig-prover/src/error.rs b/contracts/multisig-prover/src/error.rs index d95d0e1fd..6acde3bd2 100644 --- a/contracts/multisig-prover/src/error.rs +++ b/contracts/multisig-prover/src/error.rs @@ -41,6 +41,11 @@ pub enum ContractError { #[error(transparent)] BcsError(#[from] bcs::Error), + /// Todo, Below error throws: binary operation `==` cannot be applied to type `EncodingError<1024>` + /// this is a workaround. + #[error("encoding/decoding failure: [0]")] + SolEncodingError(String), + #[error("verifier set has not changed sufficiently since last update")] VerifierSetUnchanged, diff --git a/contracts/multisig-prover/src/payload.rs b/contracts/multisig-prover/src/payload.rs index 14082d89e..66f1c07e4 100644 --- a/contracts/multisig-prover/src/payload.rs +++ b/contracts/multisig-prover/src/payload.rs @@ -1,6 +1,7 @@ use cosmwasm_schema::cw_serde; use cosmwasm_std::{from_json, HexBinary, StdResult}; use cw_storage_plus::{Key, KeyDeserialize, PrimaryKey}; +use itertools::Itertools; use sha3::{Digest, Keccak256}; use axelar_wasm_std::hash::Hash; @@ -9,7 +10,11 @@ use multisig::verifier_set::VerifierSet; use router_api::{CrossChainId, Message}; use crate::{ - encoding::{abi, Encoder}, + encoding::{ + abi, + sol::{to_weighted_signature, to_worker_set}, + Encoder, + }, error::ContractError, }; @@ -46,6 +51,11 @@ impl Payload { match encoder { Encoder::Abi => abi::payload_hash_to_sign(domain_separator, cur_verifier_set, self), Encoder::Bcs => todo!(), + Encoder::Solana => Ok(axelar_encoding::hash_payload( + &domain_separator, + &to_worker_set(cur_verifier_set), + &axelar_encoding::types::Payload::from(self), + )), } } @@ -70,6 +80,21 @@ impl Payload { abi::execute_data::encode(verifier_set, signers_with_sigs, &payload_hash, payload) } Encoder::Bcs => todo!(), + Encoder::Solana => { + let enc_signatures = signers_with_sigs + .iter() + .map(to_weighted_signature) + .collect_vec(); + + let bytes = axelar_encoding::encode::<1024>( // Todo reason about this "1024" magic number. + &to_worker_set(&verifier_set), + enc_signatures, + axelar_encoding::types::Payload::from(payload), + ) + .map_err(|e| ContractError::SolEncodingError(e.to_string()))?; + + Ok(HexBinary::from(bytes)) // Todo, what kind of conversion if any comes from here. Can we expect hex repr directly ? + } } } } From 12c37e1843830d6283638076ecf75fae881231e8 Mon Sep 17 00:00:00 2001 From: eloylp Date: Mon, 10 Jun 2024 19:53:07 +0200 Subject: [PATCH 047/109] Propagate errors, do not panic --- .../multisig-prover/src/encoding/sol/mod.rs | 81 ++++++++++++------- contracts/multisig-prover/src/payload.rs | 20 ++--- 2 files changed, 62 insertions(+), 39 deletions(-) diff --git a/contracts/multisig-prover/src/encoding/sol/mod.rs b/contracts/multisig-prover/src/encoding/sol/mod.rs index c40a9a2f5..fc2644e08 100644 --- a/contracts/multisig-prover/src/encoding/sol/mod.rs +++ b/contracts/multisig-prover/src/encoding/sol/mod.rs @@ -1,4 +1,4 @@ -use std::collections::BTreeMap; +use std::{array::TryFromSliceError, collections::BTreeMap}; use axelar_encoding::types::{ CrossChainId, Message, Payload, PublicKey, Signature, Signer, WeightedSignature, WorkerSet, @@ -8,42 +8,47 @@ use axelar_encoding::types::{ use itertools::Itertools; use multisig::{msg::SignerWithSig, verifier_set::VerifierSet}; +use crate::error::ContractError; + const ECDSA_COMPRESSED_PUBKEY_LEN: usize = 33; // this should be probably a public constant in axelar_encoding. const ED25519_PUBKEY_LEN: usize = 32; // this should be probably a public constant in axelar_encoding. -pub fn to_worker_set(vs: &VerifierSet) -> WorkerSet { - let signers: BTreeMap = vs - .signers +type Result = core::result::Result; + +pub fn to_worker_set(vs: &VerifierSet) -> Result { + let mut signers: BTreeMap = BTreeMap::new(); + + vs.signers .iter() - .map(|(address, signer)| { + .try_for_each(|(address, signer)| -> Result<()> { let enc_signer = signer.address.to_string(); - let enc_pubkey = to_pub_key(&signer.pub_key); + let enc_pubkey = to_pub_key(&signer.pub_key)?; let enc_weight = U256::from_be(to_u256_be(signer.weight.u128())); - ( + signers.insert( address.clone(), Signer::new(enc_signer, enc_pubkey, enc_weight), - ) - }) - .collect(); + ); + Ok(()) + })?; - WorkerSet::new( + Ok(WorkerSet::new( vs.created_at, signers, U256::from_be(to_u256_be(vs.threshold.u128())), - ) + )) } -fn to_pub_key(pk: &multisig::key::PublicKey) -> PublicKey { - match pk { +fn to_pub_key(pk: &multisig::key::PublicKey) -> Result { + Ok(match pk { multisig::key::PublicKey::Ecdsa(hb) => { - PublicKey::new_ecdsa(hb.to_array::().unwrap()) + PublicKey::new_ecdsa(hb.to_array::()?) } multisig::key::PublicKey::Ed25519(hb) => { - PublicKey::new_ed25519(hb.to_array::().unwrap()) + PublicKey::new_ed25519(hb.to_array::()?) } - } + }) } // Fits a u128 into a u256 in big endian representation. @@ -53,14 +58,17 @@ fn to_u256_be(u: u128) -> [u8; 32] { uin256 } -impl From<&crate::payload::Payload> for Payload { - fn from(value: &crate::payload::Payload) -> Self { - match value { +impl TryFrom<&crate::payload::Payload> for Payload { + type Error = ContractError; + fn try_from(value: &crate::payload::Payload) -> std::result::Result { + Ok(match value { crate::payload::Payload::Messages(msgs) => { Payload::new_messages(msgs.iter().map(to_msg).collect_vec()) } - crate::payload::Payload::VerifierSet(vs) => Payload::new_worker_set(to_worker_set(&vs)), - } + crate::payload::Payload::VerifierSet(vs) => { + Payload::new_worker_set(to_worker_set(&vs)?) + } + }) } } @@ -76,25 +84,38 @@ fn to_msg(msg: &router_api::Message) -> Message { ) } -pub fn to_weighted_signature(sig: &SignerWithSig) -> WeightedSignature { - let enc_pub_key = to_pub_key(&sig.signer.pub_key); - let enc_signature = to_signature(&sig.signature); +pub fn to_weighted_signature(sig: &SignerWithSig) -> Result { + let enc_pub_key = to_pub_key(&sig.signer.pub_key)?; + let enc_signature = to_signature(&sig.signature)?; let enc_weight = U256::from_be(to_u256_be(sig.signer.weight.u128())); - WeightedSignature::new(enc_pub_key, enc_signature, enc_weight) + Ok(WeightedSignature::new( + enc_pub_key, + enc_signature, + enc_weight, + )) } -fn to_signature(sig: &multisig::key::Signature) -> Signature { +fn to_signature(sig: &multisig::key::Signature) -> Result { match sig { multisig::key::Signature::Ecdsa(_) => unimplemented!(), // Todo: should we implement this in axelar_encoding ? - + // Following 2: We are just moving the bytes around, hoping this conversions match. Not sure if `HexBinary` // representation will match here with the decoding part. multisig::key::Signature::EcdsaRecoverable(r) => { - Signature::EcdsaRecoverable(r.as_ref().try_into().unwrap()) + let data = r + .as_ref() + .try_into() + .map_err(|e: TryFromSliceError| ContractError::SolEncodingError(e.to_string()))?; + Ok(Signature::EcdsaRecoverable(data)) } multisig::key::Signature::Ed25519(ed) => { - Signature::new_ed25519(ed.as_slice().try_into().unwrap()) + let data = ed + .as_ref() + .try_into() + .map_err(|e: TryFromSliceError| ContractError::SolEncodingError(e.to_string()))?; + + Ok(Signature::new_ed25519(data)) } } } diff --git a/contracts/multisig-prover/src/payload.rs b/contracts/multisig-prover/src/payload.rs index 66f1c07e4..ed5dfd67b 100644 --- a/contracts/multisig-prover/src/payload.rs +++ b/contracts/multisig-prover/src/payload.rs @@ -53,8 +53,8 @@ impl Payload { Encoder::Bcs => todo!(), Encoder::Solana => Ok(axelar_encoding::hash_payload( &domain_separator, - &to_worker_set(cur_verifier_set), - &axelar_encoding::types::Payload::from(self), + &to_worker_set(cur_verifier_set)?, + &axelar_encoding::types::Payload::try_from(self)?, )), } } @@ -81,15 +81,17 @@ impl Payload { } Encoder::Bcs => todo!(), Encoder::Solana => { - let enc_signatures = signers_with_sigs - .iter() - .map(to_weighted_signature) - .collect_vec(); + let mut enc_signatures = Vec::new(); + + for s in signers_with_sigs { + enc_signatures.push(to_weighted_signature(&s)?) + } - let bytes = axelar_encoding::encode::<1024>( // Todo reason about this "1024" magic number. - &to_worker_set(&verifier_set), + let bytes = axelar_encoding::encode::<1024>( + // Todo reason about this "1024" magic number. + &to_worker_set(&verifier_set)?, enc_signatures, - axelar_encoding::types::Payload::from(payload), + axelar_encoding::types::Payload::try_from(payload)?, ) .map_err(|e| ContractError::SolEncodingError(e.to_string()))?; From 3812bbe263f5f7eb698e47756343d757602c72cf Mon Sep 17 00:00:00 2001 From: eloylp Date: Tue, 11 Jun 2024 17:59:47 +0200 Subject: [PATCH 048/109] Rename encoding method --- contracts/multisig-prover/src/encoding/mod.rs | 2 +- contracts/multisig-prover/src/payload.rs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/contracts/multisig-prover/src/encoding/mod.rs b/contracts/multisig-prover/src/encoding/mod.rs index 6a7367f20..bbcf9d34c 100644 --- a/contracts/multisig-prover/src/encoding/mod.rs +++ b/contracts/multisig-prover/src/encoding/mod.rs @@ -8,5 +8,5 @@ use cosmwasm_schema::cw_serde; pub enum Encoder { Abi, Bcs, - Solana + Rkyv, } diff --git a/contracts/multisig-prover/src/payload.rs b/contracts/multisig-prover/src/payload.rs index ed5dfd67b..406204994 100644 --- a/contracts/multisig-prover/src/payload.rs +++ b/contracts/multisig-prover/src/payload.rs @@ -51,7 +51,7 @@ impl Payload { match encoder { Encoder::Abi => abi::payload_hash_to_sign(domain_separator, cur_verifier_set, self), Encoder::Bcs => todo!(), - Encoder::Solana => Ok(axelar_encoding::hash_payload( + Encoder::Rkyv => Ok(axelar_encoding::hash_payload( &domain_separator, &to_worker_set(cur_verifier_set)?, &axelar_encoding::types::Payload::try_from(self)?, @@ -80,7 +80,7 @@ impl Payload { abi::execute_data::encode(verifier_set, signers_with_sigs, &payload_hash, payload) } Encoder::Bcs => todo!(), - Encoder::Solana => { + Encoder::Rkyv => { let mut enc_signatures = Vec::new(); for s in signers_with_sigs { From 366d837323c0f65f18c2812ab1f19293f436108b Mon Sep 17 00:00:00 2001 From: eloylp Date: Tue, 11 Jun 2024 18:12:29 +0200 Subject: [PATCH 049/109] Invert qualified names for Rkyv encoding types --- .../multisig-prover/src/encoding/sol/mod.rs | 67 +++++++++---------- 1 file changed, 32 insertions(+), 35 deletions(-) diff --git a/contracts/multisig-prover/src/encoding/sol/mod.rs b/contracts/multisig-prover/src/encoding/sol/mod.rs index fc2644e08..92cacd0a4 100644 --- a/contracts/multisig-prover/src/encoding/sol/mod.rs +++ b/contracts/multisig-prover/src/encoding/sol/mod.rs @@ -1,22 +1,19 @@ use std::{array::TryFromSliceError, collections::BTreeMap}; -use axelar_encoding::types::{ - CrossChainId, Message, Payload, PublicKey, Signature, Signer, WeightedSignature, WorkerSet, - U256, -}; use itertools::Itertools; -use multisig::{msg::SignerWithSig, verifier_set::VerifierSet}; +use multisig::{key::{PublicKey, Signature}, msg::SignerWithSig, verifier_set::VerifierSet}; +use router_api::Message; -use crate::error::ContractError; +use crate::{error::ContractError, payload::Payload}; const ECDSA_COMPRESSED_PUBKEY_LEN: usize = 33; // this should be probably a public constant in axelar_encoding. const ED25519_PUBKEY_LEN: usize = 32; // this should be probably a public constant in axelar_encoding. type Result = core::result::Result; -pub fn to_worker_set(vs: &VerifierSet) -> Result { - let mut signers: BTreeMap = BTreeMap::new(); +pub fn to_worker_set(vs: &VerifierSet) -> Result { + let mut signers: BTreeMap = BTreeMap::new(); vs.signers .iter() @@ -24,29 +21,29 @@ pub fn to_worker_set(vs: &VerifierSet) -> Result { let enc_signer = signer.address.to_string(); let enc_pubkey = to_pub_key(&signer.pub_key)?; - let enc_weight = U256::from_be(to_u256_be(signer.weight.u128())); + let enc_weight = axelar_encoding::types::U256::from_be(to_u256_be(signer.weight.u128())); signers.insert( address.clone(), - Signer::new(enc_signer, enc_pubkey, enc_weight), + axelar_encoding::types::Signer::new(enc_signer, enc_pubkey, enc_weight), ); Ok(()) })?; - Ok(WorkerSet::new( + Ok(axelar_encoding::types::WorkerSet::new( vs.created_at, signers, - U256::from_be(to_u256_be(vs.threshold.u128())), + axelar_encoding::types::U256::from_be(to_u256_be(vs.threshold.u128())), )) } -fn to_pub_key(pk: &multisig::key::PublicKey) -> Result { +fn to_pub_key(pk: &PublicKey) -> Result { Ok(match pk { - multisig::key::PublicKey::Ecdsa(hb) => { - PublicKey::new_ecdsa(hb.to_array::()?) + PublicKey::Ecdsa(hb) => { + axelar_encoding::types::PublicKey::new_ecdsa(hb.to_array::()?) } - multisig::key::PublicKey::Ed25519(hb) => { - PublicKey::new_ed25519(hb.to_array::()?) + PublicKey::Ed25519(hb) => { + axelar_encoding::types::PublicKey::new_ed25519(hb.to_array::()?) } }) } @@ -58,24 +55,24 @@ fn to_u256_be(u: u128) -> [u8; 32] { uin256 } -impl TryFrom<&crate::payload::Payload> for Payload { +impl TryFrom<&Payload> for axelar_encoding::types::Payload { type Error = ContractError; - fn try_from(value: &crate::payload::Payload) -> std::result::Result { + fn try_from(value: &Payload) -> std::result::Result { Ok(match value { - crate::payload::Payload::Messages(msgs) => { - Payload::new_messages(msgs.iter().map(to_msg).collect_vec()) + Payload::Messages(msgs) => { + axelar_encoding::types::Payload::new_messages(msgs.iter().map(to_msg).collect_vec()) } - crate::payload::Payload::VerifierSet(vs) => { - Payload::new_worker_set(to_worker_set(&vs)?) + Payload::VerifierSet(vs) => { + axelar_encoding::types::Payload::new_worker_set(to_worker_set(&vs)?) } }) } } -fn to_msg(msg: &router_api::Message) -> Message { - let enc_cc_id = CrossChainId::new(msg.cc_id.chain.to_string(), msg.cc_id.id.to_string()); +fn to_msg(msg: &Message) -> axelar_encoding::types::Message { + let enc_cc_id = axelar_encoding::types::CrossChainId::new(msg.cc_id.chain.to_string(), msg.cc_id.id.to_string()); - Message::new( + axelar_encoding::types::Message::new( enc_cc_id, msg.source_address.to_string(), msg.destination_chain.to_string(), @@ -84,38 +81,38 @@ fn to_msg(msg: &router_api::Message) -> Message { ) } -pub fn to_weighted_signature(sig: &SignerWithSig) -> Result { +pub fn to_weighted_signature(sig: &SignerWithSig) -> Result { let enc_pub_key = to_pub_key(&sig.signer.pub_key)?; let enc_signature = to_signature(&sig.signature)?; - let enc_weight = U256::from_be(to_u256_be(sig.signer.weight.u128())); + let enc_weight = axelar_encoding::types::U256::from_be(to_u256_be(sig.signer.weight.u128())); - Ok(WeightedSignature::new( + Ok(axelar_encoding::types::WeightedSignature::new( enc_pub_key, enc_signature, enc_weight, )) } -fn to_signature(sig: &multisig::key::Signature) -> Result { +fn to_signature(sig: &Signature) -> Result { match sig { - multisig::key::Signature::Ecdsa(_) => unimplemented!(), // Todo: should we implement this in axelar_encoding ? + Signature::Ecdsa(_) => unimplemented!(), // Todo: should we implement this in axelar_encoding ? // Following 2: We are just moving the bytes around, hoping this conversions match. Not sure if `HexBinary` // representation will match here with the decoding part. - multisig::key::Signature::EcdsaRecoverable(r) => { + Signature::EcdsaRecoverable(r) => { let data = r .as_ref() .try_into() .map_err(|e: TryFromSliceError| ContractError::SolEncodingError(e.to_string()))?; - Ok(Signature::EcdsaRecoverable(data)) + Ok(axelar_encoding::types::Signature::EcdsaRecoverable(data)) } - multisig::key::Signature::Ed25519(ed) => { + Signature::Ed25519(ed) => { let data = ed .as_ref() .try_into() .map_err(|e: TryFromSliceError| ContractError::SolEncodingError(e.to_string()))?; - Ok(Signature::new_ed25519(data)) + Ok(axelar_encoding::types::Signature::new_ed25519(data)) } } } From f7f42eee9e24d2283e63b255d3f5c086f89fa2e4 Mon Sep 17 00:00:00 2001 From: eloylp Date: Tue, 11 Jun 2024 18:32:02 +0200 Subject: [PATCH 050/109] Align new naming with rest of rkyv elements --- contracts/multisig-prover/src/encoding/mod.rs | 2 +- .../src/encoding/{sol => rkyv}/mod.rs | 29 ++++++++++++------- contracts/multisig-prover/src/error.rs | 2 +- contracts/multisig-prover/src/payload.rs | 4 +-- 4 files changed, 23 insertions(+), 14 deletions(-) rename contracts/multisig-prover/src/encoding/{sol => rkyv}/mod.rs (82%) diff --git a/contracts/multisig-prover/src/encoding/mod.rs b/contracts/multisig-prover/src/encoding/mod.rs index bbcf9d34c..68a0912c8 100644 --- a/contracts/multisig-prover/src/encoding/mod.rs +++ b/contracts/multisig-prover/src/encoding/mod.rs @@ -1,5 +1,5 @@ pub mod abi; -pub mod sol; +pub mod rkyv; use cosmwasm_schema::cw_serde; diff --git a/contracts/multisig-prover/src/encoding/sol/mod.rs b/contracts/multisig-prover/src/encoding/rkyv/mod.rs similarity index 82% rename from contracts/multisig-prover/src/encoding/sol/mod.rs rename to contracts/multisig-prover/src/encoding/rkyv/mod.rs index 92cacd0a4..e2b06eedf 100644 --- a/contracts/multisig-prover/src/encoding/sol/mod.rs +++ b/contracts/multisig-prover/src/encoding/rkyv/mod.rs @@ -1,8 +1,11 @@ use std::{array::TryFromSliceError, collections::BTreeMap}; - use itertools::Itertools; -use multisig::{key::{PublicKey, Signature}, msg::SignerWithSig, verifier_set::VerifierSet}; +use multisig::{ + key::{PublicKey, Signature}, + msg::SignerWithSig, + verifier_set::VerifierSet, +}; use router_api::Message; use crate::{error::ContractError, payload::Payload}; @@ -21,7 +24,8 @@ pub fn to_worker_set(vs: &VerifierSet) -> Result Result Result { Ok(match pk { - PublicKey::Ecdsa(hb) => { - axelar_encoding::types::PublicKey::new_ecdsa(hb.to_array::()?) - } + PublicKey::Ecdsa(hb) => axelar_encoding::types::PublicKey::new_ecdsa( + hb.to_array::()?, + ), PublicKey::Ed25519(hb) => { axelar_encoding::types::PublicKey::new_ed25519(hb.to_array::()?) } @@ -70,7 +74,10 @@ impl TryFrom<&Payload> for axelar_encoding::types::Payload { } fn to_msg(msg: &Message) -> axelar_encoding::types::Message { - let enc_cc_id = axelar_encoding::types::CrossChainId::new(msg.cc_id.chain.to_string(), msg.cc_id.id.to_string()); + let enc_cc_id = axelar_encoding::types::CrossChainId::new( + msg.cc_id.chain.to_string(), + msg.cc_id.id.to_string(), + ); axelar_encoding::types::Message::new( enc_cc_id, @@ -81,7 +88,9 @@ fn to_msg(msg: &Message) -> axelar_encoding::types::Message { ) } -pub fn to_weighted_signature(sig: &SignerWithSig) -> Result { +pub fn to_weighted_signature( + sig: &SignerWithSig, +) -> Result { let enc_pub_key = to_pub_key(&sig.signer.pub_key)?; let enc_signature = to_signature(&sig.signature)?; let enc_weight = axelar_encoding::types::U256::from_be(to_u256_be(sig.signer.weight.u128())); @@ -103,14 +112,14 @@ fn to_signature(sig: &Signature) -> Result { let data = r .as_ref() .try_into() - .map_err(|e: TryFromSliceError| ContractError::SolEncodingError(e.to_string()))?; + .map_err(|e: TryFromSliceError| ContractError::RkyvEncodingError(e.to_string()))?; Ok(axelar_encoding::types::Signature::EcdsaRecoverable(data)) } Signature::Ed25519(ed) => { let data = ed .as_ref() .try_into() - .map_err(|e: TryFromSliceError| ContractError::SolEncodingError(e.to_string()))?; + .map_err(|e: TryFromSliceError| ContractError::RkyvEncodingError(e.to_string()))?; Ok(axelar_encoding::types::Signature::new_ed25519(data)) } diff --git a/contracts/multisig-prover/src/error.rs b/contracts/multisig-prover/src/error.rs index 6acde3bd2..9327117e2 100644 --- a/contracts/multisig-prover/src/error.rs +++ b/contracts/multisig-prover/src/error.rs @@ -44,7 +44,7 @@ pub enum ContractError { /// Todo, Below error throws: binary operation `==` cannot be applied to type `EncodingError<1024>` /// this is a workaround. #[error("encoding/decoding failure: [0]")] - SolEncodingError(String), + RkyvEncodingError(String), #[error("verifier set has not changed sufficiently since last update")] VerifierSetUnchanged, diff --git a/contracts/multisig-prover/src/payload.rs b/contracts/multisig-prover/src/payload.rs index 406204994..7e05ac454 100644 --- a/contracts/multisig-prover/src/payload.rs +++ b/contracts/multisig-prover/src/payload.rs @@ -12,7 +12,7 @@ use router_api::{CrossChainId, Message}; use crate::{ encoding::{ abi, - sol::{to_weighted_signature, to_worker_set}, + rkyv::{to_weighted_signature, to_worker_set}, Encoder, }, error::ContractError, @@ -93,7 +93,7 @@ impl Payload { enc_signatures, axelar_encoding::types::Payload::try_from(payload)?, ) - .map_err(|e| ContractError::SolEncodingError(e.to_string()))?; + .map_err(|e| ContractError::RkyvEncodingError(e.to_string()))?; Ok(HexBinary::from(bytes)) // Todo, what kind of conversion if any comes from here. Can we expect hex repr directly ? } From 1766b3b2b52f4f9b3d0d40b7847629b78a02b760 Mon Sep 17 00:00:00 2001 From: eloylp Date: Tue, 11 Jun 2024 18:39:00 +0200 Subject: [PATCH 051/109] Remove confusing, wrong comment --- contracts/multisig-prover/src/payload.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts/multisig-prover/src/payload.rs b/contracts/multisig-prover/src/payload.rs index 7e05ac454..ad5269134 100644 --- a/contracts/multisig-prover/src/payload.rs +++ b/contracts/multisig-prover/src/payload.rs @@ -95,7 +95,7 @@ impl Payload { ) .map_err(|e| ContractError::RkyvEncodingError(e.to_string()))?; - Ok(HexBinary::from(bytes)) // Todo, what kind of conversion if any comes from here. Can we expect hex repr directly ? + Ok(HexBinary::from(bytes)) } } } From 23be5851636afac76128f097f0353aa15bc3b7fe Mon Sep 17 00:00:00 2001 From: eloylp Date: Wed, 12 Jun 2024 12:38:40 +0200 Subject: [PATCH 052/109] Align encoding integration with latest changes in encoding crate - Use the new crate renaming `axlelar-rkyv-encoding` - Import the create directly from the development branch - Use now public constants - Change to little endian everywhere --- Cargo.lock | 6 +- Cargo.toml | 2 +- contracts/multisig-prover/Cargo.toml | 2 +- .../multisig-prover/src/encoding/rkyv/mod.rs | 65 ++++++++++--------- contracts/multisig-prover/src/payload.rs | 8 +-- 5 files changed, 42 insertions(+), 41 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 53fc5dab7..1b9b5d98c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -747,9 +747,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" [[package]] -name = "axelar-encoding" +name = "axelar-rkyv-encoding" version = "0.1.0" -source = "git+ssh://git@github.com/eigerco/solana-axelar-internal.git?branch=main#4321554e61d8f35fcb8b259b7c3be02ef01ec3b6" +source = "git+ssh://git@github.com/eigerco/solana-axelar-internal.git?branch=gateway/axelar-encoding#bd7ffa32020a52d5fc13398338cef7f208fb2845" dependencies = [ "rkyv", "sha3 0.10.8", @@ -5149,7 +5149,7 @@ dependencies = [ "alloy-primitives", "alloy-sol-types", "anyhow", - "axelar-encoding", + "axelar-rkyv-encoding", "axelar-wasm-std", "axelar-wasm-std-derive", "bcs", diff --git a/Cargo.toml b/Cargo.toml index ee9da4014..2bec5c33e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -37,7 +37,7 @@ serde_json = "1.0.89" schemars = "0.8.10" sha3 = { version = "0.10.8", default-features = false, features = [] } signature-verifier-api = { version = "^0.1.0", path = "packages/signature-verifier-api" } -axelar-encoding = { git = "ssh://git@github.com/eigerco/solana-axelar-internal.git", branch = "main"} +axelar-rkyv-encoding = { git = "ssh://git@github.com/eigerco/solana-axelar-internal.git", branch = "gateway/axelar-encoding"} [workspace.lints.clippy] arithmetic_side_effects = "deny" diff --git a/contracts/multisig-prover/Cargo.toml b/contracts/multisig-prover/Cargo.toml index 30713f7b5..72ccb1100 100644 --- a/contracts/multisig-prover/Cargo.toml +++ b/contracts/multisig-prover/Cargo.toml @@ -59,7 +59,7 @@ service-registry = { workspace = true } sha3 = { workspace = true } thiserror = { workspace = true } voting-verifier = { workspace = true, features = ["library"] } -axelar-encoding = { workspace = true } +axelar-rkyv-encoding = { workspace = true } [dev-dependencies] anyhow = "1.0" diff --git a/contracts/multisig-prover/src/encoding/rkyv/mod.rs b/contracts/multisig-prover/src/encoding/rkyv/mod.rs index e2b06eedf..d1906b620 100644 --- a/contracts/multisig-prover/src/encoding/rkyv/mod.rs +++ b/contracts/multisig-prover/src/encoding/rkyv/mod.rs @@ -1,5 +1,6 @@ use std::{array::TryFromSliceError, collections::BTreeMap}; +use axelar_rkyv_encoding::types::{ECDSA_COMPRESSED_PUBKEY_LEN, ED25519_PUBKEY_LEN}; use itertools::Itertools; use multisig::{ key::{PublicKey, Signature}, @@ -10,13 +11,10 @@ use router_api::Message; use crate::{error::ContractError, payload::Payload}; -const ECDSA_COMPRESSED_PUBKEY_LEN: usize = 33; // this should be probably a public constant in axelar_encoding. -const ED25519_PUBKEY_LEN: usize = 32; // this should be probably a public constant in axelar_encoding. - type Result = core::result::Result; -pub fn to_worker_set(vs: &VerifierSet) -> Result { - let mut signers: BTreeMap = BTreeMap::new(); +pub fn to_worker_set(vs: &VerifierSet) -> Result { + let mut signers: BTreeMap = BTreeMap::new(); vs.signers .iter() @@ -25,61 +23,61 @@ pub fn to_worker_set(vs: &VerifierSet) -> Result Result { +fn to_pub_key(pk: &PublicKey) -> Result { Ok(match pk { - PublicKey::Ecdsa(hb) => axelar_encoding::types::PublicKey::new_ecdsa( + PublicKey::Ecdsa(hb) => axelar_rkyv_encoding::types::PublicKey::new_ecdsa( hb.to_array::()?, ), - PublicKey::Ed25519(hb) => { - axelar_encoding::types::PublicKey::new_ed25519(hb.to_array::()?) - } + PublicKey::Ed25519(hb) => axelar_rkyv_encoding::types::PublicKey::new_ed25519( + hb.to_array::()?, + ), }) } // Fits a u128 into a u256 in big endian representation. fn to_u256_be(u: u128) -> [u8; 32] { let mut uin256 = [0u8; 32]; - uin256[16..32].copy_from_slice(&u.to_be_bytes()); + uin256[0..16].copy_from_slice(&u.to_le_bytes()); uin256 } -impl TryFrom<&Payload> for axelar_encoding::types::Payload { +impl TryFrom<&Payload> for axelar_rkyv_encoding::types::Payload { type Error = ContractError; fn try_from(value: &Payload) -> std::result::Result { Ok(match value { - Payload::Messages(msgs) => { - axelar_encoding::types::Payload::new_messages(msgs.iter().map(to_msg).collect_vec()) - } + Payload::Messages(msgs) => axelar_rkyv_encoding::types::Payload::new_messages( + msgs.iter().map(to_msg).collect_vec(), + ), Payload::VerifierSet(vs) => { - axelar_encoding::types::Payload::new_worker_set(to_worker_set(&vs)?) + axelar_rkyv_encoding::types::Payload::new_worker_set(to_worker_set(&vs)?) } }) } } -fn to_msg(msg: &Message) -> axelar_encoding::types::Message { - let enc_cc_id = axelar_encoding::types::CrossChainId::new( +fn to_msg(msg: &Message) -> axelar_rkyv_encoding::types::Message { + let enc_cc_id = axelar_rkyv_encoding::types::CrossChainId::new( msg.cc_id.chain.to_string(), msg.cc_id.id.to_string(), ); - axelar_encoding::types::Message::new( + axelar_rkyv_encoding::types::Message::new( enc_cc_id, msg.source_address.to_string(), msg.destination_chain.to_string(), @@ -90,19 +88,20 @@ fn to_msg(msg: &Message) -> axelar_encoding::types::Message { pub fn to_weighted_signature( sig: &SignerWithSig, -) -> Result { +) -> Result { let enc_pub_key = to_pub_key(&sig.signer.pub_key)?; let enc_signature = to_signature(&sig.signature)?; - let enc_weight = axelar_encoding::types::U256::from_be(to_u256_be(sig.signer.weight.u128())); + let enc_weight = + axelar_rkyv_encoding::types::U256::from_le(to_u256_be(sig.signer.weight.u128())); - Ok(axelar_encoding::types::WeightedSignature::new( + Ok(axelar_rkyv_encoding::types::WeightedSignature::new( enc_pub_key, enc_signature, enc_weight, )) } -fn to_signature(sig: &Signature) -> Result { +fn to_signature(sig: &Signature) -> Result { match sig { Signature::Ecdsa(_) => unimplemented!(), // Todo: should we implement this in axelar_encoding ? @@ -113,7 +112,9 @@ fn to_signature(sig: &Signature) -> Result { .as_ref() .try_into() .map_err(|e: TryFromSliceError| ContractError::RkyvEncodingError(e.to_string()))?; - Ok(axelar_encoding::types::Signature::EcdsaRecoverable(data)) + Ok(axelar_rkyv_encoding::types::Signature::EcdsaRecoverable( + data, + )) } Signature::Ed25519(ed) => { let data = ed @@ -121,7 +122,7 @@ fn to_signature(sig: &Signature) -> Result { .try_into() .map_err(|e: TryFromSliceError| ContractError::RkyvEncodingError(e.to_string()))?; - Ok(axelar_encoding::types::Signature::new_ed25519(data)) + Ok(axelar_rkyv_encoding::types::Signature::new_ed25519(data)) } } } @@ -131,11 +132,11 @@ mod tests { use super::*; #[test] - fn conversion_to_u256_be_works() { + fn conversion_to_u256_le_works() { let integer = to_u256_be(u128::MAX); let expected = [ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ]; assert_eq!(expected, integer); } diff --git a/contracts/multisig-prover/src/payload.rs b/contracts/multisig-prover/src/payload.rs index ad5269134..ab591f67a 100644 --- a/contracts/multisig-prover/src/payload.rs +++ b/contracts/multisig-prover/src/payload.rs @@ -51,10 +51,10 @@ impl Payload { match encoder { Encoder::Abi => abi::payload_hash_to_sign(domain_separator, cur_verifier_set, self), Encoder::Bcs => todo!(), - Encoder::Rkyv => Ok(axelar_encoding::hash_payload( + Encoder::Rkyv => Ok(axelar_rkyv_encoding::hash_payload( &domain_separator, &to_worker_set(cur_verifier_set)?, - &axelar_encoding::types::Payload::try_from(self)?, + &axelar_rkyv_encoding::types::Payload::try_from(self)?, )), } } @@ -87,11 +87,11 @@ impl Payload { enc_signatures.push(to_weighted_signature(&s)?) } - let bytes = axelar_encoding::encode::<1024>( + let bytes = axelar_rkyv_encoding::encode::<1024>( // Todo reason about this "1024" magic number. &to_worker_set(&verifier_set)?, enc_signatures, - axelar_encoding::types::Payload::try_from(payload)?, + axelar_rkyv_encoding::types::Payload::try_from(payload)?, ) .map_err(|e| ContractError::RkyvEncodingError(e.to_string()))?; From a30bd5645cb78d678c68b46e6f11e46263fbbf99 Mon Sep 17 00:00:00 2001 From: eloylp Date: Wed, 12 Jun 2024 13:13:12 +0200 Subject: [PATCH 053/109] Align function name with what it does --- contracts/multisig-prover/src/encoding/rkyv/mod.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/contracts/multisig-prover/src/encoding/rkyv/mod.rs b/contracts/multisig-prover/src/encoding/rkyv/mod.rs index d1906b620..cca67b621 100644 --- a/contracts/multisig-prover/src/encoding/rkyv/mod.rs +++ b/contracts/multisig-prover/src/encoding/rkyv/mod.rs @@ -23,7 +23,7 @@ pub fn to_worker_set(vs: &VerifierSet) -> Result Result Result } // Fits a u128 into a u256 in big endian representation. -fn to_u256_be(u: u128) -> [u8; 32] { +fn to_u256_le(u: u128) -> [u8; 32] { let mut uin256 = [0u8; 32]; uin256[0..16].copy_from_slice(&u.to_le_bytes()); uin256 @@ -92,7 +92,7 @@ pub fn to_weighted_signature( let enc_pub_key = to_pub_key(&sig.signer.pub_key)?; let enc_signature = to_signature(&sig.signature)?; let enc_weight = - axelar_rkyv_encoding::types::U256::from_le(to_u256_be(sig.signer.weight.u128())); + axelar_rkyv_encoding::types::U256::from_le(to_u256_le(sig.signer.weight.u128())); Ok(axelar_rkyv_encoding::types::WeightedSignature::new( enc_pub_key, @@ -133,7 +133,7 @@ mod tests { #[test] fn conversion_to_u256_le_works() { - let integer = to_u256_be(u128::MAX); + let integer = to_u256_le(u128::MAX); let expected = [ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, From c38f99730bac74d4671001b6c8e5c4336317ba8c Mon Sep 17 00:00:00 2001 From: eloylp Date: Wed, 12 Jun 2024 17:43:22 +0200 Subject: [PATCH 054/109] Fix code comment --- contracts/multisig-prover/src/encoding/rkyv/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts/multisig-prover/src/encoding/rkyv/mod.rs b/contracts/multisig-prover/src/encoding/rkyv/mod.rs index cca67b621..bb8b356b6 100644 --- a/contracts/multisig-prover/src/encoding/rkyv/mod.rs +++ b/contracts/multisig-prover/src/encoding/rkyv/mod.rs @@ -50,7 +50,7 @@ fn to_pub_key(pk: &PublicKey) -> Result }) } -// Fits a u128 into a u256 in big endian representation. +// Fits a u128 into a u256 in little endian representation. fn to_u256_le(u: u128) -> [u8; 32] { let mut uin256 = [0u8; 32]; uin256[0..16].copy_from_slice(&u.to_le_bytes()); From 6ec5af14ef1526f57bb6e4fd333771840bcf2cec Mon Sep 17 00:00:00 2001 From: eloylp Date: Thu, 13 Jun 2024 18:38:35 +0200 Subject: [PATCH 055/109] Convert non recoverable keys into recoverable ones --- .../multisig-prover/src/encoding/rkyv/mod.rs | 32 ++++++++++++++++--- contracts/multisig-prover/src/payload.rs | 2 +- 2 files changed, 28 insertions(+), 6 deletions(-) diff --git a/contracts/multisig-prover/src/encoding/rkyv/mod.rs b/contracts/multisig-prover/src/encoding/rkyv/mod.rs index bb8b356b6..fef406b75 100644 --- a/contracts/multisig-prover/src/encoding/rkyv/mod.rs +++ b/contracts/multisig-prover/src/encoding/rkyv/mod.rs @@ -1,5 +1,3 @@ -use std::{array::TryFromSliceError, collections::BTreeMap}; - use axelar_rkyv_encoding::types::{ECDSA_COMPRESSED_PUBKEY_LEN, ED25519_PUBKEY_LEN}; use itertools::Itertools; use multisig::{ @@ -8,6 +6,7 @@ use multisig::{ verifier_set::VerifierSet, }; use router_api::Message; +use std::{array::TryFromSliceError, collections::BTreeMap}; use crate::{error::ContractError, payload::Payload}; @@ -88,9 +87,10 @@ fn to_msg(msg: &Message) -> axelar_rkyv_encoding::types::Message { pub fn to_weighted_signature( sig: &SignerWithSig, + payload_hash: &[u8; 32], ) -> Result { let enc_pub_key = to_pub_key(&sig.signer.pub_key)?; - let enc_signature = to_signature(&sig.signature)?; + let enc_signature = to_signature(&sig.signature, &sig.signer.pub_key, payload_hash)?; let enc_weight = axelar_rkyv_encoding::types::U256::from_le(to_u256_le(sig.signer.weight.u128())); @@ -101,9 +101,24 @@ pub fn to_weighted_signature( )) } -fn to_signature(sig: &Signature) -> Result { +fn to_signature( + sig: &Signature, + pub_key: &PublicKey, + payload_hash: &[u8; 32], +) -> Result { match sig { - Signature::Ecdsa(_) => unimplemented!(), // Todo: should we implement this in axelar_encoding ? + Signature::Ecdsa(nonrec) => { + let recov = nonrec + .to_recoverable(payload_hash, pub_key, add27) + .map_err(|e| ContractError::RkyvEncodingError(e.to_string()))?; + let data = recov + .as_ref() + .try_into() + .map_err(|e: TryFromSliceError| ContractError::RkyvEncodingError(e.to_string()))?; + Ok(axelar_rkyv_encoding::types::Signature::EcdsaRecoverable( + data, + )) + } // Following 2: We are just moving the bytes around, hoping this conversions match. Not sure if `HexBinary` // representation will match here with the decoding part. @@ -127,6 +142,13 @@ fn to_signature(sig: &Signature) -> Result u8 { + recovery_byte + .to_byte() + .checked_add(27) + .expect("overflow when adding 27 to recovery byte") +} + #[cfg(test)] mod tests { use super::*; diff --git a/contracts/multisig-prover/src/payload.rs b/contracts/multisig-prover/src/payload.rs index ab591f67a..4511d3234 100644 --- a/contracts/multisig-prover/src/payload.rs +++ b/contracts/multisig-prover/src/payload.rs @@ -84,7 +84,7 @@ impl Payload { let mut enc_signatures = Vec::new(); for s in signers_with_sigs { - enc_signatures.push(to_weighted_signature(&s)?) + enc_signatures.push(to_weighted_signature(&s, &payload_hash)?) } let bytes = axelar_rkyv_encoding::encode::<1024>( From 236a43ea978107dc10850d09aed2b4e83c3da222 Mon Sep 17 00:00:00 2001 From: eloylp Date: Thu, 13 Jun 2024 19:09:39 +0200 Subject: [PATCH 056/109] refactor: Wrap common conversion logic --- .../multisig-prover/src/encoding/rkyv/mod.rs | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/contracts/multisig-prover/src/encoding/rkyv/mod.rs b/contracts/multisig-prover/src/encoding/rkyv/mod.rs index fef406b75..3ef59ea5c 100644 --- a/contracts/multisig-prover/src/encoding/rkyv/mod.rs +++ b/contracts/multisig-prover/src/encoding/rkyv/mod.rs @@ -1,7 +1,7 @@ use axelar_rkyv_encoding::types::{ECDSA_COMPRESSED_PUBKEY_LEN, ED25519_PUBKEY_LEN}; use itertools::Itertools; use multisig::{ - key::{PublicKey, Signature}, + key::{PublicKey, Recoverable, Signature}, msg::SignerWithSig, verifier_set::VerifierSet, }; @@ -111,24 +111,16 @@ fn to_signature( let recov = nonrec .to_recoverable(payload_hash, pub_key, add27) .map_err(|e| ContractError::RkyvEncodingError(e.to_string()))?; - let data = recov - .as_ref() - .try_into() - .map_err(|e: TryFromSliceError| ContractError::RkyvEncodingError(e.to_string()))?; Ok(axelar_rkyv_encoding::types::Signature::EcdsaRecoverable( - data, + recoverable_ecdsa_to_array(&recov)?, )) } // Following 2: We are just moving the bytes around, hoping this conversions match. Not sure if `HexBinary` // representation will match here with the decoding part. Signature::EcdsaRecoverable(r) => { - let data = r - .as_ref() - .try_into() - .map_err(|e: TryFromSliceError| ContractError::RkyvEncodingError(e.to_string()))?; Ok(axelar_rkyv_encoding::types::Signature::EcdsaRecoverable( - data, + recoverable_ecdsa_to_array(r)?, )) } Signature::Ed25519(ed) => { @@ -149,6 +141,11 @@ fn add27(recovery_byte: k256::ecdsa::RecoveryId) -> u8 { .expect("overflow when adding 27 to recovery byte") } +fn recoverable_ecdsa_to_array(rec: &Recoverable) -> Result<[u8; 65]> { + rec.as_ref() + .try_into() + .map_err(|e: TryFromSliceError| ContractError::RkyvEncodingError(e.to_string())) +} #[cfg(test)] mod tests { use super::*; From 394afe73a6f1561a625abbfb4e044d7bf4b4b16c Mon Sep 17 00:00:00 2001 From: eloylp Date: Thu, 13 Jun 2024 19:29:51 +0200 Subject: [PATCH 057/109] Remove no longer needed comments --- contracts/multisig-prover/src/encoding/rkyv/mod.rs | 3 --- contracts/multisig-prover/src/error.rs | 2 -- 2 files changed, 5 deletions(-) diff --git a/contracts/multisig-prover/src/encoding/rkyv/mod.rs b/contracts/multisig-prover/src/encoding/rkyv/mod.rs index 3ef59ea5c..48ee57918 100644 --- a/contracts/multisig-prover/src/encoding/rkyv/mod.rs +++ b/contracts/multisig-prover/src/encoding/rkyv/mod.rs @@ -115,9 +115,6 @@ fn to_signature( recoverable_ecdsa_to_array(&recov)?, )) } - - // Following 2: We are just moving the bytes around, hoping this conversions match. Not sure if `HexBinary` - // representation will match here with the decoding part. Signature::EcdsaRecoverable(r) => { Ok(axelar_rkyv_encoding::types::Signature::EcdsaRecoverable( recoverable_ecdsa_to_array(r)?, diff --git a/contracts/multisig-prover/src/error.rs b/contracts/multisig-prover/src/error.rs index 9327117e2..cae0c6a47 100644 --- a/contracts/multisig-prover/src/error.rs +++ b/contracts/multisig-prover/src/error.rs @@ -41,8 +41,6 @@ pub enum ContractError { #[error(transparent)] BcsError(#[from] bcs::Error), - /// Todo, Below error throws: binary operation `==` cannot be applied to type `EncodingError<1024>` - /// this is a workaround. #[error("encoding/decoding failure: [0]")] RkyvEncodingError(String), From 12d3991763894dec2538ce96d67bc829975f9c88 Mon Sep 17 00:00:00 2001 From: eloylp Date: Thu, 13 Jun 2024 19:30:33 +0200 Subject: [PATCH 058/109] improve error message --- contracts/multisig-prover/src/error.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts/multisig-prover/src/error.rs b/contracts/multisig-prover/src/error.rs index cae0c6a47..173c41302 100644 --- a/contracts/multisig-prover/src/error.rs +++ b/contracts/multisig-prover/src/error.rs @@ -41,7 +41,7 @@ pub enum ContractError { #[error(transparent)] BcsError(#[from] bcs::Error), - #[error("encoding/decoding failure: [0]")] + #[error("Rkyv encoding/decoding failure: [0]")] RkyvEncodingError(String), #[error("verifier set has not changed sufficiently since last update")] From e9234992ffe35d7bf81680c36461d4c77f6a5f77 Mon Sep 17 00:00:00 2001 From: eloylp Date: Thu, 20 Jun 2024 21:15:53 +0200 Subject: [PATCH 059/109] feat: solana code adjustments (after upstream sync) (#24) * Align APIs with latest upstream changes * refactor: align nomenclature * Add unit test for Solana verify_verifier_set() * Add some tracing to Solana verify_verifier_set() * refactor: remove dead code * Add conditional compilation for an only test function * refactor: only iterate over values * refactor: make non used field explicit * refactor: use slices instead objects * prevent overflow in test util * refactor: use slices instead of Vec * refactor: rename module following repo naming * Make deps use http instead of ssh * remove non needed comment * refactor: rename module following repo naming * refactor: prefer slices over objects Co-authored-by: tilacog * Add unwrap serialisation comment * Compare addresses using raw bytes * refactor: extend variable naming * Make logs more strutured logging friendly * refactor: use let-else --------- Co-authored-by: tilacog --- Cargo.lock | 3320 +++++++++++++---- ampd/Cargo.toml | 6 +- ampd/src/handlers/config.rs | 2 +- ampd/src/handlers/mod.rs | 2 +- ampd/src/handlers/solana_verify_msg.rs | 150 +- ...r_set.rs => solana_verify_verifier_set.rs} | 234 +- ampd/src/lib.rs | 8 +- ampd/src/solana/mod.rs | 2 +- ampd/src/solana/msg_verifier.rs | 39 +- ampd/src/solana/rpc.rs | 3 +- ampd/src/solana/test_utils.rs | 2 +- ampd/src/solana/verifier_set_verifier.rs | 291 ++ ampd/src/solana/ws_verifier.rs | 379 -- 13 files changed, 2981 insertions(+), 1457 deletions(-) rename ampd/src/handlers/{solana_verify_worker_set.rs => solana_verify_verifier_set.rs} (63%) create mode 100644 ampd/src/solana/verifier_set_verifier.rs delete mode 100644 ampd/src/solana/ws_verifier.rs diff --git a/Cargo.lock b/Cargo.lock index b6071b0fe..5f1b2cfa9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -60,10 +60,8 @@ dependencies = [ [[package]] name = "aes" version = "0.7.5" -version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9e8b47f52ea9bae42228d07ec09eb676433d7c4ed1ebdf0f1d1c29ed446f1ab8" -checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" dependencies = [ "cfg-if", "cipher 0.3.0", @@ -96,13 +94,49 @@ dependencies = [ "subtle", ] +[[package]] +name = "aes-gcm-siv" +version = "0.10.3" +source = "git+https://github.com/RustCrypto/AEADs?rev=6105d7a5591aefa646a95d12b5e8d3f55a9214ef#6105d7a5591aefa646a95d12b5e8d3f55a9214ef" +dependencies = [ + "aead 0.4.3", + "aes 0.7.5", + "cipher 0.3.0", + "ctr 0.8.0", + "polyval 0.5.3", + "subtle", + "zeroize", +] + +[[package]] +name = "aggregate-verifier" +version = "0.1.0" +source = "git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f#c0904e1c72c99a174a93b5f6c18b30f52d20b71f" +dependencies = [ + "axelar-wasm-std 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "axelar-wasm-std-derive 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "connection-router", + "cosmwasm-schema 1.5.5", + "cosmwasm-std", + "cosmwasm-storage", + "cw-storage-plus 1.2.0", + "cw-utils 1.0.3", + "error-stack", + "report 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "schemars", + "serde", + "serde_json", + "thiserror", + "voting-verifier 0.1.0", +] + [[package]] name = "ahash" version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" dependencies = [ - "getrandom", + "getrandom 0.2.15", "once_cell", "version_check", ] @@ -114,6 +148,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" dependencies = [ "cfg-if", + "getrandom 0.2.15", "once_cell", "version_check", "zerocopy", @@ -149,11 +184,17 @@ dependencies = [ "alloc-no-stdlib", ] +[[package]] +name = "allocator-api2" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" + [[package]] name = "alloy-json-abi" -version = "0.7.4" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e30946aa6173020259055a44971f5cf40a7d76c931d209caeb51b333263df4f" +checksum = "aaeaccd50238126e3a0ff9387c7c568837726ad4f4e399b528ca88104d6c25ef" dependencies = [ "alloy-primitives", "alloy-sol-type-parser", @@ -162,9 +203,9 @@ dependencies = [ [[package]] name = "alloy-primitives" -version = "0.7.4" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db8aa973e647ec336810a9356af8aea787249c9d00b1525359f3db29a68d231b" +checksum = "f783611babedbbe90db3478c120fb5f5daacceffc210b39adc0af4fe0da70bad" dependencies = [ "bytes", "cfg-if", @@ -179,68 +220,68 @@ dependencies = [ [[package]] name = "alloy-sol-macro" -version = "0.7.4" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7dbd17d67f3e89478c8a634416358e539e577899666c927bc3d2b1328ee9b6ca" +checksum = "4bad41a7c19498e3f6079f7744656328699f8ea3e783bdd10d85788cd439f572" dependencies = [ "alloy-sol-macro-expander", "alloy-sol-macro-input", "proc-macro-error", - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2 1.0.85", + "quote 1.0.36", + "syn 2.0.66", ] [[package]] name = "alloy-sol-macro-expander" -version = "0.7.4" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c6da95adcf4760bb4b108fefa51d50096c5e5fdd29ee72fed3e86ee414f2e34" +checksum = "fd9899da7d011b4fe4c406a524ed3e3f963797dbc93b45479d60341d3a27b252" dependencies = [ "alloy-json-abi", "alloy-sol-macro-input", "const-hex", - "heck 0.4.1", - "indexmap 2.0.0", + "heck 0.5.0", + "indexmap 2.2.6", "proc-macro-error", - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2 1.0.85", + "quote 1.0.36", + "syn 2.0.66", "syn-solidity", "tiny-keccak", ] [[package]] name = "alloy-sol-macro-input" -version = "0.7.4" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32c8da04c1343871fb6ce5a489218f9c85323c8340a36e9106b5fc98d4dd59d5" +checksum = "d32d595768fdc61331a132b6f65db41afae41b9b97d36c21eb1b955c422a7e60" dependencies = [ "alloy-json-abi", "const-hex", "dunce", "heck 0.5.0", - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.85", + "quote 1.0.36", "serde_json", - "syn 2.0.37", + "syn 2.0.66", "syn-solidity", ] [[package]] name = "alloy-sol-type-parser" -version = "0.7.4" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "368cae4dc052cad1d8f72eb2ae0c38027116933eeb49213c200a9e9875f208d7" +checksum = "baa2fbd22d353d8685bd9fee11ba2d8b5c3b1d11e56adb3265fcf1f32bfdf404" dependencies = [ - "winnow", + "winnow 0.6.13", ] [[package]] name = "alloy-sol-types" -version = "0.7.4" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40a64d2d2395c1ac636b62419a7b17ec39031d6b2367e66e9acbf566e6055e9c" +checksum = "a49042c6d3b66a9fe6b2b5a8bf0d39fc2ae1ee0310a2a26ffedd79fb097878dd" dependencies = [ "alloy-json-abi", "alloy-primitives", @@ -253,11 +294,13 @@ name = "ampd" version = "0.4.0" dependencies = [ "async-trait", - "axelar-wasm-std", + "axelar-message-primitives", + "axelar-wasm-std 0.1.0", "axum 0.7.5", "base64 0.21.7", "bcs", - "clap", + "borsh 1.5.1", + "clap 4.5.7", "config", "cosmrs", "cosmwasm-std", @@ -281,19 +324,19 @@ dependencies = [ "lru", "mockall", "move-core-types", - "multisig", + "multisig 0.3.0", "num-traits", "prost 0.11.9", "prost-types", "rand 0.8.5", "random-string", - "report", - "reqwest 0.11.25", + "report 0.1.0", + "reqwest 0.11.27", "router-api", "serde", "serde_json", - "serde_with 3.3.0", - "service-registry", + "serde_with 3.8.1", + "service-registry 0.3.0", "sha3 0.10.8", "solana-account-decoder", "solana-client", @@ -309,7 +352,7 @@ dependencies = [ "thiserror", "tokio", "tokio-stream", - "tokio-util 0.7.9", + "tokio-util 0.7.11", "toml 0.5.11", "tonic 0.9.2", "tonic-build", @@ -320,7 +363,7 @@ dependencies = [ "url", "valuable", "valuable-serde", - "voting-verifier", + "voting-verifier 0.4.0", ] [[package]] @@ -356,18 +399,18 @@ dependencies = [ "pkcs8 0.9.0", "quinn", "quinn-proto", - "rand", - "rcgen", - "ring", - "rustls 0.21.7", - "rustls-webpki 0.101.5", + "rand 0.8.5", + "rcgen 0.9.3", + "ring 0.16.20", + "rustls 0.21.12", + "rustls-webpki", "serde", "serde_json", - "socket2 0.5.4", + "socket2 0.5.7", "tap", "thiserror", "tokio", - "tokio-util 0.7.9", + "tokio-util 0.7.11", "tower", "tracing", "x509-parser", @@ -384,9 +427,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.5.0" +version = "0.6.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1f58811cfac344940f1a400b6e6231ce35171f614f26439e80f8c1465c5cc0c" +checksum = "418c75fa768af9c03be99d17643f93f79bbba589895012a80e3452a19ddda15b" dependencies = [ "anstyle", "anstyle-parse", @@ -399,33 +442,33 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.3" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b84bf0a05bbb2a83e5eb6fa36bb6e87baa08193c35ff52bbf6b38d8af2890e46" +checksum = "038dfcf04a5feb68e9c60b21c9625a54c2c0616e79b72b0fd87075a056ae1d1b" [[package]] name = "anstyle-parse" -version = "0.2.1" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "938874ff5980b03a87c5524b3ae5b59cf99b1d6bc836848df7bc5ada9643c333" +checksum = "c03a11a9034d92058ceb6ee011ce58af4a9bf61491aa7e1e59ecd24bd40d22d4" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.0.0" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b" +checksum = "ad186efb764318d35165f1758e7dcef3b10628e26d41a44bc5550652e6804391" dependencies = [ "windows-sys 0.52.0", ] [[package]] name = "anstyle-wincon" -version = "2.1.0" +version = "3.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58f54d10c6dfa51283a066ceab3ec1ab78d13fae00aa49243a45e4571fb79dfd" +checksum = "61a38449feb7068f52bb06c12759005cf459ee52bb4adc1d5a7c4322d716fb19" dependencies = [ "anstyle", "windows-sys 0.52.0", @@ -433,9 +476,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.75" +version = "1.0.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6" +checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" [[package]] name = "arbitrary" @@ -542,8 +585,8 @@ checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" dependencies = [ "num-bigint 0.4.5", "num-traits", - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.85", + "quote 1.0.36", "syn 1.0.109", ] @@ -615,8 +658,8 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ae3281bc6d0fd7e549af32b52511e1302185bd688fd3359fa36423346ff682ea" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.85", + "quote 1.0.36", "syn 1.0.109", ] @@ -691,8 +734,8 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "726535892e8eae7e70657b4c8ea93d26b8553afb1ce617caee529ef96d7dee6c" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.85", + "quote 1.0.36", "syn 1.0.109", "synstructure 0.12.6", ] @@ -703,8 +746,8 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2777730b2039ac0f95f093556e61b6d26cebed5393ca6f152717777cec3a42ed" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.85", + "quote 1.0.36", "syn 1.0.109", ] @@ -739,6 +782,29 @@ dependencies = [ "tokio", ] +[[package]] +name = "async-compression" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd066d0b4ef8ecb03a55319dc13aa6910616d0f44008a045bb1835af830abff5" +dependencies = [ + "brotli 6.0.0", + "flate2", + "futures-core", + "memchr", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "async-mutex" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "479db852db25d9dbf6204e6cb6253698f175c15726470f78af0d918e99d6156e" +dependencies = [ + "event-listener", +] + [[package]] name = "async-stream" version = "0.3.5" @@ -756,9 +822,9 @@ version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2 1.0.85", + "quote 1.0.36", + "syn 2.0.66", ] [[package]] @@ -772,9 +838,9 @@ version = "0.1.80" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c6fa2087f2753a7da8cc1c0dbfcf89579dd57458e36769de5ac750b4671737ca" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2 1.0.85", + "quote 1.0.36", + "syn 2.0.66", ] [[package]] @@ -788,16 +854,32 @@ dependencies = [ "rustc_version", ] +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + +[[package]] +name = "atty" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" +dependencies = [ + "hermit-abi 0.1.19", + "libc", + "winapi", +] + [[package]] name = "auto_impl" version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c87f3f15e7794432337fc718554eaa4dc8f04c9677a950ffe366f20a162ae42" dependencies = [ - "proc-macro-error", - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 1.0.109", + "proc-macro2 1.0.85", + "quote 1.0.36", + "syn 2.0.66", ] [[package]] @@ -808,16 +890,37 @@ checksum = "7460f7dd8e100147b82a63afca1a20eb6c231ee36b90ba7272e14951cb58af59" [[package]] name = "autocfg" -version = "1.1.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" + +[[package]] +name = "axelar-message-primitives" +version = "0.1.0" +source = "git+https://github.com/eigerco/solana-axelar.git?branch=main#1249561eb1da88b1e89d8c6cb085db6054f5d0fd" +dependencies = [ + "anyhow", + "bcs", + "bnum", + "borsh 1.5.1", + "bytemuck", + "connection-router", + "cosmwasm-schema 2.0.4", + "ethers-core", + "hex", + "itertools 0.12.1", + "libsecp256k1 0.7.1", + "sha3 0.10.8", + "solana-program", + "thiserror", +] [[package]] name = "axelar-wasm-std" version = "0.1.0" dependencies = [ "bs58 0.5.1", - "cosmwasm-schema", + "cosmwasm-schema 1.5.5", "cosmwasm-std", "cw-multi-test", "cw-storage-plus 1.2.0", @@ -828,7 +931,29 @@ dependencies = [ "num-traits", "rand 0.8.5", "regex", - "report", + "report 0.1.0", + "schemars", + "serde", + "serde_json", + "sha3 0.10.8", + "strum 0.25.0", + "thiserror", + "valuable", +] + +[[package]] +name = "axelar-wasm-std" +version = "0.1.0" +source = "git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f#c0904e1c72c99a174a93b5f6c18b30f52d20b71f" +dependencies = [ + "cosmwasm-schema 1.5.5", + "cosmwasm-std", + "cosmwasm-storage", + "cw-storage-plus 1.2.0", + "error-stack", + "flagset", + "num-traits", + "report 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", "schemars", "serde", "serde_json", @@ -844,9 +969,22 @@ version = "0.1.0" dependencies = [ "axelar-wasm-std 0.1.0", "error-stack", - "quote 1.0.33", - "report", - "syn 2.0.37", + "quote 1.0.36", + "report 0.1.0", + "syn 2.0.66", + "thiserror", +] + +[[package]] +name = "axelar-wasm-std-derive" +version = "0.1.0" +source = "git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f#c0904e1c72c99a174a93b5f6c18b30f52d20b71f" +dependencies = [ + "axelar-wasm-std 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "error-stack", + "quote 1.0.36", + "report 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "syn 2.0.66", "thiserror", ] @@ -863,9 +1001,9 @@ dependencies = [ "bytes", "futures-util", "headers", - "http 0.2.9", - "http-body 0.4.5", - "hyper 0.14.27", + "http 0.2.12", + "http-body 0.4.6", + "hyper 0.14.29", "itoa", "matchit 0.7.3", "memchr", @@ -960,9 +1098,9 @@ dependencies = [ [[package]] name = "backtrace" -version = "0.3.69" +version = "0.3.73" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" +checksum = "5cc23269a4f8976d0a4d2e7109211a419fe30e8d88d677cd60b6bc79c5732e0a" dependencies = [ "addr2line", "cc", @@ -1082,13 +1220,13 @@ dependencies = [ "lazy_static", "lazycell", "peeking_take_while", - "prettyplease 0.2.15", - "proc-macro2 1.0.67", - "quote 1.0.33", + "prettyplease 0.2.20", + "proc-macro2 1.0.85", + "quote 1.0.36", "regex", "rustc-hash", "shlex", - "syn 2.0.37", + "syn 2.0.66", ] [[package]] @@ -1099,8 +1237,6 @@ checksum = "7e141fb0f8be1c7b45887af94c88b182472b57c96b56773250ae00cd6a14a164" dependencies = [ "bs58 0.5.1", "hmac 0.12.1", - "bs58 0.5.1", - "hmac", "k256", "once_cell", "pbkdf2 0.12.2", @@ -1302,98 +1438,250 @@ name = "bnum" version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56953345e39537a3e18bdaeba4cb0c58a78c1f61f361dc0fa7c5c7340ae87c5f" +dependencies = [ + "serde", + "serde-big-array", +] [[package]] -name = "brotli" -version = "3.5.0" +name = "borsh" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d640d25bc63c50fb1f0b545ffd80207d2e10a4c965530809b40ba3386825c391" +checksum = "15bf3650200d8bffa99015595e10f1fbd17de07abbc25bb067da79e769939bfa" dependencies = [ - "alloc-no-stdlib", - "alloc-stdlib", - "brotli-decompressor", + "borsh-derive 0.9.3", + "hashbrown 0.11.2", ] [[package]] -name = "brotli-decompressor" -version = "2.5.1" +name = "borsh" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b6561fd3f895a11e8f72af2cb7d22e08366bebc2b6b57f7744c4bda27034744" +checksum = "4114279215a005bc675e386011e594e1d9b800918cea18fcadadcce864a2046b" dependencies = [ - "alloc-no-stdlib", - "alloc-stdlib", + "borsh-derive 0.10.3", + "hashbrown 0.13.2", ] [[package]] -name = "bs58" -version = "0.4.0" +name = "borsh" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" +checksum = "a6362ed55def622cddc70a4746a68554d7b687713770de539e59a739b249f8ed" +dependencies = [ + "borsh-derive 1.5.1", + "cfg_aliases", +] [[package]] -name = "bs58" -version = "0.5.1" +name = "borsh-derive" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" +checksum = "6441c552f230375d18e3cc377677914d2ca2b0d36e52129fe15450a2dce46775" dependencies = [ - "sha2 0.10.8", - "tinyvec", + "borsh-derive-internal 0.9.3", + "borsh-schema-derive-internal 0.9.3", + "proc-macro-crate 0.1.5", + "proc-macro2 1.0.85", + "syn 1.0.109", ] [[package]] -name = "bulletproofs" -version = "4.0.0" +name = "borsh-derive" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40e698f1df446cc6246afd823afbe2d121134d089c9102c1dd26d1264991ba32" +checksum = "0754613691538d51f329cce9af41d7b7ca150bc973056f1156611489475f54f7" dependencies = [ - "byteorder", - "clear_on_drop", - "curve25519-dalek-ng", - "digest 0.9.0", - "merlin", - "rand 0.8.5", - "rand_core 0.6.4", - "serde", - "serde_derive", - "sha3 0.9.1", - "subtle-ng", - "thiserror", + "borsh-derive-internal 0.10.3", + "borsh-schema-derive-internal 0.10.3", + "proc-macro-crate 0.1.5", + "proc-macro2 1.0.85", + "syn 1.0.109", ] [[package]] -name = "bumpalo" -version = "3.16.0" +name = "borsh-derive" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" +checksum = "c3ef8005764f53cd4dca619f5bf64cafd4664dada50ece25e4d81de54c80cc0b" +dependencies = [ + "once_cell", + "proc-macro-crate 3.1.0", + "proc-macro2 1.0.85", + "quote 1.0.36", + "syn 2.0.66", + "syn_derive", +] [[package]] -name = "bv" -version = "0.11.1" +name = "borsh-derive-internal" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8834bb1d8ee5dc048ee3124f2c7c1afcc6bc9aed03f11e9dfd8c69470a5db340" +checksum = "5449c28a7b352f2d1e592a8a28bf139bc71afb0764a14f3c02500935d8c44065" dependencies = [ - "feature-probe", - "serde", + "proc-macro2 1.0.85", + "quote 1.0.36", + "syn 1.0.109", ] -checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" [[package]] -name = "byte-slice-cast" -version = "1.2.2" +name = "borsh-derive-internal" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3ac9f8b63eca6fd385229b3675f6cc0dc5c8a5c8a54a59d4f52ffd670d87b0c" +checksum = "afb438156919598d2c7bad7e1c0adf3d26ed3840dbc010db1a882a65583ca2fb" +dependencies = [ + "proc-macro2 1.0.85", + "quote 1.0.36", + "syn 1.0.109", +] [[package]] -name = "bytecount" -version = "0.6.8" +name = "borsh-schema-derive-internal" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdbd5696d8bfa21d53d9fe39a714a18538bad11492a42d066dbbc395fb1951c0" +dependencies = [ + "proc-macro2 1.0.85", + "quote 1.0.36", + "syn 1.0.109", +] + +[[package]] +name = "borsh-schema-derive-internal" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "634205cc43f74a1b9046ef87c4540ebda95696ec0f315024860cad7c5b0f5ccd" +dependencies = [ + "proc-macro2 1.0.85", + "quote 1.0.36", + "syn 1.0.109", +] + +[[package]] +name = "brotli" +version = "3.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d640d25bc63c50fb1f0b545ffd80207d2e10a4c965530809b40ba3386825c391" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", + "brotli-decompressor 2.5.1", +] + +[[package]] +name = "brotli" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74f7971dbd9326d58187408ab83117d8ac1bb9c17b085fdacd1cf2f598719b6b" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", + "brotli-decompressor 4.0.1", +] + +[[package]] +name = "brotli-decompressor" +version = "2.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e2e4afe60d7dd600fdd3de8d0f08c2b7ec039712e3b6137ff98b7004e82de4f" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", +] + +[[package]] +name = "brotli-decompressor" +version = "4.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a45bd2e4095a8b518033b128020dd4a55aab1c0a381ba4404a472630f4bc362" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", +] + +[[package]] +name = "bs58" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" + +[[package]] +name = "bs58" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" +dependencies = [ + "sha2 0.10.8", + "tinyvec", +] + +[[package]] +name = "bulletproofs" +version = "4.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40e698f1df446cc6246afd823afbe2d121134d089c9102c1dd26d1264991ba32" +dependencies = [ + "byteorder", + "clear_on_drop", + "curve25519-dalek-ng", + "digest 0.9.0", + "merlin", + "rand 0.8.5", + "rand_core 0.6.4", + "serde", + "serde_derive", + "sha3 0.9.1", + "subtle-ng", + "thiserror", +] + +[[package]] +name = "bumpalo" +version = "3.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" + +[[package]] +name = "bv" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8834bb1d8ee5dc048ee3124f2c7c1afcc6bc9aed03f11e9dfd8c69470a5db340" +dependencies = [ + "feature-probe", + "serde", +] + +[[package]] +name = "byte-slice-cast" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3ac9f8b63eca6fd385229b3675f6cc0dc5c8a5c8a54a59d4f52ffd670d87b0c" + +[[package]] +name = "bytecount" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5ce89b21cab1437276d2650d57e971f9d548a2d9037cc231abdc0562b97498ce" [[package]] name = "bytemuck" -version = "1.14.0" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78834c15cb5d5efe3452d58b1e8ba890dd62d21907f867f383358198e56ebca5" +dependencies = [ + "bytemuck_derive", +] + +[[package]] +name = "bytemuck_derive" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "374d28ec25809ee0e23827c2ab573d729e293f281dfe393500e7ad618baa61c6" +checksum = "1ee891b04274a59bd38b412188e24b849617b2e45a0fd8d057deb63e7403761b" +dependencies = [ + "proc-macro2 1.0.85", + "quote 1.0.36", + "syn 2.0.66", +] [[package]] name = "byteorder" @@ -1484,9 +1772,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.83" +version = "1.0.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" +checksum = "96c51067fd44124faa7f870b4b1c969379ad32b2ba805aa959430ceaa384f695" dependencies = [ "jobserver", "libc", @@ -1508,6 +1796,12 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "cfg_aliases" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" + [[package]] name = "chrono" version = "0.4.38" @@ -1544,9 +1838,9 @@ dependencies = [ [[package]] name = "clang-sys" -version = "1.6.1" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c688fc74432808e3eb684cae8830a86be1d66a2bd58e1f248ed0960a590baf6f" +checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" dependencies = [ "glob", "libc", @@ -1557,7 +1851,38 @@ dependencies = [ name = "clap" version = "2.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1d7b8d5ec32af0fadc644bf1fd509a688c2103b185644bb1e29d164e0703136" +checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c" +dependencies = [ + "ansi_term", + "atty", + "bitflags 1.3.2", + "strsim 0.8.0", + "textwrap 0.11.0", + "unicode-width", + "vec_map", +] + +[[package]] +name = "clap" +version = "3.2.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ea181bf566f71cb9a5d17a59e1871af638180a18fb0035c92ae62b705207123" +dependencies = [ + "atty", + "bitflags 1.3.2", + "clap_lex 0.2.4", + "indexmap 1.9.3", + "once_cell", + "strsim 0.10.0", + "termcolor", + "textwrap 0.16.1", +] + +[[package]] +name = "clap" +version = "4.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5db83dced34638ad474f39f250d7fea9598bdd239eaced1bdf45d597da0f433f" dependencies = [ "clap_builder", "clap_derive", @@ -1565,33 +1890,42 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.4.4" +version = "4.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5179bb514e4d7c2051749d8fcefa2ed6d06a9f4e6d69faf3805f5d80b8cf8d56" +checksum = "f7e204572485eb3fbf28f871612191521df159bc3e15a9f5064c66dba3a8c05f" dependencies = [ "anstream", "anstyle", - "clap_lex", - "strsim", + "clap_lex 0.7.1", + "strsim 0.11.1", ] [[package]] name = "clap_derive" -version = "4.4.2" +version = "4.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0862016ff20d69b84ef8247369fabf5c008a7417002411897d40ee1f4532b873" +checksum = "c780290ccf4fb26629baa7a1081e68ced113f1d3ec302fa5948f1c381ebf06c6" dependencies = [ - "heck 0.4.1", - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "heck 0.5.0", + "proc-macro2 1.0.85", + "quote 1.0.36", + "syn 2.0.66", ] [[package]] name = "clap_lex" version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd7cc57abe963c6d3b9d8be5b06ba7c8957a930305ca90304f24ef040aa6f961" +checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5" +dependencies = [ + "os_str_bytes", +] + +[[package]] +name = "clap_lex" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b82cf0babdbd58558212896d1a4272303a57bdb245c2bf1147185fb45640e70" [[package]] name = "clear_on_drop" @@ -1707,6 +2041,28 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "combine" +version = "3.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da3da6baa321ec19e1cc41d31bf599f00c783d0517095cdaf0332e3fe8d20680" +dependencies = [ + "ascii", + "byteorder", + "either", + "memchr", + "unreachable", +] + +[[package]] +name = "concurrent-queue" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" +dependencies = [ + "crossbeam-utils", +] + [[package]] name = "config" version = "0.13.4" @@ -1726,6 +2082,30 @@ dependencies = [ "yaml-rust", ] +[[package]] +name = "connection-router" +version = "0.1.0" +source = "git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f#c0904e1c72c99a174a93b5f6c18b30f52d20b71f" +dependencies = [ + "axelar-wasm-std 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "axelar-wasm-std-derive 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "cosmwasm-schema 1.5.5", + "cosmwasm-std", + "cosmwasm-storage", + "cw-storage-plus 1.2.0", + "error-stack", + "flagset", + "itertools 0.11.0", + "mockall", + "report 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "schemars", + "serde", + "serde_json", + "sha3 0.10.8", + "thiserror", + "valuable", +] + [[package]] name = "console" version = "0.15.8" @@ -1761,9 +2141,9 @@ dependencies = [ [[package]] name = "const-hex" -version = "1.11.4" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ff96486ccc291d36a958107caf2c0af8c78c0af7d31ae2f35ce055130de1a6" +checksum = "94fb8a24a26d37e1ffd45343323dc9fe6654ceea44c12f2fcb3d7ac29e610bc6" dependencies = [ "cfg-if", "cpufeatures", @@ -1815,17 +2195,17 @@ dependencies = [ name = "coordinator" version = "0.1.2" dependencies = [ - "axelar-wasm-std", - "axelar-wasm-std-derive", - "cosmwasm-schema", + "axelar-wasm-std 0.1.0", + "axelar-wasm-std-derive 0.1.0", + "cosmwasm-schema 1.5.5", "cosmwasm-std", "cw-multi-test", "cw-storage-plus 1.2.0", - "cw2 1.1.0", + "cw2 1.1.2", "error-stack", "integration-tests", - "multisig", - "report", + "multisig 0.3.0", + "report 0.1.0", "router-api", "thiserror", "tofn", @@ -1878,7 +2258,7 @@ dependencies = [ "cosmos-sdk-proto", "ecdsa", "eyre", - "getrandom", + "getrandom 0.2.15", "k256", "rand_core 0.6.4", "serde", @@ -1943,8 +2323,19 @@ version = "1.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0bb57855fbfc83327f8445ae0d413b1a05ac0d68c396ab4d122b2abd7bb82cb6" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.85", + "quote 1.0.36", + "syn 1.0.109", +] + +[[package]] +name = "cosmwasm-schema-derive" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf4be75f60158478da2c5d319ed59295bca1687ad50c18215a0485aa91a995ea" +dependencies = [ + "proc-macro2 1.0.85", + "quote 1.0.36", "syn 1.0.109", ] @@ -1954,7 +2345,7 @@ version = "1.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78c1556156fdf892a55cced6115968b961eaaadd6f724a2c2cb7d1e168e32dd3" dependencies = [ - "base64 0.21.4", + "base64 0.21.7", "bech32", "bnum", "cosmwasm-crypto", @@ -1967,8 +2358,6 @@ dependencies = [ "serde-json-wasm", "sha2 0.10.8", "static_assertions", - "sha2 0.10.7", - "static_assertions", "thiserror", ] @@ -2008,18 +2397,18 @@ checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" [[package]] name = "crc32fast" -version = "1.4.0" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3855a8a784b474f333699ef2bbca9db2c4a1f6d9088a90a2d25b1eb53111eaa" +checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" dependencies = [ "cfg-if", ] [[package]] name = "crossbeam-channel" -version = "0.5.8" +version = "0.5.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200" +checksum = "33480d6946193aa8033910124896ca395333cae7e2d1113d1fef6c3272217df2" dependencies = [ "crossbeam-utils", ] @@ -2045,9 +2434,9 @@ dependencies = [ [[package]] name = "crossbeam-utils" -version = "0.8.19" +version = "0.8.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" +checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" [[package]] name = "crunchy" @@ -2151,9 +2540,9 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2 1.0.85", + "quote 1.0.36", + "syn 2.0.66", ] [[package]] @@ -2281,12 +2670,12 @@ dependencies = [ [[package]] name = "darling" -version = "0.20.3" +version = "0.20.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0209d94da627ab5605dcccf08bb18afa5009cfbef48d8a8b7d7bdbc79be25c5e" +checksum = "83b2eb4d90d12bdda5ed17de686c2acb4c57914f8f921b8da7e112b5a36f3fe1" dependencies = [ - "darling_core 0.20.3", - "darling_macro 0.20.3", + "darling_core 0.20.9", + "darling_macro 0.20.9", ] [[package]] @@ -2297,24 +2686,24 @@ checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0" dependencies = [ "fnv", "ident_case", - "proc-macro2 1.0.67", - "quote 1.0.33", - "strsim", + "proc-macro2 1.0.85", + "quote 1.0.36", + "strsim 0.10.0", "syn 1.0.109", ] [[package]] name = "darling_core" -version = "0.20.3" +version = "0.20.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "177e3443818124b357d8e76f53be906d60937f0d3a90773a664fa63fa253e621" +checksum = "622687fe0bac72a04e5599029151f5796111b90f1baaa9b544d807a5e31cd120" dependencies = [ "fnv", "ident_case", - "proc-macro2 1.0.67", - "quote 1.0.33", - "strsim", - "syn 2.0.37", + "proc-macro2 1.0.85", + "quote 1.0.36", + "strsim 0.11.1", + "syn 2.0.66", ] [[package]] @@ -2330,13 +2719,13 @@ dependencies = [ [[package]] name = "darling_macro" -version = "0.20.3" +version = "0.20.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "836a9bbc7ad63342d6d6e7b815ccab164bc77a2d95d84bc3117a8c0d5c98e2d5" +checksum = "733cabb43482b1a1b53eee8583c2b9e8684d592215ea83efd305dd31bc2f0178" dependencies = [ - "darling_core 0.20.3", - "quote 1.0.33", - "syn 2.0.37", + "darling_core 0.20.9", + "quote 1.0.36", + "syn 2.0.66", ] [[package]] @@ -2346,7 +2735,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" dependencies = [ "cfg-if", - "hashbrown 0.14.0", + "hashbrown 0.14.5", "lock_api", "once_cell", "parking_lot_core", @@ -2354,15 +2743,15 @@ dependencies = [ [[package]] name = "data-encoding" -version = "2.4.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2e66c9d817f1720209181c316d28635c050fa304f9c79e47a520882661b7308" +checksum = "e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2" [[package]] name = "data-encoding-macro" -version = "0.1.13" +version = "0.1.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c904b33cc60130e1aeea4956ab803d08a3f4a0ca82d64ed757afac3891f2bb99" +checksum = "f1559b6cba622276d6d63706db152618eeb15b89b3e4041446b05876e352e639" dependencies = [ "data-encoding", "data-encoding-macro-internal", @@ -2370,9 +2759,9 @@ dependencies = [ [[package]] name = "data-encoding-macro-internal" -version = "0.1.11" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fdf3fce3ce863539ec1d7fd1b6dcc3c645663376b43ed376bbf887733e4f772" +checksum = "332d754c0af53bc87c108fed664d121ecf59207ec4196041f04d6ab9002ad33f" dependencies = [ "data-encoding", "syn 1.0.109", @@ -2436,9 +2825,9 @@ version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5fe87ce4529967e0ba1dcf8450bab64d97dfd5010a6256187ffe2e43e6f0e049" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2 1.0.85", + "quote 1.0.36", + "syn 2.0.66", ] [[package]] @@ -2457,8 +2846,8 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4255bb7dd538590188bd0aea52e48bd699b19bd90b0d069ec2ced8461fe23273" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.85", + "quote 1.0.36", "syn 1.0.109", ] @@ -2474,8 +2863,8 @@ version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.85", + "quote 1.0.36", "syn 1.0.109", ] @@ -2485,22 +2874,22 @@ version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "67e77553c4162a157adbf834ebae5b415acbecbeafc7a74b0e886657506a7611" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2 1.0.85", + "quote 1.0.36", + "syn 2.0.66", ] [[package]] name = "derive_more" -version = "0.99.17" +version = "0.99.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" +checksum = "5f33878137e4dafd7fa914ad4e259e18a4e8e532b9617a2d0150262bf53abfce" dependencies = [ "convert_case 0.4.0", - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.85", + "quote 1.0.36", "rustc_version", - "syn 1.0.109", + "syn 2.0.66", ] [[package]] @@ -2596,20 +2985,43 @@ version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "487585f4d0c6655fe74905e2504d8ad6908e4db67f744eb140876906c2f3175d" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2 1.0.85", + "quote 1.0.36", + "syn 2.0.66", ] [[package]] -name = "dlv-list" -version = "0.3.0" +name = "dlopen2" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0688c2a7f92e427f44895cd63841bff7b29f8d7a1648b9e7e07a4a365b2e1257" - -[[package]] -name = "downcast" -version = "0.11.0" +checksum = "09b4f5f101177ff01b8ec4ecc81eead416a8aa42819a2869311b3420fa114ffa" +dependencies = [ + "dlopen2_derive", + "libc", + "once_cell", + "winapi", +] + +[[package]] +name = "dlopen2_derive" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6cbae11b3de8fce2a456e8ea3dada226b35fe791f0dc1d360c0941f0bb681f3" +dependencies = [ + "proc-macro2 1.0.85", + "quote 1.0.36", + "syn 2.0.66", +] + +[[package]] +name = "dlv-list" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0688c2a7f92e427f44895cd63841bff7b29f8d7a1648b9e7e07a4a365b2e1257" + +[[package]] +name = "downcast" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1435fa1053d8b2fbbe9be7e97eca7f33d37b28409959813daefc1446a14247f1" @@ -2752,9 +3164,9 @@ dependencies = [ [[package]] name = "either" -version = "1.9.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" +checksum = "3dca9240753cf90908d7e4aac30f630662b02aebaa1b58a3cadabdb23385b58b" [[package]] name = "elliptic-curve" @@ -2832,11 +3244,31 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f16ef37b2a9b242295d61a154ee91ae884afff6b8b933b486b12481cc58310ca" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.85", + "quote 1.0.36", "syn 1.0.109", ] +[[package]] +name = "enum-iterator" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fd242f399be1da0a5354aa462d57b4ab2b4ee0683cc552f7c007d2d12d36e94" +dependencies = [ + "enum-iterator-derive", +] + +[[package]] +name = "enum-iterator-derive" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1ab991c1362ac86c61ab6f556cff143daa22e5a15e4e189df818b2fd19fe65b" +dependencies = [ + "proc-macro2 1.0.85", + "quote 1.0.36", + "syn 2.0.66", +] + [[package]] name = "enum_dispatch" version = "0.3.13" @@ -2844,9 +3276,22 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aa18ce2bc66555b3218614519ac839ddb759a7d6720732f979ef8d13be147ecd" dependencies = [ "once_cell", - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2 1.0.85", + "quote 1.0.36", + "syn 2.0.66", +] + +[[package]] +name = "env_logger" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a12e6657c4c97ebab115a42dcee77225f7f482cdd841cf7088c657a42e9e00e7" +dependencies = [ + "atty", + "humantime", + "log", + "regex", + "termcolor", ] [[package]] @@ -2867,9 +3312,9 @@ dependencies = [ [[package]] name = "errno" -version = "0.3.3" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "136526188508e25c6fef639d7927dfb3e0e3084488bf202267829cf7fc23dbdd" +checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" dependencies = [ "libc", "windows-sys 0.52.0", @@ -3015,15 +3460,15 @@ dependencies = [ "ethers-core", "ethers-etherscan", "eyre", - "prettyplease 0.2.15", - "proc-macro2 1.0.67", - "quote 1.0.33", + "prettyplease 0.2.20", + "proc-macro2 1.0.85", + "quote 1.0.36", "regex", - "reqwest 0.11.25", + "reqwest 0.11.27", "serde", "serde_json", - "syn 2.0.37", - "toml 0.8.13", + "syn 2.0.66", + "toml 0.8.14", "walkdir", ] @@ -3037,10 +3482,10 @@ dependencies = [ "const-hex", "ethers-contract-abigen", "ethers-core", - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.85", + "quote 1.0.36", "serde_json", - "syn 2.0.37", + "syn 2.0.66", ] [[package]] @@ -3066,7 +3511,7 @@ dependencies = [ "serde", "serde_json", "strum 0.26.2", - "syn 2.0.37", + "syn 2.0.66", "tempfile", "thiserror", "tiny-keccak", @@ -3081,7 +3526,7 @@ checksum = "e79e5973c26d4baf0ce55520bd732314328cabe53193286671b47144145b9649" dependencies = [ "chrono", "ethers-core", - "reqwest 0.11.25", + "reqwest 0.11.27", "semver", "serde", "serde_json", @@ -3106,7 +3551,7 @@ dependencies = [ "futures-locks", "futures-util", "instant", - "reqwest 0.11.25", + "reqwest 0.11.27", "serde", "serde_json", "thiserror", @@ -3138,7 +3583,7 @@ dependencies = [ "jsonwebtoken", "once_cell", "pin-project", - "reqwest 0.11.25", + "reqwest 0.11.27", "serde", "serde_json", "thiserror", @@ -3238,25 +3683,25 @@ dependencies = [ "quote 1.0.36", "serde", "serde_json", - "syn 2.0.37", + "syn 2.0.66", ] [[package]] name = "evm-gateway" version = "0.1.0" dependencies = [ - "axelar-wasm-std", + "axelar-wasm-std 0.1.0", "cosmwasm-std", "error-stack", "ethers", "k256", - "multisig", + "multisig 0.3.0", "reqwest 0.12.4", "serde", "serde_json", "sha3 0.10.8", "thiserror", - "zip 2.0.0", + "zip 2.1.3", ] [[package]] @@ -3331,8 +3776,8 @@ version = "0.1.3" source = "git+https://github.com/MystenLabs/fastcrypto?rev=69180dc7275f5f0efb69e11e9d03f6db338d1dd6#69180dc7275f5f0efb69e11e9d03f6db338d1dd6" dependencies = [ "convert_case 0.6.0", - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.85", + "quote 1.0.36", "syn 1.0.109", ] @@ -3382,8 +3827,8 @@ dependencies = [ "num-bigint 0.4.5", "once_cell", "regex", - "reqwest 0.11.25", - "rustls-webpki 0.101.5", + "reqwest 0.11.27", + "rustls-webpki", "schemars", "serde", "serde_json", @@ -3401,9 +3846,9 @@ dependencies = [ [[package]] name = "fastrand" -version = "2.0.0" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6999dc1837253364c2ebb0704ba97994bd874e8f195d665c50b7548f6ea92764" +checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a" [[package]] name = "fdlimit" @@ -3444,16 +3889,16 @@ dependencies = [ "num-bigint 0.3.3", "num-integer", "num-traits", - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.85", + "quote 1.0.36", "syn 1.0.109", ] [[package]] name = "fiat-crypto" -version = "0.2.5" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27573eac26f4dd11e2b1916c3fe1baa56407c83c71a773a8ba17ec0bca03b6b7" +checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" [[package]] name = "fixed-hash" @@ -3657,9 +4102,9 @@ version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2 1.0.85", + "quote 1.0.36", + "syn 2.0.66", ] [[package]] @@ -3711,34 +4156,57 @@ dependencies = [ "byteorder", ] +[[package]] +name = "gateway" +version = "0.1.0" +source = "git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f#c0904e1c72c99a174a93b5f6c18b30f52d20b71f" +dependencies = [ + "aggregate-verifier", + "axelar-wasm-std 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "axelar-wasm-std-derive 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "connection-router", + "cosmwasm-schema 1.5.5", + "cosmwasm-std", + "cosmwasm-storage", + "cw-storage-plus 1.2.0", + "error-stack", + "itertools 0.11.0", + "mockall", + "report 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "schemars", + "serde", + "serde_json", + "thiserror", +] + [[package]] name = "gateway" version = "0.2.2" dependencies = [ - "axelar-wasm-std", - "axelar-wasm-std-derive", + "axelar-wasm-std 0.1.0", + "axelar-wasm-std-derive 0.1.0", "client", - "cosmwasm-schema", + "cosmwasm-schema 1.5.5", "cosmwasm-std", "cw-multi-test", "cw-storage-plus 1.2.0", - "cw2 1.1.0", + "cw2 1.1.2", "error-stack", "gateway-api", "itertools 0.11.0", - "report", + "report 0.1.0", "router-api", "serde", "serde_json", "thiserror", - "voting-verifier", + "voting-verifier 0.4.0", ] [[package]] name = "gateway-api" version = "0.1.0" dependencies = [ - "cosmwasm-schema", + "cosmwasm-schema 1.5.5", "router-api", ] @@ -3773,7 +4241,20 @@ dependencies = [ "cfg-if", "js-sys", "libc", - "wasi", + "wasi 0.9.0+wasi-snapshot-preview1", + "wasm-bindgen", +] + +[[package]] +name = "getrandom" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", "wasm-bindgen", ] @@ -3789,9 +4270,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.28.0" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0" +checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" [[package]] name = "glob" @@ -3811,6 +4292,47 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "gmp-gateway" +version = "0.1.0" +source = "git+https://github.com/eigerco/solana-axelar.git?branch=main#1249561eb1da88b1e89d8c6cb085db6054f5d0fd" +dependencies = [ + "anyhow", + "axelar-message-primitives", + "base64 0.21.7", + "bcs", + "bimap", + "bnum", + "borsh 1.5.1", + "bytemuck", + "connection-router", + "cosmwasm-schema 2.0.4", + "cosmwasm-std", + "hex", + "itertools 0.12.1", + "libsecp256k1 0.7.1", + "multisig 0.1.0", + "multisig-prover 0.1.0", + "num-derive 0.4.2", + "num-traits", + "program-utils", + "serde", + "sha3 0.10.8", + "solana-program", + "thiserror", +] + +[[package]] +name = "goblin" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7666983ed0dd8d21a6f6576ee00053ca0926fb281a5522577a4dbd0f1b54143" +dependencies = [ + "log", + "plain", + "scroll", +] + [[package]] name = "group" version = "0.13.0" @@ -3839,29 +4361,47 @@ dependencies = [ "indexmap 2.2.6", "slab", "tokio", - "tokio-util 0.7.9", + "tokio-util 0.7.11", "tracing", ] [[package]] name = "h2" -version = "0.4.4" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "816ec7294445779408f36fe57bc5b7fc1cf59664059096c65f905c1c61f58069" +checksum = "fa82e28a107a8cc405f0839610bdc9b15f1e25ec7d696aa5cf173edbcb1486ab" dependencies = [ + "atomic-waker", "bytes", "fnv", "futures-core", "futures-sink", - "futures-util", "http 1.1.0", - "indexmap 2.0.0", + "indexmap 2.2.6", "slab", "tokio", - "tokio-util 0.7.9", + "tokio-util 0.7.11", "tracing", ] +[[package]] +name = "hash32" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0c35f58762feb77d74ebe43bdbc3210f09be9fe6742234d573bacc26ed92b67" +dependencies = [ + "byteorder", +] + +[[package]] +name = "hashbrown" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" +dependencies = [ + "ahash 0.7.8", +] + [[package]] name = "hashbrown" version = "0.12.3" @@ -3882,9 +4422,13 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.14.0" +version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +dependencies = [ + "ahash 0.8.11", + "allocator-api2", +] [[package]] name = "hashers" @@ -4102,9 +4646,9 @@ checksum = "add0ab9360ddbd88cfeb3bd9574a1d85cfdfa14db10b3e21d3700dbc4328758f" [[package]] name = "httparse" -version = "1.9.3" +version = "1.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0e7a4dd27b9476dc40cb050d3632d3bba3a70ddbff012285f7f8559a1e7e545" +checksum = "0fcc0b4a115bf80b728eb8ea024ad5bd707b615bfed49e0665b6e0f86fd082d9" [[package]] name = "httpdate" @@ -4130,22 +4674,22 @@ dependencies = [ [[package]] name = "hyper" -version = "0.14.27" +version = "0.14.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468" +checksum = "f361cde2f109281a220d4307746cdfd5ee3f410da58a70377762396775634b33" dependencies = [ "bytes", "futures-channel", "futures-core", "futures-util", - "h2 0.3.24", - "http 0.2.9", - "http-body 0.4.5", + "h2 0.3.26", + "http 0.2.12", + "http-body 0.4.6", "httparse", "httpdate", "itoa", "pin-project-lite", - "socket2 0.4.9", + "socket2 0.5.7", "tokio", "tower-service", "tracing", @@ -4161,7 +4705,7 @@ dependencies = [ "bytes", "futures-channel", "futures-util", - "h2 0.4.4", + "h2 0.4.5", "http 1.1.0", "http-body 1.0.0", "httparse", @@ -4182,8 +4726,8 @@ dependencies = [ "bytes", "futures", "headers", - "http 0.2.9", - "hyper 0.14.27", + "http 0.2.12", + "hyper 0.14.29", "hyper-rustls 0.22.1", "rustls-native-certs 0.5.0", "tokio", @@ -4200,7 +4744,7 @@ checksum = "5f9f7a97316d44c0af9b0301e65010573a853a9fc97046d7331d7f6bc0fd5a64" dependencies = [ "ct-logs", "futures-util", - "hyper 0.14.27", + "hyper 0.14.29", "log", "rustls 0.19.1", "rustls-native-certs 0.5.0", @@ -4217,9 +4761,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" dependencies = [ "futures-util", - "http 0.2.9", - "hyper 0.14.27", - "rustls 0.21.7", + "http 0.2.12", + "hyper 0.14.29", + "rustls 0.21.12", "tokio", "tokio-rustls 0.24.1", ] @@ -4230,7 +4774,7 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1" dependencies = [ - "hyper 0.14.27", + "hyper 0.14.29", "pin-project-lite", "tokio", "tokio-io-timeout", @@ -4265,7 +4809,7 @@ dependencies = [ "http-body 1.0.0", "hyper 1.3.1", "pin-project-lite", - "socket2 0.5.4", + "socket2 0.5.7", "tokio", "tower", "tower-service", @@ -4421,9 +4965,9 @@ checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" [[package]] name = "idna" -version = "0.4.0" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c" +checksum = "4716a3a0933a1d01c2f72450e89596eb51dd34ef3c211ccd875acdf1f8fe47ed" dependencies = [ "icu_normalizer", "icu_properties", @@ -4462,7 +5006,7 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba6a270039626615617f3f36d15fc827041df3b78c439da2cadfa47455a77f2f" dependencies = [ - "parity-scale-codec 3.6.5", + "parity-scale-codec 3.6.12", ] [[package]] @@ -4498,8 +5042,8 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "11d7a9f6330b71fea57921c9b61c47ee6e84f72d394754eff6163ae67e7395eb" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.85", + "quote 1.0.36", "syn 1.0.109", ] @@ -4527,7 +5071,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" dependencies = [ "equivalent", - "hashbrown 0.14.0", + "hashbrown 0.14.5", "serde", ] @@ -4556,9 +5100,9 @@ dependencies = [ [[package]] name = "insta" -version = "1.31.0" +version = "1.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0770b0a3d4c70567f0d58331f3088b0e4c4f56c9b8d764efe654b4a5d46de3a" +checksum = "810ae6042d48e2c9e9215043563a58a80b877bc863228a74cf10c49d4620a6f5" dependencies = [ "console", "lazy_static", @@ -4582,27 +5126,27 @@ dependencies = [ name = "integration-tests" version = "0.1.0" dependencies = [ - "axelar-wasm-std", + "axelar-wasm-std 0.1.0", "coordinator", "cosmwasm-std", "cw-multi-test", "error-stack", - "gateway", + "gateway 0.2.2", "gateway-api", "k256", - "multisig", - "multisig-prover", - "rand", - "report", - "rewards", + "multisig 0.3.0", + "multisig-prover 0.5.0", + "rand 0.8.5", + "report 0.1.0", + "rewards 0.3.0", "router", "router-api", "serde", "serde_json", - "service-registry", + "service-registry 0.3.0", "sha3 0.10.8", "tofn", - "voting-verifier", + "voting-verifier 0.4.0", ] [[package]] @@ -4634,15 +5178,10 @@ dependencies = [ ] [[package]] -name = "is-terminal" -version = "0.4.9" +name = "is_terminal_polyfill" +version = "1.70.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b" -dependencies = [ - "hermit-abi", - "rustix", - "windows-sys 0.48.0", -] +checksum = "f8478577c03552c21db0e2724ffb8986a5ce7af88107e6be5d2ee6e158c12800" [[package]] name = "itertools" @@ -4662,6 +5201,15 @@ dependencies = [ "either", ] +[[package]] +name = "itertools" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +dependencies = [ + "either", +] + [[package]] name = "itoa" version = "1.0.11" @@ -4670,9 +5218,9 @@ checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" [[package]] name = "jobserver" -version = "0.1.26" +version = "0.1.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2" +checksum = "d2b099aaa34a9751c5bf0878add70444e1ed2dd73f347be99003d4577277de6e" dependencies = [ "libc", ] @@ -4949,15 +5497,27 @@ dependencies = [ [[package]] name = "libz-sys" -version = "1.1.12" +version = "1.1.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d97137b25e321a73eef1418d1d5d2eda4d77e12813f8e6dead84bc52c5870a7b" +checksum = "c15da26e5af7e25c90b37a2d75cdbf940cf4a55316de9d84c679c9b8bfabf82e" dependencies = [ "cc", "pkg-config", "vcpkg", ] +[[package]] +name = "light-poseidon" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c9a85a9752c549ceb7578064b4ed891179d20acd85f27318573b64d2d7ee7ee" +dependencies = [ + "ark-bn254", + "ark-ff", + "num-bigint 0.4.5", + "thiserror", +] + [[package]] name = "linked-hash-map" version = "0.5.6" @@ -4966,15 +5526,21 @@ checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" [[package]] name = "linux-raw-sys" -version = "0.4.7" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" + +[[package]] +name = "litemap" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a9bad9f94746442c783ca431b22403b519cd7fbeed0533fdd6328b2f2212128" +checksum = "643cb0b8d4fcc284004d5fd0d67ccf61dfffadb7f75e1e71bc420f4688a3a704" [[package]] name = "lock_api" -version = "0.4.10" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16" +checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" dependencies = [ "autocfg", "scopeguard", @@ -4995,6 +5561,15 @@ dependencies = [ "serde", ] +[[package]] +name = "lru" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3262e75e648fce39813cb56ac41f3c3e3f65217ebf3844d818d1f9398cfb0dc" +dependencies = [ + "hashbrown 0.14.5", +] + [[package]] name = "lz4-sys" version = "1.9.5" @@ -5045,9 +5620,18 @@ dependencies = [ [[package]] name = "memchr" -version = "2.6.3" +version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f232d6ef707e1956a43342693d2a31e72989554d58299d7a88738cc95b0d35c" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" + +[[package]] +name = "memmap2" +version = "0.5.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83faa42c0a078c393f6b29d5db232d8be22776a891f8f56e5284faee4a20b327" +dependencies = [ + "libc", +] [[package]] name = "memoffset" @@ -5103,9 +5687,9 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.7.1" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" +checksum = "87dfd01fe195c66b572b37921ad8803d010623c0aca821bea2302239d155cdae" dependencies = [ "adler", ] @@ -5144,8 +5728,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "22ce75669015c4f47b289fd4d4f56e894e4c96003ffdf3ac51313126f94c6cbb" dependencies = [ "cfg-if", - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.85", + "quote 1.0.36", "syn 1.0.109", ] @@ -5254,7 +5838,7 @@ source = "git+https://github.com/mystenlabs/sui?tag=mainnet-v1.14.2#299cbeafbb6a dependencies = [ "anyhow", "bcs", - "clap", + "clap 4.5.7", "codespan-reporting", "hex", "move-binary-format", @@ -5284,7 +5868,7 @@ dependencies = [ "ethnum", "hex", "move-proc-macros", - "num", + "num 0.4.3", "once_cell", "primitive-types 0.10.1", "rand 0.8.5", @@ -5301,7 +5885,7 @@ source = "git+https://github.com/mystenlabs/sui?tag=mainnet-v1.14.2#299cbeafbb6a dependencies = [ "anyhow", "bcs", - "clap", + "clap 4.5.7", "codespan", "colored", "move-binary-format", @@ -5320,7 +5904,7 @@ source = "git+https://github.com/mystenlabs/sui?tag=mainnet-v1.14.2#299cbeafbb6a dependencies = [ "anyhow", "bcs", - "clap", + "clap 4.5.7", "colored", "hex", "move-binary-format", @@ -5344,7 +5928,7 @@ dependencies = [ "log", "move-compiler", "move-model", - "num", + "num 0.4.3", "once_cell", "regex", "serde", @@ -5413,7 +5997,7 @@ dependencies = [ "move-disassembler", "move-ir-types", "move-symbol-pool", - "num", + "num 0.4.3", "once_cell", "regex", "serde", @@ -5425,7 +6009,7 @@ version = "0.1.0" source = "git+https://github.com/mystenlabs/sui?tag=mainnet-v1.14.2#299cbeafbb6aa5601e08f00ac24bd647c61a63e2" dependencies = [ "anyhow", - "clap", + "clap 4.5.7", "colored", "move-abigen", "move-binary-format", @@ -5457,8 +6041,8 @@ version = "0.1.0" source = "git+https://github.com/mystenlabs/sui?tag=mainnet-v1.14.2#299cbeafbb6aa5601e08f00ac24bd647c61a63e2" dependencies = [ "enum-compat-util", - "quote 1.0.33", - "syn 2.0.37", + "quote 1.0.36", + "syn 2.0.66", ] [[package]] @@ -5552,8 +6136,8 @@ version = "0.1.0" source = "git+https://github.com/MystenLabs/mysten-sim.git?rev=1a52783d6600ecc22e15253a982f77881bd47c77#1a52783d6600ecc22e15253a982f77881bd47c77" dependencies = [ "darling 0.14.4", - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.85", + "quote 1.0.36", "syn 1.0.109", ] @@ -5606,8 +6190,8 @@ checksum = "1d6d4752e6230d8ef7adf7bd5d8c4b1f6561c1014c5ba9a37445ccefe18aa1db" dependencies = [ "proc-macro-crate 1.1.3", "proc-macro-error", - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.85", + "quote 1.0.36", "syn 1.0.109", "synstructure 0.12.6", ] @@ -5620,70 +6204,128 @@ checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a" [[package]] name = "multisig" -version = "0.3.0" +version = "0.1.0" +source = "git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f#c0904e1c72c99a174a93b5f6c18b30f52d20b71f" dependencies = [ - "axelar-wasm-std", - "axelar-wasm-std-derive", + "axelar-wasm-std 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "axelar-wasm-std-derive 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "connection-router", "cosmwasm-crypto", "cosmwasm-schema 1.5.5", "cosmwasm-std", - "curve25519-dalek 4.1.1", - "cw-multi-test", + "cosmwasm-storage", "cw-storage-plus 1.2.0", - "cw-utils 1.0.1", - "cw2 1.1.0", - "ed25519-dalek", "enum-display-derive", "error-stack", - "getrandom", - "itertools 0.11.0", + "getrandom 0.2.15", "k256", - "report", - "rewards", - "router-api", + "report 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "rewards 0.1.0", + "schemars", "serde", "serde_json", "sha3 0.10.8", - "signature-verifier-api", "thiserror", ] [[package]] -name = "multisig-prover" -version = "0.5.0" +name = "multisig" +version = "0.3.0" dependencies = [ - "alloy-primitives", - "alloy-sol-types", - "anyhow", "axelar-wasm-std 0.1.0", "axelar-wasm-std-derive 0.1.0", - "bcs", - "coordinator", - "cosmwasm-schema", + "cosmwasm-crypto", + "cosmwasm-schema 1.5.5", "cosmwasm-std", + "curve25519-dalek 4.1.2", "cw-multi-test", "cw-storage-plus 1.2.0", - "cw-utils 1.0.1", - "cw2 1.1.0", - "elliptic-curve", + "cw-utils 1.0.3", + "cw2 1.1.2", + "ed25519-dalek 2.1.1", + "enum-display-derive", "error-stack", - "ethabi", - "ethers", - "gateway", - "gateway-api", - "generic-array", - "hex", + "getrandom 0.2.15", "itertools 0.11.0", "k256", - "multisig", - "prost 0.12.6", - "report", + "report 0.1.0", + "rewards 0.3.0", + "router-api", + "serde", + "serde_json", + "sha3 0.10.8", + "signature-verifier-api", + "thiserror", +] + +[[package]] +name = "multisig-prover" +version = "0.1.0" +source = "git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f#c0904e1c72c99a174a93b5f6c18b30f52d20b71f" +dependencies = [ + "axelar-wasm-std 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "axelar-wasm-std-derive 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "bcs", + "connection-router", + "cosmwasm-schema 1.5.5", + "cosmwasm-std", + "cosmwasm-storage", + "cw-storage-plus 1.2.0", + "cw-utils 1.0.3", + "either", + "error-stack", + "ethabi", + "gateway 0.1.0", + "hex", + "itertools 0.11.0", + "k256", + "multisig 0.1.0", + "report 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "schemars", + "serde", + "serde_json", + "service-registry 0.1.0", + "sha3 0.10.8", + "thiserror", + "voting-verifier 0.1.0", +] + +[[package]] +name = "multisig-prover" +version = "0.5.0" +dependencies = [ + "alloy-primitives", + "alloy-sol-types", + "anyhow", + "axelar-wasm-std 0.1.0", + "axelar-wasm-std-derive 0.1.0", + "bcs", + "coordinator", + "cosmwasm-schema 1.5.5", + "cosmwasm-std", + "cw-multi-test", + "cw-storage-plus 1.2.0", + "cw-utils 1.0.3", + "cw2 1.1.2", + "elliptic-curve", + "error-stack", + "ethabi", + "ethers", + "gateway 0.2.2", + "gateway-api", + "generic-array", + "hex", + "itertools 0.11.0", + "k256", + "multisig 0.3.0", + "prost 0.12.6", + "report 0.1.0", "router-api", "serde_json", - "service-registry", + "service-registry 0.3.0", "sha3 0.10.8", "thiserror", - "voting-verifier", + "voting-verifier 0.4.0", ] [[package]] @@ -5756,7 +6398,7 @@ name = "mysten-util-mem-derive" version = "0.1.0" source = "git+https://github.com/mystenlabs/sui?tag=mainnet-v1.14.2#299cbeafbb6aa5601e08f00ac24bd647c61a63e2" dependencies = [ - "proc-macro2 1.0.67", + "proc-macro2 1.0.85", "syn 1.0.109", "synstructure 0.12.6", "workspace-hack", @@ -5816,11 +6458,10 @@ dependencies = [ [[package]] name = "native-tls" -version = "0.2.11" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e" +checksum = "a8614eb2c83d59d1c8cc974dd3f920198647674a0a035e1af1fa58707e317466" dependencies = [ - "lazy_static", "libc", "log", "openssl", @@ -5861,12 +6502,12 @@ checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" name = "nexus-gateway" version = "0.2.3" dependencies = [ - "axelar-wasm-std", - "axelar-wasm-std-derive", - "cosmwasm-schema", + "axelar-wasm-std 0.1.0", + "axelar-wasm-std-derive 0.1.0", + "cosmwasm-schema 1.5.5", "cosmwasm-std", "cw-storage-plus 1.2.0", - "cw2 1.1.0", + "cw2 1.1.2", "error-stack", "hex", "mockall", @@ -5875,7 +6516,20 @@ dependencies = [ "schemars", "serde", "thiserror", - "voting-verifier", + "voting-verifier 0.4.0", +] + +[[package]] +name = "nix" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b" +dependencies = [ + "bitflags 1.3.2", + "cfg-if", + "libc", + "memoffset 0.7.1", + "pin-utils", ] [[package]] @@ -5908,13 +6562,38 @@ dependencies = [ name = "num" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b05180d69e3da0e530ba2a1dae5110317e49e3b7f3d41be227dc5f92e49ee7af" +checksum = "b8536030f9fea7127f841b45bb6243b27255787fb4eb83958aa1ef9d2fdc0c36" +dependencies = [ + "num-bigint 0.2.6", + "num-complex 0.2.4", + "num-integer", + "num-iter", + "num-rational 0.2.4", + "num-traits", +] + +[[package]] +name = "num" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23" dependencies = [ - "num-bigint 0.4.4", - "num-complex", + "num-bigint 0.4.5", + "num-complex 0.4.6", "num-integer", "num-iter", - "num-rational", + "num-rational 0.4.2", + "num-traits", +] + +[[package]] +name = "num-bigint" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "090c7f9998ee0ff65aa5b723e4009f7b217707f1fb5ea551329cc4d6231fb304" +dependencies = [ + "autocfg", + "num-integer", "num-traits", ] @@ -5967,6 +6646,15 @@ dependencies = [ "num-traits", ] +[[package]] +name = "num-complex" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" +dependencies = [ + "num-traits", +] + [[package]] name = "num-conv" version = "0.1.0" @@ -5979,11 +6667,22 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.85", + "quote 1.0.36", "syn 1.0.109", ] +[[package]] +name = "num-derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" +dependencies = [ + "proc-macro2 1.0.85", + "quote 1.0.36", + "syn 2.0.66", +] + [[package]] name = "num-integer" version = "0.1.46" @@ -5995,9 +6694,9 @@ dependencies = [ [[package]] name = "num-iter" -version = "0.1.43" +version = "0.1.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252" +checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" dependencies = [ "autocfg", "num-integer", @@ -6029,9 +6728,9 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.16" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f30b0abd723be7e2ffca1272140fac1a2f084c77ec3e123c192b66af1ee9e6c2" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", "libm", @@ -6071,10 +6770,22 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96667db765a921f7b295ffee8b60472b686a51d4f21c2ee4ffdb94c7013b65a6" dependencies = [ - "proc-macro-crate", - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro-crate 1.1.3", + "proc-macro2 1.0.85", + "quote 1.0.36", + "syn 2.0.66", +] + +[[package]] +name = "num_enum_derive" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "681030a937600a36906c185595136d26abfebb4aa9c65701cefcaf8578bb982b" +dependencies = [ + "proc-macro-crate 3.1.0", + "proc-macro2 1.0.85", + "quote 1.0.36", + "syn 2.0.66", ] [[package]] @@ -6085,9 +6796,9 @@ checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" [[package]] name = "object" -version = "0.32.1" +version = "0.36.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0" +checksum = "576dfe1fc8f9df304abb159d767a29d0476f7750fbf8aa7ad07816004a207434" dependencies = [ "memchr", ] @@ -6133,8 +6844,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "003b2be5c6c53c1cfeb0a238b8a1c3915cd410feb684457a36c10038f764bb1c" dependencies = [ "bytes", - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.85", + "quote 1.0.36", "syn 1.0.109", ] @@ -6144,7 +6855,7 @@ version = "0.10.64" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "95a0481286a310808298130d22dd1fef0fa571e05a8f44ec801801e84b216b1f" dependencies = [ - "bitflags 2.4.0", + "bitflags 2.5.0", "cfg-if", "foreign-types", "libc", @@ -6159,9 +6870,9 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2 1.0.85", + "quote 1.0.36", + "syn 2.0.66", ] [[package]] @@ -6223,9 +6934,9 @@ checksum = "ec4c6225c69b4ca778c0aea097321a64c421cf4577b331c61b229267edabb6f8" dependencies = [ "heck 0.4.1", "proc-macro-error", - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2 1.0.85", + "quote 1.0.36", + "syn 2.0.66", ] [[package]] @@ -6282,15 +6993,15 @@ dependencies = [ [[package]] name = "parity-scale-codec" -version = "3.6.5" +version = "3.6.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dec8a8073036902368c2cdc0387e85ff9a37054d7e7c98e592145e0c92cd4fb" +checksum = "306800abfa29c7f16596b5970a588435e3d5b3149683d00c12b699cc19f895ee" dependencies = [ "arrayvec", "bitvec 1.0.1", "byte-slice-cast", "impl-trait-for-tuples", - "parity-scale-codec-derive 3.6.5", + "parity-scale-codec-derive 3.6.12", "serde", ] @@ -6300,21 +7011,21 @@ version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1557010476e0595c9b568d16dcfb81b93cdeb157612726f5170d31aa707bed27" dependencies = [ - "proc-macro-crate", - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro-crate 1.1.3", + "proc-macro2 1.0.85", + "quote 1.0.36", "syn 1.0.109", ] [[package]] name = "parity-scale-codec-derive" -version = "3.6.5" +version = "3.6.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "312270ee71e1cd70289dacf597cab7b207aa107d2f28191c2ae45b2ece18a260" +checksum = "d830939c76d294956402033aee57a6da7b438f2294eb94864c37b0569053a42c" dependencies = [ - "proc-macro-crate", - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro-crate 3.1.0", + "proc-macro2 1.0.85", + "quote 1.0.36", "syn 1.0.109", ] @@ -6330,13 +7041,13 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.8" +version = "0.9.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447" +checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.3.5", + "redox_syscall 0.5.2", "smallvec", "windows-targets 0.52.5", ] @@ -6442,8 +7153,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b5aa52829b8decbef693af90202711348ab001456803ba2a98eb4ec8fb70844c" dependencies = [ "peg-runtime", - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.85", + "quote 1.0.36", ] [[package]] @@ -6496,9 +7207,9 @@ dependencies = [ [[package]] name = "pest" -version = "2.7.3" +version = "2.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7a4d085fd991ac8d5b05a147b437791b4260b76326baf0fc60cf7c9c27ecd33" +checksum = "560131c633294438da9f7c4b08189194b20946c8274c6b9e38881a7874dc8ee8" dependencies = [ "memchr", "thiserror", @@ -6507,9 +7218,9 @@ dependencies = [ [[package]] name = "pest_derive" -version = "2.7.3" +version = "2.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2bee7be22ce7918f641a33f08e3f43388c7656772244e2bbb2477f44cc9021a" +checksum = "26293c9193fbca7b1a3bf9b79dc1e388e927e6cacaa78b4a3ab705a1d3d41459" dependencies = [ "pest", "pest_generator", @@ -6517,22 +7228,22 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.7.3" +version = "2.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1511785c5e98d79a05e8a6bc34b4ac2168a0e3e92161862030ad84daa223141" +checksum = "3ec22af7d3fb470a85dd2ca96b7c577a1eb4ef6f1683a9fe9a8c16e136c04687" dependencies = [ "pest", "pest_meta", - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2 1.0.85", + "quote 1.0.36", + "syn 2.0.66", ] [[package]] name = "pest_meta" -version = "2.7.3" +version = "2.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b42f0394d3123e33353ca5e1e89092e533d2cc490389f2bd6131c43c634ebc5f" +checksum = "d7a240022f37c361ec1878d646fc5b7d7c4d28d5946e1a80ad5a7a4f4ca0bdcd" dependencies = [ "once_cell", "pest", @@ -6597,9 +7308,9 @@ checksum = "3444646e286606587e49f3bcf1679b8cef1dc2c5ecc29ddacaffc305180d464b" dependencies = [ "phf_generator", "phf_shared 0.11.2", - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2 1.0.85", + "quote 1.0.36", + "syn 2.0.66", ] [[package]] @@ -6635,9 +7346,9 @@ version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2 1.0.85", + "quote 1.0.36", + "syn 2.0.66", ] [[package]] @@ -6749,12 +7460,6 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" -[[package]] -name = "powerfmt" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" - [[package]] name = "ppv-lite86" version = "0.2.17" @@ -6803,18 +7508,18 @@ version = "0.1.25" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c8646e95016a7a6c4adea95bafa8a16baab64b583356217f2c85db4a39d9a86" dependencies = [ - "proc-macro2 1.0.67", + "proc-macro2 1.0.85", "syn 1.0.109", ] [[package]] name = "prettyplease" -version = "0.2.15" +version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae005bd773ab59b4725093fd7df83fd7892f7d8eafb48dbd7de6e024e4215f9d" +checksum = "5f12335488a2f3b0a83b14edad48dca9879ce89b2edd10e80237e4e852dd645e" dependencies = [ - "proc-macro2 1.0.67", - "syn 2.0.37", + "proc-macro2 1.0.85", + "syn 2.0.66", ] [[package]] @@ -6871,6 +7576,15 @@ dependencies = [ "toml 0.5.11", ] +[[package]] +name = "proc-macro-crate" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284" +dependencies = [ + "toml_edit 0.21.1", +] + [[package]] name = "proc-macro-error" version = "1.0.4" @@ -6878,8 +7592,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" dependencies = [ "proc-macro-error-attr", - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.85", + "quote 1.0.36", "syn 1.0.109", "version_check", ] @@ -6890,8 +7604,8 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.85", + "quote 1.0.36", "version_check", ] @@ -6906,13 +7620,23 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.67" +version = "1.0.85" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d433d9f1a3e8c1263d9456598b16fec66f4acc9a74dacffd35c7bb09b3a1328" +checksum = "22244ce15aa966053a896d1accb3a6e68469b97c7f33f284b99f0d576879fc23" dependencies = [ "unicode-ident", ] +[[package]] +name = "program-utils" +version = "0.1.0" +source = "git+https://github.com/eigerco/solana-axelar.git?branch=main#1249561eb1da88b1e89d8c6cb085db6054f5d0fd" +dependencies = [ + "borsh 1.5.1", + "solana-program", + "thiserror", +] + [[package]] name = "prometheus" version = "0.13.4" @@ -6948,15 +7672,12 @@ dependencies = [ "bit-set", "bit-vec", "bitflags 2.5.0", - "bit-vec", - "bitflags 2.4.0", "lazy_static", "num-traits", "rand 0.8.5", "rand_chacha 0.3.1", "rand_xorshift", "regex-syntax", - "regex-syntax 0.8.2", "rusty-fork", "tempfile", "unarray", @@ -7033,8 +7754,8 @@ checksum = "f9cc1a3263e07e0bf68e96268f37665207b49560d98739662cdfaae215c720fe" dependencies = [ "anyhow", "itertools 0.10.5", - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.85", + "quote 1.0.36", "syn 1.0.109", ] @@ -7046,8 +7767,8 @@ checksum = "e5d2d8d10f3c6ded6da8b05b5fb3b8a5082514344d56c9f871412d29b4e075b4" dependencies = [ "anyhow", "itertools 0.10.5", - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.85", + "quote 1.0.36", "syn 1.0.109", ] @@ -7058,10 +7779,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81bddcdb20abf9501610992b6759a4c888aef7d1a7247ef75e2404275ac24af1" dependencies = [ "anyhow", - "itertools 0.11.0", - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "itertools 0.12.1", + "proc-macro2 1.0.85", + "quote 1.0.36", + "syn 2.0.66", ] [[package]] @@ -7082,6 +7803,26 @@ dependencies = [ "bytes", ] +[[package]] +name = "qstring" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d464fae65fff2680baf48019211ce37aaec0c78e9264c84a3e484717f965104e" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "qualifier_attr" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e2e25ee72f5b24d773cae88422baddefff7714f97aab68d96fe2b6fc4a28fb2" +dependencies = [ + "proc-macro2 1.0.85", + "quote 1.0.36", + "syn 2.0.66", +] + [[package]] name = "quick-error" version = "1.2.3" @@ -7100,7 +7841,7 @@ dependencies = [ "quinn-proto", "quinn-udp", "rustc-hash", - "rustls 0.21.7", + "rustls 0.21.12", "thiserror", "tokio", "tracing", @@ -7116,7 +7857,8 @@ dependencies = [ "rand 0.8.5", "ring 0.16.20", "rustc-hash", - "rustls 0.21.7", + "rustls 0.21.12", + "rustls-native-certs 0.6.3", "slab", "thiserror", "tinyvec", @@ -7131,7 +7873,7 @@ checksum = "055b4e778e8feb9f93c4e439f71dc2156ef13360b432b799e179a8c4cdf0b1d7" dependencies = [ "bytes", "libc", - "socket2 0.5.4", + "socket2 0.5.7", "tracing", "windows-sys 0.48.0", ] @@ -7151,7 +7893,7 @@ version = "1.0.36" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" dependencies = [ - "proc-macro2 1.0.67", + "proc-macro2 1.0.85", ] [[package]] @@ -7225,7 +7967,16 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom", + "getrandom 0.2.15", +] + +[[package]] +name = "rand_hc" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" +dependencies = [ + "rand_core 0.5.1", ] [[package]] @@ -7305,9 +8056,9 @@ version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a25d631e41bfb5fdcde1d4e2215f62f7f0afa3ff11e26563765bd6ea1d229aeb" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2 1.0.85", + "quote 1.0.36", + "syn 2.0.66", ] [[package]] @@ -7332,16 +8083,16 @@ dependencies = [ name = "redox_syscall" version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" +checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" dependencies = [ "bitflags 1.3.2", ] [[package]] name = "redox_syscall" -version = "0.3.5" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" +checksum = "c82cf8cff14456045f55ec4241383baeff27af886adb72ffb2162f99911de0fd" dependencies = [ "bitflags 2.5.0", ] @@ -7352,36 +8103,36 @@ version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd283d9651eeda4b2a83a43c1c91b266c40fd76ecd39a50a8c630ae69dc72891" dependencies = [ - "getrandom", - "redox_syscall 0.2.16", + "getrandom 0.2.15", + "libredox", "thiserror", ] [[package]] name = "ref-cast" -version = "1.0.20" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acde58d073e9c79da00f2b5b84eed919c8326832648a5b109b3fce1bb1175280" +checksum = "ccf0a6f84d5f1d581da8b41b47ec8600871962f2a528115b542b362d4b744931" dependencies = [ "ref-cast-impl", ] [[package]] name = "ref-cast-impl" -version = "1.0.20" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f7473c2cfcf90008193dd0e3e16599455cb601a9fce322b5bb55de799664925" +checksum = "bcc303e793d3734489387d205e9b186fac9c6cfacedd98cbb2e8a5943595f3e6" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2 1.0.85", + "quote 1.0.36", + "syn 2.0.66", ] [[package]] name = "regex" -version = "1.10.2" +version = "1.10.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343" +checksum = "b91213439dad192326a0d7c6ee3955910425f441d7038e0d6933b0aec5c4517f" dependencies = [ "aho-corasick", "memchr", @@ -7391,15 +8142,21 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.3" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f" +checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" dependencies = [ "aho-corasick", "memchr", "regex-syntax", ] +[[package]] +name = "regex-syntax" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" + [[package]] name = "report" version = "0.1.0" @@ -7429,16 +8186,17 @@ version = "0.11.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62" dependencies = [ - "base64 0.21.4", + "async-compression 0.4.11", + "base64 0.21.7", "bytes", "encoding_rs", "futures-core", "futures-util", - "h2 0.3.24", - "http 0.2.9", - "http-body 0.4.5", - "hyper 0.14.27", - "hyper-rustls 0.24.1", + "h2 0.3.26", + "http 0.2.12", + "http-body 0.4.6", + "hyper 0.14.29", + "hyper-rustls 0.24.2", "ipnet", "js-sys", "log", @@ -7446,21 +8204,22 @@ dependencies = [ "once_cell", "percent-encoding", "pin-project-lite", - "rustls 0.21.7", - "rustls-pemfile 1.0.3", + "rustls 0.21.12", + "rustls-pemfile 1.0.4", "serde", "serde_json", "serde_urlencoded", "sync_wrapper 0.1.2", - "system-configuration 0.6.0", + "system-configuration", "tokio", "tokio-rustls 0.24.1", + "tokio-util 0.7.11", "tower-service", "url", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", - "webpki-roots 0.25.2", + "webpki-roots 0.25.4", "winreg 0.50.0", ] @@ -7476,7 +8235,7 @@ dependencies = [ "futures-channel", "futures-core", "futures-util", - "h2 0.4.4", + "h2 0.4.5", "http 1.1.0", "http-body 1.0.0", "http-body-util", @@ -7496,7 +8255,7 @@ dependencies = [ "serde_json", "serde_urlencoded", "sync_wrapper 0.1.2", - "system-configuration 0.5.1", + "system-configuration", "tokio", "tokio-native-tls", "tower-service", @@ -7507,37 +8266,49 @@ dependencies = [ "winreg 0.52.0", ] -[[package]] -name = "retain_mut" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c31b5c4033f8fdde8700e4657be2c497e7288f01515be52168c631e2e4d4086" - [[package]] name = "rewards" -version = "0.3.0" +version = "0.1.0" +source = "git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f#c0904e1c72c99a174a93b5f6c18b30f52d20b71f" dependencies = [ - "axelar-wasm-std", - "axelar-wasm-std-derive", - "cosmwasm-schema", + "axelar-wasm-std 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "axelar-wasm-std-derive 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "cosmwasm-schema 1.5.5", "cosmwasm-std", - "cw-multi-test", "cw-storage-plus 1.2.0", - "cw2 1.1.0", "error-stack", "itertools 0.11.0", - "report", - "router-api", + "mockall", + "report 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "serde", "thiserror", ] [[package]] -name = "rfc6979" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" +name = "rewards" +version = "0.3.0" dependencies = [ - "hmac 0.12.1", + "axelar-wasm-std 0.1.0", + "axelar-wasm-std-derive 0.1.0", + "cosmwasm-schema 1.5.5", + "cosmwasm-std", + "cw-multi-test", + "cw-storage-plus 1.2.0", + "cw2 1.1.2", + "error-stack", + "itertools 0.11.0", + "report 0.1.0", + "router-api", + "thiserror", +] + +[[package]] +name = "rfc6979" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" +dependencies = [ + "hmac 0.12.1", "subtle", ] @@ -7556,6 +8327,21 @@ dependencies = [ "winapi", ] +[[package]] +name = "ring" +version = "0.17.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" +dependencies = [ + "cc", + "cfg-if", + "getrandom 0.2.15", + "libc", + "spin 0.9.8", + "untrusted 0.9.0", + "windows-sys 0.52.0", +] + [[package]] name = "ripemd" version = "0.1.3" @@ -7582,16 +8368,16 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e33d7b2abe0c340d8797fe2907d3f20d3b5ea5908683618bfe80df7f621f672a" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.85", + "quote 1.0.36", "syn 1.0.109", ] [[package]] name = "roaring" -version = "0.10.2" +version = "0.10.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6106b5cf8587f5834158895e9715a3c6c9716c8aefab57f1f7680917191c7873" +checksum = "7699249cc2c7d71939f30868f47e9d7add0bdc030d90ee10bfd16887ff8bb1c8" dependencies = [ "bytemuck", "byteorder", @@ -7622,13 +8408,13 @@ dependencies = [ name = "router" version = "0.3.2" dependencies = [ - "axelar-wasm-std", - "axelar-wasm-std-derive", - "cosmwasm-schema", + "axelar-wasm-std 0.1.0", + "axelar-wasm-std-derive 0.1.0", + "cosmwasm-schema 1.5.5", "cosmwasm-std", "cw-multi-test", "cw-storage-plus 1.2.0", - "cw2 1.1.0", + "cw2 1.1.2", "error-stack", "flagset", "gateway-api", @@ -7636,8 +8422,8 @@ dependencies = [ "integration-tests", "itertools 0.11.0", "mockall", - "rand", - "report", + "rand 0.8.5", + "report 0.1.0", "router-api", "serde_json", ] @@ -7646,16 +8432,16 @@ dependencies = [ name = "router-api" version = "0.1.0" dependencies = [ - "axelar-wasm-std", - "axelar-wasm-std-derive", - "cosmwasm-schema", + "axelar-wasm-std 0.1.0", + "axelar-wasm-std-derive 0.1.0", + "cosmwasm-schema 1.5.5", "cosmwasm-std", "cw-storage-plus 1.2.0", "error-stack", "flagset", "hex", - "rand", - "report", + "rand 0.8.5", + "report 0.1.0", "schemars", "serde", "serde_json", @@ -7664,6 +8450,17 @@ dependencies = [ "valuable", ] +[[package]] +name = "rpassword" +version = "7.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80472be3c897911d0137b2d2b9055faf6eeac5b14e324073d83bc17b191d7e3f" +dependencies = [ + "libc", + "rtoolbox", + "windows-sys 0.48.0", +] + [[package]] name = "rsa" version = "0.8.2" @@ -7685,14 +8482,24 @@ dependencies = [ "zeroize", ] +[[package]] +name = "rtoolbox" +version = "0.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c247d24e63230cdb56463ae328478bd5eac8b8faa8c69461a77e8e323afac90e" +dependencies = [ + "libc", + "windows-sys 0.48.0", +] + [[package]] name = "ruint" -version = "1.12.1" +version = "1.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f308135fef9fc398342da5472ce7c484529df23743fb7c734e0f3d472971e62" +checksum = "2c3cc4c2511671f327125da14133d0c5c5d137f006a1017a16f557bc85b16286" dependencies = [ "proptest", - "rand", + "rand 0.8.5", "ruint-macro", "serde", "valuable", @@ -7701,9 +8508,9 @@ dependencies = [ [[package]] name = "ruint-macro" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f86854cf50259291520509879a5c294c3c9a4c334e9ff65071c51e42ef1e2343" +checksum = "48fd7bd8a6377e15ad9d42a8ec25371b94ddc67abe7c8b9127bec79bebaaae18" [[package]] name = "rust-ini" @@ -7753,9 +8560,9 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.14" +version = "0.38.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "747c788e9ce8e92b12cd485c49ddf90723550b654b32508f979b71a7b1ecda4f" +checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" dependencies = [ "bitflags 2.5.0", "errno", @@ -7779,9 +8586,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.21.7" +version = "0.21.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd8d6c9f025a446bc4d18ad9632e69aec8f287aa84499ee335599fabd20c3fd8" +checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" dependencies = [ "log", "ring 0.17.8", @@ -7815,11 +8622,11 @@ dependencies = [ [[package]] name = "rustls-pemfile" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d3987094b1d07b653b7dfdc3f70ce9a1da9c51ac18c1b06b662e4f9a0e9f4b2" +checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" dependencies = [ - "base64 0.21.4", + "base64 0.21.7", ] [[package]] @@ -7838,22 +8645,6 @@ version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "976295e77ce332211c0d24d92c0e83e50f5c5f046d11082cea19f3df13a3562d" -[[package]] -name = "rustls-webpki" -version = "0.100.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f6a5fc258f1c1276dfe3016516945546e2d5383911efc0fc4f1cdc5df3a4ae3" -dependencies = [ - "ring", - "untrusted", -] - -[[package]] -name = "rustls-pki-types" -version = "1.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "976295e77ce332211c0d24d92c0e83e50f5c5f046d11082cea19f3df13a3562d" - [[package]] name = "rustls-webpki" version = "0.101.7" @@ -7866,9 +8657,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.14" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4" +checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" [[package]] name = "rusty-fork" @@ -7884,9 +8675,9 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.15" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741" +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" [[package]] name = "salsa20" @@ -7908,25 +8699,25 @@ dependencies = [ [[package]] name = "scale-info" -version = "2.9.0" +version = "2.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35c0a159d0c45c12b20c5a844feb1fe4bea86e28f17b92a5f0c42193634d3782" +checksum = "eca070c12893629e2cc820a9761bedf6ce1dcddc9852984d1dc734b8bd9bd024" dependencies = [ "cfg-if", "derive_more", - "parity-scale-codec 3.6.5", + "parity-scale-codec 3.6.12", "scale-info-derive", ] [[package]] name = "scale-info-derive" -version = "2.9.0" +version = "2.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "912e55f6d20e0e80d63733872b40e1227c0bce1e1ab81ba67d696339bfd7fd29" +checksum = "2d35494501194174bda522a32605929eefc9ecf7e0a326c26db1fdd85881eb62" dependencies = [ - "proc-macro-crate", - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro-crate 3.1.0", + "proc-macro2 1.0.85", + "quote 1.0.36", "syn 1.0.109", ] @@ -7941,9 +8732,9 @@ dependencies = [ [[package]] name = "schemars" -version = "0.8.15" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f7b0ce13155372a76ee2e1c5ffba1fe61ede73fbea5630d61eee6fac4929c0c" +checksum = "09c024468a378b7e36765cd36702b7a90cc3cba11654f6685c8f233408e89e92" dependencies = [ "dyn-clone", "either", @@ -7954,12 +8745,12 @@ dependencies = [ [[package]] name = "schemars_derive" -version = "0.8.15" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e85e2a16b12bdb763244c69ab79363d71db2b4b918a2def53f80b02e0574b13c" +checksum = "b1eee588578aff73f856ab961cd2f79e36bc45d7ded33a7562adba4667aecc0e" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.85", + "quote 1.0.36", "serde_derive_internals", "syn 2.0.66", ] @@ -7970,6 +8761,26 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" +[[package]] +name = "scroll" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04c565b551bafbef4157586fa379538366e4385d42082f255bfd96e4fe8519da" +dependencies = [ + "scroll_derive", +] + +[[package]] +name = "scroll_derive" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1db149f81d46d2deba7cd3c50772474707729550221e69588478ebf9ada425ae" +dependencies = [ + "proc-macro2 1.0.85", + "quote 1.0.36", + "syn 2.0.66", +] + [[package]] name = "scrypt" version = "0.10.0" @@ -8038,9 +8849,9 @@ dependencies = [ [[package]] name = "security-framework" -version = "2.9.2" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de" +checksum = "c627723fd09706bacdb5cf41499e95098555af3c3c29d014dc3c458ef6be11c0" dependencies = [ "bitflags 2.5.0", "core-foundation", @@ -8051,9 +8862,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.9.1" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a" +checksum = "317936bbbd05227752583946b9e66d7ce3b489f84e11a94a510b4437fef407d7" dependencies = [ "core-foundation-sys", "libc", @@ -8061,9 +8872,9 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.18" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0293b4b29daaf487284529cc2f5675b8e57c61f70167ba415a463651fd6a918" +checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" dependencies = [ "serde", ] @@ -8082,9 +8893,9 @@ checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" [[package]] name = "serde" -version = "1.0.188" +version = "1.0.203" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf9e0fcba69a370eed61bcf2b728575f726b50b55cba78064753d708ddc7549e" +checksum = "7253ab4de971e72fb7be983802300c30b5a7f0c2e56fab8abfc6a214307c0094" dependencies = [ "serde_derive", ] @@ -8139,13 +8950,13 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.188" +version = "1.0.203" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4eca7ac642d82aa35b60049a6eccb4be6be75e599bd2e9adb5f875a737654af2" +checksum = "500cbc0ebeb6f46627f50f3f5811ccf6bf00643be300b4c3eabc0ef55dc5b5ba" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2 1.0.85", + "quote 1.0.36", + "syn 2.0.66", ] [[package]] @@ -8154,16 +8965,16 @@ version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 1.0.109", + "proc-macro2 1.0.85", + "quote 1.0.36", + "syn 2.0.66", ] [[package]] name = "serde_json" -version = "1.0.107" +version = "1.0.117" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b420ce6e3d8bd882e9b243c6eed35dbc9a6110c9769e74b584e0d68d1f20c65" +checksum = "455182ea6142b14f93f4bc5320a2b31c1f266b66a4a5c858b013302a5d8cbfc3" dependencies = [ "indexmap 2.2.6", "itoa", @@ -8187,9 +8998,9 @@ version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2 1.0.85", + "quote 1.0.36", + "syn 2.0.66", ] [[package]] @@ -8231,11 +9042,11 @@ dependencies = [ [[package]] name = "serde_with" -version = "3.3.0" +version = "3.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ca3b16a3d82c4088f343b7480a93550b3eabe1a358569c2dfe38bbcead07237" +checksum = "0ad483d2ab0149d5a5ebcd9972a3852711e0153d863bf5a5d0391d28883c4a20" dependencies = [ - "base64 0.21.4", + "base64 0.22.1", "chrono", "hex", "indexmap 1.9.3", @@ -8243,7 +9054,7 @@ dependencies = [ "serde", "serde_derive", "serde_json", - "serde_with_macros 3.3.0", + "serde_with_macros 3.8.1", "time", ] @@ -8253,22 +9064,22 @@ version = "2.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "881b6f881b17d13214e5d494c939ebab463d01264ce1811e9d4ac3a882e7695f" dependencies = [ - "darling 0.20.3", - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "darling 0.20.9", + "proc-macro2 1.0.85", + "quote 1.0.36", + "syn 2.0.66", ] [[package]] name = "serde_with_macros" -version = "3.3.0" +version = "3.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e6be15c453eb305019bfa438b1593c731f36a289a7853f7707ee29e870b3b3c" +checksum = "65569b702f41443e8bc8bbb1c5779bd0450bbe723b56198980e80ec45780bce2" dependencies = [ - "darling 0.20.3", - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "darling 0.20.9", + "proc-macro2 1.0.85", + "quote 1.0.36", + "syn 2.0.66", ] [[package]] @@ -8283,21 +9094,40 @@ dependencies = [ "yaml-rust", ] +[[package]] +name = "service-registry" +version = "0.1.0" +source = "git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f#c0904e1c72c99a174a93b5f6c18b30f52d20b71f" +dependencies = [ + "axelar-wasm-std 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "axelar-wasm-std-derive 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "connection-router", + "cosmwasm-schema 1.5.5", + "cosmwasm-std", + "cosmwasm-storage", + "cw-storage-plus 1.2.0", + "error-stack", + "report 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "schemars", + "serde", + "thiserror", +] + [[package]] name = "service-registry" version = "0.3.0" dependencies = [ - "axelar-wasm-std", - "axelar-wasm-std-derive", + "axelar-wasm-std 0.1.0", + "axelar-wasm-std-derive 0.1.0", "coordinator", - "cosmwasm-schema", + "cosmwasm-schema 1.5.5", "cosmwasm-std", "cw-multi-test", "cw-storage-plus 1.2.0", - "cw2 1.1.0", + "cw2 1.1.2", "error-stack", "integration-tests", - "report", + "report 0.1.0", "router-api", "schemars", "serde", @@ -8512,13 +9342,745 @@ dependencies = [ ] [[package]] -name = "socket2" -version = "0.5.4" +name = "socket2" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "solana-account-decoder" +version = "1.18.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b94ceb26c7d19530cb1bb49bf0f817647cb5fee691dae6779e19d33ac1d4fda1" +dependencies = [ + "Inflector", + "base64 0.21.7", + "bincode", + "bs58 0.4.0", + "bv", + "lazy_static", + "serde", + "serde_derive", + "serde_json", + "solana-config-program", + "solana-sdk", + "spl-token", + "spl-token-2022", + "spl-token-group-interface", + "spl-token-metadata-interface", + "thiserror", + "zstd 0.11.2+zstd.1.5.2", +] + +[[package]] +name = "solana-clap-utils" +version = "1.18.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32063b76137e13fba2f93fdf67f999d84ac587af962b48cb4115f272037b2fae" +dependencies = [ + "chrono", + "clap 2.34.0", + "rpassword", + "solana-remote-wallet", + "solana-sdk", + "thiserror", + "tiny-bip39", + "uriparse", + "url", +] + +[[package]] +name = "solana-client" +version = "1.18.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31f6eaf198c544d4f448e6a86a51f9af8b328f041a490a007164a75194edf341" +dependencies = [ + "async-trait", + "bincode", + "dashmap", + "futures", + "futures-util", + "indexmap 2.2.6", + "indicatif", + "log", + "quinn", + "rayon", + "solana-connection-cache", + "solana-measure", + "solana-metrics", + "solana-pubsub-client", + "solana-quic-client", + "solana-rpc-client", + "solana-rpc-client-api", + "solana-rpc-client-nonce-utils", + "solana-sdk", + "solana-streamer", + "solana-thin-client", + "solana-tpu-client", + "solana-udp-client", + "thiserror", + "tokio", +] + +[[package]] +name = "solana-config-program" +version = "1.18.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "378259800dc9dad34828d8be4ce0de71146bac1cbbd310f8901f6f19d92c5ea3" +dependencies = [ + "bincode", + "chrono", + "serde", + "serde_derive", + "solana-program-runtime", + "solana-sdk", +] + +[[package]] +name = "solana-connection-cache" +version = "1.18.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58b04571089f55754f5a09493ae0bcf8d8d5c8d9cd05be3e77c502f6b68c1a3b" +dependencies = [ + "async-trait", + "bincode", + "crossbeam-channel", + "futures-util", + "indexmap 2.2.6", + "log", + "rand 0.8.5", + "rayon", + "rcgen 0.10.0", + "solana-measure", + "solana-metrics", + "solana-sdk", + "thiserror", + "tokio", +] + +[[package]] +name = "solana-frozen-abi" +version = "1.18.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "780402262644f9efe9ac7d885812d245007fe65fd56a3dfed83ed30d61b44c74" +dependencies = [ + "block-buffer 0.10.4", + "bs58 0.4.0", + "bv", + "either", + "generic-array", + "im", + "lazy_static", + "log", + "memmap2", + "rustc_version", + "serde", + "serde_bytes", + "serde_derive", + "sha2 0.10.8", + "solana-frozen-abi-macro", + "subtle", + "thiserror", +] + +[[package]] +name = "solana-frozen-abi-macro" +version = "1.18.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df836de37aba77234c7afa1d857dc450fb9983572e4c6f595c84cdda65a63792" +dependencies = [ + "proc-macro2 1.0.85", + "quote 1.0.36", + "rustc_version", + "syn 2.0.66", +] + +[[package]] +name = "solana-logger" +version = "1.18.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9906be6edd0e1b579510736c153dbc51e5968808098d1b1f8c89dbea960aba58" +dependencies = [ + "env_logger", + "lazy_static", + "log", +] + +[[package]] +name = "solana-measure" +version = "1.18.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dc77e7f99fa5e845437ac9a593cd4bd67b5f9e4ba4a9578355eef25d3e839e9" +dependencies = [ + "log", + "solana-sdk", +] + +[[package]] +name = "solana-metrics" +version = "1.18.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0a9f68887ac31f84ef69365bdc2d7ca6bf19d50a9c6ee10806adb033e24e318" +dependencies = [ + "crossbeam-channel", + "gethostname", + "lazy_static", + "log", + "reqwest 0.11.27", + "solana-sdk", + "thiserror", +] + +[[package]] +name = "solana-net-utils" +version = "1.18.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ba07cceff31b644df6cd4acc909df077721fa047b624b9fa906d56bcc67435a" +dependencies = [ + "bincode", + "clap 3.2.25", + "crossbeam-channel", + "log", + "nix", + "rand 0.8.5", + "serde", + "serde_derive", + "socket2 0.5.7", + "solana-logger", + "solana-sdk", + "solana-version", + "tokio", + "url", +] + +[[package]] +name = "solana-perf" +version = "1.18.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7fa87b3344f96afe1395b5bb822db2ad03cdc2dbe8338636d57c58102a520b" +dependencies = [ + "ahash 0.8.11", + "bincode", + "bv", + "caps", + "curve25519-dalek 3.2.1", + "dlopen2", + "fnv", + "lazy_static", + "libc", + "log", + "nix", + "rand 0.8.5", + "rayon", + "rustc_version", + "serde", + "solana-frozen-abi", + "solana-frozen-abi-macro", + "solana-metrics", + "solana-rayon-threadlimit", + "solana-sdk", + "solana-vote-program", +] + +[[package]] +name = "solana-program" +version = "1.18.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48ecc7af7594674687260a4d7bcfb0588cefdbe9d0f6c4e9f3140999107566c4" +dependencies = [ + "ark-bn254", + "ark-ec", + "ark-ff", + "ark-serialize", + "base64 0.21.7", + "bincode", + "bitflags 2.5.0", + "blake3", + "borsh 0.10.3", + "borsh 0.9.3", + "borsh 1.5.1", + "bs58 0.4.0", + "bv", + "bytemuck", + "cc", + "console_error_panic_hook", + "console_log", + "curve25519-dalek 3.2.1", + "getrandom 0.2.15", + "itertools 0.10.5", + "js-sys", + "lazy_static", + "libc", + "libsecp256k1 0.6.0", + "light-poseidon", + "log", + "memoffset 0.9.1", + "num-bigint 0.4.5", + "num-derive 0.4.2", + "num-traits", + "parking_lot", + "rand 0.8.5", + "rustc_version", + "rustversion", + "serde", + "serde_bytes", + "serde_derive", + "serde_json", + "sha2 0.10.8", + "sha3 0.10.8", + "solana-frozen-abi", + "solana-frozen-abi-macro", + "solana-sdk-macro", + "thiserror", + "tiny-bip39", + "wasm-bindgen", + "zeroize", +] + +[[package]] +name = "solana-program-runtime" +version = "1.18.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ef9218f50470228ebca12bb147650ca7052678aad915a4e19687ee215f8d947" +dependencies = [ + "base64 0.21.7", + "bincode", + "eager", + "enum-iterator", + "itertools 0.10.5", + "libc", + "log", + "num-derive 0.4.2", + "num-traits", + "percentage", + "rand 0.8.5", + "rustc_version", + "serde", + "solana-frozen-abi", + "solana-frozen-abi-macro", + "solana-measure", + "solana-metrics", + "solana-sdk", + "solana_rbpf", + "thiserror", +] + +[[package]] +name = "solana-pubsub-client" +version = "1.18.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60325aaab2bcd99ca51e1ff5a4673027a03591353a944151690b38d5dadc2c0f" +dependencies = [ + "crossbeam-channel", + "futures-util", + "log", + "reqwest 0.11.27", + "semver", + "serde", + "serde_derive", + "serde_json", + "solana-account-decoder", + "solana-rpc-client-api", + "solana-sdk", + "thiserror", + "tokio", + "tokio-stream", + "tokio-tungstenite", + "tungstenite", + "url", +] + +[[package]] +name = "solana-quic-client" +version = "1.18.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d979690c6c392ffdb40a91e241a08ec3942eb217bddb0403b6174de0173ab61e" +dependencies = [ + "async-mutex", + "async-trait", + "futures", + "itertools 0.10.5", + "lazy_static", + "log", + "quinn", + "quinn-proto", + "rcgen 0.10.0", + "rustls 0.21.12", + "solana-connection-cache", + "solana-measure", + "solana-metrics", + "solana-net-utils", + "solana-rpc-client-api", + "solana-sdk", + "solana-streamer", + "thiserror", + "tokio", +] + +[[package]] +name = "solana-rayon-threadlimit" +version = "1.18.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6902079fb9d0bd4c455b97f5e48e2412d98e0e1facf635ec6fc6b783c0f3e2af" +dependencies = [ + "lazy_static", + "num_cpus", +] + +[[package]] +name = "solana-remote-wallet" +version = "1.18.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af88bad970c0dd63e98e7cc4c3c16a58acf32d4255aee79f611ea375592028ec" +dependencies = [ + "console", + "dialoguer", + "log", + "num-derive 0.4.2", + "num-traits", + "parking_lot", + "qstring", + "semver", + "solana-sdk", + "thiserror", + "uriparse", +] + +[[package]] +name = "solana-rpc-client" +version = "1.18.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1adab0dcdc851fc7bc6ca8c6926d9f56ed3982f1e4fabd67d362647b57143d3" +dependencies = [ + "async-trait", + "base64 0.21.7", + "bincode", + "bs58 0.4.0", + "indicatif", + "log", + "reqwest 0.11.27", + "semver", + "serde", + "serde_derive", + "serde_json", + "solana-account-decoder", + "solana-rpc-client-api", + "solana-sdk", + "solana-transaction-status", + "solana-version", + "solana-vote-program", + "tokio", +] + +[[package]] +name = "solana-rpc-client-api" +version = "1.18.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d6764712822bbc0259bbb5413377798a11462221863d000082f39968ce5ad03" +dependencies = [ + "base64 0.21.7", + "bs58 0.4.0", + "jsonrpc-core", + "reqwest 0.11.27", + "semver", + "serde", + "serde_derive", + "serde_json", + "solana-account-decoder", + "solana-sdk", + "solana-transaction-status", + "solana-version", + "spl-token-2022", + "thiserror", +] + +[[package]] +name = "solana-rpc-client-nonce-utils" +version = "1.18.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49489fe59d308c10a2b3e3ecd3bee1107b9b67a325c99ffd278ba0870a5619cd" +dependencies = [ + "clap 2.34.0", + "solana-clap-utils", + "solana-rpc-client", + "solana-sdk", + "thiserror", +] + +[[package]] +name = "solana-sdk" +version = "1.18.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73bb113fa17e0607343afdc795c2c5230981c5b51c99b2c54fba91755879d65b" +dependencies = [ + "assert_matches", + "base64 0.21.7", + "bincode", + "bitflags 2.5.0", + "borsh 1.5.1", + "bs58 0.4.0", + "bytemuck", + "byteorder", + "chrono", + "derivation-path", + "digest 0.10.7", + "ed25519-dalek 1.0.1", + "ed25519-dalek-bip32", + "generic-array", + "hmac 0.12.1", + "itertools 0.10.5", + "js-sys", + "lazy_static", + "libsecp256k1 0.6.0", + "log", + "memmap2", + "num-derive 0.4.2", + "num-traits", + "num_enum 0.7.2", + "pbkdf2 0.11.0", + "qstring", + "qualifier_attr", + "rand 0.7.3", + "rand 0.8.5", + "rustc_version", + "rustversion", + "serde", + "serde_bytes", + "serde_derive", + "serde_json", + "serde_with 2.3.3", + "sha2 0.10.8", + "sha3 0.10.8", + "siphasher", + "solana-frozen-abi", + "solana-frozen-abi-macro", + "solana-logger", + "solana-program", + "solana-sdk-macro", + "thiserror", + "uriparse", + "wasm-bindgen", +] + +[[package]] +name = "solana-sdk-macro" +version = "1.18.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fcdb3a94e2f04d856d2fba6feb4f6887a1da21a3ee0b64b69c08d15dc22d46c" +dependencies = [ + "bs58 0.4.0", + "proc-macro2 1.0.85", + "quote 1.0.36", + "rustversion", + "syn 2.0.66", +] + +[[package]] +name = "solana-security-txt" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "468aa43b7edb1f9b7b7b686d5c3aeb6630dc1708e86e31343499dd5c4d775183" + +[[package]] +name = "solana-streamer" +version = "1.18.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0e6132c9eefb372202e69e654e8c2a30b4c06635343dd6474467b9cca4b9dd9" +dependencies = [ + "async-channel", + "bytes", + "crossbeam-channel", + "futures-util", + "histogram", + "indexmap 2.2.6", + "itertools 0.10.5", + "libc", + "log", + "nix", + "pem", + "percentage", + "pkcs8 0.8.0", + "quinn", + "quinn-proto", + "rand 0.8.5", + "rcgen 0.10.0", + "rustls 0.21.12", + "smallvec", + "solana-metrics", + "solana-perf", + "solana-sdk", + "thiserror", + "tokio", + "x509-parser", +] + +[[package]] +name = "solana-thin-client" +version = "1.18.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca1c3ed492f61914aaa8074cf7a07f93bfd8d9adbf9846939e589b7b7c70fe39" +dependencies = [ + "bincode", + "log", + "rayon", + "solana-connection-cache", + "solana-rpc-client", + "solana-rpc-client-api", + "solana-sdk", +] + +[[package]] +name = "solana-tpu-client" +version = "1.18.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3fbfce5d27608f4853dcb0c0d964f59420710a7a4486409e7583717c610c3cf" +dependencies = [ + "async-trait", + "bincode", + "futures-util", + "indexmap 2.2.6", + "indicatif", + "log", + "rayon", + "solana-connection-cache", + "solana-measure", + "solana-metrics", + "solana-pubsub-client", + "solana-rpc-client", + "solana-rpc-client-api", + "solana-sdk", + "thiserror", + "tokio", +] + +[[package]] +name = "solana-transaction-status" +version = "1.18.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6adbd8f3fccddeae87278a105dcf8a8792f8816c0f4fb5f7ae8f307af279ac49" +dependencies = [ + "Inflector", + "base64 0.21.7", + "bincode", + "borsh 0.10.3", + "bs58 0.4.0", + "lazy_static", + "log", + "serde", + "serde_derive", + "serde_json", + "solana-account-decoder", + "solana-sdk", + "spl-associated-token-account", + "spl-memo", + "spl-token", + "spl-token-2022", + "thiserror", +] + +[[package]] +name = "solana-udp-client" +version = "1.18.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b90f8ebd26cac3cd563bf839ff8511f27698f2d220e58f7538b5d6d80d8970ed" +dependencies = [ + "async-trait", + "solana-connection-cache", + "solana-net-utils", + "solana-sdk", + "solana-streamer", + "thiserror", + "tokio", +] + +[[package]] +name = "solana-version" +version = "1.18.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac8714cf9f6caefc403e19770ad73ed2e4c866b7201e31dd17a9e06b6a693a57" +dependencies = [ + "log", + "rustc_version", + "semver", + "serde", + "serde_derive", + "solana-frozen-abi", + "solana-frozen-abi-macro", + "solana-sdk", +] + +[[package]] +name = "solana-vote-program" +version = "1.18.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5de2428939c6e279901d4357bf02c809739e5b97164e8620e09a9e0b55c2327" +dependencies = [ + "bincode", + "log", + "num-derive 0.4.2", + "num-traits", + "rustc_version", + "serde", + "serde_derive", + "solana-frozen-abi", + "solana-frozen-abi-macro", + "solana-metrics", + "solana-program", + "solana-program-runtime", + "solana-sdk", + "thiserror", +] + +[[package]] +name = "solana-zk-token-sdk" +version = "1.18.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8dad1753ec3b189879c8756ac35471467116dfc93d7aeb68cfd28f22a02c850d" +dependencies = [ + "aes-gcm-siv", + "base64 0.21.7", + "bincode", + "bytemuck", + "byteorder", + "curve25519-dalek 3.2.1", + "getrandom 0.1.16", + "itertools 0.10.5", + "lazy_static", + "merlin", + "num-derive 0.4.2", + "num-traits", + "rand 0.7.3", + "serde", + "serde_json", + "sha3 0.9.1", + "solana-program", + "solana-sdk", + "subtle", + "thiserror", + "zeroize", +] + +[[package]] +name = "solana_rbpf" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4031e820eb552adee9295814c0ced9e5cf38ddf1e8b7d566d6de8e2538ea989e" +checksum = "3d457cc2ba742c120492a64b7fa60e22c575e891f6b55039f4d736568fb112a3" dependencies = [ + "byteorder", + "combine", + "goblin", + "hash32", "libc", - "windows-sys 0.48.0", + "log", + "rand 0.8.5", + "rustc-demangle", + "scroll", + "thiserror", + "winapi", ] [[package]] @@ -8574,7 +10136,23 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" dependencies = [ "base64ct", - "der 0.7.8", + "der 0.7.9", +] + +[[package]] +name = "spl-associated-token-account" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "992d9c64c2564cc8f63a4b508bf3ebcdf2254b0429b13cd1d31adb6162432a5f" +dependencies = [ + "assert_matches", + "borsh 0.10.3", + "num-derive 0.4.2", + "num-traits", + "solana-program", + "spl-token", + "spl-token-2022", + "thiserror", ] [[package]] @@ -8826,7 +10404,7 @@ version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "290d54ea6f91c969195bdbcd7442c8c2a2ba87da8bf60a7ee86a235d4bc1e125" dependencies = [ - "strum_macros 0.25.2", + "strum_macros 0.25.3", ] [[package]] @@ -8835,7 +10413,7 @@ version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5d8cec3501a5194c432b2b7976db6b7d10ec95c253208b45f83f7136aa985e29" dependencies = [ - "strum_macros 0.26.2", + "strum_macros 0.26.4", ] [[package]] @@ -8845,8 +10423,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59" dependencies = [ "heck 0.4.1", - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.85", + "quote 1.0.36", "rustversion", "syn 1.0.109", ] @@ -8856,26 +10434,25 @@ name = "strum_macros" version = "0.25.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "23dc1fa9ac9c169a78ba62f0b841814b7abae11bdd047b9c58f893439e309ea0" -checksum = "ad8d03b598d3d0fff69bf533ee3ef19b8eeb342729596df84bcc7e1f96ec4059" dependencies = [ "heck 0.4.1", - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.85", + "quote 1.0.36", "rustversion", - "syn 2.0.37", + "syn 2.0.66", ] [[package]] name = "strum_macros" -version = "0.26.2" +version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6cf59daf282c0a494ba14fd21610a0325f9f90ec9d1231dea26bcb1d696c946" +checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" dependencies = [ - "heck 0.4.1", - "proc-macro2 1.0.67", - "quote 1.0.33", + "heck 0.5.0", + "proc-macro2 1.0.85", + "quote 1.0.36", "rustversion", - "syn 2.0.37", + "syn 2.0.66", ] [[package]] @@ -9016,10 +10593,10 @@ version = "0.7.0" source = "git+https://github.com/mystenlabs/sui?tag=mainnet-v1.14.2#299cbeafbb6aa5601e08f00ac24bd647c61a63e2" dependencies = [ "msim-macros", - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.85", + "quote 1.0.36", "sui-enum-compat-util", - "syn 2.0.37", + "syn 2.0.66", "workspace-hack", ] @@ -9028,7 +10605,7 @@ name = "sui-protocol-config" version = "0.1.0" source = "git+https://github.com/mystenlabs/sui?tag=mainnet-v1.14.2#299cbeafbb6aa5601e08f00ac24bd647c61a63e2" dependencies = [ - "clap", + "clap 4.5.7", "insta", "schemars", "serde", @@ -9043,8 +10620,8 @@ name = "sui-protocol-config-macros" version = "0.1.0" source = "git+https://github.com/mystenlabs/sui?tag=mainnet-v1.14.2#299cbeafbb6aa5601e08f00ac24bd647c61a63e2" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.85", + "quote 1.0.36", "syn 1.0.109", "workspace-hack", ] @@ -9133,7 +10710,7 @@ dependencies = [ "fs2", "hex", "once_cell", - "reqwest 0.11.25", + "reqwest 0.11.27", "semver", "serde", "serde_json", @@ -9160,32 +10737,44 @@ version = "1.0.109" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.85", + "quote 1.0.36", "unicode-ident", ] [[package]] name = "syn" -version = "2.0.37" +version = "2.0.66" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7303ef2c05cd654186cb250d29049a24840ca25d2747c25c0381c8d9e2f582e8" +checksum = "c42f3f41a2de00b01c0aaad383c5a45241efc8b2d1eda5661812fda5f3cdcff5" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.85", + "quote 1.0.36", "unicode-ident", ] [[package]] name = "syn-solidity" -version = "0.7.4" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8db114c44cf843a8bacd37a146e37987a0b823a0e8bc4fdc610c9c72ab397a5" +checksum = "8d71e19bca02c807c9faa67b5a47673ff231b6e7449b251695188522f1dc44b2" dependencies = [ "paste", - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2 1.0.85", + "quote 1.0.36", + "syn 2.0.66", +] + +[[package]] +name = "syn_derive" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1329189c02ff984e9736652b1631330da25eaa6bc639089ed4915d25446cbe7b" +dependencies = [ + "proc-macro-error", + "proc-macro2 1.0.85", + "quote 1.0.36", + "syn 2.0.66", ] [[package]] @@ -9206,21 +10795,21 @@ version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.85", + "quote 1.0.36", "syn 1.0.109", "unicode-xid 0.2.4", ] [[package]] -name = "system-configuration" -version = "0.5.1" +name = "synstructure" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" dependencies = [ - "bitflags 1.3.2", - "core-foundation", - "system-configuration-sys 0.5.0", + "proc-macro2 1.0.85", + "quote 1.0.36", + "syn 2.0.66", ] [[package]] @@ -9231,17 +10820,7 @@ checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" dependencies = [ "bitflags 1.3.2", "core-foundation", - "system-configuration-sys 0.6.0", -] - -[[package]] -name = "system-configuration-sys" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" -dependencies = [ - "core-foundation-sys", - "libc", + "system-configuration-sys", ] [[package]] @@ -9273,8 +10852,8 @@ checksum = "99f688a08b54f4f02f0a3c382aefdb7884d3d69609f785bd253dc033243e3fe4" dependencies = [ "heck 0.4.1", "proc-macro-error", - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.85", + "quote 1.0.36", "syn 1.0.109", ] @@ -9291,8 +10870,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" dependencies = [ "cfg-if", - "fastrand 2.0.0", - "redox_syscall 0.3.5", + "fastrand 2.1.0", "rustix", "windows-sys 0.52.0", ] @@ -9413,9 +10991,9 @@ dependencies = [ "bytes", "flex-error", "futures", - "getrandom", - "http 0.2.9", - "hyper 0.14.27", + "getrandom 0.2.15", + "http 0.2.12", + "hyper 0.14.29", "hyper-proxy", "hyper-rustls 0.22.1", "peg", @@ -9481,22 +11059,22 @@ checksum = "23d434d3f8967a09480fb04132ebe0a3e088c173e6d0ee7897abbdf4eab0f8b9" [[package]] name = "thiserror" -version = "1.0.48" +version = "1.0.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d6d7a740b8a666a7e828dd00da9c0dc290dff53154ea77ac109281de90589b7" +checksum = "c546c80d6be4bc6a00c0f01730c08df82eaa7a7a61f11d656526506112cc1709" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.48" +version = "1.0.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49922ecae66cc8a249b77e68d1d0623c1b2c514f0060c27cdc68bd62a1219d35" +checksum = "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2 1.0.85", + "quote 1.0.36", + "syn 2.0.66", ] [[package]] @@ -9625,9 +11203,9 @@ dependencies = [ [[package]] name = "tokio" -version = "1.32.0" +version = "1.38.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17ed6077ed6cd6c74735e21f37eb16dc3935f96878b1fe961074089cc80893f9" +checksum = "ba4f4a02a7a80d6f274636f0aa95c7e383b912d41fe721a31f29e29698585a4a" dependencies = [ "backtrace", "bytes", @@ -9637,8 +11215,8 @@ dependencies = [ "parking_lot", "pin-project-lite", "signal-hook-registry", - "socket2 0.5.4", - "tokio-macros 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "socket2 0.5.7", + "tokio-macros 2.3.0", "windows-sys 0.48.0", ] @@ -9657,19 +11235,20 @@ name = "tokio-macros" version = "2.1.0" source = "git+https://github.com/mystenmark/tokio-madsim-fork.git?rev=e4693500118d5e79ce098ee6dfc2c48f3ef19e45#e4693500118d5e79ce098ee6dfc2c48f3ef19e45" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2 1.0.85", + "quote 1.0.36", + "syn 2.0.66", ] [[package]] name = "tokio-macros" -version = "2.1.0" -source = "git+https://github.com/mystenmark/tokio-madsim-fork.git?rev=e4693500118d5e79ce098ee6dfc2c48f3ef19e45#e4693500118d5e79ce098ee6dfc2c48f3ef19e45" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f5ae998a069d4b5aba8ee9dad856af7d520c3699e6159b185c2acd48155d39a" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2 1.0.85", + "quote 1.0.36", + "syn 2.0.66", ] [[package]] @@ -9699,7 +11278,7 @@ version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" dependencies = [ - "rustls 0.21.7", + "rustls 0.21.12", "tokio", ] @@ -9712,7 +11291,7 @@ dependencies = [ "futures-core", "pin-project-lite", "tokio", - "tokio-util 0.7.9", + "tokio-util 0.7.11", ] [[package]] @@ -9723,7 +11302,7 @@ checksum = "212d5dcb2a1ce06d81107c3d0ffa3121fe974b73f068c8282cb1c32328113b6c" dependencies = [ "futures-util", "log", - "rustls 0.21.7", + "rustls 0.21.12", "tokio", "tokio-rustls 0.24.1", "tungstenite", @@ -9749,9 +11328,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.9" +version = "0.7.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d68074620f57a0b21594d9735eb2e98ab38b17f80d3fcb189fca266771ca60d" +checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1" dependencies = [ "bytes", "futures-core", @@ -9771,14 +11350,14 @@ dependencies = [ [[package]] name = "toml" -version = "0.8.13" +version = "0.8.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4e43f8cc456c9704c851ae29c67e17ef65d2c30017c17a9765b89c382dc8bba" +checksum = "6f49eb2ab21d2f26bd6db7bf383edc527a7ebaee412d17af4d40fdccd442f335" dependencies = [ "serde", "serde_spanned", "toml_datetime", - "toml_edit", + "toml_edit 0.22.14", ] [[package]] @@ -9792,15 +11371,26 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.22.13" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" +dependencies = [ + "indexmap 2.2.6", + "toml_datetime", + "winnow 0.5.40", +] + +[[package]] +name = "toml_edit" +version = "0.22.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c127785850e8c20836d49732ae6abfa47616e60bf9d9f57c43c250361a9db96c" +checksum = "f21c7aaf97f1bd9ca9d4f9e73b0a6c74bd5afef56f2bc931943a6e1c37e04e38" dependencies = [ - "indexmap 2.0.0", + "indexmap 2.2.6", "serde", "serde_spanned", "toml_datetime", - "winnow", + "winnow 0.6.13", ] [[package]] @@ -9811,14 +11401,14 @@ checksum = "3082666a3a6433f7f511c7192923fa1fe07c69332d3c6a2e6bb040b569199d5a" dependencies = [ "async-trait", "axum 0.6.20", - "base64 0.21.4", + "base64 0.21.7", "bytes", "futures-core", "futures-util", - "h2 0.3.24", - "http 0.2.9", - "http-body 0.4.5", - "hyper 0.14.27", + "h2 0.3.26", + "http 0.2.12", + "http-body 0.4.6", + "hyper 0.14.29", "hyper-timeout", "percent-encoding", "pin-project", @@ -9842,16 +11432,16 @@ dependencies = [ "axum 0.6.20", "base64 0.21.7", "bytes", - "h2 0.3.24", - "http 0.2.9", - "http-body 0.4.5", - "hyper 0.14.27", + "h2 0.3.26", + "http 0.2.12", + "http-body 0.4.6", + "hyper 0.14.29", "hyper-timeout", "percent-encoding", "pin-project", "prost 0.12.6", - "rustls 0.21.7", - "rustls-pemfile 1.0.3", + "rustls 0.21.12", + "rustls-pemfile 1.0.4", "tokio", "tokio-rustls 0.24.1", "tokio-stream", @@ -9868,7 +11458,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5bf5e9b9c0f7e0a7c027dcfaba7b2c60816c7049171f679d99ee2ff65d0de8c4" dependencies = [ "prettyplease 0.1.25", - "proc-macro2 1.0.67", + "proc-macro2 1.0.85", "prost-build", "quote 1.0.36", "syn 1.0.109", @@ -9902,7 +11492,7 @@ dependencies = [ "rand 0.8.5", "slab", "tokio", - "tokio-util 0.7.9", + "tokio-util 0.7.11", "tower-layer", "tower-service", "tracing", @@ -9930,7 +11520,7 @@ dependencies = [ "percent-encoding", "pin-project-lite", "tokio", - "tokio-util 0.7.9", + "tokio-util 0.7.11", "tower", "tower-layer", "tower-service", @@ -9968,9 +11558,9 @@ version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2 1.0.85", + "quote 1.0.36", + "syn 2.0.66", ] [[package]] @@ -10041,8 +11631,8 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b79e2e9c9ab44c6d7c20d5976961b47e8f49ac199154daa514b77cd1ab536625" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.85", + "quote 1.0.36", "syn 1.0.109", ] @@ -10070,12 +11660,13 @@ dependencies = [ "http 0.2.12", "httparse", "log", - "rand", - "rustls 0.21.7", + "rand 0.8.5", + "rustls 0.21.12", "sha1", "thiserror", "url", "utf-8", + "webpki-roots 0.24.0", ] [[package]] @@ -10093,9 +11684,9 @@ version = "0.18.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1f718dfaf347dcb5b983bfc87608144b0bad87970aebcbea5ce44d2a30c08e63" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2 1.0.85", + "quote 1.0.36", + "syn 2.0.66", ] [[package]] @@ -10165,12 +11756,6 @@ dependencies = [ "version_check", ] -[[package]] -name = "unicode-bidi" -version = "0.3.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" - [[package]] name = "unicode-ident" version = "1.0.12" @@ -10269,9 +11854,9 @@ dependencies = [ [[package]] name = "url" -version = "2.4.1" +version = "2.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "143b538f18257fac9cad154828a57c6bf5157e1aa604d4816b5995bf6de87ae5" +checksum = "f7c25da092f0a868cdf09e8674cd3b7ef3a7d92a24253e663a2fb85e2496de56" dependencies = [ "form_urlencoded", "idna", @@ -10308,7 +11893,7 @@ version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" dependencies = [ - "getrandom", + "getrandom 0.2.15", "serde", ] @@ -10318,8 +11903,8 @@ version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a183cf7feeba97b4dd1c0d46788634f6221d87fa961b305bed08c851829efcc0" dependencies = [ - "getrandom", - "rand", + "getrandom 0.2.15", + "rand 0.8.5", ] [[package]] @@ -10337,8 +11922,8 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d44690c645190cfce32f91a1582281654b2338c6073fa250b0949fd25c55b32" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2 1.0.85", + "quote 1.0.36", "syn 1.0.109", ] @@ -10386,27 +11971,51 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" +[[package]] +name = "voting-verifier" +version = "0.1.0" +source = "git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f#c0904e1c72c99a174a93b5f6c18b30f52d20b71f" +dependencies = [ + "axelar-wasm-std 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "axelar-wasm-std-derive 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "connection-router", + "cosmwasm-schema 1.5.5", + "cosmwasm-std", + "cosmwasm-storage", + "cw-storage-plus 1.2.0", + "either", + "error-stack", + "report 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "rewards 0.1.0", + "schemars", + "serde", + "serde_json", + "service-registry 0.1.0", + "sha3 0.10.8", + "thiserror", +] + [[package]] name = "voting-verifier" version = "0.4.0" dependencies = [ - "axelar-wasm-std", - "axelar-wasm-std-derive", + "axelar-wasm-std 0.1.0", + "axelar-wasm-std-derive 0.1.0", "client", - "cosmwasm-schema", + "cosmwasm-schema 1.5.5", "cosmwasm-std", "cw-multi-test", "cw-storage-plus 1.2.0", - "cw2 1.1.0", + "cw2 1.1.2", "error-stack", "integration-tests", - "multisig", - "rand", - "report", - "rewards", + "multisig 0.3.0", + "rand 0.8.5", + "report 0.1.0", + "rewards 0.3.0", "router-api", "serde_json", - "service-registry", + "service-registry 0.3.0", "sha3 0.10.8", "thiserror", ] @@ -10476,9 +12085,9 @@ dependencies = [ "bumpalo", "log", "once_cell", - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2 1.0.85", + "quote 1.0.36", + "syn 2.0.66", "wasm-bindgen-shared", ] @@ -10510,9 +12119,9 @@ version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2 1.0.85", + "quote 1.0.36", + "syn 2.0.66", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -10585,7 +12194,8 @@ version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a44ab49fad634e88f55bf8f9bb3abd2f27d7204172a112c7c9987e01c1c94ea9" dependencies = [ - "wasm-bindgen", + "redox_syscall 0.4.1", + "wasite", "web-sys", ] @@ -10777,9 +12387,17 @@ checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0" [[package]] name = "winnow" version = "0.5.40" -version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3c52e9c97a68071b23e836c9380edae937f17b9c4667bd021973efc689f618d" +checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" +dependencies = [ + "memchr", +] + +[[package]] +name = "winnow" +version = "0.6.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59b5e5f6c299a3c7890b876a2a587f3115162487e704907d9b6cd29473052ba1" dependencies = [ "memchr", ] @@ -10898,11 +12516,76 @@ dependencies = [ "time", ] +[[package]] +name = "yoke" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c5b1314b079b0930c31e3af543d8ee1757b1951ae1e1565ec704403a7240ca5" +dependencies = [ + "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28cc31741b18cb6f1d5ff12f5b7523e3d6eb0852bbbad19d73905511d9849b95" +dependencies = [ + "proc-macro2 1.0.85", + "quote 1.0.36", + "syn 2.0.66", + "synstructure 0.13.1", +] + +[[package]] +name = "zerocopy" +version = "0.7.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae87e3fcd617500e5d106f0380cf7b77f3c6092aae37191433159dda23cfb087" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15e934569e47891f7d9411f1a451d947a60e000ab3bd24fbb970f000387d1b3b" +dependencies = [ + "proc-macro2 1.0.85", + "quote 1.0.36", + "syn 2.0.66", +] + +[[package]] +name = "zerofrom" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91ec111ce797d0e0784a1116d0ddcdbea84322cd79e5d5ad173daeba4f93ab55" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ea7b4a3637ea8669cedf0f1fd5c286a17f3de97b8dd5a70a6c167a1730e63a5" +dependencies = [ + "proc-macro2 1.0.85", + "quote 1.0.36", + "syn 2.0.66", + "synstructure 0.13.1", +] + [[package]] name = "zeroize" -version = "1.6.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" dependencies = [ "zeroize_derive", ] @@ -10913,9 +12596,31 @@ version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2 1.0.85", + "quote 1.0.36", + "syn 2.0.66", +] + +[[package]] +name = "zerovec" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb2cc8827d6c0994478a15c53f374f46fbd41bea663d809b14744bc42e6b109c" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97cf56601ee5052b4417d90c8755c6683473c926039908196cf35d99f893ebe7" +dependencies = [ + "proc-macro2 1.0.85", + "quote 1.0.36", + "syn 2.0.66", ] [[package]] @@ -10940,11 +12645,11 @@ dependencies = [ [[package]] name = "zip" -version = "2.0.0" +version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fccb210625924ecbbe92f9bb497d04b167b64fe5540cec75f10b16e0c51ee92b" +checksum = "775a2b471036342aa69bc5a602bc889cb0a06cda00477d0c69566757d5553d39" dependencies = [ - "aes", + "aes 0.8.4", "arbitrary", "bzip2", "constant_time_eq 0.3.0", @@ -10953,11 +12658,12 @@ dependencies = [ "deflate64", "displaydoc", "flate2", - "hmac", - "indexmap 2.0.0", + "hmac 0.12.1", + "indexmap 2.2.6", "lzma-rs", + "memchr", "pbkdf2 0.12.2", - "rand", + "rand 0.8.5", "sha1", "thiserror", "time", @@ -11019,9 +12725,9 @@ dependencies = [ [[package]] name = "zstd-sys" -version = "2.0.10+zstd.1.5.6" +version = "2.0.11+zstd.1.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c253a4914af5bafc8fa8c86ee400827e83cf6ec01195ec1f1ed8441bf00d65aa" +checksum = "75652c55c0b6f3e6f12eb786fe1bc960396bf05a1eb3bf1f3691c3610ac2e6d4" dependencies = [ "cc", "pkg-config", diff --git a/ampd/Cargo.toml b/ampd/Cargo.toml index 00b6166b1..42c61f92f 100644 --- a/ampd/Cargo.toml +++ b/ampd/Cargo.toml @@ -60,7 +60,7 @@ sui-types = { git = "https://github.com/mystenlabs/sui", features = [ # The fix for the issue is at https://github.com/axelarnetwork/tendermint-rs/commit/e97033e20e660a7e707ea86db174ec047bbba50d. tendermint = { git = "https://github.com/axelarnetwork/tendermint-rs.git", branch = "v0.33.x" } tendermint-rpc = { git = "https://github.com/axelarnetwork/tendermint-rs.git", branch = "v0.33.x", features = [ - "http-client", + "http-client", ] } thiserror = { workspace = true } tokio = { version = "1.22.0", features = ["signal"] } @@ -76,7 +76,9 @@ url = "2.3.1" valuable = { version = "0.1.0", features = ["derive"] } valuable-serde = { version = "0.1.0", features = ["std"] } voting-verifier = { workspace = true } -gmp-gateway = { git = "ssh://git@github.com/eigerco/solana-axelar.git", branch = "poc" } +gmp-gateway = { git = "https://github.com/eigerco/solana-axelar.git", branch = "main" } +axelar-message-primitives = { git = "https://github.com/eigerco/solana-axelar.git", branch = "main" } + lru = "0.12.3" [dev-dependencies] diff --git a/ampd/src/handlers/config.rs b/ampd/src/handlers/config.rs index ba21364d8..1c01e79fe 100644 --- a/ampd/src/handlers/config.rs +++ b/ampd/src/handlers/config.rs @@ -20,7 +20,7 @@ pub struct Chain { #[derive(Debug, Deserialize, Serialize, PartialEq)] pub struct GenericChain { - pub name: connection_router_api::ChainName, + pub name: ChainName, pub rpc_url: Url, } diff --git a/ampd/src/handlers/mod.rs b/ampd/src/handlers/mod.rs index e01a64713..6cc25e01a 100644 --- a/ampd/src/handlers/mod.rs +++ b/ampd/src/handlers/mod.rs @@ -6,7 +6,7 @@ pub mod evm_verify_msg; pub mod evm_verify_verifier_set; pub mod multisig; pub mod solana_verify_msg; -pub mod solana_verify_worker_set; +pub mod solana_verify_verifier_set; pub mod sui_verify_msg; pub mod sui_verify_verifier_set; diff --git a/ampd/src/handlers/solana_verify_msg.rs b/ampd/src/handlers/solana_verify_msg.rs index bef1088b6..8ad89e65c 100644 --- a/ampd/src/handlers/solana_verify_msg.rs +++ b/ampd/src/handlers/solana_verify_msg.rs @@ -1,9 +1,10 @@ use async_trait::async_trait; -use connection_router_api::ChainName; use cosmrs::cosmwasm::MsgExecuteContract; +use cosmrs::{tx::Msg, Any}; use error_stack::ResultExt; use futures::stream::FuturesOrdered; -use futures::{StreamExt, TryStreamExt}; +use futures::StreamExt; +use router_api::ChainName; use serde::Deserialize; use solana_sdk::signature::Signature; use solana_transaction_status::UiTransactionEncoding; @@ -19,7 +20,6 @@ use voting_verifier::msg::ExecuteMsg; use crate::event_processor::EventHandler; use crate::handlers::errors::Error; -use crate::queue::queued_broadcaster::BroadcasterClient; use crate::solana::msg_verifier::verify_message; use crate::solana::rpc::RpcCacheWrapper; use crate::types::TMAddress; @@ -31,7 +31,7 @@ pub struct Message { pub tx_id: String, pub event_index: u64, pub destination_address: String, - pub destination_chain: connection_router_api::ChainName, + pub destination_chain: router_api::ChainName, pub source_address: String, #[serde(with = "axelar_wasm_std::hex")] pub payload_hash: [u8; 32], @@ -50,53 +50,39 @@ struct PollStartedEvent { expires_at: u64, } -pub struct Handler -where - B: BroadcasterClient, -{ - worker: TMAddress, +pub struct Handler { + verifier: TMAddress, voting_verifier: TMAddress, rpc_client: RpcCacheWrapper, chain: ChainName, - broadcast_client: B, latest_block_height: Receiver, } -impl Handler -where - B: BroadcasterClient, -{ +impl Handler { pub fn new( - worker: TMAddress, + verifier: TMAddress, voting_verifier: TMAddress, rpc_client: RpcCacheWrapper, chain: ChainName, - broadcast_client: B, latest_block_height: Receiver, ) -> Self { Self { - worker, + verifier, voting_verifier, rpc_client, chain, - broadcast_client, latest_block_height, } } - async fn broadcast_votes(&self, poll_id: PollId, votes: Vec) -> Result<()> { - let msg = serde_json::to_vec(&ExecuteMsg::Vote { poll_id, votes }) - .expect("vote msg should serialize"); - let tx = MsgExecuteContract { - sender: self.worker.as_ref().clone(), + + fn vote_msg(&self, poll_id: PollId, votes: Vec) -> MsgExecuteContract { + MsgExecuteContract { + sender: self.verifier.as_ref().clone(), contract: self.voting_verifier.as_ref().clone(), - msg, + msg: serde_json::to_vec(&ExecuteMsg::Vote { poll_id, votes }) + .expect("vote msg should serialize"), // This should serialize as inputs are controlled. funds: vec![], - }; - - self.broadcast_client - .broadcast(tx) - .await - .change_context(Error::Broadcaster) + } } async fn process_message( @@ -138,18 +124,15 @@ where } }, }; - Ok(verify_message(source_gateway_address, sol_tx, &msg)) + Ok(verify_message(source_gateway_address, sol_tx, msg)) } } #[async_trait] -impl EventHandler for Handler -where - B: BroadcasterClient + Send + Sync, -{ +impl EventHandler for Handler { type Err = Error; - async fn handle(&self, event: &Event) -> Result<()> { + async fn handle(&self, event: &Event) -> Result> { let PollStartedEvent { contract_address, poll_id, @@ -161,32 +144,32 @@ where .. } = match event.try_into() as error_stack::Result<_, _> { Err(report) if matches!(report.current_context(), EventTypeMismatch(_)) => { - return Ok(()); + return Ok(vec![]); } event => event.change_context(Error::DeserializeEvent)?, }; if self.chain != source_chain { - return Ok(()); + return Ok(vec![]); } if self.voting_verifier != contract_address { - return Ok(()); + return Ok(vec![]); } - if !participants.contains(&self.worker) { - return Ok(()); + if !participants.contains(&self.verifier) { + return Ok(vec![]); } let latest_block_height = *self.latest_block_height.borrow(); if latest_block_height >= expires_at { info!(poll_id = poll_id.to_string(), "skipping expired poll"); - return Ok(()); + return Ok(vec![]); } let mut votes: Vec = Vec::new(); - let mut ord_fut: FuturesOrdered<_> = messages + let mut ord_fut: FuturesOrdered<_> = messages .iter() .map(|msg| self.process_message(msg, &source_gateway_address)) .collect(); @@ -195,7 +178,10 @@ where votes.push(vote_result?) // If there is a failure, its due to a network error, so we abort this handler operation and all messages need to be processed again. } - self.broadcast_votes(poll_id, votes).await + Ok(vec![self + .vote_msg(poll_id, votes) + .into_any() + .expect("vote msg should serialize")]) } } @@ -213,7 +199,6 @@ mod test { use voting_verifier::events::{PollMetadata, PollStarted, TxEventConfirmation}; use crate::{ - queue::queued_broadcaster::MockBroadcasterClient, solana::test_utils::rpc_client_with_recorder, types::{EVMAddress, Hash}, PREFIX, @@ -231,13 +216,7 @@ mod test { let (_, rx) = watch::channel(expiration - 1); let source_chain = ChainName::from_str("solana").unwrap(); - // Prepare the message verifier and the vote broadcaster - let mut broadcast_client = MockBroadcasterClient::new(); - broadcast_client - .expect_broadcast::() - .once() - .returning(|_| Ok(())); - + // Prepare the message verifier let (rpc_client, rpc_recorder) = rpc_client_with_recorder(); let event: Event = get_event( @@ -254,11 +233,11 @@ mod test { voting_verifier, RpcCacheWrapper::new(rpc_client, NonZeroUsize::new(10).unwrap()), source_chain, - broadcast_client, rx, ); - handler.handle(&event).await.unwrap(); + let votes = handler.handle(&event).await.unwrap(); + assert!(!votes.is_empty()); assert_eq!( Some(&2), rpc_recorder.read().await.get(&RpcRequest::GetTransaction) @@ -273,14 +252,9 @@ mod test { let expiration = 100u64; let (_, rx) = watch::channel(expiration - 1); let source_chain = ChainName::from_str("solana").unwrap(); - let poll_started_source_chain = ChainName::from_str("other_chain").unwrap(); // A different, unexpected source chain. - - // Prepare the message verifier and the vote broadcaster - let mut broadcast_client = MockBroadcasterClient::new(); - broadcast_client - .expect_broadcast::() - .never(); + let poll_started_source_chain = ChainName::from_str("otherchain").unwrap(); // A different, unexpected source chain. + // Prepare the message verifier let (rpc_client, rpc_recorder) = rpc_client_with_recorder(); let event: Event = get_event( @@ -297,12 +271,11 @@ mod test { voting_verifier, RpcCacheWrapper::new(rpc_client, NonZeroUsize::new(10).unwrap()), source_chain, - broadcast_client, rx, ); - handler.handle(&event).await.unwrap(); - + let handle_result = handler.handle(&event).await.unwrap(); + assert!(handle_result.is_empty()); assert_eq!( None, rpc_recorder.read().await.get(&RpcRequest::GetTransaction) @@ -318,13 +291,7 @@ mod test { let (_, rx) = watch::channel(expiration - 1); let source_chain = ChainName::from_str("solana").unwrap(); - // Prepare the message verifier and the vote broadcaster - let mut broadcast_client = MockBroadcasterClient::new(); - broadcast_client - .expect_broadcast::() - .once() - .returning(|_| Ok(())); - + // Prepare the message verifier let (rpc_client, rpc_recorder) = rpc_client_with_recorder(); let event: Event = get_event( @@ -337,12 +304,11 @@ mod test { voting_verifier, RpcCacheWrapper::new(rpc_client, NonZeroUsize::new(10).unwrap()), source_chain, - broadcast_client, rx, ); - handler.handle(&event).await.unwrap(); - + let handle_result = handler.handle(&event).await.unwrap(); + assert!(!handle_result.is_empty()); assert_eq!( Some(&1), rpc_recorder.read().await.get(&RpcRequest::GetTransaction) @@ -358,12 +324,7 @@ mod test { let (_, rx) = watch::channel(expiration - 1); let source_chain = ChainName::from_str("solana").unwrap(); - // Prepare the message verifier and the vote broadcaster - let mut broadcast_client = MockBroadcasterClient::new(); - broadcast_client - .expect_broadcast::() - .never(); - + // Prepare the message verifier let (rpc_client, rpc_recorder) = rpc_client_with_recorder(); let event: Event = get_event( @@ -380,12 +341,11 @@ mod test { voting_verifier, RpcCacheWrapper::new(rpc_client, NonZeroUsize::new(10).unwrap()), source_chain, - broadcast_client, rx, ); - handler.handle(&event).await.unwrap(); - + let handler_result = handler.handle(&event).await.unwrap(); + assert!(handler_result.is_empty()); assert_eq!( None, rpc_recorder.read().await.get(&RpcRequest::GetTransaction) @@ -401,12 +361,7 @@ mod test { let (_, rx) = watch::channel(expiration - 1); let source_chain = ChainName::from_str("solana").unwrap(); - // Prepare the message verifier and the vote broadcaster - let mut broadcast_client = MockBroadcasterClient::new(); - broadcast_client - .expect_broadcast::() - .never(); - + // Prepare the message verifier let (rpc_client, rpc_recorder) = rpc_client_with_recorder(); let event: Event = get_event( @@ -419,12 +374,11 @@ mod test { voting_verifier, RpcCacheWrapper::new(rpc_client, NonZeroUsize::new(10).unwrap()), source_chain, - broadcast_client, rx, ); - handler.handle(&event).await.unwrap(); - + let handler_result = handler.handle(&event).await.unwrap(); + assert!(handler_result.is_empty()); assert_eq!( None, rpc_recorder.read().await.get(&RpcRequest::GetTransaction) @@ -440,12 +394,7 @@ mod test { let (_, rx) = watch::channel(expiration); // expired ! let source_chain = ChainName::from_str("solana").unwrap(); - // Prepare the message verifier and the vote broadcaster - let mut broadcast_client = MockBroadcasterClient::new(); - broadcast_client - .expect_broadcast::() - .never(); - + // Prepare the message verifier let (rpc_client, rpc_recorder) = rpc_client_with_recorder(); let event: Event = get_event( @@ -462,12 +411,11 @@ mod test { voting_verifier, RpcCacheWrapper::new(rpc_client, NonZeroUsize::new(10).unwrap()), source_chain, - broadcast_client, rx, ); - handler.handle(&event).await.unwrap(); - + let handler_result = handler.handle(&event).await.unwrap(); + assert!(handler_result.is_empty()); assert_eq!( None, rpc_recorder.read().await.get(&RpcRequest::GetTransaction) diff --git a/ampd/src/handlers/solana_verify_worker_set.rs b/ampd/src/handlers/solana_verify_verifier_set.rs similarity index 63% rename from ampd/src/handlers/solana_verify_worker_set.rs rename to ampd/src/handlers/solana_verify_verifier_set.rs index 970222474..ff3579bd2 100644 --- a/ampd/src/handlers/solana_verify_worker_set.rs +++ b/ampd/src/handlers/solana_verify_verifier_set.rs @@ -1,7 +1,14 @@ +use std::borrow::Cow; use std::convert::TryInto; +use async_trait::async_trait; +use axelar_message_primitives::command::TransferOperatorshipCommand; use cosmrs::cosmwasm::MsgExecuteContract; +use cosmrs::{tx::Msg, Any}; use error_stack::ResultExt; +use events::Error::EventTypeMismatch; +use events_derive::try_from; +use multisig::verifier_set::VerifierSet; use serde::Deserialize; use solana_sdk::signature::Signature; use solana_transaction_status::UiTransactionEncoding; @@ -9,36 +16,25 @@ use std::str::FromStr; use tokio::sync::watch::Receiver; use tracing::{error, info}; -use async_trait::async_trait; -use events::Error::EventTypeMismatch; -use events_derive::try_from; - use axelar_wasm_std::voting::{PollId, Vote}; -use connection_router_api::ChainName; +use router_api::ChainName; use solana_client::nonblocking::rpc_client::RpcClient; use voting_verifier::msg::ExecuteMsg; use crate::event_processor::EventHandler; use crate::handlers::errors::Error; -use crate::queue::queued_broadcaster::BroadcasterClient; -use crate::solana::ws_verifier::{parse_gateway_event, verify_worker_set}; -use crate::types::{TMAddress, U256}; +use crate::solana::verifier_set_verifier::{parse_gateway_event, verify_verifier_set}; +use crate::types::TMAddress; use gmp_gateway::events::GatewayEvent; type Result = error_stack::Result; #[derive(Deserialize, Debug)] -pub struct Operators { - pub weights_by_addresses: Vec<(String, U256)>, - pub threshold: U256, -} - -#[derive(Deserialize, Debug)] -pub struct WorkerSetConfirmation { +pub struct VerifierSetConfirmation { pub tx_id: String, - pub event_index: u64, - pub operators: Operators, + pub event_index: u32, + pub verifier_set: VerifierSet, } #[derive(Deserialize, Debug)] @@ -46,113 +42,90 @@ pub struct WorkerSetConfirmation { struct PollStartedEvent { #[serde(rename = "_contract_address")] contract_address: TMAddress, - worker_set: WorkerSetConfirmation, + verifier_set: VerifierSetConfirmation, poll_id: PollId, - source_chain: connection_router_api::ChainName, - source_gateway_address: String, + source_chain: router_api::ChainName, + _source_gateway_address: String, expires_at: u64, - confirmation_height: u64, + _confirmation_height: u64, participants: Vec, } -pub struct Handler -where - B: BroadcasterClient, -{ - worker: TMAddress, +pub struct Handler { + verifier: TMAddress, voting_verifier: TMAddress, chain: ChainName, rpc_client: RpcClient, - broadcast_client: B, latest_block_height: Receiver, } -impl Handler -where - B: BroadcasterClient, -{ +impl Handler { pub fn new( - worker: TMAddress, + verifier: TMAddress, voting_verifier: TMAddress, chain: ChainName, rpc_client: RpcClient, - broadcast_client: B, latest_block_height: Receiver, ) -> Self { Self { - worker, + verifier, voting_verifier, chain, rpc_client, - broadcast_client, latest_block_height, } } - async fn broadcast_vote(&self, poll_id: PollId, vote: Vote) -> Result<()> { - let msg = serde_json::to_vec(&ExecuteMsg::Vote { - poll_id, - votes: vec![vote], - }) - .map_err(|_| Error::Broadcaster)?; - - let tx = MsgExecuteContract { - sender: self.worker.as_ref().clone(), + fn vote_msg(&self, poll_id: PollId, votes: Vec) -> MsgExecuteContract { + MsgExecuteContract { + sender: self.verifier.as_ref().clone(), contract: self.voting_verifier.as_ref().clone(), - msg, + msg: serde_json::to_vec(&ExecuteMsg::Vote { poll_id, votes }) + .expect("vote msg should serialize"), funds: vec![], - }; - - self.broadcast_client - .broadcast(tx) - .await - .change_context(Error::Broadcaster) + } } } #[async_trait] -impl EventHandler for Handler -where - B: BroadcasterClient + Send + Sync, -{ +impl EventHandler for Handler { type Err = Error; - async fn handle(&self, event: &events::Event) -> Result<()> { + async fn handle(&self, event: &events::Event) -> Result> { let PollStartedEvent { contract_address, poll_id, source_chain, - source_gateway_address, expires_at, - confirmation_height: _, participants, - worker_set, + verifier_set, + .. } = match event.try_into() as error_stack::Result<_, _> { Err(report) if matches!(report.current_context(), EventTypeMismatch(_)) => { - return Ok(()) + return Ok(vec![]) } event => event.change_context(Error::DeserializeEvent)?, }; if self.voting_verifier != contract_address { - return Ok(()); + return Ok(vec![]); } if self.chain != source_chain { - return Ok(()); + return Ok(vec![]); } - if !participants.contains(&self.worker) { - return Ok(()); + if !participants.contains(&self.verifier) { + return Ok(vec![]); } let latest_block_height = *self.latest_block_height.borrow(); if latest_block_height >= expires_at { info!(poll_id = poll_id.to_string(), "skipping expired poll"); - return Ok(()); + return Ok(vec![]); } - let sol_tx_signature = match Signature::from_str(&worker_set.tx_id) { + let sol_tx_signature = match Signature::from_str(&verifier_set.tx_id) { Ok(sig) => sig, Err(err) => { error!( @@ -160,8 +133,10 @@ where err = err.to_string(), "Cannot decode solana tx signature" ); - - return self.broadcast_vote(poll_id, Vote::FailedOnChain).await; + return Ok(vec![self + .vote_msg(poll_id, vec![Vote::FailedOnChain]) + .into_any() + .expect("vote msg should serialize")]); } }; @@ -179,7 +154,10 @@ where poll_id = poll_id.to_string(), "Could not find solana transaction." ); - return self.broadcast_vote(poll_id, Vote::NotFound).await; + return Ok(vec![self + .vote_msg(poll_id, vec![Vote::NotFound]) + .into_any() + .expect("vote msg should serialize")]); } _ => { error!( @@ -194,36 +172,32 @@ where let gw_event = parse_gateway_event(&sol_tx).map_err(|_| Error::DeserializeEvent)?; - let pub_key = match gw_event { - GatewayEvent::OperatorshipTransferred { - info_account_address, - } => info_account_address, + match gw_event { + GatewayEvent::OperatorshipTransferred(Cow::Owned(TransferOperatorshipCommand { + command_id: _, + destination_chain: _, + operators, + weights, + quorum, + })) => { + let vote = verify_verifier_set(&verifier_set, &operators, &weights, quorum); + Ok(vec![self + .vote_msg(poll_id, vec![vote]) + .into_any() + .expect("vote msg should serialize")]) + } _ => { error!( tx_signature = sol_tx_signature.to_string(), poll_id = poll_id.to_string(), "Error parsing gateway event." ); - return self.broadcast_vote(poll_id, Vote::FailedOnChain).await; + return Ok(vec![self + .vote_msg(poll_id, vec![Vote::FailedOnChain]) + .into_any() + .expect("vote msg should serialize")]); } - }; - - let account_data = match self.rpc_client.get_account_data(&pub_key).await { - Ok(data) => data, - Err(err) => { - error!( - tx_signature = sol_tx_signature.to_string(), - pub_key = pub_key.to_string(), - poll_id = poll_id.to_string(), - err = format!("Error fetching account data: {}", err), - ); - return self.broadcast_vote(poll_id, Vote::FailedOnChain).await; - } - }; - - let vote = - verify_worker_set(&source_gateway_address, &sol_tx, &worker_set, &account_data).await; - self.broadcast_vote(poll_id, vote).await + } } } @@ -231,17 +205,16 @@ where mod tests { use std::str::FromStr; - use axelar_wasm_std::{nonempty, operators::Operators}; - use cosmwasm_std::HexBinary; - use prost::Message; + use axelar_wasm_std::nonempty; + use multisig::{ + key::KeyType, + test::common::{build_verifier_set, ecdsa_test_data}, + }; use solana_client::rpc_request::RpcRequest; use tokio::sync::watch; - use voting_verifier::events::{PollMetadata, PollStarted, WorkerSetConfirmation}; + use voting_verifier::events::{PollMetadata, PollStarted, VerifierSetConfirmation}; - use crate::{ - handlers::tests::get_event, queue::queued_broadcaster::MockBroadcasterClient, - solana::test_utils::rpc_client_with_recorder, PREFIX, - }; + use crate::{handlers::tests::get_event, solana::test_utils::rpc_client_with_recorder, PREFIX}; use tokio::test as async_test; @@ -254,8 +227,6 @@ mod tests { let (rpc_client, rpc_recorder) = rpc_client_with_recorder(); - let broadcast_client = MockBroadcasterClient::new(); - let expiration = 100u64; let (_, rx) = watch::channel(expiration - 1); @@ -264,17 +235,17 @@ mod tests { voting_verifier.clone(), ChainName::from_str("solana").unwrap(), rpc_client, - broadcast_client, rx, ); let event = get_event( - worker_set_poll_started_event(participants(2, Some(worker.clone())), expiration), + verifier_set_poll_started_event(participants(2, Some(worker.clone())), expiration), &TMAddress::random(PREFIX), ); - handler.handle(&event).await.unwrap(); + let handler_result = handler.handle(&event).await.unwrap(); + assert!(handler_result.is_empty()); assert_eq!( None, rpc_recorder.read().await.get(&RpcRequest::GetTransaction) @@ -292,26 +263,24 @@ mod tests { let (rpc_client, rpc_recorder) = rpc_client_with_recorder(); - let broadcast_client = MockBroadcasterClient::new(); let expiration = 100u64; let (_, rx) = watch::channel(expiration - 1); let handler = Handler::new( worker.clone(), voting_verifier.clone(), - ChainName::from_str("not_matching_chain").unwrap(), + ChainName::from_str("notmatchingchain").unwrap(), rpc_client, - broadcast_client, rx, ); let event = get_event( - worker_set_poll_started_event(participants(2, Some(worker.clone())), expiration), + verifier_set_poll_started_event(participants(2, Some(worker.clone())), expiration), &voting_verifier, ); - handler.handle(&event).await.unwrap(); - + let handle_results = handler.handle(&event).await.unwrap(); + assert!(handle_results.is_empty()); assert_eq!( None, rpc_recorder.read().await.get(&RpcRequest::GetTransaction) @@ -329,7 +298,6 @@ mod tests { let (rpc_client, rpc_recorder) = rpc_client_with_recorder(); - let broadcast_client = MockBroadcasterClient::new(); let expiration = 100u64; let (_, rx) = watch::channel(expiration - 1); @@ -338,17 +306,16 @@ mod tests { voting_verifier.clone(), ChainName::from_str("solana").unwrap(), rpc_client, - broadcast_client, rx, ); let event = get_event( - worker_set_poll_started_event(participants(2, None), expiration), // worker is not here. + verifier_set_poll_started_event(participants(2, None), expiration), // worker is not here. &voting_verifier, ); - handler.handle(&event).await.unwrap(); - + let handle_results = handler.handle(&event).await.unwrap(); + assert!(handle_results.is_empty()); assert_eq!( None, rpc_recorder.read().await.get(&RpcRequest::GetTransaction) @@ -366,7 +333,6 @@ mod tests { let (rpc_client, rpc_recorder) = rpc_client_with_recorder(); - let broadcast_client = MockBroadcasterClient::new(); let expiration = 100u64; let (_, rx) = watch::channel(expiration); @@ -375,17 +341,16 @@ mod tests { voting_verifier.clone(), ChainName::from_str("solana").unwrap(), rpc_client, - broadcast_client, rx, ); let event = get_event( - worker_set_poll_started_event(participants(2, Some(worker.clone())), expiration), + verifier_set_poll_started_event(participants(2, Some(worker.clone())), expiration), &voting_verifier, ); - handler.handle(&event).await.unwrap(); - + let handle_results = handler.handle(&event).await.unwrap(); + assert!(handle_results.is_empty()); assert_eq!( None, rpc_recorder.read().await.get(&RpcRequest::GetTransaction) @@ -396,8 +361,16 @@ mod tests { ); } - fn worker_set_poll_started_event(participants: Vec, expires_at: u64) -> PollStarted { - PollStarted::WorkerSet { + fn verifier_set_poll_started_event( + participants: Vec, + expires_at: u64, + ) -> PollStarted { + PollStarted::VerifierSet { + verifier_set: VerifierSetConfirmation { + tx_id: nonempty::String::from_str("value").unwrap(), + event_index: 1, + verifier_set: build_verifier_set(KeyType::Ecdsa, &ecdsa_test_data::signers()), + }, metadata: PollMetadata { poll_id: "100".parse().unwrap(), source_chain: "solana".parse().unwrap(), @@ -412,21 +385,6 @@ mod tests { .map(|addr| cosmwasm_std::Addr::unchecked(addr.to_string())) .collect(), }, - worker_set: WorkerSetConfirmation { - tx_id: nonempty::String::from_str("value").unwrap(), - event_index: 1, - operators: Operators::new( - vec![( - HexBinary::from( - "03f57d1a813febaccbe6429603f9ec57969511b76cd680452dba91fa01f54e756d" - .to_string() - .encode_to_vec(), - ), - 1u64.into(), - )], - 2u64.into(), - ), - }, } } diff --git a/ampd/src/lib.rs b/ampd/src/lib.rs index 7eee7c016..0ec041fba 100644 --- a/ampd/src/lib.rs +++ b/ampd/src/lib.rs @@ -350,7 +350,7 @@ where } => self.create_handler_task( format!("{}-msg-verifier", chain.name), handlers::solana_verify_msg::Handler::new( - worker.clone(), + verifier.clone(), cosmwasm_contract, RpcCacheWrapper::new( RpcClient::new_with_commitment( @@ -360,7 +360,6 @@ where NonZeroUsize::new(max_tx_cache_entries).unwrap(), ), chain.name, - self.broadcaster.client(), self.block_height_monitor.latest_block_height(), ), stream_timeout, @@ -370,15 +369,14 @@ where chain, } => self.create_handler_task( format!("{}-worker-set-verifier", chain.name), - handlers::solana_verify_worker_set::Handler::new( - worker.clone(), + handlers::solana_verify_verifier_set::Handler::new( + verifier.clone(), cosmwasm_contract, chain.name, RpcClient::new_with_commitment( chain.rpc_url.to_string(), CommitmentConfig::finalized(), ), - self.broadcaster.client(), self.block_height_monitor.latest_block_height(), ), stream_timeout, diff --git a/ampd/src/solana/mod.rs b/ampd/src/solana/mod.rs index f946c85ff..63a3fff49 100644 --- a/ampd/src/solana/mod.rs +++ b/ampd/src/solana/mod.rs @@ -1,4 +1,4 @@ -pub mod ws_verifier; +pub mod verifier_set_verifier; pub mod msg_verifier; pub mod rpc; diff --git a/ampd/src/solana/msg_verifier.rs b/ampd/src/solana/msg_verifier.rs index a8bb7ef5c..c521053fe 100644 --- a/ampd/src/solana/msg_verifier.rs +++ b/ampd/src/solana/msg_verifier.rs @@ -1,23 +1,23 @@ use axelar_wasm_std::voting::Vote; -use gmp_gateway::events::GatewayEvent; +use gmp_gateway::events::{CallContract, GatewayEvent}; use solana_transaction_status::{ option_serializer::OptionSerializer, EncodedConfirmedTransactionWithStatusMeta, }; -use std::sync::Arc; +use std::{borrow::Cow, sync::Arc}; use tracing::error; use crate::handlers::solana_verify_msg::Message; -impl PartialEq<&Message> for GatewayEvent { +impl PartialEq<&Message> for GatewayEvent<'_> { fn eq(&self, msg: &&Message) -> bool { match self { - GatewayEvent::CallContract { + GatewayEvent::CallContract(Cow::Owned(CallContract { sender, destination_chain, destination_address, payload: _, payload_hash, - } => { + })) => { let event_dest_addr = String::from_utf8(destination_address.to_owned()); let event_dest_chain = String::from_utf8(destination_chain.to_owned()); @@ -111,9 +111,9 @@ pub fn verify_message( // When the first matching log message is found, its index will be returned. fn find_first_log_message_match( tx_id: &str, - log_messages: &Vec, + log_messages: &[String], message: &Message, - account_keys: &Vec, + account_keys: &[String], source_gateway_address: &String, ) -> Option { for (i, log) in log_messages.iter().enumerate() { @@ -137,11 +137,10 @@ fn find_first_log_message_match( mod tests { use base64::{engine::general_purpose, Engine}; use borsh::BorshSerialize; - use gmp_gateway::types::PubkeyWrapper; use std::str::FromStr; - use connection_router_api::ChainName; + use router_api::ChainName; use solana_program::pubkey::Pubkey; use super::*; @@ -172,7 +171,7 @@ mod tests { let payload_hash: [u8; 32] = [0; 32]; let source_gateway_address: String = "sol_gateway_addr".to_string(); let source_pubkey = Pubkey::from([0; 32]); - let source_address = PubkeyWrapper::from(source_pubkey); + let source_address = source_pubkey; // Code below helps on generating the program log line for adding in the // tests/solana_tx.json file and use it as test fixture. See the "logMessages" field @@ -207,19 +206,19 @@ mod tests { } fn get_tx_log_message( - sender: PubkeyWrapper, + sender: Pubkey, destination_chain: Vec, destination_address: Vec, payload: Vec, payload_hash: [u8; 32], ) -> String { - let event = gmp_gateway::events::GatewayEvent::CallContract { + let event = gmp_gateway::events::GatewayEvent::CallContract(Cow::Owned(CallContract { sender, destination_chain, destination_address, payload, payload_hash, - }; + })); let mut event_data = Vec::new(); event.serialize(&mut event_data).unwrap(); @@ -253,7 +252,7 @@ mod tests { #[test] fn should_not_verify_msg_if_destination_chain_does_not_match() { let (gateway_address, _, tx, mut msg) = get_matching_msg_and_tx_block(); - msg.destination_chain = ChainName::from_str("bad_chain").unwrap(); + msg.destination_chain = ChainName::from_str("badchain").unwrap(); assert_eq!( Vote::FailedOnChain, verify_message(&gateway_address, Arc::new(tx), &msg) @@ -263,7 +262,7 @@ mod tests { #[test] fn should_not_verify_msg_if_source_address_does_not_match() { let (source_gateway_address, _, tx, mut msg) = get_matching_msg_and_tx_block(); - msg.source_address = PubkeyWrapper::from(Pubkey::from([13; 32])).to_string(); + msg.source_address = Pubkey::from([13; 32]).to_string(); assert_eq!( Vote::FailedOnChain, verify_message(&source_gateway_address, Arc::new(tx), &msg) @@ -306,7 +305,7 @@ mod tests { &tx_id, &log_messages, &msg, - &vec![gateway_address.clone()], + &[gateway_address.clone()], &gateway_address ) ); @@ -318,7 +317,7 @@ mod tests { fn not_matching_tx_log_message(msg: &Message) -> String { get_tx_log_message( - PubkeyWrapper::from(Pubkey::from_str(&msg.source_address).unwrap()), + Pubkey::from_str(&msg.source_address).unwrap(), "abr".as_bytes().to_vec(), msg.destination_address.clone().into_bytes(), Vec::new(), @@ -328,7 +327,7 @@ mod tests { fn matching_tx_log_message(msg: &Message) -> String { get_tx_log_message( - PubkeyWrapper::from(Pubkey::from_str(&msg.source_address).unwrap()), + Pubkey::from_str(&msg.source_address).unwrap(), msg.destination_chain.to_string().into_bytes(), msg.destination_address.clone().into_bytes(), Vec::new(), @@ -352,7 +351,7 @@ mod tests { &tx_id, &log_messages, &msg, - &vec![gateway_address.clone()], + &[gateway_address.clone()], &gateway_address ) ); @@ -370,7 +369,7 @@ mod tests { &tx_id, &log_messages, &msg, - &vec![gateway_address.clone()], + &[gateway_address.clone()], &gateway_address ) ); diff --git a/ampd/src/solana/rpc.rs b/ampd/src/solana/rpc.rs index ef5d752a3..16c55ffd2 100644 --- a/ampd/src/solana/rpc.rs +++ b/ampd/src/solana/rpc.rs @@ -39,7 +39,8 @@ impl RpcCacheWrapper { Ok(tx) } - + + #[cfg(test)] pub async fn entries(&self) -> usize { self.tx_cache.read().await.len() } diff --git a/ampd/src/solana/test_utils.rs b/ampd/src/solana/test_utils.rs index c87e56d0b..6f21ddbdb 100644 --- a/ampd/src/solana/test_utils.rs +++ b/ampd/src/solana/test_utils.rs @@ -45,7 +45,7 @@ impl RpcSender for RpcRecorder { acquired_record .entry(request) - .and_modify(|count| *count += 1) + .and_modify(|count| *count = count.checked_add(1).unwrap()) .or_insert(1); let method = &request.build_request_json(42, params.clone())["method"]; diff --git a/ampd/src/solana/verifier_set_verifier.rs b/ampd/src/solana/verifier_set_verifier.rs new file mode 100644 index 000000000..a081b07f1 --- /dev/null +++ b/ampd/src/solana/verifier_set_verifier.rs @@ -0,0 +1,291 @@ +use axelar_message_primitives::Address; +use axelar_wasm_std::voting::Vote; +use hex::ToHex; +use multisig::key::PublicKey; + +use crate::handlers::solana_verify_verifier_set::VerifierSetConfirmation; +use solana_transaction_status::{ + option_serializer::OptionSerializer, EncodedConfirmedTransactionWithStatusMeta, +}; +use thiserror::Error; +use tracing::error; + +use gmp_gateway::events::GatewayEvent; + +#[derive(Error, Debug, PartialEq)] +pub enum VerificationError { + #[error("Failed to parse tx log messages")] + NoLogMessages, + #[error("Tried to get gateway event from program logs, but couldn't find anything.")] + NoGatewayEventFound, +} + +type Result = std::result::Result; + +pub fn parse_gateway_event(tx: &EncodedConfirmedTransactionWithStatusMeta) -> Result { + let Some(meta) = &tx.transaction.meta else { + return Err(VerificationError::NoLogMessages); + }; + + let OptionSerializer::Some(log_messages) = &meta.log_messages else { + return Err(VerificationError::NoLogMessages); + }; + + log_messages + .iter() + .find_map(GatewayEvent::parse_log) + .ok_or(VerificationError::NoGatewayEventFound) +} + +#[tracing::instrument(name = "solana_verify_verifier_set")] +pub fn verify_verifier_set( + verifier_set_conf: &VerifierSetConfirmation, + solana_signers: &[Address], + solana_weights: &[u128], + solana_quorum: u128, +) -> Vote { + let tx_id = &verifier_set_conf.tx_id; + let verifier_set = &verifier_set_conf.verifier_set; + let verifier_set_threshold = verifier_set.threshold.u128(); + + if solana_signers.len() != solana_weights.len() { + error!( + tx_id, + solana_signers_count = solana_signers.len(), + solana_weights_count = solana_weights.len(), + "Signers length do not match in solana onchain data.", + ); + return Vote::FailedOnChain; + } + + if verifier_set_threshold != solana_quorum { + error!( + tx_id, + axelar_threshold = verifier_set_threshold, + solana_quorum, + "Verifier set threshold do not match." + ); + return Vote::FailedOnChain; + } + + for (solana_addr, solana_weight) in solana_signers.iter().zip(solana_weights.iter()) { + let solana_addr_hex = solana_addr.encode_hex::(); + let Some((addr, signer)) = verifier_set.signers.get_key_value(&solana_addr_hex) else { + error!( + tx_id, + solana_addr_hex, "Lookup for solana signer address failed on axelar verifier set", + ); + return Vote::FailedOnChain; + }; + let signer_address = signer.address.to_string(); + if *addr != signer_address { + error!( + tx_id, + verifier_set_map_key=addr, + verifier_set_inner_signer_address=signer_address, + "Axelar verifier set has inconsistencies. Map key (Address) is different than the inner signer address.", + ); + return Vote::FailedOnChain; + } + let signer_pub_key = match &signer.pub_key { + PublicKey::Ecdsa(hb) | PublicKey::Ed25519(hb) => hb, + }; + if solana_addr.as_ref() != signer_pub_key.as_slice() { + let signer_pub_key_hex = signer.pub_key.encode_hex::(); + error!( + tx_id, + solana_addr_hex, + signer_pub_key_hex, + "Solana address is different than Axelar signer public key.", + ); + return Vote::FailedOnChain; + } + + if *solana_weight != signer.weight.u128() { + error!( + tx_id, + solana_addr_hex, + solana_weight, + axelar_signer_weight = signer.weight.u128(), + "Signer weight differs", + ); + return Vote::FailedOnChain; + } + } + Vote::SucceededOnChain +} + +#[cfg(test)] +mod tests { + + use cosmwasm_std::{Addr, HexBinary}; + use multisig::{ + key::{KeyType, PublicKey}, + test::common::{build_verifier_set, TestSigner}, + }; + + use super::*; + + #[test] + fn test_verifier_test_verification_ok() { + let (verifier_set_conf, sol_signers, sol_weights, sol_quorum) = + matching_verifier_set_and_sol_data(); + + let vote = verify_verifier_set(&verifier_set_conf, &sol_signers, &sol_weights, sol_quorum); + + assert_eq!(Vote::SucceededOnChain, vote); + } + + #[test] + fn test_verifier_test_verification_fails_due_to_different_threshold() { + let (verifier_set_conf, sol_signers, sol_weights, mut sol_quorum) = + matching_verifier_set_and_sol_data(); + + sol_quorum += 1; + + let vote = verify_verifier_set(&verifier_set_conf, &sol_signers, &sol_weights, sol_quorum); + + assert_eq!(Vote::FailedOnChain, vote); + } + + #[test] + fn test_verifier_test_verification_fails_due_to_different_weights_vec_len() { + let (verifier_set_conf, sol_signers, mut sol_weights, sol_quorum) = + matching_verifier_set_and_sol_data(); + + sol_weights.push(1); + + let vote = verify_verifier_set(&verifier_set_conf, &sol_signers, &sol_weights, sol_quorum); + + assert_eq!(Vote::FailedOnChain, vote); + } + + #[test] + fn test_verifier_test_verification_fails_due_to_missing_signer() { + let (verifier_set_conf, mut sol_signers, sol_weights, sol_quorum) = + matching_verifier_set_and_sol_data(); + + sol_signers.pop().unwrap(); + + let vote = verify_verifier_set(&verifier_set_conf, &sol_signers, &sol_weights, sol_quorum); + + assert_eq!(Vote::FailedOnChain, vote); + } + + #[test] + fn test_verifier_test_verification_fails_due_to_different_signer_set_address() { + let (mut verifier_set_conf, sol_signers, sol_weights, sol_quorum) = + matching_verifier_set_and_sol_data(); + + let signer = verifier_set_conf + .verifier_set + .signers + .get_mut(sol_signers.get(1).unwrap().encode_hex::().as_str()) + .unwrap(); + signer.address = + Addr::unchecked("ha ! a different address in the signer set address field"); + + let vote = verify_verifier_set(&verifier_set_conf, &sol_signers, &sol_weights, sol_quorum); + + assert_eq!(Vote::FailedOnChain, vote); + } + + #[test] + fn test_verifier_test_verification_fails_due_to_different_signer_set_pubkey() { + let (mut verifier_set_conf, sol_signers, sol_weights, sol_quorum) = + matching_verifier_set_and_sol_data(); + + let signer = verifier_set_conf + .verifier_set + .signers + .get_mut(sol_signers.get(1).unwrap().encode_hex::().as_str()) + .unwrap(); + signer.pub_key = PublicKey::Ecdsa(HexBinary::from_hex("d9e1eb2b47cb8b7c1c2a5a32f6fa6c57d0e6fdd53eaa8c76fe7f0b3b390cfb3c40f258e476f2ca0e6a7ca2622ea23afe7bd1f873448e01eed86cd6446a403f35").unwrap()); + + let vote = verify_verifier_set(&verifier_set_conf, &sol_signers, &sol_weights, sol_quorum); + + assert_eq!(Vote::FailedOnChain, vote); + } + + #[test] + fn test_verifier_test_verification_fails_due_to_different_signer_weights() { + let (verifier_set_conf, sol_signers, mut sol_weights, sol_quorum) = + matching_verifier_set_and_sol_data(); + + *sol_weights.get_mut(1).unwrap() = 666; + + let vote = verify_verifier_set(&verifier_set_conf, &sol_signers, &sol_weights, sol_quorum); + + assert_eq!(Vote::FailedOnChain, vote); + } + + fn matching_verifier_set_and_sol_data( + ) -> (VerifierSetConfirmation, Vec

, Vec, u128) { + let verifier_set = build_verifier_set(KeyType::Ecdsa, &signers()); + + let sol_signers = verifier_set + .signers + .values() + .map(|v| Address::try_from(v.address.as_str()).unwrap()) + .collect(); + let sol_weights = verifier_set + .signers + .values() + .map(|v| v.weight.u128()) + .collect::>(); + let sol_quorum = verifier_set.threshold.u128(); + + let verifier_set_confirmation = VerifierSetConfirmation { + tx_id: String::from("90af"), + event_index: 1, + verifier_set, + }; + + ( + verifier_set_confirmation, + sol_signers, + sol_weights, + sol_quorum, + ) + } + + fn signers() -> Vec { + // This data is the same as ecdsa_test_data::signers() , but we are replacing the address with the + // same value of the public key. + vec![ + TestSigner { + address: Addr::unchecked("025e0231bfad810e5276e2cf9eb2f3f380ce0bdf6d84c3b6173499d3ddcc008856"), + pub_key: HexBinary::from_hex("025e0231bfad810e5276e2cf9eb2f3f380ce0bdf6d84c3b6173499d3ddcc008856") + .unwrap(), + signature: HexBinary::from_hex("d7822dd89b9df02d64b91f69cff5811dfd4de16b792d9c6054b417c733bbcc542c1e504c8a1dffac94b5828a93e33a6b45d1bf59b2f9f28ffa56b8398d68a1c5") + .unwrap(), + signed_address: HexBinary::from_hex( + "d9e1eb2b47cb8b7c1c2a5a32f6fa6c57d0e6fdd53eaa8c76fe7f0b3b390cfb3c40f258e476f2ca0e6a7ca2622ea23afe7bd1f873448e01eed86cd6446a403f36", + ) + .unwrap(), + }, + TestSigner { + address: Addr::unchecked("036ff6f4b2bc5e08aba924bd8fd986608f3685ca651a015b3d9d6a656de14769fe"), + pub_key: HexBinary::from_hex("036ff6f4b2bc5e08aba924bd8fd986608f3685ca651a015b3d9d6a656de14769fe") + .unwrap(), + signature: HexBinary::from_hex("a7ec5d1c15e84ba4b5da23fee49d77c5c81b3b1859411d1ef8193bf5a39783c76813e4cf4e1e1bfa0ea19c9f5b61d25ce978da137f3adb1730cba3d842702e72") + .unwrap(), + signed_address: HexBinary::from_hex( + "008ca739eaddd22856c30690bf9a85f16ea77784494ad01111fded80327c57c84e021608cd890341883de1ac0fcf31330243b91b22c4751542ac47115f2f4e2c", + ) + .unwrap(), + }, + TestSigner { + address: Addr::unchecked("03686cbbef9f9e9a5c852883cb2637b55fc76bee6ee6a3ff636e7bea2e41beece4"), + pub_key: HexBinary::from_hex("03686cbbef9f9e9a5c852883cb2637b55fc76bee6ee6a3ff636e7bea2e41beece4") + .unwrap(), + signature: HexBinary::from_hex("d1bc22fd89d97dfe4091c73d2002823ca9ab29b742ae531d2560bf2abafb313f7d2c3263d09d9aa72f01ed1d49046e39f6513ea61241fd59cc53d02fc4222351") + .unwrap(), + signed_address: HexBinary::from_hex( + "1df5a371c27772874b706dbbb41e0bc67f688b301d3c2d269e45c43389fa43b6328c32686f42242b0cdb05b3b955ce3106393d6e509bf0373340482182c865cc", + ) + .unwrap(), + }, + ] + } +} diff --git a/ampd/src/solana/ws_verifier.rs b/ampd/src/solana/ws_verifier.rs deleted file mode 100644 index c21173483..000000000 --- a/ampd/src/solana/ws_verifier.rs +++ /dev/null @@ -1,379 +0,0 @@ -use std::collections::HashMap; - -use axelar_wasm_std::voting::Vote; - -use gmp_gateway::types::operator::Operators; -use solana_transaction_status::EncodedConfirmedTransactionWithStatusMeta; -use thiserror::Error; -use tracing::{error, info}; - -use crate::handlers::solana_verify_worker_set::{self, WorkerSetConfirmation}; - -use gmp_gateway::events::GatewayEvent; - -#[derive(Error, Debug, PartialEq)] -pub enum VerificationError { - #[error("Failed to parse tx log messages")] - NoLogMessages, - #[error("Tried to get gateway event from program logs, but couldn't find anything.")] - NoGatewayEventFound, - #[error("Parsing error: {0}")] - ParsingError(String), -} - -type Result = std::result::Result; - -pub fn parse_gateway_event(tx: &EncodedConfirmedTransactionWithStatusMeta) -> Result { - let Some(meta) = &tx.transaction.meta else { - return Err(VerificationError::NoLogMessages); - }; - - let log_messages = match &meta.log_messages { - solana_transaction_status::option_serializer::OptionSerializer::Some(log_msg) => log_msg, - _ => return Err(VerificationError::NoLogMessages), - }; - - log_messages - .iter() - .find_map(GatewayEvent::parse_log) - .ok_or(VerificationError::NoGatewayEventFound) -} - -pub async fn verify_worker_set( - source_gateway_address: &String, - sol_tx: &EncodedConfirmedTransactionWithStatusMeta, - worker_set: &WorkerSetConfirmation, - account_data: &Vec, -) -> Vote { - let ui_tx = match &sol_tx.transaction.transaction { - solana_transaction_status::EncodedTransaction::Json(tx) => tx, - _ => { - error!("failed to parse solana tx."); - return Vote::FailedOnChain; - } - }; - - // NOTE: first signature is always tx_id - let Some(tx_id) = ui_tx.signatures.first() else { - error!("failed to parse solana tx signatures."); - return Vote::FailedOnChain; - }; - - if worker_set.tx_id != *tx_id { - error!(tx_id = &worker_set.tx_id, "tx_id do not match"); - return Vote::FailedOnChain; - } - - let solana_transaction_status::UiMessage::Raw(ui_parsed_msg) = &ui_tx.message else { - error!( - tx_id = tx_id, - "Could not gather tx message for checking account keys." - ); - return Vote::FailedOnChain; - }; - - if !ui_parsed_msg.account_keys.contains(source_gateway_address) { - info!( - tx_id = &worker_set.tx_id, - "tx does not contains source_gateway_address" - ); - return Vote::FailedOnChain; - } - - let onchain_operators = match parse_onchain_operators(account_data) { - Ok(ops) => ops, - Err(err) => { - info!(tx_id = &worker_set.tx_id, err = err.to_string()); - return Vote::FailedOnChain; - } - }; - - if worker_set.operators == onchain_operators { - Vote::SucceededOnChain - } else { - Vote::FailedOnChain - } -} - -fn parse_onchain_operators(account_data: &Vec) -> Result { - if account_data.is_empty() { - return Err(VerificationError::ParsingError( - "Solana account is empty.".to_string(), - )); - } - - let operators = match borsh::de::from_slice::(account_data) { - Ok(ops) => ops, - Err(err) => { - return Err(VerificationError::ParsingError(format!( - "Cannot borsh decode account data: {}", - err - ))) - } - }; - - Ok(operators) -} - -impl PartialEq for solana_verify_worker_set::Operators { - fn eq(&self, aw_ops: &gmp_gateway::types::operator::Operators) -> bool { - if self.threshold != *aw_ops.threshold() { - return false; - } - - // Creating a hashmap for querying the data later. Using a not fixed size key like - // Vec could not be the best. We expect a 33 bytes slice as address. See ['gmp_gateway::types::Address::ECDSA_COMPRESSED_PUBKEY_LEN'] - // So probably we should try to use that after testing the first POC in order to reduce the domain of the key. - let addresses_weights_res: Result, crate::types::U256>> = self - .weights_by_addresses - .iter() - // We are assuming here the solana address to come hex encoded. So we decode it. - .map(|(sol_addr_hex, sol_weight)| { - let sol_addr = hex::decode(sol_addr_hex).map_err(|e| { - VerificationError::ParsingError(format!( - "Failed hex-decoding sol address: {}", - e - )) - })?; - Ok((sol_addr, *sol_weight)) - }) - .collect(); - - let addresses_weights = match addresses_weights_res { - Ok(addr_weight_map) => addr_weight_map, - Err(_) => return false, // Todo, omitting some err info here. This could be indicating the - // internal hex parse operation should not be happening here. Maybe we need scale up that logic, - // and preparing conversions beforehand in another type. - }; - - if aw_ops.weights().len() != aw_ops.addresses().len() { - return false; - } - - // Iterate both iterators (addresses and weights) coming from Solana chain. At the same time, - // while querying the previously created map, which contains the Axelar counterpart. - aw_ops - .addresses() - .iter() - .zip(aw_ops.weights()) - .try_for_each(|(address, weight)| { - let Some((axelar_address, axelar_weight)) = addresses_weights.get_key_value(address.as_ref()) else { - return Err(()); - }; - - if address.as_ref() != axelar_address { - return Err(()); - } - - if weight != axelar_weight { - return Err(()); - } - Ok(()) - }) - .is_ok() - } -} - -impl PartialEq for gmp_gateway::types::u256::U256 { - fn eq(&self, loc_u256: &crate::types::U256) -> bool { - let mut b: [u8; 32] = [0; 32]; - loc_u256.to_little_endian(&mut b); - self.to_le_bytes() == b - } -} - -impl PartialEq for crate::types::U256 { - fn eq(&self, aw_u256: &gmp_gateway::types::u256::U256) -> bool { - let mut b: [u8; 32] = [0; 32]; - self.to_little_endian(&mut b); - aw_u256.to_le_bytes() == b - } -} - -#[cfg(test)] -mod tests { - use crate::handlers::solana_verify_worker_set::Operators; - - use super::*; - use borsh::BorshSerialize; - use cosmwasm_std::Uint256; - use gmp_gateway::types::{address::Address, u256::U256}; - use std::convert::TryFrom; - - #[test] - fn test_correct_deserialization_auth_weight_operators() { - let onchain_operators = gmp_gateway::types::operator::Operators::new( - vec![ - Address::try_from( - "03f57d1a813febaccbe6429603f9ec57969511b76cd680452dba91fa01f54e756d", - ) - .unwrap(), - Address::try_from( - "03f57d1a813febaccbe6429603f9ec57969511b76cd680452dba91fa01f54e756e", - ) - .unwrap(), - ], - vec![U256::from(100u8), U256::from(200u8)], - U256::from(1u8), - ); - - let mut op_buff = Vec::new(); - onchain_operators.serialize(&mut op_buff).unwrap(); - - assert_eq!( - onchain_operators, - parse_onchain_operators(&op_buff).unwrap() - ) - } - - #[test] - fn test_incorrect_deserialization_auth_weight_operators_failing_index() { - assert_eq!( - parse_onchain_operators(&vec![]), - Err(VerificationError::ParsingError( - "Solana account is empty.".to_string() - )) - ) - } - - #[test] - fn test_incorrect_deserialization_auth_weight_operators_failing_borsh_deserialization() { - let onchain_operators = gmp_gateway::types::operator::Operators::new( - vec![ - Address::try_from( - "03f57d1a813febaccbe6429603f9ec57969511b76cd680452dba91fa01f54e756d", - ) - .unwrap(), - Address::try_from( - "03f57d1a813febaccbe6429603f9ec57969511b76cd680452dba91fa01f54e756e", - ) - .unwrap(), - ], - vec![U256::from(100u8), U256::from(200u8)], - U256::from(1u8), - ); - - let mut op_buff = Vec::new(); - onchain_operators.serialize(&mut op_buff).unwrap(); - op_buff[0] = 1; // We mangle the data in order to borsh to fail. - - assert_eq!( - parse_onchain_operators(&op_buff), - Err(VerificationError::ParsingError( - "Cannot borsh decode account data: failed to fill whole buffer".to_string() - )) - ); - } - - #[test] - fn test_verify_worker_set_operators_data_happy_path() { - let (ops, sol_ops) = matching_axelar_operators_and_onchain_operators(); - assert!(&ops == &sol_ops) - } - - #[test] - fn test_verify_worker_set_operators_data_fails_not_eq_threshold() { - let (mut ops, sol_ops) = matching_axelar_operators_and_onchain_operators(); - ops.threshold = crate::types::U256::from(Uint256::MAX); - assert!(&ops != &sol_ops) - } - - #[test] - fn test_verify_worker_set_operators_data_fails_not_eq_op_addresses() { - let (mut ops, sol_ops) = matching_axelar_operators_and_onchain_operators(); - ops.weights_by_addresses = vec![ - ( - "03f57d1a813febaccbe6429603f9ec57969511b76cd680452dba91fa01f54e756d".to_string(), - crate::types::U256::from(Uint256::from_u128(100)), - ), - ( - //"03f57d1a813febaccbe6429603f9ec57969511b76cd680452dba91fa01f54e756e" --> original. - "03f57d1a813febaccbe6429603f9ec57969511b76cd680452dba91fa01f54e756a" // --> changed last character. - .to_string(), - crate::types::U256::from(Uint256::from_u128(200)), - ), - ]; - assert!(&ops != &sol_ops) - } - - #[test] - fn test_verify_worker_set_operators_data_fails_not_eq_op_weights() { - let (mut ops, sol_ops) = matching_axelar_operators_and_onchain_operators(); - ops.weights_by_addresses = vec![ - ( - "03f57d1a813febaccbe6429603f9ec57969511b76cd680452dba91fa01f54e756d".to_string(), - crate::types::U256::from(Uint256::from_u128(100)), - ), - ( - "03f57d1a813febaccbe6429603f9ec57969511b76cd680452dba91fa01f54e756e".to_string(), - crate::types::U256::from(Uint256::from_u128(1)), // here is a different weight than expected. - ), - ]; - assert!(&ops != &sol_ops) - } - - #[test] - fn test_verify_worker_set_operators_data_fails_not_same_elements() { - let (ops, _) = matching_axelar_operators_and_onchain_operators(); - - let sol_ops = gmp_gateway::types::operator::Operators::new( - vec![ - Address::try_from( - "03f57d1a813febaccbe6429603f9ec57969511b76cd680452dba91fa01f54e756d", - ) - .unwrap(), - Address::try_from( - "03f57d1a813febaccbe6429603f9ec57969511b76cd680452dba91fa01f54e756e", - ) - .unwrap(), - ], - vec![U256::from(100u8)], // missing element ! - U256::from(1u8), - ); - - assert!(&ops != &sol_ops) - } - - fn matching_axelar_operators_and_onchain_operators( - ) -> (Operators, gmp_gateway::types::operator::Operators) { - let onchain_operators = gmp_gateway::types::operator::Operators::new( - vec![ - Address::try_from( - "03f57d1a813febaccbe6429603f9ec57969511b76cd680452dba91fa01f54e756d", - ) - .unwrap(), - Address::try_from( - "03f57d1a813febaccbe6429603f9ec57969511b76cd680452dba91fa01f54e756e", - ) - .unwrap(), - ], - vec![U256::from(100u8), U256::from(200u8)], - U256::from(1u8), - ); - - let axelar_operators = Operators { - weights_by_addresses: vec![ - ( - "03f57d1a813febaccbe6429603f9ec57969511b76cd680452dba91fa01f54e756d" - .to_string(), - crate::types::U256::from(Uint256::from_u128(100)), - ), - ( - "03f57d1a813febaccbe6429603f9ec57969511b76cd680452dba91fa01f54e756e" - .to_string(), - crate::types::U256::from(Uint256::from_u128(200)), - ), - ], - threshold: crate::types::U256::from(Uint256::from_u128(1)), - }; - - (axelar_operators, onchain_operators) - } - - #[test] - fn comparing_u256_and_aw_u256_works() { - let u256 = crate::types::U256::from(Uint256::MAX); - let aw_u256 = gmp_gateway::types::u256::U256::from_le_bytes([255; 32]); // Does not have a U256::MAX - assert!(u256 == aw_u256); - } -} From 55233054cae702dc6031fdba505f1dcd25089182 Mon Sep 17 00:00:00 2001 From: eloylp Date: Fri, 28 Jun 2024 20:04:08 +0200 Subject: [PATCH 060/109] remove redundant parameter (rpc_url) --- ampd/src/handlers/config.rs | 1 - ampd/src/lib.rs | 9 ++++----- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/ampd/src/handlers/config.rs b/ampd/src/handlers/config.rs index 1c01e79fe..8098c0b67 100644 --- a/ampd/src/handlers/config.rs +++ b/ampd/src/handlers/config.rs @@ -55,7 +55,6 @@ pub enum Config { }, SolanaMsgVerifier { cosmwasm_contract: TMAddress, - rpc_url: Url, max_tx_cache_entries: usize, #[serde(flatten, with = "chain")] chain: GenericChain, diff --git a/ampd/src/lib.rs b/ampd/src/lib.rs index a27e32b85..8d54b633b 100644 --- a/ampd/src/lib.rs +++ b/ampd/src/lib.rs @@ -9,12 +9,12 @@ use cosmrs::proto::cosmos::{ tx::v1beta1::service_client::ServiceClient, }; use error_stack::{report, FutureExt, Result, ResultExt}; -use solana::rpc::RpcCacheWrapper; -use solana_client::nonblocking::rpc_client::RpcClient; -use solana_sdk::commitment_config::CommitmentConfig; use evm::finalizer::{pick, Finalization}; use evm::json_rpc::EthereumClient; use router_api::ChainName; +use solana::rpc::RpcCacheWrapper; +use solana_client::nonblocking::rpc_client::RpcClient; +use solana_sdk::commitment_config::CommitmentConfig; use thiserror::Error; use tokio::signal::unix::{signal, SignalKind}; use tokio::sync::oneshot; @@ -350,7 +350,6 @@ where ), handlers::config::Config::SolanaMsgVerifier { cosmwasm_contract, - rpc_url, max_tx_cache_entries, chain, } => self.create_handler_task( @@ -360,7 +359,7 @@ where cosmwasm_contract, RpcCacheWrapper::new( RpcClient::new_with_commitment( - rpc_url.to_string(), + chain.rpc_url.to_string(), CommitmentConfig::finalized(), ), NonZeroUsize::new(max_tx_cache_entries).unwrap(), From b5516b1952cc96f3ad0a797834b2b9393cb20fb3 Mon Sep 17 00:00:00 2001 From: eloylp Date: Fri, 28 Jun 2024 20:33:35 +0200 Subject: [PATCH 061/109] refactor: fix naming --- ampd/src/handlers/config.rs | 8 ++++---- ampd/src/lib.rs | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/ampd/src/handlers/config.rs b/ampd/src/handlers/config.rs index 8098c0b67..1a9d5f5d2 100644 --- a/ampd/src/handlers/config.rs +++ b/ampd/src/handlers/config.rs @@ -59,7 +59,7 @@ pub enum Config { #[serde(flatten, with = "chain")] chain: GenericChain, }, - SolanaWorkerSetVerifier { + SolanaVerifierSetVerifier { cosmwasm_contract: TMAddress, #[serde(flatten, with = "chain")] chain: GenericChain, @@ -191,14 +191,14 @@ where } } -fn validate_solana_worker_set_verifier_configs<'de, D>(configs: &[Config]) -> Result<(), D::Error> +fn validate_solana_verifier_set_verifier_configs<'de, D>(configs: &[Config]) -> Result<(), D::Error> where D: Deserializer<'de>, { if !configs .iter() .filter_map(|config| match config { - Config::SolanaWorkerSetVerifier { + Config::SolanaVerifierSetVerifier { chain: GenericChain { name, .. }, .. } => Some(name), @@ -226,7 +226,7 @@ where validate_sui_msg_verifier_config::(&configs)?; validate_sui_verifier_set_verifier_config::(&configs)?; validate_solana_msg_verifier_config::(&configs)?; - validate_solana_worker_set_verifier_configs::(&configs)?; + validate_solana_verifier_set_verifier_configs::(&configs)?; Ok(configs) } diff --git a/ampd/src/lib.rs b/ampd/src/lib.rs index 8d54b633b..516408191 100644 --- a/ampd/src/lib.rs +++ b/ampd/src/lib.rs @@ -369,7 +369,7 @@ where ), stream_timeout, ), - handlers::config::Config::SolanaWorkerSetVerifier { + handlers::config::Config::SolanaVerifierSetVerifier { cosmwasm_contract, chain, } => self.create_handler_task( From 2fe806690dcf7905149f943f71213069c6933a38 Mon Sep 17 00:00:00 2001 From: eloylp Date: Fri, 28 Jun 2024 20:43:36 +0200 Subject: [PATCH 062/109] Add configurable rpc_timeout for Solana handlers Also, add related tests and docs --- ampd/README.md | 17 +++++++++++-- ampd/src/config.rs | 39 ++++++++++++++++++++++++++++- ampd/src/handlers/config.rs | 3 +++ ampd/src/lib.rs | 8 ++++-- ampd/src/tests/config_template.toml | 21 ++++++++++++++++ 5 files changed, 83 insertions(+), 5 deletions(-) diff --git a/ampd/README.md b/ampd/README.md index 76c196879..eba65b10c 100644 --- a/ampd/README.md +++ b/ampd/README.md @@ -44,14 +44,14 @@ type="MultisigSigner" chain_name=[chain name. Not necessary in the Sui case] chain_rpc_url=[URL of JSON-RPC endpoint for external chain] cosmwasm_contract=[verifier contract address] -type=[handler type. Could be EvmMsgVerifier | SuiMsgVerifier] +type=[handler type. Could be EvmMsgVerifier | SuiMsgVerifier | SolanaMsgVerifier] # handler to verify verifier set rotations. One per supported chain [[handlers]] chain_name=[chain name. Not necessary in the Sui case] chain_rpc_url=[URL of JSON-RPC endpoint for external chain] cosmwasm_contract=[verifier contract address] -type=[handler type. Could be EvmVerifierSetVerifier | SuiVerifierSetVerifier] +type=[handler type. Could be EvmVerifierSetVerifier | SuiVerifierSetVerifier | SolanaVerifierSetVerifier] ``` Below is an example config for connecting to a local axelard node and local tofnd process, and verifying transactions @@ -108,6 +108,19 @@ cosmwasm_contract = 'axelar14lh98gp06zdqh5r9qj3874hdmfzs4sh5tkfzg3cyty4xeqsufdjq chain_name = 'avalanche' chain_rpc_url = "https://api.avax-test.network/ext/bc/C/rpc" +[[handlers]] +type = "SolanaMsgVerifier" +cosmwasm_contract = "axelar1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqecnww6" +chain_name = "solana" +chain_rpc_url = "https://api.devnet.solana.com" +max_tx_cache_entries = 6 + +[[handlers]] +cosmwasm_contract = "axelar1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqecnww6" +type = "SolanaVerifierSetVerifier" +chain_name = "solana" +chain_rpc_url = "https://api.devnet.solana.com" + ``` By default, ampd loads the config file from `~/.ampd/config.toml` when running any command. diff --git a/ampd/src/config.rs b/ampd/src/config.rs index e97311dad..ecfb3c2ad 100644 --- a/ampd/src/config.rs +++ b/ampd/src/config.rs @@ -57,6 +57,7 @@ mod tests { use crate::evm::finalizer::Finalization; use crate::handlers::config::Chain; use crate::handlers::config::Config as HandlerConfig; + use crate::handlers::config::GenericChain; use crate::types::TMAddress; use crate::url::Url; @@ -116,6 +117,19 @@ mod tests { [handlers.rpc_timeout] secs = 3 nanos = 0 + + [[handlers]] + chain_name = 'solana' + chain_rpc_url = 'http://127.0.0.1' + cosmwasm_contract = '{}' + max_tx_cache_entries = 6 + type = 'SolanaMsgVerifier' + + [[handlers]] + chain_name = 'solana' + chain_rpc_url = 'http://127.0.0.1' + cosmwasm_contract = '{}' + type = 'SolanaVerifierSetVerifier' ", TMAddress::random(PREFIX), TMAddress::random(PREFIX), @@ -123,10 +137,12 @@ mod tests { TMAddress::random(PREFIX), TMAddress::random(PREFIX), TMAddress::random(PREFIX), + TMAddress::random(PREFIX), + TMAddress::random(PREFIX), ); let cfg: Config = toml::from_str(config_str.as_str()).unwrap(); - assert_eq!(cfg.handlers.len(), 6); + assert_eq!(cfg.handlers.len(), 8); } #[test] @@ -306,6 +322,27 @@ mod tests { rpc_url: Url::from_str("http://127.0.0.1").unwrap(), rpc_timeout: Some(Duration::from_secs(3)), }, + HandlerConfig::SolanaMsgVerifier { + cosmwasm_contract: TMAddress::from( + AccountId::new("axelar", &[0u8; 32]).unwrap(), + ), + max_tx_cache_entries: 6, + chain: GenericChain { + name: ChainName::from_str("solana").unwrap(), + rpc_url: Url::from_str("http://127.0.0.1").unwrap(), + }, + rpc_timeout: Some(Duration::from_secs(3)), + }, + HandlerConfig::SolanaVerifierSetVerifier { + cosmwasm_contract: TMAddress::from( + AccountId::new("axelar", &[0u8; 32]).unwrap(), + ), + chain: GenericChain { + name: ChainName::from_str("solana").unwrap(), + rpc_url: Url::from_str("http://127.0.0.1").unwrap(), + }, + rpc_timeout: Some(Duration::from_secs(3)), + }, ], ..Config::default() } diff --git a/ampd/src/handlers/config.rs b/ampd/src/handlers/config.rs index 1a9d5f5d2..7e2a5c9d6 100644 --- a/ampd/src/handlers/config.rs +++ b/ampd/src/handlers/config.rs @@ -58,11 +58,14 @@ pub enum Config { max_tx_cache_entries: usize, #[serde(flatten, with = "chain")] chain: GenericChain, + rpc_timeout: Option, + }, SolanaVerifierSetVerifier { cosmwasm_contract: TMAddress, #[serde(flatten, with = "chain")] chain: GenericChain, + rpc_timeout: Option, }, } diff --git a/ampd/src/lib.rs b/ampd/src/lib.rs index 516408191..1ad0b515f 100644 --- a/ampd/src/lib.rs +++ b/ampd/src/lib.rs @@ -352,14 +352,16 @@ where cosmwasm_contract, max_tx_cache_entries, chain, + rpc_timeout, } => self.create_handler_task( format!("{}-msg-verifier", chain.name), handlers::solana_verify_msg::Handler::new( verifier.clone(), cosmwasm_contract, RpcCacheWrapper::new( - RpcClient::new_with_commitment( + RpcClient::new_with_timeout_and_commitment( chain.rpc_url.to_string(), + rpc_timeout.unwrap_or(DEFAULT_RPC_TIMEOUT), CommitmentConfig::finalized(), ), NonZeroUsize::new(max_tx_cache_entries).unwrap(), @@ -372,14 +374,16 @@ where handlers::config::Config::SolanaVerifierSetVerifier { cosmwasm_contract, chain, + rpc_timeout, } => self.create_handler_task( format!("{}-worker-set-verifier", chain.name), handlers::solana_verify_verifier_set::Handler::new( verifier.clone(), cosmwasm_contract, chain.name, - RpcClient::new_with_commitment( + RpcClient::new_with_timeout_and_commitment( chain.rpc_url.to_string(), + rpc_timeout.unwrap_or(DEFAULT_RPC_TIMEOUT), CommitmentConfig::finalized(), ), self.block_height_monitor.latest_block_height(), diff --git a/ampd/src/tests/config_template.toml b/ampd/src/tests/config_template.toml index df4cb492b..f3b5c7890 100644 --- a/ampd/src/tests/config_template.toml +++ b/ampd/src/tests/config_template.toml @@ -58,6 +58,27 @@ rpc_url = 'http://127.0.0.1/' secs = 3 nanos = 0 +[[handlers]] +type = 'SolanaMsgVerifier' +cosmwasm_contract = 'axelar1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqecnww6' +max_tx_cache_entries = 6 +chain_name = 'solana' +chain_rpc_url = 'http://127.0.0.1/' + +[handlers.rpc_timeout] +secs = 3 +nanos = 0 + +[[handlers]] +type = 'SolanaVerifierSetVerifier' +cosmwasm_contract = 'axelar1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqecnww6' +chain_name = 'solana' +chain_rpc_url = 'http://127.0.0.1/' + +[handlers.rpc_timeout] +secs = 3 +nanos = 0 + [tofnd_config] url = 'http://localhost:50051/' party_uid = 'ampd' From 31e5553b34dd52cfb17b5dcbc457fc19ca987341 Mon Sep 17 00:00:00 2001 From: tilacog Date: Mon, 1 Jul 2024 14:12:31 -0300 Subject: [PATCH 063/109] chore: fix warnings --- contracts/service-registry/src/contract/execute.rs | 3 +-- contracts/voting-verifier/src/error.rs | 1 - contracts/voting-verifier/src/events.rs | 1 - packages/report/src/loggable.rs | 1 - 4 files changed, 1 insertion(+), 5 deletions(-) diff --git a/contracts/service-registry/src/contract/execute.rs b/contracts/service-registry/src/contract/execute.rs index 3b6068094..2b1ecf189 100644 --- a/contracts/service-registry/src/contract/execute.rs +++ b/contracts/service-registry/src/contract/execute.rs @@ -1,5 +1,4 @@ -use crate::state::{self, Verifier}; -use crate::state::{AuthorizationState, VERIFIERS}; +use crate::state::{self, VERIFIERS}; use router_api::ChainName; use super::*; diff --git a/contracts/voting-verifier/src/error.rs b/contracts/voting-verifier/src/error.rs index 1aec7e088..fddcf7235 100644 --- a/contracts/voting-verifier/src/error.rs +++ b/contracts/voting-verifier/src/error.rs @@ -2,7 +2,6 @@ use axelar_wasm_std::{nonempty, voting}; use axelar_wasm_std_derive::IntoContractError; use cosmwasm_std::{OverflowError, StdError}; use router_api::ChainName; -use service_registry; use thiserror::Error; #[derive(Error, Debug, PartialEq, IntoContractError)] diff --git a/contracts/voting-verifier/src/events.rs b/contracts/voting-verifier/src/events.rs index c2d0a9436..7043354f4 100644 --- a/contracts/voting-verifier/src/events.rs +++ b/contracts/voting-verifier/src/events.rs @@ -1,5 +1,4 @@ use std::str::FromStr; -use std::vec::Vec; use axelar_wasm_std::msg_id::base_58_event_index::Base58TxDigestAndEventIndex; use axelar_wasm_std::msg_id::tx_hash_event_index::HexTxHashAndEventIndex; diff --git a/packages/report/src/loggable.rs b/packages/report/src/loggable.rs index 35578938d..c8a9accdf 100644 --- a/packages/report/src/loggable.rs +++ b/packages/report/src/loggable.rs @@ -2,7 +2,6 @@ use std::backtrace::Backtrace; use std::collections::VecDeque; use std::error::Error; use std::fmt::{Display, Formatter}; -use std::iter::FromIterator; use std::panic::Location; use error_stack::{AttachmentKind, Context, Frame, FrameKind, Report}; From aa758005551e5c6c5e946a97e317e8eb1ed8ad88 Mon Sep 17 00:00:00 2001 From: eloylp Date: Tue, 2 Jul 2024 12:14:52 +0200 Subject: [PATCH 064/109] Adapt current ampd code to solana latest changes --- Cargo.lock | 591 ++++++++---------- .../handlers/solana_verify_verifier_set.rs | 8 +- ampd/src/solana/msg_verifier.rs | 4 +- 3 files changed, 261 insertions(+), 342 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 2c17292b2..735a51f99 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -108,28 +108,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "aggregate-verifier" -version = "0.1.0" -source = "git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f#c0904e1c72c99a174a93b5f6c18b30f52d20b71f" -dependencies = [ - "axelar-wasm-std 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", - "axelar-wasm-std-derive 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", - "connection-router", - "cosmwasm-schema 1.5.5", - "cosmwasm-std", - "cosmwasm-storage", - "cw-storage-plus 1.2.0", - "cw-utils 1.0.3", - "error-stack", - "report 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", - "schemars", - "serde", - "serde_json", - "thiserror", - "voting-verifier 0.1.0", -] - [[package]] name = "ahash" version = "0.7.8" @@ -196,7 +174,7 @@ version = "0.4.0" dependencies = [ "async-trait", "axelar-message-primitives", - "axelar-wasm-std 0.1.0", + "axelar-wasm-std", "axum 0.7.5", "base64 0.21.7", "bcs", @@ -227,23 +205,23 @@ dependencies = [ "lru 0.12.3", "mockall", "move-core-types", - "multisig 0.3.0", + "multisig", "num-traits", "prost 0.11.9", "prost-types", "rand 0.8.5", "random-string", - "report 0.1.0", + "report", "reqwest", "router-api", "serde", "serde_json", "serde_with 3.8.1", - "service-registry 0.3.0", + "service-registry", "sha3 0.10.8", "solana-account-decoder", "solana-client", - "solana-program", + "solana-program 1.18.17", "solana-rpc-client-api", "solana-sdk", "solana-transaction-status", @@ -266,7 +244,7 @@ dependencies = [ "url", "valuable", "valuable-serde", - "voting-verifier 0.4.0", + "voting-verifier", ] [[package]] @@ -780,63 +758,55 @@ checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" [[package]] name = "axelar-message-primitives" version = "0.1.0" -source = "git+https://github.com/eigerco/solana-axelar.git?branch=main#1249561eb1da88b1e89d8c6cb085db6054f5d0fd" +source = "git+https://github.com/eigerco/solana-axelar.git?branch=main#681ce307bfaa7b8649e05b1dabd1d4437b5ea4b2" dependencies = [ "anyhow", "bcs", "bnum", "borsh 1.5.1", "bytemuck", - "connection-router", "cosmwasm-schema 2.0.4", "ethers-core", "hex", "itertools 0.12.1", "libsecp256k1 0.7.1", "sha3 0.10.8", - "solana-program", + "solana-program 2.0.1", "thiserror", ] [[package]] -name = "axelar-wasm-std" +name = "axelar-rkyv-encoding" version = "0.1.0" +source = "git+https://github.com/eigerco/solana-axelar.git?branch=main#681ce307bfaa7b8649e05b1dabd1d4437b5ea4b2" dependencies = [ + "bnum", "bs58 0.5.1", - "cosmwasm-schema 1.5.5", - "cosmwasm-std", - "cw-multi-test", - "cw-storage-plus 1.2.0", - "error-stack", - "flagset", + "ed25519-dalek 2.1.1", "hex", - "lazy_static", - "num-traits", - "rand 0.8.5", - "regex", - "report 0.1.0", - "schemars", - "serde", - "serde_json", + "k256", + "rkyv", "sha3 0.10.8", - "strum 0.25.0", "thiserror", - "valuable", ] [[package]] name = "axelar-wasm-std" version = "0.1.0" -source = "git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f#c0904e1c72c99a174a93b5f6c18b30f52d20b71f" dependencies = [ + "bs58 0.5.1", "cosmwasm-schema 1.5.5", "cosmwasm-std", - "cosmwasm-storage", + "cw-multi-test", "cw-storage-plus 1.2.0", "error-stack", "flagset", + "hex", + "lazy_static", "num-traits", - "report 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "rand 0.8.5", + "regex", + "report", "schemars", "serde", "serde_json", @@ -850,23 +820,10 @@ dependencies = [ name = "axelar-wasm-std-derive" version = "0.1.0" dependencies = [ - "axelar-wasm-std 0.1.0", - "error-stack", - "quote 1.0.36", - "report 0.1.0", - "syn 2.0.66", - "thiserror", -] - -[[package]] -name = "axelar-wasm-std-derive" -version = "0.1.0" -source = "git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f#c0904e1c72c99a174a93b5f6c18b30f52d20b71f" -dependencies = [ - "axelar-wasm-std 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "axelar-wasm-std", "error-stack", "quote 1.0.36", - "report 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", + "report", "syn 2.0.66", "thiserror", ] @@ -1537,6 +1494,28 @@ version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3ac9f8b63eca6fd385229b3675f6cc0dc5c8a5c8a54a59d4f52ffd670d87b0c" +[[package]] +name = "bytecheck" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23cdc57ce23ac53c931e88a43d06d070a6fd142f2617be5855eb75efc9beb1c2" +dependencies = [ + "bytecheck_derive", + "ptr_meta", + "simdutf8", +] + +[[package]] +name = "bytecheck_derive" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3db406d29fbcd95542e92559bed4d8ad92636d1ca8b3b72ede10b4bcc010e659" +dependencies = [ + "proc-macro2 1.0.85", + "quote 1.0.36", + "syn 1.0.109", +] + [[package]] name = "bytecount" version = "0.6.8" @@ -1855,30 +1834,6 @@ dependencies = [ "yaml-rust", ] -[[package]] -name = "connection-router" -version = "0.1.0" -source = "git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f#c0904e1c72c99a174a93b5f6c18b30f52d20b71f" -dependencies = [ - "axelar-wasm-std 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", - "axelar-wasm-std-derive 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", - "cosmwasm-schema 1.5.5", - "cosmwasm-std", - "cosmwasm-storage", - "cw-storage-plus 1.2.0", - "error-stack", - "flagset", - "itertools 0.11.0", - "mockall", - "report 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", - "schemars", - "serde", - "serde_json", - "sha3 0.10.8", - "thiserror", - "valuable", -] - [[package]] name = "consensus-config" version = "0.1.0" @@ -1965,8 +1920,8 @@ checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" name = "coordinator" version = "0.1.2" dependencies = [ - "axelar-wasm-std 0.1.0", - "axelar-wasm-std-derive 0.1.0", + "axelar-wasm-std", + "axelar-wasm-std-derive", "cosmwasm-schema 1.5.5", "cosmwasm-std", "cw-multi-test", @@ -1974,8 +1929,8 @@ dependencies = [ "cw2 1.1.2", "error-stack", "integration-tests", - "multisig 0.3.0", - "report 0.1.0", + "multisig", + "report", "router-api", "thiserror", "tofn", @@ -3223,7 +3178,7 @@ checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" name = "events" version = "0.1.0" dependencies = [ - "axelar-wasm-std 0.1.0", + "axelar-wasm-std", "base64 0.21.7", "cosmrs", "error-stack", @@ -3248,13 +3203,13 @@ dependencies = [ name = "evm-gateway" version = "0.1.0" dependencies = [ - "axelar-wasm-std 0.1.0", + "axelar-wasm-std", "cosmwasm-std", "error-stack", "ethers-contract", "ethers-core", "k256", - "multisig 0.3.0", + "multisig", "router-api", "sha3 0.10.8", "thiserror", @@ -3659,35 +3614,12 @@ dependencies = [ "byteorder", ] -[[package]] -name = "gateway" -version = "0.1.0" -source = "git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f#c0904e1c72c99a174a93b5f6c18b30f52d20b71f" -dependencies = [ - "aggregate-verifier", - "axelar-wasm-std 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", - "axelar-wasm-std-derive 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", - "connection-router", - "cosmwasm-schema 1.5.5", - "cosmwasm-std", - "cosmwasm-storage", - "cw-storage-plus 1.2.0", - "error-stack", - "itertools 0.11.0", - "mockall", - "report 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", - "schemars", - "serde", - "serde_json", - "thiserror", -] - [[package]] name = "gateway" version = "0.2.2" dependencies = [ - "axelar-wasm-std 0.1.0", - "axelar-wasm-std-derive 0.1.0", + "axelar-wasm-std", + "axelar-wasm-std-derive", "client", "cosmwasm-schema 1.5.5", "cosmwasm-std", @@ -3697,12 +3629,12 @@ dependencies = [ "error-stack", "gateway-api", "itertools 0.11.0", - "report 0.1.0", + "report", "router-api", "serde", "serde_json", "thiserror", - "voting-verifier 0.4.0", + "voting-verifier", ] [[package]] @@ -3811,30 +3743,19 @@ dependencies = [ [[package]] name = "gmp-gateway" version = "0.1.0" -source = "git+https://github.com/eigerco/solana-axelar.git?branch=main#1249561eb1da88b1e89d8c6cb085db6054f5d0fd" +source = "git+https://github.com/eigerco/solana-axelar.git?branch=main#681ce307bfaa7b8649e05b1dabd1d4437b5ea4b2" dependencies = [ - "anyhow", "axelar-message-primitives", + "axelar-rkyv-encoding", "base64 0.21.7", - "bcs", "bimap", - "bnum", + "bincode", "borsh 1.5.1", - "bytemuck", - "connection-router", - "cosmwasm-schema 2.0.4", - "cosmwasm-std", - "hex", "itertools 0.12.1", - "libsecp256k1 0.7.1", - "multisig 0.1.0", - "multisig-prover 0.1.0", "num-derive 0.4.2", "num-traits", "program-utils", - "serde", - "sha3 0.10.8", - "solana-program", + "solana-program 2.0.1", "thiserror", ] @@ -4483,27 +4404,27 @@ dependencies = [ name = "integration-tests" version = "0.1.0" dependencies = [ - "axelar-wasm-std 0.1.0", + "axelar-wasm-std", "coordinator", "cosmwasm-std", "cw-multi-test", "error-stack", - "gateway 0.2.2", + "gateway", "gateway-api", "k256", - "multisig 0.3.0", - "multisig-prover 0.5.0", + "multisig", + "multisig-prover", "rand 0.8.5", - "report 0.1.0", - "rewards 0.3.0", + "report", + "rewards", "router", "router-api", "serde", "serde_json", - "service-registry 0.3.0", + "service-registry", "sha3 0.10.8", "tofn", - "voting-verifier 0.4.0", + "voting-verifier", ] [[package]] @@ -5494,38 +5415,12 @@ version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a" -[[package]] -name = "multisig" -version = "0.1.0" -source = "git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f#c0904e1c72c99a174a93b5f6c18b30f52d20b71f" -dependencies = [ - "axelar-wasm-std 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", - "axelar-wasm-std-derive 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", - "connection-router", - "cosmwasm-crypto", - "cosmwasm-schema 1.5.5", - "cosmwasm-std", - "cosmwasm-storage", - "cw-storage-plus 1.2.0", - "enum-display-derive", - "error-stack", - "getrandom 0.2.15", - "k256", - "report 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", - "rewards 0.1.0", - "schemars", - "serde", - "serde_json", - "sha3 0.10.8", - "thiserror", -] - [[package]] name = "multisig" version = "0.3.0" dependencies = [ - "axelar-wasm-std 0.1.0", - "axelar-wasm-std-derive 0.1.0", + "axelar-wasm-std", + "axelar-wasm-std-derive", "cosmwasm-crypto", "cosmwasm-schema 1.5.5", "cosmwasm-std", @@ -5540,8 +5435,8 @@ dependencies = [ "getrandom 0.2.15", "itertools 0.11.0", "k256", - "report 0.1.0", - "rewards 0.3.0", + "report", + "rewards", "router-api", "serde", "serde_json", @@ -5550,45 +5445,13 @@ dependencies = [ "thiserror", ] -[[package]] -name = "multisig-prover" -version = "0.1.0" -source = "git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f#c0904e1c72c99a174a93b5f6c18b30f52d20b71f" -dependencies = [ - "axelar-wasm-std 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", - "axelar-wasm-std-derive 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", - "bcs", - "connection-router", - "cosmwasm-schema 1.5.5", - "cosmwasm-std", - "cosmwasm-storage", - "cw-storage-plus 1.2.0", - "cw-utils 1.0.3", - "either", - "error-stack", - "ethabi", - "gateway 0.1.0", - "hex", - "itertools 0.11.0", - "k256", - "multisig 0.1.0", - "report 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", - "schemars", - "serde", - "serde_json", - "service-registry 0.1.0", - "sha3 0.10.8", - "thiserror", - "voting-verifier 0.1.0", -] - [[package]] name = "multisig-prover" version = "0.5.0" dependencies = [ "anyhow", - "axelar-wasm-std 0.1.0", - "axelar-wasm-std-derive 0.1.0", + "axelar-wasm-std", + "axelar-wasm-std-derive", "bcs", "coordinator", "cosmwasm-schema 1.5.5", @@ -5602,21 +5465,21 @@ dependencies = [ "ethers-contract", "ethers-core", "evm-gateway", - "gateway 0.2.2", + "gateway", "gateway-api", "generic-array", "hex", "itertools 0.11.0", "k256", - "multisig 0.3.0", + "multisig", "prost 0.12.6", - "report 0.1.0", + "report", "router-api", "serde_json", - "service-registry 0.3.0", + "service-registry", "sha3 0.10.8", "thiserror", - "voting-verifier 0.4.0", + "voting-verifier", ] [[package]] @@ -5743,8 +5606,8 @@ dependencies = [ name = "nexus-gateway" version = "0.2.3" dependencies = [ - "axelar-wasm-std 0.1.0", - "axelar-wasm-std-derive 0.1.0", + "axelar-wasm-std", + "axelar-wasm-std-derive", "cosmwasm-schema 1.5.5", "cosmwasm-std", "cw-storage-plus 1.2.0", @@ -5752,12 +5615,12 @@ dependencies = [ "error-stack", "hex", "mockall", - "report 0.1.0", + "report", "router-api", "schemars", "serde", "thiserror", - "voting-verifier 0.4.0", + "voting-verifier", ] [[package]] @@ -6791,10 +6654,10 @@ dependencies = [ [[package]] name = "program-utils" version = "0.1.0" -source = "git+https://github.com/eigerco/solana-axelar.git?branch=main#1249561eb1da88b1e89d8c6cb085db6054f5d0fd" +source = "git+https://github.com/eigerco/solana-axelar.git?branch=main#681ce307bfaa7b8649e05b1dabd1d4437b5ea4b2" dependencies = [ "borsh 1.5.1", - "solana-program", + "solana-program 2.0.1", "thiserror", ] @@ -6972,6 +6835,26 @@ dependencies = [ "cc", ] +[[package]] +name = "ptr_meta" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0738ccf7ea06b608c10564b31debd4f5bc5e197fc8bfe088f68ae5ce81e7a4f1" +dependencies = [ + "ptr_meta_derive", +] + +[[package]] +name = "ptr_meta_derive" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16b845dbfca988fa33db069c0e230574d15a3088f147a87b64c7589eb662c9ac" +dependencies = [ + "proc-macro2 1.0.85", + "quote 1.0.36", + "syn 1.0.109", +] + [[package]] name = "qstring" version = "0.7.2" @@ -7300,20 +7183,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" [[package]] -name = "report" -version = "0.1.0" +name = "rend" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71fe3824f5629716b1589be05dacd749f6aa084c87e00e016714a8cdfccc997c" dependencies = [ - "error-stack", - "eyre", - "itertools 0.11.0", - "thiserror", - "valuable", + "bytecheck", ] [[package]] name = "report" version = "0.1.0" -source = "git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f#c0904e1c72c99a174a93b5f6c18b30f52d20b71f" dependencies = [ "error-stack", "eyre", @@ -7365,30 +7245,12 @@ dependencies = [ "winreg", ] -[[package]] -name = "rewards" -version = "0.1.0" -source = "git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f#c0904e1c72c99a174a93b5f6c18b30f52d20b71f" -dependencies = [ - "axelar-wasm-std 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", - "axelar-wasm-std-derive 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", - "cosmwasm-schema 1.5.5", - "cosmwasm-std", - "cw-storage-plus 1.2.0", - "error-stack", - "itertools 0.11.0", - "mockall", - "report 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", - "serde", - "thiserror", -] - [[package]] name = "rewards" version = "0.3.0" dependencies = [ - "axelar-wasm-std 0.1.0", - "axelar-wasm-std-derive 0.1.0", + "axelar-wasm-std", + "axelar-wasm-std-derive", "cosmwasm-schema 1.5.5", "cosmwasm-std", "cw-multi-test", @@ -7396,7 +7258,7 @@ dependencies = [ "cw2 1.1.2", "error-stack", "itertools 0.11.0", - "report 0.1.0", + "report", "router-api", "thiserror", ] @@ -7450,6 +7312,35 @@ dependencies = [ "digest 0.10.7", ] +[[package]] +name = "rkyv" +version = "0.7.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cba464629b3394fc4dbc6f940ff8f5b4ff5c7aef40f29166fd4ad12acbc99c0" +dependencies = [ + "bitvec 1.0.1", + "bytecheck", + "bytes", + "hashbrown 0.12.3", + "ptr_meta", + "rend", + "rkyv_derive", + "seahash", + "tinyvec", + "uuid 1.8.0", +] + +[[package]] +name = "rkyv_derive" +version = "0.7.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7dddfff8de25e6f62b9d64e6e432bf1c6736c57d20323e15ee10435fbda7c65" +dependencies = [ + "proc-macro2 1.0.85", + "quote 1.0.36", + "syn 1.0.109", +] + [[package]] name = "rlp" version = "0.5.2" @@ -7497,8 +7388,8 @@ dependencies = [ name = "router" version = "0.3.2" dependencies = [ - "axelar-wasm-std 0.1.0", - "axelar-wasm-std-derive 0.1.0", + "axelar-wasm-std", + "axelar-wasm-std-derive", "cosmwasm-schema 1.5.5", "cosmwasm-std", "cw-multi-test", @@ -7512,7 +7403,7 @@ dependencies = [ "itertools 0.11.0", "mockall", "rand 0.8.5", - "report 0.1.0", + "report", "router-api", "serde_json", ] @@ -7521,8 +7412,8 @@ dependencies = [ name = "router-api" version = "0.1.0" dependencies = [ - "axelar-wasm-std 0.1.0", - "axelar-wasm-std-derive 0.1.0", + "axelar-wasm-std", + "axelar-wasm-std-derive", "cosmwasm-schema 1.5.5", "cosmwasm-std", "cw-storage-plus 1.2.0", @@ -7530,7 +7421,7 @@ dependencies = [ "flagset", "hex", "rand 0.8.5", - "report 0.1.0", + "report", "schemars", "serde", "serde_json", @@ -7857,6 +7748,12 @@ dependencies = [ "untrusted 0.9.0", ] +[[package]] +name = "seahash" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b" + [[package]] name = "sec1" version = "0.7.3" @@ -8138,31 +8035,12 @@ dependencies = [ "yaml-rust", ] -[[package]] -name = "service-registry" -version = "0.1.0" -source = "git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f#c0904e1c72c99a174a93b5f6c18b30f52d20b71f" -dependencies = [ - "axelar-wasm-std 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", - "axelar-wasm-std-derive 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", - "connection-router", - "cosmwasm-schema 1.5.5", - "cosmwasm-std", - "cosmwasm-storage", - "cw-storage-plus 1.2.0", - "error-stack", - "report 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", - "schemars", - "serde", - "thiserror", -] - [[package]] name = "service-registry" version = "0.3.0" dependencies = [ - "axelar-wasm-std 0.1.0", - "axelar-wasm-std-derive 0.1.0", + "axelar-wasm-std", + "axelar-wasm-std-derive", "coordinator", "cosmwasm-schema 1.5.5", "cosmwasm-std", @@ -8171,7 +8049,7 @@ dependencies = [ "cw2 1.1.2", "error-stack", "integration-tests", - "report 0.1.0", + "report", "router-api", "schemars", "serde", @@ -8320,6 +8198,12 @@ dependencies = [ "thiserror", ] +[[package]] +name = "simdutf8" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f27f6278552951f1f2b8cf9da965d10969b2efdea95a6ec47987ab46edfe263a" + [[package]] name = "similar" version = "2.5.0" @@ -8684,13 +8568,59 @@ dependencies = [ "sha3 0.10.8", "solana-frozen-abi", "solana-frozen-abi-macro", - "solana-sdk-macro", + "solana-sdk-macro 1.18.17", "thiserror", "tiny-bip39", "wasm-bindgen", "zeroize", ] +[[package]] +name = "solana-program" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9164e89e655a4689de62f0c8066f4a9496e16e5d38ca27c821fc812bac79fa34" +dependencies = [ + "ark-bn254", + "ark-ec", + "ark-ff", + "ark-serialize", + "base64 0.22.1", + "bincode", + "bitflags 2.5.0", + "blake3", + "borsh 0.10.3", + "borsh 1.5.1", + "bs58 0.5.1", + "bv", + "bytemuck", + "bytemuck_derive", + "console_error_panic_hook", + "console_log", + "curve25519-dalek 3.2.1", + "getrandom 0.2.15", + "js-sys", + "lazy_static", + "libsecp256k1 0.6.0", + "log", + "memoffset 0.9.1", + "num-bigint 0.4.5", + "num-derive 0.4.2", + "num-traits", + "parking_lot", + "rand 0.8.5", + "rustc_version", + "rustversion", + "serde", + "serde_bytes", + "serde_derive", + "sha2 0.10.8", + "sha3 0.10.8", + "solana-sdk-macro 2.0.1", + "thiserror", + "wasm-bindgen", +] + [[package]] name = "solana-program-runtime" version = "1.18.17" @@ -8909,8 +8839,8 @@ dependencies = [ "solana-frozen-abi", "solana-frozen-abi-macro", "solana-logger", - "solana-program", - "solana-sdk-macro", + "solana-program 1.18.17", + "solana-sdk-macro 1.18.17", "thiserror", "uriparse", "wasm-bindgen", @@ -8929,6 +8859,19 @@ dependencies = [ "syn 2.0.66", ] +[[package]] +name = "solana-sdk-macro" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b34e8a090f0572191388412636f7682370ad944894dd2d20a8e616159fd8e1b6" +dependencies = [ + "bs58 0.5.1", + "proc-macro2 1.0.85", + "quote 1.0.36", + "rustversion", + "syn 2.0.66", +] + [[package]] name = "solana-security-txt" version = "1.1.1" @@ -9079,7 +9022,7 @@ dependencies = [ "solana-frozen-abi", "solana-frozen-abi-macro", "solana-metrics", - "solana-program", + "solana-program 1.18.17", "solana-program-runtime", "solana-sdk", "thiserror", @@ -9107,7 +9050,7 @@ dependencies = [ "serde", "serde_json", "sha3 0.9.1", - "solana-program", + "solana-program 1.18.17", "solana-sdk", "subtle", "thiserror", @@ -9185,7 +9128,7 @@ dependencies = [ "borsh 0.10.3", "num-derive 0.4.2", "num-traits", - "solana-program", + "solana-program 1.18.17", "spl-token", "spl-token-2022", "thiserror", @@ -9193,12 +9136,12 @@ dependencies = [ [[package]] name = "spl-discriminator" -version = "0.1.1" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "daa600f2fe56f32e923261719bae640d873edadbc5237681a39b8e37bfd4d263" +checksum = "cce5d563b58ef1bb2cdbbfe0dfb9ffdc24903b10ae6a4df2d8f425ece375033f" dependencies = [ "bytemuck", - "solana-program", + "solana-program 1.18.17", "spl-discriminator-derive", ] @@ -9232,31 +9175,31 @@ version = "4.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0f180b03318c3dbab3ef4e1e4d46d5211ae3c780940dd0a28695aba4b59a75a" dependencies = [ - "solana-program", + "solana-program 1.18.17", ] [[package]] name = "spl-pod" -version = "0.1.1" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85a5db7e4efb1107b0b8e52a13f035437cdcb36ef99c58f6d467f089d9b2915a" +checksum = "2881dddfca792737c0706fa0175345ab282b1b0879c7d877bad129645737c079" dependencies = [ "borsh 0.10.3", "bytemuck", - "solana-program", + "solana-program 1.18.17", "solana-zk-token-sdk", "spl-program-error", ] [[package]] name = "spl-program-error" -version = "0.3.1" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e0657b6490196971d9e729520ba934911ff41fbb2cb9004463dbe23cf8b4b4f" +checksum = "249e0318493b6bcf27ae9902600566c689b7dfba9f1bdff5893e92253374e78c" dependencies = [ "num-derive 0.4.2", "num-traits", - "solana-program", + "solana-program 1.18.17", "spl-program-error-derive", "thiserror", ] @@ -9275,12 +9218,12 @@ dependencies = [ [[package]] name = "spl-tlv-account-resolution" -version = "0.5.2" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56f335787add7fa711819f9e7c573f8145a5358a709446fe2d24bf2a88117c90" +checksum = "615d381f48ddd2bb3c57c7f7fb207591a2a05054639b18a62e785117dd7a8683" dependencies = [ "bytemuck", - "solana-program", + "solana-program 1.18.17", "spl-discriminator", "spl-pod", "spl-program-error", @@ -9298,7 +9241,7 @@ dependencies = [ "num-derive 0.3.3", "num-traits", "num_enum 0.6.1", - "solana-program", + "solana-program 1.18.17", "thiserror", ] @@ -9313,7 +9256,7 @@ dependencies = [ "num-derive 0.4.2", "num-traits", "num_enum 0.7.2", - "solana-program", + "solana-program 1.18.17", "solana-security-txt", "solana-zk-token-sdk", "spl-memo", @@ -9333,7 +9276,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b889509d49fa74a4a033ca5dae6c2307e9e918122d97e58562f5c4ffa795c75d" dependencies = [ "bytemuck", - "solana-program", + "solana-program 1.18.17", "spl-discriminator", "spl-pod", "spl-program-error", @@ -9346,7 +9289,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4c16ce3ba6979645fb7627aa1e435576172dd63088dc7848cb09aa331fa1fe4f" dependencies = [ "borsh 0.10.3", - "solana-program", + "solana-program 1.18.17", "spl-discriminator", "spl-pod", "spl-program-error", @@ -9361,7 +9304,7 @@ checksum = "7aabdb7c471566f6ddcee724beb8618449ea24b399e58d464d6b5bc7db550259" dependencies = [ "arrayref", "bytemuck", - "solana-program", + "solana-program 1.18.17", "spl-discriminator", "spl-pod", "spl-program-error", @@ -9371,12 +9314,12 @@ dependencies = [ [[package]] name = "spl-type-length-value" -version = "0.3.1" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f9ebd75d29c5f48de5f6a9c114e08531030b75b8ac2c557600ac7da0b73b1e8" +checksum = "a468e6f6371f9c69aae760186ea9f1a01c2908351b06a5e0026d21cfc4d7ecac" dependencies = [ "bytemuck", - "solana-program", + "solana-program 1.18.17", "spl-discriminator", "spl-pod", "spl-program-error", @@ -10865,36 +10808,12 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" -[[package]] -name = "voting-verifier" -version = "0.1.0" -source = "git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f#c0904e1c72c99a174a93b5f6c18b30f52d20b71f" -dependencies = [ - "axelar-wasm-std 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", - "axelar-wasm-std-derive 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", - "connection-router", - "cosmwasm-schema 1.5.5", - "cosmwasm-std", - "cosmwasm-storage", - "cw-storage-plus 1.2.0", - "either", - "error-stack", - "report 0.1.0 (git+https://github.com/axelarnetwork/axelar-amplifier?rev=c0904e1c72c99a174a93b5f6c18b30f52d20b71f)", - "rewards 0.1.0", - "schemars", - "serde", - "serde_json", - "service-registry 0.1.0", - "sha3 0.10.8", - "thiserror", -] - [[package]] name = "voting-verifier" version = "0.4.0" dependencies = [ - "axelar-wasm-std 0.1.0", - "axelar-wasm-std-derive 0.1.0", + "axelar-wasm-std", + "axelar-wasm-std-derive", "client", "cosmwasm-schema 1.5.5", "cosmwasm-std", @@ -10903,13 +10822,13 @@ dependencies = [ "cw2 1.1.2", "error-stack", "integration-tests", - "multisig 0.3.0", + "multisig", "rand 0.8.5", - "report 0.1.0", - "rewards 0.3.0", + "report", + "rewards", "router-api", "serde_json", - "service-registry 0.3.0", + "service-registry", "sha3 0.10.8", "thiserror", ] diff --git a/ampd/src/handlers/solana_verify_verifier_set.rs b/ampd/src/handlers/solana_verify_verifier_set.rs index ff3579bd2..c4f3d36ed 100644 --- a/ampd/src/handlers/solana_verify_verifier_set.rs +++ b/ampd/src/handlers/solana_verify_verifier_set.rs @@ -2,7 +2,7 @@ use std::borrow::Cow; use std::convert::TryInto; use async_trait::async_trait; -use axelar_message_primitives::command::TransferOperatorshipCommand; +use axelar_message_primitives::command::RotateSignersCommand; use cosmrs::cosmwasm::MsgExecuteContract; use cosmrs::{tx::Msg, Any}; use error_stack::ResultExt; @@ -173,14 +173,14 @@ impl EventHandler for Handler { let gw_event = parse_gateway_event(&sol_tx).map_err(|_| Error::DeserializeEvent)?; match gw_event { - GatewayEvent::OperatorshipTransferred(Cow::Owned(TransferOperatorshipCommand { + GatewayEvent::SignersRotated(Cow::Owned(RotateSignersCommand { command_id: _, destination_chain: _, - operators, + signer_set, weights, quorum, })) => { - let vote = verify_verifier_set(&verifier_set, &operators, &weights, quorum); + let vote = verify_verifier_set(&verifier_set, &signer_set, &weights, quorum); Ok(vec![self .vote_msg(poll_id, vec![vote]) .into_any() diff --git a/ampd/src/solana/msg_verifier.rs b/ampd/src/solana/msg_verifier.rs index c521053fe..dc4c9006a 100644 --- a/ampd/src/solana/msg_verifier.rs +++ b/ampd/src/solana/msg_verifier.rs @@ -137,11 +137,11 @@ fn find_first_log_message_match( mod tests { use base64::{engine::general_purpose, Engine}; use borsh::BorshSerialize; + use gmp_gateway::solana_program::pubkey::Pubkey; use std::str::FromStr; use router_api::ChainName; - use solana_program::pubkey::Pubkey; use super::*; @@ -206,7 +206,7 @@ mod tests { } fn get_tx_log_message( - sender: Pubkey, + sender: gmp_gateway::solana_program::pubkey::Pubkey, destination_chain: Vec, destination_address: Vec, payload: Vec, From 2473630d2bff0f5be199b7d89736dd0a67792564 Mon Sep 17 00:00:00 2001 From: eloylp Date: Tue, 2 Jul 2024 13:21:45 +0200 Subject: [PATCH 065/109] Update Cargo.toml Solana deps --- Cargo.lock | 755 ++++++++++++++++++------------------------------ ampd/Cargo.toml | 23 +- 2 files changed, 291 insertions(+), 487 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 735a51f99..5b36ef95e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -38,15 +38,6 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" -[[package]] -name = "aead" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b613b8e1e3cf911a086f53f03bf286f52fd7a7258e4fa606f0ef220d39d8877" -dependencies = [ - "generic-array", -] - [[package]] name = "aead" version = "0.5.2" @@ -57,18 +48,6 @@ dependencies = [ "generic-array", ] -[[package]] -name = "aes" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e8b47f52ea9bae42228d07ec09eb676433d7c4ed1ebdf0f1d1c29ed446f1ab8" -dependencies = [ - "cfg-if", - "cipher 0.3.0", - "cpufeatures", - "opaque-debug", -] - [[package]] name = "aes" version = "0.8.4" @@ -76,7 +55,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" dependencies = [ "cfg-if", - "cipher 0.4.4", + "cipher", "cpufeatures", ] @@ -86,24 +65,25 @@ version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "831010a0f742e1209b3bcea8fab6a8e149051ba6099432c8cb2cc117dec3ead1" dependencies = [ - "aead 0.5.2", - "aes 0.8.4", - "cipher 0.4.4", - "ctr 0.9.2", + "aead", + "aes", + "cipher", + "ctr", "ghash", "subtle", ] [[package]] name = "aes-gcm-siv" -version = "0.10.3" -source = "git+https://github.com/RustCrypto/AEADs?rev=6105d7a5591aefa646a95d12b5e8d3f55a9214ef#6105d7a5591aefa646a95d12b5e8d3f55a9214ef" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae0784134ba9375416d469ec31e7c5f9fa94405049cf08c5ce5b4698be673e0d" dependencies = [ - "aead 0.4.3", - "aes 0.7.5", - "cipher 0.3.0", - "ctr 0.8.0", - "polyval 0.5.3", + "aead", + "aes", + "cipher", + "ctr", + "polyval", "subtle", "zeroize", ] @@ -221,11 +201,12 @@ dependencies = [ "sha3 0.10.8", "solana-account-decoder", "solana-client", - "solana-program 1.18.17", + "solana-program", "solana-rpc-client-api", "solana-sdk", "solana-transaction-status", "solana-version", + "solana-zk-token-sdk", "sui-json-rpc-types", "sui-types", "tendermint 0.33.0", @@ -281,7 +262,7 @@ dependencies = [ "quinn", "quinn-proto", "rand 0.8.5", - "rcgen 0.9.3", + "rcgen", "ring 0.16.20", "rustls 0.21.12", "rustls-webpki", @@ -771,7 +752,7 @@ dependencies = [ "itertools 0.12.1", "libsecp256k1 0.7.1", "sha3 0.10.8", - "solana-program 2.0.1", + "solana-program", "thiserror", ] @@ -1290,16 +1271,6 @@ dependencies = [ "serde-big-array", ] -[[package]] -name = "borsh" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15bf3650200d8bffa99015595e10f1fbd17de07abbc25bb067da79e769939bfa" -dependencies = [ - "borsh-derive 0.9.3", - "hashbrown 0.11.2", -] - [[package]] name = "borsh" version = "0.10.3" @@ -1317,20 +1288,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a6362ed55def622cddc70a4746a68554d7b687713770de539e59a739b249f8ed" dependencies = [ "borsh-derive 1.5.1", - "cfg_aliases", -] - -[[package]] -name = "borsh-derive" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6441c552f230375d18e3cc377677914d2ca2b0d36e52129fe15450a2dce46775" -dependencies = [ - "borsh-derive-internal 0.9.3", - "borsh-schema-derive-internal 0.9.3", - "proc-macro-crate 0.1.5", - "proc-macro2 1.0.85", - "syn 1.0.109", + "cfg_aliases 0.2.1", ] [[package]] @@ -1339,8 +1297,8 @@ version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0754613691538d51f329cce9af41d7b7ca150bc973056f1156611489475f54f7" dependencies = [ - "borsh-derive-internal 0.10.3", - "borsh-schema-derive-internal 0.10.3", + "borsh-derive-internal", + "borsh-schema-derive-internal", "proc-macro-crate 0.1.5", "proc-macro2 1.0.85", "syn 1.0.109", @@ -1360,17 +1318,6 @@ dependencies = [ "syn_derive", ] -[[package]] -name = "borsh-derive-internal" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5449c28a7b352f2d1e592a8a28bf139bc71afb0764a14f3c02500935d8c44065" -dependencies = [ - "proc-macro2 1.0.85", - "quote 1.0.36", - "syn 1.0.109", -] - [[package]] name = "borsh-derive-internal" version = "0.10.3" @@ -1382,17 +1329,6 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "borsh-schema-derive-internal" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdbd5696d8bfa21d53d9fe39a714a18538bad11492a42d066dbbc395fb1951c0" -dependencies = [ - "proc-macro2 1.0.85", - "quote 1.0.36", - "syn 1.0.109", -] - [[package]] name = "borsh-schema-derive-internal" version = "0.10.3" @@ -1605,7 +1541,7 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "26b52a9543ae338f279b96b0b9fed9c8093744685043739079ce85cd58f289a6" dependencies = [ - "cipher 0.4.4", + "cipher", ] [[package]] @@ -1625,6 +1561,12 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "cfg_aliases" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" + [[package]] name = "cfg_aliases" version = "0.2.1" @@ -1646,15 +1588,6 @@ dependencies = [ "windows-targets 0.52.5", ] -[[package]] -name = "cipher" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7" -dependencies = [ - "generic-array", -] - [[package]] name = "cipher" version = "0.4.4" @@ -1892,12 +1825,6 @@ dependencies = [ "serde", ] -[[package]] -name = "const-oid" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4c78c047431fee22c1a7bb92e00ad095a02a983affe4d8a72e2a2c62c1b94f3" - [[package]] name = "const-oid" version = "0.9.6" @@ -2196,22 +2123,13 @@ dependencies = [ "sct 0.6.1", ] -[[package]] -name = "ctr" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "049bb91fb4aaf0e3c7efa6cd5ef877dbbbd15b39dad06d9948de4ec8a75761ea" -dependencies = [ - "cipher 0.3.0", -] - [[package]] name = "ctr" version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" dependencies = [ - "cipher 0.4.4", + "cipher", ] [[package]] @@ -2475,22 +2393,13 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "der" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6919815d73839e7ad218de758883aae3a257ba6759ce7a9992501efbb53d705c" -dependencies = [ - "const-oid 0.7.1", -] - [[package]] name = "der" version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f1a467a65c5e759bce6e65eaf91cc29f466cdc57cb65777bd646872a8a1fd4de" dependencies = [ - "const-oid 0.9.6", + "const-oid", "pem-rfc7468 0.6.0", "zeroize", ] @@ -2501,7 +2410,7 @@ version = "0.7.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0" dependencies = [ - "const-oid 0.9.6", + "const-oid", "der_derive", "pem-rfc7468 0.7.0", "zeroize", @@ -2623,7 +2532,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ "block-buffer 0.10.4", - "const-oid 0.9.6", + "const-oid", "crypto-common", "subtle", ] @@ -3230,7 +3139,7 @@ name = "fastcrypto" version = "0.1.8" source = "git+https://github.com/MystenLabs/fastcrypto?rev=4988a4744fcaf8bc7f60bf660d9a223ed0f54cc6#4988a4744fcaf8bc7f60bf660d9a223ed0f54cc6" dependencies = [ - "aes 0.8.4", + "aes", "aes-gcm", "ark-ec", "ark-ff", @@ -3244,7 +3153,7 @@ dependencies = [ "blst", "bs58 0.4.0", "cbc", - "ctr 0.9.2", + "ctr", "curve25519-dalek-ng", "derive_more", "digest 0.10.7", @@ -3700,7 +3609,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0d8a4362ccb29cb0b265253fb0a2728f592895ee6854fd9bc13f2ffda266ff1" dependencies = [ "opaque-debug", - "polyval 0.6.2", + "polyval", ] [[package]] @@ -3755,7 +3664,7 @@ dependencies = [ "num-derive 0.4.2", "num-traits", "program-utils", - "solana-program 2.0.1", + "solana-program", "thiserror", ] @@ -3811,15 +3720,6 @@ dependencies = [ "byteorder", ] -[[package]] -name = "hashbrown" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" -dependencies = [ - "ahash 0.7.8", -] - [[package]] name = "hashbrown" version = "0.12.3" @@ -4262,8 +4162,6 @@ dependencies = [ "bitmaps", "rand_core 0.6.4", "rand_xoshiro", - "rayon", - "serde", "sized-chunks", "typenum", "version_check", @@ -4840,18 +4738,6 @@ dependencies = [ "libsecp256k1-core 0.3.0", ] -[[package]] -name = "light-poseidon" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c9a85a9752c549ceb7578064b4ed891179d20acd85f27318573b64d2d7ee7ee" -dependencies = [ - "ark-bn254", - "ark-ff", - "num-bigint 0.4.5", - "thiserror", -] - [[package]] name = "linked-hash-map" version = "0.5.6" @@ -4934,15 +4820,6 @@ dependencies = [ "libc", ] -[[package]] -name = "memoffset" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4" -dependencies = [ - "autocfg", -] - [[package]] name = "memoffset" version = "0.9.1" @@ -5625,15 +5502,15 @@ dependencies = [ [[package]] name = "nix" -version = "0.26.4" +version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b" +checksum = "ab2156c4fce2f8df6c499cc1c763e4394b7482525bf2a9701c9d79d215f519e4" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.5.0", "cfg-if", + "cfg_aliases 0.1.1", "libc", - "memoffset 0.7.1", - "pin-utils", + "memoffset", ] [[package]] @@ -6411,17 +6288,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "pkcs8" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cabda3fb821068a9a4fab19a683eac3af12edf0f34b94a8be53c4972b8149d0" -dependencies = [ - "der 0.5.1", - "spki 0.5.4", - "zeroize", -] - [[package]] name = "pkcs8" version = "0.9.0" @@ -6454,18 +6320,6 @@ version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" -[[package]] -name = "polyval" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8419d2b623c7c0896ff2d5d96e2cb4ede590fed28fcc34934f4c33c036e620a1" -dependencies = [ - "cfg-if", - "cpufeatures", - "opaque-debug", - "universal-hash 0.4.1", -] - [[package]] name = "polyval" version = "0.6.2" @@ -6475,7 +6329,7 @@ dependencies = [ "cfg-if", "cpufeatures", "opaque-debug", - "universal-hash 0.5.1", + "universal-hash", ] [[package]] @@ -6657,7 +6511,7 @@ version = "0.1.0" source = "git+https://github.com/eigerco/solana-axelar.git?branch=main#681ce307bfaa7b8649e05b1dabd1d4437b5ea4b2" dependencies = [ "borsh 1.5.1", - "solana-program 2.0.1", + "solana-program", "thiserror", ] @@ -6864,17 +6718,6 @@ dependencies = [ "percent-encoding", ] -[[package]] -name = "qualifier_attr" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e2e25ee72f5b24d773cae88422baddefff7714f97aab68d96fe2b6fc4a28fb2" -dependencies = [ - "proc-macro2 1.0.85", - "quote 1.0.36", - "syn 2.0.66", -] - [[package]] name = "quick-error" version = "1.2.3" @@ -7090,18 +6933,6 @@ dependencies = [ "yasna", ] -[[package]] -name = "rcgen" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffbe84efe2f38dea12e9bfc1f65377fdf03e53a18cb3b995faedf7934c7e785b" -dependencies = [ - "pem", - "ring 0.16.20", - "time", - "yasna", -] - [[package]] name = "readonly" version = "0.2.12" @@ -7223,6 +7054,7 @@ dependencies = [ "js-sys", "log", "mime", + "mime_guess", "once_cell", "percent-encoding", "pin-project-lite", @@ -7245,6 +7077,21 @@ dependencies = [ "winreg", ] +[[package]] +name = "reqwest-middleware" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a735987236a8e238bf0296c7e351b999c188ccc11477f311b82b55c93984216" +dependencies = [ + "anyhow", + "async-trait", + "http 0.2.12", + "reqwest", + "serde", + "task-local-extensions", + "thiserror", +] + [[package]] name = "rewards" version = "0.3.0" @@ -8287,14 +8134,14 @@ dependencies = [ [[package]] name = "solana-account-decoder" -version = "1.18.17" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4973213a11c2e1b924b36e0c6688682b5aa4623f8d4eeaa1204c32cee524e6d6" +checksum = "c6ad8e8ea9c15fef1ee50b65beb61c5a298d97600d63721c834658a5e7fb6564" dependencies = [ "Inflector", - "base64 0.21.7", + "base64 0.22.1", "bincode", - "bs58 0.4.0", + "bs58 0.5.1", "bv", "lazy_static", "serde", @@ -8312,9 +8159,9 @@ dependencies = [ [[package]] name = "solana-clap-utils" -version = "1.18.17" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "909f4553d0b31bb5b97533a6b64cc321a4eace9112d6efbabcf4408ea1b3f1db" +checksum = "09e6f9acdd27a5ae888f7f3e1820f5b50bea4d74d60eb75d96e5f82fea58c8cc" dependencies = [ "chrono", "clap 2.34.0", @@ -8329,9 +8176,9 @@ dependencies = [ [[package]] name = "solana-client" -version = "1.18.17" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5cc431df6cc1dd964134fa4ec7df765d3af3fae9c2148f96a3c4fb500290633" +checksum = "e4d5c1fab1945962c380e1be11a6081e68ccabafe3bafead2c19393a132887ec" dependencies = [ "async-trait", "bincode", @@ -8360,11 +8207,21 @@ dependencies = [ "tokio", ] +[[package]] +name = "solana-compute-budget" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9c82354d659776e22807b3dfa6a1eb23dbf9f9a1a72b9a99ecb6a56f9a0e832" +dependencies = [ + "rustc_version", + "solana-sdk", +] + [[package]] name = "solana-config-program" -version = "1.18.17" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e38b040d3a42e8f7d80c4a86bb0d49d7aed663b56b0fe0ae135d2d145fb7ae3a" +checksum = "57b94efabb36a5f380632c6c7a3cd44b515c6ae4637464bb0f40d69581c1365d" dependencies = [ "bincode", "chrono", @@ -8376,9 +8233,9 @@ dependencies = [ [[package]] name = "solana-connection-cache" -version = "1.18.17" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae02622c63943485f0af3d0896626eaf6478e734f0b6bc61c7cc5320963c6e75" +checksum = "c020b32972894093ca5dacb8f67e649a6148cd7d7bf4c5ff61c5f4745cfb6b0a" dependencies = [ "async-trait", "bincode", @@ -8388,7 +8245,6 @@ dependencies = [ "log", "rand 0.8.5", "rayon", - "rcgen 0.10.0", "solana-measure", "solana-metrics", "solana-sdk", @@ -8397,47 +8253,34 @@ dependencies = [ ] [[package]] -name = "solana-frozen-abi" -version = "1.18.17" +name = "solana-curve25519" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4867f66e9527fa44451c861c1dc6d9b2a7c7a668d7c6a297cdefbe39f4395b33" +checksum = "c9c4692f4eeb32f6b1b968250f3301927590debb056841f1134f6d098d3c0ec5" dependencies = [ - "block-buffer 0.10.4", - "bs58 0.4.0", - "bv", - "either", - "generic-array", - "im", - "lazy_static", - "log", - "memmap2", - "rustc_version", - "serde", - "serde_bytes", - "serde_derive", - "sha2 0.10.8", - "solana-frozen-abi-macro", - "subtle", + "bytemuck", + "bytemuck_derive", + "curve25519-dalek 3.2.1", + "solana-program", "thiserror", ] [[package]] -name = "solana-frozen-abi-macro" -version = "1.18.17" +name = "solana-inline-spl" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "168f24d97347b85f05192df58d6be3e3047a4aadc4001bc1b9e711a5ec878eea" +checksum = "b5f6170e189fc780aea44b4dfca1fe63f2a0578d376afcb779bdd0514a6df385" dependencies = [ - "proc-macro2 1.0.85", - "quote 1.0.36", + "bytemuck", "rustc_version", - "syn 2.0.66", + "solana-sdk", ] [[package]] name = "solana-logger" -version = "1.18.17" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0511082fc62f2d086520fff5aa1917c389d8c840930c08ad255ae05952c08a2" +checksum = "6e7910af7fc8b30676c4a3e2f604ffd1aa75a4305fc76b66a3b1779fa8d532b0" dependencies = [ "env_logger", "lazy_static", @@ -8446,9 +8289,9 @@ dependencies = [ [[package]] name = "solana-measure" -version = "1.18.17" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be55a3df105431d25f86f2a7da0cbbde5f54c1f0782ca59367ea4a8037bc6797" +checksum = "7e6d5d143e70170098a614d96b5038c5820dce6ea1de636df47eee3f3ad1dfb8" dependencies = [ "log", "solana-sdk", @@ -8456,9 +8299,9 @@ dependencies = [ [[package]] name = "solana-metrics" -version = "1.18.17" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddec097ed7572804389195128dbd57958b427829153c6cd8ec3343c86fe3cd22" +checksum = "0a0bfb194f5f80eada89b9169a2bbf22a238fb3c733b19f1dae08e6054fdd036" dependencies = [ "crossbeam-channel", "gethostname", @@ -8471,9 +8314,9 @@ dependencies = [ [[package]] name = "solana-net-utils" -version = "1.18.17" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "258fa7c29fb7605b8d2ed89aa0d43c640d14f4147ad1f5b3fdad19a1ac145ca5" +checksum = "a1e5caadd2e9be6ed83b2f219d731e4407dc1a6368103ac1bfc709d63de32a18" dependencies = [ "bincode", "clap 3.2.25", @@ -8487,15 +8330,16 @@ dependencies = [ "solana-logger", "solana-sdk", "solana-version", + "static_assertions", "tokio", "url", ] [[package]] name = "solana-perf" -version = "1.18.17" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca422edcf16a6e64003ca118575ea641f7b750f14a0ad28c71dd84f33dcb912a" +checksum = "ac09983091108c30e55d672e8a0690a1f2a952131aafa2e0e503fb4eb97b0f91" dependencies = [ "ahash 0.8.11", "bincode", @@ -8512,69 +8356,12 @@ dependencies = [ "rayon", "rustc_version", "serde", - "solana-frozen-abi", - "solana-frozen-abi-macro", "solana-metrics", "solana-rayon-threadlimit", "solana-sdk", "solana-vote-program", ] -[[package]] -name = "solana-program" -version = "1.18.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bc5a636dc75e5c25651e34f7a36afc9ae60d38166687c5b0375abb580ac81a2" -dependencies = [ - "ark-bn254", - "ark-ec", - "ark-ff", - "ark-serialize", - "base64 0.21.7", - "bincode", - "bitflags 2.5.0", - "blake3", - "borsh 0.10.3", - "borsh 0.9.3", - "borsh 1.5.1", - "bs58 0.4.0", - "bv", - "bytemuck", - "cc", - "console_error_panic_hook", - "console_log", - "curve25519-dalek 3.2.1", - "getrandom 0.2.15", - "itertools 0.10.5", - "js-sys", - "lazy_static", - "libc", - "libsecp256k1 0.6.0", - "light-poseidon", - "log", - "memoffset 0.9.1", - "num-bigint 0.4.5", - "num-derive 0.4.2", - "num-traits", - "parking_lot", - "rand 0.8.5", - "rustc_version", - "rustversion", - "serde", - "serde_bytes", - "serde_derive", - "serde_json", - "sha2 0.10.8", - "sha3 0.10.8", - "solana-frozen-abi", - "solana-frozen-abi-macro", - "solana-sdk-macro 1.18.17", - "thiserror", - "tiny-bip39", - "wasm-bindgen", - "zeroize", -] - [[package]] name = "solana-program" version = "2.0.1" @@ -8603,7 +8390,7 @@ dependencies = [ "lazy_static", "libsecp256k1 0.6.0", "log", - "memoffset 0.9.1", + "memoffset", "num-bigint 0.4.5", "num-derive 0.4.2", "num-traits", @@ -8616,22 +8403,22 @@ dependencies = [ "serde_derive", "sha2 0.10.8", "sha3 0.10.8", - "solana-sdk-macro 2.0.1", + "solana-sdk-macro", "thiserror", "wasm-bindgen", ] [[package]] name = "solana-program-runtime" -version = "1.18.17" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf373c3da0387f47fee4c5ed2465a9628b9db026a62211a692a9285aa9251544" +checksum = "7cf73f57b6bee272608c6835369cce8a3d9da82436c4b072eaf04d5623510cf8" dependencies = [ - "base64 0.21.7", + "base64 0.22.1", "bincode", "eager", "enum-iterator", - "itertools 0.10.5", + "itertools 0.12.1", "libc", "log", "num-derive 0.4.2", @@ -8640,20 +8427,21 @@ dependencies = [ "rand 0.8.5", "rustc_version", "serde", - "solana-frozen-abi", - "solana-frozen-abi-macro", + "solana-compute-budget", "solana-measure", "solana-metrics", "solana-sdk", + "solana-type-overrides", + "solana-vote", "solana_rbpf", "thiserror", ] [[package]] name = "solana-pubsub-client" -version = "1.18.17" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97b9abc76168d19927561db6a3685b98752bd0961b4ce4f8b7f85ee12238c017" +checksum = "f572dae6680b15f42ee53505c0384a9f5be06424e6a62364449efb6f23cbde0b" dependencies = [ "crossbeam-channel", "futures-util", @@ -8676,19 +8464,18 @@ dependencies = [ [[package]] name = "solana-quic-client" -version = "1.18.17" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7952c5306a0be5f5276448cd20246b31265bfa884f29a077a24303c6a16aeb34" +checksum = "2b773efed5939b2c7c2b9490f529f5dc3f5f940dbac5b2f514050fe871333ce1" dependencies = [ "async-mutex", "async-trait", "futures", - "itertools 0.10.5", + "itertools 0.12.1", "lazy_static", "log", "quinn", "quinn-proto", - "rcgen 0.10.0", "rustls 0.21.12", "solana-connection-cache", "solana-measure", @@ -8703,9 +8490,9 @@ dependencies = [ [[package]] name = "solana-rayon-threadlimit" -version = "1.18.17" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4fa0cc66f8e73d769bca2ede3012ba2ef8ab67963e832808665369f2cf81743" +checksum = "ccedf79026e11772482536696603a67eda3d07b497e1ec9eed6692e466a6bf37" dependencies = [ "lazy_static", "num_cpus", @@ -8713,9 +8500,9 @@ dependencies = [ [[package]] name = "solana-remote-wallet" -version = "1.18.17" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "289803796d4ff7b4699504d3ab9e9d9c5205ea3892b2ebe397b377494dbd75d4" +checksum = "9c7c9dd69628898c5235810b2cdddb26f8c5a3176f6567971a72aac9538f2d32" dependencies = [ "console", "dialoguer", @@ -8732,17 +8519,18 @@ dependencies = [ [[package]] name = "solana-rpc-client" -version = "1.18.17" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6cb55a08018776a62ecff52139fbcdab1a7baa4e8f077202be58156e8dde4d5f" +checksum = "5845db742a0bf27662c592750f8029fa25f0d1c2700798e9bdf8a664744d6df4" dependencies = [ "async-trait", - "base64 0.21.7", + "base64 0.22.1", "bincode", - "bs58 0.4.0", + "bs58 0.5.1", "indicatif", "log", "reqwest", + "reqwest-middleware", "semver", "serde", "serde_derive", @@ -8758,31 +8546,33 @@ dependencies = [ [[package]] name = "solana-rpc-client-api" -version = "1.18.17" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72a8403038f4d6ab65bc7e7afb3afe8d9824c592232553c5cef55cf3de36025d" +checksum = "402af4866a7f9b96ffe45792932d43585504b7a92d0b75ae23a9a14fd1b1820f" dependencies = [ - "base64 0.21.7", - "bs58 0.4.0", + "anyhow", + "base64 0.22.1", + "bs58 0.5.1", "jsonrpc-core", "reqwest", + "reqwest-middleware", "semver", "serde", "serde_derive", "serde_json", "solana-account-decoder", + "solana-inline-spl", "solana-sdk", "solana-transaction-status", "solana-version", - "spl-token-2022", "thiserror", ] [[package]] name = "solana-rpc-client-nonce-utils" -version = "1.18.17" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4caca735caf76d51c074c3bacbfe38094bf7f92cfbe7b5b13f3bc4946e64f889" +checksum = "d75a1bb67541534c31b043e4fe5bfd3f4aaa04dca48e1c1e06b24c3e34f64f47" dependencies = [ "clap 2.34.0", "solana-clap-utils", @@ -8793,17 +8583,16 @@ dependencies = [ [[package]] name = "solana-sdk" -version = "1.18.17" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df43d3a1e1637397ab43cbc216a5a8f977ec8a3cc3f3ae8c3851c83a3255dbcf" +checksum = "5f079f55dc33a4be11ddbc8b57c92ba4bb222a317c99c24b86a5190e354c1b49" dependencies = [ - "assert_matches", - "base64 0.21.7", "bincode", "bitflags 2.5.0", "borsh 1.5.1", - "bs58 0.4.0", + "bs58 0.5.1", "bytemuck", + "bytemuck_derive", "byteorder", "chrono", "derivation-path", @@ -8811,19 +8600,17 @@ dependencies = [ "ed25519-dalek 1.0.1", "ed25519-dalek-bip32", "generic-array", + "getrandom 0.1.16", "hmac 0.12.1", - "itertools 0.10.5", + "itertools 0.12.1", "js-sys", "lazy_static", "libsecp256k1 0.6.0", "log", "memmap2", - "num-derive 0.4.2", - "num-traits", "num_enum 0.7.2", "pbkdf2 0.11.0", "qstring", - "qualifier_attr", "rand 0.7.3", "rand 0.8.5", "rustc_version", @@ -8836,29 +8623,13 @@ dependencies = [ "sha2 0.10.8", "sha3 0.10.8", "siphasher", - "solana-frozen-abi", - "solana-frozen-abi-macro", - "solana-logger", - "solana-program 1.18.17", - "solana-sdk-macro 1.18.17", + "solana-program", + "solana-sdk-macro", "thiserror", "uriparse", "wasm-bindgen", ] -[[package]] -name = "solana-sdk-macro" -version = "1.18.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86c76414183a325038ff020b22c07d1e9d2da0703ddc0244acfed37ee2921d96" -dependencies = [ - "bs58 0.4.0", - "proc-macro2 1.0.85", - "quote 1.0.36", - "rustversion", - "syn 2.0.66", -] - [[package]] name = "solana-sdk-macro" version = "2.0.1" @@ -8880,32 +8651,33 @@ checksum = "468aa43b7edb1f9b7b7b686d5c3aeb6630dc1708e86e31343499dd5c4d775183" [[package]] name = "solana-streamer" -version = "1.18.17" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fad1bdb955ec6d23a1dbf87e403ff3e610d68616275693125a893d7ed4b2d323" +checksum = "0be38cba86a24f96a4de90ff55d013e15e12e80bedb1cc5cac3f588a6d5e17ed" dependencies = [ "async-channel", "bytes", "crossbeam-channel", + "dashmap", "futures-util", "histogram", "indexmap 2.2.6", - "itertools 0.10.5", + "itertools 0.12.1", "libc", "log", "nix", "pem", "percentage", - "pkcs8 0.8.0", "quinn", "quinn-proto", "rand 0.8.5", - "rcgen 0.10.0", "rustls 0.21.12", "smallvec", + "solana-measure", "solana-metrics", "solana-perf", "solana-sdk", + "solana-transaction-metrics-tracker", "thiserror", "tokio", "x509-parser", @@ -8913,9 +8685,9 @@ dependencies = [ [[package]] name = "solana-thin-client" -version = "1.18.17" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc301310ba0755c449a8800136f67f8ad14419b366404629894cd10021495360" +checksum = "ace093fb66a27045b9026bb66273eea68fa93de6f9911caa6deb724c6ce6ef27" dependencies = [ "bincode", "log", @@ -8928,9 +8700,9 @@ dependencies = [ [[package]] name = "solana-tpu-client" -version = "1.18.17" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb887bd5078ff015e103e9ee54a6713380590efa8ff1804b3a653f07188928c6" +checksum = "ee3f11bceb7cd61a607cbe45d76ac768106bfc6ca95ee4d0eaf9a9cd95de24c4" dependencies = [ "async-trait", "bincode", @@ -8950,17 +8722,33 @@ dependencies = [ "tokio", ] +[[package]] +name = "solana-transaction-metrics-tracker" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6ae0fea8d585c06692eaf09f2a042d5691a77016b7ea2eb7fde71eb75319bd0" +dependencies = [ + "Inflector", + "base64 0.22.1", + "bincode", + "lazy_static", + "log", + "rand 0.8.5", + "solana-perf", + "solana-sdk", +] + [[package]] name = "solana-transaction-status" -version = "1.18.17" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a0cdfdf63192fb60de094fae8e81159e4e3e9aac9659fe3f9ef0e707023fb32" +checksum = "f91a8938f050c4e1db66ca95c7476d934e1d3ef0a6f78a212276cb6cd01cf8e5" dependencies = [ "Inflector", - "base64 0.21.7", + "base64 0.22.1", "bincode", - "borsh 0.10.3", - "bs58 0.4.0", + "borsh 1.5.1", + "bs58 0.5.1", "lazy_static", "log", "serde", @@ -8972,14 +8760,26 @@ dependencies = [ "spl-memo", "spl-token", "spl-token-2022", + "spl-token-group-interface", + "spl-token-metadata-interface", "thiserror", ] +[[package]] +name = "solana-type-overrides" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37a5a6db71f2b1d264e8b8d747ee0f43dc9ff41c5ca51647ed290bab4dd15f5c" +dependencies = [ + "lazy_static", + "rand 0.8.5", +] + [[package]] name = "solana-udp-client" -version = "1.18.17" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ea0d6d8d66e36371577f51c4d1d6192a66f1fa4efe7161a36d94677640dcadb" +checksum = "a729615d5dfd1097dd1cbbd39c62d0e701b2efc20d43943f926c2dc6ed1f95a7" dependencies = [ "async-trait", "solana-connection-cache", @@ -8992,25 +8792,38 @@ dependencies = [ [[package]] name = "solana-version" -version = "1.18.17" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f4c2f531c22ce806b211118be8928a791425f97de4592371fb57b246ed33e34" +checksum = "cc214c8fb792d7b01a014a7f1b5ebe1efc551c6ffa554dfa55107d75b7657b5b" dependencies = [ "log", "rustc_version", "semver", "serde", "serde_derive", - "solana-frozen-abi", - "solana-frozen-abi-macro", "solana-sdk", ] +[[package]] +name = "solana-vote" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4f925206879ceca8dff96798d3ee54a827e1ec7afbc036c438cb386bc817881" +dependencies = [ + "itertools 0.12.1", + "log", + "rustc_version", + "serde", + "serde_derive", + "solana-sdk", + "thiserror", +] + [[package]] name = "solana-vote-program" -version = "1.18.17" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d8a6486017e71a3714a8e1a635e17209135cc20535ba9808ccf106d80ff6e8b" +checksum = "e80043ab279573f5f804c8e650956dd95587a12a38694a78e38c2e317bb635c1" dependencies = [ "bincode", "log", @@ -9019,10 +8832,8 @@ dependencies = [ "rustc_version", "serde", "serde_derive", - "solana-frozen-abi", - "solana-frozen-abi-macro", "solana-metrics", - "solana-program 1.18.17", + "solana-program", "solana-program-runtime", "solana-sdk", "thiserror", @@ -9030,27 +8841,29 @@ dependencies = [ [[package]] name = "solana-zk-token-sdk" -version = "1.18.17" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "513407f88394e437b4ff5aad892bc5bf51a655ae2401e6e63549734d3695c46f" +checksum = "729f832ad0cca51f73909b5a9d375ee77c0e608e7474155bf39da30a33abd778" dependencies = [ "aes-gcm-siv", - "base64 0.21.7", + "base64 0.22.1", "bincode", "bytemuck", + "bytemuck_derive", "byteorder", "curve25519-dalek 3.2.1", - "getrandom 0.1.16", - "itertools 0.10.5", + "itertools 0.12.1", "lazy_static", "merlin", "num-derive 0.4.2", "num-traits", "rand 0.7.3", "serde", + "serde_derive", "serde_json", "sha3 0.9.1", - "solana-program 1.18.17", + "solana-curve25519", + "solana-program", "solana-sdk", "subtle", "thiserror", @@ -9059,9 +8872,9 @@ dependencies = [ [[package]] name = "solana_rbpf" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d457cc2ba742c120492a64b7fa60e22c575e891f6b55039f4d736568fb112a3" +checksum = "06beab07f4104d6ad70d47baa67ad1bcd501a2345a983e20c389bade7c72305e" dependencies = [ "byteorder", "combine", @@ -9088,16 +8901,6 @@ version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" -[[package]] -name = "spki" -version = "0.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44d01ac02a6ccf3e07db148d2be087da624fea0221a16152ed01f0496a6b0a27" -dependencies = [ - "base64ct", - "der 0.5.1", -] - [[package]] name = "spki" version = "0.6.0" @@ -9120,15 +8923,15 @@ dependencies = [ [[package]] name = "spl-associated-token-account" -version = "2.3.0" +version = "3.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "992d9c64c2564cc8f63a4b508bf3ebcdf2254b0429b13cd1d31adb6162432a5f" +checksum = "a2e688554bac5838217ffd1fab7845c573ff106b6336bf7d290db7c98d5a8efd" dependencies = [ "assert_matches", - "borsh 0.10.3", + "borsh 1.5.1", "num-derive 0.4.2", "num-traits", - "solana-program 1.18.17", + "solana-program", "spl-token", "spl-token-2022", "thiserror", @@ -9136,20 +8939,20 @@ dependencies = [ [[package]] name = "spl-discriminator" -version = "0.1.0" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cce5d563b58ef1bb2cdbbfe0dfb9ffdc24903b10ae6a4df2d8f425ece375033f" +checksum = "34d1814406e98b08c5cd02c1126f83fd407ad084adce0b05fda5730677822eac" dependencies = [ "bytemuck", - "solana-program 1.18.17", + "solana-program", "spl-discriminator-derive", ] [[package]] name = "spl-discriminator-derive" -version = "0.1.2" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07fd7858fc4ff8fb0e34090e41d7eb06a823e1057945c26d480bfc21d2338a93" +checksum = "d9e8418ea6269dcfb01c712f0444d2c75542c04448b480e87de59d2865edc750" dependencies = [ "quote 1.0.36", "spl-discriminator-syn", @@ -9158,9 +8961,9 @@ dependencies = [ [[package]] name = "spl-discriminator-syn" -version = "0.1.2" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18fea7be851bd98d10721782ea958097c03a0c2a07d8d4997041d0ece6319a63" +checksum = "8c1f05593b7ca9eac7caca309720f2eafb96355e037e6d373b909a80fe7b69b9" dependencies = [ "proc-macro2 1.0.85", "quote 1.0.36", @@ -9171,44 +8974,44 @@ dependencies = [ [[package]] name = "spl-memo" -version = "4.0.0" +version = "4.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0f180b03318c3dbab3ef4e1e4d46d5211ae3c780940dd0a28695aba4b59a75a" +checksum = "58e9bae02de3405079a057fe244c867a08f92d48327d231fc60da831f94caf0a" dependencies = [ - "solana-program 1.18.17", + "solana-program", ] [[package]] name = "spl-pod" -version = "0.1.0" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2881dddfca792737c0706fa0175345ab282b1b0879c7d877bad129645737c079" +checksum = "046ce669f48cf2eca1ec518916d8725596bfb655beb1c74374cf71dc6cb773c9" dependencies = [ - "borsh 0.10.3", + "borsh 1.5.1", "bytemuck", - "solana-program 1.18.17", + "solana-program", "solana-zk-token-sdk", "spl-program-error", ] [[package]] name = "spl-program-error" -version = "0.3.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "249e0318493b6bcf27ae9902600566c689b7dfba9f1bdff5893e92253374e78c" +checksum = "49065093ea91f57b9b2bd81493ff705e2ad4e64507a07dbc02b085778e02770e" dependencies = [ "num-derive 0.4.2", "num-traits", - "solana-program 1.18.17", + "solana-program", "spl-program-error-derive", "thiserror", ] [[package]] name = "spl-program-error-derive" -version = "0.3.2" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1845dfe71fd68f70382232742e758557afe973ae19e6c06807b2c30f5d5cb474" +checksum = "e6d375dd76c517836353e093c2dbb490938ff72821ab568b545fd30ab3256b3e" dependencies = [ "proc-macro2 1.0.85", "quote 1.0.36", @@ -9218,12 +9021,12 @@ dependencies = [ [[package]] name = "spl-tlv-account-resolution" -version = "0.5.1" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "615d381f48ddd2bb3c57c7f7fb207591a2a05054639b18a62e785117dd7a8683" +checksum = "cace91ba08984a41556efe49cbf2edca4db2f577b649da7827d3621161784bf8" dependencies = [ "bytemuck", - "solana-program 1.18.17", + "solana-program", "spl-discriminator", "spl-pod", "spl-program-error", @@ -9232,31 +9035,31 @@ dependencies = [ [[package]] name = "spl-token" -version = "4.0.0" +version = "4.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08459ba1b8f7c1020b4582c4edf0f5c7511a5e099a7a97570c9698d4f2337060" +checksum = "95ae123223633a389f95d1da9d49c2d0a50d499e7060b9624626a69e536ad2a4" dependencies = [ "arrayref", "bytemuck", - "num-derive 0.3.3", + "num-derive 0.4.2", "num-traits", - "num_enum 0.6.1", - "solana-program 1.18.17", + "num_enum 0.7.2", + "solana-program", "thiserror", ] [[package]] name = "spl-token-2022" -version = "1.0.0" +version = "3.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d697fac19fd74ff472dfcc13f0b442dd71403178ce1de7b5d16f83a33561c059" +checksum = "e5412f99ae7ee6e0afde00defaa354e6228e47e30c0e3adf553e2e01e6abb584" dependencies = [ "arrayref", "bytemuck", "num-derive 0.4.2", "num-traits", "num_enum 0.7.2", - "solana-program 1.18.17", + "solana-program", "solana-security-txt", "solana-zk-token-sdk", "spl-memo", @@ -9271,12 +9074,12 @@ dependencies = [ [[package]] name = "spl-token-group-interface" -version = "0.1.0" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b889509d49fa74a4a033ca5dae6c2307e9e918122d97e58562f5c4ffa795c75d" +checksum = "d419b5cfa3ee8e0f2386fd7e02a33b3ec8a7db4a9c7064a2ea24849dc4a273b6" dependencies = [ "bytemuck", - "solana-program 1.18.17", + "solana-program", "spl-discriminator", "spl-pod", "spl-program-error", @@ -9284,12 +9087,12 @@ dependencies = [ [[package]] name = "spl-token-metadata-interface" -version = "0.2.0" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c16ce3ba6979645fb7627aa1e435576172dd63088dc7848cb09aa331fa1fe4f" +checksum = "30179c47e93625680dabb620c6e7931bd12d62af390f447bc7beb4a3a9b5feee" dependencies = [ - "borsh 0.10.3", - "solana-program 1.18.17", + "borsh 1.5.1", + "solana-program", "spl-discriminator", "spl-pod", "spl-program-error", @@ -9298,13 +9101,13 @@ dependencies = [ [[package]] name = "spl-transfer-hook-interface" -version = "0.4.1" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7aabdb7c471566f6ddcee724beb8618449ea24b399e58d464d6b5bc7db550259" +checksum = "66a98359769cd988f7b35c02558daa56d496a7e3bd8626e61f90a7c757eedb9b" dependencies = [ "arrayref", "bytemuck", - "solana-program 1.18.17", + "solana-program", "spl-discriminator", "spl-pod", "spl-program-error", @@ -9314,12 +9117,12 @@ dependencies = [ [[package]] name = "spl-type-length-value" -version = "0.3.0" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a468e6f6371f9c69aae760186ea9f1a01c2908351b06a5e0026d21cfc4d7ecac" +checksum = "422ce13429dbd41d2cee8a73931c05fda0b0c8ca156a8b0c19445642550bb61a" dependencies = [ "bytemuck", - "solana-program 1.18.17", + "solana-program", "spl-discriminator", "spl-pod", "spl-program-error", @@ -9430,9 +9233,9 @@ dependencies = [ [[package]] name = "subtle" -version = "2.4.1" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "subtle-encoding" @@ -9780,6 +9583,15 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" +[[package]] +name = "task-local-extensions" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba323866e5d033818e3240feeb9f7db2c4296674e4d9e16b97b7bf8f490434e8" +dependencies = [ + "pin-utils", +] + [[package]] name = "tempfile" version = "3.10.1" @@ -10648,16 +10460,6 @@ version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" -[[package]] -name = "universal-hash" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f214e8f697e925001e66ec2c6e37a4ef93f0f78c2eed7814394e10c62025b05" -dependencies = [ - "generic-array", - "subtle", -] - [[package]] name = "universal-hash" version = "0.5.1" @@ -11359,3 +11161,8 @@ dependencies = [ "cc", "pkg-config", ] + +[[patch.unused]] +name = "aes-gcm-siv" +version = "0.10.3" +source = "git+https://github.com/RustCrypto/AEADs?rev=6105d7a5591aefa646a95d12b5e8d3f55a9214ef#6105d7a5591aefa646a95d12b5e8d3f55a9214ef" diff --git a/ampd/Cargo.toml b/ampd/Cargo.toml index 01fc9a579..6173673ad 100644 --- a/ampd/Cargo.toml +++ b/ampd/Cargo.toml @@ -45,13 +45,15 @@ serde = { version = "1.0.147", features = ["derive"] } serde_json = { workspace = true } serde_with = "3.2.0" service-registry = { workspace = true } -solana-account-decoder = "1.18.1" -solana-client = "1.18.1" -solana-program = "1.18.1" -solana-sdk = "1.18.1" -solana-rpc-client-api = "1.18.1" -solana-version = "1.18.1" -solana-transaction-status = "1.18.1" +solana-account-decoder = "2.0.1" +solana-client = "2.0.1" +solana-program = "2.0.1" +solana-sdk = "2.0.1" +solana-rpc-client-api = "2.0.1" +solana-version = "2.0.1" +solana-zk-token-sdk = "2.0.1" +solana-transaction-status = "2.0.1" + sha3 = { workspace = true } sui-json-rpc-types = { git = "https://github.com/mystenlabs/sui", tag = "mainnet-v1.26.2" } sui-types = { git = "https://github.com/mystenlabs/sui", features = ["test-utils"], tag = "mainnet-v1.26.2" } @@ -93,17 +95,12 @@ tokio = { workspace = true, features = ["test-util"] } tonic-build = "0.8.3" [patch.crates-io] -# aes-gcm-siv 0.10.3 and curve25519-dalek 3.x pin zeroize to <1.4 +# curve25519-dalek 3.x pin zeroize to <1.4 # which conflicts with other dependencies requiring zeroize ^1.5. # We’re patching both crates to unpin zeroize. # -# For aes-gcm-siv we’re using the same revision Solana uses in -# an (as of now) unreleased commit, see -# https://github.com/solana-labs/solana/commit/01f1bf27994d9813fadfcd134befd3a449aaa0bd -# # For curve25519-dalek we’re using commit from a PR, see # https://github.com/dalek-cryptography/curve25519-dalek/pull/606 -aes-gcm-siv = { git = "https://github.com/RustCrypto/AEADs", rev = "6105d7a5591aefa646a95d12b5e8d3f55a9214ef" } curve25519-dalek = { git = "https://github.com/dalek-cryptography/curve25519-dalek", rev = "8274d5cbb6fc3f38cdc742b4798173895cd2a290" } ahash = "=0.8.6" [lints] From 83939ae0f5cb97440dec2b8ce2427b61e5b69cad Mon Sep 17 00:00:00 2001 From: Roberts Pumpurs Date: Tue, 2 Jul 2024 17:54:57 +0300 Subject: [PATCH 066/109] fix git deps fetching issues --- .cargo/{config => config.toml} | 3 +++ ampd/Cargo.toml | 4 +--- 2 files changed, 4 insertions(+), 3 deletions(-) rename .cargo/{config => config.toml} (86%) diff --git a/.cargo/config b/.cargo/config.toml similarity index 86% rename from .cargo/config rename to .cargo/config.toml index e61e7526b..69ad233c6 100644 --- a/.cargo/config +++ b/.cargo/config.toml @@ -4,3 +4,6 @@ unit-test = "test --lib" [build] rustflags = ["--cfg", "tracing_unstable"] + +[net] +git-fetch-with-cli = true diff --git a/ampd/Cargo.toml b/ampd/Cargo.toml index 6173673ad..90d458fae 100644 --- a/ampd/Cargo.toml +++ b/ampd/Cargo.toml @@ -61,9 +61,7 @@ sui-types = { git = "https://github.com/mystenlabs/sui", features = ["test-utils # Can switch back once https://github.com/informalsystems/tendermint-rs/issues/1216 is resolved. # The fix for the issue is at https://github.com/axelarnetwork/tendermint-rs/commit/e97033e20e660a7e707ea86db174ec047bbba50d. tendermint = { git = "https://github.com/axelarnetwork/tendermint-rs.git", branch = "v0.33.x" } -tendermint-rpc = { git = "https://github.com/axelarnetwork/tendermint-rs.git", branch = "v0.33.x", features = [ - "http-client", -] } +tendermint-rpc = { git = "https://github.com/axelarnetwork/tendermint-rs.git", branch = "v0.33.x", features = ["http-client"] } thiserror = { workspace = true } tokio = { workspace = true, features = ["signal"] } tokio-stream = { workspace = true, features = ["sync"] } From 3659af1f7d21a8c76692f2ea2228019375f3356d Mon Sep 17 00:00:00 2001 From: eloylp Date: Tue, 2 Jul 2024 17:10:51 +0200 Subject: [PATCH 067/109] Use latest changes from rkyv encoding crate. --- Cargo.lock | 4 ++-- Cargo.toml | 2 +- contracts/multisig-prover/src/encoding/rkyv/mod.rs | 14 ++++++-------- 3 files changed, 9 insertions(+), 11 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 7bbd3d22d..7a5a4afd2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -759,7 +759,7 @@ dependencies = [ [[package]] name = "axelar-rkyv-encoding" version = "0.1.0" -source = "git+ssh://git@github.com/eigerco/solana-axelar-internal.git?branch=main#eb9d5a7fcf2469256b275befa9ca4d4aaa21743c" +source = "git+https://git@github.com/eigerco/solana-axelar.git?branch=main#681ce307bfaa7b8649e05b1dabd1d4437b5ea4b2" dependencies = [ "bnum", "bs58 0.5.1", @@ -5342,7 +5342,7 @@ name = "multisig-prover" version = "0.5.0" dependencies = [ "anyhow", - "axelar-rkyv-encoding 0.1.0 (git+ssh://git@github.com/eigerco/solana-axelar-internal.git?branch=main)", + "axelar-rkyv-encoding 0.1.0 (git+https://git@github.com/eigerco/solana-axelar.git?branch=main)", "axelar-wasm-std", "axelar-wasm-std-derive", "bcs", diff --git a/Cargo.toml b/Cargo.toml index ea9f36cf2..ad27b7d9c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -38,7 +38,7 @@ serde_json = "1.0.89" schemars = "0.8.10" sha3 = { version = "0.10.8", default-features = false, features = [] } signature-verifier-api = { version = "^0.1.0", path = "packages/signature-verifier-api" } -axelar-rkyv-encoding = { git = "ssh://git@github.com/eigerco/solana-axelar-internal.git", branch = "main"} +axelar-rkyv-encoding = { git = "https://git@github.com/eigerco/solana-axelar.git", branch = "main"} ethers-contract = { version = "2.0.14", default-features = false, features = ["abigen"] } ethers-core = "2.0.14" tokio = "1.38.0" diff --git a/contracts/multisig-prover/src/encoding/rkyv/mod.rs b/contracts/multisig-prover/src/encoding/rkyv/mod.rs index 43f8edd61..fe1d09556 100644 --- a/contracts/multisig-prover/src/encoding/rkyv/mod.rs +++ b/contracts/multisig-prover/src/encoding/rkyv/mod.rs @@ -13,21 +13,19 @@ use crate::{error::ContractError, payload::Payload}; type Result = core::result::Result; pub fn to_verifier_set(vs: &VerifierSet) -> Result { - let mut signers: BTreeMap = BTreeMap::new(); + let mut signers: BTreeMap< + axelar_rkyv_encoding::types::PublicKey, + axelar_rkyv_encoding::types::U256, + > = BTreeMap::new(); vs.signers .iter() - .try_for_each(|(address, signer)| -> Result<()> { - let enc_signer = signer.address.to_string(); + .try_for_each(|(_, signer)| -> Result<()> { let enc_pubkey = to_pub_key(&signer.pub_key)?; - let enc_weight = axelar_rkyv_encoding::types::U256::from_le(to_u256_le(signer.weight.u128())); - signers.insert( - address.clone(), - axelar_rkyv_encoding::types::Signer::new(enc_signer, enc_pubkey, enc_weight), - ); + signers.insert(enc_pubkey, enc_weight); Ok(()) })?; From 0814a1c8bac828cefa681d45799d6646b4099768 Mon Sep 17 00:00:00 2001 From: eloylp Date: Tue, 2 Jul 2024 17:11:05 +0200 Subject: [PATCH 068/109] remove unusued import --- contracts/multisig-prover/src/payload.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/contracts/multisig-prover/src/payload.rs b/contracts/multisig-prover/src/payload.rs index 25045f3b6..ced87fcb8 100644 --- a/contracts/multisig-prover/src/payload.rs +++ b/contracts/multisig-prover/src/payload.rs @@ -2,7 +2,6 @@ use cosmwasm_schema::cw_serde; use cosmwasm_std::{from_json, HexBinary, StdResult}; use cw_storage_plus::{Key, KeyDeserialize, PrimaryKey}; use error_stack::Result; -use itertools::Itertools; use sha3::{Digest, Keccak256}; use axelar_wasm_std::hash::Hash; From ffa983fdcb7906ed89a6d4ce687b0b6a9a6461e9 Mon Sep 17 00:00:00 2001 From: Roberts Pumpurs Date: Mon, 15 Jul 2024 21:06:46 +0300 Subject: [PATCH 069/109] feat: update rkyv encoding dependency --- Cargo.lock | 79 ++++--------------- ampd/src/handlers/config.rs | 1 - ampd/src/solana/mod.rs | 2 +- ampd/src/solana/rpc.rs | 2 +- ampd/src/solana/test_utils.rs | 29 ++++--- .../multisig-prover/src/encoding/rkyv/mod.rs | 56 +++++++++++-- contracts/multisig-prover/src/payload.rs | 25 ++---- 7 files changed, 93 insertions(+), 101 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 6bec3f7bc..4c383fbef 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -741,7 +741,7 @@ checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" [[package]] name = "axelar-message-primitives" version = "0.1.0" -source = "git+https://github.com/eigerco/solana-axelar.git?branch=main#681ce307bfaa7b8649e05b1dabd1d4437b5ea4b2" +source = "git+https://github.com/eigerco/solana-axelar.git?branch=main#89e1b00d9be8d2fe9a1982bfc2eb33f5a380f836" dependencies = [ "anyhow", "bcs", @@ -752,7 +752,7 @@ dependencies = [ "ethers-core", "hex", "itertools 0.12.1", - "libsecp256k1 0.7.1", + "libsecp256k1", "sha3 0.10.8", "solana-program", "thiserror", @@ -761,13 +761,13 @@ dependencies = [ [[package]] name = "axelar-rkyv-encoding" version = "0.1.0" -source = "git+https://git@github.com/eigerco/solana-axelar.git?branch=main#681ce307bfaa7b8649e05b1dabd1d4437b5ea4b2" +source = "git+https://git@github.com/eigerco/solana-axelar.git?branch=main#89e1b00d9be8d2fe9a1982bfc2eb33f5a380f836" dependencies = [ "bnum", "bs58 0.5.1", "ed25519-dalek 2.1.1", "hex", - "k256", + "libsecp256k1", "rkyv", "sha3 0.10.8", "thiserror", @@ -776,13 +776,13 @@ dependencies = [ [[package]] name = "axelar-rkyv-encoding" version = "0.1.0" -source = "git+https://github.com/eigerco/solana-axelar.git?branch=main#681ce307bfaa7b8649e05b1dabd1d4437b5ea4b2" +source = "git+https://github.com/eigerco/solana-axelar.git?branch=main#89e1b00d9be8d2fe9a1982bfc2eb33f5a380f836" dependencies = [ "bnum", "bs58 0.5.1", "ed25519-dalek 2.1.1", "hex", - "k256", + "libsecp256k1", "rkyv", "sha3 0.10.8", "thiserror", @@ -3680,7 +3680,7 @@ dependencies = [ [[package]] name = "gmp-gateway" version = "0.1.0" -source = "git+https://github.com/eigerco/solana-axelar.git?branch=main#681ce307bfaa7b8649e05b1dabd1d4437b5ea4b2" +source = "git+https://github.com/eigerco/solana-axelar.git?branch=main#89e1b00d9be8d2fe9a1982bfc2eb33f5a380f836" dependencies = [ "axelar-message-primitives", "axelar-rkyv-encoding 0.1.0 (git+https://github.com/eigerco/solana-axelar.git?branch=main)", @@ -3689,6 +3689,7 @@ dependencies = [ "bincode", "borsh 1.5.1", "itertools 0.12.1", + "libsecp256k1", "num-derive 0.4.2", "num-traits", "program-utils", @@ -4680,34 +4681,15 @@ dependencies = [ "base64 0.12.3", "digest 0.9.0", "hmac-drbg", - "libsecp256k1-core 0.2.2", - "libsecp256k1-gen-ecmult 0.2.1", - "libsecp256k1-gen-genmult 0.2.1", + "libsecp256k1-core", + "libsecp256k1-gen-ecmult", + "libsecp256k1-gen-genmult", "rand 0.7.3", "serde", "sha2 0.9.9", "typenum", ] -[[package]] -name = "libsecp256k1" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95b09eff1b35ed3b33b877ced3a691fc7a481919c7e29c53c906226fcf55e2a1" -dependencies = [ - "arrayref", - "base64 0.13.1", - "digest 0.9.0", - "hmac-drbg", - "libsecp256k1-core 0.3.0", - "libsecp256k1-gen-ecmult 0.3.0", - "libsecp256k1-gen-genmult 0.3.0", - "rand 0.8.5", - "serde", - "sha2 0.9.9", - "typenum", -] - [[package]] name = "libsecp256k1-core" version = "0.2.2" @@ -4719,33 +4701,13 @@ dependencies = [ "subtle", ] -[[package]] -name = "libsecp256k1-core" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5be9b9bb642d8522a44d533eab56c16c738301965504753b03ad1de3425d5451" -dependencies = [ - "crunchy", - "digest 0.9.0", - "subtle", -] - [[package]] name = "libsecp256k1-gen-ecmult" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ccab96b584d38fac86a83f07e659f0deafd0253dc096dab5a36d53efe653c5c3" dependencies = [ - "libsecp256k1-core 0.2.2", -] - -[[package]] -name = "libsecp256k1-gen-ecmult" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3038c808c55c87e8a172643a7d87187fc6c4174468159cb3090659d55bcb4809" -dependencies = [ - "libsecp256k1-core 0.3.0", + "libsecp256k1-core", ] [[package]] @@ -4754,16 +4716,7 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "67abfe149395e3aa1c48a2beb32b068e2334402df8181f818d3aee2b304c4f5d" dependencies = [ - "libsecp256k1-core 0.2.2", -] - -[[package]] -name = "libsecp256k1-gen-genmult" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3db8d6ba2cec9eacc40e6e8ccc98931840301f1006e95647ceb2dd5c3aa06f7c" -dependencies = [ - "libsecp256k1-core 0.3.0", + "libsecp256k1-core", ] [[package]] @@ -6588,7 +6541,7 @@ dependencies = [ [[package]] name = "program-utils" version = "0.1.0" -source = "git+https://github.com/eigerco/solana-axelar.git?branch=main#681ce307bfaa7b8649e05b1dabd1d4437b5ea4b2" +source = "git+https://github.com/eigerco/solana-axelar.git?branch=main#89e1b00d9be8d2fe9a1982bfc2eb33f5a380f836" dependencies = [ "borsh 1.5.1", "solana-program", @@ -8471,7 +8424,7 @@ dependencies = [ "getrandom 0.2.15", "js-sys", "lazy_static", - "libsecp256k1 0.6.0", + "libsecp256k1", "log", "memoffset", "num-bigint 0.4.6", @@ -8688,7 +8641,7 @@ dependencies = [ "itertools 0.12.1", "js-sys", "lazy_static", - "libsecp256k1 0.6.0", + "libsecp256k1", "log", "memmap2", "num_enum 0.7.2", diff --git a/ampd/src/handlers/config.rs b/ampd/src/handlers/config.rs index 7e2a5c9d6..c28969342 100644 --- a/ampd/src/handlers/config.rs +++ b/ampd/src/handlers/config.rs @@ -59,7 +59,6 @@ pub enum Config { #[serde(flatten, with = "chain")] chain: GenericChain, rpc_timeout: Option, - }, SolanaVerifierSetVerifier { cosmwasm_contract: TMAddress, diff --git a/ampd/src/solana/mod.rs b/ampd/src/solana/mod.rs index 63a3fff49..b7995d2d9 100644 --- a/ampd/src/solana/mod.rs +++ b/ampd/src/solana/mod.rs @@ -1,6 +1,6 @@ -pub mod verifier_set_verifier; pub mod msg_verifier; pub mod rpc; +pub mod verifier_set_verifier; #[cfg(test)] pub mod test_utils; diff --git a/ampd/src/solana/rpc.rs b/ampd/src/solana/rpc.rs index 16c55ffd2..0195f67b4 100644 --- a/ampd/src/solana/rpc.rs +++ b/ampd/src/solana/rpc.rs @@ -39,7 +39,7 @@ impl RpcCacheWrapper { Ok(tx) } - + #[cfg(test)] pub async fn entries(&self) -> usize { self.tx_cache.read().await.len() diff --git a/ampd/src/solana/test_utils.rs b/ampd/src/solana/test_utils.rs index 6f21ddbdb..cace346f4 100644 --- a/ampd/src/solana/test_utils.rs +++ b/ampd/src/solana/test_utils.rs @@ -2,10 +2,18 @@ use std::{collections::HashMap, sync::Arc}; use serde_json::{json, Value}; use solana_client::{ - nonblocking::rpc_client::RpcClient, rpc_client::RpcClientConfig, rpc_request::RpcRequest, rpc_response::{Response, RpcResponseContext, RpcVersionInfo}, rpc_sender::{RpcSender, RpcTransportStats} + nonblocking::rpc_client::RpcClient, + rpc_client::RpcClientConfig, + rpc_request::RpcRequest, + rpc_response::{Response, RpcResponseContext, RpcVersionInfo}, + rpc_sender::{RpcSender, RpcTransportStats}, }; use solana_sdk::{message::MessageHeader, transaction::TransactionVersion}; -use solana_transaction_status::{option_serializer::OptionSerializer, EncodedConfirmedTransactionWithStatusMeta, EncodedTransaction, EncodedTransactionWithStatusMeta, UiCompiledInstruction, UiMessage, UiRawMessage, UiTransaction, UiTransactionStatusMeta}; +use solana_transaction_status::{ + option_serializer::OptionSerializer, EncodedConfirmedTransactionWithStatusMeta, + EncodedTransaction, EncodedTransactionWithStatusMeta, UiCompiledInstruction, UiMessage, + UiRawMessage, UiTransaction, UiTransactionStatusMeta, +}; use solana_version::Version; use solana_rpc_client_api::client_error::Result; @@ -21,11 +29,11 @@ pub struct RpcRecorder { impl RpcRecorder { pub fn new() -> (Self, Registry) { let registry = Arc::new(RwLock::new(HashMap::new())); - let self_v = Self { + let self_v = Self { record: registry.clone(), }; (self_v, registry) - } + } } /// Reference: https://docs.rs/solana-rpc-client/1.18.3/src/solana_rpc_client/mock_sender.rs.html#97-488 @@ -40,15 +48,14 @@ impl RpcSender for RpcRecorder { request: RpcRequest, params: serde_json::Value, ) -> Result { - - let mut acquired_record = self.record.write().await; + let mut acquired_record = self.record.write().await; acquired_record - .entry(request) - .and_modify(|count| *count = count.checked_add(1).unwrap()) - .or_insert(1); + .entry(request) + .and_modify(|count| *count = count.checked_add(1).unwrap()) + .or_insert(1); - let method = &request.build_request_json(42, params.clone())["method"]; + let method = &request.build_request_json(42, params.clone())["method"]; let val = match method.as_str().unwrap() { "getAccountInfo" => serde_json::to_value(Response { @@ -123,4 +130,4 @@ pub fn rpc_client_with_recorder() -> (RpcClient, Registry) { let (rpc_recorder, registry) = RpcRecorder::new(); let rpc_client = RpcClient::new_sender(rpc_recorder, RpcClientConfig::default()); (rpc_client, registry) -} \ No newline at end of file +} diff --git a/contracts/multisig-prover/src/encoding/rkyv/mod.rs b/contracts/multisig-prover/src/encoding/rkyv/mod.rs index fe1d09556..04b384373 100644 --- a/contracts/multisig-prover/src/encoding/rkyv/mod.rs +++ b/contracts/multisig-prover/src/encoding/rkyv/mod.rs @@ -1,4 +1,5 @@ -use axelar_rkyv_encoding::types::{ECDSA_COMPRESSED_PUBKEY_LEN, ED25519_PUBKEY_LEN}; +use axelar_rkyv_encoding::types::{ED25519_PUBKEY_LEN, SECP256K1_COMPRESSED_PUBKEY_LEN}; +use cosmwasm_std::HexBinary; use itertools::Itertools; use multisig::{ key::{PublicKey, Recoverable, Signature}, @@ -12,6 +13,47 @@ use crate::{error::ContractError, payload::Payload}; type Result = core::result::Result; +pub fn encode( + signers_with_sigs: Vec, + payload_hash: [u8; 32], + verifier_set: &VerifierSet, + payload: &Payload, +) -> Result { + // this array contains `all` the signers, and optoinally the signatures if they exist for the given signer + let mut signers_with_signatures = Vec::with_capacity(verifier_set.signers.len()); + for signer in verifier_set.signers.values() { + let pubkey = to_pub_key(&signer.pub_key)?; + let signature_found = signers_with_sigs + .iter() + .find(|x| x.signer.pub_key == signer.pub_key) + .map(|x| to_weighted_signature(x, &payload_hash)) + .transpose()? + .unwrap_or_else(|| { + let weight = + axelar_rkyv_encoding::types::U256::from_le(to_u256_le(signer.weight.u128())); + ( + pubkey, + axelar_rkyv_encoding::types::WeightedSigner::new(None, weight), + ) + }); + + signers_with_signatures.push(signature_found); + } + let created_at = verifier_set.created_at; + let threshold = axelar_rkyv_encoding::types::U256::from_le(crate::encoding::rkyv::to_u256_le( + verifier_set.threshold.u128(), + )); + let bytes = axelar_rkyv_encoding::encode::<1024>( + // Todo reason about this "1024" magic number. + created_at, + threshold, + signers_with_signatures, + axelar_rkyv_encoding::types::Payload::try_from(payload)?, + ) + .map_err(|e| ContractError::RkyvEncodingError(e.to_string()))?; + Ok(HexBinary::from(bytes)) +} + pub fn to_verifier_set(vs: &VerifierSet) -> Result { let mut signers: BTreeMap< axelar_rkyv_encoding::types::PublicKey, @@ -39,7 +81,7 @@ pub fn to_verifier_set(vs: &VerifierSet) -> Result Result { Ok(match pk { PublicKey::Ecdsa(hb) => axelar_rkyv_encoding::types::PublicKey::new_ecdsa( - hb.to_array::()?, + hb.to_array::()?, ), PublicKey::Ed25519(hb) => axelar_rkyv_encoding::types::PublicKey::new_ed25519( hb.to_array::()?, @@ -86,16 +128,18 @@ fn to_msg(msg: &Message) -> axelar_rkyv_encoding::types::Message { pub fn to_weighted_signature( sig: &SignerWithSig, payload_hash: &[u8; 32], -) -> Result { +) -> Result<( + axelar_rkyv_encoding::types::PublicKey, + axelar_rkyv_encoding::types::WeightedSigner, +)> { let enc_pub_key = to_pub_key(&sig.signer.pub_key)?; let enc_signature = to_signature(&sig.signature, &sig.signer.pub_key, payload_hash)?; let enc_weight = axelar_rkyv_encoding::types::U256::from_le(to_u256_le(sig.signer.weight.u128())); - Ok(axelar_rkyv_encoding::types::WeightedSignature::new( + Ok(( enc_pub_key, - enc_signature, - enc_weight, + axelar_rkyv_encoding::types::WeightedSigner::new(Some(enc_signature), enc_weight), )) } diff --git a/contracts/multisig-prover/src/payload.rs b/contracts/multisig-prover/src/payload.rs index ced87fcb8..7e86a7cb0 100644 --- a/contracts/multisig-prover/src/payload.rs +++ b/contracts/multisig-prover/src/payload.rs @@ -12,7 +12,7 @@ use router_api::{CrossChainId, Message}; use crate::{ encoding::{ abi, - rkyv::{to_verifier_set, to_weighted_signature}, + rkyv::{self, to_verifier_set}, Encoder, }, error::ContractError, @@ -81,23 +81,12 @@ impl Payload { abi::execute_data::encode(verifier_set, signers_with_sigs, &payload_hash, payload) } Encoder::Bcs => todo!(), - Encoder::Rkyv => { - let mut enc_signatures = Vec::new(); - - for s in signers_with_sigs { - enc_signatures.push(to_weighted_signature(&s, &payload_hash)?) - } - - let bytes = axelar_rkyv_encoding::encode::<1024>( - // Todo reason about this "1024" magic number. - &to_verifier_set(&verifier_set)?, - enc_signatures, - axelar_rkyv_encoding::types::Payload::try_from(payload)?, - ) - .map_err(|e| ContractError::RkyvEncodingError(e.to_string()))?; - - Ok(HexBinary::from(bytes)) - } + Encoder::Rkyv => Ok(rkyv::encode( + signers_with_sigs, + payload_hash, + verifier_set, + payload, + )?), } } } From f8af3da79bcca6102cb0ba0e9807e589cee10660 Mon Sep 17 00:00:00 2001 From: Roberts Pumpurs Date: Tue, 16 Jul 2024 15:47:47 +0300 Subject: [PATCH 070/109] feat: test that hashes and validates rkyv encoding --- contracts/multisig-prover/src/payload.rs | 113 ++++++++++++++++++++++- 1 file changed, 112 insertions(+), 1 deletion(-) diff --git a/contracts/multisig-prover/src/payload.rs b/contracts/multisig-prover/src/payload.rs index 7e86a7cb0..31c5ec119 100644 --- a/contracts/multisig-prover/src/payload.rs +++ b/contracts/multisig-prover/src/payload.rs @@ -130,7 +130,16 @@ impl From<&[CrossChainId]> for PayloadId { #[cfg(test)] mod test { - use router_api::CrossChainId; + use std::str::FromStr; + + use super::*; + use axelar_rkyv_encoding::types::{ArchivedExecuteData, ArchivedSignature}; + use cosmwasm_std::Uint128; + use multisig::{ + key::{Recoverable, Signature}, + msg::Signer, + }; + use router_api::{Address, ChainName, CrossChainId}; use crate::{payload::PayloadId, test::test_data}; @@ -147,4 +156,106 @@ mod test { assert_eq!(res, res2); } + + #[test] + fn rkyv_message_encoding_works_as_expected() { + let message = Message { + cc_id: CrossChainId { + chain: ChainName::from_str("fantom").unwrap(), + id: "123".to_string().parse().unwrap(), + }, + source_address: Address::from_str("aabbbccc").unwrap(), + destination_chain: ChainName::from_str("solana").unwrap(), + destination_address: Address::from_str("aabbbccc").unwrap(), + payload_hash: [42; 32], + }; + let messages = vec![message.clone()]; + let payload = Payload::Messages(messages); + let encoder = Encoder::Rkyv; + let domain_separator = [123; 32]; + let raw_public_key = [55; 33]; + let signer = Signer { + address: cosmwasm_std::Addr::unchecked("foobar"), + weight: Uint128::one(), + pub_key: multisig::key::PublicKey::Ecdsa( + HexBinary::from_hex(hex::encode(raw_public_key).as_str()).unwrap(), + ), + }; + let signers = [(signer.address.clone().to_string(), signer.clone())] + .to_vec() + .into_iter() + .collect(); + let threshold = 1_u128; + let created_at = 500; + let verifier_set = VerifierSet { + signers, + threshold: Uint128::from(threshold), + created_at, + }; + let raw_signature = [55; 65]; + let signature = HexBinary::from_hex(hex::encode(raw_signature).as_str()).unwrap(); + let signature = Signature::EcdsaRecoverable(Recoverable::try_from(signature).unwrap()); + let signers_with_sigs = vec![SignerWithSig { + signer: signer.clone(), + signature, + }]; + let digest_hash = payload + .digest(encoder.clone(), &domain_separator, &verifier_set) + .unwrap(); + let encoded_archive_payload = payload + .execute_data( + encoder, + &domain_separator, + &verifier_set, + signers_with_sigs, + &payload, + ) + .unwrap(); + + // now we decode and see what happens + let archived_data = + ArchivedExecuteData::from_bytes(encoded_archive_payload.as_slice()).unwrap(); + + // assert messages + let messages = archived_data.messages().unwrap(); + assert_eq!(messages.len(), 1); + let archived_message = messages.get(0).unwrap(); + assert_eq!(archived_message.cc_id().id(), message.cc_id.id.to_string()); + assert_eq!( + archived_message.cc_id().chain(), + message.cc_id.chain.to_string() + ); + + // assert signers + let proof = archived_data.proof(); + dbg!(&proof.threshold); + dbg!(&threshold.to_ne_bytes()); + assert_eq!(proof.threshold.maybe_u128().unwrap(), threshold); + assert_eq!(proof.nonce, created_at); + assert_eq!(proof.signers_with_signatures.len(), 1); + let (archived_signer_public_key, archived_signer) = + proof.signers_with_signatures.into_iter().next().unwrap(); + let pk_bytes = archived_signer_public_key.to_bytes(); + assert_eq!(pk_bytes.as_slice(), signer.pub_key.as_ref()); + assert_eq!(archived_signer.weight.maybe_u128().unwrap(), 1); + let ArchivedSignature::EcdsaRecoverable(archived_signature) = + archived_signer.signature.as_ref().unwrap() + else { + panic!("") + }; + assert_eq!(archived_signature, &raw_signature); + + // assert thashes match + let mut bytes = [0; 32]; + bytes[0] = 1; + let u256_thereshold = axelar_rkyv_encoding::types::U256::from_le(bytes); + let rky_public_key = axelar_rkyv_encoding::types::PublicKey::new_ecdsa(raw_public_key); + let signers = [(rky_public_key, u256_thereshold.clone())] + .into_iter() + .collect(); + let vs = + axelar_rkyv_encoding::types::VerifierSet::new(created_at, signers, u256_thereshold); + let archived_hash = archived_data.hash_payload_for_verifier_set(&domain_separator, &vs); + assert_eq!(archived_hash, digest_hash) + } } From 6e809065370b65c82c822960f5bc20118f349503 Mon Sep 17 00:00:00 2001 From: eloylp Date: Mon, 29 Jul 2024 18:25:45 +0200 Subject: [PATCH 071/109] feat: update multisig-prover with latest rkyv crate API updates --- Cargo.lock | 2 +- contracts/multisig-prover/src/payload.rs | 11 ++++++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 4c383fbef..828375e62 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -761,7 +761,7 @@ dependencies = [ [[package]] name = "axelar-rkyv-encoding" version = "0.1.0" -source = "git+https://git@github.com/eigerco/solana-axelar.git?branch=main#89e1b00d9be8d2fe9a1982bfc2eb33f5a380f836" +source = "git+https://git@github.com/eigerco/solana-axelar.git?branch=main#3521cf434bbf096709ea108397ed68334b88a1cf" dependencies = [ "bnum", "bs58 0.5.1", diff --git a/contracts/multisig-prover/src/payload.rs b/contracts/multisig-prover/src/payload.rs index 31c5ec119..f95df4ad3 100644 --- a/contracts/multisig-prover/src/payload.rs +++ b/contracts/multisig-prover/src/payload.rs @@ -55,6 +55,7 @@ impl Payload { &domain_separator, &to_verifier_set(cur_verifier_set)?, &axelar_rkyv_encoding::types::Payload::try_from(self)?, + axelar_rkyv_encoding::hasher::generic::Keccak256Hasher::default(), )), } } @@ -234,7 +235,7 @@ mod test { assert_eq!(proof.nonce, created_at); assert_eq!(proof.signers_with_signatures.len(), 1); let (archived_signer_public_key, archived_signer) = - proof.signers_with_signatures.into_iter().next().unwrap(); + proof.signers_with_signatures.iter().next().unwrap(); let pk_bytes = archived_signer_public_key.to_bytes(); assert_eq!(pk_bytes.as_slice(), signer.pub_key.as_ref()); assert_eq!(archived_signer.weight.maybe_u128().unwrap(), 1); @@ -243,7 +244,7 @@ mod test { else { panic!("") }; - assert_eq!(archived_signature, &raw_signature); + assert_eq!(*archived_signature, raw_signature); // assert thashes match let mut bytes = [0; 32]; @@ -255,7 +256,11 @@ mod test { .collect(); let vs = axelar_rkyv_encoding::types::VerifierSet::new(created_at, signers, u256_thereshold); - let archived_hash = archived_data.hash_payload_for_verifier_set(&domain_separator, &vs); + let archived_hash = archived_data.hash_payload_for_verifier_set( + &domain_separator, + &vs, + axelar_rkyv_encoding::hasher::generic::Keccak256Hasher::default(), + ); assert_eq!(archived_hash, digest_hash) } } From 817d406dc8669cf1466c900e04423ae591e1e5b5 Mon Sep 17 00:00:00 2001 From: Guilherme Felipe da Silva Date: Wed, 7 Aug 2024 14:22:47 +0200 Subject: [PATCH 072/109] fix: boyscout: remove trailing white spaces Cargo check was failing due to trailing white spaces. Signed-off-by: Guilherme Felipe da Silva --- ampd/src/solana/test_utils.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ampd/src/solana/test_utils.rs b/ampd/src/solana/test_utils.rs index cace346f4..740311f93 100644 --- a/ampd/src/solana/test_utils.rs +++ b/ampd/src/solana/test_utils.rs @@ -61,7 +61,7 @@ impl RpcSender for RpcRecorder { "getAccountInfo" => serde_json::to_value(Response { context: RpcResponseContext { slot: 1, api_version: None }, value: Value::Null, - })?, + })?, "getTransaction" => serde_json::to_value(EncodedConfirmedTransactionWithStatusMeta { slot: 2, transaction: EncodedTransactionWithStatusMeta { @@ -108,7 +108,7 @@ impl RpcSender for RpcRecorder { }), }, block_time: Some(1628633791), - })?, + })?, "getVersion" => { let version = Version::default(); json!(RpcVersionInfo { From 34b730b951de47ff74b3bd4ac12b49d93f3279c2 Mon Sep 17 00:00:00 2001 From: Guilherme Felipe da Silva Date: Wed, 7 Aug 2024 14:48:07 +0200 Subject: [PATCH 073/109] chore: use updated u128 rkvy Signed-off-by: Guilherme Felipe da Silva --- Cargo.lock | 11 +++++---- .../multisig-prover/src/encoding/rkyv/mod.rs | 24 +++++-------------- 2 files changed, 12 insertions(+), 23 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 66194bcf6..4bcf2bcde 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -892,8 +892,9 @@ checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" [[package]] name = "axelar-message-primitives" version = "0.1.0" -source = "git+https://github.com/eigerco/solana-axelar.git?branch=main#3521cf434bbf096709ea108397ed68334b88a1cf" +source = "git+https://github.com/eigerco/solana-axelar.git?branch=main#c9bd755c9bb765aa5c9f227b4bea55449e1208fb" dependencies = [ + "alloy-sol-types", "anyhow", "bcs", "bnum", @@ -912,7 +913,7 @@ dependencies = [ [[package]] name = "axelar-rkyv-encoding" version = "0.1.0" -source = "git+https://git@github.com/eigerco/solana-axelar.git?branch=main#3521cf434bbf096709ea108397ed68334b88a1cf" +source = "git+https://git@github.com/eigerco/solana-axelar.git?branch=main#c9bd755c9bb765aa5c9f227b4bea55449e1208fb" dependencies = [ "bnum", "bs58 0.5.1", @@ -927,7 +928,7 @@ dependencies = [ [[package]] name = "axelar-rkyv-encoding" version = "0.1.0" -source = "git+https://github.com/eigerco/solana-axelar.git?branch=main#3521cf434bbf096709ea108397ed68334b88a1cf" +source = "git+https://github.com/eigerco/solana-axelar.git?branch=main#c9bd755c9bb765aa5c9f227b4bea55449e1208fb" dependencies = [ "bnum", "bs58 0.5.1", @@ -3853,7 +3854,7 @@ dependencies = [ [[package]] name = "gmp-gateway" version = "0.1.0" -source = "git+https://github.com/eigerco/solana-axelar.git?branch=main#3521cf434bbf096709ea108397ed68334b88a1cf" +source = "git+https://github.com/eigerco/solana-axelar.git?branch=main#c9bd755c9bb765aa5c9f227b4bea55449e1208fb" dependencies = [ "axelar-message-primitives", "axelar-rkyv-encoding 0.1.0 (git+https://github.com/eigerco/solana-axelar.git?branch=main)", @@ -6776,7 +6777,7 @@ dependencies = [ [[package]] name = "program-utils" version = "0.1.0" -source = "git+https://github.com/eigerco/solana-axelar.git?branch=main#3521cf434bbf096709ea108397ed68334b88a1cf" +source = "git+https://github.com/eigerco/solana-axelar.git?branch=main#c9bd755c9bb765aa5c9f227b4bea55449e1208fb" dependencies = [ "borsh 1.5.1", "solana-program", diff --git a/contracts/multisig-prover/src/encoding/rkyv/mod.rs b/contracts/multisig-prover/src/encoding/rkyv/mod.rs index ae605ca91..75008a73c 100644 --- a/contracts/multisig-prover/src/encoding/rkyv/mod.rs +++ b/contracts/multisig-prover/src/encoding/rkyv/mod.rs @@ -29,8 +29,7 @@ pub fn encode( .map(|x| to_weighted_signature(x, &payload_hash)) .transpose()? .unwrap_or_else(|| { - let weight = - axelar_rkyv_encoding::types::U256::from_le(to_u256_le(signer.weight.u128())); + let weight = axelar_rkyv_encoding::types::U128::from(signer.weight.u128()); ( pubkey, axelar_rkyv_encoding::types::WeightedSigner::new(None, weight), @@ -40,9 +39,7 @@ pub fn encode( signers_with_signatures.push(signature_found); } let created_at = verifier_set.created_at; - let threshold = axelar_rkyv_encoding::types::U256::from_le(crate::encoding::rkyv::to_u256_le( - verifier_set.threshold.u128(), - )); + let threshold = axelar_rkyv_encoding::types::U128::from(verifier_set.threshold.u128()); let bytes = axelar_rkyv_encoding::encode::<1024>( // Todo reason about this "1024" magic number. created_at, @@ -57,15 +54,14 @@ pub fn encode( pub fn to_verifier_set(vs: &VerifierSet) -> Result { let mut signers: BTreeMap< axelar_rkyv_encoding::types::PublicKey, - axelar_rkyv_encoding::types::U256, + axelar_rkyv_encoding::types::U128, > = BTreeMap::new(); vs.signers .iter() .try_for_each(|(_, signer)| -> Result<()> { let enc_pubkey = to_pub_key(&signer.pub_key)?; - let enc_weight = - axelar_rkyv_encoding::types::U256::from_le(to_u256_le(signer.weight.u128())); + let enc_weight = axelar_rkyv_encoding::types::U128::from(signer.weight.u128()); signers.insert(enc_pubkey, enc_weight); Ok(()) @@ -74,7 +70,7 @@ pub fn to_verifier_set(vs: &VerifierSet) -> Result Result }) } -// Fits a u128 into a u256 in little endian representation. -fn to_u256_le(u: u128) -> [u8; 32] { - let mut uin256 = [0u8; 32]; - uin256[0..16].copy_from_slice(&u.to_le_bytes()); - uin256 -} - impl TryFrom<&Payload> for axelar_rkyv_encoding::types::Payload { type Error = ContractError; fn try_from(value: &Payload) -> std::result::Result { @@ -134,8 +123,7 @@ pub fn to_weighted_signature( )> { let enc_pub_key = to_pub_key(&sig.signer.pub_key)?; let enc_signature = to_signature(&sig.signature, &sig.signer.pub_key, payload_hash)?; - let enc_weight = - axelar_rkyv_encoding::types::U256::from_le(to_u256_le(sig.signer.weight.u128())); + let enc_weight = axelar_rkyv_encoding::types::U128::from(sig.signer.weight.u128()); Ok(( enc_pub_key, From 7b535618737457ae866ec30b3cec1e975873bde4 Mon Sep 17 00:00:00 2001 From: eloylp Date: Tue, 3 Sep 2024 12:27:40 +0200 Subject: [PATCH 074/109] remove: duplicated generated file probably due to local tooling missmatch --- .../abi/v5.9.0/IAxelarAmplifierGateway.json | 1035 ----------------- 1 file changed, 1035 deletions(-) delete mode 100644 packages/evm-gateway/src/abi/v5.9.0/IAxelarAmplifierGateway.json diff --git a/packages/evm-gateway/src/abi/v5.9.0/IAxelarAmplifierGateway.json b/packages/evm-gateway/src/abi/v5.9.0/IAxelarAmplifierGateway.json deleted file mode 100644 index e25f77cce..000000000 --- a/packages/evm-gateway/src/abi/v5.9.0/IAxelarAmplifierGateway.json +++ /dev/null @@ -1,1035 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "IAxelarAmplifierGateway", - "sourceName": "contracts/interfaces/IAxelarAmplifierGateway.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "bytes32", - "name": "signersHash", - "type": "bytes32" - } - ], - "name": "DuplicateSigners", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "minimumRotationDelay", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lastRotationTimestamp", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "timeElapsed", - "type": "uint256" - } - ], - "name": "InsufficientRotationDelay", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidCodeHash", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidImplementation", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidMessages", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidOperator", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidOwner", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidOwnerAddress", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "InvalidSender", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidSigners", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidThreshold", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidWeights", - "type": "error" - }, - { - "inputs": [], - "name": "LowSignaturesWeight", - "type": "error" - }, - { - "inputs": [], - "name": "MalformedSignatures", - "type": "error" - }, - { - "inputs": [], - "name": "NotLatestSigners", - "type": "error" - }, - { - "inputs": [], - "name": "NotOwner", - "type": "error" - }, - { - "inputs": [], - "name": "NotProxy", - "type": "error" - }, - { - "inputs": [], - "name": "SetupFailed", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "string", - "name": "destinationChain", - "type": "string" - }, - { - "indexed": false, - "internalType": "string", - "name": "destinationContractAddress", - "type": "string" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "payloadHash", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "payload", - "type": "bytes" - } - ], - "name": "ContractCall", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "commandId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "string", - "name": "sourceChain", - "type": "string" - }, - { - "indexed": false, - "internalType": "string", - "name": "messageId", - "type": "string" - }, - { - "indexed": false, - "internalType": "string", - "name": "sourceAddress", - "type": "string" - }, - { - "indexed": true, - "internalType": "address", - "name": "contractAddress", - "type": "address" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "payloadHash", - "type": "bytes32" - } - ], - "name": "MessageApproved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "commandId", - "type": "bytes32" - } - ], - "name": "MessageExecuted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "newOperator", - "type": "address" - } - ], - "name": "OperatorshipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferStarted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "epoch", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "signersHash", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "signers", - "type": "bytes" - } - ], - "name": "SignersRotated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "inputs": [], - "name": "acceptOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "string", - "name": "sourceChain", - "type": "string" - }, - { - "internalType": "string", - "name": "messageId", - "type": "string" - }, - { - "internalType": "string", - "name": "sourceAddress", - "type": "string" - }, - { - "internalType": "address", - "name": "contractAddress", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "payloadHash", - "type": "bytes32" - } - ], - "internalType": "struct Message[]", - "name": "messages", - "type": "tuple[]" - }, - { - "components": [ - { - "components": [ - { - "components": [ - { - "internalType": "address", - "name": "signer", - "type": "address" - }, - { - "internalType": "uint128", - "name": "weight", - "type": "uint128" - } - ], - "internalType": "struct WeightedSigner[]", - "name": "signers", - "type": "tuple[]" - }, - { - "internalType": "uint128", - "name": "threshold", - "type": "uint128" - }, - { - "internalType": "bytes32", - "name": "nonce", - "type": "bytes32" - } - ], - "internalType": "struct WeightedSigners", - "name": "signers", - "type": "tuple" - }, - { - "internalType": "bytes[]", - "name": "signatures", - "type": "bytes[]" - } - ], - "internalType": "struct Proof", - "name": "proof", - "type": "tuple" - } - ], - "name": "approveMessages", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "destinationChain", - "type": "string" - }, - { - "internalType": "string", - "name": "contractAddress", - "type": "string" - }, - { - "internalType": "bytes", - "name": "payload", - "type": "bytes" - } - ], - "name": "callContract", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "contractId", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "epoch", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "signerHash", - "type": "bytes32" - } - ], - "name": "epochBySignerHash", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "implementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "commandId", - "type": "bytes32" - } - ], - "name": "isCommandExecuted", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "commandId", - "type": "bytes32" - }, - { - "internalType": "string", - "name": "sourceChain", - "type": "string" - }, - { - "internalType": "string", - "name": "sourceAddress", - "type": "string" - }, - { - "internalType": "address", - "name": "contractAddress", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "payloadHash", - "type": "bytes32" - } - ], - "name": "isContractCallApproved", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "sourceChain", - "type": "string" - }, - { - "internalType": "string", - "name": "messageId", - "type": "string" - }, - { - "internalType": "string", - "name": "sourceAddress", - "type": "string" - }, - { - "internalType": "address", - "name": "contractAddress", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "payloadHash", - "type": "bytes32" - } - ], - "name": "isMessageApproved", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "sourceChain", - "type": "string" - }, - { - "internalType": "string", - "name": "messageId", - "type": "string" - } - ], - "name": "isMessageExecuted", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastRotationTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "signersHash", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "dataHash", - "type": "bytes32" - } - ], - "name": "messageHashToSign", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "sourceChain", - "type": "string" - }, - { - "internalType": "string", - "name": "messageId", - "type": "string" - } - ], - "name": "messageToCommandId", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "operator", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pendingOwner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "previousSignersRetention", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "proposeOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "components": [ - { - "internalType": "address", - "name": "signer", - "type": "address" - }, - { - "internalType": "uint128", - "name": "weight", - "type": "uint128" - } - ], - "internalType": "struct WeightedSigner[]", - "name": "signers", - "type": "tuple[]" - }, - { - "internalType": "uint128", - "name": "threshold", - "type": "uint128" - }, - { - "internalType": "bytes32", - "name": "nonce", - "type": "bytes32" - } - ], - "internalType": "struct WeightedSigners", - "name": "newSigners", - "type": "tuple" - }, - { - "components": [ - { - "components": [ - { - "components": [ - { - "internalType": "address", - "name": "signer", - "type": "address" - }, - { - "internalType": "uint128", - "name": "weight", - "type": "uint128" - } - ], - "internalType": "struct WeightedSigner[]", - "name": "signers", - "type": "tuple[]" - }, - { - "internalType": "uint128", - "name": "threshold", - "type": "uint128" - }, - { - "internalType": "bytes32", - "name": "nonce", - "type": "bytes32" - } - ], - "internalType": "struct WeightedSigners", - "name": "signers", - "type": "tuple" - }, - { - "internalType": "bytes[]", - "name": "signatures", - "type": "bytes[]" - } - ], - "internalType": "struct Proof", - "name": "proof", - "type": "tuple" - } - ], - "name": "rotateSigners", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "setup", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "signerEpoch", - "type": "uint256" - } - ], - "name": "signerHashByEpoch", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "timeSinceRotation", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOperator", - "type": "address" - } - ], - "name": "transferOperatorship", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "newImplementationCodeHash", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "params", - "type": "bytes" - } - ], - "name": "upgrade", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "commandId", - "type": "bytes32" - }, - { - "internalType": "string", - "name": "sourceChain", - "type": "string" - }, - { - "internalType": "string", - "name": "sourceAddress", - "type": "string" - }, - { - "internalType": "bytes32", - "name": "payloadHash", - "type": "bytes32" - } - ], - "name": "validateContractCall", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "sourceChain", - "type": "string" - }, - { - "internalType": "string", - "name": "messageId", - "type": "string" - }, - { - "internalType": "string", - "name": "sourceAddress", - "type": "string" - }, - { - "internalType": "bytes32", - "name": "payloadHash", - "type": "bytes32" - } - ], - "name": "validateMessage", - "outputs": [ - { - "internalType": "bool", - "name": "valid", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "dataHash", - "type": "bytes32" - }, - { - "components": [ - { - "components": [ - { - "components": [ - { - "internalType": "address", - "name": "signer", - "type": "address" - }, - { - "internalType": "uint128", - "name": "weight", - "type": "uint128" - } - ], - "internalType": "struct WeightedSigner[]", - "name": "signers", - "type": "tuple[]" - }, - { - "internalType": "uint128", - "name": "threshold", - "type": "uint128" - }, - { - "internalType": "bytes32", - "name": "nonce", - "type": "bytes32" - } - ], - "internalType": "struct WeightedSigners", - "name": "signers", - "type": "tuple" - }, - { - "internalType": "bytes[]", - "name": "signatures", - "type": "bytes[]" - } - ], - "internalType": "struct Proof", - "name": "proof", - "type": "tuple" - } - ], - "name": "validateProof", - "outputs": [ - { - "internalType": "bool", - "name": "isLatestSigners", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "bytecode": "0x", - "deployedBytecode": "0x", - "linkReferences": {}, - "deployedLinkReferences": {} -} From 6ee90daeffeb6985468dbe78a502944415180e94 Mon Sep 17 00:00:00 2001 From: eloylp Date: Tue, 3 Sep 2024 12:35:33 +0200 Subject: [PATCH 075/109] revert: previously removed non need imports --- contracts/voting-verifier/src/error.rs | 1 + contracts/voting-verifier/src/events.rs | 1 + packages/report/src/loggable.rs | 1 + 3 files changed, 3 insertions(+) diff --git a/contracts/voting-verifier/src/error.rs b/contracts/voting-verifier/src/error.rs index db4629b16..0945232f6 100644 --- a/contracts/voting-verifier/src/error.rs +++ b/contracts/voting-verifier/src/error.rs @@ -1,6 +1,7 @@ use axelar_wasm_std::{nonempty, voting, IntoContractError}; use cosmwasm_std::{OverflowError, StdError}; use router_api::ChainName; +use service_registry; use thiserror::Error; #[derive(Error, Debug, PartialEq, IntoContractError)] diff --git a/contracts/voting-verifier/src/events.rs b/contracts/voting-verifier/src/events.rs index a013a085b..61d2cf404 100644 --- a/contracts/voting-verifier/src/events.rs +++ b/contracts/voting-verifier/src/events.rs @@ -1,4 +1,5 @@ use std::str::FromStr; +use std::vec::Vec; use axelar_wasm_std::msg_id::{ Base58SolanaTxSignatureAndEventIndex, Base58TxDigestAndEventIndex, HexTxHash, diff --git a/packages/report/src/loggable.rs b/packages/report/src/loggable.rs index 7ac7ded8c..070bbd4fa 100644 --- a/packages/report/src/loggable.rs +++ b/packages/report/src/loggable.rs @@ -2,6 +2,7 @@ use std::backtrace::Backtrace; use std::collections::VecDeque; use std::error::Error; use std::fmt::{Display, Formatter}; +use std::iter::FromIterator; use std::panic::Location; use error_stack::{AttachmentKind, Context, Frame, FrameKind, Report}; From e30a132f88c8a5626e9235f13e17849f3e00f575 Mon Sep 17 00:00:00 2001 From: eloylp Date: Tue, 3 Sep 2024 12:42:31 +0200 Subject: [PATCH 076/109] refactor: Use the provided add_27 func for ECDSA non-recoverable to recoverable conversions --- contracts/multisig-prover/src/encoding/mod.rs | 2 +- contracts/multisig-prover/src/encoding/rkyv/mod.rs | 11 +++-------- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/contracts/multisig-prover/src/encoding/mod.rs b/contracts/multisig-prover/src/encoding/mod.rs index ef3ebc09b..b5512fd77 100644 --- a/contracts/multisig-prover/src/encoding/mod.rs +++ b/contracts/multisig-prover/src/encoding/mod.rs @@ -86,7 +86,7 @@ where Encoder::Abi => add_27, Encoder::Bcs => no_op, Encoder::StellarXdr => no_op, - Encoder::Rkyv => rkyv::add27, + Encoder::Rkyv => add_27, }; signers .into_iter() diff --git a/contracts/multisig-prover/src/encoding/rkyv/mod.rs b/contracts/multisig-prover/src/encoding/rkyv/mod.rs index 368de9a9f..5aeb44ee8 100644 --- a/contracts/multisig-prover/src/encoding/rkyv/mod.rs +++ b/contracts/multisig-prover/src/encoding/rkyv/mod.rs @@ -11,6 +11,8 @@ use std::{array::TryFromSliceError, collections::BTreeMap}; use crate::{error::ContractError, payload::Payload}; +use super::add_27; + type Result = core::result::Result; pub fn encode( @@ -139,7 +141,7 @@ fn to_signature( match sig { Signature::Ecdsa(nonrec) => { let recov = nonrec - .to_recoverable(payload_hash, pub_key, add27) + .to_recoverable(payload_hash, pub_key, add_27) .map_err(|e| ContractError::RkyvEncodingError(e.to_string()))?; Ok(axelar_rkyv_encoding::types::Signature::EcdsaRecoverable( recoverable_ecdsa_to_array(&recov)?, @@ -161,13 +163,6 @@ fn to_signature( } } -pub fn add27(recovery_byte: k256::ecdsa::RecoveryId) -> u8 { - recovery_byte - .to_byte() - .checked_add(27) - .expect("overflow when adding 27 to recovery byte") -} - fn recoverable_ecdsa_to_array(rec: &Recoverable) -> Result<[u8; 65]> { rec.as_ref() .try_into() From 0958c5e4f7275ab59205c43b1f0681690ea50815 Mon Sep 17 00:00:00 2001 From: eloylp Date: Tue, 3 Sep 2024 13:55:21 +0200 Subject: [PATCH 077/109] refactor: Align rkyv public APi's with repo usage --- contracts/multisig-prover/src/encoding/mod.rs | 12 +++------- .../multisig-prover/src/encoding/rkyv/mod.rs | 22 +++++++++++++++---- 2 files changed, 21 insertions(+), 13 deletions(-) diff --git a/contracts/multisig-prover/src/encoding/mod.rs b/contracts/multisig-prover/src/encoding/mod.rs index b5512fd77..a7cfba693 100644 --- a/contracts/multisig-prover/src/encoding/mod.rs +++ b/contracts/multisig-prover/src/encoding/mod.rs @@ -10,7 +10,6 @@ use error_stack::Result; use multisig::key::Signature; use multisig::msg::SignerWithSig; use multisig::verifier_set::VerifierSet; -use rkyv::to_verifier_set; use crate::error::ContractError; use crate::payload::Payload; @@ -37,12 +36,7 @@ impl Encoder { Encoder::StellarXdr => { stellar_xdr::payload_digest(domain_separator, verifier_set, payload) } - Encoder::Rkyv => Ok(axelar_rkyv_encoding::hash_payload( - &domain_separator, - &to_verifier_set(verifier_set)?, - &axelar_rkyv_encoding::types::Payload::try_from(payload)?, - axelar_rkyv_encoding::hasher::generic::Keccak256Hasher::default(), - )), + Encoder::Rkyv => rkyv::payload_digest(domain_separator, verifier_set, payload), } } @@ -67,12 +61,12 @@ impl Encoder { payload, ), Encoder::StellarXdr => todo!(), - Encoder::Rkyv => Ok(rkyv::encode( + Encoder::Rkyv => rkyv::encode_execute_data( sigs, self.digest(domain_separator, verifier_set, payload)?, verifier_set, payload, - )?), + ), } } } diff --git a/contracts/multisig-prover/src/encoding/rkyv/mod.rs b/contracts/multisig-prover/src/encoding/rkyv/mod.rs index 5aeb44ee8..3b7c143ae 100644 --- a/contracts/multisig-prover/src/encoding/rkyv/mod.rs +++ b/contracts/multisig-prover/src/encoding/rkyv/mod.rs @@ -1,4 +1,5 @@ use axelar_rkyv_encoding::types::{ED25519_PUBKEY_LEN, SECP256K1_COMPRESSED_PUBKEY_LEN}; +use axelar_wasm_std::hash::Hash; use cosmwasm_std::HexBinary; use itertools::Itertools; use multisig::{ @@ -15,12 +16,12 @@ use super::add_27; type Result = core::result::Result; -pub fn encode( +pub fn encode_execute_data( signers_with_sigs: Vec, payload_hash: [u8; 32], verifier_set: &VerifierSet, payload: &Payload, -) -> Result { +) -> error_stack::Result { // this array contains `all` the signers, and optoinally the signatures if they exist for the given signer let mut signers_with_signatures = Vec::with_capacity(verifier_set.signers.len()); for signer in verifier_set.signers.values() { @@ -53,7 +54,20 @@ pub fn encode( Ok(HexBinary::from(bytes)) } -pub fn to_verifier_set(vs: &VerifierSet) -> Result { +pub fn payload_digest( + domain_separator: &Hash, + verifier_set: &VerifierSet, + payload: &Payload, +) -> error_stack::Result { + Ok(axelar_rkyv_encoding::hash_payload( + &domain_separator, + &to_verifier_set(verifier_set)?, + &axelar_rkyv_encoding::types::Payload::try_from(payload)?, + axelar_rkyv_encoding::hasher::generic::Keccak256Hasher::default(), + )) +} + +fn to_verifier_set(vs: &VerifierSet) -> Result { let mut signers: BTreeMap< axelar_rkyv_encoding::types::PublicKey, axelar_rkyv_encoding::types::U128, @@ -116,7 +130,7 @@ fn to_msg(msg: &Message) -> axelar_rkyv_encoding::types::Message { ) } -pub fn to_weighted_signature( +fn to_weighted_signature( sig: &SignerWithSig, payload_hash: &[u8; 32], ) -> Result<( From 86eb3c51e22837188864cdfd2c1e8e7d405041a7 Mon Sep 17 00:00:00 2001 From: eloylp Date: Thu, 12 Sep 2024 11:16:35 +0200 Subject: [PATCH 078/109] fix: ampd dependencies update (gateway, rkyv) (#37) * update ampd handlers tomatch new Api's (WIP) * fix: comparison logic * fix comaprison (not allocate string) * fix: Be consistent in little endian * fix: commit missed files * fix: unify rkyv dep at workspace level * fix: avoid unwrap --- Cargo.lock | 111 +++------ Cargo.toml | 2 +- ampd/Cargo.toml | 13 +- .../handlers/solana_verify_verifier_set.rs | 29 ++- ampd/src/solana/msg_verifier.rs | 55 +++-- ampd/src/solana/tests/solana_tx.json | 2 +- ampd/src/solana/verifier_set_verifier.rs | 230 +++++------------- 7 files changed, 144 insertions(+), 298 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ee71a68da..59e913ca6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -252,6 +252,7 @@ version = "1.0.0" dependencies = [ "async-trait", "axelar-message-primitives", + "axelar-rkyv-encoding", "axelar-wasm-std", "axum 0.7.5", "base64 0.21.7", @@ -907,43 +908,26 @@ checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" [[package]] name = "axelar-message-primitives" version = "0.1.0" -source = "git+https://github.com/eigerco/solana-axelar.git?branch=main#c9bd755c9bb765aa5c9f227b4bea55449e1208fb" +source = "git+https://github.com/eigerco/solana-axelar.git?branch=main#80171c678822ea7ba51101b65a21520e048f8a81" dependencies = [ "alloy-sol-types", "anyhow", - "bcs", "bnum", "borsh 1.5.1", "bytemuck", - "cosmwasm-schema 2.1.3", "ethers-core", "hex", - "itertools 0.12.1", - "libsecp256k1", - "sha3 0.10.8", - "solana-program", - "thiserror", -] - -[[package]] -name = "axelar-rkyv-encoding" -version = "0.1.0" -source = "git+https://git@github.com/eigerco/solana-axelar.git?branch=main#c9bd755c9bb765aa5c9f227b4bea55449e1208fb" -dependencies = [ - "bnum", - "bs58 0.5.1", - "ed25519-dalek 2.1.1", - "hex", "libsecp256k1", "rkyv", "sha3 0.10.8", + "solana-program", "thiserror", ] [[package]] name = "axelar-rkyv-encoding" version = "0.1.0" -source = "git+https://github.com/eigerco/solana-axelar.git?branch=main#c9bd755c9bb765aa5c9f227b4bea55449e1208fb" +source = "git+https://github.com/eigerco/solana-axelar.git?branch=main#80171c678822ea7ba51101b65a21520e048f8a81" dependencies = [ "bnum", "bs58 0.5.1", @@ -963,7 +947,7 @@ dependencies = [ "alloy-primitives", "axelar-wasm-std-derive", "bs58 0.5.1", - "cosmwasm-schema 1.5.7", + "cosmwasm-schema", "cosmwasm-std", "cw-multi-test 0.15.1", "cw-storage-plus 1.2.0", @@ -1006,7 +990,7 @@ version = "0.1.0" dependencies = [ "axelar-wasm-std", "client", - "cosmwasm-schema 1.5.7", + "cosmwasm-schema", "cosmwasm-std", "cw-multi-test 1.2.0", "cw-storage-plus 1.2.0", @@ -1269,12 +1253,6 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "bimap" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "230c5f1ca6a325a32553f8640d31ac9b49f2411e901e427570154868b46da4f7" - [[package]] name = "bincode" version = "1.3.3" @@ -2093,7 +2071,7 @@ name = "coordinator" version = "1.0.0" dependencies = [ "axelar-wasm-std", - "cosmwasm-schema 1.5.7", + "cosmwasm-schema", "cosmwasm-std", "cw-multi-test 0.15.1", "cw-storage-plus 1.2.0", @@ -2193,20 +2171,7 @@ version = "1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b4cd28147a66eba73720b47636a58097a979ad8c8bfdb4ed437ebcbfe362576" dependencies = [ - "cosmwasm-schema-derive 1.5.7", - "schemars", - "serde", - "serde_json", - "thiserror", -] - -[[package]] -name = "cosmwasm-schema" -version = "2.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bc0d4d85e83438ab9a0fea9348446f7268bc016aacfebce37e998559f151294" -dependencies = [ - "cosmwasm-schema-derive 2.1.3", + "cosmwasm-schema-derive", "schemars", "serde", "serde_json", @@ -2224,17 +2189,6 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "cosmwasm-schema-derive" -version = "2.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edf5c8adac41bb7751c050d7c4c18675be19ee128714454454575e894424eeef" -dependencies = [ - "proc-macro2 1.0.86", - "quote 1.0.37", - "syn 2.0.77", -] - [[package]] name = "cosmwasm-std" version = "1.5.7" @@ -2517,7 +2471,7 @@ version = "0.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ae0b69fa7679de78825b4edeeec045066aa2b2c4b6e063d80042e565bb4da5c" dependencies = [ - "cosmwasm-schema 1.5.7", + "cosmwasm-schema", "cosmwasm-std", "cw2 0.15.1", "schemars", @@ -2532,7 +2486,7 @@ version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1c4a657e5caacc3a0d00ee96ca8618745d050b8f757c709babafb81208d4239c" dependencies = [ - "cosmwasm-schema 1.5.7", + "cosmwasm-schema", "cosmwasm-std", "cw2 1.1.2", "schemars", @@ -2547,7 +2501,7 @@ version = "0.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5abb8ecea72e09afff830252963cb60faf945ce6cef2c20a43814516082653da" dependencies = [ - "cosmwasm-schema 1.5.7", + "cosmwasm-schema", "cosmwasm-std", "cw-storage-plus 0.15.1", "schemars", @@ -2560,7 +2514,7 @@ version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c6c120b24fbbf5c3bedebb97f2cc85fbfa1c3287e09223428e7e597b5293c1fa" dependencies = [ - "cosmwasm-schema 1.5.7", + "cosmwasm-schema", "cosmwasm-std", "cw-storage-plus 1.2.0", "schemars", @@ -3851,7 +3805,7 @@ version = "1.0.0" dependencies = [ "axelar-wasm-std", "client", - "cosmwasm-schema 1.5.7", + "cosmwasm-schema", "cosmwasm-std", "cw-multi-test 0.15.1", "cw-storage-plus 1.2.0", @@ -3873,7 +3827,7 @@ name = "gateway-api" version = "1.0.0" dependencies = [ "axelar-wasm-std", - "cosmwasm-schema 1.5.7", + "cosmwasm-schema", "cosmwasm-std", "error-stack", "msgs-derive", @@ -3978,19 +3932,20 @@ dependencies = [ [[package]] name = "gmp-gateway" version = "0.1.0" -source = "git+https://github.com/eigerco/solana-axelar.git?branch=main#c9bd755c9bb765aa5c9f227b4bea55449e1208fb" +source = "git+https://github.com/eigerco/solana-axelar.git?branch=main#80171c678822ea7ba51101b65a21520e048f8a81" dependencies = [ "axelar-message-primitives", - "axelar-rkyv-encoding 0.1.0 (git+https://github.com/eigerco/solana-axelar.git?branch=main)", + "axelar-rkyv-encoding", "base64 0.21.7", - "bimap", "bincode", "borsh 1.5.1", + "hex", "itertools 0.12.1", "libsecp256k1", "num-derive 0.4.2", "num-traits", "program-utils", + "rkyv", "solana-program", "thiserror", ] @@ -4733,7 +4688,7 @@ dependencies = [ "alloy-primitives", "alloy-sol-types", "axelar-wasm-std", - "cosmwasm-schema 1.5.7", + "cosmwasm-schema", "cosmwasm-std", "error-stack", "goldie", @@ -5752,7 +5707,7 @@ version = "1.0.0" dependencies = [ "axelar-wasm-std", "cosmwasm-crypto", - "cosmwasm-schema 1.5.7", + "cosmwasm-schema", "cosmwasm-std", "curve25519-dalek 4.1.3", "cw-multi-test 0.15.1", @@ -5783,11 +5738,11 @@ name = "multisig-prover" version = "1.0.0" dependencies = [ "anyhow", - "axelar-rkyv-encoding 0.1.0 (git+https://git@github.com/eigerco/solana-axelar.git?branch=main)", + "axelar-rkyv-encoding", "axelar-wasm-std", "bcs", "coordinator", - "cosmwasm-schema 1.5.7", + "cosmwasm-schema", "cosmwasm-std", "cw-multi-test 0.15.1", "cw-storage-plus 1.2.0", @@ -5989,7 +5944,7 @@ dependencies = [ "axelar-wasm-std", "axelarnet-gateway", "client", - "cosmwasm-schema 1.5.7", + "cosmwasm-schema", "cosmwasm-std", "cw-storage-plus 1.2.0", "cw2 1.1.2", @@ -6275,7 +6230,7 @@ version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" dependencies = [ - "proc-macro-crate 3.2.0", + "proc-macro-crate 1.1.3", "proc-macro2 1.0.86", "quote 1.0.37", "syn 2.0.77", @@ -7085,7 +7040,7 @@ dependencies = [ [[package]] name = "program-utils" version = "0.1.0" -source = "git+https://github.com/eigerco/solana-axelar.git?branch=main#c9bd755c9bb765aa5c9f227b4bea55449e1208fb" +source = "git+https://github.com/eigerco/solana-axelar.git?branch=main#80171c678822ea7ba51101b65a21520e048f8a81" dependencies = [ "borsh 1.5.1", "solana-program", @@ -7233,7 +7188,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81bddcdb20abf9501610992b6759a4c888aef7d1a7247ef75e2404275ac24af1" dependencies = [ "anyhow", - "itertools 0.12.1", + "itertools 0.11.0", "proc-macro2 1.0.86", "quote 1.0.37", "syn 2.0.77", @@ -7718,7 +7673,7 @@ name = "rewards" version = "1.0.0" dependencies = [ "axelar-wasm-std", - "cosmwasm-schema 1.5.7", + "cosmwasm-schema", "cosmwasm-std", "cw-multi-test 0.15.1", "cw-storage-plus 1.2.0", @@ -7858,7 +7813,7 @@ name = "router" version = "1.0.0" dependencies = [ "axelar-wasm-std", - "cosmwasm-schema 1.5.7", + "cosmwasm-schema", "cosmwasm-std", "cw-multi-test 0.15.1", "cw-storage-plus 1.2.0", @@ -7883,7 +7838,7 @@ name = "router-api" version = "1.0.0" dependencies = [ "axelar-wasm-std", - "cosmwasm-schema 1.5.7", + "cosmwasm-schema", "cosmwasm-std", "cw-storage-plus 1.2.0", "error-stack", @@ -8609,7 +8564,7 @@ version = "1.0.0" dependencies = [ "axelar-wasm-std", "coordinator", - "cosmwasm-schema 1.5.7", + "cosmwasm-schema", "cosmwasm-std", "cw-multi-test 0.15.1", "cw-storage-plus 1.2.0", @@ -8776,7 +8731,7 @@ dependencies = [ name = "signature-verifier-api" version = "1.0.0" dependencies = [ - "cosmwasm-schema 1.5.7", + "cosmwasm-schema", "cosmwasm-std", "error-stack", "thiserror", @@ -11491,7 +11446,7 @@ dependencies = [ "alloy-primitives", "axelar-wasm-std", "client", - "cosmwasm-schema 1.5.7", + "cosmwasm-schema", "cosmwasm-std", "cw-multi-test 0.15.1", "cw-storage-plus 1.2.0", @@ -11715,7 +11670,7 @@ version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.48.0", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index b4dcbc5b6..3480c1e01 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -50,7 +50,7 @@ serde_json = "1.0.89" schemars = "0.8.10" sha3 = { version = "0.10.8", default-features = false, features = [] } signature-verifier-api = { version = "^1.0.0", path = "packages/signature-verifier-api" } -axelar-rkyv-encoding = { git = "https://git@github.com/eigerco/solana-axelar.git", branch = "main" } +axelar-rkyv-encoding = { git = "https://github.com/eigerco/solana-axelar.git", branch = "main" } syn = "2.0.68" ethers-contract = { version = "2.0.14", default-features = false, features = ["abigen"] } ethers-core = "2.0.14" diff --git a/ampd/Cargo.toml b/ampd/Cargo.toml index 198f5e0bd..858ca9c3d 100644 --- a/ampd/Cargo.toml +++ b/ampd/Cargo.toml @@ -25,7 +25,9 @@ enum-display-derive = "0.1.1" error-stack = { workspace = true } ethers-contract = { workspace = true } ethers-core = { workspace = true } -ethers-providers = { version = "2.0.13", default-features = false, features = ["rustls"] } +ethers-providers = { version = "2.0.13", default-features = false, features = [ + "rustls", +] } events = { workspace = true } events-derive = { workspace = true } evm-gateway = { workspace = true } @@ -60,12 +62,16 @@ solana-transaction-status = "2.0.1" sha3 = { workspace = true } sui-gateway = { workspace = true } sui-json-rpc-types = { git = "https://github.com/mystenlabs/sui", tag = "mainnet-v1.26.2" } -sui-types = { git = "https://github.com/mystenlabs/sui", features = ["test-utils"], tag = "mainnet-v1.26.2" } +sui-types = { git = "https://github.com/mystenlabs/sui", features = [ + "test-utils", +], tag = "mainnet-v1.26.2" } # Need to switch to our own fork of tendermint and tendermint-rpc due to event attribute value being nullable. # Can switch back once https://github.com/informalsystems/tendermint-rs/issues/1216 is resolved. # The fix for the issue is at https://github.com/axelarnetwork/tendermint-rs/commit/e97033e20e660a7e707ea86db174ec047bbba50d. tendermint = { git = "https://github.com/axelarnetwork/tendermint-rs.git", branch = "v0.33.x" } -tendermint-rpc = { git = "https://github.com/axelarnetwork/tendermint-rs.git", branch = "v0.33.x", features = ["http-client"] } +tendermint-rpc = { git = "https://github.com/axelarnetwork/tendermint-rs.git", branch = "v0.33.x", features = [ + "http-client", +] } thiserror = { workspace = true } tokio = { workspace = true, features = ["signal"] } tokio-stream = { workspace = true, features = ["sync"] } @@ -92,6 +98,7 @@ multisig = { workspace = true, features = ["test", "library"] } rand = "0.8.5" random-string = "1.0.0" tokio = { workspace = true, features = ["test-util"] } +axelar-rkyv-encoding = { workspace = true } [build-dependencies] tonic-build = "0.8.3" diff --git a/ampd/src/handlers/solana_verify_verifier_set.rs b/ampd/src/handlers/solana_verify_verifier_set.rs index 2c7fa8195..fa8caf382 100644 --- a/ampd/src/handlers/solana_verify_verifier_set.rs +++ b/ampd/src/handlers/solana_verify_verifier_set.rs @@ -1,8 +1,4 @@ -use std::borrow::Cow; -use std::convert::TryInto; - use async_trait::async_trait; -use axelar_message_primitives::command::RotateSignersCommand; use cosmrs::cosmwasm::MsgExecuteContract; use cosmrs::{tx::Msg, Any}; use error_stack::ResultExt; @@ -12,6 +8,7 @@ use multisig::verifier_set::VerifierSet; use serde::Deserialize; use solana_sdk::signature::Signature; use solana_transaction_status::UiTransactionEncoding; +use std::convert::TryInto; use std::str::FromStr; use tokio::sync::watch::Receiver; use tracing::{error, info}; @@ -26,7 +23,7 @@ use crate::handlers::errors::Error; use crate::solana::verifier_set_verifier::{parse_gateway_event, verify_verifier_set}; use crate::types::TMAddress; -use gmp_gateway::events::GatewayEvent; +use gmp_gateway::events::{ArchivedGatewayEvent, ArchivedRotateSignersEvent}; type Result = error_stack::Result; @@ -170,17 +167,16 @@ impl EventHandler for Handler { }, }; - let gw_event = parse_gateway_event(&sol_tx).map_err(|_| Error::DeserializeEvent)?; + let gw_event_container = + parse_gateway_event(&sol_tx).map_err(|_| Error::DeserializeEvent)?; + let gw_event = gw_event_container.parse(); match gw_event { - GatewayEvent::SignersRotated(Cow::Owned(RotateSignersCommand { - command_id: _, - destination_chain: _, - signer_set, - weights, - quorum, - })) => { - let vote = verify_verifier_set(&verifier_set, &signer_set, &weights, quorum); + ArchivedGatewayEvent::SignersRotated(ArchivedRotateSignersEvent { + new_signers_hash, + .. + }) => { + let vote = verify_verifier_set(&verifier_set, new_signers_hash); Ok(vec![self .vote_msg(poll_id, vec![vote]) .into_any() @@ -214,7 +210,10 @@ mod tests { use tokio::sync::watch; use voting_verifier::events::{PollMetadata, PollStarted, VerifierSetConfirmation}; - use crate::{handlers::tests::into_structured_event, solana::test_utils::rpc_client_with_recorder, PREFIX}; + use crate::{ + handlers::tests::into_structured_event, solana::test_utils::rpc_client_with_recorder, + PREFIX, + }; use tokio::test as async_test; diff --git a/ampd/src/solana/msg_verifier.rs b/ampd/src/solana/msg_verifier.rs index dc4c9006a..09a9cc354 100644 --- a/ampd/src/solana/msg_verifier.rs +++ b/ampd/src/solana/msg_verifier.rs @@ -1,31 +1,33 @@ use axelar_wasm_std::voting::Vote; -use gmp_gateway::events::{CallContract, GatewayEvent}; +use gmp_gateway::events::{ArchivedCallContract, ArchivedGatewayEvent, GatewayEvent}; +use solana_sdk::pubkey::Pubkey; use solana_transaction_status::{ option_serializer::OptionSerializer, EncodedConfirmedTransactionWithStatusMeta, }; -use std::{borrow::Cow, sync::Arc}; +use std::str::FromStr; +use std::sync::Arc; use tracing::error; use crate::handlers::solana_verify_msg::Message; -impl PartialEq<&Message> for GatewayEvent<'_> { +impl PartialEq<&Message> for &ArchivedGatewayEvent { fn eq(&self, msg: &&Message) -> bool { match self { - GatewayEvent::CallContract(Cow::Owned(CallContract { + ArchivedGatewayEvent::CallContract(ArchivedCallContract { sender, destination_chain, destination_address, payload: _, payload_hash, - })) => { - let event_dest_addr = String::from_utf8(destination_address.to_owned()); - let event_dest_chain = String::from_utf8(destination_chain.to_owned()); - - event_dest_addr.is_ok() - && sender.to_string() == msg.source_address - && event_dest_chain.is_ok() - && event_dest_addr.unwrap() == msg.destination_address - && msg.destination_chain == event_dest_chain.unwrap() + }) => { + + let Ok(msg_sender) = Pubkey::from_str(msg.source_address.as_str()) else { + return false; + }; + + sender == &msg_sender.to_bytes() + && msg.destination_chain == destination_chain.as_str() + && msg.destination_address == destination_address.as_str() && *payload_hash == msg.payload_hash } _ => false, @@ -119,7 +121,8 @@ fn find_first_log_message_match( for (i, log) in log_messages.iter().enumerate() { match GatewayEvent::parse_log(log) { Some(parsed_ev) => { - let verified = parsed_ev == message + let arch_gw_event = parsed_ev.parse(); + let verified = arch_gw_event == message && *tx_id == message.tx_id && account_keys.contains(source_gateway_address); @@ -135,9 +138,10 @@ fn find_first_log_message_match( #[cfg(test)] mod tests { + + use axelar_rkyv_encoding::rkyv::ser::{serializers::AllocSerializer, Serializer}; use base64::{engine::general_purpose, Engine}; - use borsh::BorshSerialize; - use gmp_gateway::solana_program::pubkey::Pubkey; + use gmp_gateway::{events::CallContract, solana_program::pubkey::Pubkey}; use std::str::FromStr; @@ -167,7 +171,7 @@ mod tests { let tx_id = "3GLo4z4siudHxW1BMHBbkTKy7kfbssNFaxLR5hTjhEXCUzp2Pi2VVwybc1s96pEKjRre7CcKKeLhni79zWTNUseP".to_string(); let destination_chain = "eth".to_string(); let destination_address = "0x0".to_string(); - let _payload: Vec = Vec::new(); + let payload: Vec = Vec::new(); let payload_hash: [u8; 32] = [0; 32]; let source_gateway_address: String = "sol_gateway_addr".to_string(); let source_pubkey = Pubkey::from([0; 32]); @@ -212,17 +216,18 @@ mod tests { payload: Vec, payload_hash: [u8; 32], ) -> String { - let event = gmp_gateway::events::GatewayEvent::CallContract(Cow::Owned(CallContract { - sender, - destination_chain, - destination_address, + let event = gmp_gateway::events::GatewayEvent::CallContract(CallContract { + sender: sender.to_bytes(), + destination_chain: String::from_utf8(destination_chain).unwrap(), + destination_address: String::from_utf8(destination_address).unwrap(), payload, payload_hash, - })); + }); - let mut event_data = Vec::new(); - event.serialize(&mut event_data).unwrap(); - let event_data_b64 = general_purpose::STANDARD.encode(event_data); + let mut serializer = AllocSerializer::<0>::default(); + serializer.serialize_value(&event).unwrap(); + let bytes = serializer.into_serializer().into_inner(); + let event_data_b64 = general_purpose::STANDARD.encode(bytes); let mut log_message = "Program data: ".to_string(); log_message.push_str(&event_data_b64); log_message diff --git a/ampd/src/solana/tests/solana_tx.json b/ampd/src/solana/tests/solana_tx.json index 973a7a259..fec5d8a55 100644 --- a/ampd/src/solana/tests/solana_tx.json +++ b/ampd/src/solana/tests/solana_tx.json @@ -10,7 +10,7 @@ "logMessages": [ "BAD_LOG_MESSAGE", "Program data: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAGFicgMAAAAweDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=", - "Program data: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAGV0aAMAAAAweDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=" + "Program data: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABldGgAAAAAAzB4MAAAAAADrP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=" ] }, "slot": 430, diff --git a/ampd/src/solana/verifier_set_verifier.rs b/ampd/src/solana/verifier_set_verifier.rs index a081b07f1..acc4c5fcf 100644 --- a/ampd/src/solana/verifier_set_verifier.rs +++ b/ampd/src/solana/verifier_set_verifier.rs @@ -1,7 +1,8 @@ -use axelar_message_primitives::Address; use axelar_wasm_std::voting::Vote; -use hex::ToHex; use multisig::key::PublicKey; +use multisig::verifier_set::VerifierSet; +use sha3::Digest; +use sha3::Keccak256; use crate::handlers::solana_verify_verifier_set::VerifierSetConfirmation; use solana_transaction_status::{ @@ -10,7 +11,7 @@ use solana_transaction_status::{ use thiserror::Error; use tracing::error; -use gmp_gateway::events::GatewayEvent; +use gmp_gateway::events::{EventContainer, GatewayEvent}; #[derive(Error, Debug, PartialEq)] pub enum VerificationError { @@ -22,7 +23,9 @@ pub enum VerificationError { type Result = std::result::Result; -pub fn parse_gateway_event(tx: &EncodedConfirmedTransactionWithStatusMeta) -> Result { +pub fn parse_gateway_event( + tx: &EncodedConfirmedTransactionWithStatusMeta, +) -> Result { let Some(meta) = &tx.transaction.meta else { return Err(VerificationError::NoLogMessages); }; @@ -40,213 +43,90 @@ pub fn parse_gateway_event(tx: &EncodedConfirmedTransactionWithStatusMeta) -> Re #[tracing::instrument(name = "solana_verify_verifier_set")] pub fn verify_verifier_set( verifier_set_conf: &VerifierSetConfirmation, - solana_signers: &[Address], - solana_weights: &[u128], - solana_quorum: u128, + new_signers_hash: &[u8; 32], ) -> Vote { - let tx_id = &verifier_set_conf.tx_id; - let verifier_set = &verifier_set_conf.verifier_set; - let verifier_set_threshold = verifier_set.threshold.u128(); - - if solana_signers.len() != solana_weights.len() { - error!( - tx_id, - solana_signers_count = solana_signers.len(), - solana_weights_count = solana_weights.len(), - "Signers length do not match in solana onchain data.", - ); - return Vote::FailedOnChain; + let axelar_verifier_set_hash = hash_verifier_set(&verifier_set_conf.verifier_set); + if &axelar_verifier_set_hash == new_signers_hash { + return Vote::SucceededOnChain; } + Vote::FailedOnChain +} - if verifier_set_threshold != solana_quorum { - error!( - tx_id, - axelar_threshold = verifier_set_threshold, - solana_quorum, - "Verifier set threshold do not match." - ); - return Vote::FailedOnChain; - } +fn hash_verifier_set(verifier_set: &VerifierSet) -> [u8; 32] { + let mut hasher = Keccak256::new(); - for (solana_addr, solana_weight) in solana_signers.iter().zip(solana_weights.iter()) { - let solana_addr_hex = solana_addr.encode_hex::(); - let Some((addr, signer)) = verifier_set.signers.get_key_value(&solana_addr_hex) else { - error!( - tx_id, - solana_addr_hex, "Lookup for solana signer address failed on axelar verifier set", - ); - return Vote::FailedOnChain; - }; - let signer_address = signer.address.to_string(); - if *addr != signer_address { - error!( - tx_id, - verifier_set_map_key=addr, - verifier_set_inner_signer_address=signer_address, - "Axelar verifier set has inconsistencies. Map key (Address) is different than the inner signer address.", - ); - return Vote::FailedOnChain; - } - let signer_pub_key = match &signer.pub_key { - PublicKey::Ecdsa(hb) | PublicKey::Ed25519(hb) => hb, - }; - if solana_addr.as_ref() != signer_pub_key.as_slice() { - let signer_pub_key_hex = signer.pub_key.encode_hex::(); - error!( - tx_id, - solana_addr_hex, - signer_pub_key_hex, - "Solana address is different than Axelar signer public key.", - ); - return Vote::FailedOnChain; - } + // Length prefix the bytes to be hashed to prevent hash collisions + hasher.update(verifier_set.signers.len().to_le_bytes()); - if *solana_weight != signer.weight.u128() { - error!( - tx_id, - solana_addr_hex, - solana_weight, - axelar_signer_weight = signer.weight.u128(), - "Signer weight differs", - ); - return Vote::FailedOnChain; + verifier_set.signers.values().for_each(|signer| { + match signer.pub_key { + PublicKey::Ecdsa(_) => hasher.update(b"secp256k1"), + PublicKey::Ed25519(_) => hasher.update(b"ed25519"), } - } - Vote::SucceededOnChain + hasher.update(signer.pub_key.as_ref()); + hasher.update(signer.weight.to_le_bytes()); + }); + + hasher.update(verifier_set.threshold.to_le_bytes()); + hasher.update(verifier_set.created_at.to_le_bytes()); + + hasher.finalize().into() } #[cfg(test)] mod tests { + use std::str::FromStr; + use super::*; + use axelar_rkyv_encoding::hasher::generic::Keccak256Hasher; use cosmwasm_std::{Addr, HexBinary}; use multisig::{ - key::{KeyType, PublicKey}, + key::KeyType, test::common::{build_verifier_set, TestSigner}, }; - use super::*; - #[test] - fn test_verifier_test_verification_ok() { - let (verifier_set_conf, sol_signers, sol_weights, sol_quorum) = - matching_verifier_set_and_sol_data(); + fn test_axelar_verifier_set_hashing_is_eq_to_rkyv_hashing() { + let (verifier_set_conf, sol_verifier_set) = matching_verifier_set_and_sol_data(); - let vote = verify_verifier_set(&verifier_set_conf, &sol_signers, &sol_weights, sol_quorum); + let vote = verify_verifier_set( + &verifier_set_conf, + &sol_verifier_set.hash(Keccak256Hasher::default()), + ); assert_eq!(Vote::SucceededOnChain, vote); } - #[test] - fn test_verifier_test_verification_fails_due_to_different_threshold() { - let (verifier_set_conf, sol_signers, sol_weights, mut sol_quorum) = - matching_verifier_set_and_sol_data(); - - sol_quorum += 1; - - let vote = verify_verifier_set(&verifier_set_conf, &sol_signers, &sol_weights, sol_quorum); - - assert_eq!(Vote::FailedOnChain, vote); - } - - #[test] - fn test_verifier_test_verification_fails_due_to_different_weights_vec_len() { - let (verifier_set_conf, sol_signers, mut sol_weights, sol_quorum) = - matching_verifier_set_and_sol_data(); - - sol_weights.push(1); - - let vote = verify_verifier_set(&verifier_set_conf, &sol_signers, &sol_weights, sol_quorum); - - assert_eq!(Vote::FailedOnChain, vote); - } - - #[test] - fn test_verifier_test_verification_fails_due_to_missing_signer() { - let (verifier_set_conf, mut sol_signers, sol_weights, sol_quorum) = - matching_verifier_set_and_sol_data(); - - sol_signers.pop().unwrap(); - - let vote = verify_verifier_set(&verifier_set_conf, &sol_signers, &sol_weights, sol_quorum); - - assert_eq!(Vote::FailedOnChain, vote); - } - - #[test] - fn test_verifier_test_verification_fails_due_to_different_signer_set_address() { - let (mut verifier_set_conf, sol_signers, sol_weights, sol_quorum) = - matching_verifier_set_and_sol_data(); - - let signer = verifier_set_conf - .verifier_set - .signers - .get_mut(sol_signers.get(1).unwrap().encode_hex::().as_str()) - .unwrap(); - signer.address = - Addr::unchecked("ha ! a different address in the signer set address field"); - - let vote = verify_verifier_set(&verifier_set_conf, &sol_signers, &sol_weights, sol_quorum); - - assert_eq!(Vote::FailedOnChain, vote); - } - - #[test] - fn test_verifier_test_verification_fails_due_to_different_signer_set_pubkey() { - let (mut verifier_set_conf, sol_signers, sol_weights, sol_quorum) = - matching_verifier_set_and_sol_data(); - - let signer = verifier_set_conf - .verifier_set - .signers - .get_mut(sol_signers.get(1).unwrap().encode_hex::().as_str()) - .unwrap(); - signer.pub_key = PublicKey::Ecdsa(HexBinary::from_hex("d9e1eb2b47cb8b7c1c2a5a32f6fa6c57d0e6fdd53eaa8c76fe7f0b3b390cfb3c40f258e476f2ca0e6a7ca2622ea23afe7bd1f873448e01eed86cd6446a403f35").unwrap()); - - let vote = verify_verifier_set(&verifier_set_conf, &sol_signers, &sol_weights, sol_quorum); - - assert_eq!(Vote::FailedOnChain, vote); - } - - #[test] - fn test_verifier_test_verification_fails_due_to_different_signer_weights() { - let (verifier_set_conf, sol_signers, mut sol_weights, sol_quorum) = - matching_verifier_set_and_sol_data(); - - *sol_weights.get_mut(1).unwrap() = 666; - - let vote = verify_verifier_set(&verifier_set_conf, &sol_signers, &sol_weights, sol_quorum); - - assert_eq!(Vote::FailedOnChain, vote); - } - - fn matching_verifier_set_and_sol_data( - ) -> (VerifierSetConfirmation, Vec
, Vec, u128) { + fn matching_verifier_set_and_sol_data() -> ( + VerifierSetConfirmation, + axelar_rkyv_encoding::types::VerifierSet, + ) { let verifier_set = build_verifier_set(KeyType::Ecdsa, &signers()); let sol_signers = verifier_set .signers .values() - .map(|v| Address::try_from(v.address.as_str()).unwrap()) + .map(|v| { + let pair = ( + axelar_rkyv_encoding::types::PublicKey::from_str(v.address.as_str()).unwrap(), + 1.into(), + ); + pair + }) .collect(); - let sol_weights = verifier_set - .signers - .values() - .map(|v| v.weight.u128()) - .collect::>(); + let sol_quorum = verifier_set.threshold.u128(); + let sol_verifier_set = + axelar_rkyv_encoding::types::VerifierSet::new(0, sol_signers, sol_quorum.into()); + let verifier_set_confirmation = VerifierSetConfirmation { tx_id: String::from("90af"), event_index: 1, verifier_set, }; - ( - verifier_set_confirmation, - sol_signers, - sol_weights, - sol_quorum, - ) + (verifier_set_confirmation, sol_verifier_set) } fn signers() -> Vec { From 85af2e41b275d90dd21aa449d6b637cd289118da Mon Sep 17 00:00:00 2001 From: eloylp Date: Thu, 12 Sep 2024 13:39:06 +0200 Subject: [PATCH 079/109] refactor: non used dep (#39) --- Cargo.lock | 310 +++++++++++++++++++++++++----------------------- ampd/Cargo.toml | 2 - 2 files changed, 162 insertions(+), 150 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 75bb47a8a..cf4e8c4c7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -25,13 +25,19 @@ dependencies = [ [[package]] name = "addr2line" -version = "0.24.1" +version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5fb1d8e4442bd405fdfd1dacb42792696b0cf9cb15882e5d097b742a676d375" +checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678" dependencies = [ "gimli", ] +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + [[package]] name = "adler2" version = "2.0.0" @@ -245,14 +251,13 @@ name = "ampd" version = "1.0.0" dependencies = [ "async-trait", - "axelar-message-primitives", "axelar-rkyv-encoding", "axelar-wasm-std", "axum 0.7.5", "base64 0.21.7", "bcs", "borsh 1.5.1", - "clap 4.5.17", + "clap 4.5.16", "config", "cosmrs", "cosmwasm-std", @@ -440,9 +445,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.88" +version = "1.0.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e1496f8fb1fbf272686b8d37f523dab3e4a7443300055e74cdaa449f3114356" +checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" [[package]] name = "ark-bls12-381" @@ -1125,17 +1130,17 @@ dependencies = [ [[package]] name = "backtrace" -version = "0.3.74" +version = "0.3.73" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" +checksum = "5cc23269a4f8976d0a4d2e7109211a419fe30e8d88d677cd60b6bc79c5732e0a" dependencies = [ "addr2line", + "cc", "cfg-if", "libc", - "miniz_oxide", + "miniz_oxide 0.7.4", "object", "rustc-demangle", - "windows-targets 0.52.6", ] [[package]] @@ -1691,9 +1696,9 @@ checksum = "5ce89b21cab1437276d2650d57e971f9d548a2d9037cc231abdc0562b97498ce" [[package]] name = "bytemuck" -version = "1.18.0" +version = "1.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94bbb0ad554ad961ddc5da507a12a29b14e4ae5bda06b19f575a3e6079d2e2ae" +checksum = "773d90827bc3feecfb67fab12e24de0749aad83c74b9504ecde46237b5cd24e2" dependencies = [ "bytemuck_derive", ] @@ -1777,9 +1782,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.1.18" +version = "1.1.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b62ac837cdb5cb22e10a256099b4fc502b1dfe560cb282963a974d7abd80e476" +checksum = "57b6a275aa2903740dc87da01c62040406b8812552e97129a63ea8850a17c6e6" dependencies = [ "jobserver", "libc", @@ -1862,9 +1867,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.17" +version = "4.5.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e5a21b8495e732f1b3c364c9949b201ca7bae518c502c80256c96ad79eaf6ac" +checksum = "ed6719fffa43d0d87e5fd8caeab59be1554fb028cd30edc88fc4369b17971019" dependencies = [ "clap_builder", "clap_derive", @@ -1872,9 +1877,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.17" +version = "4.5.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8cf2dd12af7a047ad9d6da2b6b249759a22a7abc0f474c1dae1777afa4b21a73" +checksum = "216aec2b177652e3846684cbfe25c9964d18ec45234f0f5da5157b207ed1aab6" dependencies = [ "anstream", "anstyle", @@ -2233,9 +2238,9 @@ dependencies = [ [[package]] name = "cpufeatures" -version = "0.2.14" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "608697df725056feaccfa42cffdaeeec3fccc4ffc38358ecd19b243e716a78e0" +checksum = "51e852e6dc9a5bed1fae92dd2375037bf2b768725bf3be87811edee3249d09ad" dependencies = [ "libc", ] @@ -3659,7 +3664,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "324a1be68054ef05ad64b861cc9eaf1d623d2d8cb25b4bf2cb9cdd902b4bf253" dependencies = [ "crc32fast", - "miniz_oxide", + "miniz_oxide 0.8.0", ] [[package]] @@ -3941,9 +3946,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.31.0" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32085ea23f3234fc7846555e85283ba4de91e21016dc0455a16286d87a292d64" +checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" [[package]] name = "glob" @@ -3953,9 +3958,9 @@ checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" [[package]] name = "globset" -version = "0.4.15" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15f1ce686646e7f1e19bf7d5533fe443a45dbfb990e00629110797578b42fb19" +checksum = "57da3b9b5b85bd66f31093f8c408b90a74431672542466497dcbdfdc02034be1" dependencies = [ "aho-corasick", "bstr", @@ -4454,15 +4459,15 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.27.3" +version = "0.27.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08afdbb5c31130e3034af566421053ab03787c640246a446327f550d11bcb333" +checksum = "5ee4be2c948921a1a5320b629c4193916ed787a7f7f293fd3f7f5a6c9de74155" dependencies = [ "futures-util", "http 1.1.0", "hyper 1.4.1", "hyper-util", - "rustls 0.23.13", + "rustls 0.23.12", "rustls-pki-types", "tokio", "tokio-rustls 0.26.0", @@ -4499,9 +4504,9 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.8" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da62f120a8a37763efb0cf8fdf264b884c7b8b9ac8660b900c8661030c00e6ba" +checksum = "cde7055719c54e36e95e8719f95883f22072a48ede39db7fc17a4e1d5281e9b9" dependencies = [ "bytes", "futures-channel", @@ -4679,9 +4684,9 @@ dependencies = [ [[package]] name = "insta" -version = "1.40.0" +version = "1.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6593a41c7a73841868772495db7dc1e8ecab43bb5c0b6da2059246c4b506ab60" +checksum = "810ae6042d48e2c9e9215043563a58a80b877bc863228a74cf10c49d4620a6f5" dependencies = [ "console", "lazy_static", @@ -4770,9 +4775,9 @@ dependencies = [ [[package]] name = "ipnet" -version = "2.10.0" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "187674a687eed5fe42285b40c6291f9a01517d415fad1c3cbc6a9f778af7fcd4" +checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" [[package]] name = "iri-string" @@ -5059,9 +5064,9 @@ dependencies = [ [[package]] name = "keccak-asm" -version = "0.1.4" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "505d1856a39b200489082f90d897c3f07c455563880bc5952e38eabf731c83b6" +checksum = "422fbc7ff2f2f5bdffeb07718e5a5324dca72b0c9293d50df4026652385e3314" dependencies = [ "digest 0.10.7", "sha3-asm", @@ -5277,6 +5282,15 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" +[[package]] +name = "miniz_oxide" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" +dependencies = [ + "adler", +] + [[package]] name = "miniz_oxide" version = "0.8.0" @@ -5462,7 +5476,7 @@ source = "git+https://github.com/mystenlabs/sui?tag=mainnet-v1.26.2#f531168c7452 dependencies = [ "anyhow", "bcs", - "clap 4.5.17", + "clap 4.5.16", "codespan-reporting", "dunce", "hex", @@ -5517,7 +5531,7 @@ source = "git+https://github.com/mystenlabs/sui?tag=mainnet-v1.26.2#f531168c7452 dependencies = [ "anyhow", "bcs", - "clap 4.5.17", + "clap 4.5.16", "codespan", "colored", "move-abstract-interpreter", @@ -5537,7 +5551,7 @@ source = "git+https://github.com/mystenlabs/sui?tag=mainnet-v1.26.2#f531168c7452 dependencies = [ "anyhow", "bcs", - "clap 4.5.17", + "clap 4.5.16", "colored", "hex", "move-abstract-interpreter", @@ -6687,9 +6701,9 @@ dependencies = [ [[package]] name = "pest" -version = "2.7.12" +version = "2.7.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c73c26c01b8c87956cea613c907c9d6ecffd8d18a2a5908e5de0adfaa185cea" +checksum = "cd53dff83f26735fdc1ca837098ccf133605d794cdae66acfc2bfac3ec809d95" dependencies = [ "memchr", "thiserror", @@ -6698,9 +6712,9 @@ dependencies = [ [[package]] name = "pest_derive" -version = "2.7.12" +version = "2.7.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "664d22978e2815783adbdd2c588b455b1bd625299ce36b2a99881ac9627e6d8d" +checksum = "2a548d2beca6773b1c244554d36fcf8548a8a58e74156968211567250e48e49a" dependencies = [ "pest", "pest_generator", @@ -6708,9 +6722,9 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.7.12" +version = "2.7.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2d5487022d5d33f4c30d91c22afa240ce2a644e87fe08caad974d4eab6badbe" +checksum = "3c93a82e8d145725dcbaf44e5ea887c8a869efdcc28706df2d08c69e17077183" dependencies = [ "pest", "pest_meta", @@ -6721,9 +6735,9 @@ dependencies = [ [[package]] name = "pest_meta" -version = "2.7.12" +version = "2.7.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0091754bbd0ea592c4deb3a122ce8ecbb0753b738aa82bc055fcc2eccc8d8174" +checksum = "a941429fea7e08bedec25e4f6785b6ffaacc6b755da98df5ef3e7dcf4a124c4f" dependencies = [ "once_cell", "pest", @@ -7263,9 +7277,9 @@ dependencies = [ [[package]] name = "psm" -version = "0.1.23" +version = "0.1.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa37f80ca58604976033fae9515a8a2989fc13797d953f7c04fb8fa36a11f205" +checksum = "3b1f9bf148c15500d44581654fb9260bc9d82970f3ef777a79a40534f6aa784f" dependencies = [ "cc", ] @@ -7527,9 +7541,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.4" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0884ad60e090bf1345b93da0a5de8923c93884cd03f40dfcfddd3b4bee661853" +checksum = "2a908a6e00f1fdd0dfd9c0eb08ce85126f6d8bbda50017e74bc4a4b7d4a926a4" dependencies = [ "bitflags 2.6.0", ] @@ -7675,7 +7689,7 @@ dependencies = [ "http-body 1.0.1", "http-body-util", "hyper 1.4.1", - "hyper-rustls 0.27.3", + "hyper-rustls 0.27.2", "hyper-tls", "hyper-util", "ipnet", @@ -8033,9 +8047,9 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.37" +version = "0.38.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8acb788b847c24f28525660c4d7758620a7210875711f79e7f663cc152726811" +checksum = "a85d50532239da68e9addb745ba38ff4612a242c1c7ceea689c4bc7c2f43c36f" dependencies = [ "bitflags 2.6.0", "errno", @@ -8083,13 +8097,13 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.13" +version = "0.23.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2dabaac7466917e566adb06783a81ca48944c6898a1b08b9374106dd671f4c8" +checksum = "c58f8c84392efc0a126acce10fa59ff7b3d2ac06ab451a33f2741989b806b044" dependencies = [ "once_cell", "rustls-pki-types", - "rustls-webpki 0.102.8", + "rustls-webpki 0.102.7", "subtle", "zeroize", ] @@ -8155,9 +8169,9 @@ dependencies = [ [[package]] name = "rustls-webpki" -version = "0.102.8" +version = "0.102.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" +checksum = "84678086bd54edf2b415183ed7a94d0efb049f1b646a33e22a36f3794be6ae56" dependencies = [ "ring 0.17.8", "rustls-pki-types", @@ -8223,11 +8237,11 @@ dependencies = [ [[package]] name = "schannel" -version = "0.1.24" +version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9aaafd5a2b6e3d657ff009d82fbd630b6bd54dd4eb06f21693925cdf80f9b8b" +checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.52.0", ] [[package]] @@ -8405,9 +8419,9 @@ checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" [[package]] name = "serde" -version = "1.0.210" +version = "1.0.209" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8e3592472072e6e22e0a54d5904d9febf8508f65fb8552499a1abc7d1078c3a" +checksum = "99fce0ffe7310761ca6bf9faf5115afbc19688edd00171d81b1bb1b116c63e09" dependencies = [ "serde_derive", ] @@ -8462,9 +8476,9 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.210" +version = "1.0.209" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "243902eda00fad750862fc144cea25caca5e20d615af0a81bee94ca738f1df1f" +checksum = "a5831b979fd7b5439637af1752d535ff49f4860c0f341d1baeb6faf0f4242170" dependencies = [ "proc-macro2 1.0.86", "quote 1.0.37", @@ -8484,9 +8498,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.128" +version = "1.0.127" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ff5456707a1de34e7e37f2a6fd3d3f808c318259cbd01ab6377795054b483d8" +checksum = "8043c06d9f82bd7271361ed64f415fe5e12a77fdb52e573e7f06a516dea329ad" dependencies = [ "indexmap 2.5.0", "itoa", @@ -8713,9 +8727,9 @@ dependencies = [ [[package]] name = "sha3-asm" -version = "0.1.4" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c28efc5e327c837aa837c59eae585fc250715ef939ac32881bcc11677cd02d46" +checksum = "57d79b758b7cb2085612b11a235055e485605a5103faccdd633f35bd7aee69dd" dependencies = [ "cc", "cfg-if", @@ -8878,9 +8892,9 @@ dependencies = [ [[package]] name = "solana-account-decoder" -version = "2.0.9" +version = "2.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1889be2bdb77224ed1bb726e64983a9ede622da5a22e8fb0619a2ec6885e84f2" +checksum = "e92694b819c0baf7fe9d1f3d74c0360b08c49054e888f9bfbba731653bb7ff22" dependencies = [ "Inflector", "base64 0.22.1", @@ -8903,9 +8917,9 @@ dependencies = [ [[package]] name = "solana-clap-utils" -version = "2.0.9" +version = "2.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "044b8e6933bf9d6ccba74e4ea9b9ef589d3e89347d816fdbdeaf31cb218804db" +checksum = "bf985fe4abeed8401b715d3c3cf08551455ea18bfe1e6fcf96f995f20723e053" dependencies = [ "chrono", "clap 2.34.0", @@ -8920,9 +8934,9 @@ dependencies = [ [[package]] name = "solana-client" -version = "2.0.9" +version = "2.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0dca5fbbb18347109189799fc4554ba311eb201af9ffdf683628477e9652ccf" +checksum = "9a455a20e3e03d2da6d1e4f6c1f122c4ba4ab119651f02bd6744cc5af03e7774" dependencies = [ "async-trait", "bincode", @@ -8953,9 +8967,9 @@ dependencies = [ [[package]] name = "solana-compute-budget" -version = "2.0.9" +version = "2.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1a9d6e202f04a2f57b314ba3494a5230f9708247070393f782a754774b1fbb3" +checksum = "f1610de88eddf42a9a4b0a8f31eb3f7f9863850dedf51355508550975e8895cd" dependencies = [ "rustc_version 0.4.1", "solana-sdk", @@ -8963,9 +8977,9 @@ dependencies = [ [[package]] name = "solana-config-program" -version = "2.0.9" +version = "2.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92bbca6f0351b8bf3de4472a6cdc4e5f94ddd8eb571230eb6c57ed42bda10553" +checksum = "4e7961fbad7a0facdc03037b484bacbf80198f68347d37ed84b2866b63c24015" dependencies = [ "bincode", "chrono", @@ -8977,9 +8991,9 @@ dependencies = [ [[package]] name = "solana-connection-cache" -version = "2.0.9" +version = "2.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c72db598b2e364b2457c54a3d26935accf691643a4d9bf94396f526606ff1764" +checksum = "163e56d6851952e4ccde37a9b3fb6edab0207b6eb871da506434d55df4e8de94" dependencies = [ "async-trait", "bincode", @@ -8998,9 +9012,9 @@ dependencies = [ [[package]] name = "solana-curve25519" -version = "2.0.9" +version = "2.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0aa9209adbba7662a0a6a79ab48b4d09a2cb23a3db3dd817818e1bc28da99a11" +checksum = "147c81e77b74f5d0a52579c1cf982fffb8c4491fb3baabf0e4fa19e2f6f39030" dependencies = [ "bytemuck", "bytemuck_derive", @@ -9011,9 +9025,9 @@ dependencies = [ [[package]] name = "solana-inline-spl" -version = "2.0.9" +version = "2.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fb9977e0e7769dfef30b1390289a65eb10b9553c4590eecd1fa5abbf2224c30" +checksum = "0f101319f4740095125c5006be1dc6d4b6108180def37ae94df42f16e78b93f4" dependencies = [ "bytemuck", "rustc_version 0.4.1", @@ -9022,9 +9036,9 @@ dependencies = [ [[package]] name = "solana-logger" -version = "2.0.9" +version = "2.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ad3a2edfbecfd010c45b4fe34c472910392e273cf165a03e187cb09cf690b22" +checksum = "dcc3c188176db5d4e60c137525439c4b881dfd262dd306abcac4c568f15177a6" dependencies = [ "env_logger", "lazy_static", @@ -9033,9 +9047,9 @@ dependencies = [ [[package]] name = "solana-measure" -version = "2.0.9" +version = "2.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d08a0175bfa4cb16889feeca9d4d5bc144a91cfbe19a3746f1823600a62684b" +checksum = "5fe09f58977e579c3e91f0a7032a1d741e76327924ae868d17beb5d496b40c8f" dependencies = [ "log", "solana-sdk", @@ -9043,9 +9057,9 @@ dependencies = [ [[package]] name = "solana-metrics" -version = "2.0.9" +version = "2.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d312fb471563f31fee1578ca8c51619458bddf25f36ad10388a2a1812ee27e25" +checksum = "7860d18901af0b24e05d7631cd655924eb056d83a52040234f827cc3cc8da0c6" dependencies = [ "crossbeam-channel", "gethostname", @@ -9058,9 +9072,9 @@ dependencies = [ [[package]] name = "solana-net-utils" -version = "2.0.9" +version = "2.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed5791e57f3d2e2bf05c23d3be6c8a536dbbb10fe9a3e992b1e4a71eab132b11" +checksum = "8b6723ddcc4393d9d2d5e258871461d0002e45c7d9b6ea895bff1011d16163e9" dependencies = [ "bincode", "clap 3.2.25", @@ -9081,9 +9095,9 @@ dependencies = [ [[package]] name = "solana-perf" -version = "2.0.9" +version = "2.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab0b0dbc72b93e800c6034c3d76f5e3a09f8fcfb63a1c07853bed54aac2b4094" +checksum = "9393d11aa5643f6afdffa8ab7b12d8149b7b32409149f673f832f2be442fbe10" dependencies = [ "ahash 0.8.11", "bincode", @@ -9108,9 +9122,9 @@ dependencies = [ [[package]] name = "solana-program" -version = "2.0.9" +version = "2.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51237f3618428e8b9dd1e5c3d89b8f44f00dbcb88a7ad577ebdfdfac51501c61" +checksum = "8d899c2a1d37290dcfeeb9d1c0032915a29bd48f35759f19ff1e0f6b096eca0b" dependencies = [ "ark-bn254", "ark-ec", @@ -9154,9 +9168,9 @@ dependencies = [ [[package]] name = "solana-program-runtime" -version = "2.0.9" +version = "2.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8d2c1801dc17b166db40968ef1ab30f71b319edcaa69efe8c29a66258baff52" +checksum = "c2612ef05b38afcbf642f9be889819713b23564a26d3f612b2ab5616c9ea4c19" dependencies = [ "base64 0.22.1", "bincode", @@ -9183,9 +9197,9 @@ dependencies = [ [[package]] name = "solana-pubsub-client" -version = "2.0.9" +version = "2.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfee83758014a114d622926172dc5ba661490bee32b1b6cac5b2fe06d53f3e6e" +checksum = "be61b8e62654303ba158764fb37b4706cc280c7cd239dc977edaf599dfb79875" dependencies = [ "crossbeam-channel", "futures-util", @@ -9208,9 +9222,9 @@ dependencies = [ [[package]] name = "solana-quic-client" -version = "2.0.9" +version = "2.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df3c92fbee83d91f9374cc5e74ec01c7cd8aed846b4c27bc6badf890dcd9441b" +checksum = "1bcf89e7ed0daabc4db107d6c38453bbd0ef84150f0acec760c65579361378cb" dependencies = [ "async-mutex", "async-trait", @@ -9234,9 +9248,9 @@ dependencies = [ [[package]] name = "solana-rayon-threadlimit" -version = "2.0.9" +version = "2.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e56a83aaa9a09975a5ae7bcbaa59b1fa40414505ac1a4640b350c4b200453ac7" +checksum = "45d6268135fcf812d9e9add2dff578b7ac8a0d003d6f95b996aec7a0311aad8e" dependencies = [ "lazy_static", "num_cpus", @@ -9244,9 +9258,9 @@ dependencies = [ [[package]] name = "solana-remote-wallet" -version = "2.0.9" +version = "2.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ca04ef9dbc5d285af02759b788f42b33f2d537f9f4ec9cfe18bbd560f1caac9" +checksum = "fc12b8f2e668712995ae972c497663fdcb61f19b925029d104e19917b8d66428" dependencies = [ "console", "dialoguer", @@ -9263,9 +9277,9 @@ dependencies = [ [[package]] name = "solana-rpc-client" -version = "2.0.9" +version = "2.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1940f4fa5dcbffc21c35ac4dc9e63545647b39f24ef92bd60ee4c14373f6c772" +checksum = "846113929e8458f5dcb875d379cc28bdb9149ba68db80202b220795608bc3227" dependencies = [ "async-trait", "base64 0.22.1", @@ -9290,9 +9304,9 @@ dependencies = [ [[package]] name = "solana-rpc-client-api" -version = "2.0.9" +version = "2.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8045228371e1c8dd9ae7ee5d607640e245c5fb4bcaf74022ce9f7864701d187" +checksum = "272eb64c9baf966eccf4fa5c8ed9344fe162d2a13a2ac09cf2cd2b40a85a3a65" dependencies = [ "anyhow", "base64 0.22.1", @@ -9314,9 +9328,9 @@ dependencies = [ [[package]] name = "solana-rpc-client-nonce-utils" -version = "2.0.9" +version = "2.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0248b33385d6f4b5eca8c0e396434cbbbd0aa8ac178e83922c1228a4a053c51" +checksum = "23cf6f2875e47a5ac67b00dda4306646bb63ae5bb79ef408758cf1bad810497b" dependencies = [ "clap 2.34.0", "solana-clap-utils", @@ -9327,9 +9341,9 @@ dependencies = [ [[package]] name = "solana-sdk" -version = "2.0.9" +version = "2.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da640d96314707ba69feb3c0b1c5fdefb418c5d5e684fe5a9a27b8daae8c18b5" +checksum = "b62d86ef4a245cec35b7b0c24a659e22cc2d1fbbad65c141e332cc5928ed04dc" dependencies = [ "bincode", "bitflags 2.6.0", @@ -9376,9 +9390,9 @@ dependencies = [ [[package]] name = "solana-sdk-macro" -version = "2.0.9" +version = "2.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45b6e930455ef68cf15e5a22a0e0c207e67c3d70978a565e0a64f568c8a24129" +checksum = "23198ed620c4a61c97fe49bd907fc965659aea9a5ed0ea0cf90084eecc72a3c1" dependencies = [ "bs58 0.5.1", "proc-macro2 1.0.86", @@ -9395,9 +9409,9 @@ checksum = "468aa43b7edb1f9b7b7b686d5c3aeb6630dc1708e86e31343499dd5c4d775183" [[package]] name = "solana-streamer" -version = "2.0.9" +version = "2.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d11a89e779ac29efff96530d6756623ceed4986cb0c9e43597aa02a57db19fc2" +checksum = "2cef6776681796df95aeaacf5af2f017fd6e215579f6589ea67904bc384b4bcc" dependencies = [ "async-channel", "bytes", @@ -9429,9 +9443,9 @@ dependencies = [ [[package]] name = "solana-thin-client" -version = "2.0.9" +version = "2.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "528410974827ea364e8055a41c26859f60d633553d70da338d3dd1c668bc4f06" +checksum = "ff07c0d23dd839eda4324a02c8634855bdd1f72c385f4466e5caf78e7a5e2a25" dependencies = [ "bincode", "log", @@ -9444,9 +9458,9 @@ dependencies = [ [[package]] name = "solana-tpu-client" -version = "2.0.9" +version = "2.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7b35d5344bf37ac9febca33a2afeccf00d235919927494937b15e57622726f4" +checksum = "fce3b3fb075bd06f360c74d77816d3527dbf9bb2f2e89f9e0a52a55c06575871" dependencies = [ "async-trait", "bincode", @@ -9468,9 +9482,9 @@ dependencies = [ [[package]] name = "solana-transaction-metrics-tracker" -version = "2.0.9" +version = "2.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4866898994a7b9436df0431b8400934242eb7ef6e548f5311efb2e4aafcced30" +checksum = "f23895b81f3cc9ebf1472609bd2ce75b9bdea0f89a0c3245d5c72df354a92a4d" dependencies = [ "Inflector", "base64 0.22.1", @@ -9484,9 +9498,9 @@ dependencies = [ [[package]] name = "solana-transaction-status" -version = "2.0.9" +version = "2.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e3294eebb17ee6a2bf7f5365a332da714a8c88b92e59121fc32c495d0f7c4d8" +checksum = "4873ad4df45ef4f88b68982ac651caa93f489a4bfe62eedb2f59ea48da1df88e" dependencies = [ "Inflector", "base64 0.22.1", @@ -9511,9 +9525,9 @@ dependencies = [ [[package]] name = "solana-type-overrides" -version = "2.0.9" +version = "2.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4201087a2d944f1fe1a5531d612384a825378339b26c84df4681afb7b52018b" +checksum = "540b1df966da86b0e183e124e48fef59605daf57b22809842b5273cb49277a89" dependencies = [ "lazy_static", "rand 0.8.5", @@ -9521,9 +9535,9 @@ dependencies = [ [[package]] name = "solana-udp-client" -version = "2.0.9" +version = "2.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6f0f2db2e9266a0818df69ac6365d0109bf1f2f1832c8a7d033be70ac742138" +checksum = "91423aac2b1410e5f81faeb8cf655d63249d525761c4bd3f92a2c8e7641060bb" dependencies = [ "async-trait", "solana-connection-cache", @@ -9536,9 +9550,9 @@ dependencies = [ [[package]] name = "solana-version" -version = "2.0.9" +version = "2.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c5e80bec4215dac4a0bacd3b68be430621adf1a37aba3239032f8c91ab1517a" +checksum = "cfc990baf7a1c8d08eff49add6b971b6f4c37c8a2ae4967b4c4300475226e71c" dependencies = [ "log", "rustc_version 0.4.1", @@ -9550,9 +9564,9 @@ dependencies = [ [[package]] name = "solana-vote" -version = "2.0.9" +version = "2.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a72891adbea06048965dfd4e0f1897f113d03bafb9e81f895bbe560e0b3a5ec" +checksum = "5755419c8efaea27fd5fcd241ba43bcf248e7e420bb4733211236517ae93f38b" dependencies = [ "itertools 0.12.1", "log", @@ -9565,9 +9579,9 @@ dependencies = [ [[package]] name = "solana-vote-program" -version = "2.0.9" +version = "2.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd00cd5515020cb6c0c5167f1d173fddeae5e1f7ffd77909ea43bece86f38cc9" +checksum = "8165c8bc37e34456f352715acb309eb65e014beca0297eaccdd4319dfea79981" dependencies = [ "bincode", "log", @@ -9585,9 +9599,9 @@ dependencies = [ [[package]] name = "solana-zk-token-sdk" -version = "2.0.9" +version = "2.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "860d780884e7e0eab6bdc909d80ef32b791d1c0963aff8cdfcbd4f00ca640c8a" +checksum = "b286fa24abe68536297e232670d01d2c478f6d75a46311809c0a07bf251f3dfc" dependencies = [ "aes-gcm-siv", "base64 0.22.1", @@ -10207,7 +10221,7 @@ name = "sui-protocol-config" version = "0.1.0" source = "git+https://github.com/mystenlabs/sui?tag=mainnet-v1.26.2#f531168c745260b60a4ec4906c9f2b22240d872d" dependencies = [ - "clap 4.5.17", + "clap 4.5.16", "insta", "move-vm-config", "schemars", @@ -10907,16 +10921,16 @@ version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" dependencies = [ - "rustls 0.23.13", + "rustls 0.23.12", "rustls-pki-types", "tokio", ] [[package]] name = "tokio-stream" -version = "0.1.16" +version = "0.1.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f4e6ce100d0eb49a2734f8c0812bcd324cf357d21810932c5df6b96ef2b86f1" +checksum = "267ac89e0bec6e691e5813911606935d77c476ff49024f98abcea3e7b15e37af" dependencies = [ "futures-core", "pin-project-lite", @@ -10941,9 +10955,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.12" +version = "0.7.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61e7c3654c13bcd040d4a03abee2c75b1d14a37b423cf5a813ceae1cc903ec6a" +checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1" dependencies = [ "bytes", "futures-core", @@ -11339,9 +11353,9 @@ checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" [[package]] name = "unicode-ident" -version = "1.0.13" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" [[package]] name = "unicode-normalization" diff --git a/ampd/Cargo.toml b/ampd/Cargo.toml index 6746f471d..e98883858 100644 --- a/ampd/Cargo.toml +++ b/ampd/Cargo.toml @@ -90,8 +90,6 @@ valuable = { version = "0.1.0", features = ["derive"] } valuable-serde = { version = "0.1.0", features = ["std"] } voting-verifier = { workspace = true } gmp-gateway = { git = "https://github.com/eigerco/solana-axelar.git", branch = "main" } -axelar-message-primitives = { git = "https://github.com/eigerco/solana-axelar.git", branch = "main" } - lru = "0.12.3" [dev-dependencies] From 76bd0361cf916a521268c02943e38c72501d54e1 Mon Sep 17 00:00:00 2001 From: eloylp Date: Fri, 13 Sep 2024 11:58:30 +0200 Subject: [PATCH 080/109] Update solana deps (#40) --- Cargo.lock | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index cf4e8c4c7..d112399e5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -918,7 +918,7 @@ checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" [[package]] name = "axelar-message-primitives" version = "0.1.0" -source = "git+https://github.com/eigerco/solana-axelar.git?branch=main#80171c678822ea7ba51101b65a21520e048f8a81" +source = "git+https://github.com/eigerco/solana-axelar.git?branch=main#06eb92a6494cf29bf8cc855231b12479ee80066d" dependencies = [ "alloy-sol-types", "anyhow", @@ -937,7 +937,7 @@ dependencies = [ [[package]] name = "axelar-rkyv-encoding" version = "0.1.0" -source = "git+https://github.com/eigerco/solana-axelar.git?branch=main#80171c678822ea7ba51101b65a21520e048f8a81" +source = "git+https://github.com/eigerco/solana-axelar.git?branch=main#06eb92a6494cf29bf8cc855231b12479ee80066d" dependencies = [ "bnum", "bs58 0.5.1", @@ -3984,7 +3984,7 @@ dependencies = [ [[package]] name = "gmp-gateway" version = "0.1.0" -source = "git+https://github.com/eigerco/solana-axelar.git?branch=main#80171c678822ea7ba51101b65a21520e048f8a81" +source = "git+https://github.com/eigerco/solana-axelar.git?branch=main#06eb92a6494cf29bf8cc855231b12479ee80066d" dependencies = [ "axelar-message-primitives", "axelar-rkyv-encoding", @@ -6293,7 +6293,7 @@ version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" dependencies = [ - "proc-macro-crate 3.2.0", + "proc-macro-crate 1.1.3", "proc-macro2 1.0.86", "quote 1.0.37", "syn 2.0.77", @@ -7103,7 +7103,7 @@ dependencies = [ [[package]] name = "program-utils" version = "0.1.0" -source = "git+https://github.com/eigerco/solana-axelar.git?branch=main#80171c678822ea7ba51101b65a21520e048f8a81" +source = "git+https://github.com/eigerco/solana-axelar.git?branch=main#06eb92a6494cf29bf8cc855231b12479ee80066d" dependencies = [ "borsh 1.5.1", "solana-program", @@ -7251,7 +7251,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81bddcdb20abf9501610992b6759a4c888aef7d1a7247ef75e2404275ac24af1" dependencies = [ "anyhow", - "itertools 0.12.1", + "itertools 0.11.0", "proc-macro2 1.0.86", "quote 1.0.37", "syn 2.0.77", @@ -11784,7 +11784,7 @@ version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.48.0", ] [[package]] From a3b8b13fd4c07940ce51c10dbdcf30e4889ad09d Mon Sep 17 00:00:00 2001 From: Roberts Pumpurs <33699735+roberts-pumpurs@users.noreply.github.com> Date: Mon, 23 Sep 2024 10:31:54 +0300 Subject: [PATCH 081/109] feat: update rkyv encoding & add solana base58 address verification (#42) * feat: solana base58 address verifier * feat: update the verifier set calculation --- Cargo.lock | 365 +++++++++++------------ Cargo.toml | 11 +- ampd/src/solana/verifier_set_verifier.rs | 4 +- packages/axelar-wasm-std/Cargo.toml | 6 +- packages/axelar-wasm-std/src/address.rs | 64 ++++ 5 files changed, 248 insertions(+), 202 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 97457c446..e9ca00af8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -25,19 +25,13 @@ dependencies = [ [[package]] name = "addr2line" -version = "0.22.0" +version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678" +checksum = "f5fb1d8e4442bd405fdfd1dacb42792696b0cf9cb15882e5d097b742a676d375" dependencies = [ "gimli", ] -[[package]] -name = "adler" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" - [[package]] name = "adler2" version = "2.0.0" @@ -257,7 +251,7 @@ dependencies = [ "base64 0.21.7", "bcs", "borsh 1.5.1", - "clap 4.5.16", + "clap 4.5.17", "config", "cosmrs", "cosmwasm-std", @@ -445,9 +439,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.86" +version = "1.0.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" +checksum = "86fdf8605db99b54d3cd748a44c6d04df638eb5dafb219b135d0149bd0db01f6" [[package]] name = "ark-bls12-381" @@ -707,9 +701,9 @@ dependencies = [ [[package]] name = "arrayref" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d151e35f61089500b617991b791fc8bfd237ae50cd5950803758a179b41e67a" +checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" [[package]] name = "arrayvec" @@ -918,7 +912,7 @@ checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" [[package]] name = "axelar-message-primitives" version = "0.1.0" -source = "git+https://github.com/eigerco/solana-axelar.git?branch=main#06eb92a6494cf29bf8cc855231b12479ee80066d" +source = "git+https://github.com/eigerco/solana-axelar.git?branch=main#813ddc2b2b35d31411e22f9835d7a95d32943af1" dependencies = [ "alloy-sol-types", "anyhow", @@ -937,7 +931,7 @@ dependencies = [ [[package]] name = "axelar-rkyv-encoding" version = "0.1.0" -source = "git+https://github.com/eigerco/solana-axelar.git?branch=main#06eb92a6494cf29bf8cc855231b12479ee80066d" +source = "git+https://github.com/eigerco/solana-axelar.git?branch=main#813ddc2b2b35d31411e22f9835d7a95d32943af1" dependencies = [ "bnum", "bs58 0.5.1", @@ -1130,17 +1124,17 @@ dependencies = [ [[package]] name = "backtrace" -version = "0.3.73" +version = "0.3.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cc23269a4f8976d0a4d2e7109211a419fe30e8d88d677cd60b6bc79c5732e0a" +checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" dependencies = [ "addr2line", - "cc", "cfg-if", "libc", - "miniz_oxide 0.7.4", + "miniz_oxide", "object", "rustc-demangle", + "windows-targets 0.52.6", ] [[package]] @@ -1696,9 +1690,9 @@ checksum = "5ce89b21cab1437276d2650d57e971f9d548a2d9037cc231abdc0562b97498ce" [[package]] name = "bytemuck" -version = "1.17.1" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773d90827bc3feecfb67fab12e24de0749aad83c74b9504ecde46237b5cd24e2" +checksum = "94bbb0ad554ad961ddc5da507a12a29b14e4ae5bda06b19f575a3e6079d2e2ae" dependencies = [ "bytemuck_derive", ] @@ -1722,9 +1716,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.7.1" +version = "1.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8318a53db07bb3f8dca91a600466bdb3f2eaadeedfdbcf02e1accbad9271ba50" +checksum = "428d9aa8fbc0670b7b8d6030a7fadd0f86151cae55e4dbbece15f3780a3dfaf3" dependencies = [ "serde", ] @@ -1782,9 +1776,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.1.15" +version = "1.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57b6a275aa2903740dc87da01c62040406b8812552e97129a63ea8850a17c6e6" +checksum = "07b1695e2c7e8fc85310cde85aeaab7e3097f593c91d209d3f9df76c928100f0" dependencies = [ "jobserver", "libc", @@ -1867,9 +1861,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.16" +version = "4.5.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed6719fffa43d0d87e5fd8caeab59be1554fb028cd30edc88fc4369b17971019" +checksum = "3e5a21b8495e732f1b3c364c9949b201ca7bae518c502c80256c96ad79eaf6ac" dependencies = [ "clap_builder", "clap_derive", @@ -1877,9 +1871,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.15" +version = "4.5.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "216aec2b177652e3846684cbfe25c9964d18ec45234f0f5da5157b207ed1aab6" +checksum = "8cf2dd12af7a047ad9d6da2b6b249759a22a7abc0f474c1dae1777afa4b21a73" dependencies = [ "anstream", "anstyle", @@ -2238,9 +2232,9 @@ dependencies = [ [[package]] name = "cpufeatures" -version = "0.2.13" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51e852e6dc9a5bed1fae92dd2375037bf2b768725bf3be87811edee3249d09ad" +checksum = "608697df725056feaccfa42cffdaeeec3fccc4ffc38358ecd19b243e716a78e0" dependencies = [ "libc", ] @@ -3307,7 +3301,7 @@ dependencies = [ "tempfile", "thiserror", "tiny-keccak", - "unicode-xid 0.2.5", + "unicode-xid 0.2.6", ] [[package]] @@ -3664,7 +3658,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "324a1be68054ef05ad64b861cc9eaf1d623d2d8cb25b4bf2cb9cdd902b4bf253" dependencies = [ "crc32fast", - "miniz_oxide 0.8.0", + "miniz_oxide", ] [[package]] @@ -3946,9 +3940,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.29.0" +version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" +checksum = "32085ea23f3234fc7846555e85283ba4de91e21016dc0455a16286d87a292d64" [[package]] name = "glob" @@ -3958,9 +3952,9 @@ checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" [[package]] name = "globset" -version = "0.4.14" +version = "0.4.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57da3b9b5b85bd66f31093f8c408b90a74431672542466497dcbdfdc02034be1" +checksum = "15f1ce686646e7f1e19bf7d5533fe443a45dbfb990e00629110797578b42fb19" dependencies = [ "aho-corasick", "bstr", @@ -3984,7 +3978,7 @@ dependencies = [ [[package]] name = "gmp-gateway" version = "0.1.0" -source = "git+https://github.com/eigerco/solana-axelar.git?branch=main#06eb92a6494cf29bf8cc855231b12479ee80066d" +source = "git+https://github.com/eigerco/solana-axelar.git?branch=main#813ddc2b2b35d31411e22f9835d7a95d32943af1" dependencies = [ "axelar-message-primitives", "axelar-rkyv-encoding", @@ -4025,7 +4019,7 @@ dependencies = [ "serde", "serde_json", "upon", - "yansi 1.0.1", + "yansi", ] [[package]] @@ -4459,15 +4453,15 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.27.2" +version = "0.27.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ee4be2c948921a1a5320b629c4193916ed787a7f7f293fd3f7f5a6c9de74155" +checksum = "08afdbb5c31130e3034af566421053ab03787c640246a446327f550d11bcb333" dependencies = [ "futures-util", "http 1.1.0", "hyper 1.4.1", "hyper-util", - "rustls 0.23.12", + "rustls 0.23.13", "rustls-pki-types", "tokio", "tokio-rustls 0.26.0", @@ -4504,9 +4498,9 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.7" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cde7055719c54e36e95e8719f95883f22072a48ede39db7fc17a4e1d5281e9b9" +checksum = "da62f120a8a37763efb0cf8fdf264b884c7b8b9ac8660b900c8661030c00e6ba" dependencies = [ "bytes", "futures-channel", @@ -4524,9 +4518,9 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.60" +version = "0.1.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" dependencies = [ "android_system_properties", "core-foundation-sys", @@ -4684,9 +4678,9 @@ dependencies = [ [[package]] name = "insta" -version = "1.39.0" +version = "1.40.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "810ae6042d48e2c9e9215043563a58a80b877bc863228a74cf10c49d4620a6f5" +checksum = "6593a41c7a73841868772495db7dc1e8ecab43bb5c0b6da2059246c4b506ab60" dependencies = [ "console", "lazy_static", @@ -4775,9 +4769,9 @@ dependencies = [ [[package]] name = "ipnet" -version = "2.9.0" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" +checksum = "187674a687eed5fe42285b40c6291f9a01517d415fad1c3cbc6a9f778af7fcd4" [[package]] name = "iri-string" @@ -5064,9 +5058,9 @@ dependencies = [ [[package]] name = "keccak-asm" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "422fbc7ff2f2f5bdffeb07718e5a5324dca72b0c9293d50df4026652385e3314" +checksum = "505d1856a39b200489082f90d897c3f07c455563880bc5952e38eabf731c83b6" dependencies = [ "digest 0.10.7", "sha3-asm", @@ -5282,15 +5276,6 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" -[[package]] -name = "miniz_oxide" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" -dependencies = [ - "adler", -] - [[package]] name = "miniz_oxide" version = "0.8.0" @@ -5476,7 +5461,7 @@ source = "git+https://github.com/mystenlabs/sui?tag=mainnet-v1.26.2#f531168c7452 dependencies = [ "anyhow", "bcs", - "clap 4.5.16", + "clap 4.5.17", "codespan-reporting", "dunce", "hex", @@ -5531,7 +5516,7 @@ source = "git+https://github.com/mystenlabs/sui?tag=mainnet-v1.26.2#f531168c7452 dependencies = [ "anyhow", "bcs", - "clap 4.5.16", + "clap 4.5.17", "codespan", "colored", "move-abstract-interpreter", @@ -5551,7 +5536,7 @@ source = "git+https://github.com/mystenlabs/sui?tag=mainnet-v1.26.2#f531168c7452 dependencies = [ "anyhow", "bcs", - "clap 4.5.16", + "clap 4.5.17", "colored", "hex", "move-abstract-interpreter", @@ -6293,7 +6278,7 @@ version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" dependencies = [ - "proc-macro-crate 1.1.3", + "proc-macro-crate 3.2.0", "proc-macro2 1.0.86", "quote 1.0.37", "syn 2.0.77", @@ -6701,9 +6686,9 @@ dependencies = [ [[package]] name = "pest" -version = "2.7.11" +version = "2.7.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd53dff83f26735fdc1ca837098ccf133605d794cdae66acfc2bfac3ec809d95" +checksum = "fdbef9d1d47087a895abd220ed25eb4ad973a5e26f6a4367b038c25e28dfc2d9" dependencies = [ "memchr", "thiserror", @@ -6712,9 +6697,9 @@ dependencies = [ [[package]] name = "pest_derive" -version = "2.7.11" +version = "2.7.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a548d2beca6773b1c244554d36fcf8548a8a58e74156968211567250e48e49a" +checksum = "4d3a6e3394ec80feb3b6393c725571754c6188490265c61aaf260810d6b95aa0" dependencies = [ "pest", "pest_generator", @@ -6722,9 +6707,9 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.7.11" +version = "2.7.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c93a82e8d145725dcbaf44e5ea887c8a869efdcc28706df2d08c69e17077183" +checksum = "94429506bde1ca69d1b5601962c73f4172ab4726571a59ea95931218cb0e930e" dependencies = [ "pest", "pest_meta", @@ -6735,9 +6720,9 @@ dependencies = [ [[package]] name = "pest_meta" -version = "2.7.11" +version = "2.7.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a941429fea7e08bedec25e4f6785b6ffaacc6b755da98df5ef3e7dcf4a124c4f" +checksum = "ac8a071862e93690b6e34e9a5fb8e33ff3734473ac0245b27232222c4906a33f" dependencies = [ "once_cell", "pest", @@ -6967,12 +6952,12 @@ dependencies = [ [[package]] name = "pretty_assertions" -version = "1.4.0" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af7cee1a6c8a5b9208b3cb1061f10c0cb689087b3d8ce85fb9d2dd7a29b6ba66" +checksum = "3ae130e2f271fbc2ac3a40fb1d07180839cdbbe443c7a27e1e3c13c5cac0116d" dependencies = [ "diff", - "yansi 0.5.1", + "yansi", ] [[package]] @@ -7103,7 +7088,7 @@ dependencies = [ [[package]] name = "program-utils" version = "0.1.0" -source = "git+https://github.com/eigerco/solana-axelar.git?branch=main#06eb92a6494cf29bf8cc855231b12479ee80066d" +source = "git+https://github.com/eigerco/solana-axelar.git?branch=main#813ddc2b2b35d31411e22f9835d7a95d32943af1" dependencies = [ "borsh 1.5.1", "solana-program", @@ -7251,7 +7236,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81bddcdb20abf9501610992b6759a4c888aef7d1a7247ef75e2404275ac24af1" dependencies = [ "anyhow", - "itertools 0.11.0", + "itertools 0.12.1", "proc-macro2 1.0.86", "quote 1.0.37", "syn 2.0.77", @@ -7277,9 +7262,9 @@ dependencies = [ [[package]] name = "psm" -version = "0.1.22" +version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b1f9bf148c15500d44581654fb9260bc9d82970f3ef777a79a40534f6aa784f" +checksum = "aa37f80ca58604976033fae9515a8a2989fc13797d953f7c04fb8fa36a11f205" dependencies = [ "cc", ] @@ -7541,9 +7526,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.3" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a908a6e00f1fdd0dfd9c0eb08ce85126f6d8bbda50017e74bc4a4b7d4a926a4" +checksum = "0884ad60e090bf1345b93da0a5de8923c93884cd03f40dfcfddd3b4bee661853" dependencies = [ "bitflags 2.6.0", ] @@ -7689,7 +7674,7 @@ dependencies = [ "http-body 1.0.1", "http-body-util", "hyper 1.4.1", - "hyper-rustls 0.27.2", + "hyper-rustls 0.27.3", "hyper-tls", "hyper-util", "ipnet", @@ -8047,9 +8032,9 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.35" +version = "0.38.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a85d50532239da68e9addb745ba38ff4612a242c1c7ceea689c4bc7c2f43c36f" +checksum = "8acb788b847c24f28525660c4d7758620a7210875711f79e7f663cc152726811" dependencies = [ "bitflags 2.6.0", "errno", @@ -8097,13 +8082,13 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.12" +version = "0.23.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c58f8c84392efc0a126acce10fa59ff7b3d2ac06ab451a33f2741989b806b044" +checksum = "f2dabaac7466917e566adb06783a81ca48944c6898a1b08b9374106dd671f4c8" dependencies = [ "once_cell", "rustls-pki-types", - "rustls-webpki 0.102.7", + "rustls-webpki 0.102.8", "subtle", "zeroize", ] @@ -8169,9 +8154,9 @@ dependencies = [ [[package]] name = "rustls-webpki" -version = "0.102.7" +version = "0.102.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84678086bd54edf2b415183ed7a94d0efb049f1b646a33e22a36f3794be6ae56" +checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" dependencies = [ "ring 0.17.8", "rustls-pki-types", @@ -8237,11 +8222,11 @@ dependencies = [ [[package]] name = "schannel" -version = "0.1.23" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534" +checksum = "e9aaafd5a2b6e3d657ff009d82fbd630b6bd54dd4eb06f21693925cdf80f9b8b" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -8419,9 +8404,9 @@ checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" [[package]] name = "serde" -version = "1.0.209" +version = "1.0.210" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99fce0ffe7310761ca6bf9faf5115afbc19688edd00171d81b1bb1b116c63e09" +checksum = "c8e3592472072e6e22e0a54d5904d9febf8508f65fb8552499a1abc7d1078c3a" dependencies = [ "serde_derive", ] @@ -8476,9 +8461,9 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.209" +version = "1.0.210" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5831b979fd7b5439637af1752d535ff49f4860c0f341d1baeb6faf0f4242170" +checksum = "243902eda00fad750862fc144cea25caca5e20d615af0a81bee94ca738f1df1f" dependencies = [ "proc-macro2 1.0.86", "quote 1.0.37", @@ -8498,9 +8483,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.127" +version = "1.0.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8043c06d9f82bd7271361ed64f415fe5e12a77fdb52e573e7f06a516dea329ad" +checksum = "6ff5456707a1de34e7e37f2a6fd3d3f808c318259cbd01ab6377795054b483d8" dependencies = [ "indexmap 2.5.0", "itoa", @@ -8727,9 +8712,9 @@ dependencies = [ [[package]] name = "sha3-asm" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57d79b758b7cb2085612b11a235055e485605a5103faccdd633f35bd7aee69dd" +checksum = "c28efc5e327c837aa837c59eae585fc250715ef939ac32881bcc11677cd02d46" dependencies = [ "cc", "cfg-if", @@ -8892,9 +8877,9 @@ dependencies = [ [[package]] name = "solana-account-decoder" -version = "2.0.8" +version = "2.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e92694b819c0baf7fe9d1f3d74c0360b08c49054e888f9bfbba731653bb7ff22" +checksum = "5687837ad876dec1d39cf98a72b7089cb5ae2250ab10415356861dfda3a5a374" dependencies = [ "Inflector", "base64 0.22.1", @@ -8917,9 +8902,9 @@ dependencies = [ [[package]] name = "solana-clap-utils" -version = "2.0.8" +version = "2.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf985fe4abeed8401b715d3c3cf08551455ea18bfe1e6fcf96f995f20723e053" +checksum = "813ad1ae38630b1e2bd022e5c4d5886e124b1eb1e4b654a604514c72444a6531" dependencies = [ "chrono", "clap 2.34.0", @@ -8934,9 +8919,9 @@ dependencies = [ [[package]] name = "solana-client" -version = "2.0.8" +version = "2.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a455a20e3e03d2da6d1e4f6c1f122c4ba4ab119651f02bd6744cc5af03e7774" +checksum = "32e8f13aa5dce9e2c60338a324feafa38312427ed263c44b54bd4041c198040c" dependencies = [ "async-trait", "bincode", @@ -8967,9 +8952,9 @@ dependencies = [ [[package]] name = "solana-compute-budget" -version = "2.0.8" +version = "2.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1610de88eddf42a9a4b0a8f31eb3f7f9863850dedf51355508550975e8895cd" +checksum = "5a44d6bf7f6f90ade264fea97976d01198e24cea00ca3ab01e3c7d5c1609b9a2" dependencies = [ "rustc_version 0.4.1", "solana-sdk", @@ -8977,9 +8962,9 @@ dependencies = [ [[package]] name = "solana-config-program" -version = "2.0.8" +version = "2.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e7961fbad7a0facdc03037b484bacbf80198f68347d37ed84b2866b63c24015" +checksum = "c8e407e1e2bd056836e3fef1b27c9f41d52ccb83ddb6847a5e755432d15e6606" dependencies = [ "bincode", "chrono", @@ -8991,9 +8976,9 @@ dependencies = [ [[package]] name = "solana-connection-cache" -version = "2.0.8" +version = "2.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "163e56d6851952e4ccde37a9b3fb6edab0207b6eb871da506434d55df4e8de94" +checksum = "900ca12adb38ce7f7c4e1bb8d72995aa1b1e7567bc15e454a1bf7c152bbd80a0" dependencies = [ "async-trait", "bincode", @@ -9012,9 +8997,9 @@ dependencies = [ [[package]] name = "solana-curve25519" -version = "2.0.8" +version = "2.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "147c81e77b74f5d0a52579c1cf982fffb8c4491fb3baabf0e4fa19e2f6f39030" +checksum = "33dfcbe23eacee29bd9eec8cdbc370b201e4309eb97672d7503db6f70841d9cd" dependencies = [ "bytemuck", "bytemuck_derive", @@ -9025,9 +9010,9 @@ dependencies = [ [[package]] name = "solana-inline-spl" -version = "2.0.8" +version = "2.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f101319f4740095125c5006be1dc6d4b6108180def37ae94df42f16e78b93f4" +checksum = "b670774d5762803d87e1a155e62c8d22695b7d8c40c208fb51b477677575ca46" dependencies = [ "bytemuck", "rustc_version 0.4.1", @@ -9036,9 +9021,9 @@ dependencies = [ [[package]] name = "solana-logger" -version = "2.0.8" +version = "2.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcc3c188176db5d4e60c137525439c4b881dfd262dd306abcac4c568f15177a6" +checksum = "1d2df525978f892bcbac59c453585c98e8b4d85bbf18011efab97dcda278d358" dependencies = [ "env_logger", "lazy_static", @@ -9047,9 +9032,9 @@ dependencies = [ [[package]] name = "solana-measure" -version = "2.0.8" +version = "2.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fe09f58977e579c3e91f0a7032a1d741e76327924ae868d17beb5d496b40c8f" +checksum = "49bdddfff4c9c4bccad9129c850c781686194619ec8dfe025471fadf91131d44" dependencies = [ "log", "solana-sdk", @@ -9057,9 +9042,9 @@ dependencies = [ [[package]] name = "solana-metrics" -version = "2.0.8" +version = "2.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7860d18901af0b24e05d7631cd655924eb056d83a52040234f827cc3cc8da0c6" +checksum = "f9252bd7e35e4cabcb583c4807a0e1f87a8bb7b49c96377a35fb26e7b77e525f" dependencies = [ "crossbeam-channel", "gethostname", @@ -9072,9 +9057,9 @@ dependencies = [ [[package]] name = "solana-net-utils" -version = "2.0.8" +version = "2.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b6723ddcc4393d9d2d5e258871461d0002e45c7d9b6ea895bff1011d16163e9" +checksum = "fd28b442a7e136db84d2397c13ce388d0c79ca05d121e494e9010e4a8930f274" dependencies = [ "bincode", "clap 3.2.25", @@ -9095,9 +9080,9 @@ dependencies = [ [[package]] name = "solana-perf" -version = "2.0.8" +version = "2.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9393d11aa5643f6afdffa8ab7b12d8149b7b32409149f673f832f2be442fbe10" +checksum = "759f9e873486ba10c6d431b561ca6514f1973f7751b86fcc33c36c0f8feae46d" dependencies = [ "ahash 0.8.11", "bincode", @@ -9122,9 +9107,9 @@ dependencies = [ [[package]] name = "solana-program" -version = "2.0.8" +version = "2.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d899c2a1d37290dcfeeb9d1c0032915a29bd48f35759f19ff1e0f6b096eca0b" +checksum = "e8a675afa9b0a9e381ea377a27730b4f39fc05f2539607efc545723733029c89" dependencies = [ "ark-bn254", "ark-ec", @@ -9168,9 +9153,9 @@ dependencies = [ [[package]] name = "solana-program-runtime" -version = "2.0.8" +version = "2.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2612ef05b38afcbf642f9be889819713b23564a26d3f612b2ab5616c9ea4c19" +checksum = "5048497166421d55eccd9bccd99dc960a123c7cc6f30a449ae4e86ad1b094253" dependencies = [ "base64 0.22.1", "bincode", @@ -9197,9 +9182,9 @@ dependencies = [ [[package]] name = "solana-pubsub-client" -version = "2.0.8" +version = "2.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be61b8e62654303ba158764fb37b4706cc280c7cd239dc977edaf599dfb79875" +checksum = "141852c249a15c328473a48fb420760c835766a49b05a010a448d951600460dc" dependencies = [ "crossbeam-channel", "futures-util", @@ -9222,9 +9207,9 @@ dependencies = [ [[package]] name = "solana-quic-client" -version = "2.0.8" +version = "2.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bcf89e7ed0daabc4db107d6c38453bbd0ef84150f0acec760c65579361378cb" +checksum = "df06cfbc6b66ad25bb3134accb17835a86d0d8d1a1380365741d176103c98790" dependencies = [ "async-mutex", "async-trait", @@ -9248,9 +9233,9 @@ dependencies = [ [[package]] name = "solana-rayon-threadlimit" -version = "2.0.8" +version = "2.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45d6268135fcf812d9e9add2dff578b7ac8a0d003d6f95b996aec7a0311aad8e" +checksum = "3397c512fed12fce5f581d98dbf7eec09bbbb497d0bb56c86fff55e5e2a06c47" dependencies = [ "lazy_static", "num_cpus", @@ -9258,9 +9243,9 @@ dependencies = [ [[package]] name = "solana-remote-wallet" -version = "2.0.8" +version = "2.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc12b8f2e668712995ae972c497663fdcb61f19b925029d104e19917b8d66428" +checksum = "b5202fd750864a3aaf9b1243d34103c0d49b027c49c5af99d331e6c1dfe08e8d" dependencies = [ "console", "dialoguer", @@ -9277,9 +9262,9 @@ dependencies = [ [[package]] name = "solana-rpc-client" -version = "2.0.8" +version = "2.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "846113929e8458f5dcb875d379cc28bdb9149ba68db80202b220795608bc3227" +checksum = "22e45d1c574c1afc7991b713793bc9cf27a1ee3ac817baf5030274d88e8f5e11" dependencies = [ "async-trait", "base64 0.22.1", @@ -9304,9 +9289,9 @@ dependencies = [ [[package]] name = "solana-rpc-client-api" -version = "2.0.8" +version = "2.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "272eb64c9baf966eccf4fa5c8ed9344fe162d2a13a2ac09cf2cd2b40a85a3a65" +checksum = "106965e02ece99186212a4d1c38ce029e0d3f9f4c2500318bb1037dc6c7ad32e" dependencies = [ "anyhow", "base64 0.22.1", @@ -9328,9 +9313,9 @@ dependencies = [ [[package]] name = "solana-rpc-client-nonce-utils" -version = "2.0.8" +version = "2.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23cf6f2875e47a5ac67b00dda4306646bb63ae5bb79ef408758cf1bad810497b" +checksum = "d098ba03a0a379f574f1d33de2780b57e1241d9aa8ec325fe6e2e30e2cdba5cf" dependencies = [ "clap 2.34.0", "solana-clap-utils", @@ -9341,9 +9326,9 @@ dependencies = [ [[package]] name = "solana-sdk" -version = "2.0.8" +version = "2.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b62d86ef4a245cec35b7b0c24a659e22cc2d1fbbad65c141e332cc5928ed04dc" +checksum = "0da5fa8db9b1835f96784b1cb6ab79e51d06cecc636657c64185b9ffa502abf7" dependencies = [ "bincode", "bitflags 2.6.0", @@ -9390,9 +9375,9 @@ dependencies = [ [[package]] name = "solana-sdk-macro" -version = "2.0.8" +version = "2.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23198ed620c4a61c97fe49bd907fc965659aea9a5ed0ea0cf90084eecc72a3c1" +checksum = "193006436577cb4aa8e52fbb432c3f14c2d4d7b3b00f48f3485225ea9ca45a08" dependencies = [ "bs58 0.5.1", "proc-macro2 1.0.86", @@ -9409,9 +9394,9 @@ checksum = "468aa43b7edb1f9b7b7b686d5c3aeb6630dc1708e86e31343499dd5c4d775183" [[package]] name = "solana-streamer" -version = "2.0.8" +version = "2.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2cef6776681796df95aeaacf5af2f017fd6e215579f6589ea67904bc384b4bcc" +checksum = "257ef0be08cb82acfd3675e4271f731a16f1e27f4e4133f358edc1fe49ae3049" dependencies = [ "async-channel", "bytes", @@ -9443,9 +9428,9 @@ dependencies = [ [[package]] name = "solana-thin-client" -version = "2.0.8" +version = "2.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff07c0d23dd839eda4324a02c8634855bdd1f72c385f4466e5caf78e7a5e2a25" +checksum = "e8d10ebd7a9b57996c31c56194cd765799e69bc815e29faefc428eea0c17b326" dependencies = [ "bincode", "log", @@ -9458,9 +9443,9 @@ dependencies = [ [[package]] name = "solana-tpu-client" -version = "2.0.8" +version = "2.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fce3b3fb075bd06f360c74d77816d3527dbf9bb2f2e89f9e0a52a55c06575871" +checksum = "20250b2973b06dd1976e72b7d76ef1146ed87a98bf990c5a7948b6e127fdb45f" dependencies = [ "async-trait", "bincode", @@ -9482,9 +9467,9 @@ dependencies = [ [[package]] name = "solana-transaction-metrics-tracker" -version = "2.0.8" +version = "2.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f23895b81f3cc9ebf1472609bd2ce75b9bdea0f89a0c3245d5c72df354a92a4d" +checksum = "d88301ff1b7d0aec5d00c99d711d22b3dcbe5a3194a7899b14feda9347b45c31" dependencies = [ "Inflector", "base64 0.22.1", @@ -9498,9 +9483,9 @@ dependencies = [ [[package]] name = "solana-transaction-status" -version = "2.0.8" +version = "2.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4873ad4df45ef4f88b68982ac651caa93f489a4bfe62eedb2f59ea48da1df88e" +checksum = "41072f1d203936b13999777b7bdef5d8470cde596a24c2fbcfef637abc4ecc88" dependencies = [ "Inflector", "base64 0.22.1", @@ -9525,9 +9510,9 @@ dependencies = [ [[package]] name = "solana-type-overrides" -version = "2.0.8" +version = "2.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "540b1df966da86b0e183e124e48fef59605daf57b22809842b5273cb49277a89" +checksum = "c1b3b90d698caabea32650ca44cf07869e8d2606e9ca1da1f5175dbf07efa5dc" dependencies = [ "lazy_static", "rand 0.8.5", @@ -9535,9 +9520,9 @@ dependencies = [ [[package]] name = "solana-udp-client" -version = "2.0.8" +version = "2.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91423aac2b1410e5f81faeb8cf655d63249d525761c4bd3f92a2c8e7641060bb" +checksum = "a2b6e4e7f64499371ab4bb5a51b2262ca9e5bbc341fe4da0177e3d24723063bf" dependencies = [ "async-trait", "solana-connection-cache", @@ -9550,9 +9535,9 @@ dependencies = [ [[package]] name = "solana-version" -version = "2.0.8" +version = "2.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfc990baf7a1c8d08eff49add6b971b6f4c37c8a2ae4967b4c4300475226e71c" +checksum = "3553db56807f7c7bb241a646085d3dda6004f8c745953036a0ae32e61b994b88" dependencies = [ "log", "rustc_version 0.4.1", @@ -9564,9 +9549,9 @@ dependencies = [ [[package]] name = "solana-vote" -version = "2.0.8" +version = "2.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5755419c8efaea27fd5fcd241ba43bcf248e7e420bb4733211236517ae93f38b" +checksum = "b612dab26a213c71509a2ba260d7b1a8fbeb4c4ad22f050afaa0bae240b7c43d" dependencies = [ "itertools 0.12.1", "log", @@ -9579,9 +9564,9 @@ dependencies = [ [[package]] name = "solana-vote-program" -version = "2.0.8" +version = "2.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8165c8bc37e34456f352715acb309eb65e014beca0297eaccdd4319dfea79981" +checksum = "747dc52bb6a1662239d6a3743f6bd71bcad88c1ceea2229449d97ef55dde267b" dependencies = [ "bincode", "log", @@ -9599,9 +9584,9 @@ dependencies = [ [[package]] name = "solana-zk-token-sdk" -version = "2.0.8" +version = "2.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b286fa24abe68536297e232670d01d2c478f6d75a46311809c0a07bf251f3dfc" +checksum = "b3a1344737f62481c5b8dfebd9be0598297394b57d21ef44704e5b49504cadc4" dependencies = [ "aes-gcm-siv", "base64 0.22.1", @@ -10221,7 +10206,7 @@ name = "sui-protocol-config" version = "0.1.0" source = "git+https://github.com/mystenlabs/sui?tag=mainnet-v1.26.2#f531168c745260b60a4ec4906c9f2b22240d872d" dependencies = [ - "clap 4.5.16", + "clap 4.5.17", "insta", "move-vm-config", "schemars", @@ -10422,7 +10407,7 @@ dependencies = [ "proc-macro2 1.0.86", "quote 1.0.37", "syn 1.0.109", - "unicode-xid 0.2.5", + "unicode-xid 0.2.6", ] [[package]] @@ -10921,16 +10906,16 @@ version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" dependencies = [ - "rustls 0.23.12", + "rustls 0.23.13", "rustls-pki-types", "tokio", ] [[package]] name = "tokio-stream" -version = "0.1.15" +version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "267ac89e0bec6e691e5813911606935d77c476ff49024f98abcea3e7b15e37af" +checksum = "4f4e6ce100d0eb49a2734f8c0812bcd324cf357d21810932c5df6b96ef2b86f1" dependencies = [ "futures-core", "pin-project-lite", @@ -10955,9 +10940,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.11" +version = "0.7.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1" +checksum = "61e7c3654c13bcd040d4a03abee2c75b1d14a37b423cf5a813ceae1cc903ec6a" dependencies = [ "bytes", "futures-core", @@ -10999,9 +10984,9 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.22.20" +version = "0.22.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "583c44c02ad26b0c3f3066fe629275e50627026c51ac2e595cca4c230ce1ce1d" +checksum = "3b072cee73c449a636ffd6f32bd8de3a9f7119139aff882f44943ce2986dc5cf" dependencies = [ "indexmap 2.5.0", "serde", @@ -11353,9 +11338,9 @@ checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" [[package]] name = "unicode-ident" -version = "1.0.12" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" [[package]] name = "unicode-normalization" @@ -11368,9 +11353,9 @@ dependencies = [ [[package]] name = "unicode-width" -version = "0.1.13" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0336d538f7abc86d282a4189614dfaa90810dfc2c6f6427eaf88e16311dd225d" +checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" [[package]] name = "unicode-xid" @@ -11380,9 +11365,9 @@ checksum = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" [[package]] name = "unicode-xid" -version = "0.2.5" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "229730647fbc343e3a80e463c1db7f78f3855d3f3739bee0dda773c9a037c90a" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" [[package]] name = "universal-hash" @@ -11784,7 +11769,7 @@ version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" dependencies = [ - "windows-sys 0.48.0", + "windows-sys 0.59.0", ] [[package]] @@ -12060,12 +12045,6 @@ dependencies = [ "linked-hash-map", ] -[[package]] -name = "yansi" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec" - [[package]] name = "yansi" version = "1.0.1" diff --git a/Cargo.toml b/Cargo.toml index a793847eb..1dead8f96 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,10 +1,10 @@ [workspace] members = [ - "ampd", - "contracts/*", - "external-gateways/*", - "integration-tests", - "packages/*" + "ampd", + "contracts/*", + "external-gateways/*", + "integration-tests", + "packages/*", ] resolver = "2" @@ -27,6 +27,7 @@ cosmwasm-std = "1.5.5" cw-multi-test = "1.2.0" cw-storage-plus = { version = "1.2.0", features = ["iterator", "macro"] } cw2 = "1.1.0" +bs58 = "0.5.1" ed25519-dalek = { version = "2.1.1", default-features = false } error-stack = { version = "0.4.0", features = ["eyre"] } ethers-contract = { version = "2.0.14", default-features = false, features = ["abigen"] } diff --git a/ampd/src/solana/verifier_set_verifier.rs b/ampd/src/solana/verifier_set_verifier.rs index acc4c5fcf..09b2e8fba 100644 --- a/ampd/src/solana/verifier_set_verifier.rs +++ b/ampd/src/solana/verifier_set_verifier.rs @@ -56,7 +56,9 @@ fn hash_verifier_set(verifier_set: &VerifierSet) -> [u8; 32] { let mut hasher = Keccak256::new(); // Length prefix the bytes to be hashed to prevent hash collisions - hasher.update(verifier_set.signers.len().to_le_bytes()); + let len = u32::try_from(verifier_set.signers.len()) + .expect("impossible for the value to be larger than u32 on wasm32"); + hasher.update(len.to_le_bytes()); verifier_set.signers.values().for_each(|signer| { match signer.pub_key { diff --git a/packages/axelar-wasm-std/Cargo.toml b/packages/axelar-wasm-std/Cargo.toml index e7f8105df..5902e4b82 100644 --- a/packages/axelar-wasm-std/Cargo.toml +++ b/packages/axelar-wasm-std/Cargo.toml @@ -6,8 +6,8 @@ edition = { workspace = true } description = "Axelar cosmwasm standard library crate" exclude = [ - "contract.wasm", - "hash.txt" + "contract.wasm", + "hash.txt", ] # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html @@ -29,7 +29,7 @@ optimize = """docker run --rm -v "$(pwd)":/code \ [dependencies] alloy-primitives = { workspace = true } axelar-wasm-std-derive = { workspace = true, optional = true } -bs58 = "0.5.1" +bs58 = { workspace = true } cosmwasm-schema = { workspace = true } cosmwasm-std = { workspace = true } cw-storage-plus = { workspace = true } diff --git a/packages/axelar-wasm-std/src/address.rs b/packages/axelar-wasm-std/src/address.rs index ea1544c44..3e5560ccd 100644 --- a/packages/axelar-wasm-std/src/address.rs +++ b/packages/axelar-wasm-std/src/address.rs @@ -19,6 +19,7 @@ pub enum AddressFormat { Eip55, Sui, Stellar, + Base58Solana, } pub fn validate_address(address: &str, format: &AddressFormat) -> Result<(), Error> { @@ -38,6 +39,16 @@ pub fn validate_address(address: &str, format: &AddressFormat) -> Result<(), Err ScAddress::from_str(address) .change_context(Error::InvalidAddress(address.to_string()))?; } + AddressFormat::Base58Solana => { + const SOLANA_PUBKEY_LEN: usize = 32; + + let pubkey_vec = bs58::decode(address) + .into_vec() + .change_context(Error::InvalidAddress(address.to_string()))?; + if pubkey_vec.len() != SOLANA_PUBKEY_LEN { + bail!(Error::InvalidAddress(address.to_string())) + } + } } Ok(()) @@ -187,4 +198,57 @@ mod tests { address::Error::InvalidAddress(..) ); } + + #[test] + fn validate_solana_address() { + use crate::{address, assert_err_contains}; + + // Valid Solana address + let addr = "4f3J7t1HgX1t36k6rph2pYJrWxk9uT1RrB2K3nVHDh8D"; + + assert_ok!(address::validate_address( + addr, + &address::AddressFormat::Base58Solana + )); + + // Invalid address: contains invalid character '0' (zero) + let invalid_char_addr = "4f3J7t1HgX1t36k6rph2pYJrWxk9uT1RrB2K3nVHDh8D0"; + assert_err_contains!( + address::validate_address(invalid_char_addr, &address::AddressFormat::Base58Solana), + address::Error, + address::Error::InvalidAddress(..) + ); + + // Invalid address: contains invalid character 'O' + let invalid_char_addr2 = "4f3J7t1HgX1t36k6rph2pYJrWxk9uT1RrB2K3nVHDh8DO"; + assert_err_contains!( + address::validate_address(invalid_char_addr2, &address::AddressFormat::Base58Solana), + address::Error, + address::Error::InvalidAddress(..) + ); + + // Invalid address: incorrect length (too short) + let short_addr = "4f3J7t1HgX1t36k6rph2pYJrWxk9uT1RrB2K3nVHDh"; + assert_err_contains!( + address::validate_address(short_addr, &address::AddressFormat::Base58Solana), + address::Error, + address::Error::InvalidAddress(..) + ); + + // Invalid address: incorrect length (too long) + let long_addr = format!("{}A", addr); + assert_err_contains!( + address::validate_address(&long_addr, &address::AddressFormat::Base58Solana), + address::Error, + address::Error::InvalidAddress(..) + ); + + // Invalid address: contains invalid character 'I' + let invalid_char_addr3 = "4f3J7t1HgX1t36k6rph2pYJrWxk9uT1RrB2K3nVHDh8DI"; + assert_err_contains!( + address::validate_address(invalid_char_addr3, &address::AddressFormat::Base58Solana), + address::Error, + address::Error::InvalidAddress(..) + ); + } } From 8cdc656e252fb563de5f0b4e8e49f949cabdae06 Mon Sep 17 00:00:00 2001 From: Roberts Pumpurs Date: Mon, 25 Nov 2024 15:15:28 +0200 Subject: [PATCH 082/109] feat: update ampd so tests pass --- ampd/src/config.rs | 21 +--- ampd/src/handlers/config.rs | 24 +--- ampd/src/handlers/solana_verify_msg.rs | 104 +++++------------- .../handlers/solana_verify_verifier_set.rs | 51 ++------- ampd/src/lib.rs | 14 +-- ampd/src/solana/msg_verifier.rs | 1 - ampd/src/tests/config_template.toml | 6 +- 7 files changed, 59 insertions(+), 162 deletions(-) diff --git a/ampd/src/config.rs b/ampd/src/config.rs index 29ff42dac..a99f202d1 100644 --- a/ampd/src/config.rs +++ b/ampd/src/config.rs @@ -54,7 +54,6 @@ mod tests { use super::Config; use crate::evm::finalizer::Finalization; - use crate::handlers::config::GenericChain; use crate::handlers::config::{Chain, Config as HandlerConfig}; use crate::types::TMAddress; use crate::url::Url; @@ -132,24 +131,22 @@ mod tests { [[handlers]] type = 'StellarVerifierSetVerifier' cosmwasm_contract = '{}' - http_url = 'http://localhost:8000' + rpc_url = 'http://localhost:8000' [handlers.rpc_timeout] secs = 3 nanos = 0 [[handlers]] - chain_name = 'solana' - chain_rpc_url = 'http://127.0.0.1' + type = 'SolanaMsgVerifier' + rpc_url = 'http://127.0.0.1' cosmwasm_contract = '{}' max_tx_cache_entries = 6 - type = 'SolanaMsgVerifier' [[handlers]] - chain_name = 'solana' + type = 'SolanaVerifierSetVerifier' chain_rpc_url = 'http://127.0.0.1' cosmwasm_contract = '{}' - type = 'SolanaVerifierSetVerifier' rpc_url = 'http://localhost:7545' ", TMAddress::random(PREFIX), @@ -376,20 +373,14 @@ mod tests { AccountId::new("axelar", &[0u8; 32]).unwrap(), ), max_tx_cache_entries: 6, - chain: GenericChain { - name: ChainName::from_str("solana").unwrap(), - rpc_url: Url::from_str("http://127.0.0.1").unwrap(), - }, + rpc_url: Url::from_str("http://127.0.0.1").unwrap(), rpc_timeout: Some(Duration::from_secs(3)), }, HandlerConfig::SolanaVerifierSetVerifier { cosmwasm_contract: TMAddress::from( AccountId::new("axelar", &[0u8; 32]).unwrap(), ), - chain: GenericChain { - name: ChainName::from_str("solana").unwrap(), - rpc_url: Url::from_str("http://127.0.0.1").unwrap(), - }, + rpc_url: Url::from_str("http://127.0.0.1").unwrap(), rpc_timeout: Some(Duration::from_secs(3)), }, ], diff --git a/ampd/src/handlers/config.rs b/ampd/src/handlers/config.rs index e570f5d7b..d4fa6a6f2 100644 --- a/ampd/src/handlers/config.rs +++ b/ampd/src/handlers/config.rs @@ -18,12 +18,6 @@ pub struct Chain { pub finalization: Finalization, } -#[derive(Debug, Clone, Deserialize, Serialize, PartialEq)] -pub struct GenericChain { - pub name: ChainName, - pub rpc_url: Url, -} - with_prefix!(chain "chain_"); #[derive(Debug, Clone, Deserialize, Serialize, PartialEq)] #[serde(tag = "type")] @@ -72,14 +66,12 @@ pub enum Config { SolanaMsgVerifier { cosmwasm_contract: TMAddress, max_tx_cache_entries: usize, - #[serde(flatten, with = "chain")] - chain: GenericChain, + rpc_url: Url, rpc_timeout: Option, }, SolanaVerifierSetVerifier { cosmwasm_contract: TMAddress, - #[serde(flatten, with = "chain")] - chain: GenericChain, + rpc_url: Url, rpc_timeout: Option, }, } @@ -197,7 +189,7 @@ mod tests { use serde_json::to_value; use crate::evm::finalizer::Finalization; - use crate::handlers::config::{deserialize_handler_configs, Chain, Config, GenericChain}; + use crate::handlers::config::{deserialize_handler_configs, Chain, Config}; use crate::types::TMAddress; use crate::PREFIX; @@ -337,10 +329,7 @@ mod tests { let sample_config = Config::SolanaMsgVerifier { cosmwasm_contract: TMAddress::random(PREFIX), - chain: GenericChain { - name: "solana".parse().unwrap(), - rpc_url: "http://localhost:8080/".parse().unwrap(), - }, + rpc_url: "http://localhost:8080/".parse().unwrap(), rpc_timeout: None, max_tx_cache_entries: 5, }; @@ -355,10 +344,7 @@ mod tests { let sample_config = Config::SolanaVerifierSetVerifier { cosmwasm_contract: TMAddress::random(PREFIX), - chain: GenericChain { - name: "solana".parse().unwrap(), - rpc_url: "http://localhost:8080/".parse().unwrap(), - }, + rpc_url: "http://localhost:8080/".parse().unwrap(), rpc_timeout: None, }; diff --git a/ampd/src/handlers/solana_verify_msg.rs b/ampd/src/handlers/solana_verify_msg.rs index 8ad89e65c..e75ae541e 100644 --- a/ampd/src/handlers/solana_verify_msg.rs +++ b/ampd/src/handlers/solana_verify_msg.rs @@ -54,7 +54,6 @@ pub struct Handler { verifier: TMAddress, voting_verifier: TMAddress, rpc_client: RpcCacheWrapper, - chain: ChainName, latest_block_height: Receiver, } @@ -63,14 +62,12 @@ impl Handler { verifier: TMAddress, voting_verifier: TMAddress, rpc_client: RpcCacheWrapper, - chain: ChainName, latest_block_height: Receiver, ) -> Self { Self { verifier, voting_verifier, rpc_client, - chain, latest_block_height, } } @@ -149,10 +146,6 @@ impl EventHandler for Handler { event => event.change_context(Error::DeserializeEvent)?, }; - if self.chain != source_chain { - return Ok(vec![]); - } - if self.voting_verifier != contract_address { return Ok(vec![]); } @@ -190,7 +183,6 @@ mod test { use std::num::NonZeroUsize; - use axelar_wasm_std::nonempty; use base64::{engine::general_purpose::STANDARD, Engine}; use events::Event; use solana_client::rpc_request::RpcRequest; @@ -214,7 +206,6 @@ mod test { let worker = TMAddress::random(PREFIX); let expiration = 100u64; let (_, rx) = watch::channel(expiration - 1); - let source_chain = ChainName::from_str("solana").unwrap(); // Prepare the message verifier let (rpc_client, rpc_recorder) = rpc_client_with_recorder(); @@ -223,7 +214,7 @@ mod test { get_poll_started_event( participants(5, Some(worker.clone())), 100, - source_chain.clone(), + "solana".parse().unwrap(), ), &voting_verifier, ); @@ -232,7 +223,6 @@ mod test { worker, voting_verifier, RpcCacheWrapper::new(rpc_client, NonZeroUsize::new(10).unwrap()), - source_chain, rx, ); @@ -244,44 +234,6 @@ mod test { ); } - #[async_test] - async fn ignores_events_from_other_chains() { - // Setup the context - let voting_verifier = TMAddress::random(PREFIX); - let worker = TMAddress::random(PREFIX); - let expiration = 100u64; - let (_, rx) = watch::channel(expiration - 1); - let source_chain = ChainName::from_str("solana").unwrap(); - let poll_started_source_chain = ChainName::from_str("otherchain").unwrap(); // A different, unexpected source chain. - - // Prepare the message verifier - let (rpc_client, rpc_recorder) = rpc_client_with_recorder(); - - let event: Event = get_event( - get_poll_started_event( - participants(5, Some(worker.clone())), - 100, - poll_started_source_chain, - ), - &voting_verifier, - ); - - let handler = super::Handler::new( - worker, - voting_verifier, - RpcCacheWrapper::new(rpc_client, NonZeroUsize::new(10).unwrap()), - source_chain, - rx, - ); - - let handle_result = handler.handle(&event).await.unwrap(); - assert!(handle_result.is_empty()); - assert_eq!( - None, - rpc_recorder.read().await.get(&RpcRequest::GetTransaction) - ); - } - #[async_test] async fn must_skip_duplicated_tx() { // Setup the context @@ -289,7 +241,6 @@ mod test { let worker = TMAddress::random(PREFIX); let expiration = 100u64; let (_, rx) = watch::channel(expiration - 1); - let source_chain = ChainName::from_str("solana").unwrap(); // Prepare the message verifier let (rpc_client, rpc_recorder) = rpc_client_with_recorder(); @@ -303,7 +254,6 @@ mod test { worker, voting_verifier, RpcCacheWrapper::new(rpc_client, NonZeroUsize::new(10).unwrap()), - source_chain, rx, ); @@ -322,7 +272,6 @@ mod test { let worker = TMAddress::random(PREFIX); let expiration = 100u64; let (_, rx) = watch::channel(expiration - 1); - let source_chain = ChainName::from_str("solana").unwrap(); // Prepare the message verifier let (rpc_client, rpc_recorder) = rpc_client_with_recorder(); @@ -331,7 +280,7 @@ mod test { get_poll_started_event( participants(5, Some(worker.clone())), 100, - source_chain.clone(), + "solana".parse().unwrap(), ), &TMAddress::random(PREFIX), // A different, unexpected address comes from the event. ); @@ -340,7 +289,6 @@ mod test { worker, voting_verifier, RpcCacheWrapper::new(rpc_client, NonZeroUsize::new(10).unwrap()), - source_chain, rx, ); @@ -359,13 +307,12 @@ mod test { let worker = TMAddress::random(PREFIX); let expiration = 100u64; let (_, rx) = watch::channel(expiration - 1); - let source_chain = ChainName::from_str("solana").unwrap(); // Prepare the message verifier let (rpc_client, rpc_recorder) = rpc_client_with_recorder(); let event: Event = get_event( - get_poll_started_event(participants(5, None), 100, source_chain.clone()), // This worker is not in participant set. So will skip the event. + get_poll_started_event(participants(5, None), 100, "solana".parse().unwrap()), // This worker is not in participant set. So will skip the event. &voting_verifier, ); @@ -373,7 +320,6 @@ mod test { worker, voting_verifier, RpcCacheWrapper::new(rpc_client, NonZeroUsize::new(10).unwrap()), - source_chain, rx, ); @@ -392,7 +338,6 @@ mod test { let worker = TMAddress::random(PREFIX); let expiration = 100u64; let (_, rx) = watch::channel(expiration); // expired ! - let source_chain = ChainName::from_str("solana").unwrap(); // Prepare the message verifier let (rpc_client, rpc_recorder) = rpc_client_with_recorder(); @@ -401,7 +346,7 @@ mod test { get_poll_started_event( participants(5, Some(worker.clone())), 100, - source_chain.clone(), + "solana".parse().unwrap(), ), &voting_verifier, ); @@ -410,7 +355,6 @@ mod test { worker, voting_verifier, RpcCacheWrapper::new(rpc_client, NonZeroUsize::new(10).unwrap()), - source_chain, rx, ); @@ -446,14 +390,14 @@ mod test { expires_at: u64, source_chain: ChainName, ) -> PollStarted { - get_poll_started_event_with_source_chain(participants, expires_at, source_chain) - } + let signature_1 = "3GLo4z4siudHxW1BMHBbkTKy7kfbssNFaxLR5hTjhEXCUzp2Pi2VVwybc1s96pEKjRre7CcKKeLhni79zWTNUseP"; + let event_idx_1 = 10_u32; + let message_id_1 = format!("{signature_1}-{event_idx_1}"); + + let signature_2 = "41SgBTfsWbkdixDdVNESM6YmDAzEcKEubGPkaXmtTVUd2EhMaqPEy3qh5ReTtTb4Le4F16SSBFjQCxkekamNrFNT"; + let event_idx_2 = 88_u32; + let message_id_2 = format!("{signature_2}-{event_idx_2}"); - fn get_poll_started_event_with_source_chain( - participants: Vec, - expires_at: u64, - source_chain: ChainName, - ) -> PollStarted { PollStarted::Messages { metadata: PollMetadata { poll_id: "100".parse().unwrap(), @@ -466,19 +410,22 @@ mod test { .map(|addr| cosmwasm_std::Addr::unchecked(addr.to_string())) .collect(), }, + #[allow(deprecated)] messages: vec![ TxEventConfirmation { - tx_id: nonempty::String::from_str("3GLo4z4siudHxW1BMHBbkTKy7kfbssNFaxLR5hTjhEXCUzp2Pi2VVwybc1s96pEKjRre7CcKKeLhni79zWTNUseP").unwrap(), - event_index: 10, + tx_id: signature_1.parse().unwrap(), + event_index: event_idx_1, source_address: "sol".to_string().parse().unwrap(), + message_id: message_id_1.parse().unwrap(), destination_chain: "ethereum".parse().unwrap(), destination_address: format!("0x{:x}", EVMAddress::random()).parse().unwrap(), payload_hash: Hash::random().to_fixed_bytes(), }, TxEventConfirmation { - tx_id: nonempty::String::from_str("41SgBTfsWbkdixDdVNESM6YmDAzEcKEubGPkaXmtTVUd2EhMaqPEy3qh5ReTtTb4Le4F16SSBFjQCxkekamNrFNT").unwrap(), - event_index: 11, + tx_id: signature_2.parse().unwrap(), + event_index: event_idx_2, source_address: "sol".to_string().parse().unwrap(), + message_id: message_id_2.parse().unwrap(), destination_chain: "ethereum".parse().unwrap(), destination_address: format!("0x{:x}", EVMAddress::random()).parse().unwrap(), payload_hash: Hash::random().to_fixed_bytes(), @@ -491,7 +438,9 @@ mod test { participants: Vec, expires_at: u64, ) -> PollStarted { - let tx_id = nonempty::String::from_str("41SgBTfsWbkdixDdVNESM6YmDAzEcKEubGPkaXmtTVUd2EhMaqPEy3qh5ReTtTb4Le4F16SSBFjQCxkekamNrFNT").unwrap(); + let signature_1 = "3GLo4z4siudHxW1BMHBbkTKy7kfbssNFaxLR5hTjhEXCUzp2Pi2VVwybc1s96pEKjRre7CcKKeLhni79zWTNUseP"; + let event_idx_1 = 10_u32; + let message_id_1 = format!("{signature_1}-{event_idx_1}"); PollStarted::Messages { metadata: PollMetadata { poll_id: "100".parse().unwrap(), @@ -504,19 +453,22 @@ mod test { .map(|addr| cosmwasm_std::Addr::unchecked(addr.to_string())) .collect(), }, + #[allow(deprecated)] messages: vec![ TxEventConfirmation { - tx_id: tx_id.clone(), - event_index: 10, + tx_id: signature_1.parse().unwrap(), + event_index: event_idx_1, source_address: "sol".to_string().parse().unwrap(), + message_id: message_id_1.parse().unwrap(), destination_chain: "ethereum".parse().unwrap(), destination_address: format!("0x{:x}", EVMAddress::random()).parse().unwrap(), payload_hash: Hash::random().to_fixed_bytes(), }, TxEventConfirmation { - tx_id, - event_index: 10, + tx_id: signature_1.parse().unwrap(), + event_index: event_idx_1, source_address: "sol".to_string().parse().unwrap(), + message_id: message_id_1.parse().unwrap(), destination_chain: "ethereum".parse().unwrap(), destination_address: format!("0x{:x}", EVMAddress::random()).parse().unwrap(), payload_hash: Hash::random().to_fixed_bytes(), diff --git a/ampd/src/handlers/solana_verify_verifier_set.rs b/ampd/src/handlers/solana_verify_verifier_set.rs index fa8caf382..eca0c7ebd 100644 --- a/ampd/src/handlers/solana_verify_verifier_set.rs +++ b/ampd/src/handlers/solana_verify_verifier_set.rs @@ -41,7 +41,6 @@ struct PollStartedEvent { contract_address: TMAddress, verifier_set: VerifierSetConfirmation, poll_id: PollId, - source_chain: router_api::ChainName, _source_gateway_address: String, expires_at: u64, _confirmation_height: u64, @@ -51,7 +50,6 @@ struct PollStartedEvent { pub struct Handler { verifier: TMAddress, voting_verifier: TMAddress, - chain: ChainName, rpc_client: RpcClient, latest_block_height: Receiver, } @@ -60,14 +58,12 @@ impl Handler { pub fn new( verifier: TMAddress, voting_verifier: TMAddress, - chain: ChainName, rpc_client: RpcClient, latest_block_height: Receiver, ) -> Self { Self { verifier, voting_verifier, - chain, rpc_client, latest_block_height, } @@ -92,7 +88,6 @@ impl EventHandler for Handler { let PollStartedEvent { contract_address, poll_id, - source_chain, expires_at, participants, verifier_set, @@ -108,10 +103,6 @@ impl EventHandler for Handler { return Ok(vec![]); } - if self.chain != source_chain { - return Ok(vec![]); - } - if !participants.contains(&self.verifier) { return Ok(vec![]); } @@ -229,13 +220,7 @@ mod tests { let expiration = 100u64; let (_, rx) = watch::channel(expiration - 1); - let handler = Handler::new( - worker.clone(), - voting_verifier.clone(), - ChainName::from_str("solana").unwrap(), - rpc_client, - rx, - ); + let handler = Handler::new(worker.clone(), voting_verifier.clone(), rpc_client, rx); let event = into_structured_event( verifier_set_poll_started_event(participants(2, Some(worker.clone())), expiration), @@ -265,13 +250,7 @@ mod tests { let expiration = 100u64; let (_, rx) = watch::channel(expiration - 1); - let handler = Handler::new( - worker.clone(), - voting_verifier.clone(), - ChainName::from_str("notmatchingchain").unwrap(), - rpc_client, - rx, - ); + let handler = Handler::new(worker.clone(), voting_verifier.clone(), rpc_client, rx); let event = into_structured_event( verifier_set_poll_started_event(participants(2, Some(worker.clone())), expiration), @@ -300,13 +279,7 @@ mod tests { let expiration = 100u64; let (_, rx) = watch::channel(expiration - 1); - let handler = Handler::new( - worker.clone(), - voting_verifier.clone(), - ChainName::from_str("solana").unwrap(), - rpc_client, - rx, - ); + let handler = Handler::new(worker.clone(), voting_verifier.clone(), rpc_client, rx); let event = into_structured_event( verifier_set_poll_started_event(participants(2, None), expiration), // worker is not here. @@ -335,13 +308,7 @@ mod tests { let expiration = 100u64; let (_, rx) = watch::channel(expiration); - let handler = Handler::new( - worker.clone(), - voting_verifier.clone(), - ChainName::from_str("solana").unwrap(), - rpc_client, - rx, - ); + let handler = Handler::new(worker.clone(), voting_verifier.clone(), rpc_client, rx); let event = into_structured_event( verifier_set_poll_started_event(participants(2, Some(worker.clone())), expiration), @@ -364,10 +331,16 @@ mod tests { participants: Vec, expires_at: u64, ) -> PollStarted { + let signature_1 = "3GLo4z4siudHxW1BMHBbkTKy7kfbssNFaxLR5hTjhEXCUzp2Pi2VVwybc1s96pEKjRre7CcKKeLhni79zWTNUseP"; + let event_idx_1 = 10_u32; + let message_id_1 = format!("{signature_1}-{event_idx_1}"); + + #[allow(deprecated)] PollStarted::VerifierSet { verifier_set: VerifierSetConfirmation { - tx_id: nonempty::String::from_str("value").unwrap(), - event_index: 1, + tx_id: signature_1.parse().unwrap(), + event_index: event_idx_1, + message_id: message_id_1.parse().unwrap(), verifier_set: build_verifier_set(KeyType::Ecdsa, &ecdsa_test_data::signers()), }, metadata: PollMetadata { diff --git a/ampd/src/lib.rs b/ampd/src/lib.rs index f64d012b2..07c6f9f9b 100644 --- a/ampd/src/lib.rs +++ b/ampd/src/lib.rs @@ -396,38 +396,36 @@ where handlers::config::Config::SolanaMsgVerifier { cosmwasm_contract, max_tx_cache_entries, - chain, + rpc_url, rpc_timeout, } => self.create_handler_task( - format!("{}-msg-verifier", chain.name), + "solana-msg-verifier", handlers::solana_verify_msg::Handler::new( verifier.clone(), cosmwasm_contract, RpcCacheWrapper::new( RpcClient::new_with_timeout_and_commitment( - chain.rpc_url.to_string(), + rpc_url.to_string(), rpc_timeout.unwrap_or(DEFAULT_RPC_TIMEOUT), CommitmentConfig::finalized(), ), NonZeroUsize::new(max_tx_cache_entries).unwrap(), ), - chain.name, self.block_height_monitor.latest_block_height(), ), event_processor_config.clone(), ), handlers::config::Config::SolanaVerifierSetVerifier { cosmwasm_contract, - chain, + rpc_url, rpc_timeout, } => self.create_handler_task( - format!("{}-worker-set-verifier", chain.name), + "solana-verifier-set-verifier", handlers::solana_verify_verifier_set::Handler::new( verifier.clone(), cosmwasm_contract, - chain.name, RpcClient::new_with_timeout_and_commitment( - chain.rpc_url.to_string(), + rpc_url.to_string(), rpc_timeout.unwrap_or(DEFAULT_RPC_TIMEOUT), CommitmentConfig::finalized(), ), diff --git a/ampd/src/solana/msg_verifier.rs b/ampd/src/solana/msg_verifier.rs index 09a9cc354..b4437b4bb 100644 --- a/ampd/src/solana/msg_verifier.rs +++ b/ampd/src/solana/msg_verifier.rs @@ -20,7 +20,6 @@ impl PartialEq<&Message> for &ArchivedGatewayEvent { payload: _, payload_hash, }) => { - let Ok(msg_sender) = Pubkey::from_str(msg.source_address.as_str()) else { return false; }; diff --git a/ampd/src/tests/config_template.toml b/ampd/src/tests/config_template.toml index 332056517..9e2101375 100644 --- a/ampd/src/tests/config_template.toml +++ b/ampd/src/tests/config_template.toml @@ -86,8 +86,7 @@ rpc_url = 'http://127.0.0.1/' type = 'SolanaMsgVerifier' cosmwasm_contract = 'axelar1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqecnww6' max_tx_cache_entries = 6 -chain_name = 'solana' -chain_rpc_url = 'http://127.0.0.1/' +rpc_url = 'http://127.0.0.1/' [handlers.rpc_timeout] secs = 3 @@ -96,8 +95,7 @@ nanos = 0 [[handlers]] type = 'SolanaVerifierSetVerifier' cosmwasm_contract = 'axelar1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqecnww6' -chain_name = 'solana' -chain_rpc_url = 'http://127.0.0.1/' +rpc_url = 'http://127.0.0.1/' [handlers.rpc_timeout] secs = 3 From cc97ee5280f78e146499809cddfd874d6b6716a9 Mon Sep 17 00:00:00 2001 From: Roberts Pumpurs Date: Mon, 25 Nov 2024 15:35:02 +0200 Subject: [PATCH 083/109] fix: broken multisig prover code --- contracts/multisig-prover/src/encoding/mod.rs | 38 +------------------ .../multisig-prover/src/encoding/rkyv/mod.rs | 6 +-- 2 files changed, 4 insertions(+), 40 deletions(-) diff --git a/contracts/multisig-prover/src/encoding/mod.rs b/contracts/multisig-prover/src/encoding/mod.rs index 972b5eb91..71e0a3df2 100644 --- a/contracts/multisig-prover/src/encoding/mod.rs +++ b/contracts/multisig-prover/src/encoding/mod.rs @@ -7,6 +7,7 @@ use axelar_wasm_std::hash::Hash; use cosmwasm_schema::cw_serde; use cosmwasm_std::HexBinary; use error_stack::Result; +use multisig::key::Signature; use multisig::msg::SignerWithSig; use multisig::verifier_set::VerifierSet; @@ -59,40 +60,3 @@ impl Encoder { } } } - -// Convert non-recoverable ECDSA signatures to recoverable ones. -fn to_recoverable(encoder: Encoder, msg: M, signers: Vec) -> Vec -where - M: AsRef<[u8]>, -{ - let recovery_transform = match encoder { - Encoder::Abi => add_27, - Encoder::Bcs => no_op, - Encoder::Rkyv => add_27, - _ => panic!("unsupported encoder"), - }; - signers - .into_iter() - .map(|mut signer| { - if let Signature::Ecdsa(nonrecoverable) = signer.signature { - signer.signature = nonrecoverable - .to_recoverable(msg.as_ref(), &signer.signer.pub_key, recovery_transform) - .map(Signature::EcdsaRecoverable) - .expect("failed to convert non-recoverable signature to recoverable"); - } - - signer - }) - .collect() -} - -fn add_27(recovery_byte: k256::ecdsa::RecoveryId) -> u8 { - recovery_byte - .to_byte() - .checked_add(27) - .expect("overflow when adding 27 to recovery byte") -} - -fn no_op(recovery_byte: k256::ecdsa::RecoveryId) -> u8 { - recovery_byte.to_byte() -} diff --git a/contracts/multisig-prover/src/encoding/rkyv/mod.rs b/contracts/multisig-prover/src/encoding/rkyv/mod.rs index 3b7c143ae..62dbc0c64 100644 --- a/contracts/multisig-prover/src/encoding/rkyv/mod.rs +++ b/contracts/multisig-prover/src/encoding/rkyv/mod.rs @@ -2,6 +2,7 @@ use axelar_rkyv_encoding::types::{ED25519_PUBKEY_LEN, SECP256K1_COMPRESSED_PUBKE use axelar_wasm_std::hash::Hash; use cosmwasm_std::HexBinary; use itertools::Itertools; +use k256::ecdsa::RecoveryId; use multisig::{ key::{PublicKey, Recoverable, Signature}, msg::SignerWithSig, @@ -12,8 +13,6 @@ use std::{array::TryFromSliceError, collections::BTreeMap}; use crate::{error::ContractError, payload::Payload}; -use super::add_27; - type Result = core::result::Result; pub fn encode_execute_data( @@ -152,10 +151,11 @@ fn to_signature( pub_key: &PublicKey, payload_hash: &[u8; 32], ) -> Result { + let recovery_transform = |recovery_byte: RecoveryId| -> u8 { recovery_byte.to_byte() }; match sig { Signature::Ecdsa(nonrec) => { let recov = nonrec - .to_recoverable(payload_hash, pub_key, add_27) + .to_recoverable(payload_hash, pub_key, recovery_transform) .map_err(|e| ContractError::RkyvEncodingError(e.to_string()))?; Ok(axelar_rkyv_encoding::types::Signature::EcdsaRecoverable( recoverable_ecdsa_to_array(&recov)?, From ddbc51045182814cf0fb15decf79e2680fec9a74 Mon Sep 17 00:00:00 2001 From: Roberts Pumpurs Date: Mon, 25 Nov 2024 21:34:41 +0200 Subject: [PATCH 084/109] feat: multisig prover update --- Cargo.lock | 1810 ++++++----------- Cargo.toml | 3 +- contracts/multisig-prover/Cargo.toml | 6 +- contracts/multisig-prover/src/encoding/mod.rs | 15 +- .../multisig-prover/src/encoding/rkyv/mod.rs | 184 -- .../multisig-prover/src/encoding/solana.rs | 188 ++ contracts/multisig-prover/src/error.rs | 5 +- 7 files changed, 830 insertions(+), 1381 deletions(-) delete mode 100644 contracts/multisig-prover/src/encoding/rkyv/mod.rs create mode 100644 contracts/multisig-prover/src/encoding/solana.rs diff --git a/Cargo.lock b/Cargo.lock index 1c0df116e..181f2a6e0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -245,13 +245,14 @@ name = "ampd" version = "1.3.1" dependencies = [ "async-trait", - "axelar-rkyv-encoding", + "axelar-solana-encoding", + "axelar-solana-gateway", "axelar-wasm-std", "axum 0.7.9", "base64 0.21.7", "bcs", "borsh 1.5.3", - "clap", + "clap 4.5.21", "config", "cosmrs", "cosmwasm-std", @@ -273,7 +274,6 @@ dependencies = [ "faux", "futures", "generic-array", - "gmp-gateway", "hex", "humantime-serde", "itertools 0.11.0", @@ -298,7 +298,7 @@ dependencies = [ "serde_with 3.11.0", "service-registry", "service-registry-api", - "sha3", + "sha3 0.10.8", "solana-account-decoder", "solana-client", "solana-program", @@ -315,7 +315,7 @@ dependencies = [ "sui-types 0.1.0", "tendermint 0.33.0", "tendermint-rpc", - "thiserror 1.0.69", + "thiserror", "tokio", "tokio-stream", "tokio-util", @@ -363,8 +363,8 @@ dependencies = [ "matchit 0.5.0", "pin-project-lite", "pkcs8 0.9.0", - "quinn 0.10.2", - "quinn-proto 0.10.6", + "quinn", + "quinn-proto", "rand 0.8.5", "rcgen", "ring 0.16.20", @@ -374,7 +374,7 @@ dependencies = [ "serde_json", "socket2", "tap", - "thiserror 1.0.69", + "thiserror", "tokio", "tokio-util", "tower 0.4.13", @@ -382,6 +382,15 @@ dependencies = [ "x509-parser", ] +[[package]] +name = "ansi_term" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" +dependencies = [ + "winapi", +] + [[package]] name = "anstream" version = "0.6.18" @@ -723,7 +732,7 @@ dependencies = [ "nom", "num-traits", "rusticata-macros", - "thiserror 1.0.69", + "thiserror", "time", ] @@ -769,7 +778,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" dependencies = [ "concurrent-queue", - "event-listener 2.5.3", + "event-listener", "futures-core", ] @@ -807,18 +816,16 @@ version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b" dependencies = [ - "event-listener 2.5.3", + "event-listener", ] [[package]] -name = "async-lock" -version = "3.4.0" +name = "async-mutex" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" +checksum = "479db852db25d9dbf6204e6cb6253698f175c15726470f78af0d918e99d6156e" dependencies = [ - "event-listener 5.3.1", - "event-listener-strategy", - "pin-project-lite", + "event-listener", ] [[package]] @@ -871,6 +878,17 @@ version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" +[[package]] +name = "atty" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" +dependencies = [ + "hermit-abi 0.1.19", + "libc", + "winapi", +] + [[package]] name = "auto_impl" version = "1.2.0" @@ -910,42 +928,64 @@ dependencies = [ "schemars", "serde", "serde_json", - "thiserror 1.0.69", + "thiserror", ] [[package]] name = "axelar-message-primitives" version = "0.1.0" -source = "git+https://github.com/eigerco/solana-axelar.git?rev=813ddc2b2b35d31411e22f9835d7a95d32943af1#813ddc2b2b35d31411e22f9835d7a95d32943af1" +source = "git+https://github.com/eigerco/solana-axelar.git?rev=24cb744#24cb7448710527dc395fb569d150f582d9dfd32a" dependencies = [ + "alloy-primitives", "alloy-sol-types", - "anyhow", "bnum", "borsh 1.5.3", "bytemuck", - "ethers-core", "hex", - "libsecp256k1", "rkyv", - "sha3", "solana-program", - "thiserror 1.0.69", + "thiserror", ] [[package]] -name = "axelar-rkyv-encoding" +name = "axelar-solana-encoding" version = "0.1.0" -source = "git+https://github.com/eigerco/solana-axelar.git?rev=813ddc2b2b35d31411e22f9835d7a95d32943af1#813ddc2b2b35d31411e22f9835d7a95d32943af1" +source = "git+https://github.com/eigerco/solana-axelar.git?rev=24cb744#24cb7448710527dc395fb569d150f582d9dfd32a" dependencies = [ - "bnum", + "arrayref", + "borsh 1.5.3", "bs58 0.5.1", + "hex", + "rkyv", + "rs_merkle", + "sha3 0.10.8", + "solana-program", + "thiserror", + "udigest", +] + +[[package]] +name = "axelar-solana-gateway" +version = "0.1.0" +source = "git+https://github.com/eigerco/solana-axelar.git?rev=24cb744#24cb7448710527dc395fb569d150f582d9dfd32a" +dependencies = [ + "axelar-message-primitives", + "axelar-solana-encoding", + "base64 0.21.7", + "bincode", + "bitvec 1.0.1", + "borsh 1.5.3", + "bytemuck", "ed25519-dalek 2.1.1", "hex", + "itertools 0.12.1", "libsecp256k1", + "num-derive 0.4.2", + "num-traits", + "program-utils", "rkyv", - "sha3", "solana-program", - "thiserror 1.0.69", + "thiserror", ] [[package]] @@ -976,11 +1016,11 @@ dependencies = [ "serde", "serde_json", "serde_with 3.11.0", - "sha3", + "sha3 0.10.8", "stellar-xdr", "strum 0.25.0", "sui-types 1.0.0", - "thiserror 1.0.69", + "thiserror", "valuable", ] @@ -993,7 +1033,7 @@ dependencies = [ "quote 1.0.37", "report", "syn 2.0.89", - "thiserror 1.0.69", + "thiserror", ] [[package]] @@ -1019,8 +1059,8 @@ dependencies = [ "router-api", "serde", "serde_json", - "sha3", - "thiserror 1.0.69", + "sha3 0.10.8", + "thiserror", ] [[package]] @@ -1201,7 +1241,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "85b6598a2f5d564fb7855dc6b06fd1c38cff5a72bd8b863a4d021938497b440a" dependencies = [ "serde", - "thiserror 1.0.69", + "thiserror", ] [[package]] @@ -1246,7 +1286,7 @@ dependencies = [ "byteorder", "ff", "serde", - "thiserror 1.0.69", + "thiserror", ] [[package]] @@ -1436,9 +1476,9 @@ dependencies = [ [[package]] name = "blake3" -version = "1.5.4" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d82033247fd8e890df8f740e407ad4d038debb9eb1f40533fffb32e7d17dc6f7" +checksum = "30cca6d3674597c30ddf2c587bf8d9d65c9a84d2326d941cc79c9842dfe0ef52" dependencies = [ "arrayref", "arrayvec", @@ -1454,6 +1494,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" dependencies = [ + "block-padding 0.2.1", "generic-array", ] @@ -1466,6 +1507,12 @@ dependencies = [ "generic-array", ] +[[package]] +name = "block-padding" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae" + [[package]] name = "block-padding" version = "0.3.3" @@ -1530,7 +1577,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2506947f73ad44e344215ccd6403ac2ae18cd8e046e581a441bf8d199f257f03" dependencies = [ "borsh-derive 1.5.3", - "cfg_aliases", + "cfg_aliases 0.2.1", ] [[package]] @@ -1750,7 +1797,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "190baaad529bcfbde9e1a19022c42781bdb6ff9de25721abdb8fd98c0807730b" dependencies = [ "libc", - "thiserror 1.0.69", + "thiserror", ] [[package]] @@ -1773,7 +1820,7 @@ dependencies = [ "semver 1.0.23", "serde", "serde_json", - "thiserror 1.0.69", + "thiserror", ] [[package]] @@ -1796,12 +1843,6 @@ dependencies = [ "shlex", ] -[[package]] -name = "cesu8" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" - [[package]] name = "cfg-if" version = "1.0.0" @@ -1810,20 +1851,15 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "cfg_aliases" -version = "0.2.1" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" +checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" [[package]] -name = "cfg_eval" -version = "0.1.2" +name = "cfg_aliases" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45565fc9416b9896014f5732ac776f810ee53a66730c17e4020c3ec064a8f88f" -dependencies = [ - "proc-macro2 1.0.92", - "quote 1.0.37", - "syn 2.0.89", -] +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" [[package]] name = "chrono" @@ -1850,6 +1886,37 @@ dependencies = [ "inout", ] +[[package]] +name = "clap" +version = "2.34.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c" +dependencies = [ + "ansi_term", + "atty", + "bitflags 1.3.2", + "strsim 0.8.0", + "textwrap 0.11.0", + "unicode-width 0.1.14", + "vec_map", +] + +[[package]] +name = "clap" +version = "3.2.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ea181bf566f71cb9a5d17a59e1871af638180a18fb0035c92ae62b705207123" +dependencies = [ + "atty", + "bitflags 1.3.2", + "clap_lex 0.2.4", + "indexmap 1.9.3", + "once_cell", + "strsim 0.10.0", + "termcolor", + "textwrap 0.16.1", +] + [[package]] name = "clap" version = "4.5.21" @@ -1868,7 +1935,7 @@ checksum = "b17a95aa67cc7b5ebd32aa5370189aa0d79069ef1c64ce893bd30fb24bff20ec" dependencies = [ "anstream", "anstyle", - "clap_lex", + "clap_lex 0.7.3", "strsim 0.11.1", "terminal_size", ] @@ -1885,6 +1952,15 @@ dependencies = [ "syn 2.0.89", ] +[[package]] +name = "clap_lex" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5" +dependencies = [ + "os_str_bytes", +] + [[package]] name = "clap_lex" version = "0.7.3" @@ -1898,7 +1974,7 @@ dependencies = [ "cosmwasm-std", "error-stack", "serde", - "thiserror 1.0.69", + "thiserror", ] [[package]] @@ -1951,16 +2027,6 @@ dependencies = [ "unreachable", ] -[[package]] -name = "combine" -version = "4.6.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" -dependencies = [ - "bytes", - "memchr", -] - [[package]] name = "concurrent-queue" version = "2.5.0" @@ -2085,7 +2151,7 @@ dependencies = [ "report", "router-api", "service-registry-api", - "thiserror 1.0.69", + "thiserror", "tofn", ] @@ -2143,7 +2209,7 @@ dependencies = [ "serde_json", "subtle-encoding", "tendermint 0.32.2", - "thiserror 1.0.69", + "thiserror", ] [[package]] @@ -2156,7 +2222,7 @@ dependencies = [ "ed25519-zebra", "k256", "rand_core 0.6.4", - "thiserror 1.0.69", + "thiserror", ] [[package]] @@ -2178,7 +2244,7 @@ dependencies = [ "schemars", "serde", "serde_json", - "thiserror 1.0.69", + "thiserror", ] [[package]] @@ -2211,7 +2277,7 @@ dependencies = [ "serde-json-wasm", "sha2 0.10.8", "static_assertions", - "thiserror 1.0.69", + "thiserror", ] [[package]] @@ -2352,6 +2418,7 @@ dependencies = [ "byteorder", "digest 0.9.0", "rand_core 0.5.1", + "serde", "subtle", "zeroize", ] @@ -2367,9 +2434,7 @@ dependencies = [ "curve25519-dalek-derive", "digest 0.10.7", "fiat-crypto", - "rand_core 0.6.4", "rustc_version 0.4.1", - "serde", "subtle", "zeroize", ] @@ -2414,7 +2479,7 @@ dependencies = [ "prost 0.9.0", "schemars", "serde", - "thiserror 1.0.69", + "thiserror", ] [[package]] @@ -2434,7 +2499,7 @@ dependencies = [ "schemars", "serde", "sha2 0.10.8", - "thiserror 1.0.69", + "thiserror", ] [[package]] @@ -2481,7 +2546,7 @@ dependencies = [ "schemars", "semver 1.0.23", "serde", - "thiserror 1.0.69", + "thiserror", ] [[package]] @@ -2496,7 +2561,7 @@ dependencies = [ "schemars", "semver 1.0.23", "serde", - "thiserror 1.0.69", + "thiserror", ] [[package]] @@ -2524,7 +2589,7 @@ dependencies = [ "schemars", "semver 1.0.23", "serde", - "thiserror 1.0.69", + "thiserror", ] [[package]] @@ -2755,6 +2820,18 @@ dependencies = [ "syn 2.0.89", ] +[[package]] +name = "dialoguer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59c6f2989294b9a498d3ad5491a79c6deb604617378e1cdc4bfc1c1361fe2f87" +dependencies = [ + "console", + "shell-words", + "tempfile", + "zeroize", +] + [[package]] name = "diff" version = "0.1.13" @@ -2946,7 +3023,7 @@ dependencies = [ "rand_core 0.6.4", "serde", "sha2 0.9.9", - "thiserror 1.0.69", + "thiserror", "zeroize", ] @@ -3061,7 +3138,7 @@ dependencies = [ "rand 0.8.5", "rlp", "serde", - "sha3", + "sha3 0.10.8", "zeroize", ] @@ -3116,6 +3193,19 @@ dependencies = [ "syn 2.0.89", ] +[[package]] +name = "env_logger" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a12e6657c4c97ebab115a42dcee77225f7f482cdd841cf7088c657a42e9e00e7" +dependencies = [ + "atty", + "humantime", + "log", + "regex", + "termcolor", +] + [[package]] name = "equivalent" version = "1.0.1" @@ -3161,8 +3251,8 @@ dependencies = [ "regex", "serde", "serde_json", - "sha3", - "thiserror 1.0.69", + "sha3 0.10.8", + "thiserror", "uint", ] @@ -3212,7 +3302,7 @@ dependencies = [ "pin-project", "serde", "serde_json", - "thiserror 1.0.69", + "thiserror", ] [[package]] @@ -3278,7 +3368,7 @@ dependencies = [ "strum 0.26.3", "syn 2.0.89", "tempfile", - "thiserror 1.0.69", + "thiserror", "tiny-keccak", "unicode-xid 0.2.6", ] @@ -3308,7 +3398,7 @@ dependencies = [ "reqwest 0.11.27", "serde", "serde_json", - "thiserror 1.0.69", + "thiserror", "tokio", "tokio-tungstenite", "tracing", @@ -3332,27 +3422,6 @@ version = "2.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" -[[package]] -name = "event-listener" -version = "5.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6032be9bd27023a771701cc49f9f053c751055f71efb2e0ae5c15809093675ba" -dependencies = [ - "concurrent-queue", - "parking", - "pin-project-lite", -] - -[[package]] -name = "event-listener-strategy" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f214dc438f977e6d4e3500aaa277f5ad94ca83fbbd9b1a15713ce2344ccc5a1" -dependencies = [ - "event-listener 5.3.1", - "pin-project-lite", -] - [[package]] name = "events" version = "1.0.0" @@ -3363,7 +3432,7 @@ dependencies = [ "error-stack", "serde_json", "tendermint 0.33.0", - "thiserror 1.0.69", + "thiserror", ] [[package]] @@ -3390,8 +3459,8 @@ dependencies = [ "k256", "multisig", "router-api", - "sha3", - "thiserror 1.0.69", + "sha3 0.10.8", + "thiserror", ] [[package]] @@ -3449,10 +3518,10 @@ dependencies = [ "serde_json", "serde_with 2.3.3", "sha2 0.10.8", - "sha3", + "sha3 0.10.8", "signature 2.2.0", "static_assertions", - "thiserror 1.0.69", + "thiserror", "tokio", "typenum", "zeroize", @@ -3479,7 +3548,7 @@ dependencies = [ "itertools 0.10.5", "rand 0.8.5", "serde", - "sha3", + "sha3 0.10.8", "tap", "tracing", "typenum", @@ -3606,21 +3675,6 @@ version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" -[[package]] -name = "five8_const" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b4f62f0f8ca357f93ae90c8c2dd1041a1f665fde2f889ea9b1787903829015" -dependencies = [ - "five8_core", -] - -[[package]] -name = "five8_core" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94474d15a76982be62ca8a39570dccce148d98c238ebb7408b0a21b2c4bdddc4" - [[package]] name = "fixed-hash" version = "0.7.0" @@ -3882,7 +3936,7 @@ dependencies = [ "router-api", "serde", "serde_json", - "thiserror 1.0.69", + "thiserror", "voting-verifier", ] @@ -3898,7 +3952,7 @@ dependencies = [ "goldie", "msgs-derive", "router-api", - "thiserror 1.0.69", + "thiserror", ] [[package]] @@ -3997,24 +4051,14 @@ dependencies = [ ] [[package]] -name = "gmp-gateway" -version = "0.1.0" -source = "git+https://github.com/eigerco/solana-axelar.git?rev=813ddc2b2b35d31411e22f9835d7a95d32943af1#813ddc2b2b35d31411e22f9835d7a95d32943af1" +name = "goblin" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7666983ed0dd8d21a6f6576ee00053ca0926fb281a5522577a4dbd0f1b54143" dependencies = [ - "axelar-message-primitives", - "axelar-rkyv-encoding", - "base64 0.21.7", - "bincode", - "borsh 1.5.3", - "hex", - "itertools 0.12.1", - "libsecp256k1", - "num-derive 0.4.2", - "num-traits", - "program-utils", - "rkyv", - "solana-program", - "thiserror 1.0.69", + "log", + "plain", + "scroll", ] [[package]] @@ -4032,26 +4076,6 @@ dependencies = [ "yansi", ] -[[package]] -name = "governor" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68a7f542ee6b35af73b06abc0dad1c1bae89964e4e253bc4b587b91c9637867b" -dependencies = [ - "cfg-if", - "dashmap", - "futures", - "futures-timer", - "no-std-compat", - "nonzero_ext", - "parking_lot", - "portable-atomic", - "quanta", - "rand 0.8.5", - "smallvec", - "spinning_top", -] - [[package]] name = "group" version = "0.13.0" @@ -4202,6 +4226,15 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" +[[package]] +name = "hermit-abi" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" +dependencies = [ + "libc", +] + [[package]] name = "hermit-abi" version = "0.3.9" @@ -4836,7 +4869,7 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" dependencies = [ - "block-padding", + "block-padding 0.3.3", "generic-array", ] @@ -4890,7 +4923,7 @@ dependencies = [ "serde_json", "service-registry", "service-registry-api", - "sha3", + "sha3 0.10.8", "tofn", "voting-verifier", ] @@ -4920,9 +4953,9 @@ dependencies = [ "schemars", "serde", "serde_json", - "sha3", + "sha3 0.10.8", "strum 0.25.0", - "thiserror 1.0.69", + "thiserror", ] [[package]] @@ -4934,7 +4967,7 @@ dependencies = [ "quote 1.0.37", "report", "syn 2.0.89", - "thiserror 1.0.69", + "thiserror", ] [[package]] @@ -5000,26 +5033,6 @@ version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "540654e97a3f4470a492cd30ff187bc95d89557a903a2bbf112e2fae98104ef2" -[[package]] -name = "jni" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6df18c2e3db7e453d3c6ac5b3e9d5182664d28788126d39b91f2d1e22b017ec" -dependencies = [ - "cesu8", - "combine 4.6.7", - "jni-sys", - "log", - "thiserror 1.0.69", - "walkdir", -] - -[[package]] -name = "jni-sys" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" - [[package]] name = "jobserver" version = "0.1.32" @@ -5099,7 +5112,7 @@ dependencies = [ "pin-project", "rustls-native-certs 0.6.3", "soketto", - "thiserror 1.0.69", + "thiserror", "tokio", "tokio-rustls 0.23.4", "tokio-util", @@ -5114,7 +5127,7 @@ source = "git+https://github.com/wlmyng/jsonrpsee.git?rev=b1b300784795f6a64d0fcd dependencies = [ "anyhow", "arrayvec", - "async-lock 2.8.0", + "async-lock", "async-trait", "beef", "futures-channel", @@ -5125,11 +5138,11 @@ dependencies = [ "jsonrpsee-types 0.16.2", "parking_lot", "rand 0.8.5", - "rustc-hash 1.1.0", + "rustc-hash", "serde", "serde_json", "soketto", - "thiserror 1.0.69", + "thiserror", "tokio", "tracing", ] @@ -5148,7 +5161,7 @@ dependencies = [ "jsonrpsee-types 0.20.4", "serde", "serde_json", - "thiserror 1.0.69", + "thiserror", "tokio", "tracing", ] @@ -5163,10 +5176,10 @@ dependencies = [ "hyper-rustls 0.23.2", "jsonrpsee-core 0.16.2", "jsonrpsee-types 0.16.2", - "rustc-hash 1.1.0", + "rustc-hash", "serde", "serde_json", - "thiserror 1.0.69", + "thiserror", "tokio", "tracing", ] @@ -5184,7 +5197,7 @@ dependencies = [ "jsonrpsee-types 0.20.4", "serde", "serde_json", - "thiserror 1.0.69", + "thiserror", "tokio", "tower 0.4.13", "tracing", @@ -5233,7 +5246,7 @@ dependencies = [ "beef", "serde", "serde_json", - "thiserror 1.0.69", + "thiserror", "tracing", ] @@ -5247,7 +5260,7 @@ dependencies = [ "beef", "serde", "serde_json", - "thiserror 1.0.69", + "thiserror", "tracing", ] @@ -5549,7 +5562,7 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" dependencies = [ - "hermit-abi", + "hermit-abi 0.3.9", "libc", "wasi 0.11.0+wasi-snapshot-preview1", "windows-sys 0.52.0", @@ -5719,7 +5732,7 @@ source = "git+https://github.com/mystenlabs/sui?tag=mainnet-v1.26.2#f531168c7452 dependencies = [ "anyhow", "bcs", - "clap", + "clap 4.5.21", "codespan-reporting", "dunce", "hex", @@ -5763,7 +5776,7 @@ dependencies = [ "ref-cast", "serde", "serde_bytes", - "thiserror 1.0.69", + "thiserror", "uint", ] @@ -5774,7 +5787,7 @@ source = "git+https://github.com/mystenlabs/sui?tag=mainnet-v1.26.2#f531168c7452 dependencies = [ "anyhow", "bcs", - "clap", + "clap 4.5.21", "codespan", "colored", "move-abstract-interpreter", @@ -5794,7 +5807,7 @@ source = "git+https://github.com/mystenlabs/sui?tag=mainnet-v1.26.2#f531168c7452 dependencies = [ "anyhow", "bcs", - "clap", + "clap 4.5.21", "colored", "hex", "move-abstract-interpreter", @@ -6032,9 +6045,9 @@ dependencies = [ "router-api", "serde", "serde_json", - "sha3", + "sha3 0.10.8", "signature-verifier-api", - "thiserror 1.0.69", + "thiserror", ] [[package]] @@ -6043,7 +6056,7 @@ version = "1.1.1" dependencies = [ "anyhow", "assert_ok", - "axelar-rkyv-encoding", + "axelar-solana-encoding", "axelar-wasm-std", "bcs", "client", @@ -6074,11 +6087,11 @@ dependencies = [ "serde_json", "service-registry", "service-registry-api", - "sha3", + "sha3 0.10.8", "stellar", "stellar-xdr", "sui-gateway", - "thiserror 1.0.69", + "thiserror", "voting-verifier", ] @@ -6107,7 +6120,7 @@ dependencies = [ "serde_json", "serde_repr", "sha2 0.10.8", - "sha3", + "sha3 0.10.8", "tokio", "uuid 1.11.0", "zeroize", @@ -6199,7 +6212,7 @@ dependencies = [ "rand 0.8.5", "serde", "serde_json", - "thiserror 1.0.69", + "thiserror", "tracing", ] @@ -6252,23 +6265,17 @@ dependencies = [ [[package]] name = "nix" -version = "0.29.0" +version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" +checksum = "ab2156c4fce2f8df6c499cc1c763e4394b7482525bf2a9701c9d79d215f519e4" dependencies = [ "bitflags 2.6.0", "cfg-if", - "cfg_aliases", + "cfg_aliases 0.1.1", "libc", "memoffset", ] -[[package]] -name = "no-std-compat" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b93853da6d84c2e3c7d730d6473e8817692dd89be387eb01b94d7f108ecb5b8c" - [[package]] name = "nom" version = "7.1.3" @@ -6285,12 +6292,6 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "995defdca0a589acfdd1bd2e8e3b896b4d4f7675a31fd14c32611440c7f608e6" -[[package]] -name = "nonzero_ext" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38bf9645c8b145698bb0b18a4637dcacbc421ea49bef2317e4fd8065a387cf21" - [[package]] name = "normalize-line-endings" version = "0.3.0" @@ -6491,7 +6492,7 @@ version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" dependencies = [ - "hermit-abi", + "hermit-abi 0.3.9", "libc", ] @@ -6668,6 +6669,12 @@ dependencies = [ "hashbrown 0.12.3", ] +[[package]] +name = "os_str_bytes" +version = "6.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2355d85b9a3786f481747ced0e0ff2ba35213a1f9bd406ed906554d7af805a1" + [[package]] name = "ouroboros" version = "0.17.2" @@ -6783,12 +6790,6 @@ dependencies = [ "syn 2.0.89", ] -[[package]] -name = "parking" -version = "2.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" - [[package]] name = "parking_lot" version = "0.12.3" @@ -6852,6 +6853,15 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d61c5ce1153ab5b689d0c074c4e7fc613e942dfb7dd9eea5ab202d2ad91fe361" +[[package]] +name = "pbkdf2" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "216eaa586a190f0a738f2f918511eecfa90f13295abec0e457cdebcceda80cbd" +dependencies = [ + "crypto-mac", +] + [[package]] name = "pbkdf2" version = "0.11.0" @@ -6957,7 +6967,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "879952a81a83930934cbf1786752d6dedc3b1f29e8f8fb2ad1d0a36f377cf442" dependencies = [ "memchr", - "thiserror 1.0.69", + "thiserror", "ucd-trie", ] @@ -7137,6 +7147,12 @@ version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" +[[package]] +name = "plain" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" + [[package]] name = "polyval" version = "0.6.2" @@ -7290,7 +7306,7 @@ version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e17d47ce914bf4de440332250b0edd23ce48c005f59fab39d3335866b114f11a" dependencies = [ - "thiserror 1.0.69", + "thiserror", "toml 0.5.11", ] @@ -7348,11 +7364,10 @@ dependencies = [ [[package]] name = "program-utils" version = "0.1.0" -source = "git+https://github.com/eigerco/solana-axelar.git?rev=813ddc2b2b35d31411e22f9835d7a95d32943af1#813ddc2b2b35d31411e22f9835d7a95d32943af1" +source = "git+https://github.com/eigerco/solana-axelar.git?rev=24cb744#24cb7448710527dc395fb569d150f582d9dfd32a" dependencies = [ - "borsh 1.5.3", + "rkyv", "solana-program", - "thiserror 1.0.69", ] [[package]] @@ -7367,7 +7382,7 @@ dependencies = [ "memchr", "parking_lot", "protobuf", - "thiserror 1.0.69", + "thiserror", ] [[package]] @@ -7558,21 +7573,6 @@ dependencies = [ "percent-encoding", ] -[[package]] -name = "quanta" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e5167a477619228a0b284fac2674e3c388cba90631d7b7de620e6f1fcd08da5" -dependencies = [ - "crossbeam-utils", - "libc", - "once_cell", - "raw-cpuid", - "wasi 0.11.0+wasi-snapshot-preview1", - "web-sys", - "winapi", -] - [[package]] name = "quick-error" version = "1.2.3" @@ -7588,29 +7588,11 @@ dependencies = [ "bytes", "futures-io", "pin-project-lite", - "quinn-proto 0.10.6", - "quinn-udp 0.4.1", - "rustc-hash 1.1.0", + "quinn-proto", + "quinn-udp", + "rustc-hash", "rustls 0.21.12", - "thiserror 1.0.69", - "tokio", - "tracing", -] - -[[package]] -name = "quinn" -version = "0.11.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62e96808277ec6f97351a2380e6c25114bc9e67037775464979f3037c92d05ef" -dependencies = [ - "bytes", - "pin-project-lite", - "quinn-proto 0.11.9", - "quinn-udp 0.5.7", - "rustc-hash 2.0.0", - "rustls 0.23.18", - "socket2", - "thiserror 2.0.3", + "thiserror", "tokio", "tracing", ] @@ -7624,40 +7606,20 @@ dependencies = [ "bytes", "rand 0.8.5", "ring 0.16.20", - "rustc-hash 1.1.0", + "rustc-hash", "rustls 0.21.12", + "rustls-native-certs 0.6.3", "slab", - "thiserror 1.0.69", + "thiserror", "tinyvec", "tracing", ] [[package]] -name = "quinn-proto" -version = "0.11.9" +name = "quinn-udp" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2fe5ef3495d7d2e377ff17b1a8ce2ee2ec2a18cde8b6ad6619d65d0701c135d" -dependencies = [ - "bytes", - "getrandom 0.2.15", - "rand 0.8.5", - "ring 0.17.8", - "rustc-hash 2.0.0", - "rustls 0.23.18", - "rustls-pki-types", - "rustls-platform-verifier", - "slab", - "thiserror 2.0.3", - "tinyvec", - "tracing", - "web-time", -] - -[[package]] -name = "quinn-udp" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "055b4e778e8feb9f93c4e439f71dc2156ef13360b432b799e179a8c4cdf0b1d7" +checksum = "055b4e778e8feb9f93c4e439f71dc2156ef13360b432b799e179a8c4cdf0b1d7" dependencies = [ "bytes", "libc", @@ -7666,20 +7628,6 @@ dependencies = [ "windows-sys 0.48.0", ] -[[package]] -name = "quinn-udp" -version = "0.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d5a626c6807713b15cac82a6acaccd6043c9a5408c24baae07611fec3f243da" -dependencies = [ - "cfg_aliases", - "libc", - "once_cell", - "socket2", - "tracing", - "windows-sys 0.59.0", -] - [[package]] name = "quote" version = "0.6.13" @@ -7808,15 +7756,6 @@ dependencies = [ "fastrand 1.9.0", ] -[[package]] -name = "raw-cpuid" -version = "11.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ab240315c661615f2ee9f0f2cd32d5a7343a84d5ebcccb99d46e6637565e7b0" -dependencies = [ - "bitflags 2.6.0", -] - [[package]] name = "rayon" version = "1.10.0" @@ -7877,7 +7816,7 @@ checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" dependencies = [ "getrandom 0.2.15", "libredox", - "thiserror 1.0.69", + "thiserror", ] [[package]] @@ -7960,7 +7899,7 @@ dependencies = [ "error-stack", "eyre", "itertools 0.11.0", - "thiserror 1.0.69", + "thiserror", "valuable", ] @@ -8064,7 +8003,7 @@ dependencies = [ "reqwest 0.11.27", "serde", "task-local-extensions", - "thiserror 1.0.69", + "thiserror", ] [[package]] @@ -8084,7 +8023,7 @@ dependencies = [ "report", "router-api", "serde_json", - "thiserror 1.0.69", + "thiserror", ] [[package]] @@ -8233,7 +8172,7 @@ dependencies = [ "report", "router-api", "serde_json", - "thiserror 1.0.69", + "thiserror", ] [[package]] @@ -8254,11 +8193,31 @@ dependencies = [ "schemars", "serde", "serde_json", - "sha3", - "thiserror 1.0.69", + "sha3 0.10.8", + "thiserror", "valuable", ] +[[package]] +name = "rpassword" +version = "7.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80472be3c897911d0137b2d2b9055faf6eeac5b14e324073d83bc17b191d7e3f" +dependencies = [ + "libc", + "rtoolbox", + "windows-sys 0.48.0", +] + +[[package]] +name = "rs_merkle" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b241d2e59b74ef9e98d94c78c47623d04c8392abaf82014dfd372a16041128f" +dependencies = [ + "sha2 0.10.8", +] + [[package]] name = "rsa" version = "0.8.2" @@ -8280,6 +8239,16 @@ dependencies = [ "zeroize", ] +[[package]] +name = "rtoolbox" +version = "0.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c247d24e63230cdb56463ae328478bd5eac8b8faa8c69461a77e8e323afac90e" +dependencies = [ + "libc", + "windows-sys 0.48.0", +] + [[package]] name = "ruint" version = "1.12.3" @@ -8332,12 +8301,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" -[[package]] -name = "rustc-hash" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "583034fd73374156e66797ed8e5b0d5690409c9226b22d87cb7f19821c05d152" - [[package]] name = "rustc-hex" version = "2.1.0" @@ -8428,7 +8391,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c9cc1d47e243d655ace55ed38201c19ae02c148ae56412ab8750e8f0166ab7f" dependencies = [ "once_cell", - "ring 0.17.8", "rustls-pki-types", "rustls-webpki 0.102.8", "subtle", @@ -8459,19 +8421,6 @@ dependencies = [ "security-framework", ] -[[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", -] - [[package]] name = "rustls-pemfile" version = "1.0.4" @@ -8495,36 +8444,6 @@ name = "rustls-pki-types" version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "16f1201b3c9a7ee8039bcadc17b7e605e2945b27eee7631788c1bd2b0643674b" -dependencies = [ - "web-time", -] - -[[package]] -name = "rustls-platform-verifier" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4c7dc240fec5517e6c4eab3310438636cfe6391dfc345ba013109909a90d136" -dependencies = [ - "core-foundation", - "core-foundation-sys", - "jni", - "log", - "once_cell", - "rustls 0.23.18", - "rustls-native-certs 0.7.3", - "rustls-platform-verifier-android", - "rustls-webpki 0.102.8", - "security-framework", - "security-framework-sys", - "webpki-root-certs", - "windows-sys 0.52.0", -] - -[[package]] -name = "rustls-platform-verifier-android" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f" [[package]] name = "rustls-webpki" @@ -8658,6 +8577,20 @@ name = "scroll" version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04c565b551bafbef4157586fa379538366e4385d42082f255bfd96e4fe8519da" +dependencies = [ + "scroll_derive", +] + +[[package]] +name = "scroll_derive" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1db149f81d46d2deba7cd3c50772474707729550221e69588478ebf9ada425ae" +dependencies = [ + "proc-macro2 1.0.92", + "quote 1.0.37", + "syn 2.0.89", +] [[package]] name = "scrypt" @@ -8741,7 +8674,6 @@ dependencies = [ "core-foundation", "core-foundation-sys", "libc", - "num-bigint 0.4.6", "security-framework-sys", ] @@ -8839,7 +8771,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3b5b14ebbcc4e4f2b3642fa99c388649da58d1dc3308c7d109f39f565d1710f0" dependencies = [ "serde", - "thiserror 1.0.69", + "thiserror", ] [[package]] @@ -8850,7 +8782,7 @@ checksum = "f05a5f801ac62a51a49d378fdb3884480041b99aced450b28990673e8ff99895" dependencies = [ "once_cell", "serde", - "thiserror 1.0.69", + "thiserror", ] [[package]] @@ -9031,7 +8963,7 @@ dependencies = [ "schemars", "serde", "service-registry-api", - "thiserror 1.0.69", + "thiserror", ] [[package]] @@ -9050,7 +8982,7 @@ dependencies = [ "router-api", "schemars", "serde", - "thiserror 1.0.69", + "thiserror", ] [[package]] @@ -9111,6 +9043,18 @@ dependencies = [ "cc", ] +[[package]] +name = "sha3" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f81199417d4e5de3f04b1e871023acea7389672c4135918f05aa9cbf2f2fa809" +dependencies = [ + "block-buffer 0.9.0", + "digest 0.9.0", + "keccak", + "opaque-debug", +] + [[package]] name = "sha3" version = "0.10.8" @@ -9152,6 +9096,12 @@ dependencies = [ "serde_repr", ] +[[package]] +name = "shell-words" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24188a676b6ae68c3b2cb3a01be17fbf7240ce009799bb56d5b1409051e78fde" + [[package]] name = "shlex" version = "1.3.0" @@ -9190,7 +9140,7 @@ dependencies = [ "cosmwasm-schema", "cosmwasm-std", "error-stack", - "thiserror 1.0.69", + "thiserror", ] [[package]] @@ -9213,7 +9163,7 @@ checksum = "adc4e5204eb1910f40f9cfa375f6f05b68c3abac4b6fd879c8ff5e7ae8a0a085" dependencies = [ "num-bigint 0.4.6", "num-traits", - "thiserror 1.0.69", + "thiserror", "time", ] @@ -9280,25 +9230,11 @@ dependencies = [ "sha-1", ] -[[package]] -name = "solana-account" -version = "2.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57cb0cf41b565741b350665918b1000324991029cbb56dd31f1bce75a509310b" -dependencies = [ - "bincode", - "serde", - "serde_bytes", - "serde_derive", - "solana-instruction", - "solana-program", -] - [[package]] name = "solana-account-decoder" -version = "2.1.2" +version = "2.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "375453711ca64576a635a72f70a43629c7e11eacd6d817b47720844718643d29" +checksum = "579e643c71b7529b512faba433b5337184cf086d4a879c083b419eabb602dd94" dependencies = [ "Inflector", "base64 0.22.1", @@ -9309,96 +9245,38 @@ dependencies = [ "serde", "serde_derive", "serde_json", - "solana-account-decoder-client-types", "solana-config-program", "solana-sdk", "spl-token", "spl-token-2022", "spl-token-group-interface", "spl-token-metadata-interface", - "thiserror 1.0.69", + "thiserror", "zstd", ] [[package]] -name = "solana-account-decoder-client-types" -version = "2.1.2" +name = "solana-clap-utils" +version = "2.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84543236b7579c4adfe16114516175b4314909dbad98f0aac0cb523dff8befd9" +checksum = "19cc2e303a4f81b7ede3e572380911b122718c6329d253d855d11a784c42658e" dependencies = [ - "base64 0.22.1", - "bs58 0.5.1", - "serde", - "serde_derive", - "serde_json", - "solana-account", - "solana-pubkey", - "zstd", -] - -[[package]] -name = "solana-account-info" -version = "2.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31e085851110dc6a38f55a78c238cf005e239ada61450a88713995022f7bbaf7" -dependencies = [ - "bincode", - "serde", - "solana-program-error", - "solana-program-memory", - "solana-pubkey", -] - -[[package]] -name = "solana-atomic-u64" -version = "2.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1cfea2176602dcad41dc19578bcb82f8ad7c57a0ec4a51b5dcc91fce0dbe16d" -dependencies = [ - "parking_lot", -] - -[[package]] -name = "solana-bincode" -version = "2.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3023f6d059845d3879307b6cd76f47155dfe39b3842820aaed59599bcc0d996" -dependencies = [ - "bincode", - "serde", - "solana-instruction", -] - -[[package]] -name = "solana-bn254" -version = "2.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0206e710f6146b416042fecf325b37b0418b91e5d6926e87cb879da908236075" -dependencies = [ - "ark-bn254", - "ark-ec", - "ark-ff 0.4.2", - "ark-serialize 0.4.2", - "bytemuck", - "solana-program", - "thiserror 1.0.69", -] - -[[package]] -name = "solana-borsh" -version = "2.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b9d146d0c485d8a2e363aa9b47f3e6b127d1603e1cafc12b4b958f25afd3082" -dependencies = [ - "borsh 0.10.4", - "borsh 1.5.3", + "chrono", + "clap 2.34.0", + "rpassword", + "solana-remote-wallet", + "solana-sdk", + "thiserror", + "tiny-bip39", + "uriparse", + "url", ] [[package]] name = "solana-client" -version = "2.1.2" +version = "2.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "017cdda1e882ec268e8e5b9f2e8401161f5ef0b37991cd696111f40137c3bff5" +checksum = "e4042e0b2c2b44db89d59eab832b4a66c6fc03e2a7e9383e7b75faf76d162c61" dependencies = [ "async-trait", "bincode", @@ -9408,10 +9286,11 @@ dependencies = [ "indexmap 2.6.0", "indicatif", "log", - "quinn 0.11.6", + "quinn", "rayon", "solana-connection-cache", "solana-measure", + "solana-metrics", "solana-pubsub-client", "solana-quic-client", "solana-rpc-client", @@ -9422,52 +9301,39 @@ dependencies = [ "solana-thin-client", "solana-tpu-client", "solana-udp-client", - "thiserror 1.0.69", + "thiserror", "tokio", ] -[[package]] -name = "solana-clock" -version = "2.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f7b4b20b02b938d791e537a08b82044d985a7764d289d7b405b762bc006cd61" -dependencies = [ - "serde", - "serde_derive", - "solana-sdk-macro", - "solana-sysvar-id", -] - [[package]] name = "solana-compute-budget" -version = "2.1.2" +version = "2.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "690be515649dc4b0e41efc11d86bf15064ed306bea78b288f72dfe6beab5657b" +checksum = "9747d10c30a2beb91b6950b65788dbf74cb39beb53c58814a859f0cccb4ada97" dependencies = [ + "rustc_version 0.4.1", "solana-sdk", ] [[package]] name = "solana-config-program" -version = "2.1.2" +version = "2.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cf0a83665e3852e56645a4ec45f3f60e0417ae143629c341dccdae543dd2b29" +checksum = "44106069aec6950a4769622ab0eb3213d00be8bbcb35355570f914367616257c" dependencies = [ "bincode", "chrono", "serde", "serde_derive", - "solana-log-collector", "solana-program-runtime", "solana-sdk", - "solana-short-vec", ] [[package]] name = "solana-connection-cache" -version = "2.1.2" +version = "2.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e63d1225dc1d6282184a038882d19d35b7eebb673eb04d65ec9de124bfb250d" +checksum = "199dabec2156092380510e841691cd6783679dce5838dcb5c3f467ce3189df03" dependencies = [ "async-trait", "bincode", @@ -9480,188 +9346,60 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-sdk", - "thiserror 1.0.69", + "thiserror", "tokio", ] -[[package]] -name = "solana-cpi" -version = "2.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d70d2d4fa6f1ecadc5293100f0a46e9a60abd63e2c2966f22c363b0972155395" -dependencies = [ - "solana-account-info", - "solana-define-syscall", - "solana-instruction", - "solana-program-error", - "solana-pubkey", - "solana-stable-layout", -] - [[package]] name = "solana-curve25519" -version = "2.1.2" +version = "2.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "957e8f3986a544442d6c16ab747897a9f1f6c37b5c5c6d7aa352c64fb06e93d2" +checksum = "0f42c6b987786d8cca7fc14749bbcbe514dd1e61d91b316b98ea1342cf670e18" dependencies = [ "bytemuck", "bytemuck_derive", - "curve25519-dalek 4.1.3", + "curve25519-dalek 3.2.1", "solana-program", - "thiserror 1.0.69", -] - -[[package]] -name = "solana-decode-error" -version = "2.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "987e69c94af8de7094a304e79a35643f9d02956845b16924403c08dcdc60f54a" -dependencies = [ - "num-traits", -] - -[[package]] -name = "solana-define-syscall" -version = "2.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "debfb6b4d3b263112fd001e6102cba148674807ef9c6cd7a80c3883137881032" - -[[package]] -name = "solana-derivation-path" -version = "2.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9985ff15cae72e90dabfc50547b5edfb85e91deae64b0df650037dd770075384" -dependencies = [ - "derivation-path", - "qstring", - "uriparse", -] - -[[package]] -name = "solana-epoch-schedule" -version = "2.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bf4eb069a4bb1c762fb59d1a3759bd496b2d275c3bb706e514c8cbafe02a24d" -dependencies = [ - "serde", - "serde_derive", - "solana-sdk-macro", - "solana-sysvar-id", -] - -[[package]] -name = "solana-feature-set" -version = "2.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c2296db31c609b7b88ad71c31e33fd541ad6e756fb40827ba0efecc7a647702" -dependencies = [ - "lazy_static", - "solana-clock", - "solana-epoch-schedule", - "solana-hash", - "solana-pubkey", - "solana-sha256-hasher", -] - -[[package]] -name = "solana-fee-calculator" -version = "2.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0db9a84d00a6186b8900913caac51b35ef69c484c1cdf2569bfea31798351c28" -dependencies = [ - "log", - "serde", - "serde_derive", -] - -[[package]] -name = "solana-hash" -version = "2.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd4adcc124a76786a090639440387ccc68fbf9477103489de107b73d90ce60ba" -dependencies = [ - "borsh 1.5.3", - "bs58 0.5.1", - "bytemuck", - "bytemuck_derive", - "js-sys", - "serde", - "serde_derive", - "solana-atomic-u64", - "solana-sanitize", - "wasm-bindgen", -] - -[[package]] -name = "solana-inflation" -version = "2.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2139d4e67a310f3a4e09034ba0e1d567bf7419420254be0e87e1f74f2b7e9217" -dependencies = [ - "serde", - "serde_derive", + "thiserror", ] [[package]] name = "solana-inline-spl" -version = "2.1.2" +version = "2.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4964b5d6d5fb28a396be09655024b750117c041fff6ab8492ed89d3e87c2503e" +checksum = "a140c334bca2fe1c7794985655fe6412b29550eabd0be953e2cb7c2357013214" dependencies = [ "bytemuck", - "solana-pubkey", -] - -[[package]] -name = "solana-instruction" -version = "2.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19ece5fc0c0a4a12ec8b505dffbc5e48ab7897e2dec9b335c977456223e94963" -dependencies = [ - "bincode", - "borsh 1.5.3", - "getrandom 0.2.15", - "js-sys", - "num-traits", - "serde", - "serde_derive", - "solana-define-syscall", - "solana-pubkey", - "wasm-bindgen", + "rustc_version 0.4.1", + "solana-sdk", ] [[package]] -name = "solana-last-restart-slot" -version = "2.1.2" +name = "solana-logger" +version = "2.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "206b52fdd6eab6d3a190b50841288d534390b4528b1e63f984ced72b6d1c7a61" +checksum = "e79a42aecca4cb913f52b39141fc7ce766350e46332a9df57d8f9d14661dc2c7" dependencies = [ - "serde", - "serde_derive", - "solana-sdk-macro", - "solana-sysvar-id", + "env_logger", + "lazy_static", + "log", ] [[package]] -name = "solana-log-collector" -version = "2.1.2" +name = "solana-measure" +version = "2.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b50c21c10fb956b42dfa9d651d7cd8f07955aa47e3a330e6ef4721270ae9fe2" +checksum = "128b0571ee7ffa4cb674f9dd88d15606d3c5a714ea07de3ab0a122735c340061" dependencies = [ "log", + "solana-sdk", ] -[[package]] -name = "solana-measure" -version = "2.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8af180d3301f722acc301aeb6fa05b14506e12da81fc898a03d9d1a06118742f" - [[package]] name = "solana-metrics" -version = "2.1.2" +version = "2.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ae5ad8e75694856959189de6ec503e9e24486e1596276197ad2bdf1c69c5e00" +checksum = "719e8c73cb13ac616a04cf7a2e318a05d67ce198d5500ffea725bbe11d23a2e2" dependencies = [ "crossbeam-channel", "gethostname", @@ -9669,31 +9407,17 @@ dependencies = [ "log", "reqwest 0.11.27", "solana-sdk", - "thiserror 1.0.69", + "thiserror", ] -[[package]] -name = "solana-msg" -version = "2.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec7a6f57e2e4ffe12cd4fee1e717c0f2ba6336ff2439cd5738d9843458a53da0" -dependencies = [ - "solana-define-syscall", -] - -[[package]] -name = "solana-native-token" -version = "2.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02dc51c820c41b965a94a00e0939fa2683652c3da6ab8eaaeee194c9a526fae9" - [[package]] name = "solana-net-utils" -version = "2.1.2" +version = "2.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71dee5927b0bb6fb8e7227bd930a11b622a8ceb863208a8a6c09464db87b9ca" +checksum = "78adcd60bdd270ff6d60c422baa83bf0edba7e3660a4d1779083aae35c9c27ae" dependencies = [ "bincode", + "clap 3.2.25", "crossbeam-channel", "log", "nix", @@ -9701,36 +9425,25 @@ dependencies = [ "serde", "serde_derive", "socket2", + "solana-logger", "solana-sdk", + "solana-version", + "static_assertions", "tokio", "url", ] -[[package]] -name = "solana-packet" -version = "2.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32ed935e9f2d99d2ec0944012b2f9b8afdee5af39a7693faeda68c6a77aa64d0" -dependencies = [ - "bincode", - "bitflags 2.6.0", - "cfg_eval", - "serde", - "serde_derive", - "serde_with 3.11.0", -] - [[package]] name = "solana-perf" -version = "2.1.2" +version = "2.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8156dfa8f9f3a46e00323b85bcec38fea9f3508d6c2334dd14481b79adb10644" +checksum = "9ce2d03a15b8ddcec849b6c7c701aabcc8430926719d74b6c40c574aa0e2e2a8" dependencies = [ "ahash 0.8.11", "bincode", "bv", "caps", - "curve25519-dalek 4.1.3", + "curve25519-dalek 3.2.1", "dlopen2", "fnv", "lazy_static", @@ -9739,30 +9452,24 @@ dependencies = [ "nix", "rand 0.8.5", "rayon", + "rustc_version 0.4.1", "serde", "solana-metrics", "solana-rayon-threadlimit", "solana-sdk", - "solana-short-vec", "solana-vote-program", ] -[[package]] -name = "solana-precompile-error" -version = "2.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b44197151afc9e96260228ec173fefea84e7b52d1e14c3b6dbbe0df739e878a9" -dependencies = [ - "num-traits", - "solana-decode-error", -] - [[package]] name = "solana-program" -version = "2.1.2" +version = "2.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3eee1043f1a069817b5a96dbade9e37566ff92d6663a747550b942520b2bb289" +checksum = "59e18fa32fb3e915fd76faa6e8c73089d0f29dd15d9dd3970897e6d17dded920" dependencies = [ + "ark-bn254", + "ark-ec", + "ark-ff 0.4.2", + "ark-serialize 0.4.2", "base64 0.22.1", "bincode", "bitflags 2.6.0", @@ -9775,122 +9482,39 @@ dependencies = [ "bytemuck_derive", "console_error_panic_hook", "console_log", - "curve25519-dalek 4.1.3", - "five8_const", + "curve25519-dalek 3.2.1", "getrandom 0.2.15", "js-sys", "lazy_static", - "log", - "memoffset", - "num-bigint 0.4.6", - "num-derive 0.4.2", - "num-traits", - "parking_lot", - "rand 0.8.5", - "serde", - "serde_bytes", - "serde_derive", - "sha2 0.10.8", - "sha3", - "solana-account-info", - "solana-atomic-u64", - "solana-bincode", - "solana-borsh", - "solana-clock", - "solana-cpi", - "solana-decode-error", - "solana-define-syscall", - "solana-epoch-schedule", - "solana-fee-calculator", - "solana-hash", - "solana-instruction", - "solana-last-restart-slot", - "solana-msg", - "solana-native-token", - "solana-program-entrypoint", - "solana-program-error", - "solana-program-memory", - "solana-program-option", - "solana-program-pack", - "solana-pubkey", - "solana-rent", - "solana-sanitize", - "solana-sdk-macro", - "solana-secp256k1-recover", - "solana-serde-varint", - "solana-serialize-utils", - "solana-sha256-hasher", - "solana-short-vec", - "solana-slot-hashes", - "solana-slot-history", - "solana-stable-layout", - "solana-sysvar-id", - "solana-transaction-error", - "thiserror 1.0.69", - "wasm-bindgen", -] - -[[package]] -name = "solana-program-entrypoint" -version = "2.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d51f5d76edb8b45d3d47874367a859905c57aee5ca483460d1cd7ecb94d09bf" -dependencies = [ - "solana-account-info", - "solana-msg", - "solana-program-error", - "solana-pubkey", -] - -[[package]] -name = "solana-program-error" -version = "2.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8672853ff2835c5ddf711b876711c89033f0fa72b48e427a8cff05268be790de" -dependencies = [ - "borsh 1.5.3", - "num-traits", - "serde", - "serde_derive", - "solana-decode-error", - "solana-instruction", - "solana-msg", - "solana-pubkey", -] - -[[package]] -name = "solana-program-memory" -version = "2.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "203924f5631f04eb2a426bea7ceb3d10b92218735f5339af097897b6ae2d0a79" -dependencies = [ - "num-traits", - "solana-define-syscall", -] - -[[package]] -name = "solana-program-option" -version = "2.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef419526ea1e1d80259f04c24f2cede67db2a18a42d34ca1c6c16784b97fd21b" - -[[package]] -name = "solana-program-pack" -version = "2.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4af037dcb6b4c1c7a6f609868502bc198c969ffbcf628a72b0cbb6948b8c490" -dependencies = [ - "solana-program-error", + "libsecp256k1", + "log", + "memoffset", + "num-bigint 0.4.6", + "num-derive 0.4.2", + "num-traits", + "parking_lot", + "rand 0.8.5", + "rustc_version 0.4.1", + "rustversion", + "serde", + "serde_bytes", + "serde_derive", + "sha2 0.10.8", + "sha3 0.10.8", + "solana-sdk-macro", + "thiserror", + "wasm-bindgen", ] [[package]] name = "solana-program-runtime" -version = "2.1.2" +version = "2.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d8825aa258629bacbe5591c5e9ee720e213b073bc052879e2f16ecfc3db5bee" +checksum = "a35691ece2b5e204e30a3d06bdd5e9c43d71693ee9c5ebb401f8d2b5dabe59d3" dependencies = [ "base64 0.22.1", "bincode", + "eager", "enum-iterator", "itertools 0.12.1", "libc", @@ -9899,52 +9523,23 @@ dependencies = [ "num-traits", "percentage", "rand 0.8.5", + "rustc_version 0.4.1", "serde", "solana-compute-budget", - "solana-feature-set", - "solana-log-collector", "solana-measure", "solana-metrics", "solana-sdk", - "solana-timings", "solana-type-overrides", "solana-vote", "solana_rbpf", - "thiserror 1.0.69", -] - -[[package]] -name = "solana-pubkey" -version = "2.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2cc969903363ac8bb619009815083c86da1e78e136cf4e924fee2071042fe528" -dependencies = [ - "borsh 0.10.4", - "borsh 1.5.3", - "bs58 0.5.1", - "bytemuck", - "bytemuck_derive", - "curve25519-dalek 4.1.3", - "five8_const", - "getrandom 0.2.15", - "js-sys", - "num-traits", - "rand 0.8.5", - "serde", - "serde_derive", - "solana-atomic-u64", - "solana-decode-error", - "solana-define-syscall", - "solana-sanitize", - "solana-sha256-hasher", - "wasm-bindgen", + "thiserror", ] [[package]] name = "solana-pubsub-client" -version = "2.1.2" +version = "2.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0eb6f0746bea4f8b86270aae122d836db92d6dcbff8d4ead648fa754380a22a4" +checksum = "8370f3ac44f623356c0475fd024488dfa702bbfd1eab92edb199bb05a0e53051" dependencies = [ "crossbeam-channel", "futures-util", @@ -9957,7 +9552,7 @@ dependencies = [ "solana-account-decoder", "solana-rpc-client-api", "solana-sdk", - "thiserror 1.0.69", + "thiserror", "tokio", "tokio-stream", "tokio-tungstenite", @@ -9967,19 +9562,19 @@ dependencies = [ [[package]] name = "solana-quic-client" -version = "2.1.2" +version = "2.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64883ab151e924627e65591315c1ed16e6a14c40c42d2fad2367ca5ff499afb6" +checksum = "dfc7e8bf457ce4d9c4fd2ff12f467ee957fa309e2f10451f2f402357de30279f" dependencies = [ - "async-lock 3.4.0", + "async-mutex", "async-trait", "futures", "itertools 0.12.1", "lazy_static", "log", - "quinn 0.11.6", - "quinn-proto 0.11.9", - "rustls 0.23.18", + "quinn", + "quinn-proto", + "rustls 0.21.12", "solana-connection-cache", "solana-measure", "solana-metrics", @@ -9987,37 +9582,44 @@ dependencies = [ "solana-rpc-client-api", "solana-sdk", "solana-streamer", - "thiserror 1.0.69", + "thiserror", "tokio", ] [[package]] name = "solana-rayon-threadlimit" -version = "2.1.2" +version = "2.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9541d2fd9402ee8f8c310bb2c4ea7228f92971fb9d7009cf62d05617a0435eb3" +checksum = "cee0199cd96d8beb0cc1c9b82148f99467cf87bc25eb763b7ce680615a658467" dependencies = [ "lazy_static", "num_cpus", ] [[package]] -name = "solana-rent" -version = "2.1.2" +name = "solana-remote-wallet" +version = "2.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "904df8e9692d80f8f86cbccbe11b59c7b6a3d9b945d84a8a73115e36c9e2f2cd" +checksum = "68c0274fa9bb3eacf696d4f0da888f44a6a9d6e6ef00c518eaddb8c0fb96c193" dependencies = [ - "serde", - "serde_derive", - "solana-sdk-macro", - "solana-sysvar-id", + "console", + "dialoguer", + "log", + "num-derive 0.4.2", + "num-traits", + "parking_lot", + "qstring", + "semver 1.0.23", + "solana-sdk", + "thiserror", + "uriparse", ] [[package]] name = "solana-rpc-client" -version = "2.1.2" +version = "2.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "954970ebcae3ec33ec01ed329ca0ac3cb11242ec9f2b8ae96f30fa04c7db6822" +checksum = "86d5bb5a3dc5512f00559807bf23ca7ad7a677c00aa87fc6307460ed3731ba7e" dependencies = [ "async-trait", "base64 0.22.1", @@ -10031,10 +9633,10 @@ dependencies = [ "serde", "serde_derive", "serde_json", - "solana-account-decoder-client-types", + "solana-account-decoder", "solana-rpc-client-api", "solana-sdk", - "solana-transaction-status-client-types", + "solana-transaction-status", "solana-version", "solana-vote-program", "tokio", @@ -10042,9 +9644,9 @@ dependencies = [ [[package]] name = "solana-rpc-client-api" -version = "2.1.2" +version = "2.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26d646a25846f568fdd92b9422b09effbd4520bfd3efdeb2e338603e5ef5b413" +checksum = "f9a97cc3998953cc387015c1d7fad6aa8a320d3780e3ddc96f60d3544fea99b1" dependencies = [ "anyhow", "base64 0.22.1", @@ -10056,36 +9658,32 @@ dependencies = [ "serde", "serde_derive", "serde_json", - "solana-account-decoder-client-types", + "solana-account-decoder", "solana-inline-spl", "solana-sdk", - "solana-transaction-status-client-types", + "solana-transaction-status", "solana-version", - "thiserror 1.0.69", + "thiserror", ] [[package]] name = "solana-rpc-client-nonce-utils" -version = "2.1.2" +version = "2.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6dbd0182fb41999ebd736d5b6262df292c89ce64c900abe7effb3358dd5cc61" +checksum = "859792ccf41789d66ddace34a416c3fe6777c3325ee295ea3a89ad0c2c555b63" dependencies = [ + "clap 2.34.0", + "solana-clap-utils", "solana-rpc-client", "solana-sdk", - "thiserror 1.0.69", + "thiserror", ] -[[package]] -name = "solana-sanitize" -version = "2.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "080d4769742f6468906e59f61c3f72d30059ba027cb8028d6cfbb5e4ce02082b" - [[package]] name = "solana-sdk" -version = "2.1.2" +version = "2.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c599e773875c0f78e4868a9b75027d9e9abfb1561c84ddc2db5f9dc9e06ddda" +checksum = "02782e56b06086b6eefe98a807f084c81813cc441e0f1839981f1a5b01ad7a24" dependencies = [ "bincode", "bitflags 2.6.0", @@ -10095,9 +9693,11 @@ dependencies = [ "bytemuck_derive", "byteorder", "chrono", + "derivation-path", "digest 0.10.7", "ed25519-dalek 1.0.1", "ed25519-dalek-bip32", + "generic-array", "getrandom 0.1.16", "hmac 0.12.1", "itertools 0.12.1", @@ -10106,191 +9706,58 @@ dependencies = [ "libsecp256k1", "log", "memmap2", - "num-derive 0.4.2", - "num-traits", "num_enum 0.7.3", "pbkdf2 0.11.0", + "qstring", "rand 0.7.3", "rand 0.8.5", + "rustc_version 0.4.1", + "rustversion", "serde", "serde_bytes", "serde_derive", "serde_json", - "serde_with 3.11.0", + "serde_with 2.3.3", "sha2 0.10.8", - "sha3", + "sha3 0.10.8", "siphasher", - "solana-account", - "solana-bn254", - "solana-decode-error", - "solana-derivation-path", - "solana-feature-set", - "solana-inflation", - "solana-instruction", - "solana-native-token", - "solana-packet", - "solana-precompile-error", "solana-program", - "solana-program-memory", - "solana-pubkey", - "solana-sanitize", "solana-sdk-macro", - "solana-secp256k1-recover", - "solana-secp256r1-program", - "solana-serde-varint", - "solana-short-vec", - "solana-signature", - "solana-transaction-error", - "thiserror 1.0.69", + "thiserror", + "uriparse", "wasm-bindgen", ] [[package]] name = "solana-sdk-macro" -version = "2.1.2" +version = "2.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b446159601e9d157f21e50673fd5ad4d1d4ac599b3e5c715ab9dcd48e2334b2a" +checksum = "88859f5d5486fe029bc8937af5437fc027a2110bf9df34d5f8fbf46c7cf0497b" dependencies = [ "bs58 0.5.1", "proc-macro2 1.0.92", "quote 1.0.37", + "rustversion", "syn 2.0.89", ] -[[package]] -name = "solana-secp256k1-recover" -version = "2.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f47faa50f6c257b852165da9771b89df3611620db17e9547ae6c19261ed5ac60" -dependencies = [ - "borsh 1.5.3", - "libsecp256k1", - "solana-define-syscall", - "thiserror 1.0.69", -] - -[[package]] -name = "solana-secp256r1-program" -version = "2.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a21ecb017f075447c509907096989bacf688ed2abbd333094caeabe59db63cd2" -dependencies = [ - "bytemuck", - "openssl", - "solana-feature-set", - "solana-instruction", - "solana-precompile-error", - "solana-pubkey", -] - [[package]] name = "solana-security-txt" version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "468aa43b7edb1f9b7b7b686d5c3aeb6630dc1708e86e31343499dd5c4d775183" -[[package]] -name = "solana-serde-varint" -version = "2.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "954f961bbea4d6c727b9d345827463b932b4b15772ca8b4e3b1ee1d1dd71c503" -dependencies = [ - "serde", -] - -[[package]] -name = "solana-serialize-utils" -version = "2.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8cd562dab1702685450c786a22785141bd86b6bd26eb84594645da4802002c21" -dependencies = [ - "solana-instruction", - "solana-pubkey", - "solana-sanitize", -] - -[[package]] -name = "solana-sha256-hasher" -version = "2.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "215d1d82b57a61b973ac693a0e0a241ab3af87a133baf38879685b29bb16438d" -dependencies = [ - "sha2 0.10.8", - "solana-define-syscall", - "solana-hash", -] - -[[package]] -name = "solana-short-vec" -version = "2.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac2f7bd6150c630bb13e8822e58f18dcf0a487f5225e9d6b25e2a9333e81a067" -dependencies = [ - "serde", -] - -[[package]] -name = "solana-signature" -version = "2.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec90fbb85f263f88d62667abf3cfd9928c4f9b8b62b81b9b4e46987501bcf696" -dependencies = [ - "bs58 0.5.1", - "ed25519-dalek 1.0.1", - "generic-array", - "rand 0.8.5", - "serde", - "serde_derive", - "solana-sanitize", -] - -[[package]] -name = "solana-slot-hashes" -version = "2.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c2a5eea7c7d98232935c446926a1d436507e481a7fb7dff6f7c2d5dd588c569" -dependencies = [ - "serde", - "serde_derive", - "solana-hash", - "solana-sysvar-id", -] - -[[package]] -name = "solana-slot-history" -version = "2.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc4fedafbdd7587c2895dd1e6e129d9d32f4f86d41575bad8ae0f8b69afa472c" -dependencies = [ - "bv", - "serde", - "serde_derive", - "solana-sysvar-id", -] - -[[package]] -name = "solana-stable-layout" -version = "2.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e233a8a3df7a03190dc6d1612224157d016a0f1d59c690464da3efbb1cf4f394" -dependencies = [ - "solana-instruction", - "solana-pubkey", -] - [[package]] name = "solana-streamer" -version = "2.1.2" +version = "2.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7566a425600e4b9001350fdeea6c300f170012eb77d5d31cb38b7fc2c3afbec7" +checksum = "9abcd34b637b34371a0f1dadff431b80154b3169dd275641cf9d7cfd6b3e2176" dependencies = [ "async-channel", "bytes", "crossbeam-channel", "dashmap", - "futures", "futures-util", - "governor", "histogram", "indexmap 2.6.0", "itertools 0.12.1", @@ -10299,37 +9766,26 @@ dependencies = [ "nix", "pem 1.1.1", "percentage", - "quinn 0.11.6", - "quinn-proto 0.11.9", + "quinn", + "quinn-proto", "rand 0.8.5", - "rustls 0.23.18", + "rustls 0.21.12", "smallvec", - "socket2", "solana-measure", "solana-metrics", "solana-perf", "solana-sdk", "solana-transaction-metrics-tracker", - "thiserror 1.0.69", + "thiserror", "tokio", - "tokio-util", "x509-parser", ] -[[package]] -name = "solana-sysvar-id" -version = "2.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4aeae93327e408717b0e7812f11324d75297d48a330e3419eebd36ad7e14efe0" -dependencies = [ - "solana-pubkey", -] - [[package]] name = "solana-thin-client" -version = "2.1.2" +version = "2.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0541e0dd4e94ab27ab283ff388eeb8c8cf8a0bbe02b09384433140f1f944a4f5" +checksum = "48c618d5027222b62329f732fe5ea9b841c20293131844a7f98270f999aa5d0c" dependencies = [ "bincode", "log", @@ -10340,22 +9796,11 @@ dependencies = [ "solana-sdk", ] -[[package]] -name = "solana-timings" -version = "2.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "599a1e124baea46b2b290327395da6e8827fb0a61ac47ff3b7a699113e02c32b" -dependencies = [ - "eager", - "enum-iterator", - "solana-sdk", -] - [[package]] name = "solana-tpu-client" -version = "2.1.2" +version = "2.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b721ee14a533a8db53d018785b5f3f03263c126cb3960cadbc12001738bf9d28" +checksum = "11bc9151bd2a0bd8ca37ca54b32e8175cace98621b75c72e4ca1e9b7d69c52c3" dependencies = [ "async-trait", "bincode", @@ -10366,32 +9811,22 @@ dependencies = [ "rayon", "solana-connection-cache", "solana-measure", + "solana-metrics", "solana-pubsub-client", "solana-rpc-client", "solana-rpc-client-api", "solana-sdk", - "thiserror 1.0.69", + "thiserror", "tokio", ] -[[package]] -name = "solana-transaction-error" -version = "2.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe272d53725e15e66449fac0987f162d41cefc2f985d293e5ac05f98f82528da" -dependencies = [ - "serde", - "serde_derive", - "solana-instruction", - "solana-sanitize", -] - [[package]] name = "solana-transaction-metrics-tracker" -version = "2.1.2" +version = "2.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96846da9f272146ee992531e30fa5b1d3b339eee6b4f4ba78e933338bc42698a" +checksum = "38ef92c6a3bab7f359ef30356237c00638204a8dbd3ee6185ec131205fbbea9b" dependencies = [ + "Inflector", "base64 0.22.1", "bincode", "lazy_static", @@ -10399,14 +9834,13 @@ dependencies = [ "rand 0.8.5", "solana-perf", "solana-sdk", - "solana-short-vec", ] [[package]] name = "solana-transaction-status" -version = "2.1.2" +version = "2.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce3b3c45df2d152e54be63ff213535410512c12a61f9a0a807b40d8e4cb982fc" +checksum = "036c2189a6a5de419fc4ac887f5bee83bc6facea75cdcfe02773a8b83574f846" dependencies = [ "Inflector", "base64 0.22.1", @@ -10420,39 +9854,20 @@ dependencies = [ "serde_json", "solana-account-decoder", "solana-sdk", - "solana-transaction-status-client-types", "spl-associated-token-account", "spl-memo", "spl-token", "spl-token-2022", "spl-token-group-interface", "spl-token-metadata-interface", - "thiserror 1.0.69", -] - -[[package]] -name = "solana-transaction-status-client-types" -version = "2.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2be74165813eeb798c755509d2fcd64bb4afbdab1973dafd6a10384a4851ed4" -dependencies = [ - "base64 0.22.1", - "bincode", - "bs58 0.5.1", - "serde", - "serde_derive", - "serde_json", - "solana-account-decoder-client-types", - "solana-sdk", - "solana-signature", - "thiserror 1.0.69", + "thiserror", ] [[package]] name = "solana-type-overrides" -version = "2.1.2" +version = "2.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9041b231979c65651a46df4d5421791a9be73bdd4f99dbf873acf325d909f6d8" +checksum = "80bb3af963b890ef6610357d454a30b157cc1f94eaf9e5fc2b8851a824a42583" dependencies = [ "lazy_static", "rand 0.8.5", @@ -10460,72 +9875,73 @@ dependencies = [ [[package]] name = "solana-udp-client" -version = "2.1.2" +version = "2.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a824589762330e27948641afd210e71d48fd8499b725760a3d992d9a2f13fce5" +checksum = "c9609b5c5859437562228ced2aa7cf2a21c1c9cc06c0e27b0919875f327bff7a" dependencies = [ "async-trait", "solana-connection-cache", "solana-net-utils", "solana-sdk", "solana-streamer", - "thiserror 1.0.69", + "thiserror", "tokio", ] [[package]] name = "solana-version" -version = "2.1.2" +version = "2.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53ab2119a54857e457e238471779ab6e110457ef3fbf739931c809804dac1988" +checksum = "9f3ae5a33994b43d564bbe699f21a6b7bc18fd325a3579887c3f722276b91344" dependencies = [ + "log", + "rustc_version 0.4.1", "semver 1.0.23", "serde", "serde_derive", - "solana-feature-set", - "solana-sanitize", - "solana-serde-varint", + "solana-sdk", ] [[package]] name = "solana-vote" -version = "2.1.2" +version = "2.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ecc5a694a4f7dd2fcf6e49df3cf4bbaef09617c15a802d92ec1e5ad2820c816" +checksum = "51c6946fb194e001c3aef2ae8cf6385f4f819a09bbdcf2f87e418876697d47f5" dependencies = [ "itertools 0.12.1", "log", + "rustc_version 0.4.1", "serde", "serde_derive", "solana-sdk", - "thiserror 1.0.69", + "thiserror", ] [[package]] name = "solana-vote-program" -version = "2.1.2" +version = "2.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de615f1716c0903416ff0a80f593bade0135f12335ef86f59d6287b418fae40d" +checksum = "c767b55ffbe8fdbdcbf20b910fd13e697d4ef4ab9ebdec2899f7ea3beb4820be" dependencies = [ "bincode", "log", "num-derive 0.4.2", "num-traits", + "rustc_version 0.4.1", "serde", "serde_derive", - "solana-feature-set", "solana-metrics", "solana-program", "solana-program-runtime", "solana-sdk", - "thiserror 1.0.69", + "thiserror", ] [[package]] name = "solana-zk-token-sdk" -version = "2.1.2" +version = "2.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d209c7b3dd10e70370ddeb7356385ce774bfa21428a5030e767288e0ea4cca1c" +checksum = "413a83694f06f0e299064ab294c5537aa00c5d8625d4bba9daf6037696ebfe1f" dependencies = [ "aes-gcm-siv", "base64 0.22.1", @@ -10533,41 +9949,41 @@ dependencies = [ "bytemuck", "bytemuck_derive", "byteorder", - "curve25519-dalek 4.1.3", + "curve25519-dalek 3.2.1", "itertools 0.12.1", "lazy_static", "merlin", "num-derive 0.4.2", "num-traits", - "rand 0.8.5", + "rand 0.7.3", "serde", "serde_derive", "serde_json", - "sha3", + "sha3 0.9.1", "solana-curve25519", - "solana-derivation-path", "solana-program", "solana-sdk", "subtle", - "thiserror 1.0.69", + "thiserror", "zeroize", ] [[package]] name = "solana_rbpf" -version = "0.8.5" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c1941b5ef0c3ce8f2ac5dd984d0fb1a97423c4ff2a02eec81e3913f02e2ac2b" +checksum = "ff08afd63f70a1ba712fb0017be41e93b017f7e874785b54bb5ec9aa8949781d" dependencies = [ "byteorder", - "combine 3.8.1", + "combine", + "goblin", "hash32", "libc", "log", "rand 0.8.5", "rustc-demangle", "scroll", - "thiserror 1.0.69", + "thiserror", "winapi", ] @@ -10583,15 +9999,6 @@ version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" -[[package]] -name = "spinning_top" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d96d2d1d716fb500937168cc09353ffdc7a012be8475ac7308e1bdf0e3923300" -dependencies = [ - "lock_api", -] - [[package]] name = "spki" version = "0.6.0" @@ -10625,7 +10032,7 @@ dependencies = [ "solana-program", "spl-token", "spl-token-2022", - "thiserror 1.0.69", + "thiserror", ] [[package]] @@ -10660,7 +10067,7 @@ dependencies = [ "quote 1.0.37", "sha2 0.10.8", "syn 2.0.89", - "thiserror 1.0.69", + "thiserror", ] [[package]] @@ -10696,7 +10103,7 @@ dependencies = [ "num-traits", "solana-program", "spl-program-error-derive", - "thiserror 1.0.69", + "thiserror", ] [[package]] @@ -10737,7 +10144,7 @@ dependencies = [ "num-traits", "num_enum 0.7.3", "solana-program", - "thiserror 1.0.69", + "thiserror", ] [[package]] @@ -10761,7 +10168,7 @@ dependencies = [ "spl-token-metadata-interface", "spl-transfer-hook-interface", "spl-type-length-value", - "thiserror 1.0.69", + "thiserror", ] [[package]] @@ -10859,10 +10266,10 @@ dependencies = [ "router-api", "serde", "serde_json", - "sha3", + "sha3 0.10.8", "stellar-strkey 0.0.10", "stellar-xdr", - "thiserror 1.0.69", + "thiserror", ] [[package]] @@ -10871,7 +10278,7 @@ version = "21.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c735c8e456fa7c37f72dd2a6abc022a111b3bf9b0520d50eef091eb1336ad370" dependencies = [ - "clap", + "clap 4.5.21", "hex", "http 1.1.0", "itertools 0.10.5", @@ -10885,7 +10292,7 @@ dependencies = [ "stellar-xdr", "termcolor", "termcolor_output", - "thiserror 1.0.69", + "thiserror", "tokio", "tracing", ] @@ -10898,7 +10305,7 @@ checksum = "12d2bf45e114117ea91d820a846fd1afbe3ba7d717988fee094ce8227a3bf8bd" dependencies = [ "base32", "crate-git-revision", - "thiserror 1.0.69", + "thiserror", ] [[package]] @@ -10909,7 +10316,7 @@ checksum = "9ecda1f64c0a1427563b0b35aa771b66c6ce508f02b18effcae1d0ab1261d014" dependencies = [ "crate-git-revision", "data-encoding", - "thiserror 1.0.69", + "thiserror", ] [[package]] @@ -10928,6 +10335,12 @@ dependencies = [ "stellar-strkey 0.0.8", ] +[[package]] +name = "strsim" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" + [[package]] name = "strsim" version = "0.10.0" @@ -11049,9 +10462,9 @@ dependencies = [ "router-api", "serde", "serde_json", - "sha3", + "sha3 0.10.8", "sui-types 1.0.0", - "thiserror 1.0.69", + "thiserror", ] [[package]] @@ -11127,7 +10540,7 @@ dependencies = [ "serde", "sui-rest-api", "sui-types 0.1.0", - "thiserror 1.0.69", + "thiserror", "tokio", ] @@ -11148,7 +10561,7 @@ name = "sui-protocol-config" version = "0.1.0" source = "git+https://github.com/mystenlabs/sui?tag=mainnet-v1.26.2#f531168c745260b60a4ec4906c9f2b22240d872d" dependencies = [ - "clap", + "clap 4.5.21", "insta", "move-vm-config", "schemars", @@ -11185,7 +10598,7 @@ dependencies = [ "serde_with 2.3.3", "sui-types 0.1.0", "tap", - "thiserror 1.0.69", + "thiserror", ] [[package]] @@ -11251,7 +10664,7 @@ dependencies = [ "sui-macros", "sui-protocol-config", "tap", - "thiserror 1.0.69", + "thiserror", "tonic 0.11.0", "tracing", "typed-store-error", @@ -11265,7 +10678,7 @@ dependencies = [ "hex", "rand 0.8.5", "serde", - "thiserror 1.0.69", + "thiserror", ] [[package]] @@ -11577,7 +10990,7 @@ dependencies = [ "tendermint 0.33.0", "tendermint-config", "tendermint-proto 0.33.0", - "thiserror 1.0.69", + "thiserror", "time", "tokio", "tracing", @@ -11628,39 +11041,34 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3369f5ac52d5eb6ab48c6b4ffdc8efbcad6b89c765749064ba298f2c68a16a76" [[package]] -name = "thiserror" -version = "1.0.69" +name = "textwrap" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" dependencies = [ - "thiserror-impl 1.0.69", + "unicode-width 0.1.14", ] [[package]] -name = "thiserror" -version = "2.0.3" +name = "textwrap" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c006c85c7651b3cf2ada4584faa36773bd07bac24acfb39f3c431b36d7e667aa" -dependencies = [ - "thiserror-impl 2.0.3", -] +checksum = "23d434d3f8967a09480fb04132ebe0a3e088c173e6d0ee7897abbdf4eab0f8b9" [[package]] -name = "thiserror-impl" +name = "thiserror" version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" dependencies = [ - "proc-macro2 1.0.92", - "quote 1.0.37", - "syn 2.0.89", + "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "2.0.3" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f077553d607adc1caf65430528a576c757a71ed73944b66ebb58ef2bbd243568" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2 1.0.92", "quote 1.0.37", @@ -11717,6 +11125,25 @@ dependencies = [ "time-core", ] +[[package]] +name = "tiny-bip39" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffc59cb9dfc85bb312c3a78fd6aa8a8582e310b0fa885d5bb877f6dcc601839d" +dependencies = [ + "anyhow", + "hmac 0.8.1", + "once_cell", + "pbkdf2 0.4.0", + "rand 0.7.3", + "rustc-hash", + "sha2 0.9.9", + "thiserror", + "unicode-normalization", + "wasm-bindgen", + "zeroize", +] + [[package]] name = "tiny-keccak" version = "2.0.2" @@ -12229,7 +11656,7 @@ dependencies = [ "rand 0.8.5", "rustls 0.21.12", "sha1", - "thiserror 1.0.69", + "thiserror", "url", "utf-8", "webpki-roots 0.24.0", @@ -12261,7 +11688,7 @@ version = "0.4.0" source = "git+https://github.com/mystenlabs/sui?tag=mainnet-v1.26.2#f531168c745260b60a4ec4906c9f2b22240d872d" dependencies = [ "serde", - "thiserror 1.0.69", + "thiserror", ] [[package]] @@ -12276,6 +11703,27 @@ version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" +[[package]] +name = "udigest" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81cd61fa9fb78569e9fe34acf0048fd8cb9ebdbacc47af740745487287043ff0" +dependencies = [ + "digest 0.10.7", + "udigest-derive", +] + +[[package]] +name = "udigest-derive" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "603329303137e0d59238ee4d6b9c085eada8e2a9d20666f3abd9dadf8f8543f4" +dependencies = [ + "proc-macro2 1.0.92", + "quote 1.0.37", + "syn 2.0.89", +] + [[package]] name = "uint" version = "0.9.5" @@ -12494,6 +11942,12 @@ version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" +[[package]] +name = "vec_map" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" + [[package]] name = "version_check" version = "0.9.5" @@ -12538,8 +11992,8 @@ dependencies = [ "serde_json", "service-registry", "service-registry-api", - "sha3", - "thiserror 1.0.69", + "sha3 0.10.8", + "thiserror", ] [[package]] @@ -12689,15 +12143,6 @@ dependencies = [ "untrusted 0.9.0", ] -[[package]] -name = "webpki-root-certs" -version = "0.26.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cd5da49bdf1f30054cfe0b8ce2958b8fbeb67c4d82c8967a598af481bef255c" -dependencies = [ - "rustls-pki-types", -] - [[package]] name = "webpki-roots" version = "0.21.1" @@ -13005,7 +12450,7 @@ dependencies = [ "pharos", "rustc_version 0.4.1", "send_wrapper 0.6.0", - "thiserror 1.0.69", + "thiserror", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", @@ -13040,7 +12485,7 @@ dependencies = [ "nom", "oid-registry", "rusticata-macros", - "thiserror 1.0.69", + "thiserror", "time", ] @@ -13178,19 +12623,20 @@ dependencies = [ [[package]] name = "zstd" -version = "0.13.2" +version = "0.11.2+zstd.1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcf2b778a664581e31e389454a7072dab1647606d44f7feea22cd5abb9c9f3f9" +checksum = "20cc960326ece64f010d2d2107537f26dc589a6573a316bd5b1dba685fa5fde4" dependencies = [ "zstd-safe", ] [[package]] name = "zstd-safe" -version = "7.2.1" +version = "5.0.2+zstd.1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54a3ab4db68cea366acc5c897c7b4d4d1b8994a9cd6e6f841f8964566a419059" +checksum = "1d2a5585e04f9eea4b2a3d1eca508c4dee9592a89ef6f450c11719da0726f4db" dependencies = [ + "libc", "zstd-sys", ] diff --git a/Cargo.toml b/Cargo.toml index 77edf82cf..eff626fc6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -63,7 +63,8 @@ service-registry = { version = "^1.1.0", path = "contracts/service-registry" } service-registry-api = { version = "^1.0.0", path = "packages/service-registry-api" } sha3 = { version = "0.10.8", default-features = false, features = [] } signature-verifier-api = { version = "^1.0.0", path = "packages/signature-verifier-api" } -axelar-rkyv-encoding = { git = "https://github.com/eigerco/solana-axelar.git", rev = "813ddc2b2b35d31411e22f9835d7a95d32943af1" } +axelar-solana-encoding = { git = "https://github.com/eigerco/solana-axelar.git", rev = "24cb744" } +axelar-solana-gateway = { git = "https://github.com/eigerco/solana-axelar.git", rev = "24cb744" } stellar = { version = "^1.0.0", path = "external-gateways/stellar" } stellar-xdr = { version = "21.2.0" } strum = { version = "0.25", default-features = false, features = ["derive"] } diff --git a/contracts/multisig-prover/Cargo.toml b/contracts/multisig-prover/Cargo.toml index eb11c742a..fb4e2b756 100644 --- a/contracts/multisig-prover/Cargo.toml +++ b/contracts/multisig-prover/Cargo.toml @@ -6,8 +6,8 @@ edition = { workspace = true } description = "Multisig prover contract" exclude = [ - "contract.wasm", - "hash.txt" + "contract.wasm", + "hash.txt", ] # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html @@ -63,7 +63,7 @@ stellar-xdr = { workspace = true } sui-gateway = { workspace = true } thiserror = { workspace = true } voting-verifier = { workspace = true, features = ["library"] } -axelar-rkyv-encoding = { workspace = true } +axelar-solana-encoding = { workspace = true } [dev-dependencies] anyhow = "1.0" diff --git a/contracts/multisig-prover/src/encoding/mod.rs b/contracts/multisig-prover/src/encoding/mod.rs index 71e0a3df2..b20306e7a 100644 --- a/contracts/multisig-prover/src/encoding/mod.rs +++ b/contracts/multisig-prover/src/encoding/mod.rs @@ -1,6 +1,6 @@ mod abi; mod bcs; -pub mod rkyv; +mod solana; mod stellar_xdr; use axelar_wasm_std::hash::Hash; @@ -19,7 +19,7 @@ use crate::payload::Payload; pub enum Encoder { Abi, Bcs, - Rkyv, + Solana, StellarXdr, } @@ -36,7 +36,7 @@ impl Encoder { Encoder::StellarXdr => { stellar_xdr::payload_digest(domain_separator, verifier_set, payload) } - Encoder::Rkyv => rkyv::payload_digest(domain_separator, verifier_set, payload), + Encoder::Solana => solana::payload_digest(domain_separator, verifier_set, payload), } } @@ -51,12 +51,9 @@ impl Encoder { Encoder::Abi => abi::encode_execute_data(domain_separator, verifier_set, sigs, payload), Encoder::Bcs => bcs::encode_execute_data(domain_separator, verifier_set, sigs, payload), Encoder::StellarXdr => stellar_xdr::encode_execute_data(verifier_set, sigs, payload), - Encoder::Rkyv => rkyv::encode_execute_data( - sigs, - self.digest(domain_separator, verifier_set, payload)?, - verifier_set, - payload, - ), + Encoder::Solana => { + solana::encode_execute_data(sigs, verifier_set, payload, domain_separator) + } } } } diff --git a/contracts/multisig-prover/src/encoding/rkyv/mod.rs b/contracts/multisig-prover/src/encoding/rkyv/mod.rs deleted file mode 100644 index 62dbc0c64..000000000 --- a/contracts/multisig-prover/src/encoding/rkyv/mod.rs +++ /dev/null @@ -1,184 +0,0 @@ -use axelar_rkyv_encoding::types::{ED25519_PUBKEY_LEN, SECP256K1_COMPRESSED_PUBKEY_LEN}; -use axelar_wasm_std::hash::Hash; -use cosmwasm_std::HexBinary; -use itertools::Itertools; -use k256::ecdsa::RecoveryId; -use multisig::{ - key::{PublicKey, Recoverable, Signature}, - msg::SignerWithSig, - verifier_set::VerifierSet, -}; -use router_api::Message; -use std::{array::TryFromSliceError, collections::BTreeMap}; - -use crate::{error::ContractError, payload::Payload}; - -type Result = core::result::Result; - -pub fn encode_execute_data( - signers_with_sigs: Vec, - payload_hash: [u8; 32], - verifier_set: &VerifierSet, - payload: &Payload, -) -> error_stack::Result { - // this array contains `all` the signers, and optoinally the signatures if they exist for the given signer - let mut signers_with_signatures = Vec::with_capacity(verifier_set.signers.len()); - for signer in verifier_set.signers.values() { - let pubkey = to_pub_key(&signer.pub_key)?; - let signature_found = signers_with_sigs - .iter() - .find(|x| x.signer.pub_key == signer.pub_key) - .map(|x| to_weighted_signature(x, &payload_hash)) - .transpose()? - .unwrap_or_else(|| { - let weight = axelar_rkyv_encoding::types::U128::from(signer.weight.u128()); - ( - pubkey, - axelar_rkyv_encoding::types::WeightedSigner::new(None, weight), - ) - }); - - signers_with_signatures.push(signature_found); - } - let created_at = verifier_set.created_at; - let threshold = axelar_rkyv_encoding::types::U128::from(verifier_set.threshold.u128()); - let bytes = axelar_rkyv_encoding::encode::<1024>( - // Todo reason about this "1024" magic number. - created_at, - threshold, - signers_with_signatures, - axelar_rkyv_encoding::types::Payload::try_from(payload)?, - ) - .map_err(|e| ContractError::RkyvEncodingError(e.to_string()))?; - Ok(HexBinary::from(bytes)) -} - -pub fn payload_digest( - domain_separator: &Hash, - verifier_set: &VerifierSet, - payload: &Payload, -) -> error_stack::Result { - Ok(axelar_rkyv_encoding::hash_payload( - &domain_separator, - &to_verifier_set(verifier_set)?, - &axelar_rkyv_encoding::types::Payload::try_from(payload)?, - axelar_rkyv_encoding::hasher::generic::Keccak256Hasher::default(), - )) -} - -fn to_verifier_set(vs: &VerifierSet) -> Result { - let mut signers: BTreeMap< - axelar_rkyv_encoding::types::PublicKey, - axelar_rkyv_encoding::types::U128, - > = BTreeMap::new(); - - vs.signers - .iter() - .try_for_each(|(_, signer)| -> Result<()> { - let enc_pubkey = to_pub_key(&signer.pub_key)?; - let enc_weight = axelar_rkyv_encoding::types::U128::from(signer.weight.u128()); - - signers.insert(enc_pubkey, enc_weight); - Ok(()) - })?; - - Ok(axelar_rkyv_encoding::types::VerifierSet::new( - vs.created_at, - signers, - axelar_rkyv_encoding::types::U128::from(vs.threshold.u128()), - )) -} - -fn to_pub_key(pk: &PublicKey) -> Result { - Ok(match pk { - PublicKey::Ecdsa(hb) => axelar_rkyv_encoding::types::PublicKey::new_ecdsa( - hb.to_array::()?, - ), - PublicKey::Ed25519(hb) => axelar_rkyv_encoding::types::PublicKey::new_ed25519( - hb.to_array::()?, - ), - }) -} - -impl TryFrom<&Payload> for axelar_rkyv_encoding::types::Payload { - type Error = ContractError; - fn try_from(value: &Payload) -> std::result::Result { - Ok(match value { - Payload::Messages(msgs) => axelar_rkyv_encoding::types::Payload::new_messages( - msgs.iter().map(to_msg).collect_vec(), - ), - Payload::VerifierSet(vs) => { - axelar_rkyv_encoding::types::Payload::new_verifier_set(to_verifier_set(&vs)?) - } - }) - } -} - -fn to_msg(msg: &Message) -> axelar_rkyv_encoding::types::Message { - let enc_cc_id = axelar_rkyv_encoding::types::CrossChainId::new( - msg.cc_id.source_chain.to_string(), - msg.cc_id.message_id.to_string(), - ); - - axelar_rkyv_encoding::types::Message::new( - enc_cc_id, - msg.source_address.to_string(), - msg.destination_chain.to_string(), - msg.destination_address.to_string(), - msg.payload_hash, - ) -} - -fn to_weighted_signature( - sig: &SignerWithSig, - payload_hash: &[u8; 32], -) -> Result<( - axelar_rkyv_encoding::types::PublicKey, - axelar_rkyv_encoding::types::WeightedSigner, -)> { - let enc_pub_key = to_pub_key(&sig.signer.pub_key)?; - let enc_signature = to_signature(&sig.signature, &sig.signer.pub_key, payload_hash)?; - let enc_weight = axelar_rkyv_encoding::types::U128::from(sig.signer.weight.u128()); - - Ok(( - enc_pub_key, - axelar_rkyv_encoding::types::WeightedSigner::new(Some(enc_signature), enc_weight), - )) -} - -fn to_signature( - sig: &Signature, - pub_key: &PublicKey, - payload_hash: &[u8; 32], -) -> Result { - let recovery_transform = |recovery_byte: RecoveryId| -> u8 { recovery_byte.to_byte() }; - match sig { - Signature::Ecdsa(nonrec) => { - let recov = nonrec - .to_recoverable(payload_hash, pub_key, recovery_transform) - .map_err(|e| ContractError::RkyvEncodingError(e.to_string()))?; - Ok(axelar_rkyv_encoding::types::Signature::EcdsaRecoverable( - recoverable_ecdsa_to_array(&recov)?, - )) - } - Signature::EcdsaRecoverable(r) => { - Ok(axelar_rkyv_encoding::types::Signature::EcdsaRecoverable( - recoverable_ecdsa_to_array(r)?, - )) - } - Signature::Ed25519(ed) => { - let data = ed - .as_ref() - .try_into() - .map_err(|e: TryFromSliceError| ContractError::RkyvEncodingError(e.to_string()))?; - - Ok(axelar_rkyv_encoding::types::Signature::new_ed25519(data)) - } - } -} - -fn recoverable_ecdsa_to_array(rec: &Recoverable) -> Result<[u8; 65]> { - rec.as_ref() - .try_into() - .map_err(|e: TryFromSliceError| ContractError::RkyvEncodingError(e.to_string())) -} diff --git a/contracts/multisig-prover/src/encoding/solana.rs b/contracts/multisig-prover/src/encoding/solana.rs new file mode 100644 index 000000000..cd61dcd03 --- /dev/null +++ b/contracts/multisig-prover/src/encoding/solana.rs @@ -0,0 +1,188 @@ +use axelar_wasm_std::hash::Hash; +use cosmwasm_std::HexBinary; +use itertools::Itertools; +use k256::ecdsa::RecoveryId; +use multisig::{ + key::{PublicKey, Recoverable, Signature}, + msg::SignerWithSig, + verifier_set::VerifierSet, +}; +use router_api::Message; +use std::{array::TryFromSliceError, collections::BTreeMap}; + +use crate::{error::ContractError, payload::Payload}; + +pub fn encode_execute_data( + signers_with_sigs: Vec, + verifier_set: &VerifierSet, + payload: &Payload, + domain_separator: &Hash, +) -> error_stack::Result { + // construct the base types + let verifier_set = to_verifier_set(&verifier_set)?; + let payload = to_payload(payload)?; + let payload_hash = + axelar_solana_encoding::hash_payload(domain_separator, &verifier_set, payload.clone()) + .map_err(|err| ContractError::SolanaEncoding { + reason: err.to_string(), + })?; + + // encode the signers & their signatures + let mut signers_with_signatures = BTreeMap::< + axelar_solana_encoding::types::pubkey::PublicKey, + axelar_solana_encoding::types::pubkey::Signature, + >::new(); + for signer in signers_with_sigs { + let pubkey = to_pub_key(&signer.signer.pub_key)?; + let signature = to_signature(&signer.signature, &signer.signer.pub_key, &payload_hash)?; + signers_with_signatures.insert(pubkey, signature); + } + + // encode all the data + let bytes = axelar_solana_encoding::encode( + &verifier_set, + &signers_with_signatures, + *domain_separator, + payload, + ) + .map_err(|e| ContractError::SolanaEncoding { + reason: e.to_string(), + })?; + + Ok(HexBinary::from(bytes)) +} + +pub fn payload_digest( + domain_separator: &Hash, + verifier_set: &VerifierSet, + payload: &Payload, +) -> error_stack::Result { + let verifier_set = to_verifier_set(verifier_set)?; + let payload = to_payload(payload)?; + let hash = axelar_solana_encoding::hash_payload(domain_separator, &verifier_set, payload) + .map_err(|err| ContractError::SolanaEncoding { + reason: err.to_string(), + })?; + Ok(hash) +} + +/// Transform from Axelar VerifierSet to axelar_solana_encoding VerifierSet +fn to_verifier_set( + vs: &VerifierSet, +) -> error_stack::Result { + let mut signers = BTreeMap::new(); + + for (_cosmwasm_adr, signer) in vs.signers.iter() { + let pub_key = to_pub_key(&signer.pub_key)?; + let weight = signer.weight.u128(); + signers.insert(pub_key, weight); + } + + let verifier_set = axelar_solana_encoding::types::verifier_set::VerifierSet { + nonce: vs.created_at, + signers, + quorum: vs.threshold.u128(), + }; + Ok(verifier_set) +} + +fn to_pub_key( + pk: &PublicKey, +) -> error_stack::Result { + use axelar_solana_encoding::types::pubkey::ED25519_PUBKEY_LEN; + use axelar_solana_encoding::types::pubkey::SECP256K1_COMPRESSED_PUBKEY_LEN; + Ok(match pk { + PublicKey::Ecdsa(hb) => axelar_solana_encoding::types::pubkey::PublicKey::Secp256k1( + hb.to_array::() + .map_err(|err| ContractError::SolanaEncoding { + reason: err.to_string(), + })?, + ), + PublicKey::Ed25519(hb) => axelar_solana_encoding::types::pubkey::PublicKey::Ed25519( + hb.to_array::() + .map_err(|err| ContractError::SolanaEncoding { + reason: err.to_string(), + })?, + ), + }) +} + +fn to_payload( + payload: &Payload, +) -> error_stack::Result { + let payload = match payload { + Payload::Messages(msgs) => { + let messages = msgs.into_iter().map(|msg| to_msg(msg)).collect_vec(); + let messages = axelar_solana_encoding::types::messages::Messages(messages); + axelar_solana_encoding::types::payload::Payload::Messages(messages) + } + Payload::VerifierSet(vs) => { + let verifier_set = to_verifier_set(&vs)?; + axelar_solana_encoding::types::payload::Payload::NewVerifierSet(verifier_set) + } + }; + Ok(payload) +} + +fn to_msg(msg: &Message) -> axelar_solana_encoding::types::messages::Message { + let cc_id = axelar_solana_encoding::types::messages::CrossChainId { + chain: msg.cc_id.source_chain.to_string(), + id: msg.cc_id.message_id.to_string(), + }; + + axelar_solana_encoding::types::messages::Message { + cc_id, + source_address: msg.source_address.to_string(), + destination_chain: msg.destination_chain.to_string(), + destination_address: msg.destination_address.to_string(), + payload_hash: msg.payload_hash, + } +} + +fn to_signature( + sig: &Signature, + pub_key: &PublicKey, + payload_hash: &[u8; 32], +) -> error_stack::Result { + let recovery_transform = |recovery_byte: RecoveryId| -> u8 { recovery_byte.to_byte() }; + match sig { + Signature::Ecdsa(nonrec) => { + let recov = nonrec + .to_recoverable(payload_hash, pub_key, recovery_transform) + .map_err(|e| ContractError::SolanaEncoding { + reason: e.to_string(), + })?; + Ok( + axelar_solana_encoding::types::pubkey::Signature::EcdsaRecoverable( + recoverable_ecdsa_to_array(&recov)?, + ), + ) + } + Signature::EcdsaRecoverable(r) => Ok( + axelar_solana_encoding::types::pubkey::Signature::EcdsaRecoverable( + recoverable_ecdsa_to_array(r)?, + ), + ), + Signature::Ed25519(ed) => { + let data = ed.as_ref().try_into().map_err(|e: TryFromSliceError| { + ContractError::SolanaEncoding { + reason: e.to_string(), + } + })?; + + Ok(axelar_solana_encoding::types::pubkey::Signature::Ed25519( + data, + )) + } + } +} + +fn recoverable_ecdsa_to_array(rec: &Recoverable) -> error_stack::Result<[u8; 65], ContractError> { + let res = + rec.as_ref() + .try_into() + .map_err(|e: TryFromSliceError| ContractError::SolanaEncoding { + reason: e.to_string(), + })?; + Ok(res) +} diff --git a/contracts/multisig-prover/src/error.rs b/contracts/multisig-prover/src/error.rs index dd5f9a0d2..12e03c849 100644 --- a/contracts/multisig-prover/src/error.rs +++ b/contracts/multisig-prover/src/error.rs @@ -39,8 +39,9 @@ pub enum ContractError { #[error(transparent)] BcsError(#[from] bcs::Error), - #[error("Rkyv encoding/decoding failure: [0]")] - RkyvEncodingError(String), + // NOTE: using string "reason" because the `axelar_solana_encoding::error::Error` does not implement PartialEq + #[error("Solana encoding/decoding error: [0]")] + SolanaEncoding { reason: String }, #[error("verifier set has not changed sufficiently since last update")] VerifierSetUnchanged, From 1efaae299fac9dc728c15653805659b785bde0d3 Mon Sep 17 00:00:00 2001 From: Roberts Pumpurs Date: Wed, 27 Nov 2024 21:40:07 +0200 Subject: [PATCH 085/109] refactor: use latest axelar-solana deps --- Cargo.lock | 28 +++++++++++++------ Cargo.toml | 5 ++-- ampd/Cargo.toml | 21 +++++++------- .../handlers/solana_verify_verifier_set.rs | 2 -- 4 files changed, 33 insertions(+), 23 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 181f2a6e0..35a75aae4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -273,6 +273,7 @@ dependencies = [ "evm-gateway", "faux", "futures", + "gateway-event-stack", "generic-array", "hex", "humantime-serde", @@ -934,7 +935,7 @@ dependencies = [ [[package]] name = "axelar-message-primitives" version = "0.1.0" -source = "git+https://github.com/eigerco/solana-axelar.git?rev=24cb744#24cb7448710527dc395fb569d150f582d9dfd32a" +source = "git+https://github.com/eigerco/solana-axelar.git?rev=0be172e#0be172ec2d0b24e236d4131e8db46d93c98fe5f9" dependencies = [ "alloy-primitives", "alloy-sol-types", @@ -950,7 +951,7 @@ dependencies = [ [[package]] name = "axelar-solana-encoding" version = "0.1.0" -source = "git+https://github.com/eigerco/solana-axelar.git?rev=24cb744#24cb7448710527dc395fb569d150f582d9dfd32a" +source = "git+https://github.com/eigerco/solana-axelar.git?rev=0be172e#0be172ec2d0b24e236d4131e8db46d93c98fe5f9" dependencies = [ "arrayref", "borsh 1.5.3", @@ -967,11 +968,10 @@ dependencies = [ [[package]] name = "axelar-solana-gateway" version = "0.1.0" -source = "git+https://github.com/eigerco/solana-axelar.git?rev=24cb744#24cb7448710527dc395fb569d150f582d9dfd32a" +source = "git+https://github.com/eigerco/solana-axelar.git?rev=0be172e#0be172ec2d0b24e236d4131e8db46d93c98fe5f9" dependencies = [ "axelar-message-primitives", "axelar-solana-encoding", - "base64 0.21.7", "bincode", "bitvec 1.0.1", "borsh 1.5.3", @@ -983,7 +983,6 @@ dependencies = [ "num-derive 0.4.2", "num-traits", "program-utils", - "rkyv", "solana-program", "thiserror", ] @@ -3955,6 +3954,17 @@ dependencies = [ "thiserror", ] +[[package]] +name = "gateway-event-stack" +version = "0.1.0" +source = "git+https://github.com/eigerco/solana-axelar.git?rev=0be172e#0be172ec2d0b24e236d4131e8db46d93c98fe5f9" +dependencies = [ + "axelar-solana-gateway", + "base64 0.21.7", + "solana-sdk", + "tracing", +] + [[package]] name = "generic-array" version = "0.14.7" @@ -6532,7 +6542,7 @@ version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" dependencies = [ - "proc-macro-crate 3.2.0", + "proc-macro-crate 1.1.3", "proc-macro2 1.0.92", "quote 1.0.37", "syn 2.0.89", @@ -7364,7 +7374,7 @@ dependencies = [ [[package]] name = "program-utils" version = "0.1.0" -source = "git+https://github.com/eigerco/solana-axelar.git?rev=24cb744#24cb7448710527dc395fb569d150f582d9dfd32a" +source = "git+https://github.com/eigerco/solana-axelar.git?rev=0be172e#0be172ec2d0b24e236d4131e8db46d93c98fe5f9" dependencies = [ "rkyv", "solana-program", @@ -7511,7 +7521,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81bddcdb20abf9501610992b6759a4c888aef7d1a7247ef75e2404275ac24af1" dependencies = [ "anyhow", - "itertools 0.12.1", + "itertools 0.11.0", "proc-macro2 1.0.92", "quote 1.0.37", "syn 2.0.89", @@ -12210,7 +12220,7 @@ version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.48.0", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index eff626fc6..9ae08ff83 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -63,8 +63,9 @@ service-registry = { version = "^1.1.0", path = "contracts/service-registry" } service-registry-api = { version = "^1.0.0", path = "packages/service-registry-api" } sha3 = { version = "0.10.8", default-features = false, features = [] } signature-verifier-api = { version = "^1.0.0", path = "packages/signature-verifier-api" } -axelar-solana-encoding = { git = "https://github.com/eigerco/solana-axelar.git", rev = "24cb744" } -axelar-solana-gateway = { git = "https://github.com/eigerco/solana-axelar.git", rev = "24cb744" } +axelar-solana-encoding = { git = "https://github.com/eigerco/solana-axelar.git", rev = "0be172e" } +gateway-event-stack = { git = "https://github.com/eigerco/solana-axelar.git", rev = "0be172e" } +axelar-solana-gateway = { git = "https://github.com/eigerco/solana-axelar.git", rev = "0be172e" } stellar = { version = "^1.0.0", path = "external-gateways/stellar" } stellar-xdr = { version = "21.2.0" } strum = { version = "0.25", default-features = false, features = ["derive"] } diff --git a/ampd/Cargo.toml b/ampd/Cargo.toml index 146d5d2d1..ff0b1e30e 100644 --- a/ampd/Cargo.toml +++ b/ampd/Cargo.toml @@ -50,14 +50,15 @@ serde = { version = "1.0.147", features = ["derive"] } serde_json = { workspace = true } serde_with = "3.2.0" service-registry = { workspace = true } -solana-account-decoder = "2.0.1" -solana-client = "2.0.1" -solana-program = "2.0.1" -solana-sdk = "2.0.1" -solana-rpc-client-api = "2.0.1" -solana-version = "2.0.1" -solana-zk-token-sdk = "2.0.1" -solana-transaction-status = "2.0.1" +solana-account-decoder = "=2.0.16" +solana-client = "=2.0.16" +solana-program = "=2.0.16" +solana-sdk = "=2.0.16" +solana-rpc-client-api = "=2.0.16" +solana-version = "=2.0.16" +solana-zk-token-sdk = "=2.0.16" +solana-transaction-status = "=2.0.16" +gateway-event-stack = { workspace = true } service-registry-api = { workspace = true } sha3 = { workspace = true } stellar = { workspace = true } @@ -85,7 +86,7 @@ url = "2.3.1" valuable = { version = "0.1.0", features = ["derive"] } valuable-serde = { version = "0.1.0", features = ["std"] } voting-verifier = { workspace = true } -gmp-gateway = { git = "https://github.com/eigerco/solana-axelar.git", rev = "813ddc2b2b35d31411e22f9835d7a95d32943af1" } +axelar-solana-gateway = { workspace = true } lru = "0.12.3" [dev-dependencies] @@ -97,7 +98,7 @@ multisig = { workspace = true, features = ["test", "library"] } rand = { workspace = true } random-string = "1.0.0" tokio = { workspace = true, features = ["test-util"] } -axelar-rkyv-encoding = { workspace = true } +axelar-solana-encoding = { workspace = true } [build-dependencies] tonic-build = "0.8.3" diff --git a/ampd/src/handlers/solana_verify_verifier_set.rs b/ampd/src/handlers/solana_verify_verifier_set.rs index eca0c7ebd..ae138a5e1 100644 --- a/ampd/src/handlers/solana_verify_verifier_set.rs +++ b/ampd/src/handlers/solana_verify_verifier_set.rs @@ -23,8 +23,6 @@ use crate::handlers::errors::Error; use crate::solana::verifier_set_verifier::{parse_gateway_event, verify_verifier_set}; use crate::types::TMAddress; -use gmp_gateway::events::{ArchivedGatewayEvent, ArchivedRotateSignersEvent}; - type Result = error_stack::Result; #[derive(Deserialize, Debug)] From 6321e1f7230da70e63fb2550a3ca318c670194c0 Mon Sep 17 00:00:00 2001 From: Roberts Pumpurs Date: Wed, 27 Nov 2024 21:46:57 +0200 Subject: [PATCH 086/109] chore: moving file --- ampd/src/handlers/solana_verify_msg.rs | 2 +- ampd/src/lib.rs | 2 +- ampd/src/solana/mod.rs | 3 +-- ampd/src/solana/{rpc.rs => rpc_client.rs} | 0 4 files changed, 3 insertions(+), 4 deletions(-) rename ampd/src/solana/{rpc.rs => rpc_client.rs} (100%) diff --git a/ampd/src/handlers/solana_verify_msg.rs b/ampd/src/handlers/solana_verify_msg.rs index e75ae541e..3c865f6f4 100644 --- a/ampd/src/handlers/solana_verify_msg.rs +++ b/ampd/src/handlers/solana_verify_msg.rs @@ -21,7 +21,7 @@ use voting_verifier::msg::ExecuteMsg; use crate::event_processor::EventHandler; use crate::handlers::errors::Error; use crate::solana::msg_verifier::verify_message; -use crate::solana::rpc::RpcCacheWrapper; +use crate::solana::rpc_client::RpcCacheWrapper; use crate::types::TMAddress; type Result = error_stack::Result; diff --git a/ampd/src/lib.rs b/ampd/src/lib.rs index 07c6f9f9b..950b97fd2 100644 --- a/ampd/src/lib.rs +++ b/ampd/src/lib.rs @@ -15,7 +15,7 @@ use evm::json_rpc::EthereumClient; use multiversx_sdk::gateway::GatewayProxy; use queue::queued_broadcaster::QueuedBroadcaster; use router_api::ChainName; -use solana::rpc::RpcCacheWrapper; +use solana::rpc_client::RpcCacheWrapper; use solana_client::nonblocking::rpc_client::RpcClient; use solana_sdk::commitment_config::CommitmentConfig; use thiserror::Error; diff --git a/ampd/src/solana/mod.rs b/ampd/src/solana/mod.rs index b7995d2d9..bff17e730 100644 --- a/ampd/src/solana/mod.rs +++ b/ampd/src/solana/mod.rs @@ -1,6 +1,5 @@ pub mod msg_verifier; -pub mod rpc; -pub mod verifier_set_verifier; +pub mod rpc_client; #[cfg(test)] pub mod test_utils; diff --git a/ampd/src/solana/rpc.rs b/ampd/src/solana/rpc_client.rs similarity index 100% rename from ampd/src/solana/rpc.rs rename to ampd/src/solana/rpc_client.rs From 5650517f1324063a1913d17e588a5532b6182da7 Mon Sep 17 00:00:00 2001 From: Roberts Pumpurs Date: Thu, 28 Nov 2024 12:38:27 +0200 Subject: [PATCH 087/109] refactor: updated most of `solana_verify_msg` handler --- ampd/src/handlers/solana_verify_msg.rs | 192 +++++++++--------- ampd/src/solana/mod.rs | 5 +- ampd/src/solana/msg_verifier.rs | 1 - ampd/src/solana/rpc_client.rs | 98 --------- ampd/src/solana/test_utils.rs | 133 ------------ ampd/src/solana/tests/solana_tx.json | 36 ---- .../src/msg_id/base_58_solana_event_index.rs | 14 ++ 7 files changed, 116 insertions(+), 363 deletions(-) delete mode 100644 ampd/src/solana/rpc_client.rs delete mode 100644 ampd/src/solana/test_utils.rs delete mode 100644 ampd/src/solana/tests/solana_tx.json diff --git a/ampd/src/handlers/solana_verify_msg.rs b/ampd/src/handlers/solana_verify_msg.rs index 3c865f6f4..ee8a096ad 100644 --- a/ampd/src/handlers/solana_verify_msg.rs +++ b/ampd/src/handlers/solana_verify_msg.rs @@ -1,72 +1,75 @@ +use std::collections::{HashMap, HashSet}; +use std::convert::TryInto; + use async_trait::async_trait; +use axelar_wasm_std::msg_id::{Base58SolanaTxSignatureAndEventIndex, HexTxHashAndEventIndex}; +use axelar_wasm_std::voting::{PollId, Vote}; use cosmrs::cosmwasm::MsgExecuteContract; -use cosmrs::{tx::Msg, Any}; +use cosmrs::tx::Msg; +use cosmrs::Any; use error_stack::ResultExt; -use futures::stream::FuturesOrdered; -use futures::StreamExt; +use ethers_core::types::{TransactionReceipt, U64}; +use events::Error::EventTypeMismatch; +use events_derive::try_from; +use futures::future::join_all; +use futures::FutureExt; use router_api::ChainName; use serde::Deserialize; -use solana_sdk::signature::Signature; -use solana_transaction_status::UiTransactionEncoding; -use std::convert::TryInto; -use std::str::FromStr; -use tracing::{error, info}; - -use axelar_wasm_std::voting::{PollId, Vote}; -use events::{Error::EventTypeMismatch, Event}; -use events_derive::try_from; +use solana_client::nonblocking::rpc_client::RpcClient; +use solana_sdk::pubkey::Pubkey; use tokio::sync::watch::Receiver; +use tracing::{info, info_span}; +use valuable::Valuable; use voting_verifier::msg::ExecuteMsg; use crate::event_processor::EventHandler; use crate::handlers::errors::Error; -use crate::solana::msg_verifier::verify_message; -use crate::solana::rpc_client::RpcCacheWrapper; -use crate::types::TMAddress; +use crate::handlers::errors::Error::DeserializeEvent; +use crate::types::{Hash, TMAddress}; type Result = error_stack::Result; -#[derive(Deserialize, Debug, PartialEq)] +#[derive(Deserialize, Debug)] pub struct Message { - pub tx_id: String, - pub event_index: u64, + pub message_id: Base58SolanaTxSignatureAndEventIndex, pub destination_address: String, - pub destination_chain: router_api::ChainName, - pub source_address: String, - #[serde(with = "axelar_wasm_std::hex")] - pub payload_hash: [u8; 32], + pub destination_chain: ChainName, + pub source_address: Pubkey, + pub payload_hash: Hash, } #[derive(Deserialize, Debug)] #[try_from("wasm-messages_poll_started")] struct PollStartedEvent { - #[serde(rename = "_contract_address")] - contract_address: TMAddress, poll_id: PollId, - source_gateway_address: String, source_chain: ChainName, + source_gateway_address: Pubkey, + confirmation_height: u64, + expires_at: u64, messages: Vec, participants: Vec, - expires_at: u64, } pub struct Handler { verifier: TMAddress, - voting_verifier: TMAddress, - rpc_client: RpcCacheWrapper, + voting_verifier_contract: TMAddress, + chain: ChainName, + rpc_client: RpcClient, latest_block_height: Receiver, } impl Handler { pub fn new( verifier: TMAddress, - voting_verifier: TMAddress, - rpc_client: RpcCacheWrapper, + voting_verifier_contract: TMAddress, + chain: ChainName, + rpc_client: RpcClient, latest_block_height: Receiver, ) -> Self { Self { verifier, - voting_verifier, + voting_verifier_contract, + chain, rpc_client, latest_block_height, } @@ -75,78 +78,39 @@ impl Handler { fn vote_msg(&self, poll_id: PollId, votes: Vec) -> MsgExecuteContract { MsgExecuteContract { sender: self.verifier.as_ref().clone(), - contract: self.voting_verifier.as_ref().clone(), + contract: self.voting_verifier_contract.as_ref().clone(), msg: serde_json::to_vec(&ExecuteMsg::Vote { poll_id, votes }) - .expect("vote msg should serialize"), // This should serialize as inputs are controlled. + .expect("vote msg should serialize"), funds: vec![], } } - - async fn process_message( - &self, - msg: &Message, - source_gateway_address: &String, - ) -> Result { - let sol_tx_signature = match Signature::from_str(&msg.tx_id) { - Ok(sig) => sig, - Err(err) => { - error!( - tx_id = msg.tx_id.to_string(), - err = err.to_string(), - "Cannot decode solana tx signature" - ); - return Ok(Vote::FailedOnChain); - } - }; - - let sol_tx = match self - .rpc_client - .get_transaction(&sol_tx_signature, UiTransactionEncoding::Json) - .await - { - Ok(tx) => tx, - Err(err) => match err.kind() { - // When tx is not found a null is returned. - solana_client::client_error::ClientErrorKind::SerdeJson(_) => { - error!( - tx_id = msg.tx_id, - err = err.to_string(), - "Cannot find solana tx signature" - ); - return Ok(Vote::NotFound); - } - _ => { - error!(tx_id = msg.tx_id, "RPC error while fetching solana tx"); - return Err(Error::TxReceipts)?; - } - }, - }; - Ok(verify_message(source_gateway_address, sol_tx, msg)) - } } #[async_trait] impl EventHandler for Handler { type Err = Error; - async fn handle(&self, event: &Event) -> Result> { + async fn handle(&self, event: &events::Event) -> Result> { + if !event.is_from_contract(self.voting_verifier_contract.as_ref()) { + return Ok(vec![]); + } + let PollStartedEvent { - contract_address, poll_id, source_chain, source_gateway_address, messages, - participants, expires_at, - .. + confirmation_height, + participants, } = match event.try_into() as error_stack::Result<_, _> { Err(report) if matches!(report.current_context(), EventTypeMismatch(_)) => { - return Ok(vec![]); + return Ok(vec![]) } - event => event.change_context(Error::DeserializeEvent)?, + event => event.change_context(DeserializeEvent)?, }; - if self.voting_verifier != contract_address { + if self.chain != source_chain { return Ok(vec![]); } @@ -160,16 +124,62 @@ impl EventHandler for Handler { return Ok(vec![]); } - let mut votes: Vec = Vec::new(); - - let mut ord_fut: FuturesOrdered<_> = messages + let tx_calls = messages .iter() - .map(|msg| self.process_message(msg, &source_gateway_address)) - .collect(); - - while let Some(vote_result) = ord_fut.next().await { - votes.push(vote_result?) // If there is a failure, its due to a network error, so we abort this handler operation and all messages need to be processed again. - } + .map(|msg| solana_sdk::signature::Signature::from(msg.message_id.raw_signature)) + .map(|sig| { + self.rpc_client + .get_transaction( + &sig, + solana_transaction_status::UiTransactionEncoding::Base58, + ) + .map(|tx_data_result| { + tx_data_result + .map(|tx_data| tx_data.transaction.meta) + .ok() + .flatten() + .map(|tx_data| (sig, tx_data)) + }) + }); + + let finalized_tx_receipts = futures::future::join_all(tx_calls) + .await + .into_iter() + .filter_map(|tx_data| tx_data) + .collect::>(); + + let poll_id_str: String = poll_id.into(); + let source_chain_str: String = source_chain.into(); + let votes = info_span!( + "verify messages from Solana", + poll_id = poll_id_str, + source_chain = source_chain_str, + message_ids = messages + .iter() + .map(|msg| msg.message_id.to_string()) + .collect::>() + .as_value(), + ) + .in_scope(|| { + info!("ready to verify messages in poll",); + + let votes: Vec<_> = messages + .iter() + .map(|msg| { + finalized_tx_receipts + .get(&msg.message_id.raw_signature.into()) + .map_or(Vote::NotFound, |tx_receipt| { + verify_message(&source_gateway_address, tx_receipt, msg) + }) + }) + .collect(); + info!( + votes = votes.as_value(), + "ready to vote for messages in poll" + ); + + votes + }); Ok(vec![self .vote_msg(poll_id, votes) diff --git a/ampd/src/solana/mod.rs b/ampd/src/solana/mod.rs index bff17e730..3ca3cd636 100644 --- a/ampd/src/solana/mod.rs +++ b/ampd/src/solana/mod.rs @@ -1,5 +1,2 @@ pub mod msg_verifier; -pub mod rpc_client; - -#[cfg(test)] -pub mod test_utils; +pub mod verifier_set_verifier; diff --git a/ampd/src/solana/msg_verifier.rs b/ampd/src/solana/msg_verifier.rs index b4437b4bb..d884ad9b5 100644 --- a/ampd/src/solana/msg_verifier.rs +++ b/ampd/src/solana/msg_verifier.rs @@ -1,5 +1,4 @@ use axelar_wasm_std::voting::Vote; -use gmp_gateway::events::{ArchivedCallContract, ArchivedGatewayEvent, GatewayEvent}; use solana_sdk::pubkey::Pubkey; use solana_transaction_status::{ option_serializer::OptionSerializer, EncodedConfirmedTransactionWithStatusMeta, diff --git a/ampd/src/solana/rpc_client.rs b/ampd/src/solana/rpc_client.rs deleted file mode 100644 index 0195f67b4..000000000 --- a/ampd/src/solana/rpc_client.rs +++ /dev/null @@ -1,98 +0,0 @@ -use std::{num::NonZeroUsize, sync::Arc}; - -use lru::LruCache; -use solana_client::nonblocking::rpc_client::RpcClient; -use solana_rpc_client_api::client_error::Result as ClientResult; -use solana_sdk::signature::Signature; -use solana_transaction_status::{EncodedConfirmedTransactionWithStatusMeta, UiTransactionEncoding}; -use tokio::sync::RwLock; - -type SyncTxLruCache = RwLock>>; - -pub struct RpcCacheWrapper { - rpc_client: RpcClient, - tx_cache: SyncTxLruCache, -} - -impl RpcCacheWrapper { - pub fn new(rpc_client: RpcClient, max_cache_entries: NonZeroUsize) -> Self { - Self { - rpc_client, - tx_cache: RwLock::new(LruCache::new(max_cache_entries)), - } - } - - pub async fn get_transaction( - &self, - signature: &Signature, - encoding: UiTransactionEncoding, - ) -> ClientResult> { - let mut tx_cache = self.tx_cache.write().await; - - if let Some(cached_tx) = tx_cache.get(signature) { - return Ok(cached_tx.to_owned()); - } - - let tx = Arc::new(self.rpc_client.get_transaction(signature, encoding).await?); - - tx_cache.put(*signature, tx.clone()); - - Ok(tx) - } - - #[cfg(test)] - pub async fn entries(&self) -> usize { - self.tx_cache.read().await.len() - } -} - -#[cfg(test)] -mod tests { - - use std::num::NonZeroUsize; - - use crate::solana::test_utils::rpc_client_with_recorder; - - use super::*; - use solana_client::rpc_request::RpcRequest; - use tokio::test as async_test; - - #[async_test] - async fn rpc_cache_wrapper_works() { - let (rpc_client, rpc_recorder) = rpc_client_with_recorder(); - let wrapped_rpc_client = RpcCacheWrapper::new(rpc_client, NonZeroUsize::new(2).unwrap()); - - let tx_signature = Signature::new_unique(); - - wrapped_rpc_client - .get_transaction(&tx_signature, UiTransactionEncoding::Json) - .await - .unwrap(); - wrapped_rpc_client - .get_transaction(&tx_signature, UiTransactionEncoding::Json) - .await - .unwrap(); - - assert_eq!( - Some(&1), - rpc_recorder.read().await.get(&RpcRequest::GetTransaction) - ); - } - - #[async_test] - async fn rpc_cache_wrapper_discards_old_entries() { - let (rpc_client, _) = rpc_client_with_recorder(); - let wrapped_rpc_client = RpcCacheWrapper::new(rpc_client, NonZeroUsize::new(2).unwrap()); - - for _ in 0..10 { - let tx_signature = Signature::new_unique(); - - wrapped_rpc_client - .get_transaction(&tx_signature, UiTransactionEncoding::Json) - .await - .unwrap(); - } - - assert_eq!(2, wrapped_rpc_client.entries().await); - } -} diff --git a/ampd/src/solana/test_utils.rs b/ampd/src/solana/test_utils.rs deleted file mode 100644 index 740311f93..000000000 --- a/ampd/src/solana/test_utils.rs +++ /dev/null @@ -1,133 +0,0 @@ -use std::{collections::HashMap, sync::Arc}; - -use serde_json::{json, Value}; -use solana_client::{ - nonblocking::rpc_client::RpcClient, - rpc_client::RpcClientConfig, - rpc_request::RpcRequest, - rpc_response::{Response, RpcResponseContext, RpcVersionInfo}, - rpc_sender::{RpcSender, RpcTransportStats}, -}; -use solana_sdk::{message::MessageHeader, transaction::TransactionVersion}; -use solana_transaction_status::{ - option_serializer::OptionSerializer, EncodedConfirmedTransactionWithStatusMeta, - EncodedTransaction, EncodedTransactionWithStatusMeta, UiCompiledInstruction, UiMessage, - UiRawMessage, UiTransaction, UiTransactionStatusMeta, -}; -use solana_version::Version; - -use solana_rpc_client_api::client_error::Result; -use tokio::sync::RwLock; -use tonic::async_trait; - -type Registry = Arc>>; - -pub struct RpcRecorder { - record: Arc>>, -} - -impl RpcRecorder { - pub fn new() -> (Self, Registry) { - let registry = Arc::new(RwLock::new(HashMap::new())); - let self_v = Self { - record: registry.clone(), - }; - (self_v, registry) - } -} - -/// Reference: https://docs.rs/solana-rpc-client/1.18.3/src/solana_rpc_client/mock_sender.rs.html#97-488 -#[async_trait] -impl RpcSender for RpcRecorder { - fn get_transport_stats(&self) -> RpcTransportStats { - RpcTransportStats::default() - } - - async fn send( - &self, - request: RpcRequest, - params: serde_json::Value, - ) -> Result { - let mut acquired_record = self.record.write().await; - - acquired_record - .entry(request) - .and_modify(|count| *count = count.checked_add(1).unwrap()) - .or_insert(1); - - let method = &request.build_request_json(42, params.clone())["method"]; - - let val = match method.as_str().unwrap() { - "getAccountInfo" => serde_json::to_value(Response { - context: RpcResponseContext { slot: 1, api_version: None }, - value: Value::Null, - })?, - "getTransaction" => serde_json::to_value(EncodedConfirmedTransactionWithStatusMeta { - slot: 2, - transaction: EncodedTransactionWithStatusMeta { - version: Some(TransactionVersion::LEGACY), - transaction: EncodedTransaction::Json( - UiTransaction { - signatures: vec!["3AsdoALgZFuq2oUVWrDYhg2pNeaLJKPLf8hU2mQ6U8qJxeJ6hsrPVpMn9ma39DtfYCrDQSvngWRP8NnTpEhezJpE".to_string()], - message: UiMessage::Raw( - UiRawMessage { - header: MessageHeader { - num_required_signatures: 1, - num_readonly_signed_accounts: 0, - num_readonly_unsigned_accounts: 1, - }, - account_keys: vec![ - "C6eBmAXKg6JhJWkajGa5YRGUfG4YKXwbxF5Ufv7PtExZ".to_string(), - "2Gd5eoR5J4BV89uXbtunpbNhjmw3wa1NbRHxTHzDzZLX".to_string(), - "11111111111111111111111111111111".to_string(), - ], - recent_blockhash: "D37n3BSG71oUWcWjbZ37jZP7UfsxG2QMKeuALJ1PYvM6".to_string(), - instructions: vec![UiCompiledInstruction { - program_id_index: 2, - accounts: vec![0, 1], - data: "3Bxs49DitAvXtoDR".to_string(), - stack_height: None, - }], - address_table_lookups: None, - }) - }), - meta: Some(UiTransactionStatusMeta { - err: None, - status: Ok(()), - fee: 0, - pre_balances: vec![499999999999999950, 50, 1], - post_balances: vec![499999999999999950, 50, 1], - inner_instructions: OptionSerializer::None, - log_messages: OptionSerializer::None, - pre_token_balances: OptionSerializer::None, - post_token_balances: OptionSerializer::None, - rewards: OptionSerializer::None, - loaded_addresses: OptionSerializer::Skip, - return_data: OptionSerializer::Skip, - compute_units_consumed: OptionSerializer::Skip, - }), - }, - block_time: Some(1628633791), - })?, - "getVersion" => { - let version = Version::default(); - json!(RpcVersionInfo { - solana_core: version.to_string(), - feature_set: Some(version.feature_set), - }) - } - _ => Value::Null, - }; - Ok(val) - } - - fn url(&self) -> String { - "MockSender".to_string() - } -} - -pub fn rpc_client_with_recorder() -> (RpcClient, Registry) { - let (rpc_recorder, registry) = RpcRecorder::new(); - let rpc_client = RpcClient::new_sender(rpc_recorder, RpcClientConfig::default()); - (rpc_client, registry) -} diff --git a/ampd/src/solana/tests/solana_tx.json b/ampd/src/solana/tests/solana_tx.json deleted file mode 100644 index fec5d8a55..000000000 --- a/ampd/src/solana/tests/solana_tx.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "meta": { - "fee": 5000, - "postBalances": [], - "postTokenBalances": [], - "preBalances": [], - "status": { - "Ok": null - }, - "logMessages": [ - "BAD_LOG_MESSAGE", - "Program data: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAGFicgMAAAAweDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=", - "Program data: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABldGgAAAAAAzB4MAAAAAADrP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=" - ] - }, - "slot": 430, - "transaction": { - "message": { - "accountKeys": [ - "sol_gateway_addr" - ], - "header": { - "numReadonlySignedAccounts": 0, - "numReadonlyUnsignedAccounts": 1, - "numRequiredSignatures": 1 - }, - "instructions": [], - "recentBlockhash": "mfcyqEXB3DnHXki6KjjmZck6YjmZLvpAByy2fj4nh6B" - }, - "signatures": [ - "3GLo4z4siudHxW1BMHBbkTKy7kfbssNFaxLR5hTjhEXCUzp2Pi2VVwybc1s96pEKjRre7CcKKeLhni79zWTNUseP" - ] - }, - "blockTime": null, - "id": 1 -} \ No newline at end of file diff --git a/packages/axelar-wasm-std/src/msg_id/base_58_solana_event_index.rs b/packages/axelar-wasm-std/src/msg_id/base_58_solana_event_index.rs index d90c2e066..f4e06e882 100644 --- a/packages/axelar-wasm-std/src/msg_id/base_58_solana_event_index.rs +++ b/packages/axelar-wasm-std/src/msg_id/base_58_solana_event_index.rs @@ -5,18 +5,32 @@ use std::str::FromStr; use error_stack::{Report, ResultExt}; use lazy_static::lazy_static; use regex::Regex; +use serde::{Deserialize, Deserializer}; use super::Error; use crate::nonempty; type RawSignature = [u8; 64]; +#[derive(Debug, Clone)] pub struct Base58SolanaTxSignatureAndEventIndex { // Base58 decoded bytes of the Solana signature. pub raw_signature: RawSignature, pub event_index: u64, } +impl<'de> Deserialize<'de> for Base58SolanaTxSignatureAndEventIndex { + fn deserialize(deserializer: D) -> Result + where + D: Deserializer<'de>, + { + // Deserialize the input as a string + let s = String::deserialize(deserializer)?; + // Use the FromStr implementation to parse the string into the struct + Base58SolanaTxSignatureAndEventIndex::from_str(&s).map_err(serde::de::Error::custom) + } +} + impl Base58SolanaTxSignatureAndEventIndex { pub fn signature_as_base58(&self) -> nonempty::String { bs58::encode(self.raw_signature) From 40def11879cc1f72f998f3453ae19facd481e4c8 Mon Sep 17 00:00:00 2001 From: Roberts Pumpurs Date: Thu, 28 Nov 2024 14:38:00 +0200 Subject: [PATCH 088/109] feat: gateway call contract event validation --- ampd/src/handlers/solana_verify_msg.rs | 49 ++++---- ampd/src/solana/msg_verifier.rs | 165 +++++++++---------------- 2 files changed, 81 insertions(+), 133 deletions(-) diff --git a/ampd/src/handlers/solana_verify_msg.rs b/ampd/src/handlers/solana_verify_msg.rs index ee8a096ad..ac9a3e54a 100644 --- a/ampd/src/handlers/solana_verify_msg.rs +++ b/ampd/src/handlers/solana_verify_msg.rs @@ -17,6 +17,7 @@ use router_api::ChainName; use serde::Deserialize; use solana_client::nonblocking::rpc_client::RpcClient; use solana_sdk::pubkey::Pubkey; +use solana_transaction_status::UiTransactionStatusMeta; use tokio::sync::watch::Receiver; use tracing::{info, info_span}; use valuable::Valuable; @@ -25,6 +26,7 @@ use voting_verifier::msg::ExecuteMsg; use crate::event_processor::EventHandler; use crate::handlers::errors::Error; use crate::handlers::errors::Error::DeserializeEvent; +use crate::solana::msg_verifier::verify_message; use crate::types::{Hash, TMAddress}; type Result = error_stack::Result; @@ -44,7 +46,6 @@ struct PollStartedEvent { poll_id: PollId, source_chain: ChainName, source_gateway_address: Pubkey, - confirmation_height: u64, expires_at: u64, messages: Vec, participants: Vec, @@ -53,7 +54,6 @@ struct PollStartedEvent { pub struct Handler { verifier: TMAddress, voting_verifier_contract: TMAddress, - chain: ChainName, rpc_client: RpcClient, latest_block_height: Receiver, } @@ -62,14 +62,12 @@ impl Handler { pub fn new( verifier: TMAddress, voting_verifier_contract: TMAddress, - chain: ChainName, rpc_client: RpcClient, latest_block_height: Receiver, ) -> Self { Self { verifier, voting_verifier_contract, - chain, rpc_client, latest_block_height, } @@ -84,6 +82,26 @@ impl Handler { funds: vec![], } } + + async fn fetch_message( + &self, + msg: &Message, + ) -> Option<(solana_sdk::signature::Signature, UiTransactionStatusMeta)> { + let signature = solana_sdk::signature::Signature::from(msg.message_id.raw_signature); + self.rpc_client + .get_transaction( + &signature, + solana_transaction_status::UiTransactionEncoding::Base58, + ) + .map(|tx_data_result| { + tx_data_result + .map(|tx_data| tx_data.transaction.meta) + .ok() + .flatten() + .map(|tx_data| (signature, tx_data)) + }) + .await + } } #[async_trait] @@ -101,7 +119,6 @@ impl EventHandler for Handler { source_gateway_address, messages, expires_at, - confirmation_height, participants, } = match event.try_into() as error_stack::Result<_, _> { Err(report) if matches!(report.current_context(), EventTypeMismatch(_)) => { @@ -110,10 +127,6 @@ impl EventHandler for Handler { event => event.change_context(DeserializeEvent)?, }; - if self.chain != source_chain { - return Ok(vec![]); - } - if !participants.contains(&self.verifier) { return Ok(vec![]); } @@ -124,23 +137,7 @@ impl EventHandler for Handler { return Ok(vec![]); } - let tx_calls = messages - .iter() - .map(|msg| solana_sdk::signature::Signature::from(msg.message_id.raw_signature)) - .map(|sig| { - self.rpc_client - .get_transaction( - &sig, - solana_transaction_status::UiTransactionEncoding::Base58, - ) - .map(|tx_data_result| { - tx_data_result - .map(|tx_data| tx_data.transaction.meta) - .ok() - .flatten() - .map(|tx_data| (sig, tx_data)) - }) - }); + let tx_calls = messages.iter().map(|msg| self.fetch_message(msg)); let finalized_tx_receipts = futures::future::join_all(tx_calls) .await diff --git a/ampd/src/solana/msg_verifier.rs b/ampd/src/solana/msg_verifier.rs index d884ad9b5..af0b5a760 100644 --- a/ampd/src/solana/msg_verifier.rs +++ b/ampd/src/solana/msg_verifier.rs @@ -1,137 +1,88 @@ +use axelar_solana_gateway::processor::GatewayEvent; use axelar_wasm_std::voting::Vote; +use gateway_event_stack::MatchContext; use solana_sdk::pubkey::Pubkey; use solana_transaction_status::{ option_serializer::OptionSerializer, EncodedConfirmedTransactionWithStatusMeta, }; +use solana_transaction_status::{UiTransactionEncoding, UiTransactionStatusMeta}; use std::str::FromStr; use std::sync::Arc; use tracing::error; use crate::handlers::solana_verify_msg::Message; -impl PartialEq<&Message> for &ArchivedGatewayEvent { - fn eq(&self, msg: &&Message) -> bool { - match self { - ArchivedGatewayEvent::CallContract(ArchivedCallContract { - sender, - destination_chain, - destination_address, - payload: _, - payload_hash, - }) => { - let Ok(msg_sender) = Pubkey::from_str(msg.source_address.as_str()) else { - return false; - }; - - sender == &msg_sender.to_bytes() - && msg.destination_chain == destination_chain.as_str() - && msg.destination_address == destination_address.as_str() - && *payload_hash == msg.payload_hash - } - _ => false, - } - } -} - pub fn verify_message( - source_gateway_address: &String, - tx: Arc, + source_gateway_address: &Pubkey, + tx: &UiTransactionStatusMeta, message: &Message, ) -> Vote { - let ui_tx = match &tx.transaction.transaction { - solana_transaction_status::EncodedTransaction::Json(tx) => tx, - _ => { - error!("failed to parse solana tx."); - return Vote::FailedOnChain; + let tx_was_successful = tx.err.is_none(); + let desired_event_idx: usize = match message.message_id.event_index.try_into() { + Ok(idx) => idx, + Err(_) => { + error!("Invalid event index in message ID"); + return Vote::NotFound; } }; - // NOTE: first signature is always tx_id - let tx_id = match ui_tx.signatures.first() { - Some(tx) => tx, - None => { - error!("failed to parse solana tx signatures."); - return Vote::FailedOnChain; - } - }; - - let tx_meta = match &tx.transaction.meta { - Some(meta) => meta, - None => { - error!( - tx_id = tx_id, - "Theres no available tx metadata to parse log messages from." - ); - return Vote::FailedOnChain; - } - }; + let context = MatchContext::new(&source_gateway_address.to_string()); - let log_messages = match &tx_meta.log_messages { - OptionSerializer::Some(log) => log, + let logs = match tx.log_messages.as_ref() { + OptionSerializer::Some(logs) => logs, _ => { - error!(tx_id = tx_id, "Theres no log messages in tx."); - return Vote::FailedOnChain; + error!("Logs not attached to the transaction object"); + return Vote::NotFound; } }; - let ui_parsed_msg = match &ui_tx.message { - solana_transaction_status::UiMessage::Raw(msg) => msg, - _ => { - error!( - tx_id = tx_id, - "Could not gather tx message for checking account keys." - ); - return Vote::FailedOnChain; - } - }; - - match find_first_log_message_match( - tx_id, - log_messages, - message, - &ui_parsed_msg.account_keys, - source_gateway_address, - ) { - Some(_) => Vote::SucceededOnChain, - None => Vote::FailedOnChain, - } -} + let event_stack = gateway_event_stack::build_program_event_stack( + &context, + logs, + gateway_event_stack::parse_gateway_logs, + ); + + use gateway_event_stack::ProgramInvocationState::*; + + for invocation_state in event_stack { + let (vote, gateway_events) = match invocation_state { + Succeeded(events) => ( + { + // if tx was successful and ix invocation was successful, + // then the final outcome (if event can be found) will be of `Vote::SucceededOnChain` + if tx_was_successful { + Vote::SucceededOnChain + } else { + // if tx was NOT successful then we don't care if the ix invocatoin succeeded, + // therefore the final outcome (if event can be found) will be of `Vote::FailedOnChain` + Vote::FailedOnChain + } + }, + events, + ), + Failed(events) | InProgress(events) => (Vote::FailedOnChain, events), + }; -// This function iterates over all Solana tx log messages -// trying to find at least one log msg that matches the -// Axelar provided one. For doing that, its necessary to: -// -// 1. Deserialize the tx log message, which contains the gateway event. -// 2. The parsed gateway event from 1 matches the Axelar message. -// -// This function is only intended for use inside this crate -// and its arguments are basically parts of the Solana tx plus -// the Axelar counterpart for verification purposes. -// -// When the first matching log message is found, its index will be returned. -fn find_first_log_message_match( - tx_id: &str, - log_messages: &[String], - message: &Message, - account_keys: &[String], - source_gateway_address: &String, -) -> Option { - for (i, log) in log_messages.iter().enumerate() { - match GatewayEvent::parse_log(log) { - Some(parsed_ev) => { - let arch_gw_event = parsed_ev.parse(); - let verified = arch_gw_event == message - && *tx_id == message.tx_id - && account_keys.contains(source_gateway_address); - - if verified { - return Some(i); + if let Some((_, event)) = gateway_events + .into_iter() + .find(|(idx, _)| *idx == desired_event_idx) + { + if let GatewayEvent::CallContract(event) = event { + let events_are_equal = event.sender_key == message.source_address + && event.payload_hash == message.payload_hash.0 + && message.destination_chain == event.destination_chain + && event.destination_contract_address == message.destination_address; + + if events_are_equal { + // proxy the desired vote status of whether the ix succeeded + return vote; } + return Vote::NotFound; } - None => continue, } } - None + + Vote::NotFound } #[cfg(test)] From 8bf5033d3f756a63cedaecca0b0caa85c312d6de Mon Sep 17 00:00:00 2001 From: Roberts Pumpurs Date: Thu, 28 Nov 2024 16:41:01 +0200 Subject: [PATCH 089/109] feat: initial verifier set check impl --- ampd/src/handlers/solana_verify_msg.rs | 16 +- .../handlers/solana_verify_verifier_set.rs | 171 +++++++----------- ampd/src/solana/mod.rs | 35 ++++ ampd/src/solana/msg_verifier.rs | 48 +++-- ampd/src/solana/verifier_set_verifier.rs | 86 +++------ 5 files changed, 166 insertions(+), 190 deletions(-) diff --git a/ampd/src/handlers/solana_verify_msg.rs b/ampd/src/handlers/solana_verify_msg.rs index ac9a3e54a..577196a8d 100644 --- a/ampd/src/handlers/solana_verify_msg.rs +++ b/ampd/src/handlers/solana_verify_msg.rs @@ -26,6 +26,7 @@ use voting_verifier::msg::ExecuteMsg; use crate::event_processor::EventHandler; use crate::handlers::errors::Error; use crate::handlers::errors::Error::DeserializeEvent; +use crate::solana::fetch_message; use crate::solana::msg_verifier::verify_message; use crate::types::{Hash, TMAddress}; @@ -36,6 +37,7 @@ pub struct Message { pub message_id: Base58SolanaTxSignatureAndEventIndex, pub destination_address: String, pub destination_chain: ChainName, + #[serde(deserialize_with = "crate::solana::deserialize_pubkey")] pub source_address: Pubkey, pub payload_hash: Hash, } @@ -88,19 +90,7 @@ impl Handler { msg: &Message, ) -> Option<(solana_sdk::signature::Signature, UiTransactionStatusMeta)> { let signature = solana_sdk::signature::Signature::from(msg.message_id.raw_signature); - self.rpc_client - .get_transaction( - &signature, - solana_transaction_status::UiTransactionEncoding::Base58, - ) - .map(|tx_data_result| { - tx_data_result - .map(|tx_data| tx_data.transaction.meta) - .ok() - .flatten() - .map(|tx_data| (signature, tx_data)) - }) - .await + fetch_message(&self.rpc_client, signature).await } } diff --git a/ampd/src/handlers/solana_verify_verifier_set.rs b/ampd/src/handlers/solana_verify_verifier_set.rs index ae138a5e1..c995eed35 100644 --- a/ampd/src/handlers/solana_verify_verifier_set.rs +++ b/ampd/src/handlers/solana_verify_verifier_set.rs @@ -1,53 +1,54 @@ +use std::convert::TryInto; + use async_trait::async_trait; +use axelar_wasm_std::msg_id::{Base58SolanaTxSignatureAndEventIndex, HexTxHashAndEventIndex}; +use axelar_wasm_std::voting::{PollId, Vote}; use cosmrs::cosmwasm::MsgExecuteContract; -use cosmrs::{tx::Msg, Any}; +use cosmrs::tx::Msg; +use cosmrs::Any; use error_stack::ResultExt; use events::Error::EventTypeMismatch; use events_derive::try_from; use multisig::verifier_set::VerifierSet; -use serde::Deserialize; -use solana_sdk::signature::Signature; -use solana_transaction_status::UiTransactionEncoding; -use std::convert::TryInto; -use std::str::FromStr; -use tokio::sync::watch::Receiver; -use tracing::{error, info}; - -use axelar_wasm_std::voting::{PollId, Vote}; use router_api::ChainName; +use serde::Deserialize; use solana_client::nonblocking::rpc_client::RpcClient; +use solana_sdk::pubkey::Pubkey; +use solana_transaction_status::UiTransactionStatusMeta; +use tokio::sync::watch::Receiver; +use tracing::{info, info_span}; +use valuable::Valuable; use voting_verifier::msg::ExecuteMsg; use crate::event_processor::EventHandler; use crate::handlers::errors::Error; -use crate::solana::verifier_set_verifier::{parse_gateway_event, verify_verifier_set}; +use crate::solana::fetch_message; +use crate::solana::verifier_set_verifier::verify_verifier_set; use crate::types::TMAddress; type Result = error_stack::Result; #[derive(Deserialize, Debug)] pub struct VerifierSetConfirmation { - pub tx_id: String, - pub event_index: u32, + pub message_id: Base58SolanaTxSignatureAndEventIndex, pub verifier_set: VerifierSet, } #[derive(Deserialize, Debug)] -#[try_from("wasm-worker_set_poll_started")] +#[try_from("wasm-verifier_set_poll_started")] struct PollStartedEvent { - #[serde(rename = "_contract_address")] - contract_address: TMAddress, verifier_set: VerifierSetConfirmation, poll_id: PollId, - _source_gateway_address: String, + source_chain: ChainName, + #[serde(deserialize_with = "crate::solana::deserialize_pubkey")] + source_gateway_address: Pubkey, expires_at: u64, - _confirmation_height: u64, participants: Vec, } pub struct Handler { verifier: TMAddress, - voting_verifier: TMAddress, + voting_verifier_contract: TMAddress, rpc_client: RpcClient, latest_block_height: Receiver, } @@ -55,27 +56,38 @@ pub struct Handler { impl Handler { pub fn new( verifier: TMAddress, - voting_verifier: TMAddress, + voting_verifier_contract: TMAddress, rpc_client: RpcClient, latest_block_height: Receiver, ) -> Self { Self { verifier, - voting_verifier, + voting_verifier_contract, rpc_client, latest_block_height, } } - fn vote_msg(&self, poll_id: PollId, votes: Vec) -> MsgExecuteContract { + fn vote_msg(&self, poll_id: PollId, vote: Vote) -> MsgExecuteContract { MsgExecuteContract { sender: self.verifier.as_ref().clone(), - contract: self.voting_verifier.as_ref().clone(), - msg: serde_json::to_vec(&ExecuteMsg::Vote { poll_id, votes }) - .expect("vote msg should serialize"), + contract: self.voting_verifier_contract.as_ref().clone(), + msg: serde_json::to_vec(&ExecuteMsg::Vote { + poll_id, + votes: vec![vote], + }) + .expect("vote msg should serialize"), funds: vec![], } } + + async fn fetch_message( + &self, + msg: &VerifierSetConfirmation, + ) -> Option<(solana_sdk::signature::Signature, UiTransactionStatusMeta)> { + let signature = solana_sdk::signature::Signature::from(msg.message_id.raw_signature); + fetch_message(&self.rpc_client, signature).await + } } #[async_trait] @@ -83,13 +95,17 @@ impl EventHandler for Handler { type Err = Error; async fn handle(&self, event: &events::Event) -> Result> { + if !event.is_from_contract(self.voting_verifier_contract.as_ref()) { + return Ok(vec![]); + } + let PollStartedEvent { - contract_address, poll_id, + source_chain, + source_gateway_address, expires_at, participants, verifier_set, - .. } = match event.try_into() as error_stack::Result<_, _> { Err(report) if matches!(report.current_context(), EventTypeMismatch(_)) => { return Ok(vec![]) @@ -97,10 +113,6 @@ impl EventHandler for Handler { event => event.change_context(Error::DeserializeEvent)?, }; - if self.voting_verifier != contract_address { - return Ok(vec![]); - } - if !participants.contains(&self.verifier) { return Ok(vec![]); } @@ -111,78 +123,31 @@ impl EventHandler for Handler { return Ok(vec![]); } - let sol_tx_signature = match Signature::from_str(&verifier_set.tx_id) { - Ok(sig) => sig, - Err(err) => { - error!( - poll_id = poll_id.to_string(), - err = err.to_string(), - "Cannot decode solana tx signature" - ); - return Ok(vec![self - .vote_msg(poll_id, vec![Vote::FailedOnChain]) - .into_any() - .expect("vote msg should serialize")]); - } - }; - - let sol_tx = match self - .rpc_client - .get_transaction(&sol_tx_signature, UiTransactionEncoding::Json) - .await - { - Ok(tx) => tx, - Err(err) => match err.kind() { - solana_client::client_error::ClientErrorKind::SerdeJson(err) => { - error!( - tx_signature = sol_tx_signature.to_string(), - err = err.to_string(), - poll_id = poll_id.to_string(), - "Could not find solana transaction." - ); - return Ok(vec![self - .vote_msg(poll_id, vec![Vote::NotFound]) - .into_any() - .expect("vote msg should serialize")]); - } - _ => { - error!( - tx_signature = sol_tx_signature.to_string(), - poll_id = poll_id.to_string(), - "RPC error while fetching transaction." - ); - return Err(Error::TxReceipts)?; - } - }, - }; - - let gw_event_container = - parse_gateway_event(&sol_tx).map_err(|_| Error::DeserializeEvent)?; - let gw_event = gw_event_container.parse(); - - match gw_event { - ArchivedGatewayEvent::SignersRotated(ArchivedRotateSignersEvent { - new_signers_hash, - .. - }) => { - let vote = verify_verifier_set(&verifier_set, new_signers_hash); - Ok(vec![self - .vote_msg(poll_id, vec![vote]) - .into_any() - .expect("vote msg should serialize")]) - } - _ => { - error!( - tx_signature = sol_tx_signature.to_string(), - poll_id = poll_id.to_string(), - "Error parsing gateway event." - ); - return Ok(vec![self - .vote_msg(poll_id, vec![Vote::FailedOnChain]) - .into_any() - .expect("vote msg should serialize")]); - } - } + let tx_receipt = self.fetch_message(&verifier_set).await; + let vote = info_span!( + "verify a new verifier set for Solana", + poll_id = poll_id.to_string(), + source_chain = source_chain.to_string(), + id = verifier_set.message_id.to_string() + ) + .in_scope(|| { + info!("ready to verify a new verifier set in poll"); + + let vote = tx_receipt.map_or(Vote::NotFound, |(_, tx_receipt)| { + verify_verifier_set(&source_gateway_address, &tx_receipt, &verifier_set) + }); + info!( + vote = vote.as_value(), + "ready to vote for a new verifier set in poll" + ); + + vote + }); + + Ok(vec![self + .vote_msg(poll_id, vote) + .into_any() + .expect("vote msg should serialize")]) } } diff --git a/ampd/src/solana/mod.rs b/ampd/src/solana/mod.rs index 3ca3cd636..3d2e9452e 100644 --- a/ampd/src/solana/mod.rs +++ b/ampd/src/solana/mod.rs @@ -1,2 +1,37 @@ +use std::str::FromStr; + +use futures::FutureExt; +use serde::Deserializer; +use solana_client::nonblocking::rpc_client::RpcClient; +use solana_sdk::{pubkey::Pubkey, signature::Signature}; +use solana_transaction_status::UiTransactionStatusMeta; + pub mod msg_verifier; pub mod verifier_set_verifier; + +pub async fn fetch_message( + rpc_client: &RpcClient, + signature: Signature, +) -> Option<(Signature, UiTransactionStatusMeta)> { + rpc_client + .get_transaction( + &signature, + solana_transaction_status::UiTransactionEncoding::Base58, + ) + .map(|tx_data_result| { + tx_data_result + .map(|tx_data| tx_data.transaction.meta) + .ok() + .flatten() + .map(|tx_data| (signature, tx_data)) + }) + .await +} + +pub fn deserialize_pubkey<'de, D>(deserializer: D) -> Result +where + D: Deserializer<'de>, +{ + let s = String::deserialize(deserializer)?; + Pubkey::from_str(&s).map_err(serde::de::Error::custom) +} diff --git a/ampd/src/solana/msg_verifier.rs b/ampd/src/solana/msg_verifier.rs index af0b5a760..7498f8a97 100644 --- a/ampd/src/solana/msg_verifier.rs +++ b/ampd/src/solana/msg_verifier.rs @@ -12,13 +12,17 @@ use tracing::error; use crate::handlers::solana_verify_msg::Message; -pub fn verify_message( +pub fn verify( source_gateway_address: &Pubkey, tx: &UiTransactionStatusMeta, - message: &Message, -) -> Vote { + desired_event_index: impl TryInto, + evens_are_equal: F, +) -> Vote +where + F: Fn(GatewayEvent) -> bool, +{ let tx_was_successful = tx.err.is_none(); - let desired_event_idx: usize = match message.message_id.event_index.try_into() { + let desired_event_idx: usize = match desired_event_index.try_into() { Ok(idx) => idx, Err(_) => { error!("Invalid event index in message ID"); @@ -67,24 +71,38 @@ pub fn verify_message( .into_iter() .find(|(idx, _)| *idx == desired_event_idx) { - if let GatewayEvent::CallContract(event) = event { - let events_are_equal = event.sender_key == message.source_address - && event.payload_hash == message.payload_hash.0 - && message.destination_chain == event.destination_chain - && event.destination_contract_address == message.destination_address; - - if events_are_equal { - // proxy the desired vote status of whether the ix succeeded - return vote; - } - return Vote::NotFound; + if evens_are_equal(event) { + // proxy the desired vote status of whether the ix succeeded + return vote; } + return Vote::NotFound; } } Vote::NotFound } +pub fn verify_message( + source_gateway_address: &Pubkey, + tx: &UiTransactionStatusMeta, + message: &Message, +) -> Vote { + verify( + source_gateway_address, + tx, + message.message_id.event_index, + |gateway_event| { + let GatewayEvent::CallContract(event) = gateway_event else { + return false; + }; + return event.sender_key == message.source_address + && event.payload_hash == message.payload_hash.0 + && message.destination_chain == event.destination_chain + && event.destination_contract_address == message.destination_address; + }, + ) +} + #[cfg(test)] mod tests { diff --git a/ampd/src/solana/verifier_set_verifier.rs b/ampd/src/solana/verifier_set_verifier.rs index 09b2e8fba..6f8acd847 100644 --- a/ampd/src/solana/verifier_set_verifier.rs +++ b/ampd/src/solana/verifier_set_verifier.rs @@ -1,8 +1,12 @@ +use axelar_solana_gateway::processor::GatewayEvent; +use axelar_solana_gateway::processor::VerifierSetRotated; use axelar_wasm_std::voting::Vote; use multisig::key::PublicKey; use multisig::verifier_set::VerifierSet; use sha3::Digest; use sha3::Keccak256; +use solana_sdk::pubkey::Pubkey; +use solana_transaction_status::UiTransactionStatusMeta; use crate::handlers::solana_verify_verifier_set::VerifierSetConfirmation; use solana_transaction_status::{ @@ -11,68 +15,32 @@ use solana_transaction_status::{ use thiserror::Error; use tracing::error; -use gmp_gateway::events::{EventContainer, GatewayEvent}; +use super::msg_verifier::verify; -#[derive(Error, Debug, PartialEq)] -pub enum VerificationError { - #[error("Failed to parse tx log messages")] - NoLogMessages, - #[error("Tried to get gateway event from program logs, but couldn't find anything.")] - NoGatewayEventFound, -} - -type Result = std::result::Result; - -pub fn parse_gateway_event( - tx: &EncodedConfirmedTransactionWithStatusMeta, -) -> Result { - let Some(meta) = &tx.transaction.meta else { - return Err(VerificationError::NoLogMessages); - }; - - let OptionSerializer::Some(log_messages) = &meta.log_messages else { - return Err(VerificationError::NoLogMessages); - }; - - log_messages - .iter() - .find_map(GatewayEvent::parse_log) - .ok_or(VerificationError::NoGatewayEventFound) -} - -#[tracing::instrument(name = "solana_verify_verifier_set")] pub fn verify_verifier_set( - verifier_set_conf: &VerifierSetConfirmation, - new_signers_hash: &[u8; 32], + gateway_address: &Pubkey, + tx: &UiTransactionStatusMeta, + message: &VerifierSetConfirmation, ) -> Vote { - let axelar_verifier_set_hash = hash_verifier_set(&verifier_set_conf.verifier_set); - if &axelar_verifier_set_hash == new_signers_hash { - return Vote::SucceededOnChain; - } - Vote::FailedOnChain -} - -fn hash_verifier_set(verifier_set: &VerifierSet) -> [u8; 32] { - let mut hasher = Keccak256::new(); - - // Length prefix the bytes to be hashed to prevent hash collisions - let len = u32::try_from(verifier_set.signers.len()) - .expect("impossible for the value to be larger than u32 on wasm32"); - hasher.update(len.to_le_bytes()); - - verifier_set.signers.values().for_each(|signer| { - match signer.pub_key { - PublicKey::Ecdsa(_) => hasher.update(b"secp256k1"), - PublicKey::Ed25519(_) => hasher.update(b"ed25519"), - } - hasher.update(signer.pub_key.as_ref()); - hasher.update(signer.weight.to_le_bytes()); - }); - - hasher.update(verifier_set.threshold.to_le_bytes()); - hasher.update(verifier_set.created_at.to_le_bytes()); - - hasher.finalize().into() + verify( + gateway_address, + tx, + message.message_id.event_index, + |gateway_event| { + let GatewayEvent::VerifierSetRotated(VerifierSetRotated { + epoch, + verifier_set_hash, + }) = gateway_event + else { + return false; + }; + + // todo -- re-hash the same way we re-hash within the multisig prover + let desired_hash = message.verifier_set.hash(); + + return desired_hash == hash; + }, + ) } #[cfg(test)] From 3a8b6286a0260d2b78a93cc6ecebbc96c9131982 Mon Sep 17 00:00:00 2001 From: Roberts Pumpurs Date: Thu, 28 Nov 2024 17:42:15 +0200 Subject: [PATCH 090/109] feat: verifier set for solana gets validated --- Cargo.lock | 31 +--------- ampd/Cargo.toml | 2 +- ampd/src/handlers/config.rs | 1 - .../handlers/solana_verify_verifier_set.rs | 21 ++++++- ampd/src/lib.rs | 16 ++--- ampd/src/solana/mod.rs | 2 +- ampd/src/solana/verifier_set_verifier.rs | 58 +++++++++++++++++-- 7 files changed, 82 insertions(+), 49 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 35a75aae4..2dfb05e94 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -142,12 +142,6 @@ dependencies = [ "alloc-no-stdlib", ] -[[package]] -name = "allocator-api2" -version = "0.2.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45862d1c77f2228b9e10bc609d5bc203d86ebc9b87ad8d5d5167a6c9abf739d9" - [[package]] name = "alloy-primitives" version = "0.7.7" @@ -279,7 +273,6 @@ dependencies = [ "humantime-serde", "itertools 0.11.0", "k256", - "lru 0.12.5", "mockall 0.11.4", "move-core-types", "multisig", @@ -3754,12 +3747,6 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" -[[package]] -name = "foldhash" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f81ec6369c545a7d40e4589b5597581fa1c441fe1cce96dd1de43159910a36a2" - [[package]] name = "foreign-types" version = "0.3.2" @@ -4175,11 +4162,6 @@ name = "hashbrown" version = "0.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" -dependencies = [ - "allocator-api2", - "equivalent", - "foldhash", -] [[package]] name = "hashers" @@ -5463,15 +5445,6 @@ dependencies = [ "hashbrown 0.13.2", ] -[[package]] -name = "lru" -version = "0.12.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" -dependencies = [ - "hashbrown 0.15.2", -] - [[package]] name = "match_opt" version = "0.1.2" @@ -10543,7 +10516,7 @@ dependencies = [ "async-trait", "bcs", "eyre", - "lru 0.10.1", + "lru", "move-binary-format", "move-command-line-common", "move-core-types", @@ -10635,7 +10608,7 @@ dependencies = [ "indexmap 2.6.0", "itertools 0.10.5", "jsonrpsee", - "lru 0.10.1", + "lru", "move-binary-format", "move-bytecode-utils", "move-command-line-common", diff --git a/ampd/Cargo.toml b/ampd/Cargo.toml index ff0b1e30e..1bbdcdcc1 100644 --- a/ampd/Cargo.toml +++ b/ampd/Cargo.toml @@ -87,7 +87,7 @@ valuable = { version = "0.1.0", features = ["derive"] } valuable-serde = { version = "0.1.0", features = ["std"] } voting-verifier = { workspace = true } axelar-solana-gateway = { workspace = true } -lru = "0.12.3" +axelar-solana-encoding = { workspace = true } [dev-dependencies] ed25519-dalek = { workspace = true, features = ["rand_core"] } diff --git a/ampd/src/handlers/config.rs b/ampd/src/handlers/config.rs index d4fa6a6f2..9c752480b 100644 --- a/ampd/src/handlers/config.rs +++ b/ampd/src/handlers/config.rs @@ -65,7 +65,6 @@ pub enum Config { }, SolanaMsgVerifier { cosmwasm_contract: TMAddress, - max_tx_cache_entries: usize, rpc_url: Url, rpc_timeout: Option, }, diff --git a/ampd/src/handlers/solana_verify_verifier_set.rs b/ampd/src/handlers/solana_verify_verifier_set.rs index c995eed35..22e9f5e42 100644 --- a/ampd/src/handlers/solana_verify_verifier_set.rs +++ b/ampd/src/handlers/solana_verify_verifier_set.rs @@ -50,18 +50,30 @@ pub struct Handler { verifier: TMAddress, voting_verifier_contract: TMAddress, rpc_client: RpcClient, + solana_gateway_domain_separator: [u8; 32], latest_block_height: Receiver, } impl Handler { - pub fn new( + pub async fn new( verifier: TMAddress, voting_verifier_contract: TMAddress, rpc_client: RpcClient, latest_block_height: Receiver, ) -> Self { + let (gateway_root_pda, ..) = axelar_solana_gateway::get_gateway_root_config_pda(); + let config = rpc_client + .get_account(&gateway_root_pda) + .await + .expect("gateway account could not be fetched") + .data; + let config = borsh::from_slice::(&config) + .expect("gateway config data must be borsh encoded"); + let domain_separator = config.domain_separator; + Self { verifier, + solana_gateway_domain_separator: domain_separator, voting_verifier_contract, rpc_client, latest_block_height, @@ -134,7 +146,12 @@ impl EventHandler for Handler { info!("ready to verify a new verifier set in poll"); let vote = tx_receipt.map_or(Vote::NotFound, |(_, tx_receipt)| { - verify_verifier_set(&source_gateway_address, &tx_receipt, &verifier_set) + verify_verifier_set( + &source_gateway_address, + &tx_receipt, + &verifier_set, + &self.solana_gateway_domain_separator, + ) }); info!( vote = vote.as_value(), diff --git a/ampd/src/lib.rs b/ampd/src/lib.rs index 950b97fd2..dda0bb310 100644 --- a/ampd/src/lib.rs +++ b/ampd/src/lib.rs @@ -15,7 +15,6 @@ use evm::json_rpc::EthereumClient; use multiversx_sdk::gateway::GatewayProxy; use queue::queued_broadcaster::QueuedBroadcaster; use router_api::ChainName; -use solana::rpc_client::RpcCacheWrapper; use solana_client::nonblocking::rpc_client::RpcClient; use solana_sdk::commitment_config::CommitmentConfig; use thiserror::Error; @@ -395,7 +394,6 @@ where ), handlers::config::Config::SolanaMsgVerifier { cosmwasm_contract, - max_tx_cache_entries, rpc_url, rpc_timeout, } => self.create_handler_task( @@ -403,13 +401,10 @@ where handlers::solana_verify_msg::Handler::new( verifier.clone(), cosmwasm_contract, - RpcCacheWrapper::new( - RpcClient::new_with_timeout_and_commitment( - rpc_url.to_string(), - rpc_timeout.unwrap_or(DEFAULT_RPC_TIMEOUT), - CommitmentConfig::finalized(), - ), - NonZeroUsize::new(max_tx_cache_entries).unwrap(), + RpcClient::new_with_timeout_and_commitment( + rpc_url.to_string(), + rpc_timeout.unwrap_or(DEFAULT_RPC_TIMEOUT), + CommitmentConfig::finalized(), ), self.block_height_monitor.latest_block_height(), ), @@ -430,7 +425,8 @@ where CommitmentConfig::finalized(), ), self.block_height_monitor.latest_block_height(), - ), + ) + .await, event_processor_config.clone(), ), }; diff --git a/ampd/src/solana/mod.rs b/ampd/src/solana/mod.rs index 3d2e9452e..50dc645b7 100644 --- a/ampd/src/solana/mod.rs +++ b/ampd/src/solana/mod.rs @@ -1,7 +1,7 @@ use std::str::FromStr; use futures::FutureExt; -use serde::Deserializer; +use serde::{Deserialize, Deserializer}; use solana_client::nonblocking::rpc_client::RpcClient; use solana_sdk::{pubkey::Pubkey, signature::Signature}; use solana_transaction_status::UiTransactionStatusMeta; diff --git a/ampd/src/solana/verifier_set_verifier.rs b/ampd/src/solana/verifier_set_verifier.rs index 6f8acd847..8cd2f1cae 100644 --- a/ampd/src/solana/verifier_set_verifier.rs +++ b/ampd/src/solana/verifier_set_verifier.rs @@ -1,3 +1,6 @@ +use std::collections::BTreeMap; + +use axelar_solana_encoding::hasher::NativeHasher; use axelar_solana_gateway::processor::GatewayEvent; use axelar_solana_gateway::processor::VerifierSetRotated; use axelar_wasm_std::voting::Vote; @@ -21,28 +24,73 @@ pub fn verify_verifier_set( gateway_address: &Pubkey, tx: &UiTransactionStatusMeta, message: &VerifierSetConfirmation, + domain_separator: &[u8; 32], ) -> Vote { + use axelar_solana_encoding::types::verifier_set::verifier_set_hash; + verify( gateway_address, tx, message.message_id.event_index, |gateway_event| { let GatewayEvent::VerifierSetRotated(VerifierSetRotated { - epoch, - verifier_set_hash, + verifier_set_hash: incoming_verifier_set_hash, + epoch: _, }) = gateway_event else { return false; }; - // todo -- re-hash the same way we re-hash within the multisig prover - let desired_hash = message.verifier_set.hash(); + let Some(verifier_set) = to_verifier_set(&message.verifier_set) else { + error!("verifier set data structure could not be parsed"); + return false; + }; + + let Ok(desired_hash) = + verifier_set_hash::(&verifier_set, &domain_separator) + else { + error!("verifier set could not be hashed"); + return false; + }; - return desired_hash == hash; + return desired_hash == incoming_verifier_set_hash; }, ) } +/// Transform from Axelar VerifierSet to axelar_solana_encoding VerifierSet +fn to_verifier_set( + vs: &VerifierSet, +) -> Option { + let mut signers = BTreeMap::new(); + + for (_cosmwasm_adr, signer) in vs.signers.iter() { + let pub_key = to_pub_key(&signer.pub_key)?; + let weight = signer.weight.u128(); + signers.insert(pub_key, weight); + } + + let verifier_set = axelar_solana_encoding::types::verifier_set::VerifierSet { + nonce: vs.created_at, + signers, + quorum: vs.threshold.u128(), + }; + Some(verifier_set) +} + +fn to_pub_key(pk: &PublicKey) -> Option { + use axelar_solana_encoding::types::pubkey::ED25519_PUBKEY_LEN; + use axelar_solana_encoding::types::pubkey::SECP256K1_COMPRESSED_PUBKEY_LEN; + Some(match pk { + PublicKey::Ecdsa(hb) => axelar_solana_encoding::types::pubkey::PublicKey::Secp256k1( + hb.to_array::().ok()?, + ), + PublicKey::Ed25519(hb) => axelar_solana_encoding::types::pubkey::PublicKey::Ed25519( + hb.to_array::().ok()?, + ), + }) +} + #[cfg(test)] mod tests { use std::str::FromStr; From 0d3c609647f966f7918ddd9ad8895a7671715ab7 Mon Sep 17 00:00:00 2001 From: Roberts Pumpurs Date: Thu, 28 Nov 2024 20:02:27 +0200 Subject: [PATCH 091/109] test: unittests for msg verification --- ampd/src/solana/mod.rs | 81 +++++++ ampd/src/solana/msg_verifier.rs | 362 +++++++++++--------------------- 2 files changed, 209 insertions(+), 234 deletions(-) diff --git a/ampd/src/solana/mod.rs b/ampd/src/solana/mod.rs index 50dc645b7..29714c6d4 100644 --- a/ampd/src/solana/mod.rs +++ b/ampd/src/solana/mod.rs @@ -1,4 +1,15 @@ +use axelar_solana_gateway::processor::GatewayEvent; +use axelar_wasm_std::voting::Vote; +use gateway_event_stack::MatchContext; +use solana_sdk::pubkey::Pubkey; +use solana_transaction_status::{ + option_serializer::OptionSerializer, EncodedConfirmedTransactionWithStatusMeta, +}; +use solana_transaction_status::{UiTransactionEncoding, UiTransactionStatusMeta}; use std::str::FromStr; +use std::str::FromStr; +use std::sync::Arc; +use tracing::error; use futures::FutureExt; use serde::{Deserialize, Deserializer}; @@ -35,3 +46,73 @@ where let s = String::deserialize(deserializer)?; Pubkey::from_str(&s).map_err(serde::de::Error::custom) } + +pub fn verify( + source_gateway_address: &Pubkey, + tx: &UiTransactionStatusMeta, + desired_event_index: impl TryInto, + evens_are_equal: F, +) -> Vote +where + F: Fn(GatewayEvent) -> bool, +{ + let tx_was_successful = tx.err.is_none(); + let desired_event_idx: usize = match desired_event_index.try_into() { + Ok(idx) => idx, + Err(_) => { + error!("Invalid event index in message ID"); + return Vote::NotFound; + } + }; + + let context = MatchContext::new(&source_gateway_address.to_string()); + + let logs = match tx.log_messages.as_ref() { + OptionSerializer::Some(logs) => logs, + _ => { + error!("Logs not attached to the transaction object"); + return Vote::NotFound; + } + }; + + let event_stack = gateway_event_stack::build_program_event_stack( + &context, + logs, + gateway_event_stack::parse_gateway_logs, + ); + + use gateway_event_stack::ProgramInvocationState::*; + + for invocation_state in event_stack { + let (vote, gateway_events) = match invocation_state { + Succeeded(events) => ( + { + // if tx was successful and ix invocation was successful, + // then the final outcome (if event can be found) will be of `Vote::SucceededOnChain` + if tx_was_successful { + Vote::SucceededOnChain + } else { + // if tx was NOT successful then we don't care if the ix invocatoin succeeded, + // therefore the final outcome (if event can be found) will be of `Vote::FailedOnChain` + Vote::FailedOnChain + } + }, + events, + ), + Failed(events) | InProgress(events) => (Vote::FailedOnChain, events), + }; + + if let Some((_, event)) = gateway_events + .into_iter() + .find(|(idx, _)| *idx == desired_event_idx) + { + if evens_are_equal(event) { + // proxy the desired vote status of whether the ix succeeded + return vote; + } + return Vote::NotFound; + } + } + + Vote::NotFound +} diff --git a/ampd/src/solana/msg_verifier.rs b/ampd/src/solana/msg_verifier.rs index 7498f8a97..356bb9d8b 100644 --- a/ampd/src/solana/msg_verifier.rs +++ b/ampd/src/solana/msg_verifier.rs @@ -12,75 +12,7 @@ use tracing::error; use crate::handlers::solana_verify_msg::Message; -pub fn verify( - source_gateway_address: &Pubkey, - tx: &UiTransactionStatusMeta, - desired_event_index: impl TryInto, - evens_are_equal: F, -) -> Vote -where - F: Fn(GatewayEvent) -> bool, -{ - let tx_was_successful = tx.err.is_none(); - let desired_event_idx: usize = match desired_event_index.try_into() { - Ok(idx) => idx, - Err(_) => { - error!("Invalid event index in message ID"); - return Vote::NotFound; - } - }; - - let context = MatchContext::new(&source_gateway_address.to_string()); - - let logs = match tx.log_messages.as_ref() { - OptionSerializer::Some(logs) => logs, - _ => { - error!("Logs not attached to the transaction object"); - return Vote::NotFound; - } - }; - - let event_stack = gateway_event_stack::build_program_event_stack( - &context, - logs, - gateway_event_stack::parse_gateway_logs, - ); - - use gateway_event_stack::ProgramInvocationState::*; - - for invocation_state in event_stack { - let (vote, gateway_events) = match invocation_state { - Succeeded(events) => ( - { - // if tx was successful and ix invocation was successful, - // then the final outcome (if event can be found) will be of `Vote::SucceededOnChain` - if tx_was_successful { - Vote::SucceededOnChain - } else { - // if tx was NOT successful then we don't care if the ix invocatoin succeeded, - // therefore the final outcome (if event can be found) will be of `Vote::FailedOnChain` - Vote::FailedOnChain - } - }, - events, - ), - Failed(events) | InProgress(events) => (Vote::FailedOnChain, events), - }; - - if let Some((_, event)) = gateway_events - .into_iter() - .find(|(idx, _)| *idx == desired_event_idx) - { - if evens_are_equal(event) { - // proxy the desired vote status of whether the ix succeeded - return vote; - } - return Vote::NotFound; - } - } - - Vote::NotFound -} +use super::verify; pub fn verify_message( source_gateway_address: &Pubkey, @@ -105,10 +37,8 @@ pub fn verify_message( #[cfg(test)] mod tests { - - use axelar_rkyv_encoding::rkyv::ser::{serializers::AllocSerializer, Serializer}; + use axelar_solana_gateway::processor::CallContractEvent; use base64::{engine::general_purpose, Engine}; - use gmp_gateway::{events::CallContract, solana_program::pubkey::Pubkey}; use std::str::FromStr; @@ -116,234 +46,198 @@ mod tests { use super::*; - #[test] - fn should_verify_msg_if_correct() { - let (source_gateway_address, _, tx, msg) = get_matching_msg_and_tx_block(); - assert_eq!( - Vote::SucceededOnChain, - verify_message(&source_gateway_address, Arc::new(tx), &msg) - ); - } - - // Provides a matching [`EncodedConfirmedTransactionWithStatusMeta`] and [`Message`] fixtures for testing. - // Other tests may slightly modify the above provided test fixtures for generating negative - // cases. - fn get_matching_msg_and_tx_block() -> ( - String, - String, - EncodedConfirmedTransactionWithStatusMeta, - Message, - ) { - // Common fields among tx and message. - let tx_id = "3GLo4z4siudHxW1BMHBbkTKy7kfbssNFaxLR5hTjhEXCUzp2Pi2VVwybc1s96pEKjRre7CcKKeLhni79zWTNUseP".to_string(); - let destination_chain = "eth".to_string(); - let destination_address = "0x0".to_string(); - let payload: Vec = Vec::new(); - let payload_hash: [u8; 32] = [0; 32]; - let source_gateway_address: String = "sol_gateway_addr".to_string(); - let source_pubkey = Pubkey::from([0; 32]); - let source_address = source_pubkey; - - // Code below helps on generating the program log line for adding in the - // tests/solana_tx.json file and use it as test fixture. See the "logMessages" field - // on it. - - // println!( - // "------> {}", - // get_tx_log_message( - // source_address.clone(), - // destination_chain.clone().into_bytes(), - // destination_address.clone().into_bytes(), - // payload, - // payload_hash - // ) - // ); + const GATEWAY_PROGRAM_ID: Pubkey = axelar_solana_gateway::ID; + + fn fixture_call_contract_log() -> (String, CallContractEvent) { + // this is a `CallContract` extract form other unittests + let base64_data = "Y2FsbCBjb250cmFjdF9fXw== 6NGe5cm7PkXHz/g8V2VdRg0nU0l7R48x8lll4s0Clz0= xtlu5J3pLn7c4BhqnNSrP1wDZK/pQOJVCYbk6sroJhY= ZXRoZXJldW0= MHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2YzIwNjAzYzdiODc2NjgyYzEyMTczYmRlZjlhMWRjYTUyOGYxNGZk 8J+QqvCfkKrwn5Cq8J+Qqg=="; + // Simple `CallContract` fixture + let event = CallContractEvent { + sender_key: Pubkey::from_str("GfpyaXoJrd9XHHRehAPCGETie3wpM8xDxscAUoC12Cxt").unwrap(), + destination_chain: "ethereum".to_owned(), + destination_contract_address: + "0x0000000000000000000000006c20603c7b876682c12173bdef9a1dca528f14fd".to_owned(), + payload: vec![ + 240, 159, 144, 170, 240, 159, 144, 170, 240, 159, 144, 170, 240, 159, 144, 170, + ], + payload_hash: [ + 198, 217, 110, 228, 157, 233, 46, 126, 220, 224, 24, 106, 156, 212, 171, 63, 92, 3, + 100, 175, 233, 64, 226, 85, 9, 134, 228, 234, 202, 232, 38, 22, + ], + }; - // We prefer to parse a tx from a json file, as its cleaner than filling types. - // Changing this "golden file" may result in broken tests. - let tx: EncodedConfirmedTransactionWithStatusMeta = - serde_json::from_str(include_str!("tests/solana_tx.json")).unwrap(); + (base64_data.to_string(), event) + } - let message = Message { - tx_id: tx_id.clone(), - event_index: 0, - destination_address: destination_address.clone(), - destination_chain: ChainName::from_str(&destination_chain).unwrap(), - source_address: source_address.to_string(), - payload_hash, + fn create_msg_counterpart(event: &CallContractEvent, event_index: u64) -> Message { + let msg = Message { + message_id: axelar_wasm_std::msg_id::Base58SolanaTxSignatureAndEventIndex { + raw_signature: [42; 64], + event_index, + }, + destination_address: event.destination_chain.clone(), + destination_chain: event.destination_chain.clone().parse().unwrap(), + source_address: event.sender_key, + payload_hash: event.payload_hash.into(), }; - - (source_gateway_address, tx_id, tx, message) + msg } - fn get_tx_log_message( - sender: gmp_gateway::solana_program::pubkey::Pubkey, - destination_chain: Vec, - destination_address: Vec, - payload: Vec, - payload_hash: [u8; 32], - ) -> String { - let event = gmp_gateway::events::GatewayEvent::CallContract(CallContract { - sender: sender.to_bytes(), - destination_chain: String::from_utf8(destination_chain).unwrap(), - destination_address: String::from_utf8(destination_address).unwrap(), - payload, - payload_hash, - }); + fn fixture_success_call_contract_tx_data( + ) -> (UiTransactionStatusMeta, CallContractEvent, Message) { + let (base64_data, event) = fixture_call_contract_log(); + let logs = vec![ + format!("Program {GATEWAY_PROGRAM_ID} invoke [1]"), // Invocation 1 starts + "Program log: Instruction: Call Contract".to_owned(), + format!("Program data: {}", base64_data), + format!("Program {GATEWAY_PROGRAM_ID} success"), // Invocation 1 succeeds + ]; - let mut serializer = AllocSerializer::<0>::default(); - serializer.serialize_value(&event).unwrap(); - let bytes = serializer.into_serializer().into_inner(); - let event_data_b64 = general_purpose::STANDARD.encode(bytes); - let mut log_message = "Program data: ".to_string(); - log_message.push_str(&event_data_b64); - log_message + let msg = create_msg_counterpart(&event, 2); + + (tx_meta(logs), event, msg) + } + + fn tx_meta(logs: Vec) -> UiTransactionStatusMeta { + UiTransactionStatusMeta { + err: None, + status: Ok(()), + fee: 0, + pre_balances: vec![0], + post_balances: vec![0], + inner_instructions: OptionSerializer::None, + log_messages: OptionSerializer::Some(logs), + pre_token_balances: OptionSerializer::None, + post_token_balances: OptionSerializer::None, + rewards: OptionSerializer::None, + loaded_addresses: OptionSerializer::None, + return_data: OptionSerializer::None, + compute_units_consumed: OptionSerializer::None, + } } #[test] - fn should_not_verify_msg_if_tx_id_does_not_match() { - let (source_gateway_address, _, tx, mut msg) = get_matching_msg_and_tx_block(); - msg.tx_id = "wrong_tx_id".to_string(); + fn should_verify_msg_if_correct() { + let (tx, _event, msg) = fixture_success_call_contract_tx_data(); assert_eq!( - Vote::FailedOnChain, - verify_message(&source_gateway_address, Arc::new(tx), &msg) + Vote::SucceededOnChain, + verify_message(&GATEWAY_PROGRAM_ID, &tx, &msg) ); } - #[ignore = "We are not checking the event index in production code."] #[test] - fn should_not_verify_msg_if_event_index_does_not_match() { - let (gateway_address, _, tx, mut msg) = get_matching_msg_and_tx_block(); - msg.event_index = rand::random::(); + fn should_not_verify_msg_if_event_idx_is_invalid() { + let (tx, _event, mut msg) = fixture_success_call_contract_tx_data(); + msg.message_id.event_index = 100; assert_eq!( - Vote::NotFound, - verify_message(&gateway_address, Arc::new(tx), &msg) + Vote::FailedOnChain, + verify_message(&GATEWAY_PROGRAM_ID, &tx, &msg) ); } #[test] fn should_not_verify_msg_if_destination_chain_does_not_match() { - let (gateway_address, _, tx, mut msg) = get_matching_msg_and_tx_block(); + let (tx, _event, mut msg) = fixture_success_call_contract_tx_data(); msg.destination_chain = ChainName::from_str("badchain").unwrap(); assert_eq!( Vote::FailedOnChain, - verify_message(&gateway_address, Arc::new(tx), &msg) + verify_message(&GATEWAY_PROGRAM_ID, &tx, &msg) ); } #[test] fn should_not_verify_msg_if_source_address_does_not_match() { - let (source_gateway_address, _, tx, mut msg) = get_matching_msg_and_tx_block(); - msg.source_address = Pubkey::from([13; 32]).to_string(); + let (tx, _event, mut msg) = fixture_success_call_contract_tx_data(); + msg.source_address = Pubkey::from([13; 32]); assert_eq!( Vote::FailedOnChain, - verify_message(&source_gateway_address, Arc::new(tx), &msg) + verify_message(&GATEWAY_PROGRAM_ID, &tx, &msg) ); } #[test] fn should_not_verify_msg_if_destination_address_does_not_match() { - let (gateway_address, _, tx, mut msg) = get_matching_msg_and_tx_block(); + let (tx, _event, mut msg) = fixture_success_call_contract_tx_data(); msg.destination_address = "bad_address".to_string(); assert_eq!( Vote::FailedOnChain, - verify_message(&gateway_address, Arc::new(tx), &msg) + verify_message(&GATEWAY_PROGRAM_ID, &tx, &msg) ); } #[test] fn should_not_verify_msg_if_payload_hash_does_not_match() { - let (gateway_address, _, tx, mut msg) = get_matching_msg_and_tx_block(); - msg.payload_hash = [1; 32]; + let (tx, _event, mut msg) = fixture_success_call_contract_tx_data(); + msg.payload_hash = [1; 32].into(); assert_eq!( Vote::FailedOnChain, - verify_message(&gateway_address, Arc::new(tx), &msg) + verify_message(&GATEWAY_PROGRAM_ID, &tx, &msg) ); } #[test] - fn find_first_log_message_match_should_iterate_until_valid_match_found() { - let (gateway_address, tx_id, _, msg) = get_matching_msg_and_tx_block(); - - let log_messages = vec![ - bad_tx_log_message(), - not_matching_tx_log_message(&msg), - matching_tx_log_message(&msg), + fn should_fail_tx_failed() { + let (base64_data, event) = fixture_call_contract_log(); + let logs = vec![ + format!("Program {GATEWAY_PROGRAM_ID} invoke [1]"), + "Program log: Instruction: Call Contract".to_owned(), + format!("Program data: {}", base64_data), + format!("Program {GATEWAY_PROGRAM_ID} success"), ]; + let msg = create_msg_counterpart(&event, 2); + let mut tx = tx_meta(logs); + tx.err = Some(solana_sdk::transaction::TransactionError::AccountNotFound); + assert_eq!( - Some(2), - find_first_log_message_match( - &tx_id, - &log_messages, - &msg, - &[gateway_address.clone()], - &gateway_address - ) + Vote::FailedOnChain, + verify_message(&GATEWAY_PROGRAM_ID, &tx, &msg) ); } - fn bad_tx_log_message() -> String { - "BAD_LOG_MESSAGE".to_string() - } - - fn not_matching_tx_log_message(msg: &Message) -> String { - get_tx_log_message( - Pubkey::from_str(&msg.source_address).unwrap(), - "abr".as_bytes().to_vec(), - msg.destination_address.clone().into_bytes(), - Vec::new(), - msg.payload_hash, - ) // changing destination chain. - } - - fn matching_tx_log_message(msg: &Message) -> String { - get_tx_log_message( - Pubkey::from_str(&msg.source_address).unwrap(), - msg.destination_chain.to_string().into_bytes(), - msg.destination_address.clone().into_bytes(), - Vec::new(), - msg.payload_hash, - ) // not changing anything. Should match - } - #[test] - fn find_first_log_message_match_should_stop_on_first_valid_match_found() { - let (gateway_address, tx_id, _, msg) = get_matching_msg_and_tx_block(); - - let log_messages = vec![ - not_matching_tx_log_message(&msg), - matching_tx_log_message(&msg), - matching_tx_log_message(&msg), + fn should_fail_tx_succeeded_with_failed_ix() { + let (base64_data, event) = fixture_call_contract_log(); + let logs = vec![ + format!("Program {GATEWAY_PROGRAM_ID} invoke [1]"), + "Program log: Instruction: Call Contract".to_owned(), + format!("Program data: {}", base64_data), + format!("Program {GATEWAY_PROGRAM_ID} failed"), // Invocation 1 fails ]; + let msg = create_msg_counterpart(&event, 2); + let tx = tx_meta(logs); + assert_eq!( - Some(1), // index 1 - find_first_log_message_match( - &tx_id, - &log_messages, - &msg, - &[gateway_address.clone()], - &gateway_address - ) + Vote::FailedOnChain, + verify_message(&GATEWAY_PROGRAM_ID, &tx, &msg) ); } #[test] - fn find_first_log_message_match_should_return_none_if_not_match() { - let (gateway_address, tx_id, _, msg) = get_matching_msg_and_tx_block(); + fn should_find_the_correct_index() { + let (base64_data, event) = fixture_call_contract_log(); + let logs = vec![ + format!("Program {GATEWAY_PROGRAM_ID} invoke [1]"), + "Program log: Instruction: Call Contract".to_owned(), + format!("Program data: {}", base64_data), + format!("Program {GATEWAY_PROGRAM_ID} failed"), // Invocation 1 fails + format!("Program {GATEWAY_PROGRAM_ID} invoke [1]"), + "Program log: Instruction: Call Contract".to_owned(), + format!("Program data: {}", base64_data), + format!("Program {GATEWAY_PROGRAM_ID} success"), // Invocation 1 succeeds + format!("Program {GATEWAY_PROGRAM_ID} invoke [1]"), + "Program log: Instruction: Call Contract".to_owned(), + format!("Program data: {}", base64_data), + format!("Program {GATEWAY_PROGRAM_ID} failed"), // Invocation 1 fails + ]; - let log_messages = vec![not_matching_tx_log_message(&msg), bad_tx_log_message()]; + let msg = create_msg_counterpart(&event, 6); + let tx = tx_meta(logs); assert_eq!( - None, // index 1 - find_first_log_message_match( - &tx_id, - &log_messages, - &msg, - &[gateway_address.clone()], - &gateway_address - ) + Vote::FailedOnChain, + verify_message(&GATEWAY_PROGRAM_ID, &tx, &msg) ); } } From cd356dfb1ba904a46d5a2a991a89235a9c23b68e Mon Sep 17 00:00:00 2001 From: Roberts Pumpurs Date: Fri, 29 Nov 2024 15:26:19 +0200 Subject: [PATCH 092/109] test: fix msg_verify tests --- Cargo.lock | 28 +- ampd/Cargo.toml | 23 +- ampd/src/config.rs | 1 - ampd/src/handlers/config.rs | 1 - ampd/src/solana/mod.rs | 12 +- ampd/src/solana/msg_verifier.rs | 23 +- ampd/src/solana/verifier_set_verifier.rs | 354 +++++++++++++++++------ ampd/src/tests/config_template.toml | 1 - 8 files changed, 332 insertions(+), 111 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 2dfb05e94..f2aba9bc0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -309,6 +309,7 @@ dependencies = [ "sui-types 0.1.0", "tendermint 0.33.0", "tendermint-rpc", + "test-log", "thiserror", "tokio", "tokio-stream", @@ -6515,7 +6516,7 @@ version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" dependencies = [ - "proc-macro-crate 1.1.3", + "proc-macro-crate 3.2.0", "proc-macro2 1.0.92", "quote 1.0.37", "syn 2.0.89", @@ -7494,7 +7495,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81bddcdb20abf9501610992b6759a4c888aef7d1a7247ef75e2404275ac24af1" dependencies = [ "anyhow", - "itertools 0.11.0", + "itertools 0.12.1", "proc-macro2 1.0.92", "quote 1.0.37", "syn 2.0.89", @@ -11023,6 +11024,27 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3369f5ac52d5eb6ab48c6b4ffdc8efbcad6b89c765749064ba298f2c68a16a76" +[[package]] +name = "test-log" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3dffced63c2b5c7be278154d76b479f9f9920ed34e7574201407f0b14e2bbb93" +dependencies = [ + "test-log-macros", + "tracing-subscriber", +] + +[[package]] +name = "test-log-macros" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5999e24eaa32083191ba4e425deb75cdf25efefabe5aaccb7446dd0d4122a3f5" +dependencies = [ + "proc-macro2 1.0.92", + "quote 1.0.37", + "syn 2.0.89", +] + [[package]] name = "textwrap" version = "0.11.0" @@ -12193,7 +12215,7 @@ version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" dependencies = [ - "windows-sys 0.48.0", + "windows-sys 0.59.0", ] [[package]] diff --git a/ampd/Cargo.toml b/ampd/Cargo.toml index 1bbdcdcc1..a718e8fcf 100644 --- a/ampd/Cargo.toml +++ b/ampd/Cargo.toml @@ -25,7 +25,9 @@ enum-display-derive = "0.1.1" error-stack = { workspace = true } ethers-contract = { workspace = true } ethers-core = { workspace = true } -ethers-providers = { version = "2.0.13", default-features = false, features = ["rustls"] } +ethers-providers = { version = "2.0.13", default-features = false, features = [ + "rustls", +] } events = { workspace = true } events-derive = { workspace = true } evm-gateway = { workspace = true } @@ -39,7 +41,9 @@ move-core-types = { git = "https://github.com/mystenlabs/sui", tag = "mainnet-v1 multisig = { workspace = true, features = ["library"] } multiversx-sdk = "0.6.1" num-traits = { workspace = true } -openssl = { version = "0.10.35", features = ["vendored"] } # Needed to make arm compilation work by forcing vendoring +openssl = { version = "0.10.35", features = [ + "vendored", +] } # Needed to make arm compilation work by forcing vendoring prost = "0.11.9" prost-types = "0.11.9" report = { workspace = true } @@ -66,12 +70,16 @@ stellar-rpc-client = "21.4.0" stellar-xdr = { workspace = true, features = ["serde_json"] } sui-gateway = { workspace = true } sui-json-rpc-types = { git = "https://github.com/mystenlabs/sui", tag = "mainnet-v1.26.2" } -sui-types = { git = "https://github.com/mystenlabs/sui", features = ["test-utils"], tag = "mainnet-v1.26.2" } +sui-types = { git = "https://github.com/mystenlabs/sui", features = [ + "test-utils", +], tag = "mainnet-v1.26.2" } # Need to switch to our own fork of tendermint and tendermint-rpc due to event attribute value being nullable. # Can switch back once https://github.com/informalsystems/tendermint-rs/issues/1216 is resolved. # The fix for the issue is at https://github.com/axelarnetwork/tendermint-rs/commit/e97033e20e660a7e707ea86db174ec047bbba50d. tendermint = { git = "https://github.com/axelarnetwork/tendermint-rs.git", branch = "v0.33.x" } -tendermint-rpc = { git = "https://github.com/axelarnetwork/tendermint-rs.git", branch = "v0.33.x", features = ["http-client"] } +tendermint-rpc = { git = "https://github.com/axelarnetwork/tendermint-rs.git", branch = "v0.33.x", features = [ + "http-client", +] } thiserror = { workspace = true } tokio = { workspace = true, features = ["signal"] } tokio-stream = { workspace = true, features = ["sync"] } @@ -80,7 +88,11 @@ toml = "0.5.9" tonic = "0.9.2" tracing = { version = "0.1.37", features = ["valuable", "log"] } tracing-core = { version = "0.1.30", features = ["valuable"] } -tracing-subscriber = { version = "0.3.16", features = ["json", "valuable", "env-filter"] } +tracing-subscriber = { version = "0.3.16", features = [ + "json", + "valuable", + "env-filter", +] } typed-builder = "0.18.2" url = "2.3.1" valuable = { version = "0.1.0", features = ["derive"] } @@ -99,6 +111,7 @@ rand = { workspace = true } random-string = "1.0.0" tokio = { workspace = true, features = ["test-util"] } axelar-solana-encoding = { workspace = true } +test-log = { version = "0.2", features = ["trace"], default-features = false } [build-dependencies] tonic-build = "0.8.3" diff --git a/ampd/src/config.rs b/ampd/src/config.rs index a99f202d1..7441bb3a9 100644 --- a/ampd/src/config.rs +++ b/ampd/src/config.rs @@ -372,7 +372,6 @@ mod tests { cosmwasm_contract: TMAddress::from( AccountId::new("axelar", &[0u8; 32]).unwrap(), ), - max_tx_cache_entries: 6, rpc_url: Url::from_str("http://127.0.0.1").unwrap(), rpc_timeout: Some(Duration::from_secs(3)), }, diff --git a/ampd/src/handlers/config.rs b/ampd/src/handlers/config.rs index 9c752480b..c42b15c4e 100644 --- a/ampd/src/handlers/config.rs +++ b/ampd/src/handlers/config.rs @@ -330,7 +330,6 @@ mod tests { cosmwasm_contract: TMAddress::random(PREFIX), rpc_url: "http://localhost:8080/".parse().unwrap(), rpc_timeout: None, - max_tx_cache_entries: 5, }; let configs = vec![sample_config.clone(), sample_config]; diff --git a/ampd/src/solana/mod.rs b/ampd/src/solana/mod.rs index 29714c6d4..d4878f3e7 100644 --- a/ampd/src/solana/mod.rs +++ b/ampd/src/solana/mod.rs @@ -1,21 +1,18 @@ use axelar_solana_gateway::processor::GatewayEvent; use axelar_wasm_std::voting::Vote; use gateway_event_stack::MatchContext; -use solana_sdk::pubkey::Pubkey; use solana_transaction_status::{ option_serializer::OptionSerializer, EncodedConfirmedTransactionWithStatusMeta, }; use solana_transaction_status::{UiTransactionEncoding, UiTransactionStatusMeta}; use std::str::FromStr; -use std::str::FromStr; use std::sync::Arc; -use tracing::error; +use tracing::{error, warn}; use futures::FutureExt; use serde::{Deserialize, Deserializer}; use solana_client::nonblocking::rpc_client::RpcClient; use solana_sdk::{pubkey::Pubkey, signature::Signature}; -use solana_transaction_status::UiTransactionStatusMeta; pub mod msg_verifier; pub mod verifier_set_verifier; @@ -54,7 +51,7 @@ pub fn verify( evens_are_equal: F, ) -> Vote where - F: Fn(GatewayEvent) -> bool, + F: Fn(&GatewayEvent) -> bool, { let tx_was_successful = tx.err.is_none(); let desired_event_idx: usize = match desired_event_index.try_into() { @@ -106,13 +103,16 @@ where .into_iter() .find(|(idx, _)| *idx == desired_event_idx) { - if evens_are_equal(event) { + if evens_are_equal(&event) { // proxy the desired vote status of whether the ix succeeded return vote; } + + warn!(?event, "event was found, but contents were not equal"); return Vote::NotFound; } } + warn!("not found"); Vote::NotFound } diff --git a/ampd/src/solana/msg_verifier.rs b/ampd/src/solana/msg_verifier.rs index 356bb9d8b..e3b08c6a4 100644 --- a/ampd/src/solana/msg_verifier.rs +++ b/ampd/src/solana/msg_verifier.rs @@ -75,7 +75,7 @@ mod tests { raw_signature: [42; 64], event_index, }, - destination_address: event.destination_chain.clone(), + destination_address: event.destination_contract_address.clone(), destination_chain: event.destination_chain.clone().parse().unwrap(), source_address: event.sender_key, payload_hash: event.payload_hash.into(), @@ -116,9 +116,10 @@ mod tests { } } - #[test] + #[test_log::test] fn should_verify_msg_if_correct() { let (tx, _event, msg) = fixture_success_call_contract_tx_data(); + dbg!(&tx); assert_eq!( Vote::SucceededOnChain, verify_message(&GATEWAY_PROGRAM_ID, &tx, &msg) @@ -130,7 +131,7 @@ mod tests { let (tx, _event, mut msg) = fixture_success_call_contract_tx_data(); msg.message_id.event_index = 100; assert_eq!( - Vote::FailedOnChain, + Vote::NotFound, verify_message(&GATEWAY_PROGRAM_ID, &tx, &msg) ); } @@ -140,7 +141,7 @@ mod tests { let (tx, _event, mut msg) = fixture_success_call_contract_tx_data(); msg.destination_chain = ChainName::from_str("badchain").unwrap(); assert_eq!( - Vote::FailedOnChain, + Vote::NotFound, verify_message(&GATEWAY_PROGRAM_ID, &tx, &msg) ); } @@ -150,7 +151,7 @@ mod tests { let (tx, _event, mut msg) = fixture_success_call_contract_tx_data(); msg.source_address = Pubkey::from([13; 32]); assert_eq!( - Vote::FailedOnChain, + Vote::NotFound, verify_message(&GATEWAY_PROGRAM_ID, &tx, &msg) ); } @@ -160,7 +161,7 @@ mod tests { let (tx, _event, mut msg) = fixture_success_call_contract_tx_data(); msg.destination_address = "bad_address".to_string(); assert_eq!( - Vote::FailedOnChain, + Vote::NotFound, verify_message(&GATEWAY_PROGRAM_ID, &tx, &msg) ); } @@ -170,7 +171,7 @@ mod tests { let (tx, _event, mut msg) = fixture_success_call_contract_tx_data(); msg.payload_hash = [1; 32].into(); assert_eq!( - Vote::FailedOnChain, + Vote::NotFound, verify_message(&GATEWAY_PROGRAM_ID, &tx, &msg) ); } @@ -217,10 +218,12 @@ mod tests { #[test] fn should_find_the_correct_index() { let (base64_data, event) = fixture_call_contract_log(); + let base64_data_different = "Y2FsbCBjb250cmFjdF9fXw== 6NGe5cm7PkXHz/g8V2VdRg0nU0l7R48x8lll4s0Clz0= xtlu5J3pLn7c4BhqnNSrP1wDZK/pQOJVCYbk6sroJhY= ZXRoZXJldW0= MHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBhMGRlYWUyYzVlYzU0YTFkNmU0M2VhODU2YjI3N2RkMTExNjVhYjRk 8J+QqvCfkKrwn5Cq8J+Qqg=="; + assert_ne!(base64_data_different, base64_data); let logs = vec![ format!("Program {GATEWAY_PROGRAM_ID} invoke [1]"), "Program log: Instruction: Call Contract".to_owned(), - format!("Program data: {}", base64_data), + format!("Program data: {}", base64_data_different), format!("Program {GATEWAY_PROGRAM_ID} failed"), // Invocation 1 fails format!("Program {GATEWAY_PROGRAM_ID} invoke [1]"), "Program log: Instruction: Call Contract".to_owned(), @@ -228,7 +231,7 @@ mod tests { format!("Program {GATEWAY_PROGRAM_ID} success"), // Invocation 1 succeeds format!("Program {GATEWAY_PROGRAM_ID} invoke [1]"), "Program log: Instruction: Call Contract".to_owned(), - format!("Program data: {}", base64_data), + format!("Program data: {}", base64_data_different), format!("Program {GATEWAY_PROGRAM_ID} failed"), // Invocation 1 fails ]; @@ -236,7 +239,7 @@ mod tests { let tx = tx_meta(logs); assert_eq!( - Vote::FailedOnChain, + Vote::SucceededOnChain, verify_message(&GATEWAY_PROGRAM_ID, &tx, &msg) ); } diff --git a/ampd/src/solana/verifier_set_verifier.rs b/ampd/src/solana/verifier_set_verifier.rs index 8cd2f1cae..5ac704eaf 100644 --- a/ampd/src/solana/verifier_set_verifier.rs +++ b/ampd/src/solana/verifier_set_verifier.rs @@ -12,14 +12,13 @@ use solana_sdk::pubkey::Pubkey; use solana_transaction_status::UiTransactionStatusMeta; use crate::handlers::solana_verify_verifier_set::VerifierSetConfirmation; +use crate::solana::verify; use solana_transaction_status::{ option_serializer::OptionSerializer, EncodedConfirmedTransactionWithStatusMeta, }; use thiserror::Error; use tracing::error; -use super::msg_verifier::verify; - pub fn verify_verifier_set( gateway_address: &Pubkey, tx: &UiTransactionStatusMeta, @@ -53,7 +52,7 @@ pub fn verify_verifier_set( return false; }; - return desired_hash == incoming_verifier_set_hash; + return &desired_hash == incoming_verifier_set_hash; }, ) } @@ -93,97 +92,284 @@ fn to_pub_key(pk: &PublicKey) -> Option ( - VerifierSetConfirmation, - axelar_rkyv_encoding::types::VerifierSet, + // tx_receipt.status = Some(0u64.into()); + // assert_eq!( + // verify_message(&gateway_address, &tx_receipt, &msg), + // Vote::FailedOnChain + // ); + // } + + // #[test] + // fn should_not_verify_msg_if_gateway_address_does_not_match() { + // let (_, tx_receipt, msg) = matching_msg_and_tx_receipt(); + + // let gateway_address = EVMAddress::random(); + // assert_eq!( + // verify_message(&gateway_address, &tx_receipt, &msg), + // Vote::NotFound + // ); + // } + + // #[test] + // fn should_not_verify_msg_if_log_index_does_not_match() { + // let (gateway_address, tx_receipt, mut msg) = matching_msg_and_tx_receipt(); + + // msg.message_id.event_index = 0; + // assert_eq!( + // verify_message(&gateway_address, &tx_receipt, &msg), + // Vote::NotFound + // ); + // msg.message_id.event_index = 2; + // assert_eq!( + // verify_message(&gateway_address, &tx_receipt, &msg), + // Vote::NotFound + // ); + // msg.message_id.event_index = 3; + // assert_eq!( + // verify_message(&gateway_address, &tx_receipt, &msg), + // Vote::NotFound + // ); + // } + + // #[test] + // fn should_not_verify_msg_if_log_index_greater_than_u32_max() { + // let (gateway_address, tx_receipt, mut msg) = matching_msg_and_tx_receipt(); + + // msg.message_id.event_index = u32::MAX as u64 + 1; + // assert_eq!( + // verify_message(&gateway_address, &tx_receipt, &msg), + // Vote::NotFound + // ); + // } + + // #[test] + // fn should_not_verify_msg_if_msg_does_not_match() { + // let (gateway_address, tx_receipt, mut msg) = matching_msg_and_tx_receipt(); + + // msg.source_address = EVMAddress::random(); + // assert_eq!( + // verify_message(&gateway_address, &tx_receipt, &msg), + // Vote::NotFound + // ); + // } + + // #[test] + // fn should_verify_msg_if_correct() { + // let (gateway_address, tx_receipt, msg) = matching_msg_and_tx_receipt(); + + // assert_eq!( + // verify_message(&gateway_address, &tx_receipt, &msg), + // Vote::SucceededOnChain + // ); + // } + + const DOMAIN_SEPARATOR: [u8; 32] = [42; 32]; + const GATEWAY_PROGRAM_ID: Pubkey = axelar_solana_gateway::ID; + + fn fixture_rotate_verifier_set() -> ( + String, + VerifierSetRotated, + multisig::verifier_set::VerifierSet, ) { - let verifier_set = build_verifier_set(KeyType::Ecdsa, &signers()); - - let sol_signers = verifier_set - .signers - .values() - .map(|v| { - let pair = ( - axelar_rkyv_encoding::types::PublicKey::from_str(v.address.as_str()).unwrap(), - 1.into(), - ); - pair - }) - .collect(); - - let sol_quorum = verifier_set.threshold.u128(); - - let sol_verifier_set = - axelar_rkyv_encoding::types::VerifierSet::new(0, sol_signers, sol_quorum.into()); - - let verifier_set_confirmation = VerifierSetConfirmation { - tx_id: String::from("90af"), - event_index: 1, - verifier_set, + let base64_data = "c2lnbmVycyByb3RhdGVkXw== AgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= rGbfImIlluyfNx5TfhnZEDS+uUBKCSDRAJ28Znulbgw="; + let verifier_set = multisig::verifier_set::VerifierSet { + signers: { + let mut map = BTreeMap::new(); + map.insert("aabbcc".to_string(), multisig::msg::Signer { + weight: 500_u128.into(), + address: cosmwasm_std::Addr::unchecked("axelar1abc"), + pub_key: multisig::key::PublicKey::Ed25519(HexBinary::from_hex("036773a9d49a2a2f04b4aa8724d0f40e197570e4bb85f6b826da2a4ec25996d018").unwrap()) + + }); + map.insert("aabbccdd".to_string(), multisig::msg::Signer { + weight: 200_u128.into(), + address: cosmwasm_std::Addr::unchecked("axelar1abcaa"), + pub_key: multisig::key::PublicKey::Ed25519(HexBinary::from_hex("038f8504c6ec6c16f2b37897d33bdb0667da32d18c7144365a47ac934abedcc0ba").unwrap()) + }); + map + }, + threshold: 700_u128.into(), + created_at: 1, + }; + let verifier_set_hash = [ + 172, 102, 223, 34, 98, 37, 150, 236, 159, 55, 30, 83, 126, 25, 217, 16, 52, 190, 185, + 64, 74, 9, 32, 209, 0, 157, 188, 102, 123, 165, 110, 12, + ]; + let newly_created_vs = to_verifier_set(&verifier_set).unwrap(); + let expected_hash = axelar_solana_encoding::types::verifier_set::verifier_set_hash::< + NativeHasher, + >(&newly_created_vs, &DOMAIN_SEPARATOR) + .unwrap(); + assert_eq!(verifier_set_hash, expected_hash); + let event = VerifierSetRotated { + epoch: 2_u64.into(), + verifier_set_hash, }; - (verifier_set_confirmation, sol_verifier_set) + (base64_data.to_string(), event, verifier_set) } - fn signers() -> Vec { - // This data is the same as ecdsa_test_data::signers() , but we are replacing the address with the - // same value of the public key. - vec![ - TestSigner { - address: Addr::unchecked("025e0231bfad810e5276e2cf9eb2f3f380ce0bdf6d84c3b6173499d3ddcc008856"), - pub_key: HexBinary::from_hex("025e0231bfad810e5276e2cf9eb2f3f380ce0bdf6d84c3b6173499d3ddcc008856") - .unwrap(), - signature: HexBinary::from_hex("d7822dd89b9df02d64b91f69cff5811dfd4de16b792d9c6054b417c733bbcc542c1e504c8a1dffac94b5828a93e33a6b45d1bf59b2f9f28ffa56b8398d68a1c5") - .unwrap(), - signed_address: HexBinary::from_hex( - "d9e1eb2b47cb8b7c1c2a5a32f6fa6c57d0e6fdd53eaa8c76fe7f0b3b390cfb3c40f258e476f2ca0e6a7ca2622ea23afe7bd1f873448e01eed86cd6446a403f36", - ) - .unwrap(), - }, - TestSigner { - address: Addr::unchecked("036ff6f4b2bc5e08aba924bd8fd986608f3685ca651a015b3d9d6a656de14769fe"), - pub_key: HexBinary::from_hex("036ff6f4b2bc5e08aba924bd8fd986608f3685ca651a015b3d9d6a656de14769fe") - .unwrap(), - signature: HexBinary::from_hex("a7ec5d1c15e84ba4b5da23fee49d77c5c81b3b1859411d1ef8193bf5a39783c76813e4cf4e1e1bfa0ea19c9f5b61d25ce978da137f3adb1730cba3d842702e72") - .unwrap(), - signed_address: HexBinary::from_hex( - "008ca739eaddd22856c30690bf9a85f16ea77784494ad01111fded80327c57c84e021608cd890341883de1ac0fcf31330243b91b22c4751542ac47115f2f4e2c", - ) - .unwrap(), - }, - TestSigner { - address: Addr::unchecked("03686cbbef9f9e9a5c852883cb2637b55fc76bee6ee6a3ff636e7bea2e41beece4"), - pub_key: HexBinary::from_hex("03686cbbef9f9e9a5c852883cb2637b55fc76bee6ee6a3ff636e7bea2e41beece4") - .unwrap(), - signature: HexBinary::from_hex("d1bc22fd89d97dfe4091c73d2002823ca9ab29b742ae531d2560bf2abafb313f7d2c3263d09d9aa72f01ed1d49046e39f6513ea61241fd59cc53d02fc4222351") - .unwrap(), - signed_address: HexBinary::from_hex( - "1df5a371c27772874b706dbbb41e0bc67f688b301d3c2d269e45c43389fa43b6328c32686f42242b0cdb05b3b955ce3106393d6e509bf0373340482182c865cc", - ) - .unwrap(), + fn fixture_success_call_contract_tx_data() -> (UiTransactionStatusMeta, VerifierSetConfirmation) + { + let (base64_data, event, actual_verifier_set) = fixture_rotate_verifier_set(); + let logs = vec![ + "Program {GATEWAY_PROGRAM_ID} invoke [1]".to_string(), + "Program log: Instruction: Rotate Signers".to_string(), + "Program 11111111111111111111111111111111 invoke [2]".to_string(), + "Program 11111111111111111111111111111111 success".to_string(), + "Program data: {base_64_data}".to_string(), + "Program {GATEWAY_PROGRAM_ID} consumed 11970 of 200000 compute units".to_string(), + "Program {GATEWAY_PROGRAM_ID} success".to_string(), + ]; + + ( + tx_meta(logs), + VerifierSetConfirmation { + message_id: Base58SolanaTxSignatureAndEventIndex { + raw_signature: [123; 64], + event_index: 4, + }, + verifier_set: actual_verifier_set, }, - ] + ) + } + + fn tx_meta(logs: Vec) -> UiTransactionStatusMeta { + UiTransactionStatusMeta { + err: None, + status: Ok(()), + fee: 0, + pre_balances: vec![0], + post_balances: vec![0], + inner_instructions: OptionSerializer::None, + log_messages: OptionSerializer::Some(logs), + pre_token_balances: OptionSerializer::None, + post_token_balances: OptionSerializer::None, + rewards: OptionSerializer::None, + loaded_addresses: OptionSerializer::None, + return_data: OptionSerializer::None, + compute_units_consumed: OptionSerializer::None, + } } } diff --git a/ampd/src/tests/config_template.toml b/ampd/src/tests/config_template.toml index 9e2101375..aad53b6b5 100644 --- a/ampd/src/tests/config_template.toml +++ b/ampd/src/tests/config_template.toml @@ -85,7 +85,6 @@ rpc_url = 'http://127.0.0.1/' [[handlers]] type = 'SolanaMsgVerifier' cosmwasm_contract = 'axelar1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqecnww6' -max_tx_cache_entries = 6 rpc_url = 'http://127.0.0.1/' [handlers.rpc_timeout] From 3fb6a223b98ff96413233005478c6eb6220cd5e9 Mon Sep 17 00:00:00 2001 From: Roberts Pumpurs Date: Fri, 29 Nov 2024 22:30:30 +0200 Subject: [PATCH 093/109] test: verifier set verification tests (basic) --- ampd/src/solana/msg_verifier.rs | 9 + ampd/src/solana/verifier_set_verifier.rs | 283 ++++++++--------------- 2 files changed, 106 insertions(+), 186 deletions(-) diff --git a/ampd/src/solana/msg_verifier.rs b/ampd/src/solana/msg_verifier.rs index e3b08c6a4..4e779625e 100644 --- a/ampd/src/solana/msg_verifier.rs +++ b/ampd/src/solana/msg_verifier.rs @@ -176,6 +176,15 @@ mod tests { ); } + #[test] + fn should_not_verify_msg_gateway_does_not_match() { + let (tx, _event, mut msg) = fixture_success_call_contract_tx_data(); + assert_eq!( + Vote::NotFound, + verify_message(&Pubkey::new_unique(), &tx, &msg) + ); + } + #[test] fn should_fail_tx_failed() { let (base64_data, event) = fixture_call_contract_log(); diff --git a/ampd/src/solana/verifier_set_verifier.rs b/ampd/src/solana/verifier_set_verifier.rs index 5ac704eaf..1ac63b12e 100644 --- a/ampd/src/solana/verifier_set_verifier.rs +++ b/ampd/src/solana/verifier_set_verifier.rs @@ -37,6 +37,7 @@ pub fn verify_verifier_set( epoch: _, }) = gateway_event else { + error!("found gateway event but it's not VerifierSetRotated event"); return false; }; @@ -107,182 +108,87 @@ mod tests { use super::verify_verifier_set; - // #[test] - // fn should_not_verify_verifier_set_if_tx_id_does_not_match() { - // let (gateway_address, tx_receipt, mut verifier_set) = - // matching_verifier_set_and_tx_receipt(); - - // verifier_set.message_id.tx_hash = Hash::random().into(); - // assert_eq!( - // verify_verifier_set(&gateway_address, &tx_receipt, &verifier_set), - // Vote::NotFound - // ); - // } - - // #[test] - // fn should_not_verify_verifier_set_if_tx_failed() { - // let (gateway_address, mut tx_receipt, verifier_set) = - // matching_verifier_set_and_tx_receipt(); - - // tx_receipt.status = Some(0u64.into()); - // assert_eq!( - // verify_verifier_set(&gateway_address, &tx_receipt, &verifier_set), - // Vote::FailedOnChain - // ); - // } - - // #[test] - // fn should_not_verify_verifier_set_if_gateway_address_does_not_match() { - // let (_, tx_receipt, verifier_set) = matching_verifier_set_and_tx_receipt(); - - // let gateway_address = EVMAddress::random(); - // assert_eq!( - // verify_verifier_set(&gateway_address, &tx_receipt, &verifier_set), - // Vote::NotFound - // ); - // } - - // #[test] - // fn should_not_verify_verifier_set_if_log_index_does_not_match() { - // let (gateway_address, tx_receipt, mut verifier_set) = - // matching_verifier_set_and_tx_receipt(); - - // verifier_set.message_id.event_index = 0; - // assert_eq!( - // verify_verifier_set(&gateway_address, &tx_receipt, &verifier_set), - // Vote::NotFound - // ); - // verifier_set.message_id.event_index = 2; - // assert_eq!( - // verify_verifier_set(&gateway_address, &tx_receipt, &verifier_set), - // Vote::NotFound - // ); - // verifier_set.message_id.event_index = 3; - // assert_eq!( - // verify_verifier_set(&gateway_address, &tx_receipt, &verifier_set), - // Vote::NotFound - // ); - // } - - // #[test] - // fn should_not_verify_verifier_set_if_log_index_greater_than_u32_max() { - // let (gateway_address, tx_receipt, mut verifier_set) = - // matching_verifier_set_and_tx_receipt(); - - // verifier_set.message_id.event_index = u32::MAX as u64 + 1; - // assert_eq!( - // verify_verifier_set(&gateway_address, &tx_receipt, &verifier_set), - // Vote::NotFound - // ); - // } - - // #[test] - // fn should_not_verify_verifier_set_if_verifier_set_does_not_match() { - // let (gateway_address, tx_receipt, mut verifier_set) = - // matching_verifier_set_and_tx_receipt(); - - // verifier_set.verifier_set.threshold = Uint128::from(50u64); - // assert_eq!( - // verify_verifier_set(&gateway_address, &tx_receipt, &verifier_set), - // Vote::NotFound - // ); - // } - - // #[test] - // fn should_verify_verifier_set_if_correct() { - // let (gateway_address, tx_receipt, verifier_set) = matching_verifier_set_and_tx_receipt(); - - // assert_eq!( - // verify_verifier_set(&gateway_address, &tx_receipt, &verifier_set), - // Vote::SucceededOnChain - // ); - // } - - // #[test] - // fn should_not_verify_msg_if_tx_id_does_not_match() { - // let (gateway_address, tx_receipt, mut msg) = matching_msg_and_tx_receipt(); - - // msg.message_id.tx_hash = Hash::random().into(); - // assert_eq!( - // verify_message(&gateway_address, &tx_receipt, &msg), - // Vote::NotFound - // ); - // } - - // #[test] - // fn should_not_verify_msg_if_tx_failed() { - // let (gateway_address, mut tx_receipt, msg) = matching_msg_and_tx_receipt(); - - // tx_receipt.status = Some(0u64.into()); - // assert_eq!( - // verify_message(&gateway_address, &tx_receipt, &msg), - // Vote::FailedOnChain - // ); - // } - - // #[test] - // fn should_not_verify_msg_if_gateway_address_does_not_match() { - // let (_, tx_receipt, msg) = matching_msg_and_tx_receipt(); - - // let gateway_address = EVMAddress::random(); - // assert_eq!( - // verify_message(&gateway_address, &tx_receipt, &msg), - // Vote::NotFound - // ); - // } - - // #[test] - // fn should_not_verify_msg_if_log_index_does_not_match() { - // let (gateway_address, tx_receipt, mut msg) = matching_msg_and_tx_receipt(); - - // msg.message_id.event_index = 0; - // assert_eq!( - // verify_message(&gateway_address, &tx_receipt, &msg), - // Vote::NotFound - // ); - // msg.message_id.event_index = 2; - // assert_eq!( - // verify_message(&gateway_address, &tx_receipt, &msg), - // Vote::NotFound - // ); - // msg.message_id.event_index = 3; - // assert_eq!( - // verify_message(&gateway_address, &tx_receipt, &msg), - // Vote::NotFound - // ); - // } - - // #[test] - // fn should_not_verify_msg_if_log_index_greater_than_u32_max() { - // let (gateway_address, tx_receipt, mut msg) = matching_msg_and_tx_receipt(); - - // msg.message_id.event_index = u32::MAX as u64 + 1; - // assert_eq!( - // verify_message(&gateway_address, &tx_receipt, &msg), - // Vote::NotFound - // ); - // } - - // #[test] - // fn should_not_verify_msg_if_msg_does_not_match() { - // let (gateway_address, tx_receipt, mut msg) = matching_msg_and_tx_receipt(); - - // msg.source_address = EVMAddress::random(); - // assert_eq!( - // verify_message(&gateway_address, &tx_receipt, &msg), - // Vote::NotFound - // ); - // } - - // #[test] - // fn should_verify_msg_if_correct() { - // let (gateway_address, tx_receipt, msg) = matching_msg_and_tx_receipt(); - - // assert_eq!( - // verify_message(&gateway_address, &tx_receipt, &msg), - // Vote::SucceededOnChain - // ); - // } + #[test] + #[ignore = "verification of the signature is the responsibility of the handler"] + fn should_not_verify_verifier_set_if_tx_id_does_not_match() { + let (tx, mut event) = fixture_success_call_contract_tx_data(); + + event.message_id.raw_signature = [0; 64]; + assert_eq!( + verify_verifier_set(&GATEWAY_PROGRAM_ID, &tx, &event, &DOMAIN_SEPARATOR), + Vote::NotFound + ); + } + + #[test] + fn should_not_verify_verifier_set_if_tx_failed() { + let (mut tx, event) = fixture_success_call_contract_tx_data(); + + tx.err = Some(solana_sdk::transaction::TransactionError::AccountInUse); + assert_eq!( + verify_verifier_set(&GATEWAY_PROGRAM_ID, &tx, &event, &DOMAIN_SEPARATOR), + Vote::FailedOnChain + ); + } + + #[test] + fn should_not_verify_verifier_set_if_gateway_address_does_not_match() { + let (tx, event) = fixture_success_call_contract_tx_data(); + + let gateway_address = Pubkey::new_unique(); + assert_eq!( + verify_verifier_set(&gateway_address, &tx, &event, &DOMAIN_SEPARATOR), + Vote::NotFound + ); + } + + #[test] + fn should_not_verify_verifier_set_if_log_index_does_not_match() { + let (tx, mut event) = fixture_success_call_contract_tx_data(); + + event.message_id.event_index -= 1; + assert_eq!( + verify_verifier_set(&GATEWAY_PROGRAM_ID, &tx, &event, &DOMAIN_SEPARATOR), + Vote::NotFound + ); + event.message_id.event_index += 2; + assert_eq!( + verify_verifier_set(&GATEWAY_PROGRAM_ID, &tx, &event, &DOMAIN_SEPARATOR), + Vote::NotFound + ); + } + + #[test] + fn should_not_verify_verifier_set_if_log_index_greater_than_u32_max() { + let (tx, mut event) = fixture_success_call_contract_tx_data(); + + event.message_id.event_index = u32::MAX as u64 + 1; + assert_eq!( + verify_verifier_set(&GATEWAY_PROGRAM_ID, &tx, &event, &DOMAIN_SEPARATOR), + Vote::NotFound + ); + } + + #[test] + fn should_not_verify_verifier_set_if_verifier_set_does_not_match() { + let (tx, mut event) = fixture_success_call_contract_tx_data(); + + event.verifier_set.threshold = Uint128::from(50u64); + assert_eq!( + verify_verifier_set(&GATEWAY_PROGRAM_ID, &tx, &event, &DOMAIN_SEPARATOR), + Vote::NotFound + ); + } + + #[test_log::test] + fn should_verify_verifier_set_if_correct() { + let (tx, event) = fixture_success_call_contract_tx_data(); + + assert_eq!( + verify_verifier_set(&GATEWAY_PROGRAM_ID, &tx, &event, &DOMAIN_SEPARATOR), + Vote::SucceededOnChain + ); + } const DOMAIN_SEPARATOR: [u8; 32] = [42; 32]; const GATEWAY_PROGRAM_ID: Pubkey = axelar_solana_gateway::ID; @@ -296,16 +202,21 @@ mod tests { let verifier_set = multisig::verifier_set::VerifierSet { signers: { let mut map = BTreeMap::new(); - map.insert("aabbcc".to_string(), multisig::msg::Signer { + map.insert( + "aabbcc".to_string(), + multisig::msg::Signer { weight: 500_u128.into(), address: cosmwasm_std::Addr::unchecked("axelar1abc"), - pub_key: multisig::key::PublicKey::Ed25519(HexBinary::from_hex("036773a9d49a2a2f04b4aa8724d0f40e197570e4bb85f6b826da2a4ec25996d018").unwrap()) - - }); + pub_key: multisig::key::PublicKey::Ecdsa(HexBinary::from_hex( + "036773a9d49a2a2f04b4aa8724d0f40e197570e4bb85f6b826da2a4ec25996d018", + ) + .unwrap()), + }, + ); map.insert("aabbccdd".to_string(), multisig::msg::Signer { weight: 200_u128.into(), address: cosmwasm_std::Addr::unchecked("axelar1abcaa"), - pub_key: multisig::key::PublicKey::Ed25519(HexBinary::from_hex("038f8504c6ec6c16f2b37897d33bdb0667da32d18c7144365a47ac934abedcc0ba").unwrap()) + pub_key: multisig::key::PublicKey::Ecdsa(HexBinary::from_hex("038f8504c6ec6c16f2b37897d33bdb0667da32d18c7144365a47ac934abedcc0ba").unwrap()) }); map }, @@ -332,15 +243,15 @@ mod tests { fn fixture_success_call_contract_tx_data() -> (UiTransactionStatusMeta, VerifierSetConfirmation) { - let (base64_data, event, actual_verifier_set) = fixture_rotate_verifier_set(); + let (base64_data, _event, actual_verifier_set) = fixture_rotate_verifier_set(); let logs = vec![ - "Program {GATEWAY_PROGRAM_ID} invoke [1]".to_string(), + format!("Program {GATEWAY_PROGRAM_ID} invoke [1]"), "Program log: Instruction: Rotate Signers".to_string(), "Program 11111111111111111111111111111111 invoke [2]".to_string(), "Program 11111111111111111111111111111111 success".to_string(), - "Program data: {base_64_data}".to_string(), - "Program {GATEWAY_PROGRAM_ID} consumed 11970 of 200000 compute units".to_string(), - "Program {GATEWAY_PROGRAM_ID} success".to_string(), + format!("Program data: {base64_data}"), + format!("Program {GATEWAY_PROGRAM_ID} consumed 11970 of 200000 compute units"), + format!("Program {GATEWAY_PROGRAM_ID} success"), ]; ( From ddfeb1edfe01fe68de2d5df5fbda090743724039 Mon Sep 17 00:00:00 2001 From: Roberts Pumpurs Date: Sat, 30 Nov 2024 11:20:48 +0200 Subject: [PATCH 094/109] feat: abstract the solana rpc behind a trait --- ampd/src/handlers/solana_verify_msg.rs | 440 +++++++++--------- .../handlers/solana_verify_verifier_set.rs | 376 ++++++++------- ampd/src/solana/mod.rs | 27 +- 3 files changed, 423 insertions(+), 420 deletions(-) diff --git a/ampd/src/handlers/solana_verify_msg.rs b/ampd/src/handlers/solana_verify_msg.rs index 577196a8d..d7d35059c 100644 --- a/ampd/src/handlers/solana_verify_msg.rs +++ b/ampd/src/handlers/solana_verify_msg.rs @@ -26,8 +26,8 @@ use voting_verifier::msg::ExecuteMsg; use crate::event_processor::EventHandler; use crate::handlers::errors::Error; use crate::handlers::errors::Error::DeserializeEvent; -use crate::solana::fetch_message; use crate::solana::msg_verifier::verify_message; +use crate::solana::SolanaRpcClientProxy; use crate::types::{Hash, TMAddress}; type Result = error_stack::Result; @@ -53,18 +53,18 @@ struct PollStartedEvent { participants: Vec, } -pub struct Handler { +pub struct Handler { verifier: TMAddress, voting_verifier_contract: TMAddress, - rpc_client: RpcClient, + rpc_client: C, latest_block_height: Receiver, } -impl Handler { +impl Handler { pub fn new( verifier: TMAddress, voting_verifier_contract: TMAddress, - rpc_client: RpcClient, + rpc_client: C, latest_block_height: Receiver, ) -> Self { Self { @@ -90,12 +90,12 @@ impl Handler { msg: &Message, ) -> Option<(solana_sdk::signature::Signature, UiTransactionStatusMeta)> { let signature = solana_sdk::signature::Signature::from(msg.message_id.raw_signature); - fetch_message(&self.rpc_client, signature).await + self.rpc_client.get_tx(&signature).await.map(|tx| (signature, tx)) } } #[async_trait] -impl EventHandler for Handler { +impl EventHandler for Handler { type Err = Error; async fn handle(&self, event: &events::Event) -> Result> { @@ -178,25 +178,20 @@ impl EventHandler for Handler { #[cfg(test)] mod test { - use std::num::NonZeroUsize; - - use base64::{engine::general_purpose::STANDARD, Engine}; - use events::Event; - use solana_client::rpc_request::RpcRequest; - use tendermint::abci; + use solana_client::rpc_sender::RpcSender; use tokio::sync::watch; use voting_verifier::events::{PollMetadata, PollStarted, TxEventConfirmation}; use crate::{ - solana::test_utils::rpc_client_with_recorder, - types::{EVMAddress, Hash}, + types::{EVMAddress, TMAddress}, PREFIX, }; - use tokio::test as async_test; use super::*; - #[async_test] + struct MockSolanaSender; + + #[tokio::test] async fn must_correctly_broadcast_message_validation() { // Setup the context let voting_verifier = TMAddress::random(PREFIX); @@ -204,7 +199,9 @@ mod test { let expiration = 100u64; let (_, rx) = watch::channel(expiration - 1); + // todo -- what to do ? best optoin -- update solana gateway test fixtures to use solana_test_validator under the hood, then we can spin it & the gateway up in an instant // Prepare the message verifier + let rpc_client = solana_client::nonblocking::rpc_client::RpcClient::new_sender(mock_sender, ) let (rpc_client, rpc_recorder) = rpc_client_with_recorder(); let event: Event = get_event( @@ -216,12 +213,7 @@ mod test { &voting_verifier, ); - let handler = super::Handler::new( - worker, - voting_verifier, - RpcCacheWrapper::new(rpc_client, NonZeroUsize::new(10).unwrap()), - rx, - ); + let handler = super::Handler::new(worker, voting_verifier, rpc_client, rx); let votes = handler.handle(&event).await.unwrap(); assert!(!votes.is_empty()); @@ -231,205 +223,205 @@ mod test { ); } - #[async_test] - async fn must_skip_duplicated_tx() { - // Setup the context - let voting_verifier = TMAddress::random(PREFIX); - let worker = TMAddress::random(PREFIX); - let expiration = 100u64; - let (_, rx) = watch::channel(expiration - 1); - - // Prepare the message verifier - let (rpc_client, rpc_recorder) = rpc_client_with_recorder(); - - let event: Event = get_event( - get_poll_started_event_with_duplicates(participants(5, Some(worker.clone())), 100), - &voting_verifier, - ); - - let handler = super::Handler::new( - worker, - voting_verifier, - RpcCacheWrapper::new(rpc_client, NonZeroUsize::new(10).unwrap()), - rx, - ); - - let handle_result = handler.handle(&event).await.unwrap(); - assert!(!handle_result.is_empty()); - assert_eq!( - Some(&1), - rpc_recorder.read().await.get(&RpcRequest::GetTransaction) - ); - } - - #[async_test] - async fn ignores_poll_event_if_voting_verifier_address_not_match_event_address() { - // Setup the context - let voting_verifier = TMAddress::random(PREFIX); - let worker = TMAddress::random(PREFIX); - let expiration = 100u64; - let (_, rx) = watch::channel(expiration - 1); - - // Prepare the message verifier - let (rpc_client, rpc_recorder) = rpc_client_with_recorder(); - - let event: Event = get_event( - get_poll_started_event( - participants(5, Some(worker.clone())), - 100, - "solana".parse().unwrap(), - ), - &TMAddress::random(PREFIX), // A different, unexpected address comes from the event. - ); - - let handler = super::Handler::new( - worker, - voting_verifier, - RpcCacheWrapper::new(rpc_client, NonZeroUsize::new(10).unwrap()), - rx, - ); - - let handler_result = handler.handle(&event).await.unwrap(); - assert!(handler_result.is_empty()); - assert_eq!( - None, - rpc_recorder.read().await.get(&RpcRequest::GetTransaction) - ); - } - - #[async_test] - async fn ignores_poll_event_if_worker_not_part_of_participants() { - // Setup the context - let voting_verifier = TMAddress::random(PREFIX); - let worker = TMAddress::random(PREFIX); - let expiration = 100u64; - let (_, rx) = watch::channel(expiration - 1); - - // Prepare the message verifier - let (rpc_client, rpc_recorder) = rpc_client_with_recorder(); - - let event: Event = get_event( - get_poll_started_event(participants(5, None), 100, "solana".parse().unwrap()), // This worker is not in participant set. So will skip the event. - &voting_verifier, - ); - - let handler = super::Handler::new( - worker, - voting_verifier, - RpcCacheWrapper::new(rpc_client, NonZeroUsize::new(10).unwrap()), - rx, - ); - - let handler_result = handler.handle(&event).await.unwrap(); - assert!(handler_result.is_empty()); - assert_eq!( - None, - rpc_recorder.read().await.get(&RpcRequest::GetTransaction) - ); - } - - #[async_test] - async fn ignores_expired_poll_event() { - // Setup the context - let voting_verifier = TMAddress::random(PREFIX); - let worker = TMAddress::random(PREFIX); - let expiration = 100u64; - let (_, rx) = watch::channel(expiration); // expired ! - - // Prepare the message verifier - let (rpc_client, rpc_recorder) = rpc_client_with_recorder(); - - let event: Event = get_event( - get_poll_started_event( - participants(5, Some(worker.clone())), - 100, - "solana".parse().unwrap(), - ), - &voting_verifier, - ); - - let handler = super::Handler::new( - worker, - voting_verifier, - RpcCacheWrapper::new(rpc_client, NonZeroUsize::new(10).unwrap()), - rx, - ); - - let handler_result = handler.handle(&event).await.unwrap(); - assert!(handler_result.is_empty()); - assert_eq!( - None, - rpc_recorder.read().await.get(&RpcRequest::GetTransaction) - ); - } - - fn get_event(event: impl Into, contract_address: &TMAddress) -> Event { - let mut event: cosmwasm_std::Event = event.into(); - - event.ty = format!("wasm-{}", event.ty); - event = event.add_attribute("_contract_address", contract_address.to_string()); - - abci::Event::new( - event.ty, - event - .attributes - .into_iter() - .map(|cosmwasm_std::Attribute { key, value }| { - (STANDARD.encode(key), STANDARD.encode(value)) - }), - ) - .try_into() - .unwrap() - } - - fn get_poll_started_event( - participants: Vec, - expires_at: u64, - source_chain: ChainName, - ) -> PollStarted { - let signature_1 = "3GLo4z4siudHxW1BMHBbkTKy7kfbssNFaxLR5hTjhEXCUzp2Pi2VVwybc1s96pEKjRre7CcKKeLhni79zWTNUseP"; - let event_idx_1 = 10_u32; - let message_id_1 = format!("{signature_1}-{event_idx_1}"); - - let signature_2 = "41SgBTfsWbkdixDdVNESM6YmDAzEcKEubGPkaXmtTVUd2EhMaqPEy3qh5ReTtTb4Le4F16SSBFjQCxkekamNrFNT"; - let event_idx_2 = 88_u32; - let message_id_2 = format!("{signature_2}-{event_idx_2}"); - - PollStarted::Messages { - metadata: PollMetadata { - poll_id: "100".parse().unwrap(), - source_chain, - source_gateway_address: "sol".to_string().parse().unwrap(), - confirmation_height: 15, - expires_at, - participants: participants - .into_iter() - .map(|addr| cosmwasm_std::Addr::unchecked(addr.to_string())) - .collect(), - }, - #[allow(deprecated)] - messages: vec![ - TxEventConfirmation { - tx_id: signature_1.parse().unwrap(), - event_index: event_idx_1, - source_address: "sol".to_string().parse().unwrap(), - message_id: message_id_1.parse().unwrap(), - destination_chain: "ethereum".parse().unwrap(), - destination_address: format!("0x{:x}", EVMAddress::random()).parse().unwrap(), - payload_hash: Hash::random().to_fixed_bytes(), - }, - TxEventConfirmation { - tx_id: signature_2.parse().unwrap(), - event_index: event_idx_2, - source_address: "sol".to_string().parse().unwrap(), - message_id: message_id_2.parse().unwrap(), - destination_chain: "ethereum".parse().unwrap(), - destination_address: format!("0x{:x}", EVMAddress::random()).parse().unwrap(), - payload_hash: Hash::random().to_fixed_bytes(), - }, - ], - } - } + // #[async_test] + // async fn must_skip_duplicated_tx() { + // // Setup the context + // let voting_verifier = TMAddress::random(PREFIX); + // let worker = TMAddress::random(PREFIX); + // let expiration = 100u64; + // let (_, rx) = watch::channel(expiration - 1); + + // // Prepare the message verifier + // let (rpc_client, rpc_recorder) = rpc_client_with_recorder(); + + // let event: Event = get_event( + // get_poll_started_event_with_duplicates(participants(5, Some(worker.clone())), 100), + // &voting_verifier, + // ); + + // let handler = super::Handler::new( + // worker, + // voting_verifier, + // RpcCacheWrapper::new(rpc_client, NonZeroUsize::new(10).unwrap()), + // rx, + // ); + + // let handle_result = handler.handle(&event).await.unwrap(); + // assert!(!handle_result.is_empty()); + // assert_eq!( + // Some(&1), + // rpc_recorder.read().await.get(&RpcRequest::GetTransaction) + // ); + // } + + // #[async_test] + // async fn ignores_poll_event_if_voting_verifier_address_not_match_event_address() { + // // Setup the context + // let voting_verifier = TMAddress::random(PREFIX); + // let worker = TMAddress::random(PREFIX); + // let expiration = 100u64; + // let (_, rx) = watch::channel(expiration - 1); + + // // Prepare the message verifier + // let (rpc_client, rpc_recorder) = rpc_client_with_recorder(); + + // let event: Event = get_event( + // get_poll_started_event( + // participants(5, Some(worker.clone())), + // 100, + // "solana".parse().unwrap(), + // ), + // &TMAddress::random(PREFIX), // A different, unexpected address comes from the event. + // ); + + // let handler = super::Handler::new( + // worker, + // voting_verifier, + // RpcCacheWrapper::new(rpc_client, NonZeroUsize::new(10).unwrap()), + // rx, + // ); + + // let handler_result = handler.handle(&event).await.unwrap(); + // assert!(handler_result.is_empty()); + // assert_eq!( + // None, + // rpc_recorder.read().await.get(&RpcRequest::GetTransaction) + // ); + // } + + // #[async_test] + // async fn ignores_poll_event_if_worker_not_part_of_participants() { + // // Setup the context + // let voting_verifier = TMAddress::random(PREFIX); + // let worker = TMAddress::random(PREFIX); + // let expiration = 100u64; + // let (_, rx) = watch::channel(expiration - 1); + + // // Prepare the message verifier + // let (rpc_client, rpc_recorder) = rpc_client_with_recorder(); + + // let event: Event = get_event( + // get_poll_started_event(participants(5, None), 100, "solana".parse().unwrap()), // This worker is not in participant set. So will skip the event. + // &voting_verifier, + // ); + + // let handler = super::Handler::new( + // worker, + // voting_verifier, + // RpcCacheWrapper::new(rpc_client, NonZeroUsize::new(10).unwrap()), + // rx, + // ); + + // let handler_result = handler.handle(&event).await.unwrap(); + // assert!(handler_result.is_empty()); + // assert_eq!( + // None, + // rpc_recorder.read().await.get(&RpcRequest::GetTransaction) + // ); + // } + + // #[async_test] + // async fn ignores_expired_poll_event() { + // // Setup the context + // let voting_verifier = TMAddress::random(PREFIX); + // let worker = TMAddress::random(PREFIX); + // let expiration = 100u64; + // let (_, rx) = watch::channel(expiration); // expired ! + + // // Prepare the message verifier + // let (rpc_client, rpc_recorder) = rpc_client_with_recorder(); + + // let event: Event = get_event( + // get_poll_started_event( + // participants(5, Some(worker.clone())), + // 100, + // "solana".parse().unwrap(), + // ), + // &voting_verifier, + // ); + + // let handler = super::Handler::new( + // worker, + // voting_verifier, + // RpcCacheWrapper::new(rpc_client, NonZeroUsize::new(10).unwrap()), + // rx, + // ); + + // let handler_result = handler.handle(&event).await.unwrap(); + // assert!(handler_result.is_empty()); + // assert_eq!( + // None, + // rpc_recorder.read().await.get(&RpcRequest::GetTransaction) + // ); + // } + + // fn get_event(event: impl Into, contract_address: &TMAddress) -> Event { + // let mut event: cosmwasm_std::Event = event.into(); + + // event.ty = format!("wasm-{}", event.ty); + // event = event.add_attribute("_contract_address", contract_address.to_string()); + + // abci::Event::new( + // event.ty, + // event + // .attributes + // .into_iter() + // .map(|cosmwasm_std::Attribute { key, value }| { + // (STANDARD.encode(key), STANDARD.encode(value)) + // }), + // ) + // .try_into() + // .unwrap() + // } + + // fn get_poll_started_event( + // participants: Vec, + // expires_at: u64, + // source_chain: ChainName, + // ) -> PollStarted { + // let signature_1 = "3GLo4z4siudHxW1BMHBbkTKy7kfbssNFaxLR5hTjhEXCUzp2Pi2VVwybc1s96pEKjRre7CcKKeLhni79zWTNUseP"; + // let event_idx_1 = 10_u32; + // let message_id_1 = format!("{signature_1}-{event_idx_1}"); + + // let signature_2 = "41SgBTfsWbkdixDdVNESM6YmDAzEcKEubGPkaXmtTVUd2EhMaqPEy3qh5ReTtTb4Le4F16SSBFjQCxkekamNrFNT"; + // let event_idx_2 = 88_u32; + // let message_id_2 = format!("{signature_2}-{event_idx_2}"); + + // PollStarted::Messages { + // metadata: PollMetadata { + // poll_id: "100".parse().unwrap(), + // source_chain, + // source_gateway_address: "sol".to_string().parse().unwrap(), + // confirmation_height: 15, + // expires_at, + // participants: participants + // .into_iter() + // .map(|addr| cosmwasm_std::Addr::unchecked(addr.to_string())) + // .collect(), + // }, + // #[allow(deprecated)] + // messages: vec![ + // TxEventConfirmation { + // tx_id: signature_1.parse().unwrap(), + // event_index: event_idx_1, + // source_address: "sol".to_string().parse().unwrap(), + // message_id: message_id_1.parse().unwrap(), + // destination_chain: "ethereum".parse().unwrap(), + // destination_address: format!("0x{:x}", EVMAddress::random()).parse().unwrap(), + // payload_hash: Hash::random().to_fixed_bytes(), + // }, + // TxEventConfirmation { + // tx_id: signature_2.parse().unwrap(), + // event_index: event_idx_2, + // source_address: "sol".to_string().parse().unwrap(), + // message_id: message_id_2.parse().unwrap(), + // destination_chain: "ethereum".parse().unwrap(), + // destination_address: format!("0x{:x}", EVMAddress::random()).parse().unwrap(), + // payload_hash: Hash::random().to_fixed_bytes(), + // }, + // ], + // } + // } fn get_poll_started_event_with_duplicates( participants: Vec, @@ -459,7 +451,7 @@ mod test { message_id: message_id_1.parse().unwrap(), destination_chain: "ethereum".parse().unwrap(), destination_address: format!("0x{:x}", EVMAddress::random()).parse().unwrap(), - payload_hash: Hash::random().to_fixed_bytes(), + payload_hash: [42; 32], }, TxEventConfirmation { tx_id: signature_1.parse().unwrap(), @@ -468,7 +460,7 @@ mod test { message_id: message_id_1.parse().unwrap(), destination_chain: "ethereum".parse().unwrap(), destination_address: format!("0x{:x}", EVMAddress::random()).parse().unwrap(), - payload_hash: Hash::random().to_fixed_bytes(), + payload_hash: [42; 32], }, ], } diff --git a/ampd/src/handlers/solana_verify_verifier_set.rs b/ampd/src/handlers/solana_verify_verifier_set.rs index 22e9f5e42..a3ba8ce37 100644 --- a/ampd/src/handlers/solana_verify_verifier_set.rs +++ b/ampd/src/handlers/solana_verify_verifier_set.rs @@ -22,8 +22,8 @@ use voting_verifier::msg::ExecuteMsg; use crate::event_processor::EventHandler; use crate::handlers::errors::Error; -use crate::solana::fetch_message; use crate::solana::verifier_set_verifier::verify_verifier_set; +use crate::solana::SolanaRpcClientProxy; use crate::types::TMAddress; type Result = error_stack::Result; @@ -46,30 +46,25 @@ struct PollStartedEvent { participants: Vec, } -pub struct Handler { +pub struct Handler { verifier: TMAddress, voting_verifier_contract: TMAddress, - rpc_client: RpcClient, + rpc_client: C, solana_gateway_domain_separator: [u8; 32], latest_block_height: Receiver, } -impl Handler { +impl Handler { pub async fn new( verifier: TMAddress, voting_verifier_contract: TMAddress, - rpc_client: RpcClient, + rpc_client: C, latest_block_height: Receiver, ) -> Self { - let (gateway_root_pda, ..) = axelar_solana_gateway::get_gateway_root_config_pda(); - let config = rpc_client - .get_account(&gateway_root_pda) + let domain_separator = rpc_client + .get_domain_separator() .await - .expect("gateway account could not be fetched") - .data; - let config = borsh::from_slice::(&config) - .expect("gateway config data must be borsh encoded"); - let domain_separator = config.domain_separator; + .expect("cannot start handler without fetching domain separator for Solana"); Self { verifier, @@ -98,12 +93,15 @@ impl Handler { msg: &VerifierSetConfirmation, ) -> Option<(solana_sdk::signature::Signature, UiTransactionStatusMeta)> { let signature = solana_sdk::signature::Signature::from(msg.message_id.raw_signature); - fetch_message(&self.rpc_client, signature).await + self.rpc_client + .get_tx(&signature) + .await + .map(|tx| (signature, tx)) } } #[async_trait] -impl EventHandler for Handler { +impl EventHandler for Handler { type Err = Error; async fn handle(&self, event: &events::Event) -> Result> { @@ -172,178 +170,178 @@ impl EventHandler for Handler { mod tests { use std::str::FromStr; - use axelar_wasm_std::nonempty; - use multisig::{ - key::KeyType, - test::common::{build_verifier_set, ecdsa_test_data}, - }; - use solana_client::rpc_request::RpcRequest; - use tokio::sync::watch; - use voting_verifier::events::{PollMetadata, PollStarted, VerifierSetConfirmation}; - - use crate::{ - handlers::tests::into_structured_event, solana::test_utils::rpc_client_with_recorder, - PREFIX, - }; - - use tokio::test as async_test; - - use super::*; - - #[async_test] - async fn must_abort_if_voting_verifier_is_same_as_contract_address() { - let worker = TMAddress::random(PREFIX); - let voting_verifier = TMAddress::random(PREFIX); - - let (rpc_client, rpc_recorder) = rpc_client_with_recorder(); - - let expiration = 100u64; - let (_, rx) = watch::channel(expiration - 1); - - let handler = Handler::new(worker.clone(), voting_verifier.clone(), rpc_client, rx); - - let event = into_structured_event( - verifier_set_poll_started_event(participants(2, Some(worker.clone())), expiration), - &TMAddress::random(PREFIX), - ); - - let handler_result = handler.handle(&event).await.unwrap(); - - assert!(handler_result.is_empty()); - assert_eq!( - None, - rpc_recorder.read().await.get(&RpcRequest::GetTransaction) - ); - assert_eq!( - None, - rpc_recorder.read().await.get(&RpcRequest::GetAccountInfo) - ); - } - - #[async_test] - async fn must_abort_chain_does_not_match() { - let worker = TMAddress::random(PREFIX); - let voting_verifier = TMAddress::random(PREFIX); - - let (rpc_client, rpc_recorder) = rpc_client_with_recorder(); - - let expiration = 100u64; - let (_, rx) = watch::channel(expiration - 1); - - let handler = Handler::new(worker.clone(), voting_verifier.clone(), rpc_client, rx); - - let event = into_structured_event( - verifier_set_poll_started_event(participants(2, Some(worker.clone())), expiration), - &voting_verifier, - ); - - let handle_results = handler.handle(&event).await.unwrap(); - assert!(handle_results.is_empty()); - assert_eq!( - None, - rpc_recorder.read().await.get(&RpcRequest::GetTransaction) - ); - assert_eq!( - None, - rpc_recorder.read().await.get(&RpcRequest::GetAccountInfo) - ); - } - - #[async_test] - async fn must_abort_if_worker_is_not_participant() { - let worker = TMAddress::random(PREFIX); - let voting_verifier = TMAddress::random(PREFIX); - - let (rpc_client, rpc_recorder) = rpc_client_with_recorder(); - - let expiration = 100u64; - let (_, rx) = watch::channel(expiration - 1); - - let handler = Handler::new(worker.clone(), voting_verifier.clone(), rpc_client, rx); - - let event = into_structured_event( - verifier_set_poll_started_event(participants(2, None), expiration), // worker is not here. - &voting_verifier, - ); - - let handle_results = handler.handle(&event).await.unwrap(); - assert!(handle_results.is_empty()); - assert_eq!( - None, - rpc_recorder.read().await.get(&RpcRequest::GetTransaction) - ); - assert_eq!( - None, - rpc_recorder.read().await.get(&RpcRequest::GetAccountInfo) - ); - } - - #[async_test] - async fn must_abort_on_expired_poll() { - let worker = TMAddress::random(PREFIX); - let voting_verifier = TMAddress::random(PREFIX); - - let (rpc_client, rpc_recorder) = rpc_client_with_recorder(); - - let expiration = 100u64; - let (_, rx) = watch::channel(expiration); - - let handler = Handler::new(worker.clone(), voting_verifier.clone(), rpc_client, rx); - - let event = into_structured_event( - verifier_set_poll_started_event(participants(2, Some(worker.clone())), expiration), - &voting_verifier, - ); - - let handle_results = handler.handle(&event).await.unwrap(); - assert!(handle_results.is_empty()); - assert_eq!( - None, - rpc_recorder.read().await.get(&RpcRequest::GetTransaction) - ); - assert_eq!( - None, - rpc_recorder.read().await.get(&RpcRequest::GetAccountInfo) - ); - } - - fn verifier_set_poll_started_event( - participants: Vec, - expires_at: u64, - ) -> PollStarted { - let signature_1 = "3GLo4z4siudHxW1BMHBbkTKy7kfbssNFaxLR5hTjhEXCUzp2Pi2VVwybc1s96pEKjRre7CcKKeLhni79zWTNUseP"; - let event_idx_1 = 10_u32; - let message_id_1 = format!("{signature_1}-{event_idx_1}"); - - #[allow(deprecated)] - PollStarted::VerifierSet { - verifier_set: VerifierSetConfirmation { - tx_id: signature_1.parse().unwrap(), - event_index: event_idx_1, - message_id: message_id_1.parse().unwrap(), - verifier_set: build_verifier_set(KeyType::Ecdsa, &ecdsa_test_data::signers()), - }, - metadata: PollMetadata { - poll_id: "100".parse().unwrap(), - source_chain: "solana".parse().unwrap(), - source_gateway_address: nonempty::String::from_str( - "03f57d1a813febaccbe6429603f9ec57969511b76cd680452dba91fa01f54e756a", - ) - .unwrap(), - confirmation_height: 1, - expires_at, - participants: participants - .into_iter() - .map(|addr| cosmwasm_std::Addr::unchecked(addr.to_string())) - .collect(), - }, - } - } - - fn participants(n: u8, worker: Option) -> Vec { - (0..n) - .map(|_| TMAddress::random(PREFIX)) - .chain(worker) - .collect() - } + // use axelar_wasm_std::nonempty; + // use multisig::{ + // key::KeyType, + // test::common::{build_verifier_set, ecdsa_test_data}, + // }; + // use solana_client::rpc_request::RpcRequest; + // use tokio::sync::watch; + // use voting_verifier::events::{PollMetadata, PollStarted, VerifierSetConfirmation}; + + // use crate::{ + // handlers::tests::into_structured_event, solana::test_utils::rpc_client_with_recorder, + // PREFIX, + // }; + + // use tokio::test as async_test; + + // use super::*; + + // #[async_test] + // async fn must_abort_if_voting_verifier_is_same_as_contract_address() { + // let worker = TMAddress::random(PREFIX); + // let voting_verifier = TMAddress::random(PREFIX); + + // let (rpc_client, rpc_recorder) = rpc_client_with_recorder(); + + // let expiration = 100u64; + // let (_, rx) = watch::channel(expiration - 1); + + // let handler = Handler::new(worker.clone(), voting_verifier.clone(), rpc_client, rx); + + // let event = into_structured_event( + // verifier_set_poll_started_event(participants(2, Some(worker.clone())), expiration), + // &TMAddress::random(PREFIX), + // ); + + // let handler_result = handler.handle(&event).await.unwrap(); + + // assert!(handler_result.is_empty()); + // assert_eq!( + // None, + // rpc_recorder.read().await.get(&RpcRequest::GetTransaction) + // ); + // assert_eq!( + // None, + // rpc_recorder.read().await.get(&RpcRequest::GetAccountInfo) + // ); + // } + + // #[async_test] + // async fn must_abort_chain_does_not_match() { + // let worker = TMAddress::random(PREFIX); + // let voting_verifier = TMAddress::random(PREFIX); + + // let (rpc_client, rpc_recorder) = rpc_client_with_recorder(); + + // let expiration = 100u64; + // let (_, rx) = watch::channel(expiration - 1); + + // let handler = Handler::new(worker.clone(), voting_verifier.clone(), rpc_client, rx); + + // let event = into_structured_event( + // verifier_set_poll_started_event(participants(2, Some(worker.clone())), expiration), + // &voting_verifier, + // ); + + // let handle_results = handler.handle(&event).await.unwrap(); + // assert!(handle_results.is_empty()); + // assert_eq!( + // None, + // rpc_recorder.read().await.get(&RpcRequest::GetTransaction) + // ); + // assert_eq!( + // None, + // rpc_recorder.read().await.get(&RpcRequest::GetAccountInfo) + // ); + // } + + // #[async_test] + // async fn must_abort_if_worker_is_not_participant() { + // let worker = TMAddress::random(PREFIX); + // let voting_verifier = TMAddress::random(PREFIX); + + // let (rpc_client, rpc_recorder) = rpc_client_with_recorder(); + + // let expiration = 100u64; + // let (_, rx) = watch::channel(expiration - 1); + + // let handler = Handler::new(worker.clone(), voting_verifier.clone(), rpc_client, rx); + + // let event = into_structured_event( + // verifier_set_poll_started_event(participants(2, None), expiration), // worker is not here. + // &voting_verifier, + // ); + + // let handle_results = handler.handle(&event).await.unwrap(); + // assert!(handle_results.is_empty()); + // assert_eq!( + // None, + // rpc_recorder.read().await.get(&RpcRequest::GetTransaction) + // ); + // assert_eq!( + // None, + // rpc_recorder.read().await.get(&RpcRequest::GetAccountInfo) + // ); + // } + + // #[async_test] + // async fn must_abort_on_expired_poll() { + // let worker = TMAddress::random(PREFIX); + // let voting_verifier = TMAddress::random(PREFIX); + + // let (rpc_client, rpc_recorder) = rpc_client_with_recorder(); + + // let expiration = 100u64; + // let (_, rx) = watch::channel(expiration); + + // let handler = Handler::new(worker.clone(), voting_verifier.clone(), rpc_client, rx); + + // let event = into_structured_event( + // verifier_set_poll_started_event(participants(2, Some(worker.clone())), expiration), + // &voting_verifier, + // ); + + // let handle_results = handler.handle(&event).await.unwrap(); + // assert!(handle_results.is_empty()); + // assert_eq!( + // None, + // rpc_recorder.read().await.get(&RpcRequest::GetTransaction) + // ); + // assert_eq!( + // None, + // rpc_recorder.read().await.get(&RpcRequest::GetAccountInfo) + // ); + // } + + // fn verifier_set_poll_started_event( + // participants: Vec, + // expires_at: u64, + // ) -> PollStarted { + // let signature_1 = "3GLo4z4siudHxW1BMHBbkTKy7kfbssNFaxLR5hTjhEXCUzp2Pi2VVwybc1s96pEKjRre7CcKKeLhni79zWTNUseP"; + // let event_idx_1 = 10_u32; + // let message_id_1 = format!("{signature_1}-{event_idx_1}"); + + // #[allow(deprecated)] + // PollStarted::VerifierSet { + // verifier_set: VerifierSetConfirmation { + // tx_id: signature_1.parse().unwrap(), + // event_index: event_idx_1, + // message_id: message_id_1.parse().unwrap(), + // verifier_set: build_verifier_set(KeyType::Ecdsa, &ecdsa_test_data::signers()), + // }, + // metadata: PollMetadata { + // poll_id: "100".parse().unwrap(), + // source_chain: "solana".parse().unwrap(), + // source_gateway_address: nonempty::String::from_str( + // "03f57d1a813febaccbe6429603f9ec57969511b76cd680452dba91fa01f54e756a", + // ) + // .unwrap(), + // confirmation_height: 1, + // expires_at, + // participants: participants + // .into_iter() + // .map(|addr| cosmwasm_std::Addr::unchecked(addr.to_string())) + // .collect(), + // }, + // } + // } + + // fn participants(n: u8, worker: Option) -> Vec { + // (0..n) + // .map(|_| TMAddress::random(PREFIX)) + // .chain(worker) + // .collect() + // } } diff --git a/ampd/src/solana/mod.rs b/ampd/src/solana/mod.rs index d4878f3e7..4ce22281d 100644 --- a/ampd/src/solana/mod.rs +++ b/ampd/src/solana/mod.rs @@ -17,12 +17,16 @@ use solana_sdk::{pubkey::Pubkey, signature::Signature}; pub mod msg_verifier; pub mod verifier_set_verifier; -pub async fn fetch_message( - rpc_client: &RpcClient, - signature: Signature, -) -> Option<(Signature, UiTransactionStatusMeta)> { - rpc_client - .get_transaction( +#[async_trait::async_trait] +pub trait SolanaRpcClientProxy: Send + Sync + 'static { + async fn get_tx(&self, signature: &Signature) -> Option; + async fn get_domain_separator(&self) -> Option<[u8; 32]>; +} + +#[async_trait::async_trait] +impl SolanaRpcClientProxy for RpcClient { + async fn get_tx(&self, signature: &Signature) -> Option { + self.get_transaction( &signature, solana_transaction_status::UiTransactionEncoding::Base58, ) @@ -31,9 +35,18 @@ pub async fn fetch_message( .map(|tx_data| tx_data.transaction.meta) .ok() .flatten() - .map(|tx_data| (signature, tx_data)) }) .await + } + + async fn get_domain_separator(&self) -> Option<[u8; 32]> { + let (gateway_root_pda, ..) = axelar_solana_gateway::get_gateway_root_config_pda(); + let config = self.get_account(&gateway_root_pda).await.ok()?.data; + let config = + borsh::from_slice::(&config).ok()?; + let domain_separator = config.domain_separator; + Some(domain_separator) + } } pub fn deserialize_pubkey<'de, D>(deserializer: D) -> Result From 3f1b263b3d75862395b9efd5371d878b6002650c Mon Sep 17 00:00:00 2001 From: Roberts Pumpurs Date: Sat, 30 Nov 2024 12:22:54 +0200 Subject: [PATCH 095/109] test: all tests compile (dont pass yet) --- ampd/src/handlers/solana_verify_msg.rs | 393 +++++++----------- .../handlers/solana_verify_verifier_set.rs | 13 +- ampd/src/solana/mod.rs | 27 +- ampd/src/solana/msg_verifier.rs | 256 +++++++----- ampd/src/solana/verifier_set_verifier.rs | 144 ++++--- 5 files changed, 423 insertions(+), 410 deletions(-) diff --git a/ampd/src/handlers/solana_verify_msg.rs b/ampd/src/handlers/solana_verify_msg.rs index d7d35059c..5157ea8db 100644 --- a/ampd/src/handlers/solana_verify_msg.rs +++ b/ampd/src/handlers/solana_verify_msg.rs @@ -13,6 +13,7 @@ use events::Error::EventTypeMismatch; use events_derive::try_from; use futures::future::join_all; use futures::FutureExt; +use gateway_event_stack::MatchContext; use router_api::ChainName; use serde::Deserialize; use solana_client::nonblocking::rpc_client::RpcClient; @@ -47,7 +48,6 @@ pub struct Message { struct PollStartedEvent { poll_id: PollId, source_chain: ChainName, - source_gateway_address: Pubkey, expires_at: u64, messages: Vec, participants: Vec, @@ -58,6 +58,7 @@ pub struct Handler { voting_verifier_contract: TMAddress, rpc_client: C, latest_block_height: Receiver, + event_match_context: MatchContext, } impl Handler { @@ -67,10 +68,13 @@ impl Handler { rpc_client: C, latest_block_height: Receiver, ) -> Self { + let event_match_context = MatchContext::new(&axelar_solana_gateway::ID.to_string()); + Self { verifier, voting_verifier_contract, rpc_client, + event_match_context, latest_block_height, } } @@ -90,7 +94,10 @@ impl Handler { msg: &Message, ) -> Option<(solana_sdk::signature::Signature, UiTransactionStatusMeta)> { let signature = solana_sdk::signature::Signature::from(msg.message_id.raw_signature); - self.rpc_client.get_tx(&signature).await.map(|tx| (signature, tx)) + self.rpc_client + .get_tx(&signature) + .await + .map(|tx| (signature, tx)) } } @@ -106,7 +113,6 @@ impl EventHandler for Handler { let PollStartedEvent { poll_id, source_chain, - source_gateway_address, messages, expires_at, participants, @@ -154,9 +160,9 @@ impl EventHandler for Handler { .iter() .map(|msg| { finalized_tx_receipts - .get(&msg.message_id.raw_signature.into()) - .map_or(Vote::NotFound, |tx_receipt| { - verify_message(&source_gateway_address, tx_receipt, msg) + .get_key_value(&msg.message_id.raw_signature.into()) + .map_or(Vote::NotFound, |entry| { + verify_message(&self.event_match_context, entry, msg) }) }) .collect(); @@ -178,258 +184,169 @@ impl EventHandler for Handler { #[cfg(test)] mod test { + use base64::{alphabet::STANDARD, prelude::*}; + use events::Event; use solana_client::rpc_sender::RpcSender; + use solana_sdk::signature::Signature; + use solana_transaction_status::option_serializer::OptionSerializer; use tokio::sync::watch; use voting_verifier::events::{PollMetadata, PollStarted, TxEventConfirmation}; use crate::{ + handlers::tests::into_structured_event, types::{EVMAddress, TMAddress}, PREFIX, }; use super::*; - struct MockSolanaSender; + struct EmptyResponseSolanaRpc; + #[async_trait::async_trait] + impl SolanaRpcClientProxy for EmptyResponseSolanaRpc { + async fn get_tx(&self, _signature: &Signature) -> Option { + None + } + + async fn get_domain_separator(&self) -> Option<[u8; 32]> { + unimplemented!() + } + } + + struct ValidResponseSolanaRpc; + #[async_trait::async_trait] + impl SolanaRpcClientProxy for ValidResponseSolanaRpc { + async fn get_tx(&self, _signature: &Signature) -> Option { + Some(UiTransactionStatusMeta { + err: None, + status: Ok(()), + fee: 0, + pre_balances: vec![], + post_balances: vec![], + inner_instructions: OptionSerializer::None, + log_messages: OptionSerializer::None, + pre_token_balances: OptionSerializer::None, + post_token_balances: OptionSerializer::None, + rewards: OptionSerializer::None, + loaded_addresses: OptionSerializer::None, + return_data: OptionSerializer::None, + compute_units_consumed: OptionSerializer::None, + }) + } + + async fn get_domain_separator(&self) -> Option<[u8; 32]> { + unimplemented!() + } + } + // Should not handle event if it is not a poll started event #[tokio::test] - async fn must_correctly_broadcast_message_validation() { - // Setup the context + async fn not_poll_started_event() { + let event = into_structured_event( + cosmwasm_std::Event::new("transfer"), + &TMAddress::random(PREFIX), + ); + + let handler = super::Handler::new( + TMAddress::random(PREFIX), + TMAddress::random(PREFIX), + EmptyResponseSolanaRpc, + watch::channel(0).1, + ); + + assert!(handler.handle(&event).await.is_ok()); + } + + // Should not handle event if it is not emitted from voting verifier + #[tokio::test] + async fn contract_is_not_voting_verifier() { + let event = into_structured_event( + poll_started_event(participants(5, None), 100), + &TMAddress::random(PREFIX), + ); + + let handler = super::Handler::new( + TMAddress::random(PREFIX), + TMAddress::random(PREFIX), + EmptyResponseSolanaRpc, + watch::channel(0).1, + ); + + assert!(handler.handle(&event).await.is_ok()); + } + + // Should not handle event if worker is not a poll participant + #[tokio::test] + async fn verifier_is_not_a_participant() { + let voting_verifier = TMAddress::random(PREFIX); + let event = into_structured_event( + poll_started_event(participants(5, None), 100), + &voting_verifier, + ); + + let handler = super::Handler::new( + TMAddress::random(PREFIX), + voting_verifier, + EmptyResponseSolanaRpc, + watch::channel(0).1, + ); + + assert!(handler.handle(&event).await.is_ok()); + } + + #[tokio::test] + async fn should_vote_correctly() { let voting_verifier = TMAddress::random(PREFIX); let worker = TMAddress::random(PREFIX); - let expiration = 100u64; - let (_, rx) = watch::channel(expiration - 1); - - // todo -- what to do ? best optoin -- update solana gateway test fixtures to use solana_test_validator under the hood, then we can spin it & the gateway up in an instant - // Prepare the message verifier - let rpc_client = solana_client::nonblocking::rpc_client::RpcClient::new_sender(mock_sender, ) - let (rpc_client, rpc_recorder) = rpc_client_with_recorder(); - - let event: Event = get_event( - get_poll_started_event( - participants(5, Some(worker.clone())), - 100, - "solana".parse().unwrap(), - ), + let event = into_structured_event( + poll_started_event(participants(5, Some(worker.clone())), 100), &voting_verifier, ); - let handler = super::Handler::new(worker, voting_verifier, rpc_client, rx); + let handler = super::Handler::new( + worker, + voting_verifier, + ValidResponseSolanaRpc, + watch::channel(0).1, + ); + + let actual = handler.handle(&event).await.unwrap(); + assert_eq!(actual.len(), 1); + assert!(MsgExecuteContract::from_any(actual.first().unwrap()).is_ok()); + } - let votes = handler.handle(&event).await.unwrap(); - assert!(!votes.is_empty()); - assert_eq!( - Some(&2), - rpc_recorder.read().await.get(&RpcRequest::GetTransaction) + #[tokio::test] + async fn should_skip_expired_poll() { + let voting_verifier = TMAddress::random(PREFIX); + let worker = TMAddress::random(PREFIX); + let expiration = 100u64; + let event = into_structured_event( + poll_started_event(participants(5, Some(worker.clone())), expiration), + &voting_verifier, ); + + let (tx, rx) = watch::channel(expiration - 1); + + let handler = super::Handler::new(worker, voting_verifier, ValidResponseSolanaRpc, rx); + + // poll is not expired yet, should hit proxy + let actual = handler.handle(&event).await.unwrap(); + assert_eq!(actual.len(), 1); + + let _ = tx.send(expiration + 1); + + // poll is expired + assert_eq!(handler.handle(&event).await.unwrap(), vec![]); } - // #[async_test] - // async fn must_skip_duplicated_tx() { - // // Setup the context - // let voting_verifier = TMAddress::random(PREFIX); - // let worker = TMAddress::random(PREFIX); - // let expiration = 100u64; - // let (_, rx) = watch::channel(expiration - 1); - - // // Prepare the message verifier - // let (rpc_client, rpc_recorder) = rpc_client_with_recorder(); - - // let event: Event = get_event( - // get_poll_started_event_with_duplicates(participants(5, Some(worker.clone())), 100), - // &voting_verifier, - // ); - - // let handler = super::Handler::new( - // worker, - // voting_verifier, - // RpcCacheWrapper::new(rpc_client, NonZeroUsize::new(10).unwrap()), - // rx, - // ); - - // let handle_result = handler.handle(&event).await.unwrap(); - // assert!(!handle_result.is_empty()); - // assert_eq!( - // Some(&1), - // rpc_recorder.read().await.get(&RpcRequest::GetTransaction) - // ); - // } - - // #[async_test] - // async fn ignores_poll_event_if_voting_verifier_address_not_match_event_address() { - // // Setup the context - // let voting_verifier = TMAddress::random(PREFIX); - // let worker = TMAddress::random(PREFIX); - // let expiration = 100u64; - // let (_, rx) = watch::channel(expiration - 1); - - // // Prepare the message verifier - // let (rpc_client, rpc_recorder) = rpc_client_with_recorder(); - - // let event: Event = get_event( - // get_poll_started_event( - // participants(5, Some(worker.clone())), - // 100, - // "solana".parse().unwrap(), - // ), - // &TMAddress::random(PREFIX), // A different, unexpected address comes from the event. - // ); - - // let handler = super::Handler::new( - // worker, - // voting_verifier, - // RpcCacheWrapper::new(rpc_client, NonZeroUsize::new(10).unwrap()), - // rx, - // ); - - // let handler_result = handler.handle(&event).await.unwrap(); - // assert!(handler_result.is_empty()); - // assert_eq!( - // None, - // rpc_recorder.read().await.get(&RpcRequest::GetTransaction) - // ); - // } - - // #[async_test] - // async fn ignores_poll_event_if_worker_not_part_of_participants() { - // // Setup the context - // let voting_verifier = TMAddress::random(PREFIX); - // let worker = TMAddress::random(PREFIX); - // let expiration = 100u64; - // let (_, rx) = watch::channel(expiration - 1); - - // // Prepare the message verifier - // let (rpc_client, rpc_recorder) = rpc_client_with_recorder(); - - // let event: Event = get_event( - // get_poll_started_event(participants(5, None), 100, "solana".parse().unwrap()), // This worker is not in participant set. So will skip the event. - // &voting_verifier, - // ); - - // let handler = super::Handler::new( - // worker, - // voting_verifier, - // RpcCacheWrapper::new(rpc_client, NonZeroUsize::new(10).unwrap()), - // rx, - // ); - - // let handler_result = handler.handle(&event).await.unwrap(); - // assert!(handler_result.is_empty()); - // assert_eq!( - // None, - // rpc_recorder.read().await.get(&RpcRequest::GetTransaction) - // ); - // } - - // #[async_test] - // async fn ignores_expired_poll_event() { - // // Setup the context - // let voting_verifier = TMAddress::random(PREFIX); - // let worker = TMAddress::random(PREFIX); - // let expiration = 100u64; - // let (_, rx) = watch::channel(expiration); // expired ! - - // // Prepare the message verifier - // let (rpc_client, rpc_recorder) = rpc_client_with_recorder(); - - // let event: Event = get_event( - // get_poll_started_event( - // participants(5, Some(worker.clone())), - // 100, - // "solana".parse().unwrap(), - // ), - // &voting_verifier, - // ); - - // let handler = super::Handler::new( - // worker, - // voting_verifier, - // RpcCacheWrapper::new(rpc_client, NonZeroUsize::new(10).unwrap()), - // rx, - // ); - - // let handler_result = handler.handle(&event).await.unwrap(); - // assert!(handler_result.is_empty()); - // assert_eq!( - // None, - // rpc_recorder.read().await.get(&RpcRequest::GetTransaction) - // ); - // } - - // fn get_event(event: impl Into, contract_address: &TMAddress) -> Event { - // let mut event: cosmwasm_std::Event = event.into(); - - // event.ty = format!("wasm-{}", event.ty); - // event = event.add_attribute("_contract_address", contract_address.to_string()); - - // abci::Event::new( - // event.ty, - // event - // .attributes - // .into_iter() - // .map(|cosmwasm_std::Attribute { key, value }| { - // (STANDARD.encode(key), STANDARD.encode(value)) - // }), - // ) - // .try_into() - // .unwrap() - // } - - // fn get_poll_started_event( - // participants: Vec, - // expires_at: u64, - // source_chain: ChainName, - // ) -> PollStarted { - // let signature_1 = "3GLo4z4siudHxW1BMHBbkTKy7kfbssNFaxLR5hTjhEXCUzp2Pi2VVwybc1s96pEKjRre7CcKKeLhni79zWTNUseP"; - // let event_idx_1 = 10_u32; - // let message_id_1 = format!("{signature_1}-{event_idx_1}"); - - // let signature_2 = "41SgBTfsWbkdixDdVNESM6YmDAzEcKEubGPkaXmtTVUd2EhMaqPEy3qh5ReTtTb4Le4F16SSBFjQCxkekamNrFNT"; - // let event_idx_2 = 88_u32; - // let message_id_2 = format!("{signature_2}-{event_idx_2}"); - - // PollStarted::Messages { - // metadata: PollMetadata { - // poll_id: "100".parse().unwrap(), - // source_chain, - // source_gateway_address: "sol".to_string().parse().unwrap(), - // confirmation_height: 15, - // expires_at, - // participants: participants - // .into_iter() - // .map(|addr| cosmwasm_std::Addr::unchecked(addr.to_string())) - // .collect(), - // }, - // #[allow(deprecated)] - // messages: vec![ - // TxEventConfirmation { - // tx_id: signature_1.parse().unwrap(), - // event_index: event_idx_1, - // source_address: "sol".to_string().parse().unwrap(), - // message_id: message_id_1.parse().unwrap(), - // destination_chain: "ethereum".parse().unwrap(), - // destination_address: format!("0x{:x}", EVMAddress::random()).parse().unwrap(), - // payload_hash: Hash::random().to_fixed_bytes(), - // }, - // TxEventConfirmation { - // tx_id: signature_2.parse().unwrap(), - // event_index: event_idx_2, - // source_address: "sol".to_string().parse().unwrap(), - // message_id: message_id_2.parse().unwrap(), - // destination_chain: "ethereum".parse().unwrap(), - // destination_address: format!("0x{:x}", EVMAddress::random()).parse().unwrap(), - // payload_hash: Hash::random().to_fixed_bytes(), - // }, - // ], - // } - // } - - fn get_poll_started_event_with_duplicates( - participants: Vec, - expires_at: u64, - ) -> PollStarted { + fn poll_started_event(participants: Vec, expires_at: u64) -> PollStarted { let signature_1 = "3GLo4z4siudHxW1BMHBbkTKy7kfbssNFaxLR5hTjhEXCUzp2Pi2VVwybc1s96pEKjRre7CcKKeLhni79zWTNUseP"; let event_idx_1 = 10_u32; let message_id_1 = format!("{signature_1}-{event_idx_1}"); + + let signature_2 = "41SgBTfsWbkdixDdVNESM6YmDAzEcKEubGPkaXmtTVUd2EhMaqPEy3qh5ReTtTb4Le4F16SSBFjQCxkekamNrFNT"; + let event_idx_2 = 88_u32; + let message_id_2 = format!("{signature_2}-{event_idx_2}"); + PollStarted::Messages { metadata: PollMetadata { poll_id: "100".parse().unwrap(), @@ -451,16 +368,16 @@ mod test { message_id: message_id_1.parse().unwrap(), destination_chain: "ethereum".parse().unwrap(), destination_address: format!("0x{:x}", EVMAddress::random()).parse().unwrap(), - payload_hash: [42; 32], + payload_hash: Hash::random().to_fixed_bytes(), }, TxEventConfirmation { - tx_id: signature_1.parse().unwrap(), - event_index: event_idx_1, + tx_id: signature_2.parse().unwrap(), + event_index: event_idx_2, source_address: "sol".to_string().parse().unwrap(), - message_id: message_id_1.parse().unwrap(), + message_id: message_id_2.parse().unwrap(), destination_chain: "ethereum".parse().unwrap(), destination_address: format!("0x{:x}", EVMAddress::random()).parse().unwrap(), - payload_hash: [42; 32], + payload_hash: Hash::random().to_fixed_bytes(), }, ], } diff --git a/ampd/src/handlers/solana_verify_verifier_set.rs b/ampd/src/handlers/solana_verify_verifier_set.rs index a3ba8ce37..4c3a5df30 100644 --- a/ampd/src/handlers/solana_verify_verifier_set.rs +++ b/ampd/src/handlers/solana_verify_verifier_set.rs @@ -9,6 +9,7 @@ use cosmrs::Any; use error_stack::ResultExt; use events::Error::EventTypeMismatch; use events_derive::try_from; +use gateway_event_stack::MatchContext; use multisig::verifier_set::VerifierSet; use router_api::ChainName; use serde::Deserialize; @@ -40,8 +41,6 @@ struct PollStartedEvent { verifier_set: VerifierSetConfirmation, poll_id: PollId, source_chain: ChainName, - #[serde(deserialize_with = "crate::solana::deserialize_pubkey")] - source_gateway_address: Pubkey, expires_at: u64, participants: Vec, } @@ -52,6 +51,7 @@ pub struct Handler { rpc_client: C, solana_gateway_domain_separator: [u8; 32], latest_block_height: Receiver, + event_match_context: MatchContext, } impl Handler { @@ -65,10 +65,12 @@ impl Handler { .get_domain_separator() .await .expect("cannot start handler without fetching domain separator for Solana"); + let event_match_context = MatchContext::new(&axelar_solana_gateway::ID.to_string()); Self { verifier, solana_gateway_domain_separator: domain_separator, + event_match_context, voting_verifier_contract, rpc_client, latest_block_height, @@ -112,7 +114,6 @@ impl EventHandler for Handler { let PollStartedEvent { poll_id, source_chain, - source_gateway_address, expires_at, participants, verifier_set, @@ -143,10 +144,10 @@ impl EventHandler for Handler { .in_scope(|| { info!("ready to verify a new verifier set in poll"); - let vote = tx_receipt.map_or(Vote::NotFound, |(_, tx_receipt)| { + let vote = tx_receipt.map_or(Vote::NotFound, |(signature, tx_receipt)| { verify_verifier_set( - &source_gateway_address, - &tx_receipt, + &self.event_match_context, + (&signature, &tx_receipt), &verifier_set, &self.solana_gateway_domain_separator, ) diff --git a/ampd/src/solana/mod.rs b/ampd/src/solana/mod.rs index 4ce22281d..d5ad28e23 100644 --- a/ampd/src/solana/mod.rs +++ b/ampd/src/solana/mod.rs @@ -1,4 +1,5 @@ use axelar_solana_gateway::processor::GatewayEvent; +use axelar_wasm_std::msg_id::{Base58SolanaTxSignatureAndEventIndex, Base58TxDigestAndEventIndex}; use axelar_wasm_std::voting::Vote; use gateway_event_stack::MatchContext; use solana_transaction_status::{ @@ -58,16 +59,16 @@ where } pub fn verify( - source_gateway_address: &Pubkey, - tx: &UiTransactionStatusMeta, - desired_event_index: impl TryInto, + match_context: &MatchContext, + tx: (&Signature, &UiTransactionStatusMeta), + message_id: &Base58SolanaTxSignatureAndEventIndex, evens_are_equal: F, ) -> Vote where F: Fn(&GatewayEvent) -> bool, { - let tx_was_successful = tx.err.is_none(); - let desired_event_idx: usize = match desired_event_index.try_into() { + // the event idx cannot be larger than usize + let desired_event_idx: usize = match message_id.event_index.try_into() { Ok(idx) => idx, Err(_) => { error!("Invalid event index in message ID"); @@ -75,8 +76,14 @@ where } }; - let context = MatchContext::new(&source_gateway_address.to_string()); + // message id signatures must match + let (signature, tx) = tx; + if signature.as_ref() != message_id.raw_signature { + error!("signatures don't match"); + return Vote::NotFound; + } + // logs must be attached to the TX let logs = match tx.log_messages.as_ref() { OptionSerializer::Some(logs) => logs, _ => { @@ -85,21 +92,21 @@ where } }; + // pare the events let event_stack = gateway_event_stack::build_program_event_stack( - &context, + &match_context, logs, gateway_event_stack::parse_gateway_logs, ); - use gateway_event_stack::ProgramInvocationState::*; - for invocation_state in event_stack { + use gateway_event_stack::ProgramInvocationState::*; let (vote, gateway_events) = match invocation_state { Succeeded(events) => ( { // if tx was successful and ix invocation was successful, // then the final outcome (if event can be found) will be of `Vote::SucceededOnChain` - if tx_was_successful { + if tx.err.is_none() { Vote::SucceededOnChain } else { // if tx was NOT successful then we don't care if the ix invocatoin succeeded, diff --git a/ampd/src/solana/msg_verifier.rs b/ampd/src/solana/msg_verifier.rs index 4e779625e..3b39772af 100644 --- a/ampd/src/solana/msg_verifier.rs +++ b/ampd/src/solana/msg_verifier.rs @@ -2,6 +2,7 @@ use axelar_solana_gateway::processor::GatewayEvent; use axelar_wasm_std::voting::Vote; use gateway_event_stack::MatchContext; use solana_sdk::pubkey::Pubkey; +use solana_sdk::signature::Signature; use solana_transaction_status::{ option_serializer::OptionSerializer, EncodedConfirmedTransactionWithStatusMeta, }; @@ -15,173 +16,124 @@ use crate::handlers::solana_verify_msg::Message; use super::verify; pub fn verify_message( - source_gateway_address: &Pubkey, - tx: &UiTransactionStatusMeta, + match_context: &MatchContext, + tx: (&Signature, &UiTransactionStatusMeta), message: &Message, ) -> Vote { - verify( - source_gateway_address, - tx, - message.message_id.event_index, - |gateway_event| { - let GatewayEvent::CallContract(event) = gateway_event else { - return false; - }; - return event.sender_key == message.source_address - && event.payload_hash == message.payload_hash.0 - && message.destination_chain == event.destination_chain - && event.destination_contract_address == message.destination_address; - }, - ) + verify(match_context, tx, &message.message_id, |gateway_event| { + let GatewayEvent::CallContract(event) = gateway_event else { + return false; + }; + return event.sender_key == message.source_address + && event.payload_hash == message.payload_hash.0 + && message.destination_chain == event.destination_chain + && event.destination_contract_address == message.destination_address; + }) } #[cfg(test)] mod tests { use axelar_solana_gateway::processor::CallContractEvent; - use base64::{engine::general_purpose, Engine}; use std::str::FromStr; use router_api::ChainName; use super::*; - - const GATEWAY_PROGRAM_ID: Pubkey = axelar_solana_gateway::ID; - - fn fixture_call_contract_log() -> (String, CallContractEvent) { - // this is a `CallContract` extract form other unittests - let base64_data = "Y2FsbCBjb250cmFjdF9fXw== 6NGe5cm7PkXHz/g8V2VdRg0nU0l7R48x8lll4s0Clz0= xtlu5J3pLn7c4BhqnNSrP1wDZK/pQOJVCYbk6sroJhY= ZXRoZXJldW0= MHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2YzIwNjAzYzdiODc2NjgyYzEyMTczYmRlZjlhMWRjYTUyOGYxNGZk 8J+QqvCfkKrwn5Cq8J+Qqg=="; - // Simple `CallContract` fixture - let event = CallContractEvent { - sender_key: Pubkey::from_str("GfpyaXoJrd9XHHRehAPCGETie3wpM8xDxscAUoC12Cxt").unwrap(), - destination_chain: "ethereum".to_owned(), - destination_contract_address: - "0x0000000000000000000000006c20603c7b876682c12173bdef9a1dca528f14fd".to_owned(), - payload: vec![ - 240, 159, 144, 170, 240, 159, 144, 170, 240, 159, 144, 170, 240, 159, 144, 170, - ], - payload_hash: [ - 198, 217, 110, 228, 157, 233, 46, 126, 220, 224, 24, 106, 156, 212, 171, 63, 92, 3, - 100, 175, 233, 64, 226, 85, 9, 134, 228, 234, 202, 232, 38, 22, - ], - }; - - (base64_data.to_string(), event) - } - - fn create_msg_counterpart(event: &CallContractEvent, event_index: u64) -> Message { - let msg = Message { - message_id: axelar_wasm_std::msg_id::Base58SolanaTxSignatureAndEventIndex { - raw_signature: [42; 64], - event_index, - }, - destination_address: event.destination_contract_address.clone(), - destination_chain: event.destination_chain.clone().parse().unwrap(), - source_address: event.sender_key, - payload_hash: event.payload_hash.into(), - }; - msg - } - - fn fixture_success_call_contract_tx_data( - ) -> (UiTransactionStatusMeta, CallContractEvent, Message) { - let (base64_data, event) = fixture_call_contract_log(); - let logs = vec![ - format!("Program {GATEWAY_PROGRAM_ID} invoke [1]"), // Invocation 1 starts - "Program log: Instruction: Call Contract".to_owned(), - format!("Program data: {}", base64_data), - format!("Program {GATEWAY_PROGRAM_ID} success"), // Invocation 1 succeeds - ]; - - let msg = create_msg_counterpart(&event, 2); - - (tx_meta(logs), event, msg) - } - - fn tx_meta(logs: Vec) -> UiTransactionStatusMeta { - UiTransactionStatusMeta { - err: None, - status: Ok(()), - fee: 0, - pre_balances: vec![0], - post_balances: vec![0], - inner_instructions: OptionSerializer::None, - log_messages: OptionSerializer::Some(logs), - pre_token_balances: OptionSerializer::None, - post_token_balances: OptionSerializer::None, - rewards: OptionSerializer::None, - loaded_addresses: OptionSerializer::None, - return_data: OptionSerializer::None, - compute_units_consumed: OptionSerializer::None, - } - } - #[test_log::test] fn should_verify_msg_if_correct() { - let (tx, _event, msg) = fixture_success_call_contract_tx_data(); + let ((signature, tx), _event, msg) = fixture_success_call_contract_tx_data(); dbg!(&tx); assert_eq!( Vote::SucceededOnChain, - verify_message(&GATEWAY_PROGRAM_ID, &tx, &msg) + verify_message( + &create_matcher(&GATEWAY_PROGRAM_ID), + (&signature, &tx), + &msg + ) ); } #[test] fn should_not_verify_msg_if_event_idx_is_invalid() { - let (tx, _event, mut msg) = fixture_success_call_contract_tx_data(); + let ((signature, tx), _event, mut msg) = fixture_success_call_contract_tx_data(); msg.message_id.event_index = 100; assert_eq!( Vote::NotFound, - verify_message(&GATEWAY_PROGRAM_ID, &tx, &msg) + verify_message( + &create_matcher(&GATEWAY_PROGRAM_ID), + (&signature, &tx), + &msg + ) ); } #[test] fn should_not_verify_msg_if_destination_chain_does_not_match() { - let (tx, _event, mut msg) = fixture_success_call_contract_tx_data(); + let ((signature, tx), _event, mut msg) = fixture_success_call_contract_tx_data(); msg.destination_chain = ChainName::from_str("badchain").unwrap(); assert_eq!( Vote::NotFound, - verify_message(&GATEWAY_PROGRAM_ID, &tx, &msg) + verify_message( + &create_matcher(&GATEWAY_PROGRAM_ID), + (&signature, &tx), + &msg + ) ); } #[test] fn should_not_verify_msg_if_source_address_does_not_match() { - let (tx, _event, mut msg) = fixture_success_call_contract_tx_data(); + let ((signature, tx), _event, mut msg) = fixture_success_call_contract_tx_data(); msg.source_address = Pubkey::from([13; 32]); assert_eq!( Vote::NotFound, - verify_message(&GATEWAY_PROGRAM_ID, &tx, &msg) + verify_message( + &create_matcher(&GATEWAY_PROGRAM_ID), + (&signature, &tx), + &msg + ) ); } #[test] fn should_not_verify_msg_if_destination_address_does_not_match() { - let (tx, _event, mut msg) = fixture_success_call_contract_tx_data(); + let ((signature, tx), _event, mut msg) = fixture_success_call_contract_tx_data(); msg.destination_address = "bad_address".to_string(); assert_eq!( Vote::NotFound, - verify_message(&GATEWAY_PROGRAM_ID, &tx, &msg) + verify_message( + &create_matcher(&GATEWAY_PROGRAM_ID), + (&signature, &tx), + &msg + ) ); } #[test] fn should_not_verify_msg_if_payload_hash_does_not_match() { - let (tx, _event, mut msg) = fixture_success_call_contract_tx_data(); + let ((signature, tx), _event, mut msg) = fixture_success_call_contract_tx_data(); msg.payload_hash = [1; 32].into(); assert_eq!( Vote::NotFound, - verify_message(&GATEWAY_PROGRAM_ID, &tx, &msg) + verify_message( + &create_matcher(&GATEWAY_PROGRAM_ID), + (&signature, &tx), + &msg + ) ); } #[test] fn should_not_verify_msg_gateway_does_not_match() { - let (tx, _event, mut msg) = fixture_success_call_contract_tx_data(); + let ((signature, tx), _event, mut msg) = fixture_success_call_contract_tx_data(); assert_eq!( Vote::NotFound, - verify_message(&Pubkey::new_unique(), &tx, &msg) + verify_message( + &create_matcher(&Pubkey::new_unique()), + (&signature, &tx), + &msg + ) ); } @@ -196,12 +148,17 @@ mod tests { ]; let msg = create_msg_counterpart(&event, 2); + let signature = msg.message_id.raw_signature.into(); let mut tx = tx_meta(logs); tx.err = Some(solana_sdk::transaction::TransactionError::AccountNotFound); assert_eq!( Vote::FailedOnChain, - verify_message(&GATEWAY_PROGRAM_ID, &tx, &msg) + verify_message( + &create_matcher(&GATEWAY_PROGRAM_ID), + (&signature, &tx), + &msg + ) ); } @@ -217,10 +174,15 @@ mod tests { let msg = create_msg_counterpart(&event, 2); let tx = tx_meta(logs); + let signature = msg.message_id.raw_signature.into(); assert_eq!( Vote::FailedOnChain, - verify_message(&GATEWAY_PROGRAM_ID, &tx, &msg) + verify_message( + &create_matcher(&GATEWAY_PROGRAM_ID), + (&signature, &tx), + &msg + ) ); } @@ -245,11 +207,95 @@ mod tests { ]; let msg = create_msg_counterpart(&event, 6); + let signature = msg.message_id.raw_signature.into(); let tx = tx_meta(logs); assert_eq!( Vote::SucceededOnChain, - verify_message(&GATEWAY_PROGRAM_ID, &tx, &msg) + verify_message( + &create_matcher(&GATEWAY_PROGRAM_ID), + (&signature, &tx), + &msg + ) ); } + + const GATEWAY_PROGRAM_ID: Pubkey = axelar_solana_gateway::ID; + const RAW_SIGNATURE: [u8; 64] = [42; 64]; + + fn fixture_call_contract_log() -> (String, CallContractEvent) { + // this is a `CallContract` extract form other unittests + let base64_data = "Y2FsbCBjb250cmFjdF9fXw== 6NGe5cm7PkXHz/g8V2VdRg0nU0l7R48x8lll4s0Clz0= xtlu5J3pLn7c4BhqnNSrP1wDZK/pQOJVCYbk6sroJhY= ZXRoZXJldW0= MHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2YzIwNjAzYzdiODc2NjgyYzEyMTczYmRlZjlhMWRjYTUyOGYxNGZk 8J+QqvCfkKrwn5Cq8J+Qqg=="; + // Simple `CallContract` fixture + let event = CallContractEvent { + sender_key: Pubkey::from_str("GfpyaXoJrd9XHHRehAPCGETie3wpM8xDxscAUoC12Cxt").unwrap(), + destination_chain: "ethereum".to_owned(), + destination_contract_address: + "0x0000000000000000000000006c20603c7b876682c12173bdef9a1dca528f14fd".to_owned(), + payload: vec![ + 240, 159, 144, 170, 240, 159, 144, 170, 240, 159, 144, 170, 240, 159, 144, 170, + ], + payload_hash: [ + 198, 217, 110, 228, 157, 233, 46, 126, 220, 224, 24, 106, 156, 212, 171, 63, 92, 3, + 100, 175, 233, 64, 226, 85, 9, 134, 228, 234, 202, 232, 38, 22, + ], + }; + + (base64_data.to_string(), event) + } + + fn create_msg_counterpart(event: &CallContractEvent, event_index: u64) -> Message { + let msg = Message { + message_id: axelar_wasm_std::msg_id::Base58SolanaTxSignatureAndEventIndex { + raw_signature: RAW_SIGNATURE, + event_index, + }, + destination_address: event.destination_contract_address.clone(), + destination_chain: event.destination_chain.clone().parse().unwrap(), + source_address: event.sender_key, + payload_hash: event.payload_hash.into(), + }; + msg + } + + fn fixture_success_call_contract_tx_data() -> ( + (Signature, UiTransactionStatusMeta), + CallContractEvent, + Message, + ) { + let (base64_data, event) = fixture_call_contract_log(); + let logs = vec![ + format!("Program {GATEWAY_PROGRAM_ID} invoke [1]"), // Invocation 1 starts + "Program log: Instruction: Call Contract".to_owned(), + format!("Program data: {}", base64_data), + format!("Program {GATEWAY_PROGRAM_ID} success"), // Invocation 1 succeeds + ]; + + let msg = create_msg_counterpart(&event, 2); + let signature = msg.message_id.raw_signature.into(); + + ((signature, tx_meta(logs)), event, msg) + } + + fn tx_meta(logs: Vec) -> UiTransactionStatusMeta { + UiTransactionStatusMeta { + err: None, + status: Ok(()), + fee: 0, + pre_balances: vec![0], + post_balances: vec![0], + inner_instructions: OptionSerializer::None, + log_messages: OptionSerializer::Some(logs), + pre_token_balances: OptionSerializer::None, + post_token_balances: OptionSerializer::None, + rewards: OptionSerializer::None, + loaded_addresses: OptionSerializer::None, + return_data: OptionSerializer::None, + compute_units_consumed: OptionSerializer::None, + } + } + + fn create_matcher(gateway_program_id: &Pubkey) -> MatchContext { + MatchContext::new(gateway_program_id.to_string().as_str()) + } } diff --git a/ampd/src/solana/verifier_set_verifier.rs b/ampd/src/solana/verifier_set_verifier.rs index 1ac63b12e..f3a12b937 100644 --- a/ampd/src/solana/verifier_set_verifier.rs +++ b/ampd/src/solana/verifier_set_verifier.rs @@ -4,11 +4,13 @@ use axelar_solana_encoding::hasher::NativeHasher; use axelar_solana_gateway::processor::GatewayEvent; use axelar_solana_gateway::processor::VerifierSetRotated; use axelar_wasm_std::voting::Vote; +use gateway_event_stack::MatchContext; use multisig::key::PublicKey; use multisig::verifier_set::VerifierSet; use sha3::Digest; use sha3::Keccak256; use solana_sdk::pubkey::Pubkey; +use solana_sdk::signature::Signature; use solana_transaction_status::UiTransactionStatusMeta; use crate::handlers::solana_verify_verifier_set::VerifierSetConfirmation; @@ -20,42 +22,36 @@ use thiserror::Error; use tracing::error; pub fn verify_verifier_set( - gateway_address: &Pubkey, - tx: &UiTransactionStatusMeta, + match_context: &MatchContext, + tx: (&Signature, &UiTransactionStatusMeta), message: &VerifierSetConfirmation, domain_separator: &[u8; 32], ) -> Vote { use axelar_solana_encoding::types::verifier_set::verifier_set_hash; - verify( - gateway_address, - tx, - message.message_id.event_index, - |gateway_event| { - let GatewayEvent::VerifierSetRotated(VerifierSetRotated { - verifier_set_hash: incoming_verifier_set_hash, - epoch: _, - }) = gateway_event - else { - error!("found gateway event but it's not VerifierSetRotated event"); - return false; - }; - - let Some(verifier_set) = to_verifier_set(&message.verifier_set) else { - error!("verifier set data structure could not be parsed"); - return false; - }; - - let Ok(desired_hash) = - verifier_set_hash::(&verifier_set, &domain_separator) - else { - error!("verifier set could not be hashed"); - return false; - }; - - return &desired_hash == incoming_verifier_set_hash; - }, - ) + verify(match_context, tx, &message.message_id, |gateway_event| { + let GatewayEvent::VerifierSetRotated(VerifierSetRotated { + verifier_set_hash: incoming_verifier_set_hash, + epoch: _, + }) = gateway_event + else { + error!("found gateway event but it's not VerifierSetRotated event"); + return false; + }; + + let Some(verifier_set) = to_verifier_set(&message.verifier_set) else { + error!("verifier set data structure could not be parsed"); + return false; + }; + + let Ok(desired_hash) = verifier_set_hash::(&verifier_set, &domain_separator) + else { + error!("verifier set could not be hashed"); + return false; + }; + + return &desired_hash == incoming_verifier_set_hash; + }) } /// Transform from Axelar VerifierSet to axelar_solana_encoding VerifierSet @@ -109,89 +105,129 @@ mod tests { use super::verify_verifier_set; #[test] - #[ignore = "verification of the signature is the responsibility of the handler"] fn should_not_verify_verifier_set_if_tx_id_does_not_match() { - let (tx, mut event) = fixture_success_call_contract_tx_data(); + let ((signature, tx), mut event) = fixture_success_call_contract_tx_data(); event.message_id.raw_signature = [0; 64]; assert_eq!( - verify_verifier_set(&GATEWAY_PROGRAM_ID, &tx, &event, &DOMAIN_SEPARATOR), + verify_verifier_set( + &create_matcher(&GATEWAY_PROGRAM_ID), + (&signature, &tx), + &event, + &DOMAIN_SEPARATOR + ), Vote::NotFound ); } #[test] fn should_not_verify_verifier_set_if_tx_failed() { - let (mut tx, event) = fixture_success_call_contract_tx_data(); + let ((signature, mut tx), event) = fixture_success_call_contract_tx_data(); tx.err = Some(solana_sdk::transaction::TransactionError::AccountInUse); assert_eq!( - verify_verifier_set(&GATEWAY_PROGRAM_ID, &tx, &event, &DOMAIN_SEPARATOR), + verify_verifier_set( + &create_matcher(&GATEWAY_PROGRAM_ID), + (&signature, &tx), + &event, + &DOMAIN_SEPARATOR + ), Vote::FailedOnChain ); } #[test] fn should_not_verify_verifier_set_if_gateway_address_does_not_match() { - let (tx, event) = fixture_success_call_contract_tx_data(); + let ((signature, tx), event) = fixture_success_call_contract_tx_data(); let gateway_address = Pubkey::new_unique(); assert_eq!( - verify_verifier_set(&gateway_address, &tx, &event, &DOMAIN_SEPARATOR), + verify_verifier_set( + &create_matcher(&gateway_address), + (&signature, &tx), + &event, + &DOMAIN_SEPARATOR + ), Vote::NotFound ); } #[test] fn should_not_verify_verifier_set_if_log_index_does_not_match() { - let (tx, mut event) = fixture_success_call_contract_tx_data(); + let ((signature, tx), mut event) = fixture_success_call_contract_tx_data(); event.message_id.event_index -= 1; assert_eq!( - verify_verifier_set(&GATEWAY_PROGRAM_ID, &tx, &event, &DOMAIN_SEPARATOR), + verify_verifier_set( + &create_matcher(&GATEWAY_PROGRAM_ID), + (&signature, &tx), + &event, + &DOMAIN_SEPARATOR + ), Vote::NotFound ); event.message_id.event_index += 2; assert_eq!( - verify_verifier_set(&GATEWAY_PROGRAM_ID, &tx, &event, &DOMAIN_SEPARATOR), + verify_verifier_set( + &create_matcher(&GATEWAY_PROGRAM_ID), + (&signature, &tx), + &event, + &DOMAIN_SEPARATOR + ), Vote::NotFound ); } #[test] fn should_not_verify_verifier_set_if_log_index_greater_than_u32_max() { - let (tx, mut event) = fixture_success_call_contract_tx_data(); + let ((signature, tx), mut event) = fixture_success_call_contract_tx_data(); event.message_id.event_index = u32::MAX as u64 + 1; assert_eq!( - verify_verifier_set(&GATEWAY_PROGRAM_ID, &tx, &event, &DOMAIN_SEPARATOR), + verify_verifier_set( + &create_matcher(&GATEWAY_PROGRAM_ID), + (&signature, &tx), + &event, + &DOMAIN_SEPARATOR + ), Vote::NotFound ); } #[test] fn should_not_verify_verifier_set_if_verifier_set_does_not_match() { - let (tx, mut event) = fixture_success_call_contract_tx_data(); + let ((signature, tx), mut event) = fixture_success_call_contract_tx_data(); event.verifier_set.threshold = Uint128::from(50u64); assert_eq!( - verify_verifier_set(&GATEWAY_PROGRAM_ID, &tx, &event, &DOMAIN_SEPARATOR), + verify_verifier_set( + &create_matcher(&GATEWAY_PROGRAM_ID), + (&signature, &tx), + &event, + &DOMAIN_SEPARATOR + ), Vote::NotFound ); } #[test_log::test] fn should_verify_verifier_set_if_correct() { - let (tx, event) = fixture_success_call_contract_tx_data(); + let ((signature, tx), event) = fixture_success_call_contract_tx_data(); assert_eq!( - verify_verifier_set(&GATEWAY_PROGRAM_ID, &tx, &event, &DOMAIN_SEPARATOR), + verify_verifier_set( + &create_matcher(&GATEWAY_PROGRAM_ID), + (&signature, &tx), + &event, + &DOMAIN_SEPARATOR + ), Vote::SucceededOnChain ); } const DOMAIN_SEPARATOR: [u8; 32] = [42; 32]; const GATEWAY_PROGRAM_ID: Pubkey = axelar_solana_gateway::ID; + const RAW_SIGNATURE: [u8; 64] = [42; 64]; fn fixture_rotate_verifier_set() -> ( String, @@ -241,8 +277,10 @@ mod tests { (base64_data.to_string(), event, verifier_set) } - fn fixture_success_call_contract_tx_data() -> (UiTransactionStatusMeta, VerifierSetConfirmation) - { + fn fixture_success_call_contract_tx_data() -> ( + (Signature, UiTransactionStatusMeta), + VerifierSetConfirmation, + ) { let (base64_data, _event, actual_verifier_set) = fixture_rotate_verifier_set(); let logs = vec![ format!("Program {GATEWAY_PROGRAM_ID} invoke [1]"), @@ -255,10 +293,10 @@ mod tests { ]; ( - tx_meta(logs), + (RAW_SIGNATURE.into(), tx_meta(logs)), VerifierSetConfirmation { message_id: Base58SolanaTxSignatureAndEventIndex { - raw_signature: [123; 64], + raw_signature: RAW_SIGNATURE, event_index: 4, }, verifier_set: actual_verifier_set, @@ -283,4 +321,8 @@ mod tests { compute_units_consumed: OptionSerializer::None, } } + + fn create_matcher(gateway_program_id: &Pubkey) -> MatchContext { + MatchContext::new(gateway_program_id.to_string().as_str()) + } } From 9ab850fe2b96998b070d0d96a55bbfdc13bf16fe Mon Sep 17 00:00:00 2001 From: Roberts Pumpurs Date: Sat, 30 Nov 2024 15:29:10 +0200 Subject: [PATCH 096/109] test: verify msg tests --- ampd/src/handlers/solana_verify_msg.rs | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/ampd/src/handlers/solana_verify_msg.rs b/ampd/src/handlers/solana_verify_msg.rs index 5157ea8db..2273ae984 100644 --- a/ampd/src/handlers/solana_verify_msg.rs +++ b/ampd/src/handlers/solana_verify_msg.rs @@ -122,7 +122,6 @@ impl EventHandler for Handler { } event => event.change_context(DeserializeEvent)?, }; - if !participants.contains(&self.verifier) { return Ok(vec![]); } @@ -351,7 +350,7 @@ mod test { metadata: PollMetadata { poll_id: "100".parse().unwrap(), source_chain: "solana".parse().unwrap(), - source_gateway_address: "sol".to_string().parse().unwrap(), + source_gateway_address: Pubkey::new_unique().to_string().parse().unwrap(), confirmation_height: 15, expires_at, participants: participants @@ -364,7 +363,7 @@ mod test { TxEventConfirmation { tx_id: signature_1.parse().unwrap(), event_index: event_idx_1, - source_address: "sol".to_string().parse().unwrap(), + source_address: Pubkey::new_unique().to_string().parse().unwrap(), message_id: message_id_1.parse().unwrap(), destination_chain: "ethereum".parse().unwrap(), destination_address: format!("0x{:x}", EVMAddress::random()).parse().unwrap(), @@ -373,7 +372,7 @@ mod test { TxEventConfirmation { tx_id: signature_2.parse().unwrap(), event_index: event_idx_2, - source_address: "sol".to_string().parse().unwrap(), + source_address: Pubkey::new_unique().to_string().parse().unwrap(), message_id: message_id_2.parse().unwrap(), destination_chain: "ethereum".parse().unwrap(), destination_address: format!("0x{:x}", EVMAddress::random()).parse().unwrap(), From 1490a224271e7541dd526b2ab4d333f353bd4db4 Mon Sep 17 00:00:00 2001 From: Roberts Pumpurs Date: Sat, 30 Nov 2024 17:01:38 +0200 Subject: [PATCH 097/109] test: tests for verify verifier set handler --- .../handlers/solana_verify_verifier_set.rs | 729 +++++++++--------- 1 file changed, 381 insertions(+), 348 deletions(-) diff --git a/ampd/src/handlers/solana_verify_verifier_set.rs b/ampd/src/handlers/solana_verify_verifier_set.rs index 4c3a5df30..0f6f5c9fb 100644 --- a/ampd/src/handlers/solana_verify_verifier_set.rs +++ b/ampd/src/handlers/solana_verify_verifier_set.rs @@ -1,348 +1,381 @@ -use std::convert::TryInto; - -use async_trait::async_trait; -use axelar_wasm_std::msg_id::{Base58SolanaTxSignatureAndEventIndex, HexTxHashAndEventIndex}; -use axelar_wasm_std::voting::{PollId, Vote}; -use cosmrs::cosmwasm::MsgExecuteContract; -use cosmrs::tx::Msg; -use cosmrs::Any; -use error_stack::ResultExt; -use events::Error::EventTypeMismatch; -use events_derive::try_from; -use gateway_event_stack::MatchContext; -use multisig::verifier_set::VerifierSet; -use router_api::ChainName; -use serde::Deserialize; -use solana_client::nonblocking::rpc_client::RpcClient; -use solana_sdk::pubkey::Pubkey; -use solana_transaction_status::UiTransactionStatusMeta; -use tokio::sync::watch::Receiver; -use tracing::{info, info_span}; -use valuable::Valuable; -use voting_verifier::msg::ExecuteMsg; - -use crate::event_processor::EventHandler; -use crate::handlers::errors::Error; -use crate::solana::verifier_set_verifier::verify_verifier_set; -use crate::solana::SolanaRpcClientProxy; -use crate::types::TMAddress; - -type Result = error_stack::Result; - -#[derive(Deserialize, Debug)] -pub struct VerifierSetConfirmation { - pub message_id: Base58SolanaTxSignatureAndEventIndex, - pub verifier_set: VerifierSet, -} - -#[derive(Deserialize, Debug)] -#[try_from("wasm-verifier_set_poll_started")] -struct PollStartedEvent { - verifier_set: VerifierSetConfirmation, - poll_id: PollId, - source_chain: ChainName, - expires_at: u64, - participants: Vec, -} - -pub struct Handler { - verifier: TMAddress, - voting_verifier_contract: TMAddress, - rpc_client: C, - solana_gateway_domain_separator: [u8; 32], - latest_block_height: Receiver, - event_match_context: MatchContext, -} - -impl Handler { - pub async fn new( - verifier: TMAddress, - voting_verifier_contract: TMAddress, - rpc_client: C, - latest_block_height: Receiver, - ) -> Self { - let domain_separator = rpc_client - .get_domain_separator() - .await - .expect("cannot start handler without fetching domain separator for Solana"); - let event_match_context = MatchContext::new(&axelar_solana_gateway::ID.to_string()); - - Self { - verifier, - solana_gateway_domain_separator: domain_separator, - event_match_context, - voting_verifier_contract, - rpc_client, - latest_block_height, - } - } - - fn vote_msg(&self, poll_id: PollId, vote: Vote) -> MsgExecuteContract { - MsgExecuteContract { - sender: self.verifier.as_ref().clone(), - contract: self.voting_verifier_contract.as_ref().clone(), - msg: serde_json::to_vec(&ExecuteMsg::Vote { - poll_id, - votes: vec![vote], - }) - .expect("vote msg should serialize"), - funds: vec![], - } - } - - async fn fetch_message( - &self, - msg: &VerifierSetConfirmation, - ) -> Option<(solana_sdk::signature::Signature, UiTransactionStatusMeta)> { - let signature = solana_sdk::signature::Signature::from(msg.message_id.raw_signature); - self.rpc_client - .get_tx(&signature) - .await - .map(|tx| (signature, tx)) - } -} - -#[async_trait] -impl EventHandler for Handler { - type Err = Error; - - async fn handle(&self, event: &events::Event) -> Result> { - if !event.is_from_contract(self.voting_verifier_contract.as_ref()) { - return Ok(vec![]); - } - - let PollStartedEvent { - poll_id, - source_chain, - expires_at, - participants, - verifier_set, - } = match event.try_into() as error_stack::Result<_, _> { - Err(report) if matches!(report.current_context(), EventTypeMismatch(_)) => { - return Ok(vec![]) - } - event => event.change_context(Error::DeserializeEvent)?, - }; - - if !participants.contains(&self.verifier) { - return Ok(vec![]); - } - - let latest_block_height = *self.latest_block_height.borrow(); - if latest_block_height >= expires_at { - info!(poll_id = poll_id.to_string(), "skipping expired poll"); - return Ok(vec![]); - } - - let tx_receipt = self.fetch_message(&verifier_set).await; - let vote = info_span!( - "verify a new verifier set for Solana", - poll_id = poll_id.to_string(), - source_chain = source_chain.to_string(), - id = verifier_set.message_id.to_string() - ) - .in_scope(|| { - info!("ready to verify a new verifier set in poll"); - - let vote = tx_receipt.map_or(Vote::NotFound, |(signature, tx_receipt)| { - verify_verifier_set( - &self.event_match_context, - (&signature, &tx_receipt), - &verifier_set, - &self.solana_gateway_domain_separator, - ) - }); - info!( - vote = vote.as_value(), - "ready to vote for a new verifier set in poll" - ); - - vote - }); - - Ok(vec![self - .vote_msg(poll_id, vote) - .into_any() - .expect("vote msg should serialize")]) - } -} - -#[cfg(test)] -mod tests { - use std::str::FromStr; - - // use axelar_wasm_std::nonempty; - // use multisig::{ - // key::KeyType, - // test::common::{build_verifier_set, ecdsa_test_data}, - // }; - // use solana_client::rpc_request::RpcRequest; - // use tokio::sync::watch; - // use voting_verifier::events::{PollMetadata, PollStarted, VerifierSetConfirmation}; - - // use crate::{ - // handlers::tests::into_structured_event, solana::test_utils::rpc_client_with_recorder, - // PREFIX, - // }; - - // use tokio::test as async_test; - - // use super::*; - - // #[async_test] - // async fn must_abort_if_voting_verifier_is_same_as_contract_address() { - // let worker = TMAddress::random(PREFIX); - // let voting_verifier = TMAddress::random(PREFIX); - - // let (rpc_client, rpc_recorder) = rpc_client_with_recorder(); - - // let expiration = 100u64; - // let (_, rx) = watch::channel(expiration - 1); - - // let handler = Handler::new(worker.clone(), voting_verifier.clone(), rpc_client, rx); - - // let event = into_structured_event( - // verifier_set_poll_started_event(participants(2, Some(worker.clone())), expiration), - // &TMAddress::random(PREFIX), - // ); - - // let handler_result = handler.handle(&event).await.unwrap(); - - // assert!(handler_result.is_empty()); - // assert_eq!( - // None, - // rpc_recorder.read().await.get(&RpcRequest::GetTransaction) - // ); - // assert_eq!( - // None, - // rpc_recorder.read().await.get(&RpcRequest::GetAccountInfo) - // ); - // } - - // #[async_test] - // async fn must_abort_chain_does_not_match() { - // let worker = TMAddress::random(PREFIX); - // let voting_verifier = TMAddress::random(PREFIX); - - // let (rpc_client, rpc_recorder) = rpc_client_with_recorder(); - - // let expiration = 100u64; - // let (_, rx) = watch::channel(expiration - 1); - - // let handler = Handler::new(worker.clone(), voting_verifier.clone(), rpc_client, rx); - - // let event = into_structured_event( - // verifier_set_poll_started_event(participants(2, Some(worker.clone())), expiration), - // &voting_verifier, - // ); - - // let handle_results = handler.handle(&event).await.unwrap(); - // assert!(handle_results.is_empty()); - // assert_eq!( - // None, - // rpc_recorder.read().await.get(&RpcRequest::GetTransaction) - // ); - // assert_eq!( - // None, - // rpc_recorder.read().await.get(&RpcRequest::GetAccountInfo) - // ); - // } - - // #[async_test] - // async fn must_abort_if_worker_is_not_participant() { - // let worker = TMAddress::random(PREFIX); - // let voting_verifier = TMAddress::random(PREFIX); - - // let (rpc_client, rpc_recorder) = rpc_client_with_recorder(); - - // let expiration = 100u64; - // let (_, rx) = watch::channel(expiration - 1); - - // let handler = Handler::new(worker.clone(), voting_verifier.clone(), rpc_client, rx); - - // let event = into_structured_event( - // verifier_set_poll_started_event(participants(2, None), expiration), // worker is not here. - // &voting_verifier, - // ); - - // let handle_results = handler.handle(&event).await.unwrap(); - // assert!(handle_results.is_empty()); - // assert_eq!( - // None, - // rpc_recorder.read().await.get(&RpcRequest::GetTransaction) - // ); - // assert_eq!( - // None, - // rpc_recorder.read().await.get(&RpcRequest::GetAccountInfo) - // ); - // } - - // #[async_test] - // async fn must_abort_on_expired_poll() { - // let worker = TMAddress::random(PREFIX); - // let voting_verifier = TMAddress::random(PREFIX); - - // let (rpc_client, rpc_recorder) = rpc_client_with_recorder(); - - // let expiration = 100u64; - // let (_, rx) = watch::channel(expiration); - - // let handler = Handler::new(worker.clone(), voting_verifier.clone(), rpc_client, rx); - - // let event = into_structured_event( - // verifier_set_poll_started_event(participants(2, Some(worker.clone())), expiration), - // &voting_verifier, - // ); - - // let handle_results = handler.handle(&event).await.unwrap(); - // assert!(handle_results.is_empty()); - // assert_eq!( - // None, - // rpc_recorder.read().await.get(&RpcRequest::GetTransaction) - // ); - // assert_eq!( - // None, - // rpc_recorder.read().await.get(&RpcRequest::GetAccountInfo) - // ); - // } - - // fn verifier_set_poll_started_event( - // participants: Vec, - // expires_at: u64, - // ) -> PollStarted { - // let signature_1 = "3GLo4z4siudHxW1BMHBbkTKy7kfbssNFaxLR5hTjhEXCUzp2Pi2VVwybc1s96pEKjRre7CcKKeLhni79zWTNUseP"; - // let event_idx_1 = 10_u32; - // let message_id_1 = format!("{signature_1}-{event_idx_1}"); - - // #[allow(deprecated)] - // PollStarted::VerifierSet { - // verifier_set: VerifierSetConfirmation { - // tx_id: signature_1.parse().unwrap(), - // event_index: event_idx_1, - // message_id: message_id_1.parse().unwrap(), - // verifier_set: build_verifier_set(KeyType::Ecdsa, &ecdsa_test_data::signers()), - // }, - // metadata: PollMetadata { - // poll_id: "100".parse().unwrap(), - // source_chain: "solana".parse().unwrap(), - // source_gateway_address: nonempty::String::from_str( - // "03f57d1a813febaccbe6429603f9ec57969511b76cd680452dba91fa01f54e756a", - // ) - // .unwrap(), - // confirmation_height: 1, - // expires_at, - // participants: participants - // .into_iter() - // .map(|addr| cosmwasm_std::Addr::unchecked(addr.to_string())) - // .collect(), - // }, - // } - // } - - // fn participants(n: u8, worker: Option) -> Vec { - // (0..n) - // .map(|_| TMAddress::random(PREFIX)) - // .chain(worker) - // .collect() - // } -} +use std::convert::TryInto; + +use async_trait::async_trait; +use axelar_wasm_std::msg_id::{Base58SolanaTxSignatureAndEventIndex, HexTxHashAndEventIndex}; +use axelar_wasm_std::voting::{PollId, Vote}; +use cosmrs::cosmwasm::MsgExecuteContract; +use cosmrs::tx::Msg; +use cosmrs::Any; +use error_stack::ResultExt; +use events::Error::EventTypeMismatch; +use events_derive::try_from; +use gateway_event_stack::MatchContext; +use multisig::verifier_set::VerifierSet; +use router_api::ChainName; +use serde::Deserialize; +use solana_client::nonblocking::rpc_client::RpcClient; +use solana_sdk::pubkey::Pubkey; +use solana_transaction_status::UiTransactionStatusMeta; +use tokio::sync::watch::Receiver; +use tracing::{info, info_span}; +use valuable::Valuable; +use voting_verifier::msg::ExecuteMsg; + +use crate::event_processor::EventHandler; +use crate::handlers::errors::Error; +use crate::solana::verifier_set_verifier::verify_verifier_set; +use crate::solana::SolanaRpcClientProxy; +use crate::types::TMAddress; + +type Result = error_stack::Result; + +#[derive(Deserialize, Debug)] +pub struct VerifierSetConfirmation { + pub message_id: Base58SolanaTxSignatureAndEventIndex, + pub verifier_set: VerifierSet, +} + +#[derive(Deserialize, Debug)] +#[try_from("wasm-verifier_set_poll_started")] +struct PollStartedEvent { + verifier_set: VerifierSetConfirmation, + poll_id: PollId, + source_chain: ChainName, + expires_at: u64, + participants: Vec, +} + +pub struct Handler { + verifier: TMAddress, + voting_verifier_contract: TMAddress, + rpc_client: C, + solana_gateway_domain_separator: [u8; 32], + latest_block_height: Receiver, + event_match_context: MatchContext, +} + +impl Handler { + pub async fn new( + verifier: TMAddress, + voting_verifier_contract: TMAddress, + rpc_client: C, + latest_block_height: Receiver, + ) -> Self { + let domain_separator = rpc_client + .get_domain_separator() + .await + .expect("cannot start handler without fetching domain separator for Solana"); + let event_match_context = MatchContext::new(&axelar_solana_gateway::ID.to_string()); + + Self { + verifier, + solana_gateway_domain_separator: domain_separator, + event_match_context, + voting_verifier_contract, + rpc_client, + latest_block_height, + } + } + + fn vote_msg(&self, poll_id: PollId, vote: Vote) -> MsgExecuteContract { + MsgExecuteContract { + sender: self.verifier.as_ref().clone(), + contract: self.voting_verifier_contract.as_ref().clone(), + msg: serde_json::to_vec(&ExecuteMsg::Vote { + poll_id, + votes: vec![vote], + }) + .expect("vote msg should serialize"), + funds: vec![], + } + } + + async fn fetch_message( + &self, + msg: &VerifierSetConfirmation, + ) -> Option<(solana_sdk::signature::Signature, UiTransactionStatusMeta)> { + let signature = solana_sdk::signature::Signature::from(msg.message_id.raw_signature); + self.rpc_client + .get_tx(&signature) + .await + .map(|tx| (signature, tx)) + } +} + +#[async_trait] +impl EventHandler for Handler { + type Err = Error; + + async fn handle(&self, event: &events::Event) -> Result> { + if !event.is_from_contract(self.voting_verifier_contract.as_ref()) { + return Ok(vec![]); + } + + let PollStartedEvent { + poll_id, + source_chain, + expires_at, + participants, + verifier_set, + } = match event.try_into() as error_stack::Result<_, _> { + Err(report) if matches!(report.current_context(), EventTypeMismatch(_)) => { + return Ok(vec![]) + } + event => event.change_context(Error::DeserializeEvent)?, + }; + + if !participants.contains(&self.verifier) { + return Ok(vec![]); + } + + let latest_block_height = *self.latest_block_height.borrow(); + if latest_block_height >= expires_at { + info!(poll_id = poll_id.to_string(), "skipping expired poll"); + return Ok(vec![]); + } + + let tx_receipt = self.fetch_message(&verifier_set).await; + let vote = info_span!( + "verify a new verifier set for Solana", + poll_id = poll_id.to_string(), + source_chain = source_chain.to_string(), + id = verifier_set.message_id.to_string() + ) + .in_scope(|| { + info!("ready to verify a new verifier set in poll"); + + let vote = tx_receipt.map_or(Vote::NotFound, |(signature, tx_receipt)| { + verify_verifier_set( + &self.event_match_context, + (&signature, &tx_receipt), + &verifier_set, + &self.solana_gateway_domain_separator, + ) + }); + info!( + vote = vote.as_value(), + "ready to vote for a new verifier set in poll" + ); + + vote + }); + + Ok(vec![self + .vote_msg(poll_id, vote) + .into_any() + .expect("vote msg should serialize")]) + } +} + +#[cfg(test)] +mod tests { + use std::convert::TryInto; + + use cosmrs::cosmwasm::MsgExecuteContract; + use cosmrs::tx::Msg; + use cosmwasm_std; + use cosmwasm_std::{HexBinary, Uint128}; + use error_stack::Result; + use events::Event; + use hex::ToHex; + use multisig::key::KeyType; + use multisig::test::common::{build_verifier_set, ecdsa_test_data, ed25519_test_data}; + use solana_sdk::signature::Signature; + use solana_transaction_status::option_serializer::OptionSerializer; + use tokio::sync::watch; + use tokio::test as async_test; + use voting_verifier::events::{PollMetadata, PollStarted, VerifierSetConfirmation}; + + use super::PollStartedEvent; + use crate::event_processor::EventHandler; + use crate::handlers::tests::into_structured_event; + use crate::types::TMAddress; + use crate::PREFIX; + + use super::*; + + struct EmptyResponseSolanaRpc; + #[async_trait::async_trait] + impl SolanaRpcClientProxy for EmptyResponseSolanaRpc { + async fn get_tx(&self, _signature: &Signature) -> Option { + None + } + + async fn get_domain_separator(&self) -> Option<[u8; 32]> { + Some([42; 32]) + } + } + + struct ValidResponseSolanaRpc; + #[async_trait::async_trait] + impl SolanaRpcClientProxy for ValidResponseSolanaRpc { + async fn get_tx(&self, _signature: &Signature) -> Option { + Some(UiTransactionStatusMeta { + err: None, + status: Ok(()), + fee: 0, + pre_balances: vec![], + post_balances: vec![], + inner_instructions: OptionSerializer::None, + log_messages: OptionSerializer::None, + pre_token_balances: OptionSerializer::None, + post_token_balances: OptionSerializer::None, + rewards: OptionSerializer::None, + loaded_addresses: OptionSerializer::None, + return_data: OptionSerializer::None, + compute_units_consumed: OptionSerializer::None, + }) + } + + async fn get_domain_separator(&self) -> Option<[u8; 32]> { + Some([42; 32]) + } + } + + #[async_test] + async fn not_poll_started_event() { + let event = into_structured_event( + cosmwasm_std::Event::new("transfer"), + &TMAddress::random(PREFIX), + ); + + let handler = super::Handler::new( + TMAddress::random(PREFIX), + TMAddress::random(PREFIX), + EmptyResponseSolanaRpc, + watch::channel(0).1, + ) + .await; + + assert_eq!(handler.handle(&event).await.unwrap(), vec![]); + } + + #[async_test] + async fn contract_is_not_voting_verifier() { + let event = into_structured_event( + verifier_set_poll_started_event(participants(5, None), 100), + &TMAddress::random(PREFIX), + ); + + let handler = super::Handler::new( + TMAddress::random(PREFIX), + TMAddress::random(PREFIX), + EmptyResponseSolanaRpc, + watch::channel(0).1, + ) + .await; + + assert_eq!(handler.handle(&event).await.unwrap(), vec![]); + } + + #[async_test] + async fn verifier_is_not_a_participant() { + let voting_verifier = TMAddress::random(PREFIX); + let event = into_structured_event( + verifier_set_poll_started_event(participants(5, None), 100), + &voting_verifier, + ); + + let handler = super::Handler::new( + TMAddress::random(PREFIX), + voting_verifier, + EmptyResponseSolanaRpc, + watch::channel(0).1, + ) + .await; + + assert_eq!(handler.handle(&event).await.unwrap(), vec![]); + } + + #[async_test] + async fn should_skip_expired_poll() { + let voting_verifier = TMAddress::random(PREFIX); + let verifier = TMAddress::random(PREFIX); + let expiration = 100u64; + let event: Event = into_structured_event( + verifier_set_poll_started_event( + vec![verifier.clone()].into_iter().collect(), + expiration, + ), + &voting_verifier, + ); + + let (tx, rx) = watch::channel(expiration - 1); + + let handler = + super::Handler::new(verifier, voting_verifier, ValidResponseSolanaRpc, rx).await; + + // poll is not expired yet, should hit proxy + let actual = handler.handle(&event).await.unwrap(); + assert_eq!(actual.len(), 1); + + let _ = tx.send(expiration + 1); + + // poll is expired + assert_eq!(handler.handle(&event).await.unwrap(), vec![]); + } + + #[async_test] + async fn should_vote_correctly() { + let voting_verifier = TMAddress::random(PREFIX); + let worker = TMAddress::random(PREFIX); + + let event = into_structured_event( + verifier_set_poll_started_event(participants(5, Some(worker.clone())), 100), + &voting_verifier, + ); + + let handler = super::Handler::new( + worker, + voting_verifier, + ValidResponseSolanaRpc, + watch::channel(0).1, + ) + .await; + + let actual = handler.handle(&event).await.unwrap(); + assert_eq!(actual.len(), 1); + assert!(MsgExecuteContract::from_any(actual.first().unwrap()).is_ok()); + } + + fn verifier_set_poll_started_event( + participants: Vec, + expires_at: u64, + ) -> PollStarted { + let signature_1 = "3GLo4z4siudHxW1BMHBbkTKy7kfbssNFaxLR5hTjhEXCUzp2Pi2VVwybc1s96pEKjRre7CcKKeLhni79zWTNUseP"; + let event_idx_1 = 10_u32; + let message_id_1 = format!("{signature_1}-{event_idx_1}"); + PollStarted::VerifierSet { + metadata: PollMetadata { + poll_id: "100".parse().unwrap(), + source_chain: "solana".parse().unwrap(), + source_gateway_address: axelar_solana_gateway::ID.to_string().parse().unwrap(), + confirmation_height: 15, + expires_at, + participants: participants + .into_iter() + .map(|addr| cosmwasm_std::Addr::unchecked(addr.to_string())) + .collect(), + }, + #[allow(deprecated)] // TODO: The below event uses the deprecated tx_id and event_index fields. Remove this attribute when those fields are removed + verifier_set: VerifierSetConfirmation { + tx_id: signature_1 + .parse() + .unwrap(), + event_index: event_idx_1, + message_id: message_id_1 + .to_string() + .try_into() + .unwrap(), + verifier_set: build_verifier_set(KeyType::Ecdsa, &ecdsa_test_data::signers()), + }, + } + } + + fn participants(n: u8, worker: Option) -> Vec { + (0..n) + .map(|_| TMAddress::random(PREFIX)) + .chain(worker) + .collect() + } +} From 40790eba68ece824025343a21076b61febdfd1de Mon Sep 17 00:00:00 2001 From: Roberts Pumpurs Date: Sat, 30 Nov 2024 17:52:36 +0200 Subject: [PATCH 098/109] chore: linter cleanup --- ampd/src/handlers/solana_verify_msg.rs | 12 +- .../handlers/solana_verify_verifier_set.rs | 758 +++++++++--------- ampd/src/lib.rs | 1 - ampd/src/solana/mod.rs | 9 +- ampd/src/solana/msg_verifier.rs | 13 +- ampd/src/solana/verifier_set_verifier.rs | 10 +- contracts/multisig-prover/src/encoding/mod.rs | 1 - 7 files changed, 387 insertions(+), 417 deletions(-) diff --git a/ampd/src/handlers/solana_verify_msg.rs b/ampd/src/handlers/solana_verify_msg.rs index 2273ae984..b886b98a7 100644 --- a/ampd/src/handlers/solana_verify_msg.rs +++ b/ampd/src/handlers/solana_verify_msg.rs @@ -1,22 +1,18 @@ -use std::collections::{HashMap, HashSet}; +use std::collections::HashMap; use std::convert::TryInto; use async_trait::async_trait; -use axelar_wasm_std::msg_id::{Base58SolanaTxSignatureAndEventIndex, HexTxHashAndEventIndex}; +use axelar_wasm_std::msg_id::Base58SolanaTxSignatureAndEventIndex; use axelar_wasm_std::voting::{PollId, Vote}; use cosmrs::cosmwasm::MsgExecuteContract; use cosmrs::tx::Msg; use cosmrs::Any; use error_stack::ResultExt; -use ethers_core::types::{TransactionReceipt, U64}; use events::Error::EventTypeMismatch; use events_derive::try_from; -use futures::future::join_all; -use futures::FutureExt; use gateway_event_stack::MatchContext; use router_api::ChainName; use serde::Deserialize; -use solana_client::nonblocking::rpc_client::RpcClient; use solana_sdk::pubkey::Pubkey; use solana_transaction_status::UiTransactionStatusMeta; use tokio::sync::watch::Receiver; @@ -182,10 +178,6 @@ impl EventHandler for Handler { #[cfg(test)] mod test { - - use base64::{alphabet::STANDARD, prelude::*}; - use events::Event; - use solana_client::rpc_sender::RpcSender; use solana_sdk::signature::Signature; use solana_transaction_status::option_serializer::OptionSerializer; use tokio::sync::watch; diff --git a/ampd/src/handlers/solana_verify_verifier_set.rs b/ampd/src/handlers/solana_verify_verifier_set.rs index 0f6f5c9fb..afe6fd5b9 100644 --- a/ampd/src/handlers/solana_verify_verifier_set.rs +++ b/ampd/src/handlers/solana_verify_verifier_set.rs @@ -1,381 +1,377 @@ -use std::convert::TryInto; - -use async_trait::async_trait; -use axelar_wasm_std::msg_id::{Base58SolanaTxSignatureAndEventIndex, HexTxHashAndEventIndex}; -use axelar_wasm_std::voting::{PollId, Vote}; -use cosmrs::cosmwasm::MsgExecuteContract; -use cosmrs::tx::Msg; -use cosmrs::Any; -use error_stack::ResultExt; -use events::Error::EventTypeMismatch; -use events_derive::try_from; -use gateway_event_stack::MatchContext; -use multisig::verifier_set::VerifierSet; -use router_api::ChainName; -use serde::Deserialize; -use solana_client::nonblocking::rpc_client::RpcClient; -use solana_sdk::pubkey::Pubkey; -use solana_transaction_status::UiTransactionStatusMeta; -use tokio::sync::watch::Receiver; -use tracing::{info, info_span}; -use valuable::Valuable; -use voting_verifier::msg::ExecuteMsg; - -use crate::event_processor::EventHandler; -use crate::handlers::errors::Error; -use crate::solana::verifier_set_verifier::verify_verifier_set; -use crate::solana::SolanaRpcClientProxy; -use crate::types::TMAddress; - -type Result = error_stack::Result; - -#[derive(Deserialize, Debug)] -pub struct VerifierSetConfirmation { - pub message_id: Base58SolanaTxSignatureAndEventIndex, - pub verifier_set: VerifierSet, -} - -#[derive(Deserialize, Debug)] -#[try_from("wasm-verifier_set_poll_started")] -struct PollStartedEvent { - verifier_set: VerifierSetConfirmation, - poll_id: PollId, - source_chain: ChainName, - expires_at: u64, - participants: Vec, -} - -pub struct Handler { - verifier: TMAddress, - voting_verifier_contract: TMAddress, - rpc_client: C, - solana_gateway_domain_separator: [u8; 32], - latest_block_height: Receiver, - event_match_context: MatchContext, -} - -impl Handler { - pub async fn new( - verifier: TMAddress, - voting_verifier_contract: TMAddress, - rpc_client: C, - latest_block_height: Receiver, - ) -> Self { - let domain_separator = rpc_client - .get_domain_separator() - .await - .expect("cannot start handler without fetching domain separator for Solana"); - let event_match_context = MatchContext::new(&axelar_solana_gateway::ID.to_string()); - - Self { - verifier, - solana_gateway_domain_separator: domain_separator, - event_match_context, - voting_verifier_contract, - rpc_client, - latest_block_height, - } - } - - fn vote_msg(&self, poll_id: PollId, vote: Vote) -> MsgExecuteContract { - MsgExecuteContract { - sender: self.verifier.as_ref().clone(), - contract: self.voting_verifier_contract.as_ref().clone(), - msg: serde_json::to_vec(&ExecuteMsg::Vote { - poll_id, - votes: vec![vote], - }) - .expect("vote msg should serialize"), - funds: vec![], - } - } - - async fn fetch_message( - &self, - msg: &VerifierSetConfirmation, - ) -> Option<(solana_sdk::signature::Signature, UiTransactionStatusMeta)> { - let signature = solana_sdk::signature::Signature::from(msg.message_id.raw_signature); - self.rpc_client - .get_tx(&signature) - .await - .map(|tx| (signature, tx)) - } -} - -#[async_trait] -impl EventHandler for Handler { - type Err = Error; - - async fn handle(&self, event: &events::Event) -> Result> { - if !event.is_from_contract(self.voting_verifier_contract.as_ref()) { - return Ok(vec![]); - } - - let PollStartedEvent { - poll_id, - source_chain, - expires_at, - participants, - verifier_set, - } = match event.try_into() as error_stack::Result<_, _> { - Err(report) if matches!(report.current_context(), EventTypeMismatch(_)) => { - return Ok(vec![]) - } - event => event.change_context(Error::DeserializeEvent)?, - }; - - if !participants.contains(&self.verifier) { - return Ok(vec![]); - } - - let latest_block_height = *self.latest_block_height.borrow(); - if latest_block_height >= expires_at { - info!(poll_id = poll_id.to_string(), "skipping expired poll"); - return Ok(vec![]); - } - - let tx_receipt = self.fetch_message(&verifier_set).await; - let vote = info_span!( - "verify a new verifier set for Solana", - poll_id = poll_id.to_string(), - source_chain = source_chain.to_string(), - id = verifier_set.message_id.to_string() - ) - .in_scope(|| { - info!("ready to verify a new verifier set in poll"); - - let vote = tx_receipt.map_or(Vote::NotFound, |(signature, tx_receipt)| { - verify_verifier_set( - &self.event_match_context, - (&signature, &tx_receipt), - &verifier_set, - &self.solana_gateway_domain_separator, - ) - }); - info!( - vote = vote.as_value(), - "ready to vote for a new verifier set in poll" - ); - - vote - }); - - Ok(vec![self - .vote_msg(poll_id, vote) - .into_any() - .expect("vote msg should serialize")]) - } -} - -#[cfg(test)] -mod tests { - use std::convert::TryInto; - - use cosmrs::cosmwasm::MsgExecuteContract; - use cosmrs::tx::Msg; - use cosmwasm_std; - use cosmwasm_std::{HexBinary, Uint128}; - use error_stack::Result; - use events::Event; - use hex::ToHex; - use multisig::key::KeyType; - use multisig::test::common::{build_verifier_set, ecdsa_test_data, ed25519_test_data}; - use solana_sdk::signature::Signature; - use solana_transaction_status::option_serializer::OptionSerializer; - use tokio::sync::watch; - use tokio::test as async_test; - use voting_verifier::events::{PollMetadata, PollStarted, VerifierSetConfirmation}; - - use super::PollStartedEvent; - use crate::event_processor::EventHandler; - use crate::handlers::tests::into_structured_event; - use crate::types::TMAddress; - use crate::PREFIX; - - use super::*; - - struct EmptyResponseSolanaRpc; - #[async_trait::async_trait] - impl SolanaRpcClientProxy for EmptyResponseSolanaRpc { - async fn get_tx(&self, _signature: &Signature) -> Option { - None - } - - async fn get_domain_separator(&self) -> Option<[u8; 32]> { - Some([42; 32]) - } - } - - struct ValidResponseSolanaRpc; - #[async_trait::async_trait] - impl SolanaRpcClientProxy for ValidResponseSolanaRpc { - async fn get_tx(&self, _signature: &Signature) -> Option { - Some(UiTransactionStatusMeta { - err: None, - status: Ok(()), - fee: 0, - pre_balances: vec![], - post_balances: vec![], - inner_instructions: OptionSerializer::None, - log_messages: OptionSerializer::None, - pre_token_balances: OptionSerializer::None, - post_token_balances: OptionSerializer::None, - rewards: OptionSerializer::None, - loaded_addresses: OptionSerializer::None, - return_data: OptionSerializer::None, - compute_units_consumed: OptionSerializer::None, - }) - } - - async fn get_domain_separator(&self) -> Option<[u8; 32]> { - Some([42; 32]) - } - } - - #[async_test] - async fn not_poll_started_event() { - let event = into_structured_event( - cosmwasm_std::Event::new("transfer"), - &TMAddress::random(PREFIX), - ); - - let handler = super::Handler::new( - TMAddress::random(PREFIX), - TMAddress::random(PREFIX), - EmptyResponseSolanaRpc, - watch::channel(0).1, - ) - .await; - - assert_eq!(handler.handle(&event).await.unwrap(), vec![]); - } - - #[async_test] - async fn contract_is_not_voting_verifier() { - let event = into_structured_event( - verifier_set_poll_started_event(participants(5, None), 100), - &TMAddress::random(PREFIX), - ); - - let handler = super::Handler::new( - TMAddress::random(PREFIX), - TMAddress::random(PREFIX), - EmptyResponseSolanaRpc, - watch::channel(0).1, - ) - .await; - - assert_eq!(handler.handle(&event).await.unwrap(), vec![]); - } - - #[async_test] - async fn verifier_is_not_a_participant() { - let voting_verifier = TMAddress::random(PREFIX); - let event = into_structured_event( - verifier_set_poll_started_event(participants(5, None), 100), - &voting_verifier, - ); - - let handler = super::Handler::new( - TMAddress::random(PREFIX), - voting_verifier, - EmptyResponseSolanaRpc, - watch::channel(0).1, - ) - .await; - - assert_eq!(handler.handle(&event).await.unwrap(), vec![]); - } - - #[async_test] - async fn should_skip_expired_poll() { - let voting_verifier = TMAddress::random(PREFIX); - let verifier = TMAddress::random(PREFIX); - let expiration = 100u64; - let event: Event = into_structured_event( - verifier_set_poll_started_event( - vec![verifier.clone()].into_iter().collect(), - expiration, - ), - &voting_verifier, - ); - - let (tx, rx) = watch::channel(expiration - 1); - - let handler = - super::Handler::new(verifier, voting_verifier, ValidResponseSolanaRpc, rx).await; - - // poll is not expired yet, should hit proxy - let actual = handler.handle(&event).await.unwrap(); - assert_eq!(actual.len(), 1); - - let _ = tx.send(expiration + 1); - - // poll is expired - assert_eq!(handler.handle(&event).await.unwrap(), vec![]); - } - - #[async_test] - async fn should_vote_correctly() { - let voting_verifier = TMAddress::random(PREFIX); - let worker = TMAddress::random(PREFIX); - - let event = into_structured_event( - verifier_set_poll_started_event(participants(5, Some(worker.clone())), 100), - &voting_verifier, - ); - - let handler = super::Handler::new( - worker, - voting_verifier, - ValidResponseSolanaRpc, - watch::channel(0).1, - ) - .await; - - let actual = handler.handle(&event).await.unwrap(); - assert_eq!(actual.len(), 1); - assert!(MsgExecuteContract::from_any(actual.first().unwrap()).is_ok()); - } - - fn verifier_set_poll_started_event( - participants: Vec, - expires_at: u64, - ) -> PollStarted { - let signature_1 = "3GLo4z4siudHxW1BMHBbkTKy7kfbssNFaxLR5hTjhEXCUzp2Pi2VVwybc1s96pEKjRre7CcKKeLhni79zWTNUseP"; - let event_idx_1 = 10_u32; - let message_id_1 = format!("{signature_1}-{event_idx_1}"); - PollStarted::VerifierSet { - metadata: PollMetadata { - poll_id: "100".parse().unwrap(), - source_chain: "solana".parse().unwrap(), - source_gateway_address: axelar_solana_gateway::ID.to_string().parse().unwrap(), - confirmation_height: 15, - expires_at, - participants: participants - .into_iter() - .map(|addr| cosmwasm_std::Addr::unchecked(addr.to_string())) - .collect(), - }, - #[allow(deprecated)] // TODO: The below event uses the deprecated tx_id and event_index fields. Remove this attribute when those fields are removed - verifier_set: VerifierSetConfirmation { - tx_id: signature_1 - .parse() - .unwrap(), - event_index: event_idx_1, - message_id: message_id_1 - .to_string() - .try_into() - .unwrap(), - verifier_set: build_verifier_set(KeyType::Ecdsa, &ecdsa_test_data::signers()), - }, - } - } - - fn participants(n: u8, worker: Option) -> Vec { - (0..n) - .map(|_| TMAddress::random(PREFIX)) - .chain(worker) - .collect() - } -} +use std::convert::TryInto; + +use async_trait::async_trait; +use axelar_wasm_std::msg_id::Base58SolanaTxSignatureAndEventIndex; +use axelar_wasm_std::voting::{PollId, Vote}; +use cosmrs::cosmwasm::MsgExecuteContract; +use cosmrs::tx::Msg; +use cosmrs::Any; +use error_stack::ResultExt; +use events::Error::EventTypeMismatch; +use events_derive::try_from; +use gateway_event_stack::MatchContext; +use multisig::verifier_set::VerifierSet; +use router_api::ChainName; +use serde::Deserialize; +use solana_transaction_status::UiTransactionStatusMeta; +use tokio::sync::watch::Receiver; +use tracing::{info, info_span}; +use valuable::Valuable; +use voting_verifier::msg::ExecuteMsg; + +use crate::event_processor::EventHandler; +use crate::handlers::errors::Error; +use crate::solana::verifier_set_verifier::verify_verifier_set; +use crate::solana::SolanaRpcClientProxy; +use crate::types::TMAddress; + +type Result = error_stack::Result; + +#[derive(Deserialize, Debug)] +pub struct VerifierSetConfirmation { + pub message_id: Base58SolanaTxSignatureAndEventIndex, + pub verifier_set: VerifierSet, +} + +#[derive(Deserialize, Debug)] +#[try_from("wasm-verifier_set_poll_started")] +struct PollStartedEvent { + verifier_set: VerifierSetConfirmation, + poll_id: PollId, + source_chain: ChainName, + expires_at: u64, + participants: Vec, +} + +pub struct Handler { + verifier: TMAddress, + voting_verifier_contract: TMAddress, + rpc_client: C, + solana_gateway_domain_separator: [u8; 32], + latest_block_height: Receiver, + event_match_context: MatchContext, +} + +impl Handler { + pub async fn new( + verifier: TMAddress, + voting_verifier_contract: TMAddress, + rpc_client: C, + latest_block_height: Receiver, + ) -> Self { + let domain_separator = rpc_client + .get_domain_separator() + .await + .expect("cannot start handler without fetching domain separator for Solana"); + let event_match_context = MatchContext::new(&axelar_solana_gateway::ID.to_string()); + + Self { + verifier, + solana_gateway_domain_separator: domain_separator, + event_match_context, + voting_verifier_contract, + rpc_client, + latest_block_height, + } + } + + fn vote_msg(&self, poll_id: PollId, vote: Vote) -> MsgExecuteContract { + MsgExecuteContract { + sender: self.verifier.as_ref().clone(), + contract: self.voting_verifier_contract.as_ref().clone(), + msg: serde_json::to_vec(&ExecuteMsg::Vote { + poll_id, + votes: vec![vote], + }) + .expect("vote msg should serialize"), + funds: vec![], + } + } + + async fn fetch_message( + &self, + msg: &VerifierSetConfirmation, + ) -> Option<(solana_sdk::signature::Signature, UiTransactionStatusMeta)> { + let signature = solana_sdk::signature::Signature::from(msg.message_id.raw_signature); + self.rpc_client + .get_tx(&signature) + .await + .map(|tx| (signature, tx)) + } +} + +#[async_trait] +impl EventHandler for Handler { + type Err = Error; + + async fn handle(&self, event: &events::Event) -> Result> { + if !event.is_from_contract(self.voting_verifier_contract.as_ref()) { + return Ok(vec![]); + } + + let PollStartedEvent { + poll_id, + source_chain, + expires_at, + participants, + verifier_set, + } = match event.try_into() as error_stack::Result<_, _> { + Err(report) if matches!(report.current_context(), EventTypeMismatch(_)) => { + return Ok(vec![]) + } + event => event.change_context(Error::DeserializeEvent)?, + }; + + if !participants.contains(&self.verifier) { + return Ok(vec![]); + } + + let latest_block_height = *self.latest_block_height.borrow(); + if latest_block_height >= expires_at { + info!(poll_id = poll_id.to_string(), "skipping expired poll"); + return Ok(vec![]); + } + + let tx_receipt = self.fetch_message(&verifier_set).await; + let vote = info_span!( + "verify a new verifier set for Solana", + poll_id = poll_id.to_string(), + source_chain = source_chain.to_string(), + id = verifier_set.message_id.to_string() + ) + .in_scope(|| { + info!("ready to verify a new verifier set in poll"); + + let vote = tx_receipt.map_or(Vote::NotFound, |(signature, tx_receipt)| { + verify_verifier_set( + &self.event_match_context, + (&signature, &tx_receipt), + &verifier_set, + &self.solana_gateway_domain_separator, + ) + }); + info!( + vote = vote.as_value(), + "ready to vote for a new verifier set in poll" + ); + + vote + }); + + Ok(vec![self + .vote_msg(poll_id, vote) + .into_any() + .expect("vote msg should serialize")]) + } +} + +#[cfg(test)] +mod tests { + use std::convert::TryInto; + + use cosmrs::cosmwasm::MsgExecuteContract; + use cosmrs::tx::Msg; + use cosmwasm_std; + + use events::Event; + + use multisig::key::KeyType; + use multisig::test::common::{build_verifier_set, ecdsa_test_data}; + use solana_sdk::signature::Signature; + use solana_transaction_status::option_serializer::OptionSerializer; + use tokio::sync::watch; + use tokio::test as async_test; + use voting_verifier::events::{PollMetadata, PollStarted, VerifierSetConfirmation}; + + use crate::event_processor::EventHandler; + use crate::handlers::tests::into_structured_event; + use crate::types::TMAddress; + use crate::PREFIX; + + use super::*; + + struct EmptyResponseSolanaRpc; + #[async_trait::async_trait] + impl SolanaRpcClientProxy for EmptyResponseSolanaRpc { + async fn get_tx(&self, _signature: &Signature) -> Option { + None + } + + async fn get_domain_separator(&self) -> Option<[u8; 32]> { + Some([42; 32]) + } + } + + struct ValidResponseSolanaRpc; + #[async_trait::async_trait] + impl SolanaRpcClientProxy for ValidResponseSolanaRpc { + async fn get_tx(&self, _signature: &Signature) -> Option { + Some(UiTransactionStatusMeta { + err: None, + status: Ok(()), + fee: 0, + pre_balances: vec![], + post_balances: vec![], + inner_instructions: OptionSerializer::None, + log_messages: OptionSerializer::None, + pre_token_balances: OptionSerializer::None, + post_token_balances: OptionSerializer::None, + rewards: OptionSerializer::None, + loaded_addresses: OptionSerializer::None, + return_data: OptionSerializer::None, + compute_units_consumed: OptionSerializer::None, + }) + } + + async fn get_domain_separator(&self) -> Option<[u8; 32]> { + Some([42; 32]) + } + } + + #[async_test] + async fn not_poll_started_event() { + let event = into_structured_event( + cosmwasm_std::Event::new("transfer"), + &TMAddress::random(PREFIX), + ); + + let handler = super::Handler::new( + TMAddress::random(PREFIX), + TMAddress::random(PREFIX), + EmptyResponseSolanaRpc, + watch::channel(0).1, + ) + .await; + + assert_eq!(handler.handle(&event).await.unwrap(), vec![]); + } + + #[async_test] + async fn contract_is_not_voting_verifier() { + let event = into_structured_event( + verifier_set_poll_started_event(participants(5, None), 100), + &TMAddress::random(PREFIX), + ); + + let handler = super::Handler::new( + TMAddress::random(PREFIX), + TMAddress::random(PREFIX), + EmptyResponseSolanaRpc, + watch::channel(0).1, + ) + .await; + + assert_eq!(handler.handle(&event).await.unwrap(), vec![]); + } + + #[async_test] + async fn verifier_is_not_a_participant() { + let voting_verifier = TMAddress::random(PREFIX); + let event = into_structured_event( + verifier_set_poll_started_event(participants(5, None), 100), + &voting_verifier, + ); + + let handler = super::Handler::new( + TMAddress::random(PREFIX), + voting_verifier, + EmptyResponseSolanaRpc, + watch::channel(0).1, + ) + .await; + + assert_eq!(handler.handle(&event).await.unwrap(), vec![]); + } + + #[async_test] + async fn should_skip_expired_poll() { + let voting_verifier = TMAddress::random(PREFIX); + let verifier = TMAddress::random(PREFIX); + let expiration = 100u64; + let event: Event = into_structured_event( + verifier_set_poll_started_event( + vec![verifier.clone()].into_iter().collect(), + expiration, + ), + &voting_verifier, + ); + + let (tx, rx) = watch::channel(expiration - 1); + + let handler = + super::Handler::new(verifier, voting_verifier, ValidResponseSolanaRpc, rx).await; + + // poll is not expired yet, should hit proxy + let actual = handler.handle(&event).await.unwrap(); + assert_eq!(actual.len(), 1); + + let _ = tx.send(expiration + 1); + + // poll is expired + assert_eq!(handler.handle(&event).await.unwrap(), vec![]); + } + + #[async_test] + async fn should_vote_correctly() { + let voting_verifier = TMAddress::random(PREFIX); + let worker = TMAddress::random(PREFIX); + + let event = into_structured_event( + verifier_set_poll_started_event(participants(5, Some(worker.clone())), 100), + &voting_verifier, + ); + + let handler = super::Handler::new( + worker, + voting_verifier, + ValidResponseSolanaRpc, + watch::channel(0).1, + ) + .await; + + let actual = handler.handle(&event).await.unwrap(); + assert_eq!(actual.len(), 1); + assert!(MsgExecuteContract::from_any(actual.first().unwrap()).is_ok()); + } + + fn verifier_set_poll_started_event( + participants: Vec, + expires_at: u64, + ) -> PollStarted { + let signature_1 = "3GLo4z4siudHxW1BMHBbkTKy7kfbssNFaxLR5hTjhEXCUzp2Pi2VVwybc1s96pEKjRre7CcKKeLhni79zWTNUseP"; + let event_idx_1 = 10_u32; + let message_id_1 = format!("{signature_1}-{event_idx_1}"); + PollStarted::VerifierSet { + metadata: PollMetadata { + poll_id: "100".parse().unwrap(), + source_chain: "solana".parse().unwrap(), + source_gateway_address: axelar_solana_gateway::ID.to_string().parse().unwrap(), + confirmation_height: 15, + expires_at, + participants: participants + .into_iter() + .map(|addr| cosmwasm_std::Addr::unchecked(addr.to_string())) + .collect(), + }, + #[allow(deprecated)] // TODO: The below event uses the deprecated tx_id and event_index fields. Remove this attribute when those fields are removed + verifier_set: VerifierSetConfirmation { + tx_id: signature_1 + .parse() + .unwrap(), + event_index: event_idx_1, + message_id: message_id_1 + .to_string() + .try_into() + .unwrap(), + verifier_set: build_verifier_set(KeyType::Ecdsa, &ecdsa_test_data::signers()), + }, + } + } + + fn participants(n: u8, worker: Option) -> Vec { + (0..n) + .map(|_| TMAddress::random(PREFIX)) + .chain(worker) + .collect() + } +} diff --git a/ampd/src/lib.rs b/ampd/src/lib.rs index dda0bb310..08cc99fe5 100644 --- a/ampd/src/lib.rs +++ b/ampd/src/lib.rs @@ -1,4 +1,3 @@ -use std::num::NonZeroUsize; use std::time::Duration; use asyncutil::task::{CancellableTask, TaskError, TaskGroup}; diff --git a/ampd/src/solana/mod.rs b/ampd/src/solana/mod.rs index d5ad28e23..caec3e686 100644 --- a/ampd/src/solana/mod.rs +++ b/ampd/src/solana/mod.rs @@ -1,13 +1,10 @@ use axelar_solana_gateway::processor::GatewayEvent; -use axelar_wasm_std::msg_id::{Base58SolanaTxSignatureAndEventIndex, Base58TxDigestAndEventIndex}; +use axelar_wasm_std::msg_id::Base58SolanaTxSignatureAndEventIndex; use axelar_wasm_std::voting::Vote; use gateway_event_stack::MatchContext; -use solana_transaction_status::{ - option_serializer::OptionSerializer, EncodedConfirmedTransactionWithStatusMeta, -}; -use solana_transaction_status::{UiTransactionEncoding, UiTransactionStatusMeta}; +use solana_transaction_status::option_serializer::OptionSerializer; +use solana_transaction_status::UiTransactionStatusMeta; use std::str::FromStr; -use std::sync::Arc; use tracing::{error, warn}; use futures::FutureExt; diff --git a/ampd/src/solana/msg_verifier.rs b/ampd/src/solana/msg_verifier.rs index 3b39772af..8149d4319 100644 --- a/ampd/src/solana/msg_verifier.rs +++ b/ampd/src/solana/msg_verifier.rs @@ -1,15 +1,8 @@ use axelar_solana_gateway::processor::GatewayEvent; use axelar_wasm_std::voting::Vote; use gateway_event_stack::MatchContext; -use solana_sdk::pubkey::Pubkey; use solana_sdk::signature::Signature; -use solana_transaction_status::{ - option_serializer::OptionSerializer, EncodedConfirmedTransactionWithStatusMeta, -}; -use solana_transaction_status::{UiTransactionEncoding, UiTransactionStatusMeta}; -use std::str::FromStr; -use std::sync::Arc; -use tracing::error; +use solana_transaction_status::UiTransactionStatusMeta; use crate::handlers::solana_verify_msg::Message; @@ -34,6 +27,8 @@ pub fn verify_message( #[cfg(test)] mod tests { use axelar_solana_gateway::processor::CallContractEvent; + use solana_sdk::pubkey::Pubkey; + use solana_transaction_status::option_serializer::OptionSerializer; use std::str::FromStr; @@ -126,7 +121,7 @@ mod tests { #[test] fn should_not_verify_msg_gateway_does_not_match() { - let ((signature, tx), _event, mut msg) = fixture_success_call_contract_tx_data(); + let ((signature, tx), _event, msg) = fixture_success_call_contract_tx_data(); assert_eq!( Vote::NotFound, verify_message( diff --git a/ampd/src/solana/verifier_set_verifier.rs b/ampd/src/solana/verifier_set_verifier.rs index f3a12b937..798040c5a 100644 --- a/ampd/src/solana/verifier_set_verifier.rs +++ b/ampd/src/solana/verifier_set_verifier.rs @@ -7,18 +7,11 @@ use axelar_wasm_std::voting::Vote; use gateway_event_stack::MatchContext; use multisig::key::PublicKey; use multisig::verifier_set::VerifierSet; -use sha3::Digest; -use sha3::Keccak256; -use solana_sdk::pubkey::Pubkey; use solana_sdk::signature::Signature; use solana_transaction_status::UiTransactionStatusMeta; use crate::handlers::solana_verify_verifier_set::VerifierSetConfirmation; use crate::solana::verify; -use solana_transaction_status::{ - option_serializer::OptionSerializer, EncodedConfirmedTransactionWithStatusMeta, -}; -use thiserror::Error; use tracing::error; pub fn verify_verifier_set( @@ -96,8 +89,7 @@ mod tests { use axelar_wasm_std::msg_id::Base58SolanaTxSignatureAndEventIndex; use axelar_wasm_std::voting::Vote; use cosmwasm_std::{HexBinary, Uint128}; - use multisig::key::KeyType; - use multisig::test::common::{build_verifier_set, ecdsa_test_data}; + use solana_sdk::pubkey::Pubkey; use solana_transaction_status::option_serializer::OptionSerializer; use solana_transaction_status::UiTransactionStatusMeta; diff --git a/contracts/multisig-prover/src/encoding/mod.rs b/contracts/multisig-prover/src/encoding/mod.rs index b20306e7a..d7a273343 100644 --- a/contracts/multisig-prover/src/encoding/mod.rs +++ b/contracts/multisig-prover/src/encoding/mod.rs @@ -7,7 +7,6 @@ use axelar_wasm_std::hash::Hash; use cosmwasm_schema::cw_serde; use cosmwasm_std::HexBinary; use error_stack::Result; -use multisig::key::Signature; use multisig::msg::SignerWithSig; use multisig::verifier_set::VerifierSet; From 421baa38afd9fbaf8c2d8a03bd341a480697372f Mon Sep 17 00:00:00 2001 From: Roberts Pumpurs Date: Tue, 10 Dec 2024 11:47:35 +0200 Subject: [PATCH 099/109] refactor: update solana gateway dep --- Cargo.lock | 11 ++++++----- Cargo.toml | 6 +++--- ampd/src/solana/mod.rs | 11 +++++++---- 3 files changed, 16 insertions(+), 12 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f2aba9bc0..c16fba7d6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -929,7 +929,7 @@ dependencies = [ [[package]] name = "axelar-message-primitives" version = "0.1.0" -source = "git+https://github.com/eigerco/solana-axelar.git?rev=0be172e#0be172ec2d0b24e236d4131e8db46d93c98fe5f9" +source = "git+https://github.com/eigerco/solana-axelar.git?rev=91c8cf2#91c8cf2aa0702d6bbaff21164d79f8640815fb53" dependencies = [ "alloy-primitives", "alloy-sol-types", @@ -945,7 +945,7 @@ dependencies = [ [[package]] name = "axelar-solana-encoding" version = "0.1.0" -source = "git+https://github.com/eigerco/solana-axelar.git?rev=0be172e#0be172ec2d0b24e236d4131e8db46d93c98fe5f9" +source = "git+https://github.com/eigerco/solana-axelar.git?rev=91c8cf2#91c8cf2aa0702d6bbaff21164d79f8640815fb53" dependencies = [ "arrayref", "borsh 1.5.3", @@ -962,7 +962,7 @@ dependencies = [ [[package]] name = "axelar-solana-gateway" version = "0.1.0" -source = "git+https://github.com/eigerco/solana-axelar.git?rev=0be172e#0be172ec2d0b24e236d4131e8db46d93c98fe5f9" +source = "git+https://github.com/eigerco/solana-axelar.git?rev=91c8cf2#91c8cf2aa0702d6bbaff21164d79f8640815fb53" dependencies = [ "axelar-message-primitives", "axelar-solana-encoding", @@ -3945,7 +3945,7 @@ dependencies = [ [[package]] name = "gateway-event-stack" version = "0.1.0" -source = "git+https://github.com/eigerco/solana-axelar.git?rev=0be172e#0be172ec2d0b24e236d4131e8db46d93c98fe5f9" +source = "git+https://github.com/eigerco/solana-axelar.git?rev=91c8cf2#91c8cf2aa0702d6bbaff21164d79f8640815fb53" dependencies = [ "axelar-solana-gateway", "base64 0.21.7", @@ -7348,8 +7348,9 @@ dependencies = [ [[package]] name = "program-utils" version = "0.1.0" -source = "git+https://github.com/eigerco/solana-axelar.git?rev=0be172e#0be172ec2d0b24e236d4131e8db46d93c98fe5f9" +source = "git+https://github.com/eigerco/solana-axelar.git?rev=91c8cf2#91c8cf2aa0702d6bbaff21164d79f8640815fb53" dependencies = [ + "borsh 1.5.3", "rkyv", "solana-program", ] diff --git a/Cargo.toml b/Cargo.toml index 9ae08ff83..bf0dd4ee6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -63,9 +63,9 @@ service-registry = { version = "^1.1.0", path = "contracts/service-registry" } service-registry-api = { version = "^1.0.0", path = "packages/service-registry-api" } sha3 = { version = "0.10.8", default-features = false, features = [] } signature-verifier-api = { version = "^1.0.0", path = "packages/signature-verifier-api" } -axelar-solana-encoding = { git = "https://github.com/eigerco/solana-axelar.git", rev = "0be172e" } -gateway-event-stack = { git = "https://github.com/eigerco/solana-axelar.git", rev = "0be172e" } -axelar-solana-gateway = { git = "https://github.com/eigerco/solana-axelar.git", rev = "0be172e" } +axelar-solana-encoding = { git = "https://github.com/eigerco/solana-axelar.git", rev = "91c8cf2" } +gateway-event-stack = { git = "https://github.com/eigerco/solana-axelar.git", rev = "91c8cf2" } +axelar-solana-gateway = { git = "https://github.com/eigerco/solana-axelar.git", rev = "91c8cf2" } stellar = { version = "^1.0.0", path = "external-gateways/stellar" } stellar-xdr = { version = "21.2.0" } strum = { version = "0.25", default-features = false, features = ["derive"] } diff --git a/ampd/src/solana/mod.rs b/ampd/src/solana/mod.rs index caec3e686..a6c5a0d3b 100644 --- a/ampd/src/solana/mod.rs +++ b/ampd/src/solana/mod.rs @@ -1,4 +1,7 @@ -use axelar_solana_gateway::processor::GatewayEvent; +use axelar_solana_gateway::{ + processor::GatewayEvent, + state::{BytemuckedPda, GatewayConfig}, +}; use axelar_wasm_std::msg_id::Base58SolanaTxSignatureAndEventIndex; use axelar_wasm_std::voting::Vote; use gateway_event_stack::MatchContext; @@ -39,9 +42,9 @@ impl SolanaRpcClientProxy for RpcClient { async fn get_domain_separator(&self) -> Option<[u8; 32]> { let (gateway_root_pda, ..) = axelar_solana_gateway::get_gateway_root_config_pda(); - let config = self.get_account(&gateway_root_pda).await.ok()?.data; - let config = - borsh::from_slice::(&config).ok()?; + + let config_data = self.get_account(&gateway_root_pda).await.ok()?.data; + let config = *GatewayConfig::read(&config_data).ok()?; let domain_separator = config.domain_separator; Some(domain_separator) } From b89b134774e3fb358e58bd7bd8d277453bb3d964 Mon Sep 17 00:00:00 2001 From: Guilherme Felipe da Silva Date: Fri, 13 Dec 2024 11:37:42 +0100 Subject: [PATCH 100/109] chore(solana): update solana-axelar dependency Signed-off-by: Guilherme Felipe da Silva --- Cargo.lock | 10 +++++----- Cargo.toml | 6 +++--- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c16fba7d6..1c1b80d01 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -929,7 +929,7 @@ dependencies = [ [[package]] name = "axelar-message-primitives" version = "0.1.0" -source = "git+https://github.com/eigerco/solana-axelar.git?rev=91c8cf2#91c8cf2aa0702d6bbaff21164d79f8640815fb53" +source = "git+https://github.com/eigerco/solana-axelar.git?rev=e212e33#e212e33de8a877e46bd5d0d74bed7597dbf3e76d" dependencies = [ "alloy-primitives", "alloy-sol-types", @@ -945,7 +945,7 @@ dependencies = [ [[package]] name = "axelar-solana-encoding" version = "0.1.0" -source = "git+https://github.com/eigerco/solana-axelar.git?rev=91c8cf2#91c8cf2aa0702d6bbaff21164d79f8640815fb53" +source = "git+https://github.com/eigerco/solana-axelar.git?rev=e212e33#e212e33de8a877e46bd5d0d74bed7597dbf3e76d" dependencies = [ "arrayref", "borsh 1.5.3", @@ -962,7 +962,7 @@ dependencies = [ [[package]] name = "axelar-solana-gateway" version = "0.1.0" -source = "git+https://github.com/eigerco/solana-axelar.git?rev=91c8cf2#91c8cf2aa0702d6bbaff21164d79f8640815fb53" +source = "git+https://github.com/eigerco/solana-axelar.git?rev=e212e33#e212e33de8a877e46bd5d0d74bed7597dbf3e76d" dependencies = [ "axelar-message-primitives", "axelar-solana-encoding", @@ -3945,7 +3945,7 @@ dependencies = [ [[package]] name = "gateway-event-stack" version = "0.1.0" -source = "git+https://github.com/eigerco/solana-axelar.git?rev=91c8cf2#91c8cf2aa0702d6bbaff21164d79f8640815fb53" +source = "git+https://github.com/eigerco/solana-axelar.git?rev=e212e33#e212e33de8a877e46bd5d0d74bed7597dbf3e76d" dependencies = [ "axelar-solana-gateway", "base64 0.21.7", @@ -7348,7 +7348,7 @@ dependencies = [ [[package]] name = "program-utils" version = "0.1.0" -source = "git+https://github.com/eigerco/solana-axelar.git?rev=91c8cf2#91c8cf2aa0702d6bbaff21164d79f8640815fb53" +source = "git+https://github.com/eigerco/solana-axelar.git?rev=e212e33#e212e33de8a877e46bd5d0d74bed7597dbf3e76d" dependencies = [ "borsh 1.5.3", "rkyv", diff --git a/Cargo.toml b/Cargo.toml index bf0dd4ee6..84b72bfcf 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -63,9 +63,9 @@ service-registry = { version = "^1.1.0", path = "contracts/service-registry" } service-registry-api = { version = "^1.0.0", path = "packages/service-registry-api" } sha3 = { version = "0.10.8", default-features = false, features = [] } signature-verifier-api = { version = "^1.0.0", path = "packages/signature-verifier-api" } -axelar-solana-encoding = { git = "https://github.com/eigerco/solana-axelar.git", rev = "91c8cf2" } -gateway-event-stack = { git = "https://github.com/eigerco/solana-axelar.git", rev = "91c8cf2" } -axelar-solana-gateway = { git = "https://github.com/eigerco/solana-axelar.git", rev = "91c8cf2" } +axelar-solana-encoding = { git = "https://github.com/eigerco/solana-axelar.git", rev = "e212e33" } +gateway-event-stack = { git = "https://github.com/eigerco/solana-axelar.git", rev = "e212e33" } +axelar-solana-gateway = { git = "https://github.com/eigerco/solana-axelar.git", rev = "e212e33" } stellar = { version = "^1.0.0", path = "external-gateways/stellar" } stellar-xdr = { version = "21.2.0" } strum = { version = "0.25", default-features = false, features = ["derive"] } From 20cd40e45aa9d659fa8b5551451f7b7b4c142302 Mon Sep 17 00:00:00 2001 From: Guilherme Felipe da Silva Date: Fri, 13 Dec 2024 11:38:09 +0100 Subject: [PATCH 101/109] feat(solana): add support for CallContract with offchain data Signed-off-by: Guilherme Felipe da Silva --- ampd/src/solana/msg_verifier.rs | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/ampd/src/solana/msg_verifier.rs b/ampd/src/solana/msg_verifier.rs index 8149d4319..556b35fb8 100644 --- a/ampd/src/solana/msg_verifier.rs +++ b/ampd/src/solana/msg_verifier.rs @@ -14,13 +14,27 @@ pub fn verify_message( message: &Message, ) -> Vote { verify(match_context, tx, &message.message_id, |gateway_event| { - let GatewayEvent::CallContract(event) = gateway_event else { - return false; - }; - return event.sender_key == message.source_address - && event.payload_hash == message.payload_hash.0 - && message.destination_chain == event.destination_chain - && event.destination_contract_address == message.destination_address; + let (sender, payload_hash, destination_chain, destination_contract_address) = + match gateway_event { + GatewayEvent::CallContract(event) => ( + &event.sender_key, + &event.payload_hash, + &event.destination_chain, + &event.destination_contract_address, + ), + GatewayEvent::CallContractOffchainData(event) => ( + &event.sender_key, + &event.payload_hash, + &event.destination_chain, + &event.destination_contract_address, + ), + _ => return false, + }; + + return message.source_address == *sender + && message.payload_hash.0 == *payload_hash + && message.destination_chain == *destination_chain + && message.destination_address == *destination_contract_address; }) } From 5428556e9fafa8df01aa778422e15ac0670638c4 Mon Sep 17 00:00:00 2001 From: eloylp Date: Thu, 9 Jan 2025 20:08:47 +0100 Subject: [PATCH 102/109] feat: update axelar solana deps (#53) --- Cargo.lock | 256 ++++++++++++++++++++++++++++++++++++----- Cargo.toml | 6 +- ampd/src/solana/mod.rs | 7 +- 3 files changed, 235 insertions(+), 34 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 9e24f0408..7c646d16a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -926,7 +926,7 @@ dependencies = [ [[package]] name = "axelar-message-primitives" version = "0.1.0" -source = "git+https://github.com/eigerco/solana-axelar.git?rev=e212e33#e212e33de8a877e46bd5d0d74bed7597dbf3e76d" +source = "git+https://github.com/eigerco/solana-axelar.git?rev=11334d8#11334d8543bf2a0724aa4ba6e0844433a429470f" dependencies = [ "alloy-primitives", "alloy-sol-types", @@ -942,7 +942,7 @@ dependencies = [ [[package]] name = "axelar-solana-encoding" version = "0.1.0" -source = "git+https://github.com/eigerco/solana-axelar.git?rev=e212e33#e212e33de8a877e46bd5d0d74bed7597dbf3e76d" +source = "git+https://github.com/eigerco/solana-axelar.git?rev=11334d8#11334d8543bf2a0724aa4ba6e0844433a429470f" dependencies = [ "arrayref", "borsh 1.5.3", @@ -956,10 +956,24 @@ dependencies = [ "udigest", ] +[[package]] +name = "axelar-solana-gas-service" +version = "0.1.0" +source = "git+https://github.com/eigerco/solana-axelar.git?rev=11334d8#11334d8543bf2a0724aa4ba6e0844433a429470f" +dependencies = [ + "borsh 1.5.3", + "bytemuck", + "program-utils", + "solana-program", + "spl-token", + "spl-token-2022 5.0.2", + "thiserror 1.0.69", +] + [[package]] name = "axelar-solana-gateway" version = "0.1.0" -source = "git+https://github.com/eigerco/solana-axelar.git?rev=e212e33#e212e33de8a877e46bd5d0d74bed7597dbf3e76d" +source = "git+https://github.com/eigerco/solana-axelar.git?rev=11334d8#11334d8543bf2a0724aa4ba6e0844433a429470f" dependencies = [ "axelar-message-primitives", "axelar-solana-encoding", @@ -974,6 +988,7 @@ dependencies = [ "num-derive 0.4.2", "num-traits", "program-utils", + "role-management", "solana-program", "thiserror 1.0.69", ] @@ -3973,8 +3988,9 @@ dependencies = [ [[package]] name = "gateway-event-stack" version = "0.1.0" -source = "git+https://github.com/eigerco/solana-axelar.git?rev=e212e33#e212e33de8a877e46bd5d0d74bed7597dbf3e76d" +source = "git+https://github.com/eigerco/solana-axelar.git?rev=11334d8#11334d8543bf2a0724aa4ba6e0844433a429470f" dependencies = [ + "axelar-solana-gas-service", "axelar-solana-gateway", "base64 0.21.7", "solana-sdk", @@ -7376,9 +7392,10 @@ dependencies = [ [[package]] name = "program-utils" version = "0.1.0" -source = "git+https://github.com/eigerco/solana-axelar.git?rev=e212e33#e212e33de8a877e46bd5d0d74bed7597dbf3e76d" +source = "git+https://github.com/eigerco/solana-axelar.git?rev=11334d8#11334d8543bf2a0724aa4ba6e0844433a429470f" dependencies = [ "borsh 1.5.3", + "bytemuck", "rkyv", "solana-program", ] @@ -8249,6 +8266,18 @@ dependencies = [ "byteorder", ] +[[package]] +name = "role-management" +version = "0.1.0" +source = "git+https://github.com/eigerco/solana-axelar.git?rev=11334d8#11334d8543bf2a0724aa4ba6e0844433a429470f" +dependencies = [ + "bincode", + "bitflags 2.6.0", + "borsh 1.5.3", + "program-utils", + "solana-program", +] + [[package]] name = "ron" version = "0.7.1" @@ -9357,9 +9386,9 @@ dependencies = [ "solana-config-program", "solana-sdk", "spl-token", - "spl-token-2022", - "spl-token-group-interface", - "spl-token-metadata-interface", + "spl-token-2022 4.0.0", + "spl-token-group-interface 0.3.0", + "spl-token-metadata-interface 0.4.0", "thiserror 1.0.69", "zstd 0.11.2+zstd.1.5.2", ] @@ -9966,9 +9995,9 @@ dependencies = [ "spl-associated-token-account", "spl-memo", "spl-token", - "spl-token-2022", - "spl-token-group-interface", - "spl-token-metadata-interface", + "spl-token-2022 4.0.0", + "spl-token-group-interface 0.3.0", + "spl-token-metadata-interface 0.4.0", "thiserror 1.0.69", ] @@ -10046,6 +10075,35 @@ dependencies = [ "thiserror 1.0.69", ] +[[package]] +name = "solana-zk-sdk" +version = "2.0.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a4240a6eaae072b52c8591f31c7435ce8769feda5a15de1532090cbcbeddaba" +dependencies = [ + "aes-gcm-siv", + "base64 0.22.1", + "bincode", + "bytemuck", + "bytemuck_derive", + "curve25519-dalek 3.2.1", + "itertools 0.12.1", + "lazy_static", + "merlin", + "num-derive 0.4.2", + "num-traits", + "rand 0.7.3", + "serde", + "serde_derive", + "serde_json", + "sha3 0.9.1", + "solana-program", + "solana-sdk", + "subtle", + "thiserror 1.0.69", + "zeroize", +] + [[package]] name = "solana-zk-token-sdk" version = "2.0.16" @@ -10140,7 +10198,7 @@ dependencies = [ "num-traits", "solana-program", "spl-token", - "spl-token-2022", + "spl-token-2022 4.0.0", "thiserror 1.0.69", ] @@ -10202,6 +10260,20 @@ dependencies = [ "spl-program-error", ] +[[package]] +name = "spl-pod" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00e38c99f09d58df06ca9a29fc0211786a4c34f4d099c1df27b1abaa206569a4" +dependencies = [ + "borsh 1.5.3", + "bytemuck", + "bytemuck_derive", + "solana-program", + "solana-zk-sdk", + "spl-program-error", +] + [[package]] name = "spl-program-error" version = "0.5.0" @@ -10236,9 +10308,23 @@ dependencies = [ "bytemuck", "solana-program", "spl-discriminator", - "spl-pod", + "spl-pod 0.3.1", + "spl-program-error", + "spl-type-length-value 0.5.0", +] + +[[package]] +name = "spl-tlv-account-resolution" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29ffc5c76926c1cbc8d92ac1d9341328308d15bae04a67da5a226e36d5bc395a" +dependencies = [ + "bytemuck", + "solana-program", + "spl-discriminator", + "spl-pod 0.4.0", "spl-program-error", - "spl-type-length-value", + "spl-type-length-value 0.6.0", ] [[package]] @@ -10271,12 +10357,74 @@ dependencies = [ "solana-security-txt", "solana-zk-token-sdk", "spl-memo", - "spl-pod", + "spl-pod 0.3.1", "spl-token", - "spl-token-group-interface", - "spl-token-metadata-interface", - "spl-transfer-hook-interface", - "spl-type-length-value", + "spl-token-group-interface 0.3.0", + "spl-token-metadata-interface 0.4.0", + "spl-transfer-hook-interface 0.7.0", + "spl-type-length-value 0.5.0", + "thiserror 1.0.69", +] + +[[package]] +name = "spl-token-2022" +version = "5.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0b788a8c34a917b68b4ed2cdec255d03cc09ccba21545dac39c08a97fce640f" +dependencies = [ + "arrayref", + "bytemuck", + "num-derive 0.4.2", + "num-traits", + "num_enum 0.7.3", + "solana-program", + "solana-security-txt", + "solana-zk-sdk", + "spl-memo", + "spl-pod 0.4.0", + "spl-token", + "spl-token-confidential-transfer-ciphertext-arithmetic", + "spl-token-confidential-transfer-proof-extraction", + "spl-token-confidential-transfer-proof-generation", + "spl-token-group-interface 0.4.2", + "spl-token-metadata-interface 0.5.1", + "spl-transfer-hook-interface 0.8.2", + "spl-type-length-value 0.6.0", + "thiserror 1.0.69", +] + +[[package]] +name = "spl-token-confidential-transfer-ciphertext-arithmetic" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48df72fb98b4069979aa4806d4a634ad6f08cb0358e732e6fbac231c5dc075bd" +dependencies = [ + "base64 0.22.1", + "bytemuck", + "solana-curve25519", + "solana-zk-sdk", +] + +[[package]] +name = "spl-token-confidential-transfer-proof-extraction" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae2ce92a0b9673c44207b21d99526b96d557d5a25752f36c38fae37c49129c3b" +dependencies = [ + "bytemuck", + "solana-curve25519", + "solana-zk-sdk", + "thiserror 1.0.69", +] + +[[package]] +name = "spl-token-confidential-transfer-proof-generation" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "216517cc8cd26dfe768521542f221f91049be102d1eefd8054cde881d1b5d267" +dependencies = [ + "curve25519-dalek 3.2.1", + "solana-zk-sdk", "thiserror 1.0.69", ] @@ -10289,7 +10437,20 @@ dependencies = [ "bytemuck", "solana-program", "spl-discriminator", - "spl-pod", + "spl-pod 0.3.1", + "spl-program-error", +] + +[[package]] +name = "spl-token-group-interface" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c54728921a6f180525c4f3a4cc3b231db8da940681c8009259faa65d84c6196" +dependencies = [ + "bytemuck", + "solana-program", + "spl-discriminator", + "spl-pod 0.4.0", "spl-program-error", ] @@ -10302,9 +10463,23 @@ dependencies = [ "borsh 1.5.3", "solana-program", "spl-discriminator", - "spl-pod", + "spl-pod 0.3.1", + "spl-program-error", + "spl-type-length-value 0.5.0", +] + +[[package]] +name = "spl-token-metadata-interface" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27c7a6d2a2a4f23c8f051ba2f7edb5689f1b534b4126bd9b4ae4177685e9a341" +dependencies = [ + "borsh 1.5.3", + "solana-program", + "spl-discriminator", + "spl-pod 0.4.0", "spl-program-error", - "spl-type-length-value", + "spl-type-length-value 0.6.0", ] [[package]] @@ -10317,10 +10492,26 @@ dependencies = [ "bytemuck", "solana-program", "spl-discriminator", - "spl-pod", + "spl-pod 0.3.1", "spl-program-error", - "spl-tlv-account-resolution", - "spl-type-length-value", + "spl-tlv-account-resolution 0.7.0", + "spl-type-length-value 0.5.0", +] + +[[package]] +name = "spl-transfer-hook-interface" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b82e5ad62ad342d8fbb907b2a7aede7a5a258ce16366c26a686acc1df431fc63" +dependencies = [ + "arrayref", + "bytemuck", + "solana-program", + "spl-discriminator", + "spl-pod 0.4.0", + "spl-program-error", + "spl-tlv-account-resolution 0.8.1", + "spl-type-length-value 0.6.0", ] [[package]] @@ -10332,7 +10523,20 @@ dependencies = [ "bytemuck", "solana-program", "spl-discriminator", - "spl-pod", + "spl-pod 0.3.1", + "spl-program-error", +] + +[[package]] +name = "spl-type-length-value" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69c08deb8332a6c051f6e846b5e9c962695295dd97e0e151dccf3ef85dcf01b4" +dependencies = [ + "bytemuck", + "solana-program", + "spl-discriminator", + "spl-pod 0.4.0", "spl-program-error", ] diff --git a/Cargo.toml b/Cargo.toml index a8e85767e..2837a77e4 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -74,9 +74,9 @@ service-registry = { version = "^1.1.0", path = "contracts/service-registry" } service-registry-api = { version = "^1.0.0", path = "packages/service-registry-api" } sha3 = { version = "0.10.8", default-features = false, features = [] } signature-verifier-api = { version = "^1.0.0", path = "packages/signature-verifier-api" } -axelar-solana-encoding = { git = "https://github.com/eigerco/solana-axelar.git", rev = "e212e33" } -gateway-event-stack = { git = "https://github.com/eigerco/solana-axelar.git", rev = "e212e33" } -axelar-solana-gateway = { git = "https://github.com/eigerco/solana-axelar.git", rev = "e212e33" } +axelar-solana-encoding = { git = "https://github.com/eigerco/solana-axelar.git", rev = "11334d8" } +gateway-event-stack = { git = "https://github.com/eigerco/solana-axelar.git", rev = "11334d8" } +axelar-solana-gateway = { git = "https://github.com/eigerco/solana-axelar.git", rev = "11334d8" } stellar = { version = "^1.0.0", path = "external-gateways/stellar" } stellar-xdr = { version = "21.2.0" } strum = { version = "0.25", default-features = false, features = ["derive"] } diff --git a/ampd/src/solana/mod.rs b/ampd/src/solana/mod.rs index a6c5a0d3b..04523d8e6 100644 --- a/ampd/src/solana/mod.rs +++ b/ampd/src/solana/mod.rs @@ -1,7 +1,4 @@ -use axelar_solana_gateway::{ - processor::GatewayEvent, - state::{BytemuckedPda, GatewayConfig}, -}; +use axelar_solana_gateway::{processor::GatewayEvent, state::GatewayConfig, BytemuckedPda}; use axelar_wasm_std::msg_id::Base58SolanaTxSignatureAndEventIndex; use axelar_wasm_std::voting::Vote; use gateway_event_stack::MatchContext; @@ -44,7 +41,7 @@ impl SolanaRpcClientProxy for RpcClient { let (gateway_root_pda, ..) = axelar_solana_gateway::get_gateway_root_config_pda(); let config_data = self.get_account(&gateway_root_pda).await.ok()?.data; - let config = *GatewayConfig::read(&config_data).ok()?; + let config = *GatewayConfig::read(&config_data)?; let domain_separator = config.domain_separator; Some(domain_separator) } From 31225b4b50deb6a394ca2c515accb513af8c0dea Mon Sep 17 00:00:00 2001 From: eloylp Date: Thu, 9 Jan 2025 20:37:44 +0100 Subject: [PATCH 103/109] feat: restore multisig prover contract (#54) It will be managed later. This prepares this branch for merge with upstream. --- Cargo.lock | 1 - contracts/multisig-prover/Cargo.toml | 5 +- contracts/multisig-prover/src/encoding/mod.rs | 6 - .../multisig-prover/src/encoding/solana.rs | 188 ------------------ contracts/multisig-prover/src/error.rs | 4 - 5 files changed, 2 insertions(+), 202 deletions(-) delete mode 100644 contracts/multisig-prover/src/encoding/solana.rs diff --git a/Cargo.lock b/Cargo.lock index 7c646d16a..b8697d4d7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6094,7 +6094,6 @@ version = "1.1.1" dependencies = [ "anyhow", "assert_ok", - "axelar-solana-encoding", "axelar-wasm-std", "bcs", "client", diff --git a/contracts/multisig-prover/Cargo.toml b/contracts/multisig-prover/Cargo.toml index a295747e8..88973f686 100644 --- a/contracts/multisig-prover/Cargo.toml +++ b/contracts/multisig-prover/Cargo.toml @@ -6,8 +6,8 @@ edition = { workspace = true } description = "Multisig prover contract" exclude = [ - "contract.wasm", - "hash.txt", + "contract.wasm", + "hash.txt" ] # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html @@ -62,7 +62,6 @@ stellar-xdr = { workspace = true } sui-gateway = { workspace = true } thiserror = { workspace = true } voting-verifier = { workspace = true, features = ["library"] } -axelar-solana-encoding = { workspace = true } [dev-dependencies] anyhow = "1.0" diff --git a/contracts/multisig-prover/src/encoding/mod.rs b/contracts/multisig-prover/src/encoding/mod.rs index d7a273343..dec71dcbc 100644 --- a/contracts/multisig-prover/src/encoding/mod.rs +++ b/contracts/multisig-prover/src/encoding/mod.rs @@ -1,6 +1,5 @@ mod abi; mod bcs; -mod solana; mod stellar_xdr; use axelar_wasm_std::hash::Hash; @@ -18,7 +17,6 @@ use crate::payload::Payload; pub enum Encoder { Abi, Bcs, - Solana, StellarXdr, } @@ -35,7 +33,6 @@ impl Encoder { Encoder::StellarXdr => { stellar_xdr::payload_digest(domain_separator, verifier_set, payload) } - Encoder::Solana => solana::payload_digest(domain_separator, verifier_set, payload), } } @@ -50,9 +47,6 @@ impl Encoder { Encoder::Abi => abi::encode_execute_data(domain_separator, verifier_set, sigs, payload), Encoder::Bcs => bcs::encode_execute_data(domain_separator, verifier_set, sigs, payload), Encoder::StellarXdr => stellar_xdr::encode_execute_data(verifier_set, sigs, payload), - Encoder::Solana => { - solana::encode_execute_data(sigs, verifier_set, payload, domain_separator) - } } } } diff --git a/contracts/multisig-prover/src/encoding/solana.rs b/contracts/multisig-prover/src/encoding/solana.rs deleted file mode 100644 index cd61dcd03..000000000 --- a/contracts/multisig-prover/src/encoding/solana.rs +++ /dev/null @@ -1,188 +0,0 @@ -use axelar_wasm_std::hash::Hash; -use cosmwasm_std::HexBinary; -use itertools::Itertools; -use k256::ecdsa::RecoveryId; -use multisig::{ - key::{PublicKey, Recoverable, Signature}, - msg::SignerWithSig, - verifier_set::VerifierSet, -}; -use router_api::Message; -use std::{array::TryFromSliceError, collections::BTreeMap}; - -use crate::{error::ContractError, payload::Payload}; - -pub fn encode_execute_data( - signers_with_sigs: Vec, - verifier_set: &VerifierSet, - payload: &Payload, - domain_separator: &Hash, -) -> error_stack::Result { - // construct the base types - let verifier_set = to_verifier_set(&verifier_set)?; - let payload = to_payload(payload)?; - let payload_hash = - axelar_solana_encoding::hash_payload(domain_separator, &verifier_set, payload.clone()) - .map_err(|err| ContractError::SolanaEncoding { - reason: err.to_string(), - })?; - - // encode the signers & their signatures - let mut signers_with_signatures = BTreeMap::< - axelar_solana_encoding::types::pubkey::PublicKey, - axelar_solana_encoding::types::pubkey::Signature, - >::new(); - for signer in signers_with_sigs { - let pubkey = to_pub_key(&signer.signer.pub_key)?; - let signature = to_signature(&signer.signature, &signer.signer.pub_key, &payload_hash)?; - signers_with_signatures.insert(pubkey, signature); - } - - // encode all the data - let bytes = axelar_solana_encoding::encode( - &verifier_set, - &signers_with_signatures, - *domain_separator, - payload, - ) - .map_err(|e| ContractError::SolanaEncoding { - reason: e.to_string(), - })?; - - Ok(HexBinary::from(bytes)) -} - -pub fn payload_digest( - domain_separator: &Hash, - verifier_set: &VerifierSet, - payload: &Payload, -) -> error_stack::Result { - let verifier_set = to_verifier_set(verifier_set)?; - let payload = to_payload(payload)?; - let hash = axelar_solana_encoding::hash_payload(domain_separator, &verifier_set, payload) - .map_err(|err| ContractError::SolanaEncoding { - reason: err.to_string(), - })?; - Ok(hash) -} - -/// Transform from Axelar VerifierSet to axelar_solana_encoding VerifierSet -fn to_verifier_set( - vs: &VerifierSet, -) -> error_stack::Result { - let mut signers = BTreeMap::new(); - - for (_cosmwasm_adr, signer) in vs.signers.iter() { - let pub_key = to_pub_key(&signer.pub_key)?; - let weight = signer.weight.u128(); - signers.insert(pub_key, weight); - } - - let verifier_set = axelar_solana_encoding::types::verifier_set::VerifierSet { - nonce: vs.created_at, - signers, - quorum: vs.threshold.u128(), - }; - Ok(verifier_set) -} - -fn to_pub_key( - pk: &PublicKey, -) -> error_stack::Result { - use axelar_solana_encoding::types::pubkey::ED25519_PUBKEY_LEN; - use axelar_solana_encoding::types::pubkey::SECP256K1_COMPRESSED_PUBKEY_LEN; - Ok(match pk { - PublicKey::Ecdsa(hb) => axelar_solana_encoding::types::pubkey::PublicKey::Secp256k1( - hb.to_array::() - .map_err(|err| ContractError::SolanaEncoding { - reason: err.to_string(), - })?, - ), - PublicKey::Ed25519(hb) => axelar_solana_encoding::types::pubkey::PublicKey::Ed25519( - hb.to_array::() - .map_err(|err| ContractError::SolanaEncoding { - reason: err.to_string(), - })?, - ), - }) -} - -fn to_payload( - payload: &Payload, -) -> error_stack::Result { - let payload = match payload { - Payload::Messages(msgs) => { - let messages = msgs.into_iter().map(|msg| to_msg(msg)).collect_vec(); - let messages = axelar_solana_encoding::types::messages::Messages(messages); - axelar_solana_encoding::types::payload::Payload::Messages(messages) - } - Payload::VerifierSet(vs) => { - let verifier_set = to_verifier_set(&vs)?; - axelar_solana_encoding::types::payload::Payload::NewVerifierSet(verifier_set) - } - }; - Ok(payload) -} - -fn to_msg(msg: &Message) -> axelar_solana_encoding::types::messages::Message { - let cc_id = axelar_solana_encoding::types::messages::CrossChainId { - chain: msg.cc_id.source_chain.to_string(), - id: msg.cc_id.message_id.to_string(), - }; - - axelar_solana_encoding::types::messages::Message { - cc_id, - source_address: msg.source_address.to_string(), - destination_chain: msg.destination_chain.to_string(), - destination_address: msg.destination_address.to_string(), - payload_hash: msg.payload_hash, - } -} - -fn to_signature( - sig: &Signature, - pub_key: &PublicKey, - payload_hash: &[u8; 32], -) -> error_stack::Result { - let recovery_transform = |recovery_byte: RecoveryId| -> u8 { recovery_byte.to_byte() }; - match sig { - Signature::Ecdsa(nonrec) => { - let recov = nonrec - .to_recoverable(payload_hash, pub_key, recovery_transform) - .map_err(|e| ContractError::SolanaEncoding { - reason: e.to_string(), - })?; - Ok( - axelar_solana_encoding::types::pubkey::Signature::EcdsaRecoverable( - recoverable_ecdsa_to_array(&recov)?, - ), - ) - } - Signature::EcdsaRecoverable(r) => Ok( - axelar_solana_encoding::types::pubkey::Signature::EcdsaRecoverable( - recoverable_ecdsa_to_array(r)?, - ), - ), - Signature::Ed25519(ed) => { - let data = ed.as_ref().try_into().map_err(|e: TryFromSliceError| { - ContractError::SolanaEncoding { - reason: e.to_string(), - } - })?; - - Ok(axelar_solana_encoding::types::pubkey::Signature::Ed25519( - data, - )) - } - } -} - -fn recoverable_ecdsa_to_array(rec: &Recoverable) -> error_stack::Result<[u8; 65], ContractError> { - let res = - rec.as_ref() - .try_into() - .map_err(|e: TryFromSliceError| ContractError::SolanaEncoding { - reason: e.to_string(), - })?; - Ok(res) -} diff --git a/contracts/multisig-prover/src/error.rs b/contracts/multisig-prover/src/error.rs index e2f853e7e..4745f2322 100644 --- a/contracts/multisig-prover/src/error.rs +++ b/contracts/multisig-prover/src/error.rs @@ -43,10 +43,6 @@ pub enum ContractError { #[error(transparent)] BcsError(#[from] bcs::Error), - // NOTE: using string "reason" because the `axelar_solana_encoding::error::Error` does not implement PartialEq - #[error("Solana encoding/decoding error: [0]")] - SolanaEncoding { reason: String }, - #[error("verifier set has not changed sufficiently since last update")] VerifierSetUnchanged, From 1a6b3a87c4f1ae11b27e926eda2e1195b75f4d00 Mon Sep 17 00:00:00 2001 From: eloylp Date: Fri, 10 Jan 2025 10:51:31 +0100 Subject: [PATCH 104/109] fix: import order --- ampd/Cargo.toml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ampd/Cargo.toml b/ampd/Cargo.toml index e5af7842f..95b84d64e 100644 --- a/ampd/Cargo.toml +++ b/ampd/Cargo.toml @@ -7,6 +7,8 @@ rust-version = { workspace = true } [dependencies] async-trait = "0.1.59" +axelar-solana-encoding = { workspace = true } +axelar-solana-gateway = { workspace = true } axelar-wasm-std = { workspace = true } axum = "0.7.5" base64 = "0.21.2" @@ -71,7 +73,7 @@ sui-gateway = { workspace = true } sui-json-rpc-types = { git = "https://github.com/mystenlabs/sui", tag = "testnet-v1.39.1" } sui-types = { git = "https://github.com/mystenlabs/sui", tag = "testnet-v1.39.1" } tendermint = "0.35.0" -tendermint-rpc = { version = "0.35.0", features = [ "http-client" ] } +tendermint-rpc = { version = "0.35.0", features = ["http-client"] } thiserror = { workspace = true } tokio = { workspace = true, features = ["signal"] } tokio-stream = { workspace = true, features = ["sync"] } @@ -90,8 +92,6 @@ url = "2.3.1" valuable = { version = "0.1.0", features = ["derive"] } valuable-serde = { version = "0.1.0", features = ["std"] } voting-verifier = { workspace = true } -axelar-solana-gateway = { workspace = true } -axelar-solana-encoding = { workspace = true } [dev-dependencies] assert_ok = { workspace = true } From cc168e542b33285321619cef6c0b6bf86be9bf4a Mon Sep 17 00:00:00 2001 From: eloylp Date: Fri, 10 Jan 2025 10:55:36 +0100 Subject: [PATCH 105/109] fix: be consistent in test fixtures --- ampd/src/config.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ampd/src/config.rs b/ampd/src/config.rs index 7441bb3a9..f81a06f6b 100644 --- a/ampd/src/config.rs +++ b/ampd/src/config.rs @@ -139,13 +139,13 @@ mod tests { [[handlers]] type = 'SolanaMsgVerifier' - rpc_url = 'http://127.0.0.1' + rpc_url = 'http://localhost' cosmwasm_contract = '{}' max_tx_cache_entries = 6 [[handlers]] type = 'SolanaVerifierSetVerifier' - chain_rpc_url = 'http://127.0.0.1' + chain_rpc_url = 'http://localhost' cosmwasm_contract = '{}' rpc_url = 'http://localhost:7545' ", From 66504ea9f8b12f3a9493f97dae5214a533ab9d4c Mon Sep 17 00:00:00 2001 From: eloylp Date: Fri, 10 Jan 2025 11:05:00 +0100 Subject: [PATCH 106/109] fix: function name --- ampd/src/solana/mod.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ampd/src/solana/mod.rs b/ampd/src/solana/mod.rs index 04523d8e6..5e0183288 100644 --- a/ampd/src/solana/mod.rs +++ b/ampd/src/solana/mod.rs @@ -59,7 +59,7 @@ pub fn verify( match_context: &MatchContext, tx: (&Signature, &UiTransactionStatusMeta), message_id: &Base58SolanaTxSignatureAndEventIndex, - evens_are_equal: F, + events_are_equal: F, ) -> Vote where F: Fn(&GatewayEvent) -> bool, @@ -120,7 +120,7 @@ where .into_iter() .find(|(idx, _)| *idx == desired_event_idx) { - if evens_are_equal(&event) { + if events_are_equal(&event) { // proxy the desired vote status of whether the ix succeeded return vote; } From 6499d823dbc02d4852f53466a6c013b3eec05127 Mon Sep 17 00:00:00 2001 From: eloylp Date: Fri, 10 Jan 2025 11:17:07 +0100 Subject: [PATCH 107/109] fix: be consistent in tes fixture rpc_url param --- ampd/src/config.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/ampd/src/config.rs b/ampd/src/config.rs index f81a06f6b..99e367f2c 100644 --- a/ampd/src/config.rs +++ b/ampd/src/config.rs @@ -145,9 +145,8 @@ mod tests { [[handlers]] type = 'SolanaVerifierSetVerifier' - chain_rpc_url = 'http://localhost' - cosmwasm_contract = '{}' rpc_url = 'http://localhost:7545' + cosmwasm_contract = '{}' ", TMAddress::random(PREFIX), TMAddress::random(PREFIX), From fb6bff497686c495fbc754178e1387415b3592f7 Mon Sep 17 00:00:00 2001 From: eloylp Date: Mon, 13 Jan 2025 14:11:09 +0100 Subject: [PATCH 108/109] fix: make clippy happy --- ampd/src/solana/mod.rs | 4 ++-- ampd/src/solana/msg_verifier.rs | 4 ++-- ampd/src/solana/verifier_set_verifier.rs | 4 ++-- ampd/src/stellar/verifier.rs | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/ampd/src/solana/mod.rs b/ampd/src/solana/mod.rs index 5e0183288..55a1a442a 100644 --- a/ampd/src/solana/mod.rs +++ b/ampd/src/solana/mod.rs @@ -25,7 +25,7 @@ pub trait SolanaRpcClientProxy: Send + Sync + 'static { impl SolanaRpcClientProxy for RpcClient { async fn get_tx(&self, signature: &Signature) -> Option { self.get_transaction( - &signature, + signature, solana_transaction_status::UiTransactionEncoding::Base58, ) .map(|tx_data_result| { @@ -91,7 +91,7 @@ where // pare the events let event_stack = gateway_event_stack::build_program_event_stack( - &match_context, + match_context, logs, gateway_event_stack::parse_gateway_logs, ); diff --git a/ampd/src/solana/msg_verifier.rs b/ampd/src/solana/msg_verifier.rs index 556b35fb8..265c7df4a 100644 --- a/ampd/src/solana/msg_verifier.rs +++ b/ampd/src/solana/msg_verifier.rs @@ -31,10 +31,10 @@ pub fn verify_message( _ => return false, }; - return message.source_address == *sender + message.source_address == *sender && message.payload_hash.0 == *payload_hash && message.destination_chain == *destination_chain - && message.destination_address == *destination_contract_address; + && message.destination_address == *destination_contract_address }) } diff --git a/ampd/src/solana/verifier_set_verifier.rs b/ampd/src/solana/verifier_set_verifier.rs index 798040c5a..b0363e479 100644 --- a/ampd/src/solana/verifier_set_verifier.rs +++ b/ampd/src/solana/verifier_set_verifier.rs @@ -37,13 +37,13 @@ pub fn verify_verifier_set( return false; }; - let Ok(desired_hash) = verifier_set_hash::(&verifier_set, &domain_separator) + let Ok(desired_hash) = verifier_set_hash::(&verifier_set, domain_separator) else { error!("verifier set could not be hashed"); return false; }; - return &desired_hash == incoming_verifier_set_hash; + &desired_hash == incoming_verifier_set_hash }) } diff --git a/ampd/src/stellar/verifier.rs b/ampd/src/stellar/verifier.rs index 6093fee3c..ba284c30f 100644 --- a/ampd/src/stellar/verifier.rs +++ b/ampd/src/stellar/verifier.rs @@ -69,7 +69,7 @@ impl PartialEq for VerifierSetConfirmation { } } -pub fn verify_message(gateway_address: &ScAddress, tx_receipt: &TxResponse, msg: &Message) -> Vote { +pub fn verify_message(gateway_address: &ScAddress, tx_receipt: &TxResponse, msg: &Message) -> Vote { verify( gateway_address, tx_receipt, From bfa70edb72405b9048ca1b870f5a68762b124f7c Mon Sep 17 00:00:00 2001 From: eloylp Date: Thu, 16 Jan 2025 15:55:55 +0100 Subject: [PATCH 109/109] feat: update axelar-solana deps bugfix on event parsing --- Cargo.lock | 14 +++++++------- Cargo.toml | 6 +++--- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b8697d4d7..ba5733390 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -926,7 +926,7 @@ dependencies = [ [[package]] name = "axelar-message-primitives" version = "0.1.0" -source = "git+https://github.com/eigerco/solana-axelar.git?rev=11334d8#11334d8543bf2a0724aa4ba6e0844433a429470f" +source = "git+https://github.com/eigerco/solana-axelar.git?rev=2688729#2688729914266692ca7817befa95ed0951a097c1" dependencies = [ "alloy-primitives", "alloy-sol-types", @@ -942,7 +942,7 @@ dependencies = [ [[package]] name = "axelar-solana-encoding" version = "0.1.0" -source = "git+https://github.com/eigerco/solana-axelar.git?rev=11334d8#11334d8543bf2a0724aa4ba6e0844433a429470f" +source = "git+https://github.com/eigerco/solana-axelar.git?rev=2688729#2688729914266692ca7817befa95ed0951a097c1" dependencies = [ "arrayref", "borsh 1.5.3", @@ -959,7 +959,7 @@ dependencies = [ [[package]] name = "axelar-solana-gas-service" version = "0.1.0" -source = "git+https://github.com/eigerco/solana-axelar.git?rev=11334d8#11334d8543bf2a0724aa4ba6e0844433a429470f" +source = "git+https://github.com/eigerco/solana-axelar.git?rev=2688729#2688729914266692ca7817befa95ed0951a097c1" dependencies = [ "borsh 1.5.3", "bytemuck", @@ -973,7 +973,7 @@ dependencies = [ [[package]] name = "axelar-solana-gateway" version = "0.1.0" -source = "git+https://github.com/eigerco/solana-axelar.git?rev=11334d8#11334d8543bf2a0724aa4ba6e0844433a429470f" +source = "git+https://github.com/eigerco/solana-axelar.git?rev=2688729#2688729914266692ca7817befa95ed0951a097c1" dependencies = [ "axelar-message-primitives", "axelar-solana-encoding", @@ -3988,7 +3988,7 @@ dependencies = [ [[package]] name = "gateway-event-stack" version = "0.1.0" -source = "git+https://github.com/eigerco/solana-axelar.git?rev=11334d8#11334d8543bf2a0724aa4ba6e0844433a429470f" +source = "git+https://github.com/eigerco/solana-axelar.git?rev=2688729#2688729914266692ca7817befa95ed0951a097c1" dependencies = [ "axelar-solana-gas-service", "axelar-solana-gateway", @@ -7391,7 +7391,7 @@ dependencies = [ [[package]] name = "program-utils" version = "0.1.0" -source = "git+https://github.com/eigerco/solana-axelar.git?rev=11334d8#11334d8543bf2a0724aa4ba6e0844433a429470f" +source = "git+https://github.com/eigerco/solana-axelar.git?rev=2688729#2688729914266692ca7817befa95ed0951a097c1" dependencies = [ "borsh 1.5.3", "bytemuck", @@ -8268,7 +8268,7 @@ dependencies = [ [[package]] name = "role-management" version = "0.1.0" -source = "git+https://github.com/eigerco/solana-axelar.git?rev=11334d8#11334d8543bf2a0724aa4ba6e0844433a429470f" +source = "git+https://github.com/eigerco/solana-axelar.git?rev=2688729#2688729914266692ca7817befa95ed0951a097c1" dependencies = [ "bincode", "bitflags 2.6.0", diff --git a/Cargo.toml b/Cargo.toml index 2837a77e4..7e2641fe0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -74,9 +74,9 @@ service-registry = { version = "^1.1.0", path = "contracts/service-registry" } service-registry-api = { version = "^1.0.0", path = "packages/service-registry-api" } sha3 = { version = "0.10.8", default-features = false, features = [] } signature-verifier-api = { version = "^1.0.0", path = "packages/signature-verifier-api" } -axelar-solana-encoding = { git = "https://github.com/eigerco/solana-axelar.git", rev = "11334d8" } -gateway-event-stack = { git = "https://github.com/eigerco/solana-axelar.git", rev = "11334d8" } -axelar-solana-gateway = { git = "https://github.com/eigerco/solana-axelar.git", rev = "11334d8" } +axelar-solana-encoding = { git = "https://github.com/eigerco/solana-axelar.git", rev = "2688729" } +gateway-event-stack = { git = "https://github.com/eigerco/solana-axelar.git", rev = "2688729" } +axelar-solana-gateway = { git = "https://github.com/eigerco/solana-axelar.git", rev = "2688729" } stellar = { version = "^1.0.0", path = "external-gateways/stellar" } stellar-xdr = { version = "21.2.0" } strum = { version = "0.25", default-features = false, features = ["derive"] }