![見出し画像](https://assets.st-note.com/production/uploads/images/142305541/rectangle_large_type_2_05b2d28c1991c75a7750f52a1f969703.png?width=800)
【完全保存版】LayerZeroをSolanaで始めよう!
当記事は、こちらのドキュメントを翻訳・編集したものです。
注意
Solana OFT、エンドポイント、およびULNプログラムは現在メインネットベータです!
0 はじめに
1 LayerZeroへの接続
どんなデータでもオンチェーンでバイト配列としてエンコードされ、LayerZeroを使用して何らかのアクションをトリガーするために宛先チェーンに配信されることができます。
それがFTやNFTの転送、他のスマートコントラクトの入力であってもです。
そのため、広範にわたる状態の伝播とイベントをサポートする任意のブロックチェーンは、SolanaのようにLayerZeroに接続できます。
ヒント
LayerZeroに初めて触れる方は、続きを読む前に「LayerZeroとは何か?」を確認することをお勧めします。
2 Solanaへの対応
LayerZeroは、EVM(Ethereum Virtual Machine)上でデプロイするSolidityコントラクトライブラリと通信できる姉妹Solanaプログラムを提供します。
これらのプログラムは、Solidity上のコントラクトと同様に、LayerZeroエンドポイントの呼び出しを簡略化します。
そして、メッセージ処理、プロトコル設定用インターフェース、その他の相互運用性ユーティリティを提供します。
3 OFTとOApp
Omnichain Fungible Token (OFT)
オムニチェーンのファンジブルトークン転送を処理およびサポートするために設計されたOAppの拡張。
![](https://assets.st-note.com/img/1717021431672-fdM7cd4Xci.png?width=800)
Omnichain Application (OApp)
オムニチェーンメッセージングと設定のための基本的なプログラムユーティリティ。
![](https://assets.st-note.com/img/1717021285299-sXUewB46z0.png?width=800)
これらのプログラム標準は、オムニチェーンメッセージの送受信に共通の機能を実装しています。
1 Ethereum Virtual Machineとの違い
SolidityとSolanaの完全な違いはこのチュートリアルの範囲外ですが(例:「Ethereum開発者向けの完全なSolana開発ガイド」または「60 Days of Solana by RareSkills」参照)、いくつかの主要な考慮事項をカバーします。
Info
Solana Virtual Machine(SVM)とSolanaアカウントモデルに精通している場合は、このセクションをスキップしてください。
1 Solanaでのスマートコントラクトの作成
EVM互換のブロックチェーンで新しいERC20トークンを作成するには、開発者はERC20スマートコントラクトを継承して再デプロイする必要があります。
![](https://assets.st-note.com/img/1717021561359-RSmBfMr6Ji.png?width=800)
Solanaは異なります。Solidityコントラクトの継承をSolanaに直接翻訳することはできません。
RustにはSolidityのようなクラスがないためです。代わりに、Solanaアカウントモデルはプログラムの再利用性を可能にします。
2 Solanaトークンプログラム
![](https://assets.st-note.com/img/1717017423728-oKFVQ0Qr0I.png?width=800)
発行したい新しいトークンごとに新しいERC20スマートコントラクトをデプロイする代わりに、Solanaトークンプログラムに命令を送り、新しいアカウント(ミントアカウント)を作成します。
![](https://assets.st-note.com/img/1717017481629-cOwIoRDTeD.png?width=800)
このミントアカウントは、プログラムのインターフェースに基づいた一連の値(例:流通しているトークンの数、小数点、トークンをさらに発行できる人、トークンを凍結できる人)を定義します。
![](https://assets.st-note.com/img/1717017614721-gSJFFXnz7Z.png?width=800)
Solana上のアカウントは、実行可能なプログラム(スマートコントラクト)か、データ(例:保有しているトークンの数)を保持します。
補足
「Executable」がtrueかfalseで見分けることができます。
![](https://assets.st-note.com/img/1717017936171-0CKuTYlota.png?width=800)
情報
Solanaトークンが「SPLトークン」と呼ばれることがあります。
SPLはSolanaプログラムライブラリの略で、Solanaチームがオンチェーンにデプロイした一連のSolanaプログラムのことです。
SPLトークンはERC20トークンに似ており、すべてのSPLトークンは標準の機能セットを持っています。
3 プログラム派生アドレス(PDA)
プログラム派生アドレス(PDA)はオンチェーンアカウントのアドレス(ユニーク識別子)として使用でき、プログラム状態を簡単に保存、マッピング、取得する方法を提供します。
(補足 詳しくは、こちらをどうぞ)
例えば、ユーザーのウォレットとSPLトークンミントはトークンアカウントを導き出すために使用できます。
![](https://assets.st-note.com/img/1717018127947-QhLLbWVRWN.png?width=800)
2 OFTプログラム
Solanaアカウントモデルに互換性を持たせるため、Omnichain Fungible Token(OFT)プログラムに既存のSPLトークン標準を拡張します。
![](https://assets.st-note.com/img/1717018965916-JGwNYV9q1I.png?width=800)
それにより、LayerZeroエンドポイントスマートコントラクトと連携します。
1 Solanaでの典型的な開発との違い
①Solanaプログラム開発の典型的なパス
まずは、特定の実装を定義する実行可能なコードと対話またはデプロイします。
そして、そのインターフェースを使用したい他の開発者がアカウントをミントすることです。
![](https://assets.st-note.com/img/1717021818018-jDgHXOcae3.png?width=800)
例えば、SPLトークンプログラムはトークンの挙動を定義し、ミントアカウントは異なるブランドのSPLトークンを定義します)。
②OFTプログラムの場合
OFTプログラムはこの点で異なります。
すべてのSolanaプログラムにはアップグレード権限があり、この権限はすべての子アカウントの実装を変更または修正することができます。
そのため、Solana上でクロスチェーントークンを作成したい開発者は、新しいOFT構成アカウントをミントするために自身のOFTプログラムインスタンスをデプロイする必要があります。
![](https://assets.st-note.com/img/1717019990015-ZaRYSery8K.png?width=800)
2 各自がデプロイする理由
この決定は、OFTプログラムからミントされたトークンがOFTのアップグレード権限を所有し、LayerZero LabsがすべてのOFT構成のために単一の変更可能なOFTプログラムを維持するのに依存しないようにするためです。
補足
つまり、LayerZeroが作ったプログラムをみんながデプロイする形にすると、それぞれ、柔軟なプログラムが作れないということですね。
Solanaのアップグレード権限の動作について詳しくは、「なぜコードの監査だけでは十分でないのか:Solanaアップグレード権限に関する議論」を参照してください。
Info
LayerZero Labsは将来的に他のエンティティと共同で、ユーザーがOFT構成アカウントをミントできるOFTプログラムのバージョンを維持する可能性がありますが、現時点では開発者は自身のOFTプログラムのバージョンをデプロイすることを検討するべきです。
3 Solanaプログラムの作成
Solanaプログラムは通常Rustで開発されます。
LayerZero OAppプログラムもLayerZero Solanaライブラリを活用するためにRustで記述する必要があります。
Solanaでのオンチェーンプログラム開発の概要については、「オンチェーンプログラム開発の概要」を参照してください。
注意
SolanaプログラムをSolidityで記述することを可能にする取り組みはいくつか存在します。
しかしNeon EVMやSolangのようなコンパイラを使用してLayerZero Solidityライブラリをコンパイルすることは、LayerZero RustエンドポイントがSolidityエンドポイントのインターフェースと1対1で一致しません。
Solana LayerZeroエンドポイントでは動作しません。
サポートをしていただけたらすごく嬉しいです😄 いただけたサポートを励みに、これからもコツコツ頑張っていきます😊