TruffleはEthereumスマートコントラクトの開発フレームワークとして最も有名ですが、GitHubなどに上がってるコードを参考に見てみると、雰囲気で使ってるんじゃないかと思うことがあります。
中には効率が悪いものもあって、Javascriptの並行処理を使ったり、トランザクションをバッチ処理することで高速化できるようなコードを見かけることもあります。
本記事では、Truffleを使ってコントラクトをデプロイする際に、バッチリクエストをすることでデプロイを高速化するための方法について紹介します。
基本のTruffle migrate
まず次のような2つのコントラクトが存在する状況を考えます。
ContractTwoはContractOneに依存しており、したがってContractOneのデプロイが完了してからでないとContractTwoをデプロイできません。
これら2つのコントラクトをデプロイするようなマイグレーションスクリプトは以下のように書けます。
急に複雑になった感じがしますが、簡単にいうと
という感じです。こうなるようにデプロイするにはどうしたらいいでしょうか。単純に書くと次のようになります。
これで問題なくデプロイできるのですが、7回ものトランザクション承認が必要となり、デプロイにすごく時間がかかってしまいます。
プライベートネットでは気にならないかもしれませんが、テストネットでデプロイしようとすると急激に遅くなってしまいます。
またsetAcceptableの方はPromise.all構文を利用し並行処理することによって高速化できます。awaitの回数は当初7回に対して、改善したデプロイスクリプトでは3回と半減しています。
いかがでしょうか。ぜひ快適なデプロイ生活を!
これら2つのコントラクトをデプロイするようなマイグレーションスクリプトは以下のように書けます。
複雑なマイグレーション
では、次のようにたくさんのコントラクトがある状況を考えます。急に複雑になった感じがしますが、簡単にいうと
- ContractDはContractA, ContractB, ContractCに依存している
- ContractDがデプロイできたらContractDのアドレスをContractA, ContractB, ContractCのsetAcceptableを使ってsenderの登録をしたい
という感じです。こうなるようにデプロイするにはどうしたらいいでしょうか。単純に書くと次のようになります。
これで問題なくデプロイできるのですが、7回ものトランザクション承認が必要となり、デプロイにすごく時間がかかってしまいます。
プライベートネットでは気にならないかもしれませんが、テストネットでデプロイしようとすると急激に遅くなってしまいます。
効率化されたTruffle migrate
そこで次のようにdeployer.deploy([])構文で書き直すと、一度のトランザクションに複数のデプロイメントをまとめることができ、デプロイのスピードが速くなります。またsetAcceptableの方はPromise.all構文を利用し並行処理することによって高速化できます。awaitの回数は当初7回に対して、改善したデプロイスクリプトでは3回と半減しています。
いかがでしょうか。ぜひ快適なデプロイ生活を!
0 件のコメント :
コメントを投稿
Leave a Comment...