Skip to content

Commit

Permalink
multi action test
Browse files Browse the repository at this point in the history
  • Loading branch information
dorin-iancu committed Aug 8, 2024
1 parent 480ec76 commit ca820a7
Show file tree
Hide file tree
Showing 2 changed files with 78 additions and 2 deletions.
11 changes: 10 additions & 1 deletion contracts/multisig-improved/src/action_types/propose.rs
Original file line number Diff line number Diff line change
Expand Up @@ -73,11 +73,16 @@ pub trait ProposeModule:
let own_shard = self.blockchain().get_shard_of_address(&own_sc_address);
match action {
Action::SendTransferExecuteEgld(call_data) => {
let other_sc_shard = self.blockchain().get_shard_of_address(&call_data.to);
require!(
call_data.egld_amount > 0 || !call_data.endpoint_name.is_empty(),
"proposed action has no effect"
);

if cfg!(debug_assertions) {
return;
}

let other_sc_shard = self.blockchain().get_shard_of_address(&call_data.to);
require!(
own_shard == other_sc_shard,
ALL_TRANSFER_EXEC_SAME_SHARD_ERR_MSG
Expand All @@ -86,6 +91,10 @@ pub trait ProposeModule:
Action::SendTransferExecuteEsdt(call_data) => {
require!(!call_data.tokens.is_empty(), "No tokens to transfer");

if cfg!(debug_assertions) {
return;
}

let other_sc_shard = self.blockchain().get_shard_of_address(&call_data.to);
require!(
own_shard == other_sc_shard,
Expand Down
69 changes: 68 additions & 1 deletion contracts/multisig-improved/tests/ms_improved_tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ use can_execute_mock::CanExecuteMock;
use ms_improved_setup::*;
use multisig_improved::{
common_types::{
action::{Action, CallActionData},
signature::{ActionType, SignatureArg, SignatureType},
user_role::UserRole,
},
Expand All @@ -16,8 +17,9 @@ use multisig_improved::{
Multisig,
};
use multiversx_sc::{
codec::TopEncode,
imports::OptionalValue,
types::{FunctionCall, ManagedArgBuffer, MultiValueEncoded},
types::{FunctionCall, ManagedArgBuffer, ManagedBuffer, ManagedVec, MultiValueEncoded},
};
use multiversx_sc_scenario::{
managed_address, managed_biguint, managed_buffer, rust_biguint, DebugApi,
Expand Down Expand Up @@ -302,6 +304,71 @@ fn transfer_execute_sc_call_test() {
.assert_ok();
}

#[test]
fn transfer_execute_batch_test() {
let mut ms_setup = MsImprovedSetup::new(multisig_improved::contract_obj, adder::contract_obj);

let adder_addr = ms_setup.adder_wrapper.address_ref().clone();
let mut group_id = 0;
ms_setup
.b_mock
.execute_tx(
&ms_setup.first_board_member,
&ms_setup.ms_wrapper,
&rust_biguint!(0),
|sc| {
let mut args = ManagedVec::new();
let mut encoded_arg = ManagedBuffer::<DebugApi>::new();
let _ = 5u32.top_encode(&mut encoded_arg);
args.push(encoded_arg);

let single_action = Action::SendTransferExecuteEgld(CallActionData {
to: managed_address!(&adder_addr),
egld_amount: managed_biguint!(0),
opt_gas_limit: None,
endpoint_name: managed_buffer!(b"add"),
arguments: args,
});

let mut multi_action_vec = MultiValueEncoded::new();
multi_action_vec.push(single_action.clone());
multi_action_vec.push(single_action);

group_id = sc.propose_batch(multi_action_vec);
},
)
.assert_ok();

let signer_addr = ms_setup.second_board_member.clone();
ms_setup
.b_mock
.execute_tx(
&ms_setup.second_board_member,
&ms_setup.ms_wrapper,
&rust_biguint!(0),
|sc| {
let mut signatures = MultiValueEncoded::new();
signatures.push(SignatureArg {
user_address: managed_address!(&signer_addr),
nonce: 0,
action_type: ActionType::Group,
raw_sig_bytes: managed_buffer!(b"signature"),
signature_type: SignatureType::Ed25519, // unused
});

sc.sign_batch_and_perform(group_id, signatures)
},
)
.assert_ok();

ms_setup
.b_mock
.execute_query(&ms_setup.adder_wrapper, |sc| {
assert_eq!(sc.sum().get(), 10);
})
.assert_ok();
}

#[test]
fn add_can_execute_module_test() {
let mut ms_setup = MsImprovedSetup::new(multisig_improved::contract_obj, adder::contract_obj);
Expand Down

0 comments on commit ca820a7

Please sign in to comment.