『はじめてのブロックチェーンアプリケーション』を実装してみた①第2章

最近ブロックチェーンを理解する必要が出てきたので、こちらを使って手を動かしながら勉強しています。

はじめてのブロックチェーン・アプリケーション Ethereumによるスマートコントラクト開発入門 (DEV Engineer's Books)

はじめてのブロックチェーン・アプリケーション Ethereumによるスマートコントラクト開発入門 (DEV Engineer's Books)

こちらの書籍は、サンプルのアプリケーションを3種類紹介しているのが特徴で、本文にも明記してありますがエンジニアを対象としています。

ブロックチェーンの開発環境の進化スピードが非常に速いです。ブロックチェーン自体、進化の途上にある技術であるため、半年後には仕様がガラッと変わっていたなんてことはザラです。調べれば解決できますが、なかなか大変です。

そこで、2017年12月の今実装したとき、本文通りにやってもうまくいかないハマりどころを紹介します。もっと先まで進めてからにするつもりでしたが、一旦2章のみで挙げます。

環境の相違

ハマりどころ

Genesis block のフォーマットが違う

書籍が発売されたのがGeth1.6リリースの直前であり、1.5と1.6でGenesis Blockのフォーマットが違うことが記載されていますが、1.7でも変わっています。公式を参考にしましょう。 github.com

ちなみにサンプルはdifficultyが高すぎるので、ブロックを速く作成したいなら少し下げるといいと思います。

miner.start(1)の返り値がtrueではなくnull

P.34でminer.start(1)の返り値はtrueとなっていますが、実際に叩いてみるとnullが返ります。nullで問題ありません。

difficultyが高い状態のままこれに遭遇すると、ブロックが一向に生成されないのでバグっているのかと勘違いすることになります(なりました)。

curl -X POSTが使えない

P.44からJSON-RPCを用いてコマンドを叩いていますが、P.45以降の

curl -X POST --data ・・・を実行すると、

invalid content type, only application/json is supported

というエラーが出ます。これを解決するには、

curl -H "Content-Type: application/json" --data ・・・に置き換えればOKです。


以上が2章のハマりどころでした。ちなみに3章もちょっとだけ触ってみましたが、Geth1.6以降はスマートコントラクトのコンパイルができなくなったという大きな仕様変更が入っていて、いきなり(そしておそらく最後まで)本文の方法が使えないということになりました。

そこら辺は別記事で書きます。


おまけ

Windowsでやったためにハマったところもあって

  • cURLの導入に時間がかかった
  • ダブルクォーテーションのエスケープがめんどくさい
  • コマンドプロンプトのコマンドをいちいち調べるせいで時間食った。プロセスのキル周りとか

あとなんかバグったときにWindows関連でミスっているのかもと考えなければいけないのが結構しんどい