mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-05-30 21:01:02 +00:00
Get WASM example compiling via 'trunk serve'
This commit is contained in:
Generated
+2
-2
@@ -4410,9 +4410,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "scale-encode"
|
name = "scale-encode"
|
||||||
version = "0.10.0"
|
version = "0.10.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "64901733157f9d25ef86843bd783eda439fac7efb0ad5a615d12d2cf3a29464b"
|
checksum = "f2a976d73564a59e482b74fd5d95f7518b79ca8c8ca5865398a4d629dd15ee50"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"parity-scale-codec",
|
"parity-scale-codec",
|
||||||
"primitive-types",
|
"primitive-types",
|
||||||
|
|||||||
+1
-1
@@ -100,7 +100,7 @@ scale-info = { version = "2.11.4", default-features = false }
|
|||||||
scale-value = { version = "0.18.1", default-features = false }
|
scale-value = { version = "0.18.1", default-features = false }
|
||||||
scale-bits = { version = "0.7.0", default-features = false }
|
scale-bits = { version = "0.7.0", default-features = false }
|
||||||
scale-decode = { version = "0.16.2", default-features = false }
|
scale-decode = { version = "0.16.2", default-features = false }
|
||||||
scale-encode = { version = "0.10.0", default-features = false }
|
scale-encode = { version = "0.10.1", default-features = false }
|
||||||
scale-type-resolver = { version = "0.2.0" }
|
scale-type-resolver = { version = "0.2.0" }
|
||||||
scale-info-legacy = { version = "0.4.0", default-features = false }
|
scale-info-legacy = { version = "0.4.0", default-features = false }
|
||||||
scale-typegen = "0.12.0"
|
scale-typegen = "0.12.0"
|
||||||
|
|||||||
Generated
+123
-58
@@ -872,6 +872,12 @@ version = "0.1.5"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2"
|
checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "foldhash"
|
||||||
|
version = "0.2.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "form_urlencoded"
|
name = "form_urlencoded"
|
||||||
version = "1.2.1"
|
version = "1.2.1"
|
||||||
@@ -883,16 +889,18 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "frame-decode"
|
name = "frame-decode"
|
||||||
version = "0.11.0"
|
version = "0.16.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "a0acacffe60911b0d57a55c0b323fc08ccd88659dc52056bb39dfeb5cedafb59"
|
checksum = "e63257bb5f8d7a707d626aa1b4e464c3b9720edd168b73cee98f48f0dd6386e4"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"frame-metadata",
|
"frame-metadata",
|
||||||
"parity-scale-codec",
|
"parity-scale-codec",
|
||||||
"scale-decode",
|
"scale-decode",
|
||||||
"scale-encode",
|
"scale-encode",
|
||||||
"scale-info",
|
"scale-info",
|
||||||
|
"scale-info-legacy",
|
||||||
"scale-type-resolver",
|
"scale-type-resolver",
|
||||||
|
"serde_yaml",
|
||||||
"sp-crypto-hashing",
|
"sp-crypto-hashing",
|
||||||
"thiserror 2.0.12",
|
"thiserror 2.0.12",
|
||||||
]
|
]
|
||||||
@@ -1067,10 +1075,23 @@ checksum = "5971ac85611da7067dbfcabef3c70ebb5606018acd9e2a3903a0da507521e0d5"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"allocator-api2",
|
"allocator-api2",
|
||||||
"equivalent",
|
"equivalent",
|
||||||
"foldhash",
|
"foldhash 0.1.5",
|
||||||
"serde",
|
"serde",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "hashbrown"
|
||||||
|
version = "0.16.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100"
|
||||||
|
dependencies = [
|
||||||
|
"allocator-api2",
|
||||||
|
"equivalent",
|
||||||
|
"foldhash 0.2.0",
|
||||||
|
"serde",
|
||||||
|
"serde_core",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "heck"
|
name = "heck"
|
||||||
version = "0.5.0"
|
version = "0.5.0"
|
||||||
@@ -2196,9 +2217,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "scale-decode"
|
name = "scale-decode"
|
||||||
version = "0.16.0"
|
version = "0.16.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "4d78196772d25b90a98046794ce0fe2588b39ebdfbdc1e45b4c6c85dd43bebad"
|
checksum = "8d6ed61699ad4d54101ab5a817169259b5b0efc08152f8632e61482d8a27ca3d"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"parity-scale-codec",
|
"parity-scale-codec",
|
||||||
"primitive-types",
|
"primitive-types",
|
||||||
@@ -2211,9 +2232,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "scale-decode-derive"
|
name = "scale-decode-derive"
|
||||||
version = "0.16.0"
|
version = "0.16.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "2f4b54a1211260718b92832b661025d1f1a4b6930fbadd6908e00edd265fa5f7"
|
checksum = "65cb245f7fdb489e7ba43a616cbd34427fe3ba6fe0edc1d0d250085e6c84f3ec"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"darling",
|
"darling",
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
@@ -2223,9 +2244,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "scale-encode"
|
name = "scale-encode"
|
||||||
version = "0.10.0"
|
version = "0.10.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "64901733157f9d25ef86843bd783eda439fac7efb0ad5a615d12d2cf3a29464b"
|
checksum = "f2a976d73564a59e482b74fd5d95f7518b79ca8c8ca5865398a4d629dd15ee50"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"parity-scale-codec",
|
"parity-scale-codec",
|
||||||
"primitive-types",
|
"primitive-types",
|
||||||
@@ -2238,9 +2259,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "scale-encode-derive"
|
name = "scale-encode-derive"
|
||||||
version = "0.10.0"
|
version = "0.10.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "78a3993a13b4eafa89350604672c8757b7ea84c7c5947d4b3691e3169c96379b"
|
checksum = "17020f2d59baabf2ddcdc20a4e567f8210baf089b8a8d4785f5fd5e716f92038"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"darling",
|
"darling",
|
||||||
"proc-macro-crate",
|
"proc-macro-crate",
|
||||||
@@ -2275,6 +2296,21 @@ dependencies = [
|
|||||||
"syn",
|
"syn",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "scale-info-legacy"
|
||||||
|
version = "0.4.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "4afb76e1b2cb589b97278e2f1e2e290c9b7c51d6ac69afab9e1d7d1e136a9276"
|
||||||
|
dependencies = [
|
||||||
|
"hashbrown 0.16.1",
|
||||||
|
"scale-type-resolver",
|
||||||
|
"serde",
|
||||||
|
"smallstr",
|
||||||
|
"smallvec",
|
||||||
|
"thiserror 2.0.12",
|
||||||
|
"yap",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "scale-type-resolver"
|
name = "scale-type-resolver"
|
||||||
version = "0.2.0"
|
version = "0.2.0"
|
||||||
@@ -2287,9 +2323,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "scale-typegen"
|
name = "scale-typegen"
|
||||||
version = "0.11.1"
|
version = "0.12.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "05c61b6b706a3eaad63b506ab50a1d2319f817ae01cf753adcc3f055f9f0fcd6"
|
checksum = "642d2f13f3fc9a34ea2c1e36142984eba78cd2405a61632492f8b52993e98879"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
@@ -2423,10 +2459,11 @@ checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde"
|
name = "serde"
|
||||||
version = "1.0.219"
|
version = "1.0.228"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6"
|
checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
"serde_core",
|
||||||
"serde_derive",
|
"serde_derive",
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -2440,10 +2477,19 @@ dependencies = [
|
|||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde_derive"
|
name = "serde_core"
|
||||||
version = "1.0.219"
|
version = "1.0.228"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00"
|
checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad"
|
||||||
|
dependencies = [
|
||||||
|
"serde_derive",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "serde_derive"
|
||||||
|
version = "1.0.228"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
@@ -2462,6 +2508,19 @@ dependencies = [
|
|||||||
"serde",
|
"serde",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "serde_yaml"
|
||||||
|
version = "0.9.34+deprecated"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47"
|
||||||
|
dependencies = [
|
||||||
|
"indexmap",
|
||||||
|
"itoa",
|
||||||
|
"ryu",
|
||||||
|
"serde",
|
||||||
|
"unsafe-libyaml",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "sha1"
|
name = "sha1"
|
||||||
version = "0.10.6"
|
version = "0.10.6"
|
||||||
@@ -2540,6 +2599,15 @@ version = "0.4.11"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589"
|
checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "smallstr"
|
||||||
|
version = "0.3.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "862077b1e764f04c251fe82a2ef562fd78d7cadaeb072ca7c2bcaf7217b1ff3b"
|
||||||
|
dependencies = [
|
||||||
|
"smallvec",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "smallvec"
|
name = "smallvec"
|
||||||
version = "1.15.1"
|
version = "1.15.1"
|
||||||
@@ -2734,42 +2802,46 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "subxt"
|
name = "subxt"
|
||||||
version = "0.44.0"
|
version = "0.50.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"async-trait",
|
"async-trait",
|
||||||
"derive-where",
|
"derive-where",
|
||||||
"either",
|
"either",
|
||||||
|
"frame-decode",
|
||||||
"frame-metadata",
|
"frame-metadata",
|
||||||
"futures",
|
"futures",
|
||||||
"hex",
|
"hex",
|
||||||
|
"impl-serde",
|
||||||
"jsonrpsee",
|
"jsonrpsee",
|
||||||
|
"keccak-hash",
|
||||||
"parity-scale-codec",
|
"parity-scale-codec",
|
||||||
"primitive-types",
|
"primitive-types",
|
||||||
"scale-bits",
|
"scale-bits",
|
||||||
"scale-decode",
|
"scale-decode",
|
||||||
"scale-encode",
|
"scale-encode",
|
||||||
"scale-info",
|
"scale-info",
|
||||||
|
"scale-info-legacy",
|
||||||
|
"scale-type-resolver",
|
||||||
"scale-value",
|
"scale-value",
|
||||||
"serde",
|
"serde",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
"sp-crypto-hashing",
|
"sp-crypto-hashing",
|
||||||
"subxt-core",
|
|
||||||
"subxt-lightclient",
|
"subxt-lightclient",
|
||||||
"subxt-macro",
|
"subxt-macro",
|
||||||
"subxt-metadata",
|
"subxt-metadata",
|
||||||
"subxt-rpcs",
|
"subxt-rpcs",
|
||||||
|
"subxt-utils-accountid32",
|
||||||
"thiserror 2.0.12",
|
"thiserror 2.0.12",
|
||||||
"tokio",
|
"tokio",
|
||||||
"tokio-util",
|
"tokio-util",
|
||||||
"tracing",
|
"tracing",
|
||||||
"url",
|
|
||||||
"wasm-bindgen-futures",
|
"wasm-bindgen-futures",
|
||||||
"web-time",
|
"web-time",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "subxt-codegen"
|
name = "subxt-codegen"
|
||||||
version = "0.44.0"
|
version = "0.50.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"heck",
|
"heck",
|
||||||
"parity-scale-codec",
|
"parity-scale-codec",
|
||||||
@@ -2782,34 +2854,6 @@ dependencies = [
|
|||||||
"thiserror 2.0.12",
|
"thiserror 2.0.12",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "subxt-core"
|
|
||||||
version = "0.44.0"
|
|
||||||
dependencies = [
|
|
||||||
"base58",
|
|
||||||
"blake2",
|
|
||||||
"derive-where",
|
|
||||||
"frame-decode",
|
|
||||||
"frame-metadata",
|
|
||||||
"hashbrown 0.14.5",
|
|
||||||
"hex",
|
|
||||||
"impl-serde",
|
|
||||||
"keccak-hash",
|
|
||||||
"parity-scale-codec",
|
|
||||||
"primitive-types",
|
|
||||||
"scale-bits",
|
|
||||||
"scale-decode",
|
|
||||||
"scale-encode",
|
|
||||||
"scale-info",
|
|
||||||
"scale-value",
|
|
||||||
"serde",
|
|
||||||
"serde_json",
|
|
||||||
"sp-crypto-hashing",
|
|
||||||
"subxt-metadata",
|
|
||||||
"thiserror 2.0.12",
|
|
||||||
"tracing",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "subxt-ffi"
|
name = "subxt-ffi"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
@@ -2822,7 +2866,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "subxt-lightclient"
|
name = "subxt-lightclient"
|
||||||
version = "0.44.0"
|
version = "0.50.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"futures",
|
"futures",
|
||||||
"futures-util",
|
"futures-util",
|
||||||
@@ -2837,7 +2881,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "subxt-macro"
|
name = "subxt-macro"
|
||||||
version = "0.44.0"
|
version = "0.50.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"darling",
|
"darling",
|
||||||
"parity-scale-codec",
|
"parity-scale-codec",
|
||||||
@@ -2852,20 +2896,22 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "subxt-metadata"
|
name = "subxt-metadata"
|
||||||
version = "0.44.0"
|
version = "0.50.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"frame-decode",
|
"frame-decode",
|
||||||
"frame-metadata",
|
"frame-metadata",
|
||||||
"hashbrown 0.14.5",
|
"hashbrown 0.14.5",
|
||||||
"parity-scale-codec",
|
"parity-scale-codec",
|
||||||
"scale-info",
|
"scale-info",
|
||||||
|
"scale-info-legacy",
|
||||||
|
"scale-type-resolver",
|
||||||
"sp-crypto-hashing",
|
"sp-crypto-hashing",
|
||||||
"thiserror 2.0.12",
|
"thiserror 2.0.12",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "subxt-rpcs"
|
name = "subxt-rpcs"
|
||||||
version = "0.44.0"
|
version = "0.50.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"derive-where",
|
"derive-where",
|
||||||
"frame-metadata",
|
"frame-metadata",
|
||||||
@@ -2877,7 +2923,6 @@ dependencies = [
|
|||||||
"primitive-types",
|
"primitive-types",
|
||||||
"serde",
|
"serde",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
"subxt-core",
|
|
||||||
"subxt-lightclient",
|
"subxt-lightclient",
|
||||||
"thiserror 2.0.12",
|
"thiserror 2.0.12",
|
||||||
"tokio-util",
|
"tokio-util",
|
||||||
@@ -2887,7 +2932,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "subxt-signer"
|
name = "subxt-signer"
|
||||||
version = "0.44.0"
|
version = "0.50.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"base64",
|
"base64",
|
||||||
"bip39",
|
"bip39",
|
||||||
@@ -2906,14 +2951,28 @@ dependencies = [
|
|||||||
"serde_json",
|
"serde_json",
|
||||||
"sha2 0.10.9",
|
"sha2 0.10.9",
|
||||||
"sp-crypto-hashing",
|
"sp-crypto-hashing",
|
||||||
"subxt-core",
|
"subxt",
|
||||||
"thiserror 2.0.12",
|
"thiserror 2.0.12",
|
||||||
"zeroize",
|
"zeroize",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "subxt-utils-accountid32"
|
||||||
|
version = "0.50.0"
|
||||||
|
dependencies = [
|
||||||
|
"base58",
|
||||||
|
"blake2",
|
||||||
|
"parity-scale-codec",
|
||||||
|
"scale-decode",
|
||||||
|
"scale-encode",
|
||||||
|
"scale-info",
|
||||||
|
"serde",
|
||||||
|
"thiserror 2.0.12",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "subxt-utils-fetchmetadata"
|
name = "subxt-utils-fetchmetadata"
|
||||||
version = "0.44.0"
|
version = "0.50.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"hex",
|
"hex",
|
||||||
"parity-scale-codec",
|
"parity-scale-codec",
|
||||||
@@ -3209,6 +3268,12 @@ dependencies = [
|
|||||||
"subtle",
|
"subtle",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "unsafe-libyaml"
|
||||||
|
version = "0.2.11"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "untrusted"
|
name = "untrusted"
|
||||||
version = "0.9.0"
|
version = "0.9.0"
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ edition = "2024"
|
|||||||
[dependencies]
|
[dependencies]
|
||||||
hex = "0.4.3"
|
hex = "0.4.3"
|
||||||
subxt = { path = "../../subxt" }
|
subxt = { path = "../../subxt" }
|
||||||
subxt-signer = { path = "../../signer" }
|
subxt-signer = { path = "../../signer", features = ["subxt"] }
|
||||||
tokio = { version = "1", features = ["full"] }
|
tokio = { version = "1", features = ["full"] }
|
||||||
|
|
||||||
[lib]
|
[lib]
|
||||||
|
|||||||
@@ -35,7 +35,8 @@ pub extern "C" fn do_transfer(dest_hex: *const c_char, amount: u64) -> i32 {
|
|||||||
|
|
||||||
// Spin up (or reuse) our Tokio runtime and connect:
|
// Spin up (or reuse) our Tokio runtime and connect:
|
||||||
let client = tokio_rt().block_on(async {
|
let client = tokio_rt().block_on(async {
|
||||||
OnlineClient::<PolkadotConfig>::from_url("ws://127.0.0.1:8000")
|
let config = PolkadotConfig::new();
|
||||||
|
OnlineClient::from_url(config, "ws://127.0.0.1:8000")
|
||||||
.await
|
.await
|
||||||
.unwrap()
|
.unwrap()
|
||||||
});
|
});
|
||||||
@@ -54,11 +55,13 @@ pub extern "C" fn do_transfer(dest_hex: *const c_char, amount: u64) -> i32 {
|
|||||||
|
|
||||||
// Submit and wait for finalize
|
// Submit and wait for finalize
|
||||||
let res: Result<(), subxt::Error> = tokio_rt().block_on(async {
|
let res: Result<(), subxt::Error> = tokio_rt().block_on(async {
|
||||||
let progress = client
|
client
|
||||||
.tx()
|
.tx()
|
||||||
|
.await?
|
||||||
.sign_and_submit_then_watch_default(&tx, &signer)
|
.sign_and_submit_then_watch_default(&tx, &signer)
|
||||||
|
.await?
|
||||||
|
.wait_for_finalized_success()
|
||||||
.await?;
|
.await?;
|
||||||
progress.wait_for_finalized_success().await?;
|
|
||||||
Ok(())
|
Ok(())
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Generated
+121
-56
@@ -928,6 +928,12 @@ version = "0.1.5"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2"
|
checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "foldhash"
|
||||||
|
version = "0.2.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "form_urlencoded"
|
name = "form_urlencoded"
|
||||||
version = "1.2.1"
|
version = "1.2.1"
|
||||||
@@ -939,16 +945,18 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "frame-decode"
|
name = "frame-decode"
|
||||||
version = "0.11.0"
|
version = "0.16.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "a0acacffe60911b0d57a55c0b323fc08ccd88659dc52056bb39dfeb5cedafb59"
|
checksum = "e63257bb5f8d7a707d626aa1b4e464c3b9720edd168b73cee98f48f0dd6386e4"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"frame-metadata",
|
"frame-metadata",
|
||||||
"parity-scale-codec",
|
"parity-scale-codec",
|
||||||
"scale-decode",
|
"scale-decode",
|
||||||
"scale-encode",
|
"scale-encode",
|
||||||
"scale-info",
|
"scale-info",
|
||||||
|
"scale-info-legacy",
|
||||||
"scale-type-resolver",
|
"scale-type-resolver",
|
||||||
|
"serde_yaml",
|
||||||
"sp-crypto-hashing",
|
"sp-crypto-hashing",
|
||||||
"thiserror 2.0.11",
|
"thiserror 2.0.11",
|
||||||
]
|
]
|
||||||
@@ -1123,10 +1131,23 @@ checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"allocator-api2",
|
"allocator-api2",
|
||||||
"equivalent",
|
"equivalent",
|
||||||
"foldhash",
|
"foldhash 0.1.5",
|
||||||
"serde",
|
"serde",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "hashbrown"
|
||||||
|
version = "0.16.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100"
|
||||||
|
dependencies = [
|
||||||
|
"allocator-api2",
|
||||||
|
"equivalent",
|
||||||
|
"foldhash 0.2.0",
|
||||||
|
"serde",
|
||||||
|
"serde_core",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "heck"
|
name = "heck"
|
||||||
version = "0.5.0"
|
version = "0.5.0"
|
||||||
@@ -2272,9 +2293,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "scale-decode"
|
name = "scale-decode"
|
||||||
version = "0.16.0"
|
version = "0.16.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "4d78196772d25b90a98046794ce0fe2588b39ebdfbdc1e45b4c6c85dd43bebad"
|
checksum = "8d6ed61699ad4d54101ab5a817169259b5b0efc08152f8632e61482d8a27ca3d"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"parity-scale-codec",
|
"parity-scale-codec",
|
||||||
"primitive-types",
|
"primitive-types",
|
||||||
@@ -2287,9 +2308,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "scale-decode-derive"
|
name = "scale-decode-derive"
|
||||||
version = "0.16.0"
|
version = "0.16.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "2f4b54a1211260718b92832b661025d1f1a4b6930fbadd6908e00edd265fa5f7"
|
checksum = "65cb245f7fdb489e7ba43a616cbd34427fe3ba6fe0edc1d0d250085e6c84f3ec"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"darling",
|
"darling",
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
@@ -2299,9 +2320,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "scale-encode"
|
name = "scale-encode"
|
||||||
version = "0.10.0"
|
version = "0.10.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "64901733157f9d25ef86843bd783eda439fac7efb0ad5a615d12d2cf3a29464b"
|
checksum = "f2a976d73564a59e482b74fd5d95f7518b79ca8c8ca5865398a4d629dd15ee50"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"parity-scale-codec",
|
"parity-scale-codec",
|
||||||
"primitive-types",
|
"primitive-types",
|
||||||
@@ -2351,6 +2372,21 @@ dependencies = [
|
|||||||
"syn",
|
"syn",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "scale-info-legacy"
|
||||||
|
version = "0.4.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "4afb76e1b2cb589b97278e2f1e2e290c9b7c51d6ac69afab9e1d7d1e136a9276"
|
||||||
|
dependencies = [
|
||||||
|
"hashbrown 0.16.1",
|
||||||
|
"scale-type-resolver",
|
||||||
|
"serde",
|
||||||
|
"smallstr",
|
||||||
|
"smallvec",
|
||||||
|
"thiserror 2.0.11",
|
||||||
|
"yap",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "scale-type-resolver"
|
name = "scale-type-resolver"
|
||||||
version = "0.2.0"
|
version = "0.2.0"
|
||||||
@@ -2363,9 +2399,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "scale-typegen"
|
name = "scale-typegen"
|
||||||
version = "0.11.1"
|
version = "0.12.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "05c61b6b706a3eaad63b506ab50a1d2319f817ae01cf753adcc3f055f9f0fcd6"
|
checksum = "642d2f13f3fc9a34ea2c1e36142984eba78cd2405a61632492f8b52993e98879"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
@@ -2500,10 +2536,11 @@ checksum = "b97ed7a9823b74f99c7742f5336af7be5ecd3eeafcb1507d1fa93347b1d589b0"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde"
|
name = "serde"
|
||||||
version = "1.0.219"
|
version = "1.0.228"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6"
|
checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
"serde_core",
|
||||||
"serde_derive",
|
"serde_derive",
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -2517,10 +2554,19 @@ dependencies = [
|
|||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde_derive"
|
name = "serde_core"
|
||||||
version = "1.0.219"
|
version = "1.0.228"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00"
|
checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad"
|
||||||
|
dependencies = [
|
||||||
|
"serde_derive",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "serde_derive"
|
||||||
|
version = "1.0.228"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
@@ -2539,6 +2585,19 @@ dependencies = [
|
|||||||
"serde",
|
"serde",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "serde_yaml"
|
||||||
|
version = "0.9.34+deprecated"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47"
|
||||||
|
dependencies = [
|
||||||
|
"indexmap",
|
||||||
|
"itoa",
|
||||||
|
"ryu",
|
||||||
|
"serde",
|
||||||
|
"unsafe-libyaml",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "sha1"
|
name = "sha1"
|
||||||
version = "0.10.6"
|
version = "0.10.6"
|
||||||
@@ -2620,6 +2679,15 @@ dependencies = [
|
|||||||
"autocfg",
|
"autocfg",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "smallstr"
|
||||||
|
version = "0.3.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "862077b1e764f04c251fe82a2ef562fd78d7cadaeb072ca7c2bcaf7217b1ff3b"
|
||||||
|
dependencies = [
|
||||||
|
"smallvec",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "smallvec"
|
name = "smallvec"
|
||||||
version = "1.13.2"
|
version = "1.13.2"
|
||||||
@@ -2814,42 +2882,46 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "subxt"
|
name = "subxt"
|
||||||
version = "0.44.0"
|
version = "0.50.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"async-trait",
|
"async-trait",
|
||||||
"derive-where",
|
"derive-where",
|
||||||
"either",
|
"either",
|
||||||
|
"frame-decode",
|
||||||
"frame-metadata",
|
"frame-metadata",
|
||||||
"futures",
|
"futures",
|
||||||
"hex",
|
"hex",
|
||||||
|
"impl-serde",
|
||||||
"jsonrpsee",
|
"jsonrpsee",
|
||||||
|
"keccak-hash",
|
||||||
"parity-scale-codec",
|
"parity-scale-codec",
|
||||||
"primitive-types",
|
"primitive-types",
|
||||||
"scale-bits",
|
"scale-bits",
|
||||||
"scale-decode",
|
"scale-decode",
|
||||||
"scale-encode",
|
"scale-encode",
|
||||||
"scale-info",
|
"scale-info",
|
||||||
|
"scale-info-legacy",
|
||||||
|
"scale-type-resolver",
|
||||||
"scale-value",
|
"scale-value",
|
||||||
"serde",
|
"serde",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
"sp-crypto-hashing",
|
"sp-crypto-hashing",
|
||||||
"subxt-core",
|
|
||||||
"subxt-lightclient",
|
"subxt-lightclient",
|
||||||
"subxt-macro",
|
"subxt-macro",
|
||||||
"subxt-metadata",
|
"subxt-metadata",
|
||||||
"subxt-rpcs",
|
"subxt-rpcs",
|
||||||
|
"subxt-utils-accountid32",
|
||||||
"thiserror 2.0.11",
|
"thiserror 2.0.11",
|
||||||
"tokio",
|
"tokio",
|
||||||
"tokio-util",
|
"tokio-util",
|
||||||
"tracing",
|
"tracing",
|
||||||
"url",
|
|
||||||
"wasm-bindgen-futures",
|
"wasm-bindgen-futures",
|
||||||
"web-time",
|
"web-time",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "subxt-codegen"
|
name = "subxt-codegen"
|
||||||
version = "0.44.0"
|
version = "0.50.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"heck",
|
"heck",
|
||||||
"parity-scale-codec",
|
"parity-scale-codec",
|
||||||
@@ -2862,37 +2934,9 @@ dependencies = [
|
|||||||
"thiserror 2.0.11",
|
"thiserror 2.0.11",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "subxt-core"
|
|
||||||
version = "0.44.0"
|
|
||||||
dependencies = [
|
|
||||||
"base58",
|
|
||||||
"blake2",
|
|
||||||
"derive-where",
|
|
||||||
"frame-decode",
|
|
||||||
"frame-metadata",
|
|
||||||
"hashbrown 0.14.5",
|
|
||||||
"hex",
|
|
||||||
"impl-serde",
|
|
||||||
"keccak-hash",
|
|
||||||
"parity-scale-codec",
|
|
||||||
"primitive-types",
|
|
||||||
"scale-bits",
|
|
||||||
"scale-decode",
|
|
||||||
"scale-encode",
|
|
||||||
"scale-info",
|
|
||||||
"scale-value",
|
|
||||||
"serde",
|
|
||||||
"serde_json",
|
|
||||||
"sp-crypto-hashing",
|
|
||||||
"subxt-metadata",
|
|
||||||
"thiserror 2.0.11",
|
|
||||||
"tracing",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "subxt-lightclient"
|
name = "subxt-lightclient"
|
||||||
version = "0.44.0"
|
version = "0.50.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"futures",
|
"futures",
|
||||||
"futures-util",
|
"futures-util",
|
||||||
@@ -2907,7 +2951,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "subxt-macro"
|
name = "subxt-macro"
|
||||||
version = "0.44.0"
|
version = "0.50.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"darling",
|
"darling",
|
||||||
"parity-scale-codec",
|
"parity-scale-codec",
|
||||||
@@ -2922,20 +2966,22 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "subxt-metadata"
|
name = "subxt-metadata"
|
||||||
version = "0.44.0"
|
version = "0.50.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"frame-decode",
|
"frame-decode",
|
||||||
"frame-metadata",
|
"frame-metadata",
|
||||||
"hashbrown 0.14.5",
|
"hashbrown 0.14.5",
|
||||||
"parity-scale-codec",
|
"parity-scale-codec",
|
||||||
"scale-info",
|
"scale-info",
|
||||||
|
"scale-info-legacy",
|
||||||
|
"scale-type-resolver",
|
||||||
"sp-crypto-hashing",
|
"sp-crypto-hashing",
|
||||||
"thiserror 2.0.11",
|
"thiserror 2.0.11",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "subxt-rpcs"
|
name = "subxt-rpcs"
|
||||||
version = "0.44.0"
|
version = "0.50.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"derive-where",
|
"derive-where",
|
||||||
"frame-metadata",
|
"frame-metadata",
|
||||||
@@ -2947,7 +2993,6 @@ dependencies = [
|
|||||||
"primitive-types",
|
"primitive-types",
|
||||||
"serde",
|
"serde",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
"subxt-core",
|
|
||||||
"subxt-lightclient",
|
"subxt-lightclient",
|
||||||
"thiserror 2.0.11",
|
"thiserror 2.0.11",
|
||||||
"tokio-util",
|
"tokio-util",
|
||||||
@@ -2957,7 +3002,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "subxt-signer"
|
name = "subxt-signer"
|
||||||
version = "0.44.0"
|
version = "0.50.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"base64 0.22.1",
|
"base64 0.22.1",
|
||||||
"bip39",
|
"bip39",
|
||||||
@@ -2976,14 +3021,28 @@ dependencies = [
|
|||||||
"serde_json",
|
"serde_json",
|
||||||
"sha2 0.10.8",
|
"sha2 0.10.8",
|
||||||
"sp-crypto-hashing",
|
"sp-crypto-hashing",
|
||||||
"subxt-core",
|
"subxt",
|
||||||
"thiserror 2.0.11",
|
"thiserror 2.0.11",
|
||||||
"zeroize",
|
"zeroize",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "subxt-utils-accountid32"
|
||||||
|
version = "0.50.0"
|
||||||
|
dependencies = [
|
||||||
|
"base58",
|
||||||
|
"blake2",
|
||||||
|
"parity-scale-codec",
|
||||||
|
"scale-decode",
|
||||||
|
"scale-encode",
|
||||||
|
"scale-info",
|
||||||
|
"serde",
|
||||||
|
"thiserror 2.0.11",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "subxt-utils-fetchmetadata"
|
name = "subxt-utils-fetchmetadata"
|
||||||
version = "0.44.0"
|
version = "0.50.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"hex",
|
"hex",
|
||||||
"parity-scale-codec",
|
"parity-scale-codec",
|
||||||
@@ -3274,6 +3333,12 @@ dependencies = [
|
|||||||
"subtle",
|
"subtle",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "unsafe-libyaml"
|
||||||
|
version = "0.2.11"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "untrusted"
|
name = "untrusted"
|
||||||
version = "0.9.0"
|
version = "0.9.0"
|
||||||
|
|||||||
@@ -7,5 +7,5 @@ edition = "2021"
|
|||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
subxt = { path = "../../subxt" }
|
subxt = { path = "../../subxt" }
|
||||||
subxt-signer = { path = "../../signer" }
|
subxt-signer = { path = "../../signer", features = ["subxt"] }
|
||||||
tokio = { version = "1.44.2", features = ["macros", "time", "rt-multi-thread"] }
|
tokio = { version = "1.44.2", features = ["macros", "time", "rt-multi-thread"] }
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
use subxt::{
|
use subxt::{
|
||||||
PolkadotConfig,
|
|
||||||
utils::{AccountId32, MultiAddress},
|
utils::{AccountId32, MultiAddress},
|
||||||
OnlineClient,
|
OnlineClient, PolkadotConfig,
|
||||||
};
|
};
|
||||||
use subxt_signer::sr25519::dev::{self};
|
use subxt_signer::sr25519::dev::{self};
|
||||||
|
|
||||||
@@ -21,7 +20,8 @@ pub async fn main() {
|
|||||||
|
|
||||||
async fn run() -> Result<(), Box<dyn std::error::Error>> {
|
async fn run() -> Result<(), Box<dyn std::error::Error>> {
|
||||||
// (the port 42069 is specified in the asset-hub-zombienet.toml)
|
// (the port 42069 is specified in the asset-hub-zombienet.toml)
|
||||||
let api = OnlineClient::<StatemintConfig>::from_url("ws://127.0.0.1:42069").await?;
|
let config = StatemintConfig::new();
|
||||||
|
let api = OnlineClient::<StatemintConfig>::from_url(config, "ws://127.0.0.1:42069").await?;
|
||||||
println!("Connection with parachain established.");
|
println!("Connection with parachain established.");
|
||||||
|
|
||||||
let alice: MultiAddress<AccountId32, ()> = dev::alice().public_key().into();
|
let alice: MultiAddress<AccountId32, ()> = dev::alice().public_key().into();
|
||||||
@@ -36,6 +36,7 @@ async fn run() -> Result<(), Box<dyn std::error::Error>> {
|
|||||||
.create(COLLECTION_ID, alice.clone());
|
.create(COLLECTION_ID, alice.clone());
|
||||||
let _collection_creation_events = api
|
let _collection_creation_events = api
|
||||||
.tx()
|
.tx()
|
||||||
|
.await?
|
||||||
.sign_and_submit_then_watch_default(&collection_creation_tx, &alice_pair_signer)
|
.sign_and_submit_then_watch_default(&collection_creation_tx, &alice_pair_signer)
|
||||||
.await
|
.await
|
||||||
.map(|e| {
|
.map(|e| {
|
||||||
@@ -52,6 +53,7 @@ async fn run() -> Result<(), Box<dyn std::error::Error>> {
|
|||||||
.mint(COLLECTION_ID, NTF_ID, alice.clone());
|
.mint(COLLECTION_ID, NTF_ID, alice.clone());
|
||||||
let _nft_creation_events = api
|
let _nft_creation_events = api
|
||||||
.tx()
|
.tx()
|
||||||
|
.await?
|
||||||
.sign_and_submit_then_watch_default(&nft_creation_tx, &alice_pair_signer)
|
.sign_and_submit_then_watch_default(&nft_creation_tx, &alice_pair_signer)
|
||||||
.await
|
.await
|
||||||
.map(|e| {
|
.map(|e| {
|
||||||
@@ -65,9 +67,9 @@ async fn run() -> Result<(), Box<dyn std::error::Error>> {
|
|||||||
// check in storage, that alice is the official owner of the NFT:
|
// check in storage, that alice is the official owner of the NFT:
|
||||||
let nft_owner_storage_query = statemint::storage().uniques().asset();
|
let nft_owner_storage_query = statemint::storage().uniques().asset();
|
||||||
let nft_storage_details = api
|
let nft_storage_details = api
|
||||||
.storage()
|
.at_current_block()
|
||||||
.at_latest()
|
|
||||||
.await?
|
.await?
|
||||||
|
.storage()
|
||||||
.fetch(nft_owner_storage_query, (COLLECTION_ID, NTF_ID))
|
.fetch(nft_owner_storage_query, (COLLECTION_ID, NTF_ID))
|
||||||
.await?
|
.await?
|
||||||
.decode()?;
|
.decode()?;
|
||||||
|
|||||||
Generated
+214
-82
@@ -151,6 +151,12 @@ version = "0.22.1"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6"
|
checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "base64ct"
|
||||||
|
version = "1.8.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "0e050f626429857a27ddccb31e0aca21356bfa709c04041aefddac081a8f068a"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "bincode"
|
name = "bincode"
|
||||||
version = "1.3.3"
|
version = "1.3.3"
|
||||||
@@ -336,6 +342,12 @@ dependencies = [
|
|||||||
"wasm-bindgen",
|
"wasm-bindgen",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "const-oid"
|
||||||
|
version = "0.9.6"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "const_format"
|
name = "const_format"
|
||||||
version = "0.2.34"
|
version = "0.2.34"
|
||||||
@@ -370,9 +382,9 @@ checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "convert_case"
|
name = "convert_case"
|
||||||
version = "0.6.0"
|
version = "0.10.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca"
|
checksum = "633458d4ef8c78b72454de2d54fd6ab2e60f9e02be22f3c6104cdc8a4e0fceb9"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"unicode-segmentation",
|
"unicode-segmentation",
|
||||||
]
|
]
|
||||||
@@ -490,6 +502,17 @@ dependencies = [
|
|||||||
"syn 2.0.100",
|
"syn 2.0.100",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "der"
|
||||||
|
version = "0.7.10"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb"
|
||||||
|
dependencies = [
|
||||||
|
"const-oid",
|
||||||
|
"pem-rfc7468",
|
||||||
|
"zeroize",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "derive-where"
|
name = "derive-where"
|
||||||
version = "1.2.7"
|
version = "1.2.7"
|
||||||
@@ -507,7 +530,16 @@ version = "1.0.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05"
|
checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"derive_more-impl",
|
"derive_more-impl 1.0.0",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "derive_more"
|
||||||
|
version = "2.1.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "10b768e943bed7bf2cab53df09f4bc34bfd217cdb57d971e769874c9a6710618"
|
||||||
|
dependencies = [
|
||||||
|
"derive_more-impl 2.1.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -515,10 +547,22 @@ name = "derive_more-impl"
|
|||||||
version = "1.0.0"
|
version = "1.0.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22"
|
checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"syn 2.0.100",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "derive_more-impl"
|
||||||
|
version = "2.1.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "6d286bfdaf75e988b4a78e013ecd79c581e06399ab53fbacd2d916c2f904f30b"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"convert_case",
|
"convert_case",
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
|
"rustc_version",
|
||||||
"syn 2.0.100",
|
"syn 2.0.100",
|
||||||
"unicode-xid",
|
"unicode-xid",
|
||||||
]
|
]
|
||||||
@@ -566,21 +610,23 @@ version = "2.2.3"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53"
|
checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
"pkcs8",
|
||||||
"signature",
|
"signature",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ed25519-zebra"
|
name = "ed25519-zebra"
|
||||||
version = "4.0.3"
|
version = "4.1.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "7d9ce6874da5d4415896cd45ffbc4d1cfc0c4f9c079427bd870742c30f2f65a9"
|
checksum = "0017d969298eec91e3db7a2985a8cab4df6341d86e6f3a6f5878b13fb7846bc9"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"curve25519-dalek",
|
"curve25519-dalek",
|
||||||
"ed25519",
|
"ed25519",
|
||||||
"hashbrown 0.14.5",
|
"hashbrown 0.15.2",
|
||||||
"hex",
|
"pkcs8",
|
||||||
"rand_core",
|
"rand_core",
|
||||||
"sha2 0.10.8",
|
"sha2 0.10.8",
|
||||||
|
"subtle",
|
||||||
"zeroize",
|
"zeroize",
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -656,6 +702,12 @@ version = "0.1.5"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2"
|
checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "foldhash"
|
||||||
|
version = "0.2.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "form_urlencoded"
|
name = "form_urlencoded"
|
||||||
version = "1.2.1"
|
version = "1.2.1"
|
||||||
@@ -667,16 +719,18 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "frame-decode"
|
name = "frame-decode"
|
||||||
version = "0.11.0"
|
version = "0.16.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "a0acacffe60911b0d57a55c0b323fc08ccd88659dc52056bb39dfeb5cedafb59"
|
checksum = "e63257bb5f8d7a707d626aa1b4e464c3b9720edd168b73cee98f48f0dd6386e4"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"frame-metadata",
|
"frame-metadata",
|
||||||
"parity-scale-codec",
|
"parity-scale-codec",
|
||||||
"scale-decode",
|
"scale-decode",
|
||||||
"scale-encode",
|
"scale-encode",
|
||||||
"scale-info",
|
"scale-info",
|
||||||
|
"scale-info-legacy",
|
||||||
"scale-type-resolver",
|
"scale-type-resolver",
|
||||||
|
"serde_yaml",
|
||||||
"sp-crypto-hashing",
|
"sp-crypto-hashing",
|
||||||
"thiserror 2.0.12",
|
"thiserror 2.0.12",
|
||||||
]
|
]
|
||||||
@@ -1073,10 +1127,23 @@ checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"allocator-api2",
|
"allocator-api2",
|
||||||
"equivalent",
|
"equivalent",
|
||||||
"foldhash",
|
"foldhash 0.1.5",
|
||||||
"serde",
|
"serde",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "hashbrown"
|
||||||
|
version = "0.16.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100"
|
||||||
|
dependencies = [
|
||||||
|
"allocator-api2",
|
||||||
|
"equivalent",
|
||||||
|
"foldhash 0.2.0",
|
||||||
|
"serde",
|
||||||
|
"serde_core",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "heck"
|
name = "heck"
|
||||||
version = "0.5.0"
|
version = "0.5.0"
|
||||||
@@ -1373,9 +1440,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "itertools"
|
name = "itertools"
|
||||||
version = "0.13.0"
|
version = "0.14.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186"
|
checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"either",
|
"either",
|
||||||
]
|
]
|
||||||
@@ -1583,12 +1650,6 @@ dependencies = [
|
|||||||
"zeroize",
|
"zeroize",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "minimal-lexical"
|
|
||||||
version = "0.2.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "miniz_oxide"
|
name = "miniz_oxide"
|
||||||
version = "0.8.8"
|
version = "0.8.8"
|
||||||
@@ -1612,12 +1673,11 @@ checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "nom"
|
name = "nom"
|
||||||
version = "7.1.3"
|
version = "8.0.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
|
checksum = "df9761775871bdef83bee530e60050f7e54b1105350d6884eb0fb4f46c2f9405"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"memchr",
|
"memchr",
|
||||||
"minimal-lexical",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -1727,6 +1787,15 @@ dependencies = [
|
|||||||
"digest 0.10.7",
|
"digest 0.10.7",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "pem-rfc7468"
|
||||||
|
version = "0.7.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412"
|
||||||
|
dependencies = [
|
||||||
|
"base64ct",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "percent-encoding"
|
name = "percent-encoding"
|
||||||
version = "2.3.1"
|
version = "2.3.1"
|
||||||
@@ -1776,6 +1845,16 @@ dependencies = [
|
|||||||
"thiserror 1.0.69",
|
"thiserror 1.0.69",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "pkcs8"
|
||||||
|
version = "0.10.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7"
|
||||||
|
dependencies = [
|
||||||
|
"der",
|
||||||
|
"spki",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "poly1305"
|
name = "poly1305"
|
||||||
version = "0.8.0"
|
version = "0.8.0"
|
||||||
@@ -1986,9 +2065,9 @@ checksum = "eded382c5f5f786b989652c49544c4877d9f015cc22e145a5ea8ea66c2921cd2"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ruzstd"
|
name = "ruzstd"
|
||||||
version = "0.7.3"
|
version = "0.8.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "fad02996bfc73da3e301efe90b1837be9ed8f4a462b6ed410aa35d00381de89f"
|
checksum = "e5ff0cc5e135c8870a775d3320910cd9b564ec036b4dc0b8741629020be63f01"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ryu"
|
name = "ryu"
|
||||||
@@ -2010,9 +2089,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "scale-decode"
|
name = "scale-decode"
|
||||||
version = "0.16.0"
|
version = "0.16.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "4d78196772d25b90a98046794ce0fe2588b39ebdfbdc1e45b4c6c85dd43bebad"
|
checksum = "8d6ed61699ad4d54101ab5a817169259b5b0efc08152f8632e61482d8a27ca3d"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"parity-scale-codec",
|
"parity-scale-codec",
|
||||||
"primitive-types",
|
"primitive-types",
|
||||||
@@ -2025,9 +2104,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "scale-decode-derive"
|
name = "scale-decode-derive"
|
||||||
version = "0.16.0"
|
version = "0.16.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "2f4b54a1211260718b92832b661025d1f1a4b6930fbadd6908e00edd265fa5f7"
|
checksum = "65cb245f7fdb489e7ba43a616cbd34427fe3ba6fe0edc1d0d250085e6c84f3ec"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"darling",
|
"darling",
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
@@ -2037,9 +2116,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "scale-encode"
|
name = "scale-encode"
|
||||||
version = "0.10.0"
|
version = "0.10.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "64901733157f9d25ef86843bd783eda439fac7efb0ad5a615d12d2cf3a29464b"
|
checksum = "f2a976d73564a59e482b74fd5d95f7518b79ca8c8ca5865398a4d629dd15ee50"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"parity-scale-codec",
|
"parity-scale-codec",
|
||||||
"primitive-types",
|
"primitive-types",
|
||||||
@@ -2071,7 +2150,7 @@ checksum = "346a3b32eba2640d17a9cb5927056b08f3de90f65b72fe09402c2ad07d684d0b"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"bitvec",
|
"bitvec",
|
||||||
"cfg-if",
|
"cfg-if",
|
||||||
"derive_more",
|
"derive_more 1.0.0",
|
||||||
"parity-scale-codec",
|
"parity-scale-codec",
|
||||||
"scale-info-derive",
|
"scale-info-derive",
|
||||||
"serde",
|
"serde",
|
||||||
@@ -2089,6 +2168,21 @@ dependencies = [
|
|||||||
"syn 2.0.100",
|
"syn 2.0.100",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "scale-info-legacy"
|
||||||
|
version = "0.4.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "4afb76e1b2cb589b97278e2f1e2e290c9b7c51d6ac69afab9e1d7d1e136a9276"
|
||||||
|
dependencies = [
|
||||||
|
"hashbrown 0.16.1",
|
||||||
|
"scale-type-resolver",
|
||||||
|
"serde",
|
||||||
|
"smallstr",
|
||||||
|
"smallvec",
|
||||||
|
"thiserror 2.0.12",
|
||||||
|
"yap",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "scale-type-resolver"
|
name = "scale-type-resolver"
|
||||||
version = "0.2.0"
|
version = "0.2.0"
|
||||||
@@ -2101,9 +2195,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "scale-typegen"
|
name = "scale-typegen"
|
||||||
version = "0.11.1"
|
version = "0.12.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "05c61b6b706a3eaad63b506ab50a1d2319f817ae01cf753adcc3f055f9f0fcd6"
|
checksum = "642d2f13f3fc9a34ea2c1e36142984eba78cd2405a61632492f8b52993e98879"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
@@ -2170,10 +2264,11 @@ checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde"
|
name = "serde"
|
||||||
version = "1.0.219"
|
version = "1.0.228"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6"
|
checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
"serde_core",
|
||||||
"serde_derive",
|
"serde_derive",
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -2198,10 +2293,19 @@ dependencies = [
|
|||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde_derive"
|
name = "serde_core"
|
||||||
version = "1.0.219"
|
version = "1.0.228"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00"
|
checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad"
|
||||||
|
dependencies = [
|
||||||
|
"serde_derive",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "serde_derive"
|
||||||
|
version = "1.0.228"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
@@ -2232,6 +2336,19 @@ dependencies = [
|
|||||||
"serde",
|
"serde",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "serde_yaml"
|
||||||
|
version = "0.9.34+deprecated"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47"
|
||||||
|
dependencies = [
|
||||||
|
"indexmap 2.9.0",
|
||||||
|
"itoa",
|
||||||
|
"ryu",
|
||||||
|
"serde",
|
||||||
|
"unsafe-libyaml",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "sha1"
|
name = "sha1"
|
||||||
version = "0.10.6"
|
version = "0.10.6"
|
||||||
@@ -2298,6 +2415,15 @@ dependencies = [
|
|||||||
"autocfg",
|
"autocfg",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "smallstr"
|
||||||
|
version = "0.3.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "862077b1e764f04c251fe82a2ef562fd78d7cadaeb072ca7c2bcaf7217b1ff3b"
|
||||||
|
dependencies = [
|
||||||
|
"smallvec",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "smallvec"
|
name = "smallvec"
|
||||||
version = "1.15.0"
|
version = "1.15.0"
|
||||||
@@ -2306,9 +2432,9 @@ checksum = "8917285742e9f3e1683f0a9c4e6b57960b7314d0b08d30d1ecd426713ee2eee9"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "smoldot"
|
name = "smoldot"
|
||||||
version = "0.19.3"
|
version = "0.20.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "b6664ea2d3d3c1d77b8f24032aca6462dc0da8378d25c5bdde6130699b6740fe"
|
checksum = "724ab10d6485cccb4bab080ce436c0b361295274aec7847d7ba84ab1a79a5132"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"arrayvec 0.7.6",
|
"arrayvec 0.7.6",
|
||||||
"async-lock",
|
"async-lock",
|
||||||
@@ -2319,7 +2445,7 @@ dependencies = [
|
|||||||
"bs58",
|
"bs58",
|
||||||
"chacha20",
|
"chacha20",
|
||||||
"crossbeam-queue",
|
"crossbeam-queue",
|
||||||
"derive_more",
|
"derive_more 2.1.0",
|
||||||
"ed25519-zebra",
|
"ed25519-zebra",
|
||||||
"either",
|
"either",
|
||||||
"event-listener",
|
"event-listener",
|
||||||
@@ -2360,16 +2486,16 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "smoldot-light"
|
name = "smoldot-light"
|
||||||
version = "0.17.1"
|
version = "0.18.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "bad7762a41b43cc95e5253214ca8f85a2308a048f4fe8217927888065bafd30c"
|
checksum = "e8b4d4971f06f2471f4e57a662dbe8047fa0cc020957764a6211f3fad371f7bd"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"async-channel",
|
"async-channel",
|
||||||
"async-lock",
|
"async-lock",
|
||||||
"base64",
|
"base64",
|
||||||
"blake2-rfc",
|
"blake2-rfc",
|
||||||
"bs58",
|
"bs58",
|
||||||
"derive_more",
|
"derive_more 2.1.0",
|
||||||
"either",
|
"either",
|
||||||
"event-listener",
|
"event-listener",
|
||||||
"fnv",
|
"fnv",
|
||||||
@@ -2426,6 +2552,16 @@ version = "0.9.8"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67"
|
checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "spki"
|
||||||
|
version = "0.7.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d"
|
||||||
|
dependencies = [
|
||||||
|
"base64ct",
|
||||||
|
"der",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "stable_deref_trait"
|
name = "stable_deref_trait"
|
||||||
version = "1.2.0"
|
version = "1.2.0"
|
||||||
@@ -2452,41 +2588,45 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "subxt"
|
name = "subxt"
|
||||||
version = "0.44.0"
|
version = "0.50.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"async-trait",
|
"async-trait",
|
||||||
"derive-where",
|
"derive-where",
|
||||||
"either",
|
"either",
|
||||||
|
"frame-decode",
|
||||||
"frame-metadata",
|
"frame-metadata",
|
||||||
"futures",
|
"futures",
|
||||||
"hex",
|
"hex",
|
||||||
|
"impl-serde",
|
||||||
"jsonrpsee",
|
"jsonrpsee",
|
||||||
|
"keccak-hash",
|
||||||
"parity-scale-codec",
|
"parity-scale-codec",
|
||||||
"primitive-types",
|
"primitive-types",
|
||||||
"scale-bits",
|
"scale-bits",
|
||||||
"scale-decode",
|
"scale-decode",
|
||||||
"scale-encode",
|
"scale-encode",
|
||||||
"scale-info",
|
"scale-info",
|
||||||
|
"scale-info-legacy",
|
||||||
|
"scale-type-resolver",
|
||||||
"scale-value",
|
"scale-value",
|
||||||
"serde",
|
"serde",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
"sp-crypto-hashing",
|
"sp-crypto-hashing",
|
||||||
"subxt-core",
|
|
||||||
"subxt-lightclient",
|
"subxt-lightclient",
|
||||||
"subxt-macro",
|
"subxt-macro",
|
||||||
"subxt-metadata",
|
"subxt-metadata",
|
||||||
"subxt-rpcs",
|
"subxt-rpcs",
|
||||||
|
"subxt-utils-accountid32",
|
||||||
"thiserror 2.0.12",
|
"thiserror 2.0.12",
|
||||||
"tokio",
|
"tokio",
|
||||||
"tracing",
|
"tracing",
|
||||||
"url",
|
|
||||||
"wasm-bindgen-futures",
|
"wasm-bindgen-futures",
|
||||||
"web-time",
|
"web-time",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "subxt-codegen"
|
name = "subxt-codegen"
|
||||||
version = "0.44.0"
|
version = "0.50.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"getrandom",
|
"getrandom",
|
||||||
"heck",
|
"heck",
|
||||||
@@ -2500,37 +2640,9 @@ dependencies = [
|
|||||||
"thiserror 2.0.12",
|
"thiserror 2.0.12",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "subxt-core"
|
|
||||||
version = "0.44.0"
|
|
||||||
dependencies = [
|
|
||||||
"base58",
|
|
||||||
"blake2",
|
|
||||||
"derive-where",
|
|
||||||
"frame-decode",
|
|
||||||
"frame-metadata",
|
|
||||||
"hashbrown 0.14.5",
|
|
||||||
"hex",
|
|
||||||
"impl-serde",
|
|
||||||
"keccak-hash",
|
|
||||||
"parity-scale-codec",
|
|
||||||
"primitive-types",
|
|
||||||
"scale-bits",
|
|
||||||
"scale-decode",
|
|
||||||
"scale-encode",
|
|
||||||
"scale-info",
|
|
||||||
"scale-value",
|
|
||||||
"serde",
|
|
||||||
"serde_json",
|
|
||||||
"sp-crypto-hashing",
|
|
||||||
"subxt-metadata",
|
|
||||||
"thiserror 2.0.12",
|
|
||||||
"tracing",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "subxt-lightclient"
|
name = "subxt-lightclient"
|
||||||
version = "0.44.0"
|
version = "0.50.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"futures",
|
"futures",
|
||||||
"futures-timer",
|
"futures-timer",
|
||||||
@@ -2555,7 +2667,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "subxt-macro"
|
name = "subxt-macro"
|
||||||
version = "0.44.0"
|
version = "0.50.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"darling",
|
"darling",
|
||||||
"parity-scale-codec",
|
"parity-scale-codec",
|
||||||
@@ -2570,20 +2682,22 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "subxt-metadata"
|
name = "subxt-metadata"
|
||||||
version = "0.44.0"
|
version = "0.50.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"frame-decode",
|
"frame-decode",
|
||||||
"frame-metadata",
|
"frame-metadata",
|
||||||
"hashbrown 0.14.5",
|
"hashbrown 0.14.5",
|
||||||
"parity-scale-codec",
|
"parity-scale-codec",
|
||||||
"scale-info",
|
"scale-info",
|
||||||
|
"scale-info-legacy",
|
||||||
|
"scale-type-resolver",
|
||||||
"sp-crypto-hashing",
|
"sp-crypto-hashing",
|
||||||
"thiserror 2.0.12",
|
"thiserror 2.0.12",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "subxt-rpcs"
|
name = "subxt-rpcs"
|
||||||
version = "0.44.0"
|
version = "0.50.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"derive-where",
|
"derive-where",
|
||||||
"finito",
|
"finito",
|
||||||
@@ -2597,7 +2711,6 @@ dependencies = [
|
|||||||
"primitive-types",
|
"primitive-types",
|
||||||
"serde",
|
"serde",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
"subxt-core",
|
|
||||||
"subxt-lightclient",
|
"subxt-lightclient",
|
||||||
"thiserror 2.0.12",
|
"thiserror 2.0.12",
|
||||||
"tokio-util",
|
"tokio-util",
|
||||||
@@ -2606,9 +2719,23 @@ dependencies = [
|
|||||||
"wasm-bindgen-futures",
|
"wasm-bindgen-futures",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "subxt-utils-accountid32"
|
||||||
|
version = "0.50.0"
|
||||||
|
dependencies = [
|
||||||
|
"base58",
|
||||||
|
"blake2",
|
||||||
|
"parity-scale-codec",
|
||||||
|
"scale-decode",
|
||||||
|
"scale-encode",
|
||||||
|
"scale-info",
|
||||||
|
"serde",
|
||||||
|
"thiserror 2.0.12",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "subxt-utils-fetchmetadata"
|
name = "subxt-utils-fetchmetadata"
|
||||||
version = "0.44.0"
|
version = "0.50.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"hex",
|
"hex",
|
||||||
"parity-scale-codec",
|
"parity-scale-codec",
|
||||||
@@ -2831,7 +2958,6 @@ checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"cfg-if",
|
"cfg-if",
|
||||||
"digest 0.10.7",
|
"digest 0.10.7",
|
||||||
"rand",
|
|
||||||
"static_assertions",
|
"static_assertions",
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -2887,6 +3013,12 @@ dependencies = [
|
|||||||
"subtle",
|
"subtle",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "unsafe-libyaml"
|
||||||
|
version = "0.2.11"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "url"
|
name = "url"
|
||||||
version = "2.5.4"
|
version = "2.5.4"
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
use anyhow::anyhow;
|
use anyhow::anyhow;
|
||||||
use futures::FutureExt;
|
use futures::FutureExt;
|
||||||
|
|
||||||
use subxt::{OnlineClient, PolkadotConfig};
|
use subxt::{client::OnlineClientAtBlockImpl, OnlineClient, OnlineClientAtBlock, PolkadotConfig};
|
||||||
|
|
||||||
use subxt::config::DefaultExtrinsicParamsBuilder;
|
use subxt::config::DefaultExtrinsicParamsBuilder;
|
||||||
use subxt::ext::codec::{Decode, Encode};
|
use subxt::ext::codec::{Decode, Encode};
|
||||||
@@ -16,7 +16,7 @@ use yew::prelude::*;
|
|||||||
pub struct SigningExamplesComponent {
|
pub struct SigningExamplesComponent {
|
||||||
message: String,
|
message: String,
|
||||||
remark_call_bytes: Vec<u8>,
|
remark_call_bytes: Vec<u8>,
|
||||||
online_client: Option<OnlineClient<PolkadotConfig>>,
|
online_client: Option<OnlineClientAtBlock<PolkadotConfig>>,
|
||||||
stage: SigningStage,
|
stage: SigningStage,
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -25,9 +25,9 @@ impl SigningExamplesComponent {
|
|||||||
/// panics if self.online_client is None.
|
/// panics if self.online_client is None.
|
||||||
fn set_message(&mut self, message: String) {
|
fn set_message(&mut self, message: String) {
|
||||||
let remark_call = polkadot::tx().system().remark(message.as_bytes().to_vec());
|
let remark_call = polkadot::tx().system().remark(message.as_bytes().to_vec());
|
||||||
let online_client = self.online_client.as_ref().unwrap();
|
let online_client_at_block = self.online_client.as_ref().unwrap();
|
||||||
let remark_call_bytes = remark_call
|
let remark_call_bytes = remark_call
|
||||||
.encode_call_data(&online_client.metadata())
|
.encode_call_data(online_client_at_block.metadata_ref())
|
||||||
.unwrap();
|
.unwrap();
|
||||||
self.remark_call_bytes = remark_call_bytes;
|
self.remark_call_bytes = remark_call_bytes;
|
||||||
self.message = message;
|
self.message = message;
|
||||||
@@ -51,7 +51,8 @@ pub enum SigningStage {
|
|||||||
|
|
||||||
pub enum SubmittingStage {
|
pub enum SubmittingStage {
|
||||||
Initial {
|
Initial {
|
||||||
signed_extrinsic: SubmittableTransaction<PolkadotConfig, OnlineClient<PolkadotConfig>>,
|
signed_extrinsic:
|
||||||
|
SubmittableTransaction<PolkadotConfig, OnlineClientAtBlockImpl<PolkadotConfig>>,
|
||||||
},
|
},
|
||||||
Submitting,
|
Submitting,
|
||||||
Success {
|
Success {
|
||||||
@@ -62,7 +63,7 @@ pub enum SubmittingStage {
|
|||||||
|
|
||||||
pub enum Message {
|
pub enum Message {
|
||||||
Error(anyhow::Error),
|
Error(anyhow::Error),
|
||||||
OnlineClientCreated(OnlineClient<PolkadotConfig>),
|
OnlineClientCreated(OnlineClientAtBlock<PolkadotConfig>),
|
||||||
ChangeMessage(String),
|
ChangeMessage(String),
|
||||||
RequestAccounts,
|
RequestAccounts,
|
||||||
ReceivedAccounts(Vec<Account>),
|
ReceivedAccounts(Vec<Account>),
|
||||||
@@ -70,7 +71,7 @@ pub enum Message {
|
|||||||
SignWithAccount(usize),
|
SignWithAccount(usize),
|
||||||
ReceivedSignature(
|
ReceivedSignature(
|
||||||
MultiSignature,
|
MultiSignature,
|
||||||
SubmittableTransaction<PolkadotConfig, OnlineClient<PolkadotConfig>>,
|
SubmittableTransaction<PolkadotConfig, OnlineClientAtBlockImpl<PolkadotConfig>>,
|
||||||
),
|
),
|
||||||
SubmitSigned,
|
SubmitSigned,
|
||||||
ExtrinsicFinalized {
|
ExtrinsicFinalized {
|
||||||
@@ -85,12 +86,20 @@ impl Component for SigningExamplesComponent {
|
|||||||
type Properties = ();
|
type Properties = ();
|
||||||
|
|
||||||
fn create(ctx: &Context<Self>) -> Self {
|
fn create(ctx: &Context<Self>) -> Self {
|
||||||
ctx.link().send_future(OnlineClient::<PolkadotConfig>::new().map(|res| {
|
ctx.link().send_future(async {
|
||||||
match res {
|
let conf = PolkadotConfig::new();
|
||||||
Ok(online_client) => Message::OnlineClientCreated(online_client),
|
let Ok(client) = OnlineClient::new(conf).await else {
|
||||||
Err(err) => Message::Error(anyhow!("Online Client could not be created. Make sure you have a local node running:\n{err}")),
|
return Message::Error(anyhow!(
|
||||||
}
|
"OnlineClient could not be created. Make sure you have a local node running\n"
|
||||||
}));
|
));
|
||||||
|
};
|
||||||
|
let Ok(at_block) = client.at_current_block().await else {
|
||||||
|
return Message::Error(anyhow!(
|
||||||
|
"OnlineClient could not obtain current block details\n"
|
||||||
|
));
|
||||||
|
};
|
||||||
|
Message::OnlineClientCreated(at_block)
|
||||||
|
});
|
||||||
SigningExamplesComponent {
|
SigningExamplesComponent {
|
||||||
message: "".to_string(),
|
message: "".to_string(),
|
||||||
stage: SigningStage::CreatingOnlineClient,
|
stage: SigningStage::CreatingOnlineClient,
|
||||||
@@ -101,8 +110,8 @@ impl Component for SigningExamplesComponent {
|
|||||||
|
|
||||||
fn update(&mut self, ctx: &Context<Self>, msg: Self::Message) -> bool {
|
fn update(&mut self, ctx: &Context<Self>, msg: Self::Message) -> bool {
|
||||||
match msg {
|
match msg {
|
||||||
Message::OnlineClientCreated(online_client) => {
|
Message::OnlineClientCreated(online_client_at_block) => {
|
||||||
self.online_client = Some(online_client);
|
self.online_client = Some(online_client_at_block);
|
||||||
self.stage = SigningStage::EnterMessage;
|
self.stage = SigningStage::EnterMessage;
|
||||||
self.set_message("Hello".into());
|
self.set_message("Hello".into());
|
||||||
}
|
}
|
||||||
@@ -135,20 +144,21 @@ impl Component for SigningExamplesComponent {
|
|||||||
.system()
|
.system()
|
||||||
.remark(self.message.as_bytes().to_vec());
|
.remark(self.message.as_bytes().to_vec());
|
||||||
|
|
||||||
let api = self.online_client.as_ref().unwrap().clone();
|
let at_block = self.online_client.clone().unwrap();
|
||||||
|
|
||||||
ctx.link().send_future(async move {
|
ctx.link().send_future(async move {
|
||||||
let Ok(account_nonce) = api.tx().account_nonce(&account_id).await else {
|
let Ok(account_nonce) = at_block.tx().account_nonce(&account_id).await
|
||||||
|
else {
|
||||||
return Message::Error(anyhow!("Fetching account nonce failed"));
|
return Message::Error(anyhow!("Fetching account nonce failed"));
|
||||||
};
|
};
|
||||||
|
|
||||||
let Ok(call_data) = api.tx().call_data(&remark_call) else {
|
let Ok(call_data) = at_block.tx().call_data(&remark_call) else {
|
||||||
return Message::Error(anyhow!("could not encode call data"));
|
return Message::Error(anyhow!("could not encode call data"));
|
||||||
};
|
};
|
||||||
|
|
||||||
let Ok(signature) = extension_signature_for_extrinsic(
|
let Ok(signature) = extension_signature_for_extrinsic(
|
||||||
&call_data,
|
&call_data,
|
||||||
&api,
|
&at_block,
|
||||||
account_nonce,
|
account_nonce,
|
||||||
account_source,
|
account_source,
|
||||||
account_address,
|
account_address,
|
||||||
@@ -166,15 +176,15 @@ impl Component for SigningExamplesComponent {
|
|||||||
let params = DefaultExtrinsicParamsBuilder::new()
|
let params = DefaultExtrinsicParamsBuilder::new()
|
||||||
.nonce(account_nonce)
|
.nonce(account_nonce)
|
||||||
.build();
|
.build();
|
||||||
let Ok(mut partial_signed) =
|
let Ok(mut signable) =
|
||||||
api.tx().create_partial_offline(&remark_call, params)
|
at_block.tx().create_signable_offline(&remark_call, params)
|
||||||
else {
|
else {
|
||||||
return Message::Error(anyhow!("PartialTransaction creation failed"));
|
return Message::Error(anyhow!("PartialTransaction creation failed"));
|
||||||
};
|
};
|
||||||
|
|
||||||
// Apply the signature
|
// Apply the signature
|
||||||
let signed_extrinsic = partial_signed
|
let signed_extrinsic =
|
||||||
.sign_with_account_and_signature(&account_id, &multi_signature);
|
signable.sign_with_account_and_signature(&account_id, &multi_signature);
|
||||||
|
|
||||||
// check the TX validity (to debug in the js console if the extrinsic would work)
|
// check the TX validity (to debug in the js console if the extrinsic would work)
|
||||||
let dry_res = signed_extrinsic.validate().await;
|
let dry_res = signed_extrinsic.validate().await;
|
||||||
@@ -394,7 +404,7 @@ impl Component for SigningExamplesComponent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async fn submit_wait_finalized_and_get_extrinsic_success_event(
|
async fn submit_wait_finalized_and_get_extrinsic_success_event(
|
||||||
extrinsic: SubmittableTransaction<PolkadotConfig, OnlineClient<PolkadotConfig>>,
|
extrinsic: SubmittableTransaction<PolkadotConfig, OnlineClientAtBlockImpl<PolkadotConfig>>,
|
||||||
) -> Result<polkadot::system::events::ExtrinsicSuccess, anyhow::Error> {
|
) -> Result<polkadot::system::events::ExtrinsicSuccess, anyhow::Error> {
|
||||||
let events = extrinsic
|
let events = extrinsic
|
||||||
.submit_and_watch()
|
.submit_and_watch()
|
||||||
@@ -408,6 +418,9 @@ async fn submit_wait_finalized_and_get_extrinsic_success_event(
|
|||||||
web_sys::console::log_1(&format!("{:?}", event).into());
|
web_sys::console::log_1(&format!("{:?}", event).into());
|
||||||
}
|
}
|
||||||
|
|
||||||
let success = events.find_first::<polkadot::system::events::ExtrinsicSuccess>()?;
|
let success = events
|
||||||
success.ok_or(anyhow!("ExtrinsicSuccess not found in events"))
|
.find_first::<polkadot::system::events::ExtrinsicSuccess>()
|
||||||
|
.ok_or(anyhow!("ExtrinsicSuccess not found in events"))??;
|
||||||
|
|
||||||
|
Ok(success)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ use serde::{Deserialize, Serialize};
|
|||||||
use serde_json::json;
|
use serde_json::json;
|
||||||
use std::fmt::Write;
|
use std::fmt::Write;
|
||||||
use subxt::ext::codec::{Compact, Encode};
|
use subxt::ext::codec::{Compact, Encode};
|
||||||
use subxt::{self, OnlineClient, PolkadotConfig};
|
use subxt::{self, OnlineClient, OnlineClientAtBlock, PolkadotConfig};
|
||||||
use wasm_bindgen::prelude::*;
|
use wasm_bindgen::prelude::*;
|
||||||
use wasm_bindgen_futures::JsFuture;
|
use wasm_bindgen_futures::JsFuture;
|
||||||
use yew::{AttrValue, Callback};
|
use yew::{AttrValue, Callback};
|
||||||
@@ -13,22 +13,28 @@ use yew::{AttrValue, Callback};
|
|||||||
pub mod polkadot {}
|
pub mod polkadot {}
|
||||||
|
|
||||||
pub(crate) async fn fetch_constant_block_length() -> Result<String, subxt::Error> {
|
pub(crate) async fn fetch_constant_block_length() -> Result<String, subxt::Error> {
|
||||||
let api = OnlineClient::<PolkadotConfig>::new().await?;
|
let config = PolkadotConfig::new();
|
||||||
|
let api = OnlineClient::new(config).await?;
|
||||||
let constant_query = polkadot::constants().system().block_length();
|
let constant_query = polkadot::constants().system().block_length();
|
||||||
|
|
||||||
let value = api.constants().at(&constant_query)?;
|
let value = api
|
||||||
|
.at_current_block()
|
||||||
|
.await?
|
||||||
|
.constants()
|
||||||
|
.entry(&constant_query)?;
|
||||||
Ok(format!("{value:?}"))
|
Ok(format!("{value:?}"))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) async fn fetch_events_dynamically() -> Result<Vec<String>, subxt::Error> {
|
pub(crate) async fn fetch_events_dynamically() -> Result<Vec<String>, subxt::Error> {
|
||||||
let api = OnlineClient::<PolkadotConfig>::new().await?;
|
let config = PolkadotConfig::new();
|
||||||
let events = api.events().at_latest().await?;
|
let api = OnlineClient::new(config).await?;
|
||||||
|
let events = api.at_current_block().await?.events().fetch().await?;
|
||||||
let mut event_strings = Vec::<String>::new();
|
let mut event_strings = Vec::<String>::new();
|
||||||
for event in events.iter() {
|
for event in events.iter() {
|
||||||
let event = event?;
|
let event = event?;
|
||||||
let pallet = event.pallet_name();
|
let pallet = event.pallet_name();
|
||||||
let variant = event.variant_name();
|
let variant = event.event_name();
|
||||||
let field_values = event.decode_as_fields::<subxt::dynamic::Value>()?;
|
let field_values = event.decode_fields_unchecked_as::<subxt::dynamic::Value>()?;
|
||||||
event_strings.push(format!("{pallet}::{variant}: {field_values}"));
|
event_strings.push(format!("{pallet}::{variant}: {field_values}"));
|
||||||
}
|
}
|
||||||
Ok(event_strings)
|
Ok(event_strings)
|
||||||
@@ -38,23 +44,28 @@ pub(crate) async fn fetch_events_dynamically() -> Result<Vec<String>, subxt::Err
|
|||||||
pub(crate) async fn subscribe_to_finalized_blocks(
|
pub(crate) async fn subscribe_to_finalized_blocks(
|
||||||
cb: Callback<AttrValue>,
|
cb: Callback<AttrValue>,
|
||||||
) -> Result<(), subxt::Error> {
|
) -> Result<(), subxt::Error> {
|
||||||
let api = OnlineClient::<PolkadotConfig>::new().await?;
|
let config = PolkadotConfig::new();
|
||||||
|
let api = OnlineClient::new(config).await?;
|
||||||
// Subscribe to all finalized blocks:
|
// Subscribe to all finalized blocks:
|
||||||
let mut blocks_sub = api.blocks().subscribe_finalized().await?;
|
let mut blocks_sub = api.stream_blocks().await?;
|
||||||
while let Some(block) = blocks_sub.next().await {
|
while let Some(block) = blocks_sub.next().await {
|
||||||
let block = block?;
|
let block = block?;
|
||||||
let mut output = String::new();
|
let mut output = String::new();
|
||||||
writeln!(output, "Block #{}:", block.header().number).ok();
|
writeln!(output, "Block #{}:", block.header().number).ok();
|
||||||
writeln!(output, " Hash: {}", block.hash()).ok();
|
writeln!(output, " Hash: {}", block.hash()).ok();
|
||||||
writeln!(output, " Extrinsics:").ok();
|
writeln!(output, " Extrinsics:").ok();
|
||||||
let extrinsics = block.extrinsics().await?;
|
|
||||||
|
let at_block = block.at().await?;
|
||||||
|
let extrinsics = at_block.extrinsics().fetch().await?;
|
||||||
for ext in extrinsics.iter() {
|
for ext in extrinsics.iter() {
|
||||||
|
let ext = ext?;
|
||||||
|
|
||||||
let idx = ext.index();
|
let idx = ext.index();
|
||||||
let events = ext.events().await?;
|
let events = ext.events().await?;
|
||||||
let bytes_hex = format!("0x{}", hex::encode(ext.bytes()));
|
let bytes_hex = format!("0x{}", hex::encode(ext.bytes()));
|
||||||
|
|
||||||
// See the API docs for more ways to decode extrinsics:
|
// See the API docs for more ways to decode extrinsics:
|
||||||
let decoded_ext = ext.as_root_extrinsic::<polkadot::Call>();
|
let decoded_ext = ext.decode_call_data_as::<polkadot::Call>();
|
||||||
|
|
||||||
writeln!(output, " Extrinsic #{idx}:").ok();
|
writeln!(output, " Extrinsic #{idx}:").ok();
|
||||||
writeln!(output, " Bytes: {bytes_hex}").ok();
|
writeln!(output, " Bytes: {bytes_hex}").ok();
|
||||||
@@ -65,8 +76,8 @@ pub(crate) async fn subscribe_to_finalized_blocks(
|
|||||||
let evt = evt?;
|
let evt = evt?;
|
||||||
|
|
||||||
let pallet_name = evt.pallet_name();
|
let pallet_name = evt.pallet_name();
|
||||||
let event_name = evt.variant_name();
|
let event_name = evt.event_name();
|
||||||
let event_values = evt.decode_as_fields::<subxt::dynamic::Value>()?;
|
let event_values = evt.decode_fields_unchecked_as::<subxt::dynamic::Value>()?;
|
||||||
|
|
||||||
writeln!(output, " {pallet_name}_{event_name}").ok();
|
writeln!(output, " {pallet_name}_{event_name}").ok();
|
||||||
writeln!(output, " {}", event_values).ok();
|
writeln!(output, " {}", event_values).ok();
|
||||||
@@ -122,15 +133,18 @@ fn encode_then_hex<E: Encode>(input: &E) -> String {
|
|||||||
/// Some parameters are hard-coded here and not taken from the partial_extrinsic itself (mortality_checkpoint, era, tip).
|
/// Some parameters are hard-coded here and not taken from the partial_extrinsic itself (mortality_checkpoint, era, tip).
|
||||||
pub async fn extension_signature_for_extrinsic(
|
pub async fn extension_signature_for_extrinsic(
|
||||||
call_data: &[u8],
|
call_data: &[u8],
|
||||||
api: &OnlineClient<PolkadotConfig>,
|
api: &OnlineClientAtBlock<PolkadotConfig>,
|
||||||
account_nonce: u64,
|
account_nonce: u64,
|
||||||
account_source: String,
|
account_source: String,
|
||||||
account_address: String,
|
account_address: String,
|
||||||
) -> Result<Vec<u8>, anyhow::Error> {
|
) -> Result<Vec<u8>, anyhow::Error> {
|
||||||
let genesis_hash = encode_then_hex(&api.genesis_hash());
|
let genesis_hash = encode_then_hex(
|
||||||
|
&api.genesis_hash()
|
||||||
|
.expect("Should always exist via OnlineClient"),
|
||||||
|
);
|
||||||
// These numbers aren't SCALE encoded; their bytes are just converted to hex:
|
// These numbers aren't SCALE encoded; their bytes are just converted to hex:
|
||||||
let spec_version = to_hex(&api.runtime_version().spec_version.to_be_bytes());
|
let spec_version = to_hex(&api.spec_version().to_be_bytes());
|
||||||
let transaction_version = to_hex(&api.runtime_version().transaction_version.to_be_bytes());
|
let transaction_version = to_hex(&api.transaction_version().to_be_bytes());
|
||||||
let nonce = to_hex(&account_nonce.to_be_bytes());
|
let nonce = to_hex(&account_nonce.to_be_bytes());
|
||||||
// If you construct a mortal transaction, then this block hash needs to correspond
|
// If you construct a mortal transaction, then this block hash needs to correspond
|
||||||
// to the block number passed to `Era::mortal()`.
|
// to the block number passed to `Era::mortal()`.
|
||||||
@@ -138,7 +152,7 @@ pub async fn extension_signature_for_extrinsic(
|
|||||||
let era = encode_then_hex(&subxt::utils::Era::Immortal);
|
let era = encode_then_hex(&subxt::utils::Era::Immortal);
|
||||||
let method = to_hex(call_data);
|
let method = to_hex(call_data);
|
||||||
let signed_extensions: Vec<String> = api
|
let signed_extensions: Vec<String> = api
|
||||||
.metadata()
|
.metadata_ref()
|
||||||
.extrinsic()
|
.extrinsic()
|
||||||
.transaction_extensions_by_version(0)
|
.transaction_extensions_by_version(0)
|
||||||
.unwrap()
|
.unwrap()
|
||||||
|
|||||||
+26
-4
@@ -60,13 +60,13 @@ where
|
|||||||
{
|
{
|
||||||
/// Construct and submit transactions. This is a
|
/// Construct and submit transactions. This is a
|
||||||
/// shorthand to [`Self::transactions()`].
|
/// shorthand to [`Self::transactions()`].
|
||||||
pub fn tx(&self) -> TransactionsClient<'_, T, Client> {
|
pub fn tx(&self) -> TransactionsClient<T, Client> {
|
||||||
TransactionsClient::new(&self.client)
|
self.transactions()
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Construct and submit transactions.
|
/// Construct and submit transactions.
|
||||||
pub fn transactions(&self) -> TransactionsClient<'_, T, Client> {
|
pub fn transactions(&self) -> TransactionsClient<T, Client> {
|
||||||
TransactionsClient::new(&self.client)
|
TransactionsClient::new(self.client.clone())
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Access storage at this block.
|
/// Access storage at this block.
|
||||||
@@ -113,6 +113,23 @@ where
|
|||||||
pub fn block_number(&self) -> u64 {
|
pub fn block_number(&self) -> u64 {
|
||||||
self.client.block_number()
|
self.client.block_number()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// The spec version at this block.
|
||||||
|
pub fn spec_version(&self) -> u32 {
|
||||||
|
self.client.spec_version()
|
||||||
|
}
|
||||||
|
|
||||||
|
/// The transaction version at this block.
|
||||||
|
/// Note: This is different from the value encoded at the start of extrinsics.
|
||||||
|
pub fn transaction_version(&self) -> u32 {
|
||||||
|
self.client.transaction_version()
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Return the genesis hash, if it is available. if you're using an
|
||||||
|
/// [`OnlineClientAtBlock`], this will always be present.
|
||||||
|
pub fn genesis_hash(&self) -> Option<HashFor<T>> {
|
||||||
|
self.client.genesis_hash()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T, Client> ClientAtBlock<T, Client>
|
impl<T, Client> ClientAtBlock<T, Client>
|
||||||
@@ -120,6 +137,11 @@ where
|
|||||||
T: Config,
|
T: Config,
|
||||||
Client: OnlineClientAtBlockT<T>,
|
Client: OnlineClientAtBlockT<T>,
|
||||||
{
|
{
|
||||||
|
/// Return the [`OnlineClient`] behind this.
|
||||||
|
pub fn online_client(&self) -> OnlineClient<T> {
|
||||||
|
self.client.client()
|
||||||
|
}
|
||||||
|
|
||||||
/// The current block hash.
|
/// The current block hash.
|
||||||
pub fn block_hash(&self) -> HashFor<T> {
|
pub fn block_hash(&self) -> HashFor<T> {
|
||||||
self.client.block_hash()
|
self.client.block_hash()
|
||||||
|
|||||||
@@ -7,13 +7,13 @@ use crate::backend::{Backend, BlockRef, CombinedBackend};
|
|||||||
use crate::config::{Config, HashFor, Hasher, Header};
|
use crate::config::{Config, HashFor, Hasher, Header};
|
||||||
use crate::error::{BlocksError, OnlineClientAtBlockError};
|
use crate::error::{BlocksError, OnlineClientAtBlockError};
|
||||||
use crate::metadata::{ArcMetadata, Metadata};
|
use crate::metadata::{ArcMetadata, Metadata};
|
||||||
|
use crate::transactions::TransactionsClient;
|
||||||
use blocks::Blocks;
|
use blocks::Blocks;
|
||||||
use codec::{Compact, Decode, Encode};
|
use codec::{Compact, Decode, Encode};
|
||||||
use core::marker::PhantomData;
|
use core::marker::PhantomData;
|
||||||
use frame_decode::helpers::ToTypeRegistry;
|
use frame_decode::helpers::ToTypeRegistry;
|
||||||
use frame_metadata::{RuntimeMetadata, RuntimeMetadataPrefixed};
|
use frame_metadata::{RuntimeMetadata, RuntimeMetadataPrefixed};
|
||||||
use scale_info_legacy::TypeRegistrySet;
|
use scale_info_legacy::TypeRegistrySet;
|
||||||
use std::future::Future;
|
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
use subxt_rpcs::RpcClient;
|
use subxt_rpcs::RpcClient;
|
||||||
|
|
||||||
@@ -125,6 +125,22 @@ impl<T: Config> OnlineClient<T> {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Return the genesis hash of the connected chain.
|
||||||
|
pub fn genesis_hash(&self) -> HashFor<T> {
|
||||||
|
self.inner.genesis_hash
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Construct, sign and submit transactions. This is an alias for `self.at_current_block().await?.transactions()`.
|
||||||
|
pub async fn transactions(&self) -> Result<TransactionsClient<T, OnlineClientAtBlockImpl<T>>, OnlineClientAtBlockError> {
|
||||||
|
let at_block = self.at_current_block().await?;
|
||||||
|
Ok(at_block.transactions())
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Construct, sign and submit transactions. This is an alias for `self.transactions()`.
|
||||||
|
pub async fn tx(&self) -> Result<TransactionsClient<T, OnlineClientAtBlockImpl<T>>, OnlineClientAtBlockError> {
|
||||||
|
self.transactions().await
|
||||||
|
}
|
||||||
|
|
||||||
/// Obtain a stream of all blocks imported by the node.
|
/// Obtain a stream of all blocks imported by the node.
|
||||||
///
|
///
|
||||||
/// **Note:** You probably want to use [`Self::stream_blocks()`] most of
|
/// **Note:** You probably want to use [`Self::stream_blocks()`] most of
|
||||||
@@ -438,11 +454,8 @@ pub trait OnlineClientAtBlockT<T: Config>: OfflineClientAtBlockT<T> {
|
|||||||
fn backend(&self) -> &dyn Backend<T>;
|
fn backend(&self) -> &dyn Backend<T>;
|
||||||
/// Return the block hash for the current block.
|
/// Return the block hash for the current block.
|
||||||
fn block_hash(&self) -> HashFor<T>;
|
fn block_hash(&self) -> HashFor<T>;
|
||||||
/// Point at a new block.
|
/// Return the inner [`OnlineClient`].
|
||||||
fn at_block(
|
fn client(&self) -> OnlineClient<T>;
|
||||||
&self,
|
|
||||||
number_or_hash: BlockNumberOrRef<T>,
|
|
||||||
) -> impl Future<Output = Result<ClientAtBlock<T, Self>, OnlineClientAtBlockError>>;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// An implementation of the [`OnlineClientAtBlockImpl`] trait, which is used in conjunction
|
/// An implementation of the [`OnlineClientAtBlockImpl`] trait, which is used in conjunction
|
||||||
@@ -466,11 +479,8 @@ impl<T: Config> OnlineClientAtBlockT<T> for OnlineClientAtBlockImpl<T> {
|
|||||||
fn block_hash(&self) -> HashFor<T> {
|
fn block_hash(&self) -> HashFor<T> {
|
||||||
self.block_ref.hash()
|
self.block_ref.hash()
|
||||||
}
|
}
|
||||||
async fn at_block(
|
fn client(&self) -> OnlineClient<T> {
|
||||||
&self,
|
self.client.clone()
|
||||||
number_or_hash: BlockNumberOrRef<T>,
|
|
||||||
) -> Result<ClientAtBlock<T, Self>, OnlineClientAtBlockError> {
|
|
||||||
self.client.at_block(number_or_hash).await
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+42
-41
@@ -41,13 +41,13 @@ pub use validation_result::{
|
|||||||
|
|
||||||
/// A client for working with transactions. See [the module docs](crate::transactions) for more.
|
/// A client for working with transactions. See [the module docs](crate::transactions) for more.
|
||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
pub struct TransactionsClient<'atblock, T, Client> {
|
pub struct TransactionsClient<T, Client> {
|
||||||
client: &'atblock Client,
|
client: Client,
|
||||||
marker: PhantomData<T>,
|
marker: PhantomData<T>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'atblock, T, Client> TransactionsClient<'atblock, T, Client> {
|
impl<T, Client> TransactionsClient<T, Client> {
|
||||||
pub(crate) fn new(client: &'atblock Client) -> Self {
|
pub(crate) fn new(client: Client) -> Self {
|
||||||
TransactionsClient {
|
TransactionsClient {
|
||||||
client,
|
client,
|
||||||
marker: PhantomData,
|
marker: PhantomData,
|
||||||
@@ -55,8 +55,8 @@ impl<'atblock, T, Client> TransactionsClient<'atblock, T, Client> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'atblock, T: Config, Client: OfflineClientAtBlockT<T>>
|
impl<T: Config, Client: OfflineClientAtBlockT<T>>
|
||||||
TransactionsClient<'atblock, T, Client>
|
TransactionsClient<T, Client>
|
||||||
{
|
{
|
||||||
/// Run the validation logic against some transaction you'd like to submit. Returns `Ok(())`
|
/// Run the validation logic against some transaction you'd like to submit. Returns `Ok(())`
|
||||||
/// if the call is valid (or if it's not possible to check since the call has no validation hash).
|
/// if the call is valid (or if it's not possible to check since the call has no validation hash).
|
||||||
@@ -95,11 +95,11 @@ impl<'atblock, T: Config, Client: OfflineClientAtBlockT<T>>
|
|||||||
/// transaction bytes, and some client (anything implementing [`OfflineClientAtBlockT`]
|
/// transaction bytes, and some client (anything implementing [`OfflineClientAtBlockT`]
|
||||||
/// or [`OnlineClientAtBlockT`]).
|
/// or [`OnlineClientAtBlockT`]).
|
||||||
pub fn from_bytes(
|
pub fn from_bytes(
|
||||||
client: &'atblock Client,
|
&self,
|
||||||
tx_bytes: Vec<u8>,
|
tx_bytes: Vec<u8>,
|
||||||
) -> SubmittableTransaction<'atblock, T, Client> {
|
) -> SubmittableTransaction<T, Client> {
|
||||||
SubmittableTransaction {
|
SubmittableTransaction {
|
||||||
client,
|
client: self.client.clone(),
|
||||||
encoded: tx_bytes,
|
encoded: tx_bytes,
|
||||||
marker: PhantomData,
|
marker: PhantomData,
|
||||||
}
|
}
|
||||||
@@ -122,7 +122,7 @@ impl<'atblock, T: Config, Client: OfflineClientAtBlockT<T>>
|
|||||||
pub fn create_unsigned<Call>(
|
pub fn create_unsigned<Call>(
|
||||||
&self,
|
&self,
|
||||||
call: &Call,
|
call: &Call,
|
||||||
) -> Result<SubmittableTransaction<'atblock, T, Client>, ExtrinsicError>
|
) -> Result<SubmittableTransaction<T, Client>, ExtrinsicError>
|
||||||
where
|
where
|
||||||
Call: Payload,
|
Call: Payload,
|
||||||
{
|
{
|
||||||
@@ -138,7 +138,7 @@ impl<'atblock, T: Config, Client: OfflineClientAtBlockT<T>>
|
|||||||
pub fn create_v4_unsigned<Call>(
|
pub fn create_v4_unsigned<Call>(
|
||||||
&self,
|
&self,
|
||||||
call: &Call,
|
call: &Call,
|
||||||
) -> Result<SubmittableTransaction<'atblock, T, Client>, ExtrinsicError>
|
) -> Result<SubmittableTransaction<T, Client>, ExtrinsicError>
|
||||||
where
|
where
|
||||||
Call: Payload,
|
Call: Payload,
|
||||||
{
|
{
|
||||||
@@ -149,7 +149,7 @@ impl<'atblock, T: Config, Client: OfflineClientAtBlockT<T>>
|
|||||||
pub fn create_v5_unsigned<Call>(
|
pub fn create_v5_unsigned<Call>(
|
||||||
&self,
|
&self,
|
||||||
call: &Call,
|
call: &Call,
|
||||||
) -> Result<SubmittableTransaction<'atblock, T, Client>, ExtrinsicError>
|
) -> Result<SubmittableTransaction<T, Client>, ExtrinsicError>
|
||||||
where
|
where
|
||||||
Call: Payload,
|
Call: Payload,
|
||||||
{
|
{
|
||||||
@@ -166,7 +166,7 @@ impl<'atblock, T: Config, Client: OfflineClientAtBlockT<T>>
|
|||||||
&self,
|
&self,
|
||||||
call: &Call,
|
call: &Call,
|
||||||
params: <T::ExtrinsicParams as ExtrinsicParams<T>>::Params,
|
params: <T::ExtrinsicParams as ExtrinsicParams<T>>::Params,
|
||||||
) -> Result<SignableTransaction<'atblock, T, Client>, ExtrinsicError>
|
) -> Result<SignableTransaction<T, Client>, ExtrinsicError>
|
||||||
where
|
where
|
||||||
Call: Payload,
|
Call: Payload,
|
||||||
{
|
{
|
||||||
@@ -187,7 +187,7 @@ impl<'atblock, T: Config, Client: OfflineClientAtBlockT<T>>
|
|||||||
&self,
|
&self,
|
||||||
call: &Call,
|
call: &Call,
|
||||||
params: <T::ExtrinsicParams as ExtrinsicParams<T>>::Params,
|
params: <T::ExtrinsicParams as ExtrinsicParams<T>>::Params,
|
||||||
) -> Result<SignableTransaction<'atblock, T, Client>, ExtrinsicError>
|
) -> Result<SignableTransaction<T, Client>, ExtrinsicError>
|
||||||
where
|
where
|
||||||
Call: Payload,
|
Call: Payload,
|
||||||
{
|
{
|
||||||
@@ -205,7 +205,7 @@ impl<'atblock, T: Config, Client: OfflineClientAtBlockT<T>>
|
|||||||
&self,
|
&self,
|
||||||
call: &Call,
|
call: &Call,
|
||||||
params: <T::ExtrinsicParams as ExtrinsicParams<T>>::Params,
|
params: <T::ExtrinsicParams as ExtrinsicParams<T>>::Params,
|
||||||
) -> Result<SignableTransaction<'atblock, T, Client>, ExtrinsicError>
|
) -> Result<SignableTransaction<T, Client>, ExtrinsicError>
|
||||||
where
|
where
|
||||||
Call: Payload,
|
Call: Payload,
|
||||||
{
|
{
|
||||||
@@ -237,7 +237,7 @@ impl<'atblock, T: Config, Client: OfflineClientAtBlockT<T>>
|
|||||||
&self,
|
&self,
|
||||||
call: &Call,
|
call: &Call,
|
||||||
tx_version: SupportedTransactionVersion,
|
tx_version: SupportedTransactionVersion,
|
||||||
) -> Result<SubmittableTransaction<'atblock, T, Client>, ExtrinsicError> {
|
) -> Result<SubmittableTransaction<T, Client>, ExtrinsicError> {
|
||||||
let metadata = self.client.metadata_ref();
|
let metadata = self.client.metadata_ref();
|
||||||
|
|
||||||
// 1. Validate this call against the current node metadata if the call comes
|
// 1. Validate this call against the current node metadata if the call comes
|
||||||
@@ -263,7 +263,7 @@ impl<'atblock, T: Config, Client: OfflineClientAtBlockT<T>>
|
|||||||
|
|
||||||
// Wrap in Encoded to ensure that any more "encode" calls leave it in the right state.
|
// Wrap in Encoded to ensure that any more "encode" calls leave it in the right state.
|
||||||
Ok(SubmittableTransaction {
|
Ok(SubmittableTransaction {
|
||||||
client: self.client,
|
client: self.client.clone(),
|
||||||
encoded: extrinsic,
|
encoded: extrinsic,
|
||||||
marker: PhantomData,
|
marker: PhantomData,
|
||||||
})
|
})
|
||||||
@@ -275,7 +275,7 @@ impl<'atblock, T: Config, Client: OfflineClientAtBlockT<T>>
|
|||||||
call: &Call,
|
call: &Call,
|
||||||
params: <T::ExtrinsicParams as ExtrinsicParams<T>>::Params,
|
params: <T::ExtrinsicParams as ExtrinsicParams<T>>::Params,
|
||||||
tx_version: SupportedTransactionVersion,
|
tx_version: SupportedTransactionVersion,
|
||||||
) -> Result<SignableTransaction<'atblock, T, Client>, ExtrinsicError>
|
) -> Result<SignableTransaction<T, Client>, ExtrinsicError>
|
||||||
where
|
where
|
||||||
Call: Payload,
|
Call: Payload,
|
||||||
{
|
{
|
||||||
@@ -314,7 +314,7 @@ impl<'atblock, T: Config, Client: OfflineClientAtBlockT<T>>
|
|||||||
|
|
||||||
// Return these details, ready to construct a signed extrinsic from.
|
// Return these details, ready to construct a signed extrinsic from.
|
||||||
Ok(SignableTransaction {
|
Ok(SignableTransaction {
|
||||||
client: self.client,
|
client: self.client.clone(),
|
||||||
call_data,
|
call_data,
|
||||||
additional_and_extra_params,
|
additional_and_extra_params,
|
||||||
tx_extension_version,
|
tx_extension_version,
|
||||||
@@ -322,10 +322,10 @@ impl<'atblock, T: Config, Client: OfflineClientAtBlockT<T>>
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'atblock, T: Config, Client: OnlineClientAtBlockT<T>> TransactionsClient<'atblock, T, Client> {
|
impl<T: Config, Client: OnlineClientAtBlockT<T>> TransactionsClient<T, Client> {
|
||||||
/// Get the account nonce for a given account ID.
|
/// Get the account nonce for a given account ID.
|
||||||
pub async fn account_nonce(&self, account_id: &T::AccountId) -> Result<u64, ExtrinsicError> {
|
pub async fn account_nonce(&self, account_id: &T::AccountId) -> Result<u64, ExtrinsicError> {
|
||||||
account_nonce::get_account_nonce(self.client, account_id)
|
account_nonce::get_account_nonce(&self.client, account_id)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| ExtrinsicError::AccountNonceError {
|
.map_err(|e| ExtrinsicError::AccountNonceError {
|
||||||
block_hash: self.client.block_hash().into(),
|
block_hash: self.client.block_hash().into(),
|
||||||
@@ -340,7 +340,7 @@ impl<'atblock, T: Config, Client: OnlineClientAtBlockT<T>> TransactionsClient<'a
|
|||||||
call: &Call,
|
call: &Call,
|
||||||
account_id: &T::AccountId,
|
account_id: &T::AccountId,
|
||||||
mut params: <T::ExtrinsicParams as ExtrinsicParams<T>>::Params,
|
mut params: <T::ExtrinsicParams as ExtrinsicParams<T>>::Params,
|
||||||
) -> Result<SignableTransaction<'atblock, T, Client>, ExtrinsicError>
|
) -> Result<SignableTransaction<T, Client>, ExtrinsicError>
|
||||||
where
|
where
|
||||||
Call: Payload,
|
Call: Payload,
|
||||||
{
|
{
|
||||||
@@ -358,7 +358,7 @@ impl<'atblock, T: Config, Client: OnlineClientAtBlockT<T>> TransactionsClient<'a
|
|||||||
call: &Call,
|
call: &Call,
|
||||||
account_id: &T::AccountId,
|
account_id: &T::AccountId,
|
||||||
mut params: <T::ExtrinsicParams as ExtrinsicParams<T>>::Params,
|
mut params: <T::ExtrinsicParams as ExtrinsicParams<T>>::Params,
|
||||||
) -> Result<SignableTransaction<'atblock, T, Client>, ExtrinsicError>
|
) -> Result<SignableTransaction<T, Client>, ExtrinsicError>
|
||||||
where
|
where
|
||||||
Call: Payload,
|
Call: Payload,
|
||||||
{
|
{
|
||||||
@@ -376,7 +376,7 @@ impl<'atblock, T: Config, Client: OnlineClientAtBlockT<T>> TransactionsClient<'a
|
|||||||
call: &Call,
|
call: &Call,
|
||||||
account_id: &T::AccountId,
|
account_id: &T::AccountId,
|
||||||
mut params: <T::ExtrinsicParams as ExtrinsicParams<T>>::Params,
|
mut params: <T::ExtrinsicParams as ExtrinsicParams<T>>::Params,
|
||||||
) -> Result<SignableTransaction<'atblock, T, Client>, ExtrinsicError>
|
) -> Result<SignableTransaction<T, Client>, ExtrinsicError>
|
||||||
where
|
where
|
||||||
Call: Payload,
|
Call: Payload,
|
||||||
{
|
{
|
||||||
@@ -391,7 +391,7 @@ impl<'atblock, T: Config, Client: OnlineClientAtBlockT<T>> TransactionsClient<'a
|
|||||||
call: &Call,
|
call: &Call,
|
||||||
signer: &S,
|
signer: &S,
|
||||||
params: <T::ExtrinsicParams as ExtrinsicParams<T>>::Params,
|
params: <T::ExtrinsicParams as ExtrinsicParams<T>>::Params,
|
||||||
) -> Result<SubmittableTransaction<'atblock, T, Client>, ExtrinsicError>
|
) -> Result<SubmittableTransaction<T, Client>, ExtrinsicError>
|
||||||
where
|
where
|
||||||
Call: Payload,
|
Call: Payload,
|
||||||
S: Signer<T>,
|
S: Signer<T>,
|
||||||
@@ -412,7 +412,7 @@ impl<'atblock, T: Config, Client: OnlineClientAtBlockT<T>> TransactionsClient<'a
|
|||||||
&mut self,
|
&mut self,
|
||||||
call: &Call,
|
call: &Call,
|
||||||
signer: &S,
|
signer: &S,
|
||||||
) -> Result<TransactionProgress<'atblock, T, Client>, ExtrinsicError>
|
) -> Result<TransactionProgress<T, Client>, ExtrinsicError>
|
||||||
where
|
where
|
||||||
Call: Payload,
|
Call: Payload,
|
||||||
S: Signer<T>,
|
S: Signer<T>,
|
||||||
@@ -431,7 +431,7 @@ impl<'atblock, T: Config, Client: OnlineClientAtBlockT<T>> TransactionsClient<'a
|
|||||||
call: &Call,
|
call: &Call,
|
||||||
signer: &S,
|
signer: &S,
|
||||||
params: <T::ExtrinsicParams as ExtrinsicParams<T>>::Params,
|
params: <T::ExtrinsicParams as ExtrinsicParams<T>>::Params,
|
||||||
) -> Result<TransactionProgress<'atblock, T, Client>, ExtrinsicError>
|
) -> Result<TransactionProgress<T, Client>, ExtrinsicError>
|
||||||
where
|
where
|
||||||
Call: Payload,
|
Call: Payload,
|
||||||
S: Signer<T>,
|
S: Signer<T>,
|
||||||
@@ -534,16 +534,16 @@ pub enum SupportedTransactionVersion {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// This is a transaction that requires signing before it can be submitted.
|
/// This is a transaction that requires signing before it can be submitted.
|
||||||
pub struct SignableTransaction<'atblock, T: Config, Client> {
|
pub struct SignableTransaction<T: Config, Client> {
|
||||||
client: &'atblock Client,
|
client: Client,
|
||||||
call_data: Vec<u8>,
|
call_data: Vec<u8>,
|
||||||
additional_and_extra_params: <T as Config>::ExtrinsicParams,
|
additional_and_extra_params: <T as Config>::ExtrinsicParams,
|
||||||
// For V4 transactions this doesn't exist, and for V5 it does.
|
// For V4 transactions this doesn't exist, and for V5 it does.
|
||||||
tx_extension_version: Option<u8>,
|
tx_extension_version: Option<u8>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'atblock, T: Config, Client: OfflineClientAtBlockT<T>>
|
impl<T: Config, Client: OfflineClientAtBlockT<T>>
|
||||||
SignableTransaction<'atblock, T, Client>
|
SignableTransaction<T, Client>
|
||||||
{
|
{
|
||||||
/// Return the bytes representing the call data for this partially constructed
|
/// Return the bytes representing the call data for this partially constructed
|
||||||
/// transaction.
|
/// transaction.
|
||||||
@@ -563,7 +563,7 @@ impl<'atblock, T: Config, Client: OfflineClientAtBlockT<T>>
|
|||||||
pub fn sign<S: Signer<T>>(
|
pub fn sign<S: Signer<T>>(
|
||||||
&mut self,
|
&mut self,
|
||||||
signer: &S,
|
signer: &S,
|
||||||
) -> SubmittableTransaction<'atblock, T, Client> {
|
) -> SubmittableTransaction<T, Client> {
|
||||||
// Given our signer, we can sign the payload representing this extrinsic.
|
// Given our signer, we can sign the payload representing this extrinsic.
|
||||||
let signature = signer.sign(&self.signer_payload());
|
let signature = signer.sign(&self.signer_payload());
|
||||||
// Now, use the signature and "from" account to build the extrinsic.
|
// Now, use the signature and "from" account to build the extrinsic.
|
||||||
@@ -578,7 +578,7 @@ impl<'atblock, T: Config, Client: OfflineClientAtBlockT<T>>
|
|||||||
&mut self,
|
&mut self,
|
||||||
account_id: &T::AccountId,
|
account_id: &T::AccountId,
|
||||||
signature: &T::Signature,
|
signature: &T::Signature,
|
||||||
) -> SubmittableTransaction<'atblock, T, Client> {
|
) -> SubmittableTransaction<T, Client> {
|
||||||
let encoded = if let Some(tx_extensions_version) = self.tx_extension_version {
|
let encoded = if let Some(tx_extensions_version) = self.tx_extension_version {
|
||||||
let mut encoded_inner = Vec::new();
|
let mut encoded_inner = Vec::new();
|
||||||
// Pass account and signature to extensions to be added.
|
// Pass account and signature to extensions to be added.
|
||||||
@@ -626,7 +626,7 @@ impl<'atblock, T: Config, Client: OfflineClientAtBlockT<T>>
|
|||||||
};
|
};
|
||||||
|
|
||||||
SubmittableTransaction {
|
SubmittableTransaction {
|
||||||
client: self.client,
|
client: self.client.clone(),
|
||||||
encoded,
|
encoded,
|
||||||
marker: PhantomData,
|
marker: PhantomData,
|
||||||
}
|
}
|
||||||
@@ -660,13 +660,14 @@ impl<'atblock, T: Config, Client: OfflineClientAtBlockT<T>>
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// This is a transaction that is ready to submit.
|
/// This is a transaction that is ready to submit.
|
||||||
pub struct SubmittableTransaction<'atblock, T, Client> {
|
#[derive(Debug, Clone)]
|
||||||
client: &'atblock Client,
|
pub struct SubmittableTransaction<T, Client> {
|
||||||
|
client: Client,
|
||||||
encoded: Vec<u8>,
|
encoded: Vec<u8>,
|
||||||
marker: PhantomData<T>,
|
marker: PhantomData<T>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'atblock, T, Client> SubmittableTransaction<'atblock, T, Client>
|
impl<T, Client> SubmittableTransaction<T, Client>
|
||||||
where
|
where
|
||||||
T: Config,
|
T: Config,
|
||||||
Client: OfflineClientAtBlockT<T>,
|
Client: OfflineClientAtBlockT<T>,
|
||||||
@@ -688,8 +689,8 @@ where
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'atblock, T: Config, Client: OnlineClientAtBlockT<T>>
|
impl<T: Config, Client: OnlineClientAtBlockT<T>>
|
||||||
SubmittableTransaction<'atblock, T, Client>
|
SubmittableTransaction<T, Client>
|
||||||
{
|
{
|
||||||
/// Submits the transaction to the chain.
|
/// Submits the transaction to the chain.
|
||||||
///
|
///
|
||||||
@@ -697,7 +698,7 @@ impl<'atblock, T: Config, Client: OnlineClientAtBlockT<T>>
|
|||||||
/// and obtain details about it, once it has made it into a block.
|
/// and obtain details about it, once it has made it into a block.
|
||||||
pub async fn submit_and_watch(
|
pub async fn submit_and_watch(
|
||||||
&self,
|
&self,
|
||||||
) -> Result<TransactionProgress<'atblock, T, Client>, ExtrinsicError> {
|
) -> Result<TransactionProgress<T, Client>, ExtrinsicError> {
|
||||||
// Get a hash of the transaction (we'll need this later).
|
// Get a hash of the transaction (we'll need this later).
|
||||||
let ext_hash = self.hash();
|
let ext_hash = self.hash();
|
||||||
|
|
||||||
@@ -709,7 +710,7 @@ impl<'atblock, T: Config, Client: OnlineClientAtBlockT<T>>
|
|||||||
.await
|
.await
|
||||||
.map_err(ExtrinsicError::ErrorSubmittingTransaction)?;
|
.map_err(ExtrinsicError::ErrorSubmittingTransaction)?;
|
||||||
|
|
||||||
Ok(TransactionProgress::new(sub, self.client, ext_hash))
|
Ok(TransactionProgress::new(sub, self.client.clone(), ext_hash))
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Submits the transaction to the chain for block inclusion.
|
/// Submits the transaction to the chain for block inclusion.
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
use crate::backend::BlockRef;
|
use crate::backend::BlockRef;
|
||||||
use crate::backend::{StreamOfResults, TransactionStatus as BackendTransactionStatus};
|
use crate::backend::{StreamOfResults, TransactionStatus as BackendTransactionStatus};
|
||||||
use crate::client::{BlockNumberOrRef, OnlineClientAtBlockT};
|
use crate::client::{BlockNumberOrRef, OfflineClientAtBlockT, OnlineClientAtBlockT};
|
||||||
use crate::config::{Config, HashFor};
|
use crate::config::{Config, HashFor};
|
||||||
use crate::error::{
|
use crate::error::{
|
||||||
DispatchError, TransactionEventsError, TransactionFinalizedSuccessError,
|
DispatchError, TransactionEventsError, TransactionFinalizedSuccessError,
|
||||||
@@ -17,22 +17,22 @@ use std::task::{Context, Poll};
|
|||||||
/// [`TransactionProgress::wait_for_finalized_success`] can be used to wait
|
/// [`TransactionProgress::wait_for_finalized_success`] can be used to wait
|
||||||
/// for completion.
|
/// for completion.
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub struct TransactionProgress<'atblock, T: Config, C> {
|
pub struct TransactionProgress<T: Config, C> {
|
||||||
sub: Option<StreamOfResults<BackendTransactionStatus<HashFor<T>>>>,
|
sub: Option<StreamOfResults<BackendTransactionStatus<HashFor<T>>>>,
|
||||||
ext_hash: HashFor<T>,
|
ext_hash: HashFor<T>,
|
||||||
client: &'atblock C,
|
client: C,
|
||||||
}
|
}
|
||||||
|
|
||||||
// The above type is not `Unpin` by default unless the generic param `T` is,
|
// The above type is not `Unpin` by default unless the generic param `T` is,
|
||||||
// so we manually make it clear that Unpin is actually fine regardless of `T`
|
// so we manually make it clear that Unpin is actually fine regardless of `T`
|
||||||
// (we don't care if this moves around in memory while it's "pinned").
|
// (we don't care if this moves around in memory while it's "pinned").
|
||||||
impl<'atblock, T: Config, C> Unpin for TransactionProgress<'atblock, T, C> {}
|
impl<T: Config, C> Unpin for TransactionProgress<T, C> {}
|
||||||
|
|
||||||
impl<'atblock, T: Config, C> TransactionProgress<'atblock, T, C> {
|
impl<T: Config, C> TransactionProgress<T, C> {
|
||||||
/// Instantiate a new [`TransactionProgress`] from a custom subscription.
|
/// Instantiate a new [`TransactionProgress`] from a custom subscription.
|
||||||
pub fn new(
|
pub(crate) fn new(
|
||||||
sub: StreamOfResults<BackendTransactionStatus<HashFor<T>>>,
|
sub: StreamOfResults<BackendTransactionStatus<HashFor<T>>>,
|
||||||
client: &'atblock C,
|
client: C,
|
||||||
ext_hash: HashFor<T>,
|
ext_hash: HashFor<T>,
|
||||||
) -> Self {
|
) -> Self {
|
||||||
Self {
|
Self {
|
||||||
@@ -48,7 +48,7 @@ impl<'atblock, T: Config, C> TransactionProgress<'atblock, T, C> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'atblock, T, C> TransactionProgress<'atblock, T, C>
|
impl<T, C> TransactionProgress<T, C>
|
||||||
where
|
where
|
||||||
T: Config,
|
T: Config,
|
||||||
C: OnlineClientAtBlockT<T>,
|
C: OnlineClientAtBlockT<T>,
|
||||||
@@ -58,7 +58,7 @@ where
|
|||||||
/// avoid importing that trait if you don't otherwise need it.
|
/// avoid importing that trait if you don't otherwise need it.
|
||||||
pub async fn next(
|
pub async fn next(
|
||||||
&mut self,
|
&mut self,
|
||||||
) -> Option<Result<TransactionStatus<'atblock, T, C>, TransactionProgressError>> {
|
) -> Option<Result<TransactionStatus<T, C>, TransactionProgressError>> {
|
||||||
StreamExt::next(self).await
|
StreamExt::next(self).await
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -74,7 +74,7 @@ where
|
|||||||
/// out if they finally made it into a block or not.
|
/// out if they finally made it into a block or not.
|
||||||
pub async fn wait_for_finalized(
|
pub async fn wait_for_finalized(
|
||||||
mut self,
|
mut self,
|
||||||
) -> Result<TransactionInBlock<'atblock, T, C>, TransactionProgressError> {
|
) -> Result<TransactionInBlock<T, C>, TransactionProgressError> {
|
||||||
while let Some(status) = self.next().await {
|
while let Some(status) = self.next().await {
|
||||||
match status? {
|
match status? {
|
||||||
// Finalized! Return.
|
// Finalized! Return.
|
||||||
@@ -116,8 +116,8 @@ where
|
|||||||
}
|
}
|
||||||
|
|
||||||
// TransactionProgress is a stream of transaction events
|
// TransactionProgress is a stream of transaction events
|
||||||
impl<'atblock, T: Config, C: Clone> Stream for TransactionProgress<'atblock, T, C> {
|
impl<T: Config, C: Clone> Stream for TransactionProgress<T, C> {
|
||||||
type Item = Result<TransactionStatus<'atblock, T, C>, TransactionProgressError>;
|
type Item = Result<TransactionStatus<T, C>, TransactionProgressError>;
|
||||||
|
|
||||||
fn poll_next(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Option<Self::Item>> {
|
fn poll_next(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Option<Self::Item>> {
|
||||||
let sub = match self.sub.as_mut() {
|
let sub = match self.sub.as_mut() {
|
||||||
@@ -138,7 +138,7 @@ impl<'atblock, T: Config, C: Clone> Stream for TransactionProgress<'atblock, T,
|
|||||||
TransactionStatus::InBestBlock(TransactionInBlock::new(
|
TransactionStatus::InBestBlock(TransactionInBlock::new(
|
||||||
hash,
|
hash,
|
||||||
self.ext_hash,
|
self.ext_hash,
|
||||||
self.client,
|
self.client.clone(),
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
// These stream events mean that nothing further will be sent:
|
// These stream events mean that nothing further will be sent:
|
||||||
@@ -147,7 +147,7 @@ impl<'atblock, T: Config, C: Clone> Stream for TransactionProgress<'atblock, T,
|
|||||||
TransactionStatus::InFinalizedBlock(TransactionInBlock::new(
|
TransactionStatus::InFinalizedBlock(TransactionInBlock::new(
|
||||||
hash,
|
hash,
|
||||||
self.ext_hash,
|
self.ext_hash,
|
||||||
self.client,
|
self.client.clone(),
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
BackendTransactionStatus::Error { message } => {
|
BackendTransactionStatus::Error { message } => {
|
||||||
@@ -169,7 +169,7 @@ impl<'atblock, T: Config, C: Clone> Stream for TransactionProgress<'atblock, T,
|
|||||||
|
|
||||||
/// Possible transaction statuses returned from our [`TransactionProgress::next()`] call.
|
/// Possible transaction statuses returned from our [`TransactionProgress::next()`] call.
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub enum TransactionStatus<'atblock, T: Config, C> {
|
pub enum TransactionStatus<T: Config, C> {
|
||||||
/// Transaction is part of the future queue.
|
/// Transaction is part of the future queue.
|
||||||
Validated,
|
Validated,
|
||||||
/// The transaction has been broadcast to other nodes.
|
/// The transaction has been broadcast to other nodes.
|
||||||
@@ -177,9 +177,9 @@ pub enum TransactionStatus<'atblock, T: Config, C> {
|
|||||||
/// Transaction is no longer in a best block.
|
/// Transaction is no longer in a best block.
|
||||||
NoLongerInBestBlock,
|
NoLongerInBestBlock,
|
||||||
/// Transaction has been included in block with given hash.
|
/// Transaction has been included in block with given hash.
|
||||||
InBestBlock(TransactionInBlock<'atblock, T, C>),
|
InBestBlock(TransactionInBlock<T, C>),
|
||||||
/// Transaction has been finalized by a finality-gadget, e.g GRANDPA
|
/// Transaction has been finalized by a finality-gadget, e.g GRANDPA
|
||||||
InFinalizedBlock(TransactionInBlock<'atblock, T, C>),
|
InFinalizedBlock(TransactionInBlock<T, C>),
|
||||||
/// Something went wrong in the node.
|
/// Something went wrong in the node.
|
||||||
Error {
|
Error {
|
||||||
/// Human readable message; what went wrong.
|
/// Human readable message; what went wrong.
|
||||||
@@ -197,10 +197,10 @@ pub enum TransactionStatus<'atblock, T: Config, C> {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'atblock, T: Config, C> TransactionStatus<'atblock, T, C> {
|
impl<T: Config, C> TransactionStatus<T, C> {
|
||||||
/// A convenience method to return the finalized details. Returns
|
/// A convenience method to return the finalized details. Returns
|
||||||
/// [`None`] if the enum variant is not [`TransactionStatus::InFinalizedBlock`].
|
/// [`None`] if the enum variant is not [`TransactionStatus::InFinalizedBlock`].
|
||||||
pub fn as_finalized(&self) -> Option<&TransactionInBlock<'atblock, T, C>> {
|
pub fn as_finalized(&self) -> Option<&TransactionInBlock<T, C>> {
|
||||||
match self {
|
match self {
|
||||||
Self::InFinalizedBlock(val) => Some(val),
|
Self::InFinalizedBlock(val) => Some(val),
|
||||||
_ => None,
|
_ => None,
|
||||||
@@ -209,7 +209,7 @@ impl<'atblock, T: Config, C> TransactionStatus<'atblock, T, C> {
|
|||||||
|
|
||||||
/// A convenience method to return the best block details. Returns
|
/// A convenience method to return the best block details. Returns
|
||||||
/// [`None`] if the enum variant is not [`TransactionStatus::InBestBlock`].
|
/// [`None`] if the enum variant is not [`TransactionStatus::InBestBlock`].
|
||||||
pub fn as_in_block(&self) -> Option<&TransactionInBlock<'atblock, T, C>> {
|
pub fn as_in_block(&self) -> Option<&TransactionInBlock<T, C>> {
|
||||||
match self {
|
match self {
|
||||||
Self::InBestBlock(val) => Some(val),
|
Self::InBestBlock(val) => Some(val),
|
||||||
_ => None,
|
_ => None,
|
||||||
@@ -219,17 +219,17 @@ impl<'atblock, T: Config, C> TransactionStatus<'atblock, T, C> {
|
|||||||
|
|
||||||
/// This struct represents a transaction that has made it into a block.
|
/// This struct represents a transaction that has made it into a block.
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub struct TransactionInBlock<'atblock, T: Config, C> {
|
pub struct TransactionInBlock<T: Config, C> {
|
||||||
block_ref: BlockRef<HashFor<T>>,
|
block_ref: BlockRef<HashFor<T>>,
|
||||||
ext_hash: HashFor<T>,
|
ext_hash: HashFor<T>,
|
||||||
client: &'atblock C,
|
client: C,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'atblock, T: Config, C> TransactionInBlock<'atblock, T, C> {
|
impl<T: Config, C> TransactionInBlock<T, C> {
|
||||||
pub(crate) fn new(
|
pub(crate) fn new(
|
||||||
block_ref: BlockRef<HashFor<T>>,
|
block_ref: BlockRef<HashFor<T>>,
|
||||||
ext_hash: HashFor<T>,
|
ext_hash: HashFor<T>,
|
||||||
client: &'atblock C,
|
client: C,
|
||||||
) -> Self {
|
) -> Self {
|
||||||
Self {
|
Self {
|
||||||
block_ref,
|
block_ref,
|
||||||
@@ -249,7 +249,7 @@ impl<'atblock, T: Config, C> TransactionInBlock<'atblock, T, C> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'atblock, T: Config, C: OnlineClientAtBlockT<T>> TransactionInBlock<'atblock, T, C> {
|
impl<T: Config, C: OnlineClientAtBlockT<T>> TransactionInBlock<T, C> {
|
||||||
/// Fetch the events associated with this transaction. If the transaction
|
/// Fetch the events associated with this transaction. If the transaction
|
||||||
/// was successful (ie no `ExtrinsicFailed`) events were found, then we return
|
/// was successful (ie no `ExtrinsicFailed`) events were found, then we return
|
||||||
/// the events associated with it. If the transaction was not successful, or
|
/// the events associated with it. If the transaction was not successful, or
|
||||||
@@ -300,6 +300,7 @@ impl<'atblock, T: Config, C: OnlineClientAtBlockT<T>> TransactionInBlock<'atbloc
|
|||||||
let tx_block_ref = BlockNumberOrRef::BlockRef(self.block_ref.clone());
|
let tx_block_ref = BlockNumberOrRef::BlockRef(self.block_ref.clone());
|
||||||
let at_tx_block = self
|
let at_tx_block = self
|
||||||
.client
|
.client
|
||||||
|
.client()
|
||||||
.at_block(tx_block_ref)
|
.at_block(tx_block_ref)
|
||||||
.await
|
.await
|
||||||
.map_err(TransactionEventsError::CannotInstantiateClientAtBlock)?;
|
.map_err(TransactionEventsError::CannotInstantiateClientAtBlock)?;
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@@ -180,12 +180,12 @@ mod test {
|
|||||||
let local_account = AccountId32(substrate_account.clone().into());
|
let local_account = AccountId32(substrate_account.clone().into());
|
||||||
|
|
||||||
// Both should encode to ss58 the same way:
|
// Both should encode to ss58 the same way:
|
||||||
let substrate_ss58 = substrate_account.ss58();
|
let substrate_ss58 = substrate_account.to_ss58check();
|
||||||
assert_eq!(substrate_ss58, local_account.ss58());
|
assert_eq!(substrate_ss58, local_account.ss58());
|
||||||
|
|
||||||
// Both should decode from ss58 back to the same:
|
// Both should decode from ss58 back to the same:
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
sp_core::crypto::AccountId32::from_ss58(&substrate_ss58).unwrap(),
|
sp_core::crypto::AccountId32::from_ss58check(&substrate_ss58).unwrap(),
|
||||||
substrate_account
|
substrate_account
|
||||||
);
|
);
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
|
|||||||
Reference in New Issue
Block a user