From dccd6786e3e908d65437b4389fff8d25b9ed9122 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Obrok?= Date: Tue, 26 Mar 2024 17:25:53 +0100 Subject: [PATCH] Switch from Rc to Arc The point here is to make all these types (Session in particular) Send, so that they can be used within multithreaded code. --- Cargo.lock | 6 +++--- Cargo.toml | 6 +++--- drink-cli/src/app_state/contracts.rs | 4 ++-- drink-cli/src/executor/contract.rs | 4 ++-- drink/src/session.rs | 21 ++++++++++----------- drink/src/session/bundle.rs | 6 +++--- drink/src/session/record.rs | 4 ++-- drink/src/session/transcoding.rs | 12 ++++++------ examples/chain-extension/Cargo.lock | 6 ++++-- examples/contract-events/Cargo.lock | 6 ++++-- examples/flipper/Cargo.lock | 6 ++++-- examples/mocking/Cargo.lock | 6 ++++-- examples/multiple-contracts/Cargo.lock | 6 ++++-- examples/quick-start-with-drink/Cargo.lock | 6 ++++-- examples/runtime-interaction/Cargo.lock | 6 ++++-- 15 files changed, 59 insertions(+), 46 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d6ffce6..f8fc7c1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1290,7 +1290,7 @@ checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" [[package]] name = "drink" -version = "0.15.0" +version = "0.16.0" dependencies = [ "contract-metadata", "contract-transcode", @@ -1309,7 +1309,7 @@ dependencies = [ [[package]] name = "drink-cli" -version = "0.15.0" +version = "0.16.0" dependencies = [ "anyhow", "clap", @@ -1324,7 +1324,7 @@ dependencies = [ [[package]] name = "drink-test-macro" -version = "0.15.0" +version = "0.16.0" dependencies = [ "cargo_metadata", "contract-build", diff --git a/Cargo.toml b/Cargo.toml index 6a03465..233fb7c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -18,7 +18,7 @@ homepage = "https://github.com/Cardinal-Cryptography/drink" license = "Apache-2.0" readme = "README.md" repository = "https://github.com/Cardinal-Cryptography/drink" -version = "0.15.0" +version = "0.16.0" [workspace.dependencies] anyhow = { version = "1.0.71" } @@ -51,5 +51,5 @@ sp-runtime-interface = { version = "26.0.0" } # Local dependencies -drink = { version = "=0.15.0", path = "drink" } -drink-test-macro = { version = "=0.15.0", path = "drink/test-macro" } +drink = { version = "=0.16.0", path = "drink" } +drink-test-macro = { version = "=0.16.0", path = "drink/test-macro" } diff --git a/drink-cli/src/app_state/contracts.rs b/drink-cli/src/app_state/contracts.rs index 0272d94..401ea22 100644 --- a/drink-cli/src/app_state/contracts.rs +++ b/drink-cli/src/app_state/contracts.rs @@ -1,4 +1,4 @@ -use std::{path::PathBuf, rc::Rc}; +use std::{path::PathBuf, sync::Arc}; use contract_transcode::ContractMessageTranscoder; use drink::AccountId32; @@ -10,7 +10,7 @@ pub struct Contract { pub name: String, pub address: AccountId32, pub base_path: PathBuf, - pub transcoder: Rc, + pub transcoder: Arc, } #[derive(Copy, Clone, Eq, PartialEq, Debug, Default)] diff --git a/drink-cli/src/executor/contract.rs b/drink-cli/src/executor/contract.rs index 1089741..2812886 100644 --- a/drink-cli/src/executor/contract.rs +++ b/drink-cli/src/executor/contract.rs @@ -1,7 +1,7 @@ use std::{ fs, path::{Path, PathBuf}, - rc::Rc, + sync::Arc, }; use contract_build::{BuildMode, ExecuteArgs, ManifestPath, OptimizationPasses, Verbosity}; @@ -71,7 +71,7 @@ pub fn deploy(app_state: &mut AppState, constructor: String, args: Vec, app_state.print_error("Failed to create transcoder from metadata file."); return; }; - let transcoder = Rc::new(transcoder); + let transcoder = Arc::new(transcoder); match app_state.session.deploy( contract_bytes, diff --git a/drink/src/session.rs b/drink/src/session.rs index 880ba2a..5fb5146 100644 --- a/drink/src/session.rs +++ b/drink/src/session.rs @@ -3,7 +3,6 @@ use std::{ fmt::Debug, mem, - rc::Rc, sync::{Arc, Mutex}, }; @@ -63,7 +62,7 @@ pub const NO_ENDOWMENT: Option> = None; /// /// `Session` has two APIs: chain-ish and for singular actions. The first one can be used like: /// ```rust, no_run -/// # use std::rc::Rc; +/// # use std::sync::Arc; /// # use contract_transcode::ContractMessageTranscoder; /// # use ink_sandbox::AccountId32; /// # use drink::{ @@ -72,8 +71,8 @@ pub const NO_ENDOWMENT: Option> = None; /// # minimal::MinimalSandbox /// # }; /// # -/// # fn get_transcoder() -> Rc { -/// # Rc::new(ContractMessageTranscoder::load("").unwrap()) +/// # fn get_transcoder() -> Arc { +/// # Arc::new(ContractMessageTranscoder::load("").unwrap()) /// # } /// # fn contract_bytes() -> Vec { vec![] } /// # fn bob() -> AccountId32 { AccountId32::new([0; 32]) } @@ -90,7 +89,7 @@ pub const NO_ENDOWMENT: Option> = None; /// /// The second one serves for one-at-a-time actions: /// ```rust, no_run -/// # use std::rc::Rc; +/// # use std::sync::Arc; /// # use contract_transcode::ContractMessageTranscoder; /// # use ink_sandbox::AccountId32; /// # use drink::{ @@ -98,8 +97,8 @@ pub const NO_ENDOWMENT: Option> = None; /// # minimal::MinimalSandbox, /// # session::{NO_ARGS, NO_ENDOWMENT, NO_SALT} /// # }; -/// # fn get_transcoder() -> Rc { -/// # Rc::new(ContractMessageTranscoder::load("").unwrap()) +/// # fn get_transcoder() -> Arc { +/// # Arc::new(ContractMessageTranscoder::load("").unwrap()) /// # } /// # fn contract_bytes() -> Vec { vec![] } /// # fn bob() -> AccountId32 { AccountId32::new([0; 32]) } @@ -224,7 +223,7 @@ where pub fn with_transcoder( mut self, contract_address: AccountIdFor, - transcoder: &Rc, + transcoder: &Arc, ) -> Self { self.set_transcoder(contract_address, transcoder); self @@ -234,7 +233,7 @@ where pub fn set_transcoder( &mut self, contract_address: AccountIdFor, - transcoder: &Rc, + transcoder: &Arc, ) { self.transcoders.register(contract_address, transcoder); } @@ -263,7 +262,7 @@ where args: &[S], salt: Vec, endowment: Option>, - transcoder: &Rc, + transcoder: &Arc, ) -> Result { self.deploy( contract_bytes, @@ -292,7 +291,7 @@ where args: &[S], salt: Vec, endowment: Option>, - transcoder: &Rc, + transcoder: &Arc, ) -> Result, SessionError> { let data = transcoder .encode(constructor, args) diff --git a/drink/src/session/bundle.rs b/drink/src/session/bundle.rs index 405e370..ad389b2 100644 --- a/drink/src/session/bundle.rs +++ b/drink/src/session/bundle.rs @@ -1,6 +1,6 @@ //! This module provides simple utilities for loading and parsing `.contract` files in context of `drink` tests. -use std::{path::PathBuf, rc::Rc}; +use std::{path::PathBuf, sync::Arc}; use contract_metadata::ContractMetadata; use contract_transcode::ContractMessageTranscoder; @@ -19,7 +19,7 @@ pub struct ContractBundle { /// WASM blob of the contract pub wasm: Vec, /// Transcoder derived from the ABI/metadata - pub transcoder: Rc, + pub transcoder: Arc, } impl ContractBundle { @@ -40,7 +40,7 @@ impl ContractBundle { )) })?; - let transcoder = Rc::new(ContractMessageTranscoder::new(ink_metadata)); + let transcoder = Arc::new(ContractMessageTranscoder::new(ink_metadata)); let wasm = metadata .source diff --git a/drink/src/session/record.rs b/drink/src/session/record.rs index 661dbe1..abc584a 100644 --- a/drink/src/session/record.rs +++ b/drink/src/session/record.rs @@ -1,4 +1,4 @@ -use std::rc::Rc; +use std::sync::Arc; use contract_transcode::{ContractMessageTranscoder, Value}; use frame_system::Config as SysConfig; @@ -176,7 +176,7 @@ impl EventBatch { /// **WARNING 2**: This method will ignore anonymous events. pub fn contract_events_decoded( &self, - transcoder: &Rc, + transcoder: &Arc, ) -> Vec { let signature_topics = transcoder .metadata() diff --git a/drink/src/session/transcoding.rs b/drink/src/session/transcoding.rs index acf578c..304ec82 100644 --- a/drink/src/session/transcoding.rs +++ b/drink/src/session/transcoding.rs @@ -1,9 +1,9 @@ -use std::{collections::BTreeMap, rc::Rc}; +use std::{collections::BTreeMap, sync::Arc}; use contract_transcode::ContractMessageTranscoder; pub struct TranscoderRegistry { - transcoders: BTreeMap>, + transcoders: BTreeMap>, } impl TranscoderRegistry { @@ -13,11 +13,11 @@ impl TranscoderRegistry { } } - pub fn register(&mut self, contract: Contract, transcoder: &Rc) { - self.transcoders.insert(contract, Rc::clone(transcoder)); + pub fn register(&mut self, contract: Contract, transcoder: &Arc) { + self.transcoders.insert(contract, Arc::clone(transcoder)); } - pub fn get(&self, contract: &Contract) -> Option> { - self.transcoders.get(contract).map(Rc::clone) + pub fn get(&self, contract: &Contract) -> Option> { + self.transcoders.get(contract).map(Arc::clone) } } diff --git a/examples/chain-extension/Cargo.lock b/examples/chain-extension/Cargo.lock index 9f13796..632bf73 100644 --- a/examples/chain-extension/Cargo.lock +++ b/examples/chain-extension/Cargo.lock @@ -1344,7 +1344,7 @@ checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" [[package]] name = "drink" -version = "0.14.0" +version = "0.16.0" dependencies = [ "contract-metadata", "contract-transcode", @@ -1363,7 +1363,7 @@ dependencies = [ [[package]] name = "drink-test-macro" -version = "0.14.0" +version = "0.16.0" dependencies = [ "cargo_metadata", "contract-build", @@ -2428,6 +2428,8 @@ dependencies = [ [[package]] name = "ink_sandbox" version = "5.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "503461a34d86043375b4206fec7c3f46e9efafa7b6617290ad3430142296801a" dependencies = [ "frame-metadata", "frame-support", diff --git a/examples/contract-events/Cargo.lock b/examples/contract-events/Cargo.lock index f3dbf90..3e0602f 100644 --- a/examples/contract-events/Cargo.lock +++ b/examples/contract-events/Cargo.lock @@ -1342,7 +1342,7 @@ checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" [[package]] name = "drink" -version = "0.14.0" +version = "0.16.0" dependencies = [ "contract-metadata", "contract-transcode", @@ -1361,7 +1361,7 @@ dependencies = [ [[package]] name = "drink-test-macro" -version = "0.14.0" +version = "0.16.0" dependencies = [ "cargo_metadata", "contract-build", @@ -2426,6 +2426,8 @@ dependencies = [ [[package]] name = "ink_sandbox" version = "5.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "503461a34d86043375b4206fec7c3f46e9efafa7b6617290ad3430142296801a" dependencies = [ "frame-metadata", "frame-support", diff --git a/examples/flipper/Cargo.lock b/examples/flipper/Cargo.lock index e9177be..e144405 100644 --- a/examples/flipper/Cargo.lock +++ b/examples/flipper/Cargo.lock @@ -1328,7 +1328,7 @@ checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" [[package]] name = "drink" -version = "0.14.0" +version = "0.16.0" dependencies = [ "contract-metadata", "contract-transcode", @@ -1347,7 +1347,7 @@ dependencies = [ [[package]] name = "drink-test-macro" -version = "0.14.0" +version = "0.16.0" dependencies = [ "cargo_metadata", "contract-build", @@ -2422,6 +2422,8 @@ dependencies = [ [[package]] name = "ink_sandbox" version = "5.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "503461a34d86043375b4206fec7c3f46e9efafa7b6617290ad3430142296801a" dependencies = [ "frame-metadata", "frame-support", diff --git a/examples/mocking/Cargo.lock b/examples/mocking/Cargo.lock index 24c5cf4..b61d0fd 100644 --- a/examples/mocking/Cargo.lock +++ b/examples/mocking/Cargo.lock @@ -1277,7 +1277,7 @@ checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" [[package]] name = "drink" -version = "0.14.0" +version = "0.16.0" dependencies = [ "contract-metadata", "contract-transcode", @@ -1296,7 +1296,7 @@ dependencies = [ [[package]] name = "drink-test-macro" -version = "0.14.0" +version = "0.16.0" dependencies = [ "cargo_metadata", "contract-build", @@ -2343,6 +2343,8 @@ dependencies = [ [[package]] name = "ink_sandbox" version = "5.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "503461a34d86043375b4206fec7c3f46e9efafa7b6617290ad3430142296801a" dependencies = [ "frame-metadata", "frame-support", diff --git a/examples/multiple-contracts/Cargo.lock b/examples/multiple-contracts/Cargo.lock index 689f7a0..e0f0655 100644 --- a/examples/multiple-contracts/Cargo.lock +++ b/examples/multiple-contracts/Cargo.lock @@ -1277,7 +1277,7 @@ checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" [[package]] name = "drink" -version = "0.14.0" +version = "0.16.0" dependencies = [ "contract-metadata", "contract-transcode", @@ -1296,7 +1296,7 @@ dependencies = [ [[package]] name = "drink-test-macro" -version = "0.14.0" +version = "0.16.0" dependencies = [ "cargo_metadata", "contract-build", @@ -2343,6 +2343,8 @@ dependencies = [ [[package]] name = "ink_sandbox" version = "5.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "503461a34d86043375b4206fec7c3f46e9efafa7b6617290ad3430142296801a" dependencies = [ "frame-metadata", "frame-support", diff --git a/examples/quick-start-with-drink/Cargo.lock b/examples/quick-start-with-drink/Cargo.lock index c4c1b4d..72ec8c7 100644 --- a/examples/quick-start-with-drink/Cargo.lock +++ b/examples/quick-start-with-drink/Cargo.lock @@ -1277,7 +1277,7 @@ checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" [[package]] name = "drink" -version = "0.14.0" +version = "0.16.0" dependencies = [ "contract-metadata", "contract-transcode", @@ -1296,7 +1296,7 @@ dependencies = [ [[package]] name = "drink-test-macro" -version = "0.14.0" +version = "0.16.0" dependencies = [ "cargo_metadata", "contract-build", @@ -2343,6 +2343,8 @@ dependencies = [ [[package]] name = "ink_sandbox" version = "5.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "503461a34d86043375b4206fec7c3f46e9efafa7b6617290ad3430142296801a" dependencies = [ "frame-metadata", "frame-support", diff --git a/examples/runtime-interaction/Cargo.lock b/examples/runtime-interaction/Cargo.lock index 45b15c8..2828605 100644 --- a/examples/runtime-interaction/Cargo.lock +++ b/examples/runtime-interaction/Cargo.lock @@ -1326,7 +1326,7 @@ checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" [[package]] name = "drink" -version = "0.14.0" +version = "0.16.0" dependencies = [ "contract-metadata", "contract-transcode", @@ -1345,7 +1345,7 @@ dependencies = [ [[package]] name = "drink-test-macro" -version = "0.14.0" +version = "0.16.0" dependencies = [ "cargo_metadata", "contract-build", @@ -2338,6 +2338,8 @@ dependencies = [ [[package]] name = "ink_sandbox" version = "5.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "503461a34d86043375b4206fec7c3f46e9efafa7b6617290ad3430142296801a" dependencies = [ "frame-metadata", "frame-support",