Skip to main content
The MUSD bridge is powered by Wormhole’s Native Token Transfer (NTT) protocol, which enables secure cross-chain transfers while maintaining token fungibility.

Overview

Wormhole’s NTT protocol provides a secure and efficient way to transfer MUSD tokens across different blockchain networks while maintaining fungibility and security guarantees.
For user-facing documentation about the MUSD bridge, see the MUSD Bridge page.

Integration Guide

Understanding NTT

The Native Token Transfer (NTT) protocol by Wormhole ensures:
  • Token Fungibility: MUSD maintains its properties across chains
  • Security: Multi-guardian validation system
  • Reliability: Battle-tested cross-chain infrastructure
  • Atomic Transfers: Either completes fully or reverts entirely

Key Features

Cross-Chain Transfer

Move MUSD seamlessly between supported blockchain networks

Security Validation

Multi-signature validation by Wormhole guardians

Token Fungibility

MUSD retains all properties across chains

Developer Friendly

Simple integration with existing smart contracts

Smart Contract Integration

Prerequisites

Before integrating with the MUSD bridge:
  1. Understand the Wormhole NTT documentation
  2. Review MUSD token contract addresses
  3. Set up Wormhole SDK in your project

Basic Transfer Flow

1

Approve Token Transfer

User approves the NTT contract to spend their MUSD tokens.
IERC20(musdToken).approve(nttManagerAddress, amount);
2

Initiate Transfer

Call the NTT Manager contract to initiate the cross-chain transfer.
INttManager(nttManagerAddress).transfer(
  amount,
  targetChain,
  recipientAddress
);
3

Wait for Validation

Wormhole guardians validate the transfer on the source chain.
4

Claim on Destination

Tokens become available on the destination chain after validation.

Example Integration

import { Wormhole } from '@wormhole-foundation/sdk';

async function bridgeMUSD(
  amount: bigint,
  sourceChain: string,
  targetChain: string,
  recipientAddress: string
) {
  const wormhole = new Wormhole();
  
  // Initiate transfer
  const transfer = await wormhole.ntt.transfer({
    token: MUSD_TOKEN_ADDRESS,
    amount: amount,
    recipient: recipientAddress,
    sourceChain: sourceChain,
    targetChain: targetChain
  });
  
  // Wait for confirmation
  const receipt = await transfer.wait();
  
  return receipt;
}

Contract Addresses

Always verify contract addresses from official sources before integrating.
MUSD and NTT contract addresses will be published on the official documentation once deployed.

Best Practices

Gas Optimization

Cross-chain transfers require gas on both source and destination chains. Ensure users have sufficient native tokens on both chains.

Error Handling

try {
  const transfer = await bridgeMUSD(amount, sourceChain, targetChain, recipient);
  console.log('Transfer initiated:', transfer.sequence);
} catch (error) {
  if (error.code === 'INSUFFICIENT_ALLOWANCE') {
    // Handle approval error
  } else if (error.code === 'INSUFFICIENT_BALANCE') {
    // Handle balance error
  }
}

Monitoring Transfers

Use Wormhole’s APIs to track transfer status:
const status = await wormhole.getTransferStatus(sequence, sourceChain);
console.log('Transfer status:', status);

Resources

Support

For technical support and questions:

Build docs developers (and LLMs) love