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.
Item | Chain | Type / Address |
---|---|---|
Portal (NTT/Wormhole) For Arbitrum & Optimism | All Supported Chains | 0xD925C84b55E4e44a53749fF5F2a5A13F63D128fd |
Portal Lite (Hyperlane) For Plume & HyperEVM | All Supported Chains | 0x36f586A30502AE3afb555b8aA4dCc05d233c2ecE |
$M Token | All Chains | 0x866A2BF4E572CbcF37D5071A7a58503Bfb36be1b |
w$M Token | All Chains | 0x437cc33344a0B27A429f795ff6B469C72698B291 |
EVM Chain ID | Ethereum | 1 |
Wormhole Chain ID | Ethereum | 2 |
EVM Chain ID | Arbitrum One | 42161 |
Wormhole Chain ID | Arbitrum One | 23 |
EVM Chain ID | Optimism | 10 |
Wormhole Chain ID | Optimism | 24 |
EVM Chain ID | Plume | 98866 |
EVM Chain ID | HyperEVM | 999 |
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
- 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 Web3
with your wallet.- Find the
approve
function and enter:spender (address)
: The Portal (NTT) address:0xD925C84b55E4e44a53749fF5F2a5A13F63D128fd
.amount (uint256)
: The amount to bridge, with 6 extra zeros.
- Click
Write
and confirm the transaction.
Step 2: Transfer via the Portal
- Navigate to the Portal (NTT) on Etherscan:
0xD925C84b55E4e44a53749fF5F2a5A13F63D128fd
. - Go to the
Contract
→Write as Proxy
tab and connect your wallet. - 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)
: Thebytes32
address 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
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
- Navigate to the token contract you want to bridge on Etherscan (
$M
orw$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 Proxy
tab and connect. - Find the
transferMLikeToken
function and enter:transferMLikeToken (payableAmount)
: The cross-chain fee in ETH. CallquoteTransfer
on theRead 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.
- 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
orOptimism
:- Approve: On Arbiscan/Optimistic Etherscan, go to the
$M
orw$M
token andapprove
the Portal (NTT) address:0xD925C84b55E4e44a53749fF5F2a5A13F63D128fd
. - Transfer: Go to the Portal contract (
0xD92...28fd
) and calltransferMLikeToken
. Use adestinationChainId
of2
(Wormhole ID for Ethereum).
- Approve: On Arbiscan/Optimistic Etherscan, go to the
- From
Plume
orHyperEVM
:- Approve: On the source explorer, go to the
$M
orw$M
token andapprove
the Portal Lite address:0x36f586A30502AE3afb555b8aA4dCc05d233c2ecE
. - Transfer: Go to the Portal Lite contract (
0x36f...2ecE
) and calltransferMLikeToken
. Use adestinationChainId
of1
(EVM ID for Ethereum).
- Approve: On the source explorer, go to the