Router
To enable cross-chain communications among a vast number of chains, iLayer employs both Axelar and LayerZero.
On each chain, a specific Router supporting either one or both of these bridging solutions will be deployed, with the plan to add support for more (Chainlink's CCIP, Across, Everclear) in the near future.
Contracts that can call the router must be whitelisted, this is to block eventual attackers from accessing the priviledged message routing infrastructure as well as to prevent polluting the event log for the Router contracts.
When invoking the Hub or the Spoke smart contracts, the user can decide which bridge to use via a specific Bridge
enum argument. Currently available options are:
NULL
same-chain execution without any bridging, sourceChainID must match destinationChainIDLAYERZERO
only for Lz-supported chainsAXELAR
only for Ax-supported chains
The BaseRouter
is essentially an interface that defines a generic “cross-chain message router” that lets callers send arbitrary payloads to other chains via various bridge protocols. OrderHubs and Spokes pass in a Message
struct (which encodes which bridge to use, the target chain ID and receiver address, the payload bytes, any extra data and the sender) and the router emits an event when it’s broadcast or reverts if the route is not supported.
Key functionality
Bridges supported: an enum of possible cross-chain bridges (
LAYERZERO
,AXELAR
,CCIP
, etc.)send(...): payable function to dispatch
Message
via the chosen bridgeMessage struct: bundles all routing info plus arbitrary payload
Events
MessageBroadcasted
Message message
Emitted after a message is successfully enqueued for bridging, contains the full Message
struct so off-chain relayers can pick it up.
WhitelistUpdated
address indexed target, bool previousStatus, bool newStatus
Registers an update to the whitelist of contracts that can access the router.
Errors
UnsupportedBridgingRoute()
Caller specified a Bridge
enum value that this router hasn’t implemented (e.g. Bridge.WORMHOLE
if unimplemented).
NotWhitelisted
The contract trying to interact with the router is not whitelisted.
Structs & Enums (for reference)
enum Bridge {
NULL, // same chain
LAYERZERO, // LayerZero bridge
AXELAR, // Axelar bridge
CCIP, // Chainlink CCIP
ACROSS, // Across Protocol
EVERCLEAR, // Everclear
WORMHOLE // Wormhole bridge
}
struct Message {
Bridge bridge; // which bridge to use
uint32 chainId; // destination chain ID
bytes32 destination; // recipient’s address on the dest chain
bytes payload; // arbitrary data to deliver
bytes extra; // bridge-specific extra data
bytes32 sender; // sender encoded addr
}
In a nutshell: you call send(...)
with a Message
, pay any required fee and if the chosen bridge is supported the router emits MessageBroadcasted
; otherwise it reverts with UnsupportedBridgingRoute()
.
Last updated