Skip to content

User Guide: Bridging $M and w$M Tokens

This guide explains how to manually bridge $M and wrapped $M (w$M) tokens between Ethereum (the "Hub") and connected networks (the "Spokes") using a block explorer.

Important: The bridging system uses two different portal contracts depending on the destination chain. Always use the correct Portal address for your transaction.

Prerequisites:
  • A Web3 wallet (e.g., MetaMask).
  • Your wallet must be funded with the token you wish to bridge.
  • Your wallet must have the native currency of the source chain for gas fees (e.g., ETH on Ethereum).

Key Information: Addresses & Chain IDs

This table is your source of truth for all bridging operations.

ItemChainType / Address
Portal (NTT/Wormhole)
For Arbitrum & Optimism
All Supported Chains0xD925C84b55E4e44a53749fF5F2a5A13F63D128fd
Portal Lite (Hyperlane)
For Plume & HyperEVM
All Supported Chains0x36f586A30502AE3afb555b8aA4dCc05d233c2ecE
$M TokenAll Chains0x866A2BF4E572CbcF37D5071A7a58503Bfb36be1b
w$M TokenAll Chains0x437cc33344a0B27A429f795ff6B469C72698B291
EVM Chain IDEthereum1
Wormhole Chain IDEthereum2
EVM Chain IDArbitrum One42161
Wormhole Chain IDArbitrum One23
EVM Chain IDOptimism10
Wormhole Chain IDOptimism24
EVM Chain IDPlume98866
EVM Chain IDHyperEVM999

Note on Amounts: $M and w$M tokens use 6 decimal places. When entering an amount in a contract, add 6 zeros. To transfer 10 tokens, enter 10000000.

Part 1: Hub to Spoke (Bridging from Ethereum)

The process always involves two transactions: approve and transferMLikeToken.

A. Bridging to Arbitrum or Optimism (via M Portal)

This uses the Portal (NTT/Wormhole). The steps are the same for bridging either w$M or $M.

Step 1: Approve the Portal

  1. Navigate to the token contract you want to bridge on Etherscan:
  2. Go to the ContractWrite as Proxy (for w$M) or Write Contract (for $M) tab.
  3. Connect to Web3 with your wallet.
  4. Find the approve function and enter:
    • spender (address): The Portal (NTT) address: 0xD925C84b55E4e44a53749fF5F2a5A13F63D128fd.
    • amount (uint256): The amount to bridge, with 6 extra zeros.
  5. Click Write and confirm the transaction.

Step 2: Transfer via the Portal

  1. Navigate to the Portal (NTT) on Etherscan: 0xD925C84b55E4e44a53749fF5F2a5A13F63D128fd.
  2. Go to the ContractWrite as Proxy tab and connect your wallet.
  3. Find the transferMLikeToken function and enter:
    • transferMLikeToken (payableAmount): The cross-chain delivery fee in ETH. This must be quoted from the Wormhole relayer network.
    • amount (uint256): The exact same amount you approved.
    • sourceToken (address): The address of the token you are sending from Ethereum (e.g., 0x437cc33344a0B27A429f795ff6B469C72698B291 for w$M).
    • destinationChainId (uint16): The Wormhole Chain ID for your destination (23 for Arbitrum, 24 for Optimism).
    • destinationToken (bytes32): The bytes32 address of the token you want to receive. For w$M and $M, this is 0x000000000000000000000000<token_address_without_0x>.
    • recipient (bytes32): Your wallet address, converted to bytes32. Use a tool like Chaintool.
    • refundAddress (bytes32): Your wallet address, converted to bytes32.
  4. Click Write and confirm. Track on Wormhole Scan.

B. Bridging to Plume or HyperEVM (via M Portal Lite)

This uses the Portal Lite (Hyperlane). The steps are the same for bridging either w$M or $M.

Step 1: Approve the Portal

  1. Navigate to the token contract you want to bridge on Etherscan ($M or w$M).
  2. Follow the approval steps as above (A, Step 1), but for the spender (address), use the Portal Lite address: 0x36f586A30502AE3afb555b8aA4dCc05d233c2ecE.

Step 2: Transfer via the Portal

  1. Navigate to the Portal Lite on Etherscan: 0x36f...2ecE.
  2. Go to the ContractWrite as Proxy tab and connect.
  3. Find the transferMLikeToken function and enter:
    • transferMLikeToken (payableAmount): The cross-chain fee in ETH. Call quoteTransfer on the Read as Proxy tab to get an estimate.
    • amount (uint256): The amount you approved.
    • sourceToken (address): The address of the token you are sending from Ethereum (e.g., 0x866A...36be1b for $M).
    • destinationChainId (uint256): The EVM Chain ID for your destination (98866 for Plume, 999 for HyperEVM).
    • destinationToken (address): The address of the token on the destination chain (e.g., 0x866A...36be1b for $M on HyperEVM).
    • recipient (address): Your wallet address on the destination chain.
    • refundAddress (address): Your wallet address.
  4. Click Write and confirm. Track on the Hyperlane Explorer.

Part 2: Spoke to Hub (Bridging to Ethereum)

This is the reverse process. You will perform the transactions on the source chain's block explorer (e.g., Arbiscan, Plume Explorer).

  • From Arbitrum or Optimism:
    1. Approve: On Arbiscan/Optimistic Etherscan, go to the $M or w$M token and approve the Portal (NTT) address: 0xD925C84b55E4e44a53749fF5F2a5A13F63D128fd.
    2. Transfer: Go to the Portal contract (0xD92...28fd) and call transferMLikeToken. Use a destinationChainId of 2 (Wormhole ID for Ethereum).
  • From Plume or HyperEVM:
    1. Approve: On the source explorer, go to the $M or w$M token and approve the Portal Lite address: 0x36f586A30502AE3afb555b8aA4dCc05d233c2ecE.
    2. Transfer: Go to the Portal Lite contract (0x36f...2ecE) and call transferMLikeToken. Use a destinationChainId of 1 (EVM ID for Ethereum).