Truffleを実行すると発生するeth-block-tracerのSyntaxErrorの解決方法

Calendar Clock iconCalendar Clock icon

イーサリアム

# 目次

async awaitCurrentBlockが認識出来ないというSyntaxErrorが発生し、truffle developが実行出来ないエラーの修正方法を紹介します.

# 問題

async awaitCurrentBlock が認識出来ないというSyntaxErrorが発生し、truffle develop が実行出来ない.

その原因と対策です.

# 発生環境

以下の記事で作っているUbuntu17.10環境です.

5分でできるEthereum開発を快適にする仮想マシンの作成

truffleとInfura.ioを使うためのライブラリインストールコマンドは以下の通りです.

sudo apt-get update
sudo apt-get install -y nodejs npm
npm install truffle
npm install truffle-hdwallet-provider

それぞれのバージョン.

  • node: 6.11.4
  • npm: 3.5.2
  • truffle: 4.1.7
  • truffle-hdwallet-provider: 0.0.5

# 原因

原因は2つありました.

  1. NodeJSのバージョンが7.6未満でasync/awaitを使えないこと
  2. 5月1日にtruffle-hdwallet-providerの内容が大幅に変わり、async/awaitを使うようになったこと

2日前の5月1日にtruffle-hdwallet-provider@0.0.4と0.0.5が公開されていました.

npmではバージョン無指定では最新の安定版がインストールされます.

そのため4月30日と5月1日で↓の通り、バージョンが大きく進歩してコードは全く別物となっていました.

※1つのライブラリのバージョンが上がると依存しているライブラリのバージョンもあがります.

# 4月末まで

  • truffle-hdwallet-provider@0.0.3
  • web3-provider-engine@8.6.1
  • (eth-block-trackerは不使用)

# 5月から

  • truffle-hdwallet-provider@0.0.5
  • web3-provider-engine@14.0.5
  • eth-block-tracker@3.0.0

# 対策

  1. nodejs8系をインストールする

一番良い対策として、可能ならば新しいバージョンに揃えましょう.

async/awaitを使えるようにnodejsのバージョンを7.6以上に上げましょう.

以下のコマンドでUbuntuにnodejs 8系がインストールできます.

※g++などが足りないとエラーが出る場合は別途インストールして下さい.

curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
sudo apt-get install -y nodejs
  1. truffle, truffle-hdwallet-providerをバージョン固定でインストール

ライブラリのインストール時は常にバージョンを指定しましょう.

今回のような予期せぬエラーを防ぐために、バージョン以降のタイミングは自分でコントロールできるようにしておきましょう.

以下のコマンドで5月3日現在の最新版を固定でインストールします.

npm install truffle@4.1.17
npm install truffle-hdwallet-provider@0.0.5

# 参考

2日前5月1日に公開されていたnpmライブラリ

https://www.npmjs.com/package/truffle-hdwallet-provider

そこでweb3-provider-engine@14.0.5を使うようにする変更が入った.

https://github.com/trufflesuite/truffle-hdwallet-provider/commit/def8d45d73c7be77b0b8b3270f5904808d9d2f4d

web3-provider-engine@8.6.1は2017/7/29にマージ.

https://github.com/MetaMask/provider-engine/commit/d4e06a3ab4cd6921dccfeaa8e61c3e5ef8aaffdf?#diff-b9cfc7f2cdf78a7f4b91a753d10865a2

eth-block-trackerのasyncの行がマージされたのは2017/9/23.

https://github.com/MetaMask/eth-block-tracker/commit/b61c15a1c2048393539ecc6cf8c4edd548b0f863

つまり、web3-provider-engine@8.6.1では今回SyntaxErrorが出ていたeth-block-trackerがまだ導入されていなかった.

なんとも変化が速い分野ならではの現象でした.


リモートフリーランス。ウェブサービス、スマホアプリエンジニア。
東アジアを拠点に世界を移動しながら活動してます!

お仕事のご依頼・お問い合わせはこちら

コメント