ethereum

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

Truffleを実行すると発生するeth-block-tracerのSyntaxErrorの解決方法
Feb. 2, 2020, 1:51 p.m.

目次

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

問題

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

その原因と対策です.

発生環境

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

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

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

1
2
3
4
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++などが足りないとエラーが出る場合は別途インストールして下さい.

1
2
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日現在の最新版を固定でインストールします.

1
2
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がまだ導入されていなかった.

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