Skip to content

Commit

Permalink
Merge pull request #1551 from multiversx/bech32-address
Browse files Browse the repository at this point in the history
Bech32Address & interactor improvements
  • Loading branch information
andrei-marinica authored Apr 10, 2024
2 parents eafbc37 + 86156a6 commit fafe621
Show file tree
Hide file tree
Showing 19 changed files with 373 additions and 111 deletions.
33 changes: 14 additions & 19 deletions contracts/examples/adder/interact/src/basic_interact.rs
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ async fn main() {
#[allow(unused)]
struct AdderInteract {
interactor: Interactor,
wallet_address: Address,
wallet_address: Bech32Address,
adder_code: BytesValue,
state: State,
}
Expand All @@ -61,17 +61,17 @@ impl AdderInteract {

Self {
interactor,
wallet_address,
wallet_address: wallet_address.into(),
adder_code,
state: State::load_state(),
}
}

async fn set_state(&mut self) {
println!("wallet address: {}", bech32::encode(&self.wallet_address));
println!("wallet address: {}", &self.wallet_address);
let scenario_raw = retrieve_account_as_scenario_set_state(
Config::load_config().gateway().to_string(),
bech32::encode(&self.wallet_address),
self.wallet_address.to_bech32_string(),
true,
)
.await;
Expand All @@ -92,16 +92,13 @@ impl AdderInteract {
.typed(adder_proxy::AdderProxy)
.init(0u32)
.code(&self.adder_code)
.returns(ReturnsNewAddress)
.returns(ReturnsNewBech32Address)
.prepare_async()
.run()
.await;

let new_address_bech32 = bech32::encode(&new_address);
println!("new address: {new_address_bech32}");

let new_address_expr = format!("bech32:{new_address_bech32}");
self.state.set_adder_address(&new_address_expr);
println!("new address: {new_address}");
self.state.set_adder_address(new_address);
}

async fn multi_deploy(&mut self, count: &u8) {
Expand All @@ -121,25 +118,23 @@ impl AdderInteract {
.init(0u32)
.code(&self.adder_code)
.gas(NumExpr("70,000,000"))
.returns(ReturnsNewAddress)
.returns(ReturnsNewBech32Address)
});
}

let results = buffer.run().await;
for result in results {
let new_address_bech32 = bech32::encode(&result);
println!("new address: {new_address_bech32}");
for new_address in results {
println!("new address: {new_address}");

let new_address_expr = format!("bech32:{new_address_bech32}");
self.state.set_adder_address(&new_address_expr);
self.state.set_adder_address(new_address);
}
}

async fn feed_contract_egld(&mut self) {
self.interactor
.tx()
.from(&self.wallet_address)
.to(self.state.adder().to_address())
.to(self.state.current_adder_address())
.egld(NumExpr("0,050000000000000000"))
.prepare_async()
.run()
Expand All @@ -150,7 +145,7 @@ impl AdderInteract {
self.interactor
.tx()
.from(&self.wallet_address)
.to(self.state.adder().to_address())
.to(self.state.current_adder_address())
.typed(adder_proxy::AdderProxy)
.add(value)
.prepare_async()
Expand All @@ -164,7 +159,7 @@ impl AdderInteract {
let sum = self
.interactor
.query()
.to(self.state.adder().to_address())
.to(self.state.current_adder_address())
.typed(adder_proxy::AdderProxy)
.sum()
.returns(ReturnsResultConv::<RustBigUint>::new())
Expand Down
20 changes: 8 additions & 12 deletions contracts/examples/adder/interact/src/basic_interact_state.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use crate::{ContractInfo, StaticApi};
use multiversx_sc_snippets::imports::*;
use serde::{Deserialize, Serialize};
use std::{
io::{Read, Write},
Expand All @@ -8,12 +8,10 @@ use std::{
/// State file
const STATE_FILE: &str = "state.toml";

pub type AdderContract = ContractInfo<adder::Proxy<StaticApi>>;

/// Multisig Interact state
#[derive(Debug, Default, Serialize, Deserialize)]
pub struct State {
adder_address: Option<String>,
adder_address: Option<Bech32Address>,
}

impl State {
Expand All @@ -30,17 +28,15 @@ impl State {
}

/// Sets the adder address
pub fn set_adder_address(&mut self, address: &str) {
self.adder_address = Some(String::from(address));
pub fn set_adder_address(&mut self, address: Bech32Address) {
self.adder_address = Some(address);
}

/// Returns the adder contract
pub fn adder(&self) -> AdderContract {
AdderContract::new(
self.adder_address
.clone()
.expect("no known adder contract, deploy first"),
)
pub fn current_adder_address(&self) -> &Bech32Address {
self.adder_address
.as_ref()
.expect("no known adder contract, deploy first")
}
}

Expand Down
51 changes: 21 additions & 30 deletions contracts/examples/multisig/interact/src/multisig_interact.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ use multisig_interact_state::State;

use multiversx_sc_snippets::imports::*;

const SYSTEM_SC_BECH32: &str = "erd1qqqqqqqqqqqqqqqpqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqzllls8a5w6u";
const INTERACTOR_SCENARIO_TRACE_PATH: &str = "interactor_trace.scen.json";

#[tokio::main]
Expand Down Expand Up @@ -76,8 +75,7 @@ async fn main() {

struct MultisigInteract {
interactor: Interactor,
wallet_address: Address,
system_sc_address: Address,
wallet_address: Bech32Address,
collection_token_identifier: String,
multisig_code: BytesValue,
state: State,
Expand All @@ -98,8 +96,7 @@ impl MultisigInteract {

Self {
interactor,
wallet_address,
system_sc_address: bech32::decode(SYSTEM_SC_BECH32),
wallet_address: wallet_address.into(),
collection_token_identifier: String::new(),
multisig_code,
state: State::load_state(),
Expand Down Expand Up @@ -152,16 +149,14 @@ impl MultisigInteract {
.init(quorum, board)
.code(&self.multisig_code)
.gas(NumExpr("100,000,000"))
.returns(ReturnsNewAddress)
.returns(ReturnsNewBech32Address)
.prepare_async()
.run()
.await;

let new_address_bech32 = bech32::encode(&new_address);
println!("new address: {new_address_bech32}");
println!("new address: {new_address}");

let new_address_expr = format!("bech32:{new_address_bech32}");
self.state.set_multisig_address(&new_address_expr);
self.state.set_multisig_address(new_address);
}

async fn multi_deploy(&mut self, count: &u8) {
Expand All @@ -182,17 +177,14 @@ impl MultisigInteract {
.init(quorum, board.clone())
.code(&self.multisig_code)
.gas(NumExpr("70,000,000"))
.returns(ReturnsNewAddress)
.returns(ReturnsNewBech32Address)
});
}

let results = buffer.run().await;
for result in results {
let new_address_bech32 = bech32::encode(&result);
println!("new address: {new_address_bech32}");

let new_address_expr = format!("bech32:{new_address_bech32}");
self.state.set_multisig_address(&new_address_expr);
for new_address in results {
println!("new address: {new_address}");
self.state.set_multisig_address(new_address);
}
}

Expand All @@ -202,7 +194,7 @@ impl MultisigInteract {
let eve = test_wallets::eve();

MultiValueVec::from([
self.wallet_address.clone(),
self.wallet_address.to_address(),
carol.address().to_bytes().into(),
dan.address().to_bytes().into(),
eve.address().to_bytes().into(),
Expand All @@ -213,7 +205,7 @@ impl MultisigInteract {
self.interactor
.tx()
.from(&self.wallet_address)
.to(self.state.multisig().to_address())
.to(self.state.current_multisig_address())
.egld(BigUint::from(50_000_000_000_000_000u64)) // 0,05 or 5 * 10^16
.prepare_async()
.run()
Expand All @@ -229,7 +221,7 @@ impl MultisigInteract {
self.interactor
.tx()
.from(&self.wallet_address)
.to(self.state.multisig().to_address())
.to(self.state.current_multisig_address())
.gas(gas_expr)
.typed(multisig_proxy::MultisigProxy)
.perform_action_endpoint(action_id)
Expand All @@ -241,8 +233,6 @@ impl MultisigInteract {
}

async fn perform_actions(&mut self, action_ids: Vec<usize>, gas_expr: u64) {
let multisig_address = self.state.multisig().to_address();

let mut actions_no_quorum_reached = Vec::new();
for &action_id in &action_ids {
if self.quorum_reached(action_id).await {
Expand All @@ -256,10 +246,11 @@ impl MultisigInteract {

let from = &self.wallet_address;
let mut buffer = self.interactor.homogenous_call_buffer();
let multisig_address = self.state.current_multisig_address();
for action_id in action_ids {
buffer.push_tx(|tx| {
tx.from(from)
.to(&multisig_address)
.to(multisig_address)
.gas(gas_expr)
.typed(multisig_proxy::MultisigProxy)
.perform_action_endpoint(action_id)
Expand All @@ -283,7 +274,7 @@ impl MultisigInteract {
async fn quorum_reached(&mut self, action_id: usize) -> bool {
self.interactor
.query()
.to(self.state.multisig().to_address())
.to(self.state.current_multisig_address())
.typed(multisig_proxy::MultisigProxy)
.quorum_reached(action_id)
.returns(ReturnsResult)
Expand All @@ -295,7 +286,7 @@ impl MultisigInteract {
async fn signed(&mut self, signer: &Address, action_id: usize) -> bool {
self.interactor
.query()
.to(self.state.multisig().to_address())
.to(self.state.current_multisig_address())
.typed(multisig_proxy::MultisigProxy)
.signed(signer, action_id)
.returns(ReturnsResult)
Expand All @@ -306,7 +297,6 @@ impl MultisigInteract {

async fn sign(&mut self, action_ids: &[usize]) {
println!("signing actions `{action_ids:?}`...");
let multisig_address = self.state.multisig().to_address();

let mut pending_signers = Vec::<(Address, usize)>::new();
for &action_id in action_ids {
Expand All @@ -323,10 +313,11 @@ impl MultisigInteract {
}

let mut buffer = self.interactor.homogenous_call_buffer();
let multisig_address = self.state.current_multisig_address();
for (signer, action_id) in pending_signers {
buffer.push_tx(|tx| {
tx.from(signer)
.to(&multisig_address)
.to(multisig_address)
.gas(15_000_000u64)
.typed(multisig_proxy::MultisigProxy)
.sign(action_id)
Expand All @@ -350,7 +341,7 @@ impl MultisigInteract {
self.interactor
.tx()
.from(&self.wallet_address)
.to(self.state.multisig().to_address())
.to(self.state.current_multisig_address())
.gas(NumExpr("30,000,000"))
.typed(multisig_proxy::MultisigProxy)
.dns_register(dns_address, name)
Expand All @@ -365,7 +356,7 @@ impl MultisigInteract {
let quorum = self
.interactor
.query()
.to(self.state.multisig().to_address())
.to(self.state.current_multisig_address())
.typed(multisig_proxy::MultisigProxy)
.quorum()
.returns(ReturnsResult)
Expand All @@ -380,7 +371,7 @@ impl MultisigInteract {
let board = self
.interactor
.query()
.to(self.state.multisig().to_address())
.to(self.state.current_multisig_address())
.typed(multisig_proxy::MultisigProxy)
.num_board_members()
.returns(ReturnsResult)
Expand Down
Loading

0 comments on commit fafe621

Please sign in to comment.