From a86a9d838a60ae201583962a0ca24271cfa04355 Mon Sep 17 00:00:00 2001 From: Andrei Vasilescu Date: Tue, 27 Aug 2024 10:51:01 +0300 Subject: [PATCH] system SC func calls interactor example done --- .../interact/src/basic_interact.rs | 64 ++++++++++++------- .../interact/src/basic_interact_cli.rs | 45 +++++++++---- 2 files changed, 71 insertions(+), 38 deletions(-) diff --git a/tools/interactor-system-func-calls/sys-func-calls/interact/src/basic_interact.rs b/tools/interactor-system-func-calls/sys-func-calls/interact/src/basic_interact.rs index 023875cd40..05c26126ff 100644 --- a/tools/interactor-system-func-calls/sys-func-calls/interact/src/basic_interact.rs +++ b/tools/interactor-system-func-calls/sys-func-calls/interact/src/basic_interact.rs @@ -34,7 +34,6 @@ async fn main() { .await; }, Some(basic_interact_cli::InteractCliCommand::SetRoles(args)) => { - // let parsed_args = SetRolesArgs::parse(); basic_interact .set_role(&args.token_id, args.roles.clone()) .await; @@ -80,9 +79,9 @@ async fn main() { .wipe_nft(&args.token_id, args.nft_nonce, &args.address) .await; }, - Some(basic_interact_cli::InteractCliCommand::IssueNFT(args)) => { + Some(basic_interact_cli::InteractCliCommand::IssueNFTCollection(args)) => { basic_interact - .issue_non_fungible_token(args.cost.clone(), &args.display_name, &args.ticker) + .issue_non_fungible_collection(args.cost.clone(), &args.display_name, &args.ticker) .await; }, Some(basic_interact_cli::InteractCliCommand::CreateNFT(args)) => { @@ -153,6 +152,9 @@ async fn main() { .transfer_nft_create_role(&args.token_id, &args.old_owner, &args.new_owner) .await; }, + Some(basic_interact_cli::InteractCliCommand::ControlChanges(args)) => { + basic_interact.control_changes(&args.token_id).await; + }, None => {}, } @@ -170,8 +172,7 @@ impl SysFuncCallsInteract { let config = Config::load_config(); let mut interactor = Interactor::new(config.gateway()).await; - let wallet_address = - interactor.register_wallet(Wallet::from_pem_file("wallet.pem").unwrap()); + let wallet_address = interactor.register_wallet(test_wallets::alice()); Self { interactor, @@ -216,7 +217,7 @@ impl SysFuncCallsInteract { .await; } - async fn issue_non_fungible_token( + async fn issue_non_fungible_collection( &mut self, issue_cost: RustBigUint, token_display_name: &str, @@ -310,7 +311,8 @@ impl SysFuncCallsInteract { async fn set_role(&mut self, token_id: &str, roles: Vec) { let wallet_address = &self.wallet_address.clone().into_address(); - let converted_roles: Vec = roles.into_iter().map(EsdtLocalRole::from).collect(); + let converted_roles: Vec = + roles.into_iter().map(EsdtLocalRole::from).collect(); println!("ROLES: {:?}", converted_roles); @@ -502,11 +504,7 @@ impl SysFuncCallsInteract { .to(ESDTSystemSCAddress.to_managed_address()) .gas(100_000_000u64) .typed(ESDTSystemSCProxy) - .freeze_nft( - &TokenIdentifier::from(token_id), - nonce, - &managed_address, - ) + .freeze_nft(&TokenIdentifier::from(token_id), nonce, &managed_address) .prepare_async() .run() .await; @@ -521,11 +519,7 @@ impl SysFuncCallsInteract { .to(ESDTSystemSCAddress.to_managed_address()) .gas(100_000_000u64) .typed(ESDTSystemSCProxy) - .unfreeze_nft( - &TokenIdentifier::from(token_id), - nonce, - &managed_address, - ) + .unfreeze_nft(&TokenIdentifier::from(token_id), nonce, &managed_address) .prepare_async() .run() .await; @@ -555,11 +549,7 @@ impl SysFuncCallsInteract { .to(ESDTSystemSCAddress.to_managed_address()) .gas(100_000_000u64) .typed(ESDTSystemSCProxy) - .wipe_nft( - &TokenIdentifier::from(token_id), - nonce, - &managed_address, - ) + .wipe_nft(&TokenIdentifier::from(token_id), nonce, &managed_address) .prepare_async() .run() .await; @@ -597,8 +587,8 @@ impl SysFuncCallsInteract { } async fn unset_roles(&mut self, address: &str, token_id: &str, roles: Vec) { - let converted_roles: Vec = roles.into_iter().map(EsdtLocalRole::from).collect(); - + let converted_roles: Vec = + roles.into_iter().map(EsdtLocalRole::from).collect(); println!("ROLES: {:?}", converted_roles); @@ -665,4 +655,30 @@ impl SysFuncCallsInteract { .run() .await; } + + async fn control_changes(&mut self, token_id: &str) { + self.interactor + .tx() + .from(&self.wallet_address) + .to(ESDTSystemSCAddress.to_managed_address()) + .gas(100_000_000u64) + .typed(ESDTSystemSCProxy) + .control_changes( + &TokenIdentifier::from(token_id), + &TokenPropertyArguments { + can_freeze: Some(true), + can_wipe: Some(true), + can_pause: Some(true), + can_transfer_create_role: Some(true), + can_mint: Some(true), + can_burn: Some(true), + can_change_owner: Some(true), + can_upgrade: Some(true), + can_add_special_roles: Some(true), + }, + ) + .prepare_async() + .run() + .await; + } } diff --git a/tools/interactor-system-func-calls/sys-func-calls/interact/src/basic_interact_cli.rs b/tools/interactor-system-func-calls/sys-func-calls/interact/src/basic_interact_cli.rs index f740ff3d30..3386feffff 100644 --- a/tools/interactor-system-func-calls/sys-func-calls/interact/src/basic_interact_cli.rs +++ b/tools/interactor-system-func-calls/sys-func-calls/interact/src/basic_interact_cli.rs @@ -25,20 +25,35 @@ pub enum InteractCliCommand { PauseToken(PauseTokenArgs), #[command(name = "unpause-token", about = "Unpauses a fungible token")] UnpauseToken(PauseTokenArgs), - #[command(name = "freeze-token", about = "Freezes a fungible token for an address")] + #[command( + name = "freeze-token", + about = "Freezes a fungible token for an address" + )] FreezeToken(FreezeTokenArgs), - #[command(name = "unfreeze-token", about = "Unfreezes a fungible token for an address")] + #[command( + name = "unfreeze-token", + about = "Unfreezes a fungible token for an address" + )] UnfreezeToken(FreezeTokenArgs), - #[command(name = "freeze-nft", about = "Freezes a non-fungible token for an address")] + #[command( + name = "freeze-nft", + about = "Freezes a non-fungible token for an address" + )] FreezeNFT(FreezeNFTArgs), - #[command(name = "unfreeze-nft", about = "Unfreezes a non-fungible token for an address")] + #[command( + name = "unfreeze-nft", + about = "Unfreezes a non-fungible token for an address" + )] UnfreezeNFT(FreezeNFTArgs), #[command(name = "wipe-token", about = "Wipes a fungible token for an address")] WipeToken(WipeTokenArgs), - #[command(name = "wipe-nft", about = "Freezes a non-fungible token for an address")] + #[command( + name = "wipe-nft", + about = "Freezes a non-fungible token for an address" + )] WipeNFT(WipeNFTArgs), - #[command(name = "issue-non-fungible-token", about = "Create a NFT Collection")] - IssueNFT(IssueNFTArgs), + #[command(name = "issue-nft-collection", about = "Create a NFT Collection")] + IssueNFTCollection(IssueNftCollectionArgs), #[command(name = "create-nft", about = "Issue a NFT")] CreateNFT(CreateNFTArgs), #[command( @@ -60,6 +75,8 @@ pub enum InteractCliCommand { TransferOwnership(TransferOwnershipArgs), #[command(name = "transfer-nft-create-role", about = "Transfers NFT create role")] TransferNftCreateRole(TransferNftCreateRoleArgs), + #[command(name = "control-changes", about = "Controls changes")] + ControlChanges(ControlChangesArgs), } #[derive(Clone, Debug, PartialEq, Eq, Args)] @@ -115,7 +132,7 @@ pub struct IssueFungibleArgs { } #[derive(Clone, Debug, PartialEq, Eq, Args)] -pub struct IssueNFTArgs { +pub struct IssueNftCollectionArgs { #[arg(short = 'c', long = "cost", default_value = "50000000000000000")] pub cost: RustBigUint, #[arg(short = 'd', long = "display-name")] @@ -193,7 +210,6 @@ pub struct TransferOwnershipArgs { } #[derive(Clone, Debug, PartialEq, Eq, Args)] - pub struct TransferNftCreateRoleArgs { #[arg(long = "token-id")] pub token_id: String, @@ -247,7 +263,6 @@ pub struct WipeNFTArgs { #[derive(Clone, Debug, PartialEq, Eq, Args)] pub struct CreateNFTArgs { - // token amount name hash royalities attributes uris #[arg(long = "token-id")] pub token_id: String, #[arg(short = 'a', long = "amount")] @@ -258,8 +273,10 @@ pub struct CreateNFTArgs { pub hash: String, #[arg(short = 'r', long = "royalities")] pub royalties: u64, - // #[long = "attributes")] - // pub attributes: String, - // #[arg(long = "uris")] - // pub uris: String, +} + +#[derive(Clone, Debug, PartialEq, Eq, Args)] +pub struct ControlChangesArgs { + #[arg(long = "token-id")] + pub token_id: String, }