How to bridge tokens: An overview
This document is currently in public preview and may change significantly as feedback is captured from readers like you. Click the Request an update button at the top of this document or join the Arbitrum Discord to share your feedback.
Token bridging is a fundamental aspect of any Layer 2 (L2) protocol. It allows projects to quickly integrate with the Arbitrum ecosystem by leveraging their existing Layer 1 (L1) tokens.
This section offers a series of how-tos showcasing the different methods available for making your token bridgeable.
You have three options to consider when deciding on how to bridge your token:
- Standard gateway: opt for this method if you want to have an standard ERC20 token automatically deployed on Arbitrum, which will act as the L2 counterpart to your L1 token. For additional information, please refer to this section on default standard bridging in the conceptual page.
- Custom generic gateway: choose this method if you require custom functionality for your ERC20 token on Arbitrum. You will deploy your counterpart token on Arbitrum equipped with the unique features you wish to implement. For additional information, please refer to this section on the Arbitrum generic custom gateway in the conceptual page.
- Custom gateway: this method is intended for edge cases where a custom ERC20 token is insufficient and you need an additional layer of flexibility with the gateway (for example, your token has the capacity to increase its supply on L2, and you want those L2-minted tokens to be withdrawable back to L1 and recognized by the L1 contract). For additional information, please refer to this section on other types of gateways in the conceptual page.
What if I just want to bridge a token programmatically?
Section How to bridge tokens via Arbitrum’s standard gateway provides an example of how to deposit your tokens (from L1 to L2) programmatically, specifically in steps 2 to 5.
You can also find scripts demonstrating L1-to-L2 bridging (deposits) and L2-to-L1 bridging (withdrawals) using the Arbitrum SDK.