An Ethereum Virtual Machine (EVM) Address can be represented using the EvmAddress
type. It's definition matches the Sway standard library type being a Struct
wrapper around an inner Bits256
value.
// #import { EvmAddress };
const evmAddress : EvmAddress = {
value : Bits256,
};
Icon ClipboardText
An EVM Address only has 20 bytes therefore the first 12 bytes of the Bits256
value are set to 0. Within the SDK, an Address
can be instantiated and converted to a wrapped and Sway compatible EVM Address using the toEvmAddress()
function:
// #import { EvmAddress, Address };
const b256Address = ' 0xbebd3baab326f895289ecbd4210cf886ce41952316441ae4cac35f00f0e882a6 ' ;
const address = Address. fromB256 (b256Address);
const evmAddress : EvmAddress = address. toEvmAddress ();
Icon ClipboardText
The EvmAddress
type can be integrated with your contract calls. Consider the following contract that can compare and return an EVM Address:
contract;
use std :: vm :: evm :: evm_address :: EvmAddress ;
configurable {
B256_ADDR : b256 = 0xbebd3baab326f895289ecbd4210cf886ce41952316441ae4cac35f00f0e882a6 ,
}
abi EvmTest {
fn echo_address () -> EvmAddress ;
fn echo_address_comparison (evm_addr : EvmAddress ) -> bool ;
}
impl EvmTest for Contract {
fn echo_address () -> EvmAddress {
return EvmAddress :: from (B256_ADDR);
}
fn echo_address_comparison (evm_addr : EvmAddress ) -> bool {
let evm_addr2 = EvmAddress :: from (B256_ADDR);
evm_addr == evm_addr2
}
}
Icon ClipboardText
The EvmAddress
type can be used with the SDK and passed to the contract function as follows:
// #import { EvmAddress };
const evmAddress : EvmAddress = {
value : Bits256,
};
const { value } = await contract.functions. echo_address_comparison (evmAddress). simulate ();
expect (value). toBeTruthy ();
Icon ClipboardText
And to validate the returned value:
// #import { EvmAddress };
const evmAddress : EvmAddress = {
value : Bits256,
};
const { value } = await contract.functions. echo_address (). simulate ();
expect (value). toEqual (evmAddress);
Icon ClipboardText