Skip to content

Latest commit

 

History

History
51 lines (38 loc) · 1.26 KB

start_prank.md

File metadata and controls

51 lines (38 loc) · 1.26 KB

start_prank

fn start_prank(target: CheatTarget, caller_address: ContractAddress)

Changes the caller address for the given target. This change can be canceled with stop_prank.

  • target - instance of CheatTarget specifying which contracts to prank.
  • caller_address - caller address to be set

For contract implementation:

// ...
#[storage]
struct Storage {
    // ...
    stored_caller_address: ContractAddress
}

#[external(v0)]
impl IContractImpl of IContract<ContractState> {
    fn set_caller_address(ref self: ContractState) {
        self.stored_caller_address.write(starknet::get_caller_address());
    }

    fn get_caller_address(self: @ContractState) -> ContractAddress {
        self.stored_caller_address.read()
    }
}
// ...

We can use start_prank in a test to change the caller address for a given contract:

use snforge_std::{start_prank, CheatTarget};

#[test]
fn test_prank() {
    // ...

    let caller_address: ContractAddress = 123.try_into().unwrap();

    start_prank(CheatTarget::One(contract_address), caller_address);

    dispatcher.set_caller_address();
    let caller_address = dispatcher.get_caller_address();
    assert(caller_address.into() == 123, 'Wrong caller address');
}