The Spanning Demo App is live! Check it out here: https://demo.spanning.network/
We have also published the open-source demo code and related JavaScript utilities.
Spanning Addresses

Background
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.
Specification
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.
Examples
// Here is Goerli user: 0x4bd0f88ccaacffacb05c83a0fb400f90120bc7db 0x0000000500000000000000004bd0f88ccaacffacb05c83a0fb400f90120bc7db // Here is Ethereum user: 0x4bd0f88ccaacffacb05c83a0fb400f90120bc7db 0x0000000100000000000000004bd0f88ccaacffacb05c83a0fb400f90120bc7db // Here is Harmony user: 0x4bd0f88ccaacffacb05c83a0fb400f90120bc7db 0x63564C4000000000000000004bd0f88ccaacffacb05c83a0fb400f90120bc7db
Domains
More domain IDs can be found at https://chainlist.org/. 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.
Network | Domain ID |
---|---|
Ethereum | 0x00000001 |
Goerli | 0x00000005 |
Polygon | 0x00000089 |
Mumbai | 0x00013881 |
Avalanche | 0x0000A86A |
Fuji | 0x0000A869 |
BNB | 0x00000038 |
BNB Testnet | 0x00000061 |
Arbitrum One | 0x0000A4B1 |
Arbitrum Goerli | [0x00066EED](https://chainlist.org/chain/421613 |