Skip to content

EvmAddress ​

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.

ts
import type { EvmAddress } from 'fuels';

const evmAddress: EvmAddress = {
  bits: Bits256,
};
See code in context

Creating an EVM Address ​

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:

ts
import type { EvmAddress } from 'fuels';
import { Address } from 'fuels';

const b256Address = '0xbebd3baab326f895289ecbd4210cf886ce41952316441ae4cac35f00f0e882a6';

const address = Address.fromB256(b256Address);

const evmAddress: EvmAddress = address.toEvmAddress();
See code in context

Using an EVM Address ​

The EvmAddress type can be integrated with your contract calls. Consider the following contract that can compare and return an EVM Address:

ts
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
    }
}
See code in context

The EvmAddress type can be used with the SDK and passed to the contract function as follows:

ts
import type { EvmAddress } from 'fuels';

const evmAddress: EvmAddress = {
  bits: Bits256,
};

const { value } = await contract.functions.echo_address_comparison(evmAddress).simulate();

expect(value).toBeTruthy();
See code in context

And to validate the returned value:

ts
import type { EvmAddress } from 'fuels';

const evmAddress: EvmAddress = {
  bits: Bits256,
};

const { value } = await contract.functions.echo_address().simulate();

expect(value).toEqual(evmAddress);
See code in context