The Based Bridge application allows you to bridge your NFTs from Ethereum to the Superchain - and back again if needed. It uses the Optimism developed smart contracts to bridge the NFTs between the two networks.
Information about the deployment addresses can be found in the Optimism and Base documentation.
No third-party smart contracts are used in the bridging process. The bridge is fully decentralized and trustless using the native message and relayer system of the Superchain rollups.
The project is structured as a monorepo with the following packages:
apps/website
- The application for bridging ERC721 collections.apps/event-cache
- Ponder indexer for ERC721 bridge events.packages/token-list
- Token list for verifying NFTs on the bridge.
The application currently supports Optimism and Base, but in the future will support other Optimism based rollups.
- Ethereum (L1)
- Optimism (L2)
- Base (L2)
- Sepolia (L1)
- Optimism Sepolia (L2)
- Base Sepolia (L2)
The native Superchain ERC721 bridge is open and permissionless.
However, the Base Bridge application has a token list that is used to verify new NFT contracts on the bridge. The District Labs, Inc. team is responsible for maintaining the token list and adding new NFT contracts to the list.
To verify a new NFT contract on the bridge, you need to open a pull request adding the NFT contract address from the L1 network and the corresponding bridged contract address on the L2 network to the token list.
The token list is located in the packages/token-list
package.
It's recommended to make a public statement that can be linked to, using an official channel of the NFT project. This link will be added to the token list to verify the authenticity of the NFT contract.
The new Superchain ERC721 smart contract has a few differences from the standard ERC721 contract.
First, minting authority is controlled by the L1ERC721Bridge
and L2ERC721Bridge
contracts. These contracts are the only contract that can mint new tokens on the L2 network.
Second, the tokenURI
metadata is stored on the L1 network and is accessed by the L2 network using EIP-681.
// Creates a base URI in the format specified by EIP-681:
// https://eips.ethereum.org/EIPS/eip-681
baseTokenURI = string(
abi.encodePacked(
"ethereum:",
Strings.toHexString(uint160(_remoteToken), 20),
"@",
Strings.toString(_remoteChainId),
"/tokenURI?uint256="
)
);
The OptimismMintableERC721
smart contract uses EIP-681 to generate a reference to the mainnet storage object, which contains the original tokens' tokenURI
metadata.