【技術本】ブロックチェーン・プログラミング仮想通貨入門
https://amzn.to/4lYLuWA
【技術本】ブロックチェーン・プログラミング仮想通貨入門
へポスト
ブロックチェーン技術を使った、改ざんが困難かつ誰もが参照可能な共有台帳という仕組みを勉強したい、ビットコイン以外に応用したい人向け。
主にBitcoin環境を構築し、Bitcoinのシステム事例を参考に、各種コマンドやRubyによる実装例でブロックチェーンを中核とした技術内容を紐解いていくので、Bitcoinの環境構築が必須。
技術紹介に関しては、前提技術の必要性の説明から入り、核心の技術的説明をrubyのコードや、bitcoinコマンドの演習で実装例を具体的に説明したあと、現状での課題、問題点なども丁寧に取り上げてくれている。
実際に手を動かしてプログラムを書いて、アーキテクチャを理解したい人向けだと感じた。
------------------------
#環境構築技術メモ
本書は、bitcoin v0.17.xまで対応している。
※v0.18.0以降は、bitcoin-cliなどで廃止されたメソッドがあるため、本書通り検証はできない。
v0.17.xのbitcoind起動時に-deprecatedrpc=accounts(または、bitcoin.confに設定)で廃止予定のメソッドを利用できる。
環境構築は、ubuntu, macOSの方法しか記載されていない。
当方は、CentOS7で構築した。環境構築に少々クセがあったのでメモを以下に記載。
構築:
wget https://github.com/bitcoin/bitcoin/archive/v0.17.0.tar.gz
tar xvfz v0.17.0.tar.gz
cd bitcoin-0.17.0
./autogen.sh
./configure --prefix=<インストールディレクトリ> --with-gui=no BDB_LIBS="-L${BOB_PREFIX}/lib/
※makeを通すのに、上記オプションが必要になった。BDB_LIBS,BDB_CFLAGSなど追加することでwallet関連の機能をmakeでき利用できるようになる。
実際のコマンド例:./configure --prefix=/opt/bitcoin --with-gui=no BDB_LIBS="-L${BOB_PREFIX}/lib/ /usr/lib64/db4.7.25/libdb_cxx.so" BDB_CFLAGS="-I${BDB_PREFIX}/include/"
make -j4 ※数値はmake時並行実行数=CPU数
make install
設定ファイル:
デフォルトは~/.bitcoin/bitcoin.confを読み込む
※boost, berkleyDB各種ライブラリは別途普通にインストールできるので割愛
※testnet3環境だとブロックチェーンのデータサイズは33GB(2019/05現在)くらい。本番は
、200GBを悠に超えるので、環境構築時に領域確保を注意。
---------------------------
#内容メモ
・ビッチコインとブロックチェーンの基本
P2P型システムでネットワークを形成:各システムはノードと呼ぶ
入出金の台帳記録のみで、ビットコインの仕組みを実現している。コイン自体は存在しない。参加ノード全体で相互的に管理するため、中央集権的な認証機関は必要ない。
台帳はブロックチェーンで書き込まれ、記録は非可逆的記録。このため書き換えできない=不正がしにくい
ハッシュチェーンとしてのブロックチェーン:データのハッシュ値を次のデータに埋め込み、それを繰り返し一連のデータを鎖の様に連接させる。このチェーンによって、正しい取引以外の処理の追加や順序の入れ替えができないようにする。
ビットコインの運用上で求められる様々な起こりうる不正を起こらない様にするコンセンサス・アルゴリズムを、プルーフ・オブ・ワーク法で実用に耐えうるレベルで解決策を与えた。
・BitCoinで使用されている暗号技術
暗号学的ハッシュ関数:公開鍵のダイジェスト=ビットコインアドレス、トランザクションのハッシュ=トランザクション識別子、ブロック内のトランザクション群の完全性の保証、ブロックチェーンのブロック順序の保持の保証、マークル木を使ったメンバー判定の効率化など。
公開鍵暗号:ノード同士の認証、電子署名
rubyを使った、ECDSA暗号鍵の生成、電子署名と検証、ビットコインアドレスの生成の演習、各種暗号鍵のフォーマットなどを紹介。
・ビットコインワレット
walletでアドレス生成、アカウント設定、ビットコインの入手と確認、送金、トランザクション内容の確認の演習
手続きで使用する公開鍵、秘密鍵をセキュリティで管理する方法:2レベルセキュリティ(ホットストレージ、コールドストレージで管理)。それをさらに分割した階層的決定性ワレットの紹介。
rubyで階層的決定性ワレットの実装
・ブロックチェーン
ブロックの構造、ブロックハッシュの求め方、マークル木を利用したブロック内のトランザクションをまとめる方法と検証方法。
マイニングの方法
マイニングプールについて。
・トランザクション
トランザクションのデータ構造
署名の仕組み
rubyによる演習
・ノードとビットコインネットワーク
フルノードと、SPVノード:接続プロトコル仕様の解説
・技術文書と開発コミュニティ
技術コミュニティへの提案コミットメントの手順
・Open Assets Protocol
Open Assets Protocolの仕様
・スケーラビリティへの対応
マイクロペイメントチャネル
単方向マイクロペイメントチャネル
双方向マイクロペイメントチャネル
HTLC
HTCLを利用した双方向ペイメントチャネル
ラインとニングネットワーク
Teechan
以上。
へポスト
