ブロックチェーンをつなげるLayerZeroの仕組み

:::note
本記事では，LayerZero V2の概要について解説します．
:::

## はじめに

ブロックチェーン領域では，「異なるブロックチェーン同士を接続し、相互にデータを読み書きできる性質」を**相互運用性**と呼びます．

各々のブロックチェーンが分断された状態では，データがサイロ化されてしまい，十分な活用が見込めません．また，より多くのデータを高速に処理する（スケーラビリティを向上させる）ために，複数のブロックチェーンやLayer2[^l2]を組み合わせた運用が増えており，それぞれのシステムを繋げる技術の需要が高まっています．

[^l2]: データの完全性を保証するブロックチェーン（Layer1）をアンカーとし，オフチェーンで高速にデータを処理するための仕組み．

（関連記事）

- [ブロックチェーンをつなげるIBCとは 〜Relayerを用いたトークン転送〜｜Qiita](https://qiita.com/4ita/items/fcaee86af148a98644ca)
- [ブロックチェーンの相互運用性とは ～クロスチェーンの通信技術～｜日本総研](https://www.jri.co.jp/page.jsp?id=106289)

## LayerZeroとは

LayerZeroはブロックチェーン間のデータ転送を実現する技術の一つで，データの真正性を保ちながら転送するための検証の仕組みを提案しています．特定のブロックチェーンの仕組み（EVMなど）に依存するものではなく，EthereumやAvalancheなどのLayer1，PolygonやBaseなどのLayer2に接続しています．接続しているブロックチェーンの数はメインネットを中心に128となっています（2025.3.28現在）．

以下のページでは，接続しているブロックチェーンごとのメッセージ処理数が分析されています．

https://layerzeroscan.com/analytics/networks

以前は，ブリッジ（ノードやブロックチェーン）がブロックチェーン間の転送においてデータ構築・転送を仲介する形式が多くみられました．

しかし，この方式は「データが正しく確実に転送できるか」がブリッジのセキュリティに依存しており，意図的あるいは過失によりデータの内容が書き変わったり，データが転送されなかったりするリスクが指摘されていました．

そこで，今回紹介するLayerZeroやIBC（上記参照）のような，仲介者を信頼せずにデータを転送できる技術が注目されています．

## Omnichain Mesh Network

LayerZeroでは，複数のブロックチェーン間が持続的かつ密に連携するネットワークを構想しており，この考え方をOmnichain Mesh Networkと呼んでいます．

ロジックが異なるブロックチェーンでも連携できる（＝同じデータを扱える）ように，コントラクト標準（OApp[^oapp] Contract Standard）が用意されています．例として，ブロックチェーン間を転送できるFT（Fungible Token）の標準として，OApp Contract StandardとERC20を継承したOFT[^oft]やSolanaのSPL Tokenに対応したSolana OFT Program[^solana]があります．

[^oapp]: Omnichain Applicationの略称．
[^oft]: Omnichain Fungible Tokenの略称．
[^solana]: https://docs.layerzero.network/v2/developers/solana/oft/program

## データ転送に用いる技術

LayerZeroにおけるデータ転送は，大まかにはスマートコントラクトと複数の検証ネットワークを用いて構成されます．

### データ転送の出入り口となるEndpoint

Endpointはデータの送信元・送信先となるコントラクトです．

送信元では，Endpoint内の設定（OApp Config）に従って，転送するデータ（Message Packet）の構築と発出を行います．OApp Configには利用するMessageLib[^uln]（コントラクト）などが指定されています．

[^uln]: Message Libraryの略称．Endpoint V2では，OAppによる指定がなければUltra Light Node 302と呼ばれるライブラリがデフォルトで利用される．

送信先では，Security Stack（後述）から検証済みデータを受け取り，Executor（後述）を通じてメッセージパケットの中身を解釈して実行します．

### データ処理方法を統一するMessageLib

MessageLibはデータの送信側でメッセージパケットを実際にパッケージングし，受信側で検証するための方法を統一するために用意されているコントラクトです．

Endpointがデータの送受信時にMessageLibを呼び出す仕組みにすることで，クロスチェーンのやり取りにおいても双方が独自にもつ検証アルゴリズムに依存させないという狙いがあります．

また，Omnichain Mesh Networkの連携状態を維持できるように，MessageLibはイミュータブル（書き換え不可）となっています．ライブラリの新規追加はできますが，削除はできないため，後方互換性が保たれます．

### データ検証を担うSecurity Stack

Security Stackとは，検証ネットワーク（DVN[^dvn]）の集合です．いくつかのDVNを組み合わせ，転送するデータの完全性を検証する仕組みをもちます．

[^dvn]: Decentralized Verifier Networkの略称．

Security Stackの構成はアプリケーション側で自由に設定できます．例として，検証必須のDVNと任意のDVNをそれぞれ２つ含み，3 of 4の合意をもって検証成功とみなすと設定したとき，検証必須のDVNすべてと任意のDVNどちらか１つが合意すれば検証成功となります．

ここでの検証はデータが完全性を保っていることのみに限られており，データの内容に関する検証はDVNでの検証を終えた後にMessageLibを介して行われます．

### データ実行を支援するExecutor

Executorはデータの実行・ブロックチェーンへの記録機能を呼び出すエンティティ（Worker）です．

ブロックチェーン間のデータ転送の際には，転送元・転送先の双方のブロックチェーンにデータ（トランザクション）を書き込む必要がありますが，LayerZeroではExecutorがEndpointコントラクトの関数を呼び出すことでその役割を担います．

## データ転送のプロセス

### 送信元ブロックチェーン側の処理

1. OAppコントラクトがデータ転送を準備
1. Endpointコントラクトがメッセージパケットを生成し，イベントとして発出（Emit）

メッセージパケットには，転送するメッセージそのものに加えて，リプレイアタックを防ぐNonceや複数のシステムを跨いでメッセージを追跡可能にするGUID，送信元・送信先を識別するEndpoint IDなどが含まれます．

### 送信先ブロックチェーン側の処理

1. Security Stackがイベントを取得し，送信元ブロックチェーンで一定のConfirmationが確認できた後にメッセージパケットの完全性を検証
1. 閾値以上のDVNが合意すると，ExecutorがEndpointコントラクトの関数を自動で呼び出し
1. 関数が実行され，受信側のOAppコントラクトにデータが到達

メッセージパケットの完全性は，その中身をハッシュ化した値であるpayloadHashを用いて検証します．この仕組みにより，データの転送中に中身が書き換わらないことを保証しています．

また，Executorは送信元ブロックチェーンのネイティブトークンを用いてEndpointコントラクトを呼び出すようになっています．そのため，送信先ブロックチェーンのネイティブトークンは不要となることから，ガス代支払いに必要なトークンの管理の容易化が図られています．

## おわりに

本記事では，仲介者を信頼せずにブロックチェーン間のデータ転送を実現する技術の１つであるLayerZeroのさわりを解説しました．

デプロイ済みのイミュータブルなコントラクトが転送するデータの構築や検証結果の確認を行い，任意の検証ネットワークを通じて閾値以上の合意を求めることで，特定のエンティティやネットワークに依存しなくても完全性を保ったデータ転送の仕組みを構築しています．

<!--

次の記事では，LayerZeroを用いたトークン転送を例に，実装面の解説を行います．

→ [ブロックチェーンをつなげる技術 〜LayerZero 実装編〜]()

-->

## 参考資料

- [LayerZero Documentation | LayerZero](https://docs.layerzero.network/v2)