Skip to content
Information Circle

The Spanning Demo App is live! Check it out here:

We have also published the open-source demo code and related JavaScript utilities.

Spanning Addresses

Spanning Address Graphic


The Spanning Address standard is what allows us to easily address users, regardless of what domain they are coming from. It relies on existing domain ID standards like ChainList to provide the routing information to a user's local address.

Spanning Addresses are packed according to the schema defined below and can be generated deterministically by a 3rd party.


Here is the reduced specification for the v1 Spanning Address standard:

 * @dev This library adds interpretation of our `SpanningAddress` as follows:
 * 31    27        19                   0
 * |-----+---------+--------------------|
 * +The bottom 0-19 bytes are the local address
 * +Bytes 21-27 are left empty for future expansion
 * +Bytes 28 - 31 are the domain ID
 * +Byte 20 - the number of blocks the protocol
 *            will wait before settling the transaction

Protocol Bytes

Bytes 20-27 are reserved for packing protocol and routing parameters into Spanning Addresses. So far only byte 20 has been defined. When evaluating equality using the Spanning Address utilities, the data packed into the reserved buffer is ignored by default.

Byte 20 - Block Confirmation Wait

Byte 20 can be used to specify the number of block confirmations the Spanning Network waits before settling a transaction to the destination chain when making a Spanning Request. This value can be any uint8 value (0-255) and defaults to 0.

For example, setting Byte 20 to 27 when making a request from Ethereum to Avalanche would mean that no transaction to Avalanche is submitted unless the request is valid after 27 block confirmations after its original submission. If the block containing the original request is reverted before that point, no transaction will be submitted to Avalanche at all. Setting Byte 20 to 0 would mean that a transaction is submitted to Avalanche as soon as it is received by the relay network.


// Here is Goerli user: 0x4bd0f88ccaacffacb05c83a0fb400f90120bc7db

// Here is Ethereum user: 0x4bd0f88ccaacffacb05c83a0fb400f90120bc7db

// Here is Harmony user: 0x4bd0f88ccaacffacb05c83a0fb400f90120bc7db


More domain IDs can be found at Any domain ID currently reserved on ChainList is a valid ID on the Spanning Network for ownership (and airdrops!) even if the network isn't fully supported yet.

NetworkDomain ID
BNB Testnet0x00000061
Arbitrum One0x0000A4B1
Arbitrum Goerli[0x00066EED](