# Bridging M And wM Tokens

> How to manually bridge M and wrapped M (wM) tokens between Ethereum and connected networks using a block explorer.

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*

<table>
<thead>
  <tr>
    <th>
      Portal Type
    </th>
    
    <th>
      Supported Chains
    </th>
    
    <th>
      Contract Address
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <strong>
        Portal (NTT/Wormhole)
      </strong>
    </td>
    
    <td>
      Arbitrum, Optimism
    </td>
    
    <td>
      <code>
        0xD925C84b55E4e44a53749fF5F2a5A13F63D128fd
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      <strong>
        Portal Lite (Hyperlane)
      </strong>
    </td>
    
    <td>
      Plume, HyperEVM, Linea, Mantra
    </td>
    
    <td>
      <code>
        0x36f586A30502AE3afb555b8aA4dCc05d233c2ecE
      </code>
    </td>
  </tr>
</tbody>
</table>

### Token Addresses

*Same addresses across all supported chains*

<table>
<thead>
  <tr>
    <th>
      Token
    </th>
    
    <th>
      Address
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <strong>
        <code>
          $M
        </code>
        
         Token
      </strong>
    </td>
    
    <td>
      <code>
        0x866A2BF4E572CbcF37D5071A7a58503Bfb36be1b
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      <strong>
        <code>
          w$M
        </code>
        
         Token
      </strong>
    </td>
    
    <td>
      <code>
        0x437cc33344a0B27A429f795ff6B469C72698B291
      </code>
    </td>
  </tr>
</tbody>
</table>

<note>

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.

</note>

### Chain IDs

<table>
<thead>
  <tr>
    <th>
      Chain
    </th>
    
    <th>
      EVM Chain ID
    </th>
    
    <th>
      Wormhole Chain ID
    </th>
    
    <th>
      Hyperlane
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <strong>
        Ethereum
      </strong>
    </td>
    
    <td>
      <code>
        1
      </code>
    </td>
    
    <td>
      <code>
        2
      </code>
    </td>
    
    <td>
      -
    </td>
  </tr>
  
  <tr>
    <td>
      <strong>
        Arbitrum One
      </strong>
    </td>
    
    <td>
      <code>
        42161
      </code>
    </td>
    
    <td>
      <code>
        23
      </code>
    </td>
    
    <td>
      -
    </td>
  </tr>
  
  <tr>
    <td>
      <strong>
        Optimism
      </strong>
    </td>
    
    <td>
      <code>
        10
      </code>
    </td>
    
    <td>
      <code>
        24
      </code>
    </td>
    
    <td>
      -
    </td>
  </tr>
  
  <tr>
    <td>
      <strong>
        Plume
      </strong>
    </td>
    
    <td>
      <code>
        98866
      </code>
    </td>
    
    <td>
      --
    </td>
    
    <td>
      Yes
    </td>
  </tr>
  
  <tr>
    <td>
      <strong>
        HyperEVM
      </strong>
    </td>
    
    <td>
      <code>
        999
      </code>
    </td>
    
    <td>
      --
    </td>
    
    <td>
      Yes
    </td>
  </tr>
  
  <tr>
    <td>
      <strong>
        Mantra
      </strong>
    </td>
    
    <td>
      <code>
        5888
      </code>
    </td>
    
    <td>
      --
    </td>
    
    <td>
      Yes
    </td>
  </tr>
  
  <tr>
    <td>
      <strong>
        Linea
      </strong>
    </td>
    
    <td>
      <code>
        59144
      </code>
    </td>
    
    <td>
      --
    </td>
    
    <td>
      Yes
    </td>
  </tr>
</tbody>
</table>

## **Part 1: Hub to Spoke (Bridging from Ethereum)**

The process always involves two transactions: `approve` and `transferMLikeToken`.

### A. Bridging to `Arbitrum` or `Optimism` (via M0 Portal)

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

### B. Bridging to `Plume` or `HyperEVM` (via M0 Portal Lite)

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

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