From 34a7a39adb23b365c0e98b50f0a3338dca2ecd94 Mon Sep 17 00:00:00 2001 From: Supanat Potiwarakorn Date: Fri, 1 Jul 2022 16:32:43 +0700 Subject: [PATCH 1/4] set signer as admin --- packages/cli/src/modules/wasm/entrypoint.rs | 9 +++++++++ packages/cli/src/modules/wasm/ops/deploy.rs | 1 + packages/cli/src/modules/wasm/ops/instantiate.rs | 7 ++++++- 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/packages/cli/src/modules/wasm/entrypoint.rs b/packages/cli/src/modules/wasm/entrypoint.rs index 655c229..ae9b416 100644 --- a/packages/cli/src/modules/wasm/entrypoint.rs +++ b/packages/cli/src/modules/wasm/entrypoint.rs @@ -50,10 +50,17 @@ pub enum WasmCmd { /// Label for the instantiated contract for later reference #[clap(short, long, default_value = "default")] label: String, + /// Raw json string to use as instantiate msg #[clap(short, long)] raw: Option, + /// Specifying admin required for contract migration + /// use "signer" for setting tx signer as admin + /// use bech32 address (eg. "osmo1cyyzpxplxdzkeea7kwsydadg87357qnahakaks") for custom admin + #[clap(long)] + admin: Option, + /// Funds to send to instantiated contract #[clap(short, long)] funds: Option, @@ -145,6 +152,7 @@ impl<'a> Module<'a, WasmConfig, WasmCmd, anyhow::Error> for WasmModule { contract_name, label, raw, + admin, funds, base_tx_args, } => { @@ -159,6 +167,7 @@ impl<'a> Module<'a, WasmConfig, WasmCmd, anyhow::Error> for WasmModule { contract_name, label.as_str(), raw.as_ref(), + admin.as_ref(), funds.as_ref().map(|s| s.as_str()).try_into()?, network, timeout_height, diff --git a/packages/cli/src/modules/wasm/ops/deploy.rs b/packages/cli/src/modules/wasm/ops/deploy.rs index fc34513..01f82b7 100644 --- a/packages/cli/src/modules/wasm/ops/deploy.rs +++ b/packages/cli/src/modules/wasm/ops/deploy.rs @@ -43,6 +43,7 @@ pub fn deploy<'a, Ctx: Context<'a, WasmConfig>>( contract_name, label, raw, + None, // TODO: fix this funds, network, timeout_height, diff --git a/packages/cli/src/modules/wasm/ops/instantiate.rs b/packages/cli/src/modules/wasm/ops/instantiate.rs index 2367fef..3d2b9b0 100644 --- a/packages/cli/src/modules/wasm/ops/instantiate.rs +++ b/packages/cli/src/modules/wasm/ops/instantiate.rs @@ -20,6 +20,7 @@ pub fn instantiate<'a, Ctx: Context<'a, WasmConfig>>( contract_name: &str, label: &str, raw: Option<&String>, + admin: Option<&String>, funds: Coins, network: &str, timeout_height: &u32, @@ -45,7 +46,11 @@ pub fn instantiate<'a, Ctx: Context<'a, WasmConfig>>( let msg_instantiate_contract = MsgInstantiateContract { sender: client.signer_account_id(), - admin: None, // TODO: Fix this when working on migration + admin: if admin == Some(&"signer".to_string()) { + Some(client.signer_account_id()) + } else { + None + }, code_id, label: Some(label.to_string()), msg: raw From 0522a8469818531c3b1e7b134144376066baf7dc Mon Sep 17 00:00:00 2001 From: Supanat Potiwarakorn Date: Fri, 1 Jul 2022 16:44:48 +0700 Subject: [PATCH 2/4] support custom addr as admin --- packages/cli/src/modules/wasm/ops/instantiate.rs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/cli/src/modules/wasm/ops/instantiate.rs b/packages/cli/src/modules/wasm/ops/instantiate.rs index 3d2b9b0..e1b27f5 100644 --- a/packages/cli/src/modules/wasm/ops/instantiate.rs +++ b/packages/cli/src/modules/wasm/ops/instantiate.rs @@ -7,12 +7,15 @@ use crate::support::gas::Gas; use crate::support::ops_response::OpResponseDisplay; use crate::support::state::State; use crate::{framework::Context, support::cosmos::Client}; +use anyhow::anyhow; use anyhow::Context as _; use anyhow::Result; use cosmrs::cosmwasm::MsgInstantiateContract; use cosmrs::crypto::secp256k1::SigningKey; use cosmrs::tx::Msg; +use cosmrs::AccountId; use std::fs; +use std::str::FromStr; #[allow(clippy::too_many_arguments)] pub fn instantiate<'a, Ctx: Context<'a, WasmConfig>>( @@ -48,6 +51,8 @@ pub fn instantiate<'a, Ctx: Context<'a, WasmConfig>>( sender: client.signer_account_id(), admin: if admin == Some(&"signer".to_string()) { Some(client.signer_account_id()) + } else if let Some(addr) = admin { + Some(AccountId::from_str(addr).map_err(|e: cosmrs::ErrorReport| anyhow!(e))?) } else { None }, From d591f210e02135dd50eecfbe08e35a31f569a341 Mon Sep 17 00:00:00 2001 From: Supanat Potiwarakorn Date: Fri, 1 Jul 2022 16:52:27 +0700 Subject: [PATCH 3/4] deploy command allow setting admin --- packages/cli/src/modules/wasm/entrypoint.rs | 14 +++++++++++--- packages/cli/src/modules/wasm/ops/deploy.rs | 3 ++- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/packages/cli/src/modules/wasm/entrypoint.rs b/packages/cli/src/modules/wasm/entrypoint.rs index ae9b416..f1e82f8 100644 --- a/packages/cli/src/modules/wasm/entrypoint.rs +++ b/packages/cli/src/modules/wasm/entrypoint.rs @@ -55,9 +55,9 @@ pub enum WasmCmd { #[clap(short, long)] raw: Option, - /// Specifying admin required for contract migration - /// use "signer" for setting tx signer as admin - /// use bech32 address (eg. "osmo1cyyzpxplxdzkeea7kwsydadg87357qnahakaks") for custom admin + /// Specifying admin required for contract migration. + /// Use "signer" for setting tx signer as admin. + /// Use bech32 address (eg. "osmo1cyyzpxplxdzkeea7kwsydadg87357qnahakaks") for custom admin. #[clap(long)] admin: Option, @@ -81,6 +81,12 @@ pub enum WasmCmd { #[clap(short, long)] raw: Option, + /// Specifying admin required for contract migration. + /// Use "signer" for setting tx signer as admin. + /// Use bech32 address (eg. "osmo1cyyzpxplxdzkeea7kwsydadg87357qnahakaks") for custom admin. + #[clap(long)] + admin: Option, + /// Funds to send to instantiated contract #[clap(short, long)] funds: Option, @@ -187,6 +193,7 @@ impl<'a> Module<'a, WasmConfig, WasmCmd, anyhow::Error> for WasmModule { contract_name, label, raw, + admin, funds, no_rebuild, no_wasm_opt, @@ -203,6 +210,7 @@ impl<'a> Module<'a, WasmConfig, WasmCmd, anyhow::Error> for WasmModule { contract_name, label.as_str(), raw.as_ref(), + admin.as_ref(), funds.as_ref().map(|s| s.as_str()).try_into()?, network, timeout_height, diff --git a/packages/cli/src/modules/wasm/ops/deploy.rs b/packages/cli/src/modules/wasm/ops/deploy.rs index 01f82b7..3b5fb24 100644 --- a/packages/cli/src/modules/wasm/ops/deploy.rs +++ b/packages/cli/src/modules/wasm/ops/deploy.rs @@ -17,6 +17,7 @@ pub fn deploy<'a, Ctx: Context<'a, WasmConfig>>( contract_name: &str, label: &str, raw: Option<&String>, + admin: Option<&String>, funds: Coins, network: &str, timeout_height: &u32, @@ -43,7 +44,7 @@ pub fn deploy<'a, Ctx: Context<'a, WasmConfig>>( contract_name, label, raw, - None, // TODO: fix this + admin, funds, network, timeout_height, From 64e2b919d28d16df7e32c1b97f4553bb28171355 Mon Sep 17 00:00:00 2001 From: Supanat Potiwarakorn Date: Fri, 1 Jul 2022 16:58:27 +0700 Subject: [PATCH 4/4] extract compute admin to function --- .../cli/src/modules/wasm/ops/instantiate.rs | 12 ++---------- packages/cli/src/support/admin.rs | 17 +++++++++++++++++ packages/cli/src/support/mod.rs | 1 + 3 files changed, 20 insertions(+), 10 deletions(-) create mode 100644 packages/cli/src/support/admin.rs diff --git a/packages/cli/src/modules/wasm/ops/instantiate.rs b/packages/cli/src/modules/wasm/ops/instantiate.rs index e1b27f5..0acbd5f 100644 --- a/packages/cli/src/modules/wasm/ops/instantiate.rs +++ b/packages/cli/src/modules/wasm/ops/instantiate.rs @@ -1,5 +1,6 @@ use crate::attrs_format; use crate::modules::wasm::config::WasmConfig; +use crate::support::admin::compute_admin; use crate::support::coin::Coins; use crate::support::cosmos::ResponseValuePicker; use crate::support::future::block; @@ -7,15 +8,12 @@ use crate::support::gas::Gas; use crate::support::ops_response::OpResponseDisplay; use crate::support::state::State; use crate::{framework::Context, support::cosmos::Client}; -use anyhow::anyhow; use anyhow::Context as _; use anyhow::Result; use cosmrs::cosmwasm::MsgInstantiateContract; use cosmrs::crypto::secp256k1::SigningKey; use cosmrs::tx::Msg; -use cosmrs::AccountId; use std::fs; -use std::str::FromStr; #[allow(clippy::too_many_arguments)] pub fn instantiate<'a, Ctx: Context<'a, WasmConfig>>( @@ -49,13 +47,7 @@ pub fn instantiate<'a, Ctx: Context<'a, WasmConfig>>( let msg_instantiate_contract = MsgInstantiateContract { sender: client.signer_account_id(), - admin: if admin == Some(&"signer".to_string()) { - Some(client.signer_account_id()) - } else if let Some(addr) = admin { - Some(AccountId::from_str(addr).map_err(|e: cosmrs::ErrorReport| anyhow!(e))?) - } else { - None - }, + admin: compute_admin(admin, client.signer_account_id())?, code_id, label: Some(label.to_string()), msg: raw diff --git a/packages/cli/src/support/admin.rs b/packages/cli/src/support/admin.rs new file mode 100644 index 0000000..dfd5c7a --- /dev/null +++ b/packages/cli/src/support/admin.rs @@ -0,0 +1,17 @@ +use std::str::FromStr; + +use anyhow::anyhow; +use cosmrs::AccountId; + +pub fn compute_admin( + admin: Option<&String>, + signer_account_id: AccountId, +) -> Result, anyhow::Error> { + Ok(if admin == Some(&"signer".to_string()) { + Some(signer_account_id) + } else if let Some(addr) = admin { + Some(AccountId::from_str(addr).map_err(|e: cosmrs::ErrorReport| anyhow!(e))?) + } else { + None + }) +} diff --git a/packages/cli/src/support/mod.rs b/packages/cli/src/support/mod.rs index d3813b7..a9b207e 100644 --- a/packages/cli/src/support/mod.rs +++ b/packages/cli/src/support/mod.rs @@ -1,3 +1,4 @@ +pub mod admin; pub mod coin; pub mod cosmos; pub mod future;