ERC721 NFT Bridge
Depósito de tokens ERC721 de L1
El bridging de NFTs de L1 a L2 se realiza a través del contrato L1ERC721Gateway
en lugar de utilizar un router. De forma similar al bridging de tokens ERC20, utilizamos la función depositERC721
para enviar tokens a L2, y posteriormente podemos recuperarlos de vuelta a L1 utilizando withdrawERC721
en el contrato L2ERC721Gateway
desplegado en L2.
Los contratos NFT tanto en L1 como en L2 deben lanzarse y conectarse a través de las Gateways para permitir el bridging. Esto significa que las transacciones de depósito y retirada se revertirán si falta un contrato en L1 o L2 o si no se asigna a través de la función updateTokenMapping
.
Creación de un token ScrollERC721 en L2
Para depositar un token ERC721 en L2, debe lanzarse un contrato de token compatible con el estándar IScrollERC721
y asignarse a una L1ERC721Gateway
y una L2ERC721Gateway
en L1 y L2, respectivamente. Este contrato tiene que conceder permiso a la Gateway en L2 para emitir cuando un token es depositado y quemar cuando el token es retirado.
La siguiente interfaz es la IScrollERC721
que es necesaria para desplegar tokens ERC721 compatibles con el L2ERC721Gateway
en L2.
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;}
Añadiendo NFTs ERC721 al Scroll Bridge
Todos los activos pueden ser transferidos de forma segura y sin permisos a través de contratos Gateway desplegados por cualquier desarrollador. Sin embargo, Scroll también gestiona un contrato Gateway ERC721 en donde todos los NFTs creados por la comunidad son bienvenidos. Formar parte del Gateway gestionado por Scroll significa que no necesitarás desplegar los contratos Gateway, y tu token aparecerá en el frontend de Scroll. Para formar parte de la Gateway gestionada por Scroll, debe ponerse en contacto con el equipo de Scroll para añadir el NFT en los contratos Gateway L1 y L2. Para ello, sigue las instrucciones del repositorio token lists para añadir un nuevo token al frontend oficial de Scroll.
Retiro de tokens ERC721 de Scroll
El contrato L2ERC721Gateway
se utiliza para enviar tokens de L2 a L1. Antes de realizar el bridging, el contrato L2ERC721Gateway
tiene que ser aprobado por el contrato del NFT. Una vez hecho esto, se puede llamar a withdrawERC721
para realizar el bridging de activos.
API de L1ERC721Gateway
Visita librería de npm para consultar la documentación completa de la API de los contratos de Scroll.
depositERC721
function depositERC721(address _token, address _to, uint256 _tokenId, uint256 _gasLimit) external payable;
Depósito de un NFT ERC721 desde L1 a la cuenta de un destinatario en L2.
Parámetro | Descripción |
---|---|
token | Dirección del contrato ERC721 NFT en L1. |
to | Dirección de la cuenta del destinatario en L2. |
tokenId | Id del NFT a depositar. |
gasLimit | Límite de gas necesario para completar el depósito en L2. La porción de gas que no fué utilizado será automáticamente enviada de vuelta. |
updateTokenMapping
function updateTokenMapping(address _l1Token, address _l2Token) external;
Actualización del mapping que conecta un contrato NFT de L1 a L2.
Parámetro | Descripción |
---|---|
_l1Token | Dirección del token ERC721 en L1. |
_l2Token | Dirección del token ERC721 correspondiente en L2. |
API de L2ERC721Gateway
withdrawERC721
function withdrawERC721(address _token, address _to, uint256 _tokenId, uint256 _gasLimit) external payable;
Envío de un ERC721 NFT desde L2 a la cuenta de un destinatario en L1.
Parámetro | Descripción |
---|---|
token | Dirección del contrato de tokens ERC721 NFT en L2. |
to | Dirección de la cuenta del destinatario en L1. |
tokenId | Id del NFT a depositar. |
gasLimit | No se utiliza, pero se incluye por posibles consideraciones de compatibilidad futura. |
updateTokenMapping
function updateTokenMapping(address _l1Token, address _l2Token) external;
Actualización del mapping que conecta un contrato NFT de L2 a L1.
Parámetro | Descripción |
---|---|
_l2Token | Dirección del token ERC721 en L2. |
_l1Token | Dirección del token ERC721 correspondiente en L1. |