Prefer to see it move first? How the bridge works animates both directions.
What kind of bridge is it?
It is the OmniBridge + Arbitrary Message Bridge (AMB) design originally written by POA Network and Gnosis, deployed for PulseChain with its own validators and its own admin keys. The code still carries traces of that origin, such as special handling for Gnosis’s STAKE token. It is a lock-and-mint bridge with validator signatures — not a light-client or zero-knowledge bridge. The code calls PulseChain the “home” side and Ethereum the “foreign” side.
Which contracts make up the bridge?
The mediator and AMB addresses come from the official bridge build (pulsechain-bridge-server); the validator contracts are the ones each AMB reports in validatorContract(). Sources are verified on PulseScan and on Sourcify. All eight mediator, AMB and validator contracts are proxies — they hold the funds and settings, while the logic sits in a separate implementation contract that can be swapped (see who can change what). WPLS on Ethereum is minted and burned only by the Ethereum-side PLS mediator, which is its owner(). The bridge build also lists an older Ethereum-side WPLS, 0x97Ac4a2439A47c07ad535bb1188c989dae755341.
Two traps from the fork, explained on How PulseChain works: 0x1715a3E4A142d8b698131108995174F37aEBA10D is the bridge’s token mediator on Ethereum but the PulseX v1 factory on PulseChain, and 0x2fa878ab3f87cc1c9737fc071108f904c0b0c95d is the bridge’s validator list on Ethereum but the INC token on PulseChain.
How does a transfer from Ethereum to PulseChain work?
- You send the token to the Ethereum-side mediator (the bridge interface does this for you). The mediator locks it, checks the per-token limits and hands a message to the Ethereum AMB.
- The bridge validators watch Ethereum and wait 65 block confirmations. Each of them then confirms the message on PulseChain; once the number of distinct confirmations reaches the required count (5), the message is executed.
- The PulseChain-side mediator deducts the Ethereum → PulseChain fee, if one is set, and mints the bridged token to your address. The first time a token crosses, the mediator creates its PulseChain contract, named “… from Ethereum”.
How does a transfer back to Ethereum work?
- You send the bridged token to the PulseChain-side mediator. It is burned (or, for PulseChain-native assets such as PLS, locked), and the PulseChain → Ethereum fee is taken if one is set.
- After 65 PulseChain block confirmations, each validator signs the message on PulseChain; when enough signatures are collected, the contract publishes them.
- Someone — normally you, through the bridge interface, paying Ethereum gas — submits the message with the signatures to the Ethereum AMB.
- The Ethereum AMB checks that at least the required number of distinct current validators signed, with no duplicates. Only then does the Ethereum-side mediator release the locked tokens, within its daily execution limits.
What does a transfer look like in practice?
To PulseChain: open bridge.pulsechain.com from a bookmark and connect your wallet on Ethereum — you need ETH for Ethereum gas. Pick the token and amount; for an ERC-20 token your wallet usually asks for an approval transaction before the transfer itself. Then wait: 65 Ethereum blocks take about 13 minutes at Ethereum’s 12-second slots, plus the time the validators need. The tokens arrive as “… from Ethereum”; add them to your wallet by the addresses listed on System copies vs bridged tokens.
Back to Ethereum: you need PLS for gas on PulseChain and ETH for the last step. After the transfer on PulseChain and 65 PulseChain blocks (about 11 minutes at 10-second slots), the validators sign; the interface then asks you to send the claim transaction on Ethereum. Until that transaction is made, the tokens are not released. The 0.30 % fee is taken on the PulseChain side.
What does the bridge charge?
Read with the fee managers’ getFee() and calculateFee() at PulseChain block 27,819,014 (2026-10-17 08:04:35 UTC). In other words: bringing tokens to PulseChain cost no bridge fee, taking them back to Ethereum cost 0.30 % of the amount, and gas on both chains comes on top. The fees go to eight reward addresses, which are not the validators’ signing keys. Fees are mutable settings — the code accepts any value below 100 % — and the most recent transactions of the PulseChain-side owner were fee settings on 2023-12-13 and 2024-03-10; re-check before a large transfer.
Who can change what?
| Power | Held by | What the code allows | Setting read on 2026-10-17, unchanged on 2026-10-19 |
|---|---|---|---|
| Approve cross-chain messages | 8 bridge validators | A message executes only with enough signatures from distinct current validators; each AMB waits 65 block confirmations on its own chain | 5 of 8 required on both chains; 65 confirmations on both |
| Change the validator set and the threshold | owner of each validator contract — one key per chain |
addValidator, removeValidator, setRequiredSignatures |
8 validators, 5 required, on both chains |
| Redirect a mediator | owner of each mediator — one key per chain |
setBridgeContract and setMediatorContractOnOtherSide: the mediator then accepts release and mint instructions from whatever message contract and counterpart they name, with no validator involved |
All four mediators point to the official AMBs and to each other |
| Move locked tokens into an interest module | owner of the Ethereum token mediator |
initializeInterest names an external contract per token; after that anyone can call invest(), which moves the locked balance above a minimum into it |
No module set for USDC, DAI, USDT, WETH, HEX or WBTC |
| Change limits, fees and gas settings | owner of the mediators and AMBs |
Daily and per-transaction limits; fees below 100 %; gas price, block confirmations, maximum gas | Limits shown below |
| Replace the contract logic | upgradeabilityOwner of each proxy |
An upgrade can change any rule, in any of the eight contracts | The PulseChain-side token mediator’s upgrade key has never been used for an upgrade |
| Recover tokens | upgradeabilityOwner |
claimTokens only for tokens never registered with the bridge and for native coins; fixMediatorBalance bridges the part of a registered token’s balance that arrived without a bridge transfer to a chosen receiver; claimTokensFromTokenContract withdraws what is stuck inside a bridged token contract |
— |
Read with eth_call on 2026-10-17 around 14:00 UTC (PulseChain blocks 27,821,033–27,821,051, Ethereum block 26,212,716) and again on 2026-10-19 around 12:20 UTC (PulseChain block 27,837,201, Ethereum block 26,226,567), with the same results. All ten distinct role holders are plain addresses: eth_getCode returns no code, so each is a single private key rather than an on-chain multisig or timelock. Whether those keys are protected off-chain — hardware wallets, multi-party computation — cannot be seen from the chain. The PulseChain-side upgrade key of the token mediator has never sent a transaction (nonce 0 at PulseChain block 27,837,201, 2026-10-19); its only transaction is an incoming one on 2023-05-11. The validator-list functions were read from the verified BridgeValidators source on Sourcify, where all three are owner-only; the PulseChain implementation has byte-identical code.
How much do the daily limits cap?
| Token (Ethereum original) | Locked in the Ethereum token mediator | Daily limit, each direction | Per-transaction limit |
|---|---|---|---|
| USDC | 11,892,903.50698 | 1,000,000,000,000 | 500,000,000,000 |
| DAI | 10,889,338.663935987308937777 | 1,000,000,000,000 | 500,000,000,000 |
| USDT | 4,157,320.065819 | 1,000,000,000,000 | 500,000,000,000 |
| WETH | 3,939.980193929388965155 | 1,000,000,000,000 | 500,000,000,000 |
| HEX | 11,634,493,814.82845606 | 1,000,000,000,000 | 500,000,000,000 |
| WBTC | 14.68953236 | 1,000,000,000,000 | 500,000,000,000 |
Amounts in whole tokens, read at Ethereum block 26,226,567 (2026-10-19) with mediatorBalance(), dailyLimit(), executionDailyLimit(), maxPerTx() and executionMaxPerTx(). Every limit is a trillion units per day — far above what the bridge holds for each token — so in practice the limits do not cap how much could leave in one day. The default limit for newly bridged tokens is the same on both sides.
What does this mean for my tokens?
- Two kinds of trust. Tokens locked on Ethereum stay locked as long as fewer than 5 of the 8 validator keys are compromised and none of the single-key admin addresses above is misused or stolen. Three kinds of admin role can each bypass the validators on their own: a mediator owner by redirecting the mediator, a validator-list owner by replacing validators or lowering the threshold, an upgrade owner by replacing the code.
- Today’s settings are the expected ones. On 2026-10-17 the mediators pointed to the official message bridges and to each other, no interest module was set, and both validator lists held 8 validators with 5 required.
- The limits do not cap outflows at today’s values, as the table above shows.
- Design versus deployment. Validator signatures are the standard design of the OmniBridge code, also used by the Gnosis Chain bridge. How the admin keys are held — single keys, no on-chain multisig or timelock — is specific to this deployment.
Practical consequences: bridge what you need, check the token address you receive, and use the official domain only — look-alike bridge sites are a common scam (see Security).
Has the bridge been audited?
The upstream code family has public audits:
| Audit | Scope | Date | Result |
|---|---|---|---|
| ChainSecurity | Upstream OmniBridge (POA Network) | 2021-04-27 | Code assessment, 20 pages |
| ChainSecurity | Upstream OmniBridge v6.0 | 2021-09-07 | 0 critical, 1 high (partially corrected), 3 medium, 13 low |
| Quantstamp | Upstream TokenBridge 5.4.1, including the AMB message layer | 2020-11-06 | 22 issues, 0 high, 0 medium |
These reports cover the code PulseChain’s bridge is built on, not the PulseChain deployment or its key management. No audit of the deployment itself was found as of 2026-10-17, and which upstream release it corresponds to is not established (the deployed contracts report interface versions 3.3.0 for the mediator and 6.2.0 for the AMB).
Can I run the bridge interface myself?
Yes. The official pulsechain-bridge-server repository publishes the bridge front end as a Go wrapper with the compiled web app, so you can run the interface locally against the same contracts — useful if the website is unreachable or you want to rule out a tampered copy.