見出し画像

【完全保存版】BiconomyでAccountA bstractionを実行しよう


0 はじめに

今回は、「Biconomy」の紹介をします。

ここでは、コントラクトアカウントを作成し、そのアカウントからトークンを送付しています。

なお、今回の内容は、こちらの公式のチュートリアルを元にしています。

1 準備を行う

まずは、git cloneで取ってきます。

git clone https://github.com/ytakahashi2020/biconomy_tutorial.git

下のようになりました。

次に、できたフォルダに行き、依存関係インストールします。

cd biconomy_tutorial 
yarn install

次に、「.env.example」ファイルをコピーして、「.env」ファイルを作ります。

そして、ご自身の秘密鍵を入れます。

初めてやるときは、テスト用のアカウントが良いと思います。

秘密鍵を入れた、アカウントには、あらかじめテストトークンを入れておきます。

やり方については、この辺りをご参照ください。

2 実行してみよう

では、「yarn dev」で実行してみましょう。

下のように、コントラクトアカウントを取得しました。

なお、処理が失敗しているのは、残高が入っていないためです。

こちらにも、上のやり方と同様、「mumbai」トークンを入れておきます。(0.03matic程度あれば十分です。)

下のように、トークンが入ったことを確認します。

なお、この時点では、ただのアドレス(EOA)です。

https://mumbai.polygonscan.com/address/0xda2b920dc1ee829985fa580deb3296202c54362a#internaltx

3 再度、実行しよう

では、再び、yarn devを行ってみましょう。

yarn dev

下のように、うまく行っていることがわかります。

今回の処理としては、コントラクトアカウントを作成し、そこから別のウォレットにトークンを送付しています。

また、PolygonScanを確認すると、アドレス(EOA)からコントラクトアドレスになったことも確認できます。

https://mumbai.polygonscan.com/address/0xda2b920dc1ee829985fa580deb3296202c54362a#internaltx

4 コードを確認してみよう

では、コードを確認してみましょう。

1 .envファイルの反映

下のように、「config()」を使い、「.env」ファイルの中身にアクセスできるようにしています。

「process.env.PRIVATE_KEY」値を取得しています。

2 Bundlerの取得

次は、Bundlerを取得しています。

Bundler「UserOperation」をまとめ、下のように、「Entry point コントラクト」に送る役割です。

この辺りがご不明の場合は、こちらをご参照ください。

戻りますと、下のように、「バンドラーURL」「チェーンID」「エントリーポイントアドレス」を元に、インスタンスを初期化しています。

確かに、どのチェーンかどのエントリーポイントか(どこに送るの?)は必要な要素ですね。

3 providerの作成

次は、「ethers」「providers」を用いて、「provider」を作成しています。

ブロックチェーンやりとりを行うために必要なものです。

4 walletの取得

次に、秘密鍵から、「ethers」「Wallet」を用いて、ウォレットを作っています。

こちらを署名者に設定することになります。

5 スマートアカウントの構成情報の設定

次に、スマートコントラクトを作るのに必要な情報を「biconomySmartAccountConfig」にまとめています。

下のように、「署名者」「チェーンID」「バンドラー」を設定しています。

6 スマートアカウントの作成

上の情報を元に、「createAccount」関数を作り、下のように、スマートコントラクトを作成しています。

まずは、オブジェクトを作成しています。

その上で、「init」関数を使い、初期化を行っています。

そして、オーナーアドレス(秘密鍵で設定したアドレス)コントラクトアカウントのアドレスを表示させています。

7 トランザクションの作成

最後に、createTransaction関数を定義し、末尾の部分で実行しています。

まずは、上で定義した、「createAccount」関数で、コントラクトアカウントを作成します。

その上で、トランザクションに必要な情報を集めています。

「to」のアドレスは、チュートリアルにあったアドレスですが、変えても大丈夫です。

送付を行うだけなので、「data」「0x」(内容なし)で、value「0.01」maticです。

そのトランザクションの情報を元に、「userOperation」を作成しています。

なお、「UserOperation」はこちらになります。

https://zenn.dev/yuki2020/articles/00242351b3b3aa

次に、「Paymaster」を設定します。

ただ、今回は、使用しないので、「0x」(なし)と設定しています。

次に、「sendUserOp」UserOperationバンドラーに送付しています。

完了まで、下のように待ち、結果を「transactionDetail」で取得しています。

最後に、結果を下のように表示させています。


今回は以上です。

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