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).

Addresses & Chain IDs

Portal Contract Addresses

Which portal to use based on your destination chain

Portal TypeSupported ChainsContract Address
Portal (NTT/Wormhole)Arbitrum, Optimism0xD925C84b55E4e44a53749fF5F2a5A13F63D128fd
Portal Lite (Hyperlane)Plume, HyperEVM, Linea, Mantra0x36f586A30502AE3afb555b8aA4dCc05d233c2ecE

Token Addresses

Same addresses across all supported chains

TokenAddress
$M Token0x866A2BF4E572CbcF37D5071A7a58503Bfb36be1b
w$M Token0x437cc33344a0B27A429f795ff6B469C72698B291

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.

Chain IDs

ChainEVM Chain IDWormhole Chain IDHyperlane
Ethereum12-
Arbitrum One4216123-
Optimism1024-
Plume98866
HyperEVM999
Mantra5888
Linea59144

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).