diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index e3fe3ffae..a2715e0fc 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1,3 +1,3 @@ @AlexD10S -@brunopgalvao -@weezy20 \ No newline at end of file +@al3mart +@evilrobot-01 \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 4f3099bc8..099453ad5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,37 @@ All notable changes to this project will be documented in this file. +## [0.6.0] - 2024-12-19 + +### 🚀 Features + +- Wallet integration (#371) +- Guide user to call a chain (#316) +- Guide user to call a contract (#306) +- Output events after calling a chain (#372) +- Add remark action (#387) + +### 🐛 Fixes + +- Build spec experience (#331) +- HRMP channels (#278) + +### 🚜 Refactor + +- Ensure short args consistency (#386) +- Bump fallback versions (#393) + +### ⚙️ Miscellaneous Tasks + +- Bump zombienet version to `v0.2.18` (#352) +- Set msrv (#385) +- Replace rococo to paseo name (#333) +- Replace codeowners (#388) + +### Build + +- *(deps)* Remove unused dependencies (#369) + ## [0.5.0] - 2024-11-08 ### 🚀 Features diff --git a/Cargo.lock b/Cargo.lock index 220042045..3e3981ecf 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,6 +1,6 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 [[package]] name = "Inflector" @@ -23,11 +23,11 @@ dependencies = [ [[package]] name = "addr2line" -version = "0.24.1" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5fb1d8e4442bd405fdfd1dacb42792696b0cf9cb15882e5d097b742a676d375" +checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" dependencies = [ - "gimli 0.31.0", + "gimli 0.31.1", ] [[package]] @@ -46,6 +46,31 @@ dependencies = [ "generic-array", ] +[[package]] +name = "aes" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" +dependencies = [ + "cfg-if", + "cipher", + "cpufeatures", +] + +[[package]] +name = "aes-gcm" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "831010a0f742e1209b3bcea8fab6a8e149051ba6099432c8cb2cc117dec3ead1" +dependencies = [ + "aead", + "aes", + "cipher", + "ctr", + "ghash", + "subtle", +] + [[package]] name = "ahash" version = "0.7.8" @@ -81,9 +106,68 @@ dependencies = [ [[package]] name = "allocator-api2" -version = "0.2.18" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" + +[[package]] +name = "alloy-primitives" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0628ec0ba5b98b3370bb6be17b12f23bfce8ee4ad83823325a20546d9b03b78" +dependencies = [ + "alloy-rlp", + "bytes", + "cfg-if", + "const-hex", + "derive_more 0.99.18", + "hex-literal", + "itoa", + "proptest", + "rand", + "ruint", + "serde", + "tiny-keccak", +] + +[[package]] +name = "alloy-rlp" +version = "0.3.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f542548a609dca89fcd72b3b9f355928cf844d4363c5eed9c5273a3dd225e097" +dependencies = [ + "arrayvec 0.7.6", + "bytes", +] + +[[package]] +name = "alloy-sol-macro" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a98ad1696a2e17f010ae8e43e9f2a1e930ed176a8e3ff77acfeff6dfb07b42c" +dependencies = [ + "const-hex", + "dunce", + "heck 0.4.1", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.90", + "syn-solidity", + "tiny-keccak", +] + +[[package]] +name = "alloy-sol-types" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" +checksum = "98d7107bed88e8f09f0ddcc3335622d87bfb6821f3e0c7473329fb1cfad5e015" +dependencies = [ + "alloy-primitives", + "alloy-sol-macro", + "const-hex", + "serde", +] [[package]] name = "android-tzdata" @@ -111,9 +195,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.15" +version = "0.6.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64e15c1ab1f89faffbf04a634d5e1962e9074f2741eef6d97f3c4e322426d526" +checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" dependencies = [ "anstyle", "anstyle-parse", @@ -126,49 +210,72 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.8" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bec1de6f59aedf83baf9ff929c98f2ad654b97c9510f4e70cf6f661d49fd5b1" +checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" [[package]] name = "anstyle-parse" -version = "0.2.5" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb47de1e80c2b463c735db5b217a0ddc39d612e7ac9e2e96a5aed1f57616c1cb" +checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.1.1" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d36fc52c7f6c869915e99412912f22093507da8d9e942ceaf66fe4b7c14422a" +checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "anstyle-wincon" -version = "3.0.4" +version = "3.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bf74e1b6e971609db8ca7a9ce79fd5768ab6ae46441c572e46cf596f59e57f8" +checksum = "2109dbce0e72be3ec00bed26e6a7479ca384ad226efdd66db8fa2e3a38c83125" dependencies = [ "anstyle", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "anyhow" -version = "1.0.87" +version = "1.0.94" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1fd03a028ef38ba2276dce7e33fcd6369c158a1bca17946c4b1b701891c1ff7" + +[[package]] +name = "approx" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6" +dependencies = [ + "num-traits", +] + +[[package]] +name = "aquamarine" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10f00e1f6e58a40e807377c75c6a7f97bf9044fab57816f2414e6f5f4499d7b8" +checksum = "21cc1548309245035eb18aa7f0967da6bc65587005170c56e6ef2788a4cf3f4e" +dependencies = [ + "include_dir", + "itertools 0.10.5", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.90", +] [[package]] name = "arbitrary" -version = "1.3.2" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d5a26814d8dcb93b0e5a0ff3c6d80a8843bafb21b39e8e18a6f05471870e110" +checksum = "dde20b3d026af13f561bdd0f15edf01fc734f0dafcedbaf42bba506a9517f223" dependencies = [ "derive_arbitrary", ] @@ -180,8 +287,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fb00293ba84f51ce3bd026bd0de55899c4e68f0a39a5728cebae3a73ffdc0a4f" dependencies = [ "ark-ec", - "ark-ff", - "ark-std", + "ark-ff 0.4.2", + "ark-std 0.4.0", +] + +[[package]] +name = "ark-bls12-377-ext" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20c7021f180a0cbea0380eba97c2af3c57074cdaffe0eef7e840e1c9f2841e55" +dependencies = [ + "ark-bls12-377", + "ark-ec", + "ark-models-ext", + "ark-std 0.4.0", ] [[package]] @@ -191,9 +310,48 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c775f0d12169cba7aae4caeb547bb6a50781c7449a8aa53793827c9ec4abf488" dependencies = [ "ark-ec", - "ark-ff", - "ark-serialize", - "ark-std", + "ark-ff 0.4.2", + "ark-serialize 0.4.2", + "ark-std 0.4.0", +] + +[[package]] +name = "ark-bls12-381-ext" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1dc4b3d08f19e8ec06e949712f95b8361e43f1391d94f65e4234df03480631c" +dependencies = [ + "ark-bls12-381", + "ark-ec", + "ark-ff 0.4.2", + "ark-models-ext", + "ark-serialize 0.4.2", + "ark-std 0.4.0", +] + +[[package]] +name = "ark-bw6-761" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e0605daf0cc5aa2034b78d008aaf159f56901d92a52ee4f6ecdfdac4f426700" +dependencies = [ + "ark-bls12-377", + "ark-ec", + "ark-ff 0.4.2", + "ark-std 0.4.0", +] + +[[package]] +name = "ark-bw6-761-ext" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccee5fba47266f460067588ee1bf070a9c760bf2050c1c509982c5719aadb4f2" +dependencies = [ + "ark-bw6-761", + "ark-ec", + "ark-ff 0.4.2", + "ark-models-ext", + "ark-std 0.4.0", ] [[package]] @@ -202,14 +360,83 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "defd9a439d56ac24968cca0571f598a61bc8c55f71d50a89cda591cb750670ba" dependencies = [ - "ark-ff", + "ark-ff 0.4.2", "ark-poly", - "ark-serialize", - "ark-std", + "ark-serialize 0.4.2", + "ark-std 0.4.0", "derivative", "hashbrown 0.13.2", "itertools 0.10.5", "num-traits", + "rayon", + "zeroize", +] + +[[package]] +name = "ark-ed-on-bls12-377" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b10d901b9ac4b38f9c32beacedfadcdd64e46f8d7f8e88c1ae1060022cf6f6c6" +dependencies = [ + "ark-bls12-377", + "ark-ec", + "ark-ff 0.4.2", + "ark-std 0.4.0", +] + +[[package]] +name = "ark-ed-on-bls12-377-ext" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "524a4fb7540df2e1a8c2e67a83ba1d1e6c3947f4f9342cc2359fc2e789ad731d" +dependencies = [ + "ark-ec", + "ark-ed-on-bls12-377", + "ark-ff 0.4.2", + "ark-models-ext", + "ark-std 0.4.0", +] + +[[package]] +name = "ark-ed-on-bls12-381-bandersnatch" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9cde0f2aa063a2a5c28d39b47761aa102bda7c13c84fc118a61b87c7b2f785c" +dependencies = [ + "ark-bls12-381", + "ark-ec", + "ark-ff 0.4.2", + "ark-std 0.4.0", +] + +[[package]] +name = "ark-ed-on-bls12-381-bandersnatch-ext" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d15185f1acb49a07ff8cbe5f11a1adc5a93b19e211e325d826ae98e98e124346" +dependencies = [ + "ark-ec", + "ark-ed-on-bls12-381-bandersnatch", + "ark-ff 0.4.2", + "ark-models-ext", + "ark-std 0.4.0", +] + +[[package]] +name = "ark-ff" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b3235cc41ee7a12aaaf2c575a2ad7b46713a8a50bda2fc3b003a04845c05dd6" +dependencies = [ + "ark-ff-asm 0.3.0", + "ark-ff-macros 0.3.0", + "ark-serialize 0.3.0", + "ark-std 0.3.0", + "derivative", + "num-bigint", + "num-traits", + "paste", + "rustc_version 0.3.3", "zeroize", ] @@ -219,20 +446,30 @@ 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", + "ark-ff-asm 0.4.2", + "ark-ff-macros 0.4.2", + "ark-serialize 0.4.2", + "ark-std 0.4.0", "derivative", "digest 0.10.7", "itertools 0.10.5", "num-bigint", "num-traits", "paste", - "rustc_version", + "rustc_version 0.4.1", "zeroize", ] +[[package]] +name = "ark-ff-asm" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db02d390bf6643fb404d3d22d31aee1c4bc4459600aef9113833d17e786c6e44" +dependencies = [ + "quote", + "syn 1.0.109", +] + [[package]] name = "ark-ff-asm" version = "0.4.2" @@ -243,6 +480,18 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "ark-ff-macros" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db2fd794a08ccb318058009eefdf15bcaaaaf6f8161eb3345f907222bac38b20" +dependencies = [ + "num-bigint", + "num-traits", + "quote", + "syn 1.0.109", +] + [[package]] name = "ark-ff-macros" version = "0.4.2" @@ -256,19 +505,56 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "ark-models-ext" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e9eab5d4b5ff2f228b763d38442adc9b084b0a465409b059fac5c2308835ec2" +dependencies = [ + "ark-ec", + "ark-ff 0.4.2", + "ark-serialize 0.4.2", + "ark-std 0.4.0", + "derivative", +] + [[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", + "ark-ff 0.4.2", + "ark-serialize 0.4.2", + "ark-std 0.4.0", "derivative", "hashbrown 0.13.2", ] +[[package]] +name = "ark-scale" +version = "0.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f69c00b3b529be29528a6f2fd5fa7b1790f8bed81b9cdca17e326538545a179" +dependencies = [ + "ark-ec", + "ark-ff 0.4.2", + "ark-serialize 0.4.2", + "ark-std 0.4.0", + "parity-scale-codec", + "scale-info", +] + +[[package]] +name = "ark-serialize" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d6c2b318ee6e10f8c2853e73a83adc0ccb88995aa978d8a3408d492ab2ee671" +dependencies = [ + "ark-std 0.3.0", + "digest 0.9.0", +] + [[package]] name = "ark-serialize" version = "0.4.2" @@ -276,7 +562,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" dependencies = [ "ark-serialize-derive", - "ark-std", + "ark-std 0.4.0", "digest 0.10.7", "num-bigint", ] @@ -292,6 +578,16 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "ark-std" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1df2c09229cbc5a028b1d70e00fdb2acee28b1055dfb5ca73eea49c5a25c4e7c" +dependencies = [ + "num-traits", + "rand", +] + [[package]] name = "ark-std" version = "0.4.0" @@ -300,6 +596,7 @@ checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" dependencies = [ "num-traits", "rand", + "rayon", ] [[package]] @@ -310,9 +607,9 @@ checksum = "5d5dde061bd34119e902bbb2d9b90c5692635cf59fb91d582c2b68043f1b8293" [[package]] name = "arrayref" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d151e35f61089500b617991b791fc8bfd237ae50cd5950803758a179b41e67a" +checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" [[package]] name = "arrayvec" @@ -355,7 +652,7 @@ dependencies = [ "proc-macro2", "quote", "serde", - "syn 2.0.77", + "syn 2.0.90", ] [[package]] @@ -399,6 +696,66 @@ dependencies = [ "wait-timeout", ] +[[package]] +name = "assert_matches" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b34d609dfbaf33d6889b2b7106d3ca345eacad44200913df5ba02bfd31d2ba9" + +[[package]] +name = "asset-test-utils" +version = "18.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0324df9ce91a9840632e865dd3272bd20162023856f1b189b7ae58afa5c6b61" +dependencies = [ + "cumulus-pallet-parachain-system", + "cumulus-pallet-xcmp-queue", + "cumulus-primitives-core", + "frame-support", + "frame-system", + "pallet-assets", + "pallet-balances", + "pallet-collator-selection", + "pallet-session", + "pallet-timestamp", + "pallet-xcm", + "pallet-xcm-bridge-hub-router", + "parachains-common", + "parachains-runtimes-test-utils", + "parity-scale-codec", + "sp-io 38.0.0", + "sp-runtime 39.0.3", + "staging-parachain-info", + "staging-xcm 14.2.0", + "staging-xcm-builder", + "staging-xcm-executor", + "substrate-wasm-builder", +] + +[[package]] +name = "assets-common" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93438e31a4449fbeab87210931edc8cd156292354f1fc15f17d819ecded6bf25" +dependencies = [ + "cumulus-primitives-core", + "frame-support", + "impl-trait-for-tuples", + "log", + "pallet-asset-conversion", + "pallet-assets", + "pallet-xcm", + "parachains-common", + "parity-scale-codec", + "scale-info", + "sp-api", + "sp-runtime 39.0.3", + "staging-xcm 14.2.0", + "staging-xcm-builder", + "staging-xcm-executor", + "substrate-wasm-builder", +] + [[package]] name = "async-channel" version = "2.3.1" @@ -437,9 +794,9 @@ dependencies = [ [[package]] name = "async-io" -version = "2.3.4" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "444b0228950ee6501b3568d3c93bf1176a1fdbc3b758dcd9475046d30f4dc7e8" +checksum = "43a2b323ccce0a1d90b449fd71f2a06ca7faa7c54c2751f06c9bd851fc061059" dependencies = [ "async-lock", "cfg-if", @@ -448,7 +805,7 @@ dependencies = [ "futures-lite", "parking", "polling", - "rustix 0.38.36", + "rustix 0.38.42", "slab", "tracing", "windows-sys 0.59.0", @@ -460,7 +817,7 @@ version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" dependencies = [ - "event-listener 5.3.1", + "event-listener", "event-listener-strategy", "pin-project-lite", ] @@ -478,9 +835,9 @@ dependencies = [ [[package]] name = "async-process" -version = "2.2.4" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8a07789659a4d385b79b18b9127fc27e1a59e1e89117c78c5ea3b806f016374" +checksum = "63255f1dc2381611000436537bbedfe83183faa303a5a0edaf191edef06526bb" dependencies = [ "async-channel", "async-io", @@ -489,11 +846,10 @@ dependencies = [ "async-task", "blocking", "cfg-if", - "event-listener 5.3.1", + "event-listener", "futures-lite", - "rustix 0.38.36", + "rustix 0.38.42", "tracing", - "windows-sys 0.59.0", ] [[package]] @@ -508,7 +864,7 @@ dependencies = [ "cfg-if", "futures-core", "futures-io", - "rustix 0.38.36", + "rustix 0.38.42", "signal-hook-registry", "slab", "windows-sys 0.59.0", @@ -516,9 +872,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", @@ -527,13 +883,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.77", + "syn 2.0.90", ] [[package]] @@ -544,13 +900,13 @@ 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.77", + "syn 2.0.90", ] [[package]] @@ -566,33 +922,99 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] -name = "autocfg" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" - -[[package]] -name = "backoff" -version = "0.4.0" +name = "auto_impl" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b62ddb9cb1ec0a098ad4bbf9344d0713fa193ae1a80af55febcff2627b6a00c1" +checksum = "3c87f3f15e7794432337fc718554eaa4dc8f04c9677a950ffe366f20a162ae42" dependencies = [ - "getrandom", - "instant", - "rand", + "proc-macro2", + "quote", + "syn 2.0.90", ] [[package]] -name = "backtrace" -version = "0.3.74" +name = "autocfg" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" + +[[package]] +name = "axum" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edca88bc138befd0323b20752846e6587272d3b03b0343c8ea28a6f819e6e71f" +dependencies = [ + "async-trait", + "axum-core", + "bytes", + "futures-util", + "http 1.2.0", + "http-body 1.0.1", + "http-body-util", + "hyper 1.5.2", + "hyper-util", + "itoa", + "matchit", + "memchr", + "mime", + "percent-encoding", + "pin-project-lite", + "rustversion", + "serde", + "serde_json", + "serde_path_to_error", + "serde_urlencoded", + "sync_wrapper 1.0.2", + "tokio", + "tower 0.5.2", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "axum-core" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09f2bd6146b97ae3359fa0cc6d6b376d9539582c7b4220f041a33ec24c226199" +dependencies = [ + "async-trait", + "bytes", + "futures-util", + "http 1.2.0", + "http-body 1.0.1", + "http-body-util", + "mime", + "pin-project-lite", + "rustversion", + "sync_wrapper 1.0.2", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "backoff" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b62ddb9cb1ec0a098ad4bbf9344d0713fa193ae1a80af55febcff2627b6a00c1" +dependencies = [ + "getrandom", + "instant", + "rand", +] + +[[package]] +name = "backtrace" +version = "0.3.74" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" dependencies = [ - "addr2line 0.24.1", + "addr2line 0.24.2", "cfg-if", "libc", "miniz_oxide", - "object 0.36.4", + "object 0.36.5", "rustc-demangle", "windows-targets 0.52.6", ] @@ -649,12 +1071,13 @@ dependencies = [ ] [[package]] -name = "beef" -version = "0.5.2" +name = "binary-merkle-tree" +version = "15.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a8241f3ebb85c056b509d4327ad0358fbbba6ffb340bf388f26350aeda225b1" +checksum = "336bf780dd7526a9a4bc1521720b25c1994dc132cccd59553431923fa4d1a693" dependencies = [ - "serde", + "hash-db", + "log", ] [[package]] @@ -668,15 +1091,30 @@ 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", "serde", "unicode-normalization", ] +[[package]] +name = "bit-set" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" +dependencies = [ + "bit-vec", +] + +[[package]] +name = "bit-vec" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" + [[package]] name = "bitcoin-internals" version = "0.2.0" @@ -684,10 +1122,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9425c3bf7089c983facbae04de54513cce73b41c7f9ff8c845b54e7bc64ebbfb" [[package]] -name = "bitcoin_hashes" -version = "0.11.0" +name = "bitcoin-io" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90064b8dee6815a6470d60bad07bbbaee885c0e12d04177138fa3291a01b7bc4" +checksum = "0b47c4ab7a93edb0c7198c5535ed9b52b63095f4e9b45279c6736cec4b856baf" [[package]] name = "bitcoin_hashes" @@ -696,7 +1134,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1930a4dabfebb8d7d9992db18ebe3ae2876f0a305fab206fd168df931ede293b" dependencies = [ "bitcoin-internals", - "hex-conservative", + "hex-conservative 0.1.2", +] + +[[package]] +name = "bitcoin_hashes" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb18c03d0db0247e147a21a6faafd5a7eb851c743db062de72018b6b7e8e4d16" +dependencies = [ + "bitcoin-io", + "hex-conservative 0.2.1", ] [[package]] @@ -719,6 +1167,7 @@ checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" dependencies = [ "funty", "radium", + "serde", "tap", "wyz", ] @@ -786,9 +1235,9 @@ dependencies = [ [[package]] name = "bollard" -version = "0.16.1" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0aed08d3adb6ebe0eff737115056652670ae290f177759aac19c30456135f94c" +checksum = "97ccca1260af6a459d75994ad5acc1651bcabcbdbc41467cc9786519ab854c30" dependencies = [ "base64 0.22.1", "bollard-stubs", @@ -796,12 +1245,12 @@ dependencies = [ "futures-core", "futures-util", "hex", - "http 1.1.0", + "http 1.2.0", "http-body-util", - "hyper 1.4.1", + "hyper 1.5.2", "hyper-named-pipe", "hyper-util", - "hyperlocal-next", + "hyperlocal", "log", "pin-project-lite", "serde", @@ -809,7 +1258,7 @@ dependencies = [ "serde_json", "serde_repr", "serde_urlencoded", - "thiserror", + "thiserror 2.0.8", "tokio", "tokio-util", "tower-service", @@ -819,9 +1268,9 @@ dependencies = [ [[package]] name = "bollard-stubs" -version = "1.44.0-rc.2" +version = "1.47.1-rc.27.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "709d9aa1c37abb89d40f19f5d0ad6f0d88cb1581264e571c9350fc5bb89cf1c5" +checksum = "3f179cfbddb6e77a5472703d4b30436bff32929c0aa8a9008ecf23d1d3cdd0da" dependencies = [ "serde", "serde_repr", @@ -830,9 +1279,9 @@ dependencies = [ [[package]] name = "borsh" -version = "1.5.1" +version = "1.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6362ed55def622cddc70a4746a68554d7b687713770de539e59a739b249f8ed" +checksum = "2506947f73ad44e344215ccd6403ac2ae18cd8e046e581a441bf8d199f257f03" dependencies = [ "borsh-derive", "cfg_aliases", @@ -840,28 +1289,302 @@ dependencies = [ [[package]] name = "borsh-derive" -version = "1.5.1" +version = "1.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3ef8005764f53cd4dca619f5bf64cafd4664dada50ece25e4d81de54c80cc0b" +checksum = "c2593a3b8b938bd68373196c9832f516be11fa487ef4ae745eb282e6a56a7244" dependencies = [ "once_cell", "proc-macro-crate 3.2.0", "proc-macro2", "quote", - "syn 2.0.77", - "syn_derive", + "syn 2.0.90", ] [[package]] name = "bounded-collections" -version = "0.2.0" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d077619e9c237a5d1875166f5e8033e8f6bff0c96f8caf81e1c2d7738c431bf" +dependencies = [ + "log", + "parity-scale-codec", + "scale-info", + "serde", +] + +[[package]] +name = "bp-header-chain" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "890df97cea17ee61ff982466bb9e90cb6b1462adb45380999019388d05e4b92d" +dependencies = [ + "bp-runtime", + "finality-grandpa", + "frame-support", + "parity-scale-codec", + "scale-info", + "serde", + "sp-consensus-grandpa", + "sp-core 34.0.0", + "sp-runtime 39.0.3", + "sp-std", +] + +[[package]] +name = "bp-messages" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7efabf94339950b914ba87249497f1a0e35a73849934d164fecae4b275928cf6" +dependencies = [ + "bp-header-chain", + "bp-runtime", + "frame-support", + "parity-scale-codec", + "scale-info", + "serde", + "sp-core 34.0.0", + "sp-io 38.0.0", + "sp-std", +] + +[[package]] +name = "bp-parachains" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9011e5c12c15caf3c4129a98f4f4916ea9165db8daf6ed85867c3106075f40df" +dependencies = [ + "bp-header-chain", + "bp-polkadot-core", + "bp-runtime", + "frame-support", + "impl-trait-for-tuples", + "parity-scale-codec", + "scale-info", + "sp-core 34.0.0", + "sp-runtime 39.0.3", + "sp-std", +] + +[[package]] +name = "bp-polkadot" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa6277dd4333917ecfbcc35e9332a9f11682e0a506e76b617c336224660fce33" +dependencies = [ + "bp-header-chain", + "bp-polkadot-core", + "bp-runtime", + "frame-support", + "sp-api", + "sp-std", +] + +[[package]] +name = "bp-polkadot-core" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "345cf472bac11ef79d403e4846a666b7d22a13cd16d9c85b62cd6b5e16c4a042" +dependencies = [ + "bp-messages", + "bp-runtime", + "frame-support", + "frame-system", + "parity-scale-codec", + "parity-util-mem", + "scale-info", + "serde", + "sp-core 34.0.0", + "sp-runtime 39.0.3", + "sp-std", +] + +[[package]] +name = "bp-relayers" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9465ad727e466d67d64244a1aa7bb19933a297913fdde34b8e9bda0a341bdeb" +dependencies = [ + "bp-header-chain", + "bp-messages", + "bp-parachains", + "bp-runtime", + "frame-support", + "frame-system", + "pallet-utility", + "parity-scale-codec", + "scale-info", + "sp-runtime 39.0.3", + "sp-std", +] + +[[package]] +name = "bp-runtime" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d32385ecb91a31bddaf908e8dcf4a15aef1bcd3913cc03ebfad02ff6d568abc1" +checksum = "746d9464f912b278f8a5e2400f10541f95da7fc6c7d688a2788b9a46296146ee" dependencies = [ + "frame-support", + "frame-system", + "hash-db", + "impl-trait-for-tuples", "log", + "num-traits", "parity-scale-codec", "scale-info", "serde", + "sp-core 34.0.0", + "sp-io 38.0.0", + "sp-runtime 39.0.3", + "sp-state-machine 0.43.0", + "sp-std", + "sp-trie 37.0.0", + "trie-db 0.29.1", +] + +[[package]] +name = "bp-test-utils" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92e659078b54c0b6bd79896738212a305842ad37168976363233516754337826" +dependencies = [ + "bp-header-chain", + "bp-parachains", + "bp-polkadot-core", + "bp-runtime", + "ed25519-dalek", + "finality-grandpa", + "parity-scale-codec", + "sp-application-crypto 38.0.0", + "sp-consensus-grandpa", + "sp-core 34.0.0", + "sp-runtime 39.0.3", + "sp-std", + "sp-trie 37.0.0", +] + +[[package]] +name = "bp-xcm-bridge-hub" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6909117ca87cb93703742939d5f0c4c93e9646d9cda22262e9709d68c929999b" +dependencies = [ + "bp-messages", + "bp-runtime", + "frame-support", + "parity-scale-codec", + "scale-info", + "serde", + "sp-core 34.0.0", + "sp-io 38.0.0", + "sp-std", + "staging-xcm 14.2.0", +] + +[[package]] +name = "bp-xcm-bridge-hub-router" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9284820ca704f5c065563cad77d2e3d069a23cc9cb3a29db9c0de8dd3b173a87" +dependencies = [ + "parity-scale-codec", + "scale-info", + "sp-core 34.0.0", + "sp-runtime 39.0.3", + "staging-xcm 14.2.0", +] + +[[package]] +name = "bridge-hub-common" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c31b53c53d627e2da38f8910807944bf3121e154b5c0ac9e122995af9dfb13ed" +dependencies = [ + "cumulus-primitives-core", + "frame-support", + "pallet-message-queue", + "parity-scale-codec", + "scale-info", + "snowbridge-core", + "sp-core 34.0.0", + "sp-runtime 39.0.3", + "sp-std", + "staging-xcm 14.2.0", +] + +[[package]] +name = "bridge-hub-test-utils" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de0b3aa5fd8481a06ca16e47fd3d2d9c6abe76b27d922ec8980a853f242173b3" +dependencies = [ + "asset-test-utils", + "bp-header-chain", + "bp-messages", + "bp-parachains", + "bp-polkadot-core", + "bp-relayers", + "bp-runtime", + "bp-test-utils", + "bp-xcm-bridge-hub", + "bridge-runtime-common", + "cumulus-pallet-parachain-system", + "cumulus-pallet-xcmp-queue", + "frame-support", + "frame-system", + "impl-trait-for-tuples", + "log", + "pallet-balances", + "pallet-bridge-grandpa", + "pallet-bridge-messages", + "pallet-bridge-parachains", + "pallet-bridge-relayers", + "pallet-timestamp", + "pallet-utility", + "pallet-xcm", + "pallet-xcm-bridge-hub", + "parachains-common", + "parachains-runtimes-test-utils", + "parity-scale-codec", + "sp-core 34.0.0", + "sp-io 38.0.0", + "sp-keyring", + "sp-runtime 39.0.3", + "sp-tracing 17.0.1", + "staging-xcm 14.2.0", + "staging-xcm-builder", + "staging-xcm-executor", +] + +[[package]] +name = "bridge-runtime-common" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c639aa22de6e904156a3e8b0e6b9e6af790cb27a1299688cc07997e1ffe5b648" +dependencies = [ + "bp-header-chain", + "bp-messages", + "bp-parachains", + "bp-polkadot-core", + "bp-relayers", + "bp-runtime", + "bp-xcm-bridge-hub", + "frame-support", + "frame-system", + "log", + "pallet-bridge-grandpa", + "pallet-bridge-messages", + "pallet-bridge-parachains", + "pallet-bridge-relayers", + "pallet-transaction-payment", + "pallet-utility", + "parity-scale-codec", + "scale-info", + "sp-io 38.0.0", + "sp-runtime 39.0.3", + "sp-std", + "sp-trie 37.0.0", + "staging-xcm 14.2.0", + "tuplex", ] [[package]] @@ -884,15 +1607,24 @@ dependencies = [ [[package]] name = "bstr" -version = "1.10.0" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40723b8fb387abc38f4f4a37c09073622e41dd12327033091ef8950659e6dc0c" +checksum = "786a307d683a5bf92e6fd5fd69a7eb613751668d1d8d67d802846dfe367c62c8" dependencies = [ "memchr", - "regex-automata 0.4.7", + "regex-automata 0.4.9", "serde", ] +[[package]] +name = "build-helper" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bdce191bf3fa4995ce948c8c83b4640a1745457a149e73c6db75b4ffe36aad5f" +dependencies = [ + "semver 0.6.0", +] + [[package]] name = "bumpalo" version = "3.16.0" @@ -927,6 +1659,12 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "bytemuck" +version = "1.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b37c88a63ffd85d15b406896cc343916d7cf57838a847b3a6f2ca5d39a5695a" + [[package]] name = "byteorder" version = "1.5.0" @@ -935,9 +1673,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.7.1" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8318a53db07bb3f8dca91a600466bdb3f2eaadeedfdbcf02e1accbad9271ba50" +checksum = "325918d6fe32f23b19878fe4b34794ae41fc19ddbe53b10571a4874d44ffd39b" [[package]] name = "camino" @@ -950,32 +1688,46 @@ dependencies = [ [[package]] name = "cargo-platform" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24b1f0365a6c6bb4020cd05806fd0d33c44d38046b8bd7f0e40814b9763cabfc" +checksum = "e35af189006b9c0f00a064685c727031e3ed2d8020f7ba284d78cc2671bd36ea" dependencies = [ "serde", ] [[package]] name = "cargo_metadata" -version = "0.18.1" +version = "0.15.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eee4243f1f26fc7a42710e7439c149e2b10b05472f88090acce52632f231a73a" +dependencies = [ + "camino", + "cargo-platform", + "semver 1.0.24", + "serde", + "serde_json", + "thiserror 1.0.69", +] + +[[package]] +name = "cargo_metadata" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d886547e41f740c616ae73108f6eb70afe6d940c7bc697cb30f13daec073037" +checksum = "8769706aad5d996120af43197bf46ef6ad0fda35216b4505f926a365a232d924" dependencies = [ "camino", "cargo-platform", - "semver", + "semver 1.0.24", "serde", "serde_json", - "thiserror", + "thiserror 2.0.8", ] [[package]] name = "cargo_toml" -version = "0.20.4" +version = "0.20.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad639525b1c67b6a298f378417b060fbc04618bea559482a8484381cce27d965" +checksum = "88da5a13c620b4ca0078845707ea9c3faf11edbc3ffd8497d11d686211cd1ac0" dependencies = [ "serde", "toml 0.8.19", @@ -983,9 +1735,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.1.18" +version = "1.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b62ac837cdb5cb22e10a256099b4fc502b1dfe560cb282963a974d7abd80e476" +checksum = "9157bbaa6b165880c27a4293a474c91cdcf265cc68cc829bf10be0964a391caf" dependencies = [ "jobserver", "libc", @@ -998,6 +1750,15 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" +[[package]] +name = "cfg-expr" +version = "0.15.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d067ad48b8650848b989a59a86c6c36a995d02d2bf778d45c3c5d57bc2718f02" +dependencies = [ + "smallvec", +] + [[package]] name = "cfg-if" version = "1.0.0" @@ -1023,9 +1784,9 @@ dependencies = [ [[package]] name = "chrono" -version = "0.4.38" +version = "0.4.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" +checksum = "7e36cc9d416881d2e24f9a963be5fb1cd90966419ac844274161d10488b3e825" dependencies = [ "android-tzdata", "iana-time-zone", @@ -1042,13 +1803,14 @@ checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" dependencies = [ "crypto-common", "inout", + "zeroize", ] [[package]] name = "clap" -version = "4.5.17" +version = "4.5.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e5a21b8495e732f1b3c364c9949b201ca7bae518c502c80256c96ad79eaf6ac" +checksum = "3135e7ec2ef7b10c6ed8950f0f792ed96ee093fa088608f1c76e569722700c84" dependencies = [ "clap_builder", "clap_derive", @@ -1056,9 +1818,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.17" +version = "4.5.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8cf2dd12af7a047ad9d6da2b6b249759a22a7abc0f474c1dae1777afa4b21a73" +checksum = "30582fc632330df2bd26877bde0c1f4470d57c582bbc070376afcd04d8cb4838" dependencies = [ "anstream", "anstyle", @@ -1068,27 +1830,27 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.13" +version = "4.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "501d359d5f3dcaf6ecdeee48833ae73ec6e42723a1e52419c79abf9507eec0a0" +checksum = "4ac6a0c7b1a9e9a5186361f67dfa1b88213572f427fb9ab038efb2bd8c582dab" dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.90", ] [[package]] name = "clap_lex" -version = "0.7.2" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1462739cb27611015575c0c11df5df7601141071f07518d56fcc1be504cbec97" +checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" [[package]] name = "cliclack" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c827ccada848b64fba073b64518a7416d605ad70c594b5450b5ed1d97e3b5d4" +checksum = "6a80570d35684e725e9d2d4aaaf32bc0cbfcfb8539898f9afea3da0d2e5189e4" dependencies = [ "console", "indicatif", @@ -1105,23 +1867,23 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" dependencies = [ "termcolor", - "unicode-width", + "unicode-width 0.1.14", ] [[package]] name = "colorchoice" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3fd119d74b830634cea2a0f58bbd0d54540518a14397557951e79340abc28c0" +checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" [[package]] name = "colored" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbf2150cce219b664a8a70df7a1f933836724b503f8a413af9365b4dcc4d90b8" +checksum = "117725a109d387c937a1533ce01b450cbde6b88abceea8473c4d7a85853cda3c" dependencies = [ "lazy_static", - "windows-sys 0.48.0", + "windows-sys 0.59.0", ] [[package]] @@ -1151,15 +1913,28 @@ dependencies = [ [[package]] name = "console" -version = "0.15.8" +version = "0.15.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e1f83fc076bd6dd27517eacdf25fef6c4dfe5f1d7448bafaaf3a26f13b5e4eb" +checksum = "ea3c6ecd8059b57859df5c69830340ed3c41d30e3da0c1cbed90a96ac853041b" dependencies = [ "encode_unicode", - "lazy_static", "libc", - "unicode-width", - "windows-sys 0.52.0", + "once_cell", + "unicode-width 0.2.0", + "windows-sys 0.59.0", +] + +[[package]] +name = "const-hex" +version = "1.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b0485bab839b018a8f1723fc5391819fea5f8f0f32288ef8a735fd096b6160c" +dependencies = [ + "cfg-if", + "cpufeatures", + "hex", + "proptest", + "serde", ] [[package]] @@ -1168,6 +1943,26 @@ version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" +[[package]] +name = "const-random" +version = "0.1.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87e00182fe74b066627d63b85fd550ac2998d4b0bd86bfed477a0ae4c7c71359" +dependencies = [ + "const-random-macro", +] + +[[package]] +name = "const-random-macro" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e" +dependencies = [ + "getrandom", + "once_cell", + "tiny-keccak", +] + [[package]] name = "const_env" version = "0.1.2" @@ -1208,14 +2003,14 @@ checksum = "cd7e35aee659887cbfb97aaf227ac12cad1a9d7c71e55ff3376839ed4e282d08" [[package]] name = "contract-build" -version = "5.0.0-alpha" +version = "5.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d12277cde43657b5a7a36c9bb6e9ecf12b757234a867f9f38ce78d386a328281" +checksum = "b014fa89030235ecd8bdeb061ec97df326281b484f89ad3e17a79f08759c2f52" dependencies = [ "anyhow", "blake2", "bollard", - "cargo_metadata", + "cargo_metadata 0.19.1", "clap", "colored", "contract-metadata", @@ -1223,11 +2018,11 @@ dependencies = [ "duct", "heck 0.5.0", "hex", - "impl-serde", + "impl-serde 0.5.0", "parity-scale-codec", "regex", - "rustc_version", - "semver", + "rustc_version 0.4.1", + "semver 1.0.24", "serde", "serde_json", "strum 0.26.3", @@ -1242,16 +2037,16 @@ dependencies = [ "walkdir", "wasm-encoder", "wasm-opt", - "wasmparser 0.207.0", + "wasmparser 0.220.0", "which", "zip", ] [[package]] name = "contract-extrinsics" -version = "5.0.0-alpha" +version = "5.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf7cd6c946b411dc175da09825bc0b041503eabca8347cefbf40eb346e035efc" +checksum = "67d0c91349c31caec4d5e3c544b4bc4fcc7c0468dc49ee84a96a24f915464401" dependencies = [ "anyhow", "blake2", @@ -1264,15 +2059,15 @@ dependencies = [ "hex", "ink_env", "ink_metadata", - "itertools 0.12.1", + "itertools 0.13.0", "pallet-contracts-uapi-next", "parity-scale-codec", "rust_decimal", "scale-info", "serde", "serde_json", - "sp-core", - "sp-runtime", + "sp-core 32.0.0", + "sp-runtime 35.0.0", "sp-weights", "subxt", "tokio", @@ -1282,13 +2077,13 @@ dependencies = [ [[package]] name = "contract-metadata" -version = "5.0.0-alpha" +version = "5.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fc0718fc46a399688c032f2141a3abafa0eb42041e3d6880390069ca4700fca" +checksum = "83ae8bcb5f7c5ea033d05fa0bbffa4e762a5b69c0ce96e4188fb15385a01998b" dependencies = [ "anyhow", - "impl-serde", - "semver", + "impl-serde 0.5.0", + "semver 1.0.24", "serde", "serde_json", "url", @@ -1296,9 +2091,9 @@ dependencies = [ [[package]] name = "contract-transcode" -version = "5.0.0-alpha" +version = "5.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "671e0dff122f02fff592b7f32aa59b1886352939945cba487ee10f6367f13a75" +checksum = "baca96dc859fd180eba5f15e468f59dc8c932a6b72f6b76f91b571b6743a9e7d" dependencies = [ "anyhow", "base58", @@ -1306,19 +2101,19 @@ dependencies = [ "contract-metadata", "escape8259", "hex", - "indexmap 2.5.0", + "indexmap 2.7.0", "ink_env", "ink_metadata", - "itertools 0.12.1", + "itertools 0.13.0", "nom", "nom-supreme", "parity-scale-codec", - "primitive-types", + "primitive-types 0.13.1", "scale-info", "serde", "serde_json", "strsim 0.11.1", - "thiserror", + "thiserror 2.0.8", "tracing", ] @@ -1364,13 +2159,57 @@ dependencies = [ [[package]] name = "cpufeatures" -version = "0.2.14" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "608697df725056feaccfa42cffdaeeec3fccc4ffc38358ecd19b243e716a78e0" +checksum = "16b80225097f2e5ae4e7179dd2266824648f3e2f49d9134d584b76389d31c4c3" dependencies = [ "libc", ] +[[package]] +name = "cranelift-bforest" +version = "0.95.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1277fbfa94bc82c8ec4af2ded3e639d49ca5f7f3c7eeab2c66accd135ece4e70" +dependencies = [ + "cranelift-entity", +] + +[[package]] +name = "cranelift-codegen" +version = "0.95.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6e8c31ad3b2270e9aeec38723888fe1b0ace3bea2b06b3f749ccf46661d3220" +dependencies = [ + "bumpalo", + "cranelift-bforest", + "cranelift-codegen-meta", + "cranelift-codegen-shared", + "cranelift-entity", + "cranelift-isle", + "gimli 0.27.3", + "hashbrown 0.13.2", + "log", + "regalloc2 0.6.1", + "smallvec", + "target-lexicon", +] + +[[package]] +name = "cranelift-codegen-meta" +version = "0.95.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8ac5ac30d62b2d66f12651f6b606dbdfd9c2cfd0908de6b387560a277c5c9da" +dependencies = [ + "cranelift-codegen-shared", +] + +[[package]] +name = "cranelift-codegen-shared" +version = "0.95.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd82b8b376247834b59ed9bdc0ddeb50f517452827d4a11bccf5937b213748b8" + [[package]] name = "cranelift-entity" version = "0.95.1" @@ -1380,6 +2219,51 @@ dependencies = [ "serde", ] +[[package]] +name = "cranelift-frontend" +version = "0.95.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64a25d9d0a0ae3079c463c34115ec59507b4707175454f0eee0891e83e30e82d" +dependencies = [ + "cranelift-codegen", + "log", + "smallvec", + "target-lexicon", +] + +[[package]] +name = "cranelift-isle" +version = "0.95.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80de6a7d0486e4acbd5f9f87ec49912bf4c8fb6aea00087b989685460d4469ba" + +[[package]] +name = "cranelift-native" +version = "0.95.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb6b03e0e03801c4b3fd8ce0758a94750c07a44e7944cc0ffbf0d3f2e7c79b00" +dependencies = [ + "cranelift-codegen", + "libc", + "target-lexicon", +] + +[[package]] +name = "cranelift-wasm" +version = "0.95.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff3220489a3d928ad91e59dd7aeaa8b3de18afb554a6211213673a71c90737ac" +dependencies = [ + "cranelift-codegen", + "cranelift-entity", + "cranelift-frontend", + "itertools 0.10.5", + "log", + "smallvec", + "wasmparser 0.102.0", + "wasmtime-types", +] + [[package]] name = "crc32fast" version = "1.4.2" @@ -1389,32 +2273,51 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "crossbeam-deque" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +dependencies = [ + "crossbeam-utils", +] + [[package]] name = "crossbeam-queue" -version = "0.3.11" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df0346b5d5e76ac2fe4e327c5fd1118d6be7c51dfb18f9b7922923f287471e35" +checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-utils" -version = "0.8.20" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" [[package]] name = "crossterm" -version = "0.27.0" +version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f476fe445d41c9e991fd07515a6f463074b782242ccf4a5b7b1d1012e70824df" +checksum = "829d955a0bb380ef178a640b91779e3987da38c9aea133b20614cfed8cdea9c6" dependencies = [ "bitflags 2.6.0", "crossterm_winapi", - "libc", - "mio 0.8.11", + "mio", "parking_lot", + "rustix 0.38.42", "signal-hook", "signal-hook-mio", "winapi", @@ -1469,213 +2372,542 @@ dependencies = [ ] [[package]] -name = "curve25519-dalek" -version = "3.2.0" +name = "crypto_secretbox" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b9fdf9972b2bd6af2d913799d9ebc165ea4d2e65878e329d9c6b372c4491b61" +checksum = "b9d6cf87adf719ddf43a805e92c6870a531aedda35ff640442cbaf8674e141e1" dependencies = [ - "byteorder", - "digest 0.9.0", - "rand_core 0.5.1", + "aead", + "cipher", + "generic-array", + "poly1305", + "salsa20", "subtle", "zeroize", ] [[package]] -name = "curve25519-dalek" -version = "4.1.3" +name = "ctr" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" +checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" dependencies = [ - "cfg-if", - "cpufeatures", - "curve25519-dalek-derive", - "digest 0.10.7", - "fiat-crypto", - "rustc_version", - "subtle", - "zeroize", + "cipher", ] [[package]] -name = "curve25519-dalek-derive" -version = "0.1.1" +name = "cumulus-pallet-aura-ext" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" +checksum = "2cbe2735fc7cf2b6521eab00cb1a1ab025abc1575cc36887b36dc8c5cb1c9434" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.77", + "cumulus-pallet-parachain-system", + "frame-support", + "frame-system", + "pallet-aura", + "pallet-timestamp", + "parity-scale-codec", + "scale-info", + "sp-application-crypto 38.0.0", + "sp-consensus-aura", + "sp-runtime 39.0.3", ] [[package]] -name = "cxx" -version = "1.0.128" +name = "cumulus-pallet-dmp-queue" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54ccead7d199d584d139148b04b4a368d1ec7556a1d9ea2548febb1b9d49f9a4" +checksum = "97263a8e758d201ebe81db7cea7b278b4fb869c11442f77acef70138ac1a252f" dependencies = [ - "cc", - "cxxbridge-flags", - "cxxbridge-macro", - "link-cplusplus", + "cumulus-primitives-core", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-io 38.0.0", + "sp-runtime 39.0.3", + "staging-xcm 14.2.0", ] [[package]] -name = "cxx-build" -version = "1.0.128" +name = "cumulus-pallet-parachain-system" +version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c77953e99f01508f89f55c494bfa867171ef3a6c8cea03d26975368f2121a5c1" +checksum = "546403ee1185f4051a74cc9c9d76e82c63cac3fb68e1bf29f61efb5604c96488" dependencies = [ - "cc", - "codespan-reporting", - "once_cell", - "proc-macro2", - "quote", - "scratch", - "syn 2.0.77", + "bytes", + "cumulus-pallet-parachain-system-proc-macro", + "cumulus-primitives-core", + "cumulus-primitives-parachain-inherent", + "cumulus-primitives-proof-size-hostfunction", + "environmental", + "frame-benchmarking", + "frame-support", + "frame-system", + "impl-trait-for-tuples", + "log", + "pallet-message-queue", + "parity-scale-codec", + "polkadot-parachain-primitives", + "polkadot-runtime-common", + "polkadot-runtime-parachains", + "scale-info", + "sp-core 34.0.0", + "sp-externalities 0.29.0", + "sp-inherents", + "sp-io 38.0.0", + "sp-runtime 39.0.3", + "sp-state-machine 0.43.0", + "sp-std", + "sp-trie 37.0.0", + "sp-version", + "staging-xcm 14.2.0", + "staging-xcm-builder", + "trie-db 0.29.1", ] [[package]] -name = "cxxbridge-flags" -version = "1.0.128" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65777e06cc48f0cb0152024c77d6cf9e4bdb4408e7b48bea993d42fa0f5b02b6" - -[[package]] -name = "cxxbridge-macro" -version = "1.0.128" +name = "cumulus-pallet-parachain-system-proc-macro" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98532a60dedaebc4848cb2cba5023337cc9ea3af16a5b062633fabfd9f18fb60" +checksum = "befbaf3a1ce23ac8476481484fef5f4d500cbd15b4dad6380ce1d28134b0c1f7" dependencies = [ + "proc-macro-crate 3.2.0", "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.90", ] [[package]] -name = "darling" -version = "0.14.4" +name = "cumulus-pallet-session-benchmarking" +version = "19.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b750cb3417fd1b327431a470f388520309479ab0bf5e323505daf0290cd3850" +checksum = "18168570689417abfb514ac8812fca7e6429764d01942750e395d7d8ce0716ef" dependencies = [ - "darling_core 0.14.4", - "darling_macro 0.14.4", + "frame-benchmarking", + "frame-support", + "frame-system", + "pallet-session", + "parity-scale-codec", + "sp-runtime 39.0.3", ] [[package]] -name = "darling" -version = "0.20.10" +name = "cumulus-pallet-solo-to-para" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" +checksum = "6f42c74548c8cab75da6f2479a953f044b582cfce98479862344a24df7bbd215" dependencies = [ - "darling_core 0.20.10", - "darling_macro 0.20.10", + "cumulus-pallet-parachain-system", + "frame-support", + "frame-system", + "pallet-sudo", + "parity-scale-codec", + "polkadot-primitives 16.0.0", + "scale-info", + "sp-runtime 39.0.3", ] [[package]] -name = "darling_core" -version = "0.14.4" +name = "cumulus-pallet-xcm" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0" +checksum = "e49231f6cd8274438b078305dc8ce44c54c0d3f4a28e902589bcbaa53d954608" dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim 0.10.0", - "syn 1.0.109", + "cumulus-primitives-core", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-io 38.0.0", + "sp-runtime 39.0.3", + "staging-xcm 14.2.0", ] [[package]] -name = "darling_core" -version = "0.20.10" +name = "cumulus-pallet-xcmp-queue" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" +checksum = "6f788bdac9474795ea13ba791b55798fb664b2e3da8c3a7385b480c9af4e6539" dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim 0.11.1", - "syn 2.0.77", + "bounded-collections", + "bp-xcm-bridge-hub-router", + "cumulus-primitives-core", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "pallet-message-queue", + "parity-scale-codec", + "polkadot-runtime-common", + "polkadot-runtime-parachains", + "scale-info", + "sp-core 34.0.0", + "sp-io 38.0.0", + "sp-runtime 39.0.3", + "staging-xcm 14.2.0", + "staging-xcm-builder", + "staging-xcm-executor", ] [[package]] -name = "darling_macro" -version = "0.14.4" +name = "cumulus-ping" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e" +checksum = "f47128f797359951723e2d106a80e592d007bb7446c299958cdbafb1489ddbf0" dependencies = [ - "darling_core 0.14.4", - "quote", - "syn 1.0.109", + "cumulus-pallet-xcm", + "cumulus-primitives-core", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-runtime 39.0.3", + "staging-xcm 14.2.0", ] [[package]] -name = "darling_macro" -version = "0.20.10" +name = "cumulus-primitives-aura" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" +checksum = "11e7825bcf3cc6c962a5b9b9f47e02dc381109e521d0bc00cad785c65da18471" dependencies = [ - "darling_core 0.20.10", - "quote", - "syn 2.0.77", + "parity-scale-codec", + "polkadot-core-primitives", + "polkadot-primitives 15.0.0", + "sp-api", + "sp-consensus-aura", + "sp-runtime 39.0.3", ] [[package]] -name = "data-encoding" -version = "2.6.0" +name = "cumulus-primitives-core" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2" +checksum = "9c6b5221a4a3097f2ebef66c84c1e6d7a0b8ec7e63f2bd5ae04c1e6d3fc7514e" +dependencies = [ + "parity-scale-codec", + "polkadot-core-primitives", + "polkadot-parachain-primitives", + "polkadot-primitives 16.0.0", + "scale-info", + "sp-api", + "sp-runtime 39.0.3", + "sp-trie 37.0.0", + "staging-xcm 14.2.0", +] [[package]] -name = "data-encoding-macro" -version = "0.1.15" +name = "cumulus-primitives-parachain-inherent" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1559b6cba622276d6d63706db152618eeb15b89b3e4041446b05876e352e639" +checksum = "842a694901e04a62d88995418dec35c22f7dba2b34d32d2b8de37d6b92f973ff" dependencies = [ - "data-encoding", - "data-encoding-macro-internal", + "async-trait", + "cumulus-primitives-core", + "parity-scale-codec", + "scale-info", + "sp-core 34.0.0", + "sp-inherents", + "sp-trie 37.0.0", ] [[package]] -name = "data-encoding-macro-internal" -version = "0.1.13" +name = "cumulus-primitives-proof-size-hostfunction" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "332d754c0af53bc87c108fed664d121ecf59207ec4196041f04d6ab9002ad33f" +checksum = "421f03af054aac7c89e87a49e47964886e53a8d7395990eab27b6f201d42524f" dependencies = [ - "data-encoding", - "syn 1.0.109", + "sp-externalities 0.29.0", + "sp-runtime-interface 28.0.0", + "sp-trie 37.0.0", ] [[package]] -name = "der" -version = "0.7.9" +name = "cumulus-primitives-storage-weight-reclaim" +version = "8.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0" +checksum = "6fc49dfec0ba3438afad73787736cc0dba88d15b5855881f12a4d8b812a72927" dependencies = [ - "const-oid", - "zeroize", + "cumulus-primitives-core", + "cumulus-primitives-proof-size-hostfunction", + "docify", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-runtime 39.0.3", ] [[package]] -name = "deranged" -version = "0.3.11" +name = "cumulus-primitives-timestamp" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +checksum = "33cffb8f010f39ac36b31d38994b8f9d9256d9b5e495d96b4ec59d3e30852d53" dependencies = [ - "powerfmt", - "serde", + "cumulus-primitives-core", + "sp-inherents", + "sp-timestamp", ] [[package]] -name = "derivative" -version = "2.2.0" +name = "cumulus-primitives-utility" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +checksum = "0bdcf4d46dd93f1e6d5dd6d379133566a44042ba6476d04bdcbdb4981c622ae4" dependencies = [ - "proc-macro2", - "quote", + "cumulus-primitives-core", + "frame-support", + "log", + "pallet-asset-conversion", + "parity-scale-codec", + "polkadot-runtime-common", + "sp-runtime 39.0.3", + "staging-xcm 14.2.0", + "staging-xcm-builder", + "staging-xcm-executor", +] + +[[package]] +name = "cumulus-test-relay-sproof-builder" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e570e41c3f05a8143ebff967bbb0c7dcaaa6f0bebd8639b9418b8005b13eda03" +dependencies = [ + "cumulus-primitives-core", + "parity-scale-codec", + "polkadot-primitives 16.0.0", + "sp-runtime 39.0.3", + "sp-state-machine 0.43.0", + "sp-trie 37.0.0", +] + +[[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" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" +dependencies = [ + "cfg-if", + "cpufeatures", + "curve25519-dalek-derive", + "digest 0.10.7", + "fiat-crypto", + "rustc_version 0.4.1", + "subtle", + "zeroize", +] + +[[package]] +name = "curve25519-dalek-derive" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.90", +] + +[[package]] +name = "cxx" +version = "1.0.135" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d44ff199ff93242c3afe480ab588d544dd08d72e92885e152ffebc670f076ad" +dependencies = [ + "cc", + "cxxbridge-cmd", + "cxxbridge-flags", + "cxxbridge-macro", + "foldhash", + "link-cplusplus", +] + +[[package]] +name = "cxx-build" +version = "1.0.135" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66fd8f17ad454fc1e4f4ab83abffcc88a532e90350d3ffddcb73030220fcbd52" +dependencies = [ + "cc", + "codespan-reporting", + "proc-macro2", + "quote", + "scratch", + "syn 2.0.90", +] + +[[package]] +name = "cxxbridge-cmd" +version = "1.0.135" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4717c9c806a9e07fdcb34c84965a414ea40fafe57667187052cf1eb7f5e8a8a9" +dependencies = [ + "clap", + "codespan-reporting", + "proc-macro2", + "quote", + "syn 2.0.90", +] + +[[package]] +name = "cxxbridge-flags" +version = "1.0.135" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f6515329bf3d98f4073101c7866ff2bec4e635a13acb82e3f3753fff0bf43cb" + +[[package]] +name = "cxxbridge-macro" +version = "1.0.135" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb93e6a7ce8ec985c02bbb758237a31598b340acbbc3c19c5a4fa6adaaac92ab" +dependencies = [ + "proc-macro2", + "quote", + "rustversion", + "syn 2.0.90", +] + +[[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.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" +dependencies = [ + "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", + "strsim 0.10.0", + "syn 1.0.109", +] + +[[package]] +name = "darling_core" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim 0.11.1", + "syn 2.0.90", +] + +[[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.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" +dependencies = [ + "darling_core 0.20.10", + "quote", + "syn 2.0.90", +] + +[[package]] +name = "data-encoding" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2" + +[[package]] +name = "data-encoding-macro" +version = "0.1.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1559b6cba622276d6d63706db152618eeb15b89b3e4041446b05876e352e639" +dependencies = [ + "data-encoding", + "data-encoding-macro-internal", +] + +[[package]] +name = "data-encoding-macro-internal" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "332d754c0af53bc87c108fed664d121ecf59207ec4196041f04d6ab9002ad33f" +dependencies = [ + "data-encoding", + "syn 1.0.109", +] + +[[package]] +name = "der" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0" +dependencies = [ + "const-oid", + "zeroize", +] + +[[package]] +name = "deranged" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +dependencies = [ + "powerfmt", + "serde", +] + +[[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", ] @@ -1687,7 +2919,7 @@ checksum = "d65d7ce8132b7c0e54497a4d9a55a1c2a0912a0d786cf894472ba818fba45762" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.90", ] [[package]] @@ -1698,18 +2930,18 @@ checksum = "62d671cc41a825ebabc75757b62d3d168c577f9149b2d49ece1dad1f72119d25" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.90", ] [[package]] name = "derive_arbitrary" -version = "1.3.2" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67e77553c4162a157adbf834ebae5b415acbecbeafc7a74b0e886657506a7611" +checksum = "30542c1ad912e0e3d22a1935c290e12e8a29d704a420177a31faad4a601a0800" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.90", ] [[package]] @@ -1721,8 +2953,29 @@ dependencies = [ "convert_case", "proc-macro2", "quote", - "rustc_version", - "syn 2.0.77", + "rustc_version 0.4.1", + "syn 2.0.90", +] + +[[package]] +name = "derive_more" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05" +dependencies = [ + "derive_more-impl", +] + +[[package]] +name = "derive_more-impl" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.90", + "unicode-xid", ] [[package]] @@ -1764,6 +3017,16 @@ dependencies = [ "subtle", ] +[[package]] +name = "directories-next" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "339ee130d97a610ea5a5872d2bbb130fdf68884ff09d3028b81bec8a1ac23bbc" +dependencies = [ + "cfg-if", + "dirs-sys-next", +] + [[package]] name = "dirs" version = "5.0.1" @@ -1785,6 +3048,17 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "dirs-sys-next" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" +dependencies = [ + "libc", + "redox_users", + "winapi", +] + [[package]] name = "displaydoc" version = "0.2.5" @@ -1793,7 +3067,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.90", ] [[package]] @@ -1804,18 +3078,18 @@ checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" [[package]] name = "docify" -version = "0.2.8" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a2f138ad521dc4a2ced1a4576148a6a610b4c5923933b062a263130a6802ce" +checksum = "a772b62b1837c8f060432ddcc10b17aae1453ef17617a99bc07789252d2a5896" dependencies = [ "docify_macros", ] [[package]] name = "docify_macros" -version = "0.2.8" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a081e51fb188742f5a7a1164ad752121abcb22874b21e2c3b0dd040c515fdad" +checksum = "60e6be249b0a462a14784a99b19bf35a667bb5e09de611738bb7362fa4c95ff7" dependencies = [ "common-path", "derive-syn-parse", @@ -1823,7 +3097,7 @@ dependencies = [ "proc-macro2", "quote", "regex", - "syn 2.0.77", + "syn 2.0.90", "termcolor", "toml 0.8.19", "walkdir", @@ -1847,6 +3121,12 @@ dependencies = [ "shared_child", ] +[[package]] +name = "dunce" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" + [[package]] name = "dyn-clonable" version = "0.9.0" @@ -1971,21 +3251,52 @@ dependencies = [ [[package]] name = "encode_unicode" -version = "0.3.6" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" +checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0" [[package]] name = "encoding_rs" -version = "0.8.34" +version = "0.8.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59" +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" dependencies = [ "cfg-if", ] [[package]] -name = "env_filter" +name = "enumflags2" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d232db7f5956f3f14313dc2f87985c58bd2c695ce124c8cdd984e08e15ac133d" +dependencies = [ + "enumflags2_derive", +] + +[[package]] +name = "enumflags2_derive" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de0d48a183585823424a4ce1aa132d174a6a81bd540895822eb4c8373a8e49e8" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.90", +] + +[[package]] +name = "enumn" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f9ed6b3789237c8a0c1c505af1c7eb2c560df6186f01b098c3a1064ea532f38" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.90", +] + +[[package]] +name = "env_filter" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4f2c92ceda6ceec50f43169f9ee8424fe2db276791afde7b2cd8bc084cb376ab" @@ -1994,6 +3305,19 @@ dependencies = [ "regex", ] +[[package]] +name = "env_logger" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd405aab171cb85d6735e5c8d9db038c17d3ca007a4d2c25f337935c3d90580" +dependencies = [ + "humantime", + "is-terminal", + "log", + "regex", + "termcolor", +] + [[package]] name = "env_logger" version = "0.11.5" @@ -2021,12 +3345,12 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "errno" -version = "0.3.9" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" +checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -2036,13 +3360,44 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5692dd7b5a1978a5aeb0ce83b7655c58ca8efdcb79d21036ea249da95afec2c6" [[package]] -name = "event-listener" -version = "4.0.3" +name = "ethabi-decode" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67b215c49b2b248c855fb73579eb1f4f26c38ffdc12973e20e07b91d78d5646e" +checksum = "09d398648d65820a727d6a81e58b962f874473396a047e4c30bafe3240953417" dependencies = [ - "concurrent-queue", - "pin-project-lite", + "ethereum-types", + "tiny-keccak", +] + +[[package]] +name = "ethbloom" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c22d4b5885b6aa2fe5e8b9329fb8d232bf739e434e6b87347c63bdd00c120f60" +dependencies = [ + "crunchy", + "fixed-hash", + "impl-codec 0.6.0", + "impl-rlp", + "impl-serde 0.4.0", + "scale-info", + "tiny-keccak", +] + +[[package]] +name = "ethereum-types" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02d215cbf040552efcbe99a38372fe80ab9d00268e20012b79fcd0f073edd8ee" +dependencies = [ + "ethbloom", + "fixed-hash", + "impl-codec 0.6.0", + "impl-rlp", + "impl-serde 0.4.0", + "primitive-types 0.12.2", + "scale-info", + "uint 0.9.5", ] [[package]] @@ -2058,11 +3413,11 @@ dependencies = [ [[package]] name = "event-listener-strategy" -version = "0.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f214dc438f977e6d4e3500aaa277f5ad94ca83fbbd9b1a15713ce2344ccc5a1" +checksum = "3c3e4e0dd3673c1139bf041f3008816d9cf2946bbfac2945c09e523b8d7b05b2" dependencies = [ - "event-listener 5.3.1", + "event-listener", "pin-project-lite", ] @@ -2078,7 +3433,7 @@ dependencies = [ "prettyplease", "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.90", ] [[package]] @@ -2087,11 +3442,39 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" +[[package]] +name = "fallible-iterator" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2acce4a10f12dc2fb14a218589d4f1f62ef011b2d0cc4b3cb1bba8e94da14649" + [[package]] name = "fastrand" -version = "2.1.1" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" + +[[package]] +name = "fastrlp" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "139834ddba373bbdd213dffe02c8d110508dcf1726c2be27e8d1f7d7e1856418" +dependencies = [ + "arrayvec 0.7.6", + "auto_impl", + "bytes", +] + +[[package]] +name = "fastrlp" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8c02a5121d4ea3eb16a80748c74f5549a5665e4c21333c6098f283870fbdea6" +checksum = "ce8dba4714ef14b8274c371879b175aa55b16b30f269663f19d576f380018dc4" +dependencies = [ + "arrayvec 0.7.6", + "auto_impl", + "bytes", +] [[package]] name = "ff" @@ -2119,6 +3502,16 @@ dependencies = [ "winapi", ] +[[package]] +name = "file-per-thread-logger" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84f2e425d9790201ba4af4630191feac6dcc98765b118d4d18e91d23c2353866" +dependencies = [ + "env_logger 0.10.2", + "log", +] + [[package]] name = "filetime" version = "0.2.25" @@ -2132,13 +3525,19 @@ dependencies = [ ] [[package]] -name = "finito" -version = "0.1.0" +name = "finality-grandpa" +version = "0.16.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2384245d85162258a14b43567a9ee3598f5ae746a1581fb5d3d2cb780f0dbf95" +checksum = "36530797b9bf31cd4ff126dcfee8170f86b00cfdcea3269d73133cc0415945c3" dependencies = [ + "either", + "futures", "futures-timer", - "pin-project", + "log", + "num-traits", + "parity-scale-codec", + "parking_lot", + "scale-info", ] [[package]] @@ -2155,29 +3554,26 @@ dependencies = [ [[package]] name = "flate2" -version = "1.0.33" +version = "1.0.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "324a1be68054ef05ad64b861cc9eaf1d623d2d8cb25b4bf2cb9cdd902b4bf253" +checksum = "c936bfdafb507ebbf50b8074c54fa31c5be9a1e7e5f467dd659697041407d07c" dependencies = [ "crc32fast", "miniz_oxide", ] -[[package]] -name = "float-cmp" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4" -dependencies = [ - "num-traits", -] - [[package]] name = "fnv" version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" +[[package]] +name = "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" @@ -2203,159 +3599,432 @@ dependencies = [ ] [[package]] -name = "frame-metadata" -version = "15.1.0" +name = "frame-benchmarking" +version = "38.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "878babb0b136e731cc77ec2fd883ff02745ff21e6fb662729953d44923df009c" +checksum = "a01bdd47c2d541b38bd892da647d1e972c9d85b4ecd7094ad64f7600175da54d" dependencies = [ - "cfg-if", + "frame-support", + "frame-support-procedural", + "frame-system", + "linregress", + "log", "parity-scale-codec", + "paste", "scale-info", + "serde", + "sp-api", + "sp-application-crypto 38.0.0", + "sp-core 34.0.0", + "sp-io 38.0.0", + "sp-runtime 39.0.3", + "sp-runtime-interface 28.0.0", + "sp-storage 21.0.0", + "static_assertions", ] [[package]] -name = "frame-metadata" -version = "16.0.0" +name = "frame-benchmarking-pallet-pov" +version = "28.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cf1549fba25a6fcac22785b61698317d958e96cac72a59102ea45b9ae64692" +checksum = "6ffde6f573a63eeb1ccb7d2667c5741a11ce93bc30f33712e5326b9d8a811c29" dependencies = [ - "cfg-if", + "frame-benchmarking", + "frame-support", + "frame-system", "parity-scale-codec", "scale-info", - "serde", + "sp-io 38.0.0", + "sp-runtime 39.0.3", ] [[package]] -name = "fs-err" -version = "2.11.0" +name = "frame-decode" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88a41f105fe1d5b6b34b2055e3dc59bb79b46b48b2040b9e6c7b4b5de097aa41" +checksum = "02d3379df61ff3dd871e2dde7d1bcdc0263e613c21c7579b149fd4f0ad9b1dc2" dependencies = [ - "autocfg", + "frame-metadata 17.0.0", + "parity-scale-codec", + "scale-decode 0.14.0", + "scale-info", + "scale-type-resolver 0.2.0", + "sp-crypto-hashing", ] [[package]] -name = "funty" -version = "2.0.0" +name = "frame-election-provider-solution-type" +version = "14.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" +checksum = "8156f209055d352994ecd49e19658c6b469d7c6de923bd79868957d0dcfb6f71" +dependencies = [ + "proc-macro-crate 3.2.0", + "proc-macro2", + "quote", + "syn 2.0.90", +] [[package]] -name = "futures" -version = "0.3.30" +name = "frame-election-provider-support" +version = "38.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" +checksum = "c36f5116192c63d39f1b4556fa30ac7db5a6a52575fa241b045f7dfa82ecc2be" dependencies = [ - "futures-channel", - "futures-core", - "futures-executor", - "futures-io", - "futures-sink", - "futures-task", - "futures-util", + "frame-election-provider-solution-type", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-arithmetic", + "sp-core 34.0.0", + "sp-npos-elections", + "sp-runtime 39.0.3", ] [[package]] -name = "futures-channel" -version = "0.3.30" +name = "frame-executive" +version = "38.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" +checksum = "c365bf3879de25bbee28e9584096955a02fbe8d7e7624e10675800317f1cee5b" dependencies = [ - "futures-core", - "futures-sink", + "aquamarine", + "frame-support", + "frame-system", + "frame-try-runtime", + "log", + "parity-scale-codec", + "scale-info", + "sp-core 34.0.0", + "sp-io 38.0.0", + "sp-runtime 39.0.3", + "sp-tracing 17.0.1", ] [[package]] -name = "futures-core" -version = "0.3.30" +name = "frame-metadata" +version = "16.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" +checksum = "87cf1549fba25a6fcac22785b61698317d958e96cac72a59102ea45b9ae64692" +dependencies = [ + "cfg-if", + "parity-scale-codec", + "scale-info", + "serde", +] [[package]] -name = "futures-executor" -version = "0.3.30" +name = "frame-metadata" +version = "17.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" +checksum = "701bac17e9b55e0f95067c428ebcb46496587f08e8cf4ccc0fe5903bea10dbb8" dependencies = [ - "futures-core", - "futures-task", - "futures-util", - "num_cpus", + "cfg-if", + "parity-scale-codec", + "scale-info", + "serde", ] [[package]] -name = "futures-io" -version = "0.3.30" +name = "frame-metadata-hash-extension" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" +checksum = "56ac71dbd97039c49fdd69f416a4dd5d8da3652fdcafc3738b45772ad79eb4ec" +dependencies = [ + "array-bytes", + "docify", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-runtime 39.0.3", +] [[package]] -name = "futures-lite" -version = "2.3.0" +name = "frame-support" +version = "38.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52527eb5074e35e9339c6b4e8d12600c7128b68fb25dcb9fa9dec18f7c25f3a5" +checksum = "1e44af69fa61bc5005ffe0339e198957e77f0f255704a9bee720da18a733e3dc" dependencies = [ - "fastrand", - "futures-core", - "futures-io", - "parking", - "pin-project-lite", + "aquamarine", + "array-bytes", + "bitflags 1.3.2", + "docify", + "environmental", + "frame-metadata 16.0.0", + "frame-support-procedural", + "impl-trait-for-tuples", + "k256", + "log", + "macro_magic", + "parity-scale-codec", + "paste", + "scale-info", + "serde", + "serde_json", + "smallvec", + "sp-api", + "sp-arithmetic", + "sp-core 34.0.0", + "sp-crypto-hashing-proc-macro", + "sp-debug-derive", + "sp-genesis-builder", + "sp-inherents", + "sp-io 38.0.0", + "sp-metadata-ir", + "sp-runtime 39.0.3", + "sp-staking 36.0.0", + "sp-state-machine 0.43.0", + "sp-std", + "sp-tracing 17.0.1", + "sp-weights", + "static_assertions", + "tt-call", ] [[package]] -name = "futures-macro" -version = "0.3.30" +name = "frame-support-procedural" +version = "30.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" +checksum = "5e8f9b6bc1517a6fcbf0b2377e5c8c6d39f5bb7862b191a59a9992081d63972d" dependencies = [ + "Inflector", + "cfg-expr", + "derive-syn-parse", + "expander", + "frame-support-procedural-tools", + "itertools 0.11.0", + "macro_magic", + "proc-macro-warning", "proc-macro2", "quote", - "syn 2.0.77", + "sp-crypto-hashing", + "syn 2.0.90", ] [[package]] -name = "futures-sink" -version = "0.3.30" +name = "frame-support-procedural-tools" +version = "13.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" +checksum = "bead15a320be1764cdd50458c4cfacb23e0cee65f64f500f8e34136a94c7eeca" +dependencies = [ + "frame-support-procedural-tools-derive", + "proc-macro-crate 3.2.0", + "proc-macro2", + "quote", + "syn 2.0.90", +] [[package]] -name = "futures-task" -version = "0.3.30" +name = "frame-support-procedural-tools-derive" +version = "12.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" +checksum = "ed971c6435503a099bdac99fe4c5bea08981709e5b5a0a8535a1856f48561191" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.90", +] [[package]] -name = "futures-timer" -version = "3.0.3" +name = "frame-system" +version = "38.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" +checksum = "e3c7fa02f8c305496d2ae52edaecdb9d165f11afa965e05686d7d7dd1ce93611" +dependencies = [ + "cfg-if", + "docify", + "frame-support", + "log", + "parity-scale-codec", + "scale-info", + "serde", + "sp-core 34.0.0", + "sp-io 38.0.0", + "sp-runtime 39.0.3", + "sp-std", + "sp-version", + "sp-weights", +] [[package]] -name = "futures-util" -version = "0.3.30" +name = "frame-system-benchmarking" +version = "38.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +checksum = "9693b2a736beb076e673520e1e8dee4fc128b8d35b020ef3e8a4b1b5ad63d9f2" dependencies = [ - "futures-channel", - "futures-core", - "futures-io", - "futures-macro", - "futures-sink", - "futures-task", - "memchr", - "pin-project-lite", - "pin-utils", - "slab", + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-core 34.0.0", + "sp-runtime 39.0.3", ] [[package]] -name = "generic-array" -version = "0.14.7" +name = "frame-system-rpc-runtime-api" +version = "34.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +checksum = "475c4f8604ba7e4f05cd2c881ba71105093e638b9591ec71a8db14a64b3b4ec3" dependencies = [ - "typenum", + "docify", + "parity-scale-codec", + "sp-api", +] + +[[package]] +name = "frame-try-runtime" +version = "0.44.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83c811a5a1f5429c7fb5ebbf6cf9502d8f9b673fd395c12cf46c44a30a7daf0e" +dependencies = [ + "frame-support", + "parity-scale-codec", + "sp-api", + "sp-runtime 39.0.3", +] + +[[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" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" + +[[package]] +name = "futures" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" + +[[package]] +name = "futures-executor" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", + "num_cpus", +] + +[[package]] +name = "futures-io" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" + +[[package]] +name = "futures-lite" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cef40d21ae2c515b51041df9ed313ed21e572df340ea58a922a0aefe7e8891a1" +dependencies = [ + "fastrand", + "futures-core", + "futures-io", + "parking", + "pin-project-lite", +] + +[[package]] +name = "futures-macro" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.90", +] + +[[package]] +name = "futures-sink" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" + +[[package]] +name = "futures-task" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" + +[[package]] +name = "futures-timer" +version = "3.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" + +[[package]] +name = "futures-util" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "fxhash" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" +dependencies = [ + "byteorder", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", "version_check", "zeroize", ] @@ -2381,22 +4050,42 @@ dependencies = [ "rand_core 0.6.4", ] +[[package]] +name = "ghash" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0d8a4362ccb29cb0b265253fb0a2728f592895ee6854fd9bc13f2ffda266ff1" +dependencies = [ + "opaque-debug", + "polyval", +] + [[package]] name = "gimli" version = "0.27.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6c80984affa11d98d1b88b66ac8853f143217b399d3c74116778ff8fdb4ed2e" dependencies = [ - "fallible-iterator", + "fallible-iterator 0.2.0", "indexmap 1.9.3", "stable_deref_trait", ] [[package]] name = "gimli" -version = "0.31.0" +version = "0.28.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" +dependencies = [ + "fallible-iterator 0.3.0", + "stable_deref_trait", +] + +[[package]] +name = "gimli" +version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32085ea23f3234fc7846555e85283ba4de91e21016dc0455a16286d87a292d64" +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" [[package]] name = "git2" @@ -2462,7 +4151,7 @@ dependencies = [ "futures-sink", "futures-util", "http 0.2.12", - "indexmap 2.5.0", + "indexmap 2.7.0", "slab", "tokio", "tokio-util", @@ -2471,17 +4160,17 @@ dependencies = [ [[package]] name = "h2" -version = "0.4.6" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524e8ac6999421f49a846c2d4411f337e53497d8ec55d67753beffa43c5d9205" +checksum = "ccae279728d634d083c00f6099cb58f01cc99c145b84b8be2f6c74618d79922e" dependencies = [ "atomic-waker", "bytes", "fnv", "futures-core", "futures-sink", - "http 1.1.0", - "indexmap 2.5.0", + "http 1.2.0", + "indexmap 2.7.0", "slab", "tokio", "tokio-util", @@ -2532,6 +4221,17 @@ dependencies = [ "serde", ] +[[package]] +name = "hashbrown" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" +dependencies = [ + "allocator-api2", + "equivalent", + "foldhash", +] + [[package]] name = "heck" version = "0.4.1" @@ -2568,6 +4268,21 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "212ab92002354b4819390025006c897e8140934349e8635c9b077f47b4dcbd20" +[[package]] +name = "hex-conservative" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5313b072ce3c597065a808dbf612c4c8e8590bdbf8b579508bf7a762c5eae6cd" +dependencies = [ + "arrayvec 0.7.6", +] + +[[package]] +name = "hex-literal" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fe2267d4ed49bc07b63801559be28c718ea06c4738b7a03c94df7386d2cde46" + [[package]] name = "hkdf" version = "0.12.4" @@ -2609,11 +4324,11 @@ dependencies = [ [[package]] name = "home" -version = "0.5.9" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" +checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -2629,9 +4344,9 @@ dependencies = [ [[package]] name = "http" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" +checksum = "f16ca2af56261c99fba8bac40a10251ce8188205a4c448fbb745a2e4daa76fea" dependencies = [ "bytes", "fnv", @@ -2656,7 +4371,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ "bytes", - "http 1.1.0", + "http 1.2.0", ] [[package]] @@ -2667,7 +4382,7 @@ checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" dependencies = [ "bytes", "futures-util", - "http 1.1.0", + "http 1.2.0", "http-body 1.0.1", "pin-project-lite", ] @@ -2678,11 +4393,17 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "add0ab9360ddbd88cfeb3bd9574a1d85cfdfa14db10b3e21d3700dbc4328758f" +[[package]] +name = "http-range-header" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9171a2ea8a68358193d15dd5d70c1c10a2afc3e7e4c5bc92bc9f025cebd7359c" + [[package]] name = "httparse" -version = "1.9.4" +version = "1.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fcc0b4a115bf80b728eb8ea024ad5bd707b615bfed49e0665b6e0f86fd082d9" +checksum = "7d71d3574edd2771538b901e6549113b4006ece66150fb69c0fb6d9a2adae946" [[package]] name = "httpdate" @@ -2707,9 +4428,9 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "hyper" -version = "0.14.30" +version = "0.14.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a152ddd61dfaec7273fe8419ab357f33aee0d914c5f4efbf0d96fa749eea5ec9" +checksum = "41dfc780fdec9373c01bae43289ea34c972e40ee3c9f6b3c8801a35f35586ce7" dependencies = [ "bytes", "futures-channel", @@ -2731,15 +4452,15 @@ dependencies = [ [[package]] name = "hyper" -version = "1.4.1" +version = "1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50dfd22e0e76d0f662d429a5f80fcaf3855009297eab6a0a9f8543834744ba05" +checksum = "256fb8d4bd6413123cc9d91832d78325c48ff41677595be797d90f42969beae0" dependencies = [ "bytes", "futures-channel", "futures-util", - "h2 0.4.6", - "http 1.1.0", + "h2 0.4.7", + "http 1.2.0", "http-body 1.0.1", "httparse", "httpdate", @@ -2757,7 +4478,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "73b7d8abf35697b81a825e386fc151e0d503e8cb5fcb93cc8669c376dfd6f278" dependencies = [ "hex", - "hyper 1.4.1", + "hyper 1.5.2", "hyper-util", "pin-project-lite", "tokio", @@ -2773,7 +4494,7 @@ checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" dependencies = [ "futures-util", "http 0.2.12", - "hyper 0.14.30", + "hyper 0.14.32", "log", "rustls 0.21.12", "rustls-native-certs 0.6.3", @@ -2783,18 +4504,18 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.27.3" +version = "0.27.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08afdbb5c31130e3034af566421053ab03787c640246a446327f550d11bcb333" +checksum = "f6884a48c6826ec44f524c7456b163cebe9e55a18d7b5e307cb4f100371cc767" dependencies = [ "futures-util", - "http 1.1.0", - "hyper 1.4.1", + "http 1.2.0", + "hyper 1.5.2", "hyper-util", - "rustls 0.23.13", + "rustls 0.23.20", "rustls-pki-types", "tokio", - "tokio-rustls 0.26.0", + "tokio-rustls 0.26.1", "tower-service", ] @@ -2804,7 +4525,7 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1" dependencies = [ - "hyper 0.14.30", + "hyper 0.14.32", "pin-project-lite", "tokio", "tokio-io-timeout", @@ -2817,7 +4538,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" dependencies = [ "bytes", - "hyper 0.14.30", + "hyper 0.14.32", "native-tls", "tokio", "tokio-native-tls", @@ -2831,7 +4552,7 @@ checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" dependencies = [ "bytes", "http-body-util", - "hyper 1.4.1", + "hyper 1.5.2", "hyper-util", "native-tls", "tokio", @@ -2841,33 +4562,32 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.8" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da62f120a8a37763efb0cf8fdf264b884c7b8b9ac8660b900c8661030c00e6ba" +checksum = "df2dcfbe0677734ab2f3ffa7fa7bfd4706bfdc1ef393f2ee30184aed67e631b4" dependencies = [ "bytes", "futures-channel", "futures-util", - "http 1.1.0", + "http 1.2.0", "http-body 1.0.1", - "hyper 1.4.1", + "hyper 1.5.2", "pin-project-lite", "socket2", "tokio", - "tower", "tower-service", "tracing", ] [[package]] -name = "hyperlocal-next" -version = "0.9.0" +name = "hyperlocal" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acf569d43fa9848e510358c07b80f4adf34084ddc28c6a4a651ee8474c070dcc" +checksum = "986c5ce3b994526b3cd75578e62554abd09f0899d6206de48b3e96ab34ccc8c7" dependencies = [ "hex", "http-body-util", - "hyper 1.4.1", + "hyper 1.5.2", "hyper-util", "pin-project-lite", "tokio", @@ -2876,9 +4596,9 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.60" +version = "0.1.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" dependencies = [ "android_system_properties", "core-foundation-sys", @@ -2898,160 +4618,336 @@ dependencies = [ ] [[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.5.0" +name = "icu_collections" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" dependencies = [ - "unicode-bidi", - "unicode-normalization", + "displaydoc", + "yoke", + "zerofrom", + "zerovec", ] [[package]] -name = "impl-codec" -version = "0.6.0" +name = "icu_locid" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba6a270039626615617f3f36d15fc827041df3b78c439da2cadfa47455a77f2f" +checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" dependencies = [ - "parity-scale-codec", + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", ] [[package]] -name = "impl-serde" -version = "0.4.0" +name = "icu_locid_transform" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc88fc67028ae3db0c853baa36269d398d5f45b6982f95549ff5def78c935cd" +checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" dependencies = [ - "serde", + "displaydoc", + "icu_locid", + "icu_locid_transform_data", + "icu_provider", + "tinystr", + "zerovec", ] [[package]] -name = "impl-trait-for-tuples" -version = "0.2.2" +name = "icu_locid_transform_data" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11d7a9f6330b71fea57921c9b61c47ee6e84f72d394754eff6163ae67e7395eb" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] +checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" [[package]] -name = "indent_write" -version = "2.2.0" +name = "icu_normalizer" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cfe9645a18782869361d9c8732246be7b410ad4e919d3609ebabdac00ba12c3" +checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "utf16_iter", + "utf8_iter", + "write16", + "zerovec", +] [[package]] -name = "indexmap" -version = "1.9.3" +name = "icu_normalizer_data" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" -dependencies = [ - "autocfg", - "hashbrown 0.12.3", - "serde", -] +checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" [[package]] -name = "indexmap" -version = "2.5.0" +name = "icu_properties" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68b900aa2f7301e21c36462b170ee99994de34dff39a4a6a528e80e7376d07e5" +checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" dependencies = [ - "equivalent", - "hashbrown 0.14.5", - "serde", + "displaydoc", + "icu_collections", + "icu_locid_transform", + "icu_properties_data", + "icu_provider", + "tinystr", + "zerovec", ] [[package]] -name = "indexmap-nostd" -version = "0.4.0" +name = "icu_properties_data" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e04e2fd2b8188ea827b32ef11de88377086d690286ab35747ef7f9bf3ccb590" +checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" [[package]] -name = "indicatif" -version = "0.17.8" +name = "icu_provider" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "763a5a8f45087d6bcea4222e7b72c291a054edf80e4ef6efd2a4979878c7bea3" +checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" dependencies = [ - "console", - "instant", - "number_prefix", - "portable-atomic", - "unicode-width", + "displaydoc", + "icu_locid", + "icu_provider_macros", + "stable_deref_trait", + "tinystr", + "writeable", + "yoke", + "zerofrom", + "zerovec", ] [[package]] -name = "ink_allocator" -version = "5.0.0" +name = "icu_provider_macros" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cee56055bac6d928d425e944c5f3b69baa33c9635822fd1c00cd4afc70fde3e" +checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" dependencies = [ - "cfg-if", + "proc-macro2", + "quote", + "syn 2.0.90", ] [[package]] -name = "ink_engine" -version = "5.0.0" +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "idna" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" +dependencies = [ + "icu_normalizer", + "icu_properties", +] + +[[package]] +name = "impl-codec" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba6a270039626615617f3f36d15fc827041df3b78c439da2cadfa47455a77f2f" +dependencies = [ + "parity-scale-codec", +] + +[[package]] +name = "impl-codec" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b67aa010c1e3da95bf151bd8b4c059b2ed7e75387cdb969b4f8f2723a43f9941" +dependencies = [ + "parity-scale-codec", +] + +[[package]] +name = "impl-rlp" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f28220f89297a075ddc7245cd538076ee98b01f2a9c23a53a4f1105d5a322808" +dependencies = [ + "rlp", +] + +[[package]] +name = "impl-serde" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc88fc67028ae3db0c853baa36269d398d5f45b6982f95549ff5def78c935cd" +dependencies = [ + "serde", +] + +[[package]] +name = "impl-serde" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a143eada6a1ec4aefa5049037a26a6d597bfd64f8c026d07b77133e02b7dd0b" +dependencies = [ + "serde", +] + +[[package]] +name = "impl-trait-for-tuples" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0eb5a3343abf848c0984fe4604b2b105da9539376e24fc0a3b0007411ae4fd9" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.90", +] + +[[package]] +name = "include_dir" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "923d117408f1e49d914f1a379a309cffe4f18c05cf4e3d12e613a15fc81bd0dd" +dependencies = [ + "include_dir_macros", +] + +[[package]] +name = "include_dir_macros" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cab85a7ed0bd5f0e76d93846e0147172bed2e2d3f859bcc33a8d9699cad1a75" +dependencies = [ + "proc-macro2", + "quote", +] + +[[package]] +name = "indent_write" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0cfe9645a18782869361d9c8732246be7b410ad4e919d3609ebabdac00ba12c3" + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", + "serde", +] + +[[package]] +name = "indexmap" +version = "2.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62f822373a4fe84d4bb149bf54e584a7f4abec90e072ed49cda0edea5b95471f" +dependencies = [ + "equivalent", + "hashbrown 0.15.2", + "serde", +] + +[[package]] +name = "indexmap-nostd" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e04e2fd2b8188ea827b32ef11de88377086d690286ab35747ef7f9bf3ccb590" + +[[package]] +name = "indicatif" +version = "0.17.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbf675b85ed934d3c67b5c5469701eec7db22689d0a2139d856e0925fa28b281" +dependencies = [ + "console", + "number_prefix", + "portable-atomic", + "unicode-width 0.2.0", + "web-time", +] + +[[package]] +name = "ink_allocator" +version = "5.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ec348ce75d284bc2e698187dc01da416a52dfa2d685e2a57d04e9e580447df0" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "ink_engine" +version = "5.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f357e2e867f4e222ffc4015a6e61d1073548de89f70a4e36a8b0385562777fa" +checksum = "d273f2aa983d04a6476d3c5ac76ddbef07555664b88f923996e7465e261dda48" dependencies = [ "blake2", - "derive_more", + "derive_more 1.0.0", "ink_primitives", - "pallet-contracts-uapi-next", + "pallet-contracts-uapi 9.0.0", "parity-scale-codec", - "secp256k1", + "secp256k1 0.28.2", "sha2 0.10.8", "sha3", ] [[package]] name = "ink_env" -version = "5.0.0" +version = "5.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42cec50b7e4f8406aab25801b015d3802a52d76cfbe48ce11cfb4200fa88e296" +checksum = "f9ee6089a1836c2e92d00be97d42308b7fb2c2b51ff6150b1130166a58107092" dependencies = [ "blake2", "cfg-if", "const_env", - "derive_more", + "derive_more 1.0.0", "ink_allocator", "ink_engine", "ink_prelude", "ink_primitives", "ink_storage_traits", "num-traits", - "pallet-contracts-uapi-next", + "pallet-contracts-uapi 9.0.0", "parity-scale-codec", "paste", "rlibc", - "scale-decode 0.10.0", - "scale-encode 0.5.0", + "scale-decode 0.11.1", + "scale-encode 0.6.0", "scale-info", "schnorrkel", - "secp256k1", + "secp256k1 0.28.2", "sha2 0.10.8", "sha3", + "staging-xcm 11.0.0", "static_assertions", ] [[package]] name = "ink_metadata" -version = "5.0.0" +version = "5.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a98fcc0ff9292ff68c7ee7b84c93533c9ff13859ec3b148faa822e2da9954fe6" +checksum = "27135c651274087ba0578d2c07866c31d8dd481ae8de5bb7295fe3931491aa80" dependencies = [ - "derive_more", - "impl-serde", + "derive_more 1.0.0", + "impl-serde 0.4.0", "ink_prelude", "ink_primitives", "linkme", @@ -3063,33 +4959,33 @@ dependencies = [ [[package]] name = "ink_prelude" -version = "5.0.0" +version = "5.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea1734d058c80aa72e59c8ae75624fd8a51791efba21469f273156c0f4cad5c9" +checksum = "b29c9b7f686f4305f523bca5e2ae6f22a09531ec2bf0a9498cdc877959f70ad0" dependencies = [ "cfg-if", ] [[package]] name = "ink_primitives" -version = "5.0.0" +version = "5.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11ec35ef7f45e67a53b6142d7e7f18e6d9292d76c3a2a1da14cf8423e481813d" +checksum = "a530c1b352a53176ea718f3a65f15003e54e0474ec12353ea0e0e5bb60b25741" dependencies = [ - "derive_more", + "derive_more 1.0.0", "ink_prelude", "parity-scale-codec", - "scale-decode 0.10.0", - "scale-encode 0.5.0", + "scale-decode 0.11.1", + "scale-encode 0.6.0", "scale-info", "xxhash-rust", ] [[package]] name = "ink_storage_traits" -version = "5.0.0" +version = "5.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83ce49e3d2935fc1ec3e73117119712b187d3123339f6a31624e92f75fa2293d" +checksum = "fde9b3f4a1e355682e5d13fd5639e5da4d0a2029537292e05a4255ea1169663e" dependencies = [ "ink_metadata", "ink_prelude", @@ -3138,9 +5034,39 @@ dependencies = [ [[package]] name = "ipnet" -version = "2.10.0" +version = "2.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddc24109865250148c2e0f3d25d4f0f479571723792d3802153c60922a4fb708" + +[[package]] +name = "is-docker" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "928bae27f42bc99b60d9ac7334e3a21d10ad8f1835a4e12ec3ec0464765ed1b3" +dependencies = [ + "once_cell", +] + +[[package]] +name = "is-terminal" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "261f68e344040fbd0edea105bef17c66edf46f984ddb1115b775ce31be948f4b" +dependencies = [ + "hermit-abi 0.4.0", + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "is-wsl" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "187674a687eed5fe42285b40c6291f9a01517d415fad1c3cbc6a9f778af7fcd4" +checksum = "173609498df190136aa7dea1a91db051746d339e18476eed5ca40521f02d7aa5" +dependencies = [ + "is-docker", + "once_cell", +] [[package]] name = "is_terminal_polyfill" @@ -3159,18 +5085,27 @@ dependencies = [ [[package]] name = "itertools" -version = "0.12.1" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" dependencies = [ "either", ] [[package]] name = "itoa" -version = "1.0.11" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" +checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" [[package]] name = "jni" @@ -3182,7 +5117,7 @@ dependencies = [ "combine", "jni-sys", "log", - "thiserror", + "thiserror 1.0.69", "walkdir", ] @@ -3209,10 +5144,11 @@ checksum = "72167d68f5fce3b8655487b8038691a3c9984ee769590f93f2a631f4ad64e4f5" [[package]] name = "js-sys" -version = "0.3.70" +version = "0.3.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1868808506b929d7b0cfa8f75951347aa71bb21144b7791bae35d9bccfcfe37a" +checksum = "6717b6b5b077764fb5966237269cb3c64edddde4b14ce42647430a78ced9e7b7" dependencies = [ + "once_cell", "wasm-bindgen", ] @@ -3224,7 +5160,7 @@ checksum = "ec9ad60d674508f3ca8f380a928cfe7b096bc729c4e2dbfe3852bc45da3ab30b" dependencies = [ "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -3237,71 +5173,39 @@ dependencies = [ "pest_derive", "regex", "serde_json", - "thiserror", -] - -[[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", + "thiserror 1.0.69", ] [[package]] name = "jsonrpsee" -version = "0.23.2" +version = "0.24.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b089779ad7f80768693755a031cc14a7766aba707cbe886674e3f79e9b7e47" +checksum = "c5c71d8c1a731cc4227c2f698d377e7848ca12c8a48866fc5e6951c43a4db843" dependencies = [ - "jsonrpsee-core 0.23.2", - "jsonrpsee-types 0.23.2", + "jsonrpsee-client-transport", + "jsonrpsee-core", + "jsonrpsee-types", "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.3", - "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" +version = "0.24.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08163edd8bcc466c33d79e10f695cdc98c00d1e6ddfb95cec41b6b0279dd5432" +checksum = "548125b159ba1314104f5bb5f38519e03a41862786aa3925cf349aae9cdd546e" dependencies = [ "base64 0.22.1", "futures-util", - "http 1.1.0", - "jsonrpsee-core 0.23.2", + "http 1.2.0", + "jsonrpsee-core", "pin-project", - "rustls 0.23.13", + "rustls 0.23.20", "rustls-pki-types", "rustls-platform-verifier", - "soketto 0.8.0", - "thiserror", + "soketto", + "thiserror 1.0.69", "tokio", - "tokio-rustls 0.26.0", + "tokio-rustls 0.26.1", "tokio-util", "tracing", "url", @@ -3309,113 +5213,54 @@ dependencies = [ [[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.30", - "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" +version = "0.24.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79712302e737d23ca0daa178e752c9334846b08321d439fd89af9a384f8c830b" +checksum = "f2882f6f8acb9fdaec7cefc4fd607119a9bd709831df7d7672a1d3b644628280" dependencies = [ - "anyhow", "async-trait", - "beef", "futures-timer", "futures-util", - "jsonrpsee-types 0.23.2", + "jsonrpsee-types", "pin-project", - "rustc-hash", + "rustc-hash 2.1.0", "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", "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.30", - "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" +version = "0.24.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "150d6168405890a7a3231a3c74843f58b8959471f6df76078db2619ddee1d07d" +checksum = "a178c60086f24cc35bb82f57c651d0d25d99c4742b4d335de04e97fa1f08a8a1" 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", + "http 1.2.0", "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", ] [[package]] name = "jsonrpsee-ws-client" -version = "0.23.2" +version = "0.24.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c28759775f5cb2f1ea9667672d3fe2b0e701d1f4b7b67954e60afe7fd058b5e" +checksum = "0fe322e0896d0955a3ebdd5bf813571c53fea29edd713bc315b76620b327e86d" dependencies = [ - "http 1.1.0", - "jsonrpsee-client-transport 0.23.2", - "jsonrpsee-core 0.23.2", - "jsonrpsee-types 0.23.2", + "http 1.2.0", + "jsonrpsee-client-transport", + "jsonrpsee-core", + "jsonrpsee-types", "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", @@ -3448,6 +5293,16 @@ dependencies = [ "cpufeatures", ] +[[package]] +name = "keccak-hash" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e1b8590eb6148af2ea2d75f38e7d29f5ca970d5a4df456b3ef19b8b415d0264" +dependencies = [ + "primitive-types 0.13.1", + "tiny-keccak", +] + [[package]] name = "kube" version = "0.87.2" @@ -3474,7 +5329,7 @@ dependencies = [ "home", "http 0.2.12", "http-body 0.4.6", - "hyper 0.14.30", + "hyper 0.14.32", "hyper-rustls 0.24.2", "hyper-timeout", "jsonpath-rust", @@ -3485,16 +5340,16 @@ dependencies = [ "rand", "rustls 0.21.12", "rustls-pemfile 1.0.4", - "secrecy", + "secrecy 0.8.0", "serde", "serde_json", "serde_yaml", - "thiserror", + "thiserror 1.0.69", "tokio", "tokio-tungstenite", "tokio-util", - "tower", - "tower-http", + "tower 0.4.13", + "tower-http 0.4.4", "tracing", ] @@ -3512,7 +5367,7 @@ dependencies = [ "once_cell", "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -3535,7 +5390,7 @@ dependencies = [ "serde", "serde_json", "smallvec", - "thiserror", + "thiserror 1.0.69", "tokio", "tokio-util", "tracing", @@ -3555,9 +5410,9 @@ checksum = "884e2677b40cc8c339eaefcb701c32ef1fd2493d71118dc0ca4b6a736c93bd67" [[package]] name = "libc" -version = "0.2.158" +version = "0.2.169" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8adc4bb1803a324070e64a98ae98f38934d91957a99cfb3a43dcbc01bc56439" +checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" [[package]] name = "libgit2-sys" @@ -3575,9 +5430,9 @@ dependencies = [ [[package]] name = "libm" -version = "0.2.8" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" +checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa" [[package]] name = "libp2p" @@ -3599,7 +5454,7 @@ dependencies = [ "multiaddr", "pin-project", "rw-stream-sink", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -3649,16 +5504,16 @@ dependencies = [ "rand", "rw-stream-sink", "smallvec", - "thiserror", - "unsigned-varint", + "thiserror 1.0.69", + "unsigned-varint 0.7.2", "void", ] [[package]] name = "libp2p-identity" -version = "0.2.9" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55cca1eb2bc1fd29f099f3daaab7effd01e1a54b7c577d0ed082521034d912e8" +checksum = "257b5621d159b32282eac446bed6670c39c7dc68a200a992d8f056afa0066f6d" dependencies = [ "bs58", "ed25519-dalek", @@ -3667,7 +5522,7 @@ dependencies = [ "quick-protobuf", "rand", "sha2 0.10.8", - "thiserror", + "thiserror 1.0.69", "tracing", "zeroize", ] @@ -3789,22 +5644,31 @@ dependencies = [ [[package]] name = "linkme" -version = "0.3.28" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c943daedff228392b791b33bba32e75737756e80a613e32e246c6ce9cbab20a" +checksum = "566336154b9e58a4f055f6dd4cbab62c7dc0826ce3c0a04e63b2d2ecd784cdae" dependencies = [ "linkme-impl", ] [[package]] name = "linkme-impl" -version = "0.3.28" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb26336e6dc7cc76e7927d2c9e7e3bb376d7af65a6f56a0b16c47d18a9b1abc5" +checksum = "edbe595006d355eaf9ae11db92707d4338cd2384d16866131cc1afdbdd35d8d9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.90", +] + +[[package]] +name = "linregress" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9eda9dcf4f2a99787827661f312ac3219292549c2ee992bf9a6248ffb066bf7" +dependencies = [ + "nalgebra", ] [[package]] @@ -3819,6 +5683,12 @@ version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" +[[package]] +name = "litemap" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104" + [[package]] name = "lock_api" version = "0.4.12" @@ -3837,22 +5707,79 @@ checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" [[package]] name = "lru" -version = "0.12.4" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37ee39891760e7d94734f6f63fedc29a2e4a152f836120753a72503f09fcf904" +checksum = "b6e8aaa3f231bb4bd57b84b2d5dc3ae7f350265df8aa96492e0bc394a1571909" dependencies = [ - "hashbrown 0.14.5", + "hashbrown 0.12.3", ] [[package]] -name = "mach" -version = "0.3.2" +name = "lru" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" +dependencies = [ + "hashbrown 0.15.2", +] + +[[package]] +name = "mach" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b823e83b2affd8f40a9ee8c29dbc56404c1e34cd2710921f2801e2cf29527afa" dependencies = [ "libc", ] +[[package]] +name = "macro_magic" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc33f9f0351468d26fbc53d9ce00a096c8522ecb42f19b50f34f2c422f76d21d" +dependencies = [ + "macro_magic_core", + "macro_magic_macros", + "quote", + "syn 2.0.90", +] + +[[package]] +name = "macro_magic_core" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1687dc887e42f352865a393acae7cf79d98fab6351cde1f58e9e057da89bf150" +dependencies = [ + "const-random", + "derive-syn-parse", + "macro_magic_core_macros", + "proc-macro2", + "quote", + "syn 2.0.90", +] + +[[package]] +name = "macro_magic_core_macros" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b02abfe41815b5bd98dbd4260173db2c116dda171dc0fe7838cb206333b83308" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.90", +] + +[[package]] +name = "macro_magic_macros" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73ea28ee64b88876bf45277ed9a5817c1817df061a74f2b988971a12570e5869" +dependencies = [ + "macro_magic_core", + "quote", + "syn 2.0.90", +] + [[package]] name = "matchers" version = "0.0.1" @@ -3862,6 +5789,31 @@ dependencies = [ "regex-automata 0.1.10", ] +[[package]] +name = "matchers" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +dependencies = [ + "regex-automata 0.1.10", +] + +[[package]] +name = "matchit" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" + +[[package]] +name = "matrixmultiply" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9380b911e3e96d10c1f415da0876389aaf1b56759054eeb0de7df940c456ba1a" +dependencies = [ + "autocfg", + "rawpointer", +] + [[package]] name = "memchr" version = "2.7.4" @@ -3874,7 +5826,7 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b2cffa4ad52c6f791f4f8b15f0c05f9824b2ced1160e88cc393d64fff9a8ac64" dependencies = [ - "rustix 0.38.36", + "rustix 0.38.42", ] [[package]] @@ -3931,51 +5883,39 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.8.0" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" +checksum = "4ffbe83022cedc1d264172192511ae958937694cd57ce297164951b8b3568394" dependencies = [ "adler2", ] [[package]] name = "mio" -version = "0.8.11" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" +checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" dependencies = [ "libc", "log", "wasi", - "windows-sys 0.48.0", -] - -[[package]] -name = "mio" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" -dependencies = [ - "hermit-abi 0.3.9", - "libc", - "wasi", "windows-sys 0.52.0", ] [[package]] name = "mockito" -version = "1.5.0" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09b34bd91b9e5c5b06338d392463e1318d683cf82ec3d3af4014609be6e2108d" +checksum = "652cd6d169a36eaf9d1e6bce1a221130439a966d7f27858af66a33a66e9c4ee2" dependencies = [ "assert-json-diff", "bytes", "colored", "futures-util", - "http 1.1.0", + "http 1.2.0", "http-body 1.0.1", "http-body-util", - "hyper 1.4.1", + "hyper 1.5.2", "hyper-util", "log", "rand", @@ -3986,11 +5926,17 @@ dependencies = [ "tokio", ] +[[package]] +name = "multi-stash" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "685a9ac4b61f4e728e1d2c6a7844609c16527aeb5e6c865915c08e619c16410f" + [[package]] name = "multiaddr" -version = "0.18.1" +version = "0.18.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b852bc02a2da5feed68cd14fa50d0774b92790a5bdbfa932a813926c8472070" +checksum = "fe6351f60b488e04c1d21bc69e56b89cb3f5e8f5d22557d6e8031bdfd79b6961" dependencies = [ "arrayref", "byteorder", @@ -4001,7 +5947,7 @@ dependencies = [ "percent-encoding", "serde", "static_assertions", - "unsigned-varint", + "unsigned-varint 0.8.0", "url", ] @@ -4018,12 +5964,12 @@ dependencies = [ [[package]] name = "multihash" -version = "0.19.1" +version = "0.19.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "076d548d76a0e2a0d4ab471d0b1c36c577786dfc4471242035d97a12a735c492" +checksum = "6b430e7953c29dd6a09afc29ff0bb69c6e306329ee6794700aee27b76a1aea8d" dependencies = [ "core2", - "unsigned-varint", + "unsigned-varint 0.8.0", ] [[package]] @@ -4037,7 +5983,22 @@ dependencies = [ "log", "pin-project", "smallvec", - "unsigned-varint", + "unsigned-varint 0.7.2", +] + +[[package]] +name = "nalgebra" +version = "0.33.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26aecdf64b707efd1310e3544d709c5c0ac61c13756046aaaba41be5c4f66a3b" +dependencies = [ + "approx", + "matrixmultiply", + "num-complex", + "num-rational", + "num-traits", + "simba", + "typenum", ] [[package]] @@ -4068,12 +6029,6 @@ dependencies = [ "libc", ] -[[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" @@ -4110,10 +6065,14 @@ dependencies = [ ] [[package]] -name = "normalize-line-endings" -version = "0.3.0" +name = "nu-ansi-term" +version = "0.46.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +dependencies = [ + "overload", + "winapi", +] [[package]] name = "num-bigint" @@ -4125,12 +6084,32 @@ dependencies = [ "num-traits", ] +[[package]] +name = "num-complex" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" +dependencies = [ + "num-traits", +] + [[package]] name = "num-conv" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" +[[package]] +name = "num-derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.90", +] + [[package]] name = "num-format" version = "0.4.4" @@ -4168,6 +6147,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", + "libm", ] [[package]] @@ -4200,18 +6180,27 @@ dependencies = [ [[package]] name = "object" -version = "0.36.4" +version = "0.32.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" +dependencies = [ + "memchr", +] + +[[package]] +name = "object" +version = "0.36.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "084f1a5821ac4c651660a94a7153d27ac9d8a53736203f58b31945ded098070a" +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" @@ -4219,11 +6208,22 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" +[[package]] +name = "open" +version = "5.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ecd52f0b8d15c40ce4820aa251ed5de032e5d91fab27f7db2f40d42a8bdf69c" +dependencies = [ + "is-wsl", + "libc", + "pathdiff", +] + [[package]] name = "openssl" -version = "0.10.66" +version = "0.10.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9529f4786b70a3e8c61e11179af17ab6188ad8d0ded78c5529441ed39d4bd9c1" +checksum = "6174bc48f102d208783c2c84bf931bb75927a617866870de8a4ea85597f871f5" dependencies = [ "bitflags 2.6.0", "cfg-if", @@ -4242,7 +6242,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.90", ] [[package]] @@ -4253,18 +6253,18 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-src" -version = "300.3.2+3.3.2" +version = "300.4.1+3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a211a18d945ef7e648cc6e0058f4c548ee46aab922ea203e0d30e966ea23647b" +checksum = "faa4eac4138c62414b5622d1b31c5c304f34b406b013c079c2bbc652fdd6678c" dependencies = [ "cc", ] [[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", @@ -4290,9 +6290,9 @@ dependencies = [ [[package]] name = "os_info" -version = "3.8.2" +version = "3.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae99c7fa6dd38c7cafe1ec085e804f8f555a2f8659b0dbe03f1f9963a9b51092" +checksum = "e5ca711d8b83edbb00b44d504503cd247c9c0bd8b0fa2694f2a1a3d8165379ce" dependencies = [ "log", "windows-sys 0.52.0", @@ -4309,1363 +6309,2076 @@ dependencies = [ ] [[package]] -name = "pallet-contracts-uapi-next" -version = "6.0.3" +name = "overload" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd549c16296ea5b2eb7c65c56aba548b286c1be4d7675b424ff6ccb8319c97a9" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + +[[package]] +name = "pallet-alliance" +version = "37.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59378a648a0aa279a4b10650366c3389cd0a1239b1876f74bfecd268eecb086b" dependencies = [ - "bitflags 1.3.2", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "pallet-collective", + "pallet-identity", "parity-scale-codec", - "paste", - "polkavm-derive 0.5.0", "scale-info", + "sp-core 34.0.0", + "sp-crypto-hashing", + "sp-io 38.0.0", + "sp-runtime 39.0.3", ] [[package]] -name = "parity-bip39" -version = "2.0.1" +name = "pallet-asset-conversion" +version = "20.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e69bf016dc406eff7d53a7d3f7cf1c2e72c82b9088aac1118591e36dd2cd3e9" +checksum = "33f0078659ae95efe6a1bf138ab5250bc41ab98f22ff3651d0208684f08ae797" dependencies = [ - "bitcoin_hashes 0.13.0", - "rand", - "rand_core 0.6.4", - "serde", - "unicode-normalization", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-api", + "sp-arithmetic", + "sp-core 34.0.0", + "sp-io 38.0.0", + "sp-runtime 39.0.3", ] [[package]] -name = "parity-scale-codec" -version = "3.6.12" +name = "pallet-asset-conversion-ops" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "306800abfa29c7f16596b5970a588435e3d5b3149683d00c12b699cc19f895ee" +checksum = "3edbeda834bcd6660f311d4eead3dabdf6d385b7308ac75b0fae941a960e6c3a" dependencies = [ - "arrayvec 0.7.6", - "bitvec", - "byte-slice-cast", - "bytes", - "impl-trait-for-tuples", - "parity-scale-codec-derive", - "serde", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "pallet-asset-conversion", + "parity-scale-codec", + "scale-info", + "sp-arithmetic", + "sp-core 34.0.0", + "sp-io 38.0.0", + "sp-runtime 39.0.3", ] [[package]] -name = "parity-scale-codec-derive" -version = "3.6.12" +name = "pallet-asset-conversion-tx-payment" +version = "20.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d830939c76d294956402033aee57a6da7b438f2294eb94864c37b0569053a42c" +checksum = "1ab66c4c22ac0f20e620a954ce7ba050118d6d8011e2d02df599309502064e98" dependencies = [ - "proc-macro-crate 3.2.0", - "proc-macro2", - "quote", - "syn 1.0.109", + "frame-support", + "frame-system", + "pallet-asset-conversion", + "pallet-transaction-payment", + "parity-scale-codec", + "scale-info", + "sp-runtime 39.0.3", ] [[package]] -name = "parking" -version = "2.2.1" +name = "pallet-asset-rate" +version = "17.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" +checksum = "71b2149aa741bc39466bbcc92d9d0ab6e9adcf39d2790443a735ad573b3191e7" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-core 34.0.0", + "sp-runtime 39.0.3", +] [[package]] -name = "parking_lot" -version = "0.12.3" +name = "pallet-asset-tx-payment" +version = "38.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" +checksum = "406a486466d15acc48c99420191f96f1af018f3381fde829c467aba489030f18" dependencies = [ - "lock_api", - "parking_lot_core", + "frame-benchmarking", + "frame-support", + "frame-system", + "pallet-transaction-payment", + "parity-scale-codec", + "scale-info", + "serde", + "sp-core 34.0.0", + "sp-io 38.0.0", + "sp-runtime 39.0.3", ] [[package]] -name = "parking_lot_core" -version = "0.9.10" +name = "pallet-assets" +version = "40.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" +checksum = "f45f4eb6027fc34c4650e0ed6a7e57ed3335cc364be74b4531f714237676bcee" dependencies = [ - "cfg-if", - "libc", - "redox_syscall", - "smallvec", - "windows-targets 0.52.6", + "frame-benchmarking", + "frame-support", + "frame-system", + "impl-trait-for-tuples", + "log", + "parity-scale-codec", + "scale-info", + "sp-core 34.0.0", + "sp-runtime 39.0.3", ] [[package]] -name = "password-hash" +name = "pallet-assets-freezer" version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "346f04948ba92c43e8469c1ee6736c7563d71012b17d40745260fe106aac2166" +checksum = "127adc2250b89416b940850ce2175dab10a9297b503b1fcb05dc555bd9bd3207" dependencies = [ - "base64ct", - "rand_core 0.6.4", - "subtle", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "pallet-assets", + "parity-scale-codec", + "scale-info", + "sp-runtime 39.0.3", ] [[package]] -name = "paste" -version = "1.0.15" +name = "pallet-atomic-swap" +version = "38.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" +checksum = "15906a685adeabe6027e49c814a34066222dd6136187a8a79c213d0d739b6634" +dependencies = [ + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-core 34.0.0", + "sp-io 38.0.0", + "sp-runtime 39.0.3", +] [[package]] -name = "pbkdf2" -version = "0.12.2" +name = "pallet-aura" +version = "37.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" +checksum = "b31da6e794d655d1f9c4da6557a57399538d75905a7862a2ed3f7e5fb711d7e4" dependencies = [ - "digest 0.10.7", - "password-hash", + "frame-support", + "frame-system", + "log", + "pallet-timestamp", + "parity-scale-codec", + "scale-info", + "sp-application-crypto 38.0.0", + "sp-consensus-aura", + "sp-runtime 39.0.3", ] [[package]] -name = "pem" -version = "3.0.4" +name = "pallet-authority-discovery" +version = "38.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e459365e590736a54c3fa561947c84837534b8e9af6fc5bf781307e82658fae" +checksum = "ffb0208f0538d58dcb78ce1ff5e6e8641c5f37b23b20b05587e51da30ab13541" dependencies = [ - "base64 0.22.1", - "serde", + "frame-support", + "frame-system", + "pallet-session", + "parity-scale-codec", + "scale-info", + "sp-application-crypto 38.0.0", + "sp-authority-discovery", + "sp-runtime 39.0.3", ] [[package]] -name = "percent-encoding" -version = "2.3.1" +name = "pallet-authorship" +version = "38.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" +checksum = "625d47577cabbe1318ccec5d612e2379002d1b6af1ab6edcef3243c66ec246df" +dependencies = [ + "frame-support", + "frame-system", + "impl-trait-for-tuples", + "parity-scale-codec", + "scale-info", + "sp-runtime 39.0.3", +] [[package]] -name = "pest" -version = "2.7.12" +name = "pallet-babe" +version = "38.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c73c26c01b8c87956cea613c907c9d6ecffd8d18a2a5908e5de0adfaa185cea" +checksum = "4ee096c0def13832475b340d00121025e0225de29604d44bc6dfcaa294c995b4" dependencies = [ - "memchr", - "thiserror", - "ucd-trie", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "pallet-authorship", + "pallet-session", + "pallet-timestamp", + "parity-scale-codec", + "scale-info", + "sp-application-crypto 38.0.0", + "sp-consensus-babe", + "sp-core 34.0.0", + "sp-io 38.0.0", + "sp-runtime 39.0.3", + "sp-session", + "sp-staking 36.0.0", ] [[package]] -name = "pest_derive" -version = "2.7.12" +name = "pallet-bags-list" +version = "37.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "664d22978e2815783adbdd2c588b455b1bd625299ce36b2a99881ac9627e6d8d" +checksum = "0fd23a6f94ba9c1e57c8a7f8a41327d132903a79c55c0c83f36cbae19946cf10" dependencies = [ - "pest", - "pest_generator", + "aquamarine", + "docify", + "frame-benchmarking", + "frame-election-provider-support", + "frame-support", + "frame-system", + "log", + "pallet-balances", + "parity-scale-codec", + "scale-info", + "sp-core 34.0.0", + "sp-io 38.0.0", + "sp-runtime 39.0.3", + "sp-tracing 17.0.1", ] [[package]] -name = "pest_generator" -version = "2.7.12" +name = "pallet-balances" +version = "39.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2d5487022d5d33f4c30d91c22afa240ce2a644e87fe08caad974d4eab6badbe" +checksum = "5c6945b078919acb14d126490e4b0973a688568b30142476ca69c6df2bed27ad" dependencies = [ - "pest", - "pest_meta", - "proc-macro2", - "quote", - "syn 2.0.77", + "docify", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-runtime 39.0.3", ] [[package]] -name = "pest_meta" -version = "2.7.12" +name = "pallet-beefy" +version = "39.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0091754bbd0ea592c4deb3a122ce8ecbb0753b738aa82bc055fcc2eccc8d8174" +checksum = "014d177a3aba19ac144fc6b2b5eb94930b9874734b91fd014902b6706288bb5f" dependencies = [ - "once_cell", - "pest", - "sha2 0.10.8", + "frame-support", + "frame-system", + "log", + "pallet-authorship", + "pallet-session", + "parity-scale-codec", + "scale-info", + "serde", + "sp-consensus-beefy", + "sp-runtime 39.0.3", + "sp-session", + "sp-staking 36.0.0", ] [[package]] -name = "pin-project" -version = "1.1.5" +name = "pallet-beefy-mmr" +version = "39.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" +checksum = "9c64f536e7f04cf3a0a17fdf20870ddb3d63a7690419c40f75cfd2f72b6e6d22" dependencies = [ - "pin-project-internal", + "array-bytes", + "binary-merkle-tree", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "pallet-beefy", + "pallet-mmr", + "pallet-session", + "parity-scale-codec", + "scale-info", + "serde", + "sp-api", + "sp-consensus-beefy", + "sp-core 34.0.0", + "sp-io 38.0.0", + "sp-runtime 39.0.3", + "sp-state-machine 0.43.0", ] [[package]] -name = "pin-project-internal" -version = "1.1.5" +name = "pallet-bounties" +version = "37.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" +checksum = "a1163f9cd8bbc47ec0c6900a3ca67689d8d7b40bedfa6aa22b1b3c6027b1090e" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.77", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "pallet-treasury", + "parity-scale-codec", + "scale-info", + "sp-core 34.0.0", + "sp-io 38.0.0", + "sp-runtime 39.0.3", ] [[package]] -name = "pin-project-lite" -version = "0.2.14" +name = "pallet-bridge-grandpa" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" +checksum = "1d825fbed9fb68bc5d344311653dc0f69caeabe647365abf79a539310b2245f6" +dependencies = [ + "bp-header-chain", + "bp-runtime", + "bp-test-utils", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-consensus-grandpa", + "sp-runtime 39.0.3", + "sp-std", +] [[package]] -name = "pin-utils" -version = "0.1.0" +name = "pallet-bridge-messages" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" +checksum = "a1decdc9fb885e46eb17f850aa14f8cf39e17f31574aa6a5fa1a9e603cc526a2" +dependencies = [ + "bp-header-chain", + "bp-messages", + "bp-runtime", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-runtime 39.0.3", + "sp-std", + "sp-trie 37.0.0", +] [[package]] -name = "piper" -version = "0.2.4" +name = "pallet-bridge-parachains" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" +checksum = "41450a8d214f20eaff57aeca8e647b20c0df7d66871ee2262609b90824bd4cca" dependencies = [ - "atomic-waker", - "fastrand", - "futures-io", + "bp-header-chain", + "bp-parachains", + "bp-polkadot-core", + "bp-runtime", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "pallet-bridge-grandpa", + "parity-scale-codec", + "scale-info", + "sp-runtime 39.0.3", + "sp-std", ] [[package]] -name = "pkcs8" -version = "0.10.2" +name = "pallet-bridge-relayers" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +checksum = "2faead05455a965a0a0ec69ffa779933479b599e40bda809c0aa1efa72a39281" dependencies = [ - "der", - "spki", + "bp-header-chain", + "bp-messages", + "bp-relayers", + "bp-runtime", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "pallet-bridge-grandpa", + "pallet-bridge-messages", + "pallet-bridge-parachains", + "pallet-transaction-payment", + "parity-scale-codec", + "scale-info", + "sp-arithmetic", + "sp-runtime 39.0.3", + "sp-std", ] [[package]] -name = "pkg-config" -version = "0.3.30" +name = "pallet-broker" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" +checksum = "3043c90106d88cb93fcf0d9b6d19418f11f44cc2b11873414aec3b46044a24ea" +dependencies = [ + "bitvec", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-api", + "sp-arithmetic", + "sp-core 34.0.0", + "sp-runtime 39.0.3", +] [[package]] -name = "polkavm-common" -version = "0.5.0" +name = "pallet-child-bounties" +version = "37.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88b4e215c80fe876147f3d58158d5dfeae7dabdd6047e175af77095b78d0035c" +checksum = "c7f3bc38ae6584b5f57e4de3e49e5184bfc0f20692829530ae1465ffe04e09e7" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "pallet-bounties", + "pallet-treasury", + "parity-scale-codec", + "scale-info", + "sp-core 34.0.0", + "sp-io 38.0.0", + "sp-runtime 39.0.3", +] [[package]] -name = "polkavm-common" -version = "0.8.0" +name = "pallet-collator-selection" +version = "19.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92c99f7eee94e7be43ba37eef65ad0ee8cbaf89b7c00001c3f6d2be985cb1817" +checksum = "658798d70c9054165169f6a6a96cfa9d6a5e7d24a524bc19825bf17fcbc5cc5a" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "pallet-authorship", + "pallet-balances", + "pallet-session", + "parity-scale-codec", + "rand", + "scale-info", + "sp-runtime 39.0.3", + "sp-staking 36.0.0", +] [[package]] -name = "polkavm-common" -version = "0.9.0" +name = "pallet-collective" +version = "38.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d9428a5cfcc85c5d7b9fc4b6a18c4b802d0173d768182a51cc7751640f08b92" +checksum = "8e149f1aefd444c9a1da6ec5a94bc8a7671d7a33078f85dd19ae5b06e3438e60" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-core 34.0.0", + "sp-io 38.0.0", + "sp-runtime 39.0.3", +] [[package]] -name = "polkavm-derive" -version = "0.5.0" +name = "pallet-collective-content" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6380dbe1fb03ecc74ad55d841cfc75480222d153ba69ddcb00977866cbdabdb8" +checksum = "38a6a5cbe781d9c711be74855ba32ef138f3779d6c54240c08e6d1b4bbba4d1d" dependencies = [ - "polkavm-derive-impl 0.5.0", - "syn 2.0.77", + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-core 34.0.0", + "sp-runtime 39.0.3", ] [[package]] -name = "polkavm-derive" -version = "0.8.0" +name = "pallet-contracts" +version = "38.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79fa916f7962348bd1bb1a65a83401675e6fc86c51a0fdbcf92a3108e58e6125" +checksum = "5df77077745d891c822b4275f273f336077a97e69e62a30134776aa721c96fee" dependencies = [ - "polkavm-derive-impl-macro 0.8.0", + "bitflags 1.3.2", + "environmental", + "frame-benchmarking", + "frame-support", + "frame-system", + "impl-trait-for-tuples", + "log", + "pallet-balances", + "pallet-contracts-proc-macro", + "pallet-contracts-uapi 12.0.0", + "parity-scale-codec", + "paste", + "rand", + "scale-info", + "serde", + "smallvec", + "sp-api", + "sp-core 34.0.0", + "sp-io 38.0.0", + "sp-runtime 39.0.3", + "sp-std", + "staging-xcm 14.2.0", + "staging-xcm-builder", + "wasm-instrument", + "wasmi", ] [[package]] -name = "polkavm-derive" -version = "0.9.1" +name = "pallet-contracts-mock-network" +version = "14.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae8c4bea6f3e11cd89bb18bcdddac10bd9a24015399bd1c485ad68a985a19606" -dependencies = [ - "polkavm-derive-impl-macro 0.9.0", +checksum = "309666537ed001c61a99f59fa7b98680f4a6e4e361ed3bc64f7b0237da3e3e06" +dependencies = [ + "frame-support", + "frame-system", + "pallet-assets", + "pallet-balances", + "pallet-contracts", + "pallet-contracts-proc-macro", + "pallet-contracts-uapi 12.0.0", + "pallet-insecure-randomness-collective-flip", + "pallet-message-queue", + "pallet-proxy", + "pallet-timestamp", + "pallet-utility", + "pallet-xcm", + "parity-scale-codec", + "polkadot-parachain-primitives", + "polkadot-primitives 16.0.0", + "polkadot-runtime-parachains", + "scale-info", + "sp-api", + "sp-core 34.0.0", + "sp-io 38.0.0", + "sp-keystore 0.40.0", + "sp-runtime 39.0.3", + "sp-tracing 17.0.1", + "staging-xcm 14.2.0", + "staging-xcm-builder", + "staging-xcm-executor", + "xcm-simulator", ] [[package]] -name = "polkavm-derive-impl" -version = "0.5.0" +name = "pallet-contracts-proc-macro" +version = "23.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc8211b3365bbafb2fb32057d68b0e1ca55d079f5cf6f9da9b98079b94b3987d" +checksum = "94226cbd48516b7c310eb5dae8d50798c1ce73a7421dc0977c55b7fc2237a283" dependencies = [ - "polkavm-common 0.5.0", "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.90", ] [[package]] -name = "polkavm-derive-impl" -version = "0.8.0" +name = "pallet-contracts-uapi" +version = "9.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c10b2654a8a10a83c260bfb93e97b262cf0017494ab94a65d389e0eda6de6c9c" +checksum = "2d7a51646d9ff1d91abd0186d2c074f0dfd3b1a2d55f08a229a2f2e4bc6d1e49" dependencies = [ - "polkavm-common 0.8.0", - "proc-macro2", - "quote", - "syn 2.0.77", + "bitflags 1.3.2", + "paste", + "polkavm-derive 0.9.1", ] [[package]] -name = "polkavm-derive-impl" -version = "0.9.0" +name = "pallet-contracts-uapi" +version = "12.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c4fdfc49717fb9a196e74a5d28e0bc764eb394a2c803eb11133a31ac996c60c" +checksum = "16f74b000590c33fadea48585d3ae3f4b7867e99f0a524c444d5779f36b9a1b6" dependencies = [ - "polkavm-common 0.9.0", - "proc-macro2", - "quote", - "syn 2.0.77", + "bitflags 1.3.2", + "parity-scale-codec", + "paste", + "polkavm-derive 0.9.1", + "scale-info", ] [[package]] -name = "polkavm-derive-impl-macro" -version = "0.8.0" +name = "pallet-contracts-uapi-next" +version = "6.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15e85319a0d5129dc9f021c62607e0804f5fb777a05cdda44d750ac0732def66" +checksum = "fd549c16296ea5b2eb7c65c56aba548b286c1be4d7675b424ff6ccb8319c97a9" dependencies = [ - "polkavm-derive-impl 0.8.0", - "syn 2.0.77", + "bitflags 1.3.2", + "parity-scale-codec", + "paste", + "polkavm-derive 0.5.0", + "scale-info", ] [[package]] -name = "polkavm-derive-impl-macro" -version = "0.9.0" +name = "pallet-conviction-voting" +version = "38.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ba81f7b5faac81e528eb6158a6f3c9e0bb1008e0ffa19653bc8dea925ecb429" +checksum = "999c242491b74395b8c5409ef644e782fe426d87ae36ad92240ffbf21ff0a76e" dependencies = [ - "polkavm-derive-impl 0.9.0", - "syn 2.0.77", + "assert_matches", + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "serde", + "sp-io 38.0.0", + "sp-runtime 39.0.3", ] [[package]] -name = "polling" -version = "3.7.3" +name = "pallet-core-fellowship" +version = "22.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc2790cd301dec6cd3b7a025e4815cf825724a51c98dccfe6a3e55f05ffb6511" +checksum = "d063b41df454bd128d6fefd5800af8a71ac383c9dd6f20096832537efc110a8a" dependencies = [ - "cfg-if", - "concurrent-queue", - "hermit-abi 0.4.0", - "pin-project-lite", - "rustix 0.38.36", - "tracing", - "windows-sys 0.59.0", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "pallet-ranked-collective", + "parity-scale-codec", + "scale-info", + "sp-arithmetic", + "sp-core 34.0.0", + "sp-io 38.0.0", + "sp-runtime 39.0.3", ] [[package]] -name = "poly1305" -version = "0.8.0" +name = "pallet-delegated-staking" +version = "5.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8159bd90725d2df49889a078b54f4f79e87f1f8a8444194cdca81d38f5393abf" +checksum = "117f003a97f980514c6db25a50c22aaec2a9ccb5664b3cb32f52fb990e0b0c12" dependencies = [ - "cpufeatures", - "opaque-debug", - "universal-hash", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-io 38.0.0", + "sp-runtime 39.0.3", + "sp-staking 36.0.0", ] [[package]] -name = "pop-cli" -version = "0.5.0" +name = "pallet-democracy" +version = "38.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6d1dc655f50b7c65bb2fb14086608ba11af02ef2936546f7a67db980ec1f133" dependencies = [ - "anyhow", - "assert_cmd", - "clap", - "cliclack", - "console", - "dirs", - "duct", - "env_logger", - "git2", - "os_info", - "pop-common", - "pop-contracts", - "pop-parachains", - "pop-telemetry", - "predicates", - "reqwest 0.12.7", - "serde_json", - "sp-core", - "sp-weights", - "strum 0.26.3", - "strum_macros 0.26.4", - "tempfile", - "tokio", - "url", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "serde", + "sp-core 34.0.0", + "sp-io 38.0.0", + "sp-runtime 39.0.3", ] [[package]] -name = "pop-common" -version = "0.5.0" +name = "pallet-dev-mode" +version = "20.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae1d8050c09c5e003d502c1addc7fdfbde21a854bd57787e94447078032710c8" dependencies = [ - "anyhow", - "cargo_toml", - "duct", - "flate2", - "git2", - "git2_credentials", - "mockito", - "regex", - "reqwest 0.12.7", - "serde", - "serde_json", - "strum 0.26.3", - "strum_macros 0.26.4", - "tar", - "tempfile", - "thiserror", - "tokio", - "toml 0.5.11", - "toml_edit 0.22.20", - "url", + "frame-support", + "frame-system", + "log", + "pallet-balances", + "parity-scale-codec", + "scale-info", + "sp-io 38.0.0", + "sp-runtime 39.0.3", ] [[package]] -name = "pop-contracts" -version = "0.5.0" +name = "pallet-election-provider-multi-phase" +version = "37.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62f9ad5ae0c13ba3727183dadf1825b6b7b0b0598ed5c366f8697e13fd540f7d" dependencies = [ - "anyhow", - "contract-build", - "contract-extrinsics", - "contract-transcode", - "dirs", - "duct", - "flate2", - "heck 0.5.0", - "ink_env", - "mockito", - "pop-common", - "reqwest 0.12.7", + "frame-benchmarking", + "frame-election-provider-support", + "frame-support", + "frame-system", + "log", + "pallet-election-provider-support-benchmarking", + "parity-scale-codec", + "rand", "scale-info", - "sp-core", - "sp-weights", + "sp-arithmetic", + "sp-core 34.0.0", + "sp-io 38.0.0", + "sp-npos-elections", + "sp-runtime 39.0.3", "strum 0.26.3", - "strum_macros 0.26.4", - "subxt", - "subxt-signer", - "tar", - "tempfile", - "thiserror", - "tokio", - "tokio-test", - "url", ] [[package]] -name = "pop-parachains" -version = "0.5.0" +name = "pallet-election-provider-support-benchmarking" +version = "37.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4111d0d27545c260c9dd0d6fc504961db59c1ec4b42e1bcdc28ebd478895c22" dependencies = [ - "anyhow", - "askama", - "clap", - "duct", - "flate2", - "glob", - "indexmap 2.5.0", - "mockito", - "pop-common", - "reqwest 0.12.7", - "serde_json", - "strum 0.26.3", - "strum_macros 0.26.4", - "symlink", - "tar", - "tempfile", - "thiserror", - "tokio", - "tokio-test", - "toml_edit 0.22.20", - "url", - "walkdir", - "zombienet-sdk", + "frame-benchmarking", + "frame-election-provider-support", + "frame-system", + "parity-scale-codec", + "sp-npos-elections", + "sp-runtime 39.0.3", ] [[package]] -name = "pop-telemetry" -version = "0.5.0" +name = "pallet-elections-phragmen" +version = "39.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "705c66d6c231340c6d085a0df0319a6ce42a150f248171e88e389ab1e3ce20f5" dependencies = [ - "dirs", - "env_logger", + "frame-benchmarking", + "frame-support", + "frame-system", "log", - "mockito", - "reqwest 0.12.7", - "serde", - "serde_json", - "tempfile", - "thiserror", - "tokio", + "parity-scale-codec", + "scale-info", + "sp-core 34.0.0", + "sp-io 38.0.0", + "sp-npos-elections", + "sp-runtime 39.0.3", + "sp-staking 36.0.0", ] [[package]] -name = "portable-atomic" -version = "1.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da544ee218f0d287a911e9c99a39a8c9bc8fcad3cb8db5959940044ecfc67265" - -[[package]] -name = "powerfmt" -version = "0.2.0" +name = "pallet-fast-unstake" +version = "37.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" +checksum = "e0ee60e8ef10b3936f2700bd61fa45dcc190c61124becc63bed787addcfa0d20" +dependencies = [ + "docify", + "frame-benchmarking", + "frame-election-provider-support", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-io 38.0.0", + "sp-runtime 39.0.3", + "sp-staking 36.0.0", +] [[package]] -name = "ppv-lite86" -version = "0.2.20" +name = "pallet-glutton" +version = "24.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +checksum = "a1c79ab340890f6ab088a638c350ac1173a1b2a79c18004787523032025582b4" dependencies = [ - "zerocopy", + "blake2", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-core 34.0.0", + "sp-inherents", + "sp-io 38.0.0", + "sp-runtime 39.0.3", ] [[package]] -name = "predicates" -version = "3.1.2" +name = "pallet-grandpa" +version = "38.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e9086cc7640c29a356d1a29fd134380bee9d8f79a17410aa76e7ad295f42c97" +checksum = "6d3a570a4aac3173ea46b600408183ca2bcfdaadc077f802f11e6055963e2449" dependencies = [ - "anstyle", - "difflib", - "float-cmp", - "normalize-line-endings", - "predicates-core", - "regex", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "pallet-authorship", + "pallet-session", + "parity-scale-codec", + "scale-info", + "sp-application-crypto 38.0.0", + "sp-consensus-grandpa", + "sp-core 34.0.0", + "sp-io 38.0.0", + "sp-runtime 39.0.3", + "sp-session", + "sp-staking 36.0.0", ] [[package]] -name = "predicates-core" -version = "1.0.8" +name = "pallet-identity" +version = "38.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae8177bee8e75d6846599c6b9ff679ed51e882816914eec639944d7c9aa11931" +checksum = "e3a4288548de9a755e39fcb82ffb9024b6bb1ba0f582464a44423038dd7a892e" +dependencies = [ + "enumflags2", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-io 38.0.0", + "sp-runtime 39.0.3", +] [[package]] -name = "predicates-tree" -version = "1.0.11" +name = "pallet-im-online" +version = "37.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41b740d195ed3166cd147c8047ec98db0e22ec019eb8eeb76d343b795304fb13" +checksum = "c6fd95270cf029d16cb40fe6bd9f8ab9c78cd966666dccbca4d8bfec35c5bba5" dependencies = [ - "predicates-core", - "termtree", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "pallet-authorship", + "parity-scale-codec", + "scale-info", + "sp-application-crypto 38.0.0", + "sp-core 34.0.0", + "sp-io 38.0.0", + "sp-runtime 39.0.3", + "sp-staking 36.0.0", ] [[package]] -name = "prettyplease" -version = "0.2.22" +name = "pallet-indices" +version = "38.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "479cf940fbbb3426c32c5d5176f62ad57549a0bb84773423ba8be9d089f5faba" +checksum = "c5e4b97de630427a39d50c01c9e81ab8f029a00e56321823958b39b438f7b940" dependencies = [ - "proc-macro2", - "syn 2.0.77", + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-core 34.0.0", + "sp-io 38.0.0", + "sp-keyring", + "sp-runtime 39.0.3", ] [[package]] -name = "primitive-types" -version = "0.12.2" +name = "pallet-insecure-randomness-collective-flip" +version = "26.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b34d9fd68ae0b74a41b21c03c2f62847aa0ffea044eee893b4c140b37e244e2" +checksum = "dce7ad80675d78bd38a7a66ecbbf2d218dd32955e97f8e301d0afe6c87b0f251" dependencies = [ - "fixed-hash", - "impl-codec", - "impl-serde", + "frame-support", + "frame-system", + "parity-scale-codec", + "safe-mix", "scale-info", - "uint", + "sp-runtime 39.0.3", ] [[package]] -name = "proc-macro-crate" -version = "1.3.1" +name = "pallet-lottery" +version = "38.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" +checksum = "ae0920ee53cf7b0665cfb6d275759ae0537dc3850ec78da5f118d814c99d3562" dependencies = [ - "once_cell", - "toml_edit 0.19.15", + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-runtime 39.0.3", ] [[package]] -name = "proc-macro-crate" -version = "3.2.0" +name = "pallet-membership" +version = "38.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ecf48c7ca261d60b74ab1a7b20da18bede46776b2e55535cb958eb595c5fa7b" +checksum = "1868b5dca4bbfd1f4a222cbb80735a5197020712a71577b496bbb7e19aaa5394" dependencies = [ - "toml_edit 0.22.20", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-core 34.0.0", + "sp-io 38.0.0", + "sp-runtime 39.0.3", ] [[package]] -name = "proc-macro-error" -version = "1.0.4" +name = "pallet-message-queue" +version = "41.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +checksum = "983f7d1be18e9a089a3e23670918f5085705b4403acd3fdde31878d57b76a1a8" dependencies = [ - "proc-macro-error-attr", - "proc-macro2", - "quote", - "syn 1.0.109", - "version_check", + "environmental", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-arithmetic", + "sp-core 34.0.0", + "sp-io 38.0.0", + "sp-runtime 39.0.3", + "sp-weights", ] [[package]] -name = "proc-macro-error-attr" -version = "1.0.4" +name = "pallet-migrations" +version = "8.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +checksum = "9b417fc975636bce94e7c6d707e42d0706d67dfa513e72f5946918e1044beef1" dependencies = [ - "proc-macro2", - "quote", - "version_check", + "docify", + "frame-benchmarking", + "frame-support", + "frame-system", + "impl-trait-for-tuples", + "log", + "parity-scale-codec", + "scale-info", + "sp-core 34.0.0", + "sp-runtime 39.0.3", ] [[package]] -name = "proc-macro2" -version = "1.0.86" +name = "pallet-mixnet" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" +checksum = "cf3fa2b7f759a47f698a403ab40c54bc8935e2969387947224cbdb4e2bc8a28a" dependencies = [ - "unicode-ident", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "serde", + "sp-application-crypto 38.0.0", + "sp-arithmetic", + "sp-io 38.0.0", + "sp-mixnet", + "sp-runtime 39.0.3", ] [[package]] -name = "psm" -version = "0.1.23" +name = "pallet-mmr" +version = "38.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa37f80ca58604976033fae9515a8a2989fc13797d953f7c04fb8fa36a11f205" +checksum = "f6932dfb85f77a57c2d1fdc28a7b3a59ffe23efd8d5bb02dc3039d91347e4a3b" dependencies = [ - "cc", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-core 34.0.0", + "sp-io 38.0.0", + "sp-mmr-primitives", + "sp-runtime 39.0.3", ] [[package]] -name = "ptr_meta" -version = "0.1.4" +name = "pallet-multisig" +version = "38.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0738ccf7ea06b608c10564b31debd4f5bc5e197fc8bfe088f68ae5ce81e7a4f1" +checksum = "0e5099c9a4442efcc1568d88ca1d22d624e81ab96358f99f616c67fbd82532d2" dependencies = [ - "ptr_meta_derive", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-io 38.0.0", + "sp-runtime 39.0.3", ] [[package]] -name = "ptr_meta_derive" -version = "0.1.4" +name = "pallet-nft-fractionalization" +version = "21.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16b845dbfca988fa33db069c0e230574d15a3088f147a87b64c7589eb662c9ac" +checksum = "168792cf95a32fa3baf9b874efec82a45124da0a79cee1ae3c98a823e6841959" dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "pallet-assets", + "pallet-nfts", + "parity-scale-codec", + "scale-info", + "sp-runtime 39.0.3", ] [[package]] -name = "quick-protobuf" -version = "0.8.1" +name = "pallet-nfts" +version = "32.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d6da84cc204722a989e01ba2f6e1e276e190f22263d0cb6ce8526fcdb0d2e1f" +checksum = "59e2aad461a0849d7f0471576eeb1fe3151795bcf2ec9e15eca5cca5b9d743b2" dependencies = [ - "byteorder", + "enumflags2", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-core 34.0.0", + "sp-io 38.0.0", + "sp-runtime 39.0.3", ] [[package]] -name = "quote" -version = "1.0.37" +name = "pallet-nfts-runtime-api" +version = "24.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" +checksum = "a7a1f50c217e19dc50ff586a71eb5915df6a05bc0b25564ea20674c8cd182c1f" dependencies = [ - "proc-macro2", + "pallet-nfts", + "parity-scale-codec", + "sp-api", ] [[package]] -name = "radium" -version = "0.7.0" +name = "pallet-nis" +version = "38.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" +checksum = "8ac349e119880b7df1a7c4c36d919b33a498d0e9548af3c237365c654ae0c73d" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-arithmetic", + "sp-core 34.0.0", + "sp-runtime 39.0.3", +] [[package]] -name = "rand" -version = "0.8.5" +name = "pallet-node-authorization" +version = "38.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +checksum = "39ec3133be9e767b8feafbb26edd805824faa59956da008d2dc7fcf4b4720e56" dependencies = [ - "libc", - "rand_chacha", - "rand_core 0.6.4", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-core 34.0.0", + "sp-io 38.0.0", + "sp-runtime 39.0.3", ] [[package]] -name = "rand_chacha" -version = "0.3.1" +name = "pallet-nomination-pools" +version = "35.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +checksum = "c42906923f9f2b65b22f1211136b57c6878296ba6f6228a075c4442cc1fc1659" dependencies = [ - "ppv-lite86", - "rand_core 0.6.4", + "frame-support", + "frame-system", + "log", + "pallet-balances", + "parity-scale-codec", + "scale-info", + "sp-core 34.0.0", + "sp-io 38.0.0", + "sp-runtime 39.0.3", + "sp-staking 36.0.0", + "sp-tracing 17.0.1", ] [[package]] -name = "rand_core" -version = "0.5.1" +name = "pallet-nomination-pools-benchmarking" +version = "36.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" +checksum = "38d2eaca0349bcda923343226b8b64d25a80b67e0a1ebaaa5b0ab1e1b3b225bc" +dependencies = [ + "frame-benchmarking", + "frame-election-provider-support", + "frame-support", + "frame-system", + "pallet-bags-list", + "pallet-delegated-staking", + "pallet-nomination-pools", + "pallet-staking", + "parity-scale-codec", + "scale-info", + "sp-runtime 39.0.3", + "sp-runtime-interface 28.0.0", + "sp-staking 36.0.0", +] [[package]] -name = "rand_core" -version = "0.6.4" +name = "pallet-nomination-pools-runtime-api" +version = "33.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +checksum = "7a9e1cb89cc2e6df06ce274a7fc814e5e688aad04c43902a10191fa3d2a56a96" dependencies = [ - "getrandom", + "pallet-nomination-pools", + "parity-scale-codec", + "sp-api", ] [[package]] -name = "reconnecting-jsonrpsee-ws-client" -version = "0.4.3" +name = "pallet-offences" +version = "37.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06fa4f17e09edfc3131636082faaec633c7baa269396b4004040bc6c52f49f65" +checksum = "6c4379cf853465696c1c5c03e7e8ce80aeaca0a6139d698abe9ecb3223fd732a" dependencies = [ - "cfg_aliases", - "finito", - "futures", - "jsonrpsee 0.23.2", - "serde_json", - "thiserror", - "tokio", - "tracing", + "frame-support", + "frame-system", + "log", + "pallet-balances", + "parity-scale-codec", + "scale-info", + "serde", + "sp-runtime 39.0.3", + "sp-staking 36.0.0", ] [[package]] -name = "redox_syscall" -version = "0.5.3" +name = "pallet-offences-benchmarking" +version = "38.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a908a6e00f1fdd0dfd9c0eb08ce85126f6d8bbda50017e74bc4a4b7d4a926a4" +checksum = "69aa1b24cdffc3fa8c89cdea32c83f1bf9c1c82a87fa00e57ae4be8e85f5e24f" dependencies = [ - "bitflags 2.6.0", + "frame-benchmarking", + "frame-election-provider-support", + "frame-support", + "frame-system", + "log", + "pallet-babe", + "pallet-balances", + "pallet-grandpa", + "pallet-im-online", + "pallet-offences", + "pallet-session", + "pallet-staking", + "parity-scale-codec", + "scale-info", + "sp-runtime 39.0.3", + "sp-staking 36.0.0", ] [[package]] -name = "redox_users" -version = "0.4.6" +name = "pallet-paged-list" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" +checksum = "c8e099fb116068836b17ca4232dc52f762b69dc8cd4e33f509372d958de278b0" dependencies = [ - "getrandom", - "libredox", - "thiserror", + "docify", + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-core 34.0.0", + "sp-io 38.0.0", + "sp-metadata-ir", + "sp-runtime 39.0.3", ] [[package]] -name = "ref-cast" -version = "1.0.23" +name = "pallet-parameters" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccf0a6f84d5f1d581da8b41b47ec8600871962f2a528115b542b362d4b744931" +checksum = "b9aba424d55e17b2a2bec766a41586eab878137704d4803c04bebd6a4743db7b" dependencies = [ - "ref-cast-impl", + "docify", + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "paste", + "scale-info", + "serde", + "sp-core 34.0.0", + "sp-runtime 39.0.3", ] [[package]] -name = "ref-cast-impl" -version = "1.0.23" +name = "pallet-preimage" +version = "38.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcc303e793d3734489387d205e9b186fac9c6cfacedd98cbb2e8a5943595f3e6" +checksum = "407828bc48c6193ac076fdf909b2fadcaaecd65f42b0b0a04afe22fe8e563834" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.77", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-core 34.0.0", + "sp-io 38.0.0", + "sp-runtime 39.0.3", ] [[package]] -name = "regex" -version = "1.10.6" +name = "pallet-proxy" +version = "38.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4219d74c6b67a3654a9fbebc4b419e22126d13d2f3c4a07ee0cb61ff79a79619" +checksum = "d39df395f0dbcf07dafe842916adea3266a87ce36ed87b5132184b6bcd746393" dependencies = [ - "aho-corasick", - "memchr", - "regex-automata 0.4.7", - "regex-syntax 0.8.4", + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-io 38.0.0", + "sp-runtime 39.0.3", ] [[package]] -name = "regex-automata" -version = "0.1.10" +name = "pallet-ranked-collective" +version = "38.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" +checksum = "c2b38708feaed202debf1ac6beffaa5e20c99a9825c5ca0991753c2d4eaaf3ac" dependencies = [ - "regex-syntax 0.6.29", + "frame-benchmarking", + "frame-support", + "frame-system", + "impl-trait-for-tuples", + "log", + "parity-scale-codec", + "scale-info", + "sp-arithmetic", + "sp-core 34.0.0", + "sp-io 38.0.0", + "sp-runtime 39.0.3", ] [[package]] -name = "regex-automata" -version = "0.4.7" +name = "pallet-recovery" +version = "38.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" +checksum = "406a116aa6d05f88f3c10d79ff89cf577323680a48abd8e5550efb47317e67fa" dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax 0.8.4", + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-io 38.0.0", + "sp-runtime 39.0.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.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" - -[[package]] -name = "rend" -version = "0.4.2" +name = "pallet-referenda" +version = "38.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71fe3824f5629716b1589be05dacd749f6aa084c87e00e016714a8cdfccc997c" +checksum = "c3008c20531d1730c9b457ae77ecf0e3c9b07aaf8c4f5d798d61ef6f0b9e2d4b" dependencies = [ - "bytecheck", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "serde", + "sp-arithmetic", + "sp-io 38.0.0", + "sp-runtime 39.0.3", ] [[package]] -name = "reqwest" -version = "0.11.27" +name = "pallet-remark" +version = "38.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62" +checksum = "a3e8cae0e20888065ec73dda417325c6ecabf797f4002329484b59c25ecc34d4" dependencies = [ - "base64 0.21.7", - "bytes", - "encoding_rs", - "futures-core", - "futures-util", - "h2 0.3.26", - "http 0.2.12", - "http-body 0.4.6", - "hyper 0.14.30", - "hyper-tls 0.5.0", - "ipnet", - "js-sys", - "log", - "mime", - "native-tls", - "once_cell", - "percent-encoding", - "pin-project-lite", - "rustls-pemfile 1.0.4", + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", "serde", - "serde_json", - "serde_urlencoded", - "sync_wrapper 0.1.2", - "system-configuration 0.5.1", - "tokio", - "tokio-native-tls", - "tower-service", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "winreg", + "sp-core 34.0.0", + "sp-io 38.0.0", + "sp-runtime 39.0.3", ] [[package]] -name = "reqwest" -version = "0.12.7" +name = "pallet-revive" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8f4955649ef5c38cc7f9e8aa41761d48fb9677197daea9984dc54f56aad5e63" +checksum = "be02c94dcbadd206a910a244ec19b493aac793eed95e23d37d6699547234569f" dependencies = [ - "base64 0.22.1", - "bytes", - "encoding_rs", - "futures-core", - "futures-util", - "h2 0.4.6", - "http 1.1.0", - "http-body 1.0.1", - "http-body-util", - "hyper 1.4.1", - "hyper-rustls 0.27.3", - "hyper-tls 0.6.0", - "hyper-util", - "ipnet", - "js-sys", + "bitflags 1.3.2", + "environmental", + "frame-benchmarking", + "frame-support", + "frame-system", + "impl-trait-for-tuples", "log", - "mime", - "native-tls", - "once_cell", - "percent-encoding", - "pin-project-lite", - "rustls-pemfile 2.1.3", + "pallet-balances", + "pallet-revive-fixtures", + "pallet-revive-proc-macro", + "pallet-revive-uapi", + "parity-scale-codec", + "paste", + "polkavm 0.10.0", + "scale-info", "serde", - "serde_json", - "serde_urlencoded", - "sync_wrapper 1.0.1", - "system-configuration 0.6.1", - "tokio", - "tokio-native-tls", - "tower-service", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "windows-registry", + "sp-api", + "sp-core 34.0.0", + "sp-io 38.0.0", + "sp-runtime 39.0.3", + "sp-std", + "staging-xcm 14.2.0", + "staging-xcm-builder", ] [[package]] -name = "rfc6979" -version = "0.4.0" +name = "pallet-revive-fixtures" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" +checksum = "8a38c27f1531f36e5327f3084eb24cf1c9dd46b372e030c0169e843ce363105e" dependencies = [ - "hmac 0.12.1", - "subtle", + "anyhow", + "frame-system", + "parity-wasm", + "polkavm-linker 0.10.0", + "sp-runtime 39.0.3", + "tempfile", + "toml 0.8.19", ] [[package]] -name = "ring" -version = "0.17.8" +name = "pallet-revive-mock-network" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" -dependencies = [ - "cc", - "cfg-if", - "getrandom", - "libc", - "spin", - "untrusted", - "windows-sys 0.52.0", +checksum = "60e74591d44dbd78db02c8593f5caa75bd61bcc4d63999302150223fb969ae37" +dependencies = [ + "frame-support", + "frame-system", + "pallet-assets", + "pallet-balances", + "pallet-message-queue", + "pallet-proxy", + "pallet-revive", + "pallet-revive-proc-macro", + "pallet-revive-uapi", + "pallet-timestamp", + "pallet-utility", + "pallet-xcm", + "parity-scale-codec", + "polkadot-parachain-primitives", + "polkadot-primitives 16.0.0", + "polkadot-runtime-parachains", + "scale-info", + "sp-api", + "sp-core 34.0.0", + "sp-io 38.0.0", + "sp-keystore 0.40.0", + "sp-runtime 39.0.3", + "sp-tracing 17.0.1", + "staging-xcm 14.2.0", + "staging-xcm-builder", + "staging-xcm-executor", + "xcm-simulator", ] [[package]] -name = "rkyv" -version = "0.7.45" +name = "pallet-revive-proc-macro" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9008cd6385b9e161d8229e1f6549dd23c3d022f132a2ea37ac3a10ac4935779b" +checksum = "0cc16d1f7cee6a1ee6e8cd710e16230d59fb4935316c1704cf770e4d2335f8d4" dependencies = [ - "bitvec", - "bytecheck", - "bytes", - "hashbrown 0.12.3", - "ptr_meta", - "rend", - "rkyv_derive", - "seahash", - "tinyvec", - "uuid", + "proc-macro2", + "quote", + "syn 2.0.90", ] [[package]] -name = "rkyv_derive" -version = "0.7.45" +name = "pallet-revive-uapi" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "503d1d27590a2b0a3a4ca4c94755aa2875657196ecbf401a42eff41d7de532c0" +checksum = "ecb4686c8415619cc13e43fadef146ffff46424d9b4d037fe4c069de52708aac" dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", + "bitflags 1.3.2", + "parity-scale-codec", + "paste", + "polkavm-derive 0.10.0", + "scale-info", ] [[package]] -name = "rlibc" -version = "1.0.0" +name = "pallet-root-offences" +version = "35.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc874b127765f014d792f16763a81245ab80500e2ad921ed4ee9e82481ee08fe" +checksum = "b35774b830928daaeeca7196cead7c56eeed952a6616ad6dc5ec068d8c85c81a" +dependencies = [ + "frame-support", + "frame-system", + "pallet-session", + "pallet-staking", + "parity-scale-codec", + "scale-info", + "sp-runtime 39.0.3", + "sp-staking 36.0.0", +] [[package]] -name = "rust_decimal" -version = "1.36.0" +name = "pallet-root-testing" +version = "14.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b082d80e3e3cc52b2ed634388d436fe1f4de6af5786cc2de9ba9737527bdf555" +checksum = "be95e7c320ac1d381715364cd721e67ab3152ab727f8e4defd3a92e41ebbc880" dependencies = [ - "arrayvec 0.7.6", - "borsh", - "bytes", - "num-traits", - "rand", - "rkyv", - "serde", - "serde_json", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-core 34.0.0", + "sp-io 38.0.0", + "sp-runtime 39.0.3", ] [[package]] -name = "rustc-demangle" -version = "0.1.24" +name = "pallet-safe-mode" +version = "19.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" +checksum = "6d3e67dd4644c168cedbf257ac3dd2527aad81acf4a0d413112197094e549f76" +dependencies = [ + "docify", + "frame-benchmarking", + "frame-support", + "frame-system", + "pallet-balances", + "pallet-proxy", + "pallet-utility", + "parity-scale-codec", + "scale-info", + "sp-arithmetic", + "sp-runtime 39.0.3", +] [[package]] -name = "rustc-hash" -version = "1.1.0" +name = "pallet-salary" +version = "23.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" +checksum = "0544a71dba06a9a29da0778ba8cb37728c3b9a8377ac9737c4b1bc48c618bc2f" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "pallet-ranked-collective", + "parity-scale-codec", + "scale-info", + "sp-arithmetic", + "sp-core 34.0.0", + "sp-io 38.0.0", + "sp-runtime 39.0.3", +] [[package]] -name = "rustc-hex" -version = "2.1.0" +name = "pallet-scheduler" +version = "39.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e75f6a532d0fd9f7f13144f392b6ad56a32696bfcd9c78f797f16bbb6f072d6" +checksum = "26899a331e7ab5f7d5966cbf203e1cf5bd99cd110356d7ddcaa7597087cdc0b5" +dependencies = [ + "docify", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-io 38.0.0", + "sp-runtime 39.0.3", + "sp-weights", +] [[package]] -name = "rustc_version" -version = "0.4.1" +name = "pallet-scored-pool" +version = "38.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +checksum = "9f84b48bb4702712c902f43931c4077d3a1cb6773c8d8c290d4a6251f6bc2a5c" dependencies = [ - "semver", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-io 38.0.0", + "sp-runtime 39.0.3", ] [[package]] -name = "rustix" -version = "0.36.17" +name = "pallet-session" +version = "38.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "305efbd14fde4139eb501df5f136994bb520b033fa9fbdce287507dc23b8c7ed" +checksum = "8474b62b6b7622f891e83d922a589e2ad5be5471f5ca47d45831a797dba0b3f4" dependencies = [ - "bitflags 1.3.2", - "errno", - "io-lifetimes", - "libc", - "linux-raw-sys 0.1.4", - "windows-sys 0.45.0", + "frame-support", + "frame-system", + "impl-trait-for-tuples", + "log", + "pallet-timestamp", + "parity-scale-codec", + "scale-info", + "sp-core 34.0.0", + "sp-io 38.0.0", + "sp-runtime 39.0.3", + "sp-session", + "sp-staking 36.0.0", + "sp-state-machine 0.43.0", + "sp-trie 37.0.0", ] [[package]] -name = "rustix" -version = "0.38.36" +name = "pallet-session-benchmarking" +version = "38.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f55e80d50763938498dd5ebb18647174e0c76dc38c5505294bb224624f30f36" +checksum = "8aadce7df0fee981721983795919642648b846dab5ab9096f82c2cea781007d0" dependencies = [ - "bitflags 2.6.0", - "errno", - "libc", - "linux-raw-sys 0.4.14", - "windows-sys 0.52.0", + "frame-benchmarking", + "frame-support", + "frame-system", + "pallet-session", + "pallet-staking", + "parity-scale-codec", + "rand", + "sp-runtime 39.0.3", + "sp-session", ] [[package]] -name = "rustls" -version = "0.21.12" +name = "pallet-skip-feeless-payment" +version = "13.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" +checksum = "f8c2cb0dae13d2c2d2e76373f337d408468f571459df1900cbd7458f21cf6c01" dependencies = [ - "log", - "ring", - "rustls-webpki 0.101.7", - "sct", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-runtime 39.0.3", ] [[package]] -name = "rustls" -version = "0.22.4" +name = "pallet-society" +version = "38.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf4ef73721ac7bcd79b2b315da7779d8fc09718c6b3d2d1b2d94850eb8c18432" +checksum = "d1dc69fea8a8de343e71691f009d5fece6ae302ed82b7bb357882b2ea6454143" dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", "log", - "ring", - "rustls-pki-types", - "rustls-webpki 0.102.8", - "subtle", - "zeroize", + "parity-scale-codec", + "rand_chacha", + "scale-info", + "sp-arithmetic", + "sp-io 38.0.0", + "sp-runtime 39.0.3", ] [[package]] -name = "rustls" -version = "0.23.13" +name = "pallet-staking" +version = "38.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2dabaac7466917e566adb06783a81ca48944c6898a1b08b9374106dd671f4c8" +checksum = "c870d123f4f053b56af808a4beae1ffc4309a696e829796c26837936c926db3b" dependencies = [ + "frame-benchmarking", + "frame-election-provider-support", + "frame-support", + "frame-system", "log", - "once_cell", - "ring", - "rustls-pki-types", - "rustls-webpki 0.102.8", - "subtle", - "zeroize", + "pallet-authorship", + "pallet-session", + "parity-scale-codec", + "scale-info", + "serde", + "sp-application-crypto 38.0.0", + "sp-io 38.0.0", + "sp-runtime 39.0.3", + "sp-staking 36.0.0", ] [[package]] -name = "rustls-native-certs" -version = "0.6.3" +name = "pallet-staking-reward-fn" +version = "22.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9aace74cb666635c918e9c12bc0d348266037aa8eb599b5cba565709a8dff00" +checksum = "988a7ebeacc84d4bdb0b12409681e956ffe35438447d8f8bc78db547cffb6ebc" dependencies = [ - "openssl-probe", - "rustls-pemfile 1.0.4", - "schannel", - "security-framework", + "log", + "sp-arithmetic", ] [[package]] -name = "rustls-native-certs" -version = "0.7.3" +name = "pallet-staking-runtime-api" +version = "24.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5bfb394eeed242e909609f56089eecfe5fda225042e8b171791b9c95f5931e5" +checksum = "e7298559ef3a6b2f5dfbe9a3b8f3d22f2ff9b073c97f4c4853d2b316d973e72d" dependencies = [ - "openssl-probe", - "rustls-pemfile 2.1.3", - "rustls-pki-types", - "schannel", - "security-framework", + "parity-scale-codec", + "sp-api", + "sp-staking 36.0.0", ] [[package]] -name = "rustls-pemfile" -version = "1.0.4" +name = "pallet-state-trie-migration" +version = "40.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" +checksum = "138c15b4200b9dc4c3e031def6a865a235cdc76ff91ee96fba19ca1787c9dda6" dependencies = [ - "base64 0.21.7", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-core 34.0.0", + "sp-io 38.0.0", + "sp-runtime 39.0.3", ] [[package]] -name = "rustls-pemfile" -version = "2.1.3" +name = "pallet-statement" +version = "20.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "196fe16b00e106300d3e45ecfcb764fa292a535d7326a29a5875c579c7417425" +checksum = "5e03e147efa900e75cd106337f36da3d7dcd185bd9e5f5c3df474c08c3c37d16" dependencies = [ - "base64 0.22.1", - "rustls-pki-types", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-api", + "sp-core 34.0.0", + "sp-io 38.0.0", + "sp-runtime 39.0.3", + "sp-statement-store", ] [[package]] -name = "rustls-pki-types" -version = "1.8.0" +name = "pallet-sudo" +version = "38.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc0a2ce646f8655401bb81e7927b812614bd5d91dbc968696be50603510fcaf0" +checksum = "1574fe2aed3d52db4a389b77b53d8c9758257b121e3e7bbe24c4904e11681e0e" +dependencies = [ + "docify", + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-io 38.0.0", + "sp-runtime 39.0.3", +] [[package]] -name = "rustls-platform-verifier" -version = "0.3.4" +name = "pallet-timestamp" +version = "37.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afbb878bdfdf63a336a5e63561b1835e7a8c91524f51621db870169eac84b490" +checksum = "a9ba9b71bbfd33ae672f23ba7efaeed2755fdac37b8f946cb7474fc37841b7e1" dependencies = [ - "core-foundation", - "core-foundation-sys", - "jni", + "docify", + "frame-benchmarking", + "frame-support", + "frame-system", "log", - "once_cell", - "rustls 0.23.13", - "rustls-native-certs 0.7.3", - "rustls-platform-verifier-android", - "rustls-webpki 0.102.8", - "security-framework", - "security-framework-sys", - "webpki-roots", - "winapi", + "parity-scale-codec", + "scale-info", + "sp-inherents", + "sp-io 38.0.0", + "sp-runtime 39.0.3", + "sp-storage 21.0.0", + "sp-timestamp", ] [[package]] -name = "rustls-platform-verifier-android" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f" - -[[package]] -name = "rustls-webpki" -version = "0.101.7" +name = "pallet-tips" +version = "37.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" +checksum = "aa1d4371a70c309ba11624933f8f5262fe4edad0149c556361d31f26190da936" dependencies = [ - "ring", - "untrusted", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "pallet-treasury", + "parity-scale-codec", + "scale-info", + "serde", + "sp-core 34.0.0", + "sp-io 38.0.0", + "sp-runtime 39.0.3", ] [[package]] -name = "rustls-webpki" -version = "0.102.8" +name = "pallet-transaction-payment" +version = "38.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" +checksum = "47b1aa3498107a30237f941b0f02180db3b79012c3488878ff01a4ac3e8ee04e" dependencies = [ - "ring", - "rustls-pki-types", - "untrusted", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "serde", + "sp-core 34.0.0", + "sp-io 38.0.0", + "sp-runtime 39.0.3", ] [[package]] -name = "rustversion" -version = "1.0.17" +name = "pallet-transaction-payment-rpc-runtime-api" +version = "38.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" +checksum = "49fdf5ab71e9dbcadcf7139736b6ea6bac8ec4a83985d46cbd130e1eec770e41" +dependencies = [ + "pallet-transaction-payment", + "parity-scale-codec", + "sp-api", + "sp-runtime 39.0.3", + "sp-weights", +] [[package]] -name = "ruzstd" -version = "0.5.0" +name = "pallet-transaction-storage" +version = "37.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58c4eb8a81997cf040a091d1f7e1938aeab6749d3a0dfa73af43cdc32393483d" +checksum = "f8c337a972a6a796c0a0acc6c03b5e02901c43ad721ce79eb87b45717d75c93b" dependencies = [ - "byteorder", - "derive_more", - "twox-hash", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "pallet-balances", + "parity-scale-codec", + "scale-info", + "serde", + "sp-inherents", + "sp-io 38.0.0", + "sp-runtime 39.0.3", + "sp-transaction-storage-proof", ] [[package]] -name = "rw-stream-sink" -version = "0.4.0" +name = "pallet-treasury" +version = "37.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8c9026ff5d2f23da5e45bbc283f156383001bfb09c4e44256d02c1a685fe9a1" +checksum = "98bfdd3bb9b58fb010bcd419ff5bf940817a8e404cdbf7886a53ac730f5dda2b" dependencies = [ - "futures", - "pin-project", - "static_assertions", + "docify", + "frame-benchmarking", + "frame-support", + "frame-system", + "impl-trait-for-tuples", + "pallet-balances", + "parity-scale-codec", + "scale-info", + "serde", + "sp-core 34.0.0", + "sp-runtime 39.0.3", ] [[package]] -name = "ryu" -version = "1.0.18" +name = "pallet-tx-pause" +version = "19.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" +checksum = "cee153f5be5efc84ebd53aa581e5361cde17dc3669ef80d8ad327f4041d89ebe" +dependencies = [ + "docify", + "frame-benchmarking", + "frame-support", + "frame-system", + "pallet-balances", + "pallet-proxy", + "pallet-utility", + "parity-scale-codec", + "scale-info", + "sp-runtime 39.0.3", +] [[package]] -name = "same-file" -version = "1.0.6" +name = "pallet-uniques" +version = "38.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +checksum = "c2b13cdaedf2d5bd913a5f6e637cb52b5973d8ed4b8d45e56d921bc4d627006f" dependencies = [ - "winapi-util", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-runtime 39.0.3", ] [[package]] -name = "scale-bits" -version = "0.4.0" +name = "pallet-utility" +version = "38.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "036575c29af9b6e4866ffb7fa055dbf623fe7a9cc159b33786de6013a6969d89" +checksum = "2fdcade6efc0b66fc7fc4138964802c02d0ffb7380d894e26b9dd5073727d2b3" dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", "parity-scale-codec", "scale-info", + "sp-core 34.0.0", + "sp-io 38.0.0", + "sp-runtime 39.0.3", ] [[package]] -name = "scale-bits" -version = "0.6.0" +name = "pallet-vesting" +version = "38.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e57b1e7f6b65ed1f04e79a85a57d755ad56d76fdf1e9bddcc9ae14f71fcdcf54" +checksum = "807df2ef13ab6bf940879352c3013bfa00b670458b4c125c2f60e5753f68e3d5" dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "log", "parity-scale-codec", "scale-info", - "scale-type-resolver", - "serde", + "sp-runtime 39.0.3", ] [[package]] -name = "scale-decode" -version = "0.10.0" +name = "pallet-whitelist" +version = "37.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7caaf753f8ed1ab4752c6afb20174f03598c664724e0e32628e161c21000ff76" +checksum = "1ef17df925290865cf37096dd0cb76f787df11805bba01b1d0ca3e106d06280b" dependencies = [ - "derive_more", + "frame-benchmarking", + "frame-support", + "frame-system", "parity-scale-codec", - "scale-bits 0.4.0", - "scale-decode-derive 0.10.0", "scale-info", - "smallvec", + "sp-api", + "sp-runtime 39.0.3", ] [[package]] -name = "scale-decode" -version = "0.13.1" +name = "pallet-xcm" +version = "17.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e98f3262c250d90e700bb802eb704e1f841e03331c2eb815e46516c4edbf5b27" +checksum = "989676964dbda5f5275650fbdcd3894fe7fac626d113abf89d572b4952adcc36" dependencies = [ - "derive_more", + "bounded-collections", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "pallet-balances", "parity-scale-codec", - "primitive-types", - "scale-bits 0.6.0", - "scale-decode-derive 0.13.1", - "scale-type-resolver", - "smallvec", + "scale-info", + "serde", + "sp-core 34.0.0", + "sp-io 38.0.0", + "sp-runtime 39.0.3", + "staging-xcm 14.2.0", + "staging-xcm-builder", + "staging-xcm-executor", + "tracing", + "xcm-runtime-apis", ] [[package]] -name = "scale-decode-derive" -version = "0.10.0" +name = "pallet-xcm-benchmarks" +version = "17.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3475108a1b62c7efd1b5c65974f30109a598b2f45f23c9ae030acb9686966db" +checksum = "2da423463933b42f4a4c74175f9e9295a439de26719579b894ce533926665e4a" dependencies = [ - "darling 0.14.4", - "proc-macro-crate 1.3.1", - "proc-macro2", - "quote", - "syn 1.0.109", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-io 38.0.0", + "sp-runtime 39.0.3", + "staging-xcm 14.2.0", + "staging-xcm-builder", + "staging-xcm-executor", ] [[package]] -name = "scale-decode-derive" -version = "0.13.1" +name = "pallet-xcm-bridge-hub" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bb22f574168103cdd3133b19281639ca65ad985e24612728f727339dcaf4021" +checksum = "d5f9670065b7cba92771060a4a3925b6650ff67611443ccfccd5aa356f7d5aac" dependencies = [ - "darling 0.14.4", - "proc-macro2", - "quote", - "syn 1.0.109", + "bp-messages", + "bp-runtime", + "bp-xcm-bridge-hub", + "frame-support", + "frame-system", + "log", + "pallet-bridge-messages", + "parity-scale-codec", + "scale-info", + "sp-core 34.0.0", + "sp-runtime 39.0.3", + "sp-std", + "staging-xcm 14.2.0", + "staging-xcm-builder", + "staging-xcm-executor", ] [[package]] -name = "scale-encode" -version = "0.5.0" +name = "pallet-xcm-bridge-hub-router" +version = "0.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d70cb4b29360105483fac1ed567ff95d65224a14dd275b6303ed0a654c78de5" +checksum = "f3b5347c826b721098ef39afb0d750e621c77538044fc1e865af1a8747824fdf" dependencies = [ - "derive_more", + "bp-xcm-bridge-hub-router", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", "parity-scale-codec", - "scale-encode-derive 0.5.0", "scale-info", - "smallvec", + "sp-core 34.0.0", + "sp-runtime 39.0.3", + "sp-std", + "staging-xcm 14.2.0", + "staging-xcm-builder", ] [[package]] -name = "scale-encode" -version = "0.7.1" +name = "parachains-common" +version = "18.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ba0b9c48dc0eb20c60b083c29447c0c4617cb7c4a4c9fef72aa5c5bc539e15e" +checksum = "c9460a69f409be27c62161d8b4d36ffc32735d09a4f9097f9c789db0cca7196c" dependencies = [ - "derive_more", + "cumulus-primitives-core", + "cumulus-primitives-utility", + "frame-support", + "frame-system", + "log", + "pallet-asset-tx-payment", + "pallet-assets", + "pallet-authorship", + "pallet-balances", + "pallet-collator-selection", + "pallet-message-queue", + "pallet-xcm", "parity-scale-codec", - "primitive-types", - "scale-bits 0.6.0", - "scale-encode-derive 0.7.1", - "scale-type-resolver", - "smallvec", + "polkadot-primitives 16.0.0", + "scale-info", + "sp-consensus-aura", + "sp-core 34.0.0", + "sp-io 38.0.0", + "sp-runtime 39.0.3", + "staging-parachain-info", + "staging-xcm 14.2.0", + "staging-xcm-executor", + "substrate-wasm-builder", +] + +[[package]] +name = "parachains-runtimes-test-utils" +version = "17.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "287d2db0a2d19466caa579a69f021bfdc6fa352f382c8395dade58d1d0c6adfe" +dependencies = [ + "cumulus-pallet-parachain-system", + "cumulus-pallet-xcmp-queue", + "cumulus-primitives-core", + "cumulus-primitives-parachain-inherent", + "cumulus-test-relay-sproof-builder", + "frame-support", + "frame-system", + "pallet-balances", + "pallet-collator-selection", + "pallet-session", + "pallet-timestamp", + "pallet-xcm", + "parity-scale-codec", + "polkadot-parachain-primitives", + "sp-consensus-aura", + "sp-core 34.0.0", + "sp-io 38.0.0", + "sp-runtime 39.0.3", + "sp-tracing 17.0.1", + "staging-parachain-info", + "staging-xcm 14.2.0", + "staging-xcm-executor", + "substrate-wasm-builder", ] [[package]] -name = "scale-encode-derive" -version = "0.5.0" +name = "parity-bip39" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "995491f110efdc6bea96d6a746140e32bfceb4ea47510750a5467295a4707a25" +checksum = "4e69bf016dc406eff7d53a7d3f7cf1c2e72c82b9088aac1118591e36dd2cd3e9" dependencies = [ - "darling 0.14.4", - "proc-macro-crate 1.3.1", - "proc-macro2", - "quote", - "syn 1.0.109", + "bitcoin_hashes 0.13.0", + "rand", + "rand_core 0.6.4", + "serde", + "unicode-normalization", ] [[package]] -name = "scale-encode-derive" -version = "0.7.1" +name = "parity-bytes" +version = "0.1.2" 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", -] +checksum = "16b56e3a2420138bdb970f84dfb9c774aea80fa0e7371549eedec0d80c209c67" [[package]] -name = "scale-info" -version = "2.11.3" +name = "parity-scale-codec" +version = "3.6.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eca070c12893629e2cc820a9761bedf6ce1dcddc9852984d1dc734b8bd9bd024" +checksum = "306800abfa29c7f16596b5970a588435e3d5b3149683d00c12b699cc19f895ee" dependencies = [ + "arrayvec 0.7.6", "bitvec", - "cfg-if", - "derive_more", - "parity-scale-codec", - "scale-info-derive", - "schemars", + "byte-slice-cast", + "bytes", + "impl-trait-for-tuples", + "parity-scale-codec-derive", "serde", ] [[package]] -name = "scale-info-derive" -version = "2.11.3" +name = "parity-scale-codec-derive" +version = "3.6.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d35494501194174bda522a32605929eefc9ecf7e0a326c26db1fdd85881eb62" +checksum = "d830939c76d294956402033aee57a6da7b438f2294eb94864c37b0569053a42c" dependencies = [ "proc-macro-crate 3.2.0", "proc-macro2", @@ -5674,1048 +8387,4659 @@ dependencies = [ ] [[package]] -name = "scale-type-resolver" -version = "0.2.0" +name = "parity-util-mem" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0cded6518aa0bd6c1be2b88ac81bf7044992f0f154bfbabd5ad34f43512abcb" +checksum = "0d32c34f4f5ca7f9196001c0aba5a1f9a5a12382c8944b8b0f90233282d1e8f8" dependencies = [ - "scale-info", + "cfg-if", + "ethereum-types", + "hashbrown 0.12.3", + "impl-trait-for-tuples", + "lru 0.8.1", + "parity-util-mem-derive", + "parking_lot", + "primitive-types 0.12.2", "smallvec", + "winapi", ] [[package]] -name = "scale-typegen" -version = "0.8.0" +name = "parity-util-mem-derive" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "498d1aecf2ea61325d4511787c115791639c0fd21ef4f8e11e49dd09eff2bbac" +checksum = "f557c32c6d268a07c921471619c0295f5efad3a0e76d4f97a05c091a51d110b2" dependencies = [ "proc-macro2", - "quote", - "scale-info", - "syn 2.0.77", - "thiserror", -] - -[[package]] -name = "scale-value" -version = "0.16.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba4d772cfb7569e03868400344a1695d16560bf62b86b918604773607d39ec84" -dependencies = [ - "base58", - "blake2", - "derive_more", - "either", - "frame-metadata 15.1.0", - "parity-scale-codec", - "scale-bits 0.6.0", - "scale-decode 0.13.1", - "scale-encode 0.7.1", - "scale-info", - "scale-type-resolver", - "serde", - "yap", + "syn 1.0.109", + "synstructure 0.12.6", ] [[package]] -name = "schannel" -version = "0.1.24" +name = "parity-wasm" +version = "0.45.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9aaafd5a2b6e3d657ff009d82fbd630b6bd54dd4eb06f21693925cdf80f9b8b" -dependencies = [ - "windows-sys 0.59.0", -] +checksum = "e1ad0aff30c1da14b1254fcb2af73e1fa9a28670e584a626f53a369d0e157304" [[package]] -name = "schemars" -version = "0.8.21" +name = "parking" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09c024468a378b7e36765cd36702b7a90cc3cba11654f6685c8f233408e89e92" -dependencies = [ - "dyn-clone", - "schemars_derive", - "serde", - "serde_json", -] +checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" [[package]] -name = "schemars_derive" -version = "0.8.21" +name = "parking_lot" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1eee588578aff73f856ab961cd2f79e36bc45d7ded33a7562adba4667aecc0e" +checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" dependencies = [ - "proc-macro2", - "quote", - "serde_derive_internals", - "syn 2.0.77", + "lock_api", + "parking_lot_core", ] [[package]] -name = "schnellru" -version = "0.2.3" +name = "parking_lot_core" +version = "0.9.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9a8ef13a93c54d20580de1e5c413e624e53121d42fc7e2c11d10ef7f8b02367" +checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" dependencies = [ - "ahash 0.8.11", "cfg-if", - "hashbrown 0.13.2", + "libc", + "redox_syscall", + "smallvec", + "windows-targets 0.52.6", ] [[package]] -name = "schnorrkel" -version = "0.11.4" +name = "password-hash" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8de18f6d8ba0aad7045f5feae07ec29899c1112584a38509a84ad7b04451eaa0" +checksum = "346f04948ba92c43e8469c1ee6736c7563d71012b17d40745260fe106aac2166" dependencies = [ - "aead", - "arrayref", - "arrayvec 0.7.6", - "curve25519-dalek 4.1.3", - "getrandom_or_panic", - "merlin", + "base64ct", "rand_core 0.6.4", - "serde_bytes", - "sha2 0.10.8", "subtle", - "zeroize", ] [[package]] -name = "scopeguard" -version = "1.2.0" +name = "paste" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" [[package]] -name = "scratch" -version = "1.0.7" +name = "pathdiff" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3cf7c11c38cb994f3d40e8a8cde3bbd1f72a435e4c49e85d6553d8312306152" +checksum = "df94ce210e5bc13cb6651479fa48d14f601d9858cfe0467f43ae157023b938d3" [[package]] -name = "sct" -version = "0.7.1" +name = "pbkdf2" +version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" +checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" dependencies = [ - "ring", - "untrusted", + "digest 0.10.7", + "hmac 0.12.1", + "password-hash", ] [[package]] -name = "seahash" -version = "4.1.0" +name = "pem" +version = "3.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b" +checksum = "8e459365e590736a54c3fa561947c84837534b8e9af6fc5bf781307e82658fae" +dependencies = [ + "base64 0.22.1", + "serde", +] [[package]] -name = "sec1" -version = "0.7.3" +name = "percent-encoding" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" -dependencies = [ - "base16ct", - "der", - "generic-array", - "pkcs8", - "serdect", - "subtle", - "zeroize", -] +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] -name = "secp256k1" -version = "0.28.2" +name = "pest" +version = "2.7.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d24b59d129cdadea20aea4fb2352fa053712e5d713eee47d700cd4b2bc002f10" +checksum = "8b7cafe60d6cf8e62e1b9b2ea516a089c008945bb5a275416789e7db0bc199dc" dependencies = [ - "secp256k1-sys", + "memchr", + "thiserror 2.0.8", + "ucd-trie", ] [[package]] -name = "secp256k1-sys" -version = "0.9.2" +name = "pest_derive" +version = "2.7.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5d1746aae42c19d583c3c1a8c646bfad910498e2051c551a7f2e3c0c9fbb7eb" +checksum = "816518421cfc6887a0d62bf441b6ffb4536fcc926395a69e1a85852d4363f57e" dependencies = [ - "cc", + "pest", + "pest_generator", ] [[package]] -name = "secrecy" -version = "0.8.0" +name = "pest_generator" +version = "2.7.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bd1c54ea06cfd2f6b63219704de0b9b4f72dcc2b8fdef820be6cd799780e91e" +checksum = "7d1396fd3a870fc7838768d171b4616d5c91f6cc25e377b673d714567d99377b" dependencies = [ - "serde", - "zeroize", + "pest", + "pest_meta", + "proc-macro2", + "quote", + "syn 2.0.90", ] [[package]] -name = "security-framework" -version = "2.11.1" +name = "pest_meta" +version = "2.7.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" +checksum = "e1e58089ea25d717bfd31fb534e4f3afcc2cc569c70de3e239778991ea3b7dea" dependencies = [ - "bitflags 2.6.0", - "core-foundation", - "core-foundation-sys", - "libc", - "num-bigint", - "security-framework-sys", + "once_cell", + "pest", + "sha2 0.10.8", ] [[package]] -name = "security-framework-sys" -version = "2.11.1" +name = "pin-project" +version = "1.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75da29fe9b9b08fe9d6b22b5b4bcbc75d8db3aa31e639aa56bb62e9d46bfceaf" +checksum = "be57f64e946e500c8ee36ef6331845d40a93055567ec57e8fae13efd33759b95" dependencies = [ - "core-foundation-sys", - "libc", + "pin-project-internal", ] [[package]] -name = "semver" -version = "1.0.23" +name = "pin-project-internal" +version = "1.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" +checksum = "3c0f5fad0874fc7abcd4d750e76917eaebbecaa2c20bde22e1dbeeba8beb758c" dependencies = [ - "serde", + "proc-macro2", + "quote", + "syn 2.0.90", ] [[package]] -name = "serde" -version = "1.0.210" +name = "pin-project-lite" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8e3592472072e6e22e0a54d5904d9febf8508f65fb8552499a1abc7d1078c3a" -dependencies = [ - "serde_derive", -] +checksum = "915a1e146535de9163f3987b8944ed8cf49a18bb0056bcebcdcece385cece4ff" [[package]] -name = "serde-value" -version = "0.7.0" +name = "pin-utils" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3a1a3341211875ef120e117ea7fd5228530ae7e7036a779fdc9117be6b3282c" -dependencies = [ - "ordered-float", - "serde", -] +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] -name = "serde_bytes" -version = "0.11.15" +name = "piper" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "387cc504cb06bb40a96c8e04e951fe01854cf6bc921053c954e4a606d9675c6a" +checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" dependencies = [ - "serde", + "atomic-waker", + "fastrand", + "futures-io", ] [[package]] -name = "serde_derive" -version = "1.0.210" +name = "pkcs8" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "243902eda00fad750862fc144cea25caca5e20d615af0a81bee94ca738f1df1f" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.77", + "der", + "spki", ] [[package]] -name = "serde_derive_internals" -version = "0.29.1" +name = "pkg-config" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.77", -] +checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" [[package]] -name = "serde_json" -version = "1.0.128" +name = "polkadot-ckb-merkle-mountain-range" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ff5456707a1de34e7e37f2a6fd3d3f808c318259cbd01ab6377795054b483d8" +checksum = "a4b44320e5f7ce2c18227537a3032ae5b2c476a7e8eddba45333e1011fc31b92" dependencies = [ - "indexmap 2.5.0", - "itoa", - "memchr", - "ryu", - "serde", + "cfg-if", + "itertools 0.10.5", ] [[package]] -name = "serde_repr" -version = "0.1.19" +name = "polkadot-core-primitives" +version = "15.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" +checksum = "e2900d3b857e34c480101618a950c3a4fbcddc8c0d50573d48553376185908b8" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.77", + "parity-scale-codec", + "scale-info", + "sp-core 34.0.0", + "sp-runtime 39.0.3", ] [[package]] -name = "serde_spanned" -version = "0.6.7" +name = "polkadot-parachain-primitives" +version = "14.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb5b1b31579f3811bf615c144393417496f152e12ac8b7663bf664f4a815306d" +checksum = "52b5648a2e8ce1f9a0f8c41c38def670cefd91932cd793468e1a5b0b0b4e4af1" dependencies = [ + "bounded-collections", + "derive_more 0.99.18", + "parity-scale-codec", + "polkadot-core-primitives", + "scale-info", "serde", + "sp-core 34.0.0", + "sp-runtime 39.0.3", + "sp-weights", ] [[package]] -name = "serde_urlencoded" -version = "0.7.1" +name = "polkadot-primitives" +version = "15.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +checksum = "b57bc055fa389372ec5fc0001b99aeffd50f3fd379280ce572d935189bb58dd8" dependencies = [ - "form_urlencoded", - "itoa", - "ryu", + "bitvec", + "hex-literal", + "log", + "parity-scale-codec", + "polkadot-core-primitives", + "polkadot-parachain-primitives", + "scale-info", "serde", + "sp-api", + "sp-application-crypto 38.0.0", + "sp-arithmetic", + "sp-authority-discovery", + "sp-consensus-slots", + "sp-core 34.0.0", + "sp-inherents", + "sp-io 38.0.0", + "sp-keystore 0.40.0", + "sp-runtime 39.0.3", + "sp-staking 34.0.0", ] [[package]] -name = "serde_with" -version = "3.9.0" +name = "polkadot-primitives" +version = "16.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69cecfa94848272156ea67b2b1a53f20fc7bc638c4a46d2f8abde08f05f4b857" +checksum = "6bb20b75d33212150242d39890d7ededab55f1084160c337f15d0eb8ca8c3ad4" dependencies = [ - "base64 0.22.1", - "chrono", - "hex", - "indexmap 1.9.3", - "indexmap 2.5.0", + "bitvec", + "hex-literal", + "log", + "parity-scale-codec", + "polkadot-core-primitives", + "polkadot-parachain-primitives", + "scale-info", "serde", - "serde_derive", - "serde_json", - "time", + "sp-api", + "sp-application-crypto 38.0.0", + "sp-arithmetic", + "sp-authority-discovery", + "sp-consensus-slots", + "sp-core 34.0.0", + "sp-inherents", + "sp-io 38.0.0", + "sp-keystore 0.40.0", + "sp-runtime 39.0.3", + "sp-staking 36.0.0", ] [[package]] -name = "serde_yaml" -version = "0.9.34+deprecated" +name = "polkadot-runtime-common" +version = "17.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" +checksum = "dc15154ba5ca55d323fcf7af0f5dcd39d58dcb4dfac3d9b30404840a6d8bbde4" dependencies = [ - "indexmap 2.5.0", - "itoa", - "ryu", + "bitvec", + "frame-benchmarking", + "frame-election-provider-support", + "frame-support", + "frame-system", + "impl-trait-for-tuples", + "libsecp256k1", + "log", + "pallet-asset-rate", + "pallet-authorship", + "pallet-balances", + "pallet-broker", + "pallet-election-provider-multi-phase", + "pallet-fast-unstake", + "pallet-identity", + "pallet-session", + "pallet-staking", + "pallet-staking-reward-fn", + "pallet-timestamp", + "pallet-transaction-payment", + "pallet-treasury", + "pallet-vesting", + "parity-scale-codec", + "polkadot-primitives 16.0.0", + "polkadot-runtime-parachains", + "rustc-hex", + "scale-info", "serde", - "unsafe-libyaml", + "serde_derive", + "slot-range-helper", + "sp-api", + "sp-core 34.0.0", + "sp-inherents", + "sp-io 38.0.0", + "sp-npos-elections", + "sp-runtime 39.0.3", + "sp-session", + "sp-staking 36.0.0", + "staging-xcm 14.2.0", + "staging-xcm-builder", + "staging-xcm-executor", + "static_assertions", ] [[package]] -name = "serdect" -version = "0.2.0" +name = "polkadot-runtime-metrics" +version = "17.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a84f14a19e9a014bb9f4512488d9829a68e04ecabffb0f9904cd1ace94598177" +checksum = "2c306f1ace7644a24de860479f92cf8d6467393bb0c9b0777c57e2d42c9d452a" dependencies = [ - "base16ct", - "serde", + "bs58", + "frame-benchmarking", + "parity-scale-codec", + "polkadot-primitives 16.0.0", + "sp-tracing 17.0.1", ] [[package]] -name = "sha-1" -version = "0.9.8" +name = "polkadot-runtime-parachains" +version = "17.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99cd6713db3cf16b6c84e06321e049a9b9f699826e16096d23bbcc44d15d51a6" +checksum = "bd58e3a17e5df678f5737b018cbfec603af2c93bec56bbb9f8fb8b2b017b54b1" dependencies = [ - "block-buffer 0.9.0", - "cfg-if", - "cpufeatures", - "digest 0.9.0", - "opaque-debug", + "bitflags 1.3.2", + "bitvec", + "derive_more 0.99.18", + "frame-benchmarking", + "frame-support", + "frame-system", + "impl-trait-for-tuples", + "log", + "pallet-authority-discovery", + "pallet-authorship", + "pallet-babe", + "pallet-balances", + "pallet-broker", + "pallet-message-queue", + "pallet-mmr", + "pallet-session", + "pallet-staking", + "pallet-timestamp", + "pallet-vesting", + "parity-scale-codec", + "polkadot-core-primitives", + "polkadot-parachain-primitives", + "polkadot-primitives 16.0.0", + "polkadot-runtime-metrics", + "rand", + "rand_chacha", + "scale-info", + "serde", + "sp-api", + "sp-application-crypto 38.0.0", + "sp-arithmetic", + "sp-core 34.0.0", + "sp-inherents", + "sp-io 38.0.0", + "sp-keystore 0.40.0", + "sp-runtime 39.0.3", + "sp-session", + "sp-staking 36.0.0", + "sp-std", + "staging-xcm 14.2.0", + "staging-xcm-executor", ] [[package]] -name = "sha1" -version = "0.10.6" +name = "polkadot-sdk" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest 0.10.7", +checksum = "eb819108697967452fa6d8d96ab4c0d48cbaa423b3156499dcb24f1cf95d6775" +dependencies = [ + "asset-test-utils", + "assets-common", + "binary-merkle-tree", + "bp-header-chain", + "bp-messages", + "bp-parachains", + "bp-polkadot", + "bp-polkadot-core", + "bp-relayers", + "bp-runtime", + "bp-test-utils", + "bp-xcm-bridge-hub", + "bp-xcm-bridge-hub-router", + "bridge-hub-common", + "bridge-hub-test-utils", + "bridge-runtime-common", + "cumulus-pallet-aura-ext", + "cumulus-pallet-dmp-queue", + "cumulus-pallet-parachain-system", + "cumulus-pallet-parachain-system-proc-macro", + "cumulus-pallet-session-benchmarking", + "cumulus-pallet-solo-to-para", + "cumulus-pallet-xcm", + "cumulus-pallet-xcmp-queue", + "cumulus-ping", + "cumulus-primitives-aura", + "cumulus-primitives-core", + "cumulus-primitives-parachain-inherent", + "cumulus-primitives-proof-size-hostfunction", + "cumulus-primitives-storage-weight-reclaim", + "cumulus-primitives-timestamp", + "cumulus-primitives-utility", + "cumulus-test-relay-sproof-builder", + "frame-benchmarking", + "frame-benchmarking-pallet-pov", + "frame-election-provider-support", + "frame-executive", + "frame-metadata-hash-extension", + "frame-support", + "frame-support-procedural", + "frame-system", + "frame-system-benchmarking", + "frame-system-rpc-runtime-api", + "frame-try-runtime", + "pallet-alliance", + "pallet-asset-conversion", + "pallet-asset-conversion-ops", + "pallet-asset-conversion-tx-payment", + "pallet-asset-rate", + "pallet-asset-tx-payment", + "pallet-assets", + "pallet-assets-freezer", + "pallet-atomic-swap", + "pallet-aura", + "pallet-authority-discovery", + "pallet-authorship", + "pallet-babe", + "pallet-bags-list", + "pallet-balances", + "pallet-beefy", + "pallet-beefy-mmr", + "pallet-bounties", + "pallet-bridge-grandpa", + "pallet-bridge-messages", + "pallet-bridge-parachains", + "pallet-bridge-relayers", + "pallet-broker", + "pallet-child-bounties", + "pallet-collator-selection", + "pallet-collective", + "pallet-collective-content", + "pallet-contracts", + "pallet-contracts-mock-network", + "pallet-conviction-voting", + "pallet-core-fellowship", + "pallet-delegated-staking", + "pallet-democracy", + "pallet-dev-mode", + "pallet-election-provider-multi-phase", + "pallet-election-provider-support-benchmarking", + "pallet-elections-phragmen", + "pallet-fast-unstake", + "pallet-glutton", + "pallet-grandpa", + "pallet-identity", + "pallet-im-online", + "pallet-indices", + "pallet-insecure-randomness-collective-flip", + "pallet-lottery", + "pallet-membership", + "pallet-message-queue", + "pallet-migrations", + "pallet-mixnet", + "pallet-mmr", + "pallet-multisig", + "pallet-nft-fractionalization", + "pallet-nfts", + "pallet-nfts-runtime-api", + "pallet-nis", + "pallet-node-authorization", + "pallet-nomination-pools", + "pallet-nomination-pools-benchmarking", + "pallet-nomination-pools-runtime-api", + "pallet-offences", + "pallet-offences-benchmarking", + "pallet-paged-list", + "pallet-parameters", + "pallet-preimage", + "pallet-proxy", + "pallet-ranked-collective", + "pallet-recovery", + "pallet-referenda", + "pallet-remark", + "pallet-revive", + "pallet-revive-fixtures", + "pallet-revive-mock-network", + "pallet-root-offences", + "pallet-root-testing", + "pallet-safe-mode", + "pallet-salary", + "pallet-scheduler", + "pallet-scored-pool", + "pallet-session", + "pallet-session-benchmarking", + "pallet-skip-feeless-payment", + "pallet-society", + "pallet-staking", + "pallet-staking-reward-fn", + "pallet-staking-runtime-api", + "pallet-state-trie-migration", + "pallet-statement", + "pallet-sudo", + "pallet-timestamp", + "pallet-tips", + "pallet-transaction-payment", + "pallet-transaction-payment-rpc-runtime-api", + "pallet-transaction-storage", + "pallet-treasury", + "pallet-tx-pause", + "pallet-uniques", + "pallet-utility", + "pallet-vesting", + "pallet-whitelist", + "pallet-xcm", + "pallet-xcm-benchmarks", + "pallet-xcm-bridge-hub", + "pallet-xcm-bridge-hub-router", + "parachains-common", + "parachains-runtimes-test-utils", + "polkadot-core-primitives", + "polkadot-parachain-primitives", + "polkadot-primitives 16.0.0", + "polkadot-runtime-common", + "polkadot-runtime-metrics", + "polkadot-runtime-parachains", + "polkadot-sdk-frame", + "sc-executor", + "slot-range-helper", + "snowbridge-beacon-primitives", + "snowbridge-core", + "snowbridge-ethereum", + "snowbridge-outbound-queue-merkle-tree", + "snowbridge-outbound-queue-runtime-api", + "snowbridge-pallet-ethereum-client", + "snowbridge-pallet-ethereum-client-fixtures", + "snowbridge-pallet-inbound-queue", + "snowbridge-pallet-inbound-queue-fixtures", + "snowbridge-pallet-outbound-queue", + "snowbridge-pallet-system", + "snowbridge-router-primitives", + "snowbridge-runtime-common", + "snowbridge-runtime-test-common", + "snowbridge-system-runtime-api", + "sp-api", + "sp-api-proc-macro", + "sp-application-crypto 38.0.0", + "sp-arithmetic", + "sp-authority-discovery", + "sp-block-builder", + "sp-consensus-aura", + "sp-consensus-babe", + "sp-consensus-beefy", + "sp-consensus-grandpa", + "sp-consensus-pow", + "sp-consensus-slots", + "sp-core 34.0.0", + "sp-core-hashing", + "sp-crypto-ec-utils", + "sp-crypto-hashing", + "sp-debug-derive", + "sp-externalities 0.29.0", + "sp-genesis-builder", + "sp-inherents", + "sp-io 38.0.0", + "sp-keyring", + "sp-keystore 0.40.0", + "sp-metadata-ir", + "sp-mixnet", + "sp-mmr-primitives", + "sp-npos-elections", + "sp-offchain", + "sp-runtime 39.0.3", + "sp-runtime-interface 28.0.0", + "sp-session", + "sp-staking 36.0.0", + "sp-state-machine 0.43.0", + "sp-statement-store", + "sp-std", + "sp-storage 21.0.0", + "sp-timestamp", + "sp-tracing 17.0.1", + "sp-transaction-pool", + "sp-transaction-storage-proof", + "sp-trie 37.0.0", + "sp-version", + "sp-wasm-interface 21.0.1", + "sp-weights", + "staging-parachain-info", + "staging-xcm 14.2.0", + "staging-xcm-builder", + "staging-xcm-executor", + "substrate-bip39 0.6.0", + "testnet-parachains-constants", + "xcm-runtime-apis", ] [[package]] -name = "sha2" -version = "0.9.9" +name = "polkadot-sdk-frame" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" +checksum = "cbdeb15ce08142082461afe1a62c15f7ce10a731d91b203ad6a8dc8d2e4a6a54" dependencies = [ - "block-buffer 0.9.0", - "cfg-if", - "cpufeatures", - "digest 0.9.0", - "opaque-debug", + "docify", + "frame-benchmarking", + "frame-executive", + "frame-support", + "frame-system", + "frame-system-benchmarking", + "frame-system-rpc-runtime-api", + "frame-try-runtime", + "log", + "parity-scale-codec", + "scale-info", + "sp-api", + "sp-arithmetic", + "sp-block-builder", + "sp-consensus-aura", + "sp-consensus-grandpa", + "sp-core 34.0.0", + "sp-inherents", + "sp-io 38.0.0", + "sp-offchain", + "sp-runtime 39.0.3", + "sp-session", + "sp-storage 21.0.0", + "sp-transaction-pool", + "sp-version", ] [[package]] -name = "sha2" -version = "0.10.8" +name = "polkavm" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +checksum = "8a3693e5efdb2bf74e449cd25fd777a28bd7ed87e41f5d5da75eb31b4de48b94" dependencies = [ - "cfg-if", - "cpufeatures", - "digest 0.10.7", + "libc", + "log", + "polkavm-assembler 0.9.0", + "polkavm-common 0.9.0", + "polkavm-linux-raw 0.9.0", ] [[package]] -name = "sha3" -version = "0.10.8" +name = "polkavm" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" +checksum = "b7ec0c5935f2eff23cfc4653002f4f8d12b37f87a720e0631282d188c32089d6" dependencies = [ - "digest 0.10.7", - "keccak", + "libc", + "log", + "polkavm-assembler 0.10.0", + "polkavm-common 0.10.0", + "polkavm-linux-raw 0.10.0", ] [[package]] -name = "sharded-slab" -version = "0.1.7" +name = "polkavm-assembler" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +checksum = "1fa96d6d868243acc12de813dd48e756cbadcc8e13964c70d272753266deadc1" dependencies = [ - "lazy_static", + "log", ] [[package]] -name = "shared_child" -version = "1.0.1" +name = "polkavm-assembler" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09fa9338aed9a1df411814a5b2252f7cd206c55ae9bf2fa763f8de84603aa60c" +checksum = "d8e4fd5a43100bf1afe9727b8130d01f966f5cfc9144d5604b21e795c2bcd80e" dependencies = [ - "libc", - "windows-sys 0.59.0", + "log", ] [[package]] -name = "shell-words" -version = "1.1.0" +name = "polkavm-common" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24188a676b6ae68c3b2cb3a01be17fbf7240ce009799bb56d5b1409051e78fde" +checksum = "88b4e215c80fe876147f3d58158d5dfeae7dabdd6047e175af77095b78d0035c" [[package]] -name = "shlex" -version = "1.3.0" +name = "polkavm-common" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" +checksum = "92c99f7eee94e7be43ba37eef65ad0ee8cbaf89b7c00001c3f6d2be985cb1817" [[package]] -name = "signal-hook" -version = "0.3.17" +name = "polkavm-common" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8621587d4798caf8eb44879d42e56b9a93ea5dcd315a6487c357130095b62801" +checksum = "1d9428a5cfcc85c5d7b9fc4b6a18c4b802d0173d768182a51cc7751640f08b92" dependencies = [ - "libc", - "signal-hook-registry", + "log", ] [[package]] -name = "signal-hook-mio" -version = "0.2.4" +name = "polkavm-common" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34db1a06d485c9142248b7a054f034b349b212551f3dfd19c94d45a754a217cd" +checksum = "0097b48bc0bedf9f3f537ce8f37e8f1202d8d83f9b621bdb21ff2c59b9097c50" dependencies = [ - "libc", - "mio 0.8.11", - "signal-hook", + "log", + "polkavm-assembler 0.10.0", ] [[package]] -name = "signal-hook-registry" -version = "1.4.2" +name = "polkavm-derive" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" +checksum = "6380dbe1fb03ecc74ad55d841cfc75480222d153ba69ddcb00977866cbdabdb8" dependencies = [ - "libc", + "polkavm-derive-impl 0.5.0", + "syn 2.0.90", ] [[package]] -name = "signature" -version = "2.2.0" +name = "polkavm-derive" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" +checksum = "79fa916f7962348bd1bb1a65a83401675e6fc86c51a0fdbcf92a3108e58e6125" dependencies = [ - "digest 0.10.7", - "rand_core 0.6.4", + "polkavm-derive-impl-macro 0.8.0", ] [[package]] -name = "simdutf8" -version = "0.1.4" +name = "polkavm-derive" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f27f6278552951f1f2b8cf9da965d10969b2efdea95a6ec47987ab46edfe263a" +checksum = "ae8c4bea6f3e11cd89bb18bcdddac10bd9a24015399bd1c485ad68a985a19606" +dependencies = [ + "polkavm-derive-impl-macro 0.9.0", +] [[package]] -name = "similar" -version = "2.6.0" +name = "polkavm-derive" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1de1d4f81173b03af4c0cbed3c898f6bff5b870e4a7f5d6f4057d62a7a4b686e" +checksum = "0dcc701385c08c31bdb0569f0c51a290c580d892fa77f1dd88a7352a62679ecf" +dependencies = [ + "polkavm-derive-impl-macro 0.10.0", +] [[package]] -name = "simple-mermaid" -version = "0.1.1" +name = "polkavm-derive-impl" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "620a1d43d70e142b1d46a929af51d44f383db9c7a2ec122de2cd992ccfcf3c18" +checksum = "dc8211b3365bbafb2fb32057d68b0e1ca55d079f5cf6f9da9b98079b94b3987d" +dependencies = [ + "polkavm-common 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.90", +] [[package]] -name = "siphasher" -version = "1.0.1" +name = "polkavm-derive-impl" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" +checksum = "c10b2654a8a10a83c260bfb93e97b262cf0017494ab94a65d389e0eda6de6c9c" +dependencies = [ + "polkavm-common 0.8.0", + "proc-macro2", + "quote", + "syn 2.0.90", +] [[package]] -name = "slab" -version = "0.4.9" +name = "polkavm-derive-impl" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +checksum = "5c4fdfc49717fb9a196e74a5d28e0bc764eb394a2c803eb11133a31ac996c60c" dependencies = [ - "autocfg", + "polkavm-common 0.9.0", + "proc-macro2", + "quote", + "syn 2.0.90", ] [[package]] -name = "smallvec" -version = "1.13.2" +name = "polkavm-derive-impl" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" +checksum = "7855353a5a783dd5d09e3b915474bddf66575f5a3cf45dec8d1c5e051ba320dc" +dependencies = [ + "polkavm-common 0.10.0", + "proc-macro2", + "quote", + "syn 2.0.90", +] [[package]] -name = "smawk" -version = "0.3.2" +name = "polkavm-derive-impl-macro" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7c388c1b5e93756d0c740965c41e8822f866621d41acbdf6336a6a168f8840c" +checksum = "15e85319a0d5129dc9f021c62607e0804f5fb777a05cdda44d750ac0732def66" +dependencies = [ + "polkavm-derive-impl 0.8.0", + "syn 2.0.90", +] [[package]] -name = "smol" -version = "2.0.2" +name = "polkavm-derive-impl-macro" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a33bd3e260892199c3ccfc487c88b2da2265080acb316cd920da72fdfd7c599f" +checksum = "8ba81f7b5faac81e528eb6158a6f3c9e0bb1008e0ffa19653bc8dea925ecb429" dependencies = [ - "async-channel", - "async-executor", - "async-fs", - "async-io", - "async-lock", - "async-net", - "async-process", - "blocking", - "futures-lite", + "polkavm-derive-impl 0.9.0", + "syn 2.0.90", ] [[package]] -name = "smoldot" -version = "0.16.0" +name = "polkavm-derive-impl-macro" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6d1eaa97d77be4d026a1e7ffad1bb3b78448763b357ea6f8188d3e6f736a9b9" +checksum = "9324fe036de37c17829af233b46ef6b5562d4a0c09bb7fdb9f8378856dee30cf" dependencies = [ - "arrayvec 0.7.6", - "async-lock", - "atomic-take", - "base64 0.21.7", - "bip39", - "blake2-rfc", - "bs58", - "chacha20", - "crossbeam-queue", - "derive_more", - "ed25519-zebra 4.0.3", - "either", - "event-listener 4.0.3", - "fnv", - "futures-lite", - "futures-util", + "polkavm-derive-impl 0.10.0", + "syn 2.0.90", +] + +[[package]] +name = "polkavm-linker" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c7be503e60cf56c0eb785f90aaba4b583b36bff00e93997d93fef97f9553c39" +dependencies = [ + "gimli 0.28.1", "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", + "log", + "object 0.32.2", + "polkavm-common 0.9.0", + "regalloc2 0.9.3", + "rustc-demangle", +] + +[[package]] +name = "polkavm-linker" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d704edfe7bdcc876784f19436d53d515b65eb07bc9a0fae77085d552c2dbbb5" +dependencies = [ + "gimli 0.28.1", + "hashbrown 0.14.5", + "log", + "object 0.36.5", + "polkavm-common 0.10.0", + "regalloc2 0.9.3", + "rustc-demangle", +] + +[[package]] +name = "polkavm-linux-raw" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26e85d3456948e650dff0cfc85603915847faf893ed1e66b020bb82ef4557120" + +[[package]] +name = "polkavm-linux-raw" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26e45fa59c7e1bb12ef5289080601e9ec9b31435f6e32800a5c90c132453d126" + +[[package]] +name = "polling" +version = "3.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a604568c3202727d1507653cb121dbd627a58684eb09a820fd746bee38b4442f" +dependencies = [ + "cfg-if", + "concurrent-queue", + "hermit-abi 0.4.0", + "pin-project-lite", + "rustix 0.38.42", + "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" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d1fe60d06143b2430aa532c94cfe9e29783047f06c0d7fd359a9a51b729fa25" +dependencies = [ + "cfg-if", + "cpufeatures", + "opaque-debug", + "universal-hash", +] + +[[package]] +name = "pop-cli" +version = "0.6.0" +dependencies = [ + "anyhow", + "assert_cmd", + "axum", + "clap", + "cliclack", + "console", + "contract-extrinsics", + "dirs", + "duct", + "env_logger 0.11.5", + "git2", + "open", + "os_info", + "pop-common", + "pop-contracts", + "pop-parachains", + "pop-telemetry", + "reqwest 0.12.9", + "serde", + "serde_json", + "sp-core 32.0.0", + "sp-weights", + "strum 0.26.3", + "strum_macros 0.26.4", + "subxt", + "subxt-signer", + "tempfile", + "tokio", + "tower-http 0.6.2", + "url", +] + +[[package]] +name = "pop-common" +version = "0.6.0" +dependencies = [ + "anyhow", + "cargo_toml", + "contract-build", + "contract-extrinsics", + "duct", + "flate2", + "git2", + "git2_credentials", + "ink_env", + "mockito", + "regex", + "reqwest 0.12.9", + "scale-info", + "serde", + "serde_json", + "strum 0.26.3", + "strum_macros 0.26.4", + "subxt", + "subxt-signer", + "tar", + "tempfile", + "thiserror 1.0.69", + "tokio", + "toml 0.5.11", + "toml_edit 0.22.22", + "url", +] + +[[package]] +name = "pop-contracts" +version = "0.6.0" +dependencies = [ + "anyhow", + "contract-build", + "contract-extrinsics", + "contract-transcode", + "duct", + "heck 0.5.0", + "ink_env", + "pop-common", + "reqwest 0.12.9", + "scale-info", + "sp-core 32.0.0", + "sp-weights", + "strum 0.26.3", + "strum_macros 0.26.4", + "subxt", + "subxt-signer", + "tempfile", + "thiserror 1.0.69", + "tokio", + "tokio-test", + "url", +] + +[[package]] +name = "pop-parachains" +version = "0.6.0" +dependencies = [ + "anyhow", + "askama", + "clap", + "duct", + "glob", + "indexmap 2.7.0", + "pop-common", + "scale-info", + "scale-value", + "serde_json", + "sp-core 32.0.0", + "strum 0.26.3", + "strum_macros 0.26.4", + "subxt", + "subxt-signer", + "symlink", + "tempfile", + "thiserror 1.0.69", + "tokio", + "tokio-test", + "toml_edit 0.22.22", + "url", + "walkdir", + "zombienet-sdk", +] + +[[package]] +name = "pop-telemetry" +version = "0.6.0" +dependencies = [ + "dirs", + "env_logger 0.11.5", + "log", + "mockito", + "reqwest 0.12.9", + "serde", + "serde_json", + "tempfile", + "thiserror 1.0.69", + "tokio", +] + +[[package]] +name = "portable-atomic" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "280dc24453071f1b63954171985a0b0d30058d287960968b9b2aca264c8d4ee6" + +[[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.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +dependencies = [ + "zerocopy", +] + +[[package]] +name = "predicates" +version = "3.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e9086cc7640c29a356d1a29fd134380bee9d8f79a17410aa76e7ad295f42c97" +dependencies = [ + "anstyle", + "difflib", + "predicates-core", +] + +[[package]] +name = "predicates-core" +version = "1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae8177bee8e75d6846599c6b9ff679ed51e882816914eec639944d7c9aa11931" + +[[package]] +name = "predicates-tree" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41b740d195ed3166cd147c8047ec98db0e22ec019eb8eeb76d343b795304fb13" +dependencies = [ + "predicates-core", + "termtree", +] + +[[package]] +name = "prettyplease" +version = "0.2.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64d1ec885c64d0457d564db4ec299b2dae3f9c02808b8ad9c3a089c591b18033" +dependencies = [ + "proc-macro2", + "syn 2.0.90", +] + +[[package]] +name = "primitive-types" +version = "0.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b34d9fd68ae0b74a41b21c03c2f62847aa0ffea044eee893b4c140b37e244e2" +dependencies = [ + "fixed-hash", + "impl-codec 0.6.0", + "impl-rlp", + "impl-serde 0.4.0", + "scale-info", + "uint 0.9.5", +] + +[[package]] +name = "primitive-types" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d15600a7d856470b7d278b3fe0e311fe28c2526348549f8ef2ff7db3299c87f5" +dependencies = [ + "fixed-hash", + "impl-codec 0.7.0", + "impl-serde 0.5.0", + "scale-info", + "uint 0.10.0", +] + +[[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.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecf48c7ca261d60b74ab1a7b20da18bede46776b2e55535cb958eb595c5fa7b" +dependencies = [ + "toml_edit 0.22.22", +] + +[[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]] +name = "proc-macro-error-attr2" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96de42df36bb9bba5542fe9f1a054b8cc87e172759a1868aa05c1f3acc89dfc5" +dependencies = [ + "proc-macro2", + "quote", +] + +[[package]] +name = "proc-macro-error2" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11ec05c52be0a07b08061f7dd003e7d7092e0472bc731b4af7bb1ef876109802" +dependencies = [ + "proc-macro-error-attr2", + "proc-macro2", + "quote", + "syn 2.0.90", +] + +[[package]] +name = "proc-macro-warning" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "834da187cfe638ae8abb0203f0b33e5ccdb02a28e7199f2f47b3e2754f50edca" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.90", +] + +[[package]] +name = "proc-macro2" +version = "1.0.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "proptest" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4c2511913b88df1637da85cc8d96ec8e43a3f8bb8ccb71ee1ac240d6f3df58d" +dependencies = [ + "bit-set", + "bit-vec", + "bitflags 2.6.0", + "lazy_static", + "num-traits", + "rand", + "rand_chacha", + "rand_xorshift", + "regex-syntax 0.8.5", + "rusty-fork", + "tempfile", + "unarray", +] + +[[package]] +name = "psm" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "200b9ff220857e53e184257720a14553b2f4aa02577d2ed9842d45d4b9654810" +dependencies = [ + "cc", +] + +[[package]] +name = "ptr_meta" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0738ccf7ea06b608c10564b31debd4f5bc5e197fc8bfe088f68ae5ce81e7a4f1" +dependencies = [ + "ptr_meta_derive", +] + +[[package]] +name = "ptr_meta_derive" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16b845dbfca988fa33db069c0e230574d15a3088f147a87b64c7589eb662c9ac" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "quick-error" +version = "1.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" + +[[package]] +name = "quick-protobuf" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d6da84cc204722a989e01ba2f6e1e276e190f22263d0cb6ce8526fcdb0d2e1f" +dependencies = [ + "byteorder", +] + +[[package]] +name = "quote" +version = "1.0.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "radium" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_core" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom", +] + +[[package]] +name = "rand_xorshift" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d25bf25ec5ae4a3f1b92f929810509a2f53d7dca2f50b794ff57e3face536c8f" +dependencies = [ + "rand_core 0.6.4", +] + +[[package]] +name = "rawpointer" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" + +[[package]] +name = "rayon" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + +[[package]] +name = "redox_syscall" +version = "0.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03a862b389f93e68874fbf580b9de08dd02facb9a788ebadaf4a3fd33cf58834" +dependencies = [ + "bitflags 2.6.0", +] + +[[package]] +name = "redox_users" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" +dependencies = [ + "getrandom", + "libredox", + "thiserror 1.0.69", +] + +[[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.90", +] + +[[package]] +name = "regalloc2" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80535183cae11b149d618fbd3c37e38d7cda589d82d7769e196ca9a9042d7621" +dependencies = [ + "fxhash", + "log", + "slice-group-by", + "smallvec", +] + +[[package]] +name = "regalloc2" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad156d539c879b7a24a363a2016d77961786e71f48f2e2fc8302a92abd2429a6" +dependencies = [ + "hashbrown 0.13.2", + "log", + "rustc-hash 1.1.0", + "slice-group-by", + "smallvec", +] + +[[package]] +name = "regex" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata 0.4.9", + "regex-syntax 0.8.5", +] + +[[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]] +name = "regex-automata" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax 0.8.5", +] + +[[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.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" + +[[package]] +name = "rend" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71fe3824f5629716b1589be05dacd749f6aa084c87e00e016714a8cdfccc997c" +dependencies = [ + "bytecheck", +] + +[[package]] +name = "reqwest" +version = "0.11.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62" +dependencies = [ + "base64 0.21.7", + "bytes", + "encoding_rs", + "futures-core", + "futures-util", + "h2 0.3.26", + "http 0.2.12", + "http-body 0.4.6", + "hyper 0.14.32", + "hyper-tls 0.5.0", + "ipnet", + "js-sys", + "log", + "mime", + "native-tls", + "once_cell", + "percent-encoding", + "pin-project-lite", + "rustls-pemfile 1.0.4", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper 0.1.2", + "system-configuration 0.5.1", + "tokio", + "tokio-native-tls", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "winreg", +] + +[[package]] +name = "reqwest" +version = "0.12.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a77c62af46e79de0a562e1a9849205ffcb7fc1238876e9bd743357570e04046f" +dependencies = [ + "base64 0.22.1", + "bytes", + "encoding_rs", + "futures-core", + "futures-util", + "h2 0.4.7", + "http 1.2.0", + "http-body 1.0.1", + "http-body-util", + "hyper 1.5.2", + "hyper-rustls 0.27.4", + "hyper-tls 0.6.0", + "hyper-util", + "ipnet", + "js-sys", + "log", + "mime", + "native-tls", + "once_cell", + "percent-encoding", + "pin-project-lite", + "rustls-pemfile 2.2.0", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper 1.0.2", + "system-configuration 0.6.1", + "tokio", + "tokio-native-tls", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "windows-registry", +] + +[[package]] +name = "rfc6979" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" +dependencies = [ + "hmac 0.12.1", + "subtle", +] + +[[package]] +name = "ring" +version = "0.17.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" +dependencies = [ + "cc", + "cfg-if", + "getrandom", + "libc", + "spin", + "untrusted", + "windows-sys 0.52.0", +] + +[[package]] +name = "rkyv" +version = "0.7.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9008cd6385b9e161d8229e1f6549dd23c3d022f132a2ea37ac3a10ac4935779b" +dependencies = [ + "bitvec", + "bytecheck", + "bytes", + "hashbrown 0.12.3", + "ptr_meta", + "rend", + "rkyv_derive", + "seahash", + "tinyvec", + "uuid", +] + +[[package]] +name = "rkyv_derive" +version = "0.7.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "503d1d27590a2b0a3a4ca4c94755aa2875657196ecbf401a42eff41d7de532c0" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "rlibc" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc874b127765f014d792f16763a81245ab80500e2ad921ed4ee9e82481ee08fe" + +[[package]] +name = "rlp" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb919243f34364b6bd2fc10ef797edbfa75f33c252e7998527479c6d6b47e1ec" +dependencies = [ + "bytes", + "rustc-hex", +] + +[[package]] +name = "rococo-runtime-constants" +version = "17.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1ec6683a2e52fe3be2eaf942a80619abd99eb36e973c5ab4489a2f3b100db5c" +dependencies = [ + "frame-support", + "polkadot-primitives 16.0.0", + "polkadot-runtime-common", + "smallvec", + "sp-core 34.0.0", + "sp-runtime 39.0.3", + "sp-weights", + "staging-xcm 14.2.0", + "staging-xcm-builder", +] + +[[package]] +name = "ruint" +version = "1.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5ef8fb1dd8de3870cb8400d51b4c2023854bbafd5431a3ac7e7317243e22d2f" +dependencies = [ + "alloy-rlp", + "ark-ff 0.3.0", + "ark-ff 0.4.2", + "bytes", + "fastrlp 0.3.1", + "fastrlp 0.4.0", + "num-bigint", + "num-integer", + "num-traits", + "parity-scale-codec", + "primitive-types 0.12.2", + "proptest", + "rand", + "rlp", + "ruint-macro", + "serde", + "valuable", + "zeroize", +] + +[[package]] +name = "ruint-macro" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48fd7bd8a6377e15ad9d42a8ec25371b94ddc67abe7c8b9127bec79bebaaae18" + +[[package]] +name = "rust_decimal" +version = "1.36.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b082d80e3e3cc52b2ed634388d436fe1f4de6af5786cc2de9ba9737527bdf555" +dependencies = [ + "arrayvec 0.7.6", + "borsh", + "bytes", + "num-traits", + "rand", + "rkyv", + "serde", + "serde_json", +] + +[[package]] +name = "rustc-demangle" +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-hash" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7fb8039b3032c191086b10f11f319a6e99e1e82889c5cc6046f515c9db1d497" + +[[package]] +name = "rustc-hex" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e75f6a532d0fd9f7f13144f392b6ad56a32696bfcd9c78f797f16bbb6f072d6" + +[[package]] +name = "rustc_version" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" +dependencies = [ + "semver 0.9.0", +] + +[[package]] +name = "rustc_version" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0dfe2087c51c460008730de8b57e6a320782fbfb312e1f4d520e6c6fae155ee" +dependencies = [ + "semver 0.11.0", +] + +[[package]] +name = "rustc_version" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +dependencies = [ + "semver 1.0.24", +] + +[[package]] +name = "rustix" +version = "0.36.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "305efbd14fde4139eb501df5f136994bb520b033fa9fbdce287507dc23b8c7ed" +dependencies = [ + "bitflags 1.3.2", + "errno", + "io-lifetimes", + "libc", + "linux-raw-sys 0.1.4", + "windows-sys 0.45.0", +] + +[[package]] +name = "rustix" +version = "0.38.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f93dc38ecbab2eb790ff964bb77fa94faf256fd3e73285fd7ba0903b76bedb85" +dependencies = [ + "bitflags 2.6.0", + "errno", + "libc", + "linux-raw-sys 0.4.14", + "windows-sys 0.59.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.23.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5065c3f250cbd332cd894be57c40fa52387247659b14a2d6041d121547903b1b" +dependencies = [ + "log", + "once_cell", + "ring", + "rustls-pki-types", + "rustls-webpki 0.102.8", + "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.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" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" +dependencies = [ + "base64 0.21.7", +] + +[[package]] +name = "rustls-pemfile" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" +dependencies = [ + "rustls-pki-types", +] + +[[package]] +name = "rustls-pki-types" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2bf47e6ff922db3825eb750c4e2ff784c6ff8fb9e13046ef6a1d1c5401b0b37" + +[[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.20", + "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" +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.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" +dependencies = [ + "ring", + "rustls-pki-types", + "untrusted", +] + +[[package]] +name = "rustversion" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e819f2bc632f285be6d7cd36e25940d45b2391dd6d9b939e79de557f7014248" + +[[package]] +name = "rusty-fork" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb3dcc6e454c328bb824492db107ab7c0ae8fcffe4ad210136ef014458c1bc4f" +dependencies = [ + "fnv", + "quick-error", + "tempfile", + "wait-timeout", +] + +[[package]] +name = "ruzstd" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5174a470eeb535a721ae9fdd6e291c2411a906b96592182d05217591d5c5cf7b" +dependencies = [ + "byteorder", + "derive_more 0.99.18", +] + +[[package]] +name = "rw-stream-sink" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8c9026ff5d2f23da5e45bbc283f156383001bfb09c4e44256d02c1a685fe9a1" +dependencies = [ + "futures", + "pin-project", + "static_assertions", +] + +[[package]] +name = "ryu" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" + +[[package]] +name = "safe-mix" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d3d055a2582e6b00ed7a31c1524040aa391092bf636328350813f3a0605215c" +dependencies = [ + "rustc_version 0.2.3", +] + +[[package]] +name = "safe_arch" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3460605018fdc9612bce72735cba0d27efbcd9904780d44c7e3a9948f96148a" +dependencies = [ + "bytemuck", +] + +[[package]] +name = "salsa20" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97a22f5af31f73a954c10289c93e8a50cc23d971e80ee446f1f6f7137a088213" +dependencies = [ + "cipher", +] + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "sc-allocator" +version = "29.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b975ee3a95eaacb611e7b415737a7fa2db4d8ad7b880cc1b97371b04e95c7903" +dependencies = [ + "log", + "sp-core 34.0.0", + "sp-wasm-interface 21.0.1", + "thiserror 1.0.69", +] + +[[package]] +name = "sc-executor" +version = "0.40.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f0cc0a3728fd033589183460c5a49b2e7545d09dc89a098216ef9e9aadcd9dc" +dependencies = [ + "parity-scale-codec", + "parking_lot", + "sc-executor-common", + "sc-executor-polkavm", + "sc-executor-wasmtime", + "schnellru", + "sp-api", + "sp-core 34.0.0", + "sp-externalities 0.29.0", + "sp-io 38.0.0", + "sp-panic-handler", + "sp-runtime-interface 28.0.0", + "sp-trie 37.0.0", + "sp-version", + "sp-wasm-interface 21.0.1", + "tracing", +] + +[[package]] +name = "sc-executor-common" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c3b703a33dcb7cddf19176fdf12294b9a6408125836b0f4afee3e6969e7f190" +dependencies = [ + "polkavm 0.9.3", + "sc-allocator", + "sp-maybe-compressed-blob", + "sp-wasm-interface 21.0.1", + "thiserror 1.0.69", + "wasm-instrument", +] + +[[package]] +name = "sc-executor-polkavm" +version = "0.32.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26fe58d9cacfab73e5595fa84b80f7bd03efebe54a0574daaeb221a1d1f7ab80" +dependencies = [ + "log", + "polkavm 0.9.3", + "sc-executor-common", + "sp-wasm-interface 21.0.1", +] + +[[package]] +name = "sc-executor-wasmtime" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8cd498f2f77ec1f861c30804f5bfd796d4afcc8ce44ea1f11bfbe2847551d161" +dependencies = [ + "anyhow", + "cfg-if", + "libc", + "log", + "parking_lot", + "rustix 0.36.17", + "sc-allocator", + "sc-executor-common", + "sp-runtime-interface 28.0.0", + "sp-wasm-interface 21.0.1", + "wasmtime", +] + +[[package]] +name = "scale-bits" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "662d10dcd57b1c2a3c41c9cf68f71fb09747ada1ea932ad961aca7e2ca28315f" +dependencies = [ + "parity-scale-codec", + "scale-type-resolver 0.1.1", +] + +[[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 0.2.0", + "serde", +] + +[[package]] +name = "scale-decode" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "afc79ba56a1c742f5aeeed1f1801f3edf51f7e818f0a54582cac6f131364ea7b" +dependencies = [ + "derive_more 0.99.18", + "parity-scale-codec", + "scale-bits 0.5.0", + "scale-decode-derive 0.11.1", + "scale-type-resolver 0.1.1", + "smallvec", +] + +[[package]] +name = "scale-decode" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8ae9cc099ae85ff28820210732b00f019546f36f33225f509fe25d5816864a0" +dependencies = [ + "derive_more 1.0.0", + "parity-scale-codec", + "primitive-types 0.13.1", + "scale-bits 0.6.0", + "scale-decode-derive 0.14.0", + "scale-type-resolver 0.2.0", + "smallvec", +] + +[[package]] +name = "scale-decode-derive" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5398fdb3c7bea3cb419bac4983aadacae93fe1a7b5f693f4ebd98c3821aad7a5" +dependencies = [ + "darling 0.14.4", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "scale-decode-derive" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ed9401effa946b493f9f84dc03714cca98119b230497df6f3df6b84a2b03648" +dependencies = [ + "darling 0.20.10", + "proc-macro2", + "quote", + "syn 2.0.90", +] + +[[package]] +name = "scale-encode" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "628800925a33794fb5387781b883b5e14d130fece9af5a63613867b8de07c5c7" +dependencies = [ + "derive_more 0.99.18", + "parity-scale-codec", + "scale-encode-derive 0.6.0", + "scale-type-resolver 0.1.1", + "smallvec", +] + +[[package]] +name = "scale-encode" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f9271284d05d0749c40771c46180ce89905fd95aa72a2a2fddb4b7c0aa424db" +dependencies = [ + "derive_more 1.0.0", + "parity-scale-codec", + "primitive-types 0.13.1", + "scale-bits 0.6.0", + "scale-encode-derive 0.8.0", + "scale-type-resolver 0.2.0", + "smallvec", +] + +[[package]] +name = "scale-encode-derive" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a304e1af7cdfbe7a24e08b012721456cc8cecdedadc14b3d10513eada63233c" +dependencies = [ + "darling 0.14.4", + "proc-macro-crate 1.3.1", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "scale-encode-derive" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "102fbc6236de6c53906c0b262f12c7aa69c2bdc604862c12728f5f4d370bc137" +dependencies = [ + "darling 0.20.10", + "proc-macro-crate 3.2.0", + "proc-macro2", + "quote", + "syn 2.0.90", +] + +[[package]] +name = "scale-info" +version = "2.11.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "346a3b32eba2640d17a9cb5927056b08f3de90f65b72fe09402c2ad07d684d0b" +dependencies = [ + "bitvec", + "cfg-if", + "derive_more 1.0.0", + "parity-scale-codec", + "scale-info-derive", + "schemars", + "serde", +] + +[[package]] +name = "scale-info-derive" +version = "2.11.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6630024bf739e2179b91fb424b28898baf819414262c5d376677dbff1fe7ebf" +dependencies = [ + "proc-macro-crate 3.2.0", + "proc-macro2", + "quote", + "syn 2.0.90", +] + +[[package]] +name = "scale-type-resolver" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10b800069bfd43374e0f96f653e0d46882a2cb16d6d961ac43bea80f26c76843" +dependencies = [ + "smallvec", +] + +[[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.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dc4c70c7fea2eef1740f0081d3fe385d8bee1eef11e9272d3bec7dc8e5438e0" +dependencies = [ + "proc-macro2", + "quote", + "scale-info", + "syn 2.0.90", + "thiserror 1.0.69", +] + +[[package]] +name = "scale-value" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5e0ef2a0ee1e02a69ada37feb87ea1616ce9808aca072befe2d3131bf28576e" +dependencies = [ + "base58", + "blake2", + "derive_more 1.0.0", + "either", + "parity-scale-codec", + "scale-bits 0.6.0", + "scale-decode 0.14.0", + "scale-encode 0.8.0", + "scale-info", + "scale-type-resolver 0.2.0", + "serde", + "yap", +] + +[[package]] +name = "schannel" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" +dependencies = [ + "windows-sys 0.59.0", +] + +[[package]] +name = "schemars" +version = "0.8.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09c024468a378b7e36765cd36702b7a90cc3cba11654f6685c8f233408e89e92" +dependencies = [ + "dyn-clone", + "schemars_derive", + "serde", + "serde_json", +] + +[[package]] +name = "schemars_derive" +version = "0.8.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1eee588578aff73f856ab961cd2f79e36bc45d7ded33a7562adba4667aecc0e" +dependencies = [ + "proc-macro2", + "quote", + "serde_derive_internals", + "syn 2.0.90", +] + +[[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.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8de18f6d8ba0aad7045f5feae07ec29899c1112584a38509a84ad7b04451eaa0" +dependencies = [ + "aead", + "arrayref", + "arrayvec 0.7.6", + "curve25519-dalek 4.1.3", + "getrandom_or_panic", + "merlin", + "rand_core 0.6.4", + "serde_bytes", + "sha2 0.10.8", + "subtle", + "zeroize", +] + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "scratch" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3cf7c11c38cb994f3d40e8a8cde3bbd1f72a435e4c49e85d6553d8312306152" + +[[package]] +name = "scrypt" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0516a385866c09368f0b5bcd1caff3366aace790fcd46e2bb032697bb172fd1f" +dependencies = [ + "password-hash", + "pbkdf2", + "salsa20", + "sha2 0.10.8", +] + +[[package]] +name = "sct" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "seahash" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b" + +[[package]] +name = "sec1" +version = "0.7.3" +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.28.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d24b59d129cdadea20aea4fb2352fa053712e5d713eee47d700cd4b2bc002f10" +dependencies = [ + "secp256k1-sys 0.9.2", +] + +[[package]] +name = "secp256k1" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b50c5943d326858130af85e049f2661ba3c78b26589b8ab98e65e80ae44a1252" +dependencies = [ + "bitcoin_hashes 0.14.0", + "rand", + "secp256k1-sys 0.10.1", +] + +[[package]] +name = "secp256k1-sys" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5d1746aae42c19d583c3c1a8c646bfad910498e2051c551a7f2e3c0c9fbb7eb" +dependencies = [ + "cc", +] + +[[package]] +name = "secp256k1-sys" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4387882333d3aa8cb20530a17c69a3752e97837832f34f6dccc760e715001d9" +dependencies = [ + "cc", +] + +[[package]] +name = "secrecy" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9bd1c54ea06cfd2f6b63219704de0b9b4f72dcc2b8fdef820be6cd799780e91e" +dependencies = [ + "serde", + "zeroize", +] + +[[package]] +name = "secrecy" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e891af845473308773346dc847b2c23ee78fe442e0472ac50e22a18a93d3ae5a" +dependencies = [ + "zeroize", +] + +[[package]] +name = "security-framework" +version = "2.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" +dependencies = [ + "bitflags 2.6.0", + "core-foundation", + "core-foundation-sys", + "libc", + "num-bigint", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1863fd3768cd83c56a7f60faa4dc0d403f1b6df0a38c3c25f44b7894e45370d5" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "semver" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a3186ec9e65071a2095434b1f5bb24838d4e8e130f584c790f6033c79943537" +dependencies = [ + "semver-parser 0.7.0", +] + +[[package]] +name = "semver" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" +dependencies = [ + "semver-parser 0.7.0", +] + +[[package]] +name = "semver" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6" +dependencies = [ + "semver-parser 0.10.3", +] + +[[package]] +name = "semver" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3cb6eb87a131f756572d7fb904f6e7b68633f09cca868c5df1c4b8d1a694bbba" +dependencies = [ + "serde", +] + +[[package]] +name = "semver-parser" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" + +[[package]] +name = "semver-parser" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9900206b54a3527fdc7b8a938bffd94a568bac4f4aa8113b209df75a09c0dec2" +dependencies = [ + "pest", +] + +[[package]] +name = "serde" +version = "1.0.216" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b9781016e935a97e8beecf0c933758c97a5520d32930e460142b4cd80c6338e" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde-big-array" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd31f59f6fe2b0c055371bb2f16d7f0aa7d8881676c04a55b1596d1a17cd10a4" +dependencies = [ + "serde", +] + +[[package]] +name = "serde-value" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3a1a3341211875ef120e117ea7fd5228530ae7e7036a779fdc9117be6b3282c" +dependencies = [ + "ordered-float", + "serde", +] + +[[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.216" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46f859dbbf73865c6627ed570e78961cd3ac92407a2d117204c49232485da55e" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.90", +] + +[[package]] +name = "serde_derive_internals" +version = "0.29.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.90", +] + +[[package]] +name = "serde_json" +version = "1.0.133" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7fceb2473b9166b2294ef05efcb65a3db80803f0b03ef86a5fc88a2b85ee377" +dependencies = [ + "indexmap 2.7.0", + "itoa", + "memchr", + "ryu", + "serde", +] + +[[package]] +name = "serde_path_to_error" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af99884400da37c88f5e9146b7f1fd0fbcae8f6eec4e9da38b67d05486f814a6" +dependencies = [ + "itoa", + "serde", +] + +[[package]] +name = "serde_repr" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.90", +] + +[[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" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serde_with" +version = "3.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e28bdad6db2b8340e449f7108f020b3b092e8583a9e3fb82713e1d4e71fe817" +dependencies = [ + "base64 0.22.1", + "chrono", + "hex", + "indexmap 1.9.3", + "indexmap 2.7.0", + "serde", + "serde_derive", + "serde_json", + "time", +] + +[[package]] +name = "serde_yaml" +version = "0.9.34+deprecated" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" +dependencies = [ + "indexmap 2.7.0", + "itoa", + "ryu", + "serde", + "unsafe-libyaml", +] + +[[package]] +name = "serdect" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a84f14a19e9a014bb9f4512488d9829a68e04ecabffb0f9904cd1ace94598177" +dependencies = [ + "base16ct", + "serde", +] + +[[package]] +name = "sha1" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" +dependencies = [ + "cfg-if", + "cpufeatures", + "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]] +name = "sha2" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest 0.10.7", +] + +[[package]] +name = "sha3" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" +dependencies = [ + "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 = "shared_child" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09fa9338aed9a1df411814a5b2252f7cd206c55ae9bf2fa763f8de84603aa60c" +dependencies = [ + "libc", + "windows-sys 0.59.0", +] + +[[package]] +name = "shell-words" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24188a676b6ae68c3b2cb3a01be17fbf7240ce009799bb56d5b1409051e78fde" + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "signal-hook" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8621587d4798caf8eb44879d42e56b9a93ea5dcd315a6487c357130095b62801" +dependencies = [ + "libc", + "signal-hook-registry", +] + +[[package]] +name = "signal-hook-mio" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34db1a06d485c9142248b7a054f034b349b212551f3dfd19c94d45a754a217cd" +dependencies = [ + "libc", + "mio", + "signal-hook", +] + +[[package]] +name = "signal-hook-registry" +version = "1.4.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 0.10.7", + "rand_core 0.6.4", +] + +[[package]] +name = "simba" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3a386a501cd104797982c15ae17aafe8b9261315b5d07e3ec803f2ea26be0fa" +dependencies = [ + "approx", + "num-complex", + "num-traits", + "paste", + "wide", +] + +[[package]] +name = "simdutf8" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" + +[[package]] +name = "similar" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1de1d4f81173b03af4c0cbed3c898f6bff5b870e4a7f5d6f4057d62a7a4b686e" + +[[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" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + +[[package]] +name = "slice-group-by" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "826167069c09b99d56f31e9ae5c99049e932a98c9dc2dac47645b08dbbf76ba7" + +[[package]] +name = "slot-range-helper" +version = "15.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e34f1146a457a5c554dedeae6c7273aa54c3b031f3e9eb0abd037b5511e2ce9" +dependencies = [ + "enumn", + "parity-scale-codec", + "paste", + "sp-runtime 39.0.3", +] + +[[package]] +name = "smallvec" +version = "1.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" + +[[package]] +name = "smawk" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7c388c1b5e93756d0c740965c41e8822f866621d41acbdf6336a6a168f8840c" + +[[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.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "966e72d77a3b2171bb7461d0cb91f43670c63558c62d7cf42809cae6c8b6b818" +dependencies = [ + "arrayvec 0.7.6", + "async-lock", + "atomic-take", + "base64 0.22.1", + "bip39", + "blake2-rfc", + "bs58", + "chacha20", + "crossbeam-queue", + "derive_more 0.99.18", + "ed25519-zebra 4.0.3", + "either", + "event-listener", + "fnv", + "futures-lite", + "futures-util", + "hashbrown 0.14.5", + "hex", + "hmac 0.12.1", + "itertools 0.13.0", + "libm", + "libsecp256k1", + "merlin", + "nom", + "num-bigint", + "num-rational", + "num-traits", "pbkdf2", "pin-project", "poly1305", "rand", - "rand_chacha", - "ruzstd", - "schnorrkel", + "rand_chacha", + "ruzstd", + "schnorrkel", + "serde", + "serde_json", + "sha2 0.10.8", + "sha3", + "siphasher", + "slab", + "smallvec", + "soketto", + "twox-hash", + "wasmi", + "x25519-dalek", + "zeroize", +] + +[[package]] +name = "smoldot-light" +version = "0.16.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a33b06891f687909632ce6a4e3fd7677b24df930365af3d0bcb078310129f3f" +dependencies = [ + "async-channel", + "async-lock", + "base64 0.22.1", + "blake2-rfc", + "bs58", + "derive_more 0.99.18", + "either", + "event-listener", + "fnv", + "futures-channel", + "futures-lite", + "futures-util", + "hashbrown 0.14.5", + "hex", + "itertools 0.13.0", + "log", + "lru 0.12.5", + "parking_lot", + "pin-project", + "rand", + "rand_chacha", + "serde", + "serde_json", + "siphasher", + "slab", + "smol", + "smoldot", + "zeroize", +] + +[[package]] +name = "snowbridge-amcl" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "460a9ed63cdf03c1b9847e8a12a5f5ba19c4efd5869e4a737e05be25d7c427e5" +dependencies = [ + "parity-scale-codec", + "scale-info", +] + +[[package]] +name = "snowbridge-beacon-primitives" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10bd720997e558beb556d354238fa90781deb38241cf31c1b6368738ef21c279" +dependencies = [ + "byte-slice-cast", + "frame-support", + "hex", + "parity-scale-codec", + "rlp", + "scale-info", + "serde", + "snowbridge-ethereum", + "snowbridge-milagro-bls", + "sp-core 34.0.0", + "sp-io 38.0.0", + "sp-runtime 39.0.3", + "sp-std", + "ssz_rs", + "ssz_rs_derive", +] + +[[package]] +name = "snowbridge-core" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6be61e4db95d1e253a1d5e722953b2d2f6605e5f9761f0a919e5d3fbdbff9da9" +dependencies = [ + "ethabi-decode", + "frame-support", + "frame-system", + "hex-literal", + "parity-scale-codec", + "polkadot-parachain-primitives", + "scale-info", + "serde", + "snowbridge-beacon-primitives", + "sp-arithmetic", + "sp-core 34.0.0", + "sp-io 38.0.0", + "sp-runtime 39.0.3", + "sp-std", + "staging-xcm 14.2.0", + "staging-xcm-builder", +] + +[[package]] +name = "snowbridge-ethereum" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc3d6d549c57df27cf89ec852f932fa4008eea877a6911a87e03e8002104eabd" +dependencies = [ + "ethabi-decode", + "ethbloom", + "ethereum-types", + "hex-literal", + "parity-bytes", + "parity-scale-codec", + "rlp", + "scale-info", + "serde", + "serde-big-array", + "sp-io 38.0.0", + "sp-runtime 39.0.3", + "sp-std", +] + +[[package]] +name = "snowbridge-milagro-bls" +version = "1.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "026aa8638f690a53e3f7676024b9e913b1cab0111d1b7b92669d40a188f9d7e6" +dependencies = [ + "hex", + "lazy_static", + "parity-scale-codec", + "rand", + "scale-info", + "snowbridge-amcl", + "zeroize", +] + +[[package]] +name = "snowbridge-outbound-queue-merkle-tree" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74c6a9b65fa61711b704f0c6afb3663c6288288e8822ddae5cc1146fe3ad9ce8" +dependencies = [ + "parity-scale-codec", + "scale-info", + "sp-core 34.0.0", + "sp-runtime 39.0.3", +] + +[[package]] +name = "snowbridge-outbound-queue-runtime-api" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38d27b8d9cb8022637a5ce4f52692520fa75874f393e04ef5cd75bd8795087f6" +dependencies = [ + "frame-support", + "parity-scale-codec", + "snowbridge-core", + "snowbridge-outbound-queue-merkle-tree", + "sp-api", + "sp-std", +] + +[[package]] +name = "snowbridge-pallet-ethereum-client" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d53d32d8470c643f9f8c1f508e1e34263f76297e4c9150e10e8f2e0b63992e1" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "pallet-timestamp", + "parity-scale-codec", + "scale-info", + "serde", + "snowbridge-beacon-primitives", + "snowbridge-core", + "snowbridge-ethereum", + "snowbridge-pallet-ethereum-client-fixtures", + "sp-core 34.0.0", + "sp-io 38.0.0", + "sp-runtime 39.0.3", + "sp-std", + "static_assertions", +] + +[[package]] +name = "snowbridge-pallet-ethereum-client-fixtures" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3984b98465af1d862d4e87ba783e1731f2a3f851b148d6cb98d526cebd351185" +dependencies = [ + "hex-literal", + "snowbridge-beacon-primitives", + "snowbridge-core", + "sp-core 34.0.0", + "sp-std", +] + +[[package]] +name = "snowbridge-pallet-inbound-queue" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2e6a9d00e60e3744e6b6f0c21fea6694b9c6401ac40e41340a96e561dcf1935" +dependencies = [ + "alloy-primitives", + "alloy-sol-types", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "pallet-balances", + "parity-scale-codec", + "scale-info", + "serde", + "snowbridge-beacon-primitives", + "snowbridge-core", + "snowbridge-pallet-inbound-queue-fixtures", + "snowbridge-router-primitives", + "sp-core 34.0.0", + "sp-io 38.0.0", + "sp-runtime 39.0.3", + "sp-std", + "staging-xcm 14.2.0", + "staging-xcm-executor", +] + +[[package]] +name = "snowbridge-pallet-inbound-queue-fixtures" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b099db83f4c10c0bf84e87deb1596019f91411ea1c8c9733ea9a7f2e7e967073" +dependencies = [ + "hex-literal", + "snowbridge-beacon-primitives", + "snowbridge-core", + "sp-core 34.0.0", + "sp-std", +] + +[[package]] +name = "snowbridge-pallet-outbound-queue" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7d49478041b6512c710d0d4655675d146fe00a8e0c1624e5d8a1d6c161d490f" +dependencies = [ + "bridge-hub-common", + "ethabi-decode", + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "serde", + "snowbridge-core", + "snowbridge-outbound-queue-merkle-tree", + "sp-arithmetic", + "sp-core 34.0.0", + "sp-io 38.0.0", + "sp-runtime 39.0.3", + "sp-std", +] + +[[package]] +name = "snowbridge-pallet-system" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "674db59b3c8013382e5c07243ad9439b64d81d2e8b3c4f08d752b55aa5de697e" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "snowbridge-core", + "sp-core 34.0.0", + "sp-io 38.0.0", + "sp-runtime 39.0.3", + "sp-std", + "staging-xcm 14.2.0", + "staging-xcm-executor", +] + +[[package]] +name = "snowbridge-router-primitives" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "025f1e6805753821b1db539369f1fb183fd59fd5df7023f7633a4c0cfd3e62f9" +dependencies = [ + "frame-support", + "hex-literal", + "log", + "parity-scale-codec", + "scale-info", + "snowbridge-core", + "sp-core 34.0.0", + "sp-io 38.0.0", + "sp-runtime 39.0.3", + "sp-std", + "staging-xcm 14.2.0", + "staging-xcm-executor", +] + +[[package]] +name = "snowbridge-runtime-common" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6093f0e73d6cfdd2eea8712155d1d75b5063fc9b1d854d2665b097b4bb29570d" +dependencies = [ + "frame-support", + "log", + "parity-scale-codec", + "snowbridge-core", + "sp-arithmetic", + "sp-std", + "staging-xcm 14.2.0", + "staging-xcm-builder", + "staging-xcm-executor", +] + +[[package]] +name = "snowbridge-runtime-test-common" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "893480d6cde2489051c65efb5d27fa87efe047b3b61216d8e27bb2f0509b7faf" +dependencies = [ + "cumulus-pallet-parachain-system", + "frame-support", + "frame-system", + "pallet-balances", + "pallet-collator-selection", + "pallet-message-queue", + "pallet-session", + "pallet-timestamp", + "pallet-utility", + "pallet-xcm", + "parachains-runtimes-test-utils", + "parity-scale-codec", + "snowbridge-core", + "snowbridge-pallet-ethereum-client", + "snowbridge-pallet-ethereum-client-fixtures", + "snowbridge-pallet-outbound-queue", + "snowbridge-pallet-system", + "sp-core 34.0.0", + "sp-io 38.0.0", + "sp-keyring", + "sp-runtime 39.0.3", + "staging-parachain-info", + "staging-xcm 14.2.0", + "staging-xcm-executor", +] + +[[package]] +name = "snowbridge-system-runtime-api" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68b8b83b3db781c49844312a23965073e4d93341739a35eafe526c53b578d3b7" +dependencies = [ + "parity-scale-codec", + "snowbridge-core", + "sp-api", + "sp-std", + "staging-xcm 14.2.0", +] + +[[package]] +name = "socket2" +version = "0.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "soketto" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e859df029d160cb88608f5d7df7fb4753fd20fdfb4de5644f3d8b8440841721" +dependencies = [ + "base64 0.22.1", + "bytes", + "futures", + "httparse", + "log", + "rand", + "sha1", +] + +[[package]] +name = "sp-api" +version = "34.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbce492e0482134128b7729ea36f5ef1a9f9b4de2d48ff8dde7b5e464e28ce75" +dependencies = [ + "docify", + "hash-db", + "log", + "parity-scale-codec", + "scale-info", + "sp-api-proc-macro", + "sp-core 34.0.0", + "sp-externalities 0.29.0", + "sp-metadata-ir", + "sp-runtime 39.0.3", + "sp-runtime-interface 28.0.0", + "sp-state-machine 0.43.0", + "sp-trie 37.0.0", + "sp-version", + "thiserror 1.0.69", +] + +[[package]] +name = "sp-api-proc-macro" +version = "20.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9aadf9e97e694f0e343978aa632938c5de309cbcc8afed4136cb71596737278" +dependencies = [ + "Inflector", + "blake2", + "expander", + "proc-macro-crate 3.2.0", + "proc-macro2", + "quote", + "syn 2.0.90", +] + +[[package]] +name = "sp-application-crypto" +version = "34.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505fad69251900048ddddc6387265e1545d1a366e3b4dcd57b76a03f0a65ae7" +dependencies = [ + "parity-scale-codec", + "scale-info", + "serde", + "sp-core 32.0.0", + "sp-io 34.0.0", + "sp-std", +] + +[[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 34.0.0", + "sp-io 38.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", + "static_assertions", +] + +[[package]] +name = "sp-authority-discovery" +version = "34.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "519c33af0e25ba2dd2eb3790dc404d634b6e4ce0801bcc8fa3574e07c365e734" +dependencies = [ + "parity-scale-codec", + "scale-info", + "sp-api", + "sp-application-crypto 38.0.0", + "sp-runtime 39.0.3", +] + +[[package]] +name = "sp-block-builder" +version = "34.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74738809461e3d4bd707b5b94e0e0c064a623a74a6a8fe5c98514417a02858dd" +dependencies = [ + "sp-api", + "sp-inherents", + "sp-runtime 39.0.3", +] + +[[package]] +name = "sp-consensus-aura" +version = "0.40.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a8faaa05bbcb9c41f0cc535c4c1315abf6df472b53eae018678d1b4d811ac47" +dependencies = [ + "async-trait", + "parity-scale-codec", + "scale-info", + "sp-api", + "sp-application-crypto 38.0.0", + "sp-consensus-slots", + "sp-inherents", + "sp-runtime 39.0.3", + "sp-timestamp", +] + +[[package]] +name = "sp-consensus-babe" +version = "0.40.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36ee95e17ee8dcd14db7d584b899a426565ca9abe5a266ab82277977fc547f86" +dependencies = [ + "async-trait", + "parity-scale-codec", + "scale-info", + "serde", + "sp-api", + "sp-application-crypto 38.0.0", + "sp-consensus-slots", + "sp-core 34.0.0", + "sp-inherents", + "sp-runtime 39.0.3", + "sp-timestamp", +] + +[[package]] +name = "sp-consensus-beefy" +version = "22.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1d97e8cd75d85d15cda6f1923cf3834e848f80d5a6de1cf4edbbc5f0ad607eb" +dependencies = [ + "lazy_static", + "parity-scale-codec", + "scale-info", + "serde", + "sp-api", + "sp-application-crypto 38.0.0", + "sp-core 34.0.0", + "sp-crypto-hashing", + "sp-io 38.0.0", + "sp-keystore 0.40.0", + "sp-mmr-primitives", + "sp-runtime 39.0.3", + "sp-weights", + "strum 0.26.3", +] + +[[package]] +name = "sp-consensus-grandpa" +version = "21.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "587b791efe6c5f18e09dbbaf1ece0ee7b5fe51602c233e7151a3676b0de0260b" +dependencies = [ + "finality-grandpa", + "log", + "parity-scale-codec", + "scale-info", + "serde", + "sp-api", + "sp-application-crypto 38.0.0", + "sp-core 34.0.0", + "sp-keystore 0.40.0", + "sp-runtime 39.0.3", +] + +[[package]] +name = "sp-consensus-pow" +version = "0.40.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fa6b7d199a1c16cea1b74ee7cee174bf08f2120ab66a87bee7b12353100b47c" +dependencies = [ + "parity-scale-codec", + "sp-api", + "sp-core 34.0.0", + "sp-runtime 39.0.3", +] + +[[package]] +name = "sp-consensus-slots" +version = "0.40.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbafb7ed44f51c22fa277fb39b33dc601fa426133a8e2b53f3f46b10f07fba43" +dependencies = [ + "parity-scale-codec", + "scale-info", + "serde", + "sp-timestamp", +] + +[[package]] +name = "sp-core" +version = "31.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d7a0fd8f16dcc3761198fc83be12872f823b37b749bc72a3a6a1f702509366" +dependencies = [ + "array-bytes", + "bitflags 1.3.2", + "blake2", + "bounded-collections", + "bs58", + "dyn-clonable", + "ed25519-zebra 3.1.0", + "futures", + "hash-db", + "hash256-std-hasher", + "impl-serde 0.4.0", + "itertools 0.10.5", + "k256", + "libsecp256k1", + "log", + "merlin", + "parity-bip39", + "parity-scale-codec", + "parking_lot", + "paste", + "primitive-types 0.12.2", + "rand", + "scale-info", + "schnorrkel", + "secp256k1 0.28.2", + "secrecy 0.8.0", + "serde", + "sp-crypto-hashing", + "sp-debug-derive", + "sp-externalities 0.27.0", + "sp-runtime-interface 26.0.0", + "sp-std", + "sp-storage 20.0.0", + "ss58-registry", + "substrate-bip39 0.5.0", + "thiserror 1.0.69", + "tracing", + "w3f-bls", + "zeroize", +] + +[[package]] +name = "sp-core" +version = "32.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb2dac7e47c7ddbb61efe196d5cce99f6ea88926c961fa39909bfeae46fc5a7b" +dependencies = [ + "array-bytes", + "bitflags 1.3.2", + "blake2", + "bounded-collections", + "bs58", + "dyn-clonable", + "ed25519-zebra 3.1.0", + "futures", + "hash-db", + "hash256-std-hasher", + "impl-serde 0.4.0", + "itertools 0.10.5", + "k256", + "libsecp256k1", + "log", + "merlin", + "parity-bip39", + "parity-scale-codec", + "parking_lot", + "paste", + "primitive-types 0.12.2", + "rand", + "scale-info", + "schnorrkel", + "secp256k1 0.28.2", + "secrecy 0.8.0", + "serde", + "sp-crypto-hashing", + "sp-debug-derive", + "sp-externalities 0.28.0", + "sp-runtime-interface 27.0.0", + "sp-std", + "sp-storage 21.0.0", + "ss58-registry", + "substrate-bip39 0.6.0", + "thiserror 1.0.69", + "tracing", + "w3f-bls", + "zeroize", +] + +[[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 4.0.3", + "futures", + "hash-db", + "hash256-std-hasher", + "impl-serde 0.4.0", + "itertools 0.11.0", + "k256", + "libsecp256k1", + "log", + "merlin", + "parity-bip39", + "parity-scale-codec", + "parking_lot", + "paste", + "primitive-types 0.12.2", + "rand", + "scale-info", + "schnorrkel", + "secp256k1 0.28.2", + "secrecy 0.8.0", + "serde", + "sp-crypto-hashing", + "sp-debug-derive", + "sp-externalities 0.29.0", + "sp-runtime-interface 28.0.0", + "sp-std", + "sp-storage 21.0.0", + "ss58-registry", + "substrate-bip39 0.6.0", + "thiserror 1.0.69", + "tracing", + "w3f-bls", + "zeroize", +] + +[[package]] +name = "sp-core-hashing" +version = "16.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f812cb2dff962eb378c507612a50f1c59f52d92eb97b710f35be3c2346a3cd7" +dependencies = [ + "sp-crypto-hashing", +] + +[[package]] +name = "sp-crypto-ec-utils" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2acb24f8a607a48a87f0ee4c090fc5d577eee49ff39ced6a3c491e06eca03c37" +dependencies = [ + "ark-bls12-377", + "ark-bls12-377-ext", + "ark-bls12-381", + "ark-bls12-381-ext", + "ark-bw6-761", + "ark-bw6-761-ext", + "ark-ec", + "ark-ed-on-bls12-377", + "ark-ed-on-bls12-377-ext", + "ark-ed-on-bls12-381-bandersnatch", + "ark-ed-on-bls12-381-bandersnatch-ext", + "ark-scale", + "sp-runtime-interface 28.0.0", +] + +[[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-crypto-hashing-proc-macro" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b85d0f1f1e44bd8617eb2a48203ee854981229e3e79e6f468c7175d5fd37489b" +dependencies = [ + "quote", + "sp-crypto-hashing", + "syn 2.0.90", +] + +[[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.90", +] + +[[package]] +name = "sp-externalities" +version = "0.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1d6a4572eadd4a63cff92509a210bf425501a0c5e76574b30a366ac77653787" +dependencies = [ + "environmental", + "parity-scale-codec", + "sp-std", + "sp-storage 20.0.0", +] + +[[package]] +name = "sp-externalities" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33abaec4be69b1613796bbf430decbbcaaf978756379e2016e683a4d6379cd02" +dependencies = [ + "environmental", + "parity-scale-codec", + "sp-storage 21.0.0", +] + +[[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 21.0.0", +] + +[[package]] +name = "sp-genesis-builder" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a646ed222fd86d5680faa4a8967980eb32f644cae6c8523e1c689a6deda3e8" +dependencies = [ + "parity-scale-codec", + "scale-info", + "serde_json", + "sp-api", + "sp-runtime 39.0.3", +] + +[[package]] +name = "sp-inherents" +version = "34.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "afffbddc380d99a90c459ba1554bbbc01d62e892de9f1485af6940b89c4c0d57" +dependencies = [ + "async-trait", + "impl-trait-for-tuples", + "parity-scale-codec", + "scale-info", + "sp-runtime 39.0.3", + "thiserror 1.0.69", +] + +[[package]] +name = "sp-io" +version = "34.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c44ed47247b6eee76ff703f9fa9f04f99c4104ac1faf629e6d1128e09066b57b" +dependencies = [ + "bytes", + "ed25519-dalek", + "libsecp256k1", + "log", + "parity-scale-codec", + "polkavm-derive 0.9.1", + "rustversion", + "secp256k1 0.28.2", + "sp-core 32.0.0", + "sp-crypto-hashing", + "sp-externalities 0.28.0", + "sp-keystore 0.38.0", + "sp-runtime-interface 27.0.0", + "sp-state-machine 0.39.0", + "sp-std", + "sp-tracing 17.0.1", + "sp-trie 33.0.0", + "tracing", + "tracing-core", +] + +[[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 0.9.1", + "rustversion", + "secp256k1 0.28.2", + "sp-core 34.0.0", + "sp-crypto-hashing", + "sp-externalities 0.29.0", + "sp-keystore 0.40.0", + "sp-runtime-interface 28.0.0", + "sp-state-machine 0.43.0", + "sp-tracing 17.0.1", + "sp-trie 37.0.0", + "tracing", + "tracing-core", +] + +[[package]] +name = "sp-keyring" +version = "39.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c0e20624277f578b27f44ecfbe2ebc2e908488511ee2c900c5281599f700ab3" +dependencies = [ + "sp-core 34.0.0", + "sp-runtime 39.0.3", + "strum 0.26.3", +] + +[[package]] +name = "sp-keystore" +version = "0.38.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e6c7a7abd860a5211a356cf9d5fcabf0eb37d997985e5d722b6b33dcc815528" +dependencies = [ + "parity-scale-codec", + "parking_lot", + "sp-core 32.0.0", + "sp-externalities 0.28.0", +] + +[[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 34.0.0", + "sp-externalities 0.29.0", +] + +[[package]] +name = "sp-maybe-compressed-blob" +version = "11.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0c768c11afbe698a090386876911da4236af199cd38a5866748df4d8628aeff" +dependencies = [ + "thiserror 1.0.69", + "zstd 0.12.4", +] + +[[package]] +name = "sp-metadata-ir" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a616fa51350b35326682a472ee8e6ba742fdacb18babac38ecd46b3e05ead869" +dependencies = [ + "frame-metadata 16.0.0", + "parity-scale-codec", + "scale-info", +] + +[[package]] +name = "sp-mixnet" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b0b017dd54823b6e62f9f7171a1df350972e5c6d0bf17e0c2f78680b5c31942" +dependencies = [ + "parity-scale-codec", + "scale-info", + "sp-api", + "sp-application-crypto 38.0.0", +] + +[[package]] +name = "sp-mmr-primitives" +version = "34.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a12dd76e368f1e48144a84b4735218b712f84b3f976970e2f25a29b30440e10" +dependencies = [ + "log", + "parity-scale-codec", + "polkadot-ckb-merkle-mountain-range", + "scale-info", + "serde", + "sp-api", + "sp-core 34.0.0", + "sp-debug-derive", + "sp-runtime 39.0.3", + "thiserror 1.0.69", +] + +[[package]] +name = "sp-npos-elections" +version = "34.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af922f112c7c1ed199eabe14f12a82ceb75e1adf0804870eccfbcf3399492847" +dependencies = [ + "parity-scale-codec", + "scale-info", + "serde", + "sp-arithmetic", + "sp-core 34.0.0", + "sp-runtime 39.0.3", +] + +[[package]] +name = "sp-offchain" +version = "34.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d9de237d72ecffd07f90826eef18360208b16d8de939d54e61591fac0fcbf99" +dependencies = [ + "sp-api", + "sp-core 34.0.0", + "sp-runtime 39.0.3", +] + +[[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 = "35.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ce931b7fbfdeeca1340801dbd4a1cae54ad4c97a1e3dcfcc79709bc800dd46" +dependencies = [ + "docify", + "either", + "hash256-std-hasher", + "impl-trait-for-tuples", + "log", + "parity-scale-codec", + "paste", + "rand", + "scale-info", "serde", - "serde_json", - "sha2 0.10.8", - "sha3", - "siphasher", - "slab", - "smallvec", - "soketto 0.7.1", - "twox-hash", - "wasmi", - "x25519-dalek", - "zeroize", + "simple-mermaid", + "sp-application-crypto 34.0.0", + "sp-arithmetic", + "sp-core 32.0.0", + "sp-io 34.0.0", + "sp-std", + "sp-weights", ] [[package]] -name = "smoldot-light" -version = "0.14.0" +name = "sp-runtime" +version = "39.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5496f2d116b7019a526b1039ec2247dd172b8670633b1a64a614c9ea12c9d8c7" +checksum = "ef567865c042b9002dfa44b8fc850fe611038acdf1e382e539495015f60f692f" dependencies = [ - "async-channel", - "async-lock", - "base64 0.21.7", - "blake2-rfc", - "derive_more", + "docify", "either", - "event-listener 4.0.3", - "fnv", - "futures-channel", - "futures-lite", - "futures-util", - "hashbrown 0.14.5", - "hex", - "itertools 0.12.1", + "hash256-std-hasher", + "impl-trait-for-tuples", "log", - "lru", - "no-std-net", - "parking_lot", - "pin-project", + "num-traits", + "parity-scale-codec", + "paste", "rand", - "rand_chacha", + "scale-info", "serde", - "serde_json", - "siphasher", - "slab", - "smol", - "smoldot", - "zeroize", + "simple-mermaid", + "sp-application-crypto 38.0.0", + "sp-arithmetic", + "sp-core 34.0.0", + "sp-io 38.0.0", + "sp-std", + "sp-weights", + "tracing", ] [[package]] -name = "socket2" -version = "0.5.7" +name = "sp-runtime-interface" +version = "26.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" +checksum = "e48a675ea4858333d4d755899ed5ed780174aa34fec15953428d516af5452295" dependencies = [ - "libc", - "windows-sys 0.52.0", + "bytes", + "impl-trait-for-tuples", + "parity-scale-codec", + "polkavm-derive 0.8.0", + "primitive-types 0.12.2", + "sp-externalities 0.27.0", + "sp-runtime-interface-proc-macro", + "sp-std", + "sp-storage 20.0.0", + "sp-tracing 16.0.0", + "sp-wasm-interface 20.0.0", + "static_assertions", ] [[package]] -name = "soketto" -version = "0.7.1" +name = "sp-runtime-interface" +version = "27.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d1c5305e39e09653383c2c7244f2f78b3bcae37cf50c64cb4789c9f5096ec2" +checksum = "647db5e1dc481686628b41554e832df6ab400c4b43a6a54e54d3b0a71ca404aa" dependencies = [ - "base64 0.13.1", "bytes", - "futures", - "httparse", + "impl-trait-for-tuples", + "parity-scale-codec", + "polkavm-derive 0.9.1", + "primitive-types 0.12.2", + "sp-externalities 0.28.0", + "sp-runtime-interface-proc-macro", + "sp-std", + "sp-storage 21.0.0", + "sp-tracing 17.0.1", + "sp-wasm-interface 21.0.1", + "static_assertions", +] + +[[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 0.9.1", + "primitive-types 0.12.2", + "sp-externalities 0.29.0", + "sp-runtime-interface-proc-macro", + "sp-std", + "sp-storage 21.0.0", + "sp-tracing 17.0.1", + "sp-wasm-interface 21.0.1", + "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.2.0", + "proc-macro2", + "quote", + "syn 2.0.90", +] + +[[package]] +name = "sp-session" +version = "36.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00a3a307fedc423fb8cd2a7726a3bbb99014f1b4b52f26153993e2aae3338fe6" +dependencies = [ + "parity-scale-codec", + "scale-info", + "sp-api", + "sp-core 34.0.0", + "sp-keystore 0.40.0", + "sp-runtime 39.0.3", + "sp-staking 36.0.0", +] + +[[package]] +name = "sp-staking" +version = "34.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "143a764cacbab58347d8b2fd4c8909031fb0888d7b02a0ec9fa44f81f780d732" +dependencies = [ + "impl-trait-for-tuples", + "parity-scale-codec", + "scale-info", + "serde", + "sp-core 34.0.0", + "sp-runtime 39.0.3", +] + +[[package]] +name = "sp-staking" +version = "36.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a73eedb4b85f4cd420d31764827546aa22f82ce1646d0fd258993d051de7a90" +dependencies = [ + "impl-trait-for-tuples", + "parity-scale-codec", + "scale-info", + "serde", + "sp-core 34.0.0", + "sp-runtime 39.0.3", +] + +[[package]] +name = "sp-state-machine" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21d9078306c3066f1824e41153e1ceec34231d39d9a7e7956b101eadf7b9fd3a" +dependencies = [ + "hash-db", + "log", + "parity-scale-codec", + "parking_lot", + "rand", + "smallvec", + "sp-core 32.0.0", + "sp-externalities 0.28.0", + "sp-panic-handler", + "sp-trie 33.0.0", + "thiserror 1.0.69", + "tracing", + "trie-db 0.28.0", +] + +[[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 34.0.0", + "sp-externalities 0.29.0", + "sp-panic-handler", + "sp-trie 37.0.0", + "thiserror 1.0.69", + "tracing", + "trie-db 0.29.1", +] + +[[package]] +name = "sp-statement-store" +version = "18.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c219bc34ef4d1f9835f3ed881f965643c32034fcc030eb33b759dadbc802c1c2" +dependencies = [ + "aes-gcm", + "curve25519-dalek 4.1.3", + "ed25519-dalek", + "hkdf", + "parity-scale-codec", "rand", - "sha-1", + "scale-info", + "sha2 0.10.8", + "sp-api", + "sp-application-crypto 38.0.0", + "sp-core 34.0.0", + "sp-crypto-hashing", + "sp-externalities 0.29.0", + "sp-runtime 39.0.3", + "sp-runtime-interface 28.0.0", + "thiserror 1.0.69", + "x25519-dalek", +] + +[[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 = "20.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8dba5791cb3978e95daf99dad919ecb3ec35565604e88cd38d805d9d4981e8bd" +dependencies = [ + "impl-serde 0.4.0", + "parity-scale-codec", + "ref-cast", + "serde", + "sp-debug-derive", + "sp-std", +] + +[[package]] +name = "sp-storage" +version = "21.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99c82989b3a4979a7e1ad848aad9f5d0b4388f1f454cc131766526601ab9e8f8" +dependencies = [ + "impl-serde 0.4.0", + "parity-scale-codec", + "ref-cast", + "serde", + "sp-debug-derive", +] + +[[package]] +name = "sp-timestamp" +version = "34.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72a1cb4df653d62ccc0dbce1db45d1c9443ec60247ee9576962d24da4c9c6f07" +dependencies = [ + "async-trait", + "parity-scale-codec", + "sp-inherents", + "sp-runtime 39.0.3", + "thiserror 1.0.69", +] + +[[package]] +name = "sp-tracing" +version = "16.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0351810b9d074df71c4514c5228ed05c250607cba131c1c9d1526760ab69c05c" +dependencies = [ + "parity-scale-codec", + "sp-std", + "tracing", + "tracing-core", + "tracing-subscriber 0.2.25", +] + +[[package]] +name = "sp-tracing" +version = "17.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf641a1d17268c8fcfdb8e0fa51a79c2d4222f4cfda5f3944dbdbc384dced8d5" +dependencies = [ + "parity-scale-codec", + "tracing", + "tracing-core", + "tracing-subscriber 0.3.19", ] [[package]] -name = "soketto" -version = "0.8.0" +name = "sp-transaction-pool" +version = "34.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37468c595637c10857701c990f93a40ce0e357cedb0953d1c26c8d8027f9bb53" +checksum = "fc4bf251059485a7dd38fe4afeda8792983511cc47f342ff4695e2dcae6b5247" dependencies = [ - "base64 0.22.1", - "bytes", - "futures", - "httparse", - "log", - "rand", - "sha1", + "sp-api", + "sp-runtime 39.0.3", ] [[package]] -name = "sp-application-crypto" -version = "33.0.0" +name = "sp-transaction-storage-proof" +version = "34.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13ca6121c22c8bd3d1dce1f05c479101fd0d7b159bef2a3e8c834138d839c75c" +checksum = "c765c2e9817d95f13d42a9f2295c60723464669765c6e5acbacebd2f54932f67" dependencies = [ + "async-trait", "parity-scale-codec", "scale-info", - "serde", - "sp-core", - "sp-io", - "sp-std", + "sp-core 34.0.0", + "sp-inherents", + "sp-runtime 39.0.3", + "sp-trie 37.0.0", ] [[package]] -name = "sp-arithmetic" -version = "25.0.0" +name = "sp-trie" +version = "33.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "910c07fa263b20bf7271fdd4adcb5d3217dfdac14270592e0780223542e7e114" +checksum = "d1f5b3620a1c87c265a83d85d7519c6b60c47acf7f77593966afe313d086f00e" dependencies = [ - "integer-sqrt", - "num-traits", + "ahash 0.8.11", + "hash-db", + "lazy_static", + "memory-db", + "nohash-hasher", "parity-scale-codec", + "parking_lot", + "rand", "scale-info", - "serde", - "sp-std", - "static_assertions", + "schnellru", + "sp-core 32.0.0", + "sp-externalities 0.28.0", + "thiserror 1.0.69", + "tracing", + "trie-db 0.28.0", + "trie-root", ] [[package]] -name = "sp-core" -version = "31.0.0" +name = "sp-trie" +version = "37.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26d7a0fd8f16dcc3761198fc83be12872f823b37b749bc72a3a6a1f702509366" +checksum = "6282aef9f4b6ecd95a67a45bcdb67a71f4a4155c09a53c10add4ffe823db18cd" dependencies = [ - "array-bytes", - "bitflags 1.3.2", - "blake2", - "bounded-collections", - "bs58", - "dyn-clonable", - "ed25519-zebra 3.1.0", - "futures", + "ahash 0.8.11", "hash-db", - "hash256-std-hasher", - "impl-serde", - "itertools 0.10.5", - "k256", - "libsecp256k1", - "log", - "merlin", - "parity-bip39", + "lazy_static", + "memory-db", + "nohash-hasher", "parity-scale-codec", "parking_lot", - "paste", - "primitive-types", "rand", "scale-info", - "schnorrkel", - "secp256k1", - "secrecy", - "serde", - "sp-crypto-hashing", - "sp-debug-derive", - "sp-externalities", - "sp-runtime-interface", - "sp-std", - "sp-storage", - "ss58-registry", - "substrate-bip39", - "thiserror", + "schnellru", + "sp-core 34.0.0", + "sp-externalities 0.29.0", + "thiserror 1.0.69", "tracing", - "w3f-bls", - "zeroize", + "trie-db 0.29.1", + "trie-root", ] [[package]] -name = "sp-crypto-hashing" -version = "0.1.0" +name = "sp-version" +version = "37.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc9927a7f81334ed5b8a98a4a978c81324d12bd9713ec76b5c68fd410174c5eb" +checksum = "d521a405707b5be561367cd3d442ff67588993de24062ce3adefcf8437ee9fe1" dependencies = [ - "blake2b_simd", - "byteorder", - "digest 0.10.7", - "sha2 0.10.8", - "sha3", - "twox-hash", + "impl-serde 0.4.0", + "parity-scale-codec", + "parity-wasm", + "scale-info", + "serde", + "sp-crypto-hashing-proc-macro", + "sp-runtime 39.0.3", + "sp-std", + "sp-version-proc-macro", + "thiserror 1.0.69", ] [[package]] -name = "sp-debug-derive" +name = "sp-version-proc-macro" version = "14.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48d09fa0a5f7299fb81ee25ae3853d26200f7a348148aed6de76be905c007dbe" +checksum = "5aee8f6730641a65fcf0c8f9b1e448af4b3bb083d08058b47528188bccc7b7a7" dependencies = [ + "parity-scale-codec", "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.90", ] [[package]] -name = "sp-externalities" -version = "0.27.0" +name = "sp-wasm-interface" +version = "20.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1d6a4572eadd4a63cff92509a210bf425501a0c5e76574b30a366ac77653787" +checksum = "9ef97172c42eb4c6c26506f325f48463e9bc29b2034a587f1b9e48c751229bee" dependencies = [ - "environmental", + "anyhow", + "impl-trait-for-tuples", + "log", "parity-scale-codec", "sp-std", - "sp-storage", + "wasmtime", ] [[package]] -name = "sp-io" -version = "33.0.0" +name = "sp-wasm-interface" +version = "21.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e09bba780b55bd9e67979cd8f654a31e4a6cf45426ff371394a65953d2177f2" +checksum = "b066baa6d57951600b14ffe1243f54c47f9c23dd89c262e17ca00ae8dca58be9" dependencies = [ - "bytes", - "ed25519-dalek", - "libsecp256k1", + "anyhow", + "impl-trait-for-tuples", "log", "parity-scale-codec", - "polkavm-derive 0.9.1", - "rustversion", - "secp256k1", - "sp-core", - "sp-crypto-hashing", - "sp-externalities", - "sp-keystore", - "sp-runtime-interface", - "sp-state-machine", - "sp-std", - "sp-tracing", - "sp-trie", - "tracing", - "tracing-core", + "wasmtime", ] [[package]] -name = "sp-keystore" -version = "0.37.0" +name = "sp-weights" +version = "31.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdbab8b61bd61d5f8625a0c75753b5d5a23be55d3445419acd42caf59cf6236b" +checksum = "93cdaf72a1dad537bbb130ba4d47307ebe5170405280ed1aa31fa712718a400e" dependencies = [ + "bounded-collections", "parity-scale-codec", - "parking_lot", - "sp-core", - "sp-externalities", + "scale-info", + "serde", + "smallvec", + "sp-arithmetic", + "sp-debug-derive", ] [[package]] -name = "sp-panic-handler" -version = "13.0.0" +name = "spin" +version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8f5a17a0a11de029a8b811cb6e8b32ce7e02183cc04a3e965c383246798c416" -dependencies = [ - "backtrace", - "lazy_static", - "regex", -] +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" [[package]] -name = "sp-runtime" -version = "34.0.0" +name = "spki" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec3cb126971e7db2f0fcf8053dce740684c438c7180cfca1959598230f342c58" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" dependencies = [ - "docify", - "either", - "hash256-std-hasher", - "impl-trait-for-tuples", - "log", - "parity-scale-codec", - "paste", - "rand", - "scale-info", - "serde", - "simple-mermaid", - "sp-application-crypto", - "sp-arithmetic", - "sp-core", - "sp-io", - "sp-std", - "sp-weights", + "base64ct", + "der", ] [[package]] -name = "sp-runtime-interface" -version = "26.0.0" +name = "ss58-registry" +version = "1.51.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e48a675ea4858333d4d755899ed5ed780174aa34fec15953428d516af5452295" +checksum = "19409f13998e55816d1c728395af0b52ec066206341d939e22e7766df9b494b8" dependencies = [ - "bytes", - "impl-trait-for-tuples", - "parity-scale-codec", - "polkavm-derive 0.8.0", - "primitive-types", - "sp-externalities", - "sp-runtime-interface-proc-macro", - "sp-std", - "sp-storage", - "sp-tracing", - "sp-wasm-interface", - "static_assertions", + "Inflector", + "num-format", + "proc-macro2", + "quote", + "serde", + "serde_json", + "unicode-xid", ] [[package]] -name = "sp-runtime-interface-proc-macro" -version = "18.0.0" +name = "ssz_rs" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0195f32c628fee3ce1dfbbf2e7e52a30ea85f3589da9fe62a8b816d70fc06294" +checksum = "057291e5631f280978fa9c8009390663ca4613359fc1318e36a8c24c392f6d1f" dependencies = [ - "Inflector", - "expander", - "proc-macro-crate 3.2.0", - "proc-macro2", - "quote", - "syn 2.0.77", + "bitvec", + "num-bigint", + "sha2 0.9.9", + "ssz_rs_derive", ] [[package]] -name = "sp-state-machine" -version = "0.38.0" +name = "ssz_rs_derive" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1eae0eac8034ba14437e772366336f579398a46d101de13dbb781ab1e35e67c5" +checksum = "f07d54c4d01a1713eb363b55ba51595da15f6f1211435b71466460da022aa140" dependencies = [ - "hash-db", - "log", - "parity-scale-codec", - "parking_lot", - "rand", - "smallvec", - "sp-core", - "sp-externalities", - "sp-panic-handler", - "sp-std", - "sp-trie", - "thiserror", - "tracing", - "trie-db", + "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] -name = "sp-std" -version = "14.0.0" +name = "stable_deref_trait" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12f8ee986414b0a9ad741776762f4083cd3a5128449b982a3919c4df36874834" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" [[package]] -name = "sp-storage" -version = "20.0.0" +name = "staging-parachain-info" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8dba5791cb3978e95daf99dad919ecb3ec35565604e88cd38d805d9d4981e8bd" +checksum = "d28266dfddbfff721d70ad2f873380845b569adfab32f257cf97d9cedd894b68" dependencies = [ - "impl-serde", + "cumulus-primitives-core", + "frame-support", + "frame-system", "parity-scale-codec", - "ref-cast", - "serde", - "sp-debug-derive", - "sp-std", + "scale-info", + "sp-runtime 39.0.3", ] [[package]] -name = "sp-tracing" -version = "16.0.0" +name = "staging-xcm" +version = "11.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0351810b9d074df71c4514c5228ed05c250607cba131c1c9d1526760ab69c05c" +checksum = "aded0292274ad473250c22ed3deaf2d9ed47d15786d700e9e83ab7c1cad2ad44" dependencies = [ + "array-bytes", + "bounded-collections", + "derivative", + "environmental", + "impl-trait-for-tuples", + "log", "parity-scale-codec", - "sp-std", - "tracing", - "tracing-core", - "tracing-subscriber", + "scale-info", + "serde", + "sp-weights", + "xcm-procedural 8.0.0", ] [[package]] -name = "sp-trie" -version = "32.0.0" +name = "staging-xcm" +version = "14.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1aa91ad26c62b93d73e65f9ce7ebd04459c4bad086599348846a81988d6faa4" +checksum = "96bee7cd999e9cdf10f8db72342070d456e21e82a0f5962ff3b87edbd5f2b20e" dependencies = [ - "ahash 0.8.11", - "hash-db", - "lazy_static", - "memory-db", - "nohash-hasher", + "array-bytes", + "bounded-collections", + "derivative", + "environmental", + "impl-trait-for-tuples", + "log", "parity-scale-codec", - "parking_lot", - "rand", "scale-info", - "schnellru", - "sp-core", - "sp-externalities", - "sp-std", - "thiserror", - "tracing", - "trie-db", - "trie-root", + "serde", + "sp-runtime 39.0.3", + "sp-weights", + "xcm-procedural 10.1.0", ] -[[package]] -name = "sp-wasm-interface" -version = "20.0.0" +[[package]] +name = "staging-xcm-builder" +version = "17.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ef97172c42eb4c6c26506f325f48463e9bc29b2034a587f1b9e48c751229bee" +checksum = "a3746adbbae27b1e6763f0cca622e15482ebcb94835a9e078c212dd7be896e35" dependencies = [ - "anyhow", + "frame-support", + "frame-system", "impl-trait-for-tuples", "log", + "pallet-asset-conversion", + "pallet-transaction-payment", "parity-scale-codec", - "sp-std", - "wasmtime", + "polkadot-parachain-primitives", + "scale-info", + "sp-arithmetic", + "sp-io 38.0.0", + "sp-runtime 39.0.3", + "sp-weights", + "staging-xcm 14.2.0", + "staging-xcm-executor", ] [[package]] -name = "sp-weights" -version = "30.0.0" +name = "staging-xcm-executor" +version = "17.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9af6c661fe3066b29f9e1d258000f402ff5cc2529a9191972d214e5871d0ba87" +checksum = "79dd0c5332a5318e58f0300b20768b71cf9427c906f94a743c9dc7c3ee9e7fa9" dependencies = [ - "bounded-collections", + "environmental", + "frame-benchmarking", + "frame-support", + "impl-trait-for-tuples", "parity-scale-codec", "scale-info", - "serde", - "smallvec", "sp-arithmetic", - "sp-debug-derive", - "sp-std", + "sp-core 34.0.0", + "sp-io 38.0.0", + "sp-runtime 39.0.3", + "sp-weights", + "staging-xcm 14.2.0", + "tracing", ] [[package]] -name = "spin" -version = "0.9.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" - -[[package]] -name = "spki" -version = "0.7.3" +name = "static_assertions" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" -dependencies = [ - "base64ct", - "der", -] +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" [[package]] -name = "ss58-registry" -version = "1.50.0" +name = "string-interner" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43fce22ed1df64d04b262351c8f9d5c6da4f76f79f25ad15529792f893fad25d" +checksum = "1c6a0d765f5807e98a091107bae0a56ea3799f66a5de47b2c84c94a39c09974e" dependencies = [ - "Inflector", - "num-format", - "proc-macro2", - "quote", + "cfg-if", + "hashbrown 0.14.5", "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" @@ -6766,7 +13090,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.77", + "syn 2.0.90", ] [[package]] @@ -6782,6 +13106,40 @@ dependencies = [ "zeroize", ] +[[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 = "substrate-wasm-builder" +version = "24.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf035ffe7335fb24053edfe4d0a5780250eda772082a1b80ae25835dd4c09265" +dependencies = [ + "build-helper", + "cargo_metadata 0.15.4", + "console", + "filetime", + "jobserver", + "parity-wasm", + "polkavm-linker 0.9.2", + "sp-maybe-compressed-blob", + "strum 0.26.3", + "tempfile", + "toml 0.8.19", + "walkdir", + "wasm-opt", +] + [[package]] name = "subtle" version = "2.6.1" @@ -6790,102 +13148,99 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "subxt" -version = "0.37.0" +version = "0.38.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a160cba1edbf3ec4fbbeaea3f1a185f70448116a6bccc8276bb39adb3b3053bd" +checksum = "c53029d133e4e0cb7933f1fe06f2c68804b956de9bb8fa930ffca44e9e5e4230" dependencies = [ "async-trait", "derive-where", "either", - "frame-metadata 16.0.0", + "frame-metadata 17.0.0", "futures", "hex", - "impl-serde", - "instant", - "jsonrpsee 0.22.5", + "impl-serde 0.5.0", + "jsonrpsee", "parity-scale-codec", - "primitive-types", - "reconnecting-jsonrpsee-ws-client", + "polkadot-sdk", + "primitive-types 0.13.1", "scale-bits 0.6.0", - "scale-decode 0.13.1", - "scale-encode 0.7.1", + "scale-decode 0.14.0", + "scale-encode 0.8.0", "scale-info", "scale-value", "serde", "serde_json", - "sp-crypto-hashing", "subxt-core", "subxt-lightclient", "subxt-macro", "subxt-metadata", - "thiserror", + "thiserror 1.0.69", + "tokio", "tokio-util", "tracing", "url", + "wasm-bindgen-futures", + "web-time", ] [[package]] name = "subxt-codegen" -version = "0.37.0" +version = "0.38.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d703dca0905cc5272d7cc27a4ac5f37dcaae7671acc7fef0200057cc8c317786" +checksum = "3cfcfb7d9589f3df0ac87c4988661cf3fb370761fcb19f2fd33104cc59daf22a" 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.77", - "thiserror", - "tokio", + "syn 2.0.90", + "thiserror 1.0.69", ] [[package]] name = "subxt-core" -version = "0.37.0" +version = "0.38.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59f41eb2e2eea6ed45649508cc735f92c27f1fcfb15229e75f8270ea73177345" +checksum = "7ea28114366780d23684bd55ab879cd04c9d4cbba3b727a3854a3eca6bf29a1a" dependencies = [ "base58", "blake2", "derive-where", - "frame-metadata 16.0.0", + "frame-decode", + "frame-metadata 17.0.0", "hashbrown 0.14.5", "hex", - "impl-serde", + "impl-serde 0.5.0", + "keccak-hash", "parity-scale-codec", - "primitive-types", + "polkadot-sdk", + "primitive-types 0.13.1", "scale-bits 0.6.0", - "scale-decode 0.13.1", - "scale-encode 0.7.1", + "scale-decode 0.14.0", + "scale-encode 0.8.0", "scale-info", "scale-value", "serde", "serde_json", - "sp-core", - "sp-crypto-hashing", - "sp-runtime", "subxt-metadata", "tracing", ] [[package]] name = "subxt-lightclient" -version = "0.37.0" +version = "0.38.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d9406fbdb9548c110803cb8afa750f8b911d51eefdf95474b11319591d225d9" +checksum = "534d4b725183a9fa09ce0e0f135674473297fdd97dee4d683f41117f365ae997" dependencies = [ "futures", "futures-util", "serde", "serde_json", "smoldot-light", - "thiserror", + "thiserror 1.0.69", "tokio", "tokio-stream", "tracing", @@ -6893,54 +13248,72 @@ dependencies = [ [[package]] name = "subxt-macro" -version = "0.37.0" +version = "0.38.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c195f803d70687e409aba9be6c87115b5da8952cd83c4d13f2e043239818fcd" +checksum = "228db9a5c95a6d8dc6152b4d6cdcbabc4f60821dd3f482a4f8791e022b7caadb" dependencies = [ "darling 0.20.10", "parity-scale-codec", - "proc-macro-error", + "proc-macro-error2", "quote", "scale-typegen", "subxt-codegen", - "syn 2.0.77", + "subxt-utils-fetchmetadata", + "syn 2.0.90", ] [[package]] name = "subxt-metadata" -version = "0.37.0" +version = "0.38.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "738be5890fdeff899bbffff4d9c0f244fe2a952fb861301b937e3aa40ebb55da" +checksum = "ee13e6862eda035557d9a2871955306aff540d2b89c06e0a62a1136a700aed28" dependencies = [ - "frame-metadata 16.0.0", + "frame-decode", + "frame-metadata 17.0.0", "hashbrown 0.14.5", "parity-scale-codec", + "polkadot-sdk", "scale-info", - "sp-crypto-hashing", ] [[package]] name = "subxt-signer" -version = "0.37.0" +version = "0.38.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f49888ae6ae90fe01b471193528eea5bd4ed52d8eecd2d13f4a2333b87388850" +checksum = "1e7a336d6a1f86f126100a4a717be58352de4c8214300c4f7807f974494efdb9" dependencies = [ + "base64 0.22.1", "bip39", "cfg-if", + "crypto_secretbox", "hex", "hmac 0.12.1", "parity-scale-codec", "pbkdf2", + "polkadot-sdk", "regex", "schnorrkel", - "secp256k1", - "secrecy", + "scrypt", + "secp256k1 0.30.0", + "secrecy 0.10.3", + "serde", + "serde_json", "sha2 0.10.8", - "sp-crypto-hashing", "subxt-core", "zeroize", ] +[[package]] +name = "subxt-utils-fetchmetadata" +version = "0.38.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3082b17a86e3c3fe45d858d94d68f6b5247caace193dad6201688f24db8ba9bb" +dependencies = [ + "hex", + "parity-scale-codec", + "thiserror 1.0.69", +] + [[package]] name = "symlink" version = "0.1.0" @@ -6960,9 +13333,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.77" +version = "2.0.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f35bcdf61fd8e7be6caf75f429fdca8beb3ed76584befb503b1569faee373ed" +checksum = "919d3b74a5dd0ccd15aeb8f93e7006bd9e14c295087c9896a110f490752bcf31" dependencies = [ "proc-macro2", "quote", @@ -6970,15 +13343,15 @@ dependencies = [ ] [[package]] -name = "syn_derive" -version = "0.1.8" +name = "syn-solidity" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1329189c02ff984e9736652b1631330da25eaa6bc639089ed4915d25446cbe7b" +checksum = "86b837ef12ab88835251726eb12237655e61ec8dc8a280085d1961cdc3dfd047" dependencies = [ - "proc-macro-error", + "paste", "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.90", ] [[package]] @@ -6989,13 +13362,36 @@ checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" [[package]] name = "sync_wrapper" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7065abeca94b6a8a577f9bd45aa0867a2238b74e8eb67cf10d492bc39351394" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" dependencies = [ "futures-core", ] +[[package]] +name = "synstructure" +version = "0.12.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", + "unicode-xid", +] + +[[package]] +name = "synstructure" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.90", +] + [[package]] name = "system-configuration" version = "0.5.1" @@ -7046,9 +13442,9 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "tar" -version = "0.4.41" +version = "0.4.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb797dad5fb5b76fcf519e702f4a589483b5ef06567f160c392832c1f5e44909" +checksum = "c65998313f8e17d0d553d28f91a0df93e4dbbbf770279c7bc21ca0f09ea1a1f6" dependencies = [ "filetime", "libc", @@ -7063,14 +13459,14 @@ checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" [[package]] name = "tempfile" -version = "3.12.0" +version = "3.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04cbcdd0c794ebb0d4cf35e88edd2f7d2c4c3e9a5a6dab322839b321c6a87a64" +checksum = "28cce251fcbc87fac86a866eeb0d6c2d536fc16d06f184bb61aeae11aa4cee0c" dependencies = [ "cfg-if", "fastrand", "once_cell", - "rustix 0.38.36", + "rustix 0.38.42", "windows-sys 0.59.0", ] @@ -7099,6 +13495,22 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3369f5ac52d5eb6ab48c6b4ffdc8efbcad6b89c765749064ba298f2c68a16a76" +[[package]] +name = "testnet-parachains-constants" +version = "10.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94bceae6f7c89d47daff6c7e05f712551a01379f61b07d494661941144878589" +dependencies = [ + "cumulus-primitives-core", + "frame-support", + "polkadot-core-primitives", + "rococo-runtime-constants", + "smallvec", + "sp-runtime 39.0.3", + "staging-xcm 14.2.0", + "westend-runtime-constants", +] + [[package]] name = "textwrap" version = "0.16.1" @@ -7107,27 +13519,47 @@ checksum = "23d434d3f8967a09480fb04132ebe0a3e088c173e6d0ee7897abbdf4eab0f8b9" dependencies = [ "smawk", "unicode-linebreak", - "unicode-width", + "unicode-width 0.1.14", +] + +[[package]] +name = "thiserror" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl 1.0.69", ] [[package]] name = "thiserror" -version = "1.0.63" +version = "2.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08f5383f3e0071702bf93ab5ee99b52d26936be9dedd9413067cbdcddcb6141a" +dependencies = [ + "thiserror-impl 2.0.8", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ - "thiserror-impl", + "proc-macro2", + "quote", + "syn 2.0.90", ] [[package]] name = "thiserror-impl" -version = "1.0.63" +version = "2.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" +checksum = "f2f357fcec90b3caef6623a099691be676d033b40a058ac95d2a6ade6fa0c943" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.90", ] [[package]] @@ -7142,9 +13574,9 @@ dependencies = [ [[package]] name = "time" -version = "0.3.36" +version = "0.3.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" +checksum = "35e7868883861bd0e56d9ac6efcaaca0d6d5d82a2a7ec8209ff492c07cf37b21" dependencies = [ "deranged", "itoa", @@ -7163,14 +13595,33 @@ checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" [[package]] name = "time-macros" -version = "0.2.18" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" +checksum = "2834e6017e3e5e4b9834939793b282bc03b37a3336245fa820e35e233e2a85de" dependencies = [ "num-conv", "time-core", ] +[[package]] +name = "tiny-keccak" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" +dependencies = [ + "crunchy", +] + +[[package]] +name = "tinystr" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" +dependencies = [ + "displaydoc", + "zerovec", +] + [[package]] name = "tinyvec" version = "1.8.0" @@ -7188,14 +13639,14 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.40.0" +version = "1.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2b070231665d27ad9ec9b8df639893f46727666c6767db40317fbe920a5d998" +checksum = "5cec9b21b0450273377fc97bd4c33a8acffc8c996c987a7c5b319a0083707551" dependencies = [ "backtrace", "bytes", "libc", - "mio 1.0.2", + "mio", "parking_lot", "pin-project-lite", "signal-hook-registry", @@ -7222,7 +13673,7 @@ checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.90", ] [[package]] @@ -7247,31 +13698,19 @@ dependencies = [ [[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" +version = "0.26.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" +checksum = "5f6d0975eaace0cf0fcadee4e4aaa5da15b5c079146f2cffb67c113be122bf37" dependencies = [ - "rustls 0.23.13", - "rustls-pki-types", + "rustls 0.23.20", "tokio", ] [[package]] name = "tokio-stream" -version = "0.1.16" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f4e6ce100d0eb49a2734f8c0812bcd324cf357d21810932c5df6b96ef2b86f1" +checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047" dependencies = [ "futures-core", "pin-project-lite", @@ -7305,9 +13744,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.12" +version = "0.7.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61e7c3654c13bcd040d4a03abee2c75b1d14a37b423cf5a813ceae1cc903ec6a" +checksum = "d7fcaa8d55a2bdd6b83ace262b016eca0d79ee02818c5c1bcdf0305114081078" dependencies = [ "bytes", "futures-core", @@ -7348,7 +13787,7 @@ dependencies = [ "serde", "serde_spanned", "toml_datetime", - "toml_edit 0.22.20", + "toml_edit 0.22.22", ] [[package]] @@ -7366,7 +13805,7 @@ version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap 2.5.0", + "indexmap 2.7.0", "serde", "serde_spanned", "toml_datetime", @@ -7375,15 +13814,15 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.22.20" +version = "0.22.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "583c44c02ad26b0c3f3066fe629275e50627026c51ac2e595cca4c230ce1ce1d" +checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" dependencies = [ - "indexmap 2.5.0", + "indexmap 2.7.0", "serde", "serde_spanned", "toml_datetime", - "winnow 0.6.18", + "winnow 0.6.20", ] [[package]] @@ -7403,6 +13842,22 @@ dependencies = [ "tracing", ] +[[package]] +name = "tower" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" +dependencies = [ + "futures-core", + "futures-util", + "pin-project-lite", + "sync_wrapper 1.0.2", + "tokio", + "tower-layer", + "tower-service", + "tracing", +] + [[package]] name = "tower-http" version = "0.4.4" @@ -7416,9 +13871,34 @@ dependencies = [ "futures-util", "http 0.2.12", "http-body 0.4.6", - "http-range-header", + "http-range-header 0.3.1", + "mime", + "pin-project-lite", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower-http" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "403fa3b783d4b626a8ad51d766ab03cb6d2dbfc46b1c5d4448395e6628dc9697" +dependencies = [ + "bitflags 2.6.0", + "bytes", + "futures-util", + "http 1.2.0", + "http-body 1.0.1", + "http-body-util", + "http-range-header 0.4.2", + "httpdate", "mime", + "mime_guess", + "percent-encoding", "pin-project-lite", + "tokio", + "tokio-util", "tower-layer", "tower-service", "tracing", @@ -7438,9 +13918,9 @@ checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" -version = "0.1.40" +version = "0.1.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" dependencies = [ "log", "pin-project-lite", @@ -7450,20 +13930,20 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.27" +version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.90", ] [[package]] name = "tracing-core" -version = "0.1.32" +version = "0.1.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" dependencies = [ "once_cell", "valuable", @@ -7480,6 +13960,17 @@ dependencies = [ "tracing-core", ] +[[package]] +name = "tracing-log" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + [[package]] name = "tracing-serde" version = "0.1.3" @@ -7499,7 +13990,7 @@ dependencies = [ "ansi_term", "chrono", "lazy_static", - "matchers", + "matchers 0.0.1", "regex", "serde", "serde_json", @@ -7508,18 +13999,49 @@ dependencies = [ "thread_local", "tracing", "tracing-core", - "tracing-log", + "tracing-log 0.1.4", "tracing-serde", ] +[[package]] +name = "tracing-subscriber" +version = "0.3.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008" +dependencies = [ + "matchers 0.1.0", + "nu-ansi-term", + "once_cell", + "regex", + "sharded-slab", + "smallvec", + "thread_local", + "time", + "tracing", + "tracing-core", + "tracing-log 0.2.0", +] + +[[package]] +name = "trie-db" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff28e0f815c2fea41ebddf148e008b077d2faddb026c9555b29696114d602642" +dependencies = [ + "hash-db", + "hashbrown 0.13.2", + "log", + "rustc-hex", + "smallvec", +] + [[package]] name = "trie-db" -version = "0.28.0" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff28e0f815c2fea41ebddf148e008b077d2faddb026c9555b29696114d602642" +checksum = "0c992b4f40c234a074d48a757efeabb1a6be88af84c0c23f7ca158950cb0ae7f" dependencies = [ "hash-db", - "hashbrown 0.13.2", "log", "rustc-hex", "smallvec", @@ -7540,6 +14062,12 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" +[[package]] +name = "tt-call" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4f195fd851901624eee5a58c4bb2b4f06399148fcd0ed336e6f1cb60a9881df" + [[package]] name = "tungstenite" version = "0.20.1" @@ -7554,11 +14082,17 @@ dependencies = [ "log", "rand", "sha1", - "thiserror", + "thiserror 1.0.69", "url", "utf-8", ] +[[package]] +name = "tuplex" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "676ac81d5454c4dcf37955d34fa8626ede3490f744b86ca14a7b90168d2a08aa" + [[package]] name = "twox-hash" version = "1.6.3" @@ -7579,9 +14113,9 @@ checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" [[package]] name = "ucd-trie" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed646292ffc8188ef8ea4d1e0e0150fb15a5c2e12ad9b8fc191ae7a8a7f3c4b9" +checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" [[package]] name = "uint" @@ -7596,25 +14130,34 @@ dependencies = [ ] [[package]] -name = "unicase" -version = "2.7.0" +name = "uint" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7d2d4dafb69621809a81864c9c1b864479e1235c0dd4e199924b9742439ed89" +checksum = "909988d098b2f738727b161a106cfc7cab00c539c2687a8836f8e565976fb53e" dependencies = [ - "version_check", + "byteorder", + "crunchy", + "hex", + "static_assertions", ] [[package]] -name = "unicode-bidi" -version = "0.3.15" +name = "unarray" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94" + +[[package]] +name = "unicase" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" +checksum = "7e51b68083f157f853b6379db119d1c1be0e6e4dec98101079dec41f6f5cf6df" [[package]] name = "unicode-ident" -version = "1.0.13" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" +checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83" [[package]] name = "unicode-linebreak" @@ -7633,15 +14176,21 @@ dependencies = [ [[package]] name = "unicode-width" -version = "0.1.13" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" + +[[package]] +name = "unicode-width" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0336d538f7abc86d282a4189614dfaa90810dfc2c6f6427eaf88e16311dd225d" +checksum = "1fc81956842c57dac11422a97c3b8195a1ff727f06e85c84ed2e8aa277c9a0fd" [[package]] name = "unicode-xid" -version = "0.2.5" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "229730647fbc343e3a80e463c1db7f78f3855d3f3739bee0dda773c9a037c90a" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" [[package]] name = "universal-hash" @@ -7665,6 +14214,12 @@ version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6889a77d49f1f013504cec6bf97a2c730394adedaeb1deb5ea08949a50541105" +[[package]] +name = "unsigned-varint" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb066959b24b5196ae73cb057f45598450d2c5f71460e98c49b738086eff9c06" + [[package]] name = "untrusted" version = "0.9.0" @@ -7673,9 +14228,9 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "url" -version = "2.5.2" +version = "2.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c" +checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" dependencies = [ "form_urlencoded", "idna", @@ -7689,6 +14244,18 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" +[[package]] +name = "utf16_iter" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + [[package]] name = "utf8parse" version = "0.2.2" @@ -7697,9 +14264,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.10.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81dfa00651efa65069b0b6b651f4aaa31ba9e3c3ce0137aaad053604ee7e0314" +checksum = "f8c5f0a0af699448548ad1a2fbf920fb4bee257eae39953ba95cb84891a0446a" dependencies = [ "getrandom", ] @@ -7740,15 +14307,15 @@ checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" [[package]] name = "w3f-bls" -version = "0.1.4" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c5da5fa2c6afa2c9158eaa7cd9aee249765eb32b5fb0c63ad8b9e79336a47ec" +checksum = "70a3028804c8bbae2a97a15b71ffc0e308c4b01a520994aafa77d56e94e19024" dependencies = [ "ark-bls12-377", "ark-bls12-381", "ark-ec", - "ark-ff", - "ark-serialize", + "ark-ff 0.4.2", + "ark-serialize 0.4.2", "ark-serialize-derive", "arrayref", "constcat", @@ -7758,7 +14325,7 @@ dependencies = [ "rand_core 0.6.4", "sha2 0.10.8", "sha3", - "thiserror", + "thiserror 1.0.69", "zeroize", ] @@ -7798,9 +14365,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.93" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a82edfc16a6c469f5f44dc7b571814045d60404b55a0ee849f9bcfa2e63dd9b5" +checksum = "a474f6281d1d70c17ae7aa6a613c87fce69a127e2624002df63dcb39d6cf6396" dependencies = [ "cfg-if", "once_cell", @@ -7809,36 +14376,36 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.93" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9de396da306523044d3302746f1208fa71d7532227f15e347e2d93e4145dd77b" +checksum = "5f89bb38646b4f81674e8f5c3fb81b562be1fd936d84320f3264486418519c79" dependencies = [ "bumpalo", "log", - "once_cell", "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.90", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.43" +version = "0.4.49" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61e9300f63a621e96ed275155c108eb6f843b6a26d053f122ab69724559dc8ed" +checksum = "38176d9b44ea84e9184eff0bc34cc167ed044f816accfe5922e54d84cf48eca2" dependencies = [ "cfg-if", "js-sys", + "once_cell", "wasm-bindgen", "web-sys", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.93" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "585c4c91a46b072c92e908d99cb1dcdf95c5218eeb6f3bf1efa991ee7a68cccf" +checksum = "2cc6181fd9a7492eef6fef1f33961e3695e4579b9872a6f7c83aee556666d4fe" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -7846,31 +14413,40 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.93" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afc340c74d9005395cf9dd098506f7f44e38f2b4a21c6aaacf9a105ea5e1e836" +checksum = "30d7a95b763d3c45903ed6c81f156801839e5ee968bb07e534c44df0fcd330c2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.90", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.93" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c62a0a307cb4a311d3a07867860911ca130c3494e8c2719593806c08bc5d0484" +checksum = "943aab3fdaaa029a6e0271b35ea10b72b943135afe9bffca82384098ad0e06a6" [[package]] name = "wasm-encoder" -version = "0.207.0" +version = "0.220.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d996306fb3aeaee0d9157adbe2f670df0236caf19f6728b221e92d0f27b3fe17" +checksum = "ebf48234b389415b226a4daef6562933d38c7b28a8b8f64c5c4130dad1561ab7" dependencies = [ "leb128", - "wasmparser 0.207.0", + "wasmparser 0.220.0", +] + +[[package]] +name = "wasm-instrument" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a47ecb37b9734d1085eaa5ae1a81e60801fd8c28d4cabdd8aedb982021918bc" +dependencies = [ + "parity-wasm", ] [[package]] @@ -7884,7 +14460,7 @@ dependencies = [ "strum 0.24.1", "strum_macros 0.24.3", "tempfile", - "thiserror", + "thiserror 1.0.69", "wasm-opt-cxx-sys", "wasm-opt-sys", ] @@ -7915,28 +14491,37 @@ dependencies = [ [[package]] name = "wasmi" -version = "0.31.2" +version = "0.32.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a8281d1d660cdf54c76a3efa9ddd0c270cada1383a995db3ccb43d166456c7" +checksum = "50386c99b9c32bd2ed71a55b6dd4040af2580530fae8bdb9a6576571a80d0cca" dependencies = [ + "arrayvec 0.7.6", + "multi-stash", + "num-derive", + "num-traits", "smallvec", "spin", - "wasmi_arena", + "wasmi_collections", "wasmi_core", "wasmparser-nostd", ] [[package]] -name = "wasmi_arena" -version = "0.4.1" +name = "wasmi_collections" +version = "0.32.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "104a7f73be44570cac297b3035d76b169d6599637631cf37a1703326a0727073" +checksum = "9c128c039340ffd50d4195c3f8ce31aac357f06804cfc494c8b9508d4b30dca4" +dependencies = [ + "ahash 0.8.11", + "hashbrown 0.14.5", + "string-interner", +] [[package]] name = "wasmi_core" -version = "0.13.0" +version = "0.32.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcf1a7db34bff95b85c261002720c00c3a6168256dcb93041d3fa2054d19856a" +checksum = "a23b3a7f6c8c3ceeec6b83531ee61f0013c56e51cbf2b14b0f213548b23a4b41" dependencies = [ "downcast-rs", "libm", @@ -7956,15 +14541,16 @@ dependencies = [ [[package]] name = "wasmparser" -version = "0.207.0" +version = "0.220.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e19bb9f8ab07616da582ef8adb24c54f1424c7ec876720b7da9db8ec0626c92c" +checksum = "e246c2772ce3ebc83f89a2d4487ac5794cad6c309b2071818a88c7db7c36d87b" dependencies = [ "ahash 0.8.11", "bitflags 2.6.0", "hashbrown 0.14.5", - "indexmap 2.5.0", - "semver", + "indexmap 2.7.0", + "semver 1.0.24", + "serde", ] [[package]] @@ -7992,9 +14578,12 @@ dependencies = [ "once_cell", "paste", "psm", + "rayon", "serde", "target-lexicon", "wasmparser 0.102.0", + "wasmtime-cache", + "wasmtime-cranelift", "wasmtime-environ", "wasmtime-jit", "wasmtime-runtime", @@ -8010,6 +14599,63 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "wasmtime-cache" +version = "8.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c86437fa68626fe896e5afc69234bb2b5894949083586535f200385adfd71213" +dependencies = [ + "anyhow", + "base64 0.21.7", + "bincode", + "directories-next", + "file-per-thread-logger", + "log", + "rustix 0.36.17", + "serde", + "sha2 0.10.8", + "toml 0.5.11", + "windows-sys 0.45.0", + "zstd 0.11.2+zstd.1.5.2", +] + +[[package]] +name = "wasmtime-cranelift" +version = "8.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1cefde0cce8cb700b1b21b6298a3837dba46521affd7b8c38a9ee2c869eee04" +dependencies = [ + "anyhow", + "cranelift-codegen", + "cranelift-entity", + "cranelift-frontend", + "cranelift-native", + "cranelift-wasm", + "gimli 0.27.3", + "log", + "object 0.30.4", + "target-lexicon", + "thiserror 1.0.69", + "wasmparser 0.102.0", + "wasmtime-cranelift-shared", + "wasmtime-environ", +] + +[[package]] +name = "wasmtime-cranelift-shared" +version = "8.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd041e382ef5aea1b9fc78442394f1a4f6d676ce457e7076ca4cb3f397882f8b" +dependencies = [ + "anyhow", + "cranelift-codegen", + "cranelift-native", + "gimli 0.27.3", + "object 0.30.4", + "target-lexicon", + "wasmtime-environ", +] + [[package]] name = "wasmtime-environ" version = "8.0.1" @@ -8024,7 +14670,7 @@ dependencies = [ "object 0.30.4", "serde", "target-lexicon", - "thiserror", + "thiserror 1.0.69", "wasmparser 0.102.0", "wasmtime-types", ] @@ -8047,6 +14693,7 @@ dependencies = [ "serde", "target-lexicon", "wasmtime-environ", + "wasmtime-jit-debug", "wasmtime-jit-icache-coherence", "wasmtime-runtime", "windows-sys 0.45.0", @@ -8058,7 +14705,9 @@ version = "8.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e0554b84c15a27d76281d06838aed94e13a77d7bf604bbbaf548aa20eb93846" dependencies = [ + "object 0.30.4", "once_cell", + "rustix 0.36.17", ] [[package]] @@ -8104,15 +14753,25 @@ checksum = "a4f6fffd2a1011887d57f07654dd112791e872e3ff4a2e626aee8059ee17f06f" dependencies = [ "cranelift-entity", "serde", - "thiserror", + "thiserror 1.0.69", "wasmparser 0.102.0", ] [[package]] name = "web-sys" -version = "0.3.70" +version = "0.3.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26fdeaafd9bd129f65e7c031593c24d62186301e0c72c8978fa1678be7d532c0" +checksum = "04dd7223427d52553d3702c004d3b2fe07c148165faa56313cb00211e31c12bc" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "web-time" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" dependencies = [ "js-sys", "wasm-bindgen", @@ -8120,25 +14779,52 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "0.26.5" +version = "0.26.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bd24728e5af82c6c4ec1b66ac4844bdf8156257fccda846ec58b42cd0cdbe6a" +checksum = "5d642ff16b7e79272ae451b7322067cdc17cadf68c23264be9d94a32319efe7e" dependencies = [ "rustls-pki-types", ] +[[package]] +name = "westend-runtime-constants" +version = "17.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06861bf945aadac59f4be23b44c85573029520ea9bd3d6c9ab21c8b306e81cdc" +dependencies = [ + "frame-support", + "polkadot-primitives 16.0.0", + "polkadot-runtime-common", + "smallvec", + "sp-core 34.0.0", + "sp-runtime 39.0.3", + "sp-weights", + "staging-xcm 14.2.0", + "staging-xcm-builder", +] + [[package]] name = "which" -version = "6.0.3" +version = "7.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4ee928febd44d98f2f459a4a79bd4d928591333a494a10a868418ac1b39cf1f" +checksum = "c9cad3279ade7346b96e38731a641d7343dd6a53d55083dd54eadfa5a1b38c6b" dependencies = [ "either", "home", - "rustix 0.38.36", + "rustix 0.38.42", "winsafe", ] +[[package]] +name = "wide" +version = "0.7.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58e6db2670d2be78525979e9a5f9c69d296fd7d670549fe9ebf70f8708cb5019" +dependencies = [ + "bytemuck", + "safe_arch", +] + [[package]] name = "winapi" version = "0.3.9" @@ -8434,9 +15120,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", ] @@ -8457,6 +15143,18 @@ version = "0.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d135d17ab770252ad95e9a872d365cf3090e3be864a34ab46f48555993efc904" +[[package]] +name = "write16" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" + +[[package]] +name = "writeable" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" + [[package]] name = "wyz" version = "0.5.1" @@ -8486,7 +15184,69 @@ checksum = "8da84f1a25939b27f6820d92aed108f83ff920fdf11a7b19366c27c4cda81d4f" dependencies = [ "libc", "linux-raw-sys 0.4.14", - "rustix 0.38.36", + "rustix 0.38.42", +] + +[[package]] +name = "xcm-procedural" +version = "8.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4717a97970a9cda70d7db53cf50d2615c2f6f6b7c857445325b4a39ea7aa2cd" +dependencies = [ + "Inflector", + "proc-macro2", + "quote", + "syn 2.0.90", +] + +[[package]] +name = "xcm-procedural" +version = "10.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87fb4f14094d65c500a59bcf540cf42b99ee82c706edd6226a92e769ad60563e" +dependencies = [ + "Inflector", + "proc-macro2", + "quote", + "syn 2.0.90", +] + +[[package]] +name = "xcm-runtime-apis" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69d4473a5d157e4d437d9ebcb1b99f9693a64983877ee57d97005f0167869935" +dependencies = [ + "frame-support", + "parity-scale-codec", + "scale-info", + "sp-api", + "sp-weights", + "staging-xcm 14.2.0", + "staging-xcm-executor", +] + +[[package]] +name = "xcm-simulator" +version = "17.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "058e21bfc3e1180bbd83cad3690d0e63f34f43ab309e338afe988160aa776fcf" +dependencies = [ + "frame-support", + "frame-system", + "parity-scale-codec", + "paste", + "polkadot-core-primitives", + "polkadot-parachain-primitives", + "polkadot-primitives 16.0.0", + "polkadot-runtime-parachains", + "scale-info", + "sp-io 38.0.0", + "sp-runtime 39.0.3", + "sp-std", + "staging-xcm 14.2.0", + "staging-xcm-builder", + "staging-xcm-executor", ] [[package]] @@ -8501,6 +15261,30 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ff4524214bc4629eba08d78ceb1d6507070cc0bcbbed23af74e19e6e924a24cf" +[[package]] +name = "yoke" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" +dependencies = [ + "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.90", + "synstructure 0.13.1", +] + [[package]] name = "zerocopy" version = "0.7.35" @@ -8519,7 +15303,28 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.90", +] + +[[package]] +name = "zerofrom" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cff3ee08c995dee1859d998dea82f7374f2826091dd9cd47def953cae446cd2e" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.90", + "synstructure 0.13.1", ] [[package]] @@ -8539,29 +15344,51 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.90", +] + +[[package]] +name = "zerovec" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.90", ] [[package]] name = "zip" -version = "2.2.0" +version = "2.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc5e4288ea4057ae23afc69a4472434a87a2495cafce6632fd1c4ec9f5cf3494" +checksum = "ae9c1ea7b3a5e1f4b922ff856a129881167511563dc219869afe3787fc0c1a45" dependencies = [ "arbitrary", "crc32fast", "crossbeam-utils", "displaydoc", - "indexmap 2.5.0", + "indexmap 2.7.0", "memchr", - "thiserror", + "thiserror 2.0.8", ] [[package]] name = "zombienet-configuration" -version = "0.2.14" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8ab4af5d47f03cb8ae0fa96ffbf3881ca050c51e62367685ebdd3e8ae52b220" +checksum = "d716b3ff8112d98ced15f53b0c72454f8cde533fe2b68bb04379228961efbd80" dependencies = [ "anyhow", "lazy_static", @@ -8570,7 +15397,7 @@ dependencies = [ "reqwest 0.11.27", "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", "tokio", "toml 0.7.8", "url", @@ -8579,9 +15406,9 @@ dependencies = [ [[package]] name = "zombienet-orchestrator" -version = "0.2.14" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "580e01019655a2bd296e42f48876c2e78c94a989147376e025c0e64daf717cf7" +checksum = "4098a7d33b729b59e32c41a87aa4d484bd1b8771a059bbd4edfb4d430b3b2d74" dependencies = [ "anyhow", "async-trait", @@ -8597,10 +15424,10 @@ dependencies = [ "serde", "serde_json", "sha2 0.10.8", - "sp-core", + "sp-core 31.0.0", "subxt", "subxt-signer", - "thiserror", + "thiserror 1.0.69", "tokio", "tracing", "uuid", @@ -8612,20 +15439,20 @@ dependencies = [ [[package]] name = "zombienet-prom-metrics-parser" -version = "0.2.14" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d026607c1a6e198b653c5979fb07078740861978ddecfd5460f2c32cdc182b1" +checksum = "961e30be45b34f6ebeabf29ee2f47b0cd191ea62e40c064752572207509a6f5c" dependencies = [ "pest", "pest_derive", - "thiserror", + "thiserror 1.0.69", ] [[package]] name = "zombienet-provider" -version = "0.2.14" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55583d8be6b2ca2e679d85ee2e17eb0802fbf8d2ee05c1b326fff81fd6b3b5c3" +checksum = "ab0f7f01780b7c99a6c40539d195d979f234305f32808d547438b50829d44262" dependencies = [ "anyhow", "async-trait", @@ -8642,7 +15469,7 @@ dependencies = [ "serde_yaml", "sha2 0.10.8", "tar", - "thiserror", + "thiserror 1.0.69", "tokio", "tokio-util", "tracing", @@ -8654,14 +15481,15 @@ dependencies = [ [[package]] name = "zombienet-sdk" -version = "0.2.14" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "300f3f07aa72df21a52611a0df1033325a454252e36d964c4308b0a8b7356f77" +checksum = "99a3c5f2d657235b3ab7dc384677e63cde21983029e99106766ecd49e9f8d7f3" dependencies = [ "async-trait", "futures", "lazy_static", "subxt", + "subxt-signer", "tokio", "zombienet-configuration", "zombienet-orchestrator", @@ -8671,9 +15499,9 @@ dependencies = [ [[package]] name = "zombienet-support" -version = "0.2.14" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e566ea145dab27c6fbb24b13d4c789efa7e675e1fdaf6d007dfe1154d59317c6" +checksum = "296f887ea88e07edd771f8e1d0dec5297a58b422f4b884a6292a21ebe03277cb" dependencies = [ "anyhow", "async-trait", @@ -8682,8 +15510,56 @@ dependencies = [ "rand", "regex", "reqwest 0.11.27", - "thiserror", + "thiserror 1.0.69", "tokio", "tracing", "uuid", ] + +[[package]] +name = "zstd" +version = "0.11.2+zstd.1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20cc960326ece64f010d2d2107537f26dc589a6573a316bd5b1dba685fa5fde4" +dependencies = [ + "zstd-safe 5.0.2+zstd.1.5.2", +] + +[[package]] +name = "zstd" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a27595e173641171fc74a1232b7b1c7a7cb6e18222c11e9dfb9888fa424c53c" +dependencies = [ + "zstd-safe 6.0.6", +] + +[[package]] +name = "zstd-safe" +version = "5.0.2+zstd.1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d2a5585e04f9eea4b2a3d1eca508c4dee9592a89ef6f450c11719da0726f4db" +dependencies = [ + "libc", + "zstd-sys", +] + +[[package]] +name = "zstd-safe" +version = "6.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee98ffd0b48ee95e6c5168188e44a54550b1564d9d530ee21d5f0eaed1069581" +dependencies = [ + "libc", + "zstd-sys", +] + +[[package]] +name = "zstd-sys" +version = "2.0.13+zstd.1.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38ff0f21cfee8f97d94cef41359e0c89aa6113028ab0291aa8ca0038995a95aa" +dependencies = [ + "cc", + "pkg-config", +] diff --git a/Cargo.toml b/Cargo.toml index a5a8c7c1e..07be639c7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -17,7 +17,8 @@ edition = "2021" documentation = "https://learn.onpop.io/" license = "GPL-3.0" repository = "https://github.com/r0gue-io/pop-cli" -version = "0.5.0" +rust-version = "1.81.0" +version = "0.6.0" [workspace.dependencies] anyhow = "1.0" @@ -31,7 +32,6 @@ git2 = { version = "0.18", features = ["vendored-openssl"] } glob = "0.3.1" log = "0.4.20" mockito = "1.4.0" -predicates = "3.1.0" tar = "0.4.40" tempfile = "3.10" thiserror = "1.0.58" @@ -41,18 +41,19 @@ toml = "0.5.0" # networking reqwest = { version = "0.12", features = ["json"] } tokio = { version = "1.0", features = ["macros", "rt-multi-thread"] } -url = "2.5" +url = "2.5.4" # contracts -subxt-signer = { version = "0.37.0", features = ["subxt", "sr25519"] } -subxt = "0.37.0" +subxt-signer = { version = "0.38.0", features = ["subxt", "sr25519"] } +subxt = "0.38.0" ink_env = "5.0.0" -sp-core = "31" -sp-weights = "30" -contract-build = "5.0.0-alpha" -contract-extrinsics = "5.0.0-alpha" -contract-transcode = "5.0.0-alpha" -scale-info = { version = "2.11.3", default-features = false, features = ["derive"] } +sp-core = "32.0.0" +sp-weights = "31.0.0" +scale-info = { version = "2.11.4", default-features = false, features = ["derive"] } +scale-value = { version = "0.17.0", default-features = false, features = ["from-string", "parser-ss58"] } +contract-build = "5.0.2" +contract-extrinsics = "5.0.2" +contract-transcode = "5.0.2" heck = "0.5.0" # parachains @@ -64,7 +65,7 @@ toml_edit = { version = "0.22", features = ["serde"] } symlink = "0.1" serde_json = { version = "1.0", features = ["preserve_order"] } serde = { version = "1.0", features = ["derive"] } -zombienet-sdk = "0.2.14" +zombienet-sdk = "0.2.18" git2_credentials = "0.13.0" # pop-cli @@ -74,3 +75,8 @@ console = "0.15" os_info = { version = "3", default-features = false } strum = "0.26" strum_macros = "0.26" + +# wallet-integration +axum = "0.7.9" +open = "5.3.1" +tower-http = "0.6.2" diff --git a/README.md b/README.md index 7657482d2..bdd46d216 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@
- + [![Twitter URL](https://img.shields.io/twitter/follow/Pop?style=social)](https://x.com/onpopio/) [![Twitter URL](https://img.shields.io/twitter/follow/R0GUE?style=social)](https://twitter.com/gor0gue) [![Telegram](https://img.shields.io/badge/Telegram-gray?logo=telegram)](https://t.me/onpopio) @@ -14,9 +14,6 @@
- - - ## Installation You can install Pop CLI from [crates.io](https://crates.io/crates/pop-cli): @@ -25,6 +22,8 @@ You can install Pop CLI from [crates.io](https://crates.io/crates/pop-cli): cargo install --force --locked pop-cli ``` +> :information_source: Pop CLI requires Rust 1.81 or later. + You can also install Pop CLI using the [Pop CLI GitHub repo](https://github.com/r0gue-io/pop-cli): ```shell @@ -44,6 +43,7 @@ our [telemetry](crates/pop-telemetry/README.md) documentation. ## Documentation On the [Pop Docs website](https://learn.onpop.io) you will find: + * 👉 [Get Started with Pop CLI](https://learn.onpop.io/v/cli) ## Building Pop CLI locally diff --git a/crates/pop-cli/Cargo.toml b/crates/pop-cli/Cargo.toml index c9761b642..538ef0d51 100644 --- a/crates/pop-cli/Cargo.toml +++ b/crates/pop-cli/Cargo.toml @@ -18,6 +18,7 @@ duct.workspace = true env_logger.workspace = true os_info.workspace = true reqwest.workspace = true +serde = { workspace = true, features = ["derive"] } serde_json.workspace = true tempfile.workspace = true tokio.workspace = true @@ -27,31 +28,39 @@ url.workspace = true clap.workspace = true cliclack.workspace = true console.workspace = true +sp-core.workspace = true strum.workspace = true strum_macros.workspace = true # contracts -pop-contracts = { path = "../pop-contracts", version = "0.5.0", optional = true } -sp-core = { workspace = true, optional = true } +pop-contracts = { path = "../pop-contracts", version = "0.6.0", optional = true } sp-weights = { workspace = true, optional = true } # parachains -pop-parachains = { path = "../pop-parachains", version = "0.5.0", optional = true } +pop-parachains = { path = "../pop-parachains", version = "0.6.0", optional = true } dirs = { workspace = true, optional = true } git2.workspace = true # telemetry -pop-telemetry = { path = "../pop-telemetry", version = "0.5.0", optional = true } +pop-telemetry = { path = "../pop-telemetry", version = "0.6.0", optional = true } # common -pop-common = { path = "../pop-common", version = "0.5.0" } +pop-common = { path = "../pop-common", version = "0.6.0" } + +# wallet-integration +axum.workspace = true +open.workspace = true +tower-http = { workspace = true, features = ["fs", "cors"] } [dev-dependencies] assert_cmd.workspace = true -predicates.workspace = true +contract-extrinsics.workspace = true +subxt.workspace = true +subxt-signer.workspace = true +sp-weights.workspace = true [features] default = ["contract", "parachain", "telemetry"] -contract = ["dep:pop-contracts", "dep:sp-core", "dep:sp-weights", "dep:dirs"] +contract = ["dep:pop-contracts", "dep:sp-weights", "dep:dirs"] parachain = ["dep:pop-parachains", "dep:dirs"] telemetry = ["dep:pop-telemetry"] diff --git a/crates/pop-cli/src/assets/index.html b/crates/pop-cli/src/assets/index.html new file mode 100644 index 000000000..2b4430f8b --- /dev/null +++ b/crates/pop-cli/src/assets/index.html @@ -0,0 +1,1024 @@ + + + + + + + + Pop CLI Signing Portal + + + + + +
+ + + diff --git a/crates/pop-cli/src/cli.rs b/crates/pop-cli/src/cli.rs index 6c6bb3bce..9d2b86ec7 100644 --- a/crates/pop-cli/src/cli.rs +++ b/crates/pop-cli/src/cli.rs @@ -150,7 +150,6 @@ impl traits::Confirm for Confirm { /// A input prompt using cliclack. struct Input(cliclack::Input); - impl traits::Input for Input { /// Sets the default value for the input. fn default_input(mut self, value: &str) -> Self { @@ -305,6 +304,7 @@ pub(crate) mod tests { self } + #[allow(dead_code)] pub(crate) fn expect_success(mut self, message: impl Display) -> Self { self.success_expectations.push(message.to_string()); self diff --git a/crates/pop-cli/src/commands/build/contract.rs b/crates/pop-cli/src/commands/build/contract.rs index ca0cdd739..d8687aa0a 100644 --- a/crates/pop-cli/src/commands/build/contract.rs +++ b/crates/pop-cli/src/commands/build/contract.rs @@ -1,27 +1,18 @@ // SPDX-License-Identifier: GPL-3.0 use crate::cli; -use clap::Args; use pop_contracts::{build_smart_contract, Verbosity}; use std::path::PathBuf; -#[cfg(not(test))] -use std::{thread::sleep, time::Duration}; -#[derive(Args)] -pub struct BuildContractCommand { - /// Path for the contract project [default: current directory] - #[arg(long)] +/// Configuration for building a smart contract. +pub struct BuildContract { + /// Path of the contract project. pub(crate) path: Option, - /// The default compilation includes debug functionality, increasing contract size and gas - /// usage. For production, always build in release mode to exclude debug features. - #[clap(short, long)] + /// Build profile: `true` for release mode, `false` for debug mode. pub(crate) release: bool, - // Deprecation flag, used to specify whether the deprecation warning is shown. - #[clap(skip)] - pub(crate) valid: bool, } -impl BuildContractCommand { +impl BuildContract { /// Executes the command. pub(crate) fn execute(self) -> anyhow::Result<&'static str> { self.build(&mut cli::Cli) @@ -33,14 +24,6 @@ impl BuildContractCommand { /// * `cli` - The CLI implementation to be used. fn build(self, cli: &mut impl cli::traits::Cli) -> anyhow::Result<&'static str> { cli.intro("Building your contract")?; - - // Show warning if specified as deprecated. - if !self.valid { - cli.warning("NOTE: this command is deprecated. Please use `pop build` (or simply `pop b`) in future...")?; - #[cfg(not(test))] - sleep(Duration::from_secs(3)); - } - // Build contract. let build_result = build_smart_contract(self.path.as_deref(), self.release, Verbosity::Default)?; @@ -66,23 +49,16 @@ mod tests { create_smart_contract(name, &path.join(name), &Standard)?; for release in [false, true] { - for valid in [false, true] { - let mut cli = MockCli::new() - .expect_intro("Building your contract") - .expect_outro("Build completed successfully!"); - - if !valid { - cli = cli.expect_warning("NOTE: this command is deprecated. Please use `pop build` (or simply `pop b`) in future..."); - } + let mut cli = MockCli::new() + .expect_intro("Building your contract") + .expect_outro("Build completed successfully!"); - assert_eq!( - BuildContractCommand { path: Some(path.join(name)), release, valid } - .build(&mut cli)?, - "contract" - ); + assert_eq!( + BuildContract { path: Some(path.join(name)), release }.build(&mut cli)?, + "contract" + ); - cli.verify()?; - } + cli.verify()?; } Ok(()) diff --git a/crates/pop-cli/src/commands/build/mod.rs b/crates/pop-cli/src/commands/build/mod.rs index db8fd1115..c17e53542 100644 --- a/crates/pop-cli/src/commands/build/mod.rs +++ b/crates/pop-cli/src/commands/build/mod.rs @@ -4,12 +4,12 @@ use crate::cli::{self, Cli}; use anyhow::ensure; use clap::{Args, Parser, Subcommand}; #[cfg(feature = "contract")] -use contract::BuildContractCommand; +use contract::BuildContract; use duct::cmd; use pop_common::Profile; use std::path::PathBuf; #[cfg(feature = "parachain")] -use {parachain::BuildParachainCommand, spec::BuildSpecCommand}; +use {parachain::BuildParachain, spec::BuildSpecCommand}; #[cfg(feature = "contract")] pub(crate) mod contract; @@ -39,24 +39,11 @@ pub(crate) struct BuildArgs { /// Build profile [default: debug]. #[clap(long, value_enum)] pub(crate) profile: Option, - /// Parachain ID to be used when generating the chain spec files. - #[arg(short = 'i', long = "id")] - #[cfg(feature = "parachain")] - pub(crate) id: Option, } -/// Build a parachain, smart contract or Rust package. +/// Subcommand for building chain artifacts. #[derive(Subcommand)] pub(crate) enum Command { - /// [DEPRECATED] Build a parachain - #[cfg(feature = "parachain")] - #[clap(alias = "p")] - Parachain(BuildParachainCommand), - /// [DEPRECATED] Build a contract, generate metadata, bundle together in a `.contract` - /// file - #[cfg(feature = "contract")] - #[clap(alias = "c")] - Contract(BuildContractCommand), /// Build a chain specification and its genesis artifacts. #[cfg(feature = "parachain")] #[clap(alias = "s")] @@ -95,13 +82,10 @@ impl Command { Some(profile) => profile, None => args.release.into(), }; - // All commands originating from root command are valid - BuildParachainCommand { - path: project_path, + BuildParachain { + path: project_path.unwrap_or_else(|| PathBuf::from("./")), package: args.package, - profile: Some(profile), - id: args.id, - valid: true, + profile, } .execute()?; return Ok("parachain"); @@ -175,7 +159,6 @@ mod tests { package: package.clone(), release, profile: Some(profile.clone()), - id: None, }, &mut cli, )?, diff --git a/crates/pop-cli/src/commands/build/parachain.rs b/crates/pop-cli/src/commands/build/parachain.rs index 67000e62f..7091d426b 100644 --- a/crates/pop-cli/src/commands/build/parachain.rs +++ b/crates/pop-cli/src/commands/build/parachain.rs @@ -1,34 +1,24 @@ // SPDX-License-Identifier: GPL-3.0 use crate::{cli, style::style}; -use clap::Args; use pop_common::Profile; use pop_parachains::build_parachain; use std::path::PathBuf; #[cfg(not(test))] use std::{thread::sleep, time::Duration}; -#[derive(Args)] -pub struct BuildParachainCommand { - /// Directory path for your project [default: current directory]. - #[arg(long)] - pub(crate) path: Option, +// Configuration for building a parachain. +pub struct BuildParachain { + /// Directory path for your project. + pub(crate) path: PathBuf, /// The package to be built. - #[arg(short = 'p', long)] pub(crate) package: Option, - /// Build profile [default: debug]. - #[clap(long, value_enum)] - pub(crate) profile: Option, - /// Parachain ID to be used when generating the chain spec files. - #[arg(short = 'i', long = "id")] - pub(crate) id: Option, - // Deprecation flag, used to specify whether the deprecation warning is shown. - #[clap(skip)] - pub(crate) valid: bool, + /// Build profile. + pub(crate) profile: Profile, } -impl BuildParachainCommand { - /// Executes the command. +impl BuildParachain { + /// Executes the build process. pub(crate) fn execute(self) -> anyhow::Result<&'static str> { self.build(&mut cli::Cli) } @@ -41,13 +31,7 @@ impl BuildParachainCommand { let project = if self.package.is_some() { "package" } else { "parachain" }; cli.intro(format!("Building your {project}"))?; - let profile = self.profile.unwrap_or(Profile::Debug); - // Show warning if specified as deprecated. - if !self.valid { - cli.warning("NOTE: this command is deprecated. Please use `pop build` (or simply `pop b`) in future...")?; - #[cfg(not(test))] - sleep(Duration::from_secs(3)) - } else if profile == Profile::Debug { + if self.profile == Profile::Debug { cli.warning("NOTE: this command now defaults to DEBUG builds. Please use `--release` (or simply `-r`) for a release build...")?; #[cfg(not(test))] sleep(Duration::from_secs(3)) @@ -55,9 +39,8 @@ impl BuildParachainCommand { // Build parachain. cli.warning("NOTE: this may take some time...")?; - let project_path = self.path.unwrap_or_else(|| PathBuf::from("./")); - let binary = build_parachain(&project_path, self.package, &profile, None)?; - cli.info(format!("The {project} was built in {} mode.", profile))?; + let binary = build_parachain(&self.path, self.package, &self.profile, None)?; + cli.info(format!("The {project} was built in {} mode.", self.profile))?; cli.outro("Build completed successfully!")?; let generated_files = [format!("Binary generated at: {}", binary.display())]; let generated_files: Vec<_> = generated_files @@ -115,36 +98,28 @@ mod tests { for package in [None, Some(name.to_string())] { for profile in Profile::VARIANTS { - for valid in [false, true] { - let project = if package.is_some() { "package" } else { "parachain" }; - let mut cli = MockCli::new() - .expect_intro(format!("Building your {project}")) - .expect_warning("NOTE: this may take some time...") - .expect_info(format!("The {project} was built in {profile} mode.")) - .expect_outro("Build completed successfully!"); - - if !valid { - cli = cli.expect_warning("NOTE: this command is deprecated. Please use `pop build` (or simply `pop b`) in future..."); - } else { - if profile == &Profile::Debug { - cli = cli.expect_warning("NOTE: this command now defaults to DEBUG builds. Please use `--release` (or simply `-r`) for a release build..."); - } + let project = if package.is_some() { "package" } else { "parachain" }; + let mut cli = MockCli::new() + .expect_intro(format!("Building your {project}")) + .expect_warning("NOTE: this may take some time...") + .expect_info(format!("The {project} was built in {profile} mode.")) + .expect_outro("Build completed successfully!"); + + if profile == &Profile::Debug { + cli = cli.expect_warning("NOTE: this command now defaults to DEBUG builds. Please use `--release` (or simply `-r`) for a release build..."); + } + + assert_eq!( + BuildParachain { + path: project_path.clone(), + package: package.clone(), + profile: profile.clone(), } + .build(&mut cli)?, + project + ); - assert_eq!( - BuildParachainCommand { - path: Some(project_path.clone()), - package: package.clone(), - profile: Some(profile.clone()), - id: None, - valid, - } - .build(&mut cli)?, - project - ); - - cli.verify()?; - } + cli.verify()?; } } diff --git a/crates/pop-cli/src/commands/build/spec.rs b/crates/pop-cli/src/commands/build/spec.rs index 3cde4c61e..7e9ba052b 100644 --- a/crates/pop-cli/src/commands/build/spec.rs +++ b/crates/pop-cli/src/commands/build/spec.rs @@ -136,38 +136,38 @@ pub(crate) enum RelayChain { pub struct BuildSpecCommand { /// File name for the resulting spec. If a path is given, /// the necessary directories will be created - #[arg(short = 'o', long = "output")] + #[arg(short, long = "output")] pub(crate) output_file: Option, /// [DEPRECATED] and will be removed in v0.7.0, use `profile`. - #[arg(short = 'r', long, conflicts_with = "profile")] + #[arg(short = 'R', long, conflicts_with = "profile")] pub(crate) release: bool, /// Build profile for the binary to generate the chain specification. #[arg(long, value_enum)] pub(crate) profile: Option, /// Parachain ID to be used when generating the chain spec files. - #[arg(short = 'i', long)] + #[arg(short, long)] pub(crate) id: Option, /// Whether to keep localhost as a bootnode. - #[arg(long)] + #[arg(short = 'b', long)] pub(crate) default_bootnode: bool, /// Type of the chain. #[arg(short = 't', long = "type", value_enum)] pub(crate) chain_type: Option, /// Provide the chain specification to use (e.g. dev, local, custom or a path to an existing /// file). - #[arg(short = 'c', long = "chain")] + #[arg(short, long)] pub(crate) chain: Option, /// Relay chain this parachain will connect to. - #[arg(long, value_enum)] + #[arg(short = 'r', long, value_enum)] pub(crate) relay: Option, /// Protocol-id to use in the specification. - #[arg(long = "protocol-id")] + #[arg(short = 'P', long = "protocol-id")] pub(crate) protocol_id: Option, /// Whether the genesis state file should be generated. - #[arg(long = "genesis-state")] + #[arg(short = 'S', long = "genesis-state")] pub(crate) genesis_state: bool, /// Whether the genesis code file should be generated. - #[arg(long = "genesis-code")] + #[arg(short = 'C', long = "genesis-code")] pub(crate) genesis_code: bool, } diff --git a/crates/pop-cli/src/commands/call/chain.rs b/crates/pop-cli/src/commands/call/chain.rs new file mode 100644 index 000000000..18f61fe77 --- /dev/null +++ b/crates/pop-cli/src/commands/call/chain.rs @@ -0,0 +1,1153 @@ +// SPDX-License-Identifier: GPL-3.0 + +use std::path::Path; + +use crate::{ + cli::{self, traits::*}, + common::wallet::{prompt_to_use_wallet, request_signature}, +}; +use anyhow::{anyhow, Result}; +use clap::Args; +use pop_parachains::{ + construct_extrinsic, construct_sudo_extrinsic, decode_call_data, encode_call_data, + find_dispatchable_by_name, find_pallet_by_name, parse_chain_metadata, set_up_client, + sign_and_submit_extrinsic, submit_signed_extrinsic, supported_actions, Action, CallData, + DynamicPayload, Function, OnlineClient, Pallet, Param, Payload, SubstrateConfig, +}; +use url::Url; + +const DEFAULT_URL: &str = "ws://localhost:9944/"; +const DEFAULT_URI: &str = "//Alice"; +const ENCODED_CALL_DATA_MAX_LEN: usize = 500; // Maximum length of encoded call data to display. + +/// Command to construct and execute extrinsics with configurable pallets, functions, arguments, and +/// signing options. +#[derive(Args, Clone, Default)] +pub struct CallChainCommand { + /// The pallet containing the dispatchable function to execute. + #[arg(short, long, value_parser = parse_pallet_name)] + pallet: Option, + /// The dispatchable function to execute within the specified pallet. + #[arg(short, long, value_parser = parse_function_name)] + function: Option, + /// The dispatchable function arguments, encoded as strings. + #[arg(short, long, num_args = 0..,)] + args: Vec, + /// Websocket endpoint of a node. + #[arg(short, long, value_parser)] + url: Option, + /// Secret key URI for the account signing the extrinsic. + /// + /// e.g. + /// - for a dev account "//Alice" + /// - with a password "//Alice///SECRET_PASSWORD" + #[arg(short, long)] + suri: Option, + /// Use a browser extension wallet to sign the extrinsic. + #[arg( + name = "use-wallet", + short = 'w', + long, + default_value = "false", + conflicts_with = "suri" + )] + use_wallet: bool, + /// SCALE encoded bytes representing the call data of the extrinsic. + #[arg(name = "call", short, long, conflicts_with_all = ["pallet", "function", "args"])] + call_data: Option, + /// Authenticates the sudo key and dispatches a function call with `Root` origin. + #[arg(short = 'S', long)] + sudo: bool, + /// Automatically signs and submits the extrinsic without prompting for confirmation. + #[arg(short = 'y', long)] + skip_confirm: bool, +} + +impl CallChainCommand { + /// Executes the command. + pub(crate) async fn execute(mut self) -> Result<()> { + let mut cli = cli::Cli; + // Check if all fields are specified via the command line. + let prompt_to_repeat_call = self.requires_user_input(); + // Configure the chain. + let chain = self.configure_chain(&mut cli).await?; + // Execute the call if call_data is provided. + if let Some(call_data) = self.call_data.as_ref() { + if let Err(e) = self + .submit_extrinsic_from_call_data( + &chain.client, + &chain.url, + call_data, + &mut cli::Cli, + ) + .await + { + display_message(&e.to_string(), false, &mut cli::Cli)?; + } + return Ok(()); + } + loop { + // Configure the call based on command line arguments/call UI. + let mut call = match self.configure_call(&chain, &mut cli) { + Ok(call) => call, + Err(e) => { + display_message(&e.to_string(), false, &mut cli)?; + break; + }, + }; + // Display the configured call. + cli.info(call.display(&chain))?; + // Prepare the extrinsic. + let xt = match call.prepare_extrinsic(&chain.client, &mut cli) { + Ok(payload) => payload, + Err(e) => { + display_message(&e.to_string(), false, &mut cli)?; + break; + }, + }; + + // Sign and submit the extrinsic. + let result = if self.use_wallet { + let call_data = xt.encode_call_data(&chain.client.metadata())?; + submit_extrinsic_with_wallet(&chain.client, &chain.url, call_data, &mut cli).await + } else { + call.submit_extrinsic(&chain.client, &chain.url, xt, &mut cli).await + }; + + if let Err(e) = result { + display_message(&e.to_string(), false, &mut cli)?; + break; + } + + if !prompt_to_repeat_call || + !cli.confirm("Do you want to perform another call?") + .initial_value(false) + .interact()? + { + display_message("Call complete.", true, &mut cli)?; + break; + } + self.reset_for_new_call(); + } + Ok(()) + } + + // Configures the chain by resolving the URL and fetching its metadata. + async fn configure_chain(&self, cli: &mut impl Cli) -> Result { + cli.intro("Call a chain")?; + // Resolve url. + let url = match &self.url { + Some(url) => url.clone(), + None => { + // Prompt for url. + let url: String = cli + .input("Which chain would you like to interact with?") + .default_input(DEFAULT_URL) + .interact()?; + Url::parse(&url)? + }, + }; + + // Parse metadata from chain url. + let client = set_up_client(url.as_str()).await?; + let mut pallets = parse_chain_metadata(&client).map_err(|e| { + anyhow!(format!("Unable to fetch the chain metadata: {}", e.to_string())) + })?; + // Sort by name for display. + pallets.sort_by(|a, b| a.name.cmp(&b.name)); + pallets.iter_mut().for_each(|p| p.functions.sort_by(|a, b| a.name.cmp(&b.name))); + Ok(Chain { url, client, pallets }) + } + + // Configure the call based on command line arguments/call UI. + fn configure_call(&mut self, chain: &Chain, cli: &mut impl Cli) -> Result { + loop { + // Resolve pallet. + let pallet = match self.pallet { + Some(ref pallet_name) => find_pallet_by_name(&chain.pallets, pallet_name)?, + None => { + // Specific predefined actions first. + if let Some(action) = prompt_predefined_actions(&chain.pallets, cli)? { + self.function = Some(action.function_name().to_string()); + find_pallet_by_name(&chain.pallets, action.pallet_name())? + } else { + let mut prompt = cli.select("Select the pallet to call:"); + for pallet_item in &chain.pallets { + prompt = prompt.item(pallet_item, &pallet_item.name, &pallet_item.docs); + } + prompt.interact()? + } + }, + }; + + // Resolve dispatchable function. + let function = match self.function { + Some(ref name) => find_dispatchable_by_name(&chain.pallets, &pallet.name, name)?, + None => { + let mut prompt = cli.select("Select the function to call:"); + for function in &pallet.functions { + prompt = prompt.item(function, &function.name, &function.docs); + } + prompt.interact()? + }, + }; + // Certain dispatchable functions are not supported yet due to complexity. + if !function.is_supported { + cli.outro_cancel( + "The selected function is not supported yet. Please choose another one.", + )?; + self.reset_for_new_call(); + continue; + } + + // Resolve dispatchable function arguments. + let args = if self.args.is_empty() { + let mut args = Vec::new(); + for param in &function.params { + let input = prompt_for_param(cli, param)?; + args.push(input); + } + args + } else { + self.expand_file_arguments()? + }; + + // If chain has sudo prompt the user to confirm if they want to execute the call via + // sudo. + self.configure_sudo(chain, cli)?; + + let (use_wallet, suri) = self.determine_signing_method(cli)?; + self.use_wallet = use_wallet; + + return Ok(Call { + function: function.clone(), + args, + suri, + skip_confirm: self.skip_confirm, + sudo: self.sudo, + use_wallet: self.use_wallet, + }); + } + } + + // Submits an extrinsic to the chain using the provided encoded call data. + async fn submit_extrinsic_from_call_data( + &self, + client: &OnlineClient, + url: &Url, + call_data: &str, + cli: &mut impl Cli, + ) -> Result<()> { + let (use_wallet, suri) = self.determine_signing_method(cli)?; + + // Perform signing steps with wallet integration and return early. + if use_wallet { + let call_data_bytes = + decode_call_data(call_data).map_err(|err| anyhow!("{}", format!("{err:?}")))?; + submit_extrinsic_with_wallet(client, url, call_data_bytes, cli) + .await + .map_err(|err| anyhow!("{}", format!("{err:?}")))?; + display_message("Call complete.", true, cli)?; + return Ok(()); + } + cli.info(format!("Encoded call data: {}", call_data))?; + if !self.skip_confirm && + !cli.confirm("Do you want to submit the extrinsic?") + .initial_value(true) + .interact()? + { + display_message( + &format!("Extrinsic with call data {call_data} was not submitted."), + false, + cli, + )?; + return Ok(()); + } + let spinner = cliclack::spinner(); + spinner.start("Signing and submitting the extrinsic and then waiting for finalization, please be patient..."); + let call_data_bytes = + decode_call_data(call_data).map_err(|err| anyhow!("{}", format!("{err:?}")))?; + let result = sign_and_submit_extrinsic(client, url, CallData::new(call_data_bytes), &suri) + .await + .map_err(|err| anyhow!("{}", format!("{err:?}")))?; + + spinner.stop(result); + display_message("Call complete.", true, cli)?; + Ok(()) + } + + // Resolve who is signing the extrinsic. If a `suri` was provided via the command line, + // skip the prompt. + fn determine_signing_method(&self, cli: &mut impl Cli) -> Result<(bool, String)> { + let mut use_wallet = self.use_wallet; + let suri = match self.suri.as_ref() { + Some(suri) => suri.clone(), + None => + if !self.use_wallet { + if prompt_to_use_wallet(cli)? { + use_wallet = true; + DEFAULT_URI.to_string() + } else { + cli.input("Signer of the extrinsic:") + .default_input(DEFAULT_URI) + .interact()? + } + } else { + DEFAULT_URI.to_string() + }, + }; + Ok((use_wallet, suri)) + } + + // Checks if the chain has the Sudo pallet and prompts the user to confirm if they want to + // execute the call via `sudo`. + fn configure_sudo(&mut self, chain: &Chain, cli: &mut impl Cli) -> Result<()> { + match find_dispatchable_by_name(&chain.pallets, "Sudo", "sudo") { + Ok(_) => + if !self.sudo { + self.sudo = cli + .confirm( + "Would you like to dispatch this function call with `Root` origin?", + ) + .initial_value(false) + .interact()?; + }, + Err(_) => + if self.sudo { + cli.warning( + "NOTE: sudo is not supported by the chain. Ignoring `--sudo` flag.", + )?; + self.sudo = false; + }, + } + Ok(()) + } + + // Resets specific fields to default values for a new call. + fn reset_for_new_call(&mut self) { + self.pallet = None; + self.function = None; + self.args.clear(); + self.sudo = false; + self.use_wallet = false; + } + + // Function to check if all required fields are specified. + fn requires_user_input(&self) -> bool { + self.pallet.is_none() || + self.function.is_none() || + self.args.is_empty() || + self.url.is_none() || + self.suri.is_none() + } + + /// Replaces file arguments with their contents, leaving other arguments unchanged. + fn expand_file_arguments(&self) -> Result> { + self.args + .iter() + .map(|arg| { + if std::fs::metadata(arg).map(|m| m.is_file()).unwrap_or(false) { + std::fs::read_to_string(arg) + .map_err(|err| anyhow!("Failed to read file {}", err.to_string())) + } else { + Ok(arg.clone()) + } + }) + .collect() + } +} + +// Represents a chain, including its URL, client connection, and available pallets. +struct Chain { + // Websocket endpoint of the node. + url: Url, + // The client used to interact with the chain. + client: OnlineClient, + // A list of pallets available on the chain. + pallets: Vec, +} + +/// Represents a configured dispatchable function call, including the pallet, function, arguments, +/// and signing options. +#[derive(Clone)] +struct Call { + /// The dispatchable function to execute. + function: Function, + /// The dispatchable function arguments, encoded as strings. + args: Vec, + /// Secret key URI for the account signing the extrinsic. + /// + /// e.g. + /// - for a dev account "//Alice" + /// - with a password "//Alice///SECRET_PASSWORD" + suri: String, + /// Whether to use your browser wallet to sign the extrinsic. + use_wallet: bool, + /// Whether to automatically sign and submit the extrinsic without prompting for confirmation. + skip_confirm: bool, + /// Whether to dispatch the function call with `Root` origin. + sudo: bool, +} + +impl Call { + // Prepares the extrinsic. + fn prepare_extrinsic( + &self, + client: &OnlineClient, + cli: &mut impl Cli, + ) -> Result { + let xt = match construct_extrinsic(&self.function, self.args.clone()) { + Ok(tx) => tx, + Err(e) => { + return Err(anyhow!("Error: {}", e)); + }, + }; + // If sudo is required, wrap the call in a sudo call. + let xt = if self.sudo { construct_sudo_extrinsic(xt) } else { xt }; + let encoded_data = encode_call_data(client, &xt)?; + // If the encoded call data is too long, don't display it all. + if encoded_data.len() < ENCODED_CALL_DATA_MAX_LEN { + cli.info(format!("Encoded call data: {}", encode_call_data(client, &xt)?))?; + } + Ok(xt) + } + + // Sign and submit an extrinsic. + async fn submit_extrinsic( + &mut self, + client: &OnlineClient, + url: &Url, + tx: DynamicPayload, + cli: &mut impl Cli, + ) -> Result<()> { + if !self.skip_confirm && + !cli.confirm("Do you want to submit the extrinsic?") + .initial_value(true) + .interact()? + { + display_message( + &format!("Extrinsic for `{}` was not submitted.", self.function.name), + false, + cli, + )?; + return Ok(()); + } + let spinner = cliclack::spinner(); + spinner.start("Signing and submitting the extrinsic and then waiting for finalization, please be patient..."); + let result = sign_and_submit_extrinsic(client, url, tx, &self.suri) + .await + .map_err(|err| anyhow!("{}", format!("{err:?}")))?; + spinner.stop(result); + Ok(()) + } + + fn display(&self, chain: &Chain) -> String { + let mut full_message = "pop call chain".to_string(); + full_message.push_str(&format!(" --pallet {}", self.function.pallet)); + full_message.push_str(&format!(" --function {}", self.function)); + if !self.args.is_empty() { + let args: Vec<_> = self + .args + .iter() + .map(|a| { + // If the argument is too long, don't show it all, truncate it. + if a.len() > ENCODED_CALL_DATA_MAX_LEN { + format!("\"{}...{}\"", &a[..20], &a[a.len() - 20..]) + } else { + format!("\"{a}\"") + } + }) + .collect(); + full_message.push_str(&format!(" --args {}", args.join(" "))); + } + full_message.push_str(&format!(" --url {}", chain.url)); + if self.use_wallet { + full_message.push_str(" --use-wallet"); + } else { + full_message.push_str(&format!(" --suri {}", self.suri)); + } + if self.sudo { + full_message.push_str(" --sudo"); + } + full_message + } +} + +// Sign and submit an extrinsic using wallet integration. +async fn submit_extrinsic_with_wallet( + client: &OnlineClient, + url: &Url, + call_data: Vec, + cli: &mut impl Cli, +) -> Result<()> { + let maybe_payload = request_signature(call_data, url.to_string()).await?; + if let Some(payload) = maybe_payload { + cli.success("Signed payload received.")?; + let spinner = cliclack::spinner(); + spinner.start( + "Submitting the extrinsic and then waiting for finalization, please be patient...", + ); + + let result = submit_signed_extrinsic(client.clone(), payload) + .await + .map_err(|err| anyhow!("{}", format!("{err:?}")))?; + + spinner.stop(format!("Extrinsic submitted with hash: {:?}", result)); + } else { + display_message("No signed payload received.", false, cli)?; + } + Ok(()) +} + +// Displays a message to the user, with formatting based on the success status. +fn display_message(message: &str, success: bool, cli: &mut impl Cli) -> Result<()> { + if success { + cli.outro(message)?; + } else { + cli.outro_cancel(message)?; + } + Ok(()) +} + +// Prompts the user for some predefined actions. +fn prompt_predefined_actions(pallets: &[Pallet], cli: &mut impl Cli) -> Result> { + let mut predefined_action = cli.select("What would you like to do?"); + for action in supported_actions(pallets) { + predefined_action = predefined_action.item( + Some(action.clone()), + action.description(), + action.pallet_name(), + ); + } + predefined_action = predefined_action.item(None, "All", "Explore all pallets and functions"); + Ok(predefined_action.interact()?) +} + +// Prompts the user for the value of a parameter. +fn prompt_for_param(cli: &mut impl Cli, param: &Param) -> Result { + if param.is_optional { + if !cli + .confirm(format!( + "Do you want to provide a value for the optional parameter: {}?", + param.name + )) + .interact()? + { + return Ok("None()".to_string()); + } + let value = get_param_value(cli, param)?; + Ok(format!("Some({})", value)) + } else { + get_param_value(cli, param) + } +} + +// Resolves the value of a parameter based on its type. +fn get_param_value(cli: &mut impl Cli, param: &Param) -> Result { + if param.is_sequence { + prompt_for_sequence_param(cli, param) + } else if param.sub_params.is_empty() { + prompt_for_primitive_param(cli, param) + } else if param.is_variant { + prompt_for_variant_param(cli, param) + } else if param.is_tuple { + prompt_for_tuple_param(cli, param) + } else { + prompt_for_composite_param(cli, param) + } +} + +// Prompt for the value when it is a sequence. +fn prompt_for_sequence_param(cli: &mut impl Cli, param: &Param) -> Result { + let input_value = cli + .input(format!( + "The value for `{}` might be too large to enter. You may enter the path to a file instead.", + param.name + )) + .placeholder(&format!( + "Enter a value of type {} or provide a file path (e.g. /path/to/your/file)", + param.type_name + )) + .interact()?; + if Path::new(&input_value).is_file() { + return std::fs::read_to_string(&input_value) + .map_err(|err| anyhow!("Failed to read file {}", err.to_string())); + } + Ok(input_value) +} + +// Prompt for the value when it is a primitive. +fn prompt_for_primitive_param(cli: &mut impl Cli, param: &Param) -> Result { + Ok(cli + .input(format!("Enter the value for the parameter: {}", param.name)) + .placeholder(&format!("Type required: {}", param.type_name)) + .interact()?) +} + +// Prompt the user to select the value of the variant parameter and recursively prompt for nested +// fields. Output example: `Id(5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY)` for the `Id` +// variant. +fn prompt_for_variant_param(cli: &mut impl Cli, param: &Param) -> Result { + let selected_variant = { + let mut select = cli.select(format!("Select the value for the parameter: {}", param.name)); + for option in ¶m.sub_params { + select = select.item(option, &option.name, &option.type_name); + } + select.interact()? + }; + + if !selected_variant.sub_params.is_empty() { + let mut field_values = Vec::new(); + for field_arg in &selected_variant.sub_params { + let field_value = prompt_for_param(cli, field_arg)?; + field_values.push(field_value); + } + Ok(format!("{}({})", selected_variant.name, field_values.join(", "))) + } else { + Ok(format!("{}()", selected_variant.name)) + } +} + +// Recursively prompt the user for all the nested fields in a composite type. +// Example of a composite definition: +// Param { +// name: "Id", +// type_name: "AccountId32 ([u8;32])", +// is_optional: false, +// sub_params: [ +// Param { +// name: "Id", +// type_name: "[u8;32]", +// is_optional: false, +// sub_params: [], +// is_variant: false +// } +// ], +// is_variant: false +// } +fn prompt_for_composite_param(cli: &mut impl Cli, param: &Param) -> Result { + let mut field_values = Vec::new(); + for field_arg in ¶m.sub_params { + let field_value = prompt_for_param(cli, field_arg)?; + if param.sub_params.len() == 1 && param.name == param.sub_params[0].name { + field_values.push(field_value); + } else { + field_values.push(format!("{}: {}", field_arg.name, field_value)); + } + } + if param.sub_params.len() == 1 && param.name == param.sub_params[0].name { + Ok(field_values.join(", ").to_string()) + } else { + Ok(format!("{{{}}}", field_values.join(", "))) + } +} + +// Recursively prompt the user for the tuple values. +fn prompt_for_tuple_param(cli: &mut impl Cli, param: &Param) -> Result { + let mut tuple_values = Vec::new(); + for tuple_param in param.sub_params.iter() { + let tuple_value = prompt_for_param(cli, tuple_param)?; + tuple_values.push(tuple_value); + } + Ok(format!("({})", tuple_values.join(", "))) +} + +// Parser to capitalize the first letter of the pallet name. +fn parse_pallet_name(name: &str) -> Result { + let mut chars = name.chars(); + match chars.next() { + Some(c) => Ok(c.to_ascii_uppercase().to_string() + chars.as_str()), + None => Err("Pallet cannot be empty".to_string()), + } +} + +// Parser to convert the function name to lowercase. +fn parse_function_name(name: &str) -> Result { + Ok(name.to_ascii_lowercase()) +} + +#[cfg(test)] +mod tests { + use super::*; + use crate::{cli::MockCli, common::wallet::USE_WALLET_PROMPT}; + use tempfile::tempdir; + use url::Url; + + const BOB_SURI: &str = "//Bob"; + const POP_NETWORK_TESTNET_URL: &str = "wss://rpc1.paseo.popnetwork.xyz"; + const POLKADOT_NETWORK_URL: &str = "wss://polkadot-rpc.publicnode.com"; + + #[tokio::test] + async fn configure_chain_works() -> Result<()> { + let call_config = + CallChainCommand { suri: Some(DEFAULT_URI.to_string()), ..Default::default() }; + let mut cli = MockCli::new().expect_intro("Call a chain").expect_input( + "Which chain would you like to interact with?", + POP_NETWORK_TESTNET_URL.into(), + ); + let chain = call_config.configure_chain(&mut cli).await?; + assert_eq!(chain.url, Url::parse(POP_NETWORK_TESTNET_URL)?); + cli.verify() + } + + #[tokio::test] + async fn guide_user_to_call_chain_works() -> Result<()> { + let mut call_config = + CallChainCommand { pallet: Some("System".to_string()), ..Default::default() }; + + let mut cli = MockCli::new() + .expect_intro("Call a chain") + .expect_input("Which chain would you like to interact with?", POP_NETWORK_TESTNET_URL.into()) + .expect_select( + "Select the function to call:", + Some(true), + true, + Some( + [ + ("apply_authorized_upgrade".to_string(), "Provide the preimage (runtime binary) `code` for an upgrade that has been authorized. If the authorization required a version check, this call will ensure the spec name remains unchanged and that the spec version has increased. Depending on the runtime's `OnSetCode` configuration, this function may directly apply the new `code` in the same block or attempt to schedule the upgrade. All origins are allowed.".to_string()), + ("authorize_upgrade".to_string(), "Authorize an upgrade to a given `code_hash` for the runtime. The runtime can be supplied later. This call requires Root origin.".to_string()), + ("authorize_upgrade_without_checks".to_string(), "Authorize an upgrade to a given `code_hash` for the runtime. The runtime can be supplied later. WARNING: This authorizes an upgrade that will take place without any safety checks, for example that the spec name remains the same and that the version number increases. Not recommended for normal use. Use `authorize_upgrade` instead. This call requires Root origin.".to_string()), + ("kill_prefix".to_string(), "Kill all storage items with a key that starts with the given prefix. **NOTE:** We rely on the Root origin to provide us the number of subkeys under the prefix we are removing to accurately calculate the weight of this function.".to_string()), + ("kill_storage".to_string(), "Kill some items from storage.".to_string()), + ("remark".to_string(), "Make some on-chain remark. Can be executed by every `origin`.".to_string()), + ("remark_with_event".to_string(), "Make some on-chain remark and emit event.".to_string()), + ("set_code".to_string(), "Set the new runtime code.".to_string()), + ("set_code_without_checks".to_string(), "Set the new runtime code without doing any checks of the given `code`. Note that runtime upgrades will not run if this is called with a not-increasing spec version!".to_string()), + ("set_heap_pages".to_string(), "Set the number of pages in the WebAssembly environment's heap.".to_string()), + ("set_storage".to_string(), "Set some items of storage.".to_string()), + ] + .to_vec(), + ), + 5, // "remark" dispatchable function + ) + .expect_input("The value for `remark` might be too large to enter. You may enter the path to a file instead.", "0x11".into()) + .expect_confirm("Would you like to dispatch this function call with `Root` origin?", true) + .expect_confirm(USE_WALLET_PROMPT, true); + + let chain = call_config.configure_chain(&mut cli).await?; + assert_eq!(chain.url, Url::parse(POP_NETWORK_TESTNET_URL)?); + + let call_chain = call_config.configure_call(&chain, &mut cli)?; + assert_eq!(call_chain.function.pallet, "System"); + assert_eq!(call_chain.function.name, "remark"); + assert_eq!(call_chain.args, ["0x11".to_string()].to_vec()); + assert_eq!(call_chain.suri, "//Alice"); // Default value + assert!(call_chain.use_wallet); + assert!(call_chain.sudo); + assert_eq!(call_chain.display(&chain), "pop call chain --pallet System --function remark --args \"0x11\" --url wss://rpc1.paseo.popnetwork.xyz/ --use-wallet --sudo"); + cli.verify() + } + + #[tokio::test] + async fn guide_user_to_configure_predefined_action_works() -> Result<()> { + let mut call_config = CallChainCommand::default(); + + let mut cli = MockCli::new().expect_intro("Call a chain").expect_input( + "Which chain would you like to interact with?", + POLKADOT_NETWORK_URL.into(), + ); + let chain = call_config.configure_chain(&mut cli).await?; + assert_eq!(chain.url, Url::parse(POLKADOT_NETWORK_URL)?); + cli.verify()?; + + let mut cli = MockCli::new() + .expect_select( + "What would you like to do?", + Some(true), + true, + Some( + supported_actions(&chain.pallets) + .into_iter() + .map(|action| { + (action.description().to_string(), action.pallet_name().to_string()) + }) + .chain(std::iter::once(( + "All".to_string(), + "Explore all pallets and functions".to_string(), + ))) + .collect::>(), + ), + 1, // "Purchase on-demand coretime" action + ) + .expect_input("Enter the value for the parameter: max_amount", "10000".into()) + .expect_input("Enter the value for the parameter: para_id", "2000".into()) + .expect_input("Signer of the extrinsic:", BOB_SURI.into()); + + let call_chain = call_config.configure_call(&chain, &mut cli)?; + + assert_eq!(call_chain.function.pallet, "OnDemand"); + assert_eq!(call_chain.function.name, "place_order_allow_death"); + assert_eq!(call_chain.args, ["10000".to_string(), "2000".to_string()].to_vec()); + assert_eq!(call_chain.suri, "//Bob"); + assert!(!call_chain.sudo); + assert_eq!(call_chain.display(&chain), "pop call chain --pallet OnDemand --function place_order_allow_death --args \"10000\" \"2000\" --url wss://polkadot-rpc.publicnode.com/ --suri //Bob"); + cli.verify() + } + + #[tokio::test] + async fn prepare_extrinsic_works() -> Result<()> { + let client = set_up_client(POP_NETWORK_TESTNET_URL).await?; + let mut call_config = Call { + function: Function { + pallet: "WrongName".to_string(), + name: "WrongName".to_string(), + ..Default::default() + }, + args: vec!["0x11".to_string()].to_vec(), + suri: DEFAULT_URI.to_string(), + use_wallet: false, + skip_confirm: false, + sudo: false, + }; + let mut cli = MockCli::new(); + // Error, wrong name of the pallet. + assert!(matches!( + call_config.prepare_extrinsic(&client, &mut cli), + Err(message) + if message.to_string().contains("Failed to encode call data. Metadata Error: Pallet with name WrongName not found"))); + let pallets = parse_chain_metadata(&client)?; + call_config.function.pallet = "System".to_string(); + // Error, wrong name of the function. + assert!(matches!( + call_config.prepare_extrinsic(&client, &mut cli), + Err(message) + if message.to_string().contains("Failed to encode call data. Metadata Error: Call with name WrongName not found"))); + // Success, pallet and dispatchable function specified. + cli = MockCli::new().expect_info("Encoded call data: 0x00000411"); + call_config.function = find_dispatchable_by_name(&pallets, "System", "remark")?.clone(); + let xt = call_config.prepare_extrinsic(&client, &mut cli)?; + assert_eq!(xt.call_name(), "remark"); + assert_eq!(xt.pallet_name(), "System"); + + // Prepare extrinsic wrapped in sudo works. + cli = MockCli::new().expect_info("Encoded call data: 0x0f0000000411"); + call_config.sudo = true; + call_config.prepare_extrinsic(&client, &mut cli)?; + + cli.verify() + } + + #[tokio::test] + async fn user_cancel_submit_extrinsic_works() -> Result<()> { + let client = set_up_client(POP_NETWORK_TESTNET_URL).await?; + let pallets = parse_chain_metadata(&client)?; + let mut call_config = Call { + function: find_dispatchable_by_name(&pallets, "System", "remark")?.clone(), + args: vec!["0x11".to_string()].to_vec(), + suri: DEFAULT_URI.to_string(), + use_wallet: false, + skip_confirm: false, + sudo: false, + }; + let mut cli = MockCli::new() + .expect_confirm("Do you want to submit the extrinsic?", false) + .expect_outro_cancel("Extrinsic for `remark` was not submitted."); + let xt = call_config.prepare_extrinsic(&client, &mut cli)?; + call_config + .submit_extrinsic(&client, &Url::parse(POP_NETWORK_TESTNET_URL)?, xt, &mut cli) + .await?; + + cli.verify() + } + + #[tokio::test] + async fn user_cancel_submit_extrinsic_from_call_data_works() -> Result<()> { + let client = set_up_client(POP_NETWORK_TESTNET_URL).await?; + let call_config = CallChainCommand { + pallet: None, + function: None, + args: vec![].to_vec(), + url: Some(Url::parse(POP_NETWORK_TESTNET_URL)?), + suri: None, + use_wallet: false, + skip_confirm: false, + call_data: Some("0x00000411".to_string()), + sudo: false, + }; + let mut cli = MockCli::new() + .expect_confirm(USE_WALLET_PROMPT, false) + .expect_input("Signer of the extrinsic:", "//Bob".into()) + .expect_confirm("Do you want to submit the extrinsic?", false) + .expect_outro_cancel("Extrinsic with call data 0x00000411 was not submitted."); + call_config + .submit_extrinsic_from_call_data( + &client, + &Url::parse(POP_NETWORK_TESTNET_URL)?, + "0x00000411", + &mut cli, + ) + .await?; + + cli.verify() + } + + #[tokio::test] + async fn configure_sudo_works() -> Result<()> { + // Test when sudo pallet doesn't exist. + let mut call_config = CallChainCommand { + pallet: None, + function: None, + args: vec![].to_vec(), + url: Some(Url::parse(POLKADOT_NETWORK_URL)?), + suri: Some("//Alice".to_string()), + use_wallet: false, + skip_confirm: false, + call_data: Some("0x00000411".to_string()), + sudo: true, + }; + let mut cli = MockCli::new() + .expect_intro("Call a chain") + .expect_warning("NOTE: sudo is not supported by the chain. Ignoring `--sudo` flag."); + let chain = call_config.configure_chain(&mut cli).await?; + call_config.configure_sudo(&chain, &mut cli)?; + assert!(!call_config.sudo); + cli.verify()?; + + // Test when sudo pallet exist. + cli = MockCli::new().expect_intro("Call a chain").expect_confirm( + "Would you like to dispatch this function call with `Root` origin?", + true, + ); + call_config.url = Some(Url::parse(POP_NETWORK_TESTNET_URL)?); + let chain = call_config.configure_chain(&mut cli).await?; + call_config.configure_sudo(&chain, &mut cli)?; + assert!(call_config.sudo); + cli.verify() + } + + #[test] + fn reset_for_new_call_works() -> Result<()> { + let mut call_config = CallChainCommand { + pallet: Some("System".to_string()), + function: Some("remark".to_string()), + args: vec!["0x11".to_string()].to_vec(), + url: Some(Url::parse(POP_NETWORK_TESTNET_URL)?), + use_wallet: true, + suri: Some(DEFAULT_URI.to_string()), + skip_confirm: false, + call_data: None, + sudo: true, + }; + call_config.reset_for_new_call(); + assert_eq!(call_config.pallet, None); + assert_eq!(call_config.function, None); + assert_eq!(call_config.args.len(), 0); + assert!(!call_config.sudo); + assert!(!call_config.use_wallet); + Ok(()) + } + + #[test] + fn requires_user_input_works() -> Result<()> { + let mut call_config = CallChainCommand { + pallet: Some("System".to_string()), + function: Some("remark".to_string()), + args: vec!["0x11".to_string()].to_vec(), + url: Some(Url::parse(POP_NETWORK_TESTNET_URL)?), + suri: Some(DEFAULT_URI.to_string()), + use_wallet: false, + skip_confirm: false, + call_data: None, + sudo: false, + }; + assert!(!call_config.requires_user_input()); + call_config.pallet = None; + assert!(call_config.requires_user_input()); + Ok(()) + } + + #[test] + fn expand_file_arguments_works() -> Result<()> { + let mut call_config = CallChainCommand { + pallet: Some("Registrar".to_string()), + function: Some("register".to_string()), + args: vec!["2000".to_string(), "0x1".to_string(), "0x12".to_string()].to_vec(), + url: Some(Url::parse(POP_NETWORK_TESTNET_URL)?), + suri: Some(DEFAULT_URI.to_string()), + use_wallet: false, + call_data: None, + skip_confirm: false, + sudo: false, + }; + assert_eq!( + call_config.expand_file_arguments()?, + vec!["2000".to_string(), "0x1".to_string(), "0x12".to_string()] + ); + // Temporal file for testing when the input is a file. + let temp_dir = tempdir()?; + let genesis_file = temp_dir.path().join("genesis_file.json"); + std::fs::write(&genesis_file, "genesis_file_content")?; + let wasm_file = temp_dir.path().join("wasm_file.json"); + std::fs::write(&wasm_file, "wasm_file_content")?; + call_config.args = vec![ + "2000".to_string(), + genesis_file.display().to_string(), + wasm_file.display().to_string(), + ]; + assert_eq!( + call_config.expand_file_arguments()?, + vec![ + "2000".to_string(), + "genesis_file_content".to_string(), + "wasm_file_content".to_string() + ] + ); + Ok(()) + } + + #[test] + fn display_message_works() -> Result<()> { + let mut cli = MockCli::new().expect_outro(&"Call completed successfully!"); + display_message("Call completed successfully!", true, &mut cli)?; + cli.verify()?; + let mut cli = MockCli::new().expect_outro_cancel("Call failed."); + display_message("Call failed.", false, &mut cli)?; + cli.verify() + } + + #[tokio::test] + async fn prompt_predefined_actions_works() -> Result<()> { + let client = set_up_client(POP_NETWORK_TESTNET_URL).await?; + let pallets = parse_chain_metadata(&client)?; + let mut cli = MockCli::new().expect_select( + "What would you like to do?", + Some(true), + true, + Some( + supported_actions(&pallets) + .into_iter() + .map(|action| { + (action.description().to_string(), action.pallet_name().to_string()) + }) + .chain(std::iter::once(( + "All".to_string(), + "Explore all pallets and functions".to_string(), + ))) + .collect::>(), + ), + 2, // "Mint an Asset" action + ); + let action = prompt_predefined_actions(&pallets, &mut cli)?; + assert_eq!(action, Some(Action::MintAsset)); + cli.verify() + } + + #[tokio::test] + async fn prompt_for_param_works() -> Result<()> { + let client = set_up_client(POP_NETWORK_TESTNET_URL).await?; + let pallets = parse_chain_metadata(&client)?; + // Using NFT mint dispatchable function to test the majority of sub-functions. + let function = find_dispatchable_by_name(&pallets, "Nfts", "mint")?; + let mut cli = MockCli::new() + .expect_input("Enter the value for the parameter: collection", "0".into()) + .expect_input("Enter the value for the parameter: item", "0".into()) + .expect_select( + "Select the value for the parameter: mint_to", + Some(true), + true, + Some( + [ + ("Id".to_string(), "".to_string()), + ("Index".to_string(), "".to_string()), + ("Raw".to_string(), "".to_string()), + ("Address32".to_string(), "".to_string()), + ("Address20".to_string(), "".to_string()), + ] + .to_vec(), + ), + 0, // "Id" action + ) + .expect_input( + "Enter the value for the parameter: Id", + "5FHneW46xGXgs5mUiveU4sbTyGBzmstUspZC92UhjJM694ty".into(), + ) + .expect_confirm( + "Do you want to provide a value for the optional parameter: witness_data?", + true, + ) + .expect_confirm( + "Do you want to provide a value for the optional parameter: owned_item?", + false, + ) + .expect_confirm( + "Do you want to provide a value for the optional parameter: mint_price?", + true, + ) + .expect_input("Enter the value for the parameter: mint_price", "1000".into()); + + // Test all the function params. + let mut params: Vec = Vec::new(); + for param in &function.params { + params.push(prompt_for_param(&mut cli, ¶m)?); + } + assert_eq!(params.len(), 4); + assert_eq!(params[0], "0".to_string()); // collection: test primitive + assert_eq!(params[1], "0".to_string()); // item: test primitive + assert_eq!(params[2], "Id(5FHneW46xGXgs5mUiveU4sbTyGBzmstUspZC92UhjJM694ty)".to_string()); // mint_to: test variant + assert_eq!(params[3], "Some({owned_item: None(), mint_price: Some(1000)})".to_string()); // witness_data: test composite + cli.verify()?; + + // Using Scheduler set_retry dispatchable function to test the tuple params. + let function = find_dispatchable_by_name(&pallets, "Scheduler", "set_retry")?; + let mut cli = MockCli::new() + .expect_input( + "Enter the value for the parameter: Index 0 of the tuple task", + "0".into(), + ) + .expect_input( + "Enter the value for the parameter: Index 1 of the tuple task", + "0".into(), + ) + .expect_input("Enter the value for the parameter: retries", "0".into()) + .expect_input("Enter the value for the parameter: period", "0".into()); + + // Test all the extrinsic params + let mut params: Vec = Vec::new(); + for param in &function.params { + params.push(prompt_for_param(&mut cli, ¶m)?); + } + assert_eq!(params.len(), 3); + assert_eq!(params[0], "(0, 0)".to_string()); // task: test tuples + assert_eq!(params[1], "0".to_string()); // retries: test primitive + assert_eq!(params[2], "0".to_string()); // period: test primitive + cli.verify()?; + + // Using System remark dispatchable function to test the sequence params. + let function = find_dispatchable_by_name(&pallets, "System", "remark")?; + // Temporal file for testing the input. + let temp_dir = tempdir()?; + let file = temp_dir.path().join("file.json"); + std::fs::write(&file, "testing")?; + + let mut cli = MockCli::new() + .expect_input( + "The value for `remark` might be too large to enter. You may enter the path to a file instead.", + file.display().to_string(), + ); + + // Test all the function params + let mut params: Vec = Vec::new(); + for param in &function.params { + params.push(prompt_for_param(&mut cli, ¶m)?); + } + assert_eq!(params.len(), 1); + assert_eq!(params[0], "testing".to_string()); // remark: test sequence from file + cli.verify() + } + + #[test] + fn parse_pallet_name_works() -> Result<()> { + assert_eq!(parse_pallet_name("system").unwrap(), "System"); + assert_eq!(parse_pallet_name("balances").unwrap(), "Balances"); + assert_eq!(parse_pallet_name("nfts").unwrap(), "Nfts"); + Ok(()) + } + + #[test] + fn parse_function_name_works() -> Result<()> { + assert_eq!(parse_function_name("Remark").unwrap(), "remark"); + assert_eq!(parse_function_name("Force_transfer").unwrap(), "force_transfer"); + assert_eq!(parse_function_name("MINT").unwrap(), "mint"); + Ok(()) + } +} diff --git a/crates/pop-cli/src/commands/call/contract.rs b/crates/pop-cli/src/commands/call/contract.rs index 0b2815a85..ab7a826fd 100644 --- a/crates/pop-cli/src/commands/call/contract.rs +++ b/crates/pop-cli/src/commands/call/contract.rs @@ -2,17 +2,22 @@ use crate::{ cli::{self, traits::*}, - common::contracts::has_contract_been_built, + common::{ + contracts::has_contract_been_built, + wallet::{prompt_to_use_wallet, request_signature}, + }, }; use anyhow::{anyhow, Result}; use clap::Args; use cliclack::spinner; +use pop_common::{DefaultConfig, Keypair}; use pop_contracts::{ - build_smart_contract, call_smart_contract, dry_run_call, dry_run_gas_estimate_call, - get_messages, parse_account, set_up_call, CallOpts, Verbosity, + build_smart_contract, call_smart_contract, call_smart_contract_from_signed_payload, + dry_run_call, dry_run_gas_estimate_call, get_call_payload, get_message, get_messages, + parse_account, set_up_call, CallExec, CallOpts, DefaultEnvironment, Verbosity, }; use sp_weights::Weight; -use std::path::PathBuf; +use std::path::{Path, PathBuf}; const DEFAULT_URL: &str = "ws://localhost:9944/"; const DEFAULT_URI: &str = "//Alice"; @@ -24,16 +29,16 @@ pub struct CallContractCommand { #[arg(short, long)] path: Option, /// The address of the contract to call. - #[arg(name = "contract", short, long, env = "CONTRACT")] + #[arg(short, long, env = "CONTRACT")] contract: Option, /// The name of the contract message to call. - #[arg(long, short)] + #[arg(short, long)] message: Option, /// The message arguments, encoded as strings. #[arg(short, long, num_args = 0..,)] args: Vec, /// The value to be transferred as part of the call. - #[arg(name = "value", short, long, default_value = DEFAULT_PAYABLE_VALUE)] + #[arg(short, long, default_value = DEFAULT_PAYABLE_VALUE)] value: String, /// Maximum amount of gas to be used for this command. /// If not specified it will perform a dry-run to estimate the gas consumed for the @@ -45,24 +50,33 @@ pub struct CallContractCommand { #[arg(short = 'P', long)] proof_size: Option, /// Websocket endpoint of a node. - #[arg(name = "url", short, long, value_parser, default_value = DEFAULT_URL)] + #[arg(short, long, value_parser, default_value = DEFAULT_URL)] url: url::Url, /// Secret key URI for the account calling the contract. /// /// e.g. /// - for a dev account "//Alice" /// - with a password "//Alice///SECRET_PASSWORD" - #[arg(name = "suri", long, short, default_value = DEFAULT_URI)] + #[arg(short, long, default_value = DEFAULT_URI)] suri: String, + /// Use a browser extension wallet to sign the extrinsic. + #[arg( + name = "use-wallet", + long, + short = 'w', + default_value = "false", + conflicts_with = "suri" + )] + use_wallet: bool, /// Submit an extrinsic for on-chain execution. - #[arg(short('x'), long)] + #[arg(short = 'x', long)] execute: bool, /// Perform a dry-run via RPC to estimate the gas usage. This does not submit a transaction. #[arg(short = 'D', long, conflicts_with = "execute")] dry_run: bool, /// Enables developer mode, bypassing certain user prompts for faster testing. /// Recommended for testing and local development only. - #[arg(name = "dev", long, short, default_value = "false")] + #[arg(name = "dev", short, long, default_value = "false")] dev_mode: bool, } impl CallContractCommand { @@ -115,14 +129,19 @@ impl CallContractCommand { full_message.push_str(&format!(" --gas {}", gas_limit)); } if let Some(proof_size) = self.proof_size { - full_message.push_str(&format!(" --proof_size {}", proof_size)); + full_message.push_str(&format!(" --proof-size {}", proof_size)); + } + full_message.push_str(&format!(" --url {}", self.url)); + if self.use_wallet { + full_message.push_str(" --use-wallet"); + } else { + full_message.push_str(&format!(" --suri {}", self.suri)); } - full_message.push_str(&format!(" --url {} --suri {}", self.url, self.suri)); if self.execute { full_message.push_str(" --execute"); } if self.dry_run { - full_message.push_str(" --dry_run"); + full_message.push_str(" --dry-run"); } full_message } @@ -165,7 +184,7 @@ impl CallContractCommand { fn is_contract_build_required(&self) -> bool { self.path .as_ref() - .map(|p| p.is_dir() && !has_contract_been_built(Some(&p))) + .map(|p| p.is_dir() && !has_contract_been_built(Some(p))) .unwrap_or_default() } @@ -303,18 +322,22 @@ impl CallContractCommand { self.proof_size = proof_size_input.parse::().ok(); // If blank or bad input, estimate it. } - // Resolve who is calling the contract. - if self.suri == DEFAULT_URI { - // Prompt for uri. - self.suri = cli - .input("Signer calling the contract:") - .placeholder("//Alice") - .default_input("//Alice") - .interact()?; - }; + // Resolve who is calling the contract. If a `suri` was provided via the command line, skip + // the prompt. + if self.suri == DEFAULT_URI && !self.use_wallet && message.mutates { + if prompt_to_use_wallet(cli)? { + self.use_wallet = true; + } else { + self.suri = cli + .input("Signer calling the contract:") + .placeholder("//Alice") + .default_input("//Alice") + .interact()?; + }; + } // Finally prompt for confirmation. - let is_call_confirmed = if message.mutates && !self.dev_mode { + let is_call_confirmed = if message.mutates && !self.dev_mode && !self.use_wallet { cli.confirm("Do you want to execute the call? (Selecting 'No' will perform a dry run)") .initial_value(true) .interact()? @@ -340,6 +363,14 @@ impl CallContractCommand { return Err(anyhow!("Please specify the message to call.")); }, }; + // Disable wallet signing and display warning if the call is read-only. + let message_metadata = + get_message(self.path.as_deref().unwrap_or_else(|| Path::new("./")), &message)?; + if !message_metadata.mutates && self.use_wallet { + cli.warning("NOTE: Signing is not required for this read-only call. The '--use-wallet' flag will be ignored.")?; + self.use_wallet = false; + } + let contract = match &self.contract { Some(contract) => contract.to_string(), None => { @@ -366,6 +397,12 @@ impl CallContractCommand { }, }; + // Perform signing steps with wallet integration, skipping secure signing for query-only + // operations. + if self.use_wallet { + self.execute_with_wallet(call_exec, cli).await?; + return self.finalize_execute_call(cli, prompt_to_repeat_call).await; + } if self.dry_run { let spinner = spinner(); spinner.start("Doing a dry run to estimate the gas..."); @@ -386,6 +423,7 @@ impl CallContractCommand { let spinner = spinner(); spinner.start("Calling the contract..."); let call_dry_run_result = dry_run_call(&call_exec).await?; + spinner.stop(""); cli.info(format!("Result: {}", call_dry_run_result))?; cli.warning("Your call has not been executed.")?; } else { @@ -414,7 +452,15 @@ impl CallContractCommand { cli.info(call_result)?; } + self.finalize_execute_call(cli, prompt_to_repeat_call).await + } + /// Finalize the current call, prompting the user to repeat or conclude the process. + async fn finalize_execute_call( + &mut self, + cli: &mut impl Cli, + prompt_to_repeat_call: bool, + ) -> Result<()> { // Prompt for any additional calls. if !prompt_to_repeat_call { display_message("Call completed successfully!", true, cli)?; @@ -435,12 +481,56 @@ impl CallContractCommand { } } + /// Execute the smart contract call using wallet integration. + async fn execute_with_wallet( + &self, + call_exec: CallExec, + cli: &mut impl Cli, + ) -> Result<()> { + let call_data = self.get_contract_data(&call_exec).map_err(|err| { + anyhow!("An error occurred getting the call data: {}", err.to_string()) + })?; + + let maybe_payload = request_signature(call_data, self.url.to_string()).await?; + if let Some(payload) = maybe_payload { + cli.success("Signed payload received.")?; + let spinner = spinner(); + spinner + .start("Calling the contract and waiting for finalization, please be patient..."); + + let call_result = + call_smart_contract_from_signed_payload(call_exec, payload, &self.url) + .await + .map_err(|err| anyhow!("{} {}", "ERROR:", format!("{err:?}")))?; + + cli.info(call_result)?; + } else { + display_message("No signed payload received.", false, cli)?; + } + Ok(()) + } + + // Get the call data. + fn get_contract_data( + &self, + call_exec: &CallExec, + ) -> anyhow::Result> { + let weight_limit = if self.gas_limit.is_some() && self.proof_size.is_some() { + Weight::from_parts(self.gas_limit.unwrap(), self.proof_size.unwrap()) + } else { + Weight::zero() + }; + let call_data = get_call_payload(call_exec, weight_limit)?; + Ok(call_data) + } + /// Resets message specific fields to default values for a new call. fn reset_for_new_call(&mut self) { self.message = None; self.value = DEFAULT_PAYABLE_VALUE.to_string(); self.gas_limit = None; self.proof_size = None; + self.use_wallet = false; } } @@ -456,7 +546,7 @@ fn display_message(message: &str, success: bool, cli: &mut impl Cli) -> Result<( #[cfg(test)] mod tests { use super::*; - use crate::cli::MockCli; + use crate::{cli::MockCli, common::wallet::USE_WALLET_PROMPT}; use pop_contracts::{mock_build_process, new_environment}; use std::{env, fs::write}; use url::Url; @@ -482,6 +572,7 @@ mod tests { proof_size: None, url: Url::parse("wss://rpc1.paseo.popnetwork.xyz")?, suri: "//Alice".to_string(), + use_wallet: false, dry_run: false, execute: false, dev_mode: false, @@ -517,13 +608,14 @@ mod tests { proof_size: Some(10), url: Url::parse("wss://rpc1.paseo.popnetwork.xyz")?, suri: "//Alice".to_string(), + use_wallet: false, dry_run: true, execute: false, dev_mode: false, }; call_config.configure(&mut cli, false).await?; assert_eq!(call_config.display(), format!( - "pop call contract --path {} --contract 15XausWjFLBBFLDXUSBRfSfZk25warm4wZRV4ZxhZbfvjrJm --message flip --gas 100 --proof_size 10 --url wss://rpc1.paseo.popnetwork.xyz/ --suri //Alice --dry_run", + "pop call contract --path {} --contract 15XausWjFLBBFLDXUSBRfSfZk25warm4wZRV4ZxhZbfvjrJm --message flip --gas 100 --proof-size 10 --url wss://rpc1.paseo.popnetwork.xyz/ --suri //Alice --dry-run", temp_dir.path().join("testing").display().to_string(), )); // Contract deployed on Pop Network testnet, test dry-run @@ -553,13 +645,14 @@ mod tests { proof_size: Some(10), url: Url::parse("wss://rpc1.paseo.popnetwork.xyz")?, suri: "//Alice".to_string(), + use_wallet: false, dry_run: true, execute: false, dev_mode: false, }; call_config.configure(&mut cli, false).await?; assert_eq!(call_config.display(), format!( - "pop call contract --path {} --contract 15XausWjFLBBFLDXUSBRfSfZk25warm4wZRV4ZxhZbfvjrJm --message flip --gas 100 --proof_size 10 --url wss://rpc1.paseo.popnetwork.xyz/ --suri //Alice --dry_run", + "pop call contract --path {} --contract 15XausWjFLBBFLDXUSBRfSfZk25warm4wZRV4ZxhZbfvjrJm --message flip --gas 100 --proof-size 10 --url wss://rpc1.paseo.popnetwork.xyz/ --suri //Alice --dry-run", current_dir.join("pop-contracts/tests/files/testing.contract").display().to_string(), )); // Contract deployed on Pop Network testnet, test dry-run @@ -569,7 +662,7 @@ mod tests { call_config.path = Some(current_dir.join("pop-contracts/tests/files/testing.json")); call_config.configure(&mut cli, false).await?; assert_eq!(call_config.display(), format!( - "pop call contract --path {} --contract 15XausWjFLBBFLDXUSBRfSfZk25warm4wZRV4ZxhZbfvjrJm --message flip --gas 100 --proof_size 10 --url wss://rpc1.paseo.popnetwork.xyz/ --suri //Alice --dry_run", + "pop call contract --path {} --contract 15XausWjFLBBFLDXUSBRfSfZk25warm4wZRV4ZxhZbfvjrJm --message flip --gas 100 --proof-size 10 --url wss://rpc1.paseo.popnetwork.xyz/ --suri //Alice --dry-run", current_dir.join("pop-contracts/tests/files/testing.json").display().to_string(), )); @@ -577,7 +670,7 @@ mod tests { call_config.path = Some(current_dir.join("pop-contracts/tests/files/testing.wasm")); call_config.configure(&mut cli, false).await?; assert_eq!(call_config.display(), format!( - "pop call contract --path {} --contract 15XausWjFLBBFLDXUSBRfSfZk25warm4wZRV4ZxhZbfvjrJm --message flip --gas 100 --proof_size 10 --url wss://rpc1.paseo.popnetwork.xyz/ --suri //Alice --dry_run", + "pop call contract --path {} --contract 15XausWjFLBBFLDXUSBRfSfZk25warm4wZRV4ZxhZbfvjrJm --message flip --gas 100 --proof-size 10 --url wss://rpc1.paseo.popnetwork.xyz/ --suri //Alice --dry-run", current_dir.join("pop-contracts/tests/files/testing.wasm").display().to_string(), )); // Contract deployed on Pop Network testnet, test dry-run @@ -608,10 +701,6 @@ mod tests { "Do you want to perform another call using the existing smart contract?", true, ) - .expect_confirm( - "Do you want to perform another call using the existing smart contract?", - false, - ) .expect_select( "Select the message to call:", Some(false), @@ -619,12 +708,16 @@ mod tests { Some(items), 1, // "get" message ) - .expect_input("Signer calling the contract:", "//Alice".into()) .expect_info(format!( "pop call contract --path {} --contract 15XausWjFLBBFLDXUSBRfSfZk25warm4wZRV4ZxhZbfvjrJm --message get --url wss://rpc1.paseo.popnetwork.xyz/ --suri //Alice", temp_dir.path().join("testing").display().to_string(), )) + .expect_warning("NOTE: Signing is not required for this read-only call. The '--use-wallet' flag will be ignored.") .expect_warning("Your call has not been executed.") + .expect_confirm( + "Do you want to perform another call using the existing smart contract?", + false, + ) .expect_outro("Contract calling complete."); // Contract deployed on Pop Network testnet, test get @@ -638,6 +731,7 @@ mod tests { proof_size: None, url: Url::parse("wss://rpc1.paseo.popnetwork.xyz")?, suri: "//Alice".to_string(), + use_wallet: true, dry_run: false, execute: false, dev_mode: false, @@ -688,7 +782,6 @@ mod tests { "Provide the on-chain contract address:", "15XausWjFLBBFLDXUSBRfSfZk25warm4wZRV4ZxhZbfvjrJm".into(), ) - .expect_input("Signer calling the contract:", "//Alice".into()) .expect_info(format!( "pop call contract --path {} --contract 15XausWjFLBBFLDXUSBRfSfZk25warm4wZRV4ZxhZbfvjrJm --message get --url wss://rpc1.paseo.popnetwork.xyz/ --suri //Alice", temp_dir.path().join("testing").display().to_string(), @@ -704,6 +797,7 @@ mod tests { proof_size: None, url: Url::parse(DEFAULT_URL)?, suri: DEFAULT_URI.to_string(), + use_wallet: false, dry_run: false, execute: false, dev_mode: false, @@ -750,14 +844,6 @@ mod tests { ]; // The inputs are processed in reverse order. let mut cli = MockCli::new() - .expect_confirm("Do you want to execute the call? (Selecting 'No' will perform a dry run)", true) - .expect_select( - "Select the message to call:", - Some(false), - true, - Some(items), - 2, // "specific_flip" message - ) .expect_input( "Where is your project or contract artifact located?", temp_dir.path().join("testing").display().to_string(), @@ -770,14 +856,21 @@ mod tests { "Provide the on-chain contract address:", "15XausWjFLBBFLDXUSBRfSfZk25warm4wZRV4ZxhZbfvjrJm".into(), ) + .expect_select( + "Select the message to call:", + Some(false), + true, + Some(items), + 2, // "specific_flip" message + ) .expect_input("Enter the value for the parameter: new_value", "true".into()) // Args for specific_flip .expect_input("Enter the value for the parameter: number", "2".into()) // Args for specific_flip .expect_input("Value to transfer to the call:", "50".into()) // Only if payable .expect_input("Enter the gas limit:", "".into()) // Only if call .expect_input("Enter the proof size limit:", "".into()) // Only if call - .expect_input("Signer calling the contract:", "//Alice".into()) + .expect_confirm(USE_WALLET_PROMPT, true) .expect_info(format!( - "pop call contract --path {} --contract 15XausWjFLBBFLDXUSBRfSfZk25warm4wZRV4ZxhZbfvjrJm --message specific_flip --args \"true\", \"2\" --value 50 --url wss://rpc1.paseo.popnetwork.xyz/ --suri //Alice --execute", + "pop call contract --path {} --contract 15XausWjFLBBFLDXUSBRfSfZk25warm4wZRV4ZxhZbfvjrJm --message specific_flip --args \"true\", \"2\" --value 50 --url wss://rpc1.paseo.popnetwork.xyz/ --use-wallet --execute", temp_dir.path().join("testing").display().to_string(), )); @@ -791,6 +884,7 @@ mod tests { proof_size: None, url: Url::parse(DEFAULT_URL)?, suri: DEFAULT_URI.to_string(), + use_wallet: false, dry_run: false, execute: false, dev_mode: false, @@ -809,10 +903,11 @@ mod tests { assert_eq!(call_config.proof_size, None); assert_eq!(call_config.url.to_string(), "wss://rpc1.paseo.popnetwork.xyz/"); assert_eq!(call_config.suri, "//Alice"); + assert!(call_config.use_wallet); assert!(call_config.execute); assert!(!call_config.dry_run); assert_eq!(call_config.display(), format!( - "pop call contract --path {} --contract 15XausWjFLBBFLDXUSBRfSfZk25warm4wZRV4ZxhZbfvjrJm --message specific_flip --args \"true\", \"2\" --value 50 --url wss://rpc1.paseo.popnetwork.xyz/ --suri //Alice --execute", + "pop call contract --path {} --contract 15XausWjFLBBFLDXUSBRfSfZk25warm4wZRV4ZxhZbfvjrJm --message specific_flip --args \"true\", \"2\" --value 50 --url wss://rpc1.paseo.popnetwork.xyz/ --use-wallet --execute", temp_dir.path().join("testing").display().to_string(), )); @@ -877,6 +972,7 @@ mod tests { proof_size: None, url: Url::parse(DEFAULT_URL)?, suri: DEFAULT_URI.to_string(), + use_wallet: false, dry_run: false, execute: false, dev_mode: true, @@ -935,6 +1031,7 @@ mod tests { proof_size: None, url: Url::parse("wss://rpc1.paseo.popnetwork.xyz")?, suri: "//Alice".to_string(), + use_wallet: false, dry_run: false, execute: false, dev_mode: false, @@ -984,6 +1081,7 @@ mod tests { proof_size: None, url: Url::parse("wss://rpc1.paseo.popnetwork.xyz")?, suri: "//Alice".to_string(), + use_wallet: false, dry_run: false, execute: false, dev_mode: false, @@ -1002,6 +1100,7 @@ mod tests { proof_size: None, url: Url::parse("wss://rpc1.paseo.popnetwork.xyz")?, suri: "//Alice".to_string(), + use_wallet: false, dry_run: false, execute: false, dev_mode: false, @@ -1025,6 +1124,7 @@ mod tests { proof_size: None, url: Url::parse("wss://rpc1.paseo.popnetwork.xyz")?, suri: "//Alice".to_string(), + use_wallet: false, dry_run: false, execute: false, dev_mode: false, @@ -1055,6 +1155,7 @@ mod tests { proof_size: None, url: Url::parse("wss://rpc1.paseo.popnetwork.xyz")?, suri: "//Alice".to_string(), + use_wallet: false, dry_run: false, execute: false, dev_mode: false, diff --git a/crates/pop-cli/src/commands/call/mod.rs b/crates/pop-cli/src/commands/call/mod.rs index 6cb137f4b..dd1a2318c 100644 --- a/crates/pop-cli/src/commands/call/mod.rs +++ b/crates/pop-cli/src/commands/call/mod.rs @@ -2,6 +2,8 @@ use clap::{Args, Subcommand}; +#[cfg(feature = "parachain")] +pub(crate) mod chain; #[cfg(feature = "contract")] pub(crate) mod contract; @@ -13,9 +15,13 @@ pub(crate) struct CallArgs { pub command: Command, } -/// Call a smart contract. +/// Call a chain or a smart contract. #[derive(Subcommand)] pub(crate) enum Command { + /// Call a chain + #[cfg(feature = "parachain")] + #[clap(alias = "p", visible_aliases = ["parachain"])] + Chain(chain::CallChainCommand), /// Call a contract #[cfg(feature = "contract")] #[clap(alias = "c")] diff --git a/crates/pop-cli/src/commands/clean.rs b/crates/pop-cli/src/commands/clean.rs index a2e219c18..63981fedf 100644 --- a/crates/pop-cli/src/commands/clean.rs +++ b/crates/pop-cli/src/commands/clean.rs @@ -26,7 +26,7 @@ pub(crate) enum Command { #[derive(Args)] pub struct CleanCommandArgs { /// Pass flag to remove all artifacts - #[arg(short = 'a', long)] + #[arg(short, long)] pub(crate) all: bool, } diff --git a/crates/pop-cli/src/commands/install/mod.rs b/crates/pop-cli/src/commands/install/mod.rs index 19b9fd3a2..137a4b117 100644 --- a/crates/pop-cli/src/commands/install/mod.rs +++ b/crates/pop-cli/src/commands/install/mod.rs @@ -53,7 +53,7 @@ pub enum Dependencies { #[command(args_conflicts_with_subcommands = true)] pub(crate) struct InstallArgs { /// Automatically install all dependencies required without prompting for confirmation. - #[clap(short('y'), long)] + #[clap(short = 'y', long)] skip_confirm: bool, } diff --git a/crates/pop-cli/src/commands/mod.rs b/crates/pop-cli/src/commands/mod.rs index aa385f28e..064a34d0b 100644 --- a/crates/pop-cli/src/commands/mod.rs +++ b/crates/pop-cli/src/commands/mod.rs @@ -26,9 +26,9 @@ pub(crate) enum Command { #[clap(alias = "b", about = about_build())] #[cfg(any(feature = "parachain", feature = "contract"))] Build(build::BuildArgs), - /// Call a smart contract. + /// Call a chain or a smart contract. #[clap(alias = "c")] - #[cfg(feature = "contract")] + #[cfg(any(feature = "parachain", feature = "contract"))] Call(call::CallArgs), /// Launch a local network or deploy a smart contract. #[clap(alias = "u")] @@ -88,16 +88,15 @@ impl Command { Self::Build(args) => match args.command { None => build::Command::execute(args).map(|t| json!(t)), Some(cmd) => match cmd { - #[cfg(feature = "parachain")] - build::Command::Parachain(cmd) => cmd.execute().map(|_| Value::Null), - #[cfg(feature = "contract")] - build::Command::Contract(cmd) => cmd.execute().map(|_| Value::Null), #[cfg(feature = "parachain")] build::Command::Spec(cmd) => cmd.execute().await.map(|_| Value::Null), }, }, - #[cfg(feature = "contract")] + #[cfg(any(feature = "parachain", feature = "contract"))] Self::Call(args) => match args.command { + #[cfg(feature = "parachain")] + call::Command::Chain(cmd) => cmd.execute().await.map(|_| Value::Null), + #[cfg(feature = "contract")] call::Command::Contract(cmd) => cmd.execute().await.map(|_| Value::Null), }, #[cfg(any(feature = "parachain", feature = "contract"))] diff --git a/crates/pop-cli/src/commands/new/contract.rs b/crates/pop-cli/src/commands/new/contract.rs index 4c3055966..35a9132c6 100644 --- a/crates/pop-cli/src/commands/new/contract.rs +++ b/crates/pop-cli/src/commands/new/contract.rs @@ -32,17 +32,13 @@ pub struct NewContractCommand { /// The type of contract. #[arg( default_value = ContractType::Examples.as_ref(), - short = 'c', + short, long, value_parser = enum_variants!(ContractType) )] pub(crate) contract_type: Option, /// The template to use. - #[arg( - short = 't', - long, - value_parser = enum_variants!(Contract) - )] + #[arg(short, long, value_parser = enum_variants!(Contract))] pub(crate) template: Option, } diff --git a/crates/pop-cli/src/commands/test/contract.rs b/crates/pop-cli/src/commands/test/contract.rs index 7c5edfa74..36d496163 100644 --- a/crates/pop-cli/src/commands/test/contract.rs +++ b/crates/pop-cli/src/commands/test/contract.rs @@ -8,27 +8,18 @@ use clap::Args; use cliclack::{clear_screen, log::warning, outro}; use pop_contracts::{test_e2e_smart_contract, test_smart_contract}; use std::path::PathBuf; -#[cfg(not(test))] -use {std::time::Duration, tokio::time::sleep}; #[derive(Args)] pub(crate) struct TestContractCommand { - #[arg(short = 'p', long, help = "Path for the contract project [default: current directory]")] + #[arg(short, long, help = "Path for the contract project [default: current directory]")] path: Option, - /// [DEPRECATED] Run e2e tests - #[arg(short = 'f', long = "features", value_parser=["e2e-tests"])] - features: Option, /// Run end-to-end tests - #[arg(short = 'e', long = "e2e")] + #[arg(short, long)] e2e: bool, - #[arg( - short = 'n', - long = "node", - help = "Path to the contracts node to run e2e tests [default: none]" - )] + #[arg(short, long, help = "Path to the contracts node to run e2e tests [default: none]")] node: Option, /// Automatically source the needed binary required without prompting for confirmation. - #[clap(short('y'), long)] + #[clap(short = 'y', long)] skip_confirm: bool, } @@ -37,22 +28,16 @@ impl TestContractCommand { pub(crate) async fn execute(mut self) -> anyhow::Result<&'static str> { clear_screen()?; - let mut show_deprecated = false; - if self.features.is_some() && self.features.clone().unwrap().contains("e2e-tests") { - show_deprecated = true; - self.e2e = true; - } - if self.e2e { Cli.intro("Starting end-to-end tests")?; - if show_deprecated { - warning("NOTE: --features e2e-tests is deprecated. Use --e2e instead.")?; - #[cfg(not(test))] - sleep(Duration::from_secs(3)).await; - } - - self.node = match check_contracts_node_and_prompt(self.skip_confirm).await { + self.node = match check_contracts_node_and_prompt( + &mut Cli, + &crate::cache()?, + self.skip_confirm, + ) + .await + { Ok(binary_path) => Some(binary_path), Err(_) => { warning("🚫 substrate-contracts-node is necessary to run e2e tests. Will try to run tests anyway...")?; diff --git a/crates/pop-cli/src/commands/up/contract.rs b/crates/pop-cli/src/commands/up/contract.rs index 964237642..f46c0776f 100644 --- a/crates/pop-cli/src/commands/up/contract.rs +++ b/crates/pop-cli/src/commands/up/contract.rs @@ -2,23 +2,25 @@ use crate::{ cli::{traits::Cli as _, Cli}, - common::contracts::{check_contracts_node_and_prompt, has_contract_been_built}, + common::{ + contracts::{check_contracts_node_and_prompt, has_contract_been_built, terminate_node}, + wallet::request_signature, + }, style::style, }; use clap::Args; -use cliclack::{confirm, log, log::error, spinner}; +use cliclack::{confirm, log, log::error, spinner, ProgressBar}; use console::{Emoji, Style}; use pop_contracts::{ build_smart_contract, dry_run_gas_estimate_instantiate, dry_run_upload, - instantiate_smart_contract, is_chain_alive, parse_hex_bytes, run_contracts_node, - set_up_deployment, set_up_upload, upload_smart_contract, UpOpts, Verbosity, + get_code_hash_from_event, get_contract_code, get_instantiate_payload, get_upload_payload, + instantiate_contract_signed, instantiate_smart_contract, is_chain_alive, parse_hex_bytes, + run_contracts_node, set_up_deployment, set_up_upload, upload_contract_signed, + upload_smart_contract, UpOpts, Verbosity, }; use sp_core::Bytes; use sp_weights::Weight; -use std::{ - path::PathBuf, - process::{Child, Command}, -}; +use std::path::PathBuf; use tempfile::NamedTempFile; use url::Url; @@ -30,49 +32,58 @@ const FAILED: &str = "🚫 Deployment failed."; #[derive(Args, Clone)] pub struct UpContractCommand { /// Path to the contract build directory. - #[arg(short = 'p', long)] + #[arg(short, long)] path: Option, /// The name of the contract constructor to call. - #[clap(name = "constructor", long, default_value = "new")] + #[clap(short, long, default_value = "new")] constructor: String, /// The constructor arguments, encoded as strings. - #[clap(long, num_args = 0..,)] + #[clap(short, long, num_args = 0..,)] args: Vec, /// Transfers an initial balance to the instantiated contract. - #[clap(name = "value", long, default_value = "0")] + #[clap(short, long, default_value = "0")] value: String, /// Maximum amount of gas to be used for this command. /// If not specified it will perform a dry-run to estimate the gas consumed for the /// instantiation. - #[clap(name = "gas", long)] + #[clap(name = "gas", short, long)] gas_limit: Option, /// Maximum proof size for the instantiation. /// If not specified it will perform a dry-run to estimate the proof size required. - #[clap(long)] + #[clap(short = 'P', long)] proof_size: Option, /// A salt used in the address derivation of the new contract. Use to create multiple /// instances of the same contract code from the same account. - #[clap(long, value_parser = parse_hex_bytes)] + #[clap(short = 'S', long, value_parser = parse_hex_bytes)] salt: Option, /// Websocket endpoint of a chain. - #[clap(name = "url", long, value_parser, default_value = DEFAULT_URL)] + #[clap(short, long, value_parser, default_value = DEFAULT_URL)] url: Url, /// Secret key URI for the account deploying the contract. /// /// e.g. /// - for a dev account "//Alice" /// - with a password "//Alice///SECRET_PASSWORD" - #[clap(name = "suri", long, short, default_value = "//Alice")] + #[clap(short, long, default_value = "//Alice")] suri: String, + /// Use a browser extension wallet to sign the extrinsic. + #[clap( + name = "use-wallet", + long, + default_value = "false", + short('w'), + conflicts_with = "suri" + )] + use_wallet: bool, /// Perform a dry-run via RPC to estimate the gas usage. This does not submit a transaction. - #[clap(long)] + #[clap(short = 'D', long)] dry_run: bool, /// Uploads the contract only, without instantiation. - #[clap(short('u'), long)] + #[clap(short = 'U', long)] upload_only: bool, /// Automatically source or update the needed binary required without prompting for /// confirmation. - #[clap(short('y'), long)] + #[clap(short = 'y', long)] skip_confirm: bool, } @@ -128,7 +139,13 @@ impl UpContractCommand { let log = NamedTempFile::new()?; // uses the cache location - let binary_path = match check_contracts_node_and_prompt(self.skip_confirm).await { + let binary_path = match check_contracts_node_and_prompt( + &mut Cli, + &crate::cache()?, + self.skip_confirm, + ) + .await + { Ok(binary_path) => binary_path, Err(_) => { Cli.outro_cancel( @@ -164,10 +181,89 @@ impl UpContractCommand { None }; + // Run steps for signing with wallet integration. Returns early. + if self.use_wallet { + let (call_data, hash) = match self.get_contract_data().await { + Ok(data) => data, + Err(e) => { + error(format!("An error occurred getting the call data: {e}"))?; + terminate_node(&mut Cli, process)?; + Cli.outro_cancel(FAILED)?; + return Ok(()); + }, + }; + + let maybe_payload = request_signature(call_data, self.url.to_string()).await?; + if let Some(payload) = maybe_payload { + log::success("Signed payload received.")?; + let spinner = spinner(); + spinner.start( + "Uploading the contract and waiting for finalization, please be patient...", + ); + + if self.upload_only { + let upload_result = match upload_contract_signed(self.url.as_str(), payload) + .await + { + Err(e) => { + spinner + .error(format!("An error occurred uploading your contract: {e}")); + terminate_node(&mut Cli, process)?; + Cli.outro_cancel(FAILED)?; + return Ok(()); + }, + Ok(result) => result, + }; + + match get_code_hash_from_event(&upload_result, hash) { + Ok(r) => { + spinner.stop(format!("Contract uploaded: The code hash is {:?}", r)); + }, + Err(e) => { + spinner + .error(format!("An error occurred uploading your contract: {e}")); + }, + }; + } else { + let contract_info = + match instantiate_contract_signed(self.url.as_str(), payload).await { + Err(e) => { + spinner.error(format!( + "An error occurred uploading your contract: {e}" + )); + terminate_node(&mut Cli, process)?; + Cli.outro_cancel(FAILED)?; + return Ok(()); + }, + Ok(result) => result, + }; + + let hash = contract_info.code_hash.map(|code_hash| format!("{:?}", code_hash)); + display_contract_info( + &spinner, + contract_info.contract_address.to_string(), + hash, + ); + }; + + if self.upload_only { + log::warning("NOTE: The contract has not been instantiated.")?; + } + } else { + Cli.outro_cancel("Signed payload doesn't exist.")?; + terminate_node(&mut Cli, process)?; + return Ok(()); + } + + terminate_node(&mut Cli, process)?; + Cli.outro(COMPLETE)?; + return Ok(()); + } + // Check for upload only. if self.upload_only { let result = self.upload_contract().await; - Self::terminate_node(process)?; + terminate_node(&mut Cli, process)?; match result { Ok(_) => { Cli.outro(COMPLETE)?; @@ -180,23 +276,11 @@ impl UpContractCommand { } // Otherwise instantiate. - let instantiate_exec = match set_up_deployment(UpOpts { - path: self.path.clone(), - constructor: self.constructor.clone(), - args: self.args.clone(), - value: self.value.clone(), - gas_limit: self.gas_limit, - proof_size: self.proof_size, - salt: self.salt.clone(), - url: self.url.clone(), - suri: self.suri.clone(), - }) - .await - { + let instantiate_exec = match set_up_deployment(self.clone().into()).await { Ok(i) => i, Err(e) => { error(format!("An error occurred instantiating the contract: {e}"))?; - Self::terminate_node(process)?; + terminate_node(&mut Cli, process)?; Cli.outro_cancel(FAILED)?; return Ok(()); }, @@ -214,7 +298,7 @@ impl UpContractCommand { }, Err(e) => { spinner.error(format!("{e}")); - Self::terminate_node(process)?; + terminate_node(&mut Cli, process)?; Cli.outro_cancel(FAILED)?; return Ok(()); }, @@ -226,30 +310,13 @@ impl UpContractCommand { let spinner = spinner(); spinner.start("Uploading and instantiating the contract..."); let contract_info = instantiate_smart_contract(instantiate_exec, weight_limit).await?; - spinner.stop(format!( - "Contract deployed and instantiated:\n{}", - style(format!( - "{}\n{}", - style(format!( - "{} The contract address is {:?}", - console::Emoji("●", ">"), - contract_info.address - )) - .dim(), - contract_info - .code_hash - .map(|hash| style(format!( - "{} The contract code hash is {:?}", - console::Emoji("●", ">"), - hash - )) - .dim() - .to_string()) - .unwrap_or_default(), - )) - .dim() - )); - Self::terminate_node(process)?; + display_contract_info( + &spinner, + contract_info.address.to_string(), + contract_info.code_hash, + ); + + terminate_node(&mut Cli, process)?; Cli.outro(COMPLETE)?; } @@ -291,27 +358,25 @@ impl UpContractCommand { Ok(()) } - /// Handles the optional termination of a local running node. - fn terminate_node(process: Option<(Child, NamedTempFile)>) -> anyhow::Result<()> { - // Prompt to close any launched node - let Some((process, log)) = process else { - return Ok(()); - }; - if confirm("Would you like to terminate the local node?") - .initial_value(true) - .interact()? - { - // Stop the process contracts-node - Command::new("kill") - .args(["-s", "TERM", &process.id().to_string()]) - .spawn()? - .wait()?; + // get the call data and contract code hash + async fn get_contract_data(&self) -> anyhow::Result<(Vec, [u8; 32])> { + let contract_code = get_contract_code(self.path.as_ref())?; + let hash = contract_code.code_hash(); + if self.upload_only { + let call_data = get_upload_payload(contract_code, self.url.as_str()).await?; + Ok((call_data, hash)) } else { - log.keep()?; - log::warning(format!("NOTE: The node is running in the background with process ID {}. Please terminate it manually when done.", process.id()))?; - } + let instantiate_exec = set_up_deployment(self.clone().into()).await?; - Ok(()) + let weight_limit = if self.gas_limit.is_some() && self.proof_size.is_some() { + Weight::from_parts(self.gas_limit.unwrap(), self.proof_size.unwrap()) + } else { + // Frontend will do dry run and update call data. + Weight::zero() + }; + let call_data = get_instantiate_payload(instantiate_exec, weight_limit)?; + Ok((call_data, hash)) + } } } @@ -331,14 +396,44 @@ impl From for UpOpts { } } +fn display_contract_info(spinner: &ProgressBar, address: String, code_hash: Option) { + spinner.stop(format!( + "Contract deployed and instantiated:\n{}", + style(format!( + "{}\n{}", + style(format!("{} The contract address is {:?}", console::Emoji("●", ">"), address)) + .dim(), + code_hash + .map(|hash| style(format!( + "{} The contract code hash is {:?}", + console::Emoji("●", ">"), + hash + )) + .dim() + .to_string()) + .unwrap_or_default(), + )) + .dim() + )); +} + #[cfg(test)] mod tests { use super::*; + use pop_common::{find_free_port, set_executable_permission}; + use pop_contracts::{contracts_node_generator, mock_build_process, new_environment}; + use std::{ + env, + process::{Child, Command}, + time::Duration, + }; + use subxt::{tx::Payload, SubstrateConfig}; + use tempfile::TempDir; + use tokio::time::sleep; use url::Url; - #[test] - fn conversion_up_contract_command_to_up_opts_works() -> anyhow::Result<()> { - let command = UpContractCommand { + fn default_up_contract_command() -> UpContractCommand { + UpContractCommand { path: None, constructor: "new".to_string(), args: vec![], @@ -346,12 +441,40 @@ mod tests { gas_limit: None, proof_size: None, salt: None, - url: Url::parse("ws://localhost:9944")?, + url: Url::parse("ws://localhost:9944").expect("default url is valid"), suri: "//Alice".to_string(), dry_run: false, upload_only: false, skip_confirm: false, - }; + use_wallet: false, + } + } + + async fn start_test_environment() -> anyhow::Result<(Child, u16, TempDir)> { + let random_port = find_free_port(None); + let temp_dir = new_environment("testing")?; + let current_dir = env::current_dir().expect("Failed to get current directory"); + mock_build_process( + temp_dir.path().join("testing"), + current_dir.join("../pop-contracts/tests/files/testing.contract"), + current_dir.join("../pop-contracts/tests/files/testing.json"), + )?; + let cache = temp_dir.path().join(""); + let binary = contracts_node_generator(cache.clone(), None).await?; + binary.source(false, &(), true).await?; + set_executable_permission(binary.path())?; + let process = run_contracts_node(binary.path(), None, random_port).await?; + Ok((process, random_port, temp_dir)) + } + + fn stop_test_environment(id: &str) -> anyhow::Result<()> { + Command::new("kill").args(["-s", "TERM", id]).spawn()?.wait()?; + Ok(()) + } + + #[test] + fn conversion_up_contract_command_to_up_opts_works() -> anyhow::Result<()> { + let command = default_up_contract_command(); let opts: UpOpts = command.into(); assert_eq!( opts, @@ -369,4 +492,108 @@ mod tests { ); Ok(()) } + + #[tokio::test] + async fn get_upload_and_instantiate_call_data_works() -> anyhow::Result<()> { + let (contracts_node_process, port, temp_dir) = start_test_environment().await?; + sleep(Duration::from_secs(5)).await; + + get_upload_call_data_works(port, temp_dir.path().join("testing")).await?; + get_instantiate_call_data_works(port, temp_dir.path().join("testing")).await?; + + // Stop running contracts-node + stop_test_environment(&contracts_node_process.id().to_string())?; + Ok(()) + } + + async fn get_upload_call_data_works(port: u16, temp_dir: PathBuf) -> anyhow::Result<()> { + let localhost_url = format!("ws://127.0.0.1:{}", port); + + let up_contract_opts = UpContractCommand { + path: Some(temp_dir), + constructor: "new".to_string(), + args: vec![], + value: "0".to_string(), + gas_limit: None, + proof_size: None, + salt: None, + url: Url::parse(&localhost_url).expect("given url is valid"), + suri: "//Alice".to_string(), + dry_run: false, + upload_only: true, + skip_confirm: true, + use_wallet: true, + }; + + let rpc_client = subxt::backend::rpc::RpcClient::from_url(&up_contract_opts.url).await?; + let client = subxt::OnlineClient::::from_rpc_client(rpc_client).await?; + + // Retrieve call data based on the above command options. + let (retrieved_call_data, _) = match up_contract_opts.get_contract_data().await { + Ok(data) => data, + Err(e) => { + error(format!("An error occurred getting the call data: {e}"))?; + return Err(e); + }, + }; + // We have retrieved some payload. + assert!(!retrieved_call_data.is_empty()); + + // Craft encoded call data for an upload code call. + let contract_code = get_contract_code(up_contract_opts.path.as_ref())?; + let storage_deposit_limit: Option = None; + let upload_code = contract_extrinsics::extrinsic_calls::UploadCode::new( + contract_code, + storage_deposit_limit, + contract_extrinsics::upload::Determinism::Enforced, + ); + let expected_call_data = upload_code.build(); + let mut encoded_expected_call_data = Vec::::new(); + expected_call_data + .encode_call_data_to(&client.metadata(), &mut encoded_expected_call_data)?; + + // Retrieved call data and calculated match. + assert_eq!(retrieved_call_data, encoded_expected_call_data); + Ok(()) + } + + async fn get_instantiate_call_data_works(port: u16, temp_dir: PathBuf) -> anyhow::Result<()> { + let localhost_url = format!("ws://127.0.0.1:{}", port); + + let up_contract_opts = UpContractCommand { + path: Some(temp_dir), + constructor: "new".to_string(), + args: vec!["false".to_string()], + value: "0".to_string(), + gas_limit: Some(200_000_000), + proof_size: Some(30_000), + salt: None, + url: Url::parse(&localhost_url).expect("given url is valid"), + suri: "//Alice".to_string(), + dry_run: false, + upload_only: false, + skip_confirm: true, + use_wallet: true, + }; + + // Retrieve call data based on the above command options. + let (retrieved_call_data, _) = match up_contract_opts.get_contract_data().await { + Ok(data) => data, + Err(e) => { + error(format!("An error occurred getting the call data: {e}"))?; + return Err(e); + }, + }; + // We have retrieved some payload. + assert!(!retrieved_call_data.is_empty()); + + // Craft instantiate call data. + let weight = Weight::from_parts(200_000_000, 30_000); + let expected_call_data = + get_instantiate_payload(set_up_deployment(up_contract_opts.into()).await?, weight)?; + // Retrieved call data matches the one crafted above. + assert_eq!(retrieved_call_data, expected_call_data); + + Ok(()) + } } diff --git a/crates/pop-cli/src/commands/up/parachain.rs b/crates/pop-cli/src/commands/up/parachain.rs index 2a8da10af..30fc6fce0 100644 --- a/crates/pop-cli/src/commands/up/parachain.rs +++ b/crates/pop-cli/src/commands/up/parachain.rs @@ -3,13 +3,13 @@ use crate::style::{style, Theme}; use clap::Args; use cliclack::{ - clear_screen, confirm, intro, log, multi_progress, outro, outro_cancel, set_theme, ProgressBar, - Theme as _, ThemeState, + clear_screen, confirm, intro, log, multi_progress, outro, outro_cancel, set_theme, spinner, + ProgressBar, Theme as _, ThemeState, }; use console::{Emoji, Style, Term}; use duct::cmd; use pop_common::Status; -use pop_parachains::{Error, IndexSet, NetworkNode, Zombienet}; +use pop_parachains::{clear_dmpq, Error, IndexSet, NetworkNode, RelayChain, Zombienet}; use std::{path::Path, time::Duration}; use tokio::time::sleep; @@ -40,13 +40,13 @@ pub(crate) struct ZombienetCommand { #[arg(short, long)] parachain: Option>, /// The command to run after the network has been launched. - #[clap(name = "cmd", short = 'c', long)] + #[clap(name = "cmd", short, long)] command: Option, /// Whether the output should be verbose. #[arg(short, long, action)] verbose: bool, /// Automatically source all needed binaries required without prompting for confirmation. - #[clap(short('y'), long)] + #[clap(short = 'y', long)] skip_confirm: bool, } @@ -91,8 +91,8 @@ impl ZombienetCommand { } // Finally spawn network and wait for signal to terminate - let spinner = cliclack::spinner(); - spinner.start("🚀 Launching local network..."); + let progress = spinner(); + progress.start("🚀 Launching local network..."); match zombienet.spawn().await { Ok(network) => { let mut result = @@ -143,10 +143,39 @@ impl ZombienetCommand { } if let Some(command) = &self.command { - run_custom_command(&spinner, command).await?; + run_custom_command(&progress, command).await?; + } + + progress.stop(result); + + // Check for any specified channels + if zombienet.hrmp_channels() { + let relay_chain = zombienet.relay_chain(); + match RelayChain::from(relay_chain) { + None => { + log::error(format!("🚫 Using `{relay_chain}` with HRMP channels is currently unsupported. Please use `paseo-local` or `westend-local`."))?; + }, + Some(_) => { + let progress = spinner(); + progress.start("Connecting to relay chain to prepare channels..."); + // Allow relay node time to start + sleep(Duration::from_secs(10)).await; + progress.set_message("Preparing channels..."); + let relay_endpoint = network.relaychain().nodes()[0].client().await?; + let para_ids: Vec<_> = + network.parachains().iter().map(|p| p.para_id()).collect(); + tokio::spawn(async move { + if let Err(e) = clear_dmpq(relay_endpoint, ¶_ids).await { + progress.stop(format!("🚫 Could not prepare channels: {e}")); + return Ok::<(), Error>(()); + } + progress.stop("Channels successfully prepared for initialization."); + Ok::<(), Error>(()) + }); + }, + } } - spinner.stop(result); tokio::signal::ctrl_c().await?; outro("Done")?; }, diff --git a/crates/pop-cli/src/common/contracts.rs b/crates/pop-cli/src/common/contracts.rs index 3d0be11f6..a3b8f878c 100644 --- a/crates/pop-cli/src/common/contracts.rs +++ b/crates/pop-cli/src/common/contracts.rs @@ -1,22 +1,33 @@ // SPDX-License-Identifier: GPL-3.0 -use cliclack::{confirm, log::warning, spinner}; +use crate::cli::traits::*; +use cliclack::spinner; use pop_common::{manifest::from_path, sourcing::set_executable_permission}; use pop_contracts::contracts_node_generator; -use std::path::{Path, PathBuf}; +use std::{ + path::{Path, PathBuf}, + process::{Child, Command}, +}; +use tempfile::NamedTempFile; /// Checks the status of the `substrate-contracts-node` binary, sources it if necessary, and /// prompts the user to update it if the existing binary is not the latest version. /// /// # Arguments +/// * `cli`: Command line interface. +/// * `cache_path`: The cache directory path. /// * `skip_confirm`: A boolean indicating whether to skip confirmation prompts. -pub async fn check_contracts_node_and_prompt(skip_confirm: bool) -> anyhow::Result { - let cache_path: PathBuf = crate::cache()?; - let mut binary = contracts_node_generator(cache_path, None).await?; +pub async fn check_contracts_node_and_prompt( + cli: &mut impl Cli, + cache_path: &Path, + skip_confirm: bool, +) -> anyhow::Result { + let mut binary = contracts_node_generator(PathBuf::from(cache_path), None).await?; let mut node_path = binary.path(); if !binary.exists() { - warning("⚠️ The substrate-contracts-node binary is not found.")?; - if confirm("📦 Would you like to source it automatically now?") + cli.warning("⚠️ The substrate-contracts-node binary is not found.")?; + if cli + .confirm("📦 Would you like to source it automatically now?") .initial_value(true) .interact()? { @@ -33,14 +44,14 @@ pub async fn check_contracts_node_and_prompt(skip_confirm: bool) -> anyhow::Resu } } if binary.stale() { - warning(format!( + cli.warning(format!( "ℹ️ There is a newer version of {} available:\n {} -> {}", binary.name(), binary.version().unwrap_or("None"), binary.latest().unwrap_or("None") ))?; let latest = if !skip_confirm { - confirm( + cli.confirm( "📦 Would you like to source it automatically now? It may take some time..." .to_string(), ) @@ -68,6 +79,36 @@ pub async fn check_contracts_node_and_prompt(skip_confirm: bool) -> anyhow::Resu Ok(node_path) } +/// Handles the optional termination of a local running node. +/// # Arguments +/// * `cli`: Command line interface. +/// * `process`: Tuple identifying the child process to terminate and its log file. +pub fn terminate_node( + cli: &mut impl Cli, + process: Option<(Child, NamedTempFile)>, +) -> anyhow::Result<()> { + // Prompt to close any launched node + let Some((process, log)) = process else { + return Ok(()); + }; + if cli + .confirm("Would you like to terminate the local node?") + .initial_value(true) + .interact()? + { + // Stop the process contracts-node + Command::new("kill") + .args(["-s", "TERM", &process.id().to_string()]) + .spawn()? + .wait()?; + } else { + log.keep()?; + cli.warning(format!("NOTE: The node is running in the background with process ID {}. Please terminate it manually when done.", process.id()))?; + } + + Ok(()) +} + /// Checks if a contract has been built by verifying the existence of the build directory and the /// .contract file. /// @@ -88,8 +129,12 @@ pub fn has_contract_been_built(path: Option<&Path>) -> bool { #[cfg(test)] mod tests { use super::*; + use crate::cli::MockCli; use duct::cmd; + use pop_common::find_free_port; + use pop_contracts::{is_chain_alive, run_contracts_node}; use std::fs::{self, File}; + use url::Url; #[test] fn has_contract_been_built_works() -> anyhow::Result<()> { @@ -111,4 +156,38 @@ mod tests { assert!(has_contract_been_built(Some(&path.join(name)))); Ok(()) } + + #[tokio::test] + async fn check_contracts_node_and_prompt_works() -> anyhow::Result<()> { + let cache_path = tempfile::tempdir().expect("Could create temp dir"); + let mut cli = MockCli::new() + .expect_warning("⚠️ The substrate-contracts-node binary is not found.") + .expect_confirm("📦 Would you like to source it automatically now?", true) + .expect_warning("⚠️ The substrate-contracts-node binary is not found."); + + let node_path = check_contracts_node_and_prompt(&mut cli, cache_path.path(), false).await?; + // Binary path is at least equal to the cache path + "substrate-contracts-node". + assert!(node_path + .to_str() + .unwrap() + .starts_with(&cache_path.path().join("substrate-contracts-node").to_str().unwrap())); + cli.verify() + } + + #[tokio::test] + async fn node_is_terminated() -> anyhow::Result<()> { + let cache = tempfile::tempdir().expect("Could not create temp dir"); + let binary = contracts_node_generator(PathBuf::from(cache.path()), None).await?; + binary.source(false, &(), true).await?; + set_executable_permission(binary.path())?; + let port = find_free_port(None); + let process = run_contracts_node(binary.path(), None, port).await?; + let log = NamedTempFile::new()?; + // Terminate the process. + let mut cli = + MockCli::new().expect_confirm("Would you like to terminate the local node?", true); + assert!(terminate_node(&mut cli, Some((process, log))).is_ok()); + assert_eq!(is_chain_alive(Url::parse(&format!("ws://localhost:{}", port))?).await?, false); + cli.verify() + } } diff --git a/crates/pop-cli/src/common/mod.rs b/crates/pop-cli/src/common/mod.rs index 1cb3ee579..4a89036e5 100644 --- a/crates/pop-cli/src/common/mod.rs +++ b/crates/pop-cli/src/common/mod.rs @@ -3,3 +3,4 @@ #[cfg(feature = "contract")] pub mod contracts; pub mod helpers; +pub mod wallet; diff --git a/crates/pop-cli/src/common/wallet.rs b/crates/pop-cli/src/common/wallet.rs new file mode 100644 index 000000000..1aedd0294 --- /dev/null +++ b/crates/pop-cli/src/common/wallet.rs @@ -0,0 +1,67 @@ +// SPDX-License-Identifier: GPL-3.0 + +use crate::{ + cli::traits::Cli, + wallet_integration::{FrontendFromString, TransactionData, WalletIntegrationManager}, +}; +use cliclack::{log, spinner}; + +/// The prompt to ask the user if they want to use the wallet for signing. +pub const USE_WALLET_PROMPT: &str = "Do you want to use your browser wallet to sign the extrinsic? (Selecting 'No' will prompt you to manually enter the secret key URI for signing, e.g., '//Alice')"; + +/// Launches the wallet integration for in-browser signing. Blocks until the signature is received. +/// +/// # Arguments +/// * `call_data` - The call data to be signed. +/// * `url` - Chain rpc. +/// # Returns +/// * The signed payload, if it exists. +pub async fn request_signature(call_data: Vec, rpc: String) -> anyhow::Result> { + let ui = FrontendFromString::new(include_str!("../assets/index.html").to_string()); + + let transaction_data = TransactionData::new(rpc, call_data); + // Starts server with port 9090. + let mut wallet = WalletIntegrationManager::new(ui, transaction_data, Some(9090)); + let url = format!("http://{}", &wallet.server_url); + log::step(format!("Wallet signing portal started at {url}."))?; + + let spinner = spinner(); + spinner.start(format!("Opening browser to {url}")); + if let Err(e) = open::that(url) { + spinner.error(format!("Failed to launch browser. Please open link manually. {e}")); + } + + spinner.start("Waiting for signature... Press Ctrl+C to terminate early."); + loop { + // Display error, if any. + if let Some(error) = wallet.take_error().await { + log::error(format!("Signing portal error: {error}"))?; + } + + let state = wallet.state.lock().await; + // If the payload is submitted we terminate the frontend. + if !wallet.is_running() || state.signed_payload.is_some() { + wallet.task_handle.await??; + break; + } + } + spinner.stop(""); + + let signed_payload = wallet.state.lock().await.signed_payload.take(); + Ok(signed_payload) +} + +/// Prompts the user to use the wallet for signing. +/// # Arguments +/// * `cli` - The CLI instance. +/// # Returns +/// * `true` if the user wants to use the wallet, `false` otherwise. +pub fn prompt_to_use_wallet(cli: &mut impl Cli) -> anyhow::Result { + use crate::cli::traits::Confirm; + + if cli.confirm(USE_WALLET_PROMPT).initial_value(true).interact()? { + Ok(true) + } else { + Ok(false) + } +} diff --git a/crates/pop-cli/src/main.rs b/crates/pop-cli/src/main.rs index 9a41fd7c1..f8e3504e5 100644 --- a/crates/pop-cli/src/main.rs +++ b/crates/pop-cli/src/main.rs @@ -19,6 +19,7 @@ mod cli; mod commands; mod common; mod style; +mod wallet_integration; #[tokio::main] async fn main() -> Result<()> { diff --git a/crates/pop-cli/src/wallet_integration.rs b/crates/pop-cli/src/wallet_integration.rs new file mode 100644 index 000000000..92e3395ec --- /dev/null +++ b/crates/pop-cli/src/wallet_integration.rs @@ -0,0 +1,579 @@ +use axum::{ + http::HeaderValue, + response::Html, + routing::{get, post}, + Router, +}; +use pop_common::find_free_port; +use serde::Serialize; +use std::{path::PathBuf, sync::Arc}; +use tokio::{ + sync::{oneshot, Mutex}, + task::JoinHandle, +}; +use tower_http::{cors::Any, services::ServeDir}; + +/// Make frontend sourcing more flexible by allowing a custom route to be defined. +pub trait Frontend { + /// Serves the content via a [Router]. + fn serve_content(&self) -> Router; +} + +/// Transaction payload to be sent to frontend for signing. +#[derive(Serialize, Debug)] +#[cfg_attr(test, derive(serde::Deserialize, Clone))] +pub struct TransactionData { + chain_rpc: String, + call_data: Vec, +} + +impl TransactionData { + /// Create a new transaction payload. + /// # Arguments + /// * `chain_rpc`: The RPC of the chain. + /// * `call_data`: the call data. + /// # Returns + /// The transaction payload to be sent to frontend for signing. + pub fn new(chain_rpc: String, call_data: Vec) -> Self { + Self { chain_rpc, call_data } + } +} + +/// Shared state between routes. Serves two purposes: +/// - Maintains a channel to signal shutdown to the main app. +/// - Stores the signed payload received from the wallet. +#[derive(Default)] +pub struct StateHandler { + /// Channel to signal shutdown to the main app. + shutdown_tx: Option>, + /// Received from UI. + pub signed_payload: Option, + /// Holds a single error message. + /// Only method for consuming error removes (takes) it from state. + error: Option, +} + +/// Manages the wallet integration for secure signing of transactions. +pub struct WalletIntegrationManager { + pub server_url: String, + /// Shared state between routes. + pub state: Arc>, + /// Web server task handle. + pub task_handle: JoinHandle>, +} + +impl WalletIntegrationManager { + /// Launches a server for hosting the wallet integration. Server launched in separate task. + /// # Arguments + /// * `frontend`: A frontend with custom route to serve content. + /// * `payload`: Payload to be sent to the frontend for signing. + /// * `maybe_port`: Optional port for server to bind to. `None` will result in a random port. + /// + /// # Returns + /// A `WalletIntegrationManager` instance, with access to the state and task handle for the + /// server. + pub fn new( + frontend: F, + payload: TransactionData, + maybe_port: Option, + ) -> Self { + let port = find_free_port(maybe_port); + Self::new_with_address(frontend, payload, format!("127.0.0.1:{}", port)) + } + + /// Same as `new`, but allows specifying the address to bind to. + /// # Arguments + /// * `frontend`: A frontend with custom route to serve content. + /// * `payload`: Payload to be sent to the frontend for signing. + /// * `server_url`: The address to bind to. + /// + /// # Returns + /// A `WalletIntegrationManager` instance, with access to the state and task handle for the + pub fn new_with_address( + frontend: F, + payload: TransactionData, + server_url: String, + ) -> Self { + // Channel to signal shutdown. + let (tx, rx) = oneshot::channel(); + + let state = Arc::new(Mutex::new(StateHandler { + shutdown_tx: Some(tx), + signed_payload: None, + error: None, + })); + + let payload = Arc::new(payload); + + let cors = tower_http::cors::CorsLayer::new() + .allow_origin(server_url.parse::().expect("invalid server url")) + .allow_methods(Any) // Allow any HTTP method + .allow_headers(Any); // Allow any headers (like 'Content-Type') + + let app = Router::new() + .route("/payload", get(routes::get_payload_handler).with_state(payload)) + .route("/submit", post(routes::submit_handler).with_state(state.clone())) + .route("/error", post(routes::error_handler).with_state(state.clone())) + .route("/terminate", post(routes::terminate_handler).with_state(state.clone())) + .merge(frontend.serve_content()) // Custom route for serving frontend. + .layer(cors); + + let url_owned = server_url.to_string(); + + // Will shut down when the signed payload is received. + let task_handle = tokio::spawn(async move { + let listener = tokio::net::TcpListener::bind(&url_owned) + .await + .map_err(|e| anyhow::anyhow!("Failed to bind to {}: {}", url_owned, e))?; + + axum::serve(listener, app) + .with_graceful_shutdown(async move { + let _ = rx.await.ok(); + }) + .await + .map_err(|e| anyhow::anyhow!("Server encountered an error: {}", e))?; + Ok(()) + }); + + Self { state, server_url, task_handle } + } + + /// Signals the wallet integration server to shut down. + #[allow(dead_code)] + pub async fn terminate(&mut self) -> anyhow::Result<()> { + terminate_helper(&self.state).await + } + + /// Checks if the server task is still running. + pub fn is_running(&self) -> bool { + !self.task_handle.is_finished() + } + + /// Takes the error from the state if it exists. + pub async fn take_error(&mut self) -> Option { + self.state.lock().await.error.take() + } +} + +mod routes { + use super::{terminate_helper, Arc, Mutex, StateHandler, TransactionData}; + use anyhow::Error; + use axum::{ + extract::State, + http::StatusCode, + response::{IntoResponse, Response}, + Json, + }; + use serde_json::json; + + pub(super) struct ApiError(Error); + + impl From for ApiError { + fn from(err: Error) -> Self { + ApiError(err) + } + } + + // Implementing IntoResponse for ApiError allows us to return it directly from a route handler. + impl IntoResponse for ApiError { + fn into_response(self) -> Response { + let body = json!({ + "error": self.0.to_string(), + }); + (StatusCode::INTERNAL_SERVER_ERROR, Json(body)).into_response() + } + } + + /// Responds with the serialized JSON data for signing. + pub(super) async fn get_payload_handler( + State(payload): State>, + ) -> Result, ApiError> { + // Error should never occur. + let json_payload = serde_json::to_value(&*payload) + .map_err(|e| anyhow::anyhow!("Failed to serialize payload: {}", e))?; + Ok(Json(json_payload)) + } + + /// Receives the signed payload from the wallet. + /// Will signal for shutdown on success. + pub(super) async fn submit_handler( + State(state): State>>, + Json(payload): Json, + ) -> Result, ApiError> { + // Signal shutdown. + let res = terminate_helper(&state).await; + + let mut state_locked = state.lock().await; + state_locked.signed_payload = Some(payload); + + res?; + + // Graceful shutdown ensures response is sent before shutdown. + Ok(Json(json!({"status": "success"}))) + } + + /// Receives an error message from the wallet. + pub(super) async fn error_handler( + State(state): State>>, + Json(error): Json, + ) { + let mut state = state.lock().await; + state.error = Some(error); + } + + /// Allows the server to be terminated from the frontend. + pub(super) async fn terminate_handler( + State(state): State>>, + ) -> Result<(), ApiError> { + Ok(terminate_helper(&state).await?) + } +} + +async fn terminate_helper(handle: &Arc>) -> anyhow::Result<()> { + if let Some(shutdown_tx) = handle.lock().await.shutdown_tx.take() { + shutdown_tx + .send(()) + .map_err(|_| anyhow::anyhow!("Failed to send shutdown signal"))?; + } + Ok(()) +} + +/// Serves static files from a directory. +pub struct FrontendFromDir { + content: PathBuf, +} +#[allow(dead_code)] +impl FrontendFromDir { + /// A new static server. + /// # Arguments + /// * `content`: A directory path. + pub fn new(content: PathBuf) -> Self { + Self { content } + } +} + +impl Frontend for FrontendFromDir { + fn serve_content(&self) -> Router { + Router::new().nest_service("/", ServeDir::new(self.content.clone())) + } +} + +/// Serves a hard-coded HTML string as the frontend. +pub struct FrontendFromString { + content: String, +} + +#[allow(dead_code)] +impl FrontendFromString { + /// A new static server. + /// # Arguments + /// * `content`: A hard-coded HTML string + pub fn new(content: String) -> Self { + Self { content } + } +} + +impl Frontend for FrontendFromString { + fn serve_content(&self) -> Router { + let content = self.content.clone(); + Router::new().route("/", get(move || async { Html(content) })) + } +} + +#[cfg(test)] +mod tests { + use super::*; + use serde_json::json; + + const TEST_HTML: &str = "Hello, world!"; + + // Wait for server to launch. + async fn wait() { + tokio::time::sleep(tokio::time::Duration::from_millis(100)).await; + } + + fn default_payload() -> TransactionData { + TransactionData { chain_rpc: "localhost:9944".to_string(), call_data: vec![1, 2, 3] } + } + + #[tokio::test] + async fn new_works() { + let frontend = FrontendFromString::new(TEST_HTML.to_string()); + let mut wim = WalletIntegrationManager::new(frontend, default_payload(), Some(9190)); + + assert_eq!(wim.server_url, "127.0.0.1:9190"); + assert_eq!(wim.is_running(), true); + assert!(wim.state.lock().await.shutdown_tx.is_some()); + assert!(wim.state.lock().await.signed_payload.is_none()); + + // Terminate the server and make sure result is ok. + wim.terminate().await.expect("Termination should not fail."); + assert!(wim.task_handle.await.is_ok()); + } + + #[tokio::test] + async fn new_with_random_port_works() { + let servers = (0..3) + .map(|_| { + let frontend = FrontendFromString::new(TEST_HTML.to_string()); + WalletIntegrationManager::new(frontend, default_payload(), None) + }) + .collect::>(); + + // Ensure all server URLs are unique + for i in 0..servers.len() { + for j in (i + 1)..servers.len() { + assert_ne!(servers[i].server_url, servers[j].server_url); + } + } + + assert!(servers.iter().all(|server| server.is_running())); + for mut server in servers.into_iter() { + assert!(server.state.lock().await.shutdown_tx.is_some()); + assert!(server.state.lock().await.signed_payload.is_none()); + server.terminate().await.expect("Server termination should not fail"); + + let task_result = server.task_handle.await; + assert!(task_result.is_ok()); + } + } + + #[test] + fn new_transaction_data_works() { + let chain_rpc = "localhost:9944".to_string(); + let call_data = vec![1, 2, 3]; + let transaction_data = TransactionData::new(chain_rpc.clone(), call_data.clone()); + + assert_eq!(transaction_data.chain_rpc, chain_rpc); + assert_eq!(transaction_data.call_data, call_data); + } + + #[tokio::test] + async fn take_error_works() { + let frontend = FrontendFromString::new(TEST_HTML.to_string()); + let mut wim = WalletIntegrationManager::new(frontend, default_payload(), None); + + assert_eq!(wim.take_error().await, None); + + let error = "An error occurred".to_string(); + wim.state.lock().await.error = Some(error.clone()); + + let taken_error = wim.take_error().await; + assert_eq!(taken_error, Some(error)); + } + + #[tokio::test] + async fn payload_handler_works() { + // offset port per test to avoid conflicts + let frontend = FrontendFromString::new(TEST_HTML.to_string()); + let expected_payload = + TransactionData { chain_rpc: "localhost:9944".to_string(), call_data: vec![1, 2, 3] }; + let mut wim = WalletIntegrationManager::new(frontend, expected_payload.clone(), None); + wait().await; + + let addr = format!("http://{}", wim.server_url); + let actual_payload = reqwest::get(&format!("{}/payload", addr)) + .await + .expect("Failed to get payload") + .json::() + .await + .expect("Failed to parse payload"); + + assert_eq!(actual_payload.chain_rpc, expected_payload.chain_rpc); + assert_eq!(actual_payload.call_data, expected_payload.call_data); + + wim.terminate().await.expect("Termination should not fail"); + assert!(wim.task_handle.await.is_ok()); + } + + #[tokio::test] + async fn submit_handler_works() { + let frontend = FrontendFromString::new(TEST_HTML.to_string()); + let mut wim = WalletIntegrationManager::new(frontend, default_payload(), None); + wait().await; + + let addr = format!("http://{}", wim.server_url); + let response = reqwest::Client::new() + .post(&format!("{}/submit", addr)) + .json(&"0xDEADBEEF") + .send() + .await + .expect("Failed to submit payload") + .text() + .await + .expect("Failed to parse response"); + + assert_eq!(response, json!({"status": "success"}).to_string()); + assert_eq!(wim.state.lock().await.signed_payload, Some("0xDEADBEEF".to_string())); + assert_eq!(wim.is_running(), false); + + wim.terminate().await.expect("Termination should not fail"); + assert!(wim.task_handle.await.is_ok()); + } + + #[tokio::test] + async fn error_handler_works() { + let frontend = FrontendFromString::new(TEST_HTML.to_string()); + let mut wim = WalletIntegrationManager::new(frontend, default_payload(), None); + wait().await; + + let addr = format!("http://{}", wim.server_url); + let response = reqwest::Client::new() + .post(&format!("{}/error", addr)) + .json(&"an error occurred") + .send() + .await + .expect("Failed to submit error") + .text() + .await + .expect("Failed to parse response"); + + // no response expected + assert_eq!(response.len(), 0); + assert_eq!(wim.state.lock().await.error, Some("an error occurred".to_string())); + assert_eq!(wim.is_running(), true); + + wim.terminate().await.expect("Termination should not fail"); + assert!(wim.task_handle.await.is_ok()); + } + + #[tokio::test] + async fn terminate_handler_works() { + let frontend = FrontendFromString::new(TEST_HTML.to_string()); + + let wim = WalletIntegrationManager::new(frontend, default_payload(), None); + wait().await; + + let addr = format!("http://{}", wim.server_url); + let response = reqwest::Client::new() + .post(&format!("{}/terminate", addr)) + .send() + .await + .expect("Failed to terminate") + .text() + .await + .expect("Failed to parse response"); + + // No response expected. + assert_eq!(response.len(), 0); + assert_eq!(wim.is_running(), false); + + assert!(wim.task_handle.await.is_ok()); + } + + #[tokio::test] + async fn wallet_terminate_works() { + let frontend = FrontendFromString::new(TEST_HTML.to_string()); + + let mut wim = WalletIntegrationManager::new(frontend, default_payload(), None); + assert_eq!(wim.is_running(), true); + wim.terminate().await.expect("Termination should not fail"); + wait().await; + assert_eq!(wim.is_running(), false); + + wim.terminate().await.expect("Termination should not fail"); + assert!(wim.task_handle.await.is_ok()); + } + + #[tokio::test] + async fn frontend_from_string_works() { + let frontend = FrontendFromString::new(TEST_HTML.to_string()); + let mut wim = WalletIntegrationManager::new(frontend, default_payload(), None); + wait().await; + + let actual_content = reqwest::get(&format!("http://{}", wim.server_url)) + .await + .expect("Failed to get web page") + .text() + .await + .expect("Failed to parse page"); + + assert_eq!(actual_content, TEST_HTML); + + wim.terminate().await.expect("Termination should not fail"); + assert!(wim.task_handle.await.is_ok()); + } + + #[tokio::test] + async fn frontend_from_dir_works() { + use std::fs; + use tempfile::tempdir; + + let temp_dir = tempdir().expect("Failed to create temp directory"); + let index_file_path = temp_dir.path().join("index.html"); + + let test_html = "Hello, world from Directory!"; + fs::write(&index_file_path, test_html).expect("Failed to write index.html"); + + let frontend = FrontendFromDir::new(temp_dir.path().to_path_buf()); + let mut wim = WalletIntegrationManager::new(frontend, default_payload(), None); + wait().await; + + let actual_content = reqwest::get(&format!("http://{}", wim.server_url)) + .await + .expect("Failed to get web page") + .text() + .await + .expect("Failed to parse page"); + + assert_eq!(actual_content, test_html); + + wim.terminate().await.expect("Termination should not fail"); + assert!(wim.task_handle.await.is_ok()); + } + + #[tokio::test] + async fn large_payload_works() { + let frontend = FrontendFromString::new(TEST_HTML.to_string()); + + let call_data_5mb = vec![99u8; 5 * 1024 * 1024]; + + let expected_payload = TransactionData { + chain_rpc: "localhost:9944".to_string(), + call_data: call_data_5mb.clone(), + }; + let mut wim = WalletIntegrationManager::new(frontend, expected_payload.clone(), None); + wait().await; + + let addr = format!("http://{}", wim.server_url); + let actual_payload = reqwest::get(&format!("{}/payload", addr)) + .await + .expect("Failed to get payload") + .json::() + .await + .expect("Failed to parse payload"); + + assert_eq!(actual_payload.chain_rpc, expected_payload.chain_rpc); + assert_eq!(actual_payload.call_data, call_data_5mb); + + wim.terminate().await.expect("Termination should not fail."); + assert!(wim.task_handle.await.is_ok()); + } + + #[tokio::test] + async fn new_with_conflicting_address_fails() { + // offset port per test to avoid conflicts + let addr = "127.0.0.1:9099".to_string(); + + let frontend = FrontendFromString::new(TEST_HTML.to_string()); + let wim = + WalletIntegrationManager::new_with_address(frontend, default_payload(), addr.clone()); + wait().await; + + assert_eq!(wim.is_running(), true); + + let frontend = FrontendFromString::new(TEST_HTML.to_string()); + let wim_conflict = + WalletIntegrationManager::new_with_address(frontend, default_payload(), addr.clone()); + wait().await; + + assert_eq!(wim_conflict.is_running(), false); + let task_result = wim_conflict.task_handle.await.unwrap(); + match task_result { + Err(e) => assert!(e + .to_string() + .starts_with(&format!("Failed to bind to {}: Address already in use", addr))), + Ok(_) => panic!("Expected error, but task succeeded"), + } + } +} diff --git a/crates/pop-cli/tests/contract.rs b/crates/pop-cli/tests/contract.rs index d1d166303..6b8a79b2e 100644 --- a/crates/pop-cli/tests/contract.rs +++ b/crates/pop-cli/tests/contract.rs @@ -2,19 +2,57 @@ use anyhow::Result; use assert_cmd::Command; -use pop_common::{set_executable_permission, templates::Template}; +use pop_common::{find_free_port, set_executable_permission, templates::Template}; use pop_contracts::{ contracts_node_generator, dry_run_gas_estimate_instantiate, instantiate_smart_contract, run_contracts_node, set_up_deployment, Contract, UpOpts, }; -use std::{path::Path, process::Command as Cmd}; +use serde::{Deserialize, Serialize}; +use std::{path::Path, process::Command as Cmd, time::Duration}; use strum::VariantArray; +use subxt::{config::DefaultExtrinsicParamsBuilder as Params, tx::Payload, utils::to_hex}; +use subxt_signer::sr25519::dev; +use tokio::time::sleep; use url::Url; +// This struct implements the [`Payload`] trait and is used to submit +// pre-encoded SCALE call data directly, without the dynamic construction of transactions. +struct CallData(Vec); +impl Payload for CallData { + fn encode_call_data_to( + &self, + _: &subxt::Metadata, + out: &mut Vec, + ) -> Result<(), subxt::ext::subxt_core::Error> { + out.extend_from_slice(&self.0); + Ok(()) + } +} + +// TransactionData has been copied from wallet_integration.rs +/// Transaction payload to be sent to frontend for signing. +#[derive(Serialize, Debug)] +#[cfg_attr(test, derive(Deserialize, Clone))] +pub struct TransactionData { + chain_rpc: String, + call_data: Vec, +} +impl TransactionData { + pub fn new(chain_rpc: String, call_data: Vec) -> Self { + Self { chain_rpc, call_data } + } + pub fn call_data(&self) -> Vec { + self.call_data.clone() + } +} + /// Test the contract lifecycle: new, build, up, call #[tokio::test] async fn contract_lifecycle() -> Result<()> { - const DEFAULT_PORT: u16 = 9944; + const WALLET_INT_URI: &str = "http://127.0.0.1:9090"; + const WAIT_SECS: u64 = 240; + let endpoint_port = find_free_port(None); + let default_endpoint: &str = &format!("ws://127.0.0.1:{}", endpoint_port); let temp = tempfile::tempdir().unwrap(); let temp_dir = temp.path(); //let temp_dir = Path::new("./"); //For testing locally @@ -57,14 +95,15 @@ async fn contract_lifecycle() -> Result<()> { let binary = contracts_node_generator(temp_dir.to_path_buf().clone(), None).await?; binary.source(false, &(), true).await?; set_executable_permission(binary.path())?; - let process = run_contracts_node(binary.path(), None, DEFAULT_PORT).await?; + let process = run_contracts_node(binary.path(), None, endpoint_port).await?; + sleep(Duration::from_secs(5)).await; // Only upload the contract // pop up contract --upload-only Command::cargo_bin("pop") .unwrap() .current_dir(&temp_dir.join("test_contract")) - .args(&["up", "contract", "--upload-only"]) + .args(&["up", "contract", "--upload-only", "--url", default_endpoint]) .assert() .success(); // Instantiate contract, only dry-run @@ -81,6 +120,8 @@ async fn contract_lifecycle() -> Result<()> { "--suri", "//Alice", "--dry-run", + "--url", + default_endpoint, ]) .assert() .success(); @@ -94,7 +135,7 @@ async fn contract_lifecycle() -> Result<()> { gas_limit: None, proof_size: None, salt: None, - url: Url::parse("ws://127.0.0.1:9944")?, + url: Url::parse(default_endpoint)?, suri: "//Alice".to_string(), }) .await?; @@ -114,6 +155,8 @@ async fn contract_lifecycle() -> Result<()> { "get", "--suri", "//Alice", + "--url", + default_endpoint, ]) .assert() .success(); @@ -133,10 +176,70 @@ async fn contract_lifecycle() -> Result<()> { "--suri", "//Alice", "-x", + "--url", + default_endpoint, ]) .assert() .success(); + // pop up contract --upload-only --use-wallet + // Will run http server for wallet integration. + // Using `cargo run --` as means for the CI to pass. + // Possibly there's room for improvement here. + let _ = tokio::process::Command::new("cargo") + .args(&[ + "run", + "--", + "up", + "contract", + "--upload-only", + "--use-wallet", + "--skip-confirm", + "--dry-run", + "-p", + temp_dir.join("test_contract").to_str().expect("to_str"), + "--url", + default_endpoint, + ]) + .spawn()?; + // Wait a moment for node and server to be up. + sleep(Duration::from_secs(WAIT_SECS)).await; + + // Request payload from server. + let response = reqwest::get(&format!("{}/payload", WALLET_INT_URI)) + .await + .expect("Failed to get payload") + .json::() + .await + .expect("Failed to parse payload"); + // We have received some payload. + assert!(!response.call_data().is_empty()); + + let rpc_client = subxt::backend::rpc::RpcClient::from_url(default_endpoint).await?; + let client = subxt::OnlineClient::::from_rpc_client(rpc_client).await?; + + // Sign payload. + let signer = dev::alice(); + let payload = CallData(response.call_data()); + let ext_params = Params::new().build(); + let signed = client.tx().create_signed(&payload, &signer, ext_params).await?; + + // Submit signed payload. This kills the wallet integration server. + let _ = reqwest::Client::new() + .post(&format!("{}/submit", WALLET_INT_URI)) + .json(&to_hex(signed.encoded())) + .send() + .await + .expect("Failed to submit payload") + .text() + .await + .expect("Failed to parse JSON response"); + + // Request payload from server after signed payload has been sent. + // Server should not be running! + let response = reqwest::get(&format!("{}/payload", WALLET_INT_URI)).await; + assert!(response.is_err()); + // Stop the process contracts-node Cmd::new("kill") .args(["-s", "TERM", &process.id().to_string()]) diff --git a/crates/pop-cli/tests/parachain.rs b/crates/pop-cli/tests/parachain.rs index b9baaac58..31ad6bded 100644 --- a/crates/pop-cli/tests/parachain.rs +++ b/crates/pop-cli/tests/parachain.rs @@ -2,13 +2,13 @@ use anyhow::Result; use assert_cmd::{cargo::cargo_bin, Command}; -use pop_common::templates::Template; +use pop_common::{find_free_port, templates::Template}; use pop_parachains::Parachain; use std::{fs, path::Path, process::Command as Cmd}; use strum::VariantArray; use tokio::time::{sleep, Duration}; -/// Test the parachain lifecycle: new, build, up +/// Test the parachain lifecycle: new, build, up, call. #[tokio::test] async fn parachain_lifecycle() -> Result<()> { let temp = tempfile::tempdir().unwrap(); @@ -92,14 +92,86 @@ async fn parachain_lifecycle() -> Result<()> { assert!(content.contains("\"protocolId\": \"pop-protocol\"")); assert!(content.contains("\"id\": \"local_testnet\"")); - // pop up parachain -p "./test_parachain" + // Overwrite the config file to manually set the port to test pop call parachain. + let network_toml_path = temp_parachain_dir.join("network.toml"); + fs::create_dir_all(&temp_parachain_dir)?; + let random_port = find_free_port(None); + let localhost_url = format!("ws://127.0.0.1:{}", random_port); + fs::write( + &network_toml_path, + format!( + r#"[relaychain] +chain = "paseo-local" + +[[relaychain.nodes]] +name = "alice" +rpc_port = {} +validator = true + +[[relaychain.nodes]] +name = "bob" +validator = true + +[[parachains]] +id = 2000 +default_command = "./target/release/parachain-template-node" + +[[parachains.collators]] +name = "collator-01" +"#, + random_port + ), + )?; + + // `pop up parachain -f ./network.toml --skip-confirm` let mut cmd = Cmd::new(cargo_bin("pop")) .current_dir(&temp_parachain_dir) .args(&["up", "parachain", "-f", "./network.toml", "--skip-confirm"]) .spawn() .unwrap(); - // If after 20 secs is still running probably execution is ok, or waiting for user response - sleep(Duration::from_secs(20)).await; + + // Wait for the networks to initialize. Increased timeout to accommodate CI environment delays. + sleep(Duration::from_secs(50)).await; + + // `pop call chain --pallet System --function remark --args "0x11" --url + // ws://127.0.0.1:random_port --suri //Alice --skip-confirm` + Command::cargo_bin("pop") + .unwrap() + .args(&[ + "call", + "chain", + "--pallet", + "System", + "--function", + "remark", + "--args", + "0x11", + "--url", + &localhost_url, + "--suri", + "//Alice", + "--skip-confirm", + ]) + .assert() + .success(); + + // pop call chain --call 0x00000411 --url ws://127.0.0.1:random_port --suri //Alice + // --skip-confirm + Command::cargo_bin("pop") + .unwrap() + .args(&[ + "call", + "chain", + "--call", + "0x00000411", + "--url", + &localhost_url, + "--suri", + "//Alice", + "--skip-confirm", + ]) + .assert() + .success(); assert!(cmd.try_wait().unwrap().is_none(), "the process should still be running"); // Stop the process diff --git a/crates/pop-common/Cargo.toml b/crates/pop-common/Cargo.toml index 87074a601..f81f29827 100644 --- a/crates/pop-common/Cargo.toml +++ b/crates/pop-common/Cargo.toml @@ -10,23 +10,29 @@ repository.workspace = true [dependencies] anyhow.workspace = true cargo_toml.workspace = true +contract-build.workspace = true +contract-extrinsics.workspace = true duct.workspace = true flate2.workspace = true git2.workspace = true git2_credentials.workspace = true +ink_env.workspace = true regex.workspace = true reqwest.workspace = true +scale-info.workspace = true serde_json.workspace = true serde.workspace = true strum.workspace = true strum_macros.workspace = true +subxt.workspace = true +subxt-signer.workspace = true tar.workspace = true tempfile.workspace = true thiserror.workspace = true tokio.workspace = true +toml.workspace = true toml_edit.workspace = true url.workspace = true -toml.workspace = true [dev-dependencies] mockito.workspace = true diff --git a/crates/pop-common/src/build.rs b/crates/pop-common/src/build.rs index f871078ad..85d1eba5a 100644 --- a/crates/pop-common/src/build.rs +++ b/crates/pop-common/src/build.rs @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: GPL-3.0 + use std::{ fmt, path::{Path, PathBuf}, diff --git a/crates/pop-common/src/errors.rs b/crates/pop-common/src/errors.rs index 02fb0c9b1..ceef11500 100644 --- a/crates/pop-common/src/errors.rs +++ b/crates/pop-common/src/errors.rs @@ -3,6 +3,7 @@ use crate::{sourcing, templates}; use thiserror::Error; +/// Represents the various errors that can occur in the crate. #[derive(Error, Debug)] pub enum Error { #[error("Anyhow error: {0}")] @@ -13,12 +14,19 @@ pub enum Error { Git(String), #[error("IO error: {0}")] IO(#[from] std::io::Error), - #[error("Failed to get manifest path: {0}")] - ManifestPath(String), + /// An error occurred while attempting to create a keypair from the provided URI. + #[error("Failed to create keypair from URI: {0}")] + KeyPairCreation(String), #[error("Manifest error: {0}")] ManifestError(#[from] cargo_toml::Error), + /// An error occurred while attempting to retrieve the manifest path. + #[error("Failed to get manifest path: {0}")] + ManifestPath(String), #[error("ParseError error: {0}")] ParseError(#[from] url::ParseError), + /// An error occurred while parsing the provided secret URI. + #[error("Failed to parse secret URI: {0}")] + ParseSecretURI(String), #[error("SourceError error: {0}")] SourceError(#[from] sourcing::Error), #[error("TemplateError error: {0}")] diff --git a/crates/pop-common/src/lib.rs b/crates/pop-common/src/lib.rs index b70dd121b..b4c0c1973 100644 --- a/crates/pop-common/src/lib.rs +++ b/crates/pop-common/src/lib.rs @@ -1,20 +1,32 @@ -pub mod build; -pub mod errors; -pub mod git; -pub mod helpers; -pub mod manifest; -pub mod polkadot_sdk; -pub mod sourcing; -pub mod templates; +// SPDX-License-Identifier: GPL-3.0 + +use std::net::TcpListener; pub use build::Profile; pub use errors::Error; pub use git::{Git, GitHub, Release}; pub use helpers::{get_project_name_from_path, prefix_with_current_dir_if_needed, replace_in_file}; pub use manifest::{add_crate_to_workspace, find_workspace_toml}; +pub use metadata::format_type; +pub use signer::create_signer; pub use sourcing::set_executable_permission; +pub use subxt::{Config, PolkadotConfig as DefaultConfig}; +pub use subxt_signer::sr25519::Keypair; pub use templates::extractor::extract_template_files; +pub mod build; +pub mod errors; +pub mod git; +pub mod helpers; +pub mod manifest; +/// Provides functionality for formatting and resolving metadata types. +pub mod metadata; +pub mod polkadot_sdk; +/// Provides functionality for creating a signer from a secret URI. +pub mod signer; +pub mod sourcing; +pub mod templates; + static APP_USER_AGENT: &str = concat!(env!("CARGO_PKG_NAME"), "/", env!("CARGO_PKG_VERSION")); /// Trait for observing status updates. @@ -52,6 +64,33 @@ pub fn target() -> Result<&'static str, Error> { Err(Error::UnsupportedPlatform { arch: ARCH, os: OS }) } +/// Checks if preferred port is available, otherwise returns a random available port. +pub fn find_free_port(preferred_port: Option) -> u16 { + // Try to bind to preferred port if provided. + if let Some(port) = preferred_port { + if TcpListener::bind(format!("127.0.0.1:{}", port)).is_ok() { + return port; + } + } + + // Else, fallback to a random available port + TcpListener::bind("127.0.0.1:0") + .expect("Failed to bind to an available port") + .local_addr() + .expect("Failed to retrieve local address. This should never occur.") + .port() +} + +/// Provides functionality for making calls to parachains or smart contracts. +pub mod call { + // Note: cargo contract logic is used for parsing events after calling a chain. This could be + // refactored in the future so that we don't have to use cargo contract code in + // `pop-parachains`. + pub use contract_build::Verbosity; + pub use contract_extrinsics::{DisplayEvents, TokenMetadata}; + pub use ink_env::DefaultEnvironment; +} + #[cfg(test)] mod test { use super::*; @@ -71,4 +110,14 @@ mod test { assert_eq!(target()?, target_expected); Ok(()) } + + #[test] + fn find_free_port_works() -> Result<()> { + let port = find_free_port(None); + let addr = format!("127.0.0.1:{}", port); + // Constructs the TcpListener from the above port + let listener = TcpListener::bind(&addr); + assert!(listener.is_ok()); + Ok(()) + } } diff --git a/crates/pop-common/src/metadata.rs b/crates/pop-common/src/metadata.rs new file mode 100644 index 000000000..48f46da28 --- /dev/null +++ b/crates/pop-common/src/metadata.rs @@ -0,0 +1,228 @@ +// SPDX-License-Identifier: GPL-3.0 + +use scale_info::{form::PortableForm, PortableRegistry, Type, TypeDef, TypeDefPrimitive}; + +/// Formats a specified type, using the registry to output its full type representation. +/// +/// # Arguments +/// * `ty`: The type to format, containing metadata like name, parameters, and definition. +/// * `registry`: The registry used to resolve type dependencies and provides details for complex +/// types. +pub fn format_type(ty: &Type, registry: &PortableRegistry) -> String { + let mut name = ty + .path + .segments + .last() + .map(|s| s.to_owned()) + .unwrap_or_else(|| ty.path.to_string()); + + if !ty.type_params.is_empty() { + let params: Vec<_> = ty + .type_params + .iter() + .filter_map(|p| { + if let Some(ty) = p.ty { + registry.resolve(ty.id) + } else { + None // Ignore if p.ty is None + } + }) + .map(|t| format_type(t, registry)) + .collect(); + name = format!("{name}<{}>", params.join(",")); + } + name = format!( + "{name}{}", + match &ty.type_def { + TypeDef::Composite(composite) => { + if composite.fields.is_empty() { + return "".to_string(); + } + + let mut named = false; + let fields: Vec<_> = composite + .fields + .iter() + .filter_map(|f| match f.name.as_ref() { + None => registry.resolve(f.ty.id).map(|t| format_type(t, registry)), + Some(field) => { + named = true; + f.type_name.as_ref().map(|t| format!("{field}: {t}")) + }, + }) + .collect(); + match named { + true => format!(" {{ {} }}", fields.join(", ")), + false => format!(" ({})", fields.join(", ")), + } + }, + TypeDef::Variant(variant) => { + let variants: Vec<_> = variant + .variants + .iter() + .map(|v| { + if v.fields.is_empty() { + return v.name.clone(); + } + + let name = v.name.as_str(); + let mut named = false; + let fields: Vec<_> = v + .fields + .iter() + .filter_map(|f| match f.name.as_ref() { + None => registry.resolve(f.ty.id).map(|t| format_type(t, registry)), + Some(field) => { + named = true; + f.type_name.as_ref().map(|t| format!("{field}: {t}")) + }, + }) + .collect(); + format!( + "{name}{}", + match named { + true => format!("{{ {} }}", fields.join(", ")), + false => format!("({})", fields.join(", ")), + } + ) + }) + .collect(); + format!(": {}", variants.join(", ")) + }, + TypeDef::Sequence(sequence) => { + format!( + "[{}]", + format_type( + registry.resolve(sequence.type_param.id).expect("sequence type not found"), + registry + ) + ) + }, + TypeDef::Array(array) => { + format!( + "[{};{}]", + format_type( + registry.resolve(array.type_param.id).expect("array type not found"), + registry + ), + array.len + ) + }, + TypeDef::Tuple(tuple) => { + let fields: Vec<_> = tuple + .fields + .iter() + .filter_map(|p| registry.resolve(p.id)) + .map(|t| format_type(t, registry)) + .collect(); + format!("({})", fields.join(",")) + }, + TypeDef::Primitive(primitive) => { + use TypeDefPrimitive::*; + match primitive { + Bool => "bool", + Char => "char", + Str => "str", + U8 => "u8", + U16 => "u16", + U32 => "u32", + U64 => "u64", + U128 => "u128", + U256 => "u256", + I8 => "i8", + I16 => "i16", + I32 => "i32", + I64 => "i64", + I128 => "i128", + I256 => "i256", + } + .to_string() + }, + TypeDef::Compact(compact) => { + format!( + "Compact<{}>", + format_type( + registry.resolve(compact.type_param.id).expect("compact type not found"), + registry + ) + ) + }, + TypeDef::BitSequence(_) => { + "BitSequence".to_string() + }, + } + ); + + name +} + +#[cfg(test)] +mod tests { + use super::*; + use anyhow::Result; + use subxt::{OnlineClient, SubstrateConfig}; + + const POP_NETWORK_TESTNET_URL: &str = "wss://rpc1.paseo.popnetwork.xyz"; + + #[tokio::test] + async fn format_type_works() -> Result<()> { + let client = OnlineClient::::from_url(POP_NETWORK_TESTNET_URL).await?; + let metadata = client.metadata(); + let registry = metadata.types(); + + // Validate `Nfts::mint` extrinsic types cover most of cases. + let nfts_mint_extrinsic = + metadata.pallet_by_name("Nfts").unwrap().call_variant_by_name("mint").unwrap(); + let nfts_mint_types: Vec = nfts_mint_extrinsic + .fields + .iter() + .map(|field| { + let type_info = registry.resolve(field.ty.id).unwrap(); + format_type(&type_info, registry) + }) + .collect(); + assert_eq!(nfts_mint_types.len(), 4); + assert_eq!(nfts_mint_types[0], "u32"); // collection + assert_eq!(nfts_mint_types[1], "u32"); // item + assert_eq!(nfts_mint_types[2], "MultiAddress: Id(AccountId32 ([u8;32])), Index(Compact<()>), Raw([u8]), Address32([u8;32]), Address20([u8;20])"); // mint_to + assert_eq!(nfts_mint_types[3], "Option { owned_item: Option, mint_price: Option }>: None, Some(MintWitness { owned_item: Option, mint_price: Option })"); // witness_data + + // Validate `System::remark` to cover Sequences. + let system_remark_extrinsic = metadata + .pallet_by_name("System") + .unwrap() + .call_variant_by_name("remark") + .unwrap(); + let system_remark_types: Vec = system_remark_extrinsic + .fields + .iter() + .map(|field| { + let type_info = registry.resolve(field.ty.id).unwrap(); + format_type(&type_info, registry) + }) + .collect(); + assert_eq!(system_remark_types.len(), 1); + assert_eq!(system_remark_types[0], "[u8]"); // remark + + // Extrinsic Scheduler::set_retry, cover tuples. + let scheduler_set_retry_extrinsic = metadata + .pallet_by_name("Scheduler") + .unwrap() + .call_variant_by_name("set_retry") + .unwrap(); + let scheduler_set_retry_types: Vec = scheduler_set_retry_extrinsic + .fields + .iter() + .map(|field| { + let type_info = registry.resolve(field.ty.id).unwrap(); + format_type(&type_info, registry) + }) + .collect(); + assert_eq!(scheduler_set_retry_types.len(), 3); + assert_eq!(scheduler_set_retry_types[0], "(u32,u32)"); // task + assert_eq!(scheduler_set_retry_types[1], "u8"); // retries + assert_eq!(scheduler_set_retry_types[2], "u32"); // period + + Ok(()) + } +} diff --git a/crates/pop-contracts/src/utils/signer.rs b/crates/pop-common/src/signer.rs similarity index 52% rename from crates/pop-contracts/src/utils/signer.rs rename to crates/pop-common/src/signer.rs index 51fc44b0e..e542d0417 100644 --- a/crates/pop-contracts/src/utils/signer.rs +++ b/crates/pop-common/src/signer.rs @@ -1,24 +1,19 @@ // SPDX-License-Identifier: GPL-3.0 use crate::errors::Error; -use contract_build::util::decode_hex; -use sp_core::Bytes; use subxt_signer::{sr25519::Keypair, SecretUri}; -/// Create a Signer from a secret URI. -pub(crate) fn create_signer(suri: &str) -> Result { +/// Create a keypair from a secret URI. +/// +/// # Arguments +/// `suri` - Secret URI string used to generate the `Keypair`. +pub fn create_signer(suri: &str) -> Result { let uri = ::from_str(suri) .map_err(|e| Error::ParseSecretURI(format!("{}", e)))?; let keypair = Keypair::from_uri(&uri).map_err(|e| Error::KeyPairCreation(format!("{}", e)))?; Ok(keypair) } -/// Parse hex encoded bytes. -pub fn parse_hex_bytes(input: &str) -> Result { - let bytes = decode_hex(input).map_err(|e| Error::HexParsing(format!("{}", e)))?; - Ok(bytes.into()) -} - #[cfg(test)] mod tests { use super::*; @@ -39,18 +34,4 @@ mod tests { assert!(matches!(create_signer("11111"), Err(Error::KeyPairCreation(..)))); Ok(()) } - - #[test] - fn parse_hex_bytes_works() -> Result<(), Error> { - let input_in_hex = "48656c6c6f"; - let result = parse_hex_bytes(input_in_hex)?; - assert_eq!(result, Bytes(vec![72, 101, 108, 108, 111])); - Ok(()) - } - - #[test] - fn parse_hex_bytes_fails_wrong_input() -> Result<(), Error> { - assert!(matches!(parse_hex_bytes("wronghexvalue"), Err(Error::HexParsing(..)))); - Ok(()) - } } diff --git a/crates/pop-contracts/Cargo.toml b/crates/pop-contracts/Cargo.toml index 3d4f15fb1..581075f95 100644 --- a/crates/pop-contracts/Cargo.toml +++ b/crates/pop-contracts/Cargo.toml @@ -13,9 +13,7 @@ version.workspace = true [dependencies] anyhow.workspace = true duct.workspace = true -flate2.workspace = true reqwest.workspace = true -tar.workspace = true tempfile.workspace = true thiserror.workspace = true tokio.workspace = true @@ -33,12 +31,11 @@ subxt.workspace = true # cargo-contracts contract-build.workspace = true contract-extrinsics.workspace = true -contract-transcode.workspace = true +contract-transcode.workspace = true scale-info.workspace = true -# pop -pop-common = { path = "../pop-common", version = "0.5.0" } +# pop +pop-common = { path = "../pop-common", version = "0.6.0" } [dev-dependencies] -dirs.workspace = true -mockito.workspace = true -tokio-test.workspace = true +# Used in doc tests. +tokio-test.workspace = true \ No newline at end of file diff --git a/crates/pop-contracts/src/build.rs b/crates/pop-contracts/src/build.rs index dcbec25a8..df9cc4a3f 100644 --- a/crates/pop-contracts/src/build.rs +++ b/crates/pop-contracts/src/build.rs @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-3.0 -use crate::{errors::Error, utils::helpers::get_manifest_path}; +use crate::{errors::Error, utils::get_manifest_path}; pub use contract_build::Verbosity; use contract_build::{execute, BuildMode, BuildResult, ExecuteArgs}; use std::path::Path; diff --git a/crates/pop-contracts/src/call.rs b/crates/pop-contracts/src/call.rs index 1886f3be2..2ffbd3258 100644 --- a/crates/pop-contracts/src/call.rs +++ b/crates/pop-contracts/src/call.rs @@ -2,26 +2,28 @@ use crate::{ errors::Error, + submit_signed_payload, utils::{ - helpers::{get_manifest_path, parse_account, parse_balance}, + get_manifest_path, metadata::{process_function_args, FunctionType}, - signer::create_signer, + parse_account, parse_balance, }, }; use anyhow::Context; use contract_build::Verbosity; use contract_extrinsics::{ - BalanceVariant, CallCommandBuilder, CallExec, ContractArtifacts, DisplayEvents, ErrorVariant, - ExtrinsicOptsBuilder, TokenMetadata, + extrinsic_calls::Call, BalanceVariant, CallCommandBuilder, CallExec, ContractArtifacts, + DisplayEvents, ErrorVariant, ExtrinsicOptsBuilder, TokenMetadata, }; use ink_env::{DefaultEnvironment, Environment}; +use pop_common::{create_signer, Config, DefaultConfig, Keypair}; use sp_weights::Weight; use std::path::PathBuf; -use subxt::{Config, PolkadotConfig as DefaultConfig}; -use subxt_signer::sr25519::Keypair; +use subxt::{tx::Payload, SubstrateConfig}; use url::Url; /// Attributes for the `call` command. +#[derive(Clone, Debug, PartialEq)] pub struct CallOpts { /// Path to the contract build directory. pub path: Option, @@ -174,16 +176,63 @@ pub async fn call_smart_contract( Ok(output) } +/// Executes a smart contract call using a signed payload. +/// +/// # Arguments +/// +/// * `call_exec` - A struct containing the details of the contract call. +/// * `payload` - The signed payload string to be submitted for executing the call. +/// * `url` - The endpoint of the node where the call is executed. +pub async fn call_smart_contract_from_signed_payload( + call_exec: CallExec, + payload: String, + url: &Url, +) -> anyhow::Result { + let token_metadata = TokenMetadata::query::(url).await?; + let metadata = call_exec.client().metadata(); + let events = submit_signed_payload(url.as_str(), payload).await?; + let display_events = DisplayEvents::from_events::( + &events, None, &metadata, + )?; + + let output = + display_events.display_events::(Verbosity::Default, &token_metadata)?; + Ok(output) +} + +/// Generates the payload for executing a smart contract call. +/// +/// # Arguments +/// * `call_exec` - A struct containing the details of the contract call. +/// * `gas_limit` - The maximum amount of gas allocated for executing the contract call. +pub fn get_call_payload( + call_exec: &CallExec, + gas_limit: Weight, +) -> anyhow::Result> { + let storage_deposit_limit: Option = call_exec.opts().storage_deposit_limit(); + let mut encoded_data = Vec::::new(); + Call::new( + call_exec.contract().into(), + call_exec.value(), + gas_limit, + storage_deposit_limit.as_ref(), + call_exec.call_data().clone(), + ) + .build() + .encode_call_data_to(&call_exec.client().metadata(), &mut encoded_data)?; + Ok(encoded_data) +} + #[cfg(test)] mod tests { use super::*; use crate::{ contracts_node_generator, dry_run_gas_estimate_instantiate, errors::Error, instantiate_smart_contract, mock_build_process, new_environment, run_contracts_node, - set_up_deployment, testing::find_free_port, UpOpts, + set_up_deployment, UpOpts, }; use anyhow::Result; - use pop_common::set_executable_permission; + use pop_common::{find_free_port, set_executable_permission}; use sp_core::Bytes; use std::{env, process::Command, time::Duration}; use tokio::time::sleep; @@ -336,7 +385,7 @@ mod tests { #[tokio::test] async fn call_works() -> Result<()> { - let random_port = find_free_port(); + let random_port = find_free_port(None); let localhost_url = format!("ws://127.0.0.1:{}", random_port); let temp_dir = new_environment("testing")?; let current_dir = env::current_dir().expect("Failed to get current directory"); diff --git a/crates/pop-contracts/src/errors.rs b/crates/pop-contracts/src/errors.rs index b59031a06..e7ddec21b 100644 --- a/crates/pop-contracts/src/errors.rs +++ b/crates/pop-contracts/src/errors.rs @@ -3,13 +3,14 @@ use pop_common::sourcing::Error as SourcingError; use thiserror::Error; +/// Represents the various errors that can occur in the crate. #[derive(Error, Debug)] #[allow(clippy::enum_variant_names)] pub enum Error { - #[error("Anyhow error: {0}")] - AnyhowError(#[from] anyhow::Error), #[error("Failed to parse account address: {0}")] AccountAddressParsing(String), + #[error("Anyhow error: {0}")] + AnyhowError(#[from] anyhow::Error), #[error("Failed to parse balance: {0}")] BalanceParsing(String), #[error("{0}")] @@ -38,8 +39,6 @@ pub enum Error { InvalidName(String), #[error("IO error: {0}")] IO(#[from] std::io::Error), - #[error("Failed to create keypair from URI: {0}")] - KeyPairCreation(String), #[error("Failed to get manifest path: {0}")] ManifestPath(String), #[error("Argument {0} is required")] @@ -48,8 +47,6 @@ pub enum Error { NewContract(String), #[error("ParseError error: {0}")] ParseError(#[from] url::ParseError), - #[error("Failed to parse secret URI: {0}")] - ParseSecretURI(String), #[error("The `Repository` property is missing from the template variant")] RepositoryMissing, #[error("Sourcing error {0}")] diff --git a/crates/pop-contracts/src/lib.rs b/crates/pop-contracts/src/lib.rs index 005ec91ac..6dded2fe0 100644 --- a/crates/pop-contracts/src/lib.rs +++ b/crates/pop-contracts/src/lib.rs @@ -14,19 +14,24 @@ mod utils; pub use build::{build_smart_contract, is_supported, Verbosity}; pub use call::{ - call_smart_contract, dry_run_call, dry_run_gas_estimate_call, set_up_call, CallOpts, + call_smart_contract, call_smart_contract_from_signed_payload, dry_run_call, + dry_run_gas_estimate_call, get_call_payload, set_up_call, CallOpts, }; pub use new::{create_smart_contract, is_valid_contract_name}; pub use node::{contracts_node_generator, is_chain_alive, run_contracts_node}; pub use templates::{Contract, ContractType}; pub use test::{test_e2e_smart_contract, test_smart_contract}; -pub use testing::{find_free_port, mock_build_process, new_environment}; +pub use testing::{mock_build_process, new_environment}; pub use up::{ - dry_run_gas_estimate_instantiate, dry_run_upload, instantiate_smart_contract, - set_up_deployment, set_up_upload, upload_smart_contract, UpOpts, + dry_run_gas_estimate_instantiate, dry_run_upload, get_code_hash_from_event, get_contract_code, + get_instantiate_payload, get_upload_payload, instantiate_contract_signed, + instantiate_smart_contract, set_up_deployment, set_up_upload, submit_signed_payload, + upload_contract_signed, upload_smart_contract, ContractInfo, UpOpts, }; pub use utils::{ - helpers::parse_account, - metadata::{get_messages, ContractFunction}, - signer::parse_hex_bytes, + metadata::{get_message, get_messages, ContractFunction}, + parse_account, parse_hex_bytes, }; +// External exports +pub use contract_extrinsics::CallExec; +pub use ink_env::DefaultEnvironment; diff --git a/crates/pop-contracts/src/new.rs b/crates/pop-contracts/src/new.rs index 8e11fbd16..6d4d7f125 100644 --- a/crates/pop-contracts/src/new.rs +++ b/crates/pop-contracts/src/new.rs @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-3.0 -use crate::{errors::Error, utils::helpers::canonicalized_path, Contract}; +use crate::{errors::Error, utils::canonicalized_path, Contract}; use anyhow::Result; use contract_build::new_contract_project; use heck::ToUpperCamelCase; diff --git a/crates/pop-contracts/src/node/mod.rs b/crates/pop-contracts/src/node.rs similarity index 91% rename from crates/pop-contracts/src/node/mod.rs rename to crates/pop-contracts/src/node.rs index 77ac97cd5..158865d40 100644 --- a/crates/pop-contracts/src/node/mod.rs +++ b/crates/pop-contracts/src/node.rs @@ -19,9 +19,11 @@ use std::{ process::{Child, Command, Stdio}, time::Duration, }; +use subxt::{dynamic::Value, SubstrateConfig}; use tokio::time::sleep; const BIN_NAME: &str = "substrate-contracts-node"; +const STARTUP: Duration = Duration::from_millis(20_000); /// Checks if the specified node is alive and responsive. /// @@ -131,8 +133,24 @@ pub async fn run_contracts_node( let process = command.spawn()?; - // Wait 5 secs until the node is ready - sleep(Duration::from_millis(5000)).await; + // Wait until the node is ready + sleep(STARTUP).await; + + let data = Value::from_bytes(subxt::utils::to_hex("initialize contracts node")); + let payload = subxt::dynamic::tx("System", "remark", [data].to_vec()); + + let client = subxt::client::OnlineClient::::from_url(format!( + "ws://127.0.0.1:{}", + port + )) + .await + .map_err(|e| Error::AnyhowError(e.into()))?; + client + .tx() + .sign_and_submit_default(&payload, &subxt_signer::sr25519::dev::alice()) + .await + .map_err(|e| Error::AnyhowError(e.into()))?; + Ok(process) } @@ -166,10 +184,9 @@ fn release_directory_by_target(tag: Option<&str>) -> Result<&'static str, Error> #[cfg(test)] mod tests { - use crate::testing::find_free_port; - use super::*; use anyhow::{Error, Result}; + use pop_common::find_free_port; use std::process::Command; #[tokio::test] @@ -223,7 +240,7 @@ mod tests { #[ignore = "Works fine locally but is causing issues when running tests in parallel in the CI environment."] #[tokio::test] async fn run_contracts_node_works() -> Result<(), Error> { - let random_port = find_free_port(); + let random_port = find_free_port(None); let localhost_url = format!("ws://127.0.0.1:{}", random_port); let local_url = url::Url::parse(&localhost_url)?; diff --git a/crates/pop-contracts/src/testing.rs b/crates/pop-contracts/src/testing.rs index c10bd4e5f..6a8abfcd9 100644 --- a/crates/pop-contracts/src/testing.rs +++ b/crates/pop-contracts/src/testing.rs @@ -4,7 +4,6 @@ use crate::{create_smart_contract, Contract}; use anyhow::Result; use std::{ fs::{copy, create_dir}, - net::TcpListener, path::Path, }; @@ -38,12 +37,3 @@ where copy(metadata_file, target_contract_dir.join("ink/testing.json"))?; Ok(()) } - -/// Finds an available port by binding to port 0 and retrieving the assigned port. -pub fn find_free_port() -> u16 { - TcpListener::bind("127.0.0.1:0") - .expect("Failed to bind to an available port") - .local_addr() - .expect("Failed to retrieve local address") - .port() -} diff --git a/crates/pop-contracts/src/up.rs b/crates/pop-contracts/src/up.rs index 90e0b35a3..3ed614c7e 100644 --- a/crates/pop-contracts/src/up.rs +++ b/crates/pop-contracts/src/up.rs @@ -1,25 +1,37 @@ // SPDX-License-Identifier: GPL-3.0 + use crate::{ errors::Error, utils::{ - helpers::{get_manifest_path, parse_balance}, + get_manifest_path, metadata::{process_function_args, FunctionType}, - signer::create_signer, + parse_balance, }, }; use contract_extrinsics::{ - BalanceVariant, ErrorVariant, ExtrinsicOptsBuilder, InstantiateCommandBuilder, InstantiateExec, - TokenMetadata, UploadCommandBuilder, UploadExec, + events::{CodeStored, ContractInstantiated}, + extrinsic_calls::{Instantiate, InstantiateWithCode, UploadCode}, + upload::Determinism, + BalanceVariant, Code, ErrorVariant, ExtrinsicOptsBuilder, InstantiateCommandBuilder, + InstantiateExec, InstantiateExecResult, TokenMetadata, UploadCommandBuilder, UploadExec, + UploadResult, WasmCode, }; use ink_env::{DefaultEnvironment, Environment}; -use sp_core::Bytes; +use pop_common::{create_signer, DefaultConfig, Keypair}; +use sp_core::{bytes::from_hex, Bytes}; use sp_weights::Weight; -use std::{fmt::Write, path::PathBuf}; -use subxt::PolkadotConfig as DefaultConfig; -use subxt_signer::sr25519::Keypair; +use std::{ + fmt::Write, + path::{Path, PathBuf}, +}; +use subxt::{ + blocks::ExtrinsicEvents, + tx::{Payload, SubmittableExtrinsic}, + Config, SubstrateConfig, +}; /// Attributes for the `up` command -#[derive(Debug, PartialEq)] +#[derive(Clone, Debug, PartialEq)] pub struct UpOpts { /// Path to the contract build directory. pub path: Option, @@ -101,14 +113,177 @@ pub async fn set_up_upload( let upload_exec: UploadExec = UploadCommandBuilder::new(extrinsic_opts).done().await?; + Ok(upload_exec) } +/// Gets the encoded payload call data for contract upload (not instantiate). +/// +/// # Arguments +/// * `code` - contract code to upload. +/// * `url` - the rpc of the chain node. +pub async fn get_upload_payload(code: WasmCode, url: &str) -> anyhow::Result> { + let storage_deposit_limit: Option = None; + let upload_code = UploadCode::new(code, storage_deposit_limit, Determinism::Enforced); + + let rpc_client = subxt::backend::rpc::RpcClient::from_url(url).await?; + let client = subxt::OnlineClient::::from_rpc_client(rpc_client).await?; + + let call_data = upload_code.build(); + let mut encoded_data = Vec::::new(); + call_data.encode_call_data_to(&client.metadata(), &mut encoded_data)?; + Ok(encoded_data) +} + +/// Gets the encoded payload call data for a contract instantiation. +/// +/// # Arguments +/// * `instantiate_exec` - arguments for contract instantiate. +/// * `gas_limit` - max amount of gas to be used for instantiation. +pub fn get_instantiate_payload( + instantiate_exec: InstantiateExec, + gas_limit: Weight, +) -> anyhow::Result> { + let storage_deposit_limit: Option = None; + let mut encoded_data = Vec::::new(); + let args = instantiate_exec.args(); + match args.code() { + Code::Upload(code) => InstantiateWithCode::new( + args.value(), + gas_limit, + storage_deposit_limit, + code.clone(), + args.data().into(), + args.salt().into(), + ) + .build() + .encode_call_data_to(&instantiate_exec.client().metadata(), &mut encoded_data), + Code::Existing(hash) => Instantiate::new( + args.value(), + gas_limit, + storage_deposit_limit, + hash, + args.data().into(), + args.salt().into(), + ) + .build() + .encode_call_data_to(&instantiate_exec.client().metadata(), &mut encoded_data), + }?; + + Ok(encoded_data) +} + +/// Reads the contract code from contract file. +/// +/// # Arguments +/// * `path` - path to the contract file. +pub fn get_contract_code(path: Option<&PathBuf>) -> anyhow::Result { + let manifest_path = get_manifest_path(path.map(|p| p as &Path))?; + + // signer does not matter for this + let signer = create_signer("//Alice")?; + let extrinsic_opts = + ExtrinsicOptsBuilder::::new(signer) + .manifest_path(Some(manifest_path)) + .done(); + let artifacts = extrinsic_opts.contract_artifacts()?; + + let artifacts_path = artifacts.artifact_path().to_path_buf(); + let code = artifacts.code.ok_or_else(|| { + Error::UploadContractError(format!( + "Contract code not found from artifact file {}", + artifacts_path.display() + )) + })?; + Ok(code) +} + +/// Submit a pre-signed payload for uploading a contract. +/// +/// # Arguments +/// * `url` - rpc for chain. +/// * `payload` - the signed payload to submit (encoded call data). +pub async fn upload_contract_signed( + url: &str, + payload: String, +) -> anyhow::Result> { + let events = submit_signed_payload(url, payload).await?; + + let code_stored = events.find_first::>()?; + + Ok(UploadResult { code_stored, events }) +} + +/// Submit a pre-signed payload for instantiating a contract. +/// +/// # Arguments +/// * `url` - rpc for chain. +/// * `payload` - the signed payload to submit (encoded call data). +pub async fn instantiate_contract_signed( + url: &str, + payload: String, +) -> anyhow::Result> { + let events = submit_signed_payload(url, payload).await?; + + // The CodeStored event is only raised if the contract has not already been + // uploaded. + let code_hash = events + .find_first::>()? + .map(|code_stored| code_stored.code_hash); + + let instantiated = events + .find_first::>()? + .ok_or_else(|| { + Error::InstantiateContractError("Failed to find Instantiated event".to_string()) + })?; + + Ok(InstantiateExecResult { events, code_hash, contract_address: instantiated.contract }) +} + +/// Submit a pre-signed payload. +/// +/// # Arguments +/// * `url` - rpc for chain. +/// * `payload` - the signed payload to submit (encoded call data). +pub async fn submit_signed_payload( + url: &str, + payload: String, +) -> anyhow::Result> { + let rpc_client = subxt::backend::rpc::RpcClient::from_url(url).await?; + let client = subxt::OnlineClient::::from_rpc_client(rpc_client).await?; + + let hex_encoded = from_hex(&payload)?; + + let extrinsic = SubmittableExtrinsic::from_bytes(client, hex_encoded); + + // src: https://github.com/use-ink/cargo-contract/blob/68691b9b6cdb7c6ec52ea441b3dc31fcb1ce08e0/crates/extrinsics/src/lib.rs#L143 + + use subxt::{ + error::{RpcError, TransactionError}, + tx::TxStatus, + }; + + let mut tx = extrinsic.submit_and_watch().await?; + + while let Some(status) = tx.next().await { + match status? { + TxStatus::InFinalizedBlock(tx_in_block) => { + let events = tx_in_block.wait_for_success().await?; + return Ok(events) + }, + TxStatus::Error { message } => return Err(TransactionError::Error(message).into()), + TxStatus::Invalid { message } => return Err(TransactionError::Invalid(message).into()), + TxStatus::Dropped { message } => return Err(TransactionError::Dropped(message).into()), + _ => continue, + } + } + Err(RpcError::SubscriptionDropped.into()) +} + /// Estimate the gas required for instantiating a contract without modifying the state of the /// blockchain. /// /// # Arguments -/// /// * `instantiate_exec` - the preprocessed data to instantiate a contract. pub async fn dry_run_gas_estimate_instantiate( instantiate_exec: &InstantiateExec, @@ -137,14 +312,15 @@ pub async fn dry_run_gas_estimate_instantiate( /// Result of a dry-run upload of a smart contract. pub struct UploadDryRunResult { + /// The key under which the new code is stored. pub code_hash: String, + /// The deposit that was reserved at the caller. Is zero when the code already existed. pub deposit: String, } /// Performs a dry-run for uploading a contract without modifying the state of the blockchain. /// /// # Arguments -/// /// * `upload_exec` - the preprocessed data to upload a contract. pub async fn dry_run_upload( upload_exec: &UploadExec, @@ -176,7 +352,6 @@ pub struct ContractInfo { /// Instantiate a contract. /// /// # Arguments -/// /// * `instantiate_exec` - the preprocessed data to instantiate a contract. /// * `gas_limit` - maximum amount of gas to be used for this call. pub async fn instantiate_smart_contract( @@ -196,7 +371,6 @@ pub async fn instantiate_smart_contract( /// Upload a contract. /// /// # Arguments -/// /// * `upload_exec` - the preprocessed data to upload a contract. pub async fn upload_smart_contract( upload_exec: &UploadExec, @@ -205,14 +379,26 @@ pub async fn upload_smart_contract( .upload_code() .await .map_err(|error_variant| Error::UploadContractError(format!("{:?}", error_variant)))?; - if let Some(code_stored) = upload_result.code_stored { + get_code_hash_from_event(&upload_result, upload_exec.code().code_hash()) +} + +/// Get the code hash of a contract from the upload event. +/// +/// # Arguments +/// * `upload_result` - the result of uploading the contract. +/// * `metadata_code_hash` - the code hash from the metadata Used only for error reporting. +pub fn get_code_hash_from_event( + upload_result: &UploadResult, + // used for error reporting + metadata_code_hash: [u8; 32], +) -> Result { + if let Some(code_stored) = upload_result.code_stored.as_ref() { Ok(format!("{:?}", code_stored.code_hash)) } else { - let code_hash: String = - upload_exec.code().code_hash().iter().fold(String::new(), |mut output, b| { - write!(output, "{:02x}", b).expect("expected to write to string"); - output - }); + let code_hash: String = metadata_code_hash.iter().fold(String::new(), |mut output, b| { + write!(output, "{:02x}", b).expect("expected to write to string"); + output + }); Err(Error::UploadContractError(format!( "This contract has already been uploaded with code hash: 0x{code_hash}" ))) @@ -224,11 +410,15 @@ mod tests { use super::*; use crate::{ contracts_node_generator, errors::Error, mock_build_process, new_environment, - run_contracts_node, testing::find_free_port, + run_contracts_node, }; use anyhow::Result; - use pop_common::set_executable_permission; + use pop_common::{find_free_port, set_executable_permission}; use std::{env, process::Command, time::Duration}; + use subxt::{ + config::{substrate::BlakeTwo256, Hasher}, + utils::H256, + }; use tokio::time::sleep; use url::Url; @@ -282,6 +472,43 @@ mod tests { Ok(()) } + #[tokio::test] + async fn get_payload_works() -> Result<()> { + let temp_dir = new_environment("testing")?; + let current_dir = env::current_dir().expect("Failed to get current directory"); + mock_build_process( + temp_dir.path().join("testing"), + current_dir.join("./tests/files/testing.contract"), + current_dir.join("./tests/files/testing.json"), + )?; + let up_opts = UpOpts { + path: Some(temp_dir.path().join("testing")), + constructor: "new".to_string(), + args: ["false".to_string()].to_vec(), + value: "1000".to_string(), + gas_limit: None, + proof_size: None, + salt: None, + url: Url::parse(CONTRACTS_NETWORK_URL)?, + suri: "//Alice".to_string(), + }; + let contract_code = get_contract_code(up_opts.path.as_ref())?; + let call_data = get_upload_payload(contract_code, CONTRACTS_NETWORK_URL).await?; + let payload_hash = BlakeTwo256::hash(&call_data); + // We know that for the above opts the payload hash should be: + // 0x98c24584107b3a01d12e8e02c0bb634d15dc86123c44d186206813ede42f478d + let hex_bytes = + from_hex("98c24584107b3a01d12e8e02c0bb634d15dc86123c44d186206813ede42f478d") + .expect("Invalid hex string"); + + let hex_array: [u8; 32] = hex_bytes.try_into().expect("Expected 32-byte array"); + + // Create `H256` from the `[u8; 32]` array + let expected_hash = H256::from(hex_array); + assert_eq!(expected_hash, payload_hash); + Ok(()) + } + #[tokio::test] async fn dry_run_gas_estimate_instantiate_works() -> Result<()> { let temp_dir = new_environment("testing")?; @@ -366,7 +593,7 @@ mod tests { #[tokio::test] async fn instantiate_and_upload() -> Result<()> { - let random_port = find_free_port(); + let random_port = find_free_port(None); let localhost_url = format!("ws://127.0.0.1:{}", random_port); let temp_dir = new_environment("testing")?; let current_dir = env::current_dir().expect("Failed to get current directory"); diff --git a/crates/pop-contracts/src/utils/helpers.rs b/crates/pop-contracts/src/utils/helpers.rs deleted file mode 100644 index d0797015c..000000000 --- a/crates/pop-contracts/src/utils/helpers.rs +++ /dev/null @@ -1,112 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0 - -use crate::errors::Error; -use contract_build::ManifestPath; -use contract_extrinsics::BalanceVariant; -use ink_env::{DefaultEnvironment, Environment}; -use std::{ - path::{Path, PathBuf}, - str::FromStr, -}; -use subxt::{Config, PolkadotConfig as DefaultConfig}; - -pub fn get_manifest_path(path: Option<&Path>) -> Result { - if let Some(path) = path { - let full_path = PathBuf::from(path.to_string_lossy().to_string() + "/Cargo.toml"); - ManifestPath::try_from(Some(full_path)) - .map_err(|e| Error::ManifestPath(format!("Failed to get manifest path: {}", e))) - } else { - ManifestPath::try_from(path.as_ref()) - .map_err(|e| Error::ManifestPath(format!("Failed to get manifest path: {}", e))) - } -} - -pub fn parse_balance( - balance: &str, -) -> Result::Balance>, Error> { - BalanceVariant::from_str(balance).map_err(|e| Error::BalanceParsing(format!("{}", e))) -} - -pub fn parse_account(account: &str) -> Result<::AccountId, Error> { - ::AccountId::from_str(account) - .map_err(|e| Error::AccountAddressParsing(format!("{}", e))) -} - -/// Canonicalizes the given path to ensure consistency and resolve any symbolic links. -/// -/// # Arguments -/// -/// * `target` - A reference to the `Path` to be canonicalized. -pub fn canonicalized_path(target: &Path) -> Result { - // Canonicalize the target path to ensure consistency and resolve any symbolic links. - target - .canonicalize() - // If an I/O error occurs during canonicalization, convert it into an Error enum variant. - .map_err(Error::IO) -} - -#[cfg(test)] -mod tests { - use super::*; - use anyhow::{Error, Result}; - use std::fs; - - fn setup_test_environment() -> Result { - let temp_dir = tempfile::tempdir().expect("Could not create temp dir"); - let temp_contract_dir = temp_dir.path().join("test_contract"); - fs::create_dir(&temp_contract_dir)?; - crate::create_smart_contract( - "test_contract", - temp_contract_dir.as_path(), - &crate::Contract::Standard, - )?; - Ok(temp_dir) - } - - #[test] - fn test_get_manifest_path() -> Result<(), Error> { - let temp_dir = setup_test_environment()?; - get_manifest_path(Some(&PathBuf::from(temp_dir.path().join("test_contract"))))?; - Ok(()) - } - - #[test] - fn test_canonicalized_path() -> Result<(), Error> { - let temp_dir = tempfile::tempdir()?; - // Error case - let error_directory = canonicalized_path(&temp_dir.path().join("my_directory")); - assert!(error_directory.is_err()); - // Success case - canonicalized_path(temp_dir.path())?; - Ok(()) - } - - #[test] - fn parse_balance_works() -> Result<(), Error> { - let balance = parse_balance("100000")?; - assert_eq!(balance, BalanceVariant::Default(100000)); - Ok(()) - } - - #[test] - fn parse_balance_fails_wrong_balance() -> Result<(), Error> { - assert!(matches!(parse_balance("wrongbalance"), Err(super::Error::BalanceParsing(..)))); - Ok(()) - } - - #[test] - fn parse_account_works() -> Result<(), Error> { - let account = parse_account("5CLPm1CeUvJhZ8GCDZCR7nWZ2m3XXe4X5MtAQK69zEjut36A")?; - assert_eq!(account.to_string(), "5CLPm1CeUvJhZ8GCDZCR7nWZ2m3XXe4X5MtAQK69zEjut36A"); - Ok(()) - } - - #[test] - fn parse_account_fails_wrong_value() -> Result<(), Error> { - assert!(matches!( - parse_account("wrongaccount"), - Err(super::Error::AccountAddressParsing(..)) - )); - Ok(()) - } -} diff --git a/crates/pop-contracts/src/utils/metadata.rs b/crates/pop-contracts/src/utils/metadata.rs index 38cdc12d7..0c2d26d6d 100644 --- a/crates/pop-contracts/src/utils/metadata.rs +++ b/crates/pop-contracts/src/utils/metadata.rs @@ -3,7 +3,8 @@ use crate::errors::Error; use contract_extrinsics::ContractArtifacts; use contract_transcode::ink_metadata::MessageParamSpec; -use scale_info::{form::PortableForm, PortableRegistry, Type, TypeDef, TypeDefPrimitive}; +use pop_common::format_type; +use scale_info::{form::PortableForm, PortableRegistry}; use std::path::Path; /// Describes a parameter. @@ -116,7 +117,7 @@ fn get_contract_functions( /// # Arguments /// * `path` - Location path of the project or contract artifact. /// * `message` - The label of the contract message. -fn get_message

(path: P, message: &str) -> Result +pub fn get_message

(path: P, message: &str) -> Result where P: AsRef, { @@ -156,150 +157,6 @@ fn process_args( args } -// Formats a specified type, using the registry to output its full type representation. -fn format_type(ty: &Type, registry: &PortableRegistry) -> String { - let mut name = ty - .path - .segments - .last() - .map(|s| s.to_owned()) - .unwrap_or_else(|| ty.path.to_string()); - - if !ty.type_params.is_empty() { - let params: Vec<_> = ty - .type_params - .iter() - .filter_map(|p| registry.resolve(p.ty.unwrap().id)) - .map(|t| format_type(t, registry)) - .collect(); - name = format!("{name}<{}>", params.join(",")); - } - - name = format!( - "{name}{}", - match &ty.type_def { - TypeDef::Composite(composite) => { - if composite.fields.is_empty() { - return "".to_string(); - } - - let mut named = false; - let fields: Vec<_> = composite - .fields - .iter() - .filter_map(|f| match f.name.as_ref() { - None => registry.resolve(f.ty.id).map(|t| format_type(t, registry)), - Some(field) => { - named = true; - f.type_name.as_ref().map(|t| format!("{field}: {t}")) - }, - }) - .collect(); - match named { - true => format!(" {{ {} }}", fields.join(", ")), - false => format!(" ({})", fields.join(", ")), - } - }, - TypeDef::Variant(variant) => { - let variants: Vec<_> = variant - .variants - .iter() - .map(|v| { - if v.fields.is_empty() { - return v.name.clone(); - } - - let name = v.name.as_str(); - let mut named = false; - let fields: Vec<_> = v - .fields - .iter() - .filter_map(|f| match f.name.as_ref() { - None => registry.resolve(f.ty.id).map(|t| format_type(t, registry)), - Some(field) => { - named = true; - f.type_name.as_ref().map(|t| format!("{field}: {t}")) - }, - }) - .collect(); - format!( - "{name}{}", - match named { - true => format!("{{ {} }}", fields.join(", ")), - false => format!("({})", fields.join(", ")), - } - ) - }) - .collect(); - format!(": {}", variants.join(", ")) - }, - TypeDef::Sequence(sequence) => { - format!( - "[{}]", - format_type( - registry.resolve(sequence.type_param.id).expect("sequence type not found"), - registry - ) - ) - }, - TypeDef::Array(array) => { - format!( - "[{};{}]", - format_type( - registry.resolve(array.type_param.id).expect("array type not found"), - registry - ), - array.len - ) - }, - TypeDef::Tuple(tuple) => { - let fields: Vec<_> = tuple - .fields - .iter() - .filter_map(|p| registry.resolve(p.id)) - .map(|t| format_type(t, registry)) - .collect(); - format!("({})", fields.join(",")) - }, - TypeDef::Primitive(primitive) => { - use TypeDefPrimitive::*; - match primitive { - Bool => "bool", - Char => "char", - Str => "str", - U8 => "u8", - U16 => "u16", - U32 => "u32", - U64 => "u64", - U128 => "u128", - U256 => "u256", - I8 => "i8", - I16 => "i16", - I32 => "i32", - I64 => "i64", - I128 => "i128", - I256 => "i256", - } - .to_string() - }, - TypeDef::Compact(compact) => { - format!( - "Compact<{}>", - format_type( - registry.resolve(compact.type_param.id).expect("compact type not found"), - registry - ) - ) - }, - TypeDef::BitSequence(_) => { - unimplemented!("bit sequence not currently supported") - }, - } - ); - - name -} - /// Processes a list of argument values for a specified contract function, /// wrapping each value in `Some(...)` or replacing it with `None` if the argument is optional. /// diff --git a/crates/pop-contracts/src/utils/mod.rs b/crates/pop-contracts/src/utils/mod.rs index ad49e2dc6..a3a99323b 100644 --- a/crates/pop-contracts/src/utils/mod.rs +++ b/crates/pop-contracts/src/utils/mod.rs @@ -1,5 +1,149 @@ // SPDX-License-Identifier: GPL-3.0 -pub mod helpers; +use crate::errors::Error; +use contract_build::{util::decode_hex, ManifestPath}; +use contract_extrinsics::BalanceVariant; +use ink_env::{DefaultEnvironment, Environment}; +use pop_common::{Config, DefaultConfig}; +use sp_core::Bytes; +use std::{ + path::{Path, PathBuf}, + str::FromStr, +}; + pub mod metadata; -pub mod signer; + +/// Retrieves the manifest path for a contract project. +/// +/// # Arguments +/// * `path` - An optional path to the project directory. +pub fn get_manifest_path(path: Option<&Path>) -> Result { + if let Some(path) = path { + let full_path = PathBuf::from(path.to_string_lossy().to_string() + "/Cargo.toml"); + ManifestPath::try_from(Some(full_path)) + .map_err(|e| Error::ManifestPath(format!("Failed to get manifest path: {}", e))) + } else { + ManifestPath::try_from(path.as_ref()) + .map_err(|e| Error::ManifestPath(format!("Failed to get manifest path: {}", e))) + } +} + +/// Parses a balance value from a string representation. +/// +/// # Arguments +/// * `balance` - A string representing the balance value to parse. +pub fn parse_balance( + balance: &str, +) -> Result::Balance>, Error> { + BalanceVariant::from_str(balance).map_err(|e| Error::BalanceParsing(format!("{}", e))) +} + +/// Parses an account ID from its string representation. +/// +/// # Arguments +/// * `account` - A string representing the account ID to parse. +pub fn parse_account(account: &str) -> Result<::AccountId, Error> { + ::AccountId::from_str(account) + .map_err(|e| Error::AccountAddressParsing(format!("{}", e))) +} + +/// Parse hex encoded bytes. +/// +/// # Arguments +/// * `input` - A string containing hex-encoded bytes. +pub fn parse_hex_bytes(input: &str) -> Result { + let bytes = decode_hex(input).map_err(|e| Error::HexParsing(format!("{}", e)))?; + Ok(bytes.into()) +} + +/// Canonicalizes the given path to ensure consistency and resolve any symbolic links. +/// +/// # Arguments +/// * `target` - A reference to the `Path` to be canonicalized. +pub fn canonicalized_path(target: &Path) -> Result { + // Canonicalize the target path to ensure consistency and resolve any symbolic links. + target + .canonicalize() + // If an I/O error occurs during canonicalization, convert it into an Error enum variant. + .map_err(Error::IO) +} + +#[cfg(test)] +mod tests { + use super::*; + use anyhow::Result; + use std::fs; + + fn setup_test_environment() -> Result { + let temp_dir = tempfile::tempdir().expect("Could not create temp dir"); + let temp_contract_dir = temp_dir.path().join("test_contract"); + fs::create_dir(&temp_contract_dir)?; + crate::create_smart_contract( + "test_contract", + temp_contract_dir.as_path(), + &crate::Contract::Standard, + )?; + Ok(temp_dir) + } + + #[test] + fn test_get_manifest_path() -> Result<(), Error> { + let temp_dir = setup_test_environment()?; + get_manifest_path(Some(&PathBuf::from(temp_dir.path().join("test_contract"))))?; + Ok(()) + } + + #[test] + fn test_canonicalized_path() -> Result<(), Error> { + let temp_dir = tempfile::tempdir()?; + // Error case + let error_directory = canonicalized_path(&temp_dir.path().join("my_directory")); + assert!(error_directory.is_err()); + // Success case + canonicalized_path(temp_dir.path())?; + Ok(()) + } + + #[test] + fn parse_balance_works() -> Result<(), Error> { + let balance = parse_balance("100000")?; + assert_eq!(balance, BalanceVariant::Default(100000)); + Ok(()) + } + + #[test] + fn parse_balance_fails_wrong_balance() -> Result<(), Error> { + assert!(matches!(parse_balance("wrongbalance"), Err(super::Error::BalanceParsing(..)))); + Ok(()) + } + + #[test] + fn parse_account_works() -> Result<(), Error> { + let account = parse_account("5CLPm1CeUvJhZ8GCDZCR7nWZ2m3XXe4X5MtAQK69zEjut36A")?; + assert_eq!(account.to_string(), "5CLPm1CeUvJhZ8GCDZCR7nWZ2m3XXe4X5MtAQK69zEjut36A"); + Ok(()) + } + + #[test] + fn parse_account_fails_wrong_value() -> Result<(), Error> { + assert!(matches!( + parse_account("wrongaccount"), + Err(super::Error::AccountAddressParsing(..)) + )); + Ok(()) + } + + #[test] + fn parse_hex_bytes_works() -> Result<(), Error> { + let input_in_hex = "48656c6c6f"; + let result = parse_hex_bytes(input_in_hex)?; + assert_eq!(result, Bytes(vec![72, 101, 108, 108, 111])); + Ok(()) + } + + #[test] + fn parse_hex_bytes_fails_wrong_input() -> Result<()> { + assert!(matches!(parse_hex_bytes("wronghexvalue"), Err(Error::HexParsing(..)))); + Ok(()) + } +} diff --git a/crates/pop-contracts/tests/files/testing.wasm b/crates/pop-contracts/tests/files/testing.wasm index 430888669..e69de29bb 100644 Binary files a/crates/pop-contracts/tests/files/testing.wasm and b/crates/pop-contracts/tests/files/testing.wasm differ diff --git a/crates/pop-parachains/Cargo.toml b/crates/pop-parachains/Cargo.toml index dd6406824..619b3336e 100644 --- a/crates/pop-parachains/Cargo.toml +++ b/crates/pop-parachains/Cargo.toml @@ -12,12 +12,12 @@ version.workspace = true anyhow.workspace = true clap.workspace = true duct.workspace = true -flate2.workspace = true glob.workspace = true serde_json.workspace = true strum.workspace = true strum_macros.workspace = true -tar.workspace = true +subxt-signer.workspace = true +subxt.workspace = true tempfile.workspace = true thiserror.workspace = true tokio.workspace = true @@ -25,7 +25,9 @@ url.workspace = true askama.workspace = true indexmap.workspace = true -reqwest.workspace = true +scale-info.workspace = true +scale-value.workspace = true +sp-core.workspace = true symlink.workspace = true toml_edit.workspace = true walkdir.workspace = true @@ -33,8 +35,8 @@ walkdir.workspace = true zombienet-sdk.workspace = true # Pop -pop-common = { path = "../pop-common", version = "0.5.0" } +pop-common = { path = "../pop-common", version = "0.6.0" } [dev-dependencies] -mockito.workspace = true +# Used in doc tests. tokio-test.workspace = true diff --git a/crates/pop-parachains/src/call/metadata/action.rs b/crates/pop-parachains/src/call/metadata/action.rs new file mode 100644 index 000000000..1e8298fc7 --- /dev/null +++ b/crates/pop-parachains/src/call/metadata/action.rs @@ -0,0 +1,211 @@ +// SPDX-License-Identifier: GPL-3.0 + +use super::{find_dispatchable_by_name, Pallet}; +use strum::{EnumMessage as _, EnumProperty as _, VariantArray as _}; +use strum_macros::{AsRefStr, Display, EnumMessage, EnumProperty, EnumString, VariantArray}; + +/// Enum representing various predefined actions supported. +#[derive( + AsRefStr, + Clone, + Debug, + Display, + EnumMessage, + EnumString, + EnumProperty, + Eq, + Hash, + PartialEq, + VariantArray, +)] +pub enum Action { + /// Transfer balance. + #[strum( + serialize = "transfer", + message = "transfer_allow_death", + detailed_message = "Transfer balance", + props(Pallet = "Balances") + )] + Transfer, + /// Create an asset. + #[strum( + serialize = "create", + message = "create", + detailed_message = "Create an asset", + props(Pallet = "Assets") + )] + CreateAsset, + /// Mint an asset. + #[strum( + serialize = "mint", + message = "mint", + detailed_message = "Mint an asset", + props(Pallet = "Assets") + )] + MintAsset, + /// Create a NFT collection. + #[strum( + serialize = "create_nft", + message = "create", + detailed_message = "Create a NFT collection", + props(Pallet = "Nfts") + )] + CreateCollection, + /// Mint a NFT. + #[strum( + serialize = "mint_nft", + message = "mint", + detailed_message = "Mint a NFT", + props(Pallet = "Nfts") + )] + MintNFT, + /// Purchase on-demand coretime. + #[strum( + serialize = "place_order_allow_death", + message = "place_order_allow_death", + detailed_message = "Purchase on-demand coretime", + props(Pallet = "OnDemand") + )] + PurchaseOnDemandCoretime, + /// Reserve a parachain ID. + #[strum( + serialize = "reserve", + message = "reserve", + detailed_message = "Reserve a parachain ID", + props(Pallet = "Registrar") + )] + Reserve, + /// Register a parachain ID with genesis state and code. + #[strum( + serialize = "register", + message = "register", + detailed_message = "Register a parachain ID with genesis state and code", + props(Pallet = "Registrar") + )] + Register, + /// Make a remark. + #[strum( + serialize = "remark", + message = "remark_with_event", + detailed_message = "Make a remark", + props(Pallet = "System") + )] + Remark, +} + +impl Action { + /// Get the description of the action. + pub fn description(&self) -> &str { + self.get_detailed_message().unwrap_or_default() + } + + /// Get the dispatchable function name corresponding to the action. + pub fn function_name(&self) -> &str { + self.get_message().unwrap_or_default() + } + + /// Get the associated pallet name for the action. + pub fn pallet_name(&self) -> &str { + self.get_str("Pallet").unwrap_or_default() + } +} + +/// Fetch the list of supported actions based on available pallets. +/// +/// # Arguments +/// * `pallets`: Supported pallets. +pub fn supported_actions(pallets: &[Pallet]) -> Vec { + let mut actions = Vec::new(); + for action in Action::VARIANTS.iter() { + if find_dispatchable_by_name(pallets, action.pallet_name(), action.function_name()).is_ok() + { + actions.push(action.clone()); + } + } + actions +} + +#[cfg(test)] +mod tests { + use super::{Action::*, *}; + use crate::{call::tests::POP_NETWORK_TESTNET_URL, parse_chain_metadata, set_up_client}; + use anyhow::Result; + use std::collections::HashMap; + + const POLKADOT_NETWORK_URL: &str = "wss://polkadot-rpc.publicnode.com"; + + #[test] + fn action_descriptions_are_correct() { + let descriptions = HashMap::from([ + (CreateAsset, "Create an asset"), + (MintAsset, "Mint an asset"), + (CreateCollection, "Create a NFT collection"), + (MintNFT, "Mint a NFT"), + (PurchaseOnDemandCoretime, "Purchase on-demand coretime"), + (Transfer, "Transfer balance"), + (Register, "Register a parachain ID with genesis state and code"), + (Reserve, "Reserve a parachain ID"), + (Remark, "Make a remark"), + ]); + + for action in Action::VARIANTS.iter() { + assert_eq!(&action.description(), descriptions.get(action).unwrap()); + } + } + + #[test] + fn pallet_names_are_correct() { + let pallets = HashMap::from([ + (CreateAsset, "Assets"), + (MintAsset, "Assets"), + (CreateCollection, "Nfts"), + (MintNFT, "Nfts"), + (PurchaseOnDemandCoretime, "OnDemand"), + (Transfer, "Balances"), + (Register, "Registrar"), + (Reserve, "Registrar"), + (Remark, "System"), + ]); + + for action in Action::VARIANTS.iter() { + assert_eq!(&action.pallet_name(), pallets.get(action).unwrap(),); + } + } + + #[test] + fn function_names_are_correct() { + let pallets = HashMap::from([ + (CreateAsset, "create"), + (MintAsset, "mint"), + (CreateCollection, "create"), + (MintNFT, "mint"), + (PurchaseOnDemandCoretime, "place_order_allow_death"), + (Transfer, "transfer_allow_death"), + (Register, "register"), + (Reserve, "reserve"), + (Remark, "remark_with_event"), + ]); + + for action in Action::VARIANTS.iter() { + assert_eq!(&action.function_name(), pallets.get(action).unwrap(),); + } + } + + #[tokio::test] + async fn supported_actions_works() -> Result<()> { + // Test Pop Parachain. + let mut client: subxt::OnlineClient = + set_up_client(POP_NETWORK_TESTNET_URL).await?; + let actions = supported_actions(&parse_chain_metadata(&client)?); + assert_eq!( + actions, + vec![Transfer, CreateAsset, MintAsset, CreateCollection, MintNFT, Remark] + ); + + // Test Polkadot Relay Chain. + client = set_up_client(POLKADOT_NETWORK_URL).await?; + let actions = supported_actions(&parse_chain_metadata(&client)?); + assert_eq!(actions, vec![Transfer, PurchaseOnDemandCoretime, Reserve, Register, Remark]); + Ok(()) + } +} diff --git a/crates/pop-parachains/src/call/metadata/mod.rs b/crates/pop-parachains/src/call/metadata/mod.rs new file mode 100644 index 000000000..5a9a9a2cb --- /dev/null +++ b/crates/pop-parachains/src/call/metadata/mod.rs @@ -0,0 +1,335 @@ +// SPDX-License-Identifier: GPL-3.0 + +use crate::errors::Error; +use params::Param; +use scale_value::stringify::custom_parsers; +use std::fmt::{Display, Formatter}; +use subxt::{dynamic::Value, utils::to_hex, Metadata, OnlineClient, SubstrateConfig}; + +pub mod action; +pub mod params; + +/// Represents a pallet in the blockchain, including its dispatchable functions. +#[derive(Clone, Debug, Default, Eq, PartialEq)] +pub struct Pallet { + /// The name of the pallet. + pub name: String, + /// The index of the pallet within the runtime. + pub index: u8, + /// The documentation of the pallet. + pub docs: String, + /// The dispatchable functions of the pallet. + pub functions: Vec, +} + +impl Display for Pallet { + fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { + write!(f, "{}", self.name) + } +} + +/// Represents a dispatchable function. +#[derive(Clone, Debug, Default, Eq, PartialEq)] +pub struct Function { + /// The pallet containing the dispatchable function. + pub pallet: String, + /// The name of the function. + pub name: String, + /// The index of the function within the pallet. + pub index: u8, + /// The documentation of the function. + pub docs: String, + /// The parameters of the function. + pub params: Vec, + /// Whether this function is supported (no recursive or unsupported types like `RuntimeCall`). + pub is_supported: bool, +} + +impl Display for Function { + fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { + write!(f, "{}", self.name) + } +} + +/// Parses the chain metadata to extract information about pallets and their dispatchable functions. +/// +/// # Arguments +/// * `client`: The client to interact with the chain. +/// +/// NOTE: pallets are ordered by their index within the runtime by default. +pub fn parse_chain_metadata(client: &OnlineClient) -> Result, Error> { + let metadata: Metadata = client.metadata(); + + let pallets = metadata + .pallets() + .map(|pallet| { + let functions = pallet + .call_variants() + .map(|variants| { + variants + .iter() + .map(|variant| { + let mut is_supported = true; + + // Parse parameters for the dispatchable function. + let params = { + let mut parsed_params = Vec::new(); + for field in &variant.fields { + match params::field_to_param(&metadata, field) { + Ok(param) => parsed_params.push(param), + Err(_) => { + // If an error occurs while parsing the values, mark the + // dispatchable function as unsupported rather than + // error. + is_supported = false; + parsed_params.clear(); + break; + }, + } + } + parsed_params + }; + + Ok(Function { + pallet: pallet.name().to_string(), + name: variant.name.clone(), + index: variant.index, + docs: if is_supported { + // Filter out blank lines and then flatten into a single value. + variant + .docs + .iter() + .filter(|l| !l.is_empty()) + .cloned() + .collect::>() + .join(" ") + } else { + // To display the message in the UI + "Function Not Supported".to_string() + }, + params, + is_supported, + }) + }) + .collect::, Error>>() + }) + .unwrap_or_else(|| Ok(vec![]))?; + + Ok(Pallet { + name: pallet.name().to_string(), + index: pallet.index(), + docs: pallet.docs().join(" "), + functions, + }) + }) + .collect::, Error>>()?; + + Ok(pallets) +} + +/// Finds a specific pallet by name and retrieves its details from metadata. +/// +/// # Arguments +/// * `pallets`: List of pallets available within the chain's runtime. +/// * `pallet_name`: The name of the pallet to find. +pub fn find_pallet_by_name<'a>( + pallets: &'a [Pallet], + pallet_name: &str, +) -> Result<&'a Pallet, Error> { + if let Some(pallet) = pallets.iter().find(|p| p.name == pallet_name) { + Ok(pallet) + } else { + Err(Error::PalletNotFound(pallet_name.to_string())) + } +} + +/// Finds a specific dispatchable function by name and retrieves its details from metadata. +/// +/// # Arguments +/// * `pallets`: List of pallets available within the chain's runtime. +/// * `pallet_name`: The name of the pallet. +/// * `function_name`: Name of the dispatchable function to locate. +pub fn find_dispatchable_by_name<'a>( + pallets: &'a [Pallet], + pallet_name: &str, + function_name: &str, +) -> Result<&'a Function, Error> { + let pallet = find_pallet_by_name(pallets, pallet_name)?; + if let Some(function) = pallet.functions.iter().find(|&e| e.name == function_name) { + Ok(function) + } else { + Err(Error::FunctionNotSupported) + } +} + +/// Parses and processes raw string parameter values for a dispatchable function, mapping them to +/// `Value` types. +/// +/// # Arguments +/// * `params`: The metadata definition for each parameter of the corresponding dispatchable +/// function. +/// * `raw_params`: A vector of raw string arguments for the dispatchable function. +pub fn parse_dispatchable_arguments( + params: &[Param], + raw_params: Vec, +) -> Result, Error> { + params + .iter() + .zip(raw_params) + .map(|(param, raw_param)| { + // Convert sequence parameters to hex if is_sequence + let processed_param = if param.is_sequence && !raw_param.starts_with("0x") { + to_hex(&raw_param) + } else { + raw_param + }; + scale_value::stringify::from_str_custom() + .add_custom_parser(custom_parsers::parse_hex) + .add_custom_parser(custom_parsers::parse_ss58) + .parse(&processed_param) + .0 + .map_err(|_| Error::ParamProcessingError) + }) + .collect() +} + +#[cfg(test)] +mod tests { + use super::*; + + use crate::{call::tests::POP_NETWORK_TESTNET_URL, set_up_client}; + use anyhow::Result; + use sp_core::bytes::from_hex; + use subxt::ext::scale_bits; + + #[tokio::test] + async fn parse_chain_metadata_works() -> Result<()> { + let client = set_up_client(POP_NETWORK_TESTNET_URL).await?; + let pallets = parse_chain_metadata(&client)?; + // Test the first pallet is parsed correctly + let first_pallet = pallets.first().unwrap(); + assert_eq!(first_pallet.name, "System"); + assert_eq!(first_pallet.index, 0); + assert_eq!(first_pallet.docs, ""); + assert_eq!(first_pallet.functions.len(), 11); + let first_function = first_pallet.functions.first().unwrap(); + assert_eq!(first_function.name, "remark"); + assert_eq!(first_function.index, 0); + assert_eq!( + first_function.docs, + "Make some on-chain remark. Can be executed by every `origin`." + ); + assert!(first_function.is_supported); + assert_eq!(first_function.params.first().unwrap().name, "remark"); + assert_eq!(first_function.params.first().unwrap().type_name, "[u8]"); + assert_eq!(first_function.params.first().unwrap().sub_params.len(), 0); + assert!(!first_function.params.first().unwrap().is_optional); + assert!(!first_function.params.first().unwrap().is_tuple); + assert!(!first_function.params.first().unwrap().is_variant); + assert!(first_function.params.first().unwrap().is_sequence); + Ok(()) + } + + #[tokio::test] + async fn find_pallet_by_name_works() -> Result<()> { + let client = set_up_client(POP_NETWORK_TESTNET_URL).await?; + let pallets = parse_chain_metadata(&client)?; + assert!(matches!( + find_pallet_by_name(&pallets, "WrongName"), + Err(Error::PalletNotFound(pallet)) if pallet == "WrongName".to_string())); + let pallet = find_pallet_by_name(&pallets, "Balances")?; + assert_eq!(pallet.name, "Balances"); + assert_eq!(pallet.functions.len(), 9); + Ok(()) + } + + #[tokio::test] + async fn find_dispatchable_by_name_works() -> Result<()> { + let client = set_up_client(POP_NETWORK_TESTNET_URL).await?; + let pallets = parse_chain_metadata(&client)?; + assert!(matches!( + find_dispatchable_by_name(&pallets, "WrongName", "wrong_name"), + Err(Error::PalletNotFound(pallet)) if pallet == "WrongName".to_string())); + assert!(matches!( + find_dispatchable_by_name(&pallets, "Balances", "wrong_name"), + Err(Error::FunctionNotSupported) + )); + let function = find_dispatchable_by_name(&pallets, "Balances", "force_transfer")?; + assert_eq!(function.name, "force_transfer"); + assert_eq!(function.docs, "Exactly as `transfer_allow_death`, except the origin must be root and the source account may be specified."); + assert_eq!(function.is_supported, true); + assert_eq!(function.params.len(), 3); + Ok(()) + } + + #[test] + fn parse_dispatchable_arguments_works() -> Result<()> { + // Values for testing from: https://docs.rs/scale-value/0.18.0/scale_value/stringify/fn.from_str.html + // and https://docs.rs/scale-value/0.18.0/scale_value/stringify/fn.from_str_custom.html + let args = [ + "1".to_string(), + "-1".to_string(), + "true".to_string(), + "'a'".to_string(), + "\"hi\"".to_string(), + "{ a: true, b: \"hello\" }".to_string(), + "MyVariant { a: true, b: \"hello\" }".to_string(), + "<0101>".to_string(), + "(1,2,0x030405)".to_string(), + r#"{ + name: "Alice", + address: 5FHneW46xGXgs5mUiveU4sbTyGBzmstUspZC92UhjJM694ty + }"# + .to_string(), + ] + .to_vec(); + let addr: Vec<_> = + from_hex("8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48") + .unwrap() + .into_iter() + .map(|b| Value::u128(b as u128)) + .collect(); + // Define mock dispatchable function parameters for testing. + let params = vec![ + Param { type_name: "u128".to_string(), ..Default::default() }, + Param { type_name: "i128".to_string(), ..Default::default() }, + Param { type_name: "bool".to_string(), ..Default::default() }, + Param { type_name: "char".to_string(), ..Default::default() }, + Param { type_name: "string".to_string(), ..Default::default() }, + Param { type_name: "compostie".to_string(), ..Default::default() }, + Param { type_name: "variant".to_string(), is_variant: true, ..Default::default() }, + Param { type_name: "bit_sequence".to_string(), ..Default::default() }, + Param { type_name: "tuple".to_string(), is_tuple: true, ..Default::default() }, + Param { type_name: "composite".to_string(), ..Default::default() }, + ]; + assert_eq!( + parse_dispatchable_arguments(¶ms, args)?, + [ + Value::u128(1), + Value::i128(-1), + Value::bool(true), + Value::char('a'), + Value::string("hi"), + Value::named_composite(vec![ + ("a", Value::bool(true)), + ("b", Value::string("hello")) + ]), + Value::named_variant( + "MyVariant", + vec![("a", Value::bool(true)), ("b", Value::string("hello"))] + ), + Value::bit_sequence(scale_bits::Bits::from_iter([false, true, false, true])), + Value::unnamed_composite(vec![ + Value::u128(1), + Value::u128(2), + Value::unnamed_composite(vec![Value::u128(3), Value::u128(4), Value::u128(5),]) + ]), + Value::named_composite(vec![ + ("name", Value::string("Alice")), + ("address", Value::unnamed_composite(addr)) + ]) + ] + ); + Ok(()) + } +} diff --git a/crates/pop-parachains/src/call/metadata/params.rs b/crates/pop-parachains/src/call/metadata/params.rs new file mode 100644 index 000000000..9d8521f9c --- /dev/null +++ b/crates/pop-parachains/src/call/metadata/params.rs @@ -0,0 +1,238 @@ +// SPDX-License-Identifier: GPL-3.0 + +use crate::errors::Error; +use pop_common::format_type; +use scale_info::{form::PortableForm, Field, PortableRegistry, TypeDef}; +use subxt::Metadata; + +/// Describes a parameter of a dispatchable function. +#[derive(Clone, Debug, Default, Eq, PartialEq)] +pub struct Param { + /// The name of the parameter. + pub name: String, + /// The type of the parameter. + pub type_name: String, + /// Nested parameters for composite, variants, types or tuples. + pub sub_params: Vec, + /// Indicates if the parameter is optional (`Option`). + pub is_optional: bool, + /// Indicates if the parameter is a Tuple. + pub is_tuple: bool, + /// Indicates if the parameter is a Variant. + pub is_variant: bool, + /// Indicates if the parameter is a Sequence. + pub is_sequence: bool, +} + +/// Transforms a metadata field into its `Param` representation. +/// +/// # Arguments +/// * `metadata`: The chain metadata. +/// * `field`: A parameter of a dispatchable function (as [Field]). +pub fn field_to_param(metadata: &Metadata, field: &Field) -> Result { + let registry = metadata.types(); + if let Some(name) = field.type_name.as_deref() { + if name.contains("RuntimeCall") { + return Err(Error::FunctionNotSupported); + } + } + let name = field.name.as_deref().unwrap_or("Unnamed"); //It can be unnamed field + type_to_param(name, registry, field.ty.id) +} + +/// Converts a type's metadata into a `Param` representation. +/// +/// # Arguments +/// * `name`: The name of the parameter. +/// * `registry`: Type registry containing all types used in the metadata. +/// * `type_id`: The ID of the type to be converted. +fn type_to_param(name: &str, registry: &PortableRegistry, type_id: u32) -> Result { + let type_info = registry + .resolve(type_id) + .ok_or_else(|| Error::MetadataParsingError(name.to_string()))?; + for param in &type_info.type_params { + if param.name.contains("RuntimeCall") { + return Err(Error::FunctionNotSupported); + } + } + if type_info.path.segments == ["Option"] { + if let Some(sub_type_id) = type_info.type_params.first().and_then(|param| param.ty) { + // Recursive for the sub parameters + let sub_param = type_to_param(name, registry, sub_type_id.id)?; + Ok(Param { + name: name.to_string(), + type_name: sub_param.type_name, + sub_params: sub_param.sub_params, + is_optional: true, + ..Default::default() + }) + } else { + Err(Error::MetadataParsingError(name.to_string())) + } + } else { + // Determine the formatted type name. + let type_name = format_type(type_info, registry); + match &type_info.type_def { + TypeDef::Primitive(_) | TypeDef::Array(_) | TypeDef::Compact(_) => + Ok(Param { name: name.to_string(), type_name, ..Default::default() }), + TypeDef::Composite(composite) => { + let sub_params = composite + .fields + .iter() + .map(|field| { + // Recursive for the sub parameters of composite type. + type_to_param(field.name.as_deref().unwrap_or(name), registry, field.ty.id) + }) + .collect::, Error>>()?; + + Ok(Param { name: name.to_string(), type_name, sub_params, ..Default::default() }) + }, + TypeDef::Variant(variant) => { + let variant_params = variant + .variants + .iter() + .map(|variant_param| { + let variant_sub_params = variant_param + .fields + .iter() + .map(|field| { + // Recursive for the sub parameters of variant type. + type_to_param( + field.name.as_deref().unwrap_or(&variant_param.name), + registry, + field.ty.id, + ) + }) + .collect::, Error>>()?; + Ok(Param { + name: variant_param.name.clone(), + type_name: "".to_string(), + sub_params: variant_sub_params, + is_variant: true, + ..Default::default() + }) + }) + .collect::, Error>>()?; + + Ok(Param { + name: name.to_string(), + type_name, + sub_params: variant_params, + is_variant: true, + ..Default::default() + }) + }, + TypeDef::Sequence(_) => Ok(Param { + name: name.to_string(), + type_name, + is_sequence: true, + ..Default::default() + }), + TypeDef::Tuple(tuple) => { + let sub_params = tuple + .fields + .iter() + .enumerate() + .map(|(index, field_id)| { + type_to_param( + &format!("Index {index} of the tuple {name}"), + registry, + field_id.id, + ) + }) + .collect::, Error>>()?; + + Ok(Param { + name: name.to_string(), + type_name, + sub_params, + is_tuple: true, + ..Default::default() + }) + }, + _ => Err(Error::MetadataParsingError(name.to_string())), + } + } +} + +#[cfg(test)] +mod tests { + use super::*; + use crate::{call::tests::POP_NETWORK_TESTNET_URL, set_up_client}; + use anyhow::Result; + + #[tokio::test] + async fn field_to_param_works() -> Result<()> { + let client = set_up_client(POP_NETWORK_TESTNET_URL).await?; + let metadata = client.metadata(); + // Test a supported dispatchable function. + let function = metadata + .pallet_by_name("Balances") + .unwrap() + .call_variant_by_name("force_transfer") + .unwrap(); + let mut params = Vec::new(); + for field in &function.fields { + params.push(field_to_param(&metadata, field)?) + } + assert_eq!(params.len(), 3); + assert_eq!(params.first().unwrap().name, "source"); + assert_eq!(params.first().unwrap().type_name, "MultiAddress: Id(AccountId32 ([u8;32])), Index(Compact<()>), Raw([u8]), Address32([u8;32]), Address20([u8;20])"); + assert_eq!(params.first().unwrap().sub_params.len(), 5); + assert_eq!(params.first().unwrap().sub_params.first().unwrap().name, "Id"); + assert_eq!(params.first().unwrap().sub_params.first().unwrap().type_name, ""); + assert_eq!( + params + .first() + .unwrap() + .sub_params + .first() + .unwrap() + .sub_params + .first() + .unwrap() + .name, + "Id" + ); + assert_eq!( + params + .first() + .unwrap() + .sub_params + .first() + .unwrap() + .sub_params + .first() + .unwrap() + .type_name, + "AccountId32 ([u8;32])" + ); + // Test some dispatchable functions that are not supported. + let function = + metadata.pallet_by_name("Sudo").unwrap().call_variant_by_name("sudo").unwrap(); + assert!(matches!( + field_to_param(&metadata, &function.fields.first().unwrap()), + Err(Error::FunctionNotSupported) + )); + let function = metadata + .pallet_by_name("Utility") + .unwrap() + .call_variant_by_name("batch") + .unwrap(); + assert!(matches!( + field_to_param(&metadata, &function.fields.first().unwrap()), + Err(Error::FunctionNotSupported) + )); + let function = metadata + .pallet_by_name("PolkadotXcm") + .unwrap() + .call_variant_by_name("execute") + .unwrap(); + assert!(matches!( + field_to_param(&metadata, &function.fields.first().unwrap()), + Err(Error::FunctionNotSupported) + )); + + Ok(()) + } +} diff --git a/crates/pop-parachains/src/call/mod.rs b/crates/pop-parachains/src/call/mod.rs new file mode 100644 index 000000000..4569687ec --- /dev/null +++ b/crates/pop-parachains/src/call/mod.rs @@ -0,0 +1,263 @@ +// SPDX-License-Identifier: GPL-3.0 + +use crate::{errors::Error, Function}; +use pop_common::{ + call::{DefaultEnvironment, DisplayEvents, TokenMetadata, Verbosity}, + create_signer, +}; +use sp_core::bytes::{from_hex, to_hex}; +use subxt::{ + dynamic::Value, + tx::{DynamicPayload, Payload, SubmittableExtrinsic}, + OnlineClient, SubstrateConfig, +}; +pub mod metadata; + +/// Sets up an [OnlineClient] instance for connecting to a blockchain. +/// +/// # Arguments +/// * `url` - Endpoint of the node. +pub async fn set_up_client(url: &str) -> Result, Error> { + OnlineClient::::from_url(url) + .await + .map_err(|e| Error::ConnectionFailure(e.to_string())) +} + +/// Constructs a dynamic extrinsic payload for a specified dispatchable function. +/// +/// # Arguments +/// * `function` - A dispatchable function. +/// * `args` - A vector of string arguments to be passed to construct the extrinsic. +pub fn construct_extrinsic( + function: &Function, + args: Vec, +) -> Result { + let parsed_args: Vec = metadata::parse_dispatchable_arguments(&function.params, args)?; + Ok(subxt::dynamic::tx(function.pallet.clone(), function.name.clone(), parsed_args)) +} + +/// Constructs a Sudo extrinsic. +/// +/// # Arguments +/// * `xt`: The extrinsic representing the dispatchable function call to be dispatched with `Root` +/// privileges. +pub fn construct_sudo_extrinsic(xt: DynamicPayload) -> DynamicPayload { + subxt::dynamic::tx("Sudo", "sudo", [xt.into_value()].to_vec()) +} + +/// Signs and submits a given extrinsic. +/// +/// # Arguments +/// * `client` - The client used to interact with the chain. +/// * `url` - Endpoint of the node. +/// * `xt` - The (encoded) extrinsic to be signed and submitted. +/// * `suri` - The secret URI (e.g., mnemonic or private key) for signing the extrinsic. +pub async fn sign_and_submit_extrinsic( + client: &OnlineClient, + url: &url::Url, + xt: Xt, + suri: &str, +) -> Result { + let signer = create_signer(suri)?; + let result = client + .tx() + .sign_and_submit_then_watch_default(&xt, &signer) + .await + .map_err(|e| Error::ExtrinsicSubmissionError(format!("{:?}", e)))? + .wait_for_finalized_success() + .await + .map_err(|e| Error::ExtrinsicSubmissionError(format!("{:?}", e)))?; + + // Obtain required metadata and parse events. The following is using existing logic from + // `cargo-contract`, also used in calling contracts, due to simplicity and can be refactored in + // the future. + let metadata = client.metadata(); + let token_metadata = TokenMetadata::query::(url).await?; + let events = DisplayEvents::from_events::( + &result, None, &metadata, + )?; + let events = + events.display_events::(Verbosity::Default, &token_metadata)?; + + Ok(format!("Extrinsic Submitted with hash: {:?}\n\n{}", result.extrinsic_hash(), events)) +} + +/// Submits a signed extrinsic. +/// +/// # Arguments +/// * `client` - The client used to interact with the chain. +/// * `payload` - The signed payload string to be submitted. +pub async fn submit_signed_extrinsic( + client: OnlineClient, + payload: String, +) -> Result { + let hex_encoded = + from_hex(&payload).map_err(|e| Error::CallDataDecodingError(e.to_string()))?; + let extrinsic = SubmittableExtrinsic::from_bytes(client, hex_encoded); + let result = extrinsic + .submit_and_watch() + .await + .map_err(|e| Error::ExtrinsicSubmissionError(format!("{:?}", e)))? + .wait_for_finalized_success() + .await + .map_err(|e| Error::ExtrinsicSubmissionError(format!("{:?}", e)))?; + Ok(format!("{:?}", result.extrinsic_hash())) +} + +/// Encodes the call data for a given extrinsic into a hexadecimal string. +/// +/// # Arguments +/// * `client` - The client used to interact with the chain. +/// * `xt` - The extrinsic whose call data will be encoded and returned. +pub fn encode_call_data( + client: &OnlineClient, + xt: &DynamicPayload, +) -> Result { + let call_data = xt + .encode_call_data(&client.metadata()) + .map_err(|e| Error::CallDataEncodingError(e.to_string()))?; + Ok(to_hex(&call_data, false)) +} + +/// Decodes a hex-encoded string into a vector of bytes representing the call data. +/// +/// # Arguments +/// * `call_data` - The hex-encoded string representing call data. +pub fn decode_call_data(call_data: &str) -> Result, Error> { + from_hex(call_data).map_err(|e| Error::CallDataDecodingError(e.to_string())) +} + +/// This struct implements the [`Payload`] trait and is used to submit +/// pre-encoded SCALE call data directly, without the dynamic construction of transactions. +pub struct CallData(Vec); + +impl CallData { + /// Create a new instance of `CallData`. + pub fn new(data: Vec) -> CallData { + CallData(data) + } +} + +impl Payload for CallData { + fn encode_call_data_to( + &self, + _: &subxt::Metadata, + out: &mut Vec, + ) -> Result<(), subxt::ext::subxt_core::Error> { + out.extend_from_slice(&self.0); + Ok(()) + } +} + +#[cfg(test)] +mod tests { + use super::*; + use crate::{find_dispatchable_by_name, parse_chain_metadata, set_up_client}; + use anyhow::Result; + use url::Url; + + const ALICE_SURI: &str = "//Alice"; + pub(crate) const POP_NETWORK_TESTNET_URL: &str = "wss://rpc1.paseo.popnetwork.xyz"; + + #[tokio::test] + async fn set_up_client_works() -> Result<()> { + assert!(matches!( + set_up_client("wss://wronguri.xyz").await, + Err(Error::ConnectionFailure(_)) + )); + set_up_client(POP_NETWORK_TESTNET_URL).await?; + Ok(()) + } + + #[tokio::test] + async fn construct_extrinsic_works() -> Result<()> { + let client = set_up_client(POP_NETWORK_TESTNET_URL).await?; + let pallets = parse_chain_metadata(&client)?; + let transfer_allow_death = + find_dispatchable_by_name(&pallets, "Balances", "transfer_allow_death")?; + + // Wrong parameters + assert!(matches!( + construct_extrinsic( + &transfer_allow_death, + vec![ALICE_SURI.to_string(), "100".to_string()], + ), + Err(Error::ParamProcessingError) + )); + // Valid parameters + let xt = construct_extrinsic( + &transfer_allow_death, + vec![ + "Id(5FHneW46xGXgs5mUiveU4sbTyGBzmstUspZC92UhjJM694ty)".to_string(), + "100".to_string(), + ], + )?; + assert_eq!(xt.call_name(), "transfer_allow_death"); + assert_eq!(xt.pallet_name(), "Balances"); + Ok(()) + } + + #[tokio::test] + async fn encode_call_data_works() -> Result<()> { + let client = set_up_client(POP_NETWORK_TESTNET_URL).await?; + let pallets = parse_chain_metadata(&client)?; + let remark = find_dispatchable_by_name(&pallets, "System", "remark")?; + let xt = construct_extrinsic(&remark, vec!["0x11".to_string()])?; + assert_eq!(encode_call_data(&client, &xt)?, "0x00000411"); + let xt = construct_extrinsic(&remark, vec!["123".to_string()])?; + assert_eq!(encode_call_data(&client, &xt)?, "0x00000c313233"); + let xt = construct_extrinsic(&remark, vec!["test".to_string()])?; + assert_eq!(encode_call_data(&client, &xt)?, "0x00001074657374"); + Ok(()) + } + + #[tokio::test] + async fn decode_call_data_works() -> Result<()> { + assert!(matches!(decode_call_data("wrongcalldata"), Err(Error::CallDataDecodingError(..)))); + let client = set_up_client(POP_NETWORK_TESTNET_URL).await?; + let pallets = parse_chain_metadata(&client)?; + let remark = find_dispatchable_by_name(&pallets, "System", "remark")?; + let xt = construct_extrinsic(&remark, vec!["0x11".to_string()])?; + let expected_call_data = xt.encode_call_data(&client.metadata())?; + assert_eq!(decode_call_data("0x00000411")?, expected_call_data); + Ok(()) + } + + #[tokio::test] + async fn sign_and_submit_wrong_extrinsic_fails() -> Result<()> { + let client = set_up_client(POP_NETWORK_TESTNET_URL).await?; + let function = Function { + pallet: "WrongPallet".to_string(), + name: "wrong_extrinsic".to_string(), + index: 0, + docs: "documentation".to_string(), + is_supported: true, + ..Default::default() + }; + let xt = construct_extrinsic(&function, vec!["0x11".to_string()])?; + assert!(matches!( + sign_and_submit_extrinsic(&client, &Url::parse(POP_NETWORK_TESTNET_URL)?, xt, ALICE_SURI).await, + Err(Error::ExtrinsicSubmissionError(message)) if message.contains("PalletNameNotFound(\"WrongPallet\"))") + )); + Ok(()) + } + + #[tokio::test] + async fn construct_sudo_extrinsic_works() -> Result<()> { + let client = set_up_client(POP_NETWORK_TESTNET_URL).await?; + let pallets = parse_chain_metadata(&client)?; + let force_transfer = find_dispatchable_by_name(&pallets, "Balances", "force_transfer")?; + let xt = construct_extrinsic( + &force_transfer, + vec![ + "Id(5FHneW46xGXgs5mUiveU4sbTyGBzmstUspZC92UhjJM694ty)".to_string(), + "Id(5DAAnrj7VHTznn2AWBemMuyBwZWs6FNFjdyVXUeYum3PTXFy)".to_string(), + "100".to_string(), + ], + )?; + let xt = construct_sudo_extrinsic(xt); + assert_eq!(xt.call_name(), "sudo"); + assert_eq!(xt.pallet_name(), "Sudo"); + Ok(()) + } +} diff --git a/crates/pop-parachains/src/errors.rs b/crates/pop-parachains/src/errors.rs index 3eff7bbfc..2dd8805ac 100644 --- a/crates/pop-parachains/src/errors.rs +++ b/crates/pop-parachains/src/errors.rs @@ -3,24 +3,43 @@ use thiserror::Error; use zombienet_sdk::OrchestratorError; +/// Represents the various errors that can occur in the crate. #[derive(Error, Debug)] pub enum Error { #[error("User aborted due to existing target directory.")] Aborted, #[error("Anyhow error: {0}")] AnyhowError(#[from] anyhow::Error), + /// An error occurred while decoding the call data. + #[error("Failed to decode call data. {0}")] + CallDataDecodingError(String), + /// An error occurred while encoding the call data. + #[error("Failed to encode call data. {0}")] + CallDataEncodingError(String), #[error("{0}")] CommonError(#[from] pop_common::Error), + /// An error occurred while attempting to establish a connection to the endpoint. + #[error("Failed to establish a connection to: {0}")] + ConnectionFailure(String), #[error("Configuration error: {0}")] Config(String), #[error("Failed to access the current directory")] CurrentDirAccess, #[error("Failed to parse the endowment value")] EndowmentError, + /// An error occurred during the submission of an extrinsic. + #[error("Extrinsic submission error: {0}")] + ExtrinsicSubmissionError(String), + /// The dispatchable function is not supported. + #[error("The dispatchable function is not supported")] + FunctionNotSupported, #[error("IO error: {0}")] IO(#[from] std::io::Error), #[error("JSON error: {0}")] JsonError(#[from] serde_json::Error), + /// An error occurred while parsing metadata of a parameter. + #[error("Error parsing metadata for parameter {0}")] + MetadataParsingError(String), #[error("Missing binary: {0}")] MissingBinary(String), #[error("Missing chain spec file at: {0}")] @@ -31,12 +50,21 @@ pub enum Error { OrchestratorError(#[from] OrchestratorError), #[error("Failed to create pallet directory")] PalletDirCreation, + /// The specified pallet could not be found. + #[error("Failed to find the pallet {0}")] + PalletNotFound(String), + /// An error occurred while processing the arguments provided by the user. + #[error("Failed to process the arguments provided by the user.")] + ParamProcessingError, #[error("Invalid path")] PathError, #[error("Failed to execute rustfmt")] RustfmtError(std::io::Error), #[error("Template error: {0}")] SourcingError(#[from] pop_common::sourcing::Error), + /// An error occurred whilst interacting with a chain using `subxt`. + #[error("Subxt error: {0}")] + SubXtError(#[from] subxt::Error), #[error("Toml error: {0}")] TomlError(#[from] toml_edit::de::Error), #[error("Unsupported command: {0}")] diff --git a/crates/pop-parachains/src/lib.rs b/crates/pop-parachains/src/lib.rs index 06bee8f4a..50bb6af5b 100644 --- a/crates/pop-parachains/src/lib.rs +++ b/crates/pop-parachains/src/lib.rs @@ -2,10 +2,13 @@ #![doc = include_str!("../README.md")] mod build; +/// Provides functionality to construct, encode, sign, and submit chain extrinsics. +mod call; mod errors; mod generator; mod new_pallet; mod new_parachain; +mod relay; mod templates; mod up; mod utils; @@ -14,10 +17,26 @@ pub use build::{ binary_path, build_parachain, export_wasm_file, generate_genesis_state_file, generate_plain_chain_spec, generate_raw_chain_spec, is_supported, ChainSpec, }; +pub use call::{ + construct_extrinsic, construct_sudo_extrinsic, decode_call_data, encode_call_data, + metadata::{ + action::{supported_actions, Action}, + find_dispatchable_by_name, find_pallet_by_name, + params::Param, + parse_chain_metadata, Function, Pallet, + }, + set_up_client, sign_and_submit_extrinsic, submit_signed_extrinsic, CallData, +}; pub use errors::Error; pub use indexmap::IndexSet; pub use new_pallet::{create_pallet_template, new_pallet_options::*, TemplatePalletConfig}; pub use new_parachain::instantiate_template_dir; +pub use relay::{clear_dmpq, RelayChain}; +// External export from subxt. +pub use subxt::{ + tx::{DynamicPayload, Payload}, + OnlineClient, SubstrateConfig, +}; pub use templates::{Config, Parachain, Provider}; pub use up::Zombienet; pub use utils::helpers::is_initial_endowment_valid; diff --git a/crates/pop-parachains/src/new_parachain.rs b/crates/pop-parachains/src/new_parachain.rs index 8974cfede..f9e28e527 100644 --- a/crates/pop-parachains/src/new_parachain.rs +++ b/crates/pop-parachains/src/new_parachain.rs @@ -87,12 +87,7 @@ pub fn instantiate_openzeppelin_template( let source = temp_dir.path(); let tag = Git::clone_and_degit(template.repository_url()?, source, tag_version)?; - let mut template_name = template.template_name_without_provider(); - // Handle deprecated OpenZeppelin template - if matches!(template, Parachain::DeprecatedOpenZeppelinGeneric) { - template_name = Parachain::OpenZeppelinGeneric.template_name_without_provider(); - } - + let template_name = template.template_name_without_provider(); extract_template_files(template_name, temp_dir.path(), target, None)?; Ok(tag) } diff --git a/crates/pop-parachains/src/relay.rs b/crates/pop-parachains/src/relay.rs new file mode 100644 index 000000000..6ded8c497 --- /dev/null +++ b/crates/pop-parachains/src/relay.rs @@ -0,0 +1,146 @@ +// SPDX-License-Identifier: GPL-3.0 + +use crate::{call, DynamicPayload, Error}; +use sp_core::twox_128; +use subxt::{ + config::BlockHash, + dynamic::{self, Value}, + ext::sp_core, + OnlineClient, PolkadotConfig, +}; + +/// Clears the DMPQ state for the given parachain IDs. +/// +/// # Arguments +/// * `client` - Client for the network which state is to be modified. +/// * `para_ids` - List of ids to build the keys that will be mutated. +pub async fn clear_dmpq( + client: OnlineClient, + para_ids: &[u32], +) -> Result { + // Wait for blocks to be produced. + let mut sub = client.blocks().subscribe_finalized().await?; + for _ in 0..2 { + sub.next().await; + } + + // Generate storage keys to be removed + let clear_dmq_keys = generate_storage_keys(para_ids); + + // Submit calls to remove specified keys + let kill_storage = construct_kill_storage_call(clear_dmq_keys); + let sudo = subxt_signer::sr25519::dev::alice(); + let sudo_call = call::construct_sudo_extrinsic(kill_storage); + Ok(client.tx().sign_and_submit_default(&sudo_call, &sudo).await?) +} + +fn construct_kill_storage_call(keys: Vec>) -> DynamicPayload { + dynamic::tx( + "System", + "kill_storage", + vec![Value::unnamed_composite(keys.into_iter().map(Value::from_bytes))], + ) +} + +fn generate_storage_keys(para_ids: &[u32]) -> Vec> { + let dmp = twox_128("Dmp".as_bytes()); + let dmp_queue_heads = twox_128("DownwardMessageQueueHeads".as_bytes()); + let dmp_queues = twox_128("DownwardMessageQueues".as_bytes()); + let mut clear_dmq_keys = Vec::>::new(); + for id in para_ids { + let id = id.to_le_bytes(); + // DMP Queue Head + let mut key = dmp.to_vec(); + key.extend(&dmp_queue_heads); + key.extend(sp_core::twox_64(&id)); + key.extend(id); + clear_dmq_keys.push(key); + // DMP Queue + let mut key = dmp.to_vec(); + key.extend(&dmp_queues); + key.extend(sp_core::twox_64(&id)); + key.extend(id); + clear_dmq_keys.push(key); + } + clear_dmq_keys +} + +/// A supported relay chain. +#[derive(Debug, PartialEq)] +pub enum RelayChain { + /// Paseo. + PaseoLocal, + /// Westend. + WestendLocal, +} + +impl RelayChain { + /// Attempts to convert a chain identifier into a supported `RelayChain` variant. + /// + /// # Arguments + /// * `id` - The relay chain identifier. + pub fn from(id: &str) -> Option { + match id { + "paseo-local" => Some(RelayChain::PaseoLocal), + "westend-local" => Some(RelayChain::WestendLocal), + _ => None, + } + } +} + +#[cfg(test)] +mod tests { + use super::*; + use subxt::ext::sp_core::twox_64; + use RelayChain::*; + + #[test] + fn construct_kill_storage_call_works() { + let keys = vec!["key".as_bytes().to_vec()]; + assert_eq!( + construct_kill_storage_call(keys.clone()), + dynamic::tx( + "System", + "kill_storage", + vec![Value::unnamed_composite(keys.into_iter().map(Value::from_bytes))], + ) + ) + } + + #[test] + fn generate_storage_keys_works() { + let para_ids = vec![1_000, 4_385]; + let dmp = twox_128("Dmp".as_bytes()); + let dmp_queue_heads = [dmp, twox_128("DownwardMessageQueueHeads".as_bytes())].concat(); + let dmp_queues = [dmp, twox_128("DownwardMessageQueues".as_bytes())].concat(); + + assert_eq!( + generate_storage_keys(¶_ids), + para_ids + .iter() + .flat_map(|id| { + let id = id.to_le_bytes().to_vec(); + [ + // DMP Queue Head + [dmp_queue_heads.clone(), twox_64(&id).to_vec(), id.clone()].concat(), + // DMP Queue + [dmp_queues.clone(), twox_64(&id).to_vec(), id].concat(), + ] + }) + .collect::>() + ) + } + + #[test] + fn supported_relay_chains() { + for (s, e) in [ + // Only chains with sudo supported + ("paseo-local", Some(PaseoLocal)), + ("westend-local", Some(WestendLocal)), + ("kusama-local", None), + ("polkadot-local", None), + ] { + assert_eq!(RelayChain::from(s), e) + } + } +} diff --git a/crates/pop-parachains/src/templates.rs b/crates/pop-parachains/src/templates.rs index 0f9ba5794..324f6f23f 100644 --- a/crates/pop-parachains/src/templates.rs +++ b/crates/pop-parachains/src/templates.rs @@ -177,23 +177,6 @@ pub enum Parachain { ) )] ParityFPT, - // OpenZeppelin - #[strum( - serialize = "polkadot-generic-runtime-template", - message = "Generic Runtime Template", - detailed_message = "A generic template for Substrate Runtime.", - props( - Provider = "OpenZeppelin", - Repository = "https://github.com/OpenZeppelin/polkadot-runtime-templates", - Network = "./zombienet-config/devnet.toml", - SupportedVersions = "v1.0.0,v2.0.1", - IsAudited = "true", - License = "GPL-3.0", - IsDeprecated = "true", - DeprecatedMessage = "This template is deprecated. Please use openzeppelin/generic-template in the future.", - ) - )] - DeprecatedOpenZeppelinGeneric, // templates for unit tests below #[cfg(test)] #[strum( @@ -273,7 +256,6 @@ mod tests { // openzeppelin ("openzeppelin/generic-template".to_string(), OpenZeppelinGeneric), ("openzeppelin/evm-template".to_string(), OpenZeppelinEVM), - ("polkadot-generic-runtime-template".to_string(), DeprecatedOpenZeppelinGeneric), ("cpt".to_string(), ParityContracts), ("fpt".to_string(), ParityFPT), ("test_01".to_string(), TestTemplate01), @@ -289,7 +271,6 @@ mod tests { (EVM, "evm".to_string()), (OpenZeppelinGeneric, "generic-template".to_string()), (OpenZeppelinEVM, "evm-template".to_string()), - (DeprecatedOpenZeppelinGeneric, "polkadot-generic-runtime-template".to_string()), (ParityContracts, "cpt".to_string()), (ParityFPT, "fpt".to_string()), (TestTemplate01, "test_01".to_string()), @@ -331,7 +312,6 @@ mod tests { (EVM, Some("./network.toml")), (OpenZeppelinGeneric, Some("./zombienet-config/devnet.toml")), (OpenZeppelinEVM, Some("./zombienet-config/devnet.toml")), - (DeprecatedOpenZeppelinGeneric, Some("./zombienet-config/devnet.toml")), (ParityContracts, Some("./zombienet.toml")), (ParityFPT, Some("./zombienet-config.toml")), (TestTemplate01, Some("")), @@ -348,7 +328,6 @@ mod tests { (EVM, Some("Unlicense")), (OpenZeppelinGeneric, Some("GPL-3.0")), (OpenZeppelinEVM, Some("GPL-3.0")), - (DeprecatedOpenZeppelinGeneric, Some("GPL-3.0")), (ParityContracts, Some("Unlicense")), (ParityFPT, Some("Unlicense")), (TestTemplate01, Some("Unlicense")), diff --git a/crates/pop-parachains/src/up/chain_specs.rs b/crates/pop-parachains/src/up/chain_specs.rs index 3513a587e..e81db7ee9 100644 --- a/crates/pop-parachains/src/up/chain_specs.rs +++ b/crates/pop-parachains/src/up/chain_specs.rs @@ -22,7 +22,7 @@ pub(super) enum Runtime { Repository = "https://github.com/r0gue-io/polkadot-runtimes", Binary = "chain-spec-generator", Chain = "kusama-local", - Fallback = "v1.2.7" + Fallback = "v1.3.3" ))] Kusama, /// Paseo. @@ -30,7 +30,7 @@ pub(super) enum Runtime { Repository = "https://github.com/r0gue-io/paseo-runtimes", Binary = "chain-spec-generator", Chain = "paseo-local", - Fallback = "v1.2.6" + Fallback = "v1.3.4" ))] Paseo, /// Polkadot. @@ -38,7 +38,7 @@ pub(super) enum Runtime { Repository = "https://github.com/r0gue-io/polkadot-runtimes", Binary = "chain-spec-generator", Chain = "polkadot-local", - Fallback = "v1.2.7" + Fallback = "v1.3.3" ))] Polkadot, } @@ -111,7 +111,7 @@ mod tests { #[tokio::test] async fn kusama_works() -> anyhow::Result<()> { let expected = Runtime::Kusama; - let version = "v1.2.7"; + let version = "v1.3.3"; let temp_dir = tempdir()?; let binary = chain_spec_generator("kusama-local", Some(version), temp_dir.path()) .await? @@ -135,7 +135,7 @@ mod tests { #[tokio::test] async fn paseo_works() -> anyhow::Result<()> { let expected = Runtime::Paseo; - let version = "v1.2.4"; + let version = "v1.3.4"; let temp_dir = tempdir()?; let binary = chain_spec_generator("paseo-local", Some(version), temp_dir.path()) .await? @@ -159,7 +159,7 @@ mod tests { #[tokio::test] async fn polkadot_works() -> anyhow::Result<()> { let expected = Runtime::Polkadot; - let version = "v1.2.7"; + let version = "v1.3.3"; let temp_dir = tempdir()?; let binary = chain_spec_generator("polkadot-local", Some(version), temp_dir.path()) .await? diff --git a/crates/pop-parachains/src/up/mod.rs b/crates/pop-parachains/src/up/mod.rs index 036ae889d..abefa8051 100644 --- a/crates/pop-parachains/src/up/mod.rs +++ b/crates/pop-parachains/src/up/mod.rs @@ -30,6 +30,8 @@ pub struct Zombienet { relay_chain: RelayChain, /// The configuration required to launch parachains. parachains: IndexMap, + /// Whether any HRMP channels are to be pre-opened. + hrmp_channels: bool, } impl Zombienet { @@ -59,7 +61,7 @@ impl Zombienet { // Parse network config let network_config = NetworkConfiguration::from(network_config)?; // Determine relay and parachain requirements based on arguments and config - let relay_chain = Self::relay_chain( + let relay_chain = Self::init_relay_chain( relay_chain_version, relay_chain_runtime_version, &network_config, @@ -84,7 +86,9 @@ impl Zombienet { cache, ) .await?; - Ok(Self { network_config, relay_chain, parachains }) + let hrmp_channels = + network_config.hrmp_channels().map(|c| !c.is_empty()).unwrap_or_default(); + Ok(Self { network_config, relay_chain, parachains, hrmp_channels }) } /// The binaries required to launch the network. @@ -216,7 +220,7 @@ impl Zombienet { /// will use the latest available version). /// * `network_config` - The network configuration to be used to launch a network. /// * `cache` - The location used for caching binaries. - async fn relay_chain( + async fn init_relay_chain( version: Option<&str>, runtime_version: Option<&str>, network_config: &NetworkConfiguration, @@ -276,6 +280,16 @@ impl Zombienet { Ok(relay::default(version, runtime_version, chain, cache).await?) } + /// The name of the relay chain. + pub fn relay_chain(&self) -> &str { + &self.relay_chain.chain + } + + /// Whether any HRMP channels are to be pre-opened. + pub fn hrmp_channels(&self) -> bool { + self.hrmp_channels + } + /// Launches the local network. pub async fn spawn(&mut self) -> Result, Error> { // Symlink polkadot workers @@ -354,6 +368,11 @@ impl NetworkConfiguration { self.0.get_mut("parachains").and_then(|p| p.as_array_of_tables_mut()) } + /// Returns the `hrmp_channels` configuration. + fn hrmp_channels(&self) -> Option<&ArrayOfTables> { + self.0.get("hrmp_channels").and_then(|p| p.as_array_of_tables()) + } + /// Returns the `command` configuration. fn command(config: &Table) -> Option<&Item> { config.get("command") @@ -660,6 +679,8 @@ mod tests { use std::{env::current_dir, fs::File, io::Write}; use tempfile::tempdir; + pub(crate) const VERSION: &str = "stable2409"; + mod zombienet { use super::*; use pop_common::Status; @@ -683,12 +704,11 @@ mod tests { chain = "paseo-local" "# )?; - let version = "v1.12.0"; let zombienet = Zombienet::new( &cache, config.path().to_str().unwrap(), - Some(version), + Some(VERSION), None, None, None, @@ -698,14 +718,16 @@ chain = "paseo-local" let relay_chain = &zombienet.relay_chain.binary; assert_eq!(relay_chain.name(), "polkadot"); - assert_eq!(relay_chain.path(), temp_dir.path().join(format!("polkadot-{version}"))); - assert_eq!(relay_chain.version().unwrap(), version); + assert_eq!(relay_chain.path(), temp_dir.path().join(format!("polkadot-{VERSION}"))); + assert_eq!(relay_chain.version().unwrap(), VERSION); assert!(matches!( relay_chain, Binary::Source { source: Source::GitHub(ReleaseArchive { tag, .. }), .. } - if *tag == Some(version.to_string()) + if *tag == Some(VERSION.to_string()) )); assert!(zombienet.parachains.is_empty()); + assert_eq!(zombienet.relay_chain(), "paseo-local"); + assert!(!zombienet.hrmp_channels()); Ok(()) } @@ -721,7 +743,7 @@ chain = "paseo-local" chain = "paseo-local" "# )?; - let version = "v1.2.7"; + let version = "v1.3.3"; let zombienet = Zombienet::new( &cache, @@ -761,15 +783,14 @@ chain = "paseo-local" r#" [relaychain] chain = "paseo-local" -default_command = "./bin-v1.6.0/polkadot" +default_command = "./bin-stable2409/polkadot" "# )?; - let version = "v1.12.0"; let zombienet = Zombienet::new( &cache, config.path().to_str().unwrap(), - Some(version), + Some(VERSION), None, None, None, @@ -779,12 +800,12 @@ default_command = "./bin-v1.6.0/polkadot" let relay_chain = &zombienet.relay_chain.binary; assert_eq!(relay_chain.name(), "polkadot"); - assert_eq!(relay_chain.path(), temp_dir.path().join(format!("polkadot-{version}"))); - assert_eq!(relay_chain.version().unwrap(), version); + assert_eq!(relay_chain.path(), temp_dir.path().join(format!("polkadot-{VERSION}"))); + assert_eq!(relay_chain.version().unwrap(), VERSION); assert!(matches!( relay_chain, Binary::Source { source: Source::GitHub(ReleaseArchive { tag, .. }), .. } - if *tag == Some(version.to_string()) + if *tag == Some(VERSION.to_string()) )); assert!(zombienet.parachains.is_empty()); Ok(()) @@ -807,12 +828,11 @@ validator = true command = "polkadot" "# )?; - let version = "v1.12.0"; let zombienet = Zombienet::new( &cache, config.path().to_str().unwrap(), - Some(version), + Some(VERSION), None, None, None, @@ -822,12 +842,12 @@ command = "polkadot" let relay_chain = &zombienet.relay_chain.binary; assert_eq!(relay_chain.name(), "polkadot"); - assert_eq!(relay_chain.path(), temp_dir.path().join(format!("polkadot-{version}"))); - assert_eq!(relay_chain.version().unwrap(), version); + assert_eq!(relay_chain.path(), temp_dir.path().join(format!("polkadot-{VERSION}"))); + assert_eq!(relay_chain.version().unwrap(), VERSION); assert!(matches!( relay_chain, Binary::Source { source: Source::GitHub(ReleaseArchive { tag, .. }), .. } - if *tag == Some(version.to_string()) + if *tag == Some(VERSION.to_string()) )); assert!(zombienet.parachains.is_empty()); Ok(()) @@ -852,14 +872,14 @@ command = "polkadot" [[relaychain.nodes]] name = "bob" validator = true -command = "polkadot-v1.12.0" +command = "polkadot-stable2409" "# )?; assert!(matches!( Zombienet::new(&cache, config.path().to_str().unwrap(), None, None, None, None, None).await, Err(Error::UnsupportedCommand(error)) - if error == "the relay chain command is unsupported: polkadot-v1.12.0" + if error == "the relay chain command is unsupported: polkadot-stable2409" )); Ok(()) } @@ -879,14 +899,14 @@ default_command = "polkadot" [[relaychain.nodes]] name = "alice" validator = true -command = "polkadot-v1.12.0" +command = "polkadot-stable2409" "# )?; assert!(matches!( Zombienet::new(&cache, config.path().to_str().unwrap(), None, None, None, None, None).await, Err(Error::UnsupportedCommand(error)) - if error == "the relay chain command is unsupported: polkadot-v1.12.0" + if error == "the relay chain command is unsupported: polkadot-stable2409" )); Ok(()) } @@ -907,12 +927,12 @@ id = 1000 chain = "asset-hub-paseo-local" "# )?; - let system_parachain_version = "v1.12.0"; + let system_parachain_version = "stable2407"; let zombienet = Zombienet::new( &cache, config.path().to_str().unwrap(), - Some("v1.11.0"), + Some(VERSION), None, Some(system_parachain_version), None, @@ -952,7 +972,6 @@ id = 1000 chain = "asset-hub-paseo-local" "# )?; - let version = "v1.12.0"; let zombienet = Zombienet::new( &cache, @@ -960,7 +979,7 @@ chain = "asset-hub-paseo-local" None, None, None, - Some(version), + Some(VERSION), None, ) .await?; @@ -972,13 +991,13 @@ chain = "asset-hub-paseo-local" assert_eq!(chain_spec_generator.name(), "paseo-chain-spec-generator"); assert_eq!( chain_spec_generator.path(), - temp_dir.path().join(format!("paseo-chain-spec-generator-{version}")) + temp_dir.path().join(format!("paseo-chain-spec-generator-{VERSION}")) ); - assert_eq!(chain_spec_generator.version().unwrap(), version); + assert_eq!(chain_spec_generator.version().unwrap(), VERSION); assert!(matches!( chain_spec_generator, Binary::Source { source: Source::GitHub(ReleaseArchive { tag, .. }), .. } - if *tag == Some(version.to_string()) + if *tag == Some(VERSION.to_string()) )); Ok(()) } @@ -1186,6 +1205,48 @@ default_command = "moonbeam" Ok(()) } + #[tokio::test] + async fn new_with_hrmp_channels_works() -> Result<()> { + let temp_dir = tempdir()?; + let cache = PathBuf::from(temp_dir.path()); + let config = Builder::new().suffix(".toml").tempfile()?; + writeln!( + config.as_file(), + r#" +[relaychain] +chain = "paseo-local" + +[[parachains]] +id = 1000 +chain = "asset-hub-paseo-local" + +[[parachains]] +id = 4385 +default_command = "pop-node" + +[[hrmp_channels]] +sender = 4385 +recipient = 1000 +max_capacity = 1000 +max_message_size = 8000 +"# + )?; + + let zombienet = Zombienet::new( + &cache, + config.path().to_str().unwrap(), + None, + None, + None, + None, + None, + ) + .await?; + + assert!(zombienet.hrmp_channels()); + Ok(()) + } + #[tokio::test] async fn new_ensures_parachain_id_exists() -> Result<()> { let temp_dir = tempdir()?; @@ -1384,10 +1445,9 @@ chain = "paseo-local" chain = "paseo-local" "# )?; - let version = "v1.12.0"; - File::create(cache.join(format!("polkadot-{version}")))?; - File::create(cache.join(format!("polkadot-execute-worker-{version}")))?; - File::create(cache.join(format!("polkadot-prepare-worker-{version}")))?; + File::create(cache.join(format!("polkadot-{VERSION}")))?; + File::create(cache.join(format!("polkadot-execute-worker-{VERSION}")))?; + File::create(cache.join(format!("polkadot-prepare-worker-{VERSION}")))?; let mut zombienet = Zombienet::new( &cache, diff --git a/crates/pop-parachains/src/up/parachains.rs b/crates/pop-parachains/src/up/parachains.rs index 06eda16e6..ad6075454 100644 --- a/crates/pop-parachains/src/up/parachains.rs +++ b/crates/pop-parachains/src/up/parachains.rs @@ -22,7 +22,7 @@ pub(super) enum Parachain { Repository = "https://github.com/r0gue-io/polkadot", Binary = "polkadot-parachain", TagFormat = "polkadot-{tag}", - Fallback = "v1.12.0" + Fallback = "stable2409" ))] System, /// Pop Network makes it easy for smart contract developers to use the power of Polkadot. @@ -30,7 +30,7 @@ pub(super) enum Parachain { Repository = "https://github.com/r0gue-io/pop-node", Binary = "pop-node", Prerelease = "false", - Fallback = "testnet-v0.4.1" + Fallback = "testnet-v0.4.2" ))] Pop, } @@ -148,7 +148,7 @@ pub(super) async fn from( #[cfg(test)] mod tests { - use super::*; + use super::{super::tests::VERSION, *}; use std::path::PathBuf; use tempfile::tempdir; @@ -159,7 +159,7 @@ mod tests { "polkadot", None, None, - "v1.12.0", + VERSION, Some("asset-hub-paseo-local"), tempdir()?.path() ) @@ -170,13 +170,12 @@ mod tests { #[tokio::test] async fn system_using_relay_version() -> anyhow::Result<()> { - let version = "v1.12.0"; let expected = Parachain::System; let para_id = 1000; let temp_dir = tempdir()?; let parachain = - system(para_id, expected.binary(), None, None, version, None, temp_dir.path()) + system(para_id, expected.binary(), None, None, VERSION, None, temp_dir.path()) .await? .unwrap(); assert_eq!(para_id, parachain.id); @@ -184,7 +183,7 @@ mod tests { if name == expected.binary() && source == Source::GitHub(ReleaseArchive { owner: "r0gue-io".to_string(), repository: "polkadot".to_string(), - tag: Some(version.to_string()), + tag: Some(VERSION.to_string()), tag_format: Some("polkadot-{tag}".to_string()), archive: format!("{name}-{}.tar.gz", target()?), contents: vec![(expected.binary(), None)], @@ -196,13 +195,12 @@ mod tests { #[tokio::test] async fn system_works() -> anyhow::Result<()> { - let version = "v1.12.0"; let expected = Parachain::System; let para_id = 1000; let temp_dir = tempdir()?; let parachain = - system(para_id, expected.binary(), Some(version), None, version, None, temp_dir.path()) + system(para_id, expected.binary(), Some(VERSION), None, VERSION, None, temp_dir.path()) .await? .unwrap(); assert_eq!(para_id, parachain.id); @@ -210,7 +208,7 @@ mod tests { if name == expected.binary() && source == Source::GitHub(ReleaseArchive { owner: "r0gue-io".to_string(), repository: "polkadot".to_string(), - tag: Some(version.to_string()), + tag: Some(VERSION.to_string()), tag_format: Some("polkadot-{tag}".to_string()), archive: format!("{name}-{}.tar.gz", target()?), contents: vec![(expected.binary(), None)], @@ -223,7 +221,7 @@ mod tests { #[tokio::test] async fn system_with_chain_spec_generator_works() -> anyhow::Result<()> { let expected = Parachain::System; - let runtime_version = "v1.2.7"; + let runtime_version = "v1.3.3"; let para_id = 1000; let temp_dir = tempdir()?; diff --git a/crates/pop-parachains/src/up/relay.rs b/crates/pop-parachains/src/up/relay.rs index 662e639fd..2390e446a 100644 --- a/crates/pop-parachains/src/up/relay.rs +++ b/crates/pop-parachains/src/up/relay.rs @@ -24,7 +24,7 @@ pub(super) enum RelayChain { Repository = "https://github.com/r0gue-io/polkadot", Binary = "polkadot", TagFormat = "polkadot-{tag}", - Fallback = "v1.12.0" + Fallback = "stable2409" ))] Polkadot, } @@ -131,17 +131,18 @@ mod tests { use super::*; use tempfile::tempdir; + const VERSION: &str = "stable2409"; + #[tokio::test] async fn default_works() -> anyhow::Result<()> { let expected = RelayChain::Polkadot; - let version = "v1.12.0"; let temp_dir = tempdir()?; - let relay = default(Some(version), None, None, temp_dir.path()).await?; + let relay = default(Some(VERSION), None, None, temp_dir.path()).await?; assert!(matches!(relay.binary, Binary::Source { name, source, cache } if name == expected.binary() && source == Source::GitHub(ReleaseArchive { owner: "r0gue-io".to_string(), repository: "polkadot".to_string(), - tag: Some(version.to_string()), + tag: Some(VERSION.to_string()), tag_format: Some("polkadot-{tag}".to_string()), archive: format!("{name}-{}.tar.gz", target()?), contents: ["polkadot", "polkadot-execute-worker", "polkadot-prepare-worker"].map(|b| (b, None)).to_vec(), @@ -154,7 +155,7 @@ mod tests { #[tokio::test] async fn default_with_chain_spec_generator_works() -> anyhow::Result<()> { - let runtime_version = "v1.2.7"; + let runtime_version = "v1.3.3"; let temp_dir = tempdir()?; let relay = default(None, Some(runtime_version), Some("paseo-local"), temp_dir.path()).await?; @@ -186,15 +187,14 @@ mod tests { #[tokio::test] async fn from_handles_local_command() -> anyhow::Result<()> { let expected = RelayChain::Polkadot; - let version = "v1.12.0"; let temp_dir = tempdir()?; let relay = - from("./bin-v1.6.0/polkadot", Some(version), None, None, temp_dir.path()).await?; + from("./bin-stable2409/polkadot", Some(VERSION), None, None, temp_dir.path()).await?; assert!(matches!(relay.binary, Binary::Source { name, source, cache } if name == expected.binary() && source == Source::GitHub(ReleaseArchive { owner: "r0gue-io".to_string(), repository: "polkadot".to_string(), - tag: Some(version.to_string()), + tag: Some(VERSION.to_string()), tag_format: Some("polkadot-{tag}".to_string()), archive: format!("{name}-{}.tar.gz", target()?), contents: ["polkadot", "polkadot-execute-worker", "polkadot-prepare-worker"].map(|b| (b, None)).to_vec(), diff --git a/crates/pop-parachains/src/utils/helpers.rs b/crates/pop-parachains/src/utils/helpers.rs index bd39eec9e..f38d7bce5 100644 --- a/crates/pop-parachains/src/utils/helpers.rs +++ b/crates/pop-parachains/src/utils/helpers.rs @@ -33,7 +33,8 @@ pub fn is_initial_endowment_valid(initial_endowment: &str) -> bool { initial_endowment.parse::().is_ok() || is_valid_bitwise_left_shift(initial_endowment).is_ok() } -// Auxiliar method to check if the endowment input with a shift left (1u64 << 60) format is valid. + +// Auxiliary method to check if the endowment input with a shift left (1u64 << 60) format is valid. // Parse the self << rhs format and check the shift left operation is valid. fn is_valid_bitwise_left_shift(initial_endowment: &str) -> Result { let v: Vec<&str> = initial_endowment.split(" << ").collect(); diff --git a/deny.toml b/deny.toml index 5c295de57..b1e67ce44 100644 --- a/deny.toml +++ b/deny.toml @@ -20,8 +20,10 @@ allow = [ "GPL-3.0", "MIT", "MPL-2.0", + "Unicode-3.0", "Unicode-DFS-2016", - "Unlicense" + "Unlicense", + "Zlib" ] confidence-threshold = 0.93 @@ -34,4 +36,4 @@ name = "ring" expression = "ISC AND MIT AND OpenSSL" license-files = [ { path = "LICENSE", hash = 0xbd0eed23 }, -] \ No newline at end of file +] diff --git a/tests/networks/kusama+asset-hub.toml b/tests/networks/kusama+asset-hub.toml new file mode 100644 index 000000000..c652bd841 --- /dev/null +++ b/tests/networks/kusama+asset-hub.toml @@ -0,0 +1,19 @@ +# pop up parachain -f ./tests/networks/kusama+asset-hub.toml + +[relaychain] +chain = "kusama-local" + +[[relaychain.nodes]] +name = "alice" +validator = true + +[[relaychain.nodes]] +name = "bob" +validator = true + +[[parachains]] +id = 1000 +chain = "asset-hub-kusama-local" + +[[parachains.collators]] +name = "asset-hub" \ No newline at end of file diff --git a/tests/networks/paseo+asset-hub.toml b/tests/networks/paseo+asset-hub.toml new file mode 100644 index 000000000..a75719376 --- /dev/null +++ b/tests/networks/paseo+asset-hub.toml @@ -0,0 +1,19 @@ +# pop up parachain -f ./tests/networks/paseo+asset-hub.toml + +[relaychain] +chain = "paseo-local" + +[[relaychain.nodes]] +name = "alice" +validator = true + +[[relaychain.nodes]] +name = "bob" +validator = true + +[[parachains]] +id = 1000 +chain = "asset-hub-paseo-local" + +[[parachains.collators]] +name = "asset-hub" \ No newline at end of file diff --git a/tests/networks/polkadot+asset-hub.toml b/tests/networks/polkadot+asset-hub.toml new file mode 100644 index 000000000..9cf6735b2 --- /dev/null +++ b/tests/networks/polkadot+asset-hub.toml @@ -0,0 +1,19 @@ +# pop up parachain -f ./tests/networks/polkadot+asset-hub.toml + +[relaychain] +chain = "polkadot-local" + +[[relaychain.nodes]] +name = "alice" +validator = true + +[[relaychain.nodes]] +name = "bob" +validator = true + +[[parachains]] +id = 1000 +chain = "asset-hub-polkadot-local" + +[[parachains.collators]] +name = "asset-hub" \ No newline at end of file diff --git a/tests/networks/pop.toml b/tests/networks/pop.toml index 9ad7c871d..643f1a0b5 100644 --- a/tests/networks/pop.toml +++ b/tests/networks/pop.toml @@ -24,4 +24,16 @@ default_command = "pop-node" [[parachains.collators]] name = "pop" -args = ["-lruntime::contracts=debug"] \ No newline at end of file +args = ["-lruntime::contracts=debug"] + +[[hrmp_channels]] +sender = 1000 +recipient = 4385 +max_capacity = 1000 +max_message_size = 5000 + +[[hrmp_channels]] +sender = 4385 +recipient = 1000 +max_capacity = 1000 +max_message_size = 8000 \ No newline at end of file diff --git a/tests/networks/westend+asset-hub.toml b/tests/networks/westend+asset-hub.toml new file mode 100644 index 000000000..3404173f8 --- /dev/null +++ b/tests/networks/westend+asset-hub.toml @@ -0,0 +1,19 @@ +# pop up parachain -f ./tests/networks/westend+asset-hub.toml + +[relaychain] +chain = "westend-local" + +[[relaychain.nodes]] +name = "alice" +validator = true + +[[relaychain.nodes]] +name = "bob" +validator = true + +[[parachains]] +id = 1000 +chain = "asset-hub-westend-local" + +[[parachains.collators]] +name = "asset-hub" \ No newline at end of file diff --git a/tests/networks/westend.toml b/tests/networks/westend.toml new file mode 100644 index 000000000..7bdb66bdd --- /dev/null +++ b/tests/networks/westend.toml @@ -0,0 +1,12 @@ +# pop up parachain -f ./tests/networks/westend.toml + +[relaychain] +chain = "westend-local" + +[[relaychain.nodes]] +name = "alice" +validator = true + +[[relaychain.nodes]] +name = "bob" +validator = true