![見出し画像](https://assets.st-note.com/production/uploads/images/114702057/rectangle_large_type_2_67d5296751fa193c57885733e75e8ee7.png?width=1200)
【完全保存版】BiconomyでAccountA bstractionを実行しよう
0 はじめに
今回は、「Biconomy」の紹介をします。
ここでは、コントラクトアカウントを作成し、そのアカウントからトークンを送付しています。
なお、今回の内容は、こちらの公式のチュートリアルを元にしています。
1 準備を行う
まずは、git cloneで取ってきます。
git clone https://github.com/ytakahashi2020/biconomy_tutorial.git
下のようになりました。
![](https://assets.st-note.com/img/1693270675669-zIyEPUvZyj.png?width=1200)
次に、できたフォルダに行き、依存関係をインストールします。
cd biconomy_tutorial
yarn install
![](https://assets.st-note.com/img/1693270700745-poJmWGmSvJ.png?width=1200)
次に、「.env.example」ファイルをコピーして、「.env」ファイルを作ります。
そして、ご自身の秘密鍵を入れます。
初めてやるときは、テスト用のアカウントが良いと思います。
![](https://assets.st-note.com/img/1693270747220-9dQlPeyKSp.png?width=1200)
秘密鍵を入れた、アカウントには、あらかじめテストトークンを入れておきます。
やり方については、この辺りをご参照ください。
2 実行してみよう
では、「yarn dev」で実行してみましょう。
下のように、コントラクトアカウントを取得しました。
なお、処理が失敗しているのは、残高が入っていないためです。
![](https://assets.st-note.com/img/1693270777861-6s2paBcLE9.png?width=1200)
こちらにも、上のやり方と同様、「mumbai」トークンを入れておきます。(0.03matic程度あれば十分です。)
下のように、トークンが入ったことを確認します。
なお、この時点では、ただのアドレス(EOA)です。
![](https://assets.st-note.com/img/1693272953985-cbZaKca8eP.png?width=1200)
3 再度、実行しよう
では、再び、yarn devを行ってみましょう。
yarn dev
下のように、うまく行っていることがわかります。
今回の処理としては、コントラクトアカウントを作成し、そこから別のウォレットにトークンを送付しています。
![](https://assets.st-note.com/img/1693270926342-iX1W6gvmxZ.png?width=1200)
また、PolygonScanを確認すると、アドレス(EOA)からコントラクトアドレスになったことも確認できます。
![](https://assets.st-note.com/img/1693270957732-S9KccefLTR.png?width=1200)
4 コードを確認してみよう
では、コードを確認してみましょう。
1 .envファイルの反映
下のように、「config()」を使い、「.env」ファイルの中身にアクセスできるようにしています。
「process.env.PRIVATE_KEY」で値を取得しています。
![](https://assets.st-note.com/img/1693271189654-PyaNDt4MGJ.png?width=1200)
2 Bundlerの取得
次は、Bundlerを取得しています。
Bundlerは「UserOperation」をまとめ、下のように、「Entry point コントラクト」に送る役割です。
![](https://assets.st-note.com/img/1693274521109-GRgF6a4Tbj.png?width=1200)
この辺りがご不明の場合は、こちらをご参照ください。
戻りますと、下のように、「バンドラーURL」「チェーンID」「エントリーポイントアドレス」を元に、インスタンスを初期化しています。
確かに、どのチェーンか、どのエントリーポイントか(どこに送るの?)は必要な要素ですね。
![](https://assets.st-note.com/img/1693271274318-WKkZpopvaN.png?width=1200)
3 providerの作成
次は、「ethers」の「providers」を用いて、「provider」を作成しています。
ブロックチェーンとやりとりを行うために必要なものです。
![](https://assets.st-note.com/img/1693271331910-9pkU2GlKzj.png?width=1200)
4 walletの取得
次に、秘密鍵から、「ethers」の「Wallet」を用いて、ウォレットを作っています。
こちらを署名者に設定することになります。
![](https://assets.st-note.com/img/1693271460200-fuCV7Xgr9D.png?width=1200)
5 スマートアカウントの構成情報の設定
次に、スマートコントラクトを作るのに必要な情報を「biconomySmartAccountConfig」にまとめています。
下のように、「署名者」「チェーンID」「バンドラー」を設定しています。
![](https://assets.st-note.com/img/1693271510444-gSLfuPfK8N.png?width=1200)
6 スマートアカウントの作成
上の情報を元に、「createAccount」関数を作り、下のように、スマートコントラクトを作成しています。
まずは、オブジェクトを作成しています。
![](https://assets.st-note.com/img/1693271578180-XZp0dhjsqs.png?width=1200)
その上で、「init」関数を使い、初期化を行っています。
そして、オーナーアドレス(秘密鍵で設定したアドレス)とコントラクトアカウントのアドレスを表示させています。
![](https://assets.st-note.com/img/1693271618667-OLeZs73ehJ.png?width=1200)
7 トランザクションの作成
最後に、createTransaction関数を定義し、末尾の部分で実行しています。
![](https://assets.st-note.com/img/1693271717622-MA4xrHbJCf.png?width=1200)
まずは、上で定義した、「createAccount」関数で、コントラクトアカウントを作成します。
![](https://assets.st-note.com/img/1693276250218-rJ7qzwnrg9.png?width=1200)
その上で、トランザクションに必要な情報を集めています。
「to」のアドレスは、チュートリアルにあったアドレスですが、変えても大丈夫です。
送付を行うだけなので、「data」は「0x」(内容なし)で、valueが「0.01」maticです。
![](https://assets.st-note.com/img/1693276231622-CZL2ujqAk3.png?width=1200)
そのトランザクションの情報を元に、「userOperation」を作成しています。
![](https://assets.st-note.com/img/1693271778174-qOMmsWMn6R.png?width=1200)
なお、「UserOperation」はこちらになります。
![](https://assets.st-note.com/img/1693280566050-tsOmvdg6Ss.png?width=1200)
次に、「Paymaster」を設定します。
ただ、今回は、使用しないので、「0x」(なし)と設定しています。
![](https://assets.st-note.com/img/1693271802036-IhFfgPDE93.png?width=1200)
次に、「sendUserOp」でUserOperationをバンドラーに送付しています。
![](https://assets.st-note.com/img/1693271814748-E8cYd6WKe6.png?width=1200)
完了まで、下のように待ち、結果を「transactionDetail」で取得しています。
![](https://assets.st-note.com/img/1693271835179-vY14RlRgM7.png?width=1200)
最後に、結果を下のように表示させています。
![](https://assets.st-note.com/img/1693271847105-78X4EfE0SM.png?width=1200)
今回は以上です。
サポートをしていただけたらすごく嬉しいです😄 いただけたサポートを励みに、これからもコツコツ頑張っていきます😊