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§

source

fn next_address(&self, storage: &mut dyn Storage) -> Addr

👎Deprecated since 0.18.0: use contract_address or predictable_contract_address instead; will be removed in version 1.0.0
source

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");
source

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");

Implementors§