0xa5::address_tracker
Q: why addresses are stored as Strings? Q: why chains are Strings?
InterchainAddressTracker
trusted_address
is_trusted_address
new
set_trusted_address
remove_trusted_address
use 0x1::ascii;
use 0x2::table;
use 0x2::tx_context;
InterchainAddressTracker
The interchain address tracker stores the trusted addresses for each chain.
struct InterchainAddressTracker has store
const EEmptyChainName: vector<u8> = [101, 109, 112, 116, 121, 32, 116, 114, 117, 115, 116, 101, 100, 32, 99, 104, 97, 105, 110, 32, 110, 97, 109, 101, 32, 105, 115, 32, 117, 110, 115, 117, 112, 112, 111, 114, 116, 101, 100];
const EEmptyTrustedAddress: vector<u8> = [101, 109, 112, 116, 121, 32, 116, 114, 117, 115, 116, 101, 100, 32, 97, 100, 100, 114, 101, 115, 115, 32, 105, 115, 32, 117, 110, 115, 117, 112, 112, 111, 114, 116, 101, 100];
const ENoAddress: vector<u8> = [97, 116, 116, 101, 109, 112, 116, 32, 116, 111, 32, 98, 111, 114, 114, 111, 119, 32, 97, 32, 116, 114, 117, 115, 116, 101, 100, 32, 97, 100, 100, 114, 101, 115, 115, 32, 98, 117, 116, 32, 105, 116, 39, 115, 32, 110, 111, 116, 32, 114, 101, 103, 105, 115, 116, 101, 114, 101, 100];
trusted_address
Get the trusted address for a chain.
public fun trusted_address(self: &address_tracker::InterchainAddressTracker, chain_name: ascii::String): &ascii::String
public fun trusted_address(
self: &InterchainAddressTracker,
chain_name: String,
): &String {
assert!(self.trusted_addresses.contains(chain_name), ENoAddress);
&self.trusted_addresses[chain_name]
}
is_trusted_address
Check if the given address is trusted for the given chain.
public fun is_trusted_address(self: &address_tracker::InterchainAddressTracker, chain_name: ascii::String, addr: ascii::String): bool
public fun is_trusted_address(
self: &InterchainAddressTracker,
chain_name: String,
addr: String,
): bool {
trusted_address(self, chain_name) == &addr
}
new
Create a new interchain address tracker.
public(friend) fun new(ctx: &mut tx_context::TxContext): address_tracker::InterchainAddressTracker
public(package) fun new(ctx: &mut TxContext): InterchainAddressTracker {
InterchainAddressTracker {
trusted_addresses: table::new(ctx),
}
}
set_trusted_address
Set the trusted address for a chain or adds it if it doesn’t exist.
public(friend) fun set_trusted_address(self: &mut address_tracker::InterchainAddressTracker, chain_name: ascii::String, trusted_address: ascii::String)
public(package) fun set_trusted_address(
self: &mut InterchainAddressTracker,
chain_name: String,
trusted_address: String,
) {
assert!(chain_name.length() > 0, EEmptyChainName);
assert!(trusted_address.length() > 0, EEmptyTrustedAddress);
if (self.trusted_addresses.contains(chain_name)) {
*&mut self.trusted_addresses[chain_name] = trusted_address;
} else {
self.trusted_addresses.add(chain_name, trusted_address);
}
}
remove_trusted_address
public(friend) fun remove_trusted_address(self: &mut address_tracker::InterchainAddressTracker, chain_name: ascii::String)
public(package) fun remove_trusted_address(
self: &mut InterchainAddressTracker,
chain_name: String,
) {
assert!(chain_name.length() > 0, EEmptyChainName);
self.trusted_addresses.remove(chain_name);
}