Transceivers Contracts Reference (EVM)#
The NTT Transceiver contracts are responsible for sending and receiving messages between chains as part of the NTT protocol. They support multiple verification methods and operate alongside the NTT Manager to enable cross-chain token transfers.
Structure Overview#
The NTT Transceiver system is built using a layered inheritance structure with the base Transceiver contract providing common functionality and specific implementations like WormholeTransceiver adding protocol-specific features.
WormholeTransceiver.sol
├── IWormholeTransceiver.sol
├── IWormholeReceiver.sol
└── WormholeTransceiverState.sol
├── IWormholeTransceiverState.sol
└── Transceiver.sol
├── ITransceiver.sol
├── PausableOwnable.sol
├── ReentrancyGuardUpgradeable.sol
└── Implementation.sol
Key Components:
Transceiver.sol: Base abstract contract providing common transceiver functionality including message transmission, ownership management, and upgrade capabilities.WormholeTransceiver.sol: Concrete implementation for Wormhole protocol, handling message verification through Wormhole Core and supporting multiple delivery methods (standard relaying, custom relaying, manual).WormholeTransceiverState.sol: State management contract for Wormhole-specific storage including peer registration, relaying configuration, and VAA consumption tracking.PausableOwnable.sol: Provides ownership and emergency pause functionality.ReentrancyGuardUpgradeable.sol: Protects against reentrancy attacks in an upgradeable context.Implementation.sol: Handles proxy implementation logic for upgradeable contracts.
State Variables#
Core Identification#
nttManageraddress: Immutable address of the NTT Manager that this transceiver is tied to.nttManagerTokenaddress: Immutable address of the token associated with the NTT deployment.deployeraddress: Immutable address of the contract deployer.
Version#
WORMHOLE_TRANSCEIVER_VERSIONstring: Version string of the WormholeTransceiver implementation.
Messaging and Relaying Configuration#
consistencyLeveluint8: Immutable Wormhole consistency level for message finality.wormholeIWormhole: Immutable reference to the Wormhole Core bridge contract.wormholeRelayerIWormholeRelayer: Immutable reference to the relayer contract.specialRelayerISpecialRelayer: Immutable reference to a custom relayer contract.gasLimituint256: Immutable gas limit for cross-chain message delivery.
Peer Configuration and Replay Protection#
WORMHOLE_CONSUMED_VAAS_SLOTmapping(bytes32 ⇒ bool): Tracks consumed VAA hashes for replay protection. Exposed via isVAAConsumed.WORMHOLE_PEERS_SLOTmapping(uint16 ⇒ bytes32): Wormhole chain ID → peer transceiver address. Exposed via getWormholePeer.WORMHOLE_RELAYING_ENABLED_CHAINS_SLOTmapping(uint16 ⇒ BooleanFlag): Per-chain flag for enabling standard relaying. Exposed via isWormholeRelayingEnabled.SPECIAL_RELAYING_ENABLED_CHAINS_SLOTmapping(uint16 ⇒ BooleanFlag): Per-chain flag for enabling special relaying. Exposed via isSpecialRelayingEnabled.WORMHOLE_EVM_CHAIN_IDSmapping(uint16 ⇒ BooleanFlag): Per-chain EVM-compatibility flag used to choose the relaying path. Exposed via isWormholeEvmChain.
Events#
NotPaused#
Emitted when the contract is unpaused. (Defined in PausableUpgradeable.sol)
Parameters
notPaused bool
Whether the contract is not paused.
OwnershipTransferred#
Emitted when ownership is transferred. (Defined in OwnableUpgradeable.sol)
Parameters
previousOwner address
The address of the previous owner.
newOwner address
The address of the new owner.
Paused#
Emitted when the contract is paused. (Defined in PausableUpgradeable.sol)
Parameters
paused bool
Whether the contract is paused.
PauserTransferred#
Emitted when the pauser capability is transferred. (Defined in PausableUpgradeable.sol)
Parameters
oldPauser address
The address of the previous pauser.
newPauser address
The address of the new pauser.
ReceivedMessage#
Emitted when a message is received. (Defined in IWormholeTransceiver.sol)
event ReceivedMessage(
bytes32 digest,
uint16 emitterChainId,
bytes32 emitterAddress,
uint64 sequence
)
Parameters
digest bytes32
The digest of the message.
emitterChainId uint16
The chain ID of the emitter.
emitterAddress bytes32
The address of the emitter.
sequence uint64
The sequence of the message.
ReceivedRelayedMessage#
Emitted when a relayed message is received. (Defined in IWormholeTransceiver.sol)
Parameters
digest bytes32
The digest of the message.
emitterChainId uint16
The chain ID of the emitter.
emitterAddress bytes32
The address of the emitter.
RelayingInfo#
Emitted when a message is sent from the transceiver. (Defined in IWormholeTransceiverState.sol)
Parameters
relayingType uint8
The type of relaying.
refundAddress bytes32
The refund address for unused gas.
deliveryPayment uint256
The amount of ether sent along with the tx to cover the delivery fee.
SendTransceiverMessage#
Emitted when a message is sent from the transceiver. (Defined in IWormholeTransceiver.sol)
event SendTransceiverMessage(
uint16 recipientChain,
TransceiverStructs.TransceiverMessage message
)
Parameters
recipientChain uint16
The chain ID of the recipient.
message TransceiverStructs.TransceiverMessage
The message.
TransceiverMessage type
sourceNttManagerAddress bytes32
The address of the source NTT Manager.
recipientNttManagerAddress bytes32
The address of the recipient NTT Manager.
nttManagerPayload bytes
The NTT Manager payload.
transceiverPayload bytes
The transceiver-specific payload.
SetIsSpecialRelayingEnabled#
Emitted when special relaying is enabled for the given chain. (Defined in IWormholeTransceiverState.sol)
Parameters
chainId uint16
The chain ID to set.
isRelayingEnabled bool
A boolean indicating whether special relaying is enabled.
SetIsWormholeEvmChain#
Emitted when the EVM-compatibility flag is set for a chain. (Defined in IWormholeTransceiverState.sol)
Parameters
chainId uint16
The chain ID to set.
isEvm bool
A boolean indicating whether relaying is enabled.
SetIsWormholeRelayingEnabled#
Emitted when relaying is enabled for the given chain. (Defined in IWormholeTransceiverState.sol)
Parameters
chainId uint16
The chain ID to set.
isRelayingEnabled bool
A boolean indicating whether relaying is enabled.
SetWormholePeer#
Emitted when a peer transceiver is set. (Defined in IWormholeTransceiverState.sol)
Parameters
chainId uint16
The chain ID of the peer.
peerContract bytes32
The address of the peer contract.
Functions#
encodeWormholeTransceiverInstruction#
Encodes the WormholeTransceiverInstruction into a byte array. (Defined in WormholeTransceiver.sol)
function encodeWormholeTransceiverInstruction(
WormholeTransceiverInstruction memory instruction
) public pure returns (bytes memory)
Parameters
instruction WormholeTransceiverInstruction
The WormholeTransceiverInstruction to encode.
WormholeTransceiverInstruction type
shouldSkipRelayerSend bool
Whether to skip delivery via the relayer.
Returns
encoded bytes
The encoded instruction.
getMigratesImmutables#
Returns whether the contract migrates immutables during upgrades. (Defined in Implementation.sol)
Returns
migratesImmutables bool
Whether the contract migrates immutables.
getNttManagerOwner#
Returns the owner address of the NTT Manager that this transceiver is related to. (Defined in Transceiver.sol)
Returns
owner address
The owner address of the NTT Manager.
getNttManagerToken#
Returns the address of the token associated with this NTT deployment. (Defined in Transceiver.sol)
Returns
token address
The address of the token.
getTransceiverType#
Returns the string type of the transceiver. (Defined in WormholeTransceiver.sol)
Returns
transceiverType string
The type of the transceiver (e.g., "wormhole").
getWormholePeer#
Returns the peer contract address for a given chain. (Defined in WormholeTransceiverState.sol)
Parameters
chainId uint16
The chain ID to query.
Returns
peerContract bytes32
The address of the peer contract on the given chain.
initialize#
Initializes the contract implementation. Only callable through a delegate call. (Defined in Implementation.sol)
isPaused#
Returns whether the contract is currently paused. (Defined in PausableUpgradeable.sol)
Returns
paused bool
Whether the contract is paused.
isSpecialRelayingEnabled#
Returns whether special relaying is enabled for a given chain. (Defined in WormholeTransceiverState.sol)
Parameters
chainId uint16
The chain ID to query.
Returns
isEnabled bool
Whether special relaying is enabled.
isVAAConsumed#
Returns whether a VAA has been consumed. (Defined in WormholeTransceiverState.sol)
Parameters
hash bytes32
The hash of the VAA.
Returns
consumed bool
Whether the VAA has been consumed.
isWormholeEvmChain#
Returns whether a chain is EVM compatible. (Defined in WormholeTransceiverState.sol)
Parameters
chainId uint16
The chain ID to query.
Returns
isEvm bool
Whether the chain is EVM compatible.
isWormholeRelayingEnabled#
Returns whether relaying is enabled for a given chain. (Defined in WormholeTransceiverState.sol)
Parameters
chainId uint16
The chain ID to query.
Returns
isEnabled bool
Whether relaying is enabled.
migrate#
Migrates the contract to a new implementation. Only callable during upgrades through a delegate call. (Defined in Implementation.sol)
parseWormholeTransceiverInstruction#
Parses the encoded instruction and returns the instruction struct. (Defined in WormholeTransceiver.sol)
function parseWormholeTransceiverInstruction(
bytes memory encoded
) public pure returns (WormholeTransceiverInstruction memory instruction)
Parameters
encoded bytes
The encoded instruction.
Returns
instruction WormholeTransceiverInstruction
The parsed WormholeTransceiverInstruction.
WormholeTransceiverInstruction type
shouldSkipRelayerSend bool
Whether to skip delivery via the relayer.
quoteDeliveryPrice#
Fetches the delivery price for a given recipient chain transfer. (Defined in Transceiver.sol)
function quoteDeliveryPrice(
uint16 recipientChain,
TransceiverStructs.TransceiverInstruction memory instruction
) external view returns (uint256)
Parameters
recipientChain uint16
The Wormhole chain ID of the target chain.
instruction TransceiverStructs.TransceiverInstruction
An additional Instruction provided by the Transceiver to be executed on the recipient chain.
TransceiverInstruction type
index uint8
The index of the transceiver.
payload bytes
The instruction payload.
Returns
deliveryPrice uint256
The cost of delivering a message to the recipient chain, in this chain's native token.
owner#
Returns the address of the current owner. (Defined in OwnableUpgradeable.sol)
Returns
owner address
The address of the current owner.
pauser#
Returns the address of the current pauser. (Defined in PausableUpgradeable.sol)
Returns
pauser address
The address of the current pauser.
receiveMessage#
Receives an attested message from the verification layer. (Defined in WormholeTransceiver.sol)
Parameters
encodedMessage bytes
The attested message.
Emits:
ReceivedMessage
receiveWormholeMessages#
Receives and processes Wormhole messages via the relayer. Only callable by the relayer. (Defined in WormholeTransceiver.sol)
function receiveWormholeMessages(
bytes memory payload,
bytes[] memory additionalMessages,
bytes32 sourceAddress,
uint16 sourceChain,
bytes32 deliveryHash
) external payable
Parameters
payload bytes
The message payload.
additionalMessages bytes[]
Additional messages array.
sourceAddress bytes32
The source address of the message.
sourceChain uint16
The source chain ID.
deliveryHash bytes32
The delivery hash.
Emits:
ReceivedRelayedMessage
sendMessage#
Sends a message to another chain. (Defined in Transceiver.sol)
function sendMessage(
uint16 recipientChain,
TransceiverStructs.TransceiverInstruction memory instruction,
bytes memory nttManagerMessage,
bytes32 recipientNttManagerAddress,
bytes32 refundAddress
) external payable
Parameters
recipientChain uint16
The Wormhole chain ID of the recipient.
instruction TransceiverStructs.TransceiverInstruction
An additional Instruction provided by the Transceiver to be executed on the recipient chain.
TransceiverInstruction type
index uint8
The index of the transceiver.
payload bytes
The instruction payload.
nttManagerMessage bytes
A message to be sent to the nttManager on the recipient chain.
recipientNttManagerAddress bytes32
The Wormhole formatted address of the peer NTT Manager on the recipient chain.
refundAddress bytes32
The Wormhole formatted address of the refund recipient.
Emits:
SendTransceiverMessage,RelayingInfo
setIsSpecialRelayingEnabled#
Sets whether special relaying is enabled for the given chain. (Defined in WormholeTransceiverState.sol)
Parameters
chainId uint16
The Wormhole chain ID to set.
isRelayingEnabled bool
A boolean indicating whether special relaying is enabled.
Emits:
SetIsSpecialRelayingEnabled
setIsWormholeEvmChain#
Sets whether the chain is EVM compatible. (Defined in WormholeTransceiverState.sol)
Parameters
chainId uint16
The Wormhole chain ID to set.
isEvm bool
A boolean indicating whether the chain is an EVM chain.
Emits:
SetIsWormholeEvmChain
setIsWormholeRelayingEnabled#
Sets whether Wormhole relaying is enabled for the given chain. (Defined in WormholeTransceiverState.sol)
Parameters
chainId uint16
The Wormhole chain ID to set.
isRelayingEnabled bool
A boolean indicating whether relaying is enabled.
Emits:
SetIsWormholeRelayingEnabled
setWormholePeer#
Sets the Wormhole peer contract for the given chain. (Defined in WormholeTransceiverState.sol)
Parameters
chainId uint16
The Wormhole chain ID of the peer to set.
peerContract bytes32
The address of the peer contract on the given chain.
Emits:
SetWormholePeer
transferOwnership#
Transfers ownership of the contract to a new account. Can only be called by the current owner. (Defined in OwnableUpgradeable.sol)
Parameters
newOwner address
The address of the new owner.
Emits:
OwnershipTransferred
transferPauserCapability#
Transfers the ability to pause to a new account. (Defined in PausableOwnable.sol)
Parameters
newPauser address
The address of the new pauser.
Emits:
PauserTransferred
transferTransceiverOwnership#
Transfers the ownership of the transceiver to a new address. (Defined in Transceiver.sol)
Parameters
newOwner address
The address of the new owner.
Emits:
OwnershipTransferred
upgrade#
Upgrades the transceiver to a new implementation. (Defined in Transceiver.sol)
Parameters
newImplementation address
The address of the new implementation contract.
Errors#
CallerNotNttManager#
The caller is not the NttManager. (Defined in ITransceiver.sol)
Parameters
caller address
The address of the caller.
CallerNotRelayer#
The caller is not the relayer. (Defined in IWormholeTransceiverState.sol)
Parameters
caller address
The caller.
CannotRenounceTransceiverOwnership#
Error when trying renounce transceiver ownership. (Defined in ITransceiver.sol)
Parameters
currentOwner address
The current owner of the transceiver.
CannotTransferTransceiverOwnership#
Error when trying to transfer transceiver ownership. (Defined in ITransceiver.sol)
Parameters
currentOwner address
The current owner of the transceiver.
newOwner address
The new owner of the transceiver.
InvalidPauser#
The pauser is not a valid pauser account. (Defined in PausableUpgradeable.sol)
Parameters
account address
The invalid pauser account.
InvalidRelayingConfig#
Error when the relaying configuration is invalid. (Defined in IWormholeTransceiver.sol)
Parameters
chainId uint16
The chain ID that is invalid.
InvalidVaa#
Error if the VAA is invalid. (Defined in IWormholeTransceiverState.sol)
Parameters
reason string
The reason the VAA is invalid.
InvalidWormholeChainIdZero#
The chain ID cannot be zero. (Defined in IWormholeTransceiverState.sol)
InvalidWormholePeer#
Error when the peer transceiver is invalid. (Defined in IWormholeTransceiver.sol)
Parameters
chainId uint16
The chain ID of the peer.
peerAddress bytes32
The address of the invalid peer.
InvalidWormholePeerZeroAddress#
Error the peer contract cannot be the zero address. (Defined in IWormholeTransceiverState.sol)
NotMigrating#
The contract is not currently migrating. (Defined in Implementation.sol)
OnlyDelegateCall#
Function can only be called through delegate call. (Defined in Implementation.sol)
OwnableInvalidOwner#
The owner is not a valid owner account. (Defined in OwnableUpgradeable.sol)
Parameters
owner address
The invalid owner address.
OwnableUnauthorizedAccount#
The caller account is not authorized to perform an operation. (Defined in OwnableUpgradeable.sol)
Parameters
account address
The unauthorized account.
RequireContractIsNotPaused#
Contract is not paused, functionality is unblocked. (Defined in PausableUpgradeable.sol)
RequireContractIsPaused#
Contract state is paused, blocking functionality. (Defined in PausableUpgradeable.sol)
PeerAlreadySet#
Error if the peer has already been set. (Defined in IWormholeTransceiverState.sol)
Parameters
chainId uint16
The chain ID of the peer.
peerAddress bytes32
The address of the peer.
UnexpectedAdditionalMessages#
Additional messages are not allowed. (Defined in IWormholeTransceiverState.sol)
TransferAlreadyCompleted#
The transfer has already been completed. (Defined in IWormholeTransceiverState.sol)
Parameters
digest bytes32
The digest of the completed transfer message.
UnexpectedRecipientNttManagerAddress#
The recipient NTT Manager address in the message does not match this transceiver’s NTT Manager. (Defined in IWormholeTransceiverState.sol)
Parameters
recipientNttManagerAddress bytes32
The unexpected NTT Manager address from the message.
InvalidFork#
The current EVM chain ID does not match the stored chain ID, indicating a possible fork. (Defined in IWormholeTransceiverState.sol)
Parameters
expectedChainId uint256
The chain ID stored at deployment.
actualChainId uint256
The chain ID returned by the current network.