layerzero-messaging について
layerzero-messagingは、EVMチェーンとHedera間でLayerZero V2のOApp/OFTメッセージングを構築するスキルです。ペア構成のOFTとHederaのHTSコネクターを中心に、ピアやライブラリの設定、トークン処理、送信手数料を扱います。
主な機能
- 01EVMとHederaのペアOFT
- 02HTSコネクターのトークン処理
- 03ピアとライブラリの設定
- 04LayerZero V2の送信と手数料
- 05Hederaトークンの関連付け案内
活用シーン
- 01EVM–Hedera間のトークン経路設定
- 02HTSベースのOFT送金実装
- 03送信前のピア、ライブラリ、受信設定確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ hedera-dev/ hedera-skills --skill layerzero-messagingインストール後、Claude Code で/layerzero-messagingを入力して読み込まれたか確認します。
同梱ファイルreferences/examples.mdreferences/hedera-endpoints.md
詳細
LayerZero メッセージング(Hedera)
OFT パターン: ペアとなる Omnichain Fungible Token をデプロイします。EVM 側には標準の OFT を、Hedera 側にはHTS コネクター OFTをデプロイし、両方向に setPeer を設定して、LayerZero V2 の手数料で送信します。
OFT (EVM) ←setPeer→ HTSConnectorOFT (Hedera)
│ send / quoteSend │ _debit burn / _credit mint (HTS 0x167)
└──────── Endpoint V2 + ULN + DVN + Executor ────────┘
このスキルでは、LayerZero V2 OApp/OFT + Hedera HTSに焦点を当てています。学習用テンプレートでは、シンプルなワーカーや手動/UI による lzReceive リレーを使用する場合があります。これは本番環境における LayerZero Labs の検証と同じものではありません。
クイックリファレンス
| 概念 | ルール |
|---|---|
| エンドポイント | チェーンごとの ILayerZeroEndpointV2 |
| ピア | 両方の側で setPeer(remoteEid, bytes32(uint256(uint160(remoteOApp)))) を設定 |
| 送信 | quoteSend(SendParam, payInLzToken) → send{value: nativeFee}(SendParam, fee, refund) |
| 受信先 | SendParam の to は bytes32(アドレスをパディングした値) |
| Hedera OFT | HTS ベースのコネクター。HTS トークンを作成し、送信時にバーン、受信時にミント |
| HTS 手数料 | createFungibleToken の支払いに使用するネイティブトークンを添えてコネクターをデプロイ |
| 承認 | Hedera → EVM の send の前に、ユーザーはHTS トークンで approve(connector, amount) を実行する必要があります |
| ID | ピア/dstEid には LayerZero の EID を使用します。EVM のチェーン ID ではありません |
Endpoint/ULN/DVN アドレスの参照元については、references/hedera-endpoints.md を参照してください。ワイヤリングと送信の概要については、references/examples.md を参照してください。
重要:両方向をワイヤリングする
ピア設定が不完全だと、経路が使用不能になります。ローカルの各 OApp で、次の設定を行います。
setPeer(remoteEid, remoteOAppAsBytes32)setSendLibrary/setReceiveLibrary(ULN302)setConfig— 送信ライブラリに ExecutorConfig(type1)、送信および受信ライブラリに UlnConfig(type2)setEnforcedOptions— 例:msgType1(トークン送信)向けのlzReceiveガス
送信前に、両チェーンで peers(remoteEid) を使って確認してください。
重要:Hedera HTS コネクターの仕様
Hedera では、主要な経路として通常の ERC-20 OFT を使用しないでください。HTS ベースのコネクターを使用します。
- コンストラクターがプリコンパイル
0x167を介して代替可能な HTS トークンを作成します(supply key = connector) _debit:HTS トークンを受け取り → バーン_credit:ミント → HTS トークンを送信- 数量は、HTS のミント/バーン/送信で
int64に収まる必要があります - EVM → Hedera の受信前に、受信先アカウントを HTS トークンに関連付けてください
// Deploy with value so createFungibleToken fee is paid
new HTSConnectorOFT{ value: htsCreateValue }(name, symbol, lzEndpoint, owner);
送信フロー
SendParam memory sendParam = SendParam({
dstEid: remoteEid,
to: bytes32(uint256(uint160(receiver))),
amountLD: amountLD,
minAmountLD: (amountLD * 9) / 10,
extraOptions: OptionsBuilder.newOptions().addExecutorLzReceiveOption(lzReceiveGas, 0),
composeMsg: "",
oftCmd: ""
});
MessagingFee memory fee = IOFT(localOFT).quoteSend(sendParam, false);
IOFT(localOFT).send{ value: fee.nativeFee }(sendParam, fee, payable(refundTo));
Hedera → EVM に関する注意: forge による手数料シミュレーションは、Hedera JSON-RPC の wei/tinybar のスケーリングと一致しない場合があります。この方向では、cast で quote し、ネイティブ手数料をスケーリングすることがよくあります。
デプロイチェックリスト(一般)
- EVM
OFTをデプロイ(必要に応じて事前ミント) - HTS 作成用の値を添えて Hedera HTS コネクター OFT をデプロイ
- ワーカーをデプロイ(Labs DVN/executor または学習用のシンプルなワーカー)
- 両方の OApp をワイヤリング(
setPeer+ ライブラリ + 設定 + enforced options) - Hedera アカウントを
htsTokenAddress()に関連付ける - 該当する場合はフロントエンドの設定を同期し、UI の自動リレーを使う場合はリレー用鍵に資金を用意
- 少額を送信し、LayerZero Scan で追跡(該当するテストネット/メインネット)
学習用リレー
一部のテンプレートでは、シンプルな DVN/executor モックと明示的な lzReceive リレー手順を使用します。これは学習用の補助として扱ってください。本番アプリでは LayerZero の検証ネットワークを利用し、アプリサーバー内の独自リレーヤー鍵には依存しません。
チェックリスト
- 正しい EID(EVM のチェーン ID ではない)を使って、両方向のピアを設定済み
- 送信/受信ライブラリと ULN/executor の設定を適用済み
- Hedera 側が HTS コネクターであり、作成手数料を支払い、supply key がコネクターになっている
- インバウンド送信の前に、受信先を HTS トークンに関連付け済み
-
quoteSendのネイティブ手数料をsendに添付済み - 受信先アドレスを
bytes32としてエンコード済み - 学習用である旨の免責事項を記載(監査未実施/メインネットの資金には使用しないこと)
参考資料
- references/examples.md — OFT、HTS コネクター、ワイヤリング、送信
- references/hedera-endpoints.md — EID とチェーン ID の違い、アドレスの参照元
- LayerZero V2 ドキュメント
- LayerZero デプロイメントメタデータ