From f903c0349ba97b0219e14efcd81f67f4c48733eb Mon Sep 17 00:00:00 2001 From: Hernando Castano Date: Wed, 24 Aug 2022 15:33:40 -0400 Subject: [PATCH] Add support for ink!'s `version` metadata field (#641) * Format `transcode`'s `lib.rs` * Use `InkProject` directly instead of `MetadataVersioned` * Patch ink dependencies to point to development branch * Use same nightly compiler as CI to format code * Use updated ink! dependences in template * Bump lockfile * Bump expected metadata version to V4 * Bump to V4 in a couple more places * Clear cache before running tests * Add missing colon * Looks like the directory doesn't want to be cleaned * Bump to ink! 4.0 pre-release * Bump ink! version * Remove metadata version check There's only one metadata version that can be constructed, so the check doesn't totally make sense. In the future if we support both V4 and V5 metadata formats it would make sense to add such a check back. * Appease Clippy * Move away from ink!'s `hc-versioned-metadata` branch * Remove metadata version check (again) There's only one metadata version that can be constructed, so the check doesn't totally make sense. In the future if we support both V4 and V5 metadata formats it would make sense to add such a check back. * RustFmt * Remove another irrefutable `if let` * Bump ink! versions to `4.0.0-alpha.1` * Deny `unused_crate_dependencies` again --- Cargo.lock | 50 +++++++++++------------ templates/new/_Cargo.toml | 10 ++--- templates/tools/generate-metadata/main.rs | 12 +++--- transcode/Cargo.toml | 12 +++--- transcode/src/lib.rs | 20 +++------ 5 files changed, 49 insertions(+), 55 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index de0b877fb..07635264c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1418,18 +1418,18 @@ dependencies = [ [[package]] name = "ink_allocator" -version = "3.3.1" +version = "4.0.0-alpha.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a291f411e310b7a3bb01ce21102b8c0aea5b7b523e4bad0b40a8e55a76c58906" +checksum = "51716586362dbfbaf67cdfd1d2e683b7925daf69a437a6fe16ff20583129d7c4" dependencies = [ "cfg-if", ] [[package]] name = "ink_engine" -version = "3.3.1" +version = "4.0.0-alpha.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "075eab468da2937288ec484be920cb18614147003d7f1afbdfcfb190ed771c46" +checksum = "eece522b2a9d73ae66b28b1ce34a27c2169b8fa35bc0f8f97995f6b9a2387dca" dependencies = [ "blake2", "derive_more", @@ -1442,9 +1442,9 @@ dependencies = [ [[package]] name = "ink_env" -version = "3.3.1" +version = "4.0.0-alpha.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "271689b643d7ccf2bcd09d7ef07eda79cd3366ee042d5bbfcebf534b08da79d7" +checksum = "3a0fb4e9e5bdc53e6a49f1716d8d89d25b2f4e3bad6f280773fb976ca77a60ff" dependencies = [ "arrayref", "blake2", @@ -1469,9 +1469,9 @@ dependencies = [ [[package]] name = "ink_lang" -version = "3.3.1" +version = "4.0.0-alpha.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62cf662fe6a130ea1ada3520142405e3ed521b79c35b7274cc95dd37bc833571" +checksum = "30424a655c93946c8e07473acdd5bc584f772a1a86d3d43bf528ceec03f1aa4c" dependencies = [ "derive_more", "ink_env", @@ -1485,9 +1485,9 @@ dependencies = [ [[package]] name = "ink_lang_codegen" -version = "3.3.1" +version = "4.0.0-alpha.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94dc22732ced2557f0411de5fa31d6fddc3878968041b699ae16ed1c390d2660" +checksum = "da7e0d02c594736048253a0784fd78316a93e186881317aa65b53a7a23c7f750" dependencies = [ "blake2", "derive_more", @@ -1504,9 +1504,9 @@ dependencies = [ [[package]] name = "ink_lang_ir" -version = "3.3.1" +version = "4.0.0-alpha.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a089bcac8d7e6a487b7a18ea8a1d20eb540ed26657706ac221cc0e8239047e45" +checksum = "bab84043bbde9fd0ab685e5f32be92c5223b943a1a30078f1ceae19386df2d32" dependencies = [ "blake2", "either", @@ -1518,9 +1518,9 @@ dependencies = [ [[package]] name = "ink_lang_macro" -version = "3.3.1" +version = "4.0.0-alpha.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1330da0b8007b86de94f95fbc74769c0461d3b078b291af5497771598db1c5b4" +checksum = "f63f2bc42f196e8397ec4c87763a4998b0c3ef605a4067e5b7a743812bab9864" dependencies = [ "ink_lang_codegen", "ink_lang_ir", @@ -1532,9 +1532,9 @@ dependencies = [ [[package]] name = "ink_metadata" -version = "3.3.1" +version = "4.0.0-alpha.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d442f4f5dcbf120aa84cae9e399065ad99d143d5a920b06d3da286e91c03ec70" +checksum = "a0cf9e970d05710b5488ad92c19b9ab94fc6ece973db4f4c8e1e0d2ff59218cf" dependencies = [ "derive_more", "impl-serde", @@ -1546,18 +1546,18 @@ dependencies = [ [[package]] name = "ink_prelude" -version = "3.3.1" +version = "4.0.0-alpha.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e38d71af62cfec3425727d28665a947d636c3be6ae71ac3a79868ef8a08633f3" +checksum = "799f1435d7323a130e13ba599ab801b826e4ea90508c04306cf16615a4f88bba" dependencies = [ "cfg-if", ] [[package]] name = "ink_primitives" -version = "3.3.1" +version = "4.0.0-alpha.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea7afd5330a9d3be1533222a48b8ab44b3a3356a5e6bb090bff0790aa562b418" +checksum = "a601c52715f3f30eaec72958dddebcf60258e3a4c163719c00258153debe515a" dependencies = [ "cfg-if", "ink_prelude", @@ -1567,9 +1567,9 @@ dependencies = [ [[package]] name = "ink_storage" -version = "3.3.1" +version = "4.0.0-alpha.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be827b98c102c413b2309075f0835a9bb8c6325fc6aa09e66963424db7a8bcb5" +checksum = "9c5208bd825a580c5e20e3c6befa001aa2b5e179cd548163baa1e6bac2ab4cb4" dependencies = [ "array-init", "cfg-if", @@ -1585,9 +1585,9 @@ dependencies = [ [[package]] name = "ink_storage_derive" -version = "3.3.1" +version = "4.0.0-alpha.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ced452d5d0b2268b1257ffd2ec73cf9c3b4fba5f3632f185a03aafec8888439" +checksum = "b8eb0065ceb70ed1a2afe8e5dc42ad97df9cdd09072aef944ff580ba7768c959" dependencies = [ "proc-macro2", "quote", @@ -3721,7 +3721,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675" dependencies = [ "cfg-if", - "rand 0.8.5", + "rand 0.7.3", "static_assertions", ] diff --git a/templates/new/_Cargo.toml b/templates/new/_Cargo.toml index 1815c19ee..e63990243 100644 --- a/templates/new/_Cargo.toml +++ b/templates/new/_Cargo.toml @@ -5,11 +5,11 @@ authors = ["[your_name] <[your_email]>"] edition = "2021" [dependencies] -ink_primitives = { version = "3.3", default-features = false } -ink_metadata = { version = "3.3", default-features = false, features = ["derive"], optional = true } -ink_env = { version = "3.3", default-features = false } -ink_storage = { version = "3.3", default-features = false } -ink_lang = { version = "3.3", default-features = false } +ink_primitives = { version = "4.0.0-alpha.1", default-features = false } +ink_metadata = { version = "4.0.0-alpha.1", default-features = false, features = ["derive"], optional = true } +ink_env = { version = "4.0.0-alpha.1", default-features = false } +ink_storage = { version = "4.0.0-alpha.1", default-features = false } +ink_lang = { version = "4.0.0-alpha.1", default-features = false } scale = { package = "parity-scale-codec", version = "3", default-features = false, features = ["derive"] } scale-info = { version = "2", default-features = false, features = ["derive"], optional = true } diff --git a/templates/tools/generate-metadata/main.rs b/templates/tools/generate-metadata/main.rs index 2efa726dd..c703267b4 100644 --- a/templates/tools/generate-metadata/main.rs +++ b/templates/tools/generate-metadata/main.rs @@ -1,12 +1,14 @@ extern crate contract; extern "Rust" { - fn __ink_generate_metadata() -> ink_metadata::MetadataVersioned; + // Note: The ink! metdata codegen generates an implementation for this function, + // which is what we end up linking to here. + fn __ink_generate_metadata() -> ink_metadata::InkProject; } fn main() -> Result<(), std::io::Error> { - let metadata = unsafe { __ink_generate_metadata() }; - let contents = serde_json::to_string_pretty(&metadata)?; - print!("{}", contents); - Ok(()) + let metadata = unsafe { __ink_generate_metadata() }; + let contents = serde_json::to_string_pretty(&metadata)?; + print!("{}", contents); + Ok(()) } diff --git a/transcode/Cargo.toml b/transcode/Cargo.toml index 0549b1a9d..252ac322d 100644 --- a/transcode/Cargo.toml +++ b/transcode/Cargo.toml @@ -23,8 +23,8 @@ env_logger = "0.9.0" escape8259 = "0.5.2" hex = "0.4.3" indexmap = "1.9.1" -ink_env = "3.3" -ink_metadata = { version = "3.3", features = ["derive"] } +ink_env = "4.0.0-alpha.1" +ink_metadata = { version = "4.0.0-alpha.1", features = ["derive"] } itertools = "0.10.3" tracing = "0.1.36" nom = "7.1.1" @@ -38,12 +38,12 @@ sp-runtime = "6.0.0" [dev-dependencies] assert_matches = "1.5.0" -ink_lang = "3.3" -ink_primitives = "3.3" -ink_storage = "3.3" +ink_lang = "4.0.0-alpha.1" +ink_primitives = "4.0.0-alpha.1" +ink_storage = "4.0.0-alpha.1" [features] # This `std` feature is required for testing using an inline contract's metadata, because `ink!` annotates the metadata # generation code with `#[cfg(feature = "std")]`. default = ["std"] -std = [] \ No newline at end of file +std = [] diff --git a/transcode/src/lib.rs b/transcode/src/lib.rs index 19c671498..f475cc0b9 100644 --- a/transcode/src/lib.rs +++ b/transcode/src/lib.rs @@ -180,13 +180,8 @@ impl ContractMessageTranscoder { "Failed to deserialize ink project metadata from file {}", path.display() ))?; - if let ink_metadata::MetadataVersioned::V3(ink_project) = ink_metadata { - Ok(Self::new(ink_project)) - } else { - Err(anyhow::anyhow!( - "Unsupported ink metadata version. Expected V1" - )) - } + + Ok(Self::new(ink_metadata)) } pub fn encode(&self, name: &str, args: I) -> Result> @@ -481,14 +476,11 @@ mod tests { fn generate_metadata() -> ink_metadata::InkProject { extern "Rust" { - fn __ink_generate_metadata() -> ink_metadata::MetadataVersioned; - } - let metadata_versioned = unsafe { __ink_generate_metadata() }; - if let ink_metadata::MetadataVersioned::V3(ink_project) = metadata_versioned { - ink_project - } else { - panic!("Expected metadata V3"); + fn __ink_generate_metadata() -> ink_metadata::InkProject; } + + let ink_project = unsafe { __ink_generate_metadata() }; + ink_project } #[test]