ブロックチェーン・仮想通貨・暗号資産の開発ブログ

バッチリクエストを利用してTruffle migrateを高速化する方法

TruffleはEthereumスマートコントラクトの開発フレームワークとして最も有名ですが、GitHubなどに上がってるコードを参考に見てみると、雰囲気で使ってるんじゃないかと思うことがあります。

中には効率が悪いものもあって、Javascriptの並行処理を使ったり、トランザクションをバッチ処理することで高速化できるようなコードを見かけることもあります。

本記事では、Truffleを使ってコントラクトをデプロイする際に、バッチリクエストをすることでデプロイを高速化するための方法について紹介します。

基本のTruffle migrate

まず次のような2つのコントラクトが存在する状況を考えます。

ContractTwoはContractOneに依存しており、したがってContractOneのデプロイが完了してからでないとContractTwoをデプロイできません。

これら2つのコントラクトをデプロイするようなマイグレーションスクリプトは以下のように書けます。

複雑なマイグレーション 

では、次のようにたくさんのコントラクトがある状況を考えます。

急に複雑になった感じがしますが、簡単にいうと

  • ContractDはContractA, ContractB, ContractCに依存している
  • ContractDがデプロイできたらContractDのアドレスをContractA, ContractB, ContractCのsetAcceptableを使ってsenderの登録をしたい

という感じです。こうなるようにデプロイするにはどうしたらいいでしょうか。単純に書くと次のようになります。

これで問題なくデプロイできるのですが、7回ものトランザクション承認が必要となり、デプロイにすごく時間がかかってしまいます。

プライベートネットでは気にならないかもしれませんが、テストネットでデプロイしようとすると急激に遅くなってしまいます。

効率化されたTruffle migrate

そこで次のようにdeployer.deploy([])構文で書き直すと、一度のトランザクションに複数のデプロイメントをまとめることができ、デプロイのスピードが速くなります。

またsetAcceptableの方はPromise.all構文を利用し並行処理することによって高速化できます。awaitの回数は当初7回に対して、改善したデプロイスクリプトでは3回と半減しています。

いかがでしょうか。ぜひ快適なデプロイ生活を!

Shun Takagiwa / 高際 隼

Blockchain Engineer at LayerX inc.
コメント機能やTwitterなどでお気軽にコメントいただけると嬉しいです。

0 件のコメント :

コメントを投稿

Leave a Comment...