From 29af9eee480c37fd4e3cd4a2464c9821822dbc82 Mon Sep 17 00:00:00 2001 From: Alex Bean Date: Mon, 26 Aug 2024 10:27:19 +0200 Subject: [PATCH] chore: bump `subxt` and `subxt-signer` versions (#1722) * chore: bump subxt and subxt-signer versions * chore: update changelog * test: update v15 metadata and remove v11 * fix: clippy errors * chore: fmt * bump zip version * docs: add removed section in CHANGELOG * docs: comment about compatibility in the README * docs: comment about compatibility in the README --------- Co-authored-by: Alejandro Martinez Andres <11448715+al3mart@users.noreply.github.com> --- CHANGELOG.md | 4 + Cargo.lock | 442 ++++++++++++++---- README.md | 3 + crates/build/Cargo.toml | 8 +- crates/build/src/docker.rs | 9 +- crates/build/src/lib.rs | 10 +- crates/cargo-contract/Cargo.toml | 2 +- crates/extrinsics/Cargo.toml | 4 +- crates/extrinsics/src/contract_info.rs | 68 --- crates/extrinsics/src/events.rs | 3 + crates/extrinsics/src/extrinsic_calls.rs | 20 +- crates/extrinsics/src/lib.rs | 2 +- .../src/test_runtime_api/metadata_v11.scale | Bin 29868 -> 0 bytes .../src/test_runtime_api/metadata_v15.scale | Bin 32393 -> 92692 bytes crates/transcode/src/lib.rs | 2 +- crates/transcode/src/transcoder.rs | 23 +- 16 files changed, 406 insertions(+), 194 deletions(-) delete mode 100644 crates/extrinsics/src/test_runtime_api/metadata_v11.scale diff --git a/CHANGELOG.md b/CHANGELOG.md index 5a93ef18c..4f4cdd6d6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - Updated the toolchain version used by `ink_linting` - [#1616](https://github.com/paritytech/cargo-contract/pull/1616) +- Bump the version of `subxt` and `subxt-signer` - [#1722](https://github.com/use-ink/cargo-contract/pull/1722) + +### Removed +- Remove support for `V11` metadata [#1722](https://github.com/use-ink/cargo-contract/pull/1722) ## [4.1.1] diff --git a/Cargo.lock b/Cargo.lock index a72a51481..fec2b141d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -762,7 +762,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dbe5b10e214954177fb1dc9fbd20a1a2608fe99e6c832033bdc7cea287a20d77" dependencies = [ "borsh-derive", - "cfg_aliases", + "cfg_aliases 0.1.1", ] [[package]] @@ -953,6 +953,12 @@ dependencies = [ "once_cell", ] +[[package]] +name = "cesu8" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" + [[package]] name = "cfg-if" version = "1.0.0" @@ -965,6 +971,12 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" +[[package]] +name = "cfg_aliases" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" + [[package]] name = "chacha20" version = "0.9.1" @@ -1074,6 +1086,16 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "combine" +version = "4.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" +dependencies = [ + "bytes", + "memchr", +] + [[package]] name = "comfy-table" version = "7.1.1" @@ -1328,9 +1350,9 @@ dependencies = [ [[package]] name = "crc32fast" -version = "1.4.0" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3855a8a784b474f333699ef2bbca9db2c4a1f6d9088a90a2d25b1eb53111eaa" +checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" dependencies = [ "cfg-if", ] @@ -1346,9 +1368,9 @@ dependencies = [ [[package]] name = "crossbeam-utils" -version = "0.8.19" +version = "0.8.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" +checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" [[package]] name = "crossterm" @@ -1617,6 +1639,17 @@ dependencies = [ "syn 2.0.61", ] +[[package]] +name = "derive-where" +version = "1.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62d671cc41a825ebabc75757b62d3d168c577f9149b2d49ece1dad1f72119d25" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.61", +] + [[package]] name = "derive_arbitrary" version = "1.3.2" @@ -1676,9 +1709,9 @@ dependencies = [ [[package]] name = "displaydoc" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "487585f4d0c6655fe74905e2504d8ad6908e4db67f744eb140876906c2f3175d" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", @@ -1833,9 +1866,9 @@ dependencies = [ [[package]] name = "either" -version = "1.11.0" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a47c1c47d2f5964e29c61246e81db715514cd532db6b5116a25ea3c03d6780a2" +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" [[package]] name = "elliptic-curve" @@ -1983,6 +2016,16 @@ version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "38793c55593b33412e3ae40c2c9781ffaa6f438f6f8c10f24e71846fbd7ae01e" +[[package]] +name = "finito" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2384245d85162258a14b43567a9ee3598f5ae746a1581fb5d3d2cb780f0dbf95" +dependencies = [ + "futures-timer", + "pin-project", +] + [[package]] name = "fixed-hash" version = "0.8.0" @@ -2866,9 +2909,9 @@ dependencies = [ [[package]] name = "instant" -version = "0.1.12" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" dependencies = [ "cfg-if", ] @@ -2938,6 +2981,26 @@ version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" +[[package]] +name = "jni" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6df18c2e3db7e453d3c6ac5b3e9d5182664d28788126d39b91f2d1e22b017ec" +dependencies = [ + "cesu8", + "combine", + "jni-sys", + "log", + "thiserror", + "walkdir", +] + +[[package]] +name = "jni-sys" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" + [[package]] name = "jobserver" version = "0.1.31" @@ -2968,10 +3031,21 @@ version = "0.22.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cfdb12a2381ea5b2e68c3469ec604a007b367778cdb14d09612c8069ebd616ad" dependencies = [ - "jsonrpsee-client-transport", - "jsonrpsee-core", + "jsonrpsee-client-transport 0.22.5", + "jsonrpsee-core 0.22.5", "jsonrpsee-http-client", - "jsonrpsee-types", + "jsonrpsee-types 0.22.5", +] + +[[package]] +name = "jsonrpsee" +version = "0.23.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62b089779ad7f80768693755a031cc14a7766aba707cbe886674e3f79e9b7e47" +dependencies = [ + "jsonrpsee-core 0.23.2", + "jsonrpsee-types 0.23.2", + "jsonrpsee-ws-client", ] [[package]] @@ -2982,11 +3056,11 @@ checksum = "4978087a58c3ab02efc5b07c5e5e2803024536106fd5506f558db172c889b3aa" dependencies = [ "futures-util", "http 0.2.12", - "jsonrpsee-core", + "jsonrpsee-core 0.22.5", "pin-project", "rustls-native-certs 0.7.0", "rustls-pki-types", - "soketto", + "soketto 0.7.1", "thiserror", "tokio", "tokio-rustls 0.25.0", @@ -2995,6 +3069,29 @@ dependencies = [ "url", ] +[[package]] +name = "jsonrpsee-client-transport" +version = "0.23.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08163edd8bcc466c33d79e10f695cdc98c00d1e6ddfb95cec41b6b0279dd5432" +dependencies = [ + "base64 0.22.1", + "futures-util", + "http 1.1.0", + "jsonrpsee-core 0.23.2", + "pin-project", + "rustls 0.23.7", + "rustls-pki-types", + "rustls-platform-verifier", + "soketto 0.8.0", + "thiserror", + "tokio", + "tokio-rustls 0.26.0", + "tokio-util", + "tracing", + "url", +] + [[package]] name = "jsonrpsee-core" version = "0.22.5" @@ -3007,7 +3104,29 @@ dependencies = [ "futures-timer", "futures-util", "hyper 0.14.28", - "jsonrpsee-types", + "jsonrpsee-types 0.22.5", + "pin-project", + "rustc-hash", + "serde", + "serde_json", + "thiserror", + "tokio", + "tokio-stream", + "tracing", +] + +[[package]] +name = "jsonrpsee-core" +version = "0.23.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79712302e737d23ca0daa178e752c9334846b08321d439fd89af9a384f8c830b" +dependencies = [ + "anyhow", + "async-trait", + "beef", + "futures-timer", + "futures-util", + "jsonrpsee-types 0.23.2", "pin-project", "rustc-hash", "serde", @@ -3027,8 +3146,8 @@ dependencies = [ "async-trait", "hyper 0.14.28", "hyper-rustls", - "jsonrpsee-core", - "jsonrpsee-types", + "jsonrpsee-core 0.22.5", + "jsonrpsee-types 0.22.5", "serde", "serde_json", "thiserror", @@ -3051,6 +3170,32 @@ dependencies = [ "thiserror", ] +[[package]] +name = "jsonrpsee-types" +version = "0.23.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9c465fbe385238e861fdc4d1c85e04ada6c1fd246161d26385c1b311724d2af" +dependencies = [ + "beef", + "http 1.1.0", + "serde", + "serde_json", + "thiserror", +] + +[[package]] +name = "jsonrpsee-ws-client" +version = "0.23.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c28759775f5cb2f1ea9667672d3fe2b0e701d1f4b7b67954e60afe7fd058b5e" +dependencies = [ + "http 1.1.0", + "jsonrpsee-client-transport 0.23.2", + "jsonrpsee-core 0.23.2", + "jsonrpsee-types 0.23.2", + "url", +] + [[package]] name = "jsonschema" version = "0.18.0" @@ -3271,9 +3416,9 @@ dependencies = [ [[package]] name = "memchr" -version = "2.7.2" +version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" [[package]] name = "memfd" @@ -3986,9 +4131,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.82" +version = "1.0.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ad3d49ab951a01fbaafe34f2ec74122942fe18a3f9814c3268f1bb72042131b" +checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" dependencies = [ "unicode-ident", ] @@ -4073,6 +4218,22 @@ dependencies = [ "getrandom", ] +[[package]] +name = "reconnecting-jsonrpsee-ws-client" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06fa4f17e09edfc3131636082faaec633c7baa269396b4004040bc6c52f49f65" +dependencies = [ + "cfg_aliases 0.2.1", + "finito", + "futures", + "jsonrpsee 0.23.2", + "serde_json", + "thiserror", + "tokio", + "tracing", +] + [[package]] name = "redox_syscall" version = "0.5.1" @@ -4347,6 +4508,21 @@ dependencies = [ "zeroize", ] +[[package]] +name = "rustls" +version = "0.23.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebbbdb961df0ad3f2652da8f3fdc4b36122f568f968f45ad3316f26c025c677b" +dependencies = [ + "log", + "once_cell", + "ring", + "rustls-pki-types", + "rustls-webpki 0.102.3", + "subtle", + "zeroize", +] + [[package]] name = "rustls-native-certs" version = "0.6.3" @@ -4397,6 +4573,33 @@ version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "976295e77ce332211c0d24d92c0e83e50f5c5f046d11082cea19f3df13a3562d" +[[package]] +name = "rustls-platform-verifier" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93bda3f493b9abe5b93b3e7e3ecde0df292f2bd28c0296b90586ee0055ff5123" +dependencies = [ + "core-foundation", + "core-foundation-sys", + "jni", + "log", + "once_cell", + "rustls 0.23.7", + "rustls-native-certs 0.7.0", + "rustls-platform-verifier-android", + "rustls-webpki 0.102.3", + "security-framework", + "security-framework-sys", + "webpki-roots", + "winapi", +] + +[[package]] +name = "rustls-platform-verifier-android" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f" + [[package]] name = "rustls-webpki" version = "0.101.7" @@ -4462,9 +4665,9 @@ dependencies = [ [[package]] name = "scale-bits" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "662d10dcd57b1c2a3c41c9cf68f71fb09747ada1ea932ad961aca7e2ca28315f" +checksum = "e57b1e7f6b65ed1f04e79a85a57d755ad56d76fdf1e9bddcc9ae14f71fcdcf54" dependencies = [ "parity-scale-codec", "scale-info", @@ -4488,15 +4691,15 @@ dependencies = [ [[package]] name = "scale-decode" -version = "0.11.1" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afc79ba56a1c742f5aeeed1f1801f3edf51f7e818f0a54582cac6f131364ea7b" +checksum = "e98f3262c250d90e700bb802eb704e1f841e03331c2eb815e46516c4edbf5b27" dependencies = [ "derive_more", "parity-scale-codec", "primitive-types", - "scale-bits 0.5.0", - "scale-decode-derive 0.11.1", + "scale-bits 0.6.0", + "scale-decode-derive 0.13.1", "scale-type-resolver", "smallvec", ] @@ -4516,9 +4719,9 @@ dependencies = [ [[package]] name = "scale-decode-derive" -version = "0.11.1" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5398fdb3c7bea3cb419bac4983aadacae93fe1a7b5f693f4ebd98c3821aad7a5" +checksum = "9bb22f574168103cdd3133b19281639ca65ad985e24612728f727339dcaf4021" dependencies = [ "darling 0.14.4", "proc-macro2", @@ -4541,15 +4744,15 @@ dependencies = [ [[package]] name = "scale-encode" -version = "0.6.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "628800925a33794fb5387781b883b5e14d130fece9af5a63613867b8de07c5c7" +checksum = "4ba0b9c48dc0eb20c60b083c29447c0c4617cb7c4a4c9fef72aa5c5bc539e15e" dependencies = [ "derive_more", "parity-scale-codec", "primitive-types", - "scale-bits 0.5.0", - "scale-encode-derive 0.6.0", + "scale-bits 0.6.0", + "scale-encode-derive 0.7.1", "scale-type-resolver", "smallvec", ] @@ -4569,9 +4772,9 @@ dependencies = [ [[package]] name = "scale-encode-derive" -version = "0.6.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a304e1af7cdfbe7a24e08b012721456cc8cecdedadc14b3d10513eada63233c" +checksum = "82ab7e60e2d9c8d47105f44527b26f04418e5e624ffc034f6b4a86c0ba19c5bf" dependencies = [ "darling 0.14.4", "proc-macro-crate 1.3.1", @@ -4609,9 +4812,9 @@ dependencies = [ [[package]] name = "scale-type-resolver" -version = "0.1.1" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10b800069bfd43374e0f96f653e0d46882a2cb16d6d961ac43bea80f26c76843" +checksum = "f0cded6518aa0bd6c1be2b88ac81bf7044992f0f154bfbabd5ad34f43512abcb" dependencies = [ "scale-info", "smallvec", @@ -4619,9 +4822,9 @@ dependencies = [ [[package]] name = "scale-typegen" -version = "0.2.1" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d470fa75e71b12b3244a4113adc4bc49891f3daba2054703cacd06256066397e" +checksum = "498d1aecf2ea61325d4511787c115791639c0fd21ef4f8e11e49dd09eff2bbac" dependencies = [ "proc-macro2", "quote", @@ -4632,9 +4835,9 @@ dependencies = [ [[package]] name = "scale-value" -version = "0.14.1" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c07ccfee963104335c971aaf8b7b0e749be8569116322df23f1f75c4ca9e4a28" +checksum = "5ab68da501822d2769c4c5823535f6104a6d4cd15f0d3eba3e647e725294ae22" dependencies = [ "base58", "blake2", @@ -4642,9 +4845,9 @@ dependencies = [ "either", "frame-metadata 15.1.0", "parity-scale-codec", - "scale-bits 0.5.0", - "scale-decode 0.11.1", - "scale-encode 0.6.0", + "scale-bits 0.6.0", + "scale-decode 0.13.1", + "scale-encode 0.7.1", "scale-info", "scale-type-resolver", "serde", @@ -4794,6 +4997,7 @@ dependencies = [ "core-foundation", "core-foundation-sys", "libc", + "num-bigint", "security-framework-sys", ] @@ -4818,9 +5022,9 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.202" +version = "1.0.204" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "226b61a0d411b2ba5ff6d7f73a476ac4f8bb900373459cd00fab8512828ba395" +checksum = "bc76f558e0cbb2a839d37354c575f1dc3fdc6546b5be373ba43d95f231bf7c12" dependencies = [ "serde_derive", ] @@ -4836,9 +5040,9 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.202" +version = "1.0.204" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6048858004bcff69094cd972ed40a32500f153bd3be9f716b2eed2e8217c4838" +checksum = "e0cd7e117be63d3c3678776753929474f3b04a43a080c744d6b0ae2a8c28e222" dependencies = [ "proc-macro2", "quote", @@ -4939,6 +5143,17 @@ dependencies = [ "opaque-debug", ] +[[package]] +name = "sha1" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest 0.10.7", +] + [[package]] name = "sha2" version = "0.9.9" @@ -5130,7 +5345,7 @@ dependencies = [ "siphasher", "slab", "smallvec", - "soketto", + "soketto 0.7.1", "twox-hash", "wasmi", "x25519-dalek", @@ -5198,6 +5413,21 @@ dependencies = [ "sha-1", ] +[[package]] +name = "soketto" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37468c595637c10857701c990f93a40ce0e357cedb0953d1c26c8d8027f9bb53" +dependencies = [ + "base64 0.22.1", + "bytes", + "futures", + "httparse", + "log", + "rand", + "sha1", +] + [[package]] name = "sp-application-crypto" version = "33.0.0" @@ -5667,33 +5897,31 @@ checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" [[package]] name = "subxt" -version = "0.35.3" +version = "0.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd68bef23f4de5e513ab4c29af69053e232b098f9c87ab552d7ea153b4a1fbc5" +checksum = "a160cba1edbf3ec4fbbeaea3f1a185f70448116a6bccc8276bb39adb3b3053bd" dependencies = [ "async-trait", - "base58", - "blake2", - "derivative", + "derive-where", "either", "frame-metadata 16.0.0", "futures", "hex", "impl-serde", "instant", - "jsonrpsee", + "jsonrpsee 0.22.5", "parity-scale-codec", "primitive-types", - "scale-bits 0.5.0", - "scale-decode 0.11.1", - "scale-encode 0.6.0", + "reconnecting-jsonrpsee-ws-client", + "scale-bits 0.6.0", + "scale-decode 0.13.1", + "scale-encode 0.7.1", "scale-info", "scale-value", "serde", "serde_json", - "sp-core", "sp-crypto-hashing", - "sp-runtime", + "subxt-core", "subxt-lightclient", "subxt-macro", "subxt-metadata", @@ -5705,14 +5933,14 @@ dependencies = [ [[package]] name = "subxt-codegen" -version = "0.35.3" +version = "0.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d9e2b256b71d31a2629e44eb9cbfd944eb7d577c9e0c8e9802cc3c3943af2d9" +checksum = "d703dca0905cc5272d7cc27a4ac5f37dcaae7671acc7fef0200057cc8c317786" dependencies = [ "frame-metadata 16.0.0", - "heck 0.4.1", + "heck 0.5.0", "hex", - "jsonrpsee", + "jsonrpsee 0.22.5", "parity-scale-codec", "proc-macro2", "quote", @@ -5724,11 +5952,40 @@ dependencies = [ "tokio", ] +[[package]] +name = "subxt-core" +version = "0.37.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59f41eb2e2eea6ed45649508cc735f92c27f1fcfb15229e75f8270ea73177345" +dependencies = [ + "base58", + "blake2", + "derive-where", + "frame-metadata 16.0.0", + "hashbrown 0.14.5", + "hex", + "impl-serde", + "parity-scale-codec", + "primitive-types", + "scale-bits 0.6.0", + "scale-decode 0.13.1", + "scale-encode 0.7.1", + "scale-info", + "scale-value", + "serde", + "serde_json", + "sp-core", + "sp-crypto-hashing", + "sp-runtime", + "subxt-metadata", + "tracing", +] + [[package]] name = "subxt-lightclient" -version = "0.35.3" +version = "0.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d51f1ac12e3be7aafea4d037730a57da4f22f2e9c73955666081ffa2697c6f1" +checksum = "9d9406fbdb9548c110803cb8afa750f8b911d51eefdf95474b11319591d225d9" dependencies = [ "futures", "futures-util", @@ -5743,9 +6000,9 @@ dependencies = [ [[package]] name = "subxt-macro" -version = "0.35.3" +version = "0.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98dc84d7e6a0abd7ed407cce0bf60d7d58004f699460cffb979640717d1ab506" +checksum = "1c195f803d70687e409aba9be6c87115b5da8952cd83c4d13f2e043239818fcd" dependencies = [ "darling 0.20.8", "parity-scale-codec", @@ -5758,11 +6015,10 @@ dependencies = [ [[package]] name = "subxt-metadata" -version = "0.35.3" +version = "0.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc10c54028d079a9f1be65188707cd29e5ffd8d0031a2b1346a0941d57b7ab7e" +checksum = "738be5890fdeff899bbffff4d9c0f244fe2a952fb861301b937e3aa40ebb55da" dependencies = [ - "derive_more", "frame-metadata 16.0.0", "hashbrown 0.14.5", "parity-scale-codec", @@ -5772,13 +6028,12 @@ dependencies = [ [[package]] name = "subxt-signer" -version = "0.35.3" +version = "0.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ccb59a38fe357fab55247756174435e8626b93929864e8a498635a15e779df8" +checksum = "f49888ae6ae90fe01b471193528eea5bd4ed52d8eecd2d13f4a2333b87388850" dependencies = [ "bip39", "cfg-if", - "derive_more", "hex", "hmac 0.12.1", "parity-scale-codec", @@ -5789,7 +6044,7 @@ dependencies = [ "secrecy", "sha2 0.10.8", "sp-crypto-hashing", - "subxt", + "subxt-core", "zeroize", ] @@ -5895,18 +6150,18 @@ checksum = "3369f5ac52d5eb6ab48c6b4ffdc8efbcad6b89c765749064ba298f2c68a16a76" [[package]] name = "thiserror" -version = "1.0.60" +version = "1.0.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "579e9083ca58dd9dcf91a9923bb9054071b9ebbd800b342194c9feb0ee89fc18" +checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.60" +version = "1.0.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2470041c06ec3ac1ab38d0356a6119054dedaea53e12fbefc0de730a1c08524" +checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" dependencies = [ "proc-macro2", "quote", @@ -6018,6 +6273,17 @@ dependencies = [ "tokio", ] +[[package]] +name = "tokio-rustls" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" +dependencies = [ + "rustls 0.23.7", + "rustls-pki-types", + "tokio", +] + [[package]] name = "tokio-stream" version = "0.1.15" @@ -6809,6 +7075,15 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "webpki-roots" +version = "0.26.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd7c23921eeb1713a4e851530e9b9756e4fb0e89978582942612524cf09f01cd" +dependencies = [ + "rustls-pki-types", +] + [[package]] name = "which" version = "6.0.1" @@ -7181,14 +7456,15 @@ dependencies = [ [[package]] name = "zip" -version = "1.2.3" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c700ea425e148de30c29c580c1f9508b93ca57ad31c9f4e96b83c194c37a7a8f" +checksum = "dc5e4288ea4057ae23afc69a4472434a87a2495cafce6632fd1c4ec9f5cf3494" dependencies = [ "arbitrary", "crc32fast", "crossbeam-utils", "displaydoc", "indexmap 2.2.6", + "memchr", "thiserror", ] diff --git a/README.md b/README.md index 498dd9cae..ecd28ab8c 100644 --- a/README.md +++ b/README.md @@ -176,6 +176,9 @@ Fetch and display the storage of a contract on chain. Invoke an RPC call to the node. See [rpc](docs/rpc.md). +## Compatibility +Metadata Version: This project only supports metadata versions starting from `V14` and onwards. + ## Publishing In order to publish a new version of `cargo-contract`: diff --git a/crates/build/Cargo.toml b/crates/build/Cargo.toml index 414bab48f..b496e3de0 100644 --- a/crates/build/Cargo.toml +++ b/crates/build/Cargo.toml @@ -25,7 +25,9 @@ heck = "0.5.0" hex = "0.4.3" impl-serde = "0.4.0" rustc_version = "0.4.0" -scale = { package = "parity-scale-codec", version = "3.0.0", features = ["derive"] } +scale = { package = "parity-scale-codec", version = "3.0.0", features = [ + "derive", +] } toml = "0.8.13" tracing = "0.1.40" wasm-encoder = { version = "0.207.0", features = ["wasmparser"] } @@ -38,7 +40,7 @@ term_size = "0.3.2" url = { version = "2.5.0", features = ["serde"] } wasm-opt = { version = "=0.116.1", default-features = false } which = "6.0.1" -zip = { version = "1.2.3", default-features = false } +zip = { version = "2.2.0", default-features = false } strum = { version = "0.26", features = ["derive"] } tokio = { version = "1", features = ["macros", "rt-multi-thread"] } tokio-stream = "0.1" @@ -53,7 +55,7 @@ uzers = "0.12" [build-dependencies] anyhow = "1.0.83" walkdir = "2.5.0" -zip = { version = "1.2.3", default-features = false } +zip = { version = "2.2.0", default-features = false } [dev-dependencies] pretty_assertions = "1.4.0" diff --git a/crates/build/src/docker.rs b/crates/build/src/docker.rs index 95219d669..84bc9bf31 100644 --- a/crates/build/src/docker.rs +++ b/crates/build/src/docker.rs @@ -26,12 +26,11 @@ //! The process of the build is following: //! 1. Pull the image from the registry or use the local copy if available //! 2. Parse other arguments that were passed to the host execution context -//! 3. Calculate the digest of the command and use it -//! to uniquely identify the container +//! 3. Calculate the digest of the command and use it to uniquely identify the container //! 4. If the container exists, we just start the build, if not, we create it -//! 5. After the build, the docker container produces metadata with -//! paths relative to its internal storage structure, we parse the file -//! and overwrite those paths relative to the host machine. +//! 5. After the build, the docker container produces metadata with paths relative to its +//! internal storage structure, we parse the file and overwrite those paths relative to +//! the host machine. use std::{ cmp::Ordering, diff --git a/crates/build/src/lib.rs b/crates/build/src/lib.rs index 6048f0248..24570ee19 100644 --- a/crates/build/src/lib.rs +++ b/crates/build/src/lib.rs @@ -727,13 +727,9 @@ pub fn execute(args: ExecuteArgs) -> Result { Some(opt_passes) => *opt_passes, None => { let mut manifest = Manifest::new(manifest_path.clone())?; - - match manifest.profile_optimization_passes() { - // if no setting is found, neither on the cli nor in the profile, - // then we use the default - None => OptimizationPasses::default(), - Some(opt_passes) => opt_passes, - } + // if no setting is found, neither on the cli nor in the profile, + // then we use the default + manifest.profile_optimization_passes().unwrap_or_default() } }; diff --git a/crates/cargo-contract/Cargo.toml b/crates/cargo-contract/Cargo.toml index ba52b0f21..5b3ef94ed 100644 --- a/crates/cargo-contract/Cargo.toml +++ b/crates/cargo-contract/Cargo.toml @@ -43,7 +43,7 @@ comfy-table = "7.1.1" # dependencies for extrinsics (deploying and calling a contract) tokio = { version = "1", features = ["macros", "rt-multi-thread"] } -subxt = { version = "0.35.3", features = ["substrate-compat"] } +subxt = { version = "0.37.0", features = ["substrate-compat"] } sp-core = "31.0.0" sp-weights = "30.0.0" hex = "0.4.3" diff --git a/crates/extrinsics/Cargo.toml b/crates/extrinsics/Cargo.toml index f7f0154fd..da5910acc 100644 --- a/crates/extrinsics/Cargo.toml +++ b/crates/extrinsics/Cargo.toml @@ -36,7 +36,7 @@ sp-runtime = "34.0.0" sp-weights = "30.0.0" pallet-contracts-uapi = { package = "pallet-contracts-uapi-next", version = "=6.0.3", features = ["scale"] } scale-info = "2.11.3" -subxt = "0.35.3" +subxt = "0.37.0" hex = "0.4.3" derivative = "2.2.0" ink_metadata = "5.0.0" @@ -49,7 +49,7 @@ regex = "1.10.4" predicates = "3.1.0" tempfile = "3.10.1" tracing-subscriber = { version = "0.3.18", features = ["env-filter"] } -subxt-signer = { version = "0.35.3", features = ["subxt", "sr25519"] } +subxt-signer = { version = "0.37.0", features = ["subxt", "sr25519"] } [features] integration-tests = [] diff --git a/crates/extrinsics/src/contract_info.rs b/crates/extrinsics/src/contract_info.rs index b8aa2f9ea..f5717f576 100644 --- a/crates/extrinsics/src/contract_info.rs +++ b/crates/extrinsics/src/contract_info.rs @@ -406,74 +406,6 @@ mod tests { .ok_or(anyhow!("Type not found")) } - #[test] - fn contract_info_v11_decode_works() { - // This version of metadata includes the deposit_account field in ContractInfo - #[subxt::subxt(runtime_metadata_path = "src/test_runtime_api/metadata_v11.scale")] - mod api_v11 {} - - use api_v11::runtime_types::{ - bounded_collections::bounded_vec::BoundedVec, - pallet_contracts::storage::{ - ContractInfo as ContractInfoV11, - DepositAccount, - }, - }; - - let metadata_bytes = std::fs::read("src/test_runtime_api/metadata_v11.scale") - .expect("the metadata must be present"); - let metadata = - Metadata::decode(&mut &*metadata_bytes).expect("the metadata must decode"); - let contract_info_type_id = get_metadata_type_index( - "ContractInfo", - "pallet_contracts::storage", - &metadata, - ) - .expect("the contract info type must be present in the metadata"); - - let contract_info_v11 = ContractInfoV11 { - trie_id: BoundedVec(vec![]), - deposit_account: DepositAccount(AccountId32([7u8; 32])), - code_hash: Default::default(), - storage_bytes: 1, - storage_items: 1, - storage_byte_deposit: 1, - storage_item_deposit: 1, - storage_base_deposit: 1, - }; - - let contract_info_thunk = DecodedValueThunk::decode_with_metadata( - &mut &*contract_info_v11.encode(), - contract_info_type_id as u32, - &metadata.into(), - ) - .expect("the contract info must be decoded"); - - let contract = AccountId32([0u8; 32]); - let contract_info_raw = - ContractInfoRaw::::new( - contract, - contract_info_thunk, - ) - .expect("the conatract info raw must be created"); - let account_data = AccountData { - free: 1, - reserved: 10, - }; - - let contract_info = contract_info_raw.into_contract_info(account_data.clone()); - assert_eq!( - contract_info, - ContractInfo { - trie_id: contract_info_v11.trie_id.0.into(), - code_hash: contract_info_v11.code_hash, - storage_items: contract_info_v11.storage_items, - storage_items_deposit: contract_info_v11.storage_item_deposit, - storage_total_deposit: account_data.free, - } - ); - } - #[test] fn contract_info_v15_decode_works() { // This version of metadata does not include the deposit_account field in diff --git a/crates/extrinsics/src/events.rs b/crates/extrinsics/src/events.rs index 447fe5f75..48f0fb24f 100644 --- a/crates/extrinsics/src/events.rs +++ b/crates/extrinsics/src/events.rs @@ -184,12 +184,14 @@ pub struct Event { /// Events produced from invoking a contract extrinsic. #[derive(serde::Serialize)] +#[allow(dead_code)] pub struct Events(Vec); /// Displays events produced from invoking a contract extrinsic. #[derive(serde::Serialize)] pub struct DisplayEvents(Vec); +#[allow(clippy::needless_borrows_for_generic_args)] impl DisplayEvents { /// Parses events and returns an object which can be serialised pub fn from_events( @@ -331,6 +333,7 @@ impl DisplayEvents { /// Construct the contract event data field, attempting to decode the event using the /// [`ContractMessageTranscoder`] if available. +#[allow(clippy::needless_borrows_for_generic_args)] fn contract_event_data_field( transcoder: Option<&ContractMessageTranscoder>, field_metadata: &scale_info::Field, diff --git a/crates/extrinsics/src/extrinsic_calls.rs b/crates/extrinsics/src/extrinsic_calls.rs index 97c63433a..d30a8beef 100644 --- a/crates/extrinsics/src/extrinsic_calls.rs +++ b/crates/extrinsics/src/extrinsic_calls.rs @@ -69,8 +69,8 @@ impl RemoveCode { Self { code_hash } } - pub fn build(self) -> subxt::tx::Payload { - subxt::tx::Payload::new("Contracts", "remove_code", self) + pub fn build(self) -> subxt::tx::DefaultPayload { + subxt::tx::DefaultPayload::new("Contracts", "remove_code", self) } } @@ -96,8 +96,8 @@ impl UploadCode { } } - pub fn build(self) -> subxt::tx::Payload { - subxt::tx::Payload::new("Contracts", "upload_code", self) + pub fn build(self) -> subxt::tx::DefaultPayload { + subxt::tx::DefaultPayload::new("Contracts", "upload_code", self) } } @@ -133,8 +133,8 @@ impl InstantiateWithCode { } } - pub fn build(self) -> subxt::tx::Payload { - subxt::tx::Payload::new("Contracts", "instantiate_with_code", self) + pub fn build(self) -> subxt::tx::DefaultPayload { + subxt::tx::DefaultPayload::new("Contracts", "instantiate_with_code", self) } } @@ -176,8 +176,8 @@ where } } - pub fn build(self) -> subxt::tx::Payload { - subxt::tx::Payload::new("Contracts", "instantiate", self) + pub fn build(self) -> subxt::tx::DefaultPayload { + subxt::tx::DefaultPayload::new("Contracts", "instantiate", self) } } @@ -210,7 +210,7 @@ impl Call { } } - pub fn build(self) -> subxt::tx::Payload { - subxt::tx::Payload::new("Contracts", "call", self) + pub fn build(self) -> subxt::tx::DefaultPayload { + subxt::tx::DefaultPayload::new("Contracts", "call", self) } } diff --git a/crates/extrinsics/src/lib.rs b/crates/extrinsics/src/lib.rs index cd0610953..1bcf41f6b 100644 --- a/crates/extrinsics/src/lib.rs +++ b/crates/extrinsics/src/lib.rs @@ -148,7 +148,7 @@ async fn submit_extrinsic( ) -> core::result::Result, subxt::Error> where C: Config, - Call: tx::TxPayload, + Call: tx::Payload, Signer: tx::Signer, >::Params: From< as ExtrinsicParams>::Params>, diff --git a/crates/extrinsics/src/test_runtime_api/metadata_v11.scale b/crates/extrinsics/src/test_runtime_api/metadata_v11.scale deleted file mode 100644 index d61d093bafa0b24b78b62fd55c6d59b54c6fc17e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29868 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 RQMN=RbU!UVIQ%uO{x5i`?R@|M diff --git a/crates/extrinsics/src/test_runtime_api/metadata_v15.scale b/crates/extrinsics/src/test_runtime_api/metadata_v15.scale index e8d10021116471a2ad497c13a682a570a6db7fbc..1be9128deaab5109f85b2887ce01facd5f9bb667 100644 GIT binary patch literal 92692 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 delta 11865 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 Result<()> { - transcode_roundtrip::("-128", Value::Int(i8::min_value().into()))?; - transcode_roundtrip::("127", Value::Int(i8::max_value().into()))?; + transcode_roundtrip::("-128", Value::Int(i8::MIN.into()))?; + transcode_roundtrip::("127", Value::Int(i8::MAX.into()))?; - transcode_roundtrip::("-32768", Value::Int(i16::min_value().into()))?; - transcode_roundtrip::("32767", Value::Int(i16::max_value().into()))?; + transcode_roundtrip::("-32768", Value::Int(i16::MIN.into()))?; + transcode_roundtrip::("32767", Value::Int(i16::MAX.into()))?; - transcode_roundtrip::("-2147483648", Value::Int(i32::min_value().into()))?; - transcode_roundtrip::("2147483647", Value::Int(i32::max_value().into()))?; + transcode_roundtrip::("-2147483648", Value::Int(i32::MIN.into()))?; + transcode_roundtrip::("2147483647", Value::Int(i32::MAX.into()))?; - transcode_roundtrip::( - "-9223372036854775808", - Value::Int(i64::min_value().into()), - )?; + transcode_roundtrip::("-9223372036854775808", Value::Int(i64::MIN.into()))?; transcode_roundtrip::( "\"9_223_372_036_854_775_807\"", - Value::Int(i64::max_value().into()), + Value::Int(i64::MAX.into()), )?; transcode_roundtrip::( "-170141183460469231731687303715884105728", - Value::Int(i128::min_value()), + Value::Int(i128::MIN), )?; transcode_roundtrip::( "\"170141183460469231731687303715884105727\"", - Value::Int(i128::max_value()), + Value::Int(i128::MAX), ) }