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

# Polygon Native Bridge (polygon-bridge)

> Official Polygon PoS bridge via RootChainManager. Supports ETH, ERC-20, ERC-721, and ERC-1155 deposits with checkpoint-based withdrawals.

Official Polygon PoS bridge via RootChainManager. Supports ETH, ERC-20, ERC-721, and ERC-1155 deposits with checkpoint-based withdrawals.

| Fact | Value |
| - | - |
| Category | Bridges |
| Family | none |
| Namespace | `PolygonBridge` on ethereum, polygon |
| Chains | ethereum, polygon |

## Notes

* **L1 to L2** deposits via RootChainManager. **L2 to L1** withdrawals require burning tokens on Polygon, then calling `exit()` on L1 with the burn proof
* **Approval target for ERC-20**: approve tokens to the **ERC20Predicate** (`0x40ec5B...`), NOT the RootChainManager
* `depositData` for ERC-20 is `abi.encode(amount)` -- the amount encoded as a 32-byte uint256
* ETH deposits are received as WETH on Polygon (Polygon's native token is MATIC)
* L1 to L2 deposits finalize after the next Polygon checkpoint (\~30-60 minutes)
* L2 to L1 withdrawals require checkpoint inclusion + `exit()` call on Ethereum (\~3 hours for checkpoint)
* Supports ERC-20, ERC-721, and ERC-1155 via different predicate contracts
* Canonical bridge, secured by the Polygon PoS validator set

## Its names in a program

On Ethereum, `PolygonBridge` is a namespace: its contracts need no import.

```ts theme={null}
function main() {
  // Ethereum's erc20Predicate, `0x40ec5B33f54e0E8A33A975908C5BA1c14e5BbbDf`.
  require(PolygonBridge.Erc20Predicate != 0);
}
```

## Deployments

| Chain | Contract | Address | In a program |
| - | - | - | - |
| [Ethereum](https://docs.eco.com/sauce-sdk/reference/chains/ethereum.md) | erc20Predicate | `0x40ec5B33f54e0E8A33A975908C5BA1c14e5BbbDf` | `PolygonBridge.Erc20Predicate` |
| [Ethereum](https://docs.eco.com/sauce-sdk/reference/chains/ethereum.md) | etherPredicate | `0x8484Ef722627bf18ca5Ae6BcF031c23E6e922B30` | `PolygonBridge.EtherPredicate` |
| [Ethereum](https://docs.eco.com/sauce-sdk/reference/chains/ethereum.md) | rootChainManager | `0xA0c68C638235ee32657e8f720a23ceC1bFc77C77` | `PolygonBridge.RootChainManager` |
| [Polygon](https://docs.eco.com/sauce-sdk/reference/chains/polygon.md) | childChainManager | `0xA6FA4fB5f76172d178d61B04b0ecd319C5d1C0aa` | `PolygonBridge.ChildChainManager` |

## ABI

### `PolygonRootChainManagerABI`

`import PolygonRootChainManagerABI from "./protocols/polygon-bridge/PolygonRootChainManagerABI.json";` Speaks for: rootChainManager.

* `depositEtherFor(address user) payable`
* `depositFor(address user, address rootToken, bytes depositData)`
* `exit(bytes inputData)`

## Next steps

* [Protocols](https://docs.eco.com/sauce-sdk/reference/protocols.md): the other protocols, by what they do.
* [Protocols and tokens](https://docs.eco.com/sauce/names.md): calling a contract by its namespace, or through its ABI.
* [Glossary](https://docs.eco.com/sauce/glossary.md): the words these pages use, in plain terms.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.