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 Type | Supported Chains | Contract Address |
|---|---|---|
| Portal (NTT/Wormhole) | Arbitrum, Optimism | 0xD925C84b55E4e44a53749fF5F2a5A13F63D128fd |
| Portal Lite (Hyperlane) | Plume, HyperEVM, Linea, Mantra | 0x36f586A30502AE3afb555b8aA4dCc05d233c2ecE |
Token Addresses
Same addresses across all supported chains
| Token | Address |
|---|---|
| $M Token | 0x866A2BF4E572CbcF37D5071A7a58503Bfb36be1b |
| w$M Token | 0x437cc33344a0B27A429f795ff6B469C72698B291 |
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
| Chain | EVM Chain ID | Wormhole Chain ID | Hyperlane |
|---|---|---|---|
| Ethereum | 1 | 2 | - |
| Arbitrum One | 42161 | 23 | - |
| Optimism | 10 | 24 | - |
| Plume | 98866 | — | ✅ |
| HyperEVM | 999 | — | ✅ |
| Mantra | 5888 | — | ✅ |
| Linea | 59144 | — | ✅ |
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
- Navigate to the token contract you want to bridge on Etherscan:
- For w$M:
0x437c...98B291 - For $M:
0x866A...36be1b
- For w$M:
- Go to the
Contract→Write as Proxy(for w$M) orWrite Contract(for $M) tab. Connect to Web3with your wallet.- Find the
approvefunction and enter:spender (address): The Portal (NTT) address:0xD925C84b55E4e44a53749fF5F2a5A13F63D128fd.amount (uint256): The amount to bridge, with 6 extra zeros.
- Click
Writeand confirm the transaction.
Step 2: Transfer via the Portal
- Navigate to the Portal (NTT) on Etherscan:
0xD925C84b55E4e44a53749fF5F2a5A13F63D128fd. - Go to the
Contract→Write as Proxytab and connect your wallet. - Find the
transferMLikeTokenfunction 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.,0x437cc33344a0B27A429f795ff6B469C72698B291for w$M).destinationChainId (uint16): The Wormhole Chain ID for your destination (23 for Arbitrum,24for Optimism).destinationToken (bytes32): Thebytes32address of the token you want to receive. For w$M and $M, this is0x000000000000000000000000<token_address_without_0x>.recipient (bytes32): Your wallet address, converted tobytes32. Use a tool like Chaintool.refundAddress (bytes32): Your wallet address, converted tobytes32.
- Click
Writeand 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
- Navigate to the token contract you want to bridge on Etherscan (
$Morw$M). - 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
- Navigate to the Portal Lite on Etherscan:
0x36f...2ecE. - Go to the
Contract→Write as Proxytab and connect. - Find the
transferMLikeTokenfunction and enter:transferMLikeToken (payableAmount): The cross-chain fee in ETH. CallquoteTransferon theRead as Proxytab 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...36be1bfor $M).destinationChainId (uint256): The EVM Chain ID for your destination (98866for Plume,999for HyperEVM).destinationToken (address): The address of the token on the destination chain (e.g.,0x866A...36be1bfor $M on HyperEVM).recipient (address): Your wallet address on the destination chain.refundAddress (address): Your wallet address.
- Click
Writeand 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
ArbitrumorOptimism:- Approve: On Arbiscan/Optimistic Etherscan, go to the
$Morw$Mtoken andapprovethe Portal (NTT) address:0xD925C84b55E4e44a53749fF5F2a5A13F63D128fd. - Transfer: Go to the Portal contract (
0xD92...28fd) and calltransferMLikeToken. Use adestinationChainIdof2(Wormhole ID for Ethereum).
- Approve: On Arbiscan/Optimistic Etherscan, go to the
- From
PlumeorHyperEVM:- Approve: On the source explorer, go to the
$Morw$Mtoken andapprovethe Portal Lite address:0x36f586A30502AE3afb555b8aA4dCc05d233c2ecE. - Transfer: Go to the Portal Lite contract (
0x36f...2ecE) and calltransferMLikeToken. Use adestinationChainIdof1(EVM ID for Ethereum).
- Approve: On the source explorer, go to the

