Trait cw_multi_test::AddressGenerator
source · pub trait AddressGenerator {
// Provided methods
fn next_address(&self, storage: &mut dyn Storage) -> Addr { ... }
fn contract_address(
&self,
_api: &dyn Api,
_storage: &mut dyn Storage,
_code_id: u64,
instance_id: u64
) -> AnyResult<Addr> { ... }
fn predictable_contract_address(
&self,
_api: &dyn Api,
_storage: &mut dyn Storage,
_code_id: u64,
_instance_id: u64,
_checksum: &[u8],
_creator: &CanonicalAddr,
salt: &[u8]
) -> AnyResult<Addr> { ... }
}Expand description
Common address generator interface.
The default implementation of this trait generates fully predictable addresses, no matter if contract_address or predictable_contract_address is used, but users should not make any assumptions about the value of the generated address.
Provided Methods§
fn next_address(&self, storage: &mut dyn Storage) -> Addr
contract_address or predictable_contract_address instead; will be removed in version 1.0.0sourcefn contract_address(
&self,
_api: &dyn Api,
_storage: &mut dyn Storage,
_code_id: u64,
instance_id: u64
) -> AnyResult<Addr>
fn contract_address( &self, _api: &dyn Api, _storage: &mut dyn Storage, _code_id: u64, instance_id: u64 ) -> AnyResult<Addr>
Generates a non-predictable contract address, just like the real-life chain
returns contract address after its instantiation.
Address generated by this function is returned as a result of processing
WasmMsg::Instantiate message.
The default implementation generates a contract address based on contract’s instance identifier only.
§Example
struct MyAddressGenerator;
impl AddressGenerator for MyAddressGenerator {}
let my_address_generator = MyAddressGenerator{};
let addr = my_address_generator.contract_address(&api, &mut storage, 100, 0).unwrap();
assert_eq!(addr.to_string(),"contract0");
let addr = my_address_generator.contract_address(&api, &mut storage, 100, 1).unwrap();
assert_eq!(addr.to_string(),"contract1");
let addr = my_address_generator.contract_address(&api, &mut storage, 200, 5).unwrap();
assert_eq!(addr.to_string(),"contract5");
let addr = my_address_generator.contract_address(&api, &mut storage, 200, 6).unwrap();
assert_eq!(addr.to_string(),"contract6");sourcefn predictable_contract_address(
&self,
_api: &dyn Api,
_storage: &mut dyn Storage,
_code_id: u64,
_instance_id: u64,
_checksum: &[u8],
_creator: &CanonicalAddr,
salt: &[u8]
) -> AnyResult<Addr>
fn predictable_contract_address( &self, _api: &dyn Api, _storage: &mut dyn Storage, _code_id: u64, _instance_id: u64, _checksum: &[u8], _creator: &CanonicalAddr, salt: &[u8] ) -> AnyResult<Addr>
Generates a predictable contract address, just like the real-life chain
returns contract address after its instantiation using MsgInstantiateContract2 message.
Address generated by this function is returned as a result of processing
WasmMsg::Instantiate2 message.
The default implementation generates a contract address based on provided salt only.
§Example
struct MyAddressGenerator;
impl AddressGenerator for MyAddressGenerator {}
let my_address_generator = MyAddressGenerator{};
let addr = my_address_generator.predictable_contract_address(&api, &mut storage, 100, 0, &[0], &creator, &[0]).unwrap();
assert_eq!(addr.to_string(),"contract00");
let addr = my_address_generator.predictable_contract_address(&api, &mut storage, 100, 1, &[1], &creator, &[0]).unwrap();
assert_eq!(addr.to_string(),"contract00");
let addr = my_address_generator.predictable_contract_address(&api, &mut storage, 200, 0, &[2], &creator, &[1]).unwrap();
assert_eq!(addr.to_string(),"contract01");
let addr = my_address_generator.predictable_contract_address(&api, &mut storage, 200, 1, &[3], &creator, &[1]).unwrap();
assert_eq!(addr.to_string(),"contract01");