見出し画像

【完全保存版】LayerZeroの「PingPong」コントラクトでチェーン間でメッセージを送ろう!

0 はじめに

今回は、Layer Zero「PingPong」コントラクトのテストを行います。

異なるチェーン間でのやりとりをどのように行うのかを確認します。

1 準備を行おう

まずは、下の記事の第1章第3節までを実施して準備を行なってください。

今回は、こちらのテストを実施します。

では、下のコマンドで、テストを実施します。

npx hardhat test test/contracts/examples/PingPong.test.js

このように、うまくいきました。

そして、下のように2つの種類のコントラクトデプロイされ、4つのメソッド実行されました。

2 コードを読んでみよう

1 署名者の取得

まずは、「getSigners()」関数を用いて、署名者のアカウントを取得します。

2 ownerの設定

取得したものの先頭をownerに設定します。

3 チェーンIDの設定

次にチェーンIDを下のように設定します。

4 LZEndpointMockのデプロイ

次に、「LZEndpointMock」デプロイします。

このとき、チェーンIDはそれぞれ変えます。

下のようになりました。

5 PingPongのデプロイ

次に、「PingPong」コントラクトデプロイします。

先ほどの、「LZEndpointMock」コントラクトに紐づけます。

下のようになりました。

6 目的先Endpointの設定

次に「EndpointMock」目的先Endpointを設定しています。

このような状態になりました。

7 リモートコントラクトの設定

最後に、信頼できるリモート情報を設定しています。

 下のようになりました。

これによって、AチェーンID:2にメッセージを送りたい場合、下のように辿ることができるようになりました。

8 テストの実施(エラーの確認)

次に、「enable」関数trueにしています。

ここだけでは何をしているかわかりませんが、停止状態にしています。

下のように、trueの場合は「_pause」関数を実行させています。

では、実際のテストを見てみましょう。

まずは、停止中の「pingpongA」から処理を行おうとして、エラーになることを確かめています。

そして、「.to.revertedWith」の部分で返ってくるエラーメッセージを指定しています。

9 テストの実施(成功の確認)

次に、停止状態を解除して、行なっていきます。

下のように、正常に動作することを確認しています。

なお、「ping」関数は、下のように、「_lzSend」関数を用いて、目的先にメッセージを送っていることが確認できました。

今回は以上です。

サポートをしていただけたらすごく嬉しいです😄 いただけたサポートを励みに、これからもコツコツ頑張っていきます😊