LayerZero
https://scrapbox.io/files/63a2d243975fd4001d7374d6.png
LayerZeroはlight client方式を採用している
light client方式はdst chainにsrc chainにlight clientの機能を持ったスマートコントラクトを展開する
light clientは最新のヘッダの情報を保持する
layerzeroはOracleから最新のブロックヘッダーを取得している
検証の際にはマークルツリーからマークルルートを計算してこれがヘッダーに格納されているマークルルートと一致しているかを確認することで検証を行なっている
処理の流れ
user application(ua)がエンドポイントに対してメッセージを送信する
user applicationは開発者が独自で記述しているコントラクトを指す
パラメーターとしてはdst chain id, fee, target contract address, payloadなど
メッセージをパケット化し、Relayerに送信する
dst chain idと現在のblock idをOracleに送信する
Oracleはsrc chainから最新のブロックヘッダーを取得し、Relayerはtransaction proofを取得する
どちらものちの検証に使用する
Oracleがdst chainにブロックヘッダーを送信する
dst chainのコントラクトでブロックヘッダとRelayerに送信されたtransaction proofを使用してマークルツリーに基づく検証を行う
検証が完了したら、エンドポイントにデータを送信し、dst chainのuaに送信する
仮にこの段階でエラーが発生した場合(dst chainのuaでエラーが発生してrevertした場合)、そのトランザクションの再実行を可能にするために、履歴が保存される
再度実行をするか、履歴を削除しないと新しいトランザクションを実行できない