Building xApps
A xApp (pronounced "zap") is a cross-chain application built on top of the Nomad Protocol.
Nomad sends messages from one chain to another in the form of raw bytes. A xApp that wishes to use Nomad will need to define the rules for sending and receiving messages for its use case.
Each cross-chain application must implement its own messaging interface. By convention, we call the contracts that implement this protocol the application's Router contracts. These Router contracts must:
Maintain a permissioned set of the contract(s) on remote chains from which it will accept messages via Nomad — this could be a single owner of the application on one chain; it could be a registry of other applications implementing the same rules on various chains
Maintain a permissioned registry of connections via the
XappConnectionManager
contract (see Connection Management).Encode messages in a standardized format, so they can be decoded by the Router contract on the destination chain
Handle messages from remote Router contracts
Dispatch messages to remote Router contracts
By implementing these pieces of functionality within a Router contract and deploying it across multiple chains, we create a working xApp using a common language and set of rules. Applications of this kind may use Nomad message passing channels as the cross-chain courier for sending and receiving messages between chains.
Connection Management
The router implements the XappConnectionClient
abstract contract. This contract provides convenience functions for working with a XAppConnectionManager
.
The XCM is the primary permissioning point for channels. It provides functions by which
xApp administrators can enroll or unenroll
Replica
contracts for inbound messagesxApp administrators can enroll or unenroll a
Home
contract for outbound messagesxApp administrators can permission or de-permission watchers
watchers can unenroll
Replica
contracts
When deploying a xApp Router
, the xApp administrators must select an existing XappConnectionManager
, or deploy their own. The address of the XappConnectionManager
must be passed to the router's initialization method.
Last updated