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上的 L2ERC721GatewayL1ERC721Gateway 合约完成发布和映射与 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 上的账户。

参数描述
tokenL1 上 ERC721 NFT 合约的地址
toL2 上收款人账户的地址
tokenId存入的 NFT ID
gasLimit在L2上完成存款所需的gas上限,未使用的部分将会退回

updateTokenMapping

function updateTokenMapping(address _l1Token, address _l2Token) external;

更新 NFT 合约从 L1 到 L2 的映射。

参数描述
_l1TokenL1 上 ERC721 NFT 合约的地址
_l2TokenL2 上对应 ERC721 NFT 合约的地址

L2ERC721Gateway API

withdrawERC721

function withdrawERC721(address _token, address _to, uint256 _tokenId, uint256 _gasLimit) external payable;

将 ERC721 NFT 从 L2 发送到收款人在 L1 上的账户。

参数描述
tokenL2 ERC721 NFT 代币合约的地址
toL1 上收款人账户的地址
tokenId提取的 NFT ID
gasLimit未使用,但出于潜在的向前兼容性考虑而包括在内

updateTokenMapping

function updateTokenMapping(address _l1Token, address _l2Token) external;

更新将 NFT 合约从 L2 到 L1 的映射。

参数描述
_l2TokenL2 ERC721 NFT 代币合约的地址
_l1TokenL1中对应ERC721代币的地址

接下来是什么

随时了解最新的 Scroll 新闻
路线图更新,虚拟和现场活动,生态机会等等
感谢您的订阅!

资源

关注我们