最近ブロックチェーンを理解する必要が出てきたので、こちらを使って手を動かしながら勉強しています。
はじめてのブロックチェーン・アプリケーション Ethereumによるスマートコントラクト開発入門 (DEV Engineer's Books)
- 作者: 渡辺篤,松本雄太,西村祥一,清水俊也
- 出版社/メーカー: 翔泳社
- 発売日: 2017/08/03
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
こちらの書籍は、サンプルのアプリケーションを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でやったためにハマったところもあって
あとなんかバグったときにWindows関連でミスっているのかもと考えなければいけないのが結構しんどい