pub trait AddressGenerator {
// Provided methods
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§
sourcefn 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 code and instance identifier.
§Example
struct MyAddressGenerator;
impl AddressGenerator for MyAddressGenerator {}
let my_address_generator = MyAddressGenerator{};
let addr = my_address_generator.contract_address(&api, &mut storage, 100, 1).unwrap();
assert!(addr.as_str().starts_with("cosmwasm1"));
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 creator address and salt.
§Example
struct MyAddressGenerator;
impl AddressGenerator for MyAddressGenerator {}
let my_address_generator = MyAddressGenerator{};
let creator1 = api.addr_canonicalize(&api.addr_make("creator1").to_string()).unwrap();
let creator2 = api.addr_canonicalize(&api.addr_make("creator2").to_string()).unwrap();
let salt1 = [0xc0,0xff,0xee];
let salt2 = [0xbe,0xef];
let chs = Checksum::generate(&[1]);
let addr11 = my_address_generator.predictable_contract_address(&api, &mut storage, 1, 0, chs.as_slice(), &creator1, &salt1).unwrap();
let addr12 = my_address_generator.predictable_contract_address(&api, &mut storage, 1, 0, chs.as_slice(), &creator1, &salt2).unwrap();
let addr21 = my_address_generator.predictable_contract_address(&api, &mut storage, 1, 0, chs.as_slice(), &creator2, &salt1).unwrap();
let addr22 = my_address_generator.predictable_contract_address(&api, &mut storage, 1, 0, chs.as_slice(), &creator2, &salt2).unwrap();
assert_ne!(addr11, addr12);
assert_ne!(addr11, addr21);
assert_ne!(addr11, addr22);
assert_ne!(addr12, addr21);
assert_ne!(addr12, addr22);
assert_ne!(addr21, addr22);