理系学生日記

おまえはいつまで学生気分なのか

「Programming Bitcoin」を読んだ

Programming Bitcoin を読みました。

実はこの本はまだ出版されていないです。では出版されていない本をどうやって読めたのかというと、この本は github 上で公開されていたりして、 asciidoc 形式なので無償で読めたという話。

PDF にして kindle で読みました。 github から clone 後、以下のようなかんじで PDF 化して結合すれば良いんじゃないかと思います。

$ find . -name \*.asciidoc -print0 | xargs -0 -n1 asciidoctor-pdf

どういう本なのか

Programming Bitcoin は、Bitcoin の処理系を Python で作っていく本です。 Bitcoin のノードを構成するソフトウェアのリファレンス実装は C++ で書かれているのですが、巷には各種言語での実装も多く行われています。この本で Python を扱ったのは、

  • もともと Python の文法は分かりやすいし、書き方も統一される
  • 標準ライブラリが充実している
    • 外部ライブラリの導入を前提にしてしまうと、そのライブラリの使い方の記載も必要で分かりにくくなる。

というのがあったのかなと想像しています。

Mastering Bitcoin との違い

Bitcoin を学ぶのに Mastering Bitcoin がありますが、この本との違いとしては、以下の点が挙げられると思います。

  • より「実装」に近いことを知ることができ、その過程で Bitcoin の原理を知ることができる
  • 新しい本である分、最近(?)Bitcoin に導入された技術についても知ることができる

Mastering Bitcoin は、「どのように Bitcoin の世界が構築されているのか」を記述した本でした。 もちろん Block のフォーマットや Transaction の構造等、非常に詳しく説明していますが、実際の Bitcoin Node とのやりとりは bitcoin-core の提供する JSON-RPC で行われており、 実際に「どのような中身で動いているのか」は想像するしかありませんでした。

一方で Programming Bitcoin では、「実装」をするために必要な事柄 (例えば楕円暗号) をまずは学び、それを実装に落としておく、というアプローチを取っています。 その過程で、Mastering Bitcoin では概要のみ紹介されていた部分にも踏み込まれ、エンジニアとしては「納得感」をより得やすいものだと感じました。

また、こちらもわりと重要ですが、2019 年に出版される本であることもあり、いわゆる Segwit も 1 章をかけて言及しています。 Segwit まで入っている書籍はなかなかない (Bitcoin 自体の構造や実装を紹介した書籍もなかなかないですが) ので、個人的にもすごくありがたかったです。

どのように読めば良いか

ぼく自身は、それでも Mastering Bitcoin を先に読むのが良いと思っています。あの本はほんとうに良くできていて、Bitcoin の全体感はやっぱりすごく把握しやすい。 そしてそれ以上に興味があれば、Programming Bitcoin で、その実現方法まで見てみるのが良いんじゃないでしょうか。実装を先に見ると、どうしてもその全体像がつかみづらくなるので。

なにはともあれ、すごく良い本でした。 年末年始あたりで集中して読んでみたのですが、その価値は十分にあったと思います。