From ff075dc0ec7dce9624bcc99037279fefc0f1e159 Mon Sep 17 00:00:00 2001 From: Frank Bell Date: Wed, 18 Dec 2024 13:16:51 +0000 Subject: [PATCH 01/19] docs: align description across commands for consistency --- crates/pop-cli/src/commands/up/contract.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/pop-cli/src/commands/up/contract.rs b/crates/pop-cli/src/commands/up/contract.rs index df1edaf6..6e003f43 100644 --- a/crates/pop-cli/src/commands/up/contract.rs +++ b/crates/pop-cli/src/commands/up/contract.rs @@ -66,7 +66,7 @@ pub struct UpContractCommand { /// - with a password "//Alice///SECRET_PASSWORD" #[clap(short, long, default_value = "//Alice")] suri: String, - /// Use your browser wallet to sign a transaction. + /// Use a browser extension wallet to sign the extrinsic. #[clap( name = "use-wallet", long, From 64276cc8858738a1b267633d04ef365bb00cb4e4 Mon Sep 17 00:00:00 2001 From: Frank Bell Date: Wed, 18 Dec 2024 13:19:46 +0000 Subject: [PATCH 02/19] refactor: use short = '' arg style recently adopted in main for consistency --- crates/pop-cli/src/commands/call/chain.rs | 8 +++++++- crates/pop-cli/src/commands/call/contract.rs | 8 +++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/crates/pop-cli/src/commands/call/chain.rs b/crates/pop-cli/src/commands/call/chain.rs index 27dbee6d..41348826 100644 --- a/crates/pop-cli/src/commands/call/chain.rs +++ b/crates/pop-cli/src/commands/call/chain.rs @@ -44,7 +44,13 @@ pub struct CallChainCommand { #[arg(short, long)] suri: Option, /// Use a browser extension wallet to sign the extrinsic. - #[arg(name = "use-wallet", short('w'), long, default_value = "false", conflicts_with = "suri")] + #[arg( + name = "use-wallet", + short = 'w', + long, + default_value = "false", + conflicts_with = "suri" + )] use_wallet: bool, /// SCALE encoded bytes representing the call data of the extrinsic. #[arg(name = "call", short, long, conflicts_with_all = ["pallet", "function", "args"])] diff --git a/crates/pop-cli/src/commands/call/contract.rs b/crates/pop-cli/src/commands/call/contract.rs index da12002a..c9651a34 100644 --- a/crates/pop-cli/src/commands/call/contract.rs +++ b/crates/pop-cli/src/commands/call/contract.rs @@ -60,7 +60,13 @@ pub struct CallContractCommand { #[arg(short, long, default_value = DEFAULT_URI)] suri: String, /// Use a browser extension wallet to sign the extrinsic. - #[arg(name = "use-wallet", long, short('w'), default_value = "false", conflicts_with = "suri")] + #[arg( + name = "use-wallet", + long, + short = 'w', + default_value = "false", + conflicts_with = "suri" + )] use_wallet: bool, /// Submit an extrinsic for on-chain execution. #[arg(short = 'x', long)] From a3143862bcc16d6a1f16552fc1b2893ea64aff23 Mon Sep 17 00:00:00 2001 From: Frank Bell Date: Wed, 18 Dec 2024 13:52:16 +0000 Subject: [PATCH 03/19] test: remove unused variable --- crates/pop-cli/src/commands/up/contract.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/crates/pop-cli/src/commands/up/contract.rs b/crates/pop-cli/src/commands/up/contract.rs index 6e003f43..db81a0a7 100644 --- a/crates/pop-cli/src/commands/up/contract.rs +++ b/crates/pop-cli/src/commands/up/contract.rs @@ -480,7 +480,6 @@ mod tests { #[tokio::test] async fn get_upload_and_instantiate_call_data_works() -> anyhow::Result<()> { let (contracts_node_process, port, temp_dir) = start_test_environment().await?; - let localhost_url = format!("ws://127.0.0.1:{}", port); sleep(Duration::from_secs(5)).await; get_upload_call_data_works(port, temp_dir.path().join("testing")).await?; From c1790b40e6457a806f419c462342fec34be79303 Mon Sep 17 00:00:00 2001 From: Frank Bell Date: Wed, 18 Dec 2024 13:58:06 +0000 Subject: [PATCH 04/19] refactor: align function naming --- crates/pop-cli/src/commands/call/contract.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/pop-cli/src/commands/call/contract.rs b/crates/pop-cli/src/commands/call/contract.rs index c9651a34..45ba0a09 100644 --- a/crates/pop-cli/src/commands/call/contract.rs +++ b/crates/pop-cli/src/commands/call/contract.rs @@ -400,7 +400,7 @@ impl CallContractCommand { // Perform signing steps with wallet integration, skipping secure signing for query-only // operations. if self.use_wallet { - self.execute_with_secure_signing(call_exec, cli).await?; + self.execute_with_wallet(call_exec, cli).await?; return self.finalize_execute_call(cli, prompt_to_repeat_call).await; } if self.dry_run { @@ -482,7 +482,7 @@ impl CallContractCommand { } /// Execute the smart contract call using wallet integration. - async fn execute_with_secure_signing( + async fn execute_with_wallet( &self, call_exec: CallExec, cli: &mut impl Cli, From 41f8f38e8a12bbf852d8d407ad3e810f7a0b0062 Mon Sep 17 00:00:00 2001 From: Frank Bell Date: Wed, 18 Dec 2024 14:11:33 +0000 Subject: [PATCH 05/19] refactor: remove unnecessary async --- crates/pop-cli/src/commands/up/contract.rs | 9 ++++----- crates/pop-contracts/src/up.rs | 8 +++----- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/crates/pop-cli/src/commands/up/contract.rs b/crates/pop-cli/src/commands/up/contract.rs index db81a0a7..8174128b 100644 --- a/crates/pop-cli/src/commands/up/contract.rs +++ b/crates/pop-cli/src/commands/up/contract.rs @@ -344,7 +344,7 @@ impl UpContractCommand { // get the call data and contract code hash async fn get_contract_data(&self) -> anyhow::Result<(Vec, [u8; 32])> { - let contract_code = get_contract_code(self.path.as_ref()).await?; + let contract_code = get_contract_code(self.path.as_ref())?; let hash = contract_code.code_hash(); if self.upload_only { let call_data = get_upload_payload(contract_code, self.url.as_str()).await?; @@ -358,7 +358,7 @@ impl UpContractCommand { // Frontend will do dry run and update call data. Weight::zero() }; - let call_data = get_instantiate_payload(instantiate_exec, weight_limit).await?; + let call_data = get_instantiate_payload(instantiate_exec, weight_limit)?; Ok((call_data, hash)) } } @@ -524,7 +524,7 @@ mod tests { assert!(!retrieved_call_data.is_empty()); // Craft encoded call data for an upload code call. - let contract_code = get_contract_code(up_contract_opts.path.as_ref()).await?; + let contract_code = get_contract_code(up_contract_opts.path.as_ref())?; let storage_deposit_limit: Option = None; let upload_code = contract_extrinsics::extrinsic_calls::UploadCode::new( contract_code, @@ -574,8 +574,7 @@ mod tests { // Craft instantiate call data. let weight = Weight::from_parts(200_000_000, 30_000); let expected_call_data = - get_instantiate_payload(set_up_deployment(up_contract_opts.into()).await?, weight) - .await?; + get_instantiate_payload(set_up_deployment(up_contract_opts.into()).await?, weight)?; // Retrieved call data matches the one crafted above. assert_eq!(retrieved_call_data, expected_call_data); diff --git a/crates/pop-contracts/src/up.rs b/crates/pop-contracts/src/up.rs index efd3817b..0fbba1d3 100644 --- a/crates/pop-contracts/src/up.rs +++ b/crates/pop-contracts/src/up.rs @@ -140,7 +140,7 @@ pub async fn get_upload_payload(code: WasmCode, url: &str) -> anyhow::Result, gas_limit: Weight, ) -> anyhow::Result> { @@ -176,9 +176,7 @@ pub async fn get_instantiate_payload( /// /// # Arguments /// * `path` - path to the contract file. -pub async fn get_contract_code( - path: Option<&PathBuf>, -) -> anyhow::Result { +pub fn get_contract_code(path: Option<&PathBuf>) -> anyhow::Result { let manifest_path = get_manifest_path(path.map(|p| p as &Path))?; // signer does not matter for this @@ -495,7 +493,7 @@ mod tests { url: Url::parse(CONTRACTS_NETWORK_URL)?, suri: "//Alice".to_string(), }; - let contract_code = get_contract_code(up_opts.path.as_ref()).await?; + let contract_code = get_contract_code(up_opts.path.as_ref())?; let call_data = get_upload_payload(contract_code, CONTRACTS_NETWORK_URL).await?; let payload_hash = BlakeTwo256::hash(&call_data); // We know that for the above opts the payload hash should be: From debd0642721e031e692e6bb7e3c45df1efb896e4 Mon Sep 17 00:00:00 2001 From: Frank Bell Date: Wed, 18 Dec 2024 14:23:56 +0000 Subject: [PATCH 06/19] refactor: improve result handling Eliminates the expects and unwraps. --- crates/pop-cli/src/commands/up/contract.rs | 42 +++++++++++++--------- 1 file changed, 25 insertions(+), 17 deletions(-) diff --git a/crates/pop-cli/src/commands/up/contract.rs b/crates/pop-cli/src/commands/up/contract.rs index 8174128b..fed9c206 100644 --- a/crates/pop-cli/src/commands/up/contract.rs +++ b/crates/pop-cli/src/commands/up/contract.rs @@ -194,14 +194,18 @@ impl UpContractCommand { spinner.start("Uploading contract..."); if self.upload_only { - let result = upload_contract_signed(self.url.as_str(), payload).await; - if let Err(e) = result { - spinner.error(format!("An error occurred uploading your contract: {e}")); - terminate_node(process)?; - Cli.outro_cancel(FAILED)?; - return Ok(()); - } - let upload_result = result.expect("Error check above."); + let upload_result = match upload_contract_signed(self.url.as_str(), payload) + .await + { + Err(e) => { + spinner + .error(format!("An error occurred uploading your contract: {e}")); + terminate_node(process)?; + Cli.outro_cancel(FAILED)?; + return Ok(()); + }, + Ok(result) => result, + }; match get_code_hash_from_event(&upload_result, hash) { Ok(r) => { @@ -213,15 +217,19 @@ impl UpContractCommand { }, }; } else { - let result = instantiate_contract_signed(self.url.as_str(), payload).await; - if let Err(e) = result { - spinner.error(format!("An error occurred uploading your contract: {e}")); - terminate_node(process)?; - Cli.outro_cancel(FAILED)?; - return Ok(()); - } - - let contract_info = result.unwrap(); + let contract_info = + match instantiate_contract_signed(self.url.as_str(), payload).await { + Err(e) => { + spinner.error(format!( + "An error occurred uploading your contract: {e}" + )); + terminate_node(process)?; + Cli.outro_cancel(FAILED)?; + return Ok(()); + }, + Ok(result) => result, + }; + let hash = contract_info.code_hash.map(|code_hash| format!("{:?}", code_hash)); display_contract_info( &spinner, From 28429902ce010a539dd2aca9c9141d3594404816 Mon Sep 17 00:00:00 2001 From: Frank Bell Date: Wed, 18 Dec 2024 14:36:39 +0000 Subject: [PATCH 07/19] refactor: remove unnecessary clones --- crates/pop-cli/src/common/wallet.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/pop-cli/src/common/wallet.rs b/crates/pop-cli/src/common/wallet.rs index 9f0e2871..bf470e7c 100644 --- a/crates/pop-cli/src/common/wallet.rs +++ b/crates/pop-cli/src/common/wallet.rs @@ -22,7 +22,7 @@ pub async fn request_signature(call_data: Vec, rpc: String) -> anyhow::Resul let transaction_data = TransactionData::new(rpc, call_data); // Starts server with port 9090. let mut wallet = WalletIntegrationManager::new(ui, transaction_data, Some(9090)); - let url = wallet.server_url.clone(); + let url = &wallet.server_url; log::step(format!("Wallet signing portal started at http://{url}."))?; let spinner = spinner(); @@ -48,7 +48,7 @@ pub async fn request_signature(call_data: Vec, rpc: String) -> anyhow::Resul } spinner.stop(""); - let signed_payload = wallet.state.lock().await.signed_payload.clone(); + let signed_payload = wallet.state.lock().await.signed_payload.take(); Ok(signed_payload) } From 8021eba2343fb15e05cb3094a3bdb748c6c31d4f Mon Sep 17 00:00:00 2001 From: Frank Bell Date: Wed, 18 Dec 2024 14:39:52 +0000 Subject: [PATCH 08/19] refactor: simplify code --- crates/pop-cli/src/common/wallet.rs | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/crates/pop-cli/src/common/wallet.rs b/crates/pop-cli/src/common/wallet.rs index bf470e7c..1aedd029 100644 --- a/crates/pop-cli/src/common/wallet.rs +++ b/crates/pop-cli/src/common/wallet.rs @@ -22,13 +22,12 @@ pub async fn request_signature(call_data: Vec, rpc: String) -> anyhow::Resul let transaction_data = TransactionData::new(rpc, call_data); // Starts server with port 9090. let mut wallet = WalletIntegrationManager::new(ui, transaction_data, Some(9090)); - let url = &wallet.server_url; - log::step(format!("Wallet signing portal started at http://{url}."))?; + let url = format!("http://{}", &wallet.server_url); + log::step(format!("Wallet signing portal started at {url}."))?; let spinner = spinner(); - spinner.start(format!("Opening browser to http://{url}")); - let res = open::that(format!("http://{url}")); - if let Err(e) = res { + spinner.start(format!("Opening browser to {url}")); + if let Err(e) = open::that(url) { spinner.error(format!("Failed to launch browser. Please open link manually. {e}")); } From 7f7873b3b4d038a24d5a63ca3592629d6d3e4b82 Mon Sep 17 00:00:00 2001 From: Frank Bell Date: Wed, 18 Dec 2024 14:41:51 +0000 Subject: [PATCH 09/19] style: formatting --- crates/pop-cli/src/wallet_integration.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/crates/pop-cli/src/wallet_integration.rs b/crates/pop-cli/src/wallet_integration.rs index dfe43cfe..45b048a7 100644 --- a/crates/pop-cli/src/wallet_integration.rs +++ b/crates/pop-cli/src/wallet_integration.rs @@ -13,8 +13,7 @@ use tokio::{ }; use tower_http::{cors::Any, services::ServeDir}; -/// Make frontend sourcing more flexible by allowing a custom route -/// to be defined. +/// Make frontend sourcing more flexible by allowing a custom route to be defined. pub trait Frontend { fn serve_content(&self) -> Router; } From bd671402480826cc8fd8c5b8619278a3954e39b6 Mon Sep 17 00:00:00 2001 From: Frank Bell Date: Wed, 18 Dec 2024 14:45:36 +0000 Subject: [PATCH 10/19] docs: adds missing doc comments --- crates/pop-cli/src/wallet_integration.rs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/crates/pop-cli/src/wallet_integration.rs b/crates/pop-cli/src/wallet_integration.rs index 45b048a7..0c59a7e7 100644 --- a/crates/pop-cli/src/wallet_integration.rs +++ b/crates/pop-cli/src/wallet_integration.rs @@ -27,6 +27,12 @@ pub struct TransactionData { } impl TransactionData { + /// Create a new transaction payload. + /// # Arguments + /// * `chain_rpc`: The RPC of the chain. + /// * `call_data`: the call data. + /// # Returns + /// The transaction payload to be sent to frontend for signing. pub fn new(chain_rpc: String, call_data: Vec) -> Self { Self { chain_rpc, call_data } } From 40b7c07a446f1e8c1da85dba83a84f8e9daf5dc1 Mon Sep 17 00:00:00 2001 From: Frank Bell Date: Wed, 18 Dec 2024 14:47:16 +0000 Subject: [PATCH 11/19] refactor: remove unused function --- crates/pop-cli/src/wallet_integration.rs | 4 ---- 1 file changed, 4 deletions(-) diff --git a/crates/pop-cli/src/wallet_integration.rs b/crates/pop-cli/src/wallet_integration.rs index 0c59a7e7..6b3b9859 100644 --- a/crates/pop-cli/src/wallet_integration.rs +++ b/crates/pop-cli/src/wallet_integration.rs @@ -36,10 +36,6 @@ impl TransactionData { pub fn new(chain_rpc: String, call_data: Vec) -> Self { Self { chain_rpc, call_data } } - #[allow(dead_code)] - pub fn call_data(&self) -> Vec { - self.call_data.clone() - } } /// Shared state between routes. Serves two purposes: From 0c12a21ec4d643042797a48145cddf6a49520a13 Mon Sep 17 00:00:00 2001 From: Frank Bell Date: Wed, 18 Dec 2024 15:04:23 +0000 Subject: [PATCH 12/19] refactor: use .expect() as server_url is parameter on public function --- crates/pop-cli/src/wallet_integration.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/pop-cli/src/wallet_integration.rs b/crates/pop-cli/src/wallet_integration.rs index 6b3b9859..1253fb4b 100644 --- a/crates/pop-cli/src/wallet_integration.rs +++ b/crates/pop-cli/src/wallet_integration.rs @@ -98,7 +98,7 @@ impl WalletIntegrationManager { let payload = Arc::new(payload); let cors = tower_http::cors::CorsLayer::new() - .allow_origin(server_url.parse::().unwrap()) + .allow_origin(server_url.parse::().expect("invalid server url")) .allow_methods(Any) // Allow any HTTP method .allow_headers(Any); // Allow any headers (like 'Content-Type') From bcda048c2460325f0267d6a086554d224ae45511 Mon Sep 17 00:00:00 2001 From: Frank Bell Date: Wed, 18 Dec 2024 15:21:32 +0000 Subject: [PATCH 13/19] docs: add missing public function doc comments --- crates/pop-cli/src/wallet_integration.rs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/crates/pop-cli/src/wallet_integration.rs b/crates/pop-cli/src/wallet_integration.rs index 1253fb4b..92e3395e 100644 --- a/crates/pop-cli/src/wallet_integration.rs +++ b/crates/pop-cli/src/wallet_integration.rs @@ -15,6 +15,7 @@ use tower_http::{cors::Any, services::ServeDir}; /// Make frontend sourcing more flexible by allowing a custom route to be defined. pub trait Frontend { + /// Serves the content via a [Router]. fn serve_content(&self) -> Router; } @@ -81,6 +82,13 @@ impl WalletIntegrationManager { } /// Same as `new`, but allows specifying the address to bind to. + /// # Arguments + /// * `frontend`: A frontend with custom route to serve content. + /// * `payload`: Payload to be sent to the frontend for signing. + /// * `server_url`: The address to bind to. + /// + /// # Returns + /// A `WalletIntegrationManager` instance, with access to the state and task handle for the pub fn new_with_address( frontend: F, payload: TransactionData, @@ -236,6 +244,9 @@ pub struct FrontendFromDir { } #[allow(dead_code)] impl FrontendFromDir { + /// A new static server. + /// # Arguments + /// * `content`: A directory path. pub fn new(content: PathBuf) -> Self { Self { content } } @@ -254,6 +265,9 @@ pub struct FrontendFromString { #[allow(dead_code)] impl FrontendFromString { + /// A new static server. + /// # Arguments + /// * `content`: A hard-coded HTML string pub fn new(content: String) -> Self { Self { content } } From e81a5d97044e44d5d1c38a8705371b7931e7a2fc Mon Sep 17 00:00:00 2001 From: Frank Bell Date: Wed, 18 Dec 2024 15:29:51 +0000 Subject: [PATCH 14/19] refactor: use constant --- crates/pop-contracts/src/node/mod.rs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/crates/pop-contracts/src/node/mod.rs b/crates/pop-contracts/src/node/mod.rs index 060dca16..158865d4 100644 --- a/crates/pop-contracts/src/node/mod.rs +++ b/crates/pop-contracts/src/node/mod.rs @@ -23,6 +23,7 @@ use subxt::{dynamic::Value, SubstrateConfig}; use tokio::time::sleep; const BIN_NAME: &str = "substrate-contracts-node"; +const STARTUP: Duration = Duration::from_millis(20_000); /// Checks if the specified node is alive and responsive. /// @@ -132,8 +133,8 @@ pub async fn run_contracts_node( let process = command.spawn()?; - // Wait 20 secs until the node is ready - sleep(Duration::from_millis(20000)).await; + // Wait until the node is ready + sleep(STARTUP).await; let data = Value::from_bytes(subxt::utils::to_hex("initialize contracts node")); let payload = subxt::dynamic::tx("System", "remark", [data].to_vec()); From c9ff326e35765ff23a9f3da88d1675cd730f0fba Mon Sep 17 00:00:00 2001 From: Frank Bell Date: Wed, 18 Dec 2024 15:30:26 +0000 Subject: [PATCH 15/19] refactor: module directory to file --- crates/pop-contracts/src/{node/mod.rs => node.rs} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename crates/pop-contracts/src/{node/mod.rs => node.rs} (100%) diff --git a/crates/pop-contracts/src/node/mod.rs b/crates/pop-contracts/src/node.rs similarity index 100% rename from crates/pop-contracts/src/node/mod.rs rename to crates/pop-contracts/src/node.rs From 5439ed11b99402fa7789a19a3904107b1201dc79 Mon Sep 17 00:00:00 2001 From: Frank Bell Date: Wed, 18 Dec 2024 15:38:19 +0000 Subject: [PATCH 16/19] refactor: use imports --- crates/pop-contracts/src/up.rs | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/crates/pop-contracts/src/up.rs b/crates/pop-contracts/src/up.rs index 0fbba1d3..06bcd5d4 100644 --- a/crates/pop-contracts/src/up.rs +++ b/crates/pop-contracts/src/up.rs @@ -9,9 +9,11 @@ use crate::{ }; use contract_extrinsics::{ events::{CodeStored, ContractInstantiated}, - extrinsic_calls::{Instantiate, InstantiateWithCode}, - BalanceVariant, ErrorVariant, ExtrinsicOptsBuilder, InstantiateCommandBuilder, InstantiateExec, - InstantiateExecResult, TokenMetadata, UploadCommandBuilder, UploadExec, UploadResult, WasmCode, + extrinsic_calls::{Instantiate, InstantiateWithCode, UploadCode}, + upload::Determinism, + BalanceVariant, Code, ErrorVariant, ExtrinsicOptsBuilder, InstantiateCommandBuilder, + InstantiateExec, InstantiateExecResult, TokenMetadata, UploadCommandBuilder, UploadExec, + UploadResult, WasmCode, }; use ink_env::{DefaultEnvironment, Environment}; use pop_common::{create_signer, DefaultConfig, Keypair}; @@ -121,11 +123,7 @@ pub async fn set_up_upload( /// * `url` - the rpc of the chain node. pub async fn get_upload_payload(code: WasmCode, url: &str) -> anyhow::Result> { let storage_deposit_limit: Option = None; - let upload_code = contract_extrinsics::extrinsic_calls::UploadCode::new( - code, - storage_deposit_limit, - contract_extrinsics::upload::Determinism::Enforced, - ); + let upload_code = UploadCode::new(code, storage_deposit_limit, Determinism::Enforced); let rpc_client = subxt::backend::rpc::RpcClient::from_url(url).await?; let client = subxt::OnlineClient::::from_rpc_client(rpc_client).await?; @@ -147,7 +145,7 @@ pub fn get_instantiate_payload( let storage_deposit_limit: Option = None; let mut encoded_data = Vec::::new(); match instantiate_exec.args().code() { - contract_extrinsics::Code::Upload(code) => InstantiateWithCode::new( + Code::Upload(code) => InstantiateWithCode::new( instantiate_exec.args().value(), gas_limit, storage_deposit_limit, @@ -157,7 +155,7 @@ pub fn get_instantiate_payload( ) .build() .encode_call_data_to(&instantiate_exec.client().metadata(), &mut encoded_data), - contract_extrinsics::Code::Existing(hash) => Instantiate::new( + Code::Existing(hash) => Instantiate::new( instantiate_exec.args().value(), gas_limit, storage_deposit_limit, @@ -176,7 +174,7 @@ pub fn get_instantiate_payload( /// /// # Arguments /// * `path` - path to the contract file. -pub fn get_contract_code(path: Option<&PathBuf>) -> anyhow::Result { +pub fn get_contract_code(path: Option<&PathBuf>) -> anyhow::Result { let manifest_path = get_manifest_path(path.map(|p| p as &Path))?; // signer does not matter for this From 46184e0cb955adb074105ab07f2c42013a49f68e Mon Sep 17 00:00:00 2001 From: Frank Bell Date: Wed, 18 Dec 2024 15:40:33 +0000 Subject: [PATCH 17/19] refactor: eliminate duplication --- crates/pop-contracts/src/up.rs | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/crates/pop-contracts/src/up.rs b/crates/pop-contracts/src/up.rs index 06bcd5d4..fe062823 100644 --- a/crates/pop-contracts/src/up.rs +++ b/crates/pop-contracts/src/up.rs @@ -1,4 +1,5 @@ // SPDX-License-Identifier: GPL-3.0 + use crate::{ errors::Error, utils::{ @@ -133,6 +134,7 @@ pub async fn get_upload_payload(code: WasmCode, url: &str) -> anyhow::Result anyhow::Result> { let storage_deposit_limit: Option = None; let mut encoded_data = Vec::::new(); - match instantiate_exec.args().code() { + let args = instantiate_exec.args(); + match args.code() { Code::Upload(code) => InstantiateWithCode::new( - instantiate_exec.args().value(), + args.value(), gas_limit, storage_deposit_limit, code.clone(), - instantiate_exec.args().data().into(), - instantiate_exec.args().salt().into(), + args.data().into(), + args.salt().into(), ) .build() .encode_call_data_to(&instantiate_exec.client().metadata(), &mut encoded_data), Code::Existing(hash) => Instantiate::new( - instantiate_exec.args().value(), + args.value(), gas_limit, storage_deposit_limit, hash, - instantiate_exec.args().data().into(), - instantiate_exec.args().salt().into(), + args.data().into(), + args.salt().into(), ) .build() .encode_call_data_to(&instantiate_exec.client().metadata(), &mut encoded_data), From 188656ffa4621debe7b200a1f59646eb1e695391 Mon Sep 17 00:00:00 2001 From: Frank Bell Date: Wed, 18 Dec 2024 15:45:16 +0000 Subject: [PATCH 18/19] docs: add missing doc comments --- crates/pop-contracts/src/up.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/crates/pop-contracts/src/up.rs b/crates/pop-contracts/src/up.rs index fe062823..3d8293f1 100644 --- a/crates/pop-contracts/src/up.rs +++ b/crates/pop-contracts/src/up.rs @@ -313,7 +313,9 @@ pub async fn dry_run_gas_estimate_instantiate( /// Result of a dry-run upload of a smart contract. pub struct UploadDryRunResult { + /// The key under which the new code is stored. pub code_hash: String, + /// The deposit that was reserved at the caller. Is zero when the code already existed. pub deposit: String, } From 6963c8456bf22c871840bb9a9123b3e3365a9bed Mon Sep 17 00:00:00 2001 From: Frank Bell Date: Wed, 18 Dec 2024 15:46:40 +0000 Subject: [PATCH 19/19] style: formatting --- crates/pop-contracts/src/up.rs | 4 ---- 1 file changed, 4 deletions(-) diff --git a/crates/pop-contracts/src/up.rs b/crates/pop-contracts/src/up.rs index 3d8293f1..3ed614c7 100644 --- a/crates/pop-contracts/src/up.rs +++ b/crates/pop-contracts/src/up.rs @@ -284,7 +284,6 @@ pub async fn submit_signed_payload( /// blockchain. /// /// # Arguments -/// /// * `instantiate_exec` - the preprocessed data to instantiate a contract. pub async fn dry_run_gas_estimate_instantiate( instantiate_exec: &InstantiateExec, @@ -322,7 +321,6 @@ pub struct UploadDryRunResult { /// Performs a dry-run for uploading a contract without modifying the state of the blockchain. /// /// # Arguments -/// /// * `upload_exec` - the preprocessed data to upload a contract. pub async fn dry_run_upload( upload_exec: &UploadExec, @@ -354,7 +352,6 @@ pub struct ContractInfo { /// Instantiate a contract. /// /// # Arguments -/// /// * `instantiate_exec` - the preprocessed data to instantiate a contract. /// * `gas_limit` - maximum amount of gas to be used for this call. pub async fn instantiate_smart_contract( @@ -374,7 +371,6 @@ pub async fn instantiate_smart_contract( /// Upload a contract. /// /// # Arguments -/// /// * `upload_exec` - the preprocessed data to upload a contract. pub async fn upload_smart_contract( upload_exec: &UploadExec,