Open2

ScrollでNFTをブリッジしてみる

ぽけなぽけな

これをやる
https://docs.scroll.io/en/developers/l1-and-l2-bridging/erc721-nft-bridge/

  • L1ERC721GatewayとL2ERC721Gatewayなるものを使ってブリッジできる
  • 前提条件
    • NFTコントラクトがL1/L2の両方にデプロイされており、結びついていること
      • IScrollERC721:counterpart()の戻り値として設定
    • NFTコントラクトとGatewayが結びついていること
      • NFT側では、IScrollERC721:gateway()の戻り値として設定
      • Gateway側では、function updateTokenMapping(address _l1Token, address _l2Token) external;に設定
        • 有名NFTであれば既存Gatewayにすでに登録されている場合があるが、登録されていない場合は自前でGateway(Proxy)をdeployして登録する必要がある
    • NFTコントラクトには以下の実装がされていること
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;
}

Scroll SepoliaにETHが届かないので一旦待ち

ぽけなぽけな

なんとかできた
コツコツ頑張ったリポジトリ
https://github.com/POKENA7/solidity-playground/tree/master/script/scroll

scrollの色々なコントラクト
https://github.com/scroll-tech/scroll/tree/develop

L1のトランザクション:https://sepolia.etherscan.io/tx/0xcabc5bb6ec044ee5db41e709d1f1e95028411790c6d7e9772cdcade3c2f1470f

L2のトランザクション:https://sepolia.scrollscan.com/tx/0x45c3a1245b8bcb29328119cb2241769f8c97f52f77956d262fcb17b8d334a54b

  • L1でdepositしてから15分くらい待った気がする
  • mainnetだとどのくらいガス代かかるのか分からないので試せていない

Q&A

既存のNFTもブリッジできる?

IScrollERC721の実装がないとできないはず

GatewayだけでなくNFTにもL1/L2の設定が必要なのはなぜ?

Gatewayは誰でもdeployできるため、不正な紐付けもできてしまうため