Skip to content

Commit

Permalink
system SC func calls interactor example done
Browse files Browse the repository at this point in the history
  • Loading branch information
andreivasilescu24 committed Aug 27, 2024
1 parent 29751a9 commit a86a9d8
Show file tree
Hide file tree
Showing 2 changed files with 71 additions and 38 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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)) => {
Expand Down Expand Up @@ -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 => {},
}
Expand All @@ -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,
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -310,7 +311,8 @@ impl SysFuncCallsInteract {

async fn set_role(&mut self, token_id: &str, roles: Vec<u16>) {
let wallet_address = &self.wallet_address.clone().into_address();
let converted_roles: Vec<EsdtLocalRole> = roles.into_iter().map(EsdtLocalRole::from).collect();
let converted_roles: Vec<EsdtLocalRole> =
roles.into_iter().map(EsdtLocalRole::from).collect();

println!("ROLES: {:?}", converted_roles);

Expand Down Expand Up @@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -597,8 +587,8 @@ impl SysFuncCallsInteract {
}

async fn unset_roles(&mut self, address: &str, token_id: &str, roles: Vec<u16>) {
let converted_roles: Vec<EsdtLocalRole> = roles.into_iter().map(EsdtLocalRole::from).collect();

let converted_roles: Vec<EsdtLocalRole> =
roles.into_iter().map(EsdtLocalRole::from).collect();

println!("ROLES: {:?}", converted_roles);

Expand Down Expand Up @@ -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;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand All @@ -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)]
Expand Down Expand Up @@ -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")]
Expand Down Expand Up @@ -193,7 +210,6 @@ pub struct TransferOwnershipArgs {
}

#[derive(Clone, Debug, PartialEq, Eq, Args)]

pub struct TransferNftCreateRoleArgs {
#[arg(long = "token-id")]
pub token_id: String,
Expand Down Expand Up @@ -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")]
Expand All @@ -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,
}

0 comments on commit a86a9d8

Please sign in to comment.