Files
scroll/contracts/docs/apis/L2ERC721Gateway.md
2024-03-22 18:02:02 +08:00

11 KiB

L2ERC721Gateway

L2ERC721Gateway

The L2ERC721Gateway is used to withdraw ERC721 compatible NFTs on layer 2 and finalize deposit the NFTs from layer 1.

The withdrawn NFTs tokens will be burned directly. On finalizing deposit, the corresponding NFT will be minted and transferred to the recipient. This will be changed if we have more specific scenarios.

Methods

batchWithdrawERC721

function batchWithdrawERC721(address _token, uint256[] _tokenIds, uint256 _gasLimit) external payable

Batch withdraw a list of ERC721 NFT to caller's account on layer 1.

Parameters

Name Type Description
_token address undefined
_tokenIds uint256[] undefined
_gasLimit uint256 undefined

batchWithdrawERC721

function batchWithdrawERC721(address _token, address _to, uint256[] _tokenIds, uint256 _gasLimit) external payable

Batch withdraw a list of ERC721 NFT to caller's account on layer 1.

Parameters

Name Type Description
_token address undefined
_to address undefined
_tokenIds uint256[] undefined
_gasLimit uint256 undefined

counterpart

function counterpart() external view returns (address)

The address of corresponding L1/L2 Gateway contract.

Returns

Name Type Description
_0 address undefined

finalizeBatchDepositERC721

function finalizeBatchDepositERC721(address _l1Token, address _l2Token, address _from, address _to, uint256[] _tokenIds) external nonpayable

Complete ERC721 deposit from layer 1 to layer 2 and send NFT to recipient's account on layer 2.

Requirements: - The function should only be called by L2ScrollMessenger. - The function should also only be called by L1ERC721Gateway on layer 1.

Parameters

Name Type Description
_l1Token address undefined
_l2Token address undefined
_from address undefined
_to address undefined
_tokenIds uint256[] undefined

finalizeDepositERC721

function finalizeDepositERC721(address _l1Token, address _l2Token, address _from, address _to, uint256 _tokenId) external nonpayable

Complete ERC721 deposit from layer 1 to layer 2 and send NFT to recipient's account on layer 2.

Requirements: - The function should only be called by L2ScrollMessenger. - The function should also only be called by L1ERC721Gateway on layer 1.

Parameters

Name Type Description
_l1Token address undefined
_l2Token address undefined
_from address undefined
_to address undefined
_tokenId uint256 undefined

initialize

function initialize(address _counterpart, address _messenger) external nonpayable

Initialize the storage of L2ERC721Gateway.

The parameters _counterpart and _messenger are no longer used.

Parameters

Name Type Description
_counterpart address The address of L1ERC721Gateway contract in L1.
_messenger address The address of L2ScrollMessenger contract in L2.

messenger

function messenger() external view returns (address)

The address of corresponding L1ScrollMessenger/L2ScrollMessenger contract.

Returns

Name Type Description
_0 address undefined

onERC721Received

function onERC721Received(address, address, uint256, bytes) external nonpayable returns (bytes4)

See {IERC721Receiver-onERC721Received}. Always returns IERC721Receiver.onERC721Received.selector.

Parameters

Name Type Description
_0 address undefined
_1 address undefined
_2 uint256 undefined
_3 bytes undefined

Returns

Name Type Description
_0 bytes4 undefined

owner

function owner() external view returns (address)

Returns the address of the current owner.

Returns

Name Type Description
_0 address undefined

renounceOwnership

function renounceOwnership() external nonpayable

Leaves the contract without owner. It will not be possible to call onlyOwner functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.

router

function router() external view returns (address)

The address of L1GatewayRouter/L2GatewayRouter contract.

Returns

Name Type Description
_0 address undefined

tokenMapping

function tokenMapping(address) external view returns (address)

Mapping from layer 2 token address to layer 1 token address for ERC721 NFT.

Parameters

Name Type Description
_0 address undefined

Returns

Name Type Description
_0 address undefined

transferOwnership

function transferOwnership(address newOwner) external nonpayable

Transfers ownership of the contract to a new account (newOwner). Can only be called by the current owner.

Parameters

Name Type Description
newOwner address undefined

updateTokenMapping

function updateTokenMapping(address _l2Token, address _l1Token) external nonpayable

Update layer 2 to layer 1 token mapping.

Parameters

Name Type Description
_l2Token address The address of corresponding ERC721 token on layer 2.
_l1Token address The address of ERC721 token on layer 1.

withdrawERC721

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

Withdraw some ERC721 NFT to caller's account on layer 1.

Parameters

Name Type Description
_token address undefined
_tokenId uint256 undefined
_gasLimit uint256 undefined

withdrawERC721

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

Withdraw some ERC721 NFT to caller's account on layer 1.

Parameters

Name Type Description
_token address undefined
_to address undefined
_tokenId uint256 undefined
_gasLimit uint256 undefined

Events

BatchWithdrawERC721

event BatchWithdrawERC721(address indexed l1Token, address indexed l2Token, address indexed from, address to, uint256[] tokenIds)

Emitted when the ERC721 NFT is batch transferred to gateway on layer 2.

Parameters

Name Type Description
l1Token indexed address The address of ERC721 NFT on layer 1.
l2Token indexed address The address of ERC721 NFT on layer 2.
from indexed address The address of sender on layer 2.
to address The address of recipient on layer 1.
tokenIds uint256[] The list of token ids of the ERC721 NFT to withdraw on layer 2.

FinalizeBatchDepositERC721

event FinalizeBatchDepositERC721(address indexed l1Token, address indexed l2Token, address indexed from, address to, uint256[] tokenIds)

Emitted when the ERC721 NFT is batch transferred to recipient on layer 2.

Parameters

Name Type Description
l1Token indexed address The address of ERC721 NFT on layer 1.
l2Token indexed address The address of ERC721 NFT on layer 2.
from indexed address The address of sender on layer 1.
to address The address of recipient on layer 2.
tokenIds uint256[] The list of token ids of the ERC721 NFT deposited on layer 1.

FinalizeDepositERC721

event FinalizeDepositERC721(address indexed l1Token, address indexed l2Token, address indexed from, address to, uint256 tokenId)

Emitted when the ERC721 NFT is transferred to recipient on layer 2.

Parameters

Name Type Description
l1Token indexed address The address of ERC721 NFT on layer 1.
l2Token indexed address The address of ERC721 NFT on layer 2.
from indexed address The address of sender on layer 1.
to address The address of recipient on layer 2.
tokenId uint256 The token id of the ERC721 NFT deposited on layer 1.

Initialized

event Initialized(uint8 version)

Triggered when the contract has been initialized or reinitialized.

Parameters

Name Type Description
version uint8 undefined

OwnershipTransferred

event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)

Parameters

Name Type Description
previousOwner indexed address undefined
newOwner indexed address undefined

UpdateTokenMapping

event UpdateTokenMapping(address indexed l2Token, address indexed oldL1Token, address indexed newL1Token)

Emitted when token mapping for ERC721 token is updated.

Parameters

Name Type Description
l2Token indexed address The address of corresponding ERC721 token in layer 2.
oldL1Token indexed address The address of the old corresponding ERC721 token in layer 1.
newL1Token indexed address The address of the new corresponding ERC721 token in layer 1.

WithdrawERC721

event WithdrawERC721(address indexed l1Token, address indexed l2Token, address indexed from, address to, uint256 tokenId)

Emitted when the ERC721 NFT is transferred to gateway on layer 2.

Parameters

Name Type Description
l1Token indexed address The address of ERC721 NFT on layer 1.
l2Token indexed address The address of ERC721 NFT on layer 2.
from indexed address The address of sender on layer 2.
to address The address of recipient on layer 1.
tokenId uint256 The token id of the ERC721 NFT to withdraw on layer 2.

Errors

ErrorCallerIsNotCounterpartGateway

error ErrorCallerIsNotCounterpartGateway()

Thrown when the cross chain sender is not the counterpart gateway contract.

ErrorCallerIsNotMessenger

error ErrorCallerIsNotMessenger()

Thrown when the caller is not corresponding L1ScrollMessenger or L2ScrollMessenger.

ErrorNotInDropMessageContext

error ErrorNotInDropMessageContext()

Thrown when ScrollMessenger is not dropping message.

ErrorZeroAddress

error ErrorZeroAddress()

Thrown when the given address is address(0).