ERC721 NFT 跨链桥
从 L1 存款 ERC721 代币
从 L1 到 L2 的 NFT 跨链是通过 L1ERC721Gateway
合约而不是使用路由器完成的。与桥接 ERC20 代币类似,我们使用 depositERC721
方法将代币发送到 L2,稍后可以使用部署在L2 上的 L2ERC721Gateway
合约使用 withdrawERC721
方法提取回 L1。
L1 和 L2 上的 NFT 合约必须通过启动和连接 Gateway 才能实现桥接。这意味着,如果 L1 或 L2 上的合约丢失或未通过 updateTokenMapping
映射,存款和取款交易将回退。
在 L2 上创建 ScrollERC721 代币
要将ERC721代币存入L2,并分别在L1和L2上的 L2ERC721Gateway
和 L1ERC721Gateway
合约完成发布和映射与 IScrollERC721
标准兼容的代币合约。该合约必须授予L2的Gateway在存入代币时铸造,和在代币提取时销毁的权限。
以下是与 L2 兼容的 L2ERC721Gateway
ERC721 代币所需的 IScrollERC721
接口
interface IScrollERC721 { /// @notice Return the address of Gateway the token belongs to. function gateway() external view returns (address);
/// @notice Return the address of counterpart token. function counterpart() external view returns (address);
/// @notice Mint some token to recipient's account. /// @dev Gateway Utilities, only gateway contract can call /// @param _to The address of recipient. /// @param _tokenId The token id to mint. function mint(address _to, uint256 _tokenId) external;
/// @notice Burn some token from account. /// @dev Gateway Utilities, only gateway contract can call /// @param _tokenId The token id to burn. function burn(uint256 _tokenId) external;}
将 ERC721 NFT 添加 Scroll 跨链桥
所有资产都可以通过任何开发者部署的Gateway合约安全且无需许可地桥接。但是,Scroll还管理着 ERC721 Gateway合约,欢迎社区创建的所有 NFTs。成为 Scroll 托管网关的一部分意味着无需部署 Gateway 合约,代币将显示在 Scroll 前端中。要成为Scroll Gateway的一部分,您必须联系 Scroll 团队,将 NFT 添加到 L1 和 L2 Gateway 合约中。为此,请按照代币列表 仓库内的说明将新代币添加到Scroll官方前端。
从 Scroll 中提取 ERC721 代币
合约 L2ERC721Gateway
用于将代币从 L2 发送到 L1。在桥接之前, L2ERC721Gateway
合约必须得到 NFT 合约的批准。完成此操作后, withdrawERC721
可以调用以执行资产桥接。
L1ERC721Gateway API
请访问 npm 库 来获取完整的 Scroll 合约 API 文档。
depositERC721
function depositERC721(address _token, address _to, uint256 _tokenId, uint256 _gasLimit) external payable;
将 ERC721 NFT 从 L1 存入收款人在 L2 上的账户。
参数 | 描述 |
---|---|
token | L1 上 ERC721 NFT 合约的地址 |
to | L2 上收款人账户的地址 |
tokenId | 存入的 NFT ID |
gasLimit | 在L2上完成存款所需的gas上限,未使用的部分将会退回 |
updateTokenMapping
function updateTokenMapping(address _l1Token, address _l2Token) external;
更新 NFT 合约从 L1 到 L2 的映射。
参数 | 描述 |
---|---|
_l1Token | L1 上 ERC721 NFT 合约的地址 |
_l2Token | L2 上对应 ERC721 NFT 合约的地址 |
L2ERC721Gateway API
withdrawERC721
function withdrawERC721(address _token, address _to, uint256 _tokenId, uint256 _gasLimit) external payable;
将 ERC721 NFT 从 L2 发送到收款人在 L1 上的账户。
参数 | 描述 |
---|---|
token | L2 ERC721 NFT 代币合约的地址 |
to | L1 上收款人账户的地址 |
tokenId | 提取的 NFT ID |
gasLimit | 未使用,但出于潜在的向前兼容性考虑而包括在内 |
updateTokenMapping
function updateTokenMapping(address _l1Token, address _l2Token) external;
更新将 NFT 合约从 L2 到 L1 的映射。
参数 | 描述 |
---|---|
_l2Token | L2 ERC721 NFT 代币合约的地址 |
_l1Token | L1中对应ERC721代币的地址 |