![見出し画像](https://assets.st-note.com/production/uploads/images/109988542/rectangle_large_type_2_fa69b17ba555d2aa28d025e94088a8a7.png?width=1200)
【完全保存版】Sygmaを使ってGoerliからSepoliaにトークンを送ってみよう!
0 概要
本日は、Sygmaを用いて、チェーン間でトークンの移動を行ってみましょう。
下のように、GoerliのウォレットからSepoliaのウォレットにトークンを送ります。
![](https://assets.st-note.com/img/1688499218392-VMAQkZHJ13.png?width=1200)
なお、今回はどちらも同じウォレットアドレスに送りますが(Aウォレット→Aウォレット)異なるウォレットでもやり方は同じです。
また、Sygmaについての詳細はこちらの記事をご確認ください。
1 実際にやってみよう
では、実際にやってみましょう。
ここからコードを見ていきますが、実際のトランザクションの流れだけを見たいという方は第3章から見てみてください。
1 git cloneを行う
まず、「sygma-sdk」をgit cloneします。
下のようになります。
git clone https://github.com/sygmaprotocol/sygma-sdk.git
![](https://assets.st-note.com/img/1688498890157-Ik1eL90lb2.png?width=1200)
2 依存関係をインストールする
下のように、インストールを行います。
cd sygma-sdk
yarn install
![](https://assets.st-note.com/img/1688498918046-EsUVFV2zcG.png?width=1200)
3 SDKをビルドする
下のコマンドで行います。
yarn sdk:build
なお、見た目上は特に変化は起こりません。
![](https://assets.st-note.com/img/1688498940991-VaFAebBwLs.png?width=1200)
ちなみに、実態としては、こちらの「yarn workspace」を行っています。
![](https://assets.st-note.com/img/1688499915137-lTQxFPY3cE.png?width=1200)
4 transferを実行する
最後に、「evm-to-evm-fungible-transfer」フォルダに移動し、下のように実行します。
cd examples/evm-to-evm-fungible-transfer
yarn run transfer
下のようになれば成功です。
なお、このようにうまく行くのは、あらかじめ運営が用意した、テスト用の秘密鍵がコードに埋め込まれているからです。
(良いかどうかは別の話です。)
![](https://assets.st-note.com/img/1688498969936-xlC0BnMkiJ.png?width=1200)
2 コードを読んでみよう
では、一つ一つコードを読んでみましょう。
1 Providerの取得
まずは、ethers.jsの「JsonRpcProvider」クラスを使用しています。
GoerliのRPCを設定し、providerを取得しています。
![](https://assets.st-note.com/img/1688443593621-eQ5pRcy32U.png?width=1200)
2 Walletの取得
次に、ethers.jsのWalletクラスを利用して、walletを取得しています。
こちらはテスト用なのでこのようなコードですが、実際には秘密鍵は厳重に保管する必要があります。
![](https://assets.st-note.com/img/1688443696569-kj3fVL2TFa.png?width=1200)
3 EVMAssetTransferの設定
次にアセットの送付用のインスタンスを作成します。
EVMAssetTransfer()でインスタンス作成後、initメソッドで初期化をおこなっています。
![](https://assets.st-note.com/img/1688443899627-IHc1k7QTpD.png?width=1200)
4 トランスファー用データの作成
次に、送付用データを作成します。
「createFungibleTransfer」メソッドで行います。
下のように、「どのアドレスから」「どのチェーンで」「どのアドレスに」を指定します。
![](https://assets.st-note.com/img/1688460453151-J9t7sc6IQr.png?width=1200)
下の箇所で「RESOURCE_ID」を指定します。
![](https://assets.st-note.com/img/1688460620563-00OSuNkR7d.png?width=1200)
ここでは、今回送付するトークン「ERC20LRTest」のリソースIDを指定しています。
今回は、こちらになります。
![](https://assets.st-note.com/img/1688460749594-mBAxi71R85.png?width=1200)
そして、送る量がこちらです。
18の小数点以下の桁数を持つためこの量になっていますが、実際は50トークンです。
![](https://assets.st-note.com/img/1688460866381-h4hR0Fce74.png?width=1200)
5 ガス代の取得
下のように、上で作成した送付用データを元にして、「getFee」を使い、ガス代を求めています。
![](https://assets.st-note.com/img/1688461105154-SfnLq5KmSx.png?width=1200)
6 承認のトランザクションを作成する
資産を送付する前に行う承認のトランザクションを「buildApprovals」で作成します。
![](https://assets.st-note.com/img/1688461521848-GUEP7Zzhdm.png?width=1200)
7 承認トランザクションの送付
上で作成したトランザクションを「sendTransaction」でブロックチェーンに送っています。
なお、「approval」は型アサーションで「providers.TransactionRequest」となっています。
![](https://assets.st-note.com/img/1688461962327-g0mdKud06I.png?width=1200)
結果は下のように、コントラクトアドレスに対して、承認のトランザクションを投げていることがわかります。
![](https://assets.st-note.com/img/1688462190518-pnRrRnsJ9p.png?width=1200)
8 トランスファーのトランザクションを作成する
次に、「buildTransferTransaction」を使って、トランスファー用のトランザクションを作成します。
作り方は承認の時と同じです。
![](https://assets.st-note.com/img/1688498229999-6jD1EYYJ4P.png?width=1200)
9 トランスファートランザクションの送付
では、できたトランザクションを「sendTransaction」でブロックチェーンに送ります。
これもやり方は承認の時と同じです。
「providers.TransactionRequest」という型アサーションを行い、実行しています。
![](https://assets.st-note.com/img/1688498470228-1f3f2D8SjC.png?width=1200)
3 処理の流れを確認しよう
では、最後に今回どのような流れになっていたのかを順を追って見てみましょう。
まずは、こちらのGoerliの処理から見てみましょう。
![](https://assets.st-note.com/img/1688500396895-5UiQnAV28D.png?width=1200)
なお、処理を追う際は、こちらのアドレスのリストを読むと追いやすいです。
![](https://assets.st-note.com/img/1688500636892-eq0jpvvIUQ.png?width=1200)
1 ウォレット→Bridge(Goerli)
下のように、秘密鍵で設定したGoerliのウォレットアドレスからGoerliのBridgeコントラクトに送られています。
![](https://assets.st-note.com/img/1688452011463-w4CYq67e2S.png?width=1200)
![](https://assets.st-note.com/img/1688452015931-Wkb1nLlOGN.png?width=1200)
2 Bridge→Fee Router(Goerli)
次に、GoerliのBridgeコントラクトからGoerliのFee Routerコントラクトに送られています。
Routerなので、手数料についての目的地まで移動するための最適なパス(経路)を決定していると考えられます。
![](https://assets.st-note.com/img/1688452274287-xzglrgig00.png?width=1200)
![](https://assets.st-note.com/img/1688453223367-1H7IQySTBz.png?width=1200)
3 Fee Router→BasicFee Handler(Goerli)
そして、下のように、基本手数料を扱うコントラクトに送られます。
![](https://assets.st-note.com/img/1688452457820-7y6Ik6XFpv.png?width=1200)
![](https://assets.st-note.com/img/1688453272768-NJlL4KQHbN.png?width=1200)
ちなみに、このBasicFee Handlerコントラクトで、手数料が「0.001ETH」と定められています。
![](https://assets.st-note.com/img/1688501087357-22U8AYqJID.png?width=1200)
4 ウォレット→ERC20Handler(Goerli)
上が、手数料の流れでした。
こちらを見ると、「ERC20Handler」コントラクトに、今回指定した50トークンが送られています。
![](https://assets.st-note.com/img/1688452698775-xIv4HS2Wwg.png?width=1200)
![](https://assets.st-note.com/img/1688452867648-2cFlRQsxTv.png?width=1200)
5 ウォレット→Bridge(Sepolia)
さて、とうとう「Sepolia」という別のチェーンにやってきました。
ここで、SepoliaのウォレットからSepoliaのBridgeコントラクトに送られています。
![](https://assets.st-note.com/img/1688453629231-zUyHdmuNAU.png?width=1200)
![](https://assets.st-note.com/img/1688453477009-9qxGqDYBon.png?width=1200)
6 ERC20Handler→ウォレット(Sepolia)
最後に、下のようにSepoliaのERC20HandlerコントラクトからSepoliaのウォレットアドレスに50トークンが送られました。
![](https://assets.st-note.com/img/1688453740413-wGir7LfKqP.png?width=1200)
![](https://assets.st-note.com/img/1688679325991-E8wTdLlVGD.png?width=1200)
以上が処理の流れでした。
実際にやってみることでしっくりくると思います。
よかったら、ぜひ処理の流れを追ってみてください。
以上です。
サポートをしていただけたらすごく嬉しいです😄 いただけたサポートを励みに、これからもコツコツ頑張っていきます😊