The NttManager contract is responsible for managing the token and the Transceivers. It also handles the rate-limiting and the message attestation logic. Note that each NttManager
corresponds to a single token. However, a single NttManager
can control multiple transceivers.
NttManagers do not directly publish messages. These will be wrapped in a TransceiverMessage.
[32]byte id // a unique message identifier
[32]byte sender // original message sender address
uint16 payload_len // length of the payload
[]byte payload
Note: Integrators who need to send different types of payloads should also use a unique 4-byte prefix to distinguish them from
NativeTokenTransfer
and one another.
[4]byte prefix = 0x994E5454 // 0x99'N''T''T'
uint8 decimals // number of decimals for the amount
uint64 amount // amount being transferred
[32]byte source_token // source chain token address
[32]byte recipient_address // the address of the recipient
uint16 recipient_chain // the Wormhole Chain ID of the recipient
To support integrators who may want to send additional, custom data with their transfers, this format may be extended to also include these additional, optional fields. Customizing transfers in this way ensures compatibility of the canonical portion of the payload across the ecosystem (Connect, explorers, NTT Global Accountant, etc).
In order to aid parsers in identifying your additional payload, it is recommended to start it with a unique 4-byte prefix.
uint16 additional_payload_len // length of the custom payload
[]byte additional_payload // custom payload - recommended that the first 4 bytes are a unique prefix