From c94e8b5c471a4a3f69f6b949f88968415550c0d7 Mon Sep 17 00:00:00 2001 From: Bruno Campos Date: Mon, 19 Aug 2024 16:09:13 -0300 Subject: [PATCH 01/25] substrate initial commit --- Cargo.lock | 3326 ++++++++++++++++- packages/kos-sdk/Cargo.toml | 16 +- .../kos-sdk/artifacts/ksm-klever-node.scale | Bin 0 -> 357959 bytes packages/kos-sdk/src/chains/mod.rs | 1 + packages/kos-sdk/src/chains/substrate/mod.rs | 57 + 5 files changed, 3200 insertions(+), 200 deletions(-) create mode 100644 packages/kos-sdk/artifacts/ksm-klever-node.scale create mode 100644 packages/kos-sdk/src/chains/substrate/mod.rs diff --git a/Cargo.lock b/Cargo.lock index bd7a4df..d133ebb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,6 +2,16 @@ # It is not intended for manual editing. version = 3 +[[package]] +name = "Inflector" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3" +dependencies = [ + "lazy_static", + "regex", +] + [[package]] name = "addr2line" version = "0.22.0" @@ -52,6 +62,19 @@ dependencies = [ "subtle", ] +[[package]] +name = "ahash" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" +dependencies = [ + "cfg-if", + "getrandom", + "once_cell", + "version_check", + "zerocopy", +] + [[package]] name = "aho-corasick" version = "1.1.3" @@ -61,18 +84,313 @@ dependencies = [ "memchr", ] +[[package]] +name = "allocator-api2" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" + +[[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 = "ansi_term" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" +dependencies = [ + "winapi", +] + [[package]] name = "anyhow" version = "1.0.86" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" +[[package]] +name = "ark-bls12-377" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb00293ba84f51ce3bd026bd0de55899c4e68f0a39a5728cebae3a73ffdc0a4f" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-std", +] + +[[package]] +name = "ark-bls12-381" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c775f0d12169cba7aae4caeb547bb6a50781c7449a8aa53793827c9ec4abf488" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-serialize", + "ark-std", +] + +[[package]] +name = "ark-ec" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "defd9a439d56ac24968cca0571f598a61bc8c55f71d50a89cda591cb750670ba" +dependencies = [ + "ark-ff", + "ark-poly", + "ark-serialize", + "ark-std", + "derivative", + "hashbrown 0.13.2", + "itertools 0.10.5", + "num-traits", + "zeroize", +] + +[[package]] +name = "ark-ff" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec847af850f44ad29048935519032c33da8aa03340876d351dfab5660d2966ba" +dependencies = [ + "ark-ff-asm", + "ark-ff-macros", + "ark-serialize", + "ark-std", + "derivative", + "digest 0.10.7", + "itertools 0.10.5", + "num-bigint", + "num-traits", + "paste", + "rustc_version", + "zeroize", +] + +[[package]] +name = "ark-ff-asm" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" +dependencies = [ + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-ff-macros" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" +dependencies = [ + "num-bigint", + "num-traits", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-poly" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d320bfc44ee185d899ccbadfa8bc31aab923ce1558716e1997a1e74057fe86bf" +dependencies = [ + "ark-ff", + "ark-serialize", + "ark-std", + "derivative", + "hashbrown 0.13.2", +] + +[[package]] +name = "ark-serialize" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" +dependencies = [ + "ark-serialize-derive", + "ark-std", + "digest 0.10.7", + "num-bigint", +] + +[[package]] +name = "ark-serialize-derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae3281bc6d0fd7e549af32b52511e1302185bd688fd3359fa36423346ff682ea" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-std" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" +dependencies = [ + "num-traits", + "rand", +] + +[[package]] +name = "array-bytes" +version = "6.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d5dde061bd34119e902bbb2d9b90c5692635cf59fb91d582c2b68043f1b8293" + +[[package]] +name = "arrayref" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545" + +[[package]] +name = "arrayvec" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd9fd44efafa8690358b7408d253adf110036b88f55672a933f01d616ad9b1b9" +dependencies = [ + "nodrop", +] + [[package]] name = "arrayvec" version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" +[[package]] +name = "async-channel" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a" +dependencies = [ + "concurrent-queue", + "event-listener-strategy", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-executor" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8828ec6e544c02b0d6691d21ed9f9218d0384a82542855073c2a3f58304aaf0" +dependencies = [ + "async-task", + "concurrent-queue", + "fastrand", + "futures-lite", + "slab", +] + +[[package]] +name = "async-fs" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebcd09b382f40fcd159c2d695175b2ae620ffa5f3bd6f664131efff4e8b9e04a" +dependencies = [ + "async-lock", + "blocking", + "futures-lite", +] + +[[package]] +name = "async-io" +version = "2.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d6baa8f0178795da0e71bc42c9e5d13261aac7ee549853162e66a241ba17964" +dependencies = [ + "async-lock", + "cfg-if", + "concurrent-queue", + "futures-io", + "futures-lite", + "parking", + "polling", + "rustix", + "slab", + "tracing", + "windows-sys 0.52.0", +] + +[[package]] +name = "async-lock" +version = "3.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" +dependencies = [ + "event-listener 5.3.1", + "event-listener-strategy", + "pin-project-lite", +] + +[[package]] +name = "async-net" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b948000fad4873c1c9339d60f2623323a0cfd3816e5181033c6a5cb68b2accf7" +dependencies = [ + "async-io", + "blocking", + "futures-lite", +] + +[[package]] +name = "async-process" +version = "2.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7eda79bbd84e29c2b308d1dc099d7de8dcc7035e48f4bf5dc4a531a44ff5e2a" +dependencies = [ + "async-channel", + "async-io", + "async-lock", + "async-signal", + "async-task", + "blocking", + "cfg-if", + "event-listener 5.3.1", + "futures-lite", + "rustix", + "tracing", + "windows-sys 0.52.0", +] + +[[package]] +name = "async-signal" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "794f185324c2f00e771cd9f1ae8b5ac68be2ca7abb129a87afd6e86d228bc54d" +dependencies = [ + "async-io", + "async-lock", + "atomic-waker", + "cfg-if", + "futures-core", + "futures-io", + "rustix", + "signal-hook-registry", + "slab", + "windows-sys 0.52.0", +] + [[package]] name = "async-stream" version = "0.3.5" @@ -95,6 +413,23 @@ dependencies = [ "syn 2.0.66", ] +[[package]] +name = "async-task" +version = "4.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" + +[[package]] +name = "async-trait" +version = "0.1.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6fa2087f2753a7da8cc1c0dbfcf89579dd57458e36769de5ac750b4671737ca" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", +] + [[package]] name = "atomic-polyfill" version = "1.0.3" @@ -104,6 +439,18 @@ dependencies = [ "critical-section", ] +[[package]] +name = "atomic-take" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8ab6b55fe97976e46f91ddbed8d147d966475dc29b2032757ba47e02376fbc3" + +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + [[package]] name = "autocfg" version = "1.3.0" @@ -167,6 +514,26 @@ version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d86b93f97252c47b41663388e6d155714a9d0c398b99f1005cbc5f978b29f445" +[[package]] +name = "beef" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a8241f3ebb85c056b509d4327ad0358fbbba6ffb340bf388f26350aeda225b1" +dependencies = [ + "serde", +] + +[[package]] +name = "bip39" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93f2635620bf0b9d4576eb7bb9a38a55df78bd1205d26fa994b25911a69f212f" +dependencies = [ + "bitcoin_hashes 0.11.0", + "serde", + "unicode-normalization", +] + [[package]] name = "bitcoin" version = "0.30.2" @@ -175,9 +542,9 @@ checksum = "1945a5048598e4189e239d3f809b19bdad4845c4b2ba400d304d2dcf26d2c462" dependencies = [ "bech32", "bitcoin-private", - "bitcoin_hashes", + "bitcoin_hashes 0.12.0", "hex_lit", - "secp256k1", + "secp256k1 0.27.0", "serde", ] @@ -187,6 +554,12 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "73290177011694f38ec25e165d0387ab7ea749a4b81cd4c80dae5988229f7a57" +[[package]] +name = "bitcoin_hashes" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90064b8dee6815a6470d60bad07bbbaee885c0e12d04177138fa3291a01b7bc4" + [[package]] name = "bitcoin_hashes" version = "0.12.0" @@ -222,39 +595,103 @@ dependencies = [ ] [[package]] -name = "block-buffer" -version = "0.10.4" +name = "blake2" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" dependencies = [ - "generic-array", + "digest 0.10.7", ] [[package]] -name = "block-padding" -version = "0.3.3" +name = "blake2-rfc" +version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8894febbff9f758034a5b8e12d87918f56dfc64a8e1fe757d65e29041538d93" +checksum = "5d6d530bdd2d52966a6d03b7a964add7ae1a288d25214066fd4b600f0f796400" dependencies = [ - "generic-array", + "arrayvec 0.4.12", + "constant_time_eq 0.1.5", ] [[package]] -name = "bs58" -version = "0.5.1" +name = "blake2b_simd" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" +checksum = "23285ad32269793932e830392f2fe2f83e26488fd3ec778883a93c8323735780" dependencies = [ - "sha2", - "tinyvec", + "arrayref", + "arrayvec 0.7.4", + "constant_time_eq 0.3.0", ] [[package]] -name = "bumpalo" -version = "3.16.0" +name = "block-buffer" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" - +checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" +dependencies = [ + "generic-array", +] + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "block-padding" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8894febbff9f758034a5b8e12d87918f56dfc64a8e1fe757d65e29041538d93" +dependencies = [ + "generic-array", +] + +[[package]] +name = "blocking" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea" +dependencies = [ + "async-channel", + "async-task", + "futures-io", + "futures-lite", + "piper", +] + +[[package]] +name = "bounded-collections" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d32385ecb91a31bddaf908e8dcf4a15aef1bcd3913cc03ebfad02ff6d568abc1" +dependencies = [ + "log", + "parity-scale-codec", + "scale-info", + "serde", +] + +[[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 = "bumpalo" +version = "3.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" + [[package]] name = "byte-slice-cast" version = "1.2.2" @@ -294,6 +731,12 @@ version = "1.0.98" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "41c270e7540d725e65ac7f1b212ac8ce349719624d7bcff99f8e2e488e8cf03f" +[[package]] +name = "cesu8" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" + [[package]] name = "cfb-mode" version = "0.8.2" @@ -309,14 +752,34 @@ 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 = "chacha20" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3613f74bd2eac03dad61bd53dbe620703d4371614fe0bc3b9f04dd36fe4e818" +dependencies = [ + "cfg-if", + "cipher", + "cpufeatures", +] + [[package]] name = "chrono" version = "0.4.38" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" dependencies = [ + "android-tzdata", + "iana-time-zone", "num-traits", "serde", + "windows-targets 0.52.5", ] [[package]] @@ -343,11 +806,11 @@ checksum = "3b6be4a5df2098cd811f3194f64ddb96c267606bffd9689ac7b0160097b01ad3" dependencies = [ "bs58", "coins-core", - "digest", - "hmac", + "digest 0.10.7", + "hmac 0.12.1", "k256", "serde", - "sha2", + "sha2 0.10.8", "thiserror", ] @@ -359,11 +822,11 @@ checksum = "3db8fba409ce3dc04f7d804074039eb68b960b0829161f8e06c95fea3f122528" dependencies = [ "bitvec", "coins-bip32", - "hmac", + "hmac 0.12.1", "once_cell", "pbkdf2", "rand", - "sha2", + "sha2 0.10.8", "thiserror", ] @@ -376,13 +839,13 @@ dependencies = [ "base64 0.21.7", "bech32", "bs58", - "digest", + "digest 0.10.7", "generic-array", "hex", "ripemd", "serde", "serde_derive", - "sha2", + "sha2 0.10.8", "sha3", "thiserror", ] @@ -393,6 +856,31 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" +[[package]] +name = "combine" +version = "4.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" +dependencies = [ + "bytes", + "memchr", +] + +[[package]] +name = "common-path" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2382f75942f4b3be3690fe4f86365e9c853c1587d6ee58212cebf6e2a9ccd101" + +[[package]] +name = "concurrent-queue" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" +dependencies = [ + "crossbeam-utils", +] + [[package]] name = "console_error_panic_hook" version = "0.1.7" @@ -409,6 +897,24 @@ version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" +[[package]] +name = "constant_time_eq" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" + +[[package]] +name = "constant_time_eq" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2" + +[[package]] +name = "constcat" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd7e35aee659887cbfb97aaf227ac12cad1a9d7c71e55ff3376839ed4e282d08" + [[package]] name = "convert_case" version = "0.4.0" @@ -455,6 +961,21 @@ version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7059fff8937831a9ae6f0fe4d658ffabf58f2ca96aa9dec1c889f936f705f216" +[[package]] +name = "crossbeam-queue" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df0346b5d5e76ac2fe4e327c5fd1118d6be7c51dfb18f9b7922923f287471e35" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" + [[package]] name = "crunchy" version = "0.2.2" @@ -484,6 +1005,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 = "ctr" version = "0.9.2" @@ -502,7 +1033,7 @@ dependencies = [ "cfg-if", "cpufeatures", "curve25519-dalek-derive", - "digest", + "digest 0.10.7", "fiat-crypto", "rustc_version", "subtle", @@ -520,6 +1051,76 @@ dependencies = [ "syn 2.0.66", ] +[[package]] +name = "darling" +version = "0.14.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b750cb3417fd1b327431a470f388520309479ab0bf5e323505daf0290cd3850" +dependencies = [ + "darling_core 0.14.4", + "darling_macro 0.14.4", +] + +[[package]] +name = "darling" +version = "0.20.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83b2eb4d90d12bdda5ed17de686c2acb4c57914f8f921b8da7e112b5a36f3fe1" +dependencies = [ + "darling_core 0.20.9", + "darling_macro 0.20.9", +] + +[[package]] +name = "darling_core" +version = "0.14.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim 0.10.0", + "syn 1.0.109", +] + +[[package]] +name = "darling_core" +version = "0.20.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "622687fe0bac72a04e5599029151f5796111b90f1baaa9b544d807a5e31cd120" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim 0.11.1", + "syn 2.0.66", +] + +[[package]] +name = "darling_macro" +version = "0.14.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e" +dependencies = [ + "darling_core 0.14.4", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "darling_macro" +version = "0.20.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "733cabb43482b1a1b53eee8583c2b9e8684d592215ea83efd305dd31bc2f0178" +dependencies = [ + "darling_core 0.20.9", + "quote", + "syn 2.0.66", +] + [[package]] name = "der" version = "0.7.9" @@ -530,6 +1131,39 @@ dependencies = [ "zeroize", ] +[[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.109", +] + +[[package]] +name = "derive-syn-parse" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d65d7ce8132b7c0e54497a4d9a55a1c2a0912a0d786cf894472ba818fba45762" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", +] + +[[package]] +name = "derive-where" +version = "1.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62d671cc41a825ebabc75757b62d3d168c577f9149b2d49ece1dad1f72119d25" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", +] + [[package]] name = "derive_more" version = "0.99.17" @@ -543,18 +1177,54 @@ dependencies = [ "syn 1.0.109", ] +[[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.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ - "block-buffer", + "block-buffer 0.10.4", "const-oid", "crypto-common", "subtle", ] +[[package]] +name = "docify" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a2f138ad521dc4a2ced1a4576148a6a610b4c5923933b062a263130a6802ce" +dependencies = [ + "docify_macros", +] + +[[package]] +name = "docify_macros" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a081e51fb188742f5a7a1164ad752121abcb22874b21e2c3b0dd040c515fdad" +dependencies = [ + "common-path", + "derive-syn-parse", + "once_cell", + "proc-macro2", + "quote", + "regex", + "syn 2.0.66", + "termcolor", + "toml", + "walkdir", +] + [[package]] name = "dotenv-build" version = "0.1.1" @@ -567,6 +1237,39 @@ version = "0.15.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" +[[package]] +name = "downcast-rs" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" + +[[package]] +name = "dyn-clonable" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e9232f0e607a262ceb9bd5141a3dfb3e4db6994b31989bbfd845878cba59fd4" +dependencies = [ + "dyn-clonable-impl", + "dyn-clone", +] + +[[package]] +name = "dyn-clonable-impl" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "558e40ea573c374cf53507fd240b7ee2f5477df7cfebdb97323ec61c719399c5" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "dyn-clone" +version = "1.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125" + [[package]] name = "ecdsa" version = "0.16.9" @@ -574,9 +1277,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" dependencies = [ "der", - "digest", + "digest 0.10.7", "elliptic-curve", "rfc6979", + "serdect", "signature", "spki", ] @@ -601,11 +1305,26 @@ dependencies = [ "curve25519-dalek", "ed25519", "serde", - "sha2", + "sha2 0.10.8", "subtle", "zeroize", ] +[[package]] +name = "ed25519-zebra" +version = "4.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d9ce6874da5d4415896cd45ffbc4d1cfc0c4f9c079427bd870742c30f2f65a9" +dependencies = [ + "curve25519-dalek", + "ed25519", + "hashbrown 0.14.5", + "hex", + "rand_core", + "sha2 0.10.8", + "zeroize", +] + [[package]] name = "either" version = "1.12.0" @@ -620,13 +1339,14 @@ checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" dependencies = [ "base16ct", "crypto-bigint", - "digest", + "digest 0.10.7", "ff", "generic-array", "group", "pkcs8", "rand_core", "sec1", + "serdect", "subtle", "zeroize", ] @@ -682,6 +1402,12 @@ dependencies = [ "syn 2.0.66", ] +[[package]] +name = "environmental" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e48c92028aaa870e83d51c64e5d4e0b6981b360c522198c23959f219a4e1b15b" + [[package]] name = "equivalent" version = "1.0.1" @@ -753,23 +1479,69 @@ dependencies = [ ] [[package]] -name = "fastrand" -version = "2.1.0" +name = "event-listener" +version = "4.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a" +checksum = "67b215c49b2b248c855fb73579eb1f4f26c38ffdc12973e20e07b91d78d5646e" +dependencies = [ + "concurrent-queue", + "pin-project-lite", +] [[package]] -name = "fdeflate" -version = "0.3.4" +name = "event-listener" +version = "5.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f9bfee30e4dedf0ab8b422f03af778d9612b63f502710fc500a334ebe2de645" +checksum = "6032be9bd27023a771701cc49f9f053c751055f71efb2e0ae5c15809093675ba" dependencies = [ - "simd-adler32", + "concurrent-queue", + "parking", + "pin-project-lite", ] [[package]] -name = "ff" -version = "0.13.0" +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 = "expander" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2c470c71d91ecbd179935b24170459e926382eaaa86b590b78814e180d8a8e2" +dependencies = [ + "blake2", + "file-guard", + "fs-err", + "prettyplease 0.2.20", + "proc-macro2", + "quote", + "syn 2.0.66", +] + +[[package]] +name = "fastrand" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a" + +[[package]] +name = "fdeflate" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f9bfee30e4dedf0ab8b422f03af778d9612b63f502710fc500a334ebe2de645" +dependencies = [ + "simd-adler32", +] + +[[package]] +name = "ff" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" dependencies = [ @@ -783,6 +1555,26 @@ version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" +[[package]] +name = "file-guard" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21ef72acf95ec3d7dbf61275be556299490a245f017cf084bd23b4f68cf9407c" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "finito" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2384245d85162258a14b43567a9ee3598f5ae746a1581fb5d3d2cb780f0dbf95" +dependencies = [ + "futures-timer", + "pin-project", +] + [[package]] name = "fixed-hash" version = "0.8.0" @@ -841,6 +1633,38 @@ dependencies = [ "percent-encoding", ] +[[package]] +name = "frame-metadata" +version = "15.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "878babb0b136e731cc77ec2fd883ff02745ff21e6fb662729953d44923df009c" +dependencies = [ + "cfg-if", + "parity-scale-codec", + "scale-info", +] + +[[package]] +name = "frame-metadata" +version = "16.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87cf1549fba25a6fcac22785b61698317d958e96cac72a59102ea45b9ae64692" +dependencies = [ + "cfg-if", + "parity-scale-codec", + "scale-info", + "serde", +] + +[[package]] +name = "fs-err" +version = "2.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88a41f105fe1d5b6b34b2055e3dc59bb79b46b48b2040b9e6c7b4b5de097aa41" +dependencies = [ + "autocfg", +] + [[package]] name = "funty" version = "2.0.0" @@ -887,6 +1711,7 @@ dependencies = [ "futures-core", "futures-task", "futures-util", + "num_cpus", ] [[package]] @@ -895,6 +1720,19 @@ version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" +[[package]] +name = "futures-lite" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52527eb5074e35e9339c6b4e8d12600c7128b68fb25dcb9fa9dec18f7c25f3a5" +dependencies = [ + "fastrand", + "futures-core", + "futures-io", + "parking", + "pin-project-lite", +] + [[package]] name = "futures-macro" version = "0.3.30" @@ -970,6 +1808,16 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "getrandom_or_panic" +version = "0.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ea1015b5a70616b688dc230cfe50c8af89d972cb132d5a622814d29773b10b9" +dependencies = [ + "rand", + "rand_core", +] + [[package]] name = "ghash" version = "0.5.1" @@ -1034,6 +1882,21 @@ dependencies = [ "tracing", ] +[[package]] +name = "hash-db" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e7d7786361d7425ae2fe4f9e407eb0efaa0840f5212d109cc018c40c35c6ab4" + +[[package]] +name = "hash256-std-hasher" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92c171d55b98633f4ed3860808f004099b36c1cc29c42cfc53aa8591b21efcf2" +dependencies = [ + "crunchy", +] + [[package]] name = "hash32" version = "0.2.1" @@ -1043,11 +1906,25 @@ dependencies = [ "byteorder", ] +[[package]] +name = "hashbrown" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" +dependencies = [ + "ahash", +] + [[package]] name = "hashbrown" version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +dependencies = [ + "ahash", + "allocator-api2", + "serde", +] [[package]] name = "headers" @@ -1105,6 +1982,12 @@ version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" +[[package]] +name = "hermit-abi" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc" + [[package]] name = "hex" version = "0.4.3" @@ -1117,13 +2000,34 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3011d1213f159867b13cfd6ac92d2cd5f1345762c63be3554e84092d85a50bbd" +[[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]] name = "hmac" version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" dependencies = [ - "digest", + "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]] @@ -1255,6 +2159,22 @@ dependencies = [ "want", ] +[[package]] +name = "hyper-rustls" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" +dependencies = [ + "futures-util", + "http 0.2.12", + "hyper 0.14.29", + "log", + "rustls 0.21.12", + "rustls-native-certs 0.6.3", + "tokio", + "tokio-rustls 0.24.1", +] + [[package]] name = "hyper-rustls" version = "0.26.0" @@ -1265,10 +2185,10 @@ dependencies = [ "http 1.1.0", "hyper 1.3.1", "hyper-util", - "rustls", + "rustls 0.22.4", "rustls-pki-types", "tokio", - "tokio-rustls", + "tokio-rustls 0.25.0", "tower-service", ] @@ -1305,6 +2225,35 @@ dependencies = [ "tracing", ] +[[package]] +name = "iana-time-zone" +version = "0.1.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows-core", +] + +[[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.4.0" @@ -1383,9 +2332,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" dependencies = [ "equivalent", - "hashbrown", + "hashbrown 0.14.5", ] +[[package]] +name = "indexmap-nostd" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e04e2fd2b8188ea827b32ef11de88377086d690286ab35747ef7f9bf3ccb590" + [[package]] name = "inout" version = "0.1.3" @@ -1396,6 +2351,24 @@ dependencies = [ "generic-array", ] +[[package]] +name = "instant" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "integer-sqrt" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "276ec31bcb4a9ee45f58bec6f9ec700ae4cf4f4f8f2fa7e06cb406bd5ffdd770" +dependencies = [ + "num-traits", +] + [[package]] name = "inventory" version = "0.3.15" @@ -1417,6 +2390,15 @@ dependencies = [ "either", ] +[[package]] +name = "itertools" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" +dependencies = [ + "either", +] + [[package]] name = "itertools" version = "0.12.1" @@ -1432,6 +2414,26 @@ version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" +[[package]] +name = "jni" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6df18c2e3db7e453d3c6ac5b3e9d5182664d28788126d39b91f2d1e22b017ec" +dependencies = [ + "cesu8", + "combine", + "jni-sys", + "log", + "thiserror", + "walkdir", +] + +[[package]] +name = "jni-sys" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" + [[package]] name = "js-sys" version = "0.3.69" @@ -1457,81 +2459,253 @@ dependencies = [ ] [[package]] -name = "k256" -version = "0.13.3" +name = "jsonrpsee" +version = "0.22.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "956ff9b67e26e1a6a866cb758f12c6f8746208489e3e4a4b5580802f2f0a587b" +checksum = "cfdb12a2381ea5b2e68c3469ec604a007b367778cdb14d09612c8069ebd616ad" dependencies = [ - "cfg-if", - "ecdsa", - "elliptic-curve", - "once_cell", - "sha2", - "signature", + "jsonrpsee-client-transport 0.22.5", + "jsonrpsee-core 0.22.5", + "jsonrpsee-http-client", + "jsonrpsee-types 0.22.5", ] [[package]] -name = "keccak" -version = "0.1.5" +name = "jsonrpsee" +version = "0.23.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654" +checksum = "62b089779ad7f80768693755a031cc14a7766aba707cbe886674e3f79e9b7e47" dependencies = [ - "cpufeatures", -] - -[[package]] -name = "kos" -version = "0.1.0" -dependencies = [ - "console_error_panic_hook", - "futures", - "hex", - "js-sys", - "kos-crypto", - "kos-sdk", - "kos-types", - "kos-utils", - "log", - "qrcode-generator", - "wasm-bindgen", - "wasm-bindgen-test", - "web-sys", + "jsonrpsee-core 0.23.2", + "jsonrpsee-types 0.23.2", + "jsonrpsee-ws-client", ] [[package]] -name = "kos-crypto" -version = "0.1.0" +name = "jsonrpsee-client-transport" +version = "0.22.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4978087a58c3ab02efc5b07c5e5e2803024536106fd5506f558db172c889b3aa" dependencies = [ - "aes", - "aes-gcm", - "base64 0.21.7", - "cbc", - "cfb-mode", - "coins-bip32", - "coins-bip39", - "ed25519-dalek", - "hex", - "hmac", - "kos-types", - "log", - "pbkdf2", - "pem", - "rand", - "secp256k1", - "serde", - "sha1", - "sha2", - "sha3", - "wasm-bindgen", - "zeroize", + "futures-util", + "http 0.2.12", + "jsonrpsee-core 0.22.5", + "pin-project", + "rustls-native-certs 0.7.0", + "rustls-pki-types", + "soketto 0.7.1", + "thiserror", + "tokio", + "tokio-rustls 0.25.0", + "tokio-util", + "tracing", + "url", ] [[package]] -name = "kos-proto" -version = "0.1.0" +name = "jsonrpsee-client-transport" +version = "0.23.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08163edd8bcc466c33d79e10f695cdc98c00d1e6ddfb95cec41b6b0279dd5432" dependencies = [ - "bytes", - "glob", + "base64 0.22.1", + "futures-util", + "http 1.1.0", + "jsonrpsee-core 0.23.2", + "pin-project", + "rustls 0.23.10", + "rustls-pki-types", + "rustls-platform-verifier", + "soketto 0.8.0", + "thiserror", + "tokio", + "tokio-rustls 0.26.0", + "tokio-util", + "tracing", + "url", +] + +[[package]] +name = "jsonrpsee-core" +version = "0.22.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4b257e1ec385e07b0255dde0b933f948b5c8b8c28d42afda9587c3a967b896d" +dependencies = [ + "anyhow", + "async-trait", + "beef", + "futures-timer", + "futures-util", + "hyper 0.14.29", + "jsonrpsee-types 0.22.5", + "pin-project", + "rustc-hash", + "serde", + "serde_json", + "thiserror", + "tokio", + "tokio-stream", + "tracing", +] + +[[package]] +name = "jsonrpsee-core" +version = "0.23.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79712302e737d23ca0daa178e752c9334846b08321d439fd89af9a384f8c830b" +dependencies = [ + "anyhow", + "async-trait", + "beef", + "futures-timer", + "futures-util", + "jsonrpsee-types 0.23.2", + "pin-project", + "rustc-hash", + "serde", + "serde_json", + "thiserror", + "tokio", + "tokio-stream", + "tracing", +] + +[[package]] +name = "jsonrpsee-http-client" +version = "0.22.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ccf93fc4a0bfe05d851d37d7c32b7f370fe94336b52a2f0efc5f1981895c2e5" +dependencies = [ + "async-trait", + "hyper 0.14.29", + "hyper-rustls 0.24.2", + "jsonrpsee-core 0.22.5", + "jsonrpsee-types 0.22.5", + "serde", + "serde_json", + "thiserror", + "tokio", + "tower", + "tracing", + "url", +] + +[[package]] +name = "jsonrpsee-types" +version = "0.22.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "150d6168405890a7a3231a3c74843f58b8959471f6df76078db2619ddee1d07d" +dependencies = [ + "anyhow", + "beef", + "serde", + "serde_json", + "thiserror", +] + +[[package]] +name = "jsonrpsee-types" +version = "0.23.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9c465fbe385238e861fdc4d1c85e04ada6c1fd246161d26385c1b311724d2af" +dependencies = [ + "beef", + "http 1.1.0", + "serde", + "serde_json", + "thiserror", +] + +[[package]] +name = "jsonrpsee-ws-client" +version = "0.23.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c28759775f5cb2f1ea9667672d3fe2b0e701d1f4b7b67954e60afe7fd058b5e" +dependencies = [ + "http 1.1.0", + "jsonrpsee-client-transport 0.23.2", + "jsonrpsee-core 0.23.2", + "jsonrpsee-types 0.23.2", + "url", +] + +[[package]] +name = "k256" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "956ff9b67e26e1a6a866cb758f12c6f8746208489e3e4a4b5580802f2f0a587b" +dependencies = [ + "cfg-if", + "ecdsa", + "elliptic-curve", + "once_cell", + "serdect", + "sha2 0.10.8", + "signature", +] + +[[package]] +name = "keccak" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654" +dependencies = [ + "cpufeatures", +] + +[[package]] +name = "kos" +version = "0.1.0" +dependencies = [ + "console_error_panic_hook", + "futures", + "hex", + "js-sys", + "kos-crypto", + "kos-sdk", + "kos-types", + "kos-utils", + "log", + "qrcode-generator", + "wasm-bindgen", + "wasm-bindgen-test", + "web-sys", +] + +[[package]] +name = "kos-crypto" +version = "0.1.0" +dependencies = [ + "aes", + "aes-gcm", + "base64 0.21.7", + "cbc", + "cfb-mode", + "coins-bip32", + "coins-bip39", + "ed25519-dalek", + "hex", + "hmac 0.12.1", + "kos-types", + "log", + "pbkdf2", + "pem", + "rand", + "secp256k1 0.27.0", + "serde", + "sha1", + "sha2 0.10.8", + "sha3", + "wasm-bindgen", + "zeroize", +] + +[[package]] +name = "kos-proto" +version = "0.1.0" +dependencies = [ + "bytes", + "glob", "heck 0.4.1", "kos-types", "pbjson", @@ -1562,7 +2736,7 @@ dependencies = [ "enum_delegate", "enum_dispatch", "hex", - "hmac", + "hmac 0.12.1", "kos-crypto", "kos-proto", "kos-types", @@ -1575,11 +2749,16 @@ dependencies = [ "rand", "reqwest 0.12.4", "rlp", - "secp256k1", + "secp256k1 0.27.0", "serde", "serde-wasm-bindgen", "serde_json", + "sp-core", + "sp-runtime", "strum", + "subxt", + "subxt-signer", + "tokio", "tokio-test", "wasm-bindgen", "wasm-bindgen-futures", @@ -1599,7 +2778,7 @@ dependencies = [ "num-traits", "rand", "reqwest 0.12.4", - "secp256k1", + "secp256k1 0.27.0", "serde", "serde_json", "wasm-bindgen", @@ -1629,6 +2808,60 @@ version = "0.2.155" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" +[[package]] +name = "libm" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" + +[[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", + "libsecp256k1-gen-ecmult", + "libsecp256k1-gen-genmult", + "rand", + "serde", + "sha2 0.9.9", + "typenum", +] + +[[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.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3038c808c55c87e8a172643a7d87187fc6c4174468159cb3090659d55bcb4809" +dependencies = [ + "libsecp256k1-core", +] + +[[package]] +name = "libsecp256k1-gen-genmult" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3db8d6ba2cec9eacc40e6e8ccc98931840301f1006e95647ceb2dd5c3aa06f7c" +dependencies = [ + "libsecp256k1-core", +] + [[package]] name = "linux-raw-sys" version = "0.4.14" @@ -1651,18 +2884,63 @@ version = "0.4.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" +[[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 = "matchers" +version = "0.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f099785f7595cc4b4553a174ce30dd7589ef93391ff414dbb67f62392b9e0ce1" +dependencies = [ + "regex-automata 0.1.10", +] + [[package]] name = "memchr" version = "2.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" +[[package]] +name = "memory-db" +version = "0.32.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "808b50db46293432a45e63bc15ea51e0ab4c0a1647b8eb114e31a3e698dd6fbe" +dependencies = [ + "hash-db", +] + +[[package]] +name = "merlin" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58c38e2799fc0978b65dfff8023ec7843e2330bb462f19198840b34b6582397d" +dependencies = [ + "byteorder", + "keccak", + "rand_core", + "zeroize", +] + [[package]] name = "mime" version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" +[[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.3" @@ -1713,6 +2991,34 @@ dependencies = [ "tempfile", ] +[[package]] +name = "no-std-net" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43794a0ace135be66a25d3ae77d41b91615fb68ae937f904090203e81f755b65" + +[[package]] +name = "nodrop" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" + +[[package]] +name = "nohash-hasher" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" + +[[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 = "num-bigint" version = "0.4.5" @@ -1723,6 +3029,16 @@ dependencies = [ "num-traits", ] +[[package]] +name = "num-format" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a652d9771a63711fd3c3deb670acfbe5c30a4072e664d7a3bf5a9e1056ac72c3" +dependencies = [ + "arrayvec 0.7.4", + "itoa", +] + [[package]] name = "num-integer" version = "0.1.46" @@ -1732,6 +3048,17 @@ dependencies = [ "num-traits", ] +[[package]] +name = "num-rational" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" +dependencies = [ + "num-bigint", + "num-integer", + "num-traits", +] + [[package]] name = "num-traits" version = "0.2.19" @@ -1747,7 +3074,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", ] @@ -1817,16 +3144,30 @@ dependencies = [ ] [[package]] -name = "parity-scale-codec" -version = "3.6.12" +name = "parity-bip39" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "306800abfa29c7f16596b5970a588435e3d5b3149683d00c12b699cc19f895ee" +checksum = "4e69bf016dc406eff7d53a7d3f7cf1c2e72c82b9088aac1118591e36dd2cd3e9" dependencies = [ - "arrayvec", - "bitvec", - "byte-slice-cast", - "impl-trait-for-tuples", - "parity-scale-codec-derive", + "bitcoin_hashes 0.12.0", + "rand", + "rand_core", + "serde", + "unicode-normalization", +] + +[[package]] +name = "parity-scale-codec" +version = "3.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "306800abfa29c7f16596b5970a588435e3d5b3149683d00c12b699cc19f895ee" +dependencies = [ + "arrayvec 0.7.4", + "bitvec", + "byte-slice-cast", + "bytes", + "impl-trait-for-tuples", + "parity-scale-codec-derive", "serde", ] @@ -1836,12 +3177,18 @@ version = "3.6.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d830939c76d294956402033aee57a6da7b438f2294eb94864c37b0569053a42c" dependencies = [ - "proc-macro-crate", + "proc-macro-crate 3.1.0", "proc-macro2", "quote", "syn 1.0.109", ] +[[package]] +name = "parking" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae" + [[package]] name = "parking_lot" version = "0.12.3" @@ -1876,6 +3223,12 @@ dependencies = [ "subtle", ] +[[package]] +name = "paste" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" + [[package]] name = "pbjson" version = "0.5.1" @@ -1917,10 +3270,10 @@ version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" dependencies = [ - "digest", - "hmac", + "digest 0.10.7", + "hmac 0.12.1", "password-hash", - "sha2", + "sha2 0.10.8", ] [[package]] @@ -1981,6 +3334,17 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" +[[package]] +name = "piper" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae1d5c74c9876f070d3e8fd503d748c7d974c3e48da8f41350fa5222ef9b4391" +dependencies = [ + "atomic-waker", + "fastrand", + "futures-io", +] + [[package]] name = "pkcs8" version = "0.10.2" @@ -2010,6 +3374,69 @@ dependencies = [ "miniz_oxide", ] +[[package]] +name = "polkavm-common" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d9428a5cfcc85c5d7b9fc4b6a18c4b802d0173d768182a51cc7751640f08b92" + +[[package]] +name = "polkavm-derive" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae8c4bea6f3e11cd89bb18bcdddac10bd9a24015399bd1c485ad68a985a19606" +dependencies = [ + "polkavm-derive-impl-macro", +] + +[[package]] +name = "polkavm-derive-impl" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c4fdfc49717fb9a196e74a5d28e0bc764eb394a2c803eb11133a31ac996c60c" +dependencies = [ + "polkavm-common", + "proc-macro2", + "quote", + "syn 2.0.66", +] + +[[package]] +name = "polkavm-derive-impl-macro" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ba81f7b5faac81e528eb6158a6f3c9e0bb1008e0ffa19653bc8dea925ecb429" +dependencies = [ + "polkavm-derive-impl", + "syn 2.0.66", +] + +[[package]] +name = "polling" +version = "3.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3ed00ed3fbf728b5816498ecd316d1716eecaced9c0c8d2c5a6740ca214985b" +dependencies = [ + "cfg-if", + "concurrent-queue", + "hermit-abi 0.4.0", + "pin-project-lite", + "rustix", + "tracing", + "windows-sys 0.52.0", +] + +[[package]] +name = "poly1305" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8159bd90725d2df49889a078b54f4f79e87f1f8a8444194cdca81d38f5393abf" +dependencies = [ + "cpufeatures", + "opaque-debug", + "universal-hash", +] + [[package]] name = "polyval" version = "0.6.2" @@ -2070,16 +3497,51 @@ dependencies = [ "impl-codec", "impl-rlp", "impl-serde", + "scale-info", "uint", ] +[[package]] +name = "proc-macro-crate" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" +dependencies = [ + "once_cell", + "toml_edit 0.19.15", +] + [[package]] name = "proc-macro-crate" version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284" dependencies = [ - "toml_edit", + "toml_edit 0.21.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.109", + "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]] @@ -2306,6 +3768,22 @@ dependencies = [ "getrandom", ] +[[package]] +name = "reconnecting-jsonrpsee-ws-client" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06fa4f17e09edfc3131636082faaec633c7baa269396b4004040bc6c52f49f65" +dependencies = [ + "cfg_aliases", + "finito", + "futures", + "jsonrpsee 0.23.2", + "serde_json", + "thiserror", + "tokio", + "tracing", +] + [[package]] name = "redox_syscall" version = "0.5.1" @@ -2315,6 +3793,26 @@ dependencies = [ "bitflags 2.5.0", ] +[[package]] +name = "ref-cast" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccf0a6f84d5f1d581da8b41b47ec8600871962f2a528115b542b362d4b744931" +dependencies = [ + "ref-cast-impl", +] + +[[package]] +name = "ref-cast-impl" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bcc303e793d3734489387d205e9b186fac9c6cfacedd98cbb2e8a5943595f3e6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", +] + [[package]] name = "regex" version = "1.10.4" @@ -2323,8 +3821,17 @@ checksum = "c117dbdfde9c8308975b6a18d71f3f385c89461f7b3fb054288ecf2a2058ba4c" dependencies = [ "aho-corasick", "memchr", - "regex-automata", - "regex-syntax", + "regex-automata 0.4.6", + "regex-syntax 0.8.3", +] + +[[package]] +name = "regex-automata" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" +dependencies = [ + "regex-syntax 0.6.29", ] [[package]] @@ -2335,9 +3842,15 @@ checksum = "86b83b8b9847f9bf95ef68afb0b8e6cdb80f498442f5179a29fad448fcc1eaea" dependencies = [ "aho-corasick", "memchr", - "regex-syntax", + "regex-syntax 0.8.3", ] +[[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.8.3" @@ -2399,7 +3912,7 @@ dependencies = [ "http-body 1.0.0", "http-body-util", "hyper 1.3.1", - "hyper-rustls", + "hyper-rustls 0.26.0", "hyper-util", "ipnet", "js-sys", @@ -2408,7 +3921,7 @@ dependencies = [ "once_cell", "percent-encoding", "pin-project-lite", - "rustls", + "rustls 0.22.4", "rustls-pemfile 2.1.2", "rustls-pki-types", "serde", @@ -2416,7 +3929,7 @@ dependencies = [ "serde_urlencoded", "sync_wrapper", "tokio", - "tokio-rustls", + "tokio-rustls 0.25.0", "tower-service", "url", "wasm-bindgen", @@ -2432,7 +3945,7 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" dependencies = [ - "hmac", + "hmac 0.12.1", "subtle", ] @@ -2457,7 +3970,7 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd124222d17ad93a644ed9d011a40f4fb64aa54275c08cc216524a9ea82fb09f" dependencies = [ - "digest", + "digest 0.10.7", ] [[package]] @@ -2476,6 +3989,12 @@ version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + [[package]] name = "rustc-hex" version = "2.1.0" @@ -2504,6 +4023,18 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "rustls" +version = "0.21.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" +dependencies = [ + "log", + "ring", + "rustls-webpki 0.101.7", + "sct", +] + [[package]] name = "rustls" version = "0.22.4" @@ -2513,11 +4044,51 @@ dependencies = [ "log", "ring", "rustls-pki-types", - "rustls-webpki", + "rustls-webpki 0.102.4", + "subtle", + "zeroize", +] + +[[package]] +name = "rustls" +version = "0.23.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05cff451f60db80f490f3c182b77c35260baace73209e9cdbbe526bfe3a4d402" +dependencies = [ + "log", + "once_cell", + "ring", + "rustls-pki-types", + "rustls-webpki 0.102.4", "subtle", "zeroize", ] +[[package]] +name = "rustls-native-certs" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9aace74cb666635c918e9c12bc0d348266037aa8eb599b5cba565709a8dff00" +dependencies = [ + "openssl-probe", + "rustls-pemfile 1.0.4", + "schannel", + "security-framework", +] + +[[package]] +name = "rustls-native-certs" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f1fb85efa936c42c6d5fc28d2629bb51e4b2f4b8a5211e297d599cc5a093792" +dependencies = [ + "openssl-probe", + "rustls-pemfile 2.1.2", + "rustls-pki-types", + "schannel", + "security-framework", +] + [[package]] name = "rustls-pemfile" version = "1.0.4" @@ -2543,6 +4114,43 @@ version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "976295e77ce332211c0d24d92c0e83e50f5c5f046d11082cea19f3df13a3562d" +[[package]] +name = "rustls-platform-verifier" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e3beb939bcd33c269f4bf946cc829fcd336370267c4a927ac0399c84a3151a1" +dependencies = [ + "core-foundation", + "core-foundation-sys", + "jni", + "log", + "once_cell", + "rustls 0.23.10", + "rustls-native-certs 0.7.0", + "rustls-platform-verifier-android", + "rustls-webpki 0.102.4", + "security-framework", + "security-framework-sys", + "webpki-roots", + "winapi", +] + +[[package]] +name = "rustls-platform-verifier-android" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84e217e7fdc8466b5b35d30f8c0a30febd29173df4a3a0c2115d306b9c4117ad" + +[[package]] +name = "rustls-webpki" +version = "0.101.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" +dependencies = [ + "ring", + "untrusted", +] + [[package]] name = "rustls-webpki" version = "0.102.4" @@ -2560,6 +4168,17 @@ version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" +[[package]] +name = "ruzstd" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58c4eb8a81997cf040a091d1f7e1938aeab6749d3a0dfa73af43cdc32393483d" +dependencies = [ + "byteorder", + "derive_more", + "twox-hash", +] + [[package]] name = "ryu" version = "1.0.18" @@ -2567,52 +4186,248 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" [[package]] -name = "schannel" -version = "0.1.23" +name = "same-file" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" dependencies = [ - "windows-sys 0.52.0", + "winapi-util", ] [[package]] -name = "scoped-tls" -version = "1.0.1" +name = "scale-bits" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" +checksum = "e57b1e7f6b65ed1f04e79a85a57d755ad56d76fdf1e9bddcc9ae14f71fcdcf54" +dependencies = [ + "parity-scale-codec", + "scale-info", + "scale-type-resolver", + "serde", +] [[package]] -name = "scopeguard" -version = "1.2.0" +name = "scale-decode" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" +checksum = "e98f3262c250d90e700bb802eb704e1f841e03331c2eb815e46516c4edbf5b27" +dependencies = [ + "derive_more", + "parity-scale-codec", + "primitive-types", + "scale-bits", + "scale-decode-derive", + "scale-type-resolver", + "smallvec", +] [[package]] -name = "sec1" -version = "0.7.3" +name = "scale-decode-derive" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" +checksum = "9bb22f574168103cdd3133b19281639ca65ad985e24612728f727339dcaf4021" dependencies = [ - "base16ct", - "der", - "generic-array", - "pkcs8", - "subtle", - "zeroize", + "darling 0.14.4", + "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] -name = "secp256k1" -version = "0.27.0" +name = "scale-encode" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25996b82292a7a57ed3508f052cfff8640d38d32018784acd714758b43da9c8f" +checksum = "4ba0b9c48dc0eb20c60b083c29447c0c4617cb7c4a4c9fef72aa5c5bc539e15e" dependencies = [ - "bitcoin_hashes", + "derive_more", + "parity-scale-codec", + "primitive-types", + "scale-bits", + "scale-encode-derive", + "scale-type-resolver", + "smallvec", +] + +[[package]] +name = "scale-encode-derive" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82ab7e60e2d9c8d47105f44527b26f04418e5e624ffc034f6b4a86c0ba19c5bf" +dependencies = [ + "darling 0.14.4", + "proc-macro-crate 1.3.1", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "scale-info" +version = "2.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eca070c12893629e2cc820a9761bedf6ce1dcddc9852984d1dc734b8bd9bd024" +dependencies = [ + "bitvec", + "cfg-if", + "derive_more", + "parity-scale-codec", + "scale-info-derive", + "serde", +] + +[[package]] +name = "scale-info-derive" +version = "2.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d35494501194174bda522a32605929eefc9ecf7e0a326c26db1fdd85881eb62" +dependencies = [ + "proc-macro-crate 3.1.0", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "scale-type-resolver" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0cded6518aa0bd6c1be2b88ac81bf7044992f0f154bfbabd5ad34f43512abcb" +dependencies = [ + "scale-info", + "smallvec", +] + +[[package]] +name = "scale-typegen" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "498d1aecf2ea61325d4511787c115791639c0fd21ef4f8e11e49dd09eff2bbac" +dependencies = [ + "proc-macro2", + "quote", + "scale-info", + "syn 2.0.66", + "thiserror", +] + +[[package]] +name = "scale-value" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2cf9738c263c665144177201126bdad39d3d62512152f178f35002228026976" +dependencies = [ + "base58", + "blake2", + "derive_more", + "either", + "frame-metadata 15.1.0", + "parity-scale-codec", + "scale-bits", + "scale-decode", + "scale-encode", + "scale-info", + "scale-type-resolver", + "serde", + "yap", +] + +[[package]] +name = "schannel" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534" +dependencies = [ + "windows-sys 0.52.0", +] + +[[package]] +name = "schnellru" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9a8ef13a93c54d20580de1e5c413e624e53121d42fc7e2c11d10ef7f8b02367" +dependencies = [ + "ahash", + "cfg-if", + "hashbrown 0.13.2", +] + +[[package]] +name = "schnorrkel" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8de18f6d8ba0aad7045f5feae07ec29899c1112584a38509a84ad7b04451eaa0" +dependencies = [ + "aead", + "arrayref", + "arrayvec 0.7.4", + "curve25519-dalek", + "getrandom_or_panic", + "merlin", + "rand_core", + "serde_bytes", + "sha2 0.10.8", + "subtle", + "zeroize", +] + +[[package]] +name = "scoped-tls" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "sct" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "sec1" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" +dependencies = [ + "base16ct", + "der", + "generic-array", + "pkcs8", + "serdect", + "subtle", + "zeroize", +] + +[[package]] +name = "secp256k1" +version = "0.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25996b82292a7a57ed3508f052cfff8640d38d32018784acd714758b43da9c8f" +dependencies = [ + "bitcoin_hashes 0.12.0", "rand", - "secp256k1-sys", + "secp256k1-sys 0.8.1", "serde", ] +[[package]] +name = "secp256k1" +version = "0.28.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d24b59d129cdadea20aea4fb2352fa053712e5d713eee47d700cd4b2bc002f10" +dependencies = [ + "secp256k1-sys 0.9.2", +] + [[package]] name = "secp256k1-sys" version = "0.8.1" @@ -2622,6 +4437,24 @@ dependencies = [ "cc", ] +[[package]] +name = "secp256k1-sys" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5d1746aae42c19d583c3c1a8c646bfad910498e2051c551a7f2e3c0c9fbb7eb" +dependencies = [ + "cc", +] + +[[package]] +name = "secrecy" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9bd1c54ea06cfd2f6b63219704de0b9b4f72dcc2b8fdef820be6cd799780e91e" +dependencies = [ + "zeroize", +] + [[package]] name = "security-framework" version = "2.11.0" @@ -2632,6 +4465,7 @@ dependencies = [ "core-foundation", "core-foundation-sys", "libc", + "num-bigint", "security-framework-sys", ] @@ -2677,6 +4511,15 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "serde_bytes" +version = "0.11.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "387cc504cb06bb40a96c8e04e951fe01854cf6bc921053c954e4a606d9675c6a" +dependencies = [ + "serde", +] + [[package]] name = "serde_derive" version = "1.0.203" @@ -2699,6 +4542,15 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_spanned" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79e674e01f999af37c49f70a6ede167a8a60b2503e56c5599532a65baa5969a0" +dependencies = [ + "serde", +] + [[package]] name = "serde_urlencoded" version = "0.7.1" @@ -2711,6 +4563,29 @@ dependencies = [ "serde", ] +[[package]] +name = "serdect" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a84f14a19e9a014bb9f4512488d9829a68e04ecabffb0f9904cd1ace94598177" +dependencies = [ + "base16ct", + "serde", +] + +[[package]] +name = "sha-1" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99cd6713db3cf16b6c84e06321e049a9b9f699826e16096d23bbcc44d15d51a6" +dependencies = [ + "block-buffer 0.9.0", + "cfg-if", + "cpufeatures", + "digest 0.9.0", + "opaque-debug", +] + [[package]] name = "sha1" version = "0.10.6" @@ -2719,7 +4594,20 @@ checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" dependencies = [ "cfg-if", "cpufeatures", - "digest", + "digest 0.10.7", +] + +[[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]] @@ -2730,7 +4618,7 @@ checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" dependencies = [ "cfg-if", "cpufeatures", - "digest", + "digest 0.10.7", ] [[package]] @@ -2739,17 +4627,35 @@ version = "0.10.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" dependencies = [ - "digest", + "digest 0.10.7", "keccak", ] +[[package]] +name = "sharded-slab" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "signal-hook-registry" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" +dependencies = [ + "libc", +] + [[package]] name = "signature" version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" dependencies = [ - "digest", + "digest 0.10.7", "rand_core", ] @@ -2759,6 +4665,18 @@ version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" +[[package]] +name = "simple-mermaid" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "620a1d43d70e142b1d46a929af51d44f383db9c7a2ec122de2cd992ccfcf3c18" + +[[package]] +name = "siphasher" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" + [[package]] name = "slab" version = "0.4.9" @@ -2775,46 +4693,536 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] -name = "socket2" -version = "0.5.7" +name = "smol" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" +checksum = "e635339259e51ef85ac7aa29a1cd991b957047507288697a690e80ab97d07cad" dependencies = [ - "libc", - "windows-sys 0.52.0", + "async-channel", + "async-executor", + "async-fs", + "async-io", + "async-lock", + "async-net", + "async-process", + "blocking", + "futures-lite", ] [[package]] -name = "spin" -version = "0.9.8" +name = "smoldot" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +checksum = "e6d1eaa97d77be4d026a1e7ffad1bb3b78448763b357ea6f8188d3e6f736a9b9" dependencies = [ - "lock_api", + "arrayvec 0.7.4", + "async-lock", + "atomic-take", + "base64 0.21.7", + "bip39", + "blake2-rfc", + "bs58", + "chacha20", + "crossbeam-queue", + "derive_more", + "ed25519-zebra", + "either", + "event-listener 4.0.3", + "fnv", + "futures-lite", + "futures-util", + "hashbrown 0.14.5", + "hex", + "hmac 0.12.1", + "itertools 0.12.1", + "libm", + "libsecp256k1", + "merlin", + "no-std-net", + "nom", + "num-bigint", + "num-rational", + "num-traits", + "pbkdf2", + "pin-project", + "poly1305", + "rand", + "rand_chacha", + "ruzstd", + "schnorrkel", + "serde", + "serde_json", + "sha2 0.10.8", + "sha3", + "siphasher", + "slab", + "smallvec", + "soketto 0.7.1", + "twox-hash", + "wasmi", + "x25519-dalek", + "zeroize", ] [[package]] -name = "spki" -version = "0.7.3" +name = "smoldot-light" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" +checksum = "5496f2d116b7019a526b1039ec2247dd172b8670633b1a64a614c9ea12c9d8c7" dependencies = [ - "base64ct", - "der", -] - -[[package]] -name = "stable_deref_trait" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" - -[[package]] -name = "static_assertions" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" + "async-channel", + "async-lock", + "base64 0.21.7", + "blake2-rfc", + "derive_more", + "either", + "event-listener 4.0.3", + "fnv", + "futures-channel", + "futures-lite", + "futures-util", + "hashbrown 0.14.5", + "hex", + "itertools 0.12.1", + "log", + "lru", + "no-std-net", + "parking_lot", + "pin-project", + "rand", + "rand_chacha", + "serde", + "serde_json", + "siphasher", + "slab", + "smol", + "smoldot", + "zeroize", +] + +[[package]] +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 = "soketto" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41d1c5305e39e09653383c2c7244f2f78b3bcae37cf50c64cb4789c9f5096ec2" +dependencies = [ + "base64 0.13.1", + "bytes", + "futures", + "httparse", + "log", + "rand", + "sha-1", +] + +[[package]] +name = "soketto" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37468c595637c10857701c990f93a40ce0e357cedb0953d1c26c8d8027f9bb53" +dependencies = [ + "base64 0.22.1", + "bytes", + "futures", + "httparse", + "log", + "rand", + "sha1", +] + +[[package]] +name = "sp-application-crypto" +version = "37.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d96d1fc0f1c741bbcbd0dd5470eff7b66f011708cc1942b088ebf0d4efb3d93" +dependencies = [ + "parity-scale-codec", + "scale-info", + "serde", + "sp-core", + "sp-io", + "sp-std", +] + +[[package]] +name = "sp-arithmetic" +version = "26.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46d0d0a4c591c421d3231ddd5e27d828618c24456d51445d21a1f79fcee97c23" +dependencies = [ + "docify", + "integer-sqrt", + "num-traits", + "parity-scale-codec", + "scale-info", + "serde", + "sp-std", + "static_assertions", +] + +[[package]] +name = "sp-core" +version = "34.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c961a5e33fb2962fa775c044ceba43df9c6f917e2c35d63bfe23738468fa76a7" +dependencies = [ + "array-bytes", + "bitflags 1.3.2", + "blake2", + "bounded-collections", + "bs58", + "dyn-clonable", + "ed25519-zebra", + "futures", + "hash-db", + "hash256-std-hasher", + "impl-serde", + "itertools 0.11.0", + "k256", + "libsecp256k1", + "log", + "merlin", + "parity-bip39", + "parity-scale-codec", + "parking_lot", + "paste", + "primitive-types", + "rand", + "scale-info", + "schnorrkel", + "secp256k1 0.28.2", + "secrecy", + "serde", + "sp-crypto-hashing", + "sp-debug-derive", + "sp-externalities", + "sp-runtime-interface", + "sp-std", + "sp-storage", + "ss58-registry", + "substrate-bip39", + "thiserror", + "tracing", + "w3f-bls", + "zeroize", +] + +[[package]] +name = "sp-crypto-hashing" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc9927a7f81334ed5b8a98a4a978c81324d12bd9713ec76b5c68fd410174c5eb" +dependencies = [ + "blake2b_simd", + "byteorder", + "digest 0.10.7", + "sha2 0.10.8", + "sha3", + "twox-hash", +] + +[[package]] +name = "sp-debug-derive" +version = "14.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48d09fa0a5f7299fb81ee25ae3853d26200f7a348148aed6de76be905c007dbe" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", +] + +[[package]] +name = "sp-externalities" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a904407d61cb94228c71b55a9d3708e9d6558991f9e83bd42bd91df37a159d30" +dependencies = [ + "environmental", + "parity-scale-codec", + "sp-storage", +] + +[[package]] +name = "sp-io" +version = "37.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5036cad2e48d41f5caf6785226c8be1a7db15bec14a9fd7aa6cca84f34cf689f" +dependencies = [ + "bytes", + "ed25519-dalek", + "libsecp256k1", + "log", + "parity-scale-codec", + "polkavm-derive", + "rustversion", + "secp256k1 0.28.2", + "sp-core", + "sp-crypto-hashing", + "sp-externalities", + "sp-keystore", + "sp-runtime-interface", + "sp-state-machine", + "sp-std", + "sp-tracing", + "sp-trie", + "tracing", + "tracing-core", +] + +[[package]] +name = "sp-keystore" +version = "0.40.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0248b4d784cb4a01472276928977121fa39d977a5bb24793b6b15e64b046df42" +dependencies = [ + "parity-scale-codec", + "parking_lot", + "sp-core", + "sp-externalities", +] + +[[package]] +name = "sp-panic-handler" +version = "13.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8f5a17a0a11de029a8b811cb6e8b32ce7e02183cc04a3e965c383246798c416" +dependencies = [ + "backtrace", + "lazy_static", + "regex", +] + +[[package]] +name = "sp-runtime" +version = "38.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89ef409c414546b655ec1e94aaea178e4a97e21284a91b24c762aebf836d3b49" +dependencies = [ + "docify", + "either", + "hash256-std-hasher", + "impl-trait-for-tuples", + "log", + "num-traits", + "parity-scale-codec", + "paste", + "rand", + "scale-info", + "serde", + "simple-mermaid", + "sp-application-crypto", + "sp-arithmetic", + "sp-core", + "sp-io", + "sp-std", + "sp-weights", +] + +[[package]] +name = "sp-runtime-interface" +version = "28.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "985eb981f40c689c6a0012c937b68ed58dabb4341d06f2dfe4dfd5ed72fa4017" +dependencies = [ + "bytes", + "impl-trait-for-tuples", + "parity-scale-codec", + "polkavm-derive", + "primitive-types", + "sp-externalities", + "sp-runtime-interface-proc-macro", + "sp-std", + "sp-storage", + "sp-tracing", + "sp-wasm-interface", + "static_assertions", +] + +[[package]] +name = "sp-runtime-interface-proc-macro" +version = "18.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0195f32c628fee3ce1dfbbf2e7e52a30ea85f3589da9fe62a8b816d70fc06294" +dependencies = [ + "Inflector", + "expander", + "proc-macro-crate 3.1.0", + "proc-macro2", + "quote", + "syn 2.0.66", +] + +[[package]] +name = "sp-state-machine" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "211e528aa6e902261a343f7b40840aa3d66fe4ad3aadbd04a035f10baf96dbc5" +dependencies = [ + "hash-db", + "log", + "parity-scale-codec", + "parking_lot", + "rand", + "smallvec", + "sp-core", + "sp-externalities", + "sp-panic-handler", + "sp-trie", + "thiserror", + "tracing", + "trie-db", +] + +[[package]] +name = "sp-std" +version = "14.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12f8ee986414b0a9ad741776762f4083cd3a5128449b982a3919c4df36874834" + +[[package]] +name = "sp-storage" +version = "21.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99c82989b3a4979a7e1ad848aad9f5d0b4388f1f454cc131766526601ab9e8f8" +dependencies = [ + "impl-serde", + "parity-scale-codec", + "ref-cast", + "serde", + "sp-debug-derive", +] + +[[package]] +name = "sp-tracing" +version = "17.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90b3decf116db9f1dfaf1f1597096b043d0e12c952d3bcdc018c6d6b77deec7e" +dependencies = [ + "parity-scale-codec", + "tracing", + "tracing-core", + "tracing-subscriber", +] + +[[package]] +name = "sp-trie" +version = "36.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "841d717c0f465f5371569e6fdc25b6f32d47c15d6e4c92b3b779e1c9b18b951d" +dependencies = [ + "ahash", + "hash-db", + "lazy_static", + "memory-db", + "nohash-hasher", + "parity-scale-codec", + "parking_lot", + "rand", + "scale-info", + "schnellru", + "sp-core", + "sp-externalities", + "thiserror", + "tracing", + "trie-db", + "trie-root", +] + +[[package]] +name = "sp-wasm-interface" +version = "21.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b04b919e150b4736d85089d49327eab65507deb1485eec929af69daa2278eb3" +dependencies = [ + "impl-trait-for-tuples", + "log", + "parity-scale-codec", +] + +[[package]] +name = "sp-weights" +version = "31.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93cdaf72a1dad537bbb130ba4d47307ebe5170405280ed1aa31fa712718a400e" +dependencies = [ + "bounded-collections", + "parity-scale-codec", + "scale-info", + "serde", + "smallvec", + "sp-arithmetic", + "sp-debug-derive", +] + +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +dependencies = [ + "lock_api", +] + +[[package]] +name = "spki" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" +dependencies = [ + "base64ct", + "der", +] + +[[package]] +name = "ss58-registry" +version = "1.47.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4743ce898933fbff7bbf414f497c459a782d496269644b3d650a398ae6a487ba" +dependencies = [ + "Inflector", + "num-format", + "proc-macro2", + "quote", + "serde", + "serde_json", + "unicode-xid", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + [[package]] name = "strum" version = "0.25.0" @@ -2825,23 +5233,187 @@ dependencies = [ ] [[package]] -name = "strum_macros" -version = "0.25.3" +name = "strum_macros" +version = "0.25.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23dc1fa9ac9c169a78ba62f0b841814b7abae11bdd047b9c58f893439e309ea0" +dependencies = [ + "heck 0.4.1", + "proc-macro2", + "quote", + "rustversion", + "syn 2.0.66", +] + +[[package]] +name = "substrate-bip39" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca58ffd742f693dc13d69bdbb2e642ae239e0053f6aab3b104252892f856700a" +dependencies = [ + "hmac 0.12.1", + "pbkdf2", + "schnorrkel", + "sha2 0.10.8", + "zeroize", +] + +[[package]] +name = "subtle" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" + +[[package]] +name = "subxt" +version = "0.37.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a160cba1edbf3ec4fbbeaea3f1a185f70448116a6bccc8276bb39adb3b3053bd" +dependencies = [ + "async-trait", + "derive-where", + "either", + "frame-metadata 16.0.0", + "futures", + "hex", + "impl-serde", + "instant", + "jsonrpsee 0.22.5", + "parity-scale-codec", + "primitive-types", + "reconnecting-jsonrpsee-ws-client", + "scale-bits", + "scale-decode", + "scale-encode", + "scale-info", + "scale-value", + "serde", + "serde_json", + "sp-crypto-hashing", + "subxt-core", + "subxt-lightclient", + "subxt-macro", + "subxt-metadata", + "thiserror", + "tokio-util", + "tracing", + "url", +] + +[[package]] +name = "subxt-codegen" +version = "0.37.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d703dca0905cc5272d7cc27a4ac5f37dcaae7671acc7fef0200057cc8c317786" +dependencies = [ + "frame-metadata 16.0.0", + "heck 0.5.0", + "hex", + "jsonrpsee 0.22.5", + "parity-scale-codec", + "proc-macro2", + "quote", + "scale-info", + "scale-typegen", + "subxt-metadata", + "syn 2.0.66", + "thiserror", + "tokio", +] + +[[package]] +name = "subxt-core" +version = "0.37.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59f41eb2e2eea6ed45649508cc735f92c27f1fcfb15229e75f8270ea73177345" +dependencies = [ + "base58", + "blake2", + "derive-where", + "frame-metadata 16.0.0", + "hashbrown 0.14.5", + "hex", + "impl-serde", + "parity-scale-codec", + "primitive-types", + "scale-bits", + "scale-decode", + "scale-encode", + "scale-info", + "scale-value", + "serde", + "serde_json", + "sp-crypto-hashing", + "subxt-metadata", + "tracing", +] + +[[package]] +name = "subxt-lightclient" +version = "0.37.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d9406fbdb9548c110803cb8afa750f8b911d51eefdf95474b11319591d225d9" +dependencies = [ + "futures", + "futures-util", + "serde", + "serde_json", + "smoldot-light", + "thiserror", + "tokio", + "tokio-stream", + "tracing", +] + +[[package]] +name = "subxt-macro" +version = "0.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23dc1fa9ac9c169a78ba62f0b841814b7abae11bdd047b9c58f893439e309ea0" +checksum = "1c195f803d70687e409aba9be6c87115b5da8952cd83c4d13f2e043239818fcd" dependencies = [ - "heck 0.4.1", - "proc-macro2", + "darling 0.20.9", + "parity-scale-codec", + "proc-macro-error", "quote", - "rustversion", + "scale-typegen", + "subxt-codegen", "syn 2.0.66", ] [[package]] -name = "subtle" -version = "2.5.0" +name = "subxt-metadata" +version = "0.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" +checksum = "738be5890fdeff899bbffff4d9c0f244fe2a952fb861301b937e3aa40ebb55da" +dependencies = [ + "frame-metadata 16.0.0", + "hashbrown 0.14.5", + "parity-scale-codec", + "scale-info", + "sp-crypto-hashing", +] + +[[package]] +name = "subxt-signer" +version = "0.37.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f49888ae6ae90fe01b471193528eea5bd4ed52d8eecd2d13f4a2333b87388850" +dependencies = [ + "bip39", + "cfg-if", + "hex", + "hmac 0.12.1", + "parity-scale-codec", + "pbkdf2", + "regex", + "schnorrkel", + "secp256k1 0.28.2", + "secrecy", + "sha2 0.10.8", + "sp-crypto-hashing", + "subxt-core", + "zeroize", +] [[package]] name = "syn" @@ -2910,6 +5482,15 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "termcolor" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" +dependencies = [ + "winapi-util", +] + [[package]] name = "thiserror" version = "1.0.61" @@ -2930,6 +5511,16 @@ dependencies = [ "syn 2.0.66", ] +[[package]] +name = "thread_local" +version = "1.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" +dependencies = [ + "cfg-if", + "once_cell", +] + [[package]] name = "tiny-keccak" version = "2.0.2" @@ -2965,11 +5556,25 @@ dependencies = [ "libc", "mio", "num_cpus", + "parking_lot", "pin-project-lite", + "signal-hook-registry", "socket2", + "tokio-macros", "windows-sys 0.48.0", ] +[[package]] +name = "tokio-macros" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f5ae998a069d4b5aba8ee9dad856af7d520c3699e6159b185c2acd48155d39a" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", +] + [[package]] name = "tokio-native-tls" version = "0.3.1" @@ -2980,13 +5585,34 @@ dependencies = [ "tokio", ] +[[package]] +name = "tokio-rustls" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" +dependencies = [ + "rustls 0.21.12", + "tokio", +] + [[package]] name = "tokio-rustls" version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "775e0c0f0adb3a2f22a00c4745d728b479985fc15ee7ca6a2608388c5569860f" dependencies = [ - "rustls", + "rustls 0.22.4", + "rustls-pki-types", + "tokio", +] + +[[package]] +name = "tokio-rustls" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" +dependencies = [ + "rustls 0.23.10", "rustls-pki-types", "tokio", ] @@ -3023,16 +5649,43 @@ checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1" dependencies = [ "bytes", "futures-core", + "futures-io", "futures-sink", "pin-project-lite", "tokio", ] +[[package]] +name = "toml" +version = "0.8.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f49eb2ab21d2f26bd6db7bf383edc527a7ebaee412d17af4d40fdccd442f335" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit 0.22.14", +] + [[package]] name = "toml_datetime" version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4badfd56924ae69bcc9039335b2e017639ce3f9b001c393c1b2d1ef846ce2cbf" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_edit" +version = "0.19.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +dependencies = [ + "indexmap", + "toml_datetime", + "winnow 0.5.40", +] [[package]] name = "toml_edit" @@ -3042,7 +5695,20 @@ checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" dependencies = [ "indexmap", "toml_datetime", - "winnow", + "winnow 0.5.40", +] + +[[package]] +name = "toml_edit" +version = "0.22.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f21c7aaf97f1bd9ca9d4f9e73b0a6c74bd5afef56f2bc931943a6e1c37e04e38" +dependencies = [ + "indexmap", + "serde", + "serde_spanned", + "toml_datetime", + "winnow 0.6.13", ] [[package]] @@ -3058,6 +5724,7 @@ dependencies = [ "tokio", "tower-layer", "tower-service", + "tracing", ] [[package]] @@ -3078,10 +5745,23 @@ version = "0.1.40" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" dependencies = [ + "log", "pin-project-lite", + "tracing-attributes", "tracing-core", ] +[[package]] +name = "tracing-attributes" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", +] + [[package]] name = "tracing-core" version = "0.1.32" @@ -3089,6 +5769,71 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" dependencies = [ "once_cell", + "valuable", +] + +[[package]] +name = "tracing-log" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f751112709b4e791d8ce53e32c4ed2d353565a795ce84da2285393f41557bdf2" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-serde" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc6b213177105856957181934e4920de57730fc69bf42c37ee5bb664d406d9e1" +dependencies = [ + "serde", + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.2.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e0d2eaa99c3c2e41547cfa109e910a68ea03823cccad4a0525dcbc9b01e8c71" +dependencies = [ + "ansi_term", + "chrono", + "lazy_static", + "matchers", + "regex", + "serde", + "serde_json", + "sharded-slab", + "smallvec", + "thread_local", + "tracing", + "tracing-core", + "tracing-log", + "tracing-serde", +] + +[[package]] +name = "trie-db" +version = "0.29.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c992b4f40c234a074d48a757efeabb1a6be88af84c0c23f7ca158950cb0ae7f" +dependencies = [ + "hash-db", + "log", + "rustc-hex", + "smallvec", +] + +[[package]] +name = "trie-root" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4ed310ef5ab98f5fa467900ed906cb9232dd5376597e00fd4cba2a449d06c0b" +dependencies = [ + "hash-db", ] [[package]] @@ -3097,6 +5842,18 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" +[[package]] +name = "twox-hash" +version = "1.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675" +dependencies = [ + "cfg-if", + "digest 0.10.7", + "rand", + "static_assertions", +] + [[package]] name = "typeid" version = "1.0.0" @@ -3159,13 +5916,19 @@ checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" [[package]] name = "unicode-normalization" -version = "0.1.23" +version = "0.1.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" +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 = "universal-hash" version = "0.5.1" @@ -3199,6 +5962,12 @@ version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "86bd8d4e895da8537e5315b8254664e6b769c4ff3db18321b297a1e7004392e3" +[[package]] +name = "valuable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" + [[package]] name = "vcpkg" version = "0.2.15" @@ -3211,6 +5980,40 @@ version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +[[package]] +name = "w3f-bls" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c5da5fa2c6afa2c9158eaa7cd9aee249765eb32b5fb0c63ad8b9e79336a47ec" +dependencies = [ + "ark-bls12-377", + "ark-bls12-381", + "ark-ec", + "ark-ff", + "ark-serialize", + "ark-serialize-derive", + "arrayref", + "constcat", + "digest 0.10.7", + "rand", + "rand_chacha", + "rand_core", + "sha2 0.10.8", + "sha3", + "thiserror", + "zeroize", +] + +[[package]] +name = "walkdir" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" +dependencies = [ + "same-file", + "winapi-util", +] + [[package]] name = "want" version = "0.3.1" @@ -3317,6 +6120,46 @@ dependencies = [ "syn 2.0.66", ] +[[package]] +name = "wasmi" +version = "0.31.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a8281d1d660cdf54c76a3efa9ddd0c270cada1383a995db3ccb43d166456c7" +dependencies = [ + "smallvec", + "spin", + "wasmi_arena", + "wasmi_core", + "wasmparser-nostd", +] + +[[package]] +name = "wasmi_arena" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "104a7f73be44570cac297b3035d76b169d6599637631cf37a1703326a0727073" + +[[package]] +name = "wasmi_core" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcf1a7db34bff95b85c261002720c00c3a6168256dcb93041d3fa2054d19856a" +dependencies = [ + "downcast-rs", + "libm", + "num-traits", + "paste", +] + +[[package]] +name = "wasmparser-nostd" +version = "0.100.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5a015fe95f3504a94bb1462c717aae75253e39b9dd6c3fb1062c934535c64aa" +dependencies = [ + "indexmap-nostd", +] + [[package]] name = "web-sys" version = "0.3.69" @@ -3333,7 +6176,7 @@ version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5388522c899d1e1c96a4c307e3797e0f697ba7c77dd8e0e625ecba9dd0342937" dependencies = [ - "arrayvec", + "arrayvec 0.7.4", "base64 0.21.7", "bytes", "derive_more", @@ -3383,6 +6226,46 @@ dependencies = [ "rustix", ] +[[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.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d4cc384e1e73b93bafa6fb4f1df8c41695c8a91cf9c4c64358067d15a7b6c6b" +dependencies = [ + "windows-sys 0.52.0", +] + +[[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-core" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +dependencies = [ + "windows-targets 0.52.5", +] + [[package]] name = "windows-sys" version = "0.48.0" @@ -3531,6 +6414,15 @@ dependencies = [ "memchr", ] +[[package]] +name = "winnow" +version = "0.6.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59b5e5f6c299a3c7890b876a2a587f3115162487e704907d9b6cd29473052ba1" +dependencies = [ + "memchr", +] + [[package]] name = "winreg" version = "0.50.0" @@ -3560,6 +6452,44 @@ dependencies = [ "tap", ] +[[package]] +name = "x25519-dalek" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7e468321c81fb07fa7f4c636c3972b9100f0346e5b6a9f2bd0603a52f7ed277" +dependencies = [ + "curve25519-dalek", + "rand_core", + "serde", + "zeroize", +] + +[[package]] +name = "yap" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff4524214bc4629eba08d78ceb1d6507070cc0bcbbed23af74e19e6e924a24cf" + +[[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", + "quote", + "syn 2.0.66", +] + [[package]] name = "zeroize" version = "1.8.1" diff --git a/packages/kos-sdk/Cargo.toml b/packages/kos-sdk/Cargo.toml index 30f96f6..343df64 100644 --- a/packages/kos-sdk/Cargo.toml +++ b/packages/kos-sdk/Cargo.toml @@ -32,12 +32,19 @@ hex = { workspace = true } rand = { workspace = true } coins-bip39 = { workspace = true } pem = "3" -web3 = { version = "0.19", default-features = false, features = ["http-tls", "wasm"] } +web3 = { version = "0.19", default-features = false, features = [ + "http-tls", + "wasm", +] } bitcoin = { version = "0.30" } secp256k1 = { workspace = true, features = ["serde", "bitcoin_hashes"] } rlp = "0.5" -reqwest = { workspace = true, default-features = false, features = ["rustls-tls", "blocking", "json"] } +reqwest = { workspace = true, default-features = false, features = [ + "rustls-tls", + "blocking", + "json", +] } wasm-bindgen-futures = "0.4" kos-types = { workspace = true, features = ["serde"] } @@ -47,8 +54,13 @@ kos-utils = { workspace = true } pbjson = { workspace = true } pbjson-types = { workspace = true } prost = { workspace = true } +subxt = "0.37.0" +subxt-signer = "0.37.0" [dev-dependencies] +sp-core = "34.0.0" +sp-runtime = "38.0.0" +tokio = { version = "1", features = ["full"] } tokio-test = "*" dotenvy = "0.15.7" diff --git a/packages/kos-sdk/artifacts/ksm-klever-node.scale b/packages/kos-sdk/artifacts/ksm-klever-node.scale new file mode 100644 index 0000000000000000000000000000000000000000..3bc087749ec3f46c95440054e055faafa5ebd76b GIT binary patch literal 357959 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

Pco3Ka*aaC`}&) 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%0D)*=4?fnWb7l7eWQfQni>}D4k8O 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::from_url("wss://kusama.node.klever.io") + .await + .unwrap(); + + // Build a balance transfer extrinsic. + let dest_publickey = + sr25519::Public::from_ss58check("JH8gatLWwoDsMQQeXJuVaTsQVYJTEhywfTXuagucRCPYh8K") + .unwrap(); + let dest = MultiAddress::Id(AccountId32::from(dest_publickey.0)); + let balance_transfer_tx = substrate::tx() + .balances() + .transfer_allow_death(dest, 100_000); + let latest_block = api.blocks().at_latest().await.unwrap(); + + let tx_params = Params::new() + .tip(1_000) + .mortal(latest_block.header(), 32) + .build(); + + // initialing account + let phrase = "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about"; + let mnemonic = Mnemonic::parse(phrase).unwrap(); + let from = Keypair::from_phrase(&mnemonic, None).unwrap(); + + let signed_tx = api + .tx() + .create_signed(&balance_transfer_tx, &from, tx_params) + .await + .unwrap(); + let result = signed_tx.validate().await; + assert_eq!(result.is_ok(), true); + let hex_ext = hex::encode(signed_tx.encoded()); + println!("hex_ext: {}", hex_ext); + + // Send the extrinsic to the node. + let ext_result = signed_tx.submit().await; + println!("ext_result: {:?}", ext_result); + assert_eq!(ext_result.is_ok(), true); + println!("tx_hash: {:?}", ext_result.unwrap().to_string()); + } +} From 0e75dcdda320f3b23a7158965f074ee5a2a2e136 Mon Sep 17 00:00:00 2001 From: Pedro Camboim Date: Tue, 20 Aug 2024 16:31:36 -0300 Subject: [PATCH 02/25] feat: add substrate key manager --- Cargo.lock | 113 +++++++++++-- packages/kos-crypto/Cargo.toml | 1 + packages/kos-crypto/src/keypair.rs | 28 +++- packages/kos-sdk/Cargo.toml | 2 + packages/kos-sdk/src/chains/mod.rs | 1 + packages/kos-sdk/src/chains/polkadot/mod.rs | 165 +++++++++++++++++++ packages/kos-sdk/src/chains/substrate/mod.rs | 89 +++++++++- 7 files changed, 384 insertions(+), 15 deletions(-) create mode 100644 packages/kos-sdk/src/chains/polkadot/mod.rs diff --git a/Cargo.lock b/Cargo.lock index d133ebb..928f314 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1051,6 +1051,19 @@ dependencies = [ "syn 2.0.66", ] +[[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", + "subtle-ng", + "zeroize", +] + [[package]] name = "darling" version = "0.14.4" @@ -2696,6 +2709,7 @@ dependencies = [ "sha1", "sha2 0.10.8", "sha3", + "subxt-signer 0.30.1", "wasm-bindgen", "zeroize", ] @@ -2728,6 +2742,7 @@ name = "kos-sdk" version = "0.1.0" dependencies = [ "base58", + "base64 0.22.1", "bech32", "bitcoin", "coins-bip39", @@ -2757,7 +2772,8 @@ dependencies = [ "sp-runtime", "strum", "subxt", - "subxt-signer", + "subxt-core 0.0.1", + "subxt-signer 0.37.0", "tokio", "tokio-test", "wasm-bindgen", @@ -4351,6 +4367,23 @@ dependencies = [ "hashbrown 0.13.2", ] +[[package]] +name = "schnorrkel" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "844b7645371e6ecdf61ff246ba1958c29e802881a749ae3fb1993675d210d28d" +dependencies = [ + "arrayref", + "arrayvec 0.7.4", + "curve25519-dalek-ng", + "merlin", + "rand_core", + "serde_bytes", + "sha2 0.9.9", + "subtle-ng", + "zeroize", +] + [[package]] name = "schnorrkel" version = "0.11.4" @@ -4749,7 +4782,7 @@ dependencies = [ "rand", "rand_chacha", "ruzstd", - "schnorrkel", + "schnorrkel 0.11.4", "serde", "serde_json", "sha2 0.10.8", @@ -4851,7 +4884,7 @@ dependencies = [ "serde", "sp-core", "sp-io", - "sp-std", + "sp-std 14.0.0", ] [[package]] @@ -4866,7 +4899,7 @@ dependencies = [ "parity-scale-codec", "scale-info", "serde", - "sp-std", + "sp-std 14.0.0", "static_assertions", ] @@ -4899,7 +4932,7 @@ dependencies = [ "primitive-types", "rand", "scale-info", - "schnorrkel", + "schnorrkel 0.11.4", "secp256k1 0.28.2", "secrecy", "serde", @@ -4907,7 +4940,7 @@ dependencies = [ "sp-debug-derive", "sp-externalities", "sp-runtime-interface", - "sp-std", + "sp-std 14.0.0", "sp-storage", "ss58-registry", "substrate-bip39", @@ -4917,6 +4950,21 @@ dependencies = [ "zeroize", ] +[[package]] +name = "sp-core-hashing" +version = "9.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ee599a8399448e65197f9a6cee338ad192e9023e35e31f22382964c3c174c68" +dependencies = [ + "blake2b_simd", + "byteorder", + "digest 0.10.7", + "sha2 0.10.8", + "sha3", + "sp-std 8.0.0", + "twox-hash", +] + [[package]] name = "sp-crypto-hashing" version = "0.1.0" @@ -4973,7 +5021,7 @@ dependencies = [ "sp-keystore", "sp-runtime-interface", "sp-state-machine", - "sp-std", + "sp-std 14.0.0", "sp-tracing", "sp-trie", "tracing", @@ -5025,7 +5073,7 @@ dependencies = [ "sp-arithmetic", "sp-core", "sp-io", - "sp-std", + "sp-std 14.0.0", "sp-weights", ] @@ -5042,7 +5090,7 @@ dependencies = [ "primitive-types", "sp-externalities", "sp-runtime-interface-proc-macro", - "sp-std", + "sp-std 14.0.0", "sp-storage", "sp-tracing", "sp-wasm-interface", @@ -5084,6 +5132,12 @@ dependencies = [ "trie-db", ] +[[package]] +name = "sp-std" +version = "8.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53458e3c57df53698b3401ec0934bea8e8cfce034816873c0b0abbd83d7bac0d" + [[package]] name = "sp-std" version = "14.0.0" @@ -5253,7 +5307,7 @@ checksum = "ca58ffd742f693dc13d69bdbb2e642ae239e0053f6aab3b104252892f856700a" dependencies = [ "hmac 0.12.1", "pbkdf2", - "schnorrkel", + "schnorrkel 0.11.4", "sha2 0.10.8", "zeroize", ] @@ -5264,6 +5318,12 @@ version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" +[[package]] +name = "subtle-ng" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "734676eb262c623cec13c3155096e08d1f8f29adce39ba17948b18dad1e54142" + [[package]] name = "subxt" version = "0.37.0" @@ -5290,7 +5350,7 @@ dependencies = [ "serde", "serde_json", "sp-crypto-hashing", - "subxt-core", + "subxt-core 0.37.0", "subxt-lightclient", "subxt-macro", "subxt-metadata", @@ -5321,6 +5381,12 @@ dependencies = [ "tokio", ] +[[package]] +name = "subxt-core" +version = "0.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19edd7c615b78a93cc306ae223afa62547fc40074ca06382328cf62fb8fc7276" + [[package]] name = "subxt-core" version = "0.37.0" @@ -5393,6 +5459,27 @@ dependencies = [ "sp-crypto-hashing", ] +[[package]] +name = "subxt-signer" +version = "0.30.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8829de70ce3df90bfeccee1d80a29d554bc0219d7031ed67c11679e3ddc95b7d" +dependencies = [ + "bip39", + "hex", + "hmac 0.12.1", + "parity-scale-codec", + "pbkdf2", + "regex", + "schnorrkel 0.10.2", + "secp256k1 0.27.0", + "secrecy", + "sha2 0.10.8", + "sp-core-hashing", + "thiserror", + "zeroize", +] + [[package]] name = "subxt-signer" version = "0.37.0" @@ -5406,12 +5493,12 @@ dependencies = [ "parity-scale-codec", "pbkdf2", "regex", - "schnorrkel", + "schnorrkel 0.11.4", "secp256k1 0.28.2", "secrecy", "sha2 0.10.8", "sp-crypto-hashing", - "subxt-core", + "subxt-core 0.37.0", "zeroize", ] diff --git a/packages/kos-crypto/Cargo.toml b/packages/kos-crypto/Cargo.toml index 5ab1a3a..6f056d8 100644 --- a/packages/kos-crypto/Cargo.toml +++ b/packages/kos-crypto/Cargo.toml @@ -31,3 +31,4 @@ cbc = { version = "0.1", features = ["block-padding", "std"] } pem = "3" pbkdf2 = { version = "0.12", features = ["simple"] } base64 = "0.21" +subxt-signer = "0.30.1" diff --git a/packages/kos-crypto/src/keypair.rs b/packages/kos-crypto/src/keypair.rs index 4323134..fd2f59e 100644 --- a/packages/kos-crypto/src/keypair.rs +++ b/packages/kos-crypto/src/keypair.rs @@ -1,8 +1,9 @@ use crate::ed25519; use crate::secp256k1; +use subxt_signer::{sr25519, sr25519::verify, sr25519::Keypair}; use std::fmt; - +use std::fmt::Pointer; use wasm_bindgen::prelude::wasm_bindgen; #[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] @@ -11,6 +12,7 @@ enum KeyType { Ed25519, Secp256k1, Secp256k1Compressed, + Sr25519, } #[derive(Clone, serde::Serialize, serde::Deserialize)] @@ -19,6 +21,7 @@ pub struct KeyPair { key_type: KeyType, ed25519: Option, secp256k1: Option, + sr25519: Option } #[wasm_bindgen] @@ -28,6 +31,7 @@ impl KeyPair { key_type: KeyType::Default, ed25519: None, secp256k1: None, + sr25519: None, } } @@ -36,6 +40,7 @@ impl KeyPair { key_type: KeyType::Ed25519, ed25519: Some(kp), secp256k1: None, + sr25519: None, } } @@ -48,10 +53,22 @@ impl KeyPair { }, ed25519: None, secp256k1: Some(kp), + sr25519: None, + } + } + + pub fn new_sr25519(kp: sr25519::Keypair) -> Self { + Self { + key_type: KeyType::Sr25519, + ed25519: None, + secp256k1: None, + sr25519: Some(kp), } } } + + impl KeyPair { pub fn sign_digest(&self, digest: &[u8]) -> Vec { match self.key_type { @@ -59,6 +76,7 @@ impl KeyPair { KeyType::Ed25519 => self.ed25519.as_ref().unwrap().sign_digest(digest), KeyType::Secp256k1 => self.secp256k1.as_ref().unwrap().sign_digest(digest), KeyType::Secp256k1Compressed => self.secp256k1.as_ref().unwrap().sign_digest(digest), + KeyType::Sr25519 => self.sr25519.as_ref().unwrap().sign(digest).0.to_vec(), } } @@ -80,6 +98,12 @@ impl KeyPair { .as_ref() .unwrap() .verify_digest(digest, signature, public_key), + KeyType::Sr25519 => { + let pub_key = sr25519::PublicKey::try_from(public_key).unwrap(); + + verify(digest.as_ref(), signature, &pub_key) + } + } } } @@ -104,6 +128,7 @@ impl KeyPair { KeyType::Secp256k1 | KeyType::Secp256k1Compressed => { self.secp256k1.as_ref().unwrap().public_key() } + KeyType::Sr25519 => self.sr25519.as_ref().unwrap().public_key().0.to_vec() } } @@ -119,6 +144,7 @@ impl KeyPair { KeyType::Secp256k1 | KeyType::Secp256k1Compressed => { self.secp256k1.as_ref().unwrap().secret_key() } + KeyType::Sr25519 => Vec::new() // Find a way to get secret key } } diff --git a/packages/kos-sdk/Cargo.toml b/packages/kos-sdk/Cargo.toml index 343df64..5a6c7d4 100644 --- a/packages/kos-sdk/Cargo.toml +++ b/packages/kos-sdk/Cargo.toml @@ -56,6 +56,8 @@ pbjson-types = { workspace = true } prost = { workspace = true } subxt = "0.37.0" subxt-signer = "0.37.0" +base64 = "0.22.1" +subxt-core = "0.0.1" [dev-dependencies] sp-core = "34.0.0" diff --git a/packages/kos-sdk/src/chains/mod.rs b/packages/kos-sdk/src/chains/mod.rs index 4d5e9db..f4f5eee 100644 --- a/packages/kos-sdk/src/chains/mod.rs +++ b/packages/kos-sdk/src/chains/mod.rs @@ -6,6 +6,7 @@ mod klever; mod polygon; mod substrate; mod tron; +mod polkadot; pub use self::bitcoin::BTC; pub use default::NONE; diff --git a/packages/kos-sdk/src/chains/polkadot/mod.rs b/packages/kos-sdk/src/chains/polkadot/mod.rs new file mode 100644 index 0000000..fd7d583 --- /dev/null +++ b/packages/kos-sdk/src/chains/polkadot/mod.rs @@ -0,0 +1,165 @@ +// pub mod address; +// pub mod requests; + +use std::str::FromStr; + +use crate::{ + chain::{self, BaseChain}, + chains::ethereum::address::Address as ETHAddress, + chains::evm20, + models::{BroadcastResult, PathOptions, Transaction, TransactionRaw}, +}; +use kos_crypto::{keypair::KeyPair, secp256k1::Secp256k1KeyPair, }; +use kos_types::error::Error; +use kos_types::hash::Hash; +use kos_types::number::BigNumber; + +use wasm_bindgen::prelude::*; +use web3::{ethabi, types::U256}; + +#[derive(Debug, Copy, Clone)] +#[wasm_bindgen] +pub struct DOT {} + +pub const BIP44_PATH: u32 = 195; +pub const BASE_CHAIN: BaseChain = BaseChain { + name: "Polkadot", + symbol: "DOT", + precision: 10, + chain_code: 21, +}; + +#[wasm_bindgen] +impl DOT { + #[wasm_bindgen(js_name = "baseChain")] + pub fn base_chain() -> BaseChain { + BASE_CHAIN + } + + + #[wasm_bindgen(js_name = "keypairFromBytes")] + pub fn keypair_from_bytes(private_key: &[u8]) -> Result { + // copy to fixed length array + let mut pk_slice = [0u8; 32]; + pk_slice.copy_from_slice(private_key); + + let kp = Secp256k1KeyPair::new(pk_slice); + Ok(KeyPair::new_secp256k1(kp)) + } + + #[wasm_bindgen(js_name = "keypairFromMnemonic")] + pub fn keypair_from_mnemonic( + mnemonic: &str, + path: &str, + password: Option, + ) -> Result { + let kp = Secp256k1KeyPair::new_from_mnemonic_phrase_with_path( + mnemonic, + path, + password.as_deref(), + )?; + + Ok(KeyPair::new_secp256k1(kp)) + } + + #[wasm_bindgen(js_name = "getAddressFromKeyPair")] + pub fn get_address_from_keypair(kp: &KeyPair) -> Result { + Ok(String::from("")) + } + + #[wasm_bindgen(js_name = "getPath")] + pub fn get_path(options: &PathOptions) -> Result { + let index = options.index; + + let is_legacy = options.is_legacy.unwrap_or(false); + + if is_legacy { + Ok(format!("m/44'/{}'/{}'", BIP44_PATH, index)) + } else { + // use account 0 index X + Ok(format!("m/44'/{}'/0'/0/{}", BIP44_PATH, index)) + } + } + + #[wasm_bindgen(js_name = "signDigest")] + /// Sign digest data with the private key. + pub fn sign_digest(digest: &[u8], keypair: &KeyPair) -> Result, Error> { + let raw = keypair.sign_digest(digest); + Ok(raw) + } + + #[wasm_bindgen(js_name = "verifyDigest")] + /// Verify Message signature + pub fn verify_digest(_digest: &[u8], _signature: &[u8], _address: &str) -> Result { + todo!() + } + + #[wasm_bindgen(js_name = "sign")] + /// Hash and Sign data with the private key. + pub fn sign(tx: Transaction, keypair: &KeyPair) -> Result { + match tx.data { + Some(TransactionRaw::Tron(trx_tx)) => { + let mut new_tx = trx_tx.clone(); + let digest = Vec::new(); + let sig = Vec::new(); + + new_tx.signature.push(sig); + let result = Transaction { + chain: tx.chain, + sender: tx.sender, + hash: Hash::from_vec(digest)?, + data: Some(TransactionRaw::Tron(new_tx)), + }; + + Ok(result) + } + _ => Err(Error::InvalidMessage("not a tron transaction".to_string())), + } + } + + #[wasm_bindgen(js_name = "hash")] + /// hash digest + pub fn hash(message: &[u8]) -> Result, Error> { + let digest = kos_crypto::hash::sha256(message); + Ok(digest.to_vec()) + } + + #[wasm_bindgen(js_name = "messageHash")] + /// Append prefix and hash the message + pub fn message_hash(message: &[u8]) -> Result, Error> { + todo!() + } + + #[wasm_bindgen(js_name = "signMessage")] + /// Sign Message with the private key. + pub fn sign_message(message: &[u8], keypair: &KeyPair) -> Result, Error> { + Ok(Vec::new()) + } + + #[wasm_bindgen(js_name = "verifyMessageSignature")] + /// Verify Message signature + pub fn verify_message_signature( + message: &[u8], + signature: &[u8], + address: &str, + ) -> Result { + Ok(true) + } + + #[wasm_bindgen(js_name = "getBalance")] + pub async fn get_balance( + addr: &str, + token: Option, + node_url: Option, + ) -> Result { + Ok(BigNumber::from(0)) + } + + #[wasm_bindgen(js_name = "validateAddress")] + pub fn validate_address( + addr: &str, + _option: Option, + ) -> Result { + Ok(true) + } +} diff --git a/packages/kos-sdk/src/chains/substrate/mod.rs b/packages/kos-sdk/src/chains/substrate/mod.rs index 26767f4..2c12caa 100644 --- a/packages/kos-sdk/src/chains/substrate/mod.rs +++ b/packages/kos-sdk/src/chains/substrate/mod.rs @@ -6,6 +6,11 @@ mod tests { use subxt::utils::MultiAddress; use subxt::{OnlineClient, SubstrateConfig}; use subxt_signer::{bip39::Mnemonic, sr25519::Keypair}; + use sp_core::Pair; + use subxt::config::substrate::SubstrateExtrinsicParamsBuilder; + use sp_runtime::generic::Era; + use base64::{Engine as _, alphabet, engine::{self, general_purpose}}; + // Generate an interface that we can use from the node's metadata. #[subxt::subxt(runtime_metadata_path = "artifacts/ksm-klever-node.scale")] @@ -26,6 +31,7 @@ mod tests { let balance_transfer_tx = substrate::tx() .balances() .transfer_allow_death(dest, 100_000); + let latest_block = api.blocks().at_latest().await.unwrap(); let tx_params = Params::new() @@ -34,7 +40,7 @@ mod tests { .build(); // initialing account - let phrase = "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about"; + let phrase = "permit best kiwi blast purchase cook grab present have hurdle quarter steak"; let mnemonic = Mnemonic::parse(phrase).unwrap(); let from = Keypair::from_phrase(&mnemonic, None).unwrap(); @@ -48,10 +54,91 @@ mod tests { let hex_ext = hex::encode(signed_tx.encoded()); println!("hex_ext: {}", hex_ext); + // Send the extrinsic to the node. let ext_result = signed_tx.submit().await; println!("ext_result: {:?}", ext_result); assert_eq!(ext_result.is_ok(), true); println!("tx_hash: {:?}", ext_result.unwrap().to_string()); } + + // #[tokio::test] + // async fn test_sign() { + // // Step 1: Generate a keypair from a mnemonic phrase + // let phrase = "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about"; + // let mnemonic = Mnemonic::parse(phrase).unwrap(); + // let from = Keypair::from_phrase(&mnemonic, None).unwrap(); + // + // // Step 2: Construct the transaction payload + // let dest_publickey = sr25519::Public::from_ss58check("JH8gatLWwoDsMQQeXJuVaTsQVYJTEhywfTXuagucRCPYh8K").unwrap(); + // let dest = MultiAddress::Id(AccountId32::from(dest_publickey.0)); + // let call = substrate::tx() + // .balances() + // .transfer_allow_death(dest, 100_000); + // + // // // Step 3: Create extrinsic parameters + // // let params = SubstrateExtrinsicParamsBuilder::new() + // // .era(Era::Immortal, 0) + // // .nonce(0) + // // .tip(0); + // // + // // // Step 4: Sign the transaction using the keypair + // // let signature = from.sign(call.encode().as_slice()); + // // + // // // Step 5: Construct the signed extrinsic + // // let extrinsic = sp_runtime::generic::UncheckedExtrinsic { + // // signature: Some((from.public().into(), signature, params)), + // // function: call, + // // }; + // // + // // // Step 6: Encode the signed extrinsic to raw bytes + // // let raw_extrinsic = extrinsic.encode(); + // // + // // println!("Signed transaction: {:?}", raw_extrinsic); + // // + // // Ok(()) + // } + // + // #[tokio::test] + // async fn test_sign_2() { + // // Step 1: Generate a keypair from a mnemonic phrase + // let phrase = "permit best kiwi blast purchase cook grab present have hurdle quarter steak"; + // let mnemonic = Mnemonic::parse(phrase).unwrap(); + // let from = Keypair::from_phrase(&mnemonic, None).unwrap(); + // + // // Step 2: Decode the base64-encoded transaction + // let base64_tx = "BQMA/E3BuMkA3b4/J29/ZssDmcFEHlIf1YXQOhCb5SjoZzkoAKwAABdKDwAaAAAAkbFxuxWOLThI+iOp8cJRgvuOIDE7LB60khnaenDOkMORsXG7FY4tOEj6I6nxwlGC+44gMTssHrSSGdp6cM6QwwA="; + // + // let raw_tx = general_purpose::STANDARD + // .decode(base64_tx).unwrap(); + // println!("{:?}", raw_tx); + // + // // Step 3: Deserialize the raw bytes into a transaction + // let mut raw_tx_cursor = std::io::Cursor::new(raw_tx); + // let call: substrate::runtime_types::pallet_balances::Call = Decode::decode(&mut raw_tx_cursor)?; + // + // // Step 4: Create extrinsic parameters + // let params = SubstrateExtrinsicParamsBuilder::new() + // .era(Era::Immortal, 0) + // .nonce(0) + // .tip(0); + // + // // Step 5: Sign the transaction using the keypair + // let signature = from.sign(call.encode().as_slice()); + // + // // Step 6: Construct the signed extrinsic + // let extrinsic = subxt::tx::UncheckedExtrinsic { + // signature: Some((from.public().into(), signature, params)), + // function: call, + // }; + // + // // Step 7: Encode the signed extrinsic to raw bytes + // let raw_signed_tx = extrinsic.encode(); + // + // println!("Signed transaction: {:?}", raw_signed_tx); + // + // Ok(()) + // + // } + } From 283af8d89c1908f4c8e1af9aea2193a25acaeb34 Mon Sep 17 00:00:00 2001 From: Pedro Camboim Date: Wed, 21 Aug 2024 16:33:22 -0300 Subject: [PATCH 03/25] fix: compile errors --- Cargo.lock | 1 + packages/kos-crypto/Cargo.toml | 1 + packages/kos-crypto/src/keypair.rs | 20 +-- packages/kos-crypto/src/lib.rs | 1 + packages/kos-crypto/src/sr25519.rs | 139 ++++++++++++++++++++ packages/kos-sdk/src/chains/polkadot/mod.rs | 18 +-- 6 files changed, 158 insertions(+), 22 deletions(-) create mode 100644 packages/kos-crypto/src/sr25519.rs diff --git a/Cargo.lock b/Cargo.lock index 928f314..d8e971b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2709,6 +2709,7 @@ dependencies = [ "sha1", "sha2 0.10.8", "sha3", + "sp-core", "subxt-signer 0.30.1", "wasm-bindgen", "zeroize", diff --git a/packages/kos-crypto/Cargo.toml b/packages/kos-crypto/Cargo.toml index 6f056d8..2cf36f4 100644 --- a/packages/kos-crypto/Cargo.toml +++ b/packages/kos-crypto/Cargo.toml @@ -32,3 +32,4 @@ pem = "3" pbkdf2 = { version = "0.12", features = ["simple"] } base64 = "0.21" subxt-signer = "0.30.1" +sp-core = "34.0.0" diff --git a/packages/kos-crypto/src/keypair.rs b/packages/kos-crypto/src/keypair.rs index fd2f59e..7f6eb9c 100644 --- a/packages/kos-crypto/src/keypair.rs +++ b/packages/kos-crypto/src/keypair.rs @@ -1,6 +1,6 @@ use crate::ed25519; use crate::secp256k1; -use subxt_signer::{sr25519, sr25519::verify, sr25519::Keypair}; +use crate::sr25519; use std::fmt; use std::fmt::Pointer; @@ -21,7 +21,7 @@ pub struct KeyPair { key_type: KeyType, ed25519: Option, secp256k1: Option, - sr25519: Option + sr25519: Option } #[wasm_bindgen] @@ -57,7 +57,7 @@ impl KeyPair { } } - pub fn new_sr25519(kp: sr25519::Keypair) -> Self { + pub fn new_sr25519(kp: sr25519::Sr25519KeyPair) -> Self { Self { key_type: KeyType::Sr25519, ed25519: None, @@ -76,7 +76,7 @@ impl KeyPair { KeyType::Ed25519 => self.ed25519.as_ref().unwrap().sign_digest(digest), KeyType::Secp256k1 => self.secp256k1.as_ref().unwrap().sign_digest(digest), KeyType::Secp256k1Compressed => self.secp256k1.as_ref().unwrap().sign_digest(digest), - KeyType::Sr25519 => self.sr25519.as_ref().unwrap().sign(digest).0.to_vec(), + KeyType::Sr25519 => self.sr25519.as_ref().unwrap().sign_digest(digest), } } @@ -98,11 +98,11 @@ impl KeyPair { .as_ref() .unwrap() .verify_digest(digest, signature, public_key), - KeyType::Sr25519 => { - let pub_key = sr25519::PublicKey::try_from(public_key).unwrap(); - - verify(digest.as_ref(), signature, &pub_key) - } + KeyType::Sr25519 => self + .sr25519 + .as_ref() + .unwrap() + .verify_digest(digest, signature, public_key), } } @@ -128,7 +128,7 @@ impl KeyPair { KeyType::Secp256k1 | KeyType::Secp256k1Compressed => { self.secp256k1.as_ref().unwrap().public_key() } - KeyType::Sr25519 => self.sr25519.as_ref().unwrap().public_key().0.to_vec() + KeyType::Sr25519 => self.sr25519.as_ref().unwrap().public_key() } } diff --git a/packages/kos-crypto/src/lib.rs b/packages/kos-crypto/src/lib.rs index d2d5a19..fbeae4d 100644 --- a/packages/kos-crypto/src/lib.rs +++ b/packages/kos-crypto/src/lib.rs @@ -5,3 +5,4 @@ pub mod hash; pub mod keypair; pub mod mnemonic; pub mod secp256k1; +pub mod sr25519; diff --git a/packages/kos-crypto/src/sr25519.rs b/packages/kos-crypto/src/sr25519.rs new file mode 100644 index 0000000..ee636bb --- /dev/null +++ b/packages/kos-crypto/src/sr25519.rs @@ -0,0 +1,139 @@ +use std::str::FromStr; +use coins_bip32::path::DerivationPath; +use kos_types::{error::Error, Bytes32}; +use coins_bip39::{English, Mnemonic}; +use subxt_signer::{sr25519, sr25519::verify, sr25519::Keypair}; +use sp_core::{sr25519::Pair}; +use serde::{Serialize, Serializer, Deserialize, Deserializer}; +use subxt_signer::sr25519::PublicKey; +use wasm_bindgen::prelude::wasm_bindgen; + + +#[wasm_bindgen] +pub struct Sr25519KeyPair { + keypair: Keypair +} + +impl Serialize for Sr25519KeyPair { + fn serialize(&self, serializer: S) -> Result + where + S: Serializer, + { + + Ok(serializer.serialize_str("Sr25519KeyPair )")?) + } +} + +impl<'de> Deserialize<'de> for Sr25519KeyPair { + fn deserialize(deserializer: D) -> Result + where + D: Deserializer<'de> + { + Ok(Sr25519KeyPair::default()) + } +} + +impl Default for Sr25519KeyPair { + fn default() -> Self { + Self { + keypair: Keypair::from_seed(sr25519::Seed::from([0u8; 32])).unwrap() + } + } +} + +impl Clone for Sr25519KeyPair { + fn clone(&self) -> Sr25519KeyPair { + Sr25519KeyPair { + keypair: self.keypair.clone(), + } + } +} + +impl Sr25519KeyPair { + pub fn random(rng: &mut R) -> Self + where + R: rand::Rng + ?Sized, + { + let mut secret = Bytes32::zeroed(); + rng.fill(secret.as_mut()); + + Sr25519KeyPair::new(secret.into()) + } + + pub fn new(secret: [u8; 32]) -> Self { + let seed = sr25519::Seed::from(secret); + let keypair = Keypair::from_seed(seed).unwrap(); + + Self { + keypair + } + } + + pub fn new_from_mnemonic_phrase_with_path( + phrase: &str, + path: &str, + password: Option<&str>, + ) -> Result { + let mnemonic = Mnemonic::::new_from_phrase(phrase)?; + let path = DerivationPath::from_str(path)?; + Self::new_from_mnemonic(path, mnemonic, password) + } + + /// Generate a new secret key from a `DerivationPath` and `Mnemonic`. + pub fn new_from_mnemonic( + d: DerivationPath, + m: Mnemonic, + password: Option<&str>, + ) -> Result { + let derived_priv_key = m.derive_key(d, password)?; + let key: &coins_bip32::prelude::SigningKey = derived_priv_key.as_ref(); + + let seed = sr25519::Seed::from(key.to_bytes()); + let keypair = Keypair::from_seed(seed).unwrap(); + Ok(Self { + keypair + }) + } +} + +impl Sr25519KeyPair { + pub fn public_key(&self) -> Vec { + self.keypair.public_key().0.to_vec() + } +} + +impl Sr25519KeyPair { + pub fn sign_digest(&self, message: &[u8]) -> Vec { + // let keypair = Keypair::from_seed() + // let keypair = Keypair { + // secret: sr25519::Secret(self.secret_key.clone()), + // public: self.public_key, + // }; + // keypair.sign(message).0.to_vec() + Vec::new() + } + + pub fn verify_digest(&self, message: &[u8], signature: &[u8], public_key: &[u8]) -> bool { + // let keypair = Keypair { + // secret: sr25519::Secret(self.secret_key.clone()), + // public: self.public_key, + // }; + // verify(&keypair, message, signature) + true + } +} + +// Simple tests +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_sr25519_keypair() { + let keypair = Sr25519KeyPair::random(&mut rand::thread_rng()); + let public_key = keypair.public_key(); + let message = b"hello world"; + let signature = keypair.sign_digest(message); + assert_eq!(keypair.verify_digest(message, &signature, &public_key), true); + } +} \ No newline at end of file diff --git a/packages/kos-sdk/src/chains/polkadot/mod.rs b/packages/kos-sdk/src/chains/polkadot/mod.rs index fd7d583..961ccd0 100644 --- a/packages/kos-sdk/src/chains/polkadot/mod.rs +++ b/packages/kos-sdk/src/chains/polkadot/mod.rs @@ -16,6 +16,7 @@ use kos_types::number::BigNumber; use wasm_bindgen::prelude::*; use web3::{ethabi, types::U256}; +use kos_crypto::sr25519::Sr25519KeyPair; #[derive(Debug, Copy, Clone)] #[wasm_bindgen] @@ -43,8 +44,8 @@ impl DOT { let mut pk_slice = [0u8; 32]; pk_slice.copy_from_slice(private_key); - let kp = Secp256k1KeyPair::new(pk_slice); - Ok(KeyPair::new_secp256k1(kp)) + let kp = Sr25519KeyPair::new(pk_slice); + Ok(KeyPair::new_sr25519(kp)) } #[wasm_bindgen(js_name = "keypairFromMnemonic")] @@ -53,13 +54,13 @@ impl DOT { path: &str, password: Option, ) -> Result { - let kp = Secp256k1KeyPair::new_from_mnemonic_phrase_with_path( + let kp = Sr25519KeyPair::new_from_mnemonic_phrase_with_path( mnemonic, path, password.as_deref(), )?; - Ok(KeyPair::new_secp256k1(kp)) + Ok(KeyPair::new_sr25519(kp)) } #[wasm_bindgen(js_name = "getAddressFromKeyPair")] @@ -71,14 +72,7 @@ impl DOT { pub fn get_path(options: &PathOptions) -> Result { let index = options.index; - let is_legacy = options.is_legacy.unwrap_or(false); - - if is_legacy { - Ok(format!("m/44'/{}'/{}'", BIP44_PATH, index)) - } else { - // use account 0 index X - Ok(format!("m/44'/{}'/0'/0/{}", BIP44_PATH, index)) - } + Ok(format!("m/44'/{}'/0'/0/{}", BIP44_PATH, index)) } #[wasm_bindgen(js_name = "signDigest")] From 4fa212efd57ae8078f70fcfd8492d2a86002959f Mon Sep 17 00:00:00 2001 From: Pedro Camboim Date: Thu, 22 Aug 2024 17:09:15 -0300 Subject: [PATCH 04/25] chore: dot address package --- packages/kos-crypto/src/sr25519.rs | 19 +------ .../kos-sdk/src/chains/polkadot/address.rs | 51 +++++++++++++++++++ packages/kos-sdk/src/chains/polkadot/mod.rs | 28 +++++++--- 3 files changed, 72 insertions(+), 26 deletions(-) create mode 100644 packages/kos-sdk/src/chains/polkadot/address.rs diff --git a/packages/kos-crypto/src/sr25519.rs b/packages/kos-crypto/src/sr25519.rs index ee636bb..2c184d9 100644 --- a/packages/kos-crypto/src/sr25519.rs +++ b/packages/kos-crypto/src/sr25519.rs @@ -2,10 +2,8 @@ use std::str::FromStr; use coins_bip32::path::DerivationPath; use kos_types::{error::Error, Bytes32}; use coins_bip39::{English, Mnemonic}; -use subxt_signer::{sr25519, sr25519::verify, sr25519::Keypair}; -use sp_core::{sr25519::Pair}; +use subxt_signer::{sr25519, sr25519::Keypair}; use serde::{Serialize, Serializer, Deserialize, Deserializer}; -use subxt_signer::sr25519::PublicKey; use wasm_bindgen::prelude::wasm_bindgen; @@ -122,18 +120,3 @@ impl Sr25519KeyPair { true } } - -// Simple tests -#[cfg(test)] -mod tests { - use super::*; - - #[test] - fn test_sr25519_keypair() { - let keypair = Sr25519KeyPair::random(&mut rand::thread_rng()); - let public_key = keypair.public_key(); - let message = b"hello world"; - let signature = keypair.sign_digest(message); - assert_eq!(keypair.verify_digest(message, &signature, &public_key), true); - } -} \ No newline at end of file diff --git a/packages/kos-sdk/src/chains/polkadot/address.rs b/packages/kos-sdk/src/chains/polkadot/address.rs new file mode 100644 index 0000000..be833b6 --- /dev/null +++ b/packages/kos-sdk/src/chains/polkadot/address.rs @@ -0,0 +1,51 @@ +use wasm_bindgen::prelude::wasm_bindgen; +use kos_crypto::keypair::KeyPair; +use sp_core::crypto::Ss58Codec; + +const ADDRESS_LEN: usize = 32; +#[derive(PartialEq, Eq, Clone, Copy, Hash, PartialOrd, Ord)] +#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] +#[repr(transparent)] +#[wasm_bindgen(js_name = "DOTAddress")] +pub struct Address([u8; ADDRESS_LEN]); + +impl Address { + /// Address of a public key. + pub fn from_public(public: [u8; 32]) -> Address { + // pubkey to address use first 32 bytes + Address(public) + } + + pub fn public_key(&self) -> [u8; 32] { + self.0 + } + + /// Address of a keypair. + pub fn from_keypair(kp: &KeyPair) -> Address { + Address::from_public(kp.public_key().try_into().unwrap()) + } + + /// As raw 32-byte address. + pub fn as_bytes(&self) -> &[u8] { + &self.0 + } + + /// Address from raw 32-byte. + pub fn from_bytes(raw: &[u8]) -> &Address { + assert!(raw.len() == ADDRESS_LEN); + + unsafe { std::mem::transmute(&raw[0]) } + } + + /// To hex address + pub fn to_hex_address(self) -> String { + hex::encode(self.0) + } +} + +impl ::std::fmt::Display for Address { + fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + let st = ::from_slice(&self.0).to_string(); + st.fmt(f) + } +} \ No newline at end of file diff --git a/packages/kos-sdk/src/chains/polkadot/mod.rs b/packages/kos-sdk/src/chains/polkadot/mod.rs index 961ccd0..fc4f034 100644 --- a/packages/kos-sdk/src/chains/polkadot/mod.rs +++ b/packages/kos-sdk/src/chains/polkadot/mod.rs @@ -1,21 +1,17 @@ -// pub mod address; -// pub mod requests; +mod address; use std::str::FromStr; use crate::{ chain::{self, BaseChain}, - chains::ethereum::address::Address as ETHAddress, - chains::evm20, - models::{BroadcastResult, PathOptions, Transaction, TransactionRaw}, + models::{PathOptions, Transaction, TransactionRaw}, }; -use kos_crypto::{keypair::KeyPair, secp256k1::Secp256k1KeyPair, }; +use kos_crypto::{keypair::KeyPair}; use kos_types::error::Error; use kos_types::hash::Hash; use kos_types::number::BigNumber; use wasm_bindgen::prelude::*; -use web3::{ethabi, types::U256}; use kos_crypto::sr25519::Sr25519KeyPair; #[derive(Debug, Copy, Clone)] @@ -65,7 +61,7 @@ impl DOT { #[wasm_bindgen(js_name = "getAddressFromKeyPair")] pub fn get_address_from_keypair(kp: &KeyPair) -> Result { - Ok(String::from("")) + Ok(address::Address::from_keypair(kp).to_string()) } #[wasm_bindgen(js_name = "getPath")] @@ -157,3 +153,19 @@ impl DOT { Ok(true) } } + +// Test keypair from mnemonic +#[cfg(test)] +mod tests { + + #[test] + fn test_keypair_from_mnemonic() { + let mnemonic = "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about"; + let path = "m/44'/195'/0'/0/0"; + let kp = super::DOT::keypair_from_mnemonic(mnemonic, path, None).unwrap(); + let address = super::DOT::get_address_from_keypair(&kp).unwrap(); + assert_eq!(address, ""); + } + +} + From e08475f18d7f72470afdc4ad36080b4a953b5bcf Mon Sep 17 00:00:00 2001 From: Pedro Camboim Date: Fri, 23 Aug 2024 16:03:44 -0300 Subject: [PATCH 05/25] feat: new from mnemonic --- packages/kos-crypto/src/sr25519.rs | 87 +++++++++++--------- packages/kos-sdk/src/chains/substrate/mod.rs | 2 +- 2 files changed, 48 insertions(+), 41 deletions(-) diff --git a/packages/kos-crypto/src/sr25519.rs b/packages/kos-crypto/src/sr25519.rs index 2c184d9..b112982 100644 --- a/packages/kos-crypto/src/sr25519.rs +++ b/packages/kos-crypto/src/sr25519.rs @@ -2,14 +2,14 @@ use std::str::FromStr; use coins_bip32::path::DerivationPath; use kos_types::{error::Error, Bytes32}; use coins_bip39::{English, Mnemonic}; -use subxt_signer::{sr25519, sr25519::Keypair}; -use serde::{Serialize, Serializer, Deserialize, Deserializer}; +use serde::{Deserialize, Deserializer, Serialize, Serializer}; +use sp_core::{ed25519, sr25519, Pair}; use wasm_bindgen::prelude::wasm_bindgen; #[wasm_bindgen] pub struct Sr25519KeyPair { - keypair: Keypair + keypair: sr25519::Pair } impl Serialize for Sr25519KeyPair { @@ -17,8 +17,7 @@ impl Serialize for Sr25519KeyPair { where S: Serializer, { - - Ok(serializer.serialize_str("Sr25519KeyPair )")?) + todo!() } } @@ -27,15 +26,7 @@ impl<'de> Deserialize<'de> for Sr25519KeyPair { where D: Deserializer<'de> { - Ok(Sr25519KeyPair::default()) - } -} - -impl Default for Sr25519KeyPair { - fn default() -> Self { - Self { - keypair: Keypair::from_seed(sr25519::Seed::from([0u8; 32])).unwrap() - } + todo!() } } @@ -47,6 +38,7 @@ impl Clone for Sr25519KeyPair { } } + impl Sr25519KeyPair { pub fn random(rng: &mut R) -> Self where @@ -59,9 +51,7 @@ impl Sr25519KeyPair { } pub fn new(secret: [u8; 32]) -> Self { - let seed = sr25519::Seed::from(secret); - let keypair = Keypair::from_seed(seed).unwrap(); - + let keypair = sr25519::Pair::from_seed_slice(&secret).unwrap(); Self { keypair } @@ -73,50 +63,67 @@ impl Sr25519KeyPair { password: Option<&str>, ) -> Result { let mnemonic = Mnemonic::::new_from_phrase(phrase)?; - let path = DerivationPath::from_str(path)?; Self::new_from_mnemonic(path, mnemonic, password) } - /// Generate a new secret key from a `DerivationPath` and `Mnemonic`. pub fn new_from_mnemonic( - d: DerivationPath, - m: Mnemonic, + path: &str, + m: Mnemonic::, password: Option<&str>, ) -> Result { - let derived_priv_key = m.derive_key(d, password)?; - let key: &coins_bip32::prelude::SigningKey = derived_priv_key.as_ref(); + // Convert mnemonic to seed + let seed = format!("{}{}", m.to_phrase(), path); + + println!("Seed: {}", seed); + + // Derive keypair based on the provided path and seed + let keypair = sr25519::Pair::from_string(&seed, password).unwrap(); - let seed = sr25519::Seed::from(key.to_bytes()); - let keypair = Keypair::from_seed(seed).unwrap(); Ok(Self { - keypair + keypair, }) } } impl Sr25519KeyPair { pub fn public_key(&self) -> Vec { - self.keypair.public_key().0.to_vec() + self.keypair.public().0.to_vec() } } impl Sr25519KeyPair { pub fn sign_digest(&self, message: &[u8]) -> Vec { - // let keypair = Keypair::from_seed() - // let keypair = Keypair { - // secret: sr25519::Secret(self.secret_key.clone()), - // public: self.public_key, - // }; - // keypair.sign(message).0.to_vec() - Vec::new() + todo!() } pub fn verify_digest(&self, message: &[u8], signature: &[u8], public_key: &[u8]) -> bool { - // let keypair = Keypair { - // secret: sr25519::Secret(self.secret_key.clone()), - // public: self.public_key, - // }; - // verify(&keypair, message, signature) - true + todo!() + } +} + +// Test new_from_mnemonic +#[cfg(test)] +mod tests { + use super::*; + use coins_bip39::Mnemonic; + use sp_core::crypto::{Ss58AddressFormat, Ss58Codec}; + + #[test] + fn test_new_from_mnemonic() { + let phrase = "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about"; + let mnemonic = Mnemonic::::new_from_phrase(phrase).unwrap(); + let keypair = Sr25519KeyPair::new_from_mnemonic("//0", mnemonic, None).unwrap(); + let address = keypair.keypair.public().to_ss58check_with_version(Ss58AddressFormat::custom(0)); + // Print the address + println!("{:?}", address); + + assert_eq!(keypair.keypair.public().0.len(), 32); + } + + #[test] + fn test_random() { + let mut rng = rand::thread_rng(); + let keypair = Sr25519KeyPair::random(&mut rng); + assert_eq!(keypair.keypair.public().0.len(), 32); } } diff --git a/packages/kos-sdk/src/chains/substrate/mod.rs b/packages/kos-sdk/src/chains/substrate/mod.rs index 2c12caa..d6766f4 100644 --- a/packages/kos-sdk/src/chains/substrate/mod.rs +++ b/packages/kos-sdk/src/chains/substrate/mod.rs @@ -40,7 +40,7 @@ mod tests { .build(); // initialing account - let phrase = "permit best kiwi blast purchase cook grab present have hurdle quarter steak"; + let phrase = "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about"; let mnemonic = Mnemonic::parse(phrase).unwrap(); let from = Keypair::from_phrase(&mnemonic, None).unwrap(); From ae79a0e28427984cdf82433054a027e3d81cb8c8 Mon Sep 17 00:00:00 2001 From: Pedro Camboim Date: Fri, 23 Aug 2024 16:06:06 -0300 Subject: [PATCH 06/25] chore: dot mod --- packages/kos-sdk/src/chains/substrate/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/kos-sdk/src/chains/substrate/mod.rs b/packages/kos-sdk/src/chains/substrate/mod.rs index d6766f4..9635770 100644 --- a/packages/kos-sdk/src/chains/substrate/mod.rs +++ b/packages/kos-sdk/src/chains/substrate/mod.rs @@ -102,7 +102,7 @@ mod tests { // #[tokio::test] // async fn test_sign_2() { // // Step 1: Generate a keypair from a mnemonic phrase - // let phrase = "permit best kiwi blast purchase cook grab present have hurdle quarter steak"; + // let phrase = "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about"; // let mnemonic = Mnemonic::parse(phrase).unwrap(); // let from = Keypair::from_phrase(&mnemonic, None).unwrap(); // From d8c7457da6c557ec69207fdac8756e0eb2d3af09 Mon Sep 17 00:00:00 2001 From: Pedro Camboim Date: Mon, 26 Aug 2024 10:09:51 -0300 Subject: [PATCH 07/25] chore: DOT mnemonic tests --- packages/kos-crypto/src/sr25519.rs | 26 ---- packages/kos-sdk/src/chains/mod.rs | 1 - .../kos-sdk/src/chains/polkadot/address.rs | 5 +- packages/kos-sdk/src/chains/polkadot/mod.rs | 21 ++- packages/kos-sdk/src/chains/substrate/mod.rs | 144 ------------------ 5 files changed, 20 insertions(+), 177 deletions(-) delete mode 100644 packages/kos-sdk/src/chains/substrate/mod.rs diff --git a/packages/kos-crypto/src/sr25519.rs b/packages/kos-crypto/src/sr25519.rs index b112982..29a4cbf 100644 --- a/packages/kos-crypto/src/sr25519.rs +++ b/packages/kos-crypto/src/sr25519.rs @@ -101,29 +101,3 @@ impl Sr25519KeyPair { } } -// Test new_from_mnemonic -#[cfg(test)] -mod tests { - use super::*; - use coins_bip39::Mnemonic; - use sp_core::crypto::{Ss58AddressFormat, Ss58Codec}; - - #[test] - fn test_new_from_mnemonic() { - let phrase = "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about"; - let mnemonic = Mnemonic::::new_from_phrase(phrase).unwrap(); - let keypair = Sr25519KeyPair::new_from_mnemonic("//0", mnemonic, None).unwrap(); - let address = keypair.keypair.public().to_ss58check_with_version(Ss58AddressFormat::custom(0)); - // Print the address - println!("{:?}", address); - - assert_eq!(keypair.keypair.public().0.len(), 32); - } - - #[test] - fn test_random() { - let mut rng = rand::thread_rng(); - let keypair = Sr25519KeyPair::random(&mut rng); - assert_eq!(keypair.keypair.public().0.len(), 32); - } -} diff --git a/packages/kos-sdk/src/chains/mod.rs b/packages/kos-sdk/src/chains/mod.rs index f4f5eee..fd13bd1 100644 --- a/packages/kos-sdk/src/chains/mod.rs +++ b/packages/kos-sdk/src/chains/mod.rs @@ -4,7 +4,6 @@ mod ethereum; mod evm20; mod klever; mod polygon; -mod substrate; mod tron; mod polkadot; diff --git a/packages/kos-sdk/src/chains/polkadot/address.rs b/packages/kos-sdk/src/chains/polkadot/address.rs index be833b6..afafb16 100644 --- a/packages/kos-sdk/src/chains/polkadot/address.rs +++ b/packages/kos-sdk/src/chains/polkadot/address.rs @@ -1,6 +1,6 @@ use wasm_bindgen::prelude::wasm_bindgen; use kos_crypto::keypair::KeyPair; -use sp_core::crypto::Ss58Codec; +use sp_core::crypto::{Ss58AddressFormat, Ss58Codec}; const ADDRESS_LEN: usize = 32; #[derive(PartialEq, Eq, Clone, Copy, Hash, PartialOrd, Ord)] @@ -45,7 +45,8 @@ impl Address { impl ::std::fmt::Display for Address { fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { - let st = ::from_slice(&self.0).to_string(); + let st = sp_core::sr25519::Public::from_raw(self.0).to_ss58check_with_version(Ss58AddressFormat::custom(0)); + st.fmt(f) } } \ No newline at end of file diff --git a/packages/kos-sdk/src/chains/polkadot/mod.rs b/packages/kos-sdk/src/chains/polkadot/mod.rs index fc4f034..b4d1f91 100644 --- a/packages/kos-sdk/src/chains/polkadot/mod.rs +++ b/packages/kos-sdk/src/chains/polkadot/mod.rs @@ -68,7 +68,13 @@ impl DOT { pub fn get_path(options: &PathOptions) -> Result { let index = options.index; - Ok(format!("m/44'/{}'/0'/0/{}", BIP44_PATH, index)) + if (index == 0) { + return Ok(String::new()); + } + + let index = index - 1; + + Ok(format!("//{}", index)) } #[wasm_bindgen(js_name = "signDigest")] @@ -161,10 +167,17 @@ mod tests { #[test] fn test_keypair_from_mnemonic() { let mnemonic = "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about"; - let path = "m/44'/195'/0'/0/0"; - let kp = super::DOT::keypair_from_mnemonic(mnemonic, path, None).unwrap(); + let path = super::DOT::get_path(&super::PathOptions { index: 0, is_legacy: None }).unwrap(); + let kp = super::DOT::keypair_from_mnemonic(mnemonic, &path, None).unwrap(); let address = super::DOT::get_address_from_keypair(&kp).unwrap(); - assert_eq!(address, ""); + assert_eq!(address, "13KVd4f2a4S5pLp4gTTFezyXdPWx27vQ9vS6xBXJ9yWVd7xo"); + } + + #[test] + fn test_get_path() { + let path = super::DOT::get_path(&super::PathOptions { index: 1, is_legacy: None }).unwrap(); + + assert_eq!(path, "//0"); } } diff --git a/packages/kos-sdk/src/chains/substrate/mod.rs b/packages/kos-sdk/src/chains/substrate/mod.rs deleted file mode 100644 index 9635770..0000000 --- a/packages/kos-sdk/src/chains/substrate/mod.rs +++ /dev/null @@ -1,144 +0,0 @@ -#[cfg(test)] -mod tests { - use sp_core::{crypto::Ss58Codec, sr25519}; - use subxt::config::substrate::SubstrateExtrinsicParamsBuilder as Params; - use subxt::utils::AccountId32; - use subxt::utils::MultiAddress; - use subxt::{OnlineClient, SubstrateConfig}; - use subxt_signer::{bip39::Mnemonic, sr25519::Keypair}; - use sp_core::Pair; - use subxt::config::substrate::SubstrateExtrinsicParamsBuilder; - use sp_runtime::generic::Era; - use base64::{Engine as _, alphabet, engine::{self, general_purpose}}; - - - // Generate an interface that we can use from the node's metadata. - #[subxt::subxt(runtime_metadata_path = "artifacts/ksm-klever-node.scale")] - pub mod substrate {} - - #[tokio::test] - async fn test_subxt() { - // Create a new API client, configured to talk to Polkadot nodes. - let api = OnlineClient::::from_url("wss://kusama.node.klever.io") - .await - .unwrap(); - - // Build a balance transfer extrinsic. - let dest_publickey = - sr25519::Public::from_ss58check("JH8gatLWwoDsMQQeXJuVaTsQVYJTEhywfTXuagucRCPYh8K") - .unwrap(); - let dest = MultiAddress::Id(AccountId32::from(dest_publickey.0)); - let balance_transfer_tx = substrate::tx() - .balances() - .transfer_allow_death(dest, 100_000); - - let latest_block = api.blocks().at_latest().await.unwrap(); - - let tx_params = Params::new() - .tip(1_000) - .mortal(latest_block.header(), 32) - .build(); - - // initialing account - let phrase = "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about"; - let mnemonic = Mnemonic::parse(phrase).unwrap(); - let from = Keypair::from_phrase(&mnemonic, None).unwrap(); - - let signed_tx = api - .tx() - .create_signed(&balance_transfer_tx, &from, tx_params) - .await - .unwrap(); - let result = signed_tx.validate().await; - assert_eq!(result.is_ok(), true); - let hex_ext = hex::encode(signed_tx.encoded()); - println!("hex_ext: {}", hex_ext); - - - // Send the extrinsic to the node. - let ext_result = signed_tx.submit().await; - println!("ext_result: {:?}", ext_result); - assert_eq!(ext_result.is_ok(), true); - println!("tx_hash: {:?}", ext_result.unwrap().to_string()); - } - - // #[tokio::test] - // async fn test_sign() { - // // Step 1: Generate a keypair from a mnemonic phrase - // let phrase = "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about"; - // let mnemonic = Mnemonic::parse(phrase).unwrap(); - // let from = Keypair::from_phrase(&mnemonic, None).unwrap(); - // - // // Step 2: Construct the transaction payload - // let dest_publickey = sr25519::Public::from_ss58check("JH8gatLWwoDsMQQeXJuVaTsQVYJTEhywfTXuagucRCPYh8K").unwrap(); - // let dest = MultiAddress::Id(AccountId32::from(dest_publickey.0)); - // let call = substrate::tx() - // .balances() - // .transfer_allow_death(dest, 100_000); - // - // // // Step 3: Create extrinsic parameters - // // let params = SubstrateExtrinsicParamsBuilder::new() - // // .era(Era::Immortal, 0) - // // .nonce(0) - // // .tip(0); - // // - // // // Step 4: Sign the transaction using the keypair - // // let signature = from.sign(call.encode().as_slice()); - // // - // // // Step 5: Construct the signed extrinsic - // // let extrinsic = sp_runtime::generic::UncheckedExtrinsic { - // // signature: Some((from.public().into(), signature, params)), - // // function: call, - // // }; - // // - // // // Step 6: Encode the signed extrinsic to raw bytes - // // let raw_extrinsic = extrinsic.encode(); - // // - // // println!("Signed transaction: {:?}", raw_extrinsic); - // // - // // Ok(()) - // } - // - // #[tokio::test] - // async fn test_sign_2() { - // // Step 1: Generate a keypair from a mnemonic phrase - // let phrase = "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about"; - // let mnemonic = Mnemonic::parse(phrase).unwrap(); - // let from = Keypair::from_phrase(&mnemonic, None).unwrap(); - // - // // Step 2: Decode the base64-encoded transaction - // let base64_tx = "BQMA/E3BuMkA3b4/J29/ZssDmcFEHlIf1YXQOhCb5SjoZzkoAKwAABdKDwAaAAAAkbFxuxWOLThI+iOp8cJRgvuOIDE7LB60khnaenDOkMORsXG7FY4tOEj6I6nxwlGC+44gMTssHrSSGdp6cM6QwwA="; - // - // let raw_tx = general_purpose::STANDARD - // .decode(base64_tx).unwrap(); - // println!("{:?}", raw_tx); - // - // // Step 3: Deserialize the raw bytes into a transaction - // let mut raw_tx_cursor = std::io::Cursor::new(raw_tx); - // let call: substrate::runtime_types::pallet_balances::Call = Decode::decode(&mut raw_tx_cursor)?; - // - // // Step 4: Create extrinsic parameters - // let params = SubstrateExtrinsicParamsBuilder::new() - // .era(Era::Immortal, 0) - // .nonce(0) - // .tip(0); - // - // // Step 5: Sign the transaction using the keypair - // let signature = from.sign(call.encode().as_slice()); - // - // // Step 6: Construct the signed extrinsic - // let extrinsic = subxt::tx::UncheckedExtrinsic { - // signature: Some((from.public().into(), signature, params)), - // function: call, - // }; - // - // // Step 7: Encode the signed extrinsic to raw bytes - // let raw_signed_tx = extrinsic.encode(); - // - // println!("Signed transaction: {:?}", raw_signed_tx); - // - // Ok(()) - // - // } - -} From 6c8c8fba6b086a5373a88f8cad81678833c79655 Mon Sep 17 00:00:00 2001 From: Pedro Camboim Date: Wed, 28 Aug 2024 21:45:58 -0300 Subject: [PATCH 08/25] feat: validate address --- packages/kos-sdk/src/chains/polkadot/address.rs | 17 +++++++++++++++++ packages/kos-sdk/src/chains/polkadot/mod.rs | 10 +++++++++- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/packages/kos-sdk/src/chains/polkadot/address.rs b/packages/kos-sdk/src/chains/polkadot/address.rs index afafb16..fff43ce 100644 --- a/packages/kos-sdk/src/chains/polkadot/address.rs +++ b/packages/kos-sdk/src/chains/polkadot/address.rs @@ -1,3 +1,4 @@ +use std::str::FromStr; use wasm_bindgen::prelude::wasm_bindgen; use kos_crypto::keypair::KeyPair; use sp_core::crypto::{Ss58AddressFormat, Ss58Codec}; @@ -43,6 +44,22 @@ impl Address { } } +impl FromStr for Address { + type Err = &'static str; + + fn from_str(s: &str) -> Result { + + let decoded = sp_core::sr25519::Public::from_ss58check_with_version(s).map_err(|_| "Invalid address")?; + + decoded.0.len() == ADDRESS_LEN || return Err("Invalid address"); + + let mut raw = [0u8; ADDRESS_LEN]; + raw.copy_from_slice(&decoded.0); + + Ok(Address(raw)) + } +} + impl ::std::fmt::Display for Address { fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { let st = sp_core::sr25519::Public::from_raw(self.0).to_ss58check_with_version(Ss58AddressFormat::custom(0)); diff --git a/packages/kos-sdk/src/chains/polkadot/mod.rs b/packages/kos-sdk/src/chains/polkadot/mod.rs index b4d1f91..362919c 100644 --- a/packages/kos-sdk/src/chains/polkadot/mod.rs +++ b/packages/kos-sdk/src/chains/polkadot/mod.rs @@ -156,7 +156,8 @@ impl DOT { addr: &str, _option: Option, ) -> Result { - Ok(true) + let address = address::Address::from_str(addr); + Ok(address.is_ok()) } } @@ -180,5 +181,12 @@ mod tests { assert_eq!(path, "//0"); } + #[test] + fn test_validate_address() { + let address = "13KVd4f2a4S5pLp4gTTFezyXdPWx27vQ9vS6xBXJ9yWVd7xo"; + let valid = super::DOT::validate_address(address, None).unwrap(); + assert_eq!(valid, true); + } + } From 57e8ea5497ce5e432c25769dc300f3ff60dbd1db Mon Sep 17 00:00:00 2001 From: Pedro Camboim Date: Wed, 4 Sep 2024 10:09:58 -0300 Subject: [PATCH 09/25] feat: sign & verify digest --- Cargo.lock | 1 + packages/kos-crypto/src/sr25519.rs | 33 +++++----- packages/kos-sdk/Cargo.toml | 1 + packages/kos-sdk/src/chain.rs | 2 +- packages/kos-sdk/src/chains/mod.rs | 3 +- packages/kos-sdk/src/chains/polkadot/mod.rs | 67 ++++++++++++++++++--- 6 files changed, 79 insertions(+), 28 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d8e971b..234d645 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2758,6 +2758,7 @@ dependencies = [ "kos-types", "kos-utils", "log", + "parity-scale-codec", "pbjson", "pbjson-types", "pem", diff --git a/packages/kos-crypto/src/sr25519.rs b/packages/kos-crypto/src/sr25519.rs index 29a4cbf..091a101 100644 --- a/packages/kos-crypto/src/sr25519.rs +++ b/packages/kos-crypto/src/sr25519.rs @@ -1,15 +1,15 @@ -use std::str::FromStr; use coins_bip32::path::DerivationPath; -use kos_types::{error::Error, Bytes32}; use coins_bip39::{English, Mnemonic}; +use kos_types::{error::Error, Bytes32}; use serde::{Deserialize, Deserializer, Serialize, Serializer}; +use sp_core::crypto::VrfPublic; use sp_core::{ed25519, sr25519, Pair}; +use std::str::FromStr; use wasm_bindgen::prelude::wasm_bindgen; - #[wasm_bindgen] pub struct Sr25519KeyPair { - keypair: sr25519::Pair + keypair: sr25519::Pair, } impl Serialize for Sr25519KeyPair { @@ -24,9 +24,9 @@ impl Serialize for Sr25519KeyPair { impl<'de> Deserialize<'de> for Sr25519KeyPair { fn deserialize(deserializer: D) -> Result where - D: Deserializer<'de> + D: Deserializer<'de>, { - todo!() + todo!() } } @@ -38,7 +38,6 @@ impl Clone for Sr25519KeyPair { } } - impl Sr25519KeyPair { pub fn random(rng: &mut R) -> Self where @@ -52,9 +51,7 @@ impl Sr25519KeyPair { pub fn new(secret: [u8; 32]) -> Self { let keypair = sr25519::Pair::from_seed_slice(&secret).unwrap(); - Self { - keypair - } + Self { keypair } } pub fn new_from_mnemonic_phrase_with_path( @@ -68,7 +65,7 @@ impl Sr25519KeyPair { pub fn new_from_mnemonic( path: &str, - m: Mnemonic::, + m: Mnemonic, password: Option<&str>, ) -> Result { // Convert mnemonic to seed @@ -79,9 +76,7 @@ impl Sr25519KeyPair { // Derive keypair based on the provided path and seed let keypair = sr25519::Pair::from_string(&seed, password).unwrap(); - Ok(Self { - keypair, - }) + Ok(Self { keypair }) } } @@ -93,11 +88,15 @@ impl Sr25519KeyPair { impl Sr25519KeyPair { pub fn sign_digest(&self, message: &[u8]) -> Vec { - todo!() + self.keypair.sign(message).0.to_vec() } pub fn verify_digest(&self, message: &[u8], signature: &[u8], public_key: &[u8]) -> bool { - todo!() + let public = sp_core::sr25519::Public::from_raw(<[u8; 32]>::try_from(public_key).unwrap()); + + let signature = + sp_core::sr25519::Signature::from_raw(<[u8; 64]>::try_from(signature).unwrap()); + + sr25519::Pair::verify(&signature, message, &public) } } - diff --git a/packages/kos-sdk/Cargo.toml b/packages/kos-sdk/Cargo.toml index 5a6c7d4..28b6026 100644 --- a/packages/kos-sdk/Cargo.toml +++ b/packages/kos-sdk/Cargo.toml @@ -58,6 +58,7 @@ subxt = "0.37.0" subxt-signer = "0.37.0" base64 = "0.22.1" subxt-core = "0.0.1" +parity-scale-codec = "3.6.12" [dev-dependencies] sp-core = "34.0.0" diff --git a/packages/kos-sdk/src/chain.rs b/packages/kos-sdk/src/chain.rs index bb281a1..ea03263 100644 --- a/packages/kos-sdk/src/chain.rs +++ b/packages/kos-sdk/src/chain.rs @@ -135,7 +135,7 @@ macro_rules! createChains { } } -createChains!(NONE, KLV, TRX, BTC, ETH, MATIC); +createChains!(NONE, KLV, TRX, BTC, ETH, MATIC, DOT); // pub enum Chain { // NONE, // 0 diff --git a/packages/kos-sdk/src/chains/mod.rs b/packages/kos-sdk/src/chains/mod.rs index fd13bd1..4f52df6 100644 --- a/packages/kos-sdk/src/chains/mod.rs +++ b/packages/kos-sdk/src/chains/mod.rs @@ -3,14 +3,15 @@ mod default; mod ethereum; mod evm20; mod klever; +mod polkadot; mod polygon; mod tron; -mod polkadot; pub use self::bitcoin::BTC; pub use default::NONE; pub use ethereum::ETH; pub use klever::KLV; +pub use polkadot::DOT; pub use polygon::MATIC; pub use tron::TRX; diff --git a/packages/kos-sdk/src/chains/polkadot/mod.rs b/packages/kos-sdk/src/chains/polkadot/mod.rs index 362919c..3bccdd1 100644 --- a/packages/kos-sdk/src/chains/polkadot/mod.rs +++ b/packages/kos-sdk/src/chains/polkadot/mod.rs @@ -1,18 +1,22 @@ mod address; +mod transaction; -use std::str::FromStr; - +use crate::models::BroadcastResult; use crate::{ chain::{self, BaseChain}, + models, models::{PathOptions, Transaction, TransactionRaw}, }; -use kos_crypto::{keypair::KeyPair}; +use kos_crypto::keypair::KeyPair; +use kos_crypto::secp256k1::Secp256k1KeyPair; +use kos_crypto::sr25519::Sr25519KeyPair; use kos_types::error::Error; use kos_types::hash::Hash; use kos_types::number::BigNumber; - +use sp_core::crypto::Ss58Codec; +use sp_core::{sr25519, Pair}; +use std::str::FromStr; use wasm_bindgen::prelude::*; -use kos_crypto::sr25519::Sr25519KeyPair; #[derive(Debug, Copy, Clone)] #[wasm_bindgen] @@ -33,6 +37,11 @@ impl DOT { BASE_CHAIN } + pub fn random() -> Result { + let mut rng = rand::thread_rng(); + let kp = Sr25519KeyPair::random(&mut rng); + Ok(KeyPair::new_sr25519(kp)) + } #[wasm_bindgen(js_name = "keypairFromBytes")] pub fn keypair_from_bytes(private_key: &[u8]) -> Result { @@ -86,7 +95,29 @@ impl DOT { #[wasm_bindgen(js_name = "verifyDigest")] /// Verify Message signature - pub fn verify_digest(_digest: &[u8], _signature: &[u8], _address: &str) -> Result { + pub fn verify_digest(digest: &[u8], signature: &[u8], _address: &str) -> Result { + let public = sr25519::Public::from_ss58check(_address).unwrap(); + + let signature = + sp_core::sr25519::Signature::from_raw(<[u8; 64]>::try_from(signature).unwrap()); + + Ok(sr25519::Pair::verify(&signature, digest, &public)) + } + + pub async fn send( + sender: String, + receiver: String, + amount: BigNumber, + options: Option, + node_url: Option, + ) -> Result { + todo!() + } + + pub async fn broadcast( + tx: crate::models::Transaction, + node_url: Option, + ) -> Result { todo!() } @@ -168,7 +199,11 @@ mod tests { #[test] fn test_keypair_from_mnemonic() { let mnemonic = "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about"; - let path = super::DOT::get_path(&super::PathOptions { index: 0, is_legacy: None }).unwrap(); + let path = super::DOT::get_path(&super::PathOptions { + index: 0, + is_legacy: None, + }) + .unwrap(); let kp = super::DOT::keypair_from_mnemonic(mnemonic, &path, None).unwrap(); let address = super::DOT::get_address_from_keypair(&kp).unwrap(); assert_eq!(address, "13KVd4f2a4S5pLp4gTTFezyXdPWx27vQ9vS6xBXJ9yWVd7xo"); @@ -176,7 +211,11 @@ mod tests { #[test] fn test_get_path() { - let path = super::DOT::get_path(&super::PathOptions { index: 1, is_legacy: None }).unwrap(); + let path = super::DOT::get_path(&super::PathOptions { + index: 1, + is_legacy: None, + }) + .unwrap(); assert_eq!(path, "//0"); } @@ -188,5 +227,15 @@ mod tests { assert_eq!(valid, true); } -} + #[test] + fn test_sign_digest() { + let kp = super::DOT::keypair_from_bytes(&[0u8; 32]).unwrap(); + let digest = vec![0u8; 32]; + let signature = super::DOT::sign_digest(&digest, &kp).unwrap(); + assert_eq!(signature.len(), 64); + let address = super::DOT::get_address_from_keypair(&kp).unwrap(); + let valid = super::DOT::verify_digest(&digest, &signature, &address).unwrap(); + assert_eq!(valid, true); + } +} From 022effafbeb021176c1149d429914839343a74de Mon Sep 17 00:00:00 2001 From: Pedro Camboim Date: Wed, 4 Sep 2024 12:58:25 -0300 Subject: [PATCH 10/25] chore: adjust dependencies --- Cargo.lock | 1921 +---------------- packages/kos-sdk/Cargo.toml | 7 +- .../kos-sdk/src/chains/polkadot/address.rs | 12 +- packages/kos-sdk/src/chains/polkadot/mod.rs | 4 +- 4 files changed, 51 insertions(+), 1893 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 234d645..bd0b18d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -69,7 +69,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" dependencies = [ "cfg-if", - "getrandom", "once_cell", "version_check", "zerocopy", @@ -261,136 +260,12 @@ version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545" -[[package]] -name = "arrayvec" -version = "0.4.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd9fd44efafa8690358b7408d253adf110036b88f55672a933f01d616ad9b1b9" -dependencies = [ - "nodrop", -] - [[package]] name = "arrayvec" version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" -[[package]] -name = "async-channel" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a" -dependencies = [ - "concurrent-queue", - "event-listener-strategy", - "futures-core", - "pin-project-lite", -] - -[[package]] -name = "async-executor" -version = "1.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8828ec6e544c02b0d6691d21ed9f9218d0384a82542855073c2a3f58304aaf0" -dependencies = [ - "async-task", - "concurrent-queue", - "fastrand", - "futures-lite", - "slab", -] - -[[package]] -name = "async-fs" -version = "2.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebcd09b382f40fcd159c2d695175b2ae620ffa5f3bd6f664131efff4e8b9e04a" -dependencies = [ - "async-lock", - "blocking", - "futures-lite", -] - -[[package]] -name = "async-io" -version = "2.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d6baa8f0178795da0e71bc42c9e5d13261aac7ee549853162e66a241ba17964" -dependencies = [ - "async-lock", - "cfg-if", - "concurrent-queue", - "futures-io", - "futures-lite", - "parking", - "polling", - "rustix", - "slab", - "tracing", - "windows-sys 0.52.0", -] - -[[package]] -name = "async-lock" -version = "3.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" -dependencies = [ - "event-listener 5.3.1", - "event-listener-strategy", - "pin-project-lite", -] - -[[package]] -name = "async-net" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b948000fad4873c1c9339d60f2623323a0cfd3816e5181033c6a5cb68b2accf7" -dependencies = [ - "async-io", - "blocking", - "futures-lite", -] - -[[package]] -name = "async-process" -version = "2.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7eda79bbd84e29c2b308d1dc099d7de8dcc7035e48f4bf5dc4a531a44ff5e2a" -dependencies = [ - "async-channel", - "async-io", - "async-lock", - "async-signal", - "async-task", - "blocking", - "cfg-if", - "event-listener 5.3.1", - "futures-lite", - "rustix", - "tracing", - "windows-sys 0.52.0", -] - -[[package]] -name = "async-signal" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "794f185324c2f00e771cd9f1ae8b5ac68be2ca7abb129a87afd6e86d228bc54d" -dependencies = [ - "async-io", - "async-lock", - "atomic-waker", - "cfg-if", - "futures-core", - "futures-io", - "rustix", - "signal-hook-registry", - "slab", - "windows-sys 0.52.0", -] - [[package]] name = "async-stream" version = "0.3.5" @@ -413,23 +288,6 @@ dependencies = [ "syn 2.0.66", ] -[[package]] -name = "async-task" -version = "4.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" - -[[package]] -name = "async-trait" -version = "0.1.80" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6fa2087f2753a7da8cc1c0dbfcf89579dd57458e36769de5ac750b4671737ca" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.66", -] - [[package]] name = "atomic-polyfill" version = "1.0.3" @@ -439,18 +297,6 @@ dependencies = [ "critical-section", ] -[[package]] -name = "atomic-take" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8ab6b55fe97976e46f91ddbed8d147d966475dc29b2032757ba47e02376fbc3" - -[[package]] -name = "atomic-waker" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" - [[package]] name = "autocfg" version = "1.3.0" @@ -514,15 +360,6 @@ version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d86b93f97252c47b41663388e6d155714a9d0c398b99f1005cbc5f978b29f445" -[[package]] -name = "beef" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a8241f3ebb85c056b509d4327ad0358fbbba6ffb340bf388f26350aeda225b1" -dependencies = [ - "serde", -] - [[package]] name = "bip39" version = "2.0.0" @@ -603,16 +440,6 @@ dependencies = [ "digest 0.10.7", ] -[[package]] -name = "blake2-rfc" -version = "0.2.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d6d530bdd2d52966a6d03b7a964add7ae1a288d25214066fd4b600f0f796400" -dependencies = [ - "arrayvec 0.4.12", - "constant_time_eq 0.1.5", -] - [[package]] name = "blake2b_simd" version = "1.0.2" @@ -620,8 +447,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "23285ad32269793932e830392f2fe2f83e26488fd3ec778883a93c8323735780" dependencies = [ "arrayref", - "arrayvec 0.7.4", - "constant_time_eq 0.3.0", + "arrayvec", + "constant_time_eq", ] [[package]] @@ -651,19 +478,6 @@ dependencies = [ "generic-array", ] -[[package]] -name = "blocking" -version = "1.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea" -dependencies = [ - "async-channel", - "async-task", - "futures-io", - "futures-lite", - "piper", -] - [[package]] name = "bounded-collections" version = "0.2.0" @@ -731,12 +545,6 @@ version = "1.0.98" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "41c270e7540d725e65ac7f1b212ac8ce349719624d7bcff99f8e2e488e8cf03f" -[[package]] -name = "cesu8" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" - [[package]] name = "cfb-mode" version = "0.8.2" @@ -752,23 +560,6 @@ 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 = "chacha20" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3613f74bd2eac03dad61bd53dbe620703d4371614fe0bc3b9f04dd36fe4e818" -dependencies = [ - "cfg-if", - "cipher", - "cpufeatures", -] - [[package]] name = "chrono" version = "0.4.38" @@ -807,7 +598,7 @@ dependencies = [ "bs58", "coins-core", "digest 0.10.7", - "hmac 0.12.1", + "hmac", "k256", "serde", "sha2 0.10.8", @@ -822,7 +613,7 @@ checksum = "3db8fba409ce3dc04f7d804074039eb68b960b0829161f8e06c95fea3f122528" dependencies = [ "bitvec", "coins-bip32", - "hmac 0.12.1", + "hmac", "once_cell", "pbkdf2", "rand", @@ -856,31 +647,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" -[[package]] -name = "combine" -version = "4.6.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" -dependencies = [ - "bytes", - "memchr", -] - -[[package]] -name = "common-path" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2382f75942f4b3be3690fe4f86365e9c853c1587d6ee58212cebf6e2a9ccd101" - -[[package]] -name = "concurrent-queue" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" -dependencies = [ - "crossbeam-utils", -] - [[package]] name = "console_error_panic_hook" version = "0.1.7" @@ -897,12 +663,6 @@ version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" -[[package]] -name = "constant_time_eq" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" - [[package]] name = "constant_time_eq" version = "0.3.0" @@ -961,21 +721,6 @@ version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7059fff8937831a9ae6f0fe4d658ffabf58f2ca96aa9dec1c889f936f705f216" -[[package]] -name = "crossbeam-queue" -version = "0.3.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df0346b5d5e76ac2fe4e327c5fd1118d6be7c51dfb18f9b7922923f287471e35" -dependencies = [ - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-utils" -version = "0.8.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" - [[package]] name = "crunchy" version = "0.2.2" @@ -1005,16 +750,6 @@ 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 = "ctr" version = "0.9.2" @@ -1064,76 +799,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "darling" -version = "0.14.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b750cb3417fd1b327431a470f388520309479ab0bf5e323505daf0290cd3850" -dependencies = [ - "darling_core 0.14.4", - "darling_macro 0.14.4", -] - -[[package]] -name = "darling" -version = "0.20.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83b2eb4d90d12bdda5ed17de686c2acb4c57914f8f921b8da7e112b5a36f3fe1" -dependencies = [ - "darling_core 0.20.9", - "darling_macro 0.20.9", -] - -[[package]] -name = "darling_core" -version = "0.14.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim 0.10.0", - "syn 1.0.109", -] - -[[package]] -name = "darling_core" -version = "0.20.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "622687fe0bac72a04e5599029151f5796111b90f1baaa9b544d807a5e31cd120" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim 0.11.1", - "syn 2.0.66", -] - -[[package]] -name = "darling_macro" -version = "0.14.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e" -dependencies = [ - "darling_core 0.14.4", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "darling_macro" -version = "0.20.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "733cabb43482b1a1b53eee8583c2b9e8684d592215ea83efd305dd31bc2f0178" -dependencies = [ - "darling_core 0.20.9", - "quote", - "syn 2.0.66", -] - [[package]] name = "der" version = "0.7.9" @@ -1155,28 +820,6 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "derive-syn-parse" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d65d7ce8132b7c0e54497a4d9a55a1c2a0912a0d786cf894472ba818fba45762" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.66", -] - -[[package]] -name = "derive-where" -version = "1.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62d671cc41a825ebabc75757b62d3d168c577f9149b2d49ece1dad1f72119d25" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.66", -] - [[package]] name = "derive_more" version = "0.99.17" @@ -1211,33 +854,6 @@ dependencies = [ "subtle", ] -[[package]] -name = "docify" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a2f138ad521dc4a2ced1a4576148a6a610b4c5923933b062a263130a6802ce" -dependencies = [ - "docify_macros", -] - -[[package]] -name = "docify_macros" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a081e51fb188742f5a7a1164ad752121abcb22874b21e2c3b0dd040c515fdad" -dependencies = [ - "common-path", - "derive-syn-parse", - "once_cell", - "proc-macro2", - "quote", - "regex", - "syn 2.0.66", - "termcolor", - "toml", - "walkdir", -] - [[package]] name = "dotenv-build" version = "0.1.1" @@ -1250,12 +866,6 @@ version = "0.15.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" -[[package]] -name = "downcast-rs" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" - [[package]] name = "dyn-clonable" version = "0.9.0" @@ -1492,41 +1102,10 @@ dependencies = [ ] [[package]] -name = "event-listener" -version = "4.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67b215c49b2b248c855fb73579eb1f4f26c38ffdc12973e20e07b91d78d5646e" -dependencies = [ - "concurrent-queue", - "pin-project-lite", -] - -[[package]] -name = "event-listener" -version = "5.3.1" +name = "expander" +version = "2.2.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 = "expander" -version = "2.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2c470c71d91ecbd179935b24170459e926382eaaa86b590b78814e180d8a8e2" +checksum = "e2c470c71d91ecbd179935b24170459e926382eaaa86b590b78814e180d8a8e2" dependencies = [ "blake2", "file-guard", @@ -1578,16 +1157,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "finito" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2384245d85162258a14b43567a9ee3598f5ae746a1581fb5d3d2cb780f0dbf95" -dependencies = [ - "futures-timer", - "pin-project", -] - [[package]] name = "fixed-hash" version = "0.8.0" @@ -1646,29 +1215,6 @@ dependencies = [ "percent-encoding", ] -[[package]] -name = "frame-metadata" -version = "15.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "878babb0b136e731cc77ec2fd883ff02745ff21e6fb662729953d44923df009c" -dependencies = [ - "cfg-if", - "parity-scale-codec", - "scale-info", -] - -[[package]] -name = "frame-metadata" -version = "16.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cf1549fba25a6fcac22785b61698317d958e96cac72a59102ea45b9ae64692" -dependencies = [ - "cfg-if", - "parity-scale-codec", - "scale-info", - "serde", -] - [[package]] name = "fs-err" version = "2.11.0" @@ -1733,19 +1279,6 @@ version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" -[[package]] -name = "futures-lite" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52527eb5074e35e9339c6b4e8d12600c7128b68fb25dcb9fa9dec18f7c25f3a5" -dependencies = [ - "fastrand", - "futures-core", - "futures-io", - "parking", - "pin-project-lite", -] - [[package]] name = "futures-macro" version = "0.3.30" @@ -1936,7 +1469,6 @@ checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" dependencies = [ "ahash", "allocator-api2", - "serde", ] [[package]] @@ -1995,12 +1527,6 @@ version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" -[[package]] -name = "hermit-abi" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc" - [[package]] name = "hex" version = "0.4.3" @@ -2013,16 +1539,6 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3011d1213f159867b13cfd6ac92d2cd5f1345762c63be3554e84092d85a50bbd" -[[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]] name = "hmac" version = "0.12.1" @@ -2032,17 +1548,6 @@ 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.9" @@ -2172,22 +1677,6 @@ dependencies = [ "want", ] -[[package]] -name = "hyper-rustls" -version = "0.24.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" -dependencies = [ - "futures-util", - "http 0.2.12", - "hyper 0.14.29", - "log", - "rustls 0.21.12", - "rustls-native-certs 0.6.3", - "tokio", - "tokio-rustls 0.24.1", -] - [[package]] name = "hyper-rustls" version = "0.26.0" @@ -2198,10 +1687,10 @@ dependencies = [ "http 1.1.0", "hyper 1.3.1", "hyper-util", - "rustls 0.22.4", + "rustls", "rustls-pki-types", "tokio", - "tokio-rustls 0.25.0", + "tokio-rustls", "tower-service", ] @@ -2261,12 +1750,6 @@ 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.4.0" @@ -2348,12 +1831,6 @@ dependencies = [ "hashbrown 0.14.5", ] -[[package]] -name = "indexmap-nostd" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e04e2fd2b8188ea827b32ef11de88377086d690286ab35747ef7f9bf3ccb590" - [[package]] name = "inout" version = "0.1.3" @@ -2364,24 +1841,6 @@ dependencies = [ "generic-array", ] -[[package]] -name = "instant" -version = "0.1.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "integer-sqrt" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "276ec31bcb4a9ee45f58bec6f9ec700ae4cf4f4f8f2fa7e06cb406bd5ffdd770" -dependencies = [ - "num-traits", -] - [[package]] name = "inventory" version = "0.3.15" @@ -2427,26 +1886,6 @@ version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" -[[package]] -name = "jni" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6df18c2e3db7e453d3c6ac5b3e9d5182664d28788126d39b91f2d1e22b017ec" -dependencies = [ - "cesu8", - "combine", - "jni-sys", - "log", - "thiserror", - "walkdir", -] - -[[package]] -name = "jni-sys" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" - [[package]] name = "js-sys" version = "0.3.69" @@ -2471,177 +1910,6 @@ dependencies = [ "serde_json", ] -[[package]] -name = "jsonrpsee" -version = "0.22.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfdb12a2381ea5b2e68c3469ec604a007b367778cdb14d09612c8069ebd616ad" -dependencies = [ - "jsonrpsee-client-transport 0.22.5", - "jsonrpsee-core 0.22.5", - "jsonrpsee-http-client", - "jsonrpsee-types 0.22.5", -] - -[[package]] -name = "jsonrpsee" -version = "0.23.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b089779ad7f80768693755a031cc14a7766aba707cbe886674e3f79e9b7e47" -dependencies = [ - "jsonrpsee-core 0.23.2", - "jsonrpsee-types 0.23.2", - "jsonrpsee-ws-client", -] - -[[package]] -name = "jsonrpsee-client-transport" -version = "0.22.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4978087a58c3ab02efc5b07c5e5e2803024536106fd5506f558db172c889b3aa" -dependencies = [ - "futures-util", - "http 0.2.12", - "jsonrpsee-core 0.22.5", - "pin-project", - "rustls-native-certs 0.7.0", - "rustls-pki-types", - "soketto 0.7.1", - "thiserror", - "tokio", - "tokio-rustls 0.25.0", - "tokio-util", - "tracing", - "url", -] - -[[package]] -name = "jsonrpsee-client-transport" -version = "0.23.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08163edd8bcc466c33d79e10f695cdc98c00d1e6ddfb95cec41b6b0279dd5432" -dependencies = [ - "base64 0.22.1", - "futures-util", - "http 1.1.0", - "jsonrpsee-core 0.23.2", - "pin-project", - "rustls 0.23.10", - "rustls-pki-types", - "rustls-platform-verifier", - "soketto 0.8.0", - "thiserror", - "tokio", - "tokio-rustls 0.26.0", - "tokio-util", - "tracing", - "url", -] - -[[package]] -name = "jsonrpsee-core" -version = "0.22.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4b257e1ec385e07b0255dde0b933f948b5c8b8c28d42afda9587c3a967b896d" -dependencies = [ - "anyhow", - "async-trait", - "beef", - "futures-timer", - "futures-util", - "hyper 0.14.29", - "jsonrpsee-types 0.22.5", - "pin-project", - "rustc-hash", - "serde", - "serde_json", - "thiserror", - "tokio", - "tokio-stream", - "tracing", -] - -[[package]] -name = "jsonrpsee-core" -version = "0.23.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79712302e737d23ca0daa178e752c9334846b08321d439fd89af9a384f8c830b" -dependencies = [ - "anyhow", - "async-trait", - "beef", - "futures-timer", - "futures-util", - "jsonrpsee-types 0.23.2", - "pin-project", - "rustc-hash", - "serde", - "serde_json", - "thiserror", - "tokio", - "tokio-stream", - "tracing", -] - -[[package]] -name = "jsonrpsee-http-client" -version = "0.22.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ccf93fc4a0bfe05d851d37d7c32b7f370fe94336b52a2f0efc5f1981895c2e5" -dependencies = [ - "async-trait", - "hyper 0.14.29", - "hyper-rustls 0.24.2", - "jsonrpsee-core 0.22.5", - "jsonrpsee-types 0.22.5", - "serde", - "serde_json", - "thiserror", - "tokio", - "tower", - "tracing", - "url", -] - -[[package]] -name = "jsonrpsee-types" -version = "0.22.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "150d6168405890a7a3231a3c74843f58b8959471f6df76078db2619ddee1d07d" -dependencies = [ - "anyhow", - "beef", - "serde", - "serde_json", - "thiserror", -] - -[[package]] -name = "jsonrpsee-types" -version = "0.23.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9c465fbe385238e861fdc4d1c85e04ada6c1fd246161d26385c1b311724d2af" -dependencies = [ - "beef", - "http 1.1.0", - "serde", - "serde_json", - "thiserror", -] - -[[package]] -name = "jsonrpsee-ws-client" -version = "0.23.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c28759775f5cb2f1ea9667672d3fe2b0e701d1f4b7b67954e60afe7fd058b5e" -dependencies = [ - "http 1.1.0", - "jsonrpsee-client-transport 0.23.2", - "jsonrpsee-core 0.23.2", - "jsonrpsee-types 0.23.2", - "url", -] - [[package]] name = "k256" version = "0.13.3" @@ -2698,7 +1966,7 @@ dependencies = [ "coins-bip39", "ed25519-dalek", "hex", - "hmac 0.12.1", + "hmac", "kos-types", "log", "pbkdf2", @@ -2710,7 +1978,7 @@ dependencies = [ "sha2 0.10.8", "sha3", "sp-core", - "subxt-signer 0.30.1", + "subxt-signer", "wasm-bindgen", "zeroize", ] @@ -2752,13 +2020,12 @@ dependencies = [ "enum_delegate", "enum_dispatch", "hex", - "hmac 0.12.1", + "hmac", "kos-crypto", "kos-proto", "kos-types", "kos-utils", "log", - "parity-scale-codec", "pbjson", "pbjson-types", "pem", @@ -2771,11 +2038,7 @@ dependencies = [ "serde-wasm-bindgen", "serde_json", "sp-core", - "sp-runtime", "strum", - "subxt", - "subxt-core 0.0.1", - "subxt-signer 0.37.0", "tokio", "tokio-test", "wasm-bindgen", @@ -2826,12 +2089,6 @@ version = "0.2.155" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" -[[package]] -name = "libm" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" - [[package]] name = "libsecp256k1" version = "0.7.1" @@ -2841,14 +2098,12 @@ dependencies = [ "arrayref", "base64 0.13.1", "digest 0.9.0", - "hmac-drbg", "libsecp256k1-core", "libsecp256k1-gen-ecmult", "libsecp256k1-gen-genmult", "rand", "serde", "sha2 0.9.9", - "typenum", ] [[package]] @@ -2902,15 +2157,6 @@ version = "0.4.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" -[[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 = "matchers" version = "0.0.1" @@ -2926,15 +2172,6 @@ version = "2.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" -[[package]] -name = "memory-db" -version = "0.32.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "808b50db46293432a45e63bc15ea51e0ab4c0a1647b8eb114e31a3e698dd6fbe" -dependencies = [ - "hash-db", -] - [[package]] name = "merlin" version = "3.0.0" @@ -2953,12 +2190,6 @@ version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" -[[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.3" @@ -3010,42 +2241,14 @@ dependencies = [ ] [[package]] -name = "no-std-net" -version = "0.6.0" +name = "num-bigint" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43794a0ace135be66a25d3ae77d41b91615fb68ae937f904090203e81f755b65" - -[[package]] -name = "nodrop" -version = "0.1.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" - -[[package]] -name = "nohash-hasher" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" - -[[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 = "num-bigint" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c165a9ab64cf766f73521c0dd2cfdff64f488b8f0b3e621face3462d3db536d7" -dependencies = [ - "num-integer", - "num-traits", -] +checksum = "c165a9ab64cf766f73521c0dd2cfdff64f488b8f0b3e621face3462d3db536d7" +dependencies = [ + "num-integer", + "num-traits", +] [[package]] name = "num-format" @@ -3053,7 +2256,7 @@ version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a652d9771a63711fd3c3deb670acfbe5c30a4072e664d7a3bf5a9e1056ac72c3" dependencies = [ - "arrayvec 0.7.4", + "arrayvec", "itoa", ] @@ -3066,17 +2269,6 @@ dependencies = [ "num-traits", ] -[[package]] -name = "num-rational" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" -dependencies = [ - "num-bigint", - "num-integer", - "num-traits", -] - [[package]] name = "num-traits" version = "0.2.19" @@ -3092,7 +2284,7 @@ version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" dependencies = [ - "hermit-abi 0.3.9", + "hermit-abi", "libc", ] @@ -3180,7 +2372,7 @@ version = "3.6.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "306800abfa29c7f16596b5970a588435e3d5b3149683d00c12b699cc19f895ee" dependencies = [ - "arrayvec 0.7.4", + "arrayvec", "bitvec", "byte-slice-cast", "bytes", @@ -3195,18 +2387,12 @@ version = "3.6.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d830939c76d294956402033aee57a6da7b438f2294eb94864c37b0569053a42c" dependencies = [ - "proc-macro-crate 3.1.0", + "proc-macro-crate", "proc-macro2", "quote", "syn 1.0.109", ] -[[package]] -name = "parking" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae" - [[package]] name = "parking_lot" version = "0.12.3" @@ -3289,7 +2475,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" dependencies = [ "digest 0.10.7", - "hmac 0.12.1", + "hmac", "password-hash", "sha2 0.10.8", ] @@ -3352,17 +2538,6 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" -[[package]] -name = "piper" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae1d5c74c9876f070d3e8fd503d748c7d974c3e48da8f41350fa5222ef9b4391" -dependencies = [ - "atomic-waker", - "fastrand", - "futures-io", -] - [[package]] name = "pkcs8" version = "0.10.2" @@ -3429,32 +2604,6 @@ dependencies = [ "syn 2.0.66", ] -[[package]] -name = "polling" -version = "3.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3ed00ed3fbf728b5816498ecd316d1716eecaced9c0c8d2c5a6740ca214985b" -dependencies = [ - "cfg-if", - "concurrent-queue", - "hermit-abi 0.4.0", - "pin-project-lite", - "rustix", - "tracing", - "windows-sys 0.52.0", -] - -[[package]] -name = "poly1305" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8159bd90725d2df49889a078b54f4f79e87f1f8a8444194cdca81d38f5393abf" -dependencies = [ - "cpufeatures", - "opaque-debug", - "universal-hash", -] - [[package]] name = "polyval" version = "0.6.2" @@ -3519,47 +2668,13 @@ dependencies = [ "uint", ] -[[package]] -name = "proc-macro-crate" -version = "1.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" -dependencies = [ - "once_cell", - "toml_edit 0.19.15", -] - [[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" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" -dependencies = [ - "proc-macro-error-attr", - "proc-macro2", - "quote", - "syn 1.0.109", - "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", + "toml_edit", ] [[package]] @@ -3786,22 +2901,6 @@ dependencies = [ "getrandom", ] -[[package]] -name = "reconnecting-jsonrpsee-ws-client" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06fa4f17e09edfc3131636082faaec633c7baa269396b4004040bc6c52f49f65" -dependencies = [ - "cfg_aliases", - "finito", - "futures", - "jsonrpsee 0.23.2", - "serde_json", - "thiserror", - "tokio", - "tracing", -] - [[package]] name = "redox_syscall" version = "0.5.1" @@ -3930,7 +3029,7 @@ dependencies = [ "http-body 1.0.0", "http-body-util", "hyper 1.3.1", - "hyper-rustls 0.26.0", + "hyper-rustls", "hyper-util", "ipnet", "js-sys", @@ -3939,7 +3038,7 @@ dependencies = [ "once_cell", "percent-encoding", "pin-project-lite", - "rustls 0.22.4", + "rustls", "rustls-pemfile 2.1.2", "rustls-pki-types", "serde", @@ -3947,7 +3046,7 @@ dependencies = [ "serde_urlencoded", "sync_wrapper", "tokio", - "tokio-rustls 0.25.0", + "tokio-rustls", "tower-service", "url", "wasm-bindgen", @@ -3963,7 +3062,7 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" dependencies = [ - "hmac 0.12.1", + "hmac", "subtle", ] @@ -4007,12 +3106,6 @@ version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" -[[package]] -name = "rustc-hash" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" - [[package]] name = "rustc-hex" version = "2.1.0" @@ -4041,18 +3134,6 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "rustls" -version = "0.21.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" -dependencies = [ - "log", - "ring", - "rustls-webpki 0.101.7", - "sct", -] - [[package]] name = "rustls" version = "0.22.4" @@ -4062,51 +3143,11 @@ dependencies = [ "log", "ring", "rustls-pki-types", - "rustls-webpki 0.102.4", + "rustls-webpki", "subtle", "zeroize", ] -[[package]] -name = "rustls" -version = "0.23.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05cff451f60db80f490f3c182b77c35260baace73209e9cdbbe526bfe3a4d402" -dependencies = [ - "log", - "once_cell", - "ring", - "rustls-pki-types", - "rustls-webpki 0.102.4", - "subtle", - "zeroize", -] - -[[package]] -name = "rustls-native-certs" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9aace74cb666635c918e9c12bc0d348266037aa8eb599b5cba565709a8dff00" -dependencies = [ - "openssl-probe", - "rustls-pemfile 1.0.4", - "schannel", - "security-framework", -] - -[[package]] -name = "rustls-native-certs" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f1fb85efa936c42c6d5fc28d2629bb51e4b2f4b8a5211e297d599cc5a093792" -dependencies = [ - "openssl-probe", - "rustls-pemfile 2.1.2", - "rustls-pki-types", - "schannel", - "security-framework", -] - [[package]] name = "rustls-pemfile" version = "1.0.4" @@ -4132,43 +3173,6 @@ version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "976295e77ce332211c0d24d92c0e83e50f5c5f046d11082cea19f3df13a3562d" -[[package]] -name = "rustls-platform-verifier" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e3beb939bcd33c269f4bf946cc829fcd336370267c4a927ac0399c84a3151a1" -dependencies = [ - "core-foundation", - "core-foundation-sys", - "jni", - "log", - "once_cell", - "rustls 0.23.10", - "rustls-native-certs 0.7.0", - "rustls-platform-verifier-android", - "rustls-webpki 0.102.4", - "security-framework", - "security-framework-sys", - "webpki-roots", - "winapi", -] - -[[package]] -name = "rustls-platform-verifier-android" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84e217e7fdc8466b5b35d30f8c0a30febd29173df4a3a0c2115d306b9c4117ad" - -[[package]] -name = "rustls-webpki" -version = "0.101.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" -dependencies = [ - "ring", - "untrusted", -] - [[package]] name = "rustls-webpki" version = "0.102.4" @@ -4186,99 +3190,12 @@ version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" -[[package]] -name = "ruzstd" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58c4eb8a81997cf040a091d1f7e1938aeab6749d3a0dfa73af43cdc32393483d" -dependencies = [ - "byteorder", - "derive_more", - "twox-hash", -] - [[package]] name = "ryu" version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" -[[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-bits" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e57b1e7f6b65ed1f04e79a85a57d755ad56d76fdf1e9bddcc9ae14f71fcdcf54" -dependencies = [ - "parity-scale-codec", - "scale-info", - "scale-type-resolver", - "serde", -] - -[[package]] -name = "scale-decode" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e98f3262c250d90e700bb802eb704e1f841e03331c2eb815e46516c4edbf5b27" -dependencies = [ - "derive_more", - "parity-scale-codec", - "primitive-types", - "scale-bits", - "scale-decode-derive", - "scale-type-resolver", - "smallvec", -] - -[[package]] -name = "scale-decode-derive" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bb22f574168103cdd3133b19281639ca65ad985e24612728f727339dcaf4021" -dependencies = [ - "darling 0.14.4", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "scale-encode" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ba0b9c48dc0eb20c60b083c29447c0c4617cb7c4a4c9fef72aa5c5bc539e15e" -dependencies = [ - "derive_more", - "parity-scale-codec", - "primitive-types", - "scale-bits", - "scale-encode-derive", - "scale-type-resolver", - "smallvec", -] - -[[package]] -name = "scale-encode-derive" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82ab7e60e2d9c8d47105f44527b26f04418e5e624ffc034f6b4a86c0ba19c5bf" -dependencies = [ - "darling 0.14.4", - "proc-macro-crate 1.3.1", - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "scale-info" version = "2.11.3" @@ -4299,56 +3216,12 @@ version = "2.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2d35494501194174bda522a32605929eefc9ecf7e0a326c26db1fdd85881eb62" dependencies = [ - "proc-macro-crate 3.1.0", + "proc-macro-crate", "proc-macro2", "quote", "syn 1.0.109", ] -[[package]] -name = "scale-type-resolver" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0cded6518aa0bd6c1be2b88ac81bf7044992f0f154bfbabd5ad34f43512abcb" -dependencies = [ - "scale-info", - "smallvec", -] - -[[package]] -name = "scale-typegen" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "498d1aecf2ea61325d4511787c115791639c0fd21ef4f8e11e49dd09eff2bbac" -dependencies = [ - "proc-macro2", - "quote", - "scale-info", - "syn 2.0.66", - "thiserror", -] - -[[package]] -name = "scale-value" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2cf9738c263c665144177201126bdad39d3d62512152f178f35002228026976" -dependencies = [ - "base58", - "blake2", - "derive_more", - "either", - "frame-metadata 15.1.0", - "parity-scale-codec", - "scale-bits", - "scale-decode", - "scale-encode", - "scale-info", - "scale-type-resolver", - "serde", - "yap", -] - [[package]] name = "schannel" version = "0.1.23" @@ -4358,17 +3231,6 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "schnellru" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9a8ef13a93c54d20580de1e5c413e624e53121d42fc7e2c11d10ef7f8b02367" -dependencies = [ - "ahash", - "cfg-if", - "hashbrown 0.13.2", -] - [[package]] name = "schnorrkel" version = "0.10.2" @@ -4376,7 +3238,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "844b7645371e6ecdf61ff246ba1958c29e802881a749ae3fb1993675d210d28d" dependencies = [ "arrayref", - "arrayvec 0.7.4", + "arrayvec", "curve25519-dalek-ng", "merlin", "rand_core", @@ -4394,7 +3256,7 @@ checksum = "8de18f6d8ba0aad7045f5feae07ec29899c1112584a38509a84ad7b04451eaa0" dependencies = [ "aead", "arrayref", - "arrayvec 0.7.4", + "arrayvec", "curve25519-dalek", "getrandom_or_panic", "merlin", @@ -4417,16 +3279,6 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" -[[package]] -name = "sct" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" -dependencies = [ - "ring", - "untrusted", -] - [[package]] name = "sec1" version = "0.7.3" @@ -4500,7 +3352,6 @@ dependencies = [ "core-foundation", "core-foundation-sys", "libc", - "num-bigint", "security-framework-sys", ] @@ -4577,15 +3428,6 @@ dependencies = [ "serde", ] -[[package]] -name = "serde_spanned" -version = "0.6.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79e674e01f999af37c49f70a6ede167a8a60b2503e56c5599532a65baa5969a0" -dependencies = [ - "serde", -] - [[package]] name = "serde_urlencoded" version = "0.7.1" @@ -4608,19 +3450,6 @@ dependencies = [ "serde", ] -[[package]] -name = "sha-1" -version = "0.9.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99cd6713db3cf16b6c84e06321e049a9b9f699826e16096d23bbcc44d15d51a6" -dependencies = [ - "block-buffer 0.9.0", - "cfg-if", - "cpufeatures", - "digest 0.9.0", - "opaque-debug", -] - [[package]] name = "sha1" version = "0.10.6" @@ -4700,18 +3529,6 @@ version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" -[[package]] -name = "simple-mermaid" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "620a1d43d70e142b1d46a929af51d44f383db9c7a2ec122de2cd992ccfcf3c18" - -[[package]] -name = "siphasher" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" - [[package]] name = "slab" version = "0.4.9" @@ -4727,114 +3544,6 @@ version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" -[[package]] -name = "smol" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e635339259e51ef85ac7aa29a1cd991b957047507288697a690e80ab97d07cad" -dependencies = [ - "async-channel", - "async-executor", - "async-fs", - "async-io", - "async-lock", - "async-net", - "async-process", - "blocking", - "futures-lite", -] - -[[package]] -name = "smoldot" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6d1eaa97d77be4d026a1e7ffad1bb3b78448763b357ea6f8188d3e6f736a9b9" -dependencies = [ - "arrayvec 0.7.4", - "async-lock", - "atomic-take", - "base64 0.21.7", - "bip39", - "blake2-rfc", - "bs58", - "chacha20", - "crossbeam-queue", - "derive_more", - "ed25519-zebra", - "either", - "event-listener 4.0.3", - "fnv", - "futures-lite", - "futures-util", - "hashbrown 0.14.5", - "hex", - "hmac 0.12.1", - "itertools 0.12.1", - "libm", - "libsecp256k1", - "merlin", - "no-std-net", - "nom", - "num-bigint", - "num-rational", - "num-traits", - "pbkdf2", - "pin-project", - "poly1305", - "rand", - "rand_chacha", - "ruzstd", - "schnorrkel 0.11.4", - "serde", - "serde_json", - "sha2 0.10.8", - "sha3", - "siphasher", - "slab", - "smallvec", - "soketto 0.7.1", - "twox-hash", - "wasmi", - "x25519-dalek", - "zeroize", -] - -[[package]] -name = "smoldot-light" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5496f2d116b7019a526b1039ec2247dd172b8670633b1a64a614c9ea12c9d8c7" -dependencies = [ - "async-channel", - "async-lock", - "base64 0.21.7", - "blake2-rfc", - "derive_more", - "either", - "event-listener 4.0.3", - "fnv", - "futures-channel", - "futures-lite", - "futures-util", - "hashbrown 0.14.5", - "hex", - "itertools 0.12.1", - "log", - "lru", - "no-std-net", - "parking_lot", - "pin-project", - "rand", - "rand_chacha", - "serde", - "serde_json", - "siphasher", - "slab", - "smol", - "smoldot", - "zeroize", -] - [[package]] name = "socket2" version = "0.5.7" @@ -4845,66 +3554,6 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "soketto" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d1c5305e39e09653383c2c7244f2f78b3bcae37cf50c64cb4789c9f5096ec2" -dependencies = [ - "base64 0.13.1", - "bytes", - "futures", - "httparse", - "log", - "rand", - "sha-1", -] - -[[package]] -name = "soketto" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37468c595637c10857701c990f93a40ce0e357cedb0953d1c26c8d8027f9bb53" -dependencies = [ - "base64 0.22.1", - "bytes", - "futures", - "httparse", - "log", - "rand", - "sha1", -] - -[[package]] -name = "sp-application-crypto" -version = "37.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d96d1fc0f1c741bbcbd0dd5470eff7b66f011708cc1942b088ebf0d4efb3d93" -dependencies = [ - "parity-scale-codec", - "scale-info", - "serde", - "sp-core", - "sp-io", - "sp-std 14.0.0", -] - -[[package]] -name = "sp-arithmetic" -version = "26.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46d0d0a4c591c421d3231ddd5e27d828618c24456d51445d21a1f79fcee97c23" -dependencies = [ - "docify", - "integer-sqrt", - "num-traits", - "parity-scale-codec", - "scale-info", - "serde", - "sp-std 14.0.0", - "static_assertions", -] - [[package]] name = "sp-core" version = "34.0.0" @@ -5003,82 +3652,6 @@ dependencies = [ "sp-storage", ] -[[package]] -name = "sp-io" -version = "37.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5036cad2e48d41f5caf6785226c8be1a7db15bec14a9fd7aa6cca84f34cf689f" -dependencies = [ - "bytes", - "ed25519-dalek", - "libsecp256k1", - "log", - "parity-scale-codec", - "polkavm-derive", - "rustversion", - "secp256k1 0.28.2", - "sp-core", - "sp-crypto-hashing", - "sp-externalities", - "sp-keystore", - "sp-runtime-interface", - "sp-state-machine", - "sp-std 14.0.0", - "sp-tracing", - "sp-trie", - "tracing", - "tracing-core", -] - -[[package]] -name = "sp-keystore" -version = "0.40.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0248b4d784cb4a01472276928977121fa39d977a5bb24793b6b15e64b046df42" -dependencies = [ - "parity-scale-codec", - "parking_lot", - "sp-core", - "sp-externalities", -] - -[[package]] -name = "sp-panic-handler" -version = "13.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8f5a17a0a11de029a8b811cb6e8b32ce7e02183cc04a3e965c383246798c416" -dependencies = [ - "backtrace", - "lazy_static", - "regex", -] - -[[package]] -name = "sp-runtime" -version = "38.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89ef409c414546b655ec1e94aaea178e4a97e21284a91b24c762aebf836d3b49" -dependencies = [ - "docify", - "either", - "hash256-std-hasher", - "impl-trait-for-tuples", - "log", - "num-traits", - "parity-scale-codec", - "paste", - "rand", - "scale-info", - "serde", - "simple-mermaid", - "sp-application-crypto", - "sp-arithmetic", - "sp-core", - "sp-io", - "sp-std 14.0.0", - "sp-weights", -] - [[package]] name = "sp-runtime-interface" version = "28.0.0" @@ -5107,33 +3680,12 @@ checksum = "0195f32c628fee3ce1dfbbf2e7e52a30ea85f3589da9fe62a8b816d70fc06294" dependencies = [ "Inflector", "expander", - "proc-macro-crate 3.1.0", + "proc-macro-crate", "proc-macro2", "quote", "syn 2.0.66", ] -[[package]] -name = "sp-state-machine" -version = "0.42.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "211e528aa6e902261a343f7b40840aa3d66fe4ad3aadbd04a035f10baf96dbc5" -dependencies = [ - "hash-db", - "log", - "parity-scale-codec", - "parking_lot", - "rand", - "smallvec", - "sp-core", - "sp-externalities", - "sp-panic-handler", - "sp-trie", - "thiserror", - "tracing", - "trie-db", -] - [[package]] name = "sp-std" version = "8.0.0" @@ -5161,38 +3713,14 @@ dependencies = [ [[package]] name = "sp-tracing" -version = "17.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90b3decf116db9f1dfaf1f1597096b043d0e12c952d3bcdc018c6d6b77deec7e" -dependencies = [ - "parity-scale-codec", - "tracing", - "tracing-core", - "tracing-subscriber", -] - -[[package]] -name = "sp-trie" -version = "36.0.0" +version = "17.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "841d717c0f465f5371569e6fdc25b6f32d47c15d6e4c92b3b779e1c9b18b951d" +checksum = "90b3decf116db9f1dfaf1f1597096b043d0e12c952d3bcdc018c6d6b77deec7e" dependencies = [ - "ahash", - "hash-db", - "lazy_static", - "memory-db", - "nohash-hasher", "parity-scale-codec", - "parking_lot", - "rand", - "scale-info", - "schnellru", - "sp-core", - "sp-externalities", - "thiserror", "tracing", - "trie-db", - "trie-root", + "tracing-core", + "tracing-subscriber", ] [[package]] @@ -5206,21 +3734,6 @@ dependencies = [ "parity-scale-codec", ] -[[package]] -name = "sp-weights" -version = "31.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93cdaf72a1dad537bbb130ba4d47307ebe5170405280ed1aa31fa712718a400e" -dependencies = [ - "bounded-collections", - "parity-scale-codec", - "scale-info", - "serde", - "smallvec", - "sp-arithmetic", - "sp-debug-derive", -] - [[package]] name = "spin" version = "0.9.8" @@ -5267,18 +3780,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" -[[package]] -name = "strsim" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" - -[[package]] -name = "strsim" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" - [[package]] name = "strum" version = "0.25.0" @@ -5307,7 +3808,7 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ca58ffd742f693dc13d69bdbb2e642ae239e0053f6aab3b104252892f856700a" dependencies = [ - "hmac 0.12.1", + "hmac", "pbkdf2", "schnorrkel 0.11.4", "sha2 0.10.8", @@ -5326,141 +3827,6 @@ version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "734676eb262c623cec13c3155096e08d1f8f29adce39ba17948b18dad1e54142" -[[package]] -name = "subxt" -version = "0.37.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a160cba1edbf3ec4fbbeaea3f1a185f70448116a6bccc8276bb39adb3b3053bd" -dependencies = [ - "async-trait", - "derive-where", - "either", - "frame-metadata 16.0.0", - "futures", - "hex", - "impl-serde", - "instant", - "jsonrpsee 0.22.5", - "parity-scale-codec", - "primitive-types", - "reconnecting-jsonrpsee-ws-client", - "scale-bits", - "scale-decode", - "scale-encode", - "scale-info", - "scale-value", - "serde", - "serde_json", - "sp-crypto-hashing", - "subxt-core 0.37.0", - "subxt-lightclient", - "subxt-macro", - "subxt-metadata", - "thiserror", - "tokio-util", - "tracing", - "url", -] - -[[package]] -name = "subxt-codegen" -version = "0.37.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d703dca0905cc5272d7cc27a4ac5f37dcaae7671acc7fef0200057cc8c317786" -dependencies = [ - "frame-metadata 16.0.0", - "heck 0.5.0", - "hex", - "jsonrpsee 0.22.5", - "parity-scale-codec", - "proc-macro2", - "quote", - "scale-info", - "scale-typegen", - "subxt-metadata", - "syn 2.0.66", - "thiserror", - "tokio", -] - -[[package]] -name = "subxt-core" -version = "0.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19edd7c615b78a93cc306ae223afa62547fc40074ca06382328cf62fb8fc7276" - -[[package]] -name = "subxt-core" -version = "0.37.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59f41eb2e2eea6ed45649508cc735f92c27f1fcfb15229e75f8270ea73177345" -dependencies = [ - "base58", - "blake2", - "derive-where", - "frame-metadata 16.0.0", - "hashbrown 0.14.5", - "hex", - "impl-serde", - "parity-scale-codec", - "primitive-types", - "scale-bits", - "scale-decode", - "scale-encode", - "scale-info", - "scale-value", - "serde", - "serde_json", - "sp-crypto-hashing", - "subxt-metadata", - "tracing", -] - -[[package]] -name = "subxt-lightclient" -version = "0.37.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d9406fbdb9548c110803cb8afa750f8b911d51eefdf95474b11319591d225d9" -dependencies = [ - "futures", - "futures-util", - "serde", - "serde_json", - "smoldot-light", - "thiserror", - "tokio", - "tokio-stream", - "tracing", -] - -[[package]] -name = "subxt-macro" -version = "0.37.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c195f803d70687e409aba9be6c87115b5da8952cd83c4d13f2e043239818fcd" -dependencies = [ - "darling 0.20.9", - "parity-scale-codec", - "proc-macro-error", - "quote", - "scale-typegen", - "subxt-codegen", - "syn 2.0.66", -] - -[[package]] -name = "subxt-metadata" -version = "0.37.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "738be5890fdeff899bbffff4d9c0f244fe2a952fb861301b937e3aa40ebb55da" -dependencies = [ - "frame-metadata 16.0.0", - "hashbrown 0.14.5", - "parity-scale-codec", - "scale-info", - "sp-crypto-hashing", -] - [[package]] name = "subxt-signer" version = "0.30.1" @@ -5469,7 +3835,7 @@ checksum = "8829de70ce3df90bfeccee1d80a29d554bc0219d7031ed67c11679e3ddc95b7d" dependencies = [ "bip39", "hex", - "hmac 0.12.1", + "hmac", "parity-scale-codec", "pbkdf2", "regex", @@ -5482,28 +3848,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "subxt-signer" -version = "0.37.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f49888ae6ae90fe01b471193528eea5bd4ed52d8eecd2d13f4a2333b87388850" -dependencies = [ - "bip39", - "cfg-if", - "hex", - "hmac 0.12.1", - "parity-scale-codec", - "pbkdf2", - "regex", - "schnorrkel 0.11.4", - "secp256k1 0.28.2", - "secrecy", - "sha2 0.10.8", - "sp-crypto-hashing", - "subxt-core 0.37.0", - "zeroize", -] - [[package]] name = "syn" version = "1.0.109" @@ -5571,15 +3915,6 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "termcolor" -version = "1.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" -dependencies = [ - "winapi-util", -] - [[package]] name = "thiserror" version = "1.0.61" @@ -5674,34 +4009,13 @@ dependencies = [ "tokio", ] -[[package]] -name = "tokio-rustls" -version = "0.24.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" -dependencies = [ - "rustls 0.21.12", - "tokio", -] - [[package]] name = "tokio-rustls" version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "775e0c0f0adb3a2f22a00c4745d728b479985fc15ee7ca6a2608388c5569860f" dependencies = [ - "rustls 0.22.4", - "rustls-pki-types", - "tokio", -] - -[[package]] -name = "tokio-rustls" -version = "0.26.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" -dependencies = [ - "rustls 0.23.10", + "rustls", "rustls-pki-types", "tokio", ] @@ -5738,43 +4052,16 @@ checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1" dependencies = [ "bytes", "futures-core", - "futures-io", "futures-sink", "pin-project-lite", "tokio", ] -[[package]] -name = "toml" -version = "0.8.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f49eb2ab21d2f26bd6db7bf383edc527a7ebaee412d17af4d40fdccd442f335" -dependencies = [ - "serde", - "serde_spanned", - "toml_datetime", - "toml_edit 0.22.14", -] - [[package]] name = "toml_datetime" version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4badfd56924ae69bcc9039335b2e017639ce3f9b001c393c1b2d1ef846ce2cbf" -dependencies = [ - "serde", -] - -[[package]] -name = "toml_edit" -version = "0.19.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" -dependencies = [ - "indexmap", - "toml_datetime", - "winnow 0.5.40", -] [[package]] name = "toml_edit" @@ -5784,20 +4071,7 @@ checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" dependencies = [ "indexmap", "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 = "f21c7aaf97f1bd9ca9d4f9e73b0a6c74bd5afef56f2bc931943a6e1c37e04e38" -dependencies = [ - "indexmap", - "serde", - "serde_spanned", - "toml_datetime", - "winnow 0.6.13", + "winnow", ] [[package]] @@ -5813,7 +4087,6 @@ dependencies = [ "tokio", "tower-layer", "tower-service", - "tracing", ] [[package]] @@ -5834,7 +4107,6 @@ version = "0.1.40" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" dependencies = [ - "log", "pin-project-lite", "tracing-attributes", "tracing-core", @@ -5904,27 +4176,6 @@ dependencies = [ "tracing-serde", ] -[[package]] -name = "trie-db" -version = "0.29.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c992b4f40c234a074d48a757efeabb1a6be88af84c0c23f7ca158950cb0ae7f" -dependencies = [ - "hash-db", - "log", - "rustc-hex", - "smallvec", -] - -[[package]] -name = "trie-root" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4ed310ef5ab98f5fa467900ed906cb9232dd5376597e00fd4cba2a449d06c0b" -dependencies = [ - "hash-db", -] - [[package]] name = "try-lock" version = "0.2.5" @@ -6093,16 +4344,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "walkdir" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" -dependencies = [ - "same-file", - "winapi-util", -] - [[package]] name = "want" version = "0.3.1" @@ -6209,46 +4450,6 @@ dependencies = [ "syn 2.0.66", ] -[[package]] -name = "wasmi" -version = "0.31.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a8281d1d660cdf54c76a3efa9ddd0c270cada1383a995db3ccb43d166456c7" -dependencies = [ - "smallvec", - "spin", - "wasmi_arena", - "wasmi_core", - "wasmparser-nostd", -] - -[[package]] -name = "wasmi_arena" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "104a7f73be44570cac297b3035d76b169d6599637631cf37a1703326a0727073" - -[[package]] -name = "wasmi_core" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcf1a7db34bff95b85c261002720c00c3a6168256dcb93041d3fa2054d19856a" -dependencies = [ - "downcast-rs", - "libm", - "num-traits", - "paste", -] - -[[package]] -name = "wasmparser-nostd" -version = "0.100.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5a015fe95f3504a94bb1462c717aae75253e39b9dd6c3fb1062c934535c64aa" -dependencies = [ - "indexmap-nostd", -] - [[package]] name = "web-sys" version = "0.3.69" @@ -6265,7 +4466,7 @@ version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5388522c899d1e1c96a4c307e3797e0f697ba7c77dd8e0e625ecba9dd0342937" dependencies = [ - "arrayvec 0.7.4", + "arrayvec", "base64 0.21.7", "bytes", "derive_more", @@ -6331,15 +4532,6 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" -[[package]] -name = "winapi-util" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d4cc384e1e73b93bafa6fb4f1df8c41695c8a91cf9c4c64358067d15a7b6c6b" -dependencies = [ - "windows-sys 0.52.0", -] - [[package]] name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" @@ -6503,15 +4695,6 @@ dependencies = [ "memchr", ] -[[package]] -name = "winnow" -version = "0.6.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59b5e5f6c299a3c7890b876a2a587f3115162487e704907d9b6cd29473052ba1" -dependencies = [ - "memchr", -] - [[package]] name = "winreg" version = "0.50.0" @@ -6541,24 +4724,6 @@ dependencies = [ "tap", ] -[[package]] -name = "x25519-dalek" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7e468321c81fb07fa7f4c636c3972b9100f0346e5b6a9f2bd0603a52f7ed277" -dependencies = [ - "curve25519-dalek", - "rand_core", - "serde", - "zeroize", -] - -[[package]] -name = "yap" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff4524214bc4629eba08d78ceb1d6507070cc0bcbbed23af74e19e6e924a24cf" - [[package]] name = "zerocopy" version = "0.7.34" diff --git a/packages/kos-sdk/Cargo.toml b/packages/kos-sdk/Cargo.toml index 28b6026..4f8e89d 100644 --- a/packages/kos-sdk/Cargo.toml +++ b/packages/kos-sdk/Cargo.toml @@ -54,15 +54,10 @@ kos-utils = { workspace = true } pbjson = { workspace = true } pbjson-types = { workspace = true } prost = { workspace = true } -subxt = "0.37.0" -subxt-signer = "0.37.0" base64 = "0.22.1" -subxt-core = "0.0.1" -parity-scale-codec = "3.6.12" +sp-core = "34.0.0" [dev-dependencies] -sp-core = "34.0.0" -sp-runtime = "38.0.0" tokio = { version = "1", features = ["full"] } tokio-test = "*" dotenvy = "0.15.7" diff --git a/packages/kos-sdk/src/chains/polkadot/address.rs b/packages/kos-sdk/src/chains/polkadot/address.rs index fff43ce..e719879 100644 --- a/packages/kos-sdk/src/chains/polkadot/address.rs +++ b/packages/kos-sdk/src/chains/polkadot/address.rs @@ -1,7 +1,8 @@ -use std::str::FromStr; -use wasm_bindgen::prelude::wasm_bindgen; use kos_crypto::keypair::KeyPair; use sp_core::crypto::{Ss58AddressFormat, Ss58Codec}; +use sp_core::sr25519::Public; +use std::str::FromStr; +use wasm_bindgen::prelude::wasm_bindgen; const ADDRESS_LEN: usize = 32; #[derive(PartialEq, Eq, Clone, Copy, Hash, PartialOrd, Ord)] @@ -48,8 +49,7 @@ impl FromStr for Address { type Err = &'static str; fn from_str(s: &str) -> Result { - - let decoded = sp_core::sr25519::Public::from_ss58check_with_version(s).map_err(|_| "Invalid address")?; + let decoded = Public::from_ss58check_with_version(s).map_err(|_| "Invalid address")?; decoded.0.len() == ADDRESS_LEN || return Err("Invalid address"); @@ -62,8 +62,8 @@ impl FromStr for Address { impl ::std::fmt::Display for Address { fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { - let st = sp_core::sr25519::Public::from_raw(self.0).to_ss58check_with_version(Ss58AddressFormat::custom(0)); + let st = Public::from_raw(self.0).to_ss58check_with_version(Ss58AddressFormat::custom(0)); st.fmt(f) } -} \ No newline at end of file +} diff --git a/packages/kos-sdk/src/chains/polkadot/mod.rs b/packages/kos-sdk/src/chains/polkadot/mod.rs index 3bccdd1..88c80a6 100644 --- a/packages/kos-sdk/src/chains/polkadot/mod.rs +++ b/packages/kos-sdk/src/chains/polkadot/mod.rs @@ -1,5 +1,4 @@ mod address; -mod transaction; use crate::models::BroadcastResult; use crate::{ @@ -8,7 +7,6 @@ use crate::{ models::{PathOptions, Transaction, TransactionRaw}, }; use kos_crypto::keypair::KeyPair; -use kos_crypto::secp256k1::Secp256k1KeyPair; use kos_crypto::sr25519::Sr25519KeyPair; use kos_types::error::Error; use kos_types::hash::Hash; @@ -230,7 +228,7 @@ mod tests { #[test] fn test_sign_digest() { let kp = super::DOT::keypair_from_bytes(&[0u8; 32]).unwrap(); - let digest = vec![0u8; 32]; + let digest = String::from("hello").into_bytes(); let signature = super::DOT::sign_digest(&digest, &kp).unwrap(); assert_eq!(signature.len(), 64); From 8dd4d35ab2be05d281e1b7c05ad08e90a9451266 Mon Sep 17 00:00:00 2001 From: Pedro Camboim Date: Wed, 4 Sep 2024 16:54:48 -0300 Subject: [PATCH 11/25] feat: DOT sign message --- Cargo.lock | 110 ++------------------ packages/kos-crypto/Cargo.toml | 3 +- packages/kos-sdk/src/chains/polkadot/mod.rs | 9 +- 3 files changed, 14 insertions(+), 108 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index bd0b18d..115e7e9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -360,17 +360,6 @@ version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d86b93f97252c47b41663388e6d155714a9d0c398b99f1005cbc5f978b29f445" -[[package]] -name = "bip39" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93f2635620bf0b9d4576eb7bb9a38a55df78bd1205d26fa994b25911a69f212f" -dependencies = [ - "bitcoin_hashes 0.11.0", - "serde", - "unicode-normalization", -] - [[package]] name = "bitcoin" version = "0.30.2" @@ -379,7 +368,7 @@ checksum = "1945a5048598e4189e239d3f809b19bdad4845c4b2ba400d304d2dcf26d2c462" dependencies = [ "bech32", "bitcoin-private", - "bitcoin_hashes 0.12.0", + "bitcoin_hashes", "hex_lit", "secp256k1 0.27.0", "serde", @@ -391,12 +380,6 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "73290177011694f38ec25e165d0387ab7ea749a4b81cd4c80dae5988229f7a57" -[[package]] -name = "bitcoin_hashes" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90064b8dee6815a6470d60bad07bbbaee885c0e12d04177138fa3291a01b7bc4" - [[package]] name = "bitcoin_hashes" version = "0.12.0" @@ -786,19 +769,6 @@ dependencies = [ "syn 2.0.66", ] -[[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", - "subtle-ng", - "zeroize", -] - [[package]] name = "der" version = "0.7.9" @@ -1978,7 +1948,6 @@ dependencies = [ "sha2 0.10.8", "sha3", "sp-core", - "subxt-signer", "wasm-bindgen", "zeroize", ] @@ -2359,7 +2328,7 @@ version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4e69bf016dc406eff7d53a7d3f7cf1c2e72c82b9088aac1118591e36dd2cd3e9" dependencies = [ - "bitcoin_hashes 0.12.0", + "bitcoin_hashes", "rand", "rand_core", "serde", @@ -3231,23 +3200,6 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "schnorrkel" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "844b7645371e6ecdf61ff246ba1958c29e802881a749ae3fb1993675d210d28d" -dependencies = [ - "arrayref", - "arrayvec", - "curve25519-dalek-ng", - "merlin", - "rand_core", - "serde_bytes", - "sha2 0.9.9", - "subtle-ng", - "zeroize", -] - [[package]] name = "schnorrkel" version = "0.11.4" @@ -3300,7 +3252,7 @@ version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "25996b82292a7a57ed3508f052cfff8640d38d32018784acd714758b43da9c8f" dependencies = [ - "bitcoin_hashes 0.12.0", + "bitcoin_hashes", "rand", "secp256k1-sys 0.8.1", "serde", @@ -3583,7 +3535,7 @@ dependencies = [ "primitive-types", "rand", "scale-info", - "schnorrkel 0.11.4", + "schnorrkel", "secp256k1 0.28.2", "secrecy", "serde", @@ -3591,7 +3543,7 @@ dependencies = [ "sp-debug-derive", "sp-externalities", "sp-runtime-interface", - "sp-std 14.0.0", + "sp-std", "sp-storage", "ss58-registry", "substrate-bip39", @@ -3601,21 +3553,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "sp-core-hashing" -version = "9.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ee599a8399448e65197f9a6cee338ad192e9023e35e31f22382964c3c174c68" -dependencies = [ - "blake2b_simd", - "byteorder", - "digest 0.10.7", - "sha2 0.10.8", - "sha3", - "sp-std 8.0.0", - "twox-hash", -] - [[package]] name = "sp-crypto-hashing" version = "0.1.0" @@ -3665,7 +3602,7 @@ dependencies = [ "primitive-types", "sp-externalities", "sp-runtime-interface-proc-macro", - "sp-std 14.0.0", + "sp-std", "sp-storage", "sp-tracing", "sp-wasm-interface", @@ -3686,12 +3623,6 @@ dependencies = [ "syn 2.0.66", ] -[[package]] -name = "sp-std" -version = "8.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53458e3c57df53698b3401ec0934bea8e8cfce034816873c0b0abbd83d7bac0d" - [[package]] name = "sp-std" version = "14.0.0" @@ -3810,7 +3741,7 @@ checksum = "ca58ffd742f693dc13d69bdbb2e642ae239e0053f6aab3b104252892f856700a" dependencies = [ "hmac", "pbkdf2", - "schnorrkel 0.11.4", + "schnorrkel", "sha2 0.10.8", "zeroize", ] @@ -3821,33 +3752,6 @@ version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" -[[package]] -name = "subtle-ng" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "734676eb262c623cec13c3155096e08d1f8f29adce39ba17948b18dad1e54142" - -[[package]] -name = "subxt-signer" -version = "0.30.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8829de70ce3df90bfeccee1d80a29d554bc0219d7031ed67c11679e3ddc95b7d" -dependencies = [ - "bip39", - "hex", - "hmac", - "parity-scale-codec", - "pbkdf2", - "regex", - "schnorrkel 0.10.2", - "secp256k1 0.27.0", - "secrecy", - "sha2 0.10.8", - "sp-core-hashing", - "thiserror", - "zeroize", -] - [[package]] name = "syn" version = "1.0.109" diff --git a/packages/kos-crypto/Cargo.toml b/packages/kos-crypto/Cargo.toml index 2cf36f4..78a0351 100644 --- a/packages/kos-crypto/Cargo.toml +++ b/packages/kos-crypto/Cargo.toml @@ -23,7 +23,7 @@ sha2 = { workspace = true } sha3 = { workspace = true } hmac = { workspace = true } secp256k1 = { workspace = true, features = ["rand", "serde", "bitcoin_hashes"] } -ed25519-dalek = { workspace = true, features = ["serde"] } +ed25519-dalek = { workspace = true, features = ["serde"] } aes-gcm = "0.10" aes = { version = "0.8" } cfb-mode = "0.8" @@ -31,5 +31,4 @@ cbc = { version = "0.1", features = ["block-padding", "std"] } pem = "3" pbkdf2 = { version = "0.12", features = ["simple"] } base64 = "0.21" -subxt-signer = "0.30.1" sp-core = "34.0.0" diff --git a/packages/kos-sdk/src/chains/polkadot/mod.rs b/packages/kos-sdk/src/chains/polkadot/mod.rs index 88c80a6..06e08ef 100644 --- a/packages/kos-sdk/src/chains/polkadot/mod.rs +++ b/packages/kos-sdk/src/chains/polkadot/mod.rs @@ -20,6 +20,8 @@ use wasm_bindgen::prelude::*; #[wasm_bindgen] pub struct DOT {} +pub const SIGN_PREFIX: &[u8; 26] = b"\x19Polkadot Signed Message:\n"; + pub const BIP44_PATH: u32 = 195; pub const BASE_CHAIN: BaseChain = BaseChain { name: "Polkadot", @@ -145,20 +147,21 @@ impl DOT { #[wasm_bindgen(js_name = "hash")] /// hash digest pub fn hash(message: &[u8]) -> Result, Error> { - let digest = kos_crypto::hash::sha256(message); + let digest = kos_crypto::hash::blake2b256(message); Ok(digest.to_vec()) } #[wasm_bindgen(js_name = "messageHash")] /// Append prefix and hash the message pub fn message_hash(message: &[u8]) -> Result, Error> { - todo!() + let to_sign = [SIGN_PREFIX, message.len().to_string().as_bytes(), message].concat(); + DOT::hash(&to_sign) } #[wasm_bindgen(js_name = "signMessage")] /// Sign Message with the private key. pub fn sign_message(message: &[u8], keypair: &KeyPair) -> Result, Error> { - Ok(Vec::new()) + DOT::sign_digest(message, keypair) } #[wasm_bindgen(js_name = "verifyMessageSignature")] From ea0a45ed647373e7077ce8a55f37c938aba83931 Mon Sep 17 00:00:00 2001 From: Pedro Camboim Date: Fri, 13 Sep 2024 17:45:06 -0300 Subject: [PATCH 12/25] feat: get polkadot client & decode tx --- Cargo.lock | 2111 +++++++++++++++-- packages/kos-sdk/Cargo.toml | 2 + .../artifacts/polkadot_metadata_small.scale | Bin 0 -> 103661 bytes packages/kos-sdk/src/chains/polkadot/mod.rs | 78 + 4 files changed, 2038 insertions(+), 153 deletions(-) create mode 100644 packages/kos-sdk/artifacts/polkadot_metadata_small.scale diff --git a/Cargo.lock b/Cargo.lock index 115e7e9..17f6029 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -62,6 +62,17 @@ dependencies = [ "subtle", ] +[[package]] +name = "ahash" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" +dependencies = [ + "getrandom", + "once_cell", + "version_check", +] + [[package]] name = "ahash" version = "0.8.11" @@ -69,6 +80,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" dependencies = [ "cfg-if", + "getrandom", "once_cell", "version_check", "zerocopy", @@ -260,12 +272,174 @@ version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545" +[[package]] +name = "arrayvec" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd9fd44efafa8690358b7408d253adf110036b88f55672a933f01d616ad9b1b9" +dependencies = [ + "nodrop", +] + [[package]] name = "arrayvec" version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" +[[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 2.5.3", + "futures-core", +] + +[[package]] +name = "async-channel" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a" +dependencies = [ + "concurrent-queue", + "event-listener-strategy", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-executor" +version = "1.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30ca9a001c1e8ba5149f91a74362376cc6bc5b919d92d988668657bd570bdcec" +dependencies = [ + "async-task", + "concurrent-queue", + "fastrand 2.1.0", + "futures-lite 2.3.0", + "slab", +] + +[[package]] +name = "async-fs" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "279cf904654eeebfa37ac9bb1598880884924aab82e290aa65c9e77a0e142e06" +dependencies = [ + "async-lock 2.8.0", + "autocfg", + "blocking", + "futures-lite 1.13.0", +] + +[[package]] +name = "async-io" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af" +dependencies = [ + "async-lock 2.8.0", + "autocfg", + "cfg-if", + "concurrent-queue", + "futures-lite 1.13.0", + "log", + "parking", + "polling 2.8.0", + "rustix 0.37.27", + "slab", + "socket2 0.4.10", + "waker-fn", +] + +[[package]] +name = "async-io" +version = "2.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "444b0228950ee6501b3568d3c93bf1176a1fdbc3b758dcd9475046d30f4dc7e8" +dependencies = [ + "async-lock 3.4.0", + "cfg-if", + "concurrent-queue", + "futures-io", + "futures-lite 2.3.0", + "parking", + "polling 3.7.3", + "rustix 0.38.34", + "slab", + "tracing", + "windows-sys 0.59.0", +] + +[[package]] +name = "async-lock" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b" +dependencies = [ + "event-listener 2.5.3", +] + +[[package]] +name = "async-lock" +version = "3.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" +dependencies = [ + "event-listener 5.3.1", + "event-listener-strategy", + "pin-project-lite", +] + +[[package]] +name = "async-net" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0434b1ed18ce1cf5769b8ac540e33f01fa9471058b5e89da9e06f3c882a8c12f" +dependencies = [ + "async-io 1.13.0", + "blocking", + "futures-lite 1.13.0", +] + +[[package]] +name = "async-process" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea6438ba0a08d81529c69b36700fa2f95837bfe3e776ab39cde9c14d9149da88" +dependencies = [ + "async-io 1.13.0", + "async-lock 2.8.0", + "async-signal", + "blocking", + "cfg-if", + "event-listener 3.1.0", + "futures-lite 1.13.0", + "rustix 0.38.34", + "windows-sys 0.48.0", +] + +[[package]] +name = "async-signal" +version = "0.2.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "637e00349800c0bdf8bfc21ebbc0b6524abea702b0da4168ac00d070d0c0b9f3" +dependencies = [ + "async-io 2.3.4", + "async-lock 3.4.0", + "atomic-waker", + "cfg-if", + "futures-core", + "futures-io", + "rustix 0.38.34", + "signal-hook-registry", + "slab", + "windows-sys 0.59.0", +] + [[package]] name = "async-stream" version = "0.3.5" @@ -288,6 +462,29 @@ dependencies = [ "syn 2.0.66", ] +[[package]] +name = "async-task" +version = "4.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" + +[[package]] +name = "async-trait" +version = "0.1.82" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a27b8a3a6e1a44fa4c8baf1f653e4172e81486d4941f2237e20dc2d0cf4ddff1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", +] + +[[package]] +name = "atomic" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c59bdb34bc650a32731b31bd8f0829cc15d24a708ee31559e0bb34f2bc320cba" + [[package]] name = "atomic-polyfill" version = "1.0.3" @@ -297,6 +494,12 @@ dependencies = [ "critical-section", ] +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + [[package]] name = "autocfg" version = "1.3.0" @@ -360,6 +563,24 @@ version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d86b93f97252c47b41663388e6d155714a9d0c398b99f1005cbc5f978b29f445" +[[package]] +name = "beef" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a8241f3ebb85c056b509d4327ad0358fbbba6ffb340bf388f26350aeda225b1" +dependencies = [ + "serde", +] + +[[package]] +name = "bip39" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93f2635620bf0b9d4576eb7bb9a38a55df78bd1205d26fa994b25911a69f212f" +dependencies = [ + "bitcoin_hashes 0.11.0", +] + [[package]] name = "bitcoin" version = "0.30.2" @@ -368,7 +589,7 @@ checksum = "1945a5048598e4189e239d3f809b19bdad4845c4b2ba400d304d2dcf26d2c462" dependencies = [ "bech32", "bitcoin-private", - "bitcoin_hashes", + "bitcoin_hashes 0.12.0", "hex_lit", "secp256k1 0.27.0", "serde", @@ -380,6 +601,12 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "73290177011694f38ec25e165d0387ab7ea749a4b81cd4c80dae5988229f7a57" +[[package]] +name = "bitcoin_hashes" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90064b8dee6815a6470d60bad07bbbaee885c0e12d04177138fa3291a01b7bc4" + [[package]] name = "bitcoin_hashes" version = "0.12.0" @@ -423,6 +650,16 @@ dependencies = [ "digest 0.10.7", ] +[[package]] +name = "blake2-rfc" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d6d530bdd2d52966a6d03b7a964add7ae1a288d25214066fd4b600f0f796400" +dependencies = [ + "arrayvec 0.4.12", + "constant_time_eq 0.1.5", +] + [[package]] name = "blake2b_simd" version = "1.0.2" @@ -430,8 +667,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "23285ad32269793932e830392f2fe2f83e26488fd3ec778883a93c8323735780" dependencies = [ "arrayref", - "arrayvec", - "constant_time_eq", + "arrayvec 0.7.4", + "constant_time_eq 0.3.0", ] [[package]] @@ -461,6 +698,19 @@ dependencies = [ "generic-array", ] +[[package]] +name = "blocking" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea" +dependencies = [ + "async-channel 2.3.1", + "async-task", + "futures-io", + "futures-lite 2.3.0", + "piper", +] + [[package]] name = "bounded-collections" version = "0.2.0" @@ -543,6 +793,30 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "chacha20" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3613f74bd2eac03dad61bd53dbe620703d4371614fe0bc3b9f04dd36fe4e818" +dependencies = [ + "cfg-if", + "cipher", + "cpufeatures", +] + +[[package]] +name = "chacha20poly1305" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10cd79432192d1c0f4e1a0fef9527696cc039165d729fb41b3f4f4f354c2dc35" +dependencies = [ + "aead", + "chacha20", + "cipher", + "poly1305", + "zeroize", +] + [[package]] name = "chrono" version = "0.4.38" @@ -553,7 +827,7 @@ dependencies = [ "iana-time-zone", "num-traits", "serde", - "windows-targets 0.52.5", + "windows-targets 0.52.6", ] [[package]] @@ -564,6 +838,7 @@ checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" dependencies = [ "crypto-common", "inout", + "zeroize", ] [[package]] @@ -581,7 +856,7 @@ dependencies = [ "bs58", "coins-core", "digest 0.10.7", - "hmac", + "hmac 0.12.1", "k256", "serde", "sha2 0.10.8", @@ -596,7 +871,7 @@ checksum = "3db8fba409ce3dc04f7d804074039eb68b960b0829161f8e06c95fea3f122528" dependencies = [ "bitvec", "coins-bip32", - "hmac", + "hmac 0.12.1", "once_cell", "pbkdf2", "rand", @@ -630,6 +905,21 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" +[[package]] +name = "common-path" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2382f75942f4b3be3690fe4f86365e9c853c1587d6ee58212cebf6e2a9ccd101" + +[[package]] +name = "concurrent-queue" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" +dependencies = [ + "crossbeam-utils", +] + [[package]] name = "console_error_panic_hook" version = "0.1.7" @@ -646,6 +936,12 @@ version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" +[[package]] +name = "constant_time_eq" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" + [[package]] name = "constant_time_eq" version = "0.3.0" @@ -704,6 +1000,21 @@ version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7059fff8937831a9ae6f0fe4d658ffabf58f2ca96aa9dec1c889f936f705f216" +[[package]] +name = "crossbeam-queue" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df0346b5d5e76ac2fe4e327c5fd1118d6be7c51dfb18f9b7922923f287471e35" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" + [[package]] name = "crunchy" version = "0.2.2" @@ -717,7 +1028,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" dependencies = [ "generic-array", - "rand_core", + "rand_core 0.6.4", "subtle", "zeroize", ] @@ -729,10 +1040,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" dependencies = [ "generic-array", - "rand_core", + "rand_core 0.6.4", "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 = "ctr" version = "0.9.2" @@ -742,6 +1063,19 @@ 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" version = "4.1.3" @@ -770,71 +1104,198 @@ dependencies = [ ] [[package]] -name = "der" -version = "0.7.9" +name = "curve25519-dalek-ng" +version = "4.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0" +checksum = "1c359b7249347e46fb28804470d071c921156ad62b3eef5d34e2ba867533dec8" dependencies = [ - "const-oid", + "byteorder", + "digest 0.9.0", + "rand_core 0.6.4", + "subtle-ng", "zeroize", ] [[package]] -name = "derivative" -version = "2.2.0" +name = "darling" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +checksum = "7b750cb3417fd1b327431a470f388520309479ab0bf5e323505daf0290cd3850" dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", + "darling_core 0.14.4", + "darling_macro 0.14.4", ] [[package]] -name = "derive_more" -version = "0.99.17" +name = "darling" +version = "0.20.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" +checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" dependencies = [ - "convert_case", + "darling_core 0.20.10", + "darling_macro 0.20.10", +] + +[[package]] +name = "darling_core" +version = "0.14.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0" +dependencies = [ + "fnv", + "ident_case", "proc-macro2", "quote", - "rustc_version", + "strsim 0.10.0", "syn 1.0.109", ] [[package]] -name = "digest" -version = "0.9.0" +name = "darling_core" +version = "0.20.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" dependencies = [ - "generic-array", + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim 0.11.1", + "syn 2.0.66", ] [[package]] -name = "digest" -version = "0.10.7" +name = "darling_macro" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e" dependencies = [ - "block-buffer 0.10.4", - "const-oid", - "crypto-common", - "subtle", + "darling_core 0.14.4", + "quote", + "syn 1.0.109", ] [[package]] -name = "dotenv-build" -version = "0.1.1" +name = "darling_macro" +version = "0.20.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4547f16c17f6051a12cdb8c62b803f94bee6807c74aa7c530b30b737df981fc" +checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" +dependencies = [ + "darling_core 0.20.10", + "quote", + "syn 2.0.66", +] [[package]] -name = "dotenvy" -version = "0.15.7" +name = "der" +version = "0.7.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" +checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0" +dependencies = [ + "const-oid", + "zeroize", +] + +[[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.109", +] + +[[package]] +name = "derive-syn-parse" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d65d7ce8132b7c0e54497a4d9a55a1c2a0912a0d786cf894472ba818fba45762" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", +] + +[[package]] +name = "derive_more" +version = "0.99.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" +dependencies = [ + "convert_case", + "proc-macro2", + "quote", + "rustc_version", + "syn 1.0.109", +] + +[[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.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer 0.10.4", + "const-oid", + "crypto-common", + "subtle", +] + +[[package]] +name = "docify" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a2f138ad521dc4a2ced1a4576148a6a610b4c5923933b062a263130a6802ce" +dependencies = [ + "docify_macros", +] + +[[package]] +name = "docify_macros" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a081e51fb188742f5a7a1164ad752121abcb22874b21e2c3b0dd040c515fdad" +dependencies = [ + "common-path", + "derive-syn-parse", + "once_cell", + "proc-macro2", + "quote", + "regex", + "syn 2.0.66", + "termcolor", + "toml", + "walkdir", +] + +[[package]] +name = "dotenv-build" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4547f16c17f6051a12cdb8c62b803f94bee6807c74aa7c530b30b737df981fc" + +[[package]] +name = "dotenvy" +version = "0.15.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" + +[[package]] +name = "downcast-rs" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" [[package]] name = "dyn-clonable" @@ -895,7 +1356,7 @@ version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4a3daa8e81a3963a60642bcc1f90a670680bd4a77535faa384e9d1c79d620871" dependencies = [ - "curve25519-dalek", + "curve25519-dalek 4.1.3", "ed25519", "serde", "sha2 0.10.8", @@ -903,17 +1364,31 @@ dependencies = [ "zeroize", ] +[[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", + "hashbrown 0.12.3", + "hex", + "rand_core 0.6.4", + "sha2 0.9.9", + "zeroize", +] + [[package]] name = "ed25519-zebra" version = "4.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7d9ce6874da5d4415896cd45ffbc4d1cfc0c4f9c079427bd870742c30f2f65a9" dependencies = [ - "curve25519-dalek", + "curve25519-dalek 4.1.3", "ed25519", "hashbrown 0.14.5", "hex", - "rand_core", + "rand_core 0.6.4", "sha2 0.10.8", "zeroize", ] @@ -937,7 +1412,7 @@ dependencies = [ "generic-array", "group", "pkcs8", - "rand_core", + "rand_core 0.6.4", "sec1", "serdect", "subtle", @@ -1071,6 +1546,44 @@ dependencies = [ "uint", ] +[[package]] +name = "event-listener" +version = "2.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" + +[[package]] +name = "event-listener" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d93877bcde0eb80ca09131a08d23f0a5c18a620b01db137dba666d18cd9b30c2" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite", +] + +[[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 = "expander" version = "2.2.1" @@ -1086,6 +1599,15 @@ dependencies = [ "syn 2.0.66", ] +[[package]] +name = "fastrand" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" +dependencies = [ + "instant", +] + [[package]] name = "fastrand" version = "2.1.0" @@ -1107,7 +1629,7 @@ version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" dependencies = [ - "rand_core", + "rand_core 0.6.4", "subtle", ] @@ -1185,6 +1707,29 @@ dependencies = [ "percent-encoding", ] +[[package]] +name = "frame-metadata" +version = "15.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "878babb0b136e731cc77ec2fd883ff02745ff21e6fb662729953d44923df009c" +dependencies = [ + "cfg-if", + "parity-scale-codec", + "scale-info", +] + +[[package]] +name = "frame-metadata" +version = "16.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87cf1549fba25a6fcac22785b61698317d958e96cac72a59102ea45b9ae64692" +dependencies = [ + "cfg-if", + "parity-scale-codec", + "scale-info", + "serde", +] + [[package]] name = "fs-err" version = "2.11.0" @@ -1249,6 +1794,34 @@ version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" +[[package]] +name = "futures-lite" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" +dependencies = [ + "fastrand 1.9.0", + "futures-core", + "futures-io", + "memchr", + "parking", + "pin-project-lite", + "waker-fn", +] + +[[package]] +name = "futures-lite" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52527eb5074e35e9339c6b4e8d12600c7128b68fb25dcb9fa9dec18f7c25f3a5" +dependencies = [ + "fastrand 2.1.0", + "futures-core", + "futures-io", + "parking", + "pin-project-lite", +] + [[package]] name = "futures-macro" version = "0.3.30" @@ -1331,7 +1904,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6ea1015b5a70616b688dc230cfe50c8af89d972cb132d5a622814d29773b10b9" dependencies = [ "rand", - "rand_core", + "rand_core 0.6.4", ] [[package]] @@ -1375,7 +1948,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" dependencies = [ "ff", - "rand_core", + "rand_core 0.6.4", "subtle", ] @@ -1422,13 +1995,22 @@ dependencies = [ "byteorder", ] +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +dependencies = [ + "ahash 0.7.8", +] + [[package]] name = "hashbrown" version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" dependencies = [ - "ahash", + "ahash 0.8.11", ] [[package]] @@ -1437,8 +2019,9 @@ version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" dependencies = [ - "ahash", + "ahash 0.8.11", "allocator-api2", + "serde", ] [[package]] @@ -1497,6 +2080,12 @@ version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" +[[package]] +name = "hermit-abi" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc" + [[package]] name = "hex" version = "0.4.3" @@ -1509,6 +2098,16 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3011d1213f159867b13cfd6ac92d2cd5f1345762c63be3554e84092d85a50bbd" +[[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]] name = "hmac" version = "0.12.1" @@ -1518,6 +2117,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.9" @@ -1621,7 +2231,7 @@ dependencies = [ "httpdate", "itoa", "pin-project-lite", - "socket2", + "socket2 0.5.7", "tokio", "tower-service", "tracing", @@ -1647,6 +2257,23 @@ dependencies = [ "want", ] +[[package]] +name = "hyper-rustls" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" +dependencies = [ + "futures-util", + "http 0.2.12", + "hyper 0.14.29", + "log", + "rustls 0.21.12", + "rustls-native-certs", + "tokio", + "tokio-rustls 0.24.1", + "webpki-roots 0.25.4", +] + [[package]] name = "hyper-rustls" version = "0.26.0" @@ -1657,10 +2284,10 @@ dependencies = [ "http 1.1.0", "hyper 1.3.1", "hyper-util", - "rustls", + "rustls 0.22.4", "rustls-pki-types", "tokio", - "tokio-rustls", + "tokio-rustls 0.25.0", "tower-service", ] @@ -1690,7 +2317,7 @@ dependencies = [ "http-body 1.0.0", "hyper 1.3.1", "pin-project-lite", - "socket2", + "socket2 0.5.7", "tokio", "tower", "tower-service", @@ -1720,6 +2347,12 @@ 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.4.0" @@ -1801,6 +2434,12 @@ dependencies = [ "hashbrown 0.14.5", ] +[[package]] +name = "indexmap-nostd" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e04e2fd2b8188ea827b32ef11de88377086d690286ab35747ef7f9bf3ccb590" + [[package]] name = "inout" version = "0.1.3" @@ -1811,12 +2450,47 @@ dependencies = [ "generic-array", ] +[[package]] +name = "instant" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "integer-sqrt" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "276ec31bcb4a9ee45f58bec6f9ec700ae4cf4f4f8f2fa7e06cb406bd5ffdd770" +dependencies = [ + "num-traits", +] + +[[package]] +name = "intx" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f38a50a899dc47a6d0ed5508e7f601a2e34c3a85303514b5d137f3c10a0c75" + [[package]] name = "inventory" version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f958d3d68f4167080a18141e10381e7634563984a537f2a49a30fd8e53ac5767" +[[package]] +name = "io-lifetimes" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" +dependencies = [ + "hermit-abi 0.3.9", + "libc", + "windows-sys 0.48.0", +] + [[package]] name = "ipnet" version = "2.9.0" @@ -1881,32 +2555,121 @@ dependencies = [ ] [[package]] -name = "k256" -version = "0.13.3" +name = "jsonrpsee" +version = "0.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "956ff9b67e26e1a6a866cb758f12c6f8746208489e3e4a4b5580802f2f0a587b" +checksum = "367a292944c07385839818bb71c8d76611138e2dedb0677d035b8da21d29c78b" dependencies = [ - "cfg-if", - "ecdsa", - "elliptic-curve", - "once_cell", - "serdect", - "sha2 0.10.8", - "signature", + "jsonrpsee-client-transport", + "jsonrpsee-core", + "jsonrpsee-http-client", + "jsonrpsee-types", ] [[package]] -name = "keccak" -version = "0.1.5" +name = "jsonrpsee-client-transport" +version = "0.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654" +checksum = "c8b3815d9f5d5de348e5f162b316dc9cdf4548305ebb15b4eb9328e66cf27d7a" dependencies = [ - "cpufeatures", -] - -[[package]] -name = "kos" -version = "0.1.0" + "futures-util", + "http 0.2.12", + "jsonrpsee-core", + "jsonrpsee-types", + "pin-project", + "rustls-native-certs", + "soketto", + "thiserror", + "tokio", + "tokio-rustls 0.24.1", + "tokio-util", + "tracing", + "webpki-roots 0.25.4", +] + +[[package]] +name = "jsonrpsee-core" +version = "0.16.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b5dde66c53d6dcdc8caea1874a45632ec0fcf5b437789f1e45766a1512ce803" +dependencies = [ + "anyhow", + "async-lock 2.8.0", + "async-trait", + "beef", + "futures-channel", + "futures-timer", + "futures-util", + "hyper 0.14.29", + "jsonrpsee-types", + "rustc-hash", + "serde", + "serde_json", + "thiserror", + "tokio", + "tracing", +] + +[[package]] +name = "jsonrpsee-http-client" +version = "0.16.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e5f9fabdd5d79344728521bb65e3106b49ec405a78b66fbff073b72b389fa43" +dependencies = [ + "async-trait", + "hyper 0.14.29", + "hyper-rustls 0.24.2", + "jsonrpsee-core", + "jsonrpsee-types", + "rustc-hash", + "serde", + "serde_json", + "thiserror", + "tokio", + "tracing", +] + +[[package]] +name = "jsonrpsee-types" +version = "0.16.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "245ba8e5aa633dd1c1e4fae72bce06e71f42d34c14a2767c6b4d173b57bee5e5" +dependencies = [ + "anyhow", + "beef", + "serde", + "serde_json", + "thiserror", + "tracing", +] + +[[package]] +name = "k256" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "956ff9b67e26e1a6a866cb758f12c6f8746208489e3e4a4b5580802f2f0a587b" +dependencies = [ + "cfg-if", + "ecdsa", + "elliptic-curve", + "once_cell", + "serdect", + "sha2 0.10.8", + "signature", +] + +[[package]] +name = "keccak" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654" +dependencies = [ + "cpufeatures", +] + +[[package]] +name = "kos" +version = "0.1.0" dependencies = [ "console_error_panic_hook", "futures", @@ -1936,7 +2699,7 @@ dependencies = [ "coins-bip39", "ed25519-dalek", "hex", - "hmac", + "hmac 0.12.1", "kos-types", "log", "pbkdf2", @@ -1989,7 +2752,7 @@ dependencies = [ "enum_delegate", "enum_dispatch", "hex", - "hmac", + "hmac 0.12.1", "kos-crypto", "kos-proto", "kos-types", @@ -2007,7 +2770,9 @@ dependencies = [ "serde-wasm-bindgen", "serde_json", "sp-core", + "sp-runtime", "strum", + "subxt", "tokio", "tokio-test", "wasm-bindgen", @@ -2058,6 +2823,12 @@ version = "0.2.155" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" +[[package]] +name = "libm" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" + [[package]] name = "libsecp256k1" version = "0.7.1" @@ -2067,12 +2838,14 @@ dependencies = [ "arrayref", "base64 0.13.1", "digest 0.9.0", + "hmac-drbg", "libsecp256k1-core", "libsecp256k1-gen-ecmult", "libsecp256k1-gen-genmult", "rand", "serde", "sha2 0.9.9", + "typenum", ] [[package]] @@ -2104,6 +2877,12 @@ dependencies = [ "libsecp256k1-core", ] +[[package]] +name = "linux-raw-sys" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" + [[package]] name = "linux-raw-sys" version = "0.4.14" @@ -2126,6 +2905,12 @@ version = "0.4.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" +[[package]] +name = "lru" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "718e8fae447df0c7e1ba7f5189829e63fd536945c8988d61444c19039f16b670" + [[package]] name = "matchers" version = "0.0.1" @@ -2141,6 +2926,15 @@ version = "2.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" +[[package]] +name = "memory-db" +version = "0.32.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "808b50db46293432a45e63bc15ea51e0ab4c0a1647b8eb114e31a3e698dd6fbe" +dependencies = [ + "hash-db", +] + [[package]] name = "merlin" version = "3.0.0" @@ -2149,7 +2943,7 @@ checksum = "58c38e2799fc0978b65dfff8023ec7843e2330bb462f19198840b34b6582397d" dependencies = [ "byteorder", "keccak", - "rand_core", + "rand_core 0.6.4", "zeroize", ] @@ -2159,6 +2953,12 @@ version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" +[[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.3" @@ -2209,6 +3009,34 @@ dependencies = [ "tempfile", ] +[[package]] +name = "no-std-net" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43794a0ace135be66a25d3ae77d41b91615fb68ae937f904090203e81f755b65" + +[[package]] +name = "nodrop" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" + +[[package]] +name = "nohash-hasher" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" + +[[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 = "num-bigint" version = "0.4.5" @@ -2225,7 +3053,7 @@ version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a652d9771a63711fd3c3deb670acfbe5c30a4072e664d7a3bf5a9e1056ac72c3" dependencies = [ - "arrayvec", + "arrayvec 0.7.4", "itoa", ] @@ -2238,6 +3066,17 @@ dependencies = [ "num-traits", ] +[[package]] +name = "num-rational" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" +dependencies = [ + "num-bigint", + "num-integer", + "num-traits", +] + [[package]] name = "num-traits" version = "0.2.19" @@ -2253,7 +3092,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", ] @@ -2328,9 +3167,9 @@ version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4e69bf016dc406eff7d53a7d3f7cf1c2e72c82b9088aac1118591e36dd2cd3e9" dependencies = [ - "bitcoin_hashes", + "bitcoin_hashes 0.12.0", "rand", - "rand_core", + "rand_core 0.6.4", "serde", "unicode-normalization", ] @@ -2341,7 +3180,7 @@ version = "3.6.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "306800abfa29c7f16596b5970a588435e3d5b3149683d00c12b699cc19f895ee" dependencies = [ - "arrayvec", + "arrayvec 0.7.4", "bitvec", "byte-slice-cast", "bytes", @@ -2356,12 +3195,18 @@ version = "3.6.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d830939c76d294956402033aee57a6da7b438f2294eb94864c37b0569053a42c" dependencies = [ - "proc-macro-crate", + "proc-macro-crate 3.1.0", "proc-macro2", "quote", "syn 1.0.109", ] +[[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" @@ -2382,7 +3227,7 @@ dependencies = [ "libc", "redox_syscall", "smallvec", - "windows-targets 0.52.5", + "windows-targets 0.52.6", ] [[package]] @@ -2392,7 +3237,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "346f04948ba92c43e8469c1ee6736c7563d71012b17d40745260fe106aac2166" dependencies = [ "base64ct", - "rand_core", + "rand_core 0.6.4", "subtle", ] @@ -2444,7 +3289,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" dependencies = [ "digest 0.10.7", - "hmac", + "hmac 0.12.1", "password-hash", "sha2 0.10.8", ] @@ -2507,6 +3352,17 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" +[[package]] +name = "piper" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" +dependencies = [ + "atomic-waker", + "fastrand 2.1.0", + "futures-io", +] + [[package]] name = "pkcs8" version = "0.10.2" @@ -2573,6 +3429,48 @@ dependencies = [ "syn 2.0.66", ] +[[package]] +name = "polling" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce" +dependencies = [ + "autocfg", + "bitflags 1.3.2", + "cfg-if", + "concurrent-queue", + "libc", + "log", + "pin-project-lite", + "windows-sys 0.48.0", +] + +[[package]] +name = "polling" +version = "3.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc2790cd301dec6cd3b7a025e4815cf825724a51c98dccfe6a3e55f05ffb6511" +dependencies = [ + "cfg-if", + "concurrent-queue", + "hermit-abi 0.4.0", + "pin-project-lite", + "rustix 0.38.34", + "tracing", + "windows-sys 0.59.0", +] + +[[package]] +name = "poly1305" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8159bd90725d2df49889a078b54f4f79e87f1f8a8444194cdca81d38f5393abf" +dependencies = [ + "cpufeatures", + "opaque-debug", + "universal-hash", +] + [[package]] name = "polyval" version = "0.6.2" @@ -2637,13 +3535,47 @@ dependencies = [ "uint", ] +[[package]] +name = "proc-macro-crate" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" +dependencies = [ + "once_cell", + "toml_edit 0.19.15", +] + [[package]] name = "proc-macro-crate" version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284" dependencies = [ - "toml_edit", + "toml_edit 0.21.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.109", + "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]] @@ -2848,7 +3780,7 @@ checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ "libc", "rand_chacha", - "rand_core", + "rand_core 0.6.4", ] [[package]] @@ -2858,9 +3790,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" dependencies = [ "ppv-lite86", - "rand_core", + "rand_core 0.6.4", ] +[[package]] +name = "rand_core" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" + [[package]] name = "rand_core" version = "0.6.4" @@ -2998,7 +3936,7 @@ dependencies = [ "http-body 1.0.0", "http-body-util", "hyper 1.3.1", - "hyper-rustls", + "hyper-rustls 0.26.0", "hyper-util", "ipnet", "js-sys", @@ -3007,7 +3945,7 @@ dependencies = [ "once_cell", "percent-encoding", "pin-project-lite", - "rustls", + "rustls 0.22.4", "rustls-pemfile 2.1.2", "rustls-pki-types", "serde", @@ -3015,13 +3953,13 @@ dependencies = [ "serde_urlencoded", "sync_wrapper", "tokio", - "tokio-rustls", + "tokio-rustls 0.25.0", "tower-service", "url", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", - "webpki-roots", + "webpki-roots 0.26.1", "winreg 0.52.0", ] @@ -3031,7 +3969,7 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" dependencies = [ - "hmac", + "hmac 0.12.1", "subtle", ] @@ -3075,6 +4013,12 @@ version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + [[package]] name = "rustc-hex" version = "2.1.0" @@ -3090,6 +4034,20 @@ dependencies = [ "semver", ] +[[package]] +name = "rustix" +version = "0.37.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fea8ca367a3a01fe35e6943c400addf443c0f57670e6ec51196f71a4b8762dd2" +dependencies = [ + "bitflags 1.3.2", + "errno", + "io-lifetimes", + "libc", + "linux-raw-sys 0.3.8", + "windows-sys 0.48.0", +] + [[package]] name = "rustix" version = "0.38.34" @@ -3099,10 +4057,22 @@ dependencies = [ "bitflags 2.5.0", "errno", "libc", - "linux-raw-sys", + "linux-raw-sys 0.4.14", "windows-sys 0.52.0", ] +[[package]] +name = "rustls" +version = "0.21.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" +dependencies = [ + "log", + "ring", + "rustls-webpki 0.101.7", + "sct", +] + [[package]] name = "rustls" version = "0.22.4" @@ -3112,11 +4082,23 @@ dependencies = [ "log", "ring", "rustls-pki-types", - "rustls-webpki", + "rustls-webpki 0.102.4", "subtle", "zeroize", ] +[[package]] +name = "rustls-native-certs" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9aace74cb666635c918e9c12bc0d348266037aa8eb599b5cba565709a8dff00" +dependencies = [ + "openssl-probe", + "rustls-pemfile 1.0.4", + "schannel", + "security-framework", +] + [[package]] name = "rustls-pemfile" version = "1.0.4" @@ -3142,6 +4124,16 @@ version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "976295e77ce332211c0d24d92c0e83e50f5c5f046d11082cea19f3df13a3562d" +[[package]] +name = "rustls-webpki" +version = "0.101.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" +dependencies = [ + "ring", + "untrusted", +] + [[package]] name = "rustls-webpki" version = "0.102.4" @@ -3159,6 +4151,17 @@ version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" +[[package]] +name = "ruzstd" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3ffab8f9715a0d455df4bbb9d21e91135aab3cd3ca187af0cd0c3c3f868fdc" +dependencies = [ + "byteorder", + "thiserror-core", + "twox-hash", +] + [[package]] name = "ryu" version = "1.0.18" @@ -3166,31 +4169,127 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" [[package]] -name = "scale-info" -version = "2.11.3" +name = "same-file" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eca070c12893629e2cc820a9761bedf6ce1dcddc9852984d1dc734b8bd9bd024" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "scale-bits" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8dd7aca73785181cc41f0bbe017263e682b585ca660540ba569133901d013ecf" dependencies = [ - "bitvec", - "cfg-if", - "derive_more", "parity-scale-codec", - "scale-info-derive", + "scale-info", "serde", ] [[package]] -name = "scale-info-derive" -version = "2.11.3" +name = "scale-decode" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d35494501194174bda522a32605929eefc9ecf7e0a326c26db1fdd85881eb62" +checksum = "f0459d00b0dbd2e765009924a78ef36b2ff7ba116292d732f00eb0ed8e465d15" dependencies = [ - "proc-macro-crate", + "parity-scale-codec", + "primitive-types", + "scale-bits", + "scale-decode-derive", + "scale-info", + "smallvec", + "thiserror", +] + +[[package]] +name = "scale-decode-derive" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4391f0dfbb6690f035f6d2a15d6a12f88cc5395c36bcc056db07ffa2a90870ec" +dependencies = [ + "darling 0.14.4", + "proc-macro-crate 1.3.1", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "scale-encode" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0401b7cdae8b8aa33725f3611a051358d5b32887ecaa0fda5953a775b2d4d76" +dependencies = [ + "parity-scale-codec", + "primitive-types", + "scale-bits", + "scale-encode-derive", + "scale-info", + "smallvec", + "thiserror", +] + +[[package]] +name = "scale-encode-derive" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "316e0fb10ec0fee266822bd641bab5e332a4ab80ef8c5b5ff35e5401a394f5a6" +dependencies = [ + "darling 0.14.4", + "proc-macro-crate 1.3.1", "proc-macro2", "quote", "syn 1.0.109", ] +[[package]] +name = "scale-info" +version = "2.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eca070c12893629e2cc820a9761bedf6ce1dcddc9852984d1dc734b8bd9bd024" +dependencies = [ + "bitvec", + "cfg-if", + "derive_more", + "parity-scale-codec", + "scale-info-derive", + "serde", +] + +[[package]] +name = "scale-info-derive" +version = "2.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d35494501194174bda522a32605929eefc9ecf7e0a326c26db1fdd85881eb62" +dependencies = [ + "proc-macro-crate 3.1.0", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "scale-value" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2096d36e94ce9bf87d8addb752423b6b19730dc88edd7cc452bb2b90573f7a7" +dependencies = [ + "base58", + "blake2", + "either", + "frame-metadata 15.1.0", + "parity-scale-codec", + "scale-bits", + "scale-decode", + "scale-encode", + "scale-info", + "serde", + "thiserror", + "yap", +] + [[package]] name = "schannel" version = "0.1.23" @@ -3200,6 +4299,33 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "schnellru" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9a8ef13a93c54d20580de1e5c413e624e53121d42fc7e2c11d10ef7f8b02367" +dependencies = [ + "ahash 0.8.11", + "cfg-if", + "hashbrown 0.13.2", +] + +[[package]] +name = "schnorrkel" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "844b7645371e6ecdf61ff246ba1958c29e802881a749ae3fb1993675d210d28d" +dependencies = [ + "arrayref", + "arrayvec 0.7.4", + "curve25519-dalek-ng", + "merlin", + "rand_core 0.6.4", + "sha2 0.9.9", + "subtle-ng", + "zeroize", +] + [[package]] name = "schnorrkel" version = "0.11.4" @@ -3208,11 +4334,11 @@ checksum = "8de18f6d8ba0aad7045f5feae07ec29899c1112584a38509a84ad7b04451eaa0" dependencies = [ "aead", "arrayref", - "arrayvec", - "curve25519-dalek", + "arrayvec 0.7.4", + "curve25519-dalek 4.1.3", "getrandom_or_panic", "merlin", - "rand_core", + "rand_core 0.6.4", "serde_bytes", "sha2 0.10.8", "subtle", @@ -3231,6 +4357,16 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" +[[package]] +name = "sct" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" +dependencies = [ + "ring", + "untrusted", +] + [[package]] name = "sec1" version = "0.7.3" @@ -3252,7 +4388,7 @@ version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "25996b82292a7a57ed3508f052cfff8640d38d32018784acd714758b43da9c8f" dependencies = [ - "bitcoin_hashes", + "bitcoin_hashes 0.12.0", "rand", "secp256k1-sys 0.8.1", "serde", @@ -3380,6 +4516,15 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_spanned" +version = "0.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb5b1b31579f3811bf615c144393417496f152e12ac8b7663bf664f4a815306d" +dependencies = [ + "serde", +] + [[package]] name = "serde_urlencoded" version = "0.7.1" @@ -3402,6 +4547,19 @@ dependencies = [ "serde", ] +[[package]] +name = "sha-1" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99cd6713db3cf16b6c84e06321e049a9b9f699826e16096d23bbcc44d15d51a6" +dependencies = [ + "block-buffer 0.9.0", + "cfg-if", + "cpufeatures", + "digest 0.9.0", + "opaque-debug", +] + [[package]] name = "sha1" version = "0.10.6" @@ -3472,7 +4630,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" dependencies = [ "digest 0.10.7", - "rand_core", + "rand_core 0.6.4", ] [[package]] @@ -3481,6 +4639,18 @@ version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" +[[package]] +name = "simple-mermaid" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "620a1d43d70e142b1d46a929af51d44f383db9c7a2ec122de2cd992ccfcf3c18" + +[[package]] +name = "siphasher" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" + [[package]] name = "slab" version = "0.4.9" @@ -3496,6 +4666,130 @@ version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" +[[package]] +name = "smol" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13f2b548cd8447f8de0fdf1c592929f70f4fc7039a05e47404b0d096ec6987a1" +dependencies = [ + "async-channel 1.9.0", + "async-executor", + "async-fs", + "async-io 1.13.0", + "async-lock 2.8.0", + "async-net", + "async-process", + "blocking", + "futures-lite 1.13.0", +] + +[[package]] +name = "smoldot" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cce5e2881b30bad7ef89f383a816ad0b22c45915911f28499026de4a76d20ee" +dependencies = [ + "arrayvec 0.7.4", + "async-lock 2.8.0", + "atomic", + "base64 0.21.7", + "bip39", + "blake2-rfc", + "bs58", + "crossbeam-queue", + "derive_more", + "ed25519-zebra 3.1.0", + "either", + "event-listener 2.5.3", + "fnv", + "futures-channel", + "futures-util", + "hashbrown 0.14.5", + "hex", + "hmac 0.12.1", + "itertools 0.10.5", + "libsecp256k1", + "merlin", + "no-std-net", + "nom", + "num-bigint", + "num-rational", + "num-traits", + "pbkdf2", + "pin-project", + "rand", + "rand_chacha", + "ruzstd", + "schnorrkel 0.10.2", + "serde", + "serde_json", + "sha2 0.10.8", + "siphasher", + "slab", + "smallvec", + "smol", + "snow", + "soketto", + "tiny-keccak", + "twox-hash", + "wasmi", +] + +[[package]] +name = "smoldot-light" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b2f7b4687b83ff244ef6137735ed5716ad37dcdf3ee16c4eb1a32fb9808fa47" +dependencies = [ + "async-lock 2.8.0", + "blake2-rfc", + "derive_more", + "either", + "event-listener 2.5.3", + "fnv", + "futures-channel", + "futures-util", + "hashbrown 0.14.5", + "hex", + "itertools 0.10.5", + "log", + "lru", + "parking_lot", + "rand", + "serde", + "serde_json", + "siphasher", + "slab", + "smol", + "smoldot", +] + +[[package]] +name = "snow" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "850948bee068e713b8ab860fe1adc4d109676ab4c3b621fd8147f06b261f2f85" +dependencies = [ + "aes-gcm", + "blake2", + "chacha20poly1305", + "curve25519-dalek 4.1.3", + "rand_core 0.6.4", + "rustc_version", + "sha2 0.10.8", + "subtle", +] + +[[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.7" @@ -3506,6 +4800,50 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "soketto" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41d1c5305e39e09653383c2c7244f2f78b3bcae37cf50c64cb4789c9f5096ec2" +dependencies = [ + "base64 0.13.1", + "bytes", + "futures", + "httparse", + "log", + "rand", + "sha-1", +] + +[[package]] +name = "sp-application-crypto" +version = "38.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d8133012faa5f75b2f0b1619d9f720c1424ac477152c143e5f7dbde2fe1a958" +dependencies = [ + "parity-scale-codec", + "scale-info", + "serde", + "sp-core", + "sp-io", +] + +[[package]] +name = "sp-arithmetic" +version = "26.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46d0d0a4c591c421d3231ddd5e27d828618c24456d51445d21a1f79fcee97c23" +dependencies = [ + "docify", + "integer-sqrt", + "num-traits", + "parity-scale-codec", + "scale-info", + "serde", + "sp-std 14.0.0", + "static_assertions", +] + [[package]] name = "sp-core" version = "34.0.0" @@ -3518,7 +4856,7 @@ dependencies = [ "bounded-collections", "bs58", "dyn-clonable", - "ed25519-zebra", + "ed25519-zebra 4.0.3", "futures", "hash-db", "hash256-std-hasher", @@ -3535,7 +4873,7 @@ dependencies = [ "primitive-types", "rand", "scale-info", - "schnorrkel", + "schnorrkel 0.11.4", "secp256k1 0.28.2", "secrecy", "serde", @@ -3543,7 +4881,7 @@ dependencies = [ "sp-debug-derive", "sp-externalities", "sp-runtime-interface", - "sp-std", + "sp-std 14.0.0", "sp-storage", "ss58-registry", "substrate-bip39", @@ -3553,6 +4891,21 @@ dependencies = [ "zeroize", ] +[[package]] +name = "sp-core-hashing" +version = "9.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ee599a8399448e65197f9a6cee338ad192e9023e35e31f22382964c3c174c68" +dependencies = [ + "blake2b_simd", + "byteorder", + "digest 0.10.7", + "sha2 0.10.8", + "sha3", + "sp-std 8.0.0", + "twox-hash", +] + [[package]] name = "sp-crypto-hashing" version = "0.1.0" @@ -3586,7 +4939,84 @@ checksum = "a904407d61cb94228c71b55a9d3708e9d6558991f9e83bd42bd91df37a159d30" dependencies = [ "environmental", "parity-scale-codec", - "sp-storage", + "sp-storage", +] + +[[package]] +name = "sp-io" +version = "38.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59ef7eb561bb4839cc8424ce58c5ea236cbcca83f26fcc0426d8decfe8aa97d4" +dependencies = [ + "bytes", + "docify", + "ed25519-dalek", + "libsecp256k1", + "log", + "parity-scale-codec", + "polkavm-derive", + "rustversion", + "secp256k1 0.28.2", + "sp-core", + "sp-crypto-hashing", + "sp-externalities", + "sp-keystore", + "sp-runtime-interface", + "sp-state-machine", + "sp-tracing", + "sp-trie", + "tracing", + "tracing-core", +] + +[[package]] +name = "sp-keystore" +version = "0.40.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0248b4d784cb4a01472276928977121fa39d977a5bb24793b6b15e64b046df42" +dependencies = [ + "parity-scale-codec", + "parking_lot", + "sp-core", + "sp-externalities", +] + +[[package]] +name = "sp-panic-handler" +version = "13.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8f5a17a0a11de029a8b811cb6e8b32ce7e02183cc04a3e965c383246798c416" +dependencies = [ + "backtrace", + "lazy_static", + "regex", +] + +[[package]] +name = "sp-runtime" +version = "39.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5641385c2cd8e2252aacf35e0aff2f236331dfaea8dc11c5a4ec6bb36544450" +dependencies = [ + "docify", + "either", + "hash256-std-hasher", + "impl-trait-for-tuples", + "log", + "num-traits", + "parity-scale-codec", + "paste", + "rand", + "scale-info", + "serde", + "simple-mermaid", + "sp-application-crypto", + "sp-arithmetic", + "sp-core", + "sp-io", + "sp-std 14.0.0", + "sp-weights", + "tracing", ] [[package]] @@ -3602,7 +5032,7 @@ dependencies = [ "primitive-types", "sp-externalities", "sp-runtime-interface-proc-macro", - "sp-std", + "sp-std 14.0.0", "sp-storage", "sp-tracing", "sp-wasm-interface", @@ -3617,12 +5047,39 @@ checksum = "0195f32c628fee3ce1dfbbf2e7e52a30ea85f3589da9fe62a8b816d70fc06294" dependencies = [ "Inflector", "expander", - "proc-macro-crate", + "proc-macro-crate 3.1.0", "proc-macro2", "quote", "syn 2.0.66", ] +[[package]] +name = "sp-state-machine" +version = "0.43.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "930104d6ae882626e8880d9b1578da9300655d337a3ffb45e130c608b6c89660" +dependencies = [ + "hash-db", + "log", + "parity-scale-codec", + "parking_lot", + "rand", + "smallvec", + "sp-core", + "sp-externalities", + "sp-panic-handler", + "sp-trie", + "thiserror", + "tracing", + "trie-db", +] + +[[package]] +name = "sp-std" +version = "8.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53458e3c57df53698b3401ec0934bea8e8cfce034816873c0b0abbd83d7bac0d" + [[package]] name = "sp-std" version = "14.0.0" @@ -3654,6 +5111,30 @@ dependencies = [ "tracing-subscriber", ] +[[package]] +name = "sp-trie" +version = "37.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6282aef9f4b6ecd95a67a45bcdb67a71f4a4155c09a53c10add4ffe823db18cd" +dependencies = [ + "ahash 0.8.11", + "hash-db", + "lazy_static", + "memory-db", + "nohash-hasher", + "parity-scale-codec", + "parking_lot", + "rand", + "scale-info", + "schnellru", + "sp-core", + "sp-externalities", + "thiserror", + "tracing", + "trie-db", + "trie-root", +] + [[package]] name = "sp-wasm-interface" version = "21.0.0" @@ -3665,6 +5146,21 @@ dependencies = [ "parity-scale-codec", ] +[[package]] +name = "sp-weights" +version = "31.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93cdaf72a1dad537bbb130ba4d47307ebe5170405280ed1aa31fa712718a400e" +dependencies = [ + "bounded-collections", + "parity-scale-codec", + "scale-info", + "serde", + "smallvec", + "sp-arithmetic", + "sp-debug-derive", +] + [[package]] name = "spin" version = "0.9.8" @@ -3711,6 +5207,18 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + [[package]] name = "strum" version = "0.25.0" @@ -3739,9 +5247,9 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ca58ffd742f693dc13d69bdbb2e642ae239e0053f6aab3b104252892f856700a" dependencies = [ - "hmac", + "hmac 0.12.1", "pbkdf2", - "schnorrkel", + "schnorrkel 0.11.4", "sha2 0.10.8", "zeroize", ] @@ -3752,6 +5260,106 @@ version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" +[[package]] +name = "subtle-ng" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "734676eb262c623cec13c3155096e08d1f8f29adce39ba17948b18dad1e54142" + +[[package]] +name = "subxt" +version = "0.30.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ba02ada83ba2640c46e200a1758cc83ce876a16326d2c52ca5db41b7d6645ce" +dependencies = [ + "base58", + "blake2", + "derivative", + "either", + "frame-metadata 16.0.0", + "futures", + "hex", + "impl-serde", + "jsonrpsee", + "parity-scale-codec", + "primitive-types", + "scale-bits", + "scale-decode", + "scale-encode", + "scale-info", + "scale-value", + "serde", + "serde_json", + "sp-core-hashing", + "subxt-lightclient", + "subxt-macro", + "subxt-metadata", + "thiserror", + "tracing", +] + +[[package]] +name = "subxt-codegen" +version = "0.30.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3213eb04567e710aa253b94de74337c7b663eea52114805b8723129763282779" +dependencies = [ + "frame-metadata 16.0.0", + "heck 0.4.1", + "hex", + "jsonrpsee", + "parity-scale-codec", + "proc-macro2", + "quote", + "scale-info", + "subxt-metadata", + "syn 2.0.66", + "thiserror", + "tokio", +] + +[[package]] +name = "subxt-lightclient" +version = "0.30.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439a235bedd0e460c110e5341d919ec3a27f9be3dd4c1c944daad8a9b54d396d" +dependencies = [ + "futures", + "futures-util", + "serde", + "serde_json", + "smoldot-light", + "thiserror", + "tokio", + "tokio-stream", + "tracing", +] + +[[package]] +name = "subxt-macro" +version = "0.30.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfda460cc5f701785973382c589e9bb12c23bb8d825bfc3ac547b7c672aba1c0" +dependencies = [ + "darling 0.20.10", + "proc-macro-error", + "subxt-codegen", + "syn 2.0.66", +] + +[[package]] +name = "subxt-metadata" +version = "0.30.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0283bd02163913fbd0a5153d0b179533e48b239b953fa4e43baa27c73f18861c" +dependencies = [ + "frame-metadata 16.0.0", + "parity-scale-codec", + "scale-info", + "sp-core-hashing", + "thiserror", +] + [[package]] name = "syn" version = "1.0.109" @@ -3814,11 +5422,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" dependencies = [ "cfg-if", - "fastrand", - "rustix", + "fastrand 2.1.0", + "rustix 0.38.34", "windows-sys 0.52.0", ] +[[package]] +name = "termcolor" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" +dependencies = [ + "winapi-util", +] + [[package]] name = "thiserror" version = "1.0.61" @@ -3828,6 +5445,26 @@ dependencies = [ "thiserror-impl", ] +[[package]] +name = "thiserror-core" +version = "1.0.50" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c001ee18b7e5e3f62cbf58c7fe220119e68d902bb7443179c0c8aef30090e999" +dependencies = [ + "thiserror-core-impl", +] + +[[package]] +name = "thiserror-core-impl" +version = "1.0.50" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4c60d69f36615a077cc7663b9cb8e42275722d23e58a7fa3d2c7f2915d09d04" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", +] + [[package]] name = "thiserror-impl" version = "1.0.61" @@ -3887,7 +5524,7 @@ dependencies = [ "parking_lot", "pin-project-lite", "signal-hook-registry", - "socket2", + "socket2 0.5.7", "tokio-macros", "windows-sys 0.48.0", ] @@ -3913,13 +5550,23 @@ dependencies = [ "tokio", ] +[[package]] +name = "tokio-rustls" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" +dependencies = [ + "rustls 0.21.12", + "tokio", +] + [[package]] name = "tokio-rustls" version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "775e0c0f0adb3a2f22a00c4745d728b479985fc15ee7ca6a2608388c5569860f" dependencies = [ - "rustls", + "rustls 0.22.4", "rustls-pki-types", "tokio", ] @@ -3956,16 +5603,43 @@ checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1" dependencies = [ "bytes", "futures-core", + "futures-io", "futures-sink", "pin-project-lite", "tokio", ] +[[package]] +name = "toml" +version = "0.8.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac2caab0bf757388c6c0ae23b3293fdb463fee59434529014f85e3263b995c28" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit 0.22.16", +] + [[package]] name = "toml_datetime" version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4badfd56924ae69bcc9039335b2e017639ce3f9b001c393c1b2d1ef846ce2cbf" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_edit" +version = "0.19.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +dependencies = [ + "indexmap", + "toml_datetime", + "winnow 0.5.40", +] [[package]] name = "toml_edit" @@ -3975,7 +5649,20 @@ checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" dependencies = [ "indexmap", "toml_datetime", - "winnow", + "winnow 0.5.40", +] + +[[package]] +name = "toml_edit" +version = "0.22.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "278f3d518e152219c994ce877758516bca5e118eaed6996192a774fb9fbf0788" +dependencies = [ + "indexmap", + "serde", + "serde_spanned", + "toml_datetime", + "winnow 0.6.18", ] [[package]] @@ -4011,6 +5698,7 @@ version = "0.1.40" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" dependencies = [ + "log", "pin-project-lite", "tracing-attributes", "tracing-core", @@ -4080,6 +5768,27 @@ dependencies = [ "tracing-serde", ] +[[package]] +name = "trie-db" +version = "0.29.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c992b4f40c234a074d48a757efeabb1a6be88af84c0c23f7ca158950cb0ae7f" +dependencies = [ + "hash-db", + "log", + "rustc-hex", + "smallvec", +] + +[[package]] +name = "trie-root" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4ed310ef5ab98f5fa467900ed906cb9232dd5376597e00fd4cba2a449d06c0b" +dependencies = [ + "hash-db", +] + [[package]] name = "try-lock" version = "0.2.5" @@ -4241,13 +5950,29 @@ dependencies = [ "digest 0.10.7", "rand", "rand_chacha", - "rand_core", + "rand_core 0.6.4", "sha2 0.10.8", "sha3", "thiserror", "zeroize", ] +[[package]] +name = "waker-fn" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "317211a0dc0ceedd78fb2ca9a44aed3d7b9b26f81870d485c07122b4350673b7" + +[[package]] +name = "walkdir" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" +dependencies = [ + "same-file", + "winapi-util", +] + [[package]] name = "want" version = "0.3.1" @@ -4354,6 +6079,47 @@ dependencies = [ "syn 2.0.66", ] +[[package]] +name = "wasmi" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51fb5c61993e71158abf5bb863df2674ca3ec39ed6471c64f07aeaf751d67b4" +dependencies = [ + "intx", + "smallvec", + "spin", + "wasmi_arena", + "wasmi_core", + "wasmparser-nostd", +] + +[[package]] +name = "wasmi_arena" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "104a7f73be44570cac297b3035d76b169d6599637631cf37a1703326a0727073" + +[[package]] +name = "wasmi_core" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "624e6333e861ef49095d2d678b76ebf30b06bf37effca845be7e5b87c90071b7" +dependencies = [ + "downcast-rs", + "libm", + "num-traits", + "paste", +] + +[[package]] +name = "wasmparser-nostd" +version = "0.100.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5a015fe95f3504a94bb1462c717aae75253e39b9dd6c3fb1062c934535c64aa" +dependencies = [ + "indexmap-nostd", +] + [[package]] name = "web-sys" version = "0.3.69" @@ -4370,7 +6136,7 @@ version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5388522c899d1e1c96a4c307e3797e0f697ba7c77dd8e0e625ecba9dd0342937" dependencies = [ - "arrayvec", + "arrayvec 0.7.4", "base64 0.21.7", "bytes", "derive_more", @@ -4399,6 +6165,12 @@ dependencies = [ "wasm-bindgen-futures", ] +[[package]] +name = "webpki-roots" +version = "0.25.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" + [[package]] name = "webpki-roots" version = "0.26.1" @@ -4417,7 +6189,7 @@ dependencies = [ "either", "home", "once_cell", - "rustix", + "rustix 0.38.34", ] [[package]] @@ -4436,6 +6208,15 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" +[[package]] +name = "winapi-util" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" +dependencies = [ + "windows-sys 0.52.0", +] + [[package]] name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" @@ -4448,7 +6229,7 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" dependencies = [ - "windows-targets 0.52.5", + "windows-targets 0.52.6", ] [[package]] @@ -4466,7 +6247,16 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows-targets 0.52.5", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets 0.52.6", ] [[package]] @@ -4486,18 +6276,18 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ - "windows_aarch64_gnullvm 0.52.5", - "windows_aarch64_msvc 0.52.5", - "windows_i686_gnu 0.52.5", + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", "windows_i686_gnullvm", - "windows_i686_msvc 0.52.5", - "windows_x86_64_gnu 0.52.5", - "windows_x86_64_gnullvm 0.52.5", - "windows_x86_64_msvc 0.52.5", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", ] [[package]] @@ -4508,9 +6298,9 @@ checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" [[package]] name = "windows_aarch64_gnullvm" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" [[package]] name = "windows_aarch64_msvc" @@ -4520,9 +6310,9 @@ checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" [[package]] name = "windows_aarch64_msvc" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" [[package]] name = "windows_i686_gnu" @@ -4532,15 +6322,15 @@ checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" [[package]] name = "windows_i686_gnu" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" [[package]] name = "windows_i686_gnullvm" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" [[package]] name = "windows_i686_msvc" @@ -4550,9 +6340,9 @@ checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" [[package]] name = "windows_i686_msvc" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" [[package]] name = "windows_x86_64_gnu" @@ -4562,9 +6352,9 @@ checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" [[package]] name = "windows_x86_64_gnu" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" [[package]] name = "windows_x86_64_gnullvm" @@ -4574,9 +6364,9 @@ checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" [[package]] name = "windows_x86_64_gnullvm" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" [[package]] name = "windows_x86_64_msvc" @@ -4586,9 +6376,9 @@ checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" [[package]] name = "windows_x86_64_msvc" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winnow" @@ -4599,6 +6389,15 @@ dependencies = [ "memchr", ] +[[package]] +name = "winnow" +version = "0.6.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68a9bda4691f099d435ad181000724da8e5899daa10713c2d432552b9ccd3a6f" +dependencies = [ + "memchr", +] + [[package]] name = "winreg" version = "0.50.0" @@ -4628,6 +6427,12 @@ dependencies = [ "tap", ] +[[package]] +name = "yap" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2a7eb6d82a11e4d0b8e6bda8347169aff4ccd8235d039bba7c47482d977dcf7" + [[package]] name = "zerocopy" version = "0.7.34" diff --git a/packages/kos-sdk/Cargo.toml b/packages/kos-sdk/Cargo.toml index 4f8e89d..6616f51 100644 --- a/packages/kos-sdk/Cargo.toml +++ b/packages/kos-sdk/Cargo.toml @@ -56,6 +56,8 @@ pbjson-types = { workspace = true } prost = { workspace = true } base64 = "0.22.1" sp-core = "34.0.0" +sp-runtime = "39.0.0" +subxt = "0.30.1" [dev-dependencies] tokio = { version = "1", features = ["full"] } diff --git a/packages/kos-sdk/artifacts/polkadot_metadata_small.scale b/packages/kos-sdk/artifacts/polkadot_metadata_small.scale new file mode 100644 index 0000000000000000000000000000000000000000..41eed99dc664aa7fe4de86f2ac8bd7371a197e15 GIT binary patch literal 103661 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 Y$`7Z?b`w@JR2m|NJJOyxa%bzm0X`(IZvX%Q literal 0 HcmV?d00001 diff --git a/packages/kos-sdk/src/chains/polkadot/mod.rs b/packages/kos-sdk/src/chains/polkadot/mod.rs index 06e08ef..4514b1a 100644 --- a/packages/kos-sdk/src/chains/polkadot/mod.rs +++ b/packages/kos-sdk/src/chains/polkadot/mod.rs @@ -14,6 +14,10 @@ use kos_types::number::BigNumber; use sp_core::crypto::Ss58Codec; use sp_core::{sr25519, Pair}; use std::str::FromStr; +use subxt::ext::codec::Decode; +use subxt::tx::SubmittableExtrinsic; +use subxt::utils::H256; +use subxt::{Metadata, OfflineClient, PolkadotConfig}; use wasm_bindgen::prelude::*; #[derive(Debug, Copy, Clone)] @@ -191,11 +195,55 @@ impl DOT { let address = address::Address::from_str(addr); Ok(address.is_ok()) } + + pub fn decode_tx( + genesis_hash: &str, + spec_version: u32, + transaction_version: u32, + tx: &str, + ) -> Result, Error> { + let client = DOT::get_client(genesis_hash, spec_version, transaction_version)?; + let tx_bytes = hex::decode(tx)?; + + let extrinsic = SubmittableExtrinsic::from_bytes(client.clone(), tx_bytes); + Ok(Vec::from((extrinsic.encoded()))) + } +} + +impl DOT { + pub fn get_client( + genesis_hash: &str, + spec_version: u32, + transaction_version: u32, + ) -> Result, Error> { + let _genesis_hash = { + let bytes = hex::decode(genesis_hash)?; + H256::from_slice(&bytes) + }; + + let _runtime_version = subxt::rpc::types::RuntimeVersion { + spec_version, + transaction_version, + other: Default::default(), + }; + + let metadata = { + let bytes = std::fs::read("./artifacts/polkadot_metadata_small.scale").unwrap(); + Metadata::decode(&mut &*bytes).unwrap() + }; + + Ok(OfflineClient::::new( + _genesis_hash, + _runtime_version, + metadata, + )) + } } // Test keypair from mnemonic #[cfg(test)] mod tests { + use subxt::utils::H256; #[test] fn test_keypair_from_mnemonic() { @@ -239,4 +287,34 @@ mod tests { let valid = super::DOT::verify_digest(&digest, &signature, &address).unwrap(); assert_eq!(valid, true); } + + #[test] + fn test_get_client() { + let client = super::DOT::get_client( + "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + 1002007, + 26, + ) + .unwrap(); + + assert_eq!( + client.genesis_hash(), + H256::from(&[ + 145, 177, 113, 187, 21, 142, 45, 56, 72, 250, 35, 169, 241, 194, 81, 130, 251, 142, + 32, 49, 59, 44, 30, 180, 146, 25, 218, 122, 112, 206, 144, 195 + ]) + ); + } + + #[test] + fn test_decode_tx() { + let tx = super::DOT::decode_tx( + "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + 1002007, + 26, + "0503002534454d30f8a028e42654d6b535e0651d1d026ddf115cef59ae1dd71bae074e9101008e8020000000174a0f001a00000091b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c391b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c300" + ).unwrap(); + + assert_eq!(tx.len(), 117); + } } From ee6067ff0d3601c684320972d848426f1e3c9bf4 Mon Sep 17 00:00:00 2001 From: Pedro Camboim Date: Thu, 26 Sep 2024 09:27:34 -0300 Subject: [PATCH 13/25] feat: transaction serialization --- Cargo.lock | 2 +- packages/kos-sdk/src/chains/mod.rs | 1 + packages/kos-sdk/src/chains/polkadot/mod.rs | 33 ++++++++++--- .../src/chains/polkadot/transaction.rs | 48 +++++++++++++++++++ packages/kos-sdk/src/models.rs | 4 ++ 5 files changed, 80 insertions(+), 8 deletions(-) create mode 100644 packages/kos-sdk/src/chains/polkadot/transaction.rs diff --git a/Cargo.lock b/Cargo.lock index 17f6029..58d9b3f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6214,7 +6214,7 @@ version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] diff --git a/packages/kos-sdk/src/chains/mod.rs b/packages/kos-sdk/src/chains/mod.rs index 4f52df6..b3977f6 100644 --- a/packages/kos-sdk/src/chains/mod.rs +++ b/packages/kos-sdk/src/chains/mod.rs @@ -16,6 +16,7 @@ pub use polygon::MATIC; pub use tron::TRX; pub use ethereum::transaction::Transaction as ETHTransaction; +pub use polkadot::transaction::Transaction as DOTTransaction; pub use polygon::Transaction as MATICTransaction; pub use self::bitcoin::transaction::BTCTransaction; diff --git a/packages/kos-sdk/src/chains/polkadot/mod.rs b/packages/kos-sdk/src/chains/polkadot/mod.rs index 4514b1a..6fa716f 100644 --- a/packages/kos-sdk/src/chains/polkadot/mod.rs +++ b/packages/kos-sdk/src/chains/polkadot/mod.rs @@ -1,11 +1,14 @@ mod address; +pub mod transaction; +use crate::chains::DOTTransaction; use crate::models::BroadcastResult; use crate::{ chain::{self, BaseChain}, models, models::{PathOptions, Transaction, TransactionRaw}, }; +use base64::{engine::general_purpose as b64_engine, Engine}; use kos_crypto::keypair::KeyPair; use kos_crypto::sr25519::Sr25519KeyPair; use kos_types::error::Error; @@ -14,6 +17,7 @@ use kos_types::number::BigNumber; use sp_core::crypto::Ss58Codec; use sp_core::{sr25519, Pair}; use std::str::FromStr; +use subxt::client::OfflineClientT; use subxt::ext::codec::Decode; use subxt::tx::SubmittableExtrinsic; use subxt::utils::H256; @@ -208,6 +212,21 @@ impl DOT { let extrinsic = SubmittableExtrinsic::from_bytes(client.clone(), tx_bytes); Ok(Vec::from((extrinsic.encoded()))) } + + pub fn tx_from_raw(raw: &str) -> Result { + let b64 = b64_engine::STANDARD; + + let bytes = b64.decode(raw).unwrap(); + + let tx = DOTTransaction::from_bytes(bytes).unwrap(); + + Ok(Transaction { + chain: crate::chain::Chain::DOT, + sender: tx.clone().address, + hash: Hash::default(), + data: Some(TransactionRaw::Polkadot(tx)), + }) + } } impl DOT { @@ -308,13 +327,13 @@ mod tests { #[test] fn test_decode_tx() { - let tx = super::DOT::decode_tx( - "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - 1002007, - 26, - "0503002534454d30f8a028e42654d6b535e0651d1d026ddf115cef59ae1dd71bae074e9101008e8020000000174a0f001a00000091b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c391b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c300" - ).unwrap(); + let raw = "eyJzcGVjVmVyc2lvbiI6IjB4MDAwZjRkZjgiLCJ0cmFuc2FjdGlvblZlcnNpb24iOiIweDAwMDAwMDFhIiwiYWRkcmVzcyI6IjE0bTVvcUxFRFhNZXlkeVU4NEUyZ01NeWtLVHQ3OFFCUUZXTmpLaG5kbTFiZ0NhWCIsImFzc2V0SWQiOiJudWxsIiwiYmxvY2tIYXNoIjoiMHg2MGY4ZmFhNmI1ZGQwZmViYjE3OGU0MmViNjQ0NzE5MzU3YWU1NTViNGNiYWVmZGIzMjIwNGFmMzc5ZjRkNTg2IiwiYmxvY2tOdW1iZXIiOiIweDAxNThmYWE2IiwiZXJhIjoiMHg2NTAyIiwiZ2VuZXNpc0hhc2giOiIweDkxYjE3MWJiMTU4ZTJkMzg0OGZhMjNhOWYxYzI1MTgyZmI4ZTIwMzEzYjJjMWViNDkyMTlkYTdhNzBjZTkwYzMiLCJtZXRhZGF0YUhhc2giOiJudWxsIiwibWV0aG9kIjoiMHgwNTAzMDBhNjUzYWU3OTY2NTU2NWJhN2ZjNjgyYzM4NWIzYzAzOGMyMDkxYWI2ZDYwNTMzNTViOTk1MGExMDhhYzQ4YjA2MDAiLCJtb2RlIjowLCJub25jZSI6IjB4MDAwMDAwMDAiLCJzaWduZWRFeHRlbnNpb25zIjpbIkNoZWNrTm9uWmVyb1NlbmRlciIsIkNoZWNrU3BlY1ZlcnNpb24iLCJDaGVja1R4VmVyc2lvbiIsIkNoZWNrR2VuZXNpcyIsIkNoZWNrTW9ydGFsaXR5IiwiQ2hlY2tOb25jZSIsIkNoZWNrV2VpZ2h0IiwiQ2hhcmdlVHJhbnNhY3Rpb25QYXltZW50IiwiUHJldmFsaWRhdGVBdHRlc3RzIiwiQ2hlY2tNZXRhZGF0YUhhc2giXSwidGlwIjoiMHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsInZlcnNpb24iOjQsIndpdGhTaWduZWRUcmFuc2FjdGlvbiI6dHJ1ZX0="; - assert_eq!(tx.len(), 117); + let tx = super::DOT::tx_from_raw(raw).unwrap(); + + assert_eq!( + tx.sender, + "14m5oqLEDXMeydyU84E2gMMykKTt78QBQFWNjKhndm1bgCaX" + ); } } diff --git a/packages/kos-sdk/src/chains/polkadot/transaction.rs b/packages/kos-sdk/src/chains/polkadot/transaction.rs new file mode 100644 index 0000000..ed22f0d --- /dev/null +++ b/packages/kos-sdk/src/chains/polkadot/transaction.rs @@ -0,0 +1,48 @@ +use serde::{Deserialize, Serialize}; + +#[derive(Serialize, Deserialize, Clone, Debug)] +pub struct Transaction { + #[serde(rename = "specVersion")] + pub spec_version: String, + #[serde(rename = "transactionVersion")] + pub transaction_version: String, + pub address: String, + #[serde(rename = "assetId")] + pub asset_id: Option, + #[serde(rename = "blockHash")] + pub block_hash: String, + #[serde(rename = "blockNumber")] + pub block_number: String, + pub era: String, + #[serde(rename = "genesisHash")] + pub genesis_hash: String, + #[serde(rename = "metadataHash")] + pub metadata_hash: Option, + pub method: String, + pub mode: i64, + pub nonce: String, + #[serde(rename = "signedExtensions")] + pub signed_extensions: Vec, + pub tip: String, + pub version: i64, + #[serde(rename = "withSignedTransaction")] + pub with_signed_transaction: bool, +} + +impl Transaction { + pub fn from_bytes(bytes: Vec) -> Result { + let tx = match serde_json::from_slice(&bytes) { + Ok(tx) => tx, + Err(e) => return Err(format!("Error deserializing transaction: {}", e)), + }; + Ok(tx) + } + + pub fn to_bytes(&self) -> Result, String> { + let bytes = match serde_json::to_vec(&self) { + Ok(bytes) => bytes, + Err(e) => return Err(format!("Error serializing transaction: {}", e)), + }; + Ok(bytes) + } +} diff --git a/packages/kos-sdk/src/models.rs b/packages/kos-sdk/src/models.rs index a9be80d..efce54b 100644 --- a/packages/kos-sdk/src/models.rs +++ b/packages/kos-sdk/src/models.rs @@ -70,6 +70,7 @@ kos_types::enum_thing! { Ethereum(super::chains::ETHTransaction), Polygon(super::chains::MATICTransaction), Bitcoin(super::chains::BTCTransaction), + Polkadot(super::chains::DOTTransaction) } } @@ -180,6 +181,9 @@ impl Transaction { TransactionRaw::Bitcoin(data) => { serde_json::to_string(&data.tx).map_err(|e| e.into()) } + TransactionRaw::Polkadot(data) => { + serde_json::to_string(&data).map_err(|e| e.into()) + } }, None => Err(Error::InvalidTransaction("no data found".to_string())), } From dd42d93db8c9a0ab793b7668026796c05381d229 Mon Sep 17 00:00:00 2001 From: Pedro Camboim Date: Mon, 14 Oct 2024 12:33:29 -0300 Subject: [PATCH 14/25] feat: decode call data --- Cargo.lock | 2013 +++++++++-------- packages/kos-sdk/Cargo.toml | 4 +- .../artifacts/polkadot_metadata_full.scale | Bin 0 -> 421187 bytes .../artifacts/v14_metadata_polkadot.scale | Bin 0 -> 269807 bytes packages/kos-sdk/src/chains/polkadot/mod.rs | 136 +- 5 files changed, 1214 insertions(+), 939 deletions(-) create mode 100644 packages/kos-sdk/artifacts/polkadot_metadata_full.scale create mode 100644 packages/kos-sdk/artifacts/v14_metadata_polkadot.scale diff --git a/Cargo.lock b/Cargo.lock index 58d9b3f..5ed6514 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -14,18 +14,18 @@ dependencies = [ [[package]] name = "addr2line" -version = "0.22.0" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678" +checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" dependencies = [ "gimli", ] [[package]] -name = "adler" -version = "1.0.2" +name = "adler2" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" [[package]] name = "aead" @@ -62,17 +62,6 @@ dependencies = [ "subtle", ] -[[package]] -name = "ahash" -version = "0.7.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" -dependencies = [ - "getrandom", - "once_cell", - "version_check", -] - [[package]] name = "ahash" version = "0.8.11" @@ -101,35 +90,11 @@ version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" -[[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 = "ansi_term" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" -dependencies = [ - "winapi", -] - [[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-377" @@ -268,9 +233,9 @@ checksum = "5d5dde061bd34119e902bbb2d9b90c5692635cf59fb91d582c2b68043f1b8293" [[package]] name = "arrayref" -version = "0.3.7" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545" +checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" [[package]] name = "arrayvec" @@ -283,20 +248,9 @@ dependencies = [ [[package]] name = "arrayvec" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" - -[[package]] -name = "async-channel" -version = "1.9.0" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" -dependencies = [ - "concurrent-queue", - "event-listener 2.5.3", - "futures-core", -] +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" [[package]] name = "async-channel" @@ -318,41 +272,20 @@ checksum = "30ca9a001c1e8ba5149f91a74362376cc6bc5b919d92d988668657bd570bdcec" dependencies = [ "async-task", "concurrent-queue", - "fastrand 2.1.0", - "futures-lite 2.3.0", + "fastrand", + "futures-lite", "slab", ] [[package]] name = "async-fs" -version = "1.6.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "279cf904654eeebfa37ac9bb1598880884924aab82e290aa65c9e77a0e142e06" +checksum = "ebcd09b382f40fcd159c2d695175b2ae620ffa5f3bd6f664131efff4e8b9e04a" dependencies = [ - "async-lock 2.8.0", - "autocfg", + "async-lock", "blocking", - "futures-lite 1.13.0", -] - -[[package]] -name = "async-io" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af" -dependencies = [ - "async-lock 2.8.0", - "autocfg", - "cfg-if", - "concurrent-queue", - "futures-lite 1.13.0", - "log", - "parking", - "polling 2.8.0", - "rustix 0.37.27", - "slab", - "socket2 0.4.10", - "waker-fn", + "futures-lite", ] [[package]] @@ -361,28 +294,19 @@ version = "2.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "444b0228950ee6501b3568d3c93bf1176a1fdbc3b758dcd9475046d30f4dc7e8" dependencies = [ - "async-lock 3.4.0", + "async-lock", "cfg-if", "concurrent-queue", "futures-io", - "futures-lite 2.3.0", + "futures-lite", "parking", - "polling 3.7.3", - "rustix 0.38.34", + "polling", + "rustix", "slab", "tracing", "windows-sys 0.59.0", ] -[[package]] -name = "async-lock" -version = "2.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b" -dependencies = [ - "event-listener 2.5.3", -] - [[package]] name = "async-lock" version = "3.4.0" @@ -396,30 +320,32 @@ dependencies = [ [[package]] name = "async-net" -version = "1.8.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0434b1ed18ce1cf5769b8ac540e33f01fa9471058b5e89da9e06f3c882a8c12f" +checksum = "b948000fad4873c1c9339d60f2623323a0cfd3816e5181033c6a5cb68b2accf7" dependencies = [ - "async-io 1.13.0", + "async-io", "blocking", - "futures-lite 1.13.0", + "futures-lite", ] [[package]] name = "async-process" -version = "1.8.1" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea6438ba0a08d81529c69b36700fa2f95837bfe3e776ab39cde9c14d9149da88" +checksum = "63255f1dc2381611000436537bbedfe83183faa303a5a0edaf191edef06526bb" dependencies = [ - "async-io 1.13.0", - "async-lock 2.8.0", + "async-channel", + "async-io", + "async-lock", "async-signal", + "async-task", "blocking", "cfg-if", - "event-listener 3.1.0", - "futures-lite 1.13.0", - "rustix 0.38.34", - "windows-sys 0.48.0", + "event-listener 5.3.1", + "futures-lite", + "rustix", + "tracing", ] [[package]] @@ -428,13 +354,13 @@ version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "637e00349800c0bdf8bfc21ebbc0b6524abea702b0da4168ac00d070d0c0b9f3" dependencies = [ - "async-io 2.3.4", - "async-lock 3.4.0", + "async-io", + "async-lock", "atomic-waker", "cfg-if", "futures-core", "futures-io", - "rustix 0.38.34", + "rustix", "signal-hook-registry", "slab", "windows-sys 0.59.0", @@ -442,9 +368,9 @@ dependencies = [ [[package]] name = "async-stream" -version = "0.3.5" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd56dd203fef61ac097dd65721a419ddccb106b2d2b70ba60a6b529f03961a51" +checksum = "0b5a71a6f37880a80d1d7f19efd781e4b5de42c88f0722cc13bcb6cc2cfe8476" dependencies = [ "async-stream-impl", "futures-core", @@ -453,13 +379,13 @@ dependencies = [ [[package]] name = "async-stream-impl" -version = "0.3.5" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" +checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.79", ] [[package]] @@ -470,21 +396,15 @@ checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" [[package]] name = "async-trait" -version = "0.1.82" +version = "0.1.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a27b8a3a6e1a44fa4c8baf1f653e4172e81486d4941f2237e20dc2d0cf4ddff1" +checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.79", ] -[[package]] -name = "atomic" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c59bdb34bc650a32731b31bd8f0829cc15d24a708ee31559e0bb34f2bc320cba" - [[package]] name = "atomic-polyfill" version = "1.0.3" @@ -494,6 +414,12 @@ dependencies = [ "critical-section", ] +[[package]] +name = "atomic-take" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8ab6b55fe97976e46f91ddbed8d147d966475dc29b2032757ba47e02376fbc3" + [[package]] name = "atomic-waker" version = "1.1.2" @@ -502,23 +428,23 @@ checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] name = "autocfg" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "backtrace" -version = "0.3.72" +version = "0.3.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17c6a35df3749d2e8bb1b7b21a976d82b15548788d2735b9d82f329268f71a11" +checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" dependencies = [ "addr2line", - "cc", "cfg-if", "libc", "miniz_oxide", "object", "rustc-demangle", + "windows-targets 0.52.6", ] [[package]] @@ -574,11 +500,11 @@ dependencies = [ [[package]] name = "bip39" -version = "2.0.0" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93f2635620bf0b9d4576eb7bb9a38a55df78bd1205d26fa994b25911a69f212f" +checksum = "33415e24172c1b7d6066f6d999545375ab8e1d95421d6784bdfff9496f292387" dependencies = [ - "bitcoin_hashes 0.11.0", + "bitcoin_hashes 0.13.0", ] [[package]] @@ -596,16 +522,16 @@ dependencies = [ ] [[package]] -name = "bitcoin-private" -version = "0.1.0" +name = "bitcoin-internals" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73290177011694f38ec25e165d0387ab7ea749a4b81cd4c80dae5988229f7a57" +checksum = "9425c3bf7089c983facbae04de54513cce73b41c7f9ff8c845b54e7bc64ebbfb" [[package]] -name = "bitcoin_hashes" -version = "0.11.0" +name = "bitcoin-private" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90064b8dee6815a6470d60bad07bbbaee885c0e12d04177138fa3291a01b7bc4" +checksum = "73290177011694f38ec25e165d0387ab7ea749a4b81cd4c80dae5988229f7a57" [[package]] name = "bitcoin_hashes" @@ -617,6 +543,16 @@ dependencies = [ "serde", ] +[[package]] +name = "bitcoin_hashes" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1930a4dabfebb8d7d9992db18ebe3ae2876f0a305fab206fd168df931ede293b" +dependencies = [ + "bitcoin-internals", + "hex-conservative", +] + [[package]] name = "bitflags" version = "1.3.2" @@ -625,9 +561,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.5.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" +checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" [[package]] name = "bitvec" @@ -667,8 +603,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "23285ad32269793932e830392f2fe2f83e26488fd3ec778883a93c8323735780" dependencies = [ "arrayref", - "arrayvec 0.7.4", - "constant_time_eq 0.3.0", + "arrayvec 0.7.6", + "constant_time_eq 0.3.1", ] [[package]] @@ -704,10 +640,10 @@ version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea" dependencies = [ - "async-channel 2.3.1", + "async-channel", "async-task", "futures-io", - "futures-lite 2.3.0", + "futures-lite", "piper", ] @@ -747,9 +683,9 @@ checksum = "c3ac9f8b63eca6fd385229b3675f6cc0dc5c8a5c8a54a59d4f52ffd670d87b0c" [[package]] name = "bytemuck" -version = "1.16.0" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78834c15cb5d5efe3452d58b1e8ba890dd62d21907f867f383358198e56ebca5" +checksum = "94bbb0ad554ad961ddc5da507a12a29b14e4ae5bda06b19f575a3e6079d2e2ae" [[package]] name = "byteorder" @@ -759,9 +695,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.6.0" +version = "1.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9" +checksum = "428d9aa8fbc0670b7b8d6030a7fadd0f86151cae55e4dbbece15f3780a3dfaf3" [[package]] name = "cbc" @@ -774,9 +710,18 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.98" +version = "1.1.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e80e3b6a3ab07840e1cae9b0666a63970dc28e8ed5ffbcdacbfc760c281bfc1" +dependencies = [ + "shlex", +] + +[[package]] +name = "cesu8" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41c270e7540d725e65ac7f1b212ac8ce349719624d7bcff99f8e2e488e8cf03f" +checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" [[package]] name = "cfb-mode" @@ -793,6 +738,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 = "chacha20" version = "0.9.1" @@ -804,30 +755,14 @@ dependencies = [ "cpufeatures", ] -[[package]] -name = "chacha20poly1305" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10cd79432192d1c0f4e1a0fef9527696cc039165d729fb41b3f4f4f354c2dc35" -dependencies = [ - "aead", - "chacha20", - "cipher", - "poly1305", - "zeroize", -] - [[package]] name = "chrono" version = "0.4.38" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" dependencies = [ - "android-tzdata", - "iana-time-zone", "num-traits", "serde", - "windows-targets 0.52.6", ] [[package]] @@ -838,7 +773,6 @@ checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" dependencies = [ "crypto-common", "inout", - "zeroize", ] [[package]] @@ -905,6 +839,16 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" +[[package]] +name = "combine" +version = "4.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" +dependencies = [ + "bytes", + "memchr", +] + [[package]] name = "common-path" version = "1.0.0" @@ -944,9 +888,9 @@ checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" [[package]] name = "constant_time_eq" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2" +checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" [[package]] name = "constcat" @@ -972,15 +916,15 @@ dependencies = [ [[package]] name = "core-foundation-sys" -version = "0.8.6" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "cpufeatures" -version = "0.2.12" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +checksum = "608697df725056feaccfa42cffdaeeec3fccc4ffc38358ecd19b243e716a78e0" dependencies = [ "libc", ] @@ -996,9 +940,9 @@ dependencies = [ [[package]] name = "critical-section" -version = "1.1.2" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7059fff8937831a9ae6f0fe4d658ffabf58f2ca96aa9dec1c889f936f705f216" +checksum = "f64009896348fc5af4222e9cf7d7d82a95a256c634ebcf61c53e4ea461422242" [[package]] name = "crossbeam-queue" @@ -1028,7 +972,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" dependencies = [ "generic-array", - "rand_core 0.6.4", + "rand_core", "subtle", "zeroize", ] @@ -1040,7 +984,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" dependencies = [ "generic-array", - "rand_core 0.6.4", + "rand_core", "typenum", ] @@ -1063,19 +1007,6 @@ 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" version = "4.1.3" @@ -1100,20 +1031,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", -] - -[[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", + "syn 2.0.79", ] [[package]] @@ -1161,7 +1079,7 @@ dependencies = [ "proc-macro2", "quote", "strsim 0.11.1", - "syn 2.0.66", + "syn 2.0.79", ] [[package]] @@ -1183,7 +1101,7 @@ checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ "darling_core 0.20.10", "quote", - "syn 2.0.66", + "syn 2.0.79", ] [[package]] @@ -1196,6 +1114,15 @@ dependencies = [ "zeroize", ] +[[package]] +name = "deranged" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +dependencies = [ + "powerfmt", +] + [[package]] name = "derivative" version = "2.2.0" @@ -1215,20 +1142,31 @@ checksum = "d65d7ce8132b7c0e54497a4d9a55a1c2a0912a0d786cf894472ba818fba45762" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.79", +] + +[[package]] +name = "derive-where" +version = "1.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62d671cc41a825ebabc75757b62d3d168c577f9149b2d49ece1dad1f72119d25" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.79", ] [[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", "proc-macro2", "quote", "rustc_version", - "syn 1.0.109", + "syn 2.0.79", ] [[package]] @@ -1273,7 +1211,7 @@ dependencies = [ "proc-macro2", "quote", "regex", - "syn 2.0.66", + "syn 2.0.79", "termcolor", "toml", "walkdir", @@ -1356,7 +1294,7 @@ version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4a3daa8e81a3963a60642bcc1f90a670680bd4a77535faa384e9d1c79d620871" dependencies = [ - "curve25519-dalek 4.1.3", + "curve25519-dalek", "ed25519", "serde", "sha2 0.10.8", @@ -1364,40 +1302,26 @@ dependencies = [ "zeroize", ] -[[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", - "hashbrown 0.12.3", - "hex", - "rand_core 0.6.4", - "sha2 0.9.9", - "zeroize", -] - [[package]] name = "ed25519-zebra" version = "4.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7d9ce6874da5d4415896cd45ffbc4d1cfc0c4f9c079427bd870742c30f2f65a9" dependencies = [ - "curve25519-dalek 4.1.3", + "curve25519-dalek", "ed25519", "hashbrown 0.14.5", "hex", - "rand_core 0.6.4", + "rand_core", "sha2 0.10.8", "zeroize", ] [[package]] name = "either" -version = "1.12.0" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3dca9240753cf90908d7e4aac30f630662b02aebaa1b58a3cadabdb23385b58b" +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" [[package]] name = "elliptic-curve" @@ -1412,7 +1336,7 @@ dependencies = [ "generic-array", "group", "pkcs8", - "rand_core 0.6.4", + "rand_core", "sec1", "serdect", "subtle", @@ -1425,6 +1349,12 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef1a6892d9eef45c8fa6b9e0086428a2cca8491aca8f787c534a3d6d0bcb3ced" +[[package]] +name = "embedded-io" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edd0f118536f44f5ccd48bcb8b111bdc3de888b58c74639dfb034a357d0f206d" + [[package]] name = "encoding_rs" version = "0.8.34" @@ -1467,7 +1397,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.79", ] [[package]] @@ -1548,18 +1478,11 @@ dependencies = [ [[package]] name = "event-listener" -version = "2.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" - -[[package]] -name = "event-listener" -version = "3.1.0" +version = "4.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d93877bcde0eb80ca09131a08d23f0a5c18a620b01db137dba666d18cd9b30c2" +checksum = "67b215c49b2b248c855fb73579eb1f4f26c38ffdc12973e20e07b91d78d5646e" dependencies = [ "concurrent-queue", - "parking", "pin-project-lite", ] @@ -1593,32 +1516,23 @@ dependencies = [ "blake2", "file-guard", "fs-err", - "prettyplease 0.2.20", + "prettyplease 0.2.22", "proc-macro2", "quote", - "syn 2.0.66", -] - -[[package]] -name = "fastrand" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" -dependencies = [ - "instant", + "syn 2.0.79", ] [[package]] name = "fastrand" -version = "2.1.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a" +checksum = "e8c02a5121d4ea3eb16a80748c74f5549a5665e4c21333c6098f283870fbdea6" [[package]] name = "fdeflate" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f9bfee30e4dedf0ab8b422f03af778d9612b63f502710fc500a334ebe2de645" +checksum = "d8090f921a24b04994d9929e204f50b498a33ea6ba559ffaa05e04f7ee7fb5ab" dependencies = [ "simd-adler32", ] @@ -1629,7 +1543,7 @@ version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" dependencies = [ - "rand_core 0.6.4", + "rand_core", "subtle", ] @@ -1649,6 +1563,16 @@ dependencies = [ "winapi", ] +[[package]] +name = "finito" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2384245d85162258a14b43567a9ee3598f5ae746a1581fb5d3d2cb780f0dbf95" +dependencies = [ + "futures-timer", + "pin-project", +] + [[package]] name = "fixed-hash" version = "0.8.0" @@ -1669,9 +1593,9 @@ checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" [[package]] name = "flate2" -version = "1.0.30" +version = "1.0.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f54427cfd1c7829e2a139fcefea601bf088ebca651d2bf53ebc600eac295dae" +checksum = "a1b589b4dc103969ad3cf85c950899926ec64300a1a46d76c03a6072957036f0" dependencies = [ "crc32fast", "miniz_oxide", @@ -1683,6 +1607,12 @@ 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" @@ -1747,9 +1677,9 @@ checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" [[package]] name = "futures" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" +checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" dependencies = [ "futures-channel", "futures-core", @@ -1762,9 +1692,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" dependencies = [ "futures-core", "futures-sink", @@ -1772,15 +1702,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" [[package]] name = "futures-executor" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" +checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" dependencies = [ "futures-core", "futures-task", @@ -1790,24 +1720,9 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" - -[[package]] -name = "futures-lite" -version = "1.13.0" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" -dependencies = [ - "fastrand 1.9.0", - "futures-core", - "futures-io", - "memchr", - "parking", - "pin-project-lite", - "waker-fn", -] +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" [[package]] name = "futures-lite" @@ -1815,7 +1730,7 @@ version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "52527eb5074e35e9339c6b4e8d12600c7128b68fb25dcb9fa9dec18f7c25f3a5" dependencies = [ - "fastrand 2.1.0", + "fastrand", "futures-core", "futures-io", "parking", @@ -1824,26 +1739,26 @@ dependencies = [ [[package]] name = "futures-macro" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.79", ] [[package]] name = "futures-sink" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" [[package]] name = "futures-task" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" [[package]] name = "futures-timer" @@ -1857,9 +1772,9 @@ dependencies = [ [[package]] name = "futures-util" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" dependencies = [ "futures-channel", "futures-core", @@ -1904,7 +1819,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6ea1015b5a70616b688dc230cfe50c8af89d972cb132d5a622814d29773b10b9" dependencies = [ "rand", - "rand_core 0.6.4", + "rand_core", ] [[package]] @@ -1919,9 +1834,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.29.0" +version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" [[package]] name = "glob" @@ -1948,7 +1863,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" dependencies = [ "ff", - "rand_core 0.6.4", + "rand_core", "subtle", ] @@ -1997,31 +1912,33 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.12.3" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" dependencies = [ - "ahash 0.7.8", + "ahash", ] [[package]] name = "hashbrown" -version = "0.13.2" +version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" dependencies = [ - "ahash 0.8.11", + "ahash", + "allocator-api2", + "serde", ] [[package]] name = "hashbrown" -version = "0.14.5" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +checksum = "1e087f84d4f86bf4b218b927129862374b72199ae7d8657835f1e89000eea4fb" dependencies = [ - "ahash 0.8.11", "allocator-api2", - "serde", + "equivalent", + "foldhash", ] [[package]] @@ -2092,6 +2009,12 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" +[[package]] +name = "hex-conservative" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "212ab92002354b4819390025006c897e8140934349e8635c9b077f47b4dcbd20" + [[package]] name = "hex_lit" version = "0.1.1" @@ -2181,9 +2104,9 @@ dependencies = [ [[package]] name = "http-body" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cac85db508abc24a2e48553ba12a996e87244a0395ce011e62b37158745d643" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ "bytes", "http 1.1.0", @@ -2191,22 +2114,22 @@ dependencies = [ [[package]] name = "http-body-util" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0475f8b2ac86659c21b64320d5d653f9efe42acd2a4e560073ec61a155a34f1d" +checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" dependencies = [ "bytes", - "futures-core", + "futures-util", "http 1.1.0", - "http-body 1.0.0", + "http-body 1.0.1", "pin-project-lite", ] [[package]] name = "httparse" -version = "1.8.0" +version = "1.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" +checksum = "7d71d3574edd2771538b901e6549113b4006ece66150fb69c0fb6d9a2adae946" [[package]] name = "httpdate" @@ -2216,9 +2139,9 @@ checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "hyper" -version = "0.14.29" +version = "0.14.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f361cde2f109281a220d4307746cdfd5ee3f410da58a70377762396775634b33" +checksum = "a152ddd61dfaec7273fe8419ab357f33aee0d914c5f4efbf0d96fa749eea5ec9" dependencies = [ "bytes", "futures-channel", @@ -2231,7 +2154,7 @@ dependencies = [ "httpdate", "itoa", "pin-project-lite", - "socket2 0.5.7", + "socket2", "tokio", "tower-service", "tracing", @@ -2240,15 +2163,15 @@ dependencies = [ [[package]] name = "hyper" -version = "1.3.1" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe575dd17d0862a9a33781c8c4696a55c320909004a67a00fb286ba8b1bc496d" +checksum = "50dfd22e0e76d0f662d429a5f80fcaf3855009297eab6a0a9f8543834744ba05" dependencies = [ "bytes", "futures-channel", "futures-util", "http 1.1.0", - "http-body 1.0.0", + "http-body 1.0.1", "httparse", "itoa", "pin-project-lite", @@ -2265,30 +2188,30 @@ checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" dependencies = [ "futures-util", "http 0.2.12", - "hyper 0.14.29", + "hyper 0.14.30", "log", "rustls 0.21.12", - "rustls-native-certs", + "rustls-native-certs 0.6.3", "tokio", "tokio-rustls 0.24.1", - "webpki-roots 0.25.4", ] [[package]] name = "hyper-rustls" -version = "0.26.0" +version = "0.27.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0bea761b46ae2b24eb4aef630d8d1c398157b6fc29e6350ecf090a0b70c952c" +checksum = "08afdbb5c31130e3034af566421053ab03787c640246a446327f550d11bcb333" dependencies = [ "futures-util", "http 1.1.0", - "hyper 1.3.1", + "hyper 1.4.1", "hyper-util", - "rustls 0.22.4", + "rustls 0.23.14", "rustls-pki-types", "tokio", - "tokio-rustls 0.25.0", + "tokio-rustls 0.26.0", "tower-service", + "webpki-roots", ] [[package]] @@ -2298,7 +2221,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" dependencies = [ "bytes", - "hyper 0.14.29", + "hyper 0.14.30", "native-tls", "tokio", "tokio-native-tls", @@ -2306,47 +2229,23 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.5" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b875924a60b96e5d7b9ae7b066540b1dd1cbd90d1828f54c92e02a283351c56" +checksum = "41296eb09f183ac68eec06e03cdbea2e759633d4067b2f6552fc2e009bcad08b" dependencies = [ "bytes", "futures-channel", "futures-util", "http 1.1.0", - "http-body 1.0.0", - "hyper 1.3.1", + "http-body 1.0.1", + "hyper 1.4.1", "pin-project-lite", - "socket2 0.5.7", + "socket2", "tokio", - "tower", "tower-service", "tracing", ] -[[package]] -name = "iana-time-zone" -version = "0.1.60" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" -dependencies = [ - "android_system_properties", - "core-foundation-sys", - "iana-time-zone-haiku", - "js-sys", - "wasm-bindgen", - "windows-core", -] - -[[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" @@ -2426,12 +2325,12 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.2.6" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" +checksum = "707907fe3c25f5424cce2cb7e1cbcafee6bdbe735ca90ef77c29e84591e5b9da" dependencies = [ "equivalent", - "hashbrown 0.14.5", + "hashbrown 0.15.0", ] [[package]] @@ -2468,34 +2367,17 @@ dependencies = [ "num-traits", ] -[[package]] -name = "intx" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6f38a50a899dc47a6d0ed5508e7f601a2e34c3a85303514b5d137f3c10a0c75" - [[package]] name = "inventory" version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f958d3d68f4167080a18141e10381e7634563984a537f2a49a30fd8e53ac5767" -[[package]] -name = "io-lifetimes" -version = "1.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" -dependencies = [ - "hermit-abi 0.3.9", - "libc", - "windows-sys 0.48.0", -] - [[package]] name = "ipnet" -version = "2.9.0" +version = "2.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" +checksum = "ddc24109865250148c2e0f3d25d4f0f479571723792d3802153c60922a4fb708" [[package]] name = "itertools" @@ -2530,11 +2412,31 @@ version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" +[[package]] +name = "jni" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6df18c2e3db7e453d3c6ac5b3e9d5182664d28788126d39b91f2d1e22b017ec" +dependencies = [ + "cesu8", + "combine", + "jni-sys", + "log", + "thiserror", + "walkdir", +] + +[[package]] +name = "jni-sys" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" + [[package]] name = "js-sys" -version = "0.3.69" +version = "0.3.70" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" +checksum = "1868808506b929d7b0cfa8f75951347aa71bb21144b7791bae35d9bccfcfe37a" dependencies = [ "wasm-bindgen", ] @@ -2556,98 +2458,180 @@ dependencies = [ [[package]] name = "jsonrpsee" -version = "0.16.3" +version = "0.22.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "367a292944c07385839818bb71c8d76611138e2dedb0677d035b8da21d29c78b" +checksum = "cfdb12a2381ea5b2e68c3469ec604a007b367778cdb14d09612c8069ebd616ad" dependencies = [ - "jsonrpsee-client-transport", - "jsonrpsee-core", + "jsonrpsee-client-transport 0.22.5", + "jsonrpsee-core 0.22.5", "jsonrpsee-http-client", - "jsonrpsee-types", + "jsonrpsee-types 0.22.5", +] + +[[package]] +name = "jsonrpsee" +version = "0.23.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62b089779ad7f80768693755a031cc14a7766aba707cbe886674e3f79e9b7e47" +dependencies = [ + "jsonrpsee-core 0.23.2", + "jsonrpsee-types 0.23.2", + "jsonrpsee-ws-client", ] [[package]] name = "jsonrpsee-client-transport" -version = "0.16.3" +version = "0.22.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8b3815d9f5d5de348e5f162b316dc9cdf4548305ebb15b4eb9328e66cf27d7a" +checksum = "4978087a58c3ab02efc5b07c5e5e2803024536106fd5506f558db172c889b3aa" dependencies = [ "futures-util", "http 0.2.12", - "jsonrpsee-core", - "jsonrpsee-types", + "jsonrpsee-core 0.22.5", "pin-project", - "rustls-native-certs", - "soketto", + "rustls-native-certs 0.7.3", + "rustls-pki-types", + "soketto 0.7.1", "thiserror", "tokio", - "tokio-rustls 0.24.1", + "tokio-rustls 0.25.0", + "tokio-util", + "tracing", + "url", +] + +[[package]] +name = "jsonrpsee-client-transport" +version = "0.23.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08163edd8bcc466c33d79e10f695cdc98c00d1e6ddfb95cec41b6b0279dd5432" +dependencies = [ + "base64 0.22.1", + "futures-util", + "http 1.1.0", + "jsonrpsee-core 0.23.2", + "pin-project", + "rustls 0.23.14", + "rustls-pki-types", + "rustls-platform-verifier", + "soketto 0.8.0", + "thiserror", + "tokio", + "tokio-rustls 0.26.0", "tokio-util", "tracing", - "webpki-roots 0.25.4", + "url", ] [[package]] name = "jsonrpsee-core" -version = "0.16.3" +version = "0.22.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b5dde66c53d6dcdc8caea1874a45632ec0fcf5b437789f1e45766a1512ce803" +checksum = "b4b257e1ec385e07b0255dde0b933f948b5c8b8c28d42afda9587c3a967b896d" +dependencies = [ + "anyhow", + "async-trait", + "beef", + "futures-timer", + "futures-util", + "hyper 0.14.30", + "jsonrpsee-types 0.22.5", + "pin-project", + "rustc-hash 1.1.0", + "serde", + "serde_json", + "thiserror", + "tokio", + "tokio-stream", + "tracing", +] + +[[package]] +name = "jsonrpsee-core" +version = "0.23.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79712302e737d23ca0daa178e752c9334846b08321d439fd89af9a384f8c830b" dependencies = [ "anyhow", - "async-lock 2.8.0", "async-trait", "beef", - "futures-channel", "futures-timer", "futures-util", - "hyper 0.14.29", - "jsonrpsee-types", - "rustc-hash", + "jsonrpsee-types 0.23.2", + "pin-project", + "rustc-hash 1.1.0", "serde", "serde_json", "thiserror", "tokio", + "tokio-stream", "tracing", ] [[package]] name = "jsonrpsee-http-client" -version = "0.16.3" +version = "0.22.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e5f9fabdd5d79344728521bb65e3106b49ec405a78b66fbff073b72b389fa43" +checksum = "1ccf93fc4a0bfe05d851d37d7c32b7f370fe94336b52a2f0efc5f1981895c2e5" dependencies = [ "async-trait", - "hyper 0.14.29", + "hyper 0.14.30", "hyper-rustls 0.24.2", - "jsonrpsee-core", - "jsonrpsee-types", - "rustc-hash", + "jsonrpsee-core 0.22.5", + "jsonrpsee-types 0.22.5", "serde", "serde_json", "thiserror", "tokio", + "tower", "tracing", + "url", ] [[package]] name = "jsonrpsee-types" -version = "0.16.3" +version = "0.22.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "245ba8e5aa633dd1c1e4fae72bce06e71f42d34c14a2767c6b4d173b57bee5e5" +checksum = "150d6168405890a7a3231a3c74843f58b8959471f6df76078db2619ddee1d07d" dependencies = [ "anyhow", "beef", "serde", "serde_json", "thiserror", - "tracing", +] + +[[package]] +name = "jsonrpsee-types" +version = "0.23.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9c465fbe385238e861fdc4d1c85e04ada6c1fd246161d26385c1b311724d2af" +dependencies = [ + "beef", + "http 1.1.0", + "serde", + "serde_json", + "thiserror", +] + +[[package]] +name = "jsonrpsee-ws-client" +version = "0.23.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c28759775f5cb2f1ea9667672d3fe2b0e701d1f4b7b67954e60afe7fd058b5e" +dependencies = [ + "http 1.1.0", + "jsonrpsee-client-transport 0.23.2", + "jsonrpsee-core 0.23.2", + "jsonrpsee-types 0.23.2", + "url", ] [[package]] name = "k256" -version = "0.13.3" +version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "956ff9b67e26e1a6a866cb758f12c6f8746208489e3e4a4b5580802f2f0a587b" +checksum = "f6e3919bbaa2945715f0bb6d3934a173d1e9a59ac23767fbaaef277265a7411b" dependencies = [ "cfg-if", "ecdsa", @@ -2758,13 +2742,15 @@ dependencies = [ "kos-types", "kos-utils", "log", + "parity-scale-codec", "pbjson", "pbjson-types", "pem", "prost 0.11.9", "rand", - "reqwest 0.12.4", + "reqwest 0.12.8", "rlp", + "scale-value", "secp256k1 0.27.0", "serde", "serde-wasm-bindgen", @@ -2792,7 +2778,7 @@ dependencies = [ "num-bigint", "num-traits", "rand", - "reqwest 0.12.4", + "reqwest 0.12.8", "secp256k1 0.27.0", "serde", "serde_json", @@ -2813,15 +2799,15 @@ dependencies = [ [[package]] name = "lazy_static" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libc" -version = "0.2.155" +version = "0.2.159" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" +checksum = "561d97a539a36e26a9a5fad1ea11a3039a67714694aaa379433e580854bc3dc5" [[package]] name = "libm" @@ -2877,12 +2863,6 @@ dependencies = [ "libsecp256k1-core", ] -[[package]] -name = "linux-raw-sys" -version = "0.3.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" - [[package]] name = "linux-raw-sys" version = "0.4.14" @@ -2901,30 +2881,33 @@ dependencies = [ [[package]] name = "log" -version = "0.4.21" +version = "0.4.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" +checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" [[package]] name = "lru" -version = "0.10.1" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "718e8fae447df0c7e1ba7f5189829e63fd536945c8988d61444c19039f16b670" +checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" +dependencies = [ + "hashbrown 0.15.0", +] [[package]] name = "matchers" -version = "0.0.1" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f099785f7595cc4b4553a174ce30dd7589ef93391ff414dbb67f62392b9e0ce1" +checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" dependencies = [ "regex-automata 0.1.10", ] [[package]] name = "memchr" -version = "2.7.2" +version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" [[package]] name = "memory-db" @@ -2943,7 +2926,7 @@ checksum = "58c38e2799fc0978b65dfff8023ec7843e2330bb462f19198840b34b6582397d" dependencies = [ "byteorder", "keccak", - "rand_core 0.6.4", + "rand_core", "zeroize", ] @@ -2953,6 +2936,16 @@ version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" +[[package]] +name = "minicov" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c71e683cd655513b99affab7d317deb690528255a0d5f717f1024093c12b169" +dependencies = [ + "cc", + "walkdir", +] + [[package]] name = "minimal-lexical" version = "0.2.1" @@ -2961,23 +2954,24 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.7.3" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87dfd01fe195c66b572b37921ad8803d010623c0aca821bea2302239d155cdae" +checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" dependencies = [ - "adler", + "adler2", "simd-adler32", ] [[package]] name = "mio" -version = "0.8.11" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" +checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" dependencies = [ + "hermit-abi 0.3.9", "libc", "wasi", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] @@ -3037,23 +3031,39 @@ dependencies = [ "minimal-lexical", ] +[[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-bigint" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c165a9ab64cf766f73521c0dd2cfdff64f488b8f0b3e621face3462d3db536d7" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" dependencies = [ "num-integer", "num-traits", ] +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + [[package]] name = "num-format" version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a652d9771a63711fd3c3deb670acfbe5c30a4072e664d7a3bf5a9e1056ac72c3" dependencies = [ - "arrayvec 0.7.4", + "arrayvec 0.7.6", "itoa", ] @@ -3098,18 +3108,18 @@ dependencies = [ [[package]] name = "object" -version = "0.35.0" +version = "0.36.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8ec7ab813848ba4522158d5517a6093db1ded27575b070f4177b8d12b41db5e" +checksum = "aedf0a2d09c573ed1d8d85b30c119153926a2b36dce0ab28322c09a117a4683e" dependencies = [ "memchr", ] [[package]] name = "once_cell" -version = "1.19.0" +version = "1.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" +checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" [[package]] name = "opaque-debug" @@ -3119,11 +3129,11 @@ checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" [[package]] name = "openssl" -version = "0.10.64" +version = "0.10.66" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95a0481286a310808298130d22dd1fef0fa571e05a8f44ec801801e84b216b1f" +checksum = "9529f4786b70a3e8c61e11179af17ab6188ad8d0ded78c5529441ed39d4bd9c1" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", "cfg-if", "foreign-types", "libc", @@ -3140,7 +3150,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.79", ] [[package]] @@ -3151,9 +3161,9 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-sys" -version = "0.9.102" +version = "0.9.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c597637d56fbc83893a35eb0dd04b2b8e7a50c91e64e9493e398b5df4fb45fa2" +checksum = "7f9e8deee91df40a943c71b917e5874b951d32a802526c85721ce3b776c929d6" dependencies = [ "cc", "libc", @@ -3161,15 +3171,21 @@ dependencies = [ "vcpkg", ] +[[package]] +name = "overload" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + [[package]] name = "parity-bip39" version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4e69bf016dc406eff7d53a7d3f7cf1c2e72c82b9088aac1118591e36dd2cd3e9" dependencies = [ - "bitcoin_hashes 0.12.0", + "bitcoin_hashes 0.13.0", "rand", - "rand_core 0.6.4", + "rand_core", "serde", "unicode-normalization", ] @@ -3180,7 +3196,7 @@ version = "3.6.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "306800abfa29c7f16596b5970a588435e3d5b3149683d00c12b699cc19f895ee" dependencies = [ - "arrayvec 0.7.4", + "arrayvec 0.7.6", "bitvec", "byte-slice-cast", "bytes", @@ -3195,7 +3211,7 @@ version = "3.6.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d830939c76d294956402033aee57a6da7b438f2294eb94864c37b0569053a42c" dependencies = [ - "proc-macro-crate 3.1.0", + "proc-macro-crate 3.2.0", "proc-macro2", "quote", "syn 1.0.109", @@ -3237,7 +3253,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "346f04948ba92c43e8469c1ee6736c7563d71012b17d40745260fe106aac2166" dependencies = [ "base64ct", - "rand_core 0.6.4", + "rand_core", "subtle", ] @@ -3322,22 +3338,22 @@ dependencies = [ [[package]] name = "pin-project" -version = "1.1.5" +version = "1.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" +checksum = "baf123a161dde1e524adf36f90bc5d8d3462824a9c43553ad07a8183161189ec" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.5" +version = "1.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" +checksum = "a4502d8515ca9f32f1fb543d987f63d95a14934883db45bdb48060b6b69257f8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.79", ] [[package]] @@ -3359,7 +3375,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" dependencies = [ "atomic-waker", - "fastrand 2.1.0", + "fastrand", "futures-io", ] @@ -3375,15 +3391,15 @@ dependencies = [ [[package]] name = "pkg-config" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" +checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" [[package]] name = "png" -version = "0.17.13" +version = "0.17.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06e4b0d3d1312775e782c86c91a111aa1f910cbb65e1337f9975b5f9a554b5e1" +checksum = "52f9d46a34a05a6a57566bc2bfae066ef07585a6e3fa30fbbdff5936380623f0" dependencies = [ "bitflags 1.3.2", "crc32fast", @@ -3416,7 +3432,7 @@ dependencies = [ "polkavm-common", "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.79", ] [[package]] @@ -3426,23 +3442,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ba81f7b5faac81e528eb6158a6f3c9e0bb1008e0ffa19653bc8dea925ecb429" dependencies = [ "polkavm-derive-impl", - "syn 2.0.66", -] - -[[package]] -name = "polling" -version = "2.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce" -dependencies = [ - "autocfg", - "bitflags 1.3.2", - "cfg-if", - "concurrent-queue", - "libc", - "log", - "pin-project-lite", - "windows-sys 0.48.0", + "syn 2.0.79", ] [[package]] @@ -3455,7 +3455,7 @@ dependencies = [ "concurrent-queue", "hermit-abi 0.4.0", "pin-project-lite", - "rustix 0.38.34", + "rustix", "tracing", "windows-sys 0.59.0", ] @@ -3485,21 +3485,31 @@ dependencies = [ [[package]] name = "postcard" -version = "1.0.8" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a55c51ee6c0db07e68448e336cf8ea4131a620edefebf9893e759b2d793420f8" +checksum = "5f7f0a8d620d71c457dd1d47df76bb18960378da56af4527aaa10f515eee732e" dependencies = [ "cobs", - "embedded-io", + "embedded-io 0.4.0", + "embedded-io 0.6.1", "heapless", "serde", ] +[[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" +version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" +checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +dependencies = [ + "zerocopy", +] [[package]] name = "prettyplease" @@ -3513,12 +3523,12 @@ dependencies = [ [[package]] name = "prettyplease" -version = "0.2.20" +version = "0.2.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f12335488a2f3b0a83b14edad48dca9879ce89b2edd10e80237e4e852dd645e" +checksum = "479cf940fbbb3426c32c5d5176f62ad57549a0bb84773423ba8be9d089f5faba" dependencies = [ "proc-macro2", - "syn 2.0.66", + "syn 2.0.79", ] [[package]] @@ -3547,11 +3557,11 @@ dependencies = [ [[package]] name = "proc-macro-crate" -version = "3.1.0" +version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284" +checksum = "8ecf48c7ca261d60b74ab1a7b20da18bede46776b2e55535cb958eb595c5fa7b" dependencies = [ - "toml_edit 0.21.1", + "toml_edit 0.22.22", ] [[package]] @@ -3580,9 +3590,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.85" +version = "1.0.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22244ce15aa966053a896d1accb3a6e68469b97c7f33f284b99f0d576879fc23" +checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" dependencies = [ "unicode-ident", ] @@ -3642,11 +3652,11 @@ dependencies = [ "multimap 0.10.0", "once_cell", "petgraph", - "prettyplease 0.2.20", + "prettyplease 0.2.22", "prost 0.12.6", "prost-types 0.12.6", "regex", - "syn 2.0.66", + "syn 2.0.79", "tempfile", ] @@ -3673,7 +3683,7 @@ dependencies = [ "itertools 0.12.1", "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.79", ] [[package]] @@ -3757,11 +3767,59 @@ version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4339fc7a1021c9c1621d87f5e3505f2805c8c105420ba2f2a4df86814590c142" +[[package]] +name = "quinn" +version = "0.11.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c7c5fdde3cdae7203427dc4f0a68fe0ed09833edc525a03456b153b79828684" +dependencies = [ + "bytes", + "pin-project-lite", + "quinn-proto", + "quinn-udp", + "rustc-hash 2.0.0", + "rustls 0.23.14", + "socket2", + "thiserror", + "tokio", + "tracing", +] + +[[package]] +name = "quinn-proto" +version = "0.11.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fadfaed2cd7f389d0161bb73eeb07b7b78f8691047a6f3e73caaeae55310a4a6" +dependencies = [ + "bytes", + "rand", + "ring", + "rustc-hash 2.0.0", + "rustls 0.23.14", + "slab", + "thiserror", + "tinyvec", + "tracing", +] + +[[package]] +name = "quinn-udp" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fe68c2e9e1a1234e218683dbdf9f9dfcb094113c5ac2b938dfcb9bab4c4140b" +dependencies = [ + "libc", + "once_cell", + "socket2", + "tracing", + "windows-sys 0.59.0", +] + [[package]] name = "quote" -version = "1.0.36" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" dependencies = [ "proc-macro2", ] @@ -3780,7 +3838,7 @@ checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ "libc", "rand_chacha", - "rand_core 0.6.4", + "rand_core", ] [[package]] @@ -3790,15 +3848,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" dependencies = [ "ppv-lite86", - "rand_core 0.6.4", + "rand_core", ] -[[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" @@ -3808,13 +3860,29 @@ dependencies = [ "getrandom", ] +[[package]] +name = "reconnecting-jsonrpsee-ws-client" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06fa4f17e09edfc3131636082faaec633c7baa269396b4004040bc6c52f49f65" +dependencies = [ + "cfg_aliases", + "finito", + "futures", + "jsonrpsee 0.23.2", + "serde_json", + "thiserror", + "tokio", + "tracing", +] + [[package]] name = "redox_syscall" -version = "0.5.1" +version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "469052894dcb553421e483e4209ee581a45100d31b4018de03e5a7ad86374a7e" +checksum = "9b6dfecf2c74bce2466cabf93f6664d6998a69eb21e39f4207930065b27b771f" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", ] [[package]] @@ -3834,19 +3902,19 @@ checksum = "bcc303e793d3734489387d205e9b186fac9c6cfacedd98cbb2e8a5943595f3e6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.79", ] [[package]] name = "regex" -version = "1.10.4" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c117dbdfde9c8308975b6a18d71f3f385c89461f7b3fb054288ecf2a2058ba4c" +checksum = "38200e5ee88914975b69f657f0801b6f6dccafd44fd9326302a4aaeecfacb1d8" dependencies = [ "aho-corasick", "memchr", - "regex-automata 0.4.6", - "regex-syntax 0.8.3", + "regex-automata 0.4.8", + "regex-syntax 0.8.5", ] [[package]] @@ -3860,13 +3928,13 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.6" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86b83b8b9847f9bf95ef68afb0b8e6cdb80f498442f5179a29fad448fcc1eaea" +checksum = "368758f23274712b504848e9d5a6f010445cc8b87a7cdb4d7cbee666c1288da3" dependencies = [ "aho-corasick", "memchr", - "regex-syntax 0.8.3", + "regex-syntax 0.8.5", ] [[package]] @@ -3877,9 +3945,9 @@ checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" [[package]] name = "regex-syntax" -version = "0.8.3" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adad44e29e4c806119491a7f06f03de4d1af22c3a680dd47f1e6e179439d1f56" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" [[package]] name = "reqwest" @@ -3895,7 +3963,7 @@ dependencies = [ "h2", "http 0.2.12", "http-body 0.4.6", - "hyper 0.14.29", + "hyper 0.14.30", "hyper-tls", "ipnet", "js-sys", @@ -3909,7 +3977,7 @@ dependencies = [ "serde", "serde_json", "serde_urlencoded", - "sync_wrapper", + "sync_wrapper 0.1.2", "system-configuration", "tokio", "tokio-native-tls", @@ -3918,14 +3986,14 @@ dependencies = [ "wasm-bindgen", "wasm-bindgen-futures", "web-sys", - "winreg 0.50.0", + "winreg", ] [[package]] name = "reqwest" -version = "0.12.4" +version = "0.12.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "566cafdd92868e0939d3fb961bd0dc25fcfaaed179291093b3d43e6b3150ea10" +checksum = "f713147fbe92361e52392c73b8c9e48c04c6625bce969ef54dc901e58e042a7b" dependencies = [ "base64 0.22.1", "bytes", @@ -3933,10 +4001,10 @@ dependencies = [ "futures-core", "futures-util", "http 1.1.0", - "http-body 1.0.0", + "http-body 1.0.1", "http-body-util", - "hyper 1.3.1", - "hyper-rustls 0.26.0", + "hyper 1.4.1", + "hyper-rustls 0.27.3", "hyper-util", "ipnet", "js-sys", @@ -3945,22 +4013,23 @@ dependencies = [ "once_cell", "percent-encoding", "pin-project-lite", - "rustls 0.22.4", - "rustls-pemfile 2.1.2", + "quinn", + "rustls 0.23.14", + "rustls-pemfile 2.2.0", "rustls-pki-types", "serde", "serde_json", "serde_urlencoded", - "sync_wrapper", + "sync_wrapper 1.0.1", "tokio", - "tokio-rustls 0.25.0", + "tokio-rustls 0.26.0", "tower-service", "url", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", - "webpki-roots 0.26.1", - "winreg 0.52.0", + "webpki-roots", + "windows-registry", ] [[package]] @@ -4019,6 +4088,12 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" +[[package]] +name = "rustc-hash" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "583034fd73374156e66797ed8e5b0d5690409c9226b22d87cb7f19821c05d152" + [[package]] name = "rustc-hex" version = "2.1.0" @@ -4027,38 +4102,24 @@ checksum = "3e75f6a532d0fd9f7f13144f392b6ad56a32696bfcd9c78f797f16bbb6f072d6" [[package]] name = "rustc_version" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" dependencies = [ "semver", ] [[package]] name = "rustix" -version = "0.37.27" +version = "0.38.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fea8ca367a3a01fe35e6943c400addf443c0f57670e6ec51196f71a4b8762dd2" +checksum = "8acb788b847c24f28525660c4d7758620a7210875711f79e7f663cc152726811" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.6.0", "errno", - "io-lifetimes", "libc", - "linux-raw-sys 0.3.8", - "windows-sys 0.48.0", -] - -[[package]] -name = "rustix" -version = "0.38.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" -dependencies = [ - "bitflags 2.5.0", - "errno", - "libc", - "linux-raw-sys 0.4.14", - "windows-sys 0.52.0", + "linux-raw-sys", + "windows-sys 0.52.0", ] [[package]] @@ -4082,7 +4143,22 @@ dependencies = [ "log", "ring", "rustls-pki-types", - "rustls-webpki 0.102.4", + "rustls-webpki 0.102.8", + "subtle", + "zeroize", +] + +[[package]] +name = "rustls" +version = "0.23.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "415d9944693cb90382053259f89fbb077ea730ad7273047ec63b19bc9b160ba8" +dependencies = [ + "log", + "once_cell", + "ring", + "rustls-pki-types", + "rustls-webpki 0.102.8", "subtle", "zeroize", ] @@ -4099,6 +4175,19 @@ 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" @@ -4110,19 +4199,45 @@ dependencies = [ [[package]] name = "rustls-pemfile" -version = "2.1.2" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29993a25686778eb88d4189742cd713c9bce943bc54251a33509dc63cbacf73d" +checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" dependencies = [ - "base64 0.22.1", "rustls-pki-types", ] [[package]] name = "rustls-pki-types" -version = "1.7.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "976295e77ce332211c0d24d92c0e83e50f5c5f046d11082cea19f3df13a3562d" +checksum = "0e696e35370c65c9c541198af4543ccd580cf17fc25d8e05c5a242b202488c55" + +[[package]] +name = "rustls-platform-verifier" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "afbb878bdfdf63a336a5e63561b1835e7a8c91524f51621db870169eac84b490" +dependencies = [ + "core-foundation", + "core-foundation-sys", + "jni", + "log", + "once_cell", + "rustls 0.23.14", + "rustls-native-certs 0.7.3", + "rustls-platform-verifier-android", + "rustls-webpki 0.102.8", + "security-framework", + "security-framework-sys", + "webpki-roots", + "winapi", +] + +[[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" @@ -4136,9 +4251,9 @@ dependencies = [ [[package]] name = "rustls-webpki" -version = "0.102.4" +version = "0.102.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff448f7e92e913c4b7d4c6d8e4540a1724b319b4152b8aef6d4cf8339712b33e" +checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" dependencies = [ "ring", "rustls-pki-types", @@ -4153,12 +4268,12 @@ checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" [[package]] name = "ruzstd" -version = "0.4.0" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3ffab8f9715a0d455df4bbb9d21e91135aab3cd3ca187af0cd0c3c3f868fdc" +checksum = "58c4eb8a81997cf040a091d1f7e1938aeab6749d3a0dfa73af43cdc32393483d" dependencies = [ "byteorder", - "thiserror-core", + "derive_more", "twox-hash", ] @@ -4179,38 +4294,38 @@ dependencies = [ [[package]] name = "scale-bits" -version = "0.3.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8dd7aca73785181cc41f0bbe017263e682b585ca660540ba569133901d013ecf" +checksum = "e57b1e7f6b65ed1f04e79a85a57d755ad56d76fdf1e9bddcc9ae14f71fcdcf54" dependencies = [ "parity-scale-codec", "scale-info", + "scale-type-resolver", "serde", ] [[package]] name = "scale-decode" -version = "0.7.0" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0459d00b0dbd2e765009924a78ef36b2ff7ba116292d732f00eb0ed8e465d15" +checksum = "e98f3262c250d90e700bb802eb704e1f841e03331c2eb815e46516c4edbf5b27" dependencies = [ + "derive_more", "parity-scale-codec", "primitive-types", "scale-bits", "scale-decode-derive", - "scale-info", + "scale-type-resolver", "smallvec", - "thiserror", ] [[package]] name = "scale-decode-derive" -version = "0.7.0" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4391f0dfbb6690f035f6d2a15d6a12f88cc5395c36bcc056db07ffa2a90870ec" +checksum = "9bb22f574168103cdd3133b19281639ca65ad985e24612728f727339dcaf4021" dependencies = [ "darling 0.14.4", - "proc-macro-crate 1.3.1", "proc-macro2", "quote", "syn 1.0.109", @@ -4218,24 +4333,24 @@ dependencies = [ [[package]] name = "scale-encode" -version = "0.3.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0401b7cdae8b8aa33725f3611a051358d5b32887ecaa0fda5953a775b2d4d76" +checksum = "4ba0b9c48dc0eb20c60b083c29447c0c4617cb7c4a4c9fef72aa5c5bc539e15e" dependencies = [ + "derive_more", "parity-scale-codec", "primitive-types", "scale-bits", "scale-encode-derive", - "scale-info", + "scale-type-resolver", "smallvec", - "thiserror", ] [[package]] name = "scale-encode-derive" -version = "0.3.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "316e0fb10ec0fee266822bd641bab5e332a4ab80ef8c5b5ff35e5401a394f5a6" +checksum = "82ab7e60e2d9c8d47105f44527b26f04418e5e624ffc034f6b4a86c0ba19c5bf" dependencies = [ "darling 0.14.4", "proc-macro-crate 1.3.1", @@ -4264,20 +4379,44 @@ version = "2.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2d35494501194174bda522a32605929eefc9ecf7e0a326c26db1fdd85881eb62" dependencies = [ - "proc-macro-crate 3.1.0", + "proc-macro-crate 3.2.0", "proc-macro2", "quote", "syn 1.0.109", ] +[[package]] +name = "scale-type-resolver" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0cded6518aa0bd6c1be2b88ac81bf7044992f0f154bfbabd5ad34f43512abcb" +dependencies = [ + "scale-info", + "smallvec", +] + +[[package]] +name = "scale-typegen" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "498d1aecf2ea61325d4511787c115791639c0fd21ef4f8e11e49dd09eff2bbac" +dependencies = [ + "proc-macro2", + "quote", + "scale-info", + "syn 2.0.79", + "thiserror", +] + [[package]] name = "scale-value" -version = "0.10.0" +version = "0.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2096d36e94ce9bf87d8addb752423b6b19730dc88edd7cc452bb2b90573f7a7" +checksum = "8cd6ab090d823e75cfdb258aad5fe92e13f2af7d04b43a55d607d25fcc38c811" dependencies = [ "base58", "blake2", + "derive_more", "either", "frame-metadata 15.1.0", "parity-scale-codec", @@ -4285,18 +4424,18 @@ dependencies = [ "scale-decode", "scale-encode", "scale-info", + "scale-type-resolver", "serde", - "thiserror", "yap", ] [[package]] name = "schannel" -version = "0.1.23" +version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534" +checksum = "01227be5826fa0690321a2ba6c5cd57a19cf3f6a09e76973b58e61de6ab9d1c1" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -4305,27 +4444,11 @@ version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c9a8ef13a93c54d20580de1e5c413e624e53121d42fc7e2c11d10ef7f8b02367" dependencies = [ - "ahash 0.8.11", + "ahash", "cfg-if", "hashbrown 0.13.2", ] -[[package]] -name = "schnorrkel" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "844b7645371e6ecdf61ff246ba1958c29e802881a749ae3fb1993675d210d28d" -dependencies = [ - "arrayref", - "arrayvec 0.7.4", - "curve25519-dalek-ng", - "merlin", - "rand_core 0.6.4", - "sha2 0.9.9", - "subtle-ng", - "zeroize", -] - [[package]] name = "schnorrkel" version = "0.11.4" @@ -4334,11 +4457,11 @@ checksum = "8de18f6d8ba0aad7045f5feae07ec29899c1112584a38509a84ad7b04451eaa0" dependencies = [ "aead", "arrayref", - "arrayvec 0.7.4", - "curve25519-dalek 4.1.3", + "arrayvec 0.7.6", + "curve25519-dalek", "getrandom_or_panic", "merlin", - "rand_core 0.6.4", + "rand_core", "serde_bytes", "sha2 0.10.8", "subtle", @@ -4432,22 +4555,23 @@ dependencies = [ [[package]] name = "security-framework" -version = "2.11.0" +version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c627723fd09706bacdb5cf41499e95098555af3c3c29d014dc3c458ef6be11c0" +checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", "core-foundation", "core-foundation-sys", "libc", + "num-bigint", "security-framework-sys", ] [[package]] name = "security-framework-sys" -version = "2.11.0" +version = "2.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "317936bbbd05227752583946b9e66d7ce3b489f84e11a94a510b4437fef407d7" +checksum = "ea4a292869320c0272d7bc55a5a6aafaff59b4f63404a003887b679a2e05b4b6" dependencies = [ "core-foundation-sys", "libc", @@ -4467,9 +4591,9 @@ checksum = "f638d531eccd6e23b980caf34876660d38e265409d8e99b397ab71eb3612fad0" [[package]] name = "serde" -version = "1.0.203" +version = "1.0.210" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7253ab4de971e72fb7be983802300c30b5a7f0c2e56fab8abfc6a214307c0094" +checksum = "c8e3592472072e6e22e0a54d5904d9febf8508f65fb8552499a1abc7d1078c3a" dependencies = [ "serde_derive", ] @@ -4496,31 +4620,32 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.203" +version = "1.0.210" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "500cbc0ebeb6f46627f50f3f5811ccf6bf00643be300b4c3eabc0ef55dc5b5ba" +checksum = "243902eda00fad750862fc144cea25caca5e20d615af0a81bee94ca738f1df1f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.79", ] [[package]] name = "serde_json" -version = "1.0.117" +version = "1.0.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "455182ea6142b14f93f4bc5320a2b31c1f266b66a4a5c858b013302a5d8cbfc3" +checksum = "6ff5456707a1de34e7e37f2a6fd3d3f808c318259cbd01ab6377795054b483d8" dependencies = [ "itoa", + "memchr", "ryu", "serde", ] [[package]] name = "serde_spanned" -version = "0.6.7" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb5b1b31579f3811bf615c144393417496f152e12ac8b7663bf664f4a815306d" +checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1" dependencies = [ "serde", ] @@ -4614,6 +4739,12 @@ dependencies = [ "lazy_static", ] +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + [[package]] name = "signal-hook-registry" version = "1.4.2" @@ -4630,7 +4761,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" dependencies = [ "digest 0.10.7", - "rand_core 0.6.4", + "rand_core", ] [[package]] @@ -4647,9 +4778,9 @@ checksum = "620a1d43d70e142b1d46a929af51d44f383db9c7a2ec122de2cd992ccfcf3c18" [[package]] name = "siphasher" -version = "0.3.11" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" +checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" [[package]] name = "slab" @@ -4668,46 +4799,48 @@ checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] name = "smol" -version = "1.3.0" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13f2b548cd8447f8de0fdf1c592929f70f4fc7039a05e47404b0d096ec6987a1" +checksum = "a33bd3e260892199c3ccfc487c88b2da2265080acb316cd920da72fdfd7c599f" dependencies = [ - "async-channel 1.9.0", + "async-channel", "async-executor", "async-fs", - "async-io 1.13.0", - "async-lock 2.8.0", + "async-io", + "async-lock", "async-net", "async-process", "blocking", - "futures-lite 1.13.0", + "futures-lite", ] [[package]] name = "smoldot" -version = "0.8.0" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cce5e2881b30bad7ef89f383a816ad0b22c45915911f28499026de4a76d20ee" +checksum = "e6d1eaa97d77be4d026a1e7ffad1bb3b78448763b357ea6f8188d3e6f736a9b9" dependencies = [ - "arrayvec 0.7.4", - "async-lock 2.8.0", - "atomic", + "arrayvec 0.7.6", + "async-lock", + "atomic-take", "base64 0.21.7", "bip39", "blake2-rfc", "bs58", + "chacha20", "crossbeam-queue", "derive_more", - "ed25519-zebra 3.1.0", + "ed25519-zebra", "either", - "event-listener 2.5.3", + "event-listener 4.0.3", "fnv", - "futures-channel", + "futures-lite", "futures-util", "hashbrown 0.14.5", "hex", "hmac 0.12.1", - "itertools 0.10.5", + "itertools 0.12.1", + "libm", "libsecp256k1", "merlin", "no-std-net", @@ -4717,77 +4850,59 @@ dependencies = [ "num-traits", "pbkdf2", "pin-project", + "poly1305", "rand", "rand_chacha", "ruzstd", - "schnorrkel 0.10.2", + "schnorrkel", "serde", "serde_json", "sha2 0.10.8", + "sha3", "siphasher", "slab", "smallvec", - "smol", - "snow", - "soketto", - "tiny-keccak", + "soketto 0.7.1", "twox-hash", "wasmi", + "x25519-dalek", + "zeroize", ] [[package]] name = "smoldot-light" -version = "0.6.0" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b2f7b4687b83ff244ef6137735ed5716ad37dcdf3ee16c4eb1a32fb9808fa47" +checksum = "5496f2d116b7019a526b1039ec2247dd172b8670633b1a64a614c9ea12c9d8c7" dependencies = [ - "async-lock 2.8.0", + "async-channel", + "async-lock", + "base64 0.21.7", "blake2-rfc", "derive_more", "either", - "event-listener 2.5.3", + "event-listener 4.0.3", "fnv", "futures-channel", + "futures-lite", "futures-util", "hashbrown 0.14.5", "hex", - "itertools 0.10.5", + "itertools 0.12.1", "log", "lru", + "no-std-net", "parking_lot", + "pin-project", "rand", + "rand_chacha", "serde", "serde_json", "siphasher", "slab", "smol", "smoldot", -] - -[[package]] -name = "snow" -version = "0.9.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "850948bee068e713b8ab860fe1adc4d109676ab4c3b621fd8147f06b261f2f85" -dependencies = [ - "aes-gcm", - "blake2", - "chacha20poly1305", - "curve25519-dalek 4.1.3", - "rand_core 0.6.4", - "rustc_version", - "sha2 0.10.8", - "subtle", -] - -[[package]] -name = "socket2" -version = "0.4.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" -dependencies = [ - "libc", - "winapi", + "zeroize", ] [[package]] @@ -4815,6 +4930,21 @@ dependencies = [ "sha-1", ] +[[package]] +name = "soketto" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37468c595637c10857701c990f93a40ce0e357cedb0953d1c26c8d8027f9bb53" +dependencies = [ + "base64 0.22.1", + "bytes", + "futures", + "httparse", + "log", + "rand", + "sha1", +] + [[package]] name = "sp-application-crypto" version = "38.0.0" @@ -4840,7 +4970,7 @@ dependencies = [ "parity-scale-codec", "scale-info", "serde", - "sp-std 14.0.0", + "sp-std", "static_assertions", ] @@ -4856,7 +4986,7 @@ dependencies = [ "bounded-collections", "bs58", "dyn-clonable", - "ed25519-zebra 4.0.3", + "ed25519-zebra", "futures", "hash-db", "hash256-std-hasher", @@ -4873,7 +5003,7 @@ dependencies = [ "primitive-types", "rand", "scale-info", - "schnorrkel 0.11.4", + "schnorrkel", "secp256k1 0.28.2", "secrecy", "serde", @@ -4881,7 +5011,7 @@ dependencies = [ "sp-debug-derive", "sp-externalities", "sp-runtime-interface", - "sp-std 14.0.0", + "sp-std", "sp-storage", "ss58-registry", "substrate-bip39", @@ -4891,21 +5021,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "sp-core-hashing" -version = "9.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ee599a8399448e65197f9a6cee338ad192e9023e35e31f22382964c3c174c68" -dependencies = [ - "blake2b_simd", - "byteorder", - "digest 0.10.7", - "sha2 0.10.8", - "sha3", - "sp-std 8.0.0", - "twox-hash", -] - [[package]] name = "sp-crypto-hashing" version = "0.1.0" @@ -4928,7 +5043,7 @@ checksum = "48d09fa0a5f7299fb81ee25ae3853d26200f7a348148aed6de76be905c007dbe" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.79", ] [[package]] @@ -4994,9 +5109,9 @@ dependencies = [ [[package]] name = "sp-runtime" -version = "39.0.0" +version = "39.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5641385c2cd8e2252aacf35e0aff2f236331dfaea8dc11c5a4ec6bb36544450" +checksum = "806f19b91dc283145e0580353e6ae68e4e634c0915d3dd950f57547b90b55a8c" dependencies = [ "docify", "either", @@ -5014,7 +5129,7 @@ dependencies = [ "sp-arithmetic", "sp-core", "sp-io", - "sp-std 14.0.0", + "sp-std", "sp-weights", "tracing", ] @@ -5032,7 +5147,7 @@ dependencies = [ "primitive-types", "sp-externalities", "sp-runtime-interface-proc-macro", - "sp-std 14.0.0", + "sp-std", "sp-storage", "sp-tracing", "sp-wasm-interface", @@ -5047,10 +5162,10 @@ checksum = "0195f32c628fee3ce1dfbbf2e7e52a30ea85f3589da9fe62a8b816d70fc06294" dependencies = [ "Inflector", "expander", - "proc-macro-crate 3.1.0", + "proc-macro-crate 3.2.0", "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.79", ] [[package]] @@ -5074,12 +5189,6 @@ dependencies = [ "trie-db", ] -[[package]] -name = "sp-std" -version = "8.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53458e3c57df53698b3401ec0934bea8e8cfce034816873c0b0abbd83d7bac0d" - [[package]] name = "sp-std" version = "14.0.0" @@ -5101,9 +5210,9 @@ dependencies = [ [[package]] name = "sp-tracing" -version = "17.0.0" +version = "17.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90b3decf116db9f1dfaf1f1597096b043d0e12c952d3bcdc018c6d6b77deec7e" +checksum = "cf641a1d17268c8fcfdb8e0fa51a79c2d4222f4cfda5f3944dbdbc384dced8d5" dependencies = [ "parity-scale-codec", "tracing", @@ -5117,7 +5226,7 @@ version = "37.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6282aef9f4b6ecd95a67a45bcdb67a71f4a4155c09a53c10add4ffe823db18cd" dependencies = [ - "ahash 0.8.11", + "ahash", "hash-db", "lazy_static", "memory-db", @@ -5137,10 +5246,11 @@ dependencies = [ [[package]] name = "sp-wasm-interface" -version = "21.0.0" +version = "21.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b04b919e150b4736d85089d49327eab65507deb1485eec929af69daa2278eb3" +checksum = "b066baa6d57951600b14ffe1243f54c47f9c23dd89c262e17ca00ae8dca58be9" dependencies = [ + "anyhow", "impl-trait-for-tuples", "log", "parity-scale-codec", @@ -5182,9 +5292,9 @@ dependencies = [ [[package]] name = "ss58-registry" -version = "1.47.0" +version = "1.50.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4743ce898933fbff7bbf414f497c459a782d496269644b3d650a398ae6a487ba" +checksum = "43fce22ed1df64d04b262351c8f9d5c6da4f76f79f25ad15529792f893fad25d" dependencies = [ "Inflector", "num-format", @@ -5238,7 +5348,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.66", + "syn 2.0.79", ] [[package]] @@ -5249,40 +5359,35 @@ checksum = "ca58ffd742f693dc13d69bdbb2e642ae239e0053f6aab3b104252892f856700a" dependencies = [ "hmac 0.12.1", "pbkdf2", - "schnorrkel 0.11.4", + "schnorrkel", "sha2 0.10.8", "zeroize", ] [[package]] name = "subtle" -version = "2.5.0" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" - -[[package]] -name = "subtle-ng" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "734676eb262c623cec13c3155096e08d1f8f29adce39ba17948b18dad1e54142" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "subxt" -version = "0.30.1" +version = "0.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ba02ada83ba2640c46e200a1758cc83ce876a16326d2c52ca5db41b7d6645ce" +checksum = "a160cba1edbf3ec4fbbeaea3f1a185f70448116a6bccc8276bb39adb3b3053bd" dependencies = [ - "base58", - "blake2", - "derivative", + "async-trait", + "derive-where", "either", "frame-metadata 16.0.0", "futures", "hex", "impl-serde", - "jsonrpsee", + "instant", + "jsonrpsee 0.22.5", "parity-scale-codec", "primitive-types", + "reconnecting-jsonrpsee-ws-client", "scale-bits", "scale-decode", "scale-encode", @@ -5290,39 +5395,70 @@ dependencies = [ "scale-value", "serde", "serde_json", - "sp-core-hashing", + "sp-crypto-hashing", + "subxt-core", "subxt-lightclient", "subxt-macro", "subxt-metadata", "thiserror", + "tokio-util", "tracing", + "url", ] [[package]] name = "subxt-codegen" -version = "0.30.1" +version = "0.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3213eb04567e710aa253b94de74337c7b663eea52114805b8723129763282779" +checksum = "d703dca0905cc5272d7cc27a4ac5f37dcaae7671acc7fef0200057cc8c317786" dependencies = [ "frame-metadata 16.0.0", - "heck 0.4.1", + "heck 0.5.0", "hex", - "jsonrpsee", + "jsonrpsee 0.22.5", "parity-scale-codec", "proc-macro2", "quote", "scale-info", + "scale-typegen", "subxt-metadata", - "syn 2.0.66", + "syn 2.0.79", "thiserror", "tokio", ] +[[package]] +name = "subxt-core" +version = "0.37.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59f41eb2e2eea6ed45649508cc735f92c27f1fcfb15229e75f8270ea73177345" +dependencies = [ + "base58", + "blake2", + "derive-where", + "frame-metadata 16.0.0", + "hashbrown 0.14.5", + "hex", + "impl-serde", + "parity-scale-codec", + "primitive-types", + "scale-bits", + "scale-decode", + "scale-encode", + "scale-info", + "scale-value", + "serde", + "serde_json", + "sp-crypto-hashing", + "subxt-metadata", + "tracing", +] + [[package]] name = "subxt-lightclient" -version = "0.30.1" +version = "0.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "439a235bedd0e460c110e5341d919ec3a27f9be3dd4c1c944daad8a9b54d396d" +checksum = "9d9406fbdb9548c110803cb8afa750f8b911d51eefdf95474b11319591d225d9" dependencies = [ "futures", "futures-util", @@ -5337,27 +5473,30 @@ dependencies = [ [[package]] name = "subxt-macro" -version = "0.30.1" +version = "0.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfda460cc5f701785973382c589e9bb12c23bb8d825bfc3ac547b7c672aba1c0" +checksum = "1c195f803d70687e409aba9be6c87115b5da8952cd83c4d13f2e043239818fcd" dependencies = [ "darling 0.20.10", + "parity-scale-codec", "proc-macro-error", + "quote", + "scale-typegen", "subxt-codegen", - "syn 2.0.66", + "syn 2.0.79", ] [[package]] name = "subxt-metadata" -version = "0.30.1" +version = "0.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0283bd02163913fbd0a5153d0b179533e48b239b953fa4e43baa27c73f18861c" +checksum = "738be5890fdeff899bbffff4d9c0f244fe2a952fb861301b937e3aa40ebb55da" dependencies = [ "frame-metadata 16.0.0", + "hashbrown 0.14.5", "parity-scale-codec", "scale-info", - "sp-core-hashing", - "thiserror", + "sp-crypto-hashing", ] [[package]] @@ -5373,9 +5512,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.66" +version = "2.0.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c42f3f41a2de00b01c0aaad383c5a45241efc8b2d1eda5661812fda5f3cdcff5" +checksum = "89132cd0bf050864e1d38dc3bbc07a0eb8e7530af26344d3d2bbbef83499f590" dependencies = [ "proc-macro2", "quote", @@ -5388,6 +5527,15 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" +[[package]] +name = "sync_wrapper" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7065abeca94b6a8a577f9bd45aa0867a2238b74e8eb67cf10d492bc39351394" +dependencies = [ + "futures-core", +] + [[package]] name = "system-configuration" version = "0.5.1" @@ -5417,14 +5565,15 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "tempfile" -version = "3.10.1" +version = "3.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" +checksum = "f0f2c9fc62d0beef6951ccffd757e241266a2c833136efbe35af6cd2567dca5b" dependencies = [ "cfg-if", - "fastrand 2.1.0", - "rustix 0.38.34", - "windows-sys 0.52.0", + "fastrand", + "once_cell", + "rustix", + "windows-sys 0.59.0", ] [[package]] @@ -5438,52 +5587,63 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.61" +version = "1.0.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c546c80d6be4bc6a00c0f01730c08df82eaa7a7a61f11d656526506112cc1709" +checksum = "d50af8abc119fb8bb6dbabcfa89656f46f84aa0ac7688088608076ad2b459a84" dependencies = [ "thiserror-impl", ] [[package]] -name = "thiserror-core" -version = "1.0.50" +name = "thiserror-impl" +version = "1.0.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c001ee18b7e5e3f62cbf58c7fe220119e68d902bb7443179c0c8aef30090e999" +checksum = "08904e7672f5eb876eaaf87e0ce17857500934f4981c4a0ab2b4aa98baac7fc3" dependencies = [ - "thiserror-core-impl", + "proc-macro2", + "quote", + "syn 2.0.79", ] [[package]] -name = "thiserror-core-impl" -version = "1.0.50" +name = "thread_local" +version = "1.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4c60d69f36615a077cc7663b9cb8e42275722d23e58a7fa3d2c7f2915d09d04" +checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.66", + "cfg-if", + "once_cell", ] [[package]] -name = "thiserror-impl" -version = "1.0.61" +name = "time" +version = "0.3.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533" +checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.66", + "deranged", + "itoa", + "num-conv", + "powerfmt", + "serde", + "time-core", + "time-macros", ] [[package]] -name = "thread_local" -version = "1.1.8" +name = "time-core" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" + +[[package]] +name = "time-macros" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" dependencies = [ - "cfg-if", - "once_cell", + "num-conv", + "time-core", ] [[package]] @@ -5497,9 +5657,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.6.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" dependencies = [ "tinyvec_macros", ] @@ -5512,32 +5672,31 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.38.0" +version = "1.40.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba4f4a02a7a80d6f274636f0aa95c7e383b912d41fe721a31f29e29698585a4a" +checksum = "e2b070231665d27ad9ec9b8df639893f46727666c6767db40317fbe920a5d998" dependencies = [ "backtrace", "bytes", "libc", "mio", - "num_cpus", "parking_lot", "pin-project-lite", "signal-hook-registry", - "socket2 0.5.7", + "socket2", "tokio-macros", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] name = "tokio-macros" -version = "2.3.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f5ae998a069d4b5aba8ee9dad856af7d520c3699e6159b185c2acd48155d39a" +checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.79", ] [[package]] @@ -5571,11 +5730,22 @@ dependencies = [ "tokio", ] +[[package]] +name = "tokio-rustls" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" +dependencies = [ + "rustls 0.23.14", + "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", @@ -5597,9 +5767,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", @@ -5611,21 +5781,21 @@ dependencies = [ [[package]] name = "toml" -version = "0.8.15" +version = "0.8.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac2caab0bf757388c6c0ae23b3293fdb463fee59434529014f85e3263b995c28" +checksum = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e" dependencies = [ "serde", "serde_spanned", "toml_datetime", - "toml_edit 0.22.16", + "toml_edit 0.22.22", ] [[package]] name = "toml_datetime" -version = "0.6.6" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4badfd56924ae69bcc9039335b2e017639ce3f9b001c393c1b2d1ef846ce2cbf" +checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" dependencies = [ "serde", ] @@ -5643,26 +5813,15 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.21.1" +version = "0.22.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" -dependencies = [ - "indexmap", - "toml_datetime", - "winnow 0.5.40", -] - -[[package]] -name = "toml_edit" -version = "0.22.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "278f3d518e152219c994ce877758516bca5e118eaed6996192a774fb9fbf0788" +checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" dependencies = [ "indexmap", "serde", "serde_spanned", "toml_datetime", - "winnow 0.6.18", + "winnow 0.6.20", ] [[package]] @@ -5675,22 +5834,22 @@ dependencies = [ "futures-util", "pin-project", "pin-project-lite", - "tokio", "tower-layer", "tower-service", + "tracing", ] [[package]] name = "tower-layer" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" [[package]] name = "tower-service" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" @@ -5712,7 +5871,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.79", ] [[package]] @@ -5727,45 +5886,32 @@ dependencies = [ [[package]] name = "tracing-log" -version = "0.1.4" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f751112709b4e791d8ce53e32c4ed2d353565a795ce84da2285393f41557bdf2" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" dependencies = [ "log", "once_cell", "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", -] - [[package]] name = "tracing-subscriber" -version = "0.2.25" +version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e0d2eaa99c3c2e41547cfa109e910a68ea03823cccad4a0525dcbc9b01e8c71" +checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" dependencies = [ - "ansi_term", - "chrono", - "lazy_static", "matchers", + "nu-ansi-term", + "once_cell", "regex", - "serde", - "serde_json", "sharded-slab", "smallvec", "thread_local", + "time", "tracing", "tracing-core", "tracing-log", - "tracing-serde", ] [[package]] @@ -5809,9 +5955,9 @@ dependencies = [ [[package]] name = "typeid" -version = "1.0.0" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "059d83cc991e7a42fc37bd50941885db0888e34209f8cfd9aab07ddec03bc9cf" +checksum = "0e13db2e0ccd5e14a544e8a246ba2312cd25223f616442d7f2cb0e3db614236e" [[package]] name = "typenum" @@ -5821,9 +5967,9 @@ checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" [[package]] name = "typetag" -version = "0.2.16" +version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "661d18414ec032a49ece2d56eee03636e43c4e8d577047ab334c0ba892e29aaf" +checksum = "52ba3b6e86ffe0054b2c44f2d86407388b933b16cb0a70eea3929420db1d9bbe" dependencies = [ "erased-serde", "inventory", @@ -5834,13 +5980,13 @@ dependencies = [ [[package]] name = "typetag-impl" -version = "0.2.16" +version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac73887f47b9312552aa90ef477927ff014d63d1920ca8037c6c1951eab64bb1" +checksum = "70b20a22c42c8f1cd23ce5e34f165d4d37038f5b663ad20fb6adbdf029172483" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.79", ] [[package]] @@ -5857,15 +6003,15 @@ dependencies = [ [[package]] name = "unicode-bidi" -version = "0.3.15" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" +checksum = "5ab17db44d7388991a428b2ee655ce0c212e862eff1768a455c58f9aad6e7893" [[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" @@ -5878,9 +6024,9 @@ dependencies = [ [[package]] name = "unicode-xid" -version = "0.2.4" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" [[package]] name = "universal-hash" @@ -5900,9 +6046,9 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "url" -version = "2.5.0" +version = "2.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" +checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c" dependencies = [ "form_urlencoded", "idna 0.5.0", @@ -5929,9 +6075,9 @@ checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" [[package]] name = "version_check" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "w3f-bls" @@ -5950,19 +6096,13 @@ dependencies = [ "digest 0.10.7", "rand", "rand_chacha", - "rand_core 0.6.4", + "rand_core", "sha2 0.10.8", "sha3", "thiserror", "zeroize", ] -[[package]] -name = "waker-fn" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "317211a0dc0ceedd78fb2ca9a44aed3d7b9b26f81870d485c07122b4350673b7" - [[package]] name = "walkdir" version = "2.5.0" @@ -5990,34 +6130,35 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.92" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" +checksum = "a82edfc16a6c469f5f44dc7b571814045d60404b55a0ee849f9bcfa2e63dd9b5" dependencies = [ "cfg-if", + "once_cell", "wasm-bindgen-macro", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.92" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" +checksum = "9de396da306523044d3302746f1208fa71d7532227f15e347e2d93e4145dd77b" dependencies = [ "bumpalo", "log", "once_cell", "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.79", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.42" +version = "0.4.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76bc14366121efc8dbb487ab05bcc9d346b3b5ec0eaa76e46594cabbe51762c0" +checksum = "61e9300f63a621e96ed275155c108eb6f843b6a26d053f122ab69724559dc8ed" dependencies = [ "cfg-if", "js-sys", @@ -6027,9 +6168,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.92" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" +checksum = "585c4c91a46b072c92e908d99cb1dcdf95c5218eeb6f3bf1efa991ee7a68cccf" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -6037,31 +6178,32 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.92" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" +checksum = "afc340c74d9005395cf9dd098506f7f44e38f2b4a21c6aaacf9a105ea5e1e836" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.79", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.92" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" +checksum = "c62a0a307cb4a311d3a07867860911ca130c3494e8c2719593806c08bc5d0484" [[package]] name = "wasm-bindgen-test" -version = "0.3.42" +version = "0.3.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9bf62a58e0780af3e852044583deee40983e5886da43a271dd772379987667b" +checksum = "68497a05fb21143a08a7d24fc81763384a3072ee43c44e86aad1744d6adef9d9" dependencies = [ "console_error_panic_hook", "js-sys", + "minicov", "scoped-tls", "wasm-bindgen", "wasm-bindgen-futures", @@ -6070,22 +6212,21 @@ dependencies = [ [[package]] name = "wasm-bindgen-test-macro" -version = "0.3.42" +version = "0.3.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7f89739351a2e03cb94beb799d47fb2cac01759b40ec441f7de39b00cbf7ef0" +checksum = "4b8220be1fa9e4c889b30fd207d4906657e7e90b12e0e6b0c8b8d8709f5de021" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.79", ] [[package]] name = "wasmi" -version = "0.30.0" +version = "0.31.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51fb5c61993e71158abf5bb863df2674ca3ec39ed6471c64f07aeaf751d67b4" +checksum = "77a8281d1d660cdf54c76a3efa9ddd0c270cada1383a995db3ccb43d166456c7" dependencies = [ - "intx", "smallvec", "spin", "wasmi_arena", @@ -6101,9 +6242,9 @@ checksum = "104a7f73be44570cac297b3035d76b169d6599637631cf37a1703326a0727073" [[package]] name = "wasmi_core" -version = "0.12.0" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "624e6333e861ef49095d2d678b76ebf30b06bf37effca845be7e5b87c90071b7" +checksum = "dcf1a7db34bff95b85c261002720c00c3a6168256dcb93041d3fa2054d19856a" dependencies = [ "downcast-rs", "libm", @@ -6122,9 +6263,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.69" +version = "0.3.70" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef" +checksum = "26fdeaafd9bd129f65e7c031593c24d62186301e0c72c8978fa1678be7d532c0" dependencies = [ "js-sys", "wasm-bindgen", @@ -6136,7 +6277,7 @@ version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5388522c899d1e1c96a4c307e3797e0f697ba7c77dd8e0e625ecba9dd0342937" dependencies = [ - "arrayvec 0.7.4", + "arrayvec 0.7.6", "base64 0.21.7", "bytes", "derive_more", @@ -6167,15 +6308,9 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "0.25.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" - -[[package]] -name = "webpki-roots" -version = "0.26.1" +version = "0.26.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3de34ae270483955a94f4b21bdaaeb83d508bb84a01435f393818edb0012009" +checksum = "841c67bff177718f1d4dfefde8d8f0e78f9b6589319ba88312f567fc5841a958" dependencies = [ "rustls-pki-types", ] @@ -6189,7 +6324,7 @@ dependencies = [ "either", "home", "once_cell", - "rustix 0.38.34", + "rustix", ] [[package]] @@ -6224,11 +6359,32 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] -name = "windows-core" -version = "0.52.0" +name = "windows-registry" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e400001bb720a623c1c69032f8e3e4cf09984deec740f007dd2b03ec864804b0" +dependencies = [ + "windows-result", + "windows-strings", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-result" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-strings" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" dependencies = [ + "windows-result", "windows-targets 0.52.6", ] @@ -6391,9 +6547,9 @@ dependencies = [ [[package]] name = "winnow" -version = "0.6.18" +version = "0.6.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68a9bda4691f099d435ad181000724da8e5899daa10713c2d432552b9ccd3a6f" +checksum = "36c1fec1a2bb5866f07c25f68c26e565c4c200aebb96d7e55710c19d3e8ac49b" dependencies = [ "memchr", ] @@ -6409,48 +6565,51 @@ dependencies = [ ] [[package]] -name = "winreg" -version = "0.52.0" +name = "wyz" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a277a57398d4bfa075df44f501a17cfdf8542d224f0d36095a2adc7aee4ef0a5" +checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" dependencies = [ - "cfg-if", - "windows-sys 0.48.0", + "tap", ] [[package]] -name = "wyz" -version = "0.5.1" +name = "x25519-dalek" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" +checksum = "c7e468321c81fb07fa7f4c636c3972b9100f0346e5b6a9f2bd0603a52f7ed277" dependencies = [ - "tap", + "curve25519-dalek", + "rand_core", + "serde", + "zeroize", ] [[package]] name = "yap" -version = "0.10.0" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2a7eb6d82a11e4d0b8e6bda8347169aff4ccd8235d039bba7c47482d977dcf7" +checksum = "ff4524214bc4629eba08d78ceb1d6507070cc0bcbbed23af74e19e6e924a24cf" [[package]] name = "zerocopy" -version = "0.7.34" +version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae87e3fcd617500e5d106f0380cf7b77f3c6092aae37191433159dda23cfb087" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" dependencies = [ + "byteorder", "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.7.34" +version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15e934569e47891f7d9411f1a451d947a60e000ab3bd24fbb970f000387d1b3b" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.79", ] [[package]] @@ -6470,5 +6629,5 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.79", ] diff --git a/packages/kos-sdk/Cargo.toml b/packages/kos-sdk/Cargo.toml index 6616f51..5c49012 100644 --- a/packages/kos-sdk/Cargo.toml +++ b/packages/kos-sdk/Cargo.toml @@ -57,7 +57,9 @@ prost = { workspace = true } base64 = "0.22.1" sp-core = "34.0.0" sp-runtime = "39.0.0" -subxt = "0.30.1" +subxt = "0.37.0" +scale-value = "0.16.3" +parity-scale-codec = "3.6.12" [dev-dependencies] tokio = { version = "1", features = ["full"] } diff --git a/packages/kos-sdk/artifacts/polkadot_metadata_full.scale b/packages/kos-sdk/artifacts/polkadot_metadata_full.scale new file mode 100644 index 0000000000000000000000000000000000000000..703c30679d02643123839f4227459de337b87d43 GIT binary patch literal 421187 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, +} + +fn to_bytes(hex_str: &str) -> Vec { + let hex_str = hex_str + .strip_prefix("0x") + .expect("0x should prefix hex encoded bytes"); + hex::decode(hex_str).expect("valid bytes from hex") +} + #[wasm_bindgen] impl DOT { #[wasm_bindgen(js_name = "baseChain")] @@ -200,17 +218,85 @@ impl DOT { Ok(address.is_ok()) } - pub fn decode_tx( + pub fn decode_extrinsic( genesis_hash: &str, spec_version: u32, transaction_version: u32, tx: &str, ) -> Result, Error> { let client = DOT::get_client(genesis_hash, spec_version, transaction_version)?; - let tx_bytes = hex::decode(tx)?; + let data = &mut &*to_bytes( + "0x04050300a653ae79665565ba7fc682c385b3c038c2091ab6d6053355b9950a108ac48b0600", + ); + + if data.is_empty() { + return Err(Error::InvalidTransaction("empty transaction".to_string())); + } - let extrinsic = SubmittableExtrinsic::from_bytes(client.clone(), tx_bytes); - Ok(Vec::from((extrinsic.encoded()))) + let is_signed = data[0] & 0b1000_0000 != 0; + let version = data[0] & 0b0111_1111; + *data = &data[1..]; + + if version != 4 { + return Err(Error::InvalidTransaction(format!( + "unsupported extrinsic version: {}", + version + ))); + } + + let call_data = DOT::decode_call_data(data, client)?; + + Ok(vec![0u8; 32]) + } + + fn decode_call_data( + data: &mut &[u8], + client: OfflineClient, + ) -> Result { + let metadata = client.metadata(); + + // Pluck out the u8's representing the pallet and call enum next. + if data.len() < 2 { + return Err(Error::InvalidTransaction( + "expected at least 2 more bytes for the pallet/call index".to_string(), + )); + } + let pallet_index = u8::decode(data).unwrap(); + let call_index = u8::decode(data).unwrap(); + let adjusted_pallet_index = pallet_index.saturating_sub(1); // 1-indexed + + let pallet_name = metadata + .pallet_by_index(adjusted_pallet_index) + .ok_or_else(|| { + Error::InvalidTransaction(format!( + "pallet index {} out of bounds", + adjusted_pallet_index + )) + })?; + + let call_variant = pallet_name.call_variant_by_index(call_index).unwrap(); + println!( + "pallet name: {}, call name: {}", + pallet_name.name(), + call_variant.name + ); + + let arguments = call_variant + .clone() + .fields + .iter() + .map(|field| { + let id = field.ty.id; + Value::decode_as_type(data, id.into(), metadata.types()) + }) + .collect::, _>>() + .unwrap(); + + Ok(CallData { + pallet: pallet_name.name().to_string(), + call: call_variant.name.to_string(), + args: arguments, + }) } pub fn tx_from_raw(raw: &str) -> Result { @@ -240,14 +326,13 @@ impl DOT { H256::from_slice(&bytes) }; - let _runtime_version = subxt::rpc::types::RuntimeVersion { + let _runtime_version = RuntimeVersion { spec_version, transaction_version, - other: Default::default(), }; let metadata = { - let bytes = std::fs::read("./artifacts/polkadot_metadata_small.scale").unwrap(); + let bytes = std::fs::read("./artifacts/polkadot_metadata_full.scale").unwrap(); Metadata::decode(&mut &*bytes).unwrap() }; @@ -259,9 +344,12 @@ impl DOT { } } -// Test keypair from mnemonic #[cfg(test)] mod tests { + use crate::chains::DOT; + use prost::Message; + use subxt::client::OfflineClientT; + use subxt::tx::Payload; use subxt::utils::H256; #[test] @@ -336,4 +424,30 @@ mod tests { "14m5oqLEDXMeydyU84E2gMMykKTt78QBQFWNjKhndm1bgCaX" ); } + + #[test] + fn test_decode_call_data() { + let client = DOT::get_client( + "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + 1003000, + 26, + ) + .unwrap(); + + let call_data_hex = + "0x050300a653ae79665565ba7fc682c385b3c038c2091ab6d6053355b9950a108ac48b060700b08ef01b"; + + let call_data_bytes = hex::decode(call_data_hex.strip_prefix("0x").unwrap()).unwrap(); + + let call_data_cursor = &mut &*call_data_bytes; + + let decoded = super::DOT::decode_call_data(call_data_cursor, client.clone()).unwrap(); + + let payload = subxt::dynamic::tx(decoded.pallet, decoded.call, decoded.args); + + let partial_tx = client + .tx() + .create_partial_signed_offline(&payload, Default::default()) + .unwrap(); + } } From a9ae35a0bb390915919d113cba5b37a814d7d88d Mon Sep 17 00:00:00 2001 From: Pedro Camboim Date: Mon, 14 Oct 2024 21:26:43 -0300 Subject: [PATCH 15/25] feat: sign extrinsic --- .../kos-sdk/src/chains/polkadot/address.rs | 6 + packages/kos-sdk/src/chains/polkadot/mod.rs | 108 ++++++++++-------- 2 files changed, 65 insertions(+), 49 deletions(-) diff --git a/packages/kos-sdk/src/chains/polkadot/address.rs b/packages/kos-sdk/src/chains/polkadot/address.rs index e719879..607733f 100644 --- a/packages/kos-sdk/src/chains/polkadot/address.rs +++ b/packages/kos-sdk/src/chains/polkadot/address.rs @@ -2,6 +2,7 @@ use kos_crypto::keypair::KeyPair; use sp_core::crypto::{Ss58AddressFormat, Ss58Codec}; use sp_core::sr25519::Public; use std::str::FromStr; +use subxt::utils::AccountId32; use wasm_bindgen::prelude::wasm_bindgen; const ADDRESS_LEN: usize = 32; @@ -43,6 +44,11 @@ impl Address { pub fn to_hex_address(self) -> String { hex::encode(self.0) } + + /// to AccountId32 + pub fn to_account_id32(&self) -> AccountId32 { + AccountId32::from(self.0) + } } impl FromStr for Address { diff --git a/packages/kos-sdk/src/chains/polkadot/mod.rs b/packages/kos-sdk/src/chains/polkadot/mod.rs index 8fddcda..81bbc96 100644 --- a/packages/kos-sdk/src/chains/polkadot/mod.rs +++ b/packages/kos-sdk/src/chains/polkadot/mod.rs @@ -4,7 +4,7 @@ pub mod transaction; use crate::chains::DOTTransaction; use crate::models::BroadcastResult; use crate::{ - chain::{self, BaseChain}, + chain::BaseChain, models, models::{PathOptions, Transaction, TransactionRaw}, }; @@ -21,9 +21,8 @@ use sp_core::{sr25519, Pair}; use std::str::FromStr; use subxt::client::{OfflineClientT, RuntimeVersion}; use subxt::dynamic::Value; +use subxt::ext::frame_metadata::RuntimeMetadataPrefixed; use subxt::ext::scale_decode::DecodeAsType; -use subxt::ext::subxt_core; -use subxt::ext::subxt_core::tx::payload::ValidationDetails; use subxt::tx::Payload; use subxt::utils::H256; use subxt::{Metadata, OfflineClient, PolkadotConfig}; @@ -218,36 +217,36 @@ impl DOT { Ok(address.is_ok()) } - pub fn decode_extrinsic( - genesis_hash: &str, - spec_version: u32, - transaction_version: u32, - tx: &str, - ) -> Result, Error> { - let client = DOT::get_client(genesis_hash, spec_version, transaction_version)?; - let data = &mut &*to_bytes( - "0x04050300a653ae79665565ba7fc682c385b3c038c2091ab6d6053355b9950a108ac48b0600", - ); - - if data.is_empty() { - return Err(Error::InvalidTransaction("empty transaction".to_string())); - } - - let is_signed = data[0] & 0b1000_0000 != 0; - let version = data[0] & 0b0111_1111; - *data = &data[1..]; - - if version != 4 { - return Err(Error::InvalidTransaction(format!( - "unsupported extrinsic version: {}", - version - ))); - } - - let call_data = DOT::decode_call_data(data, client)?; - - Ok(vec![0u8; 32]) - } + // pub fn decode_extrinsic( + // genesis_hash: &str, + // spec_version: u32, + // transaction_version: u32, + // tx: &str, + // ) -> Result, Error> { + // let client = DOT::get_client(genesis_hash, spec_version, transaction_version)?; + // let data = &mut &*to_bytes( + // "0x04050300a653ae79665565ba7fc682c385b3c038c2091ab6d6053355b9950a108ac48b0600", + // ); + // + // if data.is_empty() { + // return Err(Error::InvalidTransaction("empty transaction".to_string())); + // } + // + // let is_signed = data[0] & 0b1000_0000 != 0; + // let version = data[0] & 0b0111_1111; + // *data = &data[1..]; + // + // if version != 4 { + // return Err(Error::InvalidTransaction(format!( + // "unsupported extrinsic version: {}", + // version + // ))); + // } + // + // let call_data = DOT::decode_call_data(data, client)?; + // + // Ok(vec![0u8; 32]) + // } fn decode_call_data( data: &mut &[u8], @@ -263,16 +262,10 @@ impl DOT { } let pallet_index = u8::decode(data).unwrap(); let call_index = u8::decode(data).unwrap(); - let adjusted_pallet_index = pallet_index.saturating_sub(1); // 1-indexed - let pallet_name = metadata - .pallet_by_index(adjusted_pallet_index) - .ok_or_else(|| { - Error::InvalidTransaction(format!( - "pallet index {} out of bounds", - adjusted_pallet_index - )) - })?; + let pallet_name = metadata.pallet_by_index(pallet_index).ok_or_else(|| { + Error::InvalidTransaction(format!("pallet index {} out of bounds", pallet_index)) + })?; let call_variant = pallet_name.call_variant_by_index(call_index).unwrap(); println!( @@ -320,6 +313,7 @@ impl DOT { genesis_hash: &str, spec_version: u32, transaction_version: u32, + raw_metadata: &str, ) -> Result, Error> { let _genesis_hash = { let bytes = hex::decode(genesis_hash)?; @@ -331,10 +325,12 @@ impl DOT { transaction_version, }; - let metadata = { - let bytes = std::fs::read("./artifacts/polkadot_metadata_full.scale").unwrap(); - Metadata::decode(&mut &*bytes).unwrap() - }; + let binding = to_bytes(raw_metadata); + let bytes = binding.as_slice(); + + let prefixed_metadata = RuntimeMetadataPrefixed::decode(&mut &*bytes).unwrap(); + + let metadata = Metadata::try_from(prefixed_metadata).unwrap(); Ok(OfflineClient::::new( _genesis_hash, @@ -349,8 +345,7 @@ mod tests { use crate::chains::DOT; use prost::Message; use subxt::client::OfflineClientT; - use subxt::tx::Payload; - use subxt::utils::H256; + use subxt::utils::{MultiAddress, MultiSignature, H256}; #[test] fn test_keypair_from_mnemonic() { @@ -401,6 +396,7 @@ mod tests { "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", 1002007, 26, + "", ) .unwrap(); @@ -431,11 +427,12 @@ mod tests { "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", 1003000, 26, + "...raw metadata...", ) .unwrap(); let call_data_hex = - "0x050300a653ae79665565ba7fc682c385b3c038c2091ab6d6053355b9950a108ac48b060700b08ef01b"; + "0x0503002534454d30f8a028e42654d6b535e0651d1d026ddf115cef59ae1dd71bae074e910100322121000000f84d0f001a00000091b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c391b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c300"; let call_data_bytes = hex::decode(call_data_hex.strip_prefix("0x").unwrap()).unwrap(); @@ -449,5 +446,18 @@ mod tests { .tx() .create_partial_signed_offline(&payload, Default::default()) .unwrap(); + + let signer_payload = partial_tx.signer_payload(); + + let kp = super::DOT::keypair_from_bytes(&[0u8; 32]).unwrap(); + let signature = super::DOT::sign_digest(&signer_payload, &kp).unwrap(); + + let address = + MultiAddress::Id(super::address::Address::from_keypair(&kp).to_account_id32()); + let signature = MultiSignature::Sr25519(<[u8; 64]>::try_from(signature).unwrap()); + + let submittable = partial_tx.sign_with_address_and_signature(&address, &signature); + + println!("{:?}", hex::encode(submittable.encoded())); } } From 96908bfedb5c855f6b8995dfe7d0261697dd3fd1 Mon Sep 17 00:00:00 2001 From: Pedro Camboim Date: Tue, 15 Oct 2024 16:44:34 -0300 Subject: [PATCH 16/25] chore: request metadata --- .../kos-sdk/artifacts/dot-klever-node.scale | Bin 0 -> 411737 bytes .../artifacts/polkadot_metadata_full.scale | Bin 421187 -> 0 bytes .../artifacts/polkadot_metadata_small.scale | Bin 103661 -> 0 bytes .../artifacts/v14_metadata_polkadot.scale | Bin 269807 -> 0 bytes packages/kos-sdk/src/chains/polkadot/mod.rs | 150 ++++++++++++------ .../kos-sdk/src/chains/polkadot/requests.rs | 29 ++++ 6 files changed, 130 insertions(+), 49 deletions(-) create mode 100644 packages/kos-sdk/artifacts/dot-klever-node.scale delete mode 100644 packages/kos-sdk/artifacts/polkadot_metadata_full.scale delete mode 100644 packages/kos-sdk/artifacts/polkadot_metadata_small.scale delete mode 100644 packages/kos-sdk/artifacts/v14_metadata_polkadot.scale create mode 100644 packages/kos-sdk/src/chains/polkadot/requests.rs diff --git a/packages/kos-sdk/artifacts/dot-klever-node.scale b/packages/kos-sdk/artifacts/dot-klever-node.scale new file mode 100644 index 0000000000000000000000000000000000000000..69f5f4454d82e360716a11f760bd396728aa1870 GIT binary patch literal 411737 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ℑ>auJ48l&wAYT!11bWJdK4MM@1cM|&r1L;G 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

+wBlx#a4@>Y;R++D(;tmwfGi117^Qj?%oht zkYCOy;BcdUH3(v8?;=DcFFqz5TTH(Aj=5=j3qmAK@IOcyK?-u(N|=x@DfjIG;;01% z=Z2ak$jU3Em_ll#S~1e1^A)FK(=Y=52fUB(!rhU-5{z1NX9qU0*q$;2SrlYEU_OsF zvw?}Z<)ePUSd_c9Z^};6$WE9+cxWEQDb9Y0v5P@>zq*cGH%u|Q52vE?*m45+}VM4kXwlFQyhMCnJaRXmQ z#8y(<4?>he2QqKrPlR(qhDF}FDCf-gw-~boE;+k=YTOdIJaujvS|zfKoNq41HaR#h zeozX3-LT^}pY0u)1I z3Uj!`Gg z&4u>rK1h}|W+IopDnN~+Aoj#o3|11;zE(9pjF9Arr1Wt-he?-9UfE)$!td=n^3S7G zF)!)4`HT-^jJ!DHzb^#p54JkErV-XtBOgsiRuE%*BSN% z*hjy6wzOv2yVVs}KaZI3dL(8fz)?6StwLI-j^ zDg_1|Kzs@OkR^e=G$Q$8{a9h$UZbZ6s6h0SE#{8CTabhW*%Uz$iLR(@{n}94<*Ru) zd4crQl>Y`dgScC8T!EOm!^k=#g;OIJDrP$rKW06Iitwng4-&8R`omcaGzRiAMrVM@ z7DVc47~I}FzTLipboJb9U)0hJyZC8Ynxjny%qCjQyi}NlWCEa$J}6bijK~@tK*FAe zJeNrgV3bzbBn`y!lP#Tt?#J2rrq(D?Ct|sMr?!EKUQg2k=*L|Gt}qZ2Y(=GQ_DZ*{u9=02=Qoh^7_C0Q-&p1U(D{e1ueGOv(sNlB2ft znzxEUCFFVOoniTCTd25tG9!6R1ui=;G_AFc{(vpl27D46%KLE;7!lGC)tIs!o!H!B zgpQs?%^{sqbOjxDME5s$_9Iu!iOSa>#$P;j7MELjKN!nM|nE6k3Vg8Qt=$Wz9>ha71|LKphbmlabERN;{*M@sgi5FTY)WtiDnYp@)*0CYm+j03RcNi=57h|1^ zcNlx=p3N8b@7`?8e{>`UaX^n~yM>Je312vq&FWv~c4~q4JZK@pQ_fiMXax>|-VIJ< zovDJ!9}b7H24nw8H@bp6N$xCGWRWe%(VMzQYp@G`a z5Dp!y>W|0g`ahnn>yXr#t=>Gvl0g$ddX1LzgKRlMPS=`ScLFo#4Fsg6baBSY9Z+X5 z1UI)tD1CZ9e6&E*sdZFb<)G@4#o)8j-ge;3YBl#){ge4mXKN7ia>Qg&o<*OQ_O+EB zTG3-~;(Vgp8Lp7+OVsAX|KyF(u-RL)VF`y-rIjtHN!Kr{RL;Wjgj13i3Snv@SO^<; zIYk=qrRnqiyh z3c8)f3Uq@m5HfOP%0qYSi4-)OJ5@MiyP{O^!w^u%sN+Ido=wOYkxPL0s$ia2D>m!} zsG&=bdZU|WAjGiBRA(^pT|QQ&O?cWhd)SKtN`VvUC71-KuYNT&o`LkuKO7J}2&Fux zpqV1hP96wJUD6BEQlqWZD78!EUn&^5XS3prFTRpXUo^F70yxNoM1f@F#WE+D+Ba@i z_XWdZ@W_3;(%N-tnAD=G2o5#eZ`5;9Dw>JDckny56R{o{_T1fJfGVC#{4w&*_96H& zc9gY$5cz6-hd>ErEUuljUt7|_ff11^?tVSOd2(+nf9)lhkC92nFT;H@T;!3C-y5qbvDPpzt}(7{rZhp=-vU?rLR z5Eu};$ios^Y-|Qr!K03hIjNN#OG|f=CboKy*P)KoOZl%WHpWk9$6MvcI>%uX)#~a6 z)>%362-jVi-N0d8ty-+2Arzl6|78sG9;i>J{rNNlB&t9y7%Od+Pe|O{fr*cy5OP<9 zN95y(QsotOEjo@nJDzq8svygJ8A_-aFMW+MD!8KtSxJa3N4++_CMS1&#L9DFT-1JI zg11UimuBIc9&cB!N9L}R2@?3&TE|j8kEcaq6w1HZJvlOXVFui{)~}h^i9yyh^*mTn zvwdjieSJ_9VLE@dmacDk%{K}0@ej*cyUd9$-(brIa%(p2+SQn;%k6g20fYE@vRQGP zY8Yzf?Heh$*eBlIle1m)EOgFsHckO7)eyBExbfuY05wc5=rQ8-&|seNRwJ#{K4{Wq zFEmID%us~QiPWnv+k4T4uR{pYFa?uwVE6XD?jaO$*q0;-$jXHABUjY=&$0yS(_AJl zEeBa|`EEfLWLx9?EZZ_)zAd#jJ0V62$EfK#OV#Ui_XoBUw}3e`*H#)Wt?1vIHIXHf z9a@CW>%dk%H^4RaeDJ;uE-j7WAv^0TDbV{-YT0!q1<(partYSz;k<_DXi`!!aD?(n zOF*ghR9uA!11m3rd=%0{XyIo!LO6a6;{HVys8o(Vlrqc|t_%5qc3vZ2^M5&cL6z!m#uQao+A z2sFfx+U^F25ka9Nlx~xOgRr8kMd_v{qr%lEpbHu%{Y<{}_s_F+p1*&tO@Fr~8`bDw2+$Ihk?(rBK0f-r>fisqe(`_B zZP+|dXdBCu^}&!Hs*jK_Xd_oIc-`FEIBt@}k=vL04wBDq?OmM!1Hq$h-{cW{^pW(t z_Vd`G*V~1aCnc+cHr$xDQE#2TaOJXvqe_u@;$ZJcdeCi}ji2^vJCjWZ$oL~efKE_9 z?ZKaxtPcX?iI03-ENr{tx4vg+@!Q>3FA+G?t6%mXg80uQ>+9Zb{{PKcRwM|h$ksr6 z^bcYFBci8ym@mB1={`BUIVI^YOmMYY6NJ%+_k8ltjW7&}o*Gs@H|aI*q!w&woA+v{ zd6G%Us%49a3~>i;9yldK_aFYzO1+b;*|pAoUVX(s7`i_%>7wK-469e?_r%s`8df)K z+V?HPj$ZT<8}8iSxZZw#YyGEe*ediXZaQT4dShA__a&A0Jotz`<^QRPs^Bn3r<{R3 zG5S0`*`Rh0v*Rs8S9RrVK6V^B`9>J}%F@5~X0SN9{uO)llMj5r-l@K2jV=0&q(`tQ zE_u_N_WX9va+5f2Bz|YDk)>?jc)N`^yKlX{v+aS#e`?_J!^cy8CEBxo97Pdg5*@{) zwEUE0)kR#wj8S82erB@zvdF(n`LE@T*{8%J0ldNl>**trlx}M)Em@kBmMni(qU+(^ z)6gsxelHh(m;QL#(ryyj%R7nvSlwdgpI|}nX)B!yKYdQJ60>-8yjcoASA?Iuf8y8L z$ka|&SR&qHezk<_WijC<4*J92A|h5fLc2BlER*X&#lf&19Zx$+aT&Fmv(PCVbymP@ zsWCD2C0Ef8>Gmhd^=o}(6qdb;zoPNygJgNq`FoyAfKC9Rg&PUJU<#Bs*$+Af3$T!& zRuLwMwjz>=ZUU?J;!w&q`CWzm?zUm19$20)4d+;ltvcvglzFPLN^Fag;?>lht-x8J zO1`E+*5W#wZg9UjAG649EMU5Uy%y|nl(3MMy*cw``5Zjx3Ci(RN|;Lzw3XH^Ew2=F z96hq(bvNKcs`g(r7*(9=?#Z#M>m#@#!|;7cY1#6X*$I~7QMSilgg{B>au)hf3)Z*x z2#XLi)!)s(FagyqorC1x7_@(3&2J5)akWqF3o&)oI@v30&J`Z#7tMryWd8%*6 zr)OEd!FzzBM_(*|5tCLWzZl!-4FE7eD+JqcHI9yrq@~B&O6M+Z@82~#A-rsipp#8B zksp*h&Evb}MH{t2!1laC$8v!{lGU1ajnWmrqihCUU*m%&d%2HdWERuWQ}dG2smo7I zR$W3rCH(eD>4$Bl^Ou%)?yqzEe9+sPLzaG3seE7!c7xv;>4K#zHyNCQJ-7uG4h*>AV{c9i z5USwK9%SpfRVMoAfRTI3sB8)*255jGq0B<#O7RYys+x&1EtxtR2EM}oGTtSxQD}Rh ztQ#i{Pv-KzKp_sLCJwg z10(VIbVqUD+i^fng8N4ge9%mbxcL5kLkN`A%oyhsLL2{FXegr+lz* zroK07*fCjy5K#W>_reST(QB;kXMHO}x=AASdw>Vrav& z3_~nwJlOU*!~`7$G+_|rCcD7Gv&J$p>?2RK;XL6a3>V08;dsjYqA8pwp0{GUoAsz^kSkMO~7_*4;IE`po{?SjM>#J2+r=`=-*SD}Z_ub$oMVE#6vBtX~2 z!GvO?b>~(6M7qbbAHv5+&z;w7#)MB%F&vV>~aArWo``RY5J$ZE5YH~dT2WE%dWy<^i%`)?1}db z!5A|dUzC#`tvZJYqb=m8ID8G18S35t^cGgyfj3FOe0#BiP~d z_BWct)1%y!hacMB-KTet+D^GiD}E=*nhUY;+kl{pm{oy=^XT9GxsCi%v!;h)>_8*NOHfVNC-* zP~hTtTx*XZF+8el>6lVwf$-4K+e{DB6TK864e<6`<93IXf}?-_4BfNhOUkM|fS#LU zO}mq?3#zv*O)4P?0QRlNqMj(t3Qc^NzW=IDG*3M|uaJfy9W%bf zRRh+U)u?AAIP?`7pESHc9rJ=E@dHnk7f{K+Fl}}I66;5-QfRO`|BKOyTG~HvKlLM} zwtjMnTfG`eM~4E7H@|>?o-;Ae_SHeNLm&nZEyN@QU&RTv!Qdj8B)*~G5u8vhFTMoux>R=@(VXA4r3A-?hbCAmz8L!l)WSnGVk z00T_i+PMV=g_{j!T^T<7u<~B8D9}uS{>^~XdF-)=b~Yvs&K!bbHWAOT`yBnOXhJzP zWBqNzVBykobxquYB6*1F0!&s83LQ^z{TZ17wq2}w)KV)sAfRs7AcinFNuor{f(Vd% zT?d=LSgJ2SBU!H^*%6~7_;soE&lQ{UZ|5=EqXkCmE*4eEVk?VlFjBe`PZDwGd;kqE z9_#F){r18Dt*@F_1&@-lARM6S!?GU5N?Se_v-IoxayzzlC{ic{9Q!6) z?|fG8#>iFq>vTiRn0kTX`#pVy1J4+~t%RNqV)t~v&^p*sAY-n-aA<&w^Zu31$P<%6 z1|qgG28%-#nUC>TlP)cA!F)fVG_bUN1Xi%w8aWiUVe&FW5>Lyy#ql8MaESrh{IZnR z35#%=N38QD5J(@mM3GpFJ4{RC%U_Tj+7@ED7)iRDa@tt@?;biP>zpZ-6qtu>Q-YNd#$3 z(|BS7OoA50BZGA=C810#sj#mvRKuqQjKlS4wIe{z4lf`jCm6Q-K0@cj>}KXN`H zT^@K6w}!5%Nq?Ff*cA5^^F@;6hbOQHXLH4T3IY1cnh{%kr?xNo|7qDHdkrD;>M&wa40lWj(ZI9(9eAb$R>4kR0@ z4vAP5r%m)Cr&ynq$0QO0vjBr(q_73uGli%xj2F37F-2T3H*|qsQxGKkL)k49(7n<) zl;v2UTT>Vl=TxsQ8T9P2*SgVNhES=ix7aJxJqTu3t<4AFfLkKLdnGMnxUL7KN0Kt@ z27(eJ82CkOgK?-0!3r3zb7c`OY3rkGi59e`RD1CzNe^h-P=4$5YE;k1mh!i79Zf`k zt>=5${Qfi$5XdQDJe{G|X zwx}eNVE|95bs59rD|usvTyC&C;a4|(A-v+q*9L6yt%J)8x0o zg+*4WXKLXjN9esWt?i(w=)uGDOk>aBV?$-kC;K9RPO<)I<<}kNhlU1igr} z4324$v>_2CZ_{&Agh!A~jDgHkfyJ=Q1f)Mik=?{~3H35C0UEPODksVJ#qY_88ia)4 zgq~=ouK*v1WoUjDO0B2;;wc3`qvhE!k!tK`<-o=jxhdWnj%MgXmO#G!(p_%Hr z!P{X}j4(i*BE}TzD>wWP%zO{d`^#c+AGZ7n>R$Wk`#m&M0{+=cQuhH`;EX%Q_fGm14;s~P1ay6v@kp2m6 z$`YZc+~{z+(SgCiUS{e0U7Jp7|IGB|mz19I+fx@T|Eu4g`oxMiWnL-IofZQW?=;0L z&S5$}Aj+GS8eWp!`0KWac%-{=iN7#|;WhLkT z%D1ZOYOP{RayAt*l;?q$HlucWVKhJaMVuM$v+=^IKmLdcVO}<>uIB*ob|6@>P_WX3 z=ht|0*Owk^VF*Up9F_&@A%WVqc@Biyro5k>DaxsCmA%je^Prf7rP$;(F|k!uk%H8< zM-Ij4l<4cj^&^XKC|Gm^deaStR_rG8_9f>fN%pD3Y9W;*x*HQeM<}%694=MCM{t-q zlb#Qvr1a+Hs}q$}HKuoxuv^N1?O3f3E~KR2+*QfjP@_7IO3{TAqSa0CjdwVLUE4kC zB+;kI5`lzwf+CHnjNcJ_GQ5&gLw6(;9HA7MAlsyo$Wz4-xc_Yf7JHgNZhNKtOSh}>7LBotgG)h|78Mk~L+ak8ji@HZ z6?H?UNtrKP(oOG!a%tbv@_L5I)QjeA%a@&c`Ux?!=U?7+^et^r&HFz3mcP}{Hw~oc zoxsnt-qCl9exC60zxa3k+;aDGCd3M!^U~RW($5XQaLM&c___V7wN+}#_4*BC_vz;! z{L|52Cuc7C&tLkx@pgVb@|`=|^Pb7iH*9+St;*_r_3~w}Q0uMpUa{kb z=koK)|NV*|oX*dq*S+KZGx_=1OL|w5B9we$_)}j|{PvoMFY8{<&qFu;dZmw_-@WI- z-`d2_(Oc&J<)!?5<3k-Qck}b*ANjSeEBN_}XTJ9(!~9(K=4bsPo}}c+r@!~3SMqcJ zy(j;}>-c%`C&wFa!11g)?fMf zU1xC+&)n5mbAX?By!ja)`XE2ozTuZo`XN7W`}?={T*QIA_nGaTAK~X0-uZK%Ih6ys z^@}&W`6hmD`G<$UxPpUeJN8$d@8jps%r5`umvb=xcw>518wc}epMTrLef<3Bx30PF zBOK5Ne)bK|`ydDO`=6>_@Mj#*3+}(*X+PqCrap5;_obal@_&8!%f}w#fd1_*U-`gm zIiSCMwEx-$YT@%XYdgy04zt4VQbVqNJeEILr+4jkExuJK>%+!Nq?qBzo zbH4PpElG02Z?8V|{Fjm7|Lg~^_|-k&$75~#zkVep)puTdLjQpz`Q38q>tDJiNv?m_ z@3r6cOG)zF^2@HR+?XVNr#(8d^qooa@I@c_@)v$LNiLmx^z1kPX_CD8&pz<}w?C95 zzj57?GoSky=k&@0Upm-PO1eJ(yyxD#rj-19*V(gg-N{Aa*WWv{kz2*DzvuUUbjCYM z$$3|OedaTtD<$u`^BY@!?>|dP$GYDgeAR}wWat~EN4|KZEg5cp`IlzyZc8qH;Juw` z<%Hxj-+uR@?;biKso#C`zy0CoPe?v_)@^@y`}yVM7gxOPP0zWboV@1w-#w$gaY-`z zo(Dhu^aqzD-#K>6u7AGn#N_)Qxam2MY*?Bc`;&cNdBO7br0p%ozVVEIX;1$B?^bNx z_pi&6uRXT*kN)$SCnf10eRc9>mv{ENc{+r)>dUDpUo&B-DIQ5j|W9R?o4XdwzR`QLv{X_W!XFfamqi1~ogD-r}X~_#- z`kF5sIZ#br_sOF#S$p#8WYt@r|AW(B(3O1Qo--cY{n4J}(bxU*lCHbgCFfl?{!6c~ z|6DS0OZWd?{@x3cV;>)T#u>NvgCPI1=BkmM$sI4cVf1awE=i8w@xgEIe*Z5dx8C>u zxvvb3COiN1RXabkb2hpELr?po^|$r-<%x!^Eb?l-gjHl_1ww#{OoCW zByWBH^ItIYs(X`1-##W_Z+!`EM5didnG-u2QCysy;znSXlbAKO-pyY_ATc>t?kx-fB9+C zpBZSo`{Zk;e*fvm+K&F(Gq=9?>tAfU`v=ee=x>#~PB{9JE2e(y+Fv>0?#Z>k`hPZm z`-Dxmyy`=5{PmwNCpRy<=2?I6PxIa&*nN9{BzLI4wEjw)M4l?ms>0KmF=QzubLh(pG=$ zm*4mc-N}LKU%uwKooRAI<_6C^ zyyF{hU-jibxG=f=3xC=%^qZF@)#bBCe)Rf!()-7M{H1T+GM3an|2toO*Vm3DcfRQE zEm!`J*Cuzq_WAXZPro_&!DB;Tz2(mLCe>HmeD{}r@)f5{Tny3BpV z;`Nb~OqZ*Lwz!c2K2uK5G3ksM)DD zXt5icXf4*ETq3vx=?*#7U_<&^VSSV-(ls+%(I909=jX)N*bfcsa_%mYG&xj#zAC^t z45?-YXE{tLQJzsB0NYOdz?D=*e6#V;a<~XQ29D}BhB;r-YJZ4Zv3krq2O>VC9)*-V zXca0~agyrPu#aV2je=f&Od(qsALw4~mn(rbUtS9iZFg&CS4c+R<^IO$KqsIY2}lkT zp$O-gS|3VP^pb>~BLQt9xpUgQ9`dAFj|#oGPR4FNv3s_?`?8*kb9=OnDLi}K9*|w@ zmao6XeAoFj?k!PaJPNCK;WGbNnrz@8wubBvg~Uj>a^Hfw_Hl=(`GqmmyygiLNxPEs z%G@FuF&PRRY;bwGPKF1R3We8l79~{ZxY?YhKs-cuO!>|ZSX@93oA7Y8mXXSpSCfpk zZeR6+3rGcww0q^%`>Jd1HxHW-X2@RePRHvFs^e3*?NS>H@909m|{0j3SZoe#&*}IqNs15v1B%1}dX3_@!!* z=mEa2r+Q9L^@TmvG)?zq$16r}Tp{>fdlgb%=R|pc!+%sKtG)&tb+uOqGVg_R@@Ml0 znX54~oYJ4|`6L+N^|qKcs~m8TE#Vc?NlX|RzM2TOm`f63h*sA$^ zLn25#l7wp*5~p8_^H*LV%%E6XT~Yn3u?BtaLq(ZDsK@jpGfq>eg&18z3}sac#rijAPBeFgL_90t#pDIf%!Q zQ>>EALl6tCkHyZ6S~ZB^#`=VBS|M02DgQb?v-{E&Mg^>AG)el4&mDx%p3!n=ncjA3 zZ?hXF2S1sKu=u8qNe2wpb6<1uybM}s72&9kiYAaF!WS3k;R`8_)+QN8mrlo1DB4FC zOH>LME@%tdTEQD=i!yh6?Lzc~0_zd3d3ZMqH1vnJMYR5+l9)Alz+ubcXh#R$ zRmJ=ExA-Aj!C{v)EL?}cX&8HFHh_ekf_t_)<@e#e^(!6@qoKfv)a7xobzQp~(^{o3 z51ryCEKd&n{f)6nX_y3idGm2r#@W3uTO7h_-r8VeHbPj~&X%H3l}}1X6mQ}HgeBlz zK6l~Or#5%Ikt5E1A9JgZmwz56bdv|P^UMn9g%kDAhW94+oJSo1e8cl3l~p1ulGgZv zC>>uoLPSs~XmwK{NGu&5wy*?7kSrm3qFq~KT}MfgYY`rii51~e*w#~m%SK|Nb|CU# zQ^RVB4-W`7rM($?`OYtDSqKA~hR6*3QYvt7k21#WMfC zTHOrV+V?0``pVn(#_ix+335*=E__Y?kx_!$5QJI%kbvcxSQJu#u$wEiG?^(96Ipke zs7{68GQ6E{Gx4gJrQLRC6c9NllQM$_mzvEA0COgY#YLmlgL)fsNUSR&+qd?^qciDD zejtlLB7^OR!eeHDY8vl{I^uFr;B>r4QcP{yI!56-(k+Mzuhu=cTy9fpG+9ADxl4*b z?Qz)xBEzEsQG&s+UQL3y3S&_$Q!dq)cFgMwIWajk)(l;7=cyH(kt>iom>nj8(ImO! zG8BNdmzVdR)+*(MC}4{oTT5C`WH)Zun+AodQB!4|62&A%_&aNi7Y`ms3@#o_`lwxj zNc@pufK+1ErZSG~@HCnhJb&)%sy;cIxbZv{&8aNP+)(u~^TF-Hzk|&>EeruG{D6#i z=)7vq;leT2s+J#%E~(q(OsO>7p<&V?ydF3`@=8IRC_*KP+6haU7N^Q7%h&4or_|tu zH}Y_#c0=Pjj6vl@cn3Xf=1diKBVqoS5pF?|vPFyHtfK1$q}Qy%DZH1qC0+lF-pSYeeueS_o*wDmcfWX zJYUTDrRvKY4fQclKQ+BpsNBW;%-#yG7-5boT^5%S{y`Gs4WuCvBHfsCPg~kk;+J-h z@!;fErIf%mtx7cxR9)<9H%mUT1GI!zE4jx(Cr2h5HVlRV1g>X3)`d6m|u`)>P2DZ8d1f@71jlq*Va5Z-!^ zWmU2SjHGGBNnOdN-2|JA!8N^g5V7|pIj1sb#0IwpP&6~8Y(p!fF$)R+su5y}vR<|N zGxpEVn)x-ACpQ$5!U|rPh(bDDf3LTolIB`Ya4NG(>eaC0P36%`AyZ{)cA88iQU4Um&Gz#XmcGLuHhGSW1?hwE2W2A+-KD|41bGDgIO52W&AZ zh5r|a)=csL*#mme{)kViPxjG|{r%I9{@G_sM}I^475Tp<{93-(uwR8rL^?PrYj0uD z$n>ztio=Zr>4x1zIY3DV7LCc5okaFEebW8od7}j1X-j*9x_eCFjjc0gepWNyq^?TF zDdq*LdbTrk9w;q#)fK|XQL2!XCCQ4M&36lih7ed?g3{Qk=?{eg>HA2R;h@miTasUf zUaZX$m6=i+!H=uwc!;bogNzkW#Pvx#j)q7r_LUroH@(!-%eTx?0nr3%IBJL<4$o~B z&nekuKXtob(b$w$-5~x3cDr8D3L|Mh@+X;xZNCi}=sO$NnOTT(-XTI&q|-RJM3pmC z_%xhQBt&Ow6{reSl+u&xQabsh7bZQT|K?uYE;x>he^hpEb@#?zKN#{_^BNiot_A*i zDC1|BUhedSN80ak3K_99X99uRmwBgdtq8rvpOEn*%w(}1FCC?kgK=p~wsrm_B%;cx zIonKc$E5M%c&Tz0BG7pIrzh#plU*<(BZ+H{cFtQ4MlHyEs@8%+s%62e6MnJw+X3$Z?u3Y)kaCYsM*Y)aj&>Xb;`2eHk(`Ikg?fhci2 zEkTZ?qN2xQ>xv)Y;$w)sxgBzu4r6Gt&6%}XJVf&6T7o-p{ot;+wwJ~DDmS}^V2f0? zpSey5XSmLthk-59t96lHPvwLiM3~L_&9I%5*Eh*MOgWX*1BHl5!%&(7?b#S9m zRkpmeG*>Q-(mZe7N#`cC*B8{~t(urAwfxl%?m8%vgr0jVzawWAD+;a+-c$V5-?Up~ zGRTQhO5h5gg1Q!*sr6AXphpZ5tKK z&Rpb{aRMLtIH~9|iENwMC9y^l+xKkVwGCA^zQ1|*K*&vz3BvODUl4ps1xU)iOKpXEoSMI7FQvY74<$CeMfs@X2dWrqjrk!50KPwwE8g)-x zDcQw}R*f&h)7%#acfN@91PKficFJIoLuMZLn$H17utPr`1aN1a^FRdM9%liQo)iu?}K`pI4Om$}id?k9wam#@ry(y6sqfREr|&SAW8g zqA<2(r2bSmn4&K(WmMZBasZCV_Nwl&1_)@i6b7#A?On_NdtE&rQN^WX*a6NEn1M(6 zEZTa$W7_$1vFC2oc7-53S^~1I>!rDMksEB)%1g<`oYP7ef=&aP#Oa@%NehGX0~%y& zqi3O)WSc6etF|QjRu6;8Qear-qhQ=PxGJ=Ac*&A-f)LL{C zWt0r%4-NtUA?=seBtci$D>1M|C6dwlTopK#Q+L3t%%`6zek>xzSu^`D+Ps{X*!PLjfZKb7KoLDue}y1^BqZ;aCUW(pT2;Jg)<7zbcHX9HMx?Js=H)YXlW*fx>Mp3 zYCmT+^iuy@7QP{*2r>+{8boa}?)@1>~4)-m3?X=4C_*+1_m?SbR zaHSgs7Xe_+>C~1Zh0F6XP%zL5O>GWN2}9M;z&<}F5E7q}HV#7yRZNm&1y#-1CQFFE zZ{U%w!wEbZ0<%+iQ$_baptQ4}qid#wIbAdLV{p^%YY%L8JrC5xcP+*1uJScNjtW5( zy{Jt~W4Gt3yD#0Y(*CvPe#nJY(t`j|S}2UNkNCh^kw1HuE{v(Z_*+g37L=BL5%P1; z2n3`+A`%rsYx>TkoWrW?X@ASAmE2NFUd@u@)dprtK~h56U=6gc-{mV;#2rC5Q>+zu z)>;My6t&d43cF+~C9e@oI3EGUI-x`P-pntjT;!^%N`>h~qc2xZFIvcPp(g{;Ocy(L z9V|^A$?uQI9SZU>MM=38i7D5iIXc)XEQ4G(jspvshjxxqcsoa535%fK*!Frs$6H-S z^JpwSBD$>`tgfD*$grySxqT6Lq#Q_LfWIy?z^%s8r7QatxxA?8(Hz9$9vC(*V5I%K zP?Go99gSO^!?{9VVUTV&ZzAXGatpzQPm$!iBR?rz_?R{%d7@Vo1%BE1WbNvCa{%0jQQ!W z8AH+n7b0(VPWoEAVr;*y-aDFcnQo>8M5{!P!d-fxN7m}I{4CsWk=!C)!@)$A@PX%RD& z5h?@V?giofGphIt&7W@Tj}lfV!VtL0hov!|g?%+(kZT zG0>kQjq?j{q}gbmTH+hSp2&KQ?;8dOM~ROWT%SQ5e(?o#A`0j>RG+D(yB9)aGxAq- zRQ-?%h$wzD{lk-(T8* zbENuB(-8yLrgDyaih63+Bk{|APG39mwLPlbfX& zsOq|IcQ@SFb{itG0ioIydvX-(CQkrbYT$X8e7sY1^R%+z&ju{DpmBA zX~1|6yavNqo@0|!XK{;xvU0C_LDv96Im?sE(PWKW|Vkb*%UN%998<- z^wp%sM!O4)ojgGG2#di#ija5a1#iB`7ASCuREeB1J9z;-k+~;@g8A@iE#T4~oU^JK zLTxMJ(|b-TC#w;sPZpniYw`2}K^)vo+i<3=_&Q0iNWU3N%@&x4k)-7yGcnb&rc;HZ zK;G-@d;nq|K@bn)@KhHMAvnAYKyaE6Ie>!|PN5YbV^INsyX9}_3=DHomkx&zN?5CB zddjWCOD2uGtRM%Zi06{Qxcg!0Tkb)Qdyi`}Th;=*hD)KVlU2^B=?jMXe;?%76p&+U z03+@*$(#;2{UC%8g-&)_q7M*H1kVM;a!J>HZx`yM(KNsBENzQQQYd~1UnFL(OX+~#gCP58P5ZpZa#CBv+XPj5= zLBSfR$m}hj;xLv6fG-88h=>K28Qf$NDxthiwPnR{C$hrfwVSOqUrMKCqLFU1y`O0+ zw^ri=#udcK7*teYu`iOaXUzjM4>Rir6#QS{VbK03l%?Q_g9grcM+!qZOEOhIWWb;- z!yV;MgFtCbG$-+IzH4J|F5aU8At#jbEO=J56UmPB1JrjAZq7SKNpTFOV!9#!gGMY$ z8$9u@a!Bs%b_nObZI~$>%M!j^YnyM%A_rS7(YOYjVA-SqmpQ&Dd-SI2r5@SLjA5GsRVWjjj`9bAApGd<3VF_ah%FU4ajZa9<8L+5=SM%X|sbbqQ&Kprln;|N^?ug zo5*Id1}%A0r&xrXls$#hr?DB ziQW$YO;LNNp^vp|(^N=u_zMxD=}8sOF@?QnrcH(y&GkiAVHHd}2$JJL3s2i=;)0g< z`CxsTEHW$sz|OY$orCwHdsQ!)h7d%Yv=Os|B@sfJ)7_bbvmg|2f>SJheB zG=!0@%L%v5?z(uZxeN{MEa+*gNp5l*RBePrmv(Aycfb!JE~&45M`*E$%lq0PSs^{u zEj`s8UAwqWLy32w=OZ|~YuWcTO7?vz`pCK@nDN4Rm|W9UyH1^B;A-_o3ftn{E%`eO zMR~wl7Uyb#G;jm7xs`x|qSPblgBnQ7%E$5<-JFi^IH_lE^>af44wmUT8h-n|9)1cB zoVbbXuiyE-KX|w^9!0p-ImAH0$`C2^xF8i^O2_xX=%EPBaUT@_`jX0yX;8}k+k2IM zzlbG^lqVWvA(_#XfK!)z3anb`UTT>sG7dbEqPk z3bF-J7J}%SrvxGjh!J98iXw>Uq%b-)DyM-#3B&BC3Z+`tP*3%8KqJwFKcNO(@fL6m zB9L~=oSt9=ViyP9;{YWGp8yZWMxSmRF08E z655D88>7&U7%(QZOPHEy=pgp(B~c1w(Ly*M9vyg2PRby7A%G-W)zFkZ{!~`zNW?>G|($s-wLEGIpUk@k02i%UJ;K-o(nJtHjAH=s5X8QW_1 zU95x9jD}pT>r|-3vyOyR{($`PwE@dp*QO0*5xLN5%%wUyaRlUXRuhoM_>-Nu|H&B>BsRJmGD@`3r-KwbJuvir#1EaRYc2k9XnAT(D8 z5j2!_GD=N#+4gwomh3Fh&{hN{8#R6T)FtBE7=M5 zshmi$HJC11<65^uV5Ay?ln;(17Vbo{g34NVCfz9be0LO9**}WH?u)#!?Tai@q0n7* z>;nETzLIGkvS~s*+#JJTHVv%Qh(oI&Wrh;W$%#I!a2^z=!4)YnnyahznQz*&PEIW* z**tPEx|8!I;8U7GK%<CVmmkRa{p&e@+U`mHt|KSzc!-eLsquf1AD ziSjg1slwQ#+@N(%;Lla^mStr-f=Kf>li!_$g9!cLbrttAWtR9}T!^mcYJ2RY@1Mlh zFmp5(t{>Bgfh?MQC??1ne4{x;u03>7+8!bRlx28NAJm=zLJ(}jga z&gGcNboMAvtj}Ol=3*Dh#O)*dQ%SP$jwr8Sl~&84rG`zQfWberghq2xBI`y&y8X)S z)03}kaF2Su4L|nDt)5<=p0RMf@em}hG+#tlChwdf*)j82Z7&t(wH}CDJMy>9y(hYK zi%_Uyedr~|{0ZB+t6DKf9{?NhWbyPY!_mtY z60ueQ#{NYq5qd7Wg|Caa@5I8mRBcJ=)ku>6IO)ZKfc7%2YGDHb#XsBey$4^XebhkR zH^eS=fY@1>U=qzYx?jRMg|h8ty5rJVB(=BU9Tv=FP+xhv6x0@cOCJHFe4{8X%2=X0 zua1`_q~`Wp0=klP{kIjCzc?_m`2d=^T^z5Jv{P7G2h5DLOlc)iVhgXx#+z<9kF_&U zDi~0gr$ip4%vXZZ5=5t;NsRnYEAqj4;q|pRkQ!lFx`A4(G~CA+2Qwt%QWIMl;u0KJ zLa^|J;@>giZDNEHDDFEqf&Y$txuPzzzy z?O*w;)r*Xoz)kFNO@|6bWlYz8dHN4b6!@B?+y%fRf}#siBuN55dQhsrEH z6?i~o|7hpL1ALt5H610szMJCn9V9OUd|Jnfs+IX?rBKM#LMr18H;rrp; zxFOk3%o>!MAmjKTt$KC(z{snYRj208rp$kQqes-uNYHnQ@>n7jdT9q6|kV$lzcipuw zFwXU}ZZ$-hZg5?mU7rkx#Me;1X6ddD5@v~B7Z)3x^(`o^`1!SX46w1#RKjXu^xXMQ zFA2xStadPGSF|qF9?0Ub6`SCS+za_yERz_WxEyZdPV>TQXr>Cs9q-tjtlnd(+SB#v zQvPd4Pk3eTVXpwVvF%1gZF!^`J|`tfT_|AUrfiZLE>+KX{*7(d=p3aFjZ6O|%0l{( z(NumtN9NTs4lTj!_4c4yXf*+jdZWjzL1|D_mC$H;OPIKJFO#W2(O)QY-sCtDZAS!wCqC8e8}wp&?q-jkv7o(CV%d*NST z00BCZbHbClw_!rLg)8C-m|wk>63uXR&<&TM-31Vl!YGzxOe4T8=0g~`LtPQD@!*aV2t%<*WV1p9917$-Cjhp-p6tc`p6ouAjV$HgG3!&U6&ep75VooKr*E2%tO*YX6R;B%GSWbVvia+d z05QSY_mHVL&YI%ua;IRLkO+wIiYMEXA^hVYxk`bhqX{qKscg6iR6$#}CeVd-jj z*Aw2A`z%S0(mnvIs-O}nyl$C*f)@LabQ8uiM**KBwK*0A=o9Q@0cs&p&d|F)qv4j# znJ2?>M05D7L324kxjz1QSjNog!C5u3D!yv=cUX&702X<%O<*#7q!C+0zNLurDaaS! zH1y_9KaStwkm2bL$H>v;X4jNRo zugm#!hScaNq1ZFvVPJ0=YurByxnWo2Z|Jrxrr%H{iFNgByYk6L=!i>H;M*UrBP3v}HqFk21TtLqAa+loJHg>mpkuOq5)!IIM3 zmR5Rw(UFKZomxuD%rVHj3rMd>#i$BSEQl`4T2?vRq^qJxP1Xae?e$sXgK7VtAG=e?y zZW{GhDyyXr?KGa_12y@fhbk3xZj{=aJ9Z?iw@yzU9vPdgPn7asD=W6sG9c)vZw7y8 zAuCoOiLZEHI1lSOPEl6l@SZwXGL)>&GxlJyFF77?$y~OFNT5SnkW4%&G!hk0k5bXb zpRspAewapKLIqBh|H&sL(%x%4-r*Dt<;nqU&T>HBS>#T?^+XH zZtGb?eq$V?Yt8;Muxf4aGrDWKif(J+Xy|x0^P+d_ezN$lJ+Kn0qg%SB>!1UbWM>

C5ux!govq@l;N8qp6t)!8w|gs9}9tdS}N#qUu$%%ahU-OG>vbZLe;bp5&Yc zMkYW&w3Zn%vSQGYnR6IAkke`WXN%+ASSGXYL69V?X*eB)z4mv$dlHzELwKSN*A z*3neYfEMWEq@~+BUY6{TYpXFxCgQGm0YYh!&pI|`U*lR(Gwf0_w`4iX?#iPJxj~0nIE)={i8S1J#O$0 z+_}2HW2}JpG8Q9bOz7%h#JbYt_NsOGk-5e-h}hpDm}U#Nv*t8WrzQ^098xO4pm++N z69~g1U|3vs69JnGl}aeifJ<1NF8liS z`Y#vaktWw&>VCKz*c&GeGgHmJv(G+A(%S6)lnl$WvG(v7&oqV)oh?I>JL^{Grr0xnr?;l+gg*8oNw??z(f# zXOSjHs|pqwSRAcf-^_x9efOiG{X`VGRK|X7UtjfwKJL9w`=IcjH%;&QNXs`v<| z)mdU~cF=1BYOJLmaP9Qe@YydeeR%2qWcB64<1Ug*`L7##@$^s6nW`dVuD2RFd5}qC zU=FyK>ku}dD-r1`y-bDxMnGHdd!)n-8ePY@tDfa+I4$|+Gbkrh@*kbJ-t%WGhwNc< z28e*_dPr9ClzTZ|o-6hH$53a_sh)H0c}9t%47?WVCE7zC$h3ldAW+SwY1X>sio-Os zqm6b!M&W4X@)(JYflgM`tPqpco@jFQ2x2MRRa)luOb z-MZN6haZLwj2}n0)&_Zcy+c$Z@bUO~>83E=g_Z#UbS#2-S4S@c%M*=ypTA`4J7XG8 zRtYMAV4-mXAGW5j9@?W za5xe!aXNfJST_{Rf)T~odZEk7n{-@-cl03ifQ%teSnOMk&eFlKNRkJv0mB@mqUhJB zWGXj=B-we#6AVaEJV-|N1`%VUm~*UEkS|=!=lLpNqa-kQAQIi2JIVqXlnOo*?xos3J8=;Au~jXP6Gc1w5AqMznX9 z`bwGYCADuQjOSOwKppyAtSW}SJVj9F?U8BRNgLgC*@M@5dW2DJ4AoMRw#E5S+T`I~ zq^&oP;%)A#x3IDg!l{V3#JoIkW_hx>bc5lF8clYpjNFm*9^(2uC%39rVVZiKiZWG$ z7oIbYXE>9Z70c=KzXgqB(M_m44X(vsM9U(tey;6t*S(JIo%luVYo$4Aw+XTMD#7xejIrBtg%4OJml_>?uIs^xOknYG-|9Y}L+b z0c$p(tR<=}h|pNTi6xnG_umSrrPnMeeU!wR?{^F*y}MW|yux{D%U>P6TgVJC8+Q97 z`f+*5r%(K0$4t~_7X4ZFv;g-M29wdBqvv|{H~crArODk38ost(*I#elHfmSdGRyO%W?+Qcpyu6kiXC4O1Lt`PU*jPR}W*x3hUb?BYG`aOFr|)~l3&X#aSg`^~-tQ~y zw+rPMx!oPmKErvPulrqsZV?X>6%S({ki0La2{dH;826-wLTkFGAuBN_LE^_u&H?*o zaU)>t#=AvBoGtKY2@pp)-S%RlOwy3!tc5Ka_kh_uK{keLV%<(#pKzrg+!SkuYval2 z>l>iDSIFUX?*LLyAyxif+ZdE(ppZZF+p2ZDM7n#imllEQig{>ueCRSABH4tP8Pn)A zoU0gjIEQR#M=Z3(-`s z)h%glUwr@u-f>z?UBrdsMkpyLq#e*u9CGoHZ`N@%*k~@SWwGJ3iCI{>aC=*NFs;`7 zi=l9y7x=jG&owxN7h6$Z-^Rfg``yO2jv?Ajk95~c_nlb!6e94H&PK9gOQUgMuH-*f z5KyIA9KIf`Y?2ZsN~VlTqneEaGJY?d-hfH$?eq6GW|R)oTaA*jJk#iI8L6Yirmm^@H28k=VUho?WoVynNg+eap6O+pn-? zkZlxrNsG*0Q?Sm~@SqK7Nb2H^qdbHd@yj-?wiK^jOjrsrWC=^jIAn*@7)&6*Ks2V- zNY@5`xfmNwl`H_V@N@HGf(C){%0R+#x0bqh4B|HkSfuhJ1~0ql^0gPz%Brt5|9AlRB5)VU6MAA} z0N;}J34)HLy`c%s78!G%VBYc7s{IuOGVT;uibDX9W6NS^X~@uA=4`~ZQV`Nn`cYW- zI1I|D?dpzmYqhA-8g7);EuuBZWN4yscqk-a(VwH6rUHh8trO7v!ZHTO<~{^Z3-h?A zQy^swkcrV+5(3iF7f(z&bVqD~aL6isE%9OxKa4N9C$>n$rc4EW%`#)SHMo8xT=-1N zqdV`9J5;!yPTAvP;ubW{NIkvW#2kzv5al+{MeeP>FK~&K=O0fi!b2=qpXk%OeL8>C z_B|^ulBH8Fs;+Xkt)ormIu^svCzn8;dcs60G#=Hp&g=&5B8WaqC^5&0P9$DQMp)dL zIQX6=lyZL7+&|p+HrhOwZm52nm^>X(%Q25!3)Q2ajacDgz~e$!qo91+lGdBn2SZec z36ktP?@c;(jZc^KpN{ID$;p`=#28A+Pwuc$zPuV7bGvr!u{X^rnr^soRxIwK1H|L$ z%Gtu)Z?6WgOpB$U_q%erPi(h_h0DkrR8@lRSE~s+DoJ!M>Q#x6vGCh%{MS zBJO1wSioSIv^Eh2+{4&u#t1drRHJ@%unxRf&<7)Z4TH<4|F|g$p+rcZ+bF@*4N4vf zPM)pRzs1^Ed^YJdxd<%T{DD%-U+tUhy8^wHk~2GRkAm-s{4C#!!wx-K*Gq9Tkvq5o zQ;5`Qw4Uy^xfTe^Cpllon~L*U6yG^e>tqSS($wPM@rUWDUYJ8L83u13Rt~k1x-=>y z&zdJI4DFX90jE1MGn9?Wl|=Lq6+}Llls{dXEnTvtyR&P@R^3K~7y9Qx-M#W{O|R`d zw#h!-ORL-9>Ri`Z*@Qcc2Re_{w%X;+gbpaCG^E;HpHqS5uFhjSc9R6}YD#0XUBc76xbs-Q4WM?($}bk? zUebBPzRs&wlU;&`6|^kBRW|H2F#t>>u5OH<4^c6K(XB`H;bc$=l~Y7EM6ix5H_{GM~@@@YjsW~>UK_H5t!{0--;_waan1^TDB+ok#RG`jVuFlMK;F%cr}L zvicpGH3hF&eQJ~uQA@CoA(Fi@E}A{yJ){Aoye8H>3a3E8qYm^($EakkvwW-tQt=ys z3SYBNm+p)o)0THA0J9vyUAexq^6te4VS!QU3U8$eK@;qx92~XqjdUmF+lIi4jDJZ% zH=~Fs3vt~#R(GC)dx}0U$@UpPaEl z0WmJRcZ>AOEwiIzAY)}CD#_R!PT`QhQ(m3@I^Ox}PHJH`>w&^CWZ$O=dQsdeJIE>z z1xp1do(6xX|vF!k%!mun8nXlKnynan-<%(j7s;Ml|fE!D(~z)aa^>it_N#P`FyY z+(96gn_)D72K`3inx#4WEa4;Gpd;#4-<+> zb*b*l%6Oe8gTWp`@TcZctF`$x;%hY!-bqDcz4bJbAByvfM?AIX;2cu)${O9`Y{h$( z{9D`C4;Vh3mLa0u0K+S8%@2G0-6WL0vBES2D zw!Ek!aWSW|7}MCO*0;4hk)^b}&~3e`Uaw6#;2O4c;b(R%wur~ubS7CBy80rTE#hj}tFr&Jhsh=NJG3 zCw<~)m%r2f?)m5CxLE|RuQ@IMAPa~}F_60>4|YnwkA=9d>*Q2oz$a-*s0)9G*LU>i z-!_RCkQiTH6?o>#O8Mjh3c%S5&r-9^vw?So&sm3Yh{(*sIO$coe|pHUdb&wBu!9Y5 zNJE)y@8FBdssPZWQZDEkMyxUs>`5URrj0dcb3s#Z_El?P1nc4yCuit%z95@7VO4s< zd=w9M7kkNv6}oy@3}irw8y>4;V|klVE!1V2W=t+0tRKYLRxs-leV^t z^PYB+W97IZP@75qH*?>S!-}Qyj~?hua<9K={>Qzlo|Hgkf0KIjXipuvu(7?%q0-K7e2Ns zsDkeX%fqY(Q@TT-Eu>oH5Hq5Ww-AOrA~|Ua`)IyfjEX+n;DBvj-99mQm6#pMK~=_w z#7N8Rd5~q-7RQI80w?+<_nXuY;E8IMS%`(1y+uOWAKgQjO=5aaL%`*Y)Vi6DI&|1R zD`zI?G48pB($$ni0OYxF%h61|d9_h)v7Frv(G+V}%Z`JRq@{^ufTZh{#cxyX;FhiH zx-v>>>i*yt0=N5Wm9ZWD)F4FM2Iq?Z1J znV{w_A#dGKV~(VMvWP5nJbVZZx6W;ju#C*+wmd>Zi>hOS*(6Rdv@j{)NsTl#<0Bfl zX7`%z32PW&3AOv90~Qp}BjF}_jxaFl-07&V4O7z{Aw9q@ zM>*40Yy$11_=@NO(+Vz>2hmR+d z)RGfPs%C5gbDnzdV~?jJ(1>+lABh)S%7G+<2PK+UP}Fa1>*BRp(n$E~fzB^>t{BZW zrTu3k#N*{LZ-gYQ*AtF|u}Gb*lVTgh2!P1O=GpqpLj~X)(VMZUl!a-kWSsg@CcYX&|jOK*(09_dy8-Yx078IhyosVG%r2697kQZ#DGHUapVHN40S3tL){* z;{os;G4DiIhb|6o7YSeM>;SlNBQ|w>;VD2@@8@h5zB6kP2FV+pk!AIY=Mon1u4zV4 z*11+pssI!hBoP!nxCP100uA*^AZkWLRWdu<_;{2CAYj}*&Tv2tznycE$PbEf=FS48 zbvoF8+!j`IYdjx(2yXrfNSJ9Jyb}@W^7rM<(EDJLI-l#%ZKrm{ z3Hh`z=h1q4RfzQ92B1aS5EwjU^p{kqSuCDQYeXp9p*g^uVgs{q_K@74n@t55k>sUc zLcwyXR#XGzx03dPCxe2neEG1Hkw#(fEj0N+xq=qGJxiF&U-LsYLQ=k*k&%wiqD2Bi zpv{W{^ALC0oKYm+bR=xtc79y{pU~A2c$c^H%B@6+aNjQzV@;gz^&{N|bHH3g;_nXGXgF?Cc(&kHLsek4Cg9>68B zHGP;Gk#tkGm?0}lX(r$9EE9dw!qIintz5+Tm&`zN)wEx(9Csna1;w-qw5RNfiRkI+ z9T~p{L;-tf9aUZpB)s9YHPttV88abxbnwwZF*@Phkh0{L5T!a!vwQJ$N2Byecy;Iy zU5OzR>$=`teE!Ee+tCH$5yd4MzhOP`-9mf+Ap9IXvyG$>xliMOFwr(Kc@w5yxFEn+ zPd*;p#4du2e#!KzoGOf%hW5`H(=AuTukI>8P$tVet}uVrDadR_1vQLcZa_wwmNaCy zy(a(BSzbpKk=@ZA8_(r(+}@?5ioHQ&hL+xY!W0C0>%Hx1Z_b7eOqN#|GpdxHM*cut zV9tL~npy>I_{wt9J@S|)Si_#cU`X9#ewF+dt|^A?k9$)224>> zLZF;HvE-+>_GnxFKkc1OXk6D7$7jqqjHx=FfCE}MFg6ZV68S}Gl~xE-B7Zb-t0qpO zwh3|2$eOXO5=riiL@Y?5fd<+|7F`4qXrNsLl0_GVELvzFi!NH|qJ?&mMHht>vdkij z7QE>1f6lr0y^%F;f?a4ELl&{-y?f8Q_uTXOKj)%loq5HF zZ$dTPDxOLwW>`DWYFy1bAwiYWe$gawSn6j_o1vb?s_VnXYl}Woo@p} z!QLo-AG%lEnzehVSOn^{oZ(q8HQ=tsOePTX{qB8tx0+=*Sv`~Ol0AFW1aSF13G^h; z*DWJ4i3~7^B+i#(VV1RM&Dr!XqvoFddwtH4);+BWOiLFds8+yM;l<>1kK$?`Y0sZ- zg-N)Rwl#S-lo_OqzG4@!pQBrM%RYQ5S^$vxux_iNEZXW(ki>ZE5>UF7qw1klw=Rye z2~m9PwhI!RBB-qu!-aXM=m^b#&64J9bAp7~>qVQ6NFEN4JgSqB2{SR=Xe__7@7@;e z0+KA0nP5MOO-hxJD0JFfL+jUq>$r9{R`aNK*oL)lHPi?)jhR2d!>sAXUn{gWw zS}F2v%oL*vb?gwN{ED!R?}RZElBo)eTTU{jOh7ju9eKbc*86vy$O71f@Ar^a9b)R) z=ou%jd{T+C>adf} z;4ygGi`&^eb-tX*7rfU$p-Td5>2jYPD&=dcs!Pja9!?Bz79?}HKg}HC5{u*Elsh`h zu)~xianei;((q%Yw+gqV)C1 zr4|D5)htO6p=(1FA5d^xyp+R1zgR2+4yXE(W((2w38e-&Pu0_DRvOJ3be+R>-IuQ@ zc0^?cPN2{oY^fh@$<+}y2qqX7jN%TF6&#UaiA(G45&>n1wa#7N5d3*>#0)DCC>OVc zaA99YlPEX=mo_XyYrJDB&|cCpRkVi?qC7*Pjp1ND#G(X?IbzoiKWEytlEv?63+NJ( zGBt7&cy?;I<|zprC!Xb`IZCHwWoQ?AnVrjhF^_@+ue)?V7B5=tve@7a=Oug&bMVlE$0J7djR zduZ8T9R9t2{sQ>PWovKXK&JR+Z-Qs$GVPjKrDR;d^-RMc7mtGm%HQ0YU8)AeRjhxxT)#*=$4^qZ58 zV1A`_$jE-R^?K{j$DMC`{!cIY*QBuS$PV}?UQke2XVXWrrn`@2WOa@?m@0A8G?G;s zJ#Qjx&3z|^vPz+U9s7}xvjt(+Il+wXnSY_oB7o&J7Nkz);&f0gWa-5c?NXBTk4wp%md~C)!$$**&)8F!7YJdlD)v9S4(xga&tS%Qag!lRX(eR<=A!aSlnByvYfo zZC4=uCRhQ24B$Stv^yroFmWcyXN?%C`BkI_7aoaI3Xo~LvF_!dzpDJ&=r=ESFg?3CyaN zBdd5;9 z>m@C#r=X8bc7lpbDTBx#w#=S|234zMeU9y2dD(eLDbnFQ`Oq|M`33$y+><44dd9ebrS|#^?2SQyRRU%!^mLa!N zd{bu$5x8g6Ymb1P$$?K3_4;EVW_N|XZXETxdDH!k`fk(x?c2Eq6STK;4b_;e;!TL` z0sw?O{Lwh8`;xA!EoWew*fiDBLNvqKIi1>mqV^ioNwLe_UpvqMxq!|fn2C-}KM~u{ zx4nfQTxu_Q>!w4>r?C)S&Z_M*KHu;@(`!LE%V%C~G!sv}t(U`_shSVeGDy zov}!-#Sv1jM31_?vuOxw85Mj@($5|+(?|ufX^F417b-TBw@K7KMf^|?=#MBh@9j>j zhUDVlJV`_Xhp$`r{!ttH}r`77##knq4hXVHnDAi;S*ct)9!7`F{)ayKT zYGLtA^a7@>6#bw{&4?6o@U-M4T|TlnhrMfXZ|)bZiPz`{VYn&{>K`2MR~Jd0cB-@6 z%~b4GJUUo;A^oqd(EXPD+S<87&HUxgQ@&lkc-c6lqT$4X*K(0RT$LHun2kyzDhv5b zqf(mm-iT=*kCECCAPzd5@NSHEmOH)4WN2|CE@*jiB|(*X@Yjl^rLqzzdOtuzd&-`* zJ`K%@?W?X>@LvEQdw(297f54_u|E&2lfQ8k2WU#pHq|RXKyK< zfA)X2C%N_WdV)^Dks|7ZkE~#sQ`Xl1Zr6jf##y^qQyn_0l?+19aQd!TkQp$7nm;%- zZp%ZSMb%>Yf-5>*&Dt%VuFP5e=IYe%wrE59gg^%%FVy7MYn#}SltbJ#=#7_1rT0FX zxY0r3yM;pcJC;IO+WcC--%VzPD&f~QfRGn4!I(w&KQdMx-p@3qwN+wpVo&IR~zAC{bpkQL-wb4?|8p8`C&AuBP2@)GEat? zYfUX943w+dDxt;bgDj6FPHGItq##|VZ+k%qS%87YIJRWc9|H@3#R2ITU{BoYv3fV%feBk z37fL{#=bn3^Xf+RG*c0WV2eVz;!yx9D>6Z&ewj+a!UFHb4JQ-^ptGa6!AUNfG_T2?~+a|B|+R90INBhqy?yA zUhS|?BlmpPRc!~KP@y0!i}Fb9H9_&S7$EZ`W~bI6&6&2isC~r!TdX=k6abC^UCQ@Y z$5#ghQZg#RFjTf-hqhI5jfk0_e_j9rZbmr^aAM#P#`*cA!PJJj{QERznAhoADH&87 z#imdSgUX03j-4LtJh{EW-VD@E;tDRVykW+g z0)yHqIExtKda!5(QtW{)odP{(dt(gApB!MJl7{ zrLsNx4oKFG+{EN6t>GEd)+aHUeQ8m9ow_gkLSmOJo%O1qdRIs=M~fxeMG&8oZuwLL zcv~>=ow`=rxluR?8!gexL)|ljLAU6u(-SW!&N&|GYF(bw=aW+}L zQm33NWs!YY847A!zx6_&Fs|6SGKe_5I?9|JCn_SNkI}@mb+2(GM5Fy()?)6?gU47Q zd!Wr3Eqyo2x7L_D)~95TkRNA~|^!Cv@BW9E0|l~iu95y-F9sm(ve7Bm(*tyFi+kVWkXH%CCNRTgGrBX&`C zuW{Di^rq!vPk=b}2(*l$+xMi5?U;?I6|)9?v1Du99=8qdD;`c)r*UNc#-SoM5*dY6 zzj|VO?yGA4V0?p^ushk<$MPi5`3D?X>c}o$9#B20Zwl+@oAnMibF0RYQ%5ib0fGd) zSHAyo@ZB^t(!EHbC?z75f3u#0l2xnQoT+v0qlyGc>>l*S#&i_zK_rPtq>Cf6-M{5J zD;OOqPYsRQ?M@9Yu72f9b6!5 mZB}-$ue&db#)m0HBSxUGF`!#d?x9PvcNoKM*O%@-So;?u*&t>B literal 0 HcmV?d00001 diff --git a/packages/kos-sdk/artifacts/polkadot_metadata_full.scale b/packages/kos-sdk/artifacts/polkadot_metadata_full.scale deleted file mode 100644 index 703c30679d02643123839f4227459de337b87d43..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 421187 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 Y$`7Z?b`w@JR2m|NJJOyxa%bzm0X`(IZvX%Q diff --git a/packages/kos-sdk/artifacts/v14_metadata_polkadot.scale b/packages/kos-sdk/artifacts/v14_metadata_polkadot.scale deleted file mode 100644 index 1ce8ac6279c64cef0e9cfed501d27a3885f4f187..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 269807 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 Result, Error> { - // let client = DOT::get_client(genesis_hash, spec_version, transaction_version)?; - // let data = &mut &*to_bytes( - // "0x04050300a653ae79665565ba7fc682c385b3c038c2091ab6d6053355b9950a108ac48b0600", - // ); - // - // if data.is_empty() { - // return Err(Error::InvalidTransaction("empty transaction".to_string())); - // } - // - // let is_signed = data[0] & 0b1000_0000 != 0; - // let version = data[0] & 0b0111_1111; - // *data = &data[1..]; - // - // if version != 4 { - // return Err(Error::InvalidTransaction(format!( - // "unsupported extrinsic version: {}", - // version - // ))); - // } - // - // let call_data = DOT::decode_call_data(data, client)?; - // - // Ok(vec![0u8; 32]) - // } + pub fn decode_extrinsic( + genesis_hash: &str, + spec_version: u32, + transaction_version: u32, + tx: &str, + ) -> Result, Error> { + let metadata_bytes = { + let bytes = std::fs::read("./artifacts/dot-klever-node.scale").unwrap(); + Metadata::decode(&mut &*bytes).unwrap() + } + .encode(); + + let metadata = format!("0x{}", hex::encode(metadata_bytes)); + let client = DOT::get_client(genesis_hash, spec_version, transaction_version, &metadata)?; + let data = &mut &*to_bytes(tx); + + if data.is_empty() { + return Err(Error::InvalidTransaction("empty transaction".to_string())); + } + + let is_signed = data[0] & 0b1000_0000 != 0; + let version = data[0] & 0b0111_1111; + *data = &data[1..]; + + if version != 4 { + return Err(Error::InvalidTransaction(format!( + "unsupported extrinsic version: {}", + version + ))); + } + + let call_data = DOT::decode_call_data(data, client)?; + + Ok(vec![0u8; 32]) + } fn decode_call_data( data: &mut &[u8], @@ -292,12 +298,40 @@ impl DOT { }) } - pub fn tx_from_raw(raw: &str) -> Result { + pub fn tx_from_json(raw: &str) -> Result { let b64 = b64_engine::STANDARD; let bytes = b64.decode(raw).unwrap(); - let tx = DOTTransaction::from_bytes(bytes).unwrap(); + let mut tx = DOTTransaction::from_bytes(bytes).unwrap(); + + let metadata_bytes = { + let bytes = std::fs::read("./artifacts/dot-klever-node.scale").unwrap(); + Metadata::decode(&mut &*bytes).unwrap() + } + .encode(); + + let metadata = format!("0x{}", hex::encode(metadata_bytes)); + + let client = DOT::get_client( + &*tx.genesis_hash, + tx.spec_version.parse().unwrap(), + tx.transaction_version.parse().unwrap(), + &metadata, + )?; + + let method = hex::decode(&mut tx.method)?; + + let method_bytes = &mut &*method; + + let call_data = DOT::decode_call_data(method_bytes, client.clone())?; + + let payload = subxt::dynamic::tx(call_data.pallet, call_data.call, call_data.args); + + let partial_tx = client + .tx() + .create_partial_signed_offline(&payload, Default::default()) + .unwrap(); Ok(Transaction { chain: crate::chain::Chain::DOT, @@ -343,26 +377,28 @@ impl DOT { #[cfg(test)] mod tests { use crate::chains::DOT; + use parity_scale_codec::{Decode, Encode}; use prost::Message; use subxt::client::OfflineClientT; use subxt::utils::{MultiAddress, MultiSignature, H256}; + use subxt::Metadata; #[test] fn test_keypair_from_mnemonic() { let mnemonic = "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about"; - let path = super::DOT::get_path(&super::PathOptions { + let path = DOT::get_path(&super::PathOptions { index: 0, is_legacy: None, }) .unwrap(); - let kp = super::DOT::keypair_from_mnemonic(mnemonic, &path, None).unwrap(); - let address = super::DOT::get_address_from_keypair(&kp).unwrap(); + let kp = DOT::keypair_from_mnemonic(mnemonic, &path, None).unwrap(); + let address = DOT::get_address_from_keypair(&kp).unwrap(); assert_eq!(address, "13KVd4f2a4S5pLp4gTTFezyXdPWx27vQ9vS6xBXJ9yWVd7xo"); } #[test] fn test_get_path() { - let path = super::DOT::get_path(&super::PathOptions { + let path = DOT::get_path(&super::PathOptions { index: 1, is_legacy: None, }) @@ -374,29 +410,37 @@ mod tests { #[test] fn test_validate_address() { let address = "13KVd4f2a4S5pLp4gTTFezyXdPWx27vQ9vS6xBXJ9yWVd7xo"; - let valid = super::DOT::validate_address(address, None).unwrap(); + let valid = DOT::validate_address(address, None).unwrap(); assert_eq!(valid, true); } #[test] fn test_sign_digest() { - let kp = super::DOT::keypair_from_bytes(&[0u8; 32]).unwrap(); + let kp = DOT::keypair_from_bytes(&[0u8; 32]).unwrap(); let digest = String::from("hello").into_bytes(); - let signature = super::DOT::sign_digest(&digest, &kp).unwrap(); + let signature = DOT::sign_digest(&digest, &kp).unwrap(); assert_eq!(signature.len(), 64); - let address = super::DOT::get_address_from_keypair(&kp).unwrap(); - let valid = super::DOT::verify_digest(&digest, &signature, &address).unwrap(); + let address = DOT::get_address_from_keypair(&kp).unwrap(); + let valid = DOT::verify_digest(&digest, &signature, &address).unwrap(); assert_eq!(valid, true); } #[test] fn test_get_client() { - let client = super::DOT::get_client( + let metadata_bytes = { + let bytes = std::fs::read("./artifacts/dot-klever-node.scale").unwrap(); + Metadata::decode(&mut &*bytes).unwrap() + } + .encode(); + + let metadata = format!("0x{}", hex::encode(metadata_bytes)); + + let client = DOT::get_client( "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", 1002007, 26, - "", + &metadata, ) .unwrap(); @@ -413,7 +457,7 @@ mod tests { fn test_decode_tx() { let raw = "eyJzcGVjVmVyc2lvbiI6IjB4MDAwZjRkZjgiLCJ0cmFuc2FjdGlvblZlcnNpb24iOiIweDAwMDAwMDFhIiwiYWRkcmVzcyI6IjE0bTVvcUxFRFhNZXlkeVU4NEUyZ01NeWtLVHQ3OFFCUUZXTmpLaG5kbTFiZ0NhWCIsImFzc2V0SWQiOiJudWxsIiwiYmxvY2tIYXNoIjoiMHg2MGY4ZmFhNmI1ZGQwZmViYjE3OGU0MmViNjQ0NzE5MzU3YWU1NTViNGNiYWVmZGIzMjIwNGFmMzc5ZjRkNTg2IiwiYmxvY2tOdW1iZXIiOiIweDAxNThmYWE2IiwiZXJhIjoiMHg2NTAyIiwiZ2VuZXNpc0hhc2giOiIweDkxYjE3MWJiMTU4ZTJkMzg0OGZhMjNhOWYxYzI1MTgyZmI4ZTIwMzEzYjJjMWViNDkyMTlkYTdhNzBjZTkwYzMiLCJtZXRhZGF0YUhhc2giOiJudWxsIiwibWV0aG9kIjoiMHgwNTAzMDBhNjUzYWU3OTY2NTU2NWJhN2ZjNjgyYzM4NWIzYzAzOGMyMDkxYWI2ZDYwNTMzNTViOTk1MGExMDhhYzQ4YjA2MDAiLCJtb2RlIjowLCJub25jZSI6IjB4MDAwMDAwMDAiLCJzaWduZWRFeHRlbnNpb25zIjpbIkNoZWNrTm9uWmVyb1NlbmRlciIsIkNoZWNrU3BlY1ZlcnNpb24iLCJDaGVja1R4VmVyc2lvbiIsIkNoZWNrR2VuZXNpcyIsIkNoZWNrTW9ydGFsaXR5IiwiQ2hlY2tOb25jZSIsIkNoZWNrV2VpZ2h0IiwiQ2hhcmdlVHJhbnNhY3Rpb25QYXltZW50IiwiUHJldmFsaWRhdGVBdHRlc3RzIiwiQ2hlY2tNZXRhZGF0YUhhc2giXSwidGlwIjoiMHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsInZlcnNpb24iOjQsIndpdGhTaWduZWRUcmFuc2FjdGlvbiI6dHJ1ZX0="; - let tx = super::DOT::tx_from_raw(raw).unwrap(); + let tx = DOT::tx_from_json(raw).unwrap(); assert_eq!( tx.sender, @@ -423,11 +467,19 @@ mod tests { #[test] fn test_decode_call_data() { + let metadata_bytes = { + let bytes = std::fs::read("./artifacts/dot-klever-node.scale").unwrap(); + Metadata::decode(&mut &*bytes).unwrap() + } + .encode(); + + let metadata = format!("0x{}", hex::encode(metadata_bytes)); + let client = DOT::get_client( "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", 1003000, 26, - "...raw metadata...", + &metadata, ) .unwrap(); @@ -438,7 +490,7 @@ mod tests { let call_data_cursor = &mut &*call_data_bytes; - let decoded = super::DOT::decode_call_data(call_data_cursor, client.clone()).unwrap(); + let decoded = DOT::decode_call_data(call_data_cursor, client.clone()).unwrap(); let payload = subxt::dynamic::tx(decoded.pallet, decoded.call, decoded.args); @@ -449,8 +501,8 @@ mod tests { let signer_payload = partial_tx.signer_payload(); - let kp = super::DOT::keypair_from_bytes(&[0u8; 32]).unwrap(); - let signature = super::DOT::sign_digest(&signer_payload, &kp).unwrap(); + let kp = DOT::keypair_from_bytes(&[0u8; 32]).unwrap(); + let signature = DOT::sign_digest(&signer_payload, &kp).unwrap(); let address = MultiAddress::Id(super::address::Address::from_keypair(&kp).to_account_id32()); diff --git a/packages/kos-sdk/src/chains/polkadot/requests.rs b/packages/kos-sdk/src/chains/polkadot/requests.rs new file mode 100644 index 0000000..54a4b43 --- /dev/null +++ b/packages/kos-sdk/src/chains/polkadot/requests.rs @@ -0,0 +1,29 @@ +use crate::utils; +use kos_types::error::Error; +use serde_json::Value; + +async fn create_call(url: String, method: &str, params: Value) -> Result { + let data = serde_json::json!({ + "method": method, + "params": params, + "id": 1, + "jsonrpc": "2.0" + }) + .to_string() + .as_bytes() + .to_vec(); + utils::http_post::(url, &data) + .await + .map_err(|e| e.into()) +} + +pub async fn get_metadata(url: &str) -> Result { + let result = create_call(url.to_string(), "state_getMetadata", Value::Array(vec![])).await?; + match result.get("result") { + Some(metadata) => match metadata.as_str() { + Some(metadata) => Ok(metadata.to_string()), + None => Err(Error::InvalidTransaction("metadata not found".to_string())), + }, + None => Err(Error::InvalidTransaction("metadata not found".to_string())), + } +} From 57e54bc5417b68c314cc5fe7b28a8808f20d011b Mon Sep 17 00:00:00 2001 From: Pedro Camboim Date: Wed, 16 Oct 2024 16:33:02 -0300 Subject: [PATCH 17/25] chore: DOT sign method --- packages/kos-sdk/src/chains/polkadot/mod.rs | 177 +++++++++++++----- .../src/chains/polkadot/transaction.rs | 1 + 2 files changed, 134 insertions(+), 44 deletions(-) diff --git a/packages/kos-sdk/src/chains/polkadot/mod.rs b/packages/kos-sdk/src/chains/polkadot/mod.rs index 98c5e62..832145c 100644 --- a/packages/kos-sdk/src/chains/polkadot/mod.rs +++ b/packages/kos-sdk/src/chains/polkadot/mod.rs @@ -17,6 +17,7 @@ use kos_types::hash::Hash; use kos_types::number::BigNumber; use parity_scale_codec::{Decode, Encode}; +use serde::Deserializer; use sp_core::crypto::Ss58Codec; use sp_core::{sr25519, Pair}; use std::str::FromStr; @@ -25,9 +26,10 @@ use subxt::dynamic::Value; use subxt::ext::frame_metadata::RuntimeMetadataPrefixed; use subxt::ext::scale_decode::DecodeAsType; use subxt::tx::Payload; -use subxt::utils::H256; +use subxt::utils::{MultiAddress, MultiSignature, H256}; use subxt::{Metadata, OfflineClient, PolkadotConfig}; use wasm_bindgen::prelude::*; +use wasm_bindgen_futures::js_sys::Atomics::sub; #[derive(Debug, Copy, Clone)] #[wasm_bindgen] @@ -43,6 +45,7 @@ pub const BASE_CHAIN: BaseChain = BaseChain { chain_code: 21, }; +#[wasm_bindgen] struct CallData { pallet: String, call: String, @@ -151,22 +154,73 @@ impl DOT { /// Hash and Sign data with the private key. pub fn sign(tx: Transaction, keypair: &KeyPair) -> Result { match tx.data { - Some(TransactionRaw::Tron(trx_tx)) => { - let mut new_tx = trx_tx.clone(); - let digest = Vec::new(); - let sig = Vec::new(); + Some(TransactionRaw::Polkadot(dot_tx)) => { + let mut new_tx = dot_tx.clone(); + + let metadata_bytes = { + let bytes = std::fs::read("./artifacts/dot-klever-node.scale").unwrap(); + Metadata::decode(&mut &*bytes).unwrap() + } + .encode(); + + let metadata = format!("0x{}", hex::encode(metadata_bytes)); + + let spec_version = + u32::from_str_radix(new_tx.spec_version.strip_prefix("0x").unwrap(), 16) + .unwrap(); + + let transaction_version = + u32::from_str_radix(new_tx.transaction_version.strip_prefix("0x").unwrap(), 16) + .unwrap(); + + println!("spec_version: {:?}", spec_version); + println!("transaction_version: {:?}", transaction_version); + + let client = DOT::get_client( + &*new_tx.genesis_hash.strip_prefix("0x").unwrap(), + spec_version, + transaction_version, + &metadata, + )?; + + let method = + hex::decode(&mut new_tx.method.strip_prefix("0x").unwrap().to_string())?; + let method_bytes = &mut &*method; + + let payload = { + let call_data = DOT::decode_call_data(method_bytes, client.clone())?; + subxt::dynamic::tx(call_data.pallet, call_data.call, call_data.args) + }; + + let partial_tx = client + .tx() + .create_partial_signed_offline(&payload, Default::default()) + .unwrap(); + + let digest = partial_tx.signer_payload(); + + let signature = DOT::sign_digest(&digest, keypair)?; + + new_tx.signature = Some(hex::encode(signature.clone())); + + let address = + MultiAddress::Id(address::Address::from_keypair(&keypair).to_account_id32()); + let signature = MultiSignature::Sr25519(<[u8; 64]>::try_from(signature).unwrap()); + + let submittable = partial_tx.sign_with_address_and_signature(&address, &signature); - new_tx.signature.push(sig); let result = Transaction { chain: tx.chain, sender: tx.sender, - hash: Hash::from_vec(digest)?, - data: Some(TransactionRaw::Tron(new_tx)), + hash: Hash::from_vec(submittable.hash().encode())?, + data: Some(TransactionRaw::Polkadot(new_tx)), }; Ok(result) } - _ => Err(Error::InvalidMessage("not a tron transaction".to_string())), + _ => Err(Error::InvalidMessage( + "not a polkadot transaction".to_string(), + )), } } @@ -223,7 +277,7 @@ impl DOT { spec_version: u32, transaction_version: u32, tx: &str, - ) -> Result, Error> { + ) -> Result { let metadata_bytes = { let bytes = std::fs::read("./artifacts/dot-klever-node.scale").unwrap(); Metadata::decode(&mut &*bytes).unwrap() @@ -251,7 +305,7 @@ impl DOT { let call_data = DOT::decode_call_data(data, client)?; - Ok(vec![0u8; 32]) + Ok(call_data) } fn decode_call_data( @@ -299,39 +353,7 @@ impl DOT { } pub fn tx_from_json(raw: &str) -> Result { - let b64 = b64_engine::STANDARD; - - let bytes = b64.decode(raw).unwrap(); - - let mut tx = DOTTransaction::from_bytes(bytes).unwrap(); - - let metadata_bytes = { - let bytes = std::fs::read("./artifacts/dot-klever-node.scale").unwrap(); - Metadata::decode(&mut &*bytes).unwrap() - } - .encode(); - - let metadata = format!("0x{}", hex::encode(metadata_bytes)); - - let client = DOT::get_client( - &*tx.genesis_hash, - tx.spec_version.parse().unwrap(), - tx.transaction_version.parse().unwrap(), - &metadata, - )?; - - let method = hex::decode(&mut tx.method)?; - - let method_bytes = &mut &*method; - - let call_data = DOT::decode_call_data(method_bytes, client.clone())?; - - let payload = subxt::dynamic::tx(call_data.pallet, call_data.call, call_data.args); - - let partial_tx = client - .tx() - .create_partial_signed_offline(&payload, Default::default()) - .unwrap(); + let mut tx = DOTTransaction::from_bytes(raw.as_bytes().to_vec()).unwrap(); Ok(Transaction { chain: crate::chain::Chain::DOT, @@ -376,9 +398,11 @@ impl DOT { #[cfg(test)] mod tests { + use crate::chains::polkadot::to_bytes; use crate::chains::DOT; use parity_scale_codec::{Decode, Encode}; use prost::Message; + use serde_json::json; use subxt::client::OfflineClientT; use subxt::utils::{MultiAddress, MultiSignature, H256}; use subxt::Metadata; @@ -465,6 +489,25 @@ mod tests { ); } + #[test] + fn decode_extrinsic() { + let ext = "0x040503002534454d30f8a028e42654d6b535e0651d1d026ddf115cef59ae1dd71bae074e910100ee2a21000000fb4d0f001a00000091b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c391b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c300"; + + let ext_bytes = &mut &*to_bytes(ext); + + let decoded = DOT::decode_extrinsic( + "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + 1003000, + 26, + ext, + ) + .unwrap(); + + for arg in decoded.args { + println!("{:?}", arg); + } + } + #[test] fn test_decode_call_data() { let metadata_bytes = { @@ -512,4 +555,50 @@ mod tests { println!("{:?}", hex::encode(submittable.encoded())); } + + #[test] + fn test_sign_extrinsic() { + let signer_payload = json!({ + "specVersion": "0x000f4df8", + "transactionVersion": "0x0000001a", + "address": "14m5oqLEDXMeydyU84E2gMMykKTt78QBQFWNjKhndm1bgCaX", + "assetId": null, + "blockHash": "0x60f8faa6b5dd0febb178e42eb644719357ae555b4cbaefdb32204af379f4d586", + "blockNumber": "0x0158faa6", + "era": "0x6502", + "genesisHash": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "metadataHash": null, + "method": "0x050300a653ae79665565ba7fc682c385b3c038c2091ab6d6053355b9950a108ac48b0600", + "mode": 0, + "nonce": "0x00000000", + "signedExtensions": [ + "CheckNonZeroSender", + "CheckSpecVersion", + "CheckTxVersion", + "CheckGenesis", + "CheckMortality", + "CheckNonce", + "CheckWeight", + "ChargeTransactionPayment", + "PrevalidateAttests", + "CheckMetadataHash" + ], + "tip": "0x00000000000000000000000000000000", + "version": 4, + "withSignedTransaction": true, + "signature": "" + }); + + let kp = DOT::keypair_from_mnemonic("abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about", "//0", None).unwrap(); + let tx = DOT::tx_from_json(&signer_payload.to_string()).unwrap(); + + let signed = DOT::sign(tx, &kp) + .map_err(|e| { + println!("{:?}", e); + e + }) + .unwrap(); + + println!("{:?}", signed.get_raw().unwrap()); + } } diff --git a/packages/kos-sdk/src/chains/polkadot/transaction.rs b/packages/kos-sdk/src/chains/polkadot/transaction.rs index ed22f0d..13d16c1 100644 --- a/packages/kos-sdk/src/chains/polkadot/transaction.rs +++ b/packages/kos-sdk/src/chains/polkadot/transaction.rs @@ -27,6 +27,7 @@ pub struct Transaction { pub version: i64, #[serde(rename = "withSignedTransaction")] pub with_signed_transaction: bool, + pub signature: Option, } impl Transaction { From c9040d69fec1b9ebb4106d808c2f875f837e8c5b Mon Sep 17 00:00:00 2001 From: Pedro Camboim Date: Wed, 16 Oct 2024 18:29:51 -0300 Subject: [PATCH 18/25] feat: get signed extrinsic raw --- packages/kos-crypto/src/sr25519.rs | 8 +- .../kos-sdk/src/chains/polkadot/address.rs | 4 +- packages/kos-sdk/src/chains/polkadot/mod.rs | 88 +++++++++++++------ packages/kos-sdk/src/models.rs | 6 +- 4 files changed, 70 insertions(+), 36 deletions(-) diff --git a/packages/kos-crypto/src/sr25519.rs b/packages/kos-crypto/src/sr25519.rs index 091a101..514f720 100644 --- a/packages/kos-crypto/src/sr25519.rs +++ b/packages/kos-crypto/src/sr25519.rs @@ -1,9 +1,7 @@ -use coins_bip32::path::DerivationPath; use coins_bip39::{English, Mnemonic}; use kos_types::{error::Error, Bytes32}; use serde::{Deserialize, Deserializer, Serialize, Serializer}; -use sp_core::crypto::VrfPublic; -use sp_core::{ed25519, sr25519, Pair}; +use sp_core::{sr25519, Pair}; use std::str::FromStr; use wasm_bindgen::prelude::wasm_bindgen; @@ -13,7 +11,7 @@ pub struct Sr25519KeyPair { } impl Serialize for Sr25519KeyPair { - fn serialize(&self, serializer: S) -> Result + fn serialize(&self, _serializer: S) -> Result where S: Serializer, { @@ -22,7 +20,7 @@ impl Serialize for Sr25519KeyPair { } impl<'de> Deserialize<'de> for Sr25519KeyPair { - fn deserialize(deserializer: D) -> Result + fn deserialize(_deserializer: D) -> Result where D: Deserializer<'de>, { diff --git a/packages/kos-sdk/src/chains/polkadot/address.rs b/packages/kos-sdk/src/chains/polkadot/address.rs index 607733f..d0f9363 100644 --- a/packages/kos-sdk/src/chains/polkadot/address.rs +++ b/packages/kos-sdk/src/chains/polkadot/address.rs @@ -57,7 +57,9 @@ impl FromStr for Address { fn from_str(s: &str) -> Result { let decoded = Public::from_ss58check_with_version(s).map_err(|_| "Invalid address")?; - decoded.0.len() == ADDRESS_LEN || return Err("Invalid address"); + if decoded.0.len() != ADDRESS_LEN { + return Err("Invalid address length"); + } let mut raw = [0u8; ADDRESS_LEN]; raw.copy_from_slice(&decoded.0); diff --git a/packages/kos-sdk/src/chains/polkadot/mod.rs b/packages/kos-sdk/src/chains/polkadot/mod.rs index 832145c..0af850c 100644 --- a/packages/kos-sdk/src/chains/polkadot/mod.rs +++ b/packages/kos-sdk/src/chains/polkadot/mod.rs @@ -9,7 +9,7 @@ use crate::{ models, models::{PathOptions, Transaction, TransactionRaw}, }; -use base64::{engine::general_purpose as b64_engine, Engine}; +use base64::Engine; use kos_crypto::keypair::KeyPair; use kos_crypto::sr25519::Sr25519KeyPair; use kos_types::error::Error; @@ -25,11 +25,10 @@ use subxt::client::{OfflineClientT, RuntimeVersion}; use subxt::dynamic::Value; use subxt::ext::frame_metadata::RuntimeMetadataPrefixed; use subxt::ext::scale_decode::DecodeAsType; -use subxt::tx::Payload; -use subxt::utils::{MultiAddress, MultiSignature, H256}; +use subxt::tx::{Payload, SubmittableExtrinsic}; +use subxt::utils::{AccountId32, MultiAddress, MultiSignature, H256}; use subxt::{Metadata, OfflineClient, PolkadotConfig}; use wasm_bindgen::prelude::*; -use wasm_bindgen_futures::js_sys::Atomics::sub; #[derive(Debug, Copy, Clone)] #[wasm_bindgen] @@ -37,7 +36,6 @@ pub struct DOT {} pub const SIGN_PREFIX: &[u8; 26] = b"\x19Polkadot Signed Message:\n"; -pub const BIP44_PATH: u32 = 195; pub const BASE_CHAIN: BaseChain = BaseChain { name: "Polkadot", symbol: "DOT", @@ -46,7 +44,7 @@ pub const BASE_CHAIN: BaseChain = BaseChain { }; #[wasm_bindgen] -struct CallData { +pub struct CallData { pallet: String, call: String, args: Vec, @@ -106,7 +104,7 @@ impl DOT { pub fn get_path(options: &PathOptions) -> Result { let index = options.index; - if (index == 0) { + if index == 0 { return Ok(String::new()); } @@ -118,8 +116,7 @@ impl DOT { #[wasm_bindgen(js_name = "signDigest")] /// Sign digest data with the private key. pub fn sign_digest(digest: &[u8], keypair: &KeyPair) -> Result, Error> { - let raw = keypair.sign_digest(digest); - Ok(raw) + Ok(keypair.sign_digest(digest)) } #[wasm_bindgen(js_name = "verifyDigest")] @@ -127,25 +124,24 @@ impl DOT { pub fn verify_digest(digest: &[u8], signature: &[u8], _address: &str) -> Result { let public = sr25519::Public::from_ss58check(_address).unwrap(); - let signature = - sp_core::sr25519::Signature::from_raw(<[u8; 64]>::try_from(signature).unwrap()); + let signature = sr25519::Signature::from_raw(<[u8; 64]>::try_from(signature).unwrap()); Ok(sr25519::Pair::verify(&signature, digest, &public)) } pub async fn send( - sender: String, - receiver: String, - amount: BigNumber, - options: Option, - node_url: Option, + _sender: String, + _receiver: String, + _amount: BigNumber, + _options: Option, + _node_url: Option, ) -> Result { todo!() } pub async fn broadcast( - tx: crate::models::Transaction, - node_url: Option, + _tx: Transaction, + _node_url: Option, ) -> Result { todo!() } @@ -173,9 +169,6 @@ impl DOT { u32::from_str_radix(new_tx.transaction_version.strip_prefix("0x").unwrap(), 16) .unwrap(); - println!("spec_version: {:?}", spec_version); - println!("transaction_version: {:?}", transaction_version); - let client = DOT::get_client( &*new_tx.genesis_hash.strip_prefix("0x").unwrap(), spec_version, @@ -256,9 +249,9 @@ impl DOT { #[wasm_bindgen(js_name = "getBalance")] pub async fn get_balance( - addr: &str, - token: Option, - node_url: Option, + _addr: &str, + _token: Option, + _node_url: Option, ) -> Result { Ok(BigNumber::from(0)) } @@ -394,14 +387,54 @@ impl DOT { metadata, )) } + + pub fn get_submittable_extrinsic( + tx: DOTTransaction, + ) -> Result>, Error> { + let metadata_bytes = { + let bytes = std::fs::read("./artifacts/dot-klever-node.scale").unwrap(); + Metadata::decode(&mut &*bytes).unwrap() + } + .encode(); + + let metadata = format!("0x{}", hex::encode(metadata_bytes)); + + let client = DOT::get_client( + &*tx.genesis_hash.strip_prefix("0x").unwrap(), + u32::from_str_radix(tx.spec_version.strip_prefix("0x").unwrap(), 16).unwrap(), + u32::from_str_radix(tx.transaction_version.strip_prefix("0x").unwrap(), 16).unwrap(), + &metadata, + ) + .unwrap(); + + let method = hex::decode(&mut tx.method.strip_prefix("0x").unwrap().to_string()).unwrap(); + let method_bytes = &mut &*method; + + let payload = { + let call_data = DOT::decode_call_data(method_bytes, client.clone()).unwrap(); + subxt::dynamic::tx(call_data.pallet, call_data.call, call_data.args) + }; + + let partial_tx = client + .tx() + .create_partial_signed_offline(&payload, Default::default()) + .unwrap(); + + let signature = Some(hex::decode(tx.signature.unwrap()).unwrap()).unwrap(); + + let address = MultiAddress::Id(AccountId32::from_str(&tx.address).unwrap()); + let signature = MultiSignature::Sr25519(<[u8; 64]>::try_from(signature).unwrap()); + + let submittable = partial_tx.sign_with_address_and_signature(&address, &signature); + + Ok(submittable) + } } #[cfg(test)] mod tests { - use crate::chains::polkadot::to_bytes; use crate::chains::DOT; use parity_scale_codec::{Decode, Encode}; - use prost::Message; use serde_json::json; use subxt::client::OfflineClientT; use subxt::utils::{MultiAddress, MultiSignature, H256}; @@ -493,8 +526,6 @@ mod tests { fn decode_extrinsic() { let ext = "0x040503002534454d30f8a028e42654d6b535e0651d1d026ddf115cef59ae1dd71bae074e910100ee2a21000000fb4d0f001a00000091b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c391b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c300"; - let ext_bytes = &mut &*to_bytes(ext); - let decoded = DOT::decode_extrinsic( "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", 1003000, @@ -586,7 +617,6 @@ mod tests { "tip": "0x00000000000000000000000000000000", "version": 4, "withSignedTransaction": true, - "signature": "" }); let kp = DOT::keypair_from_mnemonic("abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about", "//0", None).unwrap(); diff --git a/packages/kos-sdk/src/models.rs b/packages/kos-sdk/src/models.rs index efce54b..bcdb3bd 100644 --- a/packages/kos-sdk/src/models.rs +++ b/packages/kos-sdk/src/models.rs @@ -4,6 +4,7 @@ use serde::{Deserialize, Serialize}; use wasm_bindgen::prelude::*; use crate::chain::Chain; +use crate::chains::DOT; #[derive(Debug, Clone, Serialize)] #[wasm_bindgen] @@ -182,7 +183,10 @@ impl Transaction { serde_json::to_string(&data.tx).map_err(|e| e.into()) } TransactionRaw::Polkadot(data) => { - serde_json::to_string(&data).map_err(|e| e.into()) + let extrinsic = DOT::get_submittable_extrinsic(data.clone()) + .expect("Error getting submittable extrinsic"); + + Ok(hex::encode(extrinsic.encoded())) } }, None => Err(Error::InvalidTransaction("no data found".to_string())), From 2f1f25b4e3eab376e70e80be1caa2c49d33fedea Mon Sep 17 00:00:00 2001 From: Pedro Camboim Date: Thu, 17 Oct 2024 10:50:57 -0300 Subject: [PATCH 19/25] chore: set subxt web feature --- Cargo.lock | 784 ++++++------------------------------ packages/kos-sdk/Cargo.toml | 4 +- 2 files changed, 133 insertions(+), 655 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 5ed6514..e290c77 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -69,7 +69,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" dependencies = [ "cfg-if", - "getrandom", "once_cell", "version_check", "zerocopy", @@ -264,49 +263,6 @@ dependencies = [ "pin-project-lite", ] -[[package]] -name = "async-executor" -version = "1.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30ca9a001c1e8ba5149f91a74362376cc6bc5b919d92d988668657bd570bdcec" -dependencies = [ - "async-task", - "concurrent-queue", - "fastrand", - "futures-lite", - "slab", -] - -[[package]] -name = "async-fs" -version = "2.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebcd09b382f40fcd159c2d695175b2ae620ffa5f3bd6f664131efff4e8b9e04a" -dependencies = [ - "async-lock", - "blocking", - "futures-lite", -] - -[[package]] -name = "async-io" -version = "2.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "444b0228950ee6501b3568d3c93bf1176a1fdbc3b758dcd9475046d30f4dc7e8" -dependencies = [ - "async-lock", - "cfg-if", - "concurrent-queue", - "futures-io", - "futures-lite", - "parking", - "polling", - "rustix", - "slab", - "tracing", - "windows-sys 0.59.0", -] - [[package]] name = "async-lock" version = "3.4.0" @@ -318,54 +274,6 @@ dependencies = [ "pin-project-lite", ] -[[package]] -name = "async-net" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b948000fad4873c1c9339d60f2623323a0cfd3816e5181033c6a5cb68b2accf7" -dependencies = [ - "async-io", - "blocking", - "futures-lite", -] - -[[package]] -name = "async-process" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63255f1dc2381611000436537bbedfe83183faa303a5a0edaf191edef06526bb" -dependencies = [ - "async-channel", - "async-io", - "async-lock", - "async-signal", - "async-task", - "blocking", - "cfg-if", - "event-listener 5.3.1", - "futures-lite", - "rustix", - "tracing", -] - -[[package]] -name = "async-signal" -version = "0.2.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "637e00349800c0bdf8bfc21ebbc0b6524abea702b0da4168ac00d070d0c0b9f3" -dependencies = [ - "async-io", - "async-lock", - "atomic-waker", - "cfg-if", - "futures-core", - "futures-io", - "rustix", - "signal-hook-registry", - "slab", - "windows-sys 0.59.0", -] - [[package]] name = "async-stream" version = "0.3.6" @@ -388,12 +296,6 @@ dependencies = [ "syn 2.0.79", ] -[[package]] -name = "async-task" -version = "4.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" - [[package]] name = "async-trait" version = "0.1.83" @@ -420,12 +322,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a8ab6b55fe97976e46f91ddbed8d147d966475dc29b2032757ba47e02376fbc3" -[[package]] -name = "atomic-waker" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" - [[package]] name = "autocfg" version = "1.4.0" @@ -504,7 +400,7 @@ version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33415e24172c1b7d6066f6d999545375ab8e1d95421d6784bdfff9496f292387" dependencies = [ - "bitcoin_hashes 0.13.0", + "bitcoin_hashes 0.12.0", ] [[package]] @@ -634,24 +530,11 @@ dependencies = [ "generic-array", ] -[[package]] -name = "blocking" -version = "1.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea" -dependencies = [ - "async-channel", - "async-task", - "futures-io", - "futures-lite", - "piper", -] - [[package]] name = "bounded-collections" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d32385ecb91a31bddaf908e8dcf4a15aef1bcd3913cc03ebfad02ff6d568abc1" +checksum = "db436177db0d505b1507f03aca56a41442ae6efdf8b6eaa855d73e52c5b078dc" dependencies = [ "log", "parity-scale-codec", @@ -683,9 +566,9 @@ checksum = "c3ac9f8b63eca6fd385229b3675f6cc0dc5c8a5c8a54a59d4f52ffd670d87b0c" [[package]] name = "bytemuck" -version = "1.18.0" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94bbb0ad554ad961ddc5da507a12a29b14e4ae5bda06b19f575a3e6079d2e2ae" +checksum = "8334215b81e418a0a7bdb8ef0849474f40bb10c8b71f1c4ed315cff49f32494d" [[package]] name = "byteorder" @@ -710,19 +593,13 @@ dependencies = [ [[package]] name = "cc" -version = "1.1.28" +version = "1.1.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e80e3b6a3ab07840e1cae9b0666a63970dc28e8ed5ffbcdacbfc760c281bfc1" +checksum = "b16803a61b81d9eabb7eae2588776c4c1e584b738ede45fdbb4c972cec1e9945" dependencies = [ "shlex", ] -[[package]] -name = "cesu8" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" - [[package]] name = "cfb-mode" version = "0.8.2" @@ -839,22 +716,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" -[[package]] -name = "combine" -version = "4.6.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" -dependencies = [ - "bytes", - "memchr", -] - -[[package]] -name = "common-path" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2382f75942f4b3be3690fe4f86365e9c853c1587d6ee58212cebf6e2a9ccd101" - [[package]] name = "concurrent-queue" version = "2.5.0" @@ -940,9 +801,9 @@ dependencies = [ [[package]] name = "critical-section" -version = "1.1.3" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f64009896348fc5af4222e9cf7d7d82a95a256c634ebcf61c53e4ea461422242" +checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b" [[package]] name = "crossbeam-queue" @@ -1134,17 +995,6 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "derive-syn-parse" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d65d7ce8132b7c0e54497a4d9a55a1c2a0912a0d786cf894472ba818fba45762" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.79", -] - [[package]] name = "derive-where" version = "1.2.7" @@ -1190,33 +1040,6 @@ dependencies = [ "subtle", ] -[[package]] -name = "docify" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a2f138ad521dc4a2ced1a4576148a6a610b4c5923933b062a263130a6802ce" -dependencies = [ - "docify_macros", -] - -[[package]] -name = "docify_macros" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a081e51fb188742f5a7a1164ad752121abcb22874b21e2c3b0dd040c515fdad" -dependencies = [ - "common-path", - "derive-syn-parse", - "once_cell", - "proc-macro2", - "quote", - "regex", - "syn 2.0.79", - "termcolor", - "toml", - "walkdir", -] - [[package]] name = "dotenv-build" version = "0.1.1" @@ -1493,7 +1316,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6032be9bd27023a771701cc49f9f053c751055f71efb2e0ae5c15809093675ba" dependencies = [ "concurrent-queue", - "parking", "pin-project-lite", ] @@ -1730,10 +1552,7 @@ version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "52527eb5074e35e9339c6b4e8d12600c7128b68fb25dcb9fa9dec18f7c25f3a5" dependencies = [ - "fastrand", "futures-core", - "futures-io", - "parking", "pin-project-lite", ] @@ -1767,7 +1586,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" dependencies = [ "gloo-timers", - "send_wrapper", + "send_wrapper 0.4.0", ] [[package]] @@ -1844,6 +1663,27 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" +[[package]] +name = "gloo-net" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43aaa242d1239a8822c15c645f02166398da4f8b5c4bae795c1f5b44e9eee173" +dependencies = [ + "futures-channel", + "futures-core", + "futures-sink", + "gloo-utils", + "http 0.2.12", + "js-sys", + "pin-project", + "serde", + "serde_json", + "thiserror", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + [[package]] name = "gloo-timers" version = "0.2.6" @@ -1856,6 +1696,19 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "gloo-utils" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b5555354113b18c547c1d3a98fbf7fb32a9ff4f6fa112ce823a21641a0ba3aa" +dependencies = [ + "js-sys", + "serde", + "serde_json", + "wasm-bindgen", + "web-sys", +] + [[package]] name = "group" version = "0.13.0" @@ -1997,12 +1850,6 @@ version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" -[[package]] -name = "hermit-abi" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc" - [[package]] name = "hex" version = "0.4.3" @@ -2139,9 +1986,9 @@ checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "hyper" -version = "0.14.30" +version = "0.14.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a152ddd61dfaec7273fe8419ab357f33aee0d914c5f4efbf0d96fa749eea5ec9" +checksum = "8c08302e8fa335b151b788c775ff56e7a03ae64ff85c548ee820fecb70356e85" dependencies = [ "bytes", "futures-channel", @@ -2163,9 +2010,9 @@ dependencies = [ [[package]] name = "hyper" -version = "1.4.1" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50dfd22e0e76d0f662d429a5f80fcaf3855009297eab6a0a9f8543834744ba05" +checksum = "bbbff0a806a4728c99295b254c8838933b5b082d75e3cb70c8dab21fdfbcfa9a" dependencies = [ "bytes", "futures-channel", @@ -2188,7 +2035,7 @@ checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" dependencies = [ "futures-util", "http 0.2.12", - "hyper 0.14.30", + "hyper 0.14.31", "log", "rustls 0.21.12", "rustls-native-certs 0.6.3", @@ -2204,9 +2051,9 @@ checksum = "08afdbb5c31130e3034af566421053ab03787c640246a446327f550d11bcb333" dependencies = [ "futures-util", "http 1.1.0", - "hyper 1.4.1", + "hyper 1.5.0", "hyper-util", - "rustls 0.23.14", + "rustls 0.23.15", "rustls-pki-types", "tokio", "tokio-rustls 0.26.0", @@ -2221,7 +2068,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" dependencies = [ "bytes", - "hyper 0.14.30", + "hyper 0.14.31", "native-tls", "tokio", "tokio-native-tls", @@ -2238,7 +2085,7 @@ dependencies = [ "futures-util", "http 1.1.0", "http-body 1.0.1", - "hyper 1.4.1", + "hyper 1.5.0", "pin-project-lite", "socket2", "tokio", @@ -2356,15 +2203,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" dependencies = [ "cfg-if", -] - -[[package]] -name = "integer-sqrt" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "276ec31bcb4a9ee45f58bec6f9ec700ae4cf4f4f8f2fa7e06cb406bd5ffdd770" -dependencies = [ - "num-traits", + "js-sys", + "wasm-bindgen", + "web-sys", ] [[package]] @@ -2412,31 +2253,11 @@ version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" -[[package]] -name = "jni" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6df18c2e3db7e453d3c6ac5b3e9d5182664d28788126d39b91f2d1e22b017ec" -dependencies = [ - "cesu8", - "combine", - "jni-sys", - "log", - "thiserror", - "walkdir", -] - -[[package]] -name = "jni-sys" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" - [[package]] name = "js-sys" -version = "0.3.70" +version = "0.3.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1868808506b929d7b0cfa8f75951347aa71bb21144b7791bae35d9bccfcfe37a" +checksum = "6a88f1bda2bd75b0452a14784937d796722fdebfe50df998aeb3f0b7603019a9" dependencies = [ "wasm-bindgen", ] @@ -2476,7 +2297,7 @@ checksum = "62b089779ad7f80768693755a031cc14a7766aba707cbe886674e3f79e9b7e47" dependencies = [ "jsonrpsee-core 0.23.2", "jsonrpsee-types 0.23.2", - "jsonrpsee-ws-client", + "jsonrpsee-wasm-client", ] [[package]] @@ -2485,13 +2306,15 @@ version = "0.22.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4978087a58c3ab02efc5b07c5e5e2803024536106fd5506f558db172c889b3aa" dependencies = [ + "futures-channel", "futures-util", + "gloo-net", "http 0.2.12", "jsonrpsee-core 0.22.5", "pin-project", "rustls-native-certs 0.7.3", "rustls-pki-types", - "soketto 0.7.1", + "soketto", "thiserror", "tokio", "tokio-rustls 0.25.0", @@ -2506,21 +2329,12 @@ version = "0.23.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08163edd8bcc466c33d79e10f695cdc98c00d1e6ddfb95cec41b6b0279dd5432" dependencies = [ - "base64 0.22.1", + "futures-channel", "futures-util", - "http 1.1.0", + "gloo-net", "jsonrpsee-core 0.23.2", - "pin-project", - "rustls 0.23.14", - "rustls-pki-types", - "rustls-platform-verifier", - "soketto 0.8.0", "thiserror", - "tokio", - "tokio-rustls 0.26.0", - "tokio-util", "tracing", - "url", ] [[package]] @@ -2534,7 +2348,7 @@ dependencies = [ "beef", "futures-timer", "futures-util", - "hyper 0.14.30", + "hyper 0.14.31", "jsonrpsee-types 0.22.5", "pin-project", "rustc-hash 1.1.0", @@ -2544,6 +2358,7 @@ dependencies = [ "tokio", "tokio-stream", "tracing", + "wasm-bindgen-futures", ] [[package]] @@ -2564,8 +2379,8 @@ dependencies = [ "serde_json", "thiserror", "tokio", - "tokio-stream", "tracing", + "wasm-bindgen-futures", ] [[package]] @@ -2575,7 +2390,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1ccf93fc4a0bfe05d851d37d7c32b7f370fe94336b52a2f0efc5f1981895c2e5" dependencies = [ "async-trait", - "hyper 0.14.30", + "hyper 0.14.31", "hyper-rustls 0.24.2", "jsonrpsee-core 0.22.5", "jsonrpsee-types 0.22.5", @@ -2615,16 +2430,14 @@ dependencies = [ ] [[package]] -name = "jsonrpsee-ws-client" +name = "jsonrpsee-wasm-client" version = "0.23.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c28759775f5cb2f1ea9667672d3fe2b0e701d1f4b7b67954e60afe7fd058b5e" +checksum = "4727ac037f834c6f04c0912cada7532dbddb54e92fbc64e33d6cb8c24af313c9" dependencies = [ - "http 1.1.0", "jsonrpsee-client-transport 0.23.2", "jsonrpsee-core 0.23.2", "jsonrpsee-types 0.23.2", - "url", ] [[package]] @@ -2750,13 +2563,11 @@ dependencies = [ "rand", "reqwest 0.12.8", "rlp", - "scale-value", "secp256k1 0.27.0", "serde", "serde-wasm-bindgen", "serde_json", "sp-core", - "sp-runtime", "strum", "subxt", "tokio", @@ -2909,15 +2720,6 @@ version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" -[[package]] -name = "memory-db" -version = "0.32.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "808b50db46293432a45e63bc15ea51e0ab4c0a1647b8eb114e31a3e698dd6fbe" -dependencies = [ - "hash-db", -] - [[package]] name = "merlin" version = "3.0.0" @@ -2968,7 +2770,7 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" dependencies = [ - "hermit-abi 0.3.9", + "hermit-abi", "libc", "wasi", "windows-sys 0.52.0", @@ -3015,12 +2817,6 @@ version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" -[[package]] -name = "nohash-hasher" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" - [[package]] name = "nom" version = "7.1.3" @@ -3102,7 +2898,7 @@ version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" dependencies = [ - "hermit-abi 0.3.9", + "hermit-abi", "libc", ] @@ -3129,9 +2925,9 @@ checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" [[package]] name = "openssl" -version = "0.10.66" +version = "0.10.67" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9529f4786b70a3e8c61e11179af17ab6188ad8d0ded78c5529441ed39d4bd9c1" +checksum = "7b8cefcf97f41316955f9294cd61f639bdcfa9f2f230faac6cb896aa8ab64704" dependencies = [ "bitflags 2.6.0", "cfg-if", @@ -3161,9 +2957,9 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-sys" -version = "0.9.103" +version = "0.9.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f9e8deee91df40a943c71b917e5874b951d32a802526c85721ce3b776c929d6" +checksum = "45abf306cbf99debc8195b66b7346498d7b10c210de50418b5ccd7ceba08c741" dependencies = [ "cc", "libc", @@ -3217,12 +3013,6 @@ dependencies = [ "syn 1.0.109", ] -[[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" @@ -3368,17 +3158,6 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" -[[package]] -name = "piper" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" -dependencies = [ - "atomic-waker", - "fastrand", - "futures-io", -] - [[package]] name = "pkcs8" version = "0.10.2" @@ -3445,21 +3224,6 @@ dependencies = [ "syn 2.0.79", ] -[[package]] -name = "polling" -version = "3.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc2790cd301dec6cd3b7a025e4815cf825724a51c98dccfe6a3e55f05ffb6511" -dependencies = [ - "cfg-if", - "concurrent-queue", - "hermit-abi 0.4.0", - "pin-project-lite", - "rustix", - "tracing", - "windows-sys 0.59.0", -] - [[package]] name = "poly1305" version = "0.8.0" @@ -3590,9 +3354,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.86" +version = "1.0.88" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" +checksum = "7c3a7fc5db1e57d5a779a352c8cdb57b29aa4c40cc69c3a68a7fedc815fbf2f9" dependencies = [ "unicode-ident", ] @@ -3778,7 +3542,7 @@ dependencies = [ "quinn-proto", "quinn-udp", "rustc-hash 2.0.0", - "rustls 0.23.14", + "rustls 0.23.15", "socket2", "thiserror", "tokio", @@ -3795,7 +3559,7 @@ dependencies = [ "rand", "ring", "rustc-hash 2.0.0", - "rustls 0.23.14", + "rustls 0.23.15", "slab", "thiserror", "tinyvec", @@ -3874,6 +3638,7 @@ dependencies = [ "thiserror", "tokio", "tracing", + "wasm-bindgen-futures", ] [[package]] @@ -3963,7 +3728,7 @@ dependencies = [ "h2", "http 0.2.12", "http-body 0.4.6", - "hyper 0.14.30", + "hyper 0.14.31", "hyper-tls", "ipnet", "js-sys", @@ -4003,7 +3768,7 @@ dependencies = [ "http 1.1.0", "http-body 1.0.1", "http-body-util", - "hyper 1.4.1", + "hyper 1.5.0", "hyper-rustls 0.27.3", "hyper-util", "ipnet", @@ -4014,7 +3779,7 @@ dependencies = [ "percent-encoding", "pin-project-lite", "quinn", - "rustls 0.23.14", + "rustls 0.23.15", "rustls-pemfile 2.2.0", "rustls-pki-types", "serde", @@ -4150,11 +3915,10 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.14" +version = "0.23.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "415d9944693cb90382053259f89fbb077ea730ad7273047ec63b19bc9b160ba8" +checksum = "5fbb44d7acc4e873d613422379f69f237a1b141928c02f6bc6ccfddddc2d7993" dependencies = [ - "log", "once_cell", "ring", "rustls-pki-types", @@ -4208,36 +3972,9 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e696e35370c65c9c541198af4543ccd580cf17fc25d8e05c5a242b202488c55" - -[[package]] -name = "rustls-platform-verifier" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afbb878bdfdf63a336a5e63561b1835e7a8c91524f51621db870169eac84b490" -dependencies = [ - "core-foundation", - "core-foundation-sys", - "jni", - "log", - "once_cell", - "rustls 0.23.14", - "rustls-native-certs 0.7.3", - "rustls-platform-verifier-android", - "rustls-webpki 0.102.8", - "security-framework", - "security-framework-sys", - "webpki-roots", - "winapi", -] - -[[package]] -name = "rustls-platform-verifier-android" -version = "0.1.1" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f" +checksum = "16f1201b3c9a7ee8039bcadc17b7e605e2945b27eee7631788c1bd2b0643674b" [[package]] name = "rustls-webpki" @@ -4262,9 +3999,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.17" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" +checksum = "0e819f2bc632f285be6d7cd36e25940d45b2391dd6d9b939e79de557f7014248" [[package]] name = "ruzstd" @@ -4438,17 +4175,6 @@ dependencies = [ "windows-sys 0.59.0", ] -[[package]] -name = "schnellru" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9a8ef13a93c54d20580de1e5c413e624e53121d42fc7e2c11d10ef7f8b02367" -dependencies = [ - "ahash", - "cfg-if", - "hashbrown 0.13.2", -] - [[package]] name = "schnorrkel" version = "0.11.4" @@ -4563,7 +4289,6 @@ dependencies = [ "core-foundation", "core-foundation-sys", "libc", - "num-bigint", "security-framework-sys", ] @@ -4589,6 +4314,12 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f638d531eccd6e23b980caf34876660d38e265409d8e99b397ab71eb3612fad0" +[[package]] +name = "send_wrapper" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" + [[package]] name = "serde" version = "1.0.210" @@ -4641,15 +4372,6 @@ dependencies = [ "serde", ] -[[package]] -name = "serde_spanned" -version = "0.6.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1" -dependencies = [ - "serde", -] - [[package]] name = "serde_urlencoded" version = "0.7.1" @@ -4770,12 +4492,6 @@ version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" -[[package]] -name = "simple-mermaid" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "620a1d43d70e142b1d46a929af51d44f383db9c7a2ec122de2cd992ccfcf3c18" - [[package]] name = "siphasher" version = "1.0.1" @@ -4797,23 +4513,6 @@ version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" -[[package]] -name = "smol" -version = "2.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a33bd3e260892199c3ccfc487c88b2da2265080acb316cd920da72fdfd7c599f" -dependencies = [ - "async-channel", - "async-executor", - "async-fs", - "async-io", - "async-lock", - "async-net", - "async-process", - "blocking", - "futures-lite", -] - [[package]] name = "smoldot" version = "0.16.0" @@ -4862,7 +4561,7 @@ dependencies = [ "siphasher", "slab", "smallvec", - "soketto 0.7.1", + "soketto", "twox-hash", "wasmi", "x25519-dalek", @@ -4892,7 +4591,6 @@ dependencies = [ "log", "lru", "no-std-net", - "parking_lot", "pin-project", "rand", "rand_chacha", @@ -4900,7 +4598,6 @@ dependencies = [ "serde_json", "siphasher", "slab", - "smol", "smoldot", "zeroize", ] @@ -4930,50 +4627,6 @@ dependencies = [ "sha-1", ] -[[package]] -name = "soketto" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37468c595637c10857701c990f93a40ce0e357cedb0953d1c26c8d8027f9bb53" -dependencies = [ - "base64 0.22.1", - "bytes", - "futures", - "httparse", - "log", - "rand", - "sha1", -] - -[[package]] -name = "sp-application-crypto" -version = "38.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d8133012faa5f75b2f0b1619d9f720c1424ac477152c143e5f7dbde2fe1a958" -dependencies = [ - "parity-scale-codec", - "scale-info", - "serde", - "sp-core", - "sp-io", -] - -[[package]] -name = "sp-arithmetic" -version = "26.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46d0d0a4c591c421d3231ddd5e27d828618c24456d51445d21a1f79fcee97c23" -dependencies = [ - "docify", - "integer-sqrt", - "num-traits", - "parity-scale-codec", - "scale-info", - "serde", - "sp-std", - "static_assertions", -] - [[package]] name = "sp-core" version = "34.0.0" @@ -5057,83 +4710,6 @@ dependencies = [ "sp-storage", ] -[[package]] -name = "sp-io" -version = "38.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59ef7eb561bb4839cc8424ce58c5ea236cbcca83f26fcc0426d8decfe8aa97d4" -dependencies = [ - "bytes", - "docify", - "ed25519-dalek", - "libsecp256k1", - "log", - "parity-scale-codec", - "polkavm-derive", - "rustversion", - "secp256k1 0.28.2", - "sp-core", - "sp-crypto-hashing", - "sp-externalities", - "sp-keystore", - "sp-runtime-interface", - "sp-state-machine", - "sp-tracing", - "sp-trie", - "tracing", - "tracing-core", -] - -[[package]] -name = "sp-keystore" -version = "0.40.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0248b4d784cb4a01472276928977121fa39d977a5bb24793b6b15e64b046df42" -dependencies = [ - "parity-scale-codec", - "parking_lot", - "sp-core", - "sp-externalities", -] - -[[package]] -name = "sp-panic-handler" -version = "13.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8f5a17a0a11de029a8b811cb6e8b32ce7e02183cc04a3e965c383246798c416" -dependencies = [ - "backtrace", - "lazy_static", - "regex", -] - -[[package]] -name = "sp-runtime" -version = "39.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "806f19b91dc283145e0580353e6ae68e4e634c0915d3dd950f57547b90b55a8c" -dependencies = [ - "docify", - "either", - "hash256-std-hasher", - "impl-trait-for-tuples", - "log", - "num-traits", - "parity-scale-codec", - "paste", - "rand", - "scale-info", - "serde", - "simple-mermaid", - "sp-application-crypto", - "sp-arithmetic", - "sp-core", - "sp-io", - "sp-std", - "sp-weights", - "tracing", -] - [[package]] name = "sp-runtime-interface" version = "28.0.0" @@ -5168,27 +4744,6 @@ dependencies = [ "syn 2.0.79", ] -[[package]] -name = "sp-state-machine" -version = "0.43.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "930104d6ae882626e8880d9b1578da9300655d337a3ffb45e130c608b6c89660" -dependencies = [ - "hash-db", - "log", - "parity-scale-codec", - "parking_lot", - "rand", - "smallvec", - "sp-core", - "sp-externalities", - "sp-panic-handler", - "sp-trie", - "thiserror", - "tracing", - "trie-db", -] - [[package]] name = "sp-std" version = "14.0.0" @@ -5220,30 +4775,6 @@ dependencies = [ "tracing-subscriber", ] -[[package]] -name = "sp-trie" -version = "37.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6282aef9f4b6ecd95a67a45bcdb67a71f4a4155c09a53c10add4ffe823db18cd" -dependencies = [ - "ahash", - "hash-db", - "lazy_static", - "memory-db", - "nohash-hasher", - "parity-scale-codec", - "parking_lot", - "rand", - "scale-info", - "schnellru", - "sp-core", - "sp-externalities", - "thiserror", - "tracing", - "trie-db", - "trie-root", -] - [[package]] name = "sp-wasm-interface" version = "21.0.1" @@ -5256,21 +4787,6 @@ dependencies = [ "parity-scale-codec", ] -[[package]] -name = "sp-weights" -version = "31.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93cdaf72a1dad537bbb130ba4d47307ebe5170405280ed1aa31fa712718a400e" -dependencies = [ - "bounded-collections", - "parity-scale-codec", - "scale-info", - "serde", - "smallvec", - "sp-arithmetic", - "sp-debug-derive", -] - [[package]] name = "spin" version = "0.9.8" @@ -5292,9 +4808,9 @@ dependencies = [ [[package]] name = "ss58-registry" -version = "1.50.0" +version = "1.51.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43fce22ed1df64d04b262351c8f9d5c6da4f76f79f25ad15529792f893fad25d" +checksum = "19409f13998e55816d1c728395af0b52ec066206341d939e22e7766df9b494b8" dependencies = [ "Inflector", "num-format", @@ -5381,6 +4897,7 @@ dependencies = [ "either", "frame-metadata 16.0.0", "futures", + "getrandom", "hex", "impl-serde", "instant", @@ -5401,7 +4918,6 @@ dependencies = [ "subxt-macro", "subxt-metadata", "thiserror", - "tokio-util", "tracing", "url", ] @@ -5413,6 +4929,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d703dca0905cc5272d7cc27a4ac5f37dcaae7671acc7fef0200057cc8c317786" dependencies = [ "frame-metadata 16.0.0", + "getrandom", "heck 0.5.0", "hex", "jsonrpsee 0.22.5", @@ -5461,14 +4978,24 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d9406fbdb9548c110803cb8afa750f8b911d51eefdf95474b11319591d225d9" dependencies = [ "futures", + "futures-timer", "futures-util", + "getrandom", + "instant", + "js-sys", + "pin-project", + "send_wrapper 0.6.0", "serde", "serde_json", + "smoldot", "smoldot-light", "thiserror", "tokio", "tokio-stream", "tracing", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", ] [[package]] @@ -5576,15 +5103,6 @@ dependencies = [ "windows-sys 0.59.0", ] -[[package]] -name = "termcolor" -version = "1.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" -dependencies = [ - "winapi-util", -] - [[package]] name = "thiserror" version = "1.0.64" @@ -5736,7 +5254,7 @@ version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" dependencies = [ - "rustls 0.23.14", + "rustls 0.23.15", "rustls-pki-types", "tokio", ] @@ -5779,26 +5297,11 @@ dependencies = [ "tokio", ] -[[package]] -name = "toml" -version = "0.8.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e" -dependencies = [ - "serde", - "serde_spanned", - "toml_datetime", - "toml_edit 0.22.22", -] - [[package]] name = "toml_datetime" version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" -dependencies = [ - "serde", -] [[package]] name = "toml_edit" @@ -5818,8 +5321,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" dependencies = [ "indexmap", - "serde", - "serde_spanned", "toml_datetime", "winnow 0.6.20", ] @@ -5914,27 +5415,6 @@ dependencies = [ "tracing-log", ] -[[package]] -name = "trie-db" -version = "0.29.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c992b4f40c234a074d48a757efeabb1a6be88af84c0c23f7ca158950cb0ae7f" -dependencies = [ - "hash-db", - "log", - "rustc-hex", - "smallvec", -] - -[[package]] -name = "trie-root" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4ed310ef5ab98f5fa467900ed906cb9232dd5376597e00fd4cba2a449d06c0b" -dependencies = [ - "hash-db", -] - [[package]] name = "try-lock" version = "0.2.5" @@ -6081,9 +5561,9 @@ checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "w3f-bls" -version = "0.1.4" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c5da5fa2c6afa2c9158eaa7cd9aee249765eb32b5fb0c63ad8b9e79336a47ec" +checksum = "6a48c48447120a85b0bdb897ba9426a7aa15b4229498a2e19103e8c9368dd4b2" dependencies = [ "ark-bls12-377", "ark-bls12-381", @@ -6130,9 +5610,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.93" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a82edfc16a6c469f5f44dc7b571814045d60404b55a0ee849f9bcfa2e63dd9b5" +checksum = "128d1e363af62632b8eb57219c8fd7877144af57558fb2ef0368d0087bddeb2e" dependencies = [ "cfg-if", "once_cell", @@ -6141,9 +5621,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.93" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9de396da306523044d3302746f1208fa71d7532227f15e347e2d93e4145dd77b" +checksum = "cb6dd4d3ca0ddffd1dd1c9c04f94b868c37ff5fac97c30b97cff2d74fce3a358" dependencies = [ "bumpalo", "log", @@ -6156,9 +5636,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.43" +version = "0.4.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61e9300f63a621e96ed275155c108eb6f843b6a26d053f122ab69724559dc8ed" +checksum = "cc7ec4f8827a71586374db3e87abdb5a2bb3a15afed140221307c3ec06b1f63b" dependencies = [ "cfg-if", "js-sys", @@ -6168,9 +5648,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.93" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "585c4c91a46b072c92e908d99cb1dcdf95c5218eeb6f3bf1efa991ee7a68cccf" +checksum = "e79384be7f8f5a9dd5d7167216f022090cf1f9ec128e6e6a482a2cb5c5422c56" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -6178,9 +5658,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.93" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afc340c74d9005395cf9dd098506f7f44e38f2b4a21c6aaacf9a105ea5e1e836" +checksum = "26c6ab57572f7a24a4985830b120de1594465e5d500f24afe89e16b4e833ef68" dependencies = [ "proc-macro2", "quote", @@ -6191,15 +5671,15 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.93" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c62a0a307cb4a311d3a07867860911ca130c3494e8c2719593806c08bc5d0484" +checksum = "65fc09f10666a9f147042251e0dda9c18f166ff7de300607007e96bdebc1068d" [[package]] name = "wasm-bindgen-test" -version = "0.3.43" +version = "0.3.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68497a05fb21143a08a7d24fc81763384a3072ee43c44e86aad1744d6adef9d9" +checksum = "d381749acb0943d357dcbd8f0b100640679883fcdeeef04def49daf8d33a5426" dependencies = [ "console_error_panic_hook", "js-sys", @@ -6212,9 +5692,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-test-macro" -version = "0.3.43" +version = "0.3.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b8220be1fa9e4c889b30fd207d4906657e7e90b12e0e6b0c8b8d8709f5de021" +checksum = "c97b2ef2c8d627381e51c071c2ab328eac606d3f69dd82bcbca20a9e389d95f0" dependencies = [ "proc-macro2", "quote", @@ -6263,9 +5743,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.70" +version = "0.3.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26fdeaafd9bd129f65e7c031593c24d62186301e0c72c8978fa1678be7d532c0" +checksum = "f6488b90108c040df0fe62fa815cbdee25124641df01814dd7282749234c6112" dependencies = [ "js-sys", "wasm-bindgen", diff --git a/packages/kos-sdk/Cargo.toml b/packages/kos-sdk/Cargo.toml index 5c49012..acc261f 100644 --- a/packages/kos-sdk/Cargo.toml +++ b/packages/kos-sdk/Cargo.toml @@ -56,9 +56,7 @@ pbjson-types = { workspace = true } prost = { workspace = true } base64 = "0.22.1" sp-core = "34.0.0" -sp-runtime = "39.0.0" -subxt = "0.37.0" -scale-value = "0.16.3" +subxt = { version = "0.37.0", default-features = false, features = ["web"] } parity-scale-codec = "3.6.12" [dev-dependencies] From f9ae54833d7e42057bf7bc7903212f5ef19a5042 Mon Sep 17 00:00:00 2001 From: Pedro Camboim Date: Thu, 24 Oct 2024 16:05:51 -0300 Subject: [PATCH 20/25] fix: tx signature --- packages/kos-sdk/src/chains/polkadot/mod.rs | 152 ++++++------------ .../src/chains/polkadot/transaction.rs | 82 ++++++++-- 2 files changed, 122 insertions(+), 112 deletions(-) diff --git a/packages/kos-sdk/src/chains/polkadot/mod.rs b/packages/kos-sdk/src/chains/polkadot/mod.rs index dc3009b..9a7b529 100644 --- a/packages/kos-sdk/src/chains/polkadot/mod.rs +++ b/packages/kos-sdk/src/chains/polkadot/mod.rs @@ -17,11 +17,13 @@ use kos_types::hash::Hash; use kos_types::number::BigNumber; use parity_scale_codec::{Decode, Encode}; +use crate::chains::polkadot::transaction::ExtrinsicPayload; use serde::Deserializer; use sp_core::crypto::Ss58Codec; use sp_core::{sr25519, Pair}; use std::str::FromStr; use subxt::client::{OfflineClientT, RuntimeVersion}; +use subxt::config::Header; use subxt::dynamic::Value; use subxt::ext::frame_metadata::RuntimeMetadataPrefixed; use subxt::ext::scale_decode::DecodeAsType; @@ -151,63 +153,27 @@ impl DOT { pub fn sign(tx: Transaction, keypair: &KeyPair) -> Result { match tx.data { Some(TransactionRaw::Polkadot(dot_tx)) => { - let mut new_tx = dot_tx.clone(); - - let metadata_bytes = { - let bytes = std::fs::read("./artifacts/dot-klever-node.scale").unwrap(); - Metadata::decode(&mut &*bytes).unwrap() - } - .encode(); - - let metadata = format!("0x{}", hex::encode(metadata_bytes)); - - let spec_version = - u32::from_str_radix(new_tx.spec_version.strip_prefix("0x").unwrap(), 16) - .unwrap(); - - let transaction_version = - u32::from_str_radix(new_tx.transaction_version.strip_prefix("0x").unwrap(), 16) - .unwrap(); - - let client = DOT::get_client( - &*new_tx.genesis_hash.strip_prefix("0x").unwrap(), - spec_version, - transaction_version, - &metadata, - )?; - - let method = - hex::decode(&mut new_tx.method.strip_prefix("0x").unwrap().to_string())?; - let method_bytes = &mut &*method; - - let payload = { - let call_data = DOT::decode_call_data(method_bytes, client.clone())?; - subxt::dynamic::tx(call_data.pallet, call_data.call, call_data.args) - }; - - let partial_tx = client - .tx() - .create_partial_signed_offline(&payload, Default::default()) - .unwrap(); - - let digest = partial_tx.signer_payload(); - - let signature = DOT::sign_digest(&digest, keypair)?; + let new_tx = dot_tx.clone(); - new_tx.signature = Some(hex::encode(signature.clone())); + let payload = ExtrinsicPayload::from_transaction(&new_tx); - let address = - MultiAddress::Id(address::Address::from_keypair(&keypair).to_account_id32()); - let signature = MultiSignature::Sr25519(<[u8; 64]>::try_from(signature).unwrap()); + let signature = { + let full_unsigned_payload_scale_bytes = payload.to_bytes(); - let submittable = partial_tx.sign_with_address_and_signature(&address, &signature); + // If payload is longer than 256 bytes, we hash it and sign the hash instead: + if full_unsigned_payload_scale_bytes.len() > 256 { + DOT::sign_digest(&*DOT::hash(&full_unsigned_payload_scale_bytes)?, keypair)? + } else { + DOT::sign_digest(&full_unsigned_payload_scale_bytes, keypair)? + } + }; let result = Transaction { chain: tx.chain, sender: tx.sender, - hash: Hash::from_vec(submittable.hash().encode())?, + hash: Hash::from_vec(vec![0u8; 32])?, data: Some(TransactionRaw::Polkadot(new_tx)), - signature: Some(hex::encode(signature.encode())), + signature: Some(hex::encode([[1u8].to_vec(), signature].concat())), }; Ok(result) @@ -347,7 +313,7 @@ impl DOT { } pub fn tx_from_json(raw: &str) -> Result { - let mut tx = DOTTransaction::from_bytes(raw.as_bytes().to_vec()).unwrap(); + let mut tx = DOTTransaction::from_json(raw)?; Ok(Transaction { chain: crate::chain::Chain::DOT, @@ -435,6 +401,7 @@ impl DOT { #[cfg(test)] mod tests { + use crate::chains::polkadot::transaction::{ExtrinsicPayload, Transaction}; use crate::chains::DOT; use parity_scale_codec::{Decode, Encode}; use serde_json::json; @@ -512,18 +479,6 @@ mod tests { ); } - #[test] - fn test_decode_tx() { - let raw = "eyJzcGVjVmVyc2lvbiI6IjB4MDAwZjRkZjgiLCJ0cmFuc2FjdGlvblZlcnNpb24iOiIweDAwMDAwMDFhIiwiYWRkcmVzcyI6IjE0bTVvcUxFRFhNZXlkeVU4NEUyZ01NeWtLVHQ3OFFCUUZXTmpLaG5kbTFiZ0NhWCIsImFzc2V0SWQiOiJudWxsIiwiYmxvY2tIYXNoIjoiMHg2MGY4ZmFhNmI1ZGQwZmViYjE3OGU0MmViNjQ0NzE5MzU3YWU1NTViNGNiYWVmZGIzMjIwNGFmMzc5ZjRkNTg2IiwiYmxvY2tOdW1iZXIiOiIweDAxNThmYWE2IiwiZXJhIjoiMHg2NTAyIiwiZ2VuZXNpc0hhc2giOiIweDkxYjE3MWJiMTU4ZTJkMzg0OGZhMjNhOWYxYzI1MTgyZmI4ZTIwMzEzYjJjMWViNDkyMTlkYTdhNzBjZTkwYzMiLCJtZXRhZGF0YUhhc2giOiJudWxsIiwibWV0aG9kIjoiMHgwNTAzMDBhNjUzYWU3OTY2NTU2NWJhN2ZjNjgyYzM4NWIzYzAzOGMyMDkxYWI2ZDYwNTMzNTViOTk1MGExMDhhYzQ4YjA2MDAiLCJtb2RlIjowLCJub25jZSI6IjB4MDAwMDAwMDAiLCJzaWduZWRFeHRlbnNpb25zIjpbIkNoZWNrTm9uWmVyb1NlbmRlciIsIkNoZWNrU3BlY1ZlcnNpb24iLCJDaGVja1R4VmVyc2lvbiIsIkNoZWNrR2VuZXNpcyIsIkNoZWNrTW9ydGFsaXR5IiwiQ2hlY2tOb25jZSIsIkNoZWNrV2VpZ2h0IiwiQ2hhcmdlVHJhbnNhY3Rpb25QYXltZW50IiwiUHJldmFsaWRhdGVBdHRlc3RzIiwiQ2hlY2tNZXRhZGF0YUhhc2giXSwidGlwIjoiMHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsInZlcnNpb24iOjQsIndpdGhTaWduZWRUcmFuc2FjdGlvbiI6dHJ1ZX0="; - - let tx = DOT::tx_from_json(raw).unwrap(); - - assert_eq!( - tx.sender, - "14m5oqLEDXMeydyU84E2gMMykKTt78QBQFWNjKhndm1bgCaX" - ); - } - #[test] fn decode_extrinsic() { let ext = "0x040503002534454d30f8a028e42654d6b535e0651d1d026ddf115cef59ae1dd71bae074e910100ee2a21000000fb4d0f001a00000091b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c391b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c300"; @@ -590,47 +545,44 @@ mod tests { } #[test] - fn test_sign_extrinsic() { - let signer_payload = json!({ - "specVersion": "0x000f4df8", - "transactionVersion": "0x0000001a", - "address": "14m5oqLEDXMeydyU84E2gMMykKTt78QBQFWNjKhndm1bgCaX", - "assetId": null, - "blockHash": "0x60f8faa6b5dd0febb178e42eb644719357ae555b4cbaefdb32204af379f4d586", - "blockNumber": "0x0158faa6", - "era": "0x6502", - "genesisHash": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "metadataHash": null, - "method": "0x050300a653ae79665565ba7fc682c385b3c038c2091ab6d6053355b9950a108ac48b0600", - "mode": 0, - "nonce": "0x00000000", - "signedExtensions": [ - "CheckNonZeroSender", - "CheckSpecVersion", - "CheckTxVersion", - "CheckGenesis", - "CheckMortality", - "CheckNonce", - "CheckWeight", - "ChargeTransactionPayment", - "PrevalidateAttests", - "CheckMetadataHash" - ], - "tip": "0x00000000000000000000000000000000", - "version": 4, - "withSignedTransaction": true, - }); + fn sign_extrinsic_payload() { + let json_data = r#" + { + "specVersion": "0x000f4dfb", + "transactionVersion": "0x0000001a", + "address": "14m5oqLEDXMeydyU84E2gMMykKTt78QBQFWNjKhndm1bgCaX", + "assetId": null, + "blockHash": "0x5e8ad2dc466562ea590e2e05b81ee851ca55bce18caf0407f4bb2daf8e0beaf9", + "blockNumber": "0x01608e70", + "era": "0x0503", + "genesisHash": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "metadataHash": null, + "method": "0x050300a653ae79665565ba7fc682c385b3c038c2091ab6d6053355b9950a108ac48b0600", + "mode": 0, + "nonce": "0x00000000", + "signedExtensions": [ + "CheckNonZeroSender", + "CheckSpecVersion", + "CheckTxVersion", + "CheckGenesis", + "CheckMortality", + "CheckNonce", + "CheckWeight", + "ChargeTransactionPayment", + "PrevalidateAttests", + "CheckMetadataHash" + ], + "tip": "0x00000000000000000000000000000000", + "version": 4, + "withSignedTransaction": true +}"#; + + let transaction = DOT::tx_from_json(json_data).unwrap(); let kp = DOT::keypair_from_mnemonic("abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about", "//0", None).unwrap(); - let tx = DOT::tx_from_json(&signer_payload.to_string()).unwrap(); - let signed = DOT::sign(tx, &kp) - .map_err(|e| { - println!("{:?}", e); - e - }) - .unwrap(); + let signed = DOT::sign(transaction, &kp).unwrap(); - println!("{:?}", signed.get_raw().unwrap()); + println!("signature {:?}", signed.get_signature().unwrap()); } } diff --git a/packages/kos-sdk/src/chains/polkadot/transaction.rs b/packages/kos-sdk/src/chains/polkadot/transaction.rs index 13d16c1..cc8432d 100644 --- a/packages/kos-sdk/src/chains/polkadot/transaction.rs +++ b/packages/kos-sdk/src/chains/polkadot/transaction.rs @@ -1,4 +1,6 @@ +use parity_scale_codec::{Compact, Decode, Encode}; use serde::{Deserialize, Serialize}; +use subxt::utils::Era; #[derive(Serialize, Deserialize, Clone, Debug)] pub struct Transaction { @@ -31,19 +33,75 @@ pub struct Transaction { } impl Transaction { - pub fn from_bytes(bytes: Vec) -> Result { - let tx = match serde_json::from_slice(&bytes) { - Ok(tx) => tx, - Err(e) => return Err(format!("Error deserializing transaction: {}", e)), - }; - Ok(tx) + pub fn from_json(json_data: &str) -> Result { + serde_json::from_str(json_data) } +} + +pub struct ExtrinsicPayload { + method: Vec, + nonce: u32, + tip: u128, + spec_version: u32, + transaction_version: u32, + genesis_hash: [u8; 32], + block_hash: [u8; 32], + era: Era, +} + +impl ExtrinsicPayload { + pub fn from_transaction(tx: &Transaction) -> Self { + let spec_version = + u32::from_str_radix(tx.spec_version.trim_start_matches("0x"), 16).unwrap(); + let transaction_version = + u32::from_str_radix(tx.transaction_version.trim_start_matches("0x"), 16).unwrap(); + let nonce = u32::from_str_radix(tx.nonce.trim_start_matches("0x"), 16).unwrap(); + let tip = u128::from_str_radix(tx.tip.trim_start_matches("0x"), 16).unwrap(); + let genesis_hash = hex::decode(tx.genesis_hash.trim_start_matches("0x")) + .unwrap() + .try_into() + .unwrap(); + let block_hash = hex::decode(tx.block_hash.trim_start_matches("0x")) + .unwrap() + .try_into() + .unwrap(); + + let era = Era::decode( + &mut hex::decode(tx.era.trim_start_matches("0x")) + .unwrap() + .as_slice(), + ) + .unwrap(); + + let method = hex::decode(tx.method.trim_start_matches("0x")).unwrap(); + + ExtrinsicPayload { + method, + nonce, + tip, + spec_version, + transaction_version, + genesis_hash, + block_hash, + era, + } + } + + pub fn to_bytes(&self) -> Vec { + let mut bytes = Vec::new(); + bytes.extend(self.method.clone()); + bytes.extend(&self.era.encode()); + bytes.extend(Compact(self.nonce).encode()); + bytes.extend(Compact(self.tip).encode()); + // Encode mode + bytes.extend(&[0]); + bytes.extend(&self.spec_version.encode()); + bytes.extend(&self.transaction_version.encode()); + bytes.extend(&self.genesis_hash); + bytes.extend(&self.block_hash); + // Encode metadata_hash + bytes.extend(&[0]); - pub fn to_bytes(&self) -> Result, String> { - let bytes = match serde_json::to_vec(&self) { - Ok(bytes) => bytes, - Err(e) => return Err(format!("Error serializing transaction: {}", e)), - }; - Ok(bytes) + bytes } } From e1e9332828190e862443ece495cedcb0dced7f9f Mon Sep 17 00:00:00 2001 From: Pedro Camboim Date: Fri, 25 Oct 2024 10:07:01 -0300 Subject: [PATCH 21/25] chore: adjust methods --- packages/kos-crypto/src/sr25519.rs | 9 +- packages/kos-sdk/Cargo.toml | 1 - .../kos-sdk/src/chains/polkadot/address.rs | 6 - packages/kos-sdk/src/chains/polkadot/mod.rs | 349 ++---------------- .../kos-sdk/src/chains/polkadot/requests.rs | 29 -- .../src/chains/polkadot/transaction.rs | 59 +-- packages/kos-sdk/src/models.rs | 5 +- 7 files changed, 71 insertions(+), 387 deletions(-) delete mode 100644 packages/kos-sdk/src/chains/polkadot/requests.rs diff --git a/packages/kos-crypto/src/sr25519.rs b/packages/kos-crypto/src/sr25519.rs index 514f720..5bb8c06 100644 --- a/packages/kos-crypto/src/sr25519.rs +++ b/packages/kos-crypto/src/sr25519.rs @@ -69,10 +69,8 @@ impl Sr25519KeyPair { // Convert mnemonic to seed let seed = format!("{}{}", m.to_phrase(), path); - println!("Seed: {}", seed); - // Derive keypair based on the provided path and seed - let keypair = sr25519::Pair::from_string(&seed, password).unwrap(); + let keypair = Pair::from_string(&seed, password).unwrap(); Ok(Self { keypair }) } @@ -90,10 +88,9 @@ impl Sr25519KeyPair { } pub fn verify_digest(&self, message: &[u8], signature: &[u8], public_key: &[u8]) -> bool { - let public = sp_core::sr25519::Public::from_raw(<[u8; 32]>::try_from(public_key).unwrap()); + let public = sr25519::Public::from_raw(<[u8; 32]>::try_from(public_key).unwrap()); - let signature = - sp_core::sr25519::Signature::from_raw(<[u8; 64]>::try_from(signature).unwrap()); + let signature = sr25519::Signature::from_raw(<[u8; 64]>::try_from(signature).unwrap()); sr25519::Pair::verify(&signature, message, &public) } diff --git a/packages/kos-sdk/Cargo.toml b/packages/kos-sdk/Cargo.toml index 8532b31..932cc83 100644 --- a/packages/kos-sdk/Cargo.toml +++ b/packages/kos-sdk/Cargo.toml @@ -58,7 +58,6 @@ pbjson-types = { workspace = true } prost = { workspace = true } base64 = "0.22.1" sp-core = "34.0.0" -subxt = { version = "0.37.0", default-features = false, features = ["web"] } parity-scale-codec = "3.6.12" [dev-dependencies] diff --git a/packages/kos-sdk/src/chains/polkadot/address.rs b/packages/kos-sdk/src/chains/polkadot/address.rs index d0f9363..cd065b5 100644 --- a/packages/kos-sdk/src/chains/polkadot/address.rs +++ b/packages/kos-sdk/src/chains/polkadot/address.rs @@ -2,7 +2,6 @@ use kos_crypto::keypair::KeyPair; use sp_core::crypto::{Ss58AddressFormat, Ss58Codec}; use sp_core::sr25519::Public; use std::str::FromStr; -use subxt::utils::AccountId32; use wasm_bindgen::prelude::wasm_bindgen; const ADDRESS_LEN: usize = 32; @@ -44,11 +43,6 @@ impl Address { pub fn to_hex_address(self) -> String { hex::encode(self.0) } - - /// to AccountId32 - pub fn to_account_id32(&self) -> AccountId32 { - AccountId32::from(self.0) - } } impl FromStr for Address { diff --git a/packages/kos-sdk/src/chains/polkadot/mod.rs b/packages/kos-sdk/src/chains/polkadot/mod.rs index 9a7b529..51506c0 100644 --- a/packages/kos-sdk/src/chains/polkadot/mod.rs +++ b/packages/kos-sdk/src/chains/polkadot/mod.rs @@ -1,5 +1,4 @@ mod address; -mod requests; pub mod transaction; use crate::chains::DOTTransaction; @@ -22,14 +21,6 @@ use serde::Deserializer; use sp_core::crypto::Ss58Codec; use sp_core::{sr25519, Pair}; use std::str::FromStr; -use subxt::client::{OfflineClientT, RuntimeVersion}; -use subxt::config::Header; -use subxt::dynamic::Value; -use subxt::ext::frame_metadata::RuntimeMetadataPrefixed; -use subxt::ext::scale_decode::DecodeAsType; -use subxt::tx::{Payload, SubmittableExtrinsic}; -use subxt::utils::{AccountId32, MultiAddress, MultiSignature, H256}; -use subxt::{Metadata, OfflineClient, PolkadotConfig}; use wasm_bindgen::prelude::*; #[derive(Debug, Copy, Clone)] @@ -45,20 +36,6 @@ pub const BASE_CHAIN: BaseChain = BaseChain { chain_code: 21, }; -#[wasm_bindgen] -pub struct CallData { - pallet: String, - call: String, - args: Vec, -} - -fn to_bytes(hex_str: &str) -> Vec { - let hex_str = hex_str - .strip_prefix("0x") - .expect("0x should prefix hex encoded bytes"); - hex::decode(hex_str).expect("valid bytes from hex") -} - #[wasm_bindgen] impl DOT { #[wasm_bindgen(js_name = "baseChain")] @@ -207,11 +184,11 @@ impl DOT { #[wasm_bindgen(js_name = "verifyMessageSignature")] /// Verify Message signature pub fn verify_message_signature( - message: &[u8], - signature: &[u8], - address: &str, + _message: &[u8], + _signature: &[u8], + _address: &str, ) -> Result { - Ok(true) + todo!() } #[wasm_bindgen(js_name = "getBalance")] @@ -226,94 +203,14 @@ impl DOT { #[wasm_bindgen(js_name = "validateAddress")] pub fn validate_address( addr: &str, - _option: Option, + _option: Option, ) -> Result { let address = address::Address::from_str(addr); Ok(address.is_ok()) } - pub fn decode_extrinsic( - genesis_hash: &str, - spec_version: u32, - transaction_version: u32, - tx: &str, - ) -> Result { - let metadata_bytes = { - let bytes = std::fs::read("./artifacts/dot-klever-node.scale").unwrap(); - Metadata::decode(&mut &*bytes).unwrap() - } - .encode(); - - let metadata = format!("0x{}", hex::encode(metadata_bytes)); - let client = DOT::get_client(genesis_hash, spec_version, transaction_version, &metadata)?; - let data = &mut &*to_bytes(tx); - - if data.is_empty() { - return Err(Error::InvalidTransaction("empty transaction".to_string())); - } - - let is_signed = data[0] & 0b1000_0000 != 0; - let version = data[0] & 0b0111_1111; - *data = &data[1..]; - - if version != 4 { - return Err(Error::InvalidTransaction(format!( - "unsupported extrinsic version: {}", - version - ))); - } - - let call_data = DOT::decode_call_data(data, client)?; - - Ok(call_data) - } - - fn decode_call_data( - data: &mut &[u8], - client: OfflineClient, - ) -> Result { - let metadata = client.metadata(); - - // Pluck out the u8's representing the pallet and call enum next. - if data.len() < 2 { - return Err(Error::InvalidTransaction( - "expected at least 2 more bytes for the pallet/call index".to_string(), - )); - } - let pallet_index = u8::decode(data).unwrap(); - let call_index = u8::decode(data).unwrap(); - - let pallet_name = metadata.pallet_by_index(pallet_index).ok_or_else(|| { - Error::InvalidTransaction(format!("pallet index {} out of bounds", pallet_index)) - })?; - - let call_variant = pallet_name.call_variant_by_index(call_index).unwrap(); - println!( - "pallet name: {}, call name: {}", - pallet_name.name(), - call_variant.name - ); - - let arguments = call_variant - .clone() - .fields - .iter() - .map(|field| { - let id = field.ty.id; - Value::decode_as_type(data, id.into(), metadata.types()) - }) - .collect::, _>>() - .unwrap(); - - Ok(CallData { - pallet: pallet_name.name().to_string(), - call: call_variant.name.to_string(), - args: arguments, - }) - } - pub fn tx_from_json(raw: &str) -> Result { - let mut tx = DOTTransaction::from_json(raw)?; + let tx = DOTTransaction::from_json(raw)?; Ok(Transaction { chain: crate::chain::Chain::DOT, @@ -325,89 +222,9 @@ impl DOT { } } -impl DOT { - pub fn get_client( - genesis_hash: &str, - spec_version: u32, - transaction_version: u32, - raw_metadata: &str, - ) -> Result, Error> { - let _genesis_hash = { - let bytes = hex::decode(genesis_hash)?; - H256::from_slice(&bytes) - }; - - let _runtime_version = RuntimeVersion { - spec_version, - transaction_version, - }; - - let binding = to_bytes(raw_metadata); - let bytes = binding.as_slice(); - - let prefixed_metadata = RuntimeMetadataPrefixed::decode(&mut &*bytes).unwrap(); - - let metadata = Metadata::try_from(prefixed_metadata).unwrap(); - - Ok(OfflineClient::::new( - _genesis_hash, - _runtime_version, - metadata, - )) - } - - pub fn get_submittable_extrinsic( - tx: DOTTransaction, - ) -> Result>, Error> { - let metadata_bytes = { - let bytes = std::fs::read("./artifacts/dot-klever-node.scale").unwrap(); - Metadata::decode(&mut &*bytes).unwrap() - } - .encode(); - - let metadata = format!("0x{}", hex::encode(metadata_bytes)); - - let client = DOT::get_client( - &*tx.genesis_hash.strip_prefix("0x").unwrap(), - u32::from_str_radix(tx.spec_version.strip_prefix("0x").unwrap(), 16).unwrap(), - u32::from_str_radix(tx.transaction_version.strip_prefix("0x").unwrap(), 16).unwrap(), - &metadata, - ) - .unwrap(); - - let method = hex::decode(&mut tx.method.strip_prefix("0x").unwrap().to_string()).unwrap(); - let method_bytes = &mut &*method; - - let payload = { - let call_data = DOT::decode_call_data(method_bytes, client.clone()).unwrap(); - subxt::dynamic::tx(call_data.pallet, call_data.call, call_data.args) - }; - - let partial_tx = client - .tx() - .create_partial_signed_offline(&payload, Default::default()) - .unwrap(); - - let signature = Some(hex::decode(tx.signature.unwrap()).unwrap()).unwrap(); - - let address = MultiAddress::Id(AccountId32::from_str(&tx.address).unwrap()); - let signature = MultiSignature::Sr25519(<[u8; 64]>::try_from(signature).unwrap()); - - let submittable = partial_tx.sign_with_address_and_signature(&address, &signature); - - Ok(submittable) - } -} - #[cfg(test)] mod tests { - use crate::chains::polkadot::transaction::{ExtrinsicPayload, Transaction}; use crate::chains::DOT; - use parity_scale_codec::{Decode, Encode}; - use serde_json::json; - use subxt::client::OfflineClientT; - use subxt::utils::{MultiAddress, MultiSignature, H256}; - use subxt::Metadata; #[test] fn test_keypair_from_mnemonic() { @@ -453,129 +270,37 @@ mod tests { } #[test] - fn test_get_client() { - let metadata_bytes = { - let bytes = std::fs::read("./artifacts/dot-klever-node.scale").unwrap(); - Metadata::decode(&mut &*bytes).unwrap() - } - .encode(); - - let metadata = format!("0x{}", hex::encode(metadata_bytes)); - - let client = DOT::get_client( - "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - 1002007, - 26, - &metadata, - ) - .unwrap(); - - assert_eq!( - client.genesis_hash(), - H256::from(&[ - 145, 177, 113, 187, 21, 142, 45, 56, 72, 250, 35, 169, 241, 194, 81, 130, 251, 142, - 32, 49, 59, 44, 30, 180, 146, 25, 218, 122, 112, 206, 144, 195 - ]) - ); - } - - #[test] - fn decode_extrinsic() { - let ext = "0x040503002534454d30f8a028e42654d6b535e0651d1d026ddf115cef59ae1dd71bae074e910100ee2a21000000fb4d0f001a00000091b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c391b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c300"; - - let decoded = DOT::decode_extrinsic( - "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - 1003000, - 26, - ext, - ) - .unwrap(); - - for arg in decoded.args { - println!("{:?}", arg); - } - } - - #[test] - fn test_decode_call_data() { - let metadata_bytes = { - let bytes = std::fs::read("./artifacts/dot-klever-node.scale").unwrap(); - Metadata::decode(&mut &*bytes).unwrap() - } - .encode(); - - let metadata = format!("0x{}", hex::encode(metadata_bytes)); - - let client = DOT::get_client( - "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - 1003000, - 26, - &metadata, - ) - .unwrap(); - - let call_data_hex = - "0x0503002534454d30f8a028e42654d6b535e0651d1d026ddf115cef59ae1dd71bae074e910100322121000000f84d0f001a00000091b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c391b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c300"; - - let call_data_bytes = hex::decode(call_data_hex.strip_prefix("0x").unwrap()).unwrap(); - - let call_data_cursor = &mut &*call_data_bytes; - - let decoded = DOT::decode_call_data(call_data_cursor, client.clone()).unwrap(); - - let payload = subxt::dynamic::tx(decoded.pallet, decoded.call, decoded.args); - - let partial_tx = client - .tx() - .create_partial_signed_offline(&payload, Default::default()) - .unwrap(); - - let signer_payload = partial_tx.signer_payload(); - - let kp = DOT::keypair_from_bytes(&[0u8; 32]).unwrap(); - let signature = DOT::sign_digest(&signer_payload, &kp).unwrap(); - - let address = - MultiAddress::Id(super::address::Address::from_keypair(&kp).to_account_id32()); - let signature = MultiSignature::Sr25519(<[u8; 64]>::try_from(signature).unwrap()); - - let submittable = partial_tx.sign_with_address_and_signature(&address, &signature); - - println!("{:?}", hex::encode(submittable.encoded())); - } - - #[test] - fn sign_extrinsic_payload() { + fn test_sign_extrinsic_payload() { let json_data = r#" - { - "specVersion": "0x000f4dfb", - "transactionVersion": "0x0000001a", - "address": "14m5oqLEDXMeydyU84E2gMMykKTt78QBQFWNjKhndm1bgCaX", - "assetId": null, - "blockHash": "0x5e8ad2dc466562ea590e2e05b81ee851ca55bce18caf0407f4bb2daf8e0beaf9", - "blockNumber": "0x01608e70", - "era": "0x0503", - "genesisHash": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "metadataHash": null, - "method": "0x050300a653ae79665565ba7fc682c385b3c038c2091ab6d6053355b9950a108ac48b0600", - "mode": 0, - "nonce": "0x00000000", - "signedExtensions": [ - "CheckNonZeroSender", - "CheckSpecVersion", - "CheckTxVersion", - "CheckGenesis", - "CheckMortality", - "CheckNonce", - "CheckWeight", - "ChargeTransactionPayment", - "PrevalidateAttests", - "CheckMetadataHash" - ], - "tip": "0x00000000000000000000000000000000", - "version": 4, - "withSignedTransaction": true -}"#; + { + "specVersion": "0x000f4dfb", + "transactionVersion": "0x0000001a", + "address": "14m5oqLEDXMeydyU84E2gMMykKTt78QBQFWNjKhndm1bgCaX", + "assetId": null, + "blockHash": "0x5e8ad2dc466562ea590e2e05b81ee851ca55bce18caf0407f4bb2daf8e0beaf9", + "blockNumber": "0x01608e70", + "era": "0x0503", + "genesisHash": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "metadataHash": null, + "method": "0x050300a653ae79665565ba7fc682c385b3c038c2091ab6d6053355b9950a108ac48b0600", + "mode": 0, + "nonce": "0x00000000", + "signedExtensions": [ + "CheckNonZeroSender", + "CheckSpecVersion", + "CheckTxVersion", + "CheckGenesis", + "CheckMortality", + "CheckNonce", + "CheckWeight", + "ChargeTransactionPayment", + "PrevalidateAttests", + "CheckMetadataHash" + ], + "tip": "0x00000000000000000000000000000000", + "version": 4, + "withSignedTransaction": true + }"#; let transaction = DOT::tx_from_json(json_data).unwrap(); @@ -583,6 +308,6 @@ mod tests { let signed = DOT::sign(transaction, &kp).unwrap(); - println!("signature {:?}", signed.get_signature().unwrap()); + assert_eq!(signed.get_signature().unwrap().len(), 130); } } diff --git a/packages/kos-sdk/src/chains/polkadot/requests.rs b/packages/kos-sdk/src/chains/polkadot/requests.rs deleted file mode 100644 index 54a4b43..0000000 --- a/packages/kos-sdk/src/chains/polkadot/requests.rs +++ /dev/null @@ -1,29 +0,0 @@ -use crate::utils; -use kos_types::error::Error; -use serde_json::Value; - -async fn create_call(url: String, method: &str, params: Value) -> Result { - let data = serde_json::json!({ - "method": method, - "params": params, - "id": 1, - "jsonrpc": "2.0" - }) - .to_string() - .as_bytes() - .to_vec(); - utils::http_post::(url, &data) - .await - .map_err(|e| e.into()) -} - -pub async fn get_metadata(url: &str) -> Result { - let result = create_call(url.to_string(), "state_getMetadata", Value::Array(vec![])).await?; - match result.get("result") { - Some(metadata) => match metadata.as_str() { - Some(metadata) => Ok(metadata.to_string()), - None => Err(Error::InvalidTransaction("metadata not found".to_string())), - }, - None => Err(Error::InvalidTransaction("metadata not found".to_string())), - } -} diff --git a/packages/kos-sdk/src/chains/polkadot/transaction.rs b/packages/kos-sdk/src/chains/polkadot/transaction.rs index cc8432d..582b483 100644 --- a/packages/kos-sdk/src/chains/polkadot/transaction.rs +++ b/packages/kos-sdk/src/chains/polkadot/transaction.rs @@ -1,6 +1,5 @@ use parity_scale_codec::{Compact, Decode, Encode}; use serde::{Deserialize, Serialize}; -use subxt::utils::Era; #[derive(Serialize, Deserialize, Clone, Debug)] pub struct Transaction { @@ -42,47 +41,39 @@ pub struct ExtrinsicPayload { method: Vec, nonce: u32, tip: u128, + mode: u8, spec_version: u32, transaction_version: u32, genesis_hash: [u8; 32], block_hash: [u8; 32], - era: Era, + metadata_hash: Vec, + era: Vec, } impl ExtrinsicPayload { pub fn from_transaction(tx: &Transaction) -> Self { - let spec_version = - u32::from_str_radix(tx.spec_version.trim_start_matches("0x"), 16).unwrap(); - let transaction_version = - u32::from_str_radix(tx.transaction_version.trim_start_matches("0x"), 16).unwrap(); - let nonce = u32::from_str_radix(tx.nonce.trim_start_matches("0x"), 16).unwrap(); - let tip = u128::from_str_radix(tx.tip.trim_start_matches("0x"), 16).unwrap(); - let genesis_hash = hex::decode(tx.genesis_hash.trim_start_matches("0x")) - .unwrap() - .try_into() - .unwrap(); - let block_hash = hex::decode(tx.block_hash.trim_start_matches("0x")) - .unwrap() - .try_into() - .unwrap(); - - let era = Era::decode( - &mut hex::decode(tx.era.trim_start_matches("0x")) - .unwrap() - .as_slice(), - ) - .unwrap(); - + let spec_version = parse_hex_to_u32(&tx.spec_version); + let transaction_version = parse_hex_to_u32(&tx.transaction_version); + let nonce = parse_hex_to_u32(&tx.nonce); + let tip = parse_hex_to_u128(&tx.tip); + let mode = tx.mode.try_into().unwrap(); + let genesis_hash = parse_hex(&tx.genesis_hash).try_into().unwrap(); + let block_hash = parse_hex(&tx.block_hash).try_into().unwrap(); + let metadata_hash = + parse_hex(&tx.metadata_hash.clone().unwrap_or_else(|| "00".to_string())); + let era = parse_hex(&tx.era.clone()); let method = hex::decode(tx.method.trim_start_matches("0x")).unwrap(); ExtrinsicPayload { method, nonce, tip, + mode, spec_version, transaction_version, genesis_hash, block_hash, + metadata_hash, era, } } @@ -90,18 +81,28 @@ impl ExtrinsicPayload { pub fn to_bytes(&self) -> Vec { let mut bytes = Vec::new(); bytes.extend(self.method.clone()); - bytes.extend(&self.era.encode()); + bytes.extend(&self.era.clone()); bytes.extend(Compact(self.nonce).encode()); bytes.extend(Compact(self.tip).encode()); - // Encode mode - bytes.extend(&[0]); + bytes.extend(&self.mode.encode()); bytes.extend(&self.spec_version.encode()); bytes.extend(&self.transaction_version.encode()); bytes.extend(&self.genesis_hash); bytes.extend(&self.block_hash); - // Encode metadata_hash - bytes.extend(&[0]); + bytes.extend(&self.metadata_hash); bytes } } + +fn parse_hex_to_u32(hex_str: &str) -> u32 { + u32::from_str_radix(hex_str.trim_start_matches("0x"), 16).unwrap() +} + +fn parse_hex_to_u128(hex_str: &str) -> u128 { + u128::from_str_radix(hex_str.trim_start_matches("0x"), 16).unwrap() +} + +fn parse_hex(hex_str: &String) -> Vec { + hex::decode(hex_str.trim_start_matches("0x")).unwrap() +} diff --git a/packages/kos-sdk/src/models.rs b/packages/kos-sdk/src/models.rs index 84029f3..8c6860b 100644 --- a/packages/kos-sdk/src/models.rs +++ b/packages/kos-sdk/src/models.rs @@ -184,10 +184,7 @@ impl Transaction { serde_json::to_string(&data.tx).map_err(|e| e.into()) } TransactionRaw::Polkadot(data) => { - let extrinsic = DOT::get_submittable_extrinsic(data.clone()) - .expect("Error getting submittable extrinsic"); - - Ok(hex::encode(extrinsic.encoded())) + todo!() } }, None => Err(Error::InvalidTransaction("no data found".to_string())), From 2aff9d725c2952517a8e79b7500e17f636f1bfe7 Mon Sep 17 00:00:00 2001 From: Pedro Camboim Date: Sat, 26 Oct 2024 15:50:28 -0300 Subject: [PATCH 22/25] feat: KSM --- packages/kos-sdk/src/chain.rs | 2 +- packages/kos-sdk/src/chains/kusama/mod.rs | 266 ++++++++++++++++++ packages/kos-sdk/src/chains/mod.rs | 3 + .../kos-sdk/src/chains/polkadot/address.rs | 12 +- packages/kos-sdk/src/chains/polkadot/mod.rs | 5 +- .../src/chains/polkadot/transaction.rs | 2 +- packages/kos-sdk/src/models.rs | 9 +- 7 files changed, 285 insertions(+), 14 deletions(-) create mode 100644 packages/kos-sdk/src/chains/kusama/mod.rs diff --git a/packages/kos-sdk/src/chain.rs b/packages/kos-sdk/src/chain.rs index 3b99bc3..2e49908 100644 --- a/packages/kos-sdk/src/chain.rs +++ b/packages/kos-sdk/src/chain.rs @@ -155,7 +155,7 @@ macro_rules! createChains { } } -createChains!(NONE, KLV, TRX, BTC, ETH, MATIC, DOT); +createChains!(NONE, KLV, TRX, BTC, ETH, MATIC, DOT, KSM); // pub enum Chain { // NONE, // 0 diff --git a/packages/kos-sdk/src/chains/kusama/mod.rs b/packages/kos-sdk/src/chains/kusama/mod.rs new file mode 100644 index 0000000..022db61 --- /dev/null +++ b/packages/kos-sdk/src/chains/kusama/mod.rs @@ -0,0 +1,266 @@ +use super::{polkadot, DOTTransaction}; + +use crate::chain::{BaseChain, Chain}; +use crate::models::{self, BroadcastResult, TransactionRaw}; +use crate::models::{PathOptions, SendOptions}; + +use kos_crypto::keypair::KeyPair; +use kos_types::error::Error; +use kos_types::number::BigNumber; + +use super::DOT; +use serde::Serialize; +use wasm_bindgen::prelude::*; + +#[derive(Debug, Copy, Clone)] +#[wasm_bindgen] +pub struct KSM {} + +const SS58_PREFIX: u16 = 2; + +pub const BASE_CHAIN: BaseChain = BaseChain { + name: "Kusama", + symbol: "KSM", + precision: 12, + chain_code: 27, +}; + +#[derive(Serialize, Clone, Debug, PartialEq)] +pub struct Transaction { + pub ksm: DOTTransaction, +} + +fn convert_transaction(tx: models::Transaction) -> Result { + match tx.data.clone() { + Some(TransactionRaw::Kusama(tx_kusama)) => { + Ok(tx.new_data(Chain::KSM, TransactionRaw::Polkadot(tx_kusama.ksm))) + } + Some(TransactionRaw::Polkadot(tx_ksm)) => Ok(tx.new_data( + Chain::KSM, + TransactionRaw::Kusama(Transaction { ksm: tx_ksm }), + )), + _ => Err(Error::InvalidTransaction( + "Invalid Transaction Type".to_string(), + )), + } +} + +#[wasm_bindgen] +impl KSM { + #[wasm_bindgen(js_name = "baseChain")] + pub fn base_chain() -> BaseChain { + BASE_CHAIN + } + + #[wasm_bindgen(js_name = "random")] + pub fn random() -> Result { + DOT::random() + } + + #[wasm_bindgen(js_name = "keypairFromBytes")] + pub fn keypair_from_bytes(private_key: &[u8]) -> Result { + DOT::keypair_from_bytes(private_key) + } + + #[wasm_bindgen(js_name = "keypairFromMnemonic")] + pub fn keypair_from_mnemonic( + mnemonic: &str, + path: &str, + password: Option, + ) -> Result { + DOT::keypair_from_mnemonic(mnemonic, path, password) + } + + #[wasm_bindgen(js_name = "getAddressFromKeyPair")] + pub fn get_address_from_keypair(kp: &KeyPair) -> Result { + Ok(polkadot::address::Address::from_keypair(kp).to_ss58check(SS58_PREFIX)) + } + + #[wasm_bindgen(js_name = "getPath")] + pub fn get_path(options: &PathOptions) -> Result { + DOT::get_path(options) + } + + #[wasm_bindgen(js_name = "signDigest")] + /// Sign digest data with the private key. + pub fn sign_digest(digest: &[u8], keypair: &KeyPair) -> Result, Error> { + DOT::sign_digest(digest, keypair) + } + + #[wasm_bindgen(js_name = "verifyDigest")] + /// Verify Message signature + pub fn verify_digest(digest: &[u8], signature: &[u8], address: &str) -> Result { + DOT::verify_digest(digest, signature, address) + } + + #[wasm_bindgen(js_name = "sign")] + /// Hash and Sign data with the private key. + pub fn sign(tx: models::Transaction, keypair: &KeyPair) -> Result { + let result = DOT::sign(convert_transaction(tx)?, keypair); + + // convert back to polygon tx enum + convert_transaction(result?) + } + + #[wasm_bindgen(js_name = "hash")] + /// hash digest + pub fn hash(message: &[u8]) -> Result, Error> { + DOT::hash(message) + } + + #[wasm_bindgen(js_name = "messageHash")] + /// Append prefix and hash the message + pub fn message_hash(message: &[u8]) -> Result, Error> { + DOT::message_hash(message) + } + + #[wasm_bindgen(js_name = "signMessage")] + /// Sign Message with the private key. + pub fn sign_message(message: &[u8], keypair: &KeyPair) -> Result, Error> { + DOT::sign_message(message, keypair) + } + + #[wasm_bindgen(js_name = "verifyMessageSignature")] + /// Verify Message signature + pub fn verify_message_signature( + message: &[u8], + signature: &[u8], + address: &str, + ) -> Result { + DOT::verify_message_signature(message, signature, address) + } + + #[wasm_bindgen(js_name = "getBalance")] + pub async fn get_balance( + address: &str, + token: Option, + node_url: Option, + ) -> Result { + let node = node_url.unwrap_or_else(|| crate::utils::get_node_url("KSM")); + DOT::get_balance(address, token, Some(node)).await + } + + pub async fn send( + _sender: String, + _receiver: String, + _amount: BigNumber, + _options: Option, + _node_url: Option, + ) -> Result { + todo!() + } + + #[wasm_bindgen(js_name = "broadcast")] + pub async fn broadcast( + tx: models::Transaction, + node_url: Option, + ) -> Result { + let node = node_url.unwrap_or_else(|| crate::utils::get_node_url("KSM")); + let result = DOT::broadcast(tx, Some(node)).await?; + Ok(BroadcastResult::new(convert_transaction(result.tx)?)) + } + + #[wasm_bindgen(js_name = "validateAddress")] + pub fn validate_address( + address: &str, + option: Option, + ) -> Result { + DOT::validate_address(address, option) + } + + pub fn tx_from_json(raw: &str) -> Result { + let transaction = DOT::tx_from_json(raw)?; + Ok(convert_transaction(transaction)?) + } +} +#[cfg(test)] +mod tests { + use crate::chain::Chain; + use crate::chains::KSM; + + #[test] + fn test_keypair_from_mnemonic() { + let mnemonic = "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about"; + let path = KSM::get_path(&super::PathOptions { + index: 0, + is_legacy: None, + }) + .unwrap(); + let kp = KSM::keypair_from_mnemonic(mnemonic, &path, None).unwrap(); + let address = KSM::get_address_from_keypair(&kp).unwrap(); + assert_eq!(address, "Etp93jqLeBY8TczVXDJQoWNvMoY8VBSXoYNBYou5ghUBeC1"); + } + + #[test] + fn test_get_path() { + let path = KSM::get_path(&super::PathOptions { + index: 1, + is_legacy: None, + }) + .unwrap(); + + assert_eq!(path, "//0"); + } + + #[test] + fn test_validate_address() { + let address = "Etp93jqLeBY8TczVXDJQoWNvMoY8VBSXoYNBYou5ghUBeC1"; + let valid = KSM::validate_address(address, None).unwrap(); + assert_eq!(valid, true); + } + + #[test] + fn test_sign_digest() { + let kp = KSM::keypair_from_bytes(&[0u8; 32]).unwrap(); + let digest = String::from("hello").into_bytes(); + let signature = KSM::sign_digest(&digest, &kp).unwrap(); + assert_eq!(signature.len(), 64); + + let address = KSM::get_address_from_keypair(&kp).unwrap(); + let valid = KSM::verify_digest(&digest, &signature, &address).unwrap(); + assert_eq!(valid, true); + } + + #[test] + fn test_sign_extrinsic_payload() { + let json_data = r#" + { + "specVersion": "0x000f4dfb", + "transactionVersion": "0x0000001a", + "address": "Etp93jqLeBY8TczVXDJQoWNvMoY8VBSXoYNBYou5ghUBeC1", + "assetId": null, + "blockHash": "0x5e8ad2dc466562ea590e2e05b81ee851ca55bce18caf0407f4bb2daf8e0beaf9", + "blockNumber": "0x01608e70", + "era": "0x0503", + "genesisHash": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "metadataHash": null, + "method": "0x050300a653ae79665565ba7fc682c385b3c038c2091ab6d6053355b9950a108ac48b0600", + "mode": 0, + "nonce": "0x00000000", + "signedExtensions": [ + "CheckNonZeroSender", + "CheckSpecVersion", + "CheckTxVersion", + "CheckGenesis", + "CheckMortality", + "CheckNonce", + "CheckWeight", + "ChargeTransactionPayment", + "PrevalidateAttests", + "CheckMetadataHash" + ], + "tip": "0x00000000000000000000000000000000", + "version": 4, + "withSignedTransaction": true + }"#; + + let transaction = KSM::tx_from_json(json_data).unwrap(); + + let kp = KSM::keypair_from_mnemonic("abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about", "//0", None).unwrap(); + + let signed = KSM::sign(transaction, &kp).unwrap(); + + assert_eq!(signed.get_signature().unwrap().len(), 130); + assert_eq!(signed.chain, Chain::KSM); + } +} diff --git a/packages/kos-sdk/src/chains/mod.rs b/packages/kos-sdk/src/chains/mod.rs index b3977f6..9d27886 100644 --- a/packages/kos-sdk/src/chains/mod.rs +++ b/packages/kos-sdk/src/chains/mod.rs @@ -3,6 +3,7 @@ mod default; mod ethereum; mod evm20; mod klever; +mod kusama; mod polkadot; mod polygon; mod tron; @@ -11,11 +12,13 @@ pub use self::bitcoin::BTC; pub use default::NONE; pub use ethereum::ETH; pub use klever::KLV; +pub use kusama::KSM; pub use polkadot::DOT; pub use polygon::MATIC; pub use tron::TRX; pub use ethereum::transaction::Transaction as ETHTransaction; +pub use kusama::Transaction as KSMTransaction; pub use polkadot::transaction::Transaction as DOTTransaction; pub use polygon::Transaction as MATICTransaction; diff --git a/packages/kos-sdk/src/chains/polkadot/address.rs b/packages/kos-sdk/src/chains/polkadot/address.rs index cd065b5..3e8c4a4 100644 --- a/packages/kos-sdk/src/chains/polkadot/address.rs +++ b/packages/kos-sdk/src/chains/polkadot/address.rs @@ -43,6 +43,10 @@ impl Address { pub fn to_hex_address(self) -> String { hex::encode(self.0) } + + pub fn to_ss58check(self, custom: u16) -> String { + Public::from_raw(self.0).to_ss58check_with_version(Ss58AddressFormat::custom(custom)) + } } impl FromStr for Address { @@ -61,11 +65,3 @@ impl FromStr for Address { Ok(Address(raw)) } } - -impl ::std::fmt::Display for Address { - fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { - let st = Public::from_raw(self.0).to_ss58check_with_version(Ss58AddressFormat::custom(0)); - - st.fmt(f) - } -} diff --git a/packages/kos-sdk/src/chains/polkadot/mod.rs b/packages/kos-sdk/src/chains/polkadot/mod.rs index 51506c0..77cbdfb 100644 --- a/packages/kos-sdk/src/chains/polkadot/mod.rs +++ b/packages/kos-sdk/src/chains/polkadot/mod.rs @@ -1,4 +1,4 @@ -mod address; +pub(crate) mod address; pub mod transaction; use crate::chains::DOTTransaction; @@ -28,6 +28,7 @@ use wasm_bindgen::prelude::*; pub struct DOT {} pub const SIGN_PREFIX: &[u8; 26] = b"\x19Polkadot Signed Message:\n"; +const SS58_PREFIX: u16 = 0; pub const BASE_CHAIN: BaseChain = BaseChain { name: "Polkadot", @@ -76,7 +77,7 @@ impl DOT { #[wasm_bindgen(js_name = "getAddressFromKeyPair")] pub fn get_address_from_keypair(kp: &KeyPair) -> Result { - Ok(address::Address::from_keypair(kp).to_string()) + Ok(address::Address::from_keypair(kp).to_ss58check(SS58_PREFIX)) } #[wasm_bindgen(js_name = "getPath")] diff --git a/packages/kos-sdk/src/chains/polkadot/transaction.rs b/packages/kos-sdk/src/chains/polkadot/transaction.rs index 582b483..068e77f 100644 --- a/packages/kos-sdk/src/chains/polkadot/transaction.rs +++ b/packages/kos-sdk/src/chains/polkadot/transaction.rs @@ -1,7 +1,7 @@ use parity_scale_codec::{Compact, Decode, Encode}; use serde::{Deserialize, Serialize}; -#[derive(Serialize, Deserialize, Clone, Debug)] +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] pub struct Transaction { #[serde(rename = "specVersion")] pub spec_version: String, diff --git a/packages/kos-sdk/src/models.rs b/packages/kos-sdk/src/models.rs index 8c6860b..29a9976 100644 --- a/packages/kos-sdk/src/models.rs +++ b/packages/kos-sdk/src/models.rs @@ -4,7 +4,7 @@ use serde::{Deserialize, Serialize}; use wasm_bindgen::prelude::*; use crate::chain::Chain; -use crate::chains::{DOT, ETH, KLV, TRX}; +use crate::chains::{DOT, ETH, KLV, KSM, TRX}; #[derive(Debug, Clone, Serialize)] #[wasm_bindgen] pub struct BroadcastResult { @@ -70,7 +70,8 @@ kos_types::enum_thing! { Ethereum(super::chains::ETHTransaction), Polygon(super::chains::MATICTransaction), Bitcoin(super::chains::BTCTransaction), - Polkadot(super::chains::DOTTransaction) + Polkadot(super::chains::DOTTransaction), + Kusama(super::chains::KSMTransaction) } } @@ -186,6 +187,9 @@ impl Transaction { TransactionRaw::Polkadot(data) => { todo!() } + TransactionRaw::Kusama(data) => { + todo!() + } }, None => Err(Error::InvalidTransaction("no data found".to_string())), } @@ -214,6 +218,7 @@ impl Transaction { Chain::TRX => TRX::tx_from_raw(data), Chain::ETH => ETH::tx_from_json(data), Chain::DOT => DOT::tx_from_json(data), + Chain::KSM => KSM::tx_from_json(data), Chain::MATIC => Err(Error::InvalidTransaction( "MATIC chain not implemented".to_string(), )), From 86e366940047177e75cc06d55b2d5509ebc71562 Mon Sep 17 00:00:00 2001 From: Pedro Camboim Date: Mon, 28 Oct 2024 12:54:26 -0300 Subject: [PATCH 23/25] feat: substrate pk --- packages/kos-crypto/src/keypair.rs | 9 +++------ packages/kos-crypto/src/sr25519.rs | 4 ++++ 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/packages/kos-crypto/src/keypair.rs b/packages/kos-crypto/src/keypair.rs index 7f6eb9c..32b5e6a 100644 --- a/packages/kos-crypto/src/keypair.rs +++ b/packages/kos-crypto/src/keypair.rs @@ -21,7 +21,7 @@ pub struct KeyPair { key_type: KeyType, ed25519: Option, secp256k1: Option, - sr25519: Option + sr25519: Option, } #[wasm_bindgen] @@ -67,8 +67,6 @@ impl KeyPair { } } - - impl KeyPair { pub fn sign_digest(&self, digest: &[u8]) -> Vec { match self.key_type { @@ -103,7 +101,6 @@ impl KeyPair { .as_ref() .unwrap() .verify_digest(digest, signature, public_key), - } } } @@ -128,7 +125,7 @@ impl KeyPair { KeyType::Secp256k1 | KeyType::Secp256k1Compressed => { self.secp256k1.as_ref().unwrap().public_key() } - KeyType::Sr25519 => self.sr25519.as_ref().unwrap().public_key() + KeyType::Sr25519 => self.sr25519.as_ref().unwrap().public_key(), } } @@ -144,7 +141,7 @@ impl KeyPair { KeyType::Secp256k1 | KeyType::Secp256k1Compressed => { self.secp256k1.as_ref().unwrap().secret_key() } - KeyType::Sr25519 => Vec::new() // Find a way to get secret key + KeyType::Sr25519 => self.sr25519.as_ref().unwrap().secret_key(), } } diff --git a/packages/kos-crypto/src/sr25519.rs b/packages/kos-crypto/src/sr25519.rs index 5bb8c06..2d9c940 100644 --- a/packages/kos-crypto/src/sr25519.rs +++ b/packages/kos-crypto/src/sr25519.rs @@ -80,6 +80,10 @@ impl Sr25519KeyPair { pub fn public_key(&self) -> Vec { self.keypair.public().0.to_vec() } + + pub fn secret_key(&self) -> Vec { + self.keypair.to_raw_vec() + } } impl Sr25519KeyPair { From 943b2a555c2673bcfe1b6a880c67a64103f43bed Mon Sep 17 00:00:00 2001 From: Pedro Camboim Date: Mon, 28 Oct 2024 15:47:16 -0300 Subject: [PATCH 24/25] feat: AVAIL --- .../kos-sdk/artifacts/dot-klever-node.scale | Bin 411737 -> 0 bytes .../kos-sdk/artifacts/ksm-klever-node.scale | Bin 357959 -> 0 bytes packages/kos-sdk/src/chain.rs | 2 +- packages/kos-sdk/src/chains/avail/mod.rs | 251 ++++++++++++++++++ packages/kos-sdk/src/chains/kusama/mod.rs | 47 ++-- packages/kos-sdk/src/chains/mod.rs | 5 +- packages/kos-sdk/src/chains/polkadot/mod.rs | 12 +- .../src/chains/polkadot/transaction.rs | 17 +- packages/kos-sdk/src/models.rs | 11 +- 9 files changed, 296 insertions(+), 49 deletions(-) delete mode 100644 packages/kos-sdk/artifacts/dot-klever-node.scale delete mode 100644 packages/kos-sdk/artifacts/ksm-klever-node.scale create mode 100644 packages/kos-sdk/src/chains/avail/mod.rs diff --git a/packages/kos-sdk/artifacts/dot-klever-node.scale b/packages/kos-sdk/artifacts/dot-klever-node.scale deleted file mode 100644 index 69f5f4454d82e360716a11f760bd396728aa1870..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 411737 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ℑ>auJ48l&wAYT!11bWJdK4MM@1cM|&r1L;G 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

+wBlx#a4@>Y;R++D(;tmwfGi117^Qj?%oht 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 diff --git a/packages/kos-sdk/artifacts/ksm-klever-node.scale b/packages/kos-sdk/artifacts/ksm-klever-node.scale deleted file mode 100644 index 3bc087749ec3f46c95440054e055faafa5ebd76b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 357959 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

Pco3Ka*aaC`}&) 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%0D)*=4?fnWb7l7eWQfQni>}D4k8O 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 BaseChain { + BASE_CHAIN + } + + #[wasm_bindgen(js_name = "random")] + pub fn random() -> Result { + DOT::random() + } + + #[wasm_bindgen(js_name = "keypairFromBytes")] + pub fn keypair_from_bytes(private_key: &[u8]) -> Result { + DOT::keypair_from_bytes(private_key) + } + + #[wasm_bindgen(js_name = "keypairFromMnemonic")] + pub fn keypair_from_mnemonic( + mnemonic: &str, + path: &str, + password: Option, + ) -> Result { + DOT::keypair_from_mnemonic(mnemonic, path, password) + } + + #[wasm_bindgen(js_name = "getAddressFromKeyPair")] + pub fn get_address_from_keypair(kp: &KeyPair) -> Result { + Ok(polkadot::address::Address::from_keypair(kp).to_ss58check(SS58_PREFIX)) + } + + #[wasm_bindgen(js_name = "getPath")] + pub fn get_path(options: &PathOptions) -> Result { + DOT::get_path(options) + } + + #[wasm_bindgen(js_name = "signDigest")] + /// Sign digest data with the private key. + pub fn sign_digest(digest: &[u8], keypair: &KeyPair) -> Result, Error> { + DOT::sign_digest(digest, keypair) + } + + #[wasm_bindgen(js_name = "verifyDigest")] + /// Verify Message signature + pub fn verify_digest(digest: &[u8], signature: &[u8], address: &str) -> Result { + DOT::verify_digest(digest, signature, address) + } + + #[wasm_bindgen(js_name = "sign")] + /// Hash and Sign data with the private key. + pub fn sign(tx: models::Transaction, keypair: &KeyPair) -> Result { + DOT::sign(tx, keypair) + } + + #[wasm_bindgen(js_name = "hash")] + /// hash digest + pub fn hash(message: &[u8]) -> Result, Error> { + DOT::hash(message) + } + + #[wasm_bindgen(js_name = "messageHash")] + /// Append prefix and hash the message + pub fn message_hash(message: &[u8]) -> Result, Error> { + DOT::message_hash(message) + } + + #[wasm_bindgen(js_name = "signMessage")] + /// Sign Message with the private key. + pub fn sign_message(message: &[u8], keypair: &KeyPair) -> Result, Error> { + DOT::sign_message(message, keypair) + } + + #[wasm_bindgen(js_name = "verifyMessageSignature")] + /// Verify Message signature + pub fn verify_message_signature( + message: &[u8], + signature: &[u8], + address: &str, + ) -> Result { + DOT::verify_message_signature(message, signature, address) + } + + #[wasm_bindgen(js_name = "getBalance")] + pub async fn get_balance( + address: &str, + token: Option, + node_url: Option, + ) -> Result { + let node = node_url.unwrap_or_else(|| crate::utils::get_node_url("AVAIL")); + DOT::get_balance(address, token, Some(node)).await + } + + pub async fn send( + _sender: String, + _receiver: String, + _amount: BigNumber, + _options: Option, + _node_url: Option, + ) -> Result { + todo!() + } + + #[wasm_bindgen(js_name = "broadcast")] + pub async fn broadcast( + tx: models::Transaction, + node_url: Option, + ) -> Result { + let node = node_url.unwrap_or_else(|| crate::utils::get_node_url("AVAIL")); + let result = DOT::broadcast(tx, Some(node)).await?; + Ok(BroadcastResult::new(result.tx)) + } + + #[wasm_bindgen(js_name = "validateAddress")] + pub fn validate_address( + address: &str, + option: Option, + ) -> Result { + DOT::validate_address(address, option) + } + + pub fn tx_from_json(raw: &str) -> Result { + let tx = SubstrateTransaction::from_json(raw)?; + + Ok(Transaction { + chain: crate::chain::Chain::AVAIL, + sender: tx.clone().address, + hash: Hash::default(), + data: Some(TransactionRaw::Substrate(tx.clone())), + signature: tx.signature, + }) + } +} +#[cfg(test)] +mod tests { + use crate::chain::Chain; + use crate::chains::AVAIL; + + #[test] + fn test_keypair_from_mnemonic() { + let mnemonic = "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about"; + let path = AVAIL::get_path(&super::PathOptions { + index: 0, + is_legacy: None, + }) + .unwrap(); + let kp = AVAIL::keypair_from_mnemonic(mnemonic, &path, None).unwrap(); + let address = AVAIL::get_address_from_keypair(&kp).unwrap(); + assert_eq!(address, "5EPCUjPxiHAcNooYipQFWr9NmmXJKpNG5RhcntXwbtUySrgH"); + } + + #[test] + fn test_get_path() { + let path = AVAIL::get_path(&super::PathOptions { + index: 1, + is_legacy: None, + }) + .unwrap(); + + assert_eq!(path, "//0"); + } + + #[test] + fn test_validate_address() { + let address = "Etp93jqLeBY8TczVXDJQoWNvMoY8VBSXoYNBYou5ghUBeC1"; + let valid = AVAIL::validate_address(address, None).unwrap(); + assert_eq!(valid, true); + } + + #[test] + fn test_sign_digest() { + let kp = AVAIL::keypair_from_bytes(&[0u8; 32]).unwrap(); + let digest = String::from("hello").into_bytes(); + let signature = AVAIL::sign_digest(&digest, &kp).unwrap(); + assert_eq!(signature.len(), 64); + + let address = AVAIL::get_address_from_keypair(&kp).unwrap(); + let valid = AVAIL::verify_digest(&digest, &signature, &address).unwrap(); + assert_eq!(valid, true); + } + + #[test] + fn test_sign_extrinsic_payload() { + let json_data = r#" + { + "appId": 0, + "specVersion": "0x00000027", + "transactionVersion": "0x00000001", + "address": "5H9CP2zS3ufvZLcxc3rB2Go6ujr6c1FyE4AjFk7E19vCZyK4", + "assetId": null, + "blockHash": "0xc2ff0603e37eb015106f24a4f6eb3fbca3aef2e21cd19c654f88853337bf4d7d", + "blockNumber": "0x0007ab6d", + "era": "0xd400", + "genesisHash": "0xb91746b45e0346cc2f815a520b9c6cb4d5c0902af848db0a80f85932d2e8276a", + "metadataHash": null, + "method": "0x060300e09a2af0eb7f9adcc71e489111ff691cf8430e6f1d86969156a822218217411500", + "mode": 0, + "nonce": "0x00000010", + "signedExtensions": [ + "CheckNonZeroSender", + "CheckSpecVersion", + "CheckTxVersion", + "CheckGenesis", + "CheckMortality", + "CheckNonce", + "CheckWeight", + "ChargeTransactionPayment", + "CheckAppId" + ], + "tip": "0x00000000000000000000000000000000", + "version": 4, + "withSignedTransaction": true + }"#; + + let transaction = AVAIL::tx_from_json(json_data).unwrap(); + + let kp = AVAIL::keypair_from_mnemonic("abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about", "//0", None).unwrap(); + + let signed = AVAIL::sign(transaction, &kp).unwrap(); + + assert_eq!(signed.get_signature().unwrap().len(), 130); + assert_eq!(signed.chain, Chain::AVAIL); + } +} diff --git a/packages/kos-sdk/src/chains/kusama/mod.rs b/packages/kos-sdk/src/chains/kusama/mod.rs index 022db61..1b289d8 100644 --- a/packages/kos-sdk/src/chains/kusama/mod.rs +++ b/packages/kos-sdk/src/chains/kusama/mod.rs @@ -1,7 +1,7 @@ -use super::{polkadot, DOTTransaction}; +use super::{polkadot, SubstrateTransaction}; -use crate::chain::{BaseChain, Chain}; -use crate::models::{self, BroadcastResult, TransactionRaw}; +use crate::chain::BaseChain; +use crate::models::{self, BroadcastResult, Transaction, TransactionRaw}; use crate::models::{PathOptions, SendOptions}; use kos_crypto::keypair::KeyPair; @@ -9,6 +9,7 @@ use kos_types::error::Error; use kos_types::number::BigNumber; use super::DOT; +use kos_types::hash::Hash; use serde::Serialize; use wasm_bindgen::prelude::*; @@ -25,26 +26,6 @@ pub const BASE_CHAIN: BaseChain = BaseChain { chain_code: 27, }; -#[derive(Serialize, Clone, Debug, PartialEq)] -pub struct Transaction { - pub ksm: DOTTransaction, -} - -fn convert_transaction(tx: models::Transaction) -> Result { - match tx.data.clone() { - Some(TransactionRaw::Kusama(tx_kusama)) => { - Ok(tx.new_data(Chain::KSM, TransactionRaw::Polkadot(tx_kusama.ksm))) - } - Some(TransactionRaw::Polkadot(tx_ksm)) => Ok(tx.new_data( - Chain::KSM, - TransactionRaw::Kusama(Transaction { ksm: tx_ksm }), - )), - _ => Err(Error::InvalidTransaction( - "Invalid Transaction Type".to_string(), - )), - } -} - #[wasm_bindgen] impl KSM { #[wasm_bindgen(js_name = "baseChain")] @@ -96,10 +77,7 @@ impl KSM { #[wasm_bindgen(js_name = "sign")] /// Hash and Sign data with the private key. pub fn sign(tx: models::Transaction, keypair: &KeyPair) -> Result { - let result = DOT::sign(convert_transaction(tx)?, keypair); - - // convert back to polygon tx enum - convert_transaction(result?) + DOT::sign(tx, keypair) } #[wasm_bindgen(js_name = "hash")] @@ -157,7 +135,7 @@ impl KSM { ) -> Result { let node = node_url.unwrap_or_else(|| crate::utils::get_node_url("KSM")); let result = DOT::broadcast(tx, Some(node)).await?; - Ok(BroadcastResult::new(convert_transaction(result.tx)?)) + Ok(BroadcastResult::new(result.tx)) } #[wasm_bindgen(js_name = "validateAddress")] @@ -168,9 +146,16 @@ impl KSM { DOT::validate_address(address, option) } - pub fn tx_from_json(raw: &str) -> Result { - let transaction = DOT::tx_from_json(raw)?; - Ok(convert_transaction(transaction)?) + pub fn tx_from_json(raw: &str) -> Result { + let tx = SubstrateTransaction::from_json(raw)?; + + Ok(Transaction { + chain: crate::chain::Chain::KSM, + sender: tx.clone().address, + hash: Hash::default(), + data: Some(TransactionRaw::Substrate(tx.clone())), + signature: tx.signature, + }) } } #[cfg(test)] diff --git a/packages/kos-sdk/src/chains/mod.rs b/packages/kos-sdk/src/chains/mod.rs index 9d27886..0ef2d1b 100644 --- a/packages/kos-sdk/src/chains/mod.rs +++ b/packages/kos-sdk/src/chains/mod.rs @@ -1,3 +1,4 @@ +mod avail; mod bitcoin; mod default; mod ethereum; @@ -9,6 +10,7 @@ mod polygon; mod tron; pub use self::bitcoin::BTC; +pub use avail::AVAIL; pub use default::NONE; pub use ethereum::ETH; pub use klever::KLV; @@ -18,8 +20,7 @@ pub use polygon::MATIC; pub use tron::TRX; pub use ethereum::transaction::Transaction as ETHTransaction; -pub use kusama::Transaction as KSMTransaction; -pub use polkadot::transaction::Transaction as DOTTransaction; +pub use polkadot::transaction::Transaction as SubstrateTransaction; pub use polygon::Transaction as MATICTransaction; pub use self::bitcoin::transaction::BTCTransaction; diff --git a/packages/kos-sdk/src/chains/polkadot/mod.rs b/packages/kos-sdk/src/chains/polkadot/mod.rs index 77cbdfb..229856c 100644 --- a/packages/kos-sdk/src/chains/polkadot/mod.rs +++ b/packages/kos-sdk/src/chains/polkadot/mod.rs @@ -1,7 +1,7 @@ pub(crate) mod address; pub mod transaction; -use crate::chains::DOTTransaction; +use crate::chains::SubstrateTransaction; use crate::models::BroadcastResult; use crate::{ chain::BaseChain, @@ -130,7 +130,7 @@ impl DOT { /// Hash and Sign data with the private key. pub fn sign(tx: Transaction, keypair: &KeyPair) -> Result { match tx.data { - Some(TransactionRaw::Polkadot(dot_tx)) => { + Some(TransactionRaw::Substrate(dot_tx)) => { let new_tx = dot_tx.clone(); let payload = ExtrinsicPayload::from_transaction(&new_tx); @@ -150,14 +150,14 @@ impl DOT { chain: tx.chain, sender: tx.sender, hash: Hash::from_vec(vec![0u8; 32])?, - data: Some(TransactionRaw::Polkadot(new_tx)), + data: Some(TransactionRaw::Substrate(new_tx)), signature: Some(hex::encode([[1u8].to_vec(), signature].concat())), }; Ok(result) } _ => Err(Error::InvalidMessage( - "not a polkadot transaction".to_string(), + "not a substrate transaction".to_string(), )), } } @@ -211,13 +211,13 @@ impl DOT { } pub fn tx_from_json(raw: &str) -> Result { - let tx = DOTTransaction::from_json(raw)?; + let tx = SubstrateTransaction::from_json(raw)?; Ok(Transaction { chain: crate::chain::Chain::DOT, sender: tx.clone().address, hash: Hash::default(), - data: Some(TransactionRaw::Polkadot(tx.clone())), + data: Some(TransactionRaw::Substrate(tx.clone())), signature: tx.signature, }) } diff --git a/packages/kos-sdk/src/chains/polkadot/transaction.rs b/packages/kos-sdk/src/chains/polkadot/transaction.rs index 068e77f..f9f0b9b 100644 --- a/packages/kos-sdk/src/chains/polkadot/transaction.rs +++ b/packages/kos-sdk/src/chains/polkadot/transaction.rs @@ -21,6 +21,8 @@ pub struct Transaction { pub metadata_hash: Option, pub method: String, pub mode: i64, + #[serde(rename = "appId")] + pub app_id: Option, pub nonce: String, #[serde(rename = "signedExtensions")] pub signed_extensions: Vec, @@ -48,6 +50,7 @@ pub struct ExtrinsicPayload { block_hash: [u8; 32], metadata_hash: Vec, era: Vec, + app_id: Option, } impl ExtrinsicPayload { @@ -63,6 +66,7 @@ impl ExtrinsicPayload { parse_hex(&tx.metadata_hash.clone().unwrap_or_else(|| "00".to_string())); let era = parse_hex(&tx.era.clone()); let method = hex::decode(tx.method.trim_start_matches("0x")).unwrap(); + let app_id = tx.app_id.try_into().unwrap(); ExtrinsicPayload { method, @@ -75,6 +79,7 @@ impl ExtrinsicPayload { block_hash, metadata_hash, era, + app_id, } } @@ -84,12 +89,20 @@ impl ExtrinsicPayload { bytes.extend(&self.era.clone()); bytes.extend(Compact(self.nonce).encode()); bytes.extend(Compact(self.tip).encode()); - bytes.extend(&self.mode.encode()); + + if let Some(app_id) = self.app_id { + bytes.extend(Compact(app_id).encode()); + } else { + bytes.extend(&self.mode.encode()); + } + bytes.extend(&self.spec_version.encode()); bytes.extend(&self.transaction_version.encode()); bytes.extend(&self.genesis_hash); bytes.extend(&self.block_hash); - bytes.extend(&self.metadata_hash); + if self.app_id.is_none() { + bytes.extend(&self.metadata_hash); + } bytes } diff --git a/packages/kos-sdk/src/models.rs b/packages/kos-sdk/src/models.rs index 29a9976..4ff9e0c 100644 --- a/packages/kos-sdk/src/models.rs +++ b/packages/kos-sdk/src/models.rs @@ -4,7 +4,7 @@ use serde::{Deserialize, Serialize}; use wasm_bindgen::prelude::*; use crate::chain::Chain; -use crate::chains::{DOT, ETH, KLV, KSM, TRX}; +use crate::chains::{AVAIL, DOT, ETH, KLV, KSM, TRX}; #[derive(Debug, Clone, Serialize)] #[wasm_bindgen] pub struct BroadcastResult { @@ -70,8 +70,7 @@ kos_types::enum_thing! { Ethereum(super::chains::ETHTransaction), Polygon(super::chains::MATICTransaction), Bitcoin(super::chains::BTCTransaction), - Polkadot(super::chains::DOTTransaction), - Kusama(super::chains::KSMTransaction) + Substrate(super::chains::SubstrateTransaction), } } @@ -184,10 +183,7 @@ impl Transaction { TransactionRaw::Bitcoin(data) => { serde_json::to_string(&data.tx).map_err(|e| e.into()) } - TransactionRaw::Polkadot(data) => { - todo!() - } - TransactionRaw::Kusama(data) => { + TransactionRaw::Substrate(data) => { todo!() } }, @@ -219,6 +215,7 @@ impl Transaction { Chain::ETH => ETH::tx_from_json(data), Chain::DOT => DOT::tx_from_json(data), Chain::KSM => KSM::tx_from_json(data), + Chain::AVAIL => AVAIL::tx_from_json(data), Chain::MATIC => Err(Error::InvalidTransaction( "MATIC chain not implemented".to_string(), )), From da388f90ff26b8b199af17d1f1990f56cb9f90d8 Mon Sep 17 00:00:00 2001 From: Pedro Camboim Date: Mon, 28 Oct 2024 16:05:50 -0300 Subject: [PATCH 25/25] fix: clippy --- packages/kos-crypto/src/keypair.rs | 1 - packages/kos-crypto/src/sr25519.rs | 1 - packages/kos-sdk/src/chains/avail/mod.rs | 1 - packages/kos-sdk/src/chains/kusama/mod.rs | 1 - packages/kos-sdk/src/chains/polkadot/mod.rs | 5 +---- packages/kos-sdk/src/chains/polkadot/transaction.rs | 6 +++--- packages/kos-sdk/src/models.rs | 2 +- 7 files changed, 5 insertions(+), 12 deletions(-) diff --git a/packages/kos-crypto/src/keypair.rs b/packages/kos-crypto/src/keypair.rs index 32b5e6a..3870eaf 100644 --- a/packages/kos-crypto/src/keypair.rs +++ b/packages/kos-crypto/src/keypair.rs @@ -3,7 +3,6 @@ use crate::secp256k1; use crate::sr25519; use std::fmt; -use std::fmt::Pointer; use wasm_bindgen::prelude::wasm_bindgen; #[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] diff --git a/packages/kos-crypto/src/sr25519.rs b/packages/kos-crypto/src/sr25519.rs index 2d9c940..4ab2c7d 100644 --- a/packages/kos-crypto/src/sr25519.rs +++ b/packages/kos-crypto/src/sr25519.rs @@ -2,7 +2,6 @@ use coins_bip39::{English, Mnemonic}; use kos_types::{error::Error, Bytes32}; use serde::{Deserialize, Deserializer, Serialize, Serializer}; use sp_core::{sr25519, Pair}; -use std::str::FromStr; use wasm_bindgen::prelude::wasm_bindgen; #[wasm_bindgen] diff --git a/packages/kos-sdk/src/chains/avail/mod.rs b/packages/kos-sdk/src/chains/avail/mod.rs index 0a235a1..bfae732 100644 --- a/packages/kos-sdk/src/chains/avail/mod.rs +++ b/packages/kos-sdk/src/chains/avail/mod.rs @@ -10,7 +10,6 @@ use kos_types::number::BigNumber; use super::DOT; use kos_types::hash::Hash; -use serde::Serialize; use wasm_bindgen::prelude::*; #[derive(Debug, Copy, Clone)] diff --git a/packages/kos-sdk/src/chains/kusama/mod.rs b/packages/kos-sdk/src/chains/kusama/mod.rs index 1b289d8..49f8490 100644 --- a/packages/kos-sdk/src/chains/kusama/mod.rs +++ b/packages/kos-sdk/src/chains/kusama/mod.rs @@ -10,7 +10,6 @@ use kos_types::number::BigNumber; use super::DOT; use kos_types::hash::Hash; -use serde::Serialize; use wasm_bindgen::prelude::*; #[derive(Debug, Copy, Clone)] diff --git a/packages/kos-sdk/src/chains/polkadot/mod.rs b/packages/kos-sdk/src/chains/polkadot/mod.rs index 229856c..9aef45c 100644 --- a/packages/kos-sdk/src/chains/polkadot/mod.rs +++ b/packages/kos-sdk/src/chains/polkadot/mod.rs @@ -8,16 +8,13 @@ use crate::{ models, models::{PathOptions, Transaction, TransactionRaw}, }; -use base64::Engine; use kos_crypto::keypair::KeyPair; use kos_crypto::sr25519::Sr25519KeyPair; use kos_types::error::Error; use kos_types::hash::Hash; use kos_types::number::BigNumber; -use parity_scale_codec::{Decode, Encode}; use crate::chains::polkadot::transaction::ExtrinsicPayload; -use serde::Deserializer; use sp_core::crypto::Ss58Codec; use sp_core::{sr25519, Pair}; use std::str::FromStr; @@ -140,7 +137,7 @@ impl DOT { // If payload is longer than 256 bytes, we hash it and sign the hash instead: if full_unsigned_payload_scale_bytes.len() > 256 { - DOT::sign_digest(&*DOT::hash(&full_unsigned_payload_scale_bytes)?, keypair)? + DOT::sign_digest(&DOT::hash(&full_unsigned_payload_scale_bytes)?, keypair)? } else { DOT::sign_digest(&full_unsigned_payload_scale_bytes, keypair)? } diff --git a/packages/kos-sdk/src/chains/polkadot/transaction.rs b/packages/kos-sdk/src/chains/polkadot/transaction.rs index f9f0b9b..d4abf7b 100644 --- a/packages/kos-sdk/src/chains/polkadot/transaction.rs +++ b/packages/kos-sdk/src/chains/polkadot/transaction.rs @@ -1,4 +1,4 @@ -use parity_scale_codec::{Compact, Decode, Encode}; +use parity_scale_codec::{Compact, Encode}; use serde::{Deserialize, Serialize}; #[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] @@ -66,7 +66,7 @@ impl ExtrinsicPayload { parse_hex(&tx.metadata_hash.clone().unwrap_or_else(|| "00".to_string())); let era = parse_hex(&tx.era.clone()); let method = hex::decode(tx.method.trim_start_matches("0x")).unwrap(); - let app_id = tx.app_id.try_into().unwrap(); + let app_id = tx.app_id; ExtrinsicPayload { method, @@ -116,6 +116,6 @@ fn parse_hex_to_u128(hex_str: &str) -> u128 { u128::from_str_radix(hex_str.trim_start_matches("0x"), 16).unwrap() } -fn parse_hex(hex_str: &String) -> Vec { +fn parse_hex(hex_str: &str) -> Vec { hex::decode(hex_str.trim_start_matches("0x")).unwrap() } diff --git a/packages/kos-sdk/src/models.rs b/packages/kos-sdk/src/models.rs index 4ff9e0c..16ec05f 100644 --- a/packages/kos-sdk/src/models.rs +++ b/packages/kos-sdk/src/models.rs @@ -183,7 +183,7 @@ impl Transaction { TransactionRaw::Bitcoin(data) => { serde_json::to_string(&data.tx).map_err(|e| e.into()) } - TransactionRaw::Substrate(data) => { + TransactionRaw::Substrate(_data) => { todo!() } },