Omnichain(オムニチェーン)相互運用性プロトコル「LayerZero」とOmnichain NFTについて、分かりやすく徹底解説!

どうも、でりおてんちょーです。

今回は、Omnichain相互運用性プロトコルを標榜する「LayerZero」について紹介・解説していきたいと思います。

読み方は「Omnichain(オムニチェーン)」です。

執筆時点では、StargateというLayerZero上で稼働するDeFiがローンチされていたり、Gh0stly Gh0stsLayer Zero PunksなどがOmnichainNFTとしてローンチされており、徐々に頭角を現しながら話題になってきています。

ちなみに、上記以外にもOmnichainNFTを謳ったNFTプロジェクトは実にたくさんローンチされている状況です。

でりおてんちょー

後の項で試してみますが、OmnichainNFT自体は実装が簡単なので、今後もOmnichainNFTを標榜するNFTプロジェクトは多数出てきて、「フルオンチェーンNFT」のようにマーケティング用語化するのではないかと予想しています。

ということで今回は、執筆時点で徐々に頭角を現しつつある「LayerZero」「OmnichainNFT」を中心に取り上げていき、その概要やコンセプトなどを紐解いていくことで、実態を理解していただくことを目的とします。

でははじめに、この記事の構成について説明します。

STEP
LayerZeroとは

まずは、LayerZeroの概要やコンセプトなどについて、完結かつ抽象的な表現も交えつつ可能な限り分かりやすく解説してまいります。

STEP
既存モデルとの違いを比較

次に、LayerZeroのモデルが既存のクロスチェーン/マルチチェーン・L2(Layer2)とどのように違うのかについて解説してまいります。

STEP
LayerZeroのOmnichainコントラクトをデプロイ/転送してみる

最後に、皆様にLayerZero/OmnichainNFTについての理解を深めていただくことを目的とし、Hardhatを使って実際にコントラクトをデプロイしたり、NFTを別チェーンに転送してみるまでの一連の流れを解説いたします。

本記事が、「LayerZero」「OmnichainNFT」の概要やコンセプト・開発の一例などについて理解したいと思われている方にとって、少しでもお役に立てれば幸いです。

※本記事は特定のFT / NFTの購入を推奨するものではありません。あくまで勉強の一環としてご活用ください

今月のスポンサー:Yay! – WEB3時代のSNS「Yay!」でリサーチャー募集
目次

LayerZeroとは

出典:Medium

LayerZeroは、「Omnichain相互運用性プロトコル」であることを標榜するプロトコルであり、開発主体はカナダのバンクーバーを拠点とするチーム「LayerZero Labs」です。

Omniというのは、ラテン語omnisが由来の単語で「すべての」を意味する接頭辞であることから、すべてのチェーンを包括するようなレイヤーという意味合いだと筆者は解釈しています。

多くの異なるユーザーアプリケーション(LayerZeroを使用してブロックチェーン間でメッセージを送受信するコントラクト)が、ベースレイヤー(Layer0)として使用できるようにするための基盤プロトコルであることを提唱しています。

出典:LayerZero_Whitepaper_Release.pdf

少しイメージが湧きづらい方は、まずは既存の暗号資産における中央集権取引所(CEX)の挙動をイメージしてみてください。

例えば、BTCを売却してETHを購入するというシーン。

本来であれば、この行為を直接的におこなうことはブロックチェーンの違いにより難しいのですが、CEXを使うことで即座にエクスチェンジすることができますよね。

これは、CEXが裏側でBTCとETHを保有して、さらに交換業務を担っているからこそ為せるのですが、このシーンはイメージしやすいでしょう。

LayerZeroは、このCEXが裏側でおこなっているような仕組みを、それぞれ独立したオラクル/リレイヤー・ULN (Ultra Light Node)を用いることにより、トラストレスかつシームレスに実現するというコンセプトです。

異なるチェーン上のユーザーアプリケーション間で、オンチェーンかつマルチチェーンにメッセージ検証をおこないます。

LayerZero Endpoint(ULN)が、各アプリケーションの接続部となるイメージ。

仕組みとしては、異なるチェーン(ここではA, B)のブロックヘッダーを伝達するオラクル(Oracle)と、 トランザクションの証明を取得するリレイヤー(Relayer)という2つの独立したエンティティを組み合わせることで実現しています。

オラクルとリレイヤーを何にするかはユーザーが自由にカスタマイズ可能ですが、デフォルトではLayerZeroが提供するリレイヤーサービスと、Chainlinkの分散型オラクルネットワークとなっています。
参考:Default Config

ここで、以下のように疑問に思われる方もいらっしゃるかもしれません。

相棒

トラストレスとはいえ、オラクル/リレイヤーに依存したモデルでは?

これは非常に的を得た批判かと思いますし、筆者も最初に本プロトコルを見たときにそのように思いました。

実際にその指摘は的を得ている側面もありますが、LayerZeroではオラクル/リレイヤーをそれぞれ「独立」させることにより、以下のような効果を生み出しています。

  1. オラクルとリレイヤーが結託して悪事をはたらくことを防ぐ
  2. 被害を受けた際の被害を最小限に止める

つまり、オラクルとリレイヤーが共謀することを防ぎつつ、かつそれが起きた際でも被害が最小限に止まるように設計されています。

それぞれが被害を受けた際の簡易的かつ抽象的なイメージ図

クロスチェーンブリッジ(ミドルチェーン設計)では、単一の脆弱性が全ペアネットワーク・全流動性を危険にさらす可能性があるのに対し、LayerZeroでは悪用されるリスクを、悪用される特定のオラクル/リレイヤーペアに制限します。

この設計によって、高いセキュリティを保ちつつも、各チェーンを跨いだトークンの転送が可能になり利便性向上が見込めるという利点が挙げられます。

またその他のメリットとして、統一した標準規格/ルールを設けることによって、開発者が異なるチェーン間(※EVM互換性を問わない)で通信するための実装における「車輪の再発明」をなくすことが期待されるでしょう。

初期のフェーズではEVM互換性のあるチェーン(Ethereum/Arbitrum/Avalanche/BSC/Fantom/Optimism/Polygon)のみをサポートしていますが、将来的にCosmos Hub/Terraなどの非EVMチェーンのサポートも追加する予定となっています。

LayerZeroに関するさらなる詳細はこちらのホワイトペーパーに記載されているので、深掘りして調べたいという方はぜひご参考ください。

既存モデルとの違いを比較

本項では、Omnichain相互運用性プロトコルを標榜するLayerZeroと、以下の既存モデルとの違いを比較していくことで、LayerZeroについての理解をより深めていくことを目的とします。

  • クロスチェーン/マルチチェーン
  • L2(Layer2)

クロスチェーン/マルチチェーンとの違い

昨今ではDeFi領域を中心に、シングルチェーンからマルチチェーンへとトレンドが変わりつつある状況ですが、その中で以下のような課題が挙げられています。

  • 流動性がサイロ化され分散してしまうことで生じる資本効率・UXの悪さ
  • 独立するそれぞれのチェーン間での非効率的な通信
  • ブリッジ機能を一元的に備えたコントラクトのハッキングリスク

これらの課題に対するソリューションとして登場したのがLayerZeroであり、現在大きな注目を集めているといった背景があります。

まず前提として、既存のNFTにおける主なクロスチェーンブリッジと今回取り上げているLayerZero(Omnichain NFT)では、どちらもMint/Burn方式が採用されています。

既存のNFTにおける主なクロスチェーンブリッジの仕組みでは、ブリッジ機能を備えたスマートコントラクトを介して対象のNFT「X」をロックし、それを担保に転送先のチェーンで新たにNFT「X’」をMintします。

これに対して、LayerZeroプロトコルならではの特筆すべきポイントは、「2つ以上のチェーンが同時にメッセージング・ステートを共有できる点」です。

LayerZeroプロトコルを活用したOmnichain NFTの場合は、複数のチェーンを跨いでNFTをmintすることが可能になりますが、NFTが存在しユーザーが保有できる(owner権限が与えられる)のは単一のチェーンのみとなり、転送元チェーンにあったNFTはburnされる仕様です。

つまり、既存のNFTクロスチェーンブリッジとは異なり、特定のコントラクトに対してロックする必要がありません。

これは先述の通り、それぞれ独立したオラクル/リレイヤー・ULN (Ultra Light Node)を用いることで可能になっていますが、それにより以下のような新たなユースケースを生まれるのではないかと期待されています。

  • 統一流動性ブリッジ
  • 効率的なクロスチェーンスワップ
  • マルチチェーンイールドアグリゲーター

つまり、ブリッジングソリューションをLayerZero上に構築することによって、チェーンを跨いだトラストレスかつシームレスなやりとりの恩恵を受けられるようになります。

ちなみに、既にデプロイされたNFTコレクションであっても、Parakeet DAOの投票によって可決されwhitelist入りすれば、LayerZeroのサポートするOmnichain NFTに仲間入りできるそうです。

こちらは先日「Pudgy Penguins」というNFTプロジェクトが対象となり、LayerZeroのサポートするOmnichain NFTになることが決定されました。

L2(Layer2)との違い

LayerZeroが異なるチェーン間でネイティブな直接通信を実現するのに対して、Layer2は単一のL1チェーンと繋がるものであるという明確な違いがあります。

例えば、Arbitrum/Optimism/StarkNetなどはL1(Ethereum)と繋がるL2ですが、それぞれに異なるプールが存在していてサイロ化された構造となっており、資金効率やUXの面で課題となっています。

L2がサイロ化された構造のイメージ図

この課題を解決するために、ミドルチェーンによるブリッジングソリューションが試みられてはいるものの、セキュリティリスクの高さなどがネックとなっています。

この問題を根本から(Layer0ベースで)解決しようと試みるのがLayerZeroのアプローチであり、完結かつ抽象的に表現すると、L2が建物であればLayerZeroは土地である程の明確な構造的違いがあると言えます。

LayerZeroのOmnichainコントラクトをデプロイ/転送してみる

本項では、LayerZeroの大まかな概念を理解した次のステップとして、実際にLayerZeroのOmnichainコントラクトをデプロイしてみることで理解を深めることを目的とします。

今回、筆者の作業実行環境は以下です。

  • macOS Big Sur v11.6.2
  • Node.js v16.14.2
  • コード エディター:Visual Studio Code
  • Solidity開発環境:Hardhat

参考:https://github.com/LayerZero-Labs/solidity-examples#readme

まずは、LayerZero-Labsが提供しているsolidity-examplesを、git cloneで複製してみます。

$ git clone https://github.com/LayerZero-Labs/solidity-examples.git

solidity-examplesディレクトリが作成されたので、移動してnpm installを実行します。

//solidity-examples
$ npm install

solidity-examplesディレクトリでnpm installを実行すると、package.jsonに書いてある内容が自動でインストールされるみたいです。

インストールが成功したら、以下コマンドでtestしてみましょう。

$ npx hardhat test 
「4 passing」と表示されれば成功

ここで実行されたtest構文は、以下4つです。

  1. OmnichainFungibleToken.test.js
    burn local tokens on source chain and mint on destination chain
    転送元チェーンでローカルトークンをburnし、転送先チェーンでmintする
  2. OmnichainNonFungibleToken.test.js
    mint on the source chain and send ONFT to the destination chain
    転送元チェーンでmintし、転送先チェーンにONFTを送る
  3. OmniCounter.test.js
    increment the counter of the destination OmniCounter
    転送先のOmniCounterカウンターをインクリメント(+1)する
  4. PingPong.test.js
    increment the counter of the destination PingPong
    転送先のPingPongカウンターをインクリメント(+1)する

次節からは、「② OmnichainNonFungibleToken」について実際に触っていきながら、理解を深めていきたいと思います。

前提

OmnichainNonFungibleTokenでは、開始トークンIDと最大ミント数を引数として、コントラクトをチェーン上にデプロイします。

このとき重要なのは『トークンIDを分けること』なのですが、それは異なるチェーンで同じトークンIDがmintされることがないようにするためです。

今回は例として、bsc-testnetmumbaiという2つのチェーンにLayerZero-Labsが提供しているsolidity-examples内のコントラクトをデプロイし、OmnichainNFTを発行してみたいと思います。

チェーン名開始トークンID最大ミント数
bsc-testnet050
mumbai50100
引数はそれぞれ上記で設定

このようにしておくことで、同じチェーンで同じトークンIDのNFTをmintすることができなくなります。

ちなみにこれらの設定は、solidity-examples/constants/onftArgs.jsonファイルに記載されています。

チェーン間で転送がおこなわれた場合、OmnichainNFTは転送元のチェーン(今回はbsc-testnet)でburnされ、転送先のチェーン(今回はmumbai)でmintされることになります。

.envファイルを作成

Note: Remember to add a .env file with your MNEMONIC=”
注意:MNEMONIC=”.envファイルを追加することを忘れないでください。

出典:README.md

まずはREADME.mdの指示に従って、.envファイルを作成します。

上写真のように、サンプルとして.env.exampleファイルが用意されているので、以下のコマンドで.envファイルとして複製し、MNEMONICの部分をご自身の開発用walletアドレスの12wordsに書き換えて保存します。

$ cp .env.example .env

ちなみに、誤って.envファイルをGitHubなどにアップロードしてしまうとWallet内の資産を全部抜かれたりOwner権を失ってしまうので、扱いには十分気をつけましょう!!

.gitignoreで指定しておくことが大切ですが、筆者はよく分かっていないのでそもそもGitHubなどにアップロードしないようにしています。

MetaMaskにネットワークを追加

サンプルではfujiを使っていますが、今回は代わりにmumbaiを使用していきます。

hardhat.config.jsファイルに書かれた情報を元に、bsc-testnetとmumbaiそれぞれのネットワークをMetaMaskに追加しておいてください。

constants/onftArgs.jsonの情報も、6行目の”fuji”を”mumbai”に書き換えて保存しておきましょう。

faucetでテストネット用のトークンを取得

今回使用するbsc-testnetとmumbaiそれぞれのテストネット用トークンを、それぞれ以下のサイトなどを利用して獲得してください。

OmnichainNFTをデプロイ/転送してみる

では下準備が完了したので、ここからは実際にOmnichainNFTをデプロイ/転送していきます。

① 2つのコントラクトを、それぞれのチェーンにデプロイする

「クロスチェーン/マルチチェーンとの違い」節で述べた通り、チェーンを跨いだ先のNFT「X’」の発行主体について、クロスチェーンの場合がブリッジコントラクトであるのに対して、OmnichainはNFT「X」のコントラクトデプロイ主であるという違いがあります。

ということで、まずは2つのコントラクトを各チェーンにデプロイしていきます。

$ npx hardhat --network bsc-testnet deploy --tags OmnichainNonFungibleToken
このように表示されれば成功
$ npx hardhat --network mumbai deploy --tags OmnichainNonFungibleToken
このように表示されれば成功

② 信頼できるソースを設定し、各コントラクトが互いに、そして互いに”のみ”メッセージを受信できるようにする

OmnichainNFTは、クロスチェーンブリッジのように直接FT/NFTなどアセットを移動するわけではなく、メッセージを送受信してステート管理するという仕組みです。

ということで、各チェーン(今回はbsc-testnet/mumbai)のコントラクトがメッセージを送受信できるように設定します。

$ npx hardhat --network bsc-testnet omnichainNonFungibleTokenSetTrustedSource --target-network mumbai
このように表示されれば成功
$ npx hardhat --network mumbai omnichainNonFungibleTokenSetTrustedSource --target-network bsc-testnet
このように表示されれば成功

③ 各チェーンにOmnichainNFTをmintする

bsc-testnet/mumbaiそれぞれのチェーンで、OmnichainNFTをmintします。

$ npx hardhat --network bsc-testnet omnichainNonFungibleTokenMint
このように表示されれば成功
$ npx hardhat --network mumbai omnichainNonFungibleTokenMint
このように表示されれば成功

④ 自身が、そのチェーン上の、そのトークンの保有者であることを確認する

先ほどmintしたOmnichainNFTのowner(保有者)が、あなたのwalletアドレスであることを確認します。

$ npx hardhat --network bsc-testnet  omnichainNonFungibleTokenOwnerOf --token-id 1
$ npx hardhat --network mumbai omnichainNonFungibleTokenOwnerOf --token-id 51
このように表示されれば成功

⑤ OmnichainNFTをチェーンを跨いで転送する(bsc-testnet => mumbai)

先ほどbsc-testnetチェーンでmintしたOmnichainNFTを、mumbaiチェーンに転送してみます。

$ npx hardhat --network bsc-testnet omnichainNonFungibleTokenTransfer --target-network mumbai --token-id 1
このように表示されれば成功

insufficient funds for intrinsic transaction costとエラーが表示されてしまう場合は、bsc-testnetのfaucetでテストネット用トークンを多めに確保した状態で再度試みてください。

⑥ 転送元チェーン上にトークンが存在しないことを確認する

『④ 自身が、そのチェーン上の、そのトークンの保有者であることを確認する』で実行したコマンドと同じものを試してみます。

$ npx hardhat --network bsc-testnet  omnichainNonFungibleTokenOwnerOf --token-id 1
「ERC721: owner query for nonexistent token.」なので、転送元チェーン上に対象トークンが存在しないことが分かる

⑦ 最後に転送先チェーン上にトークンが存在することを確認する

$ npx hardhat --network mumbai  omnichainNonFungibleTokenOwnerOf --token-id 1
転送先チェーン上に「ownerOf(1)」と表示されているので、転送先チェーン上に対象トークンが存在することが分かる

以上で、bsc-testnetチェーンでmintしたOmnichainNFT(tokenID = 1)を、mumbaiチェーンに転送(bsc-testnetチェーンでburn / mumbaiチェーンでmint)することができました。

他にも、OmnichainFT(Omnichain ERC20)やOmniCounterのセットアップ手順も掲載されているので、より理解を深めたいという方はぜひこちらを参考に遊んでみてください!

参考:
LayerZero_Whitepaper_Release.pdf
Full-chain interoperability: Understanding the LayerZero protocol and its first project, Stargate
LayerZero- An Omnichain Interoperability Protocol

まとめ

本記事では、執筆時点で徐々に頭角を現しつつある「LayerZero」「OmnichainNFT」を中心に取り上げていき、その概要やコンセプトなどについて私見を交えながら解説しました。

本記事が、「LayerZero」「OmnichainNFT」の概要やコンセプト・開発の一例などについて理解したいと思われている方にとって、少しでもお役に立ったのであれば幸いです。

また励みになりますので、参考になったという方はぜひTwitterでのシェア・コメントなどしていただけると嬉しいです。

最後に、「LayerZero」「OmnichainNFT」の概要やその注目ポイントなどについて

  • 聞いてみたいことがある
  • 分からない部分がある
  • もっと多くの情報が知りたい

という方は、Discordコミュニティ「イーサリアムnavi」にご参加ください!

イーサリアムnaviのDiscordコミュニティには

  • Solidityを勉強したい・既に勉強している
  • 開発に興味がある
  • NFTが好き・興味がある

といった方々がたくさん集まっており、日々NFTや開発に関する情報を共有したり、不定期で勉強会などイベントも開催しています。

また、Twitter・YouTubeでの情報発信にも力を入れていますので、合わせてフォローしていただけると幸いです。


今月のスポンサー:Yay! – WEB3時代のSNS「Yay!」でリサーチャー募集

Yay!

匿名コミュニティYay!がリサーチャーを募集中です。

誰もが素が出せて、フラットで、他人に寛容なバーチャルワールドを作っています。

この冬IEOを目指しています。一緒にサスティナブルな経済圏を作っていきましょう!

励みになるので、よかったらSNSなどでシェアしてください!

この記事を書いた人

最先端のCryptoネイティブなNFTプロジェクト、SolidityなどWeb3開発情報、その他Ethereum周りの情報などを中心に発信しています。

リサーチャーやアドバイザー含むお仕事のご依頼や、イーサリアムnaviに対する広告掲載など、お気軽にご連絡ください。

目次
閉じる