> ## Documentation Index
> Fetch the complete documentation index at: https://docs.whitechain.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Use the Portal bridge

> Step by step walkthrough of the Portal bridge app: connect a wallet, choose a route, set a recipient, confirm a transfer, and track it to completion.

<Note>
  The Portal app and its contracts run on Testnet: Whitechain Sepolia (chain ID 1874), Ethereum Sepolia, and Tron Nile. The app runs at [bridge.testnet.whitechain.io](https://bridge.testnet.whitechain.io). Mainnet routes and addresses are published at Mainnet launch.
</Note>

## Overview

This page walks through one Portal transfer in the app, screen by screen. Open [bridge.testnet.whitechain.io](https://bridge.testnet.whitechain.io) to follow along. For the trust model, routes, fees, limits, and contract addresses, see [Portal bridge](/build/bridge/portal-bridge).

Every route runs both ways. The screens below follow WBT from Whitechain to Ethereum. The reverse direction differs in two places, both called out below. Fees are denominated in the source network's token, and a token route asks for an approval before the transfer.

The app is a browser page that your own wallet signs for. It never holds your keys or your funds, and it never asks for them. The bridge itself is a different matter: while a transfer is in flight, your funds sit in Portal contracts that Whitechain controls. See [Custody and the alternative path](#custody-and-the-alternative-path).

## Before you start

| Requirement                      | Detail                                                                                                                                                                                                              |
| -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| A wallet                         | An EVM wallet for Ethereum and Whitechain routes. A Tron wallet for Tron routes.                                                                                                                                    |
| Whitechain Sepolia in the wallet | The app can add it for you, or add it manually. The app labels this network Whitechain Testnet on screen. See [Configure a wallet](/build/wallet/wallets).                                                          |
| Testnet WBT for gas              | WBT is the native gas token on Whitechain. Get it from the [faucet](/learn/get-started/get-testnet-wbt).                                                                                                            |
| The asset you want to move       | The Portal carries four configured assets, USDC, USDT, WBT, and ETH, and the app shows which networks each one reaches. See [Supported routes and assets](/build/bridge/portal-bridge#supported-routes-and-assets). |

## The bridge form

The form is explorable before you connect anything. You can pick networks and a token, and read the estimate line, while only the submit button stays gated.

<Frame caption="The bridge form with a source network, a destination network, and the estimate line">
  <img src="https://mintcdn.com/whitechain/18XXHoNEHT9EGb9u/images/portal/01-bridge-form.png?fit=max&auto=format&n=18XXHoNEHT9EGb9u&q=85&s=ad5bf87946c1029ad8caf942ad96aed9" alt="Portal bridge form with From set to WBT on Whitechain Testnet, To set to Ethereum Sepolia, an estimate line showing ETA, bridge fee and gas, a Send to a different address checkbox, and a Connect wallet button" width="2674" height="1558" data-path="images/portal/01-bridge-form.png" />
</Frame>

| Field                       | What it does                                                                                                        |
| --------------------------- | ------------------------------------------------------------------------------------------------------------------- |
| From                        | The source network and the token you are sending. Shows your balance once a wallet is connected, plus a Max action. |
| To                          | The destination network and the amount that arrives.                                                                |
| Swap arrows                 | The control between From and To reverses the direction.                                                             |
| Estimate line               | Estimated time, the bridge fee, and the gas for your own transaction.                                               |
| Send to a different address | Sends the funds to an address other than the connected wallet.                                                      |

### Choose the asset and the network

Both rows carry an asset chip, and selecting one opens a two-step picker. The first step is the asset.

<Frame caption="Each asset row shows the networks it reaches, and the filter narrows the list to one network">
  <img src="https://mintcdn.com/whitechain/18XXHoNEHT9EGb9u/images/portal/01a-select-asset.png?fit=max&auto=format&n=18XXHoNEHT9EGb9u&q=85&s=e45c503d9dd0c3c75f91f364e3169557" alt="Select send asset dialog with a search field and an All networks filter, listing USDC, WBT WhiteBIT Token, ETH Ethereum, and USDT Tether USD, each row showing icons for the networks that asset reaches" style={{ width: "100%", maxWidth: "440px" }} width="872" height="984" data-path="images/portal/01a-select-asset.png" />
</Frame>

Read the icons on the right of each row before you pick. They are the networks that asset reaches, so they tell you which routes exist for it without trial and error. Search filters by name, and **All networks** narrows the list to a single network.

The second step is the network, and it offers only the networks the chosen asset supports. The back arrow returns to the asset list.

<Frame caption="The network step lists only the networks the chosen asset supports">
  <img src="https://mintcdn.com/whitechain/18XXHoNEHT9EGb9u/images/portal/01b-select-network.png?fit=max&auto=format&n=18XXHoNEHT9EGb9u&q=85&s=884fb99d4ae3e0e9508334d2b400c069" alt="Select network dialog with a back arrow and a search field, listing Ethereum Sepolia with the symbol ETH and Whitechain Testnet with the symbol WBT" style={{ width: "100%", maxWidth: "440px" }} width="874" height="980" data-path="images/portal/01b-select-network.png" />
</Frame>

An asset that the Portal does not carry in the direction you want is not selectable, so a route you cannot build never reaches the point of a failed transaction.

<Note>
  The picker lists ETH, and the route behind it holds WETH on Ethereum. You supply native ETH and the app wraps it for the transfer, so you never have to obtain WETH yourself. On Whitechain the arriving ETH is a bridged ERC-20 that you add by contract address like any other bridged token, and it cannot pay gas. See [Supported routes and assets](/build/bridge/portal-bridge#supported-routes-and-assets).
</Note>

## Connect a wallet

Select **Connect wallet**. The dialog has a search field, marks a detected wallet as Installed, and scrolls through the full list.

<Columns cols={2}>
  <Frame caption="The top of the list, with MetaMask detected in this browser">
    <img src="https://mintcdn.com/whitechain/18XXHoNEHT9EGb9u/images/portal/02-connect-wallet-evm.png?fit=max&auto=format&n=18XXHoNEHT9EGb9u&q=85&s=006d30f16dee2cae24eea24266da0067" alt="Connect a wallet dialog with a search field and entries for MetaMask marked Installed, WalletConnect, Trust, Phantom, and OKX Wallet, above a link to the Whitechain Bridge Terms of Use" width="968" height="1322" data-path="images/portal/02-connect-wallet-evm.png" />
  </Frame>

  <Frame caption="The rest of the list, ending with WhiteWallet marked Coming soon">
    <img src="https://mintcdn.com/whitechain/18XXHoNEHT9EGb9u/images/portal/02-connect-wallet-evm-1.png?fit=max&auto=format&n=18XXHoNEHT9EGb9u&q=85&s=cb11cd83ae9b3c85d49a4d615e895bed" alt="The scrolled connect dialog listing OKX Wallet, Coinbase Wallet, Bitget Wallet, Rabby, and WhiteWallet marked Coming soon" width="968" height="1320" data-path="images/portal/02-connect-wallet-evm-1.png" />
  </Frame>
</Columns>

| Wallet          | In the app today                           |
| --------------- | ------------------------------------------ |
| MetaMask        | Available                                  |
| WalletConnect   | Available                                  |
| Trust           | Available                                  |
| Phantom         | Available, EVM mode only                   |
| OKX Wallet      | Available                                  |
| Coinbase Wallet | Available                                  |
| Bitget Wallet   | Available                                  |
| Rabby           | Available                                  |
| WhiteWallet     | Listed as coming soon, not connectable yet |

An EVM wallet outside the named set still connects through WalletConnect v2, so the list is a support commitment rather than a whitelist that blocks other wallets.

Phantom connects in EVM mode only: no Solana account, network, or route appears anywhere in the flow. A wallet that is not installed shows an install action instead of a connect attempt that fails.

### Tron routes need a Tron wallet

Tron routes connect through the TronLink or OKX wallet adapters.

A Tron route requires the Tron wallet, and the app never asks an EVM wallet to sign a Tron transaction, or the reverse.

<Frame caption="The Tron dialog offers an install action for a wallet it cannot detect">
  <img src="https://mintcdn.com/whitechain/18XXHoNEHT9EGb9u/images/portal/03-connect-wallet-tron.png?fit=max&auto=format&n=18XXHoNEHT9EGb9u&q=85&s=d0c964cf8d7375dfd58a163ea4892885" alt="Connect a Tron wallet dialog showing TronLink is not detected in this browser and OKX Wallet is not detected in this browser, each with an Install link" style={{ width: "100%", maxWidth: "480px" }} width="968" height="742" data-path="images/portal/03-connect-wallet-tron.png" />
</Frame>

## Switch to the source network

Your wallet has to be on the network you are sending from. When it is not, the submit button becomes a switch action naming the network you need, and no transfer can be submitted until you take it.

<Frame caption="The wallet is on Ethereum Sepolia while the transfer starts on Whitechain Sepolia, so the button offers the switch">
  <img src="https://mintcdn.com/whitechain/18XXHoNEHT9EGb9u/images/portal/04-wrong-network.png?fit=max&auto=format&n=18XXHoNEHT9EGb9u&q=85&s=8faee48e0a18eec92709272ba6c95745" alt="Portal bridge form with a connected wallet on Sepolia, a WBT balance shown under the From field, and the submit button reading Switch to Whitechain Testnet" style={{ width: "100%", maxWidth: "520px" }} width="1126" height="1080" data-path="images/portal/04-wrong-network.png" />
</Frame>

## Enter an amount

Type an amount, or select **Max**. Once there is an amount, the estimate line prices the transfer.

<Frame caption="With an amount entered, the estimate line shows the bridge fee and the gas separately">
  <img src="https://mintcdn.com/whitechain/18XXHoNEHT9EGb9u/images/portal/05-amount-and-fees.png?fit=max&auto=format&n=18XXHoNEHT9EGb9u&q=85&s=481aaf80ff34caa1d06a029cd984e546" alt="Portal bridge form with 1 WBT entered, the wallet balance and a Max action under the From field, and an estimate line showing the ETA, a bridge fee in WBT, and gas in WBT" style={{ width: "100%", maxWidth: "520px" }} width="1128" height="1116" data-path="images/portal/05-amount-and-fees.png" />
</Frame>

Max resolves to the largest amount you can actually send, which is the tightest of your balance, the remaining daily limit, and the liquidity available on the destination network.

The estimate line separates two costs that are easy to confuse. Both are denominated in the native token of the network you are sending from, so they read in WBT leaving Whitechain and in ETH leaving Ethereum.

| Line       | What it covers                                                                                                                             |
| ---------- | ------------------------------------------------------------------------------------------------------------------------------------------ |
| Bridge fee | The Portal charges no bridging fee today. On a Whitechain to Ethereum transfer this line carries the Ethereum gas the Portal pays for you. |
| Gas        | The source network gas for your own transaction, which your wallet charges you directly.                                                   |

For how the WBT figure is derived, see [Fees and limits](/build/bridge/portal-bridge#fees-and-limits).

If the amount breaks a rule, the form says which one: below the minimum, above your balance, above the remaining daily limit, or above the destination liquidity. Each case names the cause and what to do next, so a rejected amount never reaches your wallet.

## Send to a different address

Select **Send to a different address** to enter a recipient other than the connected wallet. Leave it clear and the funds arrive at the address you connected with.

<Frame caption="The recipient field validates the address against the destination network">
  <img src="https://mintcdn.com/whitechain/18XXHoNEHT9EGb9u/images/portal/06-custom-recipient.png?fit=max&auto=format&n=18XXHoNEHT9EGb9u&q=85&s=d3d149543c5bd9ae33aa251c5aee3e24" alt="Portal bridge form with the Send to a different address checkbox selected, an input labelled Enter Ethereum Sepolia wallet address, and a hint reading Funds will arrive at your connected address" style={{ width: "100%", maxWidth: "500px" }} width="1130" height="1270" data-path="images/portal/06-custom-recipient.png" />
</Frame>

The address is checked against the destination network, so a Tron address entered for an EVM destination is rejected with a specific message rather than accepted. A custom recipient asks you to confirm a second time, because the transfer cannot be reversed once it is signed.

## Review and confirm

With the wallet on the right network and a valid amount, the submit button becomes **Bridge**.

<Frame caption="On the source network with a valid amount, the form is ready to submit">
  <img src="https://mintcdn.com/whitechain/18XXHoNEHT9EGb9u/images/portal/07-ready-to-bridge.png?fit=max&auto=format&n=18XXHoNEHT9EGb9u&q=85&s=461541715a22f4905cf6f33b7210e128" alt="Portal bridge form with the wallet on Whitechain Testnet, 1 WBT entered, and an active Bridge button" style={{ width: "100%", maxWidth: "470px" }} width="1130" height="1118" data-path="images/portal/07-ready-to-bridge.png" />
</Frame>

Selecting Bridge opens the review, which is the last screen before any signature.

<Frame caption="The review screen states every value, including the bridge contract you are about to call">
  <img src="https://mintcdn.com/whitechain/18XXHoNEHT9EGb9u/images/portal/08-review-bridge.png?fit=max&auto=format&n=18XXHoNEHT9EGb9u&q=85&s=be8cf63f691c02cadd1dfc188e4d6699" alt="Review bridge dialog listing amount, route, source network and address, destination network and full recipient address, estimated time, total maximum fee, the amount received, and the bridge contract address, above a Confirm in wallet button" style={{ width: "100%", maxWidth: "470px" }} width="972" height="1140" data-path="images/portal/08-review-bridge.png" />
</Frame>

| Review field           | Why it matters                                                                                                                    |
| ---------------------- | --------------------------------------------------------------------------------------------------------------------------------- |
| Amount and You receive | What leaves and what arrives. Compare the two before signing.                                                                     |
| Route                  | The engine handling the transfer. The Portal is the only route in the app today.                                                  |
| From and To            | Both networks, and the recipient address in full rather than truncated.                                                           |
| Estimated time         | How long the transfer is expected to take.                                                                                        |
| Total fee (max)        | The ceiling on what you pay. The transfer cannot cost more than this.                                                             |
| Bridge contract        | The contract your wallet is about to call. Check it against [Contract addresses](/build/bridge/portal-bridge#contract-addresses). |

Select **Confirm in wallet**, then confirm in your wallet.

### Token routes ask for two signatures

How many signatures you give depends on what you are sending. The native token of the source network takes one, the transfer itself, which is the case for WBT leaving Whitechain, because WBT is the gas token there. A token contract takes two, first an approval and then the transfer, which is the case for the same WBT leaving Ethereum, where it is an ERC-20.

The review screen tells you which one you are in for before you sign anything.

<Frame caption="Leaving Ethereum, the review screen says two signatures follow">
  <img src="https://mintcdn.com/whitechain/18XXHoNEHT9EGb9u/images/portal/14-review-with-approval.png?fit=max&auto=format&n=18XXHoNEHT9EGb9u&q=85&s=1bce9bfc440ef16c56e698150be64115" alt="Review bridge dialog for a transfer from Ethereum Sepolia to Whitechain Testnet with the total fee shown in ETH, and a note reading that your wallet will first ask for a one-time approval of exactly this amount and then for the transfer itself" style={{ width: "100%", maxWidth: "470px" }} width="968" height="1264" data-path="images/portal/14-review-with-approval.png" />
</Frame>

The app requests an approval for the exact transfer amount, never an unlimited allowance.

The tracker then waits on that first signature before it asks for the second, so a transfer sitting at Waiting for the approval to confirm needs you to act in your wallet.

<Frame caption="The tracker waits for the approval before it requests the transfer">
  <img src="https://mintcdn.com/whitechain/18XXHoNEHT9EGb9u/images/portal/15-waiting-for-approval.png?fit=max&auto=format&n=18XXHoNEHT9EGb9u&q=85&s=f28e8f8b3e31791002bc2cf389559b2f" alt="Portal transfer tracker for 1 WBT from Ethereum Sepolia to Whitechain Testnet, showing Submitting on Ethereum Sepolia with the status Waiting for the approval to confirm" style={{ width: "100%", maxWidth: "520px" }} width="1200" height="1200" data-path="images/portal/15-waiting-for-approval.png" />
</Frame>

On a token route the Details menu carries a **Review token approvals** link as well, so you can check what you have granted.

<Warning>
  Verify the bridge contract address on the review screen against [Contract addresses](/build/bridge/portal-bridge#contract-addresses) before you sign. A transfer sent to the wrong contract cannot be recovered.
</Warning>

## Track the transfer

After you sign, the app shows a live tracker. You can close the tab: the transfer continues, and you can reopen it from **Activity**.

The tracker moves through three stages, then marks the transfer complete. The screens below show them in order.

<Frame caption="The Details menu links the origin transaction and the destination network while the transfer is in flight">
  <img src="https://mintcdn.com/whitechain/18XXHoNEHT9EGb9u/images/portal/09-transfer-details-links.png?fit=max&auto=format&n=18XXHoNEHT9EGb9u&q=85&s=41fc0c1005d567f2e8d6c911e0c0d40b" alt="Portal transfer tracker with Submitting and Confirming marked Done, Delivering to Ethereum Sepolia in progress, and an open Details menu offering View origin transaction and Watch Ethereum Sepolia for the arrival" style={{ width: "100%", maxWidth: "580px" }} width="1410" height="1334" data-path="images/portal/09-transfer-details-links.png" />
</Frame>

| Stage      | What is happening                                                                                       |
| ---------- | ------------------------------------------------------------------------------------------------------- |
| Submitting | Your transaction is being sent on the source network, and your wallet is waiting for your confirmation. |
| Confirming | The source network is confirming your transaction.                                                      |
| Sending    | The Portal has seen your deposit and is releasing the funds on the destination network.                 |
| Completed  | The funds have been sent on the destination network.                                                    |

**Details** links the source transaction and the destination network in a block explorer, so you can follow the transfer outside the app.

The app labels a transfer that runs past its expected time as delayed rather than failed, and offers the support path. Nothing is lost while it is delayed.

<Frame caption="A finished transfer is marked Completed">
  <img src="https://mintcdn.com/whitechain/18XXHoNEHT9EGb9u/images/portal/10-transfer-completed.png?fit=max&auto=format&n=18XXHoNEHT9EGb9u&q=85&s=37d86114e2e7f13158751bb57364deda" alt="Portal transfer screen showing 1 WBT from Whitechain Testnet to Ethereum Sepolia marked Completed, with View statuses, Support, and New Bridge actions" style={{ width: "100%", maxWidth: "540px" }} width="1126" height="882" data-path="images/portal/10-transfer-completed.png" />
</Frame>

Select **View statuses** to expand the full stage list on a finished transfer.

<Frame caption="The expanded stage list on a completed transfer">
  <img src="https://mintcdn.com/whitechain/18XXHoNEHT9EGb9u/images/portal/11-transfer-statuses.png?fit=max&auto=format&n=18XXHoNEHT9EGb9u&q=85&s=ec0050ffca4160d3a6145496300fea18" alt="Portal transfer screen with Submitting on Whitechain Testnet, Confirming on Whitechain Testnet, and Sending on Ethereum Sepolia all marked Done, and the transfer marked Completed" style={{ width: "100%", maxWidth: "500px" }} width="1128" height="1274" data-path="images/portal/11-transfer-statuses.png" />
</Frame>

<Note>
  A bridged token does not appear in your wallet on its own. Add the destination token by its contract address, from [Token addresses](/build/bridge/portal-bridge#token-addresses).
</Note>

### When a transfer fails

A stage that fails is marked **Failed**, and a banner names the network it failed on. The stages before it keep their state, so you can see how far the transfer got.

<Frame caption="A failed source transaction, with the retry and support actions">
  <img src="https://mintcdn.com/whitechain/18XXHoNEHT9EGb9u/images/portal/16-transfer-failed.png?fit=max&auto=format&n=18XXHoNEHT9EGb9u&q=85&s=14ac89d24e31f134d10decff61324823" alt="Portal transfer tracker showing Submitting on Ethereum Sepolia marked Done, Confirming on Ethereum Sepolia marked Failed, a banner reading that the transfer transaction failed on Ethereum Sepolia and to check your wallet activity before retrying, and Support, Try again, and New Bridge actions" style={{ width: "100%", maxWidth: "560px" }} width="1080" height="1390" data-path="images/portal/16-transfer-failed.png" />
</Frame>

| Action     | When to use it                                                                                                               |
| ---------- | ---------------------------------------------------------------------------------------------------------------------------- |
| Try again  | Retry the same transfer. Check your wallet activity first, so you do not send a second transfer for one that did go through. |
| Support    | Reach support with this transfer already on screen.                                                                          |
| New Bridge | Leave this transfer and start a different one.                                                                               |

A source transaction that fails moves no tokens, so the amount stays in your wallet. The source network still charges gas for the attempt.

A slow-mining transaction is never reported as a failed transfer.

So Failed means the transaction itself failed, not that it was taking a long time. A transfer that is merely slow stays in progress and is labelled as delayed.

## Find a past transfer

Activity in the header lists the transfers of the connected wallet, with the amount, the direction, the date, and the status. Filters narrow the list, and every row opens the same tracker as the live transfer.

<Frame caption="Activity lists the connected wallet's transfers in both directions, with status filters">
  <img src="https://mintcdn.com/whitechain/18XXHoNEHT9EGb9u/images/portal/12-activity-list.png?fit=max&auto=format&n=18XXHoNEHT9EGb9u&q=85&s=0852cbdbdd1d720647d2b7788ad47b6f" alt="Portal Activity screen with filters for All, In progress, Action needed, and Completed, above three rows of 1 WBT transfers marked Completed, two from Whitechain Testnet to Ethereum Sepolia and one from Ethereum Sepolia to Whitechain Testnet" width="2038" height="1154" data-path="images/portal/12-activity-list.png" />
</Frame>

A transfer keeps its own address, so the link survives a reload, a wallet disconnect, and a new browser session. **Action needed** collects the transfers that are waiting on you.

## Manage connected wallets

The wallet button in the header opens a popover listing what is connected. It copies the address, disconnects the wallet, and adds a second one, which is what a Tron route needs alongside an EVM wallet.

<Frame caption="The header popover manages the connected wallets">
  <img src="https://mintcdn.com/whitechain/18XXHoNEHT9EGb9u/images/portal/13-wallet-manager.png?fit=max&auto=format&n=18XXHoNEHT9EGb9u&q=85&s=876d40870d4406263b3d17e732a192a1" alt="Portal wallet manager popover showing one connected wallet with a copy action and a disconnect action, above an Add wallet button" style={{ width: "100%", maxWidth: "460px" }} width="926" height="480" data-path="images/portal/13-wallet-manager.png" />
</Frame>

## Custody and the alternative path

The transfer is not trustless, and the app states that on the form and again on the review screen.

Your funds sit in the Portal's Bridge contract on the source network until the relayer releases the matching amount from the Bridge contract on the destination network. No balance moves into a Whitechain wallet. What makes the transfer custodial is control rather than location: Whitechain administers both contracts and authorizes every release, so you depend on the operator instead of a protocol guarantee.

Two separate facts are easy to merge into one. The app never holds your keys, because your own wallet signs every transaction. The Bridge contracts hold your funds in transit, and Whitechain decides when they leave. The first fact does not soften the second, and speed is what the second one buys.

The OP Stack canonical contracts carry a second path between Ethereum and Whitechain, and it is available programmatically rather than through this app.

That path replaces the operator with an on-chain dispute game, which only Whitechain's configured challenger can play today. See [Fault proofs](/learn/network/transaction-finality#fault-proofs) for what the game currently guarantees, and [OP Stack canonical bridge](/build/bridge/bridge-assets) for how to use it. It is the slower path: a withdrawal waits out the dispute period.

## Related

* [Portal bridge](/build/bridge/portal-bridge)
* [OP Stack canonical bridge](/build/bridge/bridge-assets)
* [Configure a wallet](/build/wallet/wallets)
* [Get testnet WBT](/learn/get-started/get-testnet-wbt)
