道産子エンジニア

毎週好きなこと書きます。

仮想通貨やブロックチェーンの勉強雑メモ

巷で話題の仮想通貨。元同期から数年前に色々聞いていたが勉強するの遅かった…。本をざっと読んで大まかな内容は把握できてきた。最近だとBTCのマイニングは気軽に試せないので、実装して動かしてってのがやりにくい。もっといろんなオルトコインについて調べて運用してみればさらに理解が深まりそう。自分で何をみて勉強したらいいか考えようと思ったけど、どうせならすでに勉強してる同期からおすすめしてもらった方がいいと思い、この三冊を紹介されたので読んだ。

ブロックチェーン 仕組みと理論  サンプルで学ぶFinTechのコア技術

ブロックチェーン 仕組みと理論 サンプルで学ぶFinTechのコア技術

  • 作者: 赤羽喜治編著,愛敬真生編著
  • 出版社/メーカー: リックテレコム
  • 発売日: 2016/10/15
  • メディア: 単行本(ソフトカバー)
  • この商品を含むブログを見る

読書所用時間:約5時間
オススメ度:★★★★☆

これはエンジニア向けの内容ではあるが、全体的にざっくりとした説明なので、とっかかりを掴むのであれば読みやすかった。全体的な概要を知っている場合はあまり読まなくても良さそう。BitcoinやEthereumなどをGithubからクローンしてローカル環境の構築、テスト稼働なども書かれているのでざっと体験できる。

ビットコインとブロックチェーン:暗号通貨を支える技術

ビットコインとブロックチェーン:暗号通貨を支える技術

読書所用時間:約8時間
オススメ度:★★★★☆

こっちもエンジニア向けで、より詳細な技術の理論についての部分が書かれていて理解が深まる。ブロックチェーンそのものは全て既存技術の組み合わせなので、それぞれを図付きで丁寧に説明している内容だった。もちろん数学的に本格的なことまでは書かれていない。英語の原著はオライリーの本のこちら。

Mastering Bitcoin: Programming the Open Blockchain

Mastering Bitcoin: Programming the Open Blockchain

じつはこの本クリエイティブコモンズライセンスで公開されていて、有志の日本語翻訳も公開されている。レイアウト崩れが気にならなければタダで読める↓

Translations – Mastering Bitcoin

github.com

Githubでも公開されている。Second editionが最新っぽい。

ブロックチェーン イーサリアムへの入り口

ブロックチェーン イーサリアムへの入り口

  • 作者: 日本電気株式会社 金融システム開発本部 金融デジタルイノベーション技術開発室,コンセンサス・ベイス株式会社
  • 発売日: 2017/07/09
  • メディア: Kindle版
  • この商品を含むブログを見る

読書所用時間:約3時間
オススメ度:★★★☆☆

こちらはEthereumの概要、ネットワーク構成、実際に動かしかたなど、どうやって実装するかの部分をより詳しく書いていた。geth(gethはEthereumのGo実装)を使ってローカル環境を作ったりできる。ブロックチェーンを作成するコアであるコントラクトの実装方も紹介されていていい。フロントとバックエンドなどの各パートの把握、構成を理解するのに役立った。

github.com

本を読んでわかったのは、ネイティブアプリ開発で貢献するなら暗号についてもっと勉強必要で、それを実際にクライアントに乗せてさらにサービス開発できるところまでいければ良さそうということ。仮想通貨を扱うサービスが軒並み増えているので、アプリ側で特に必要なのはセキュリティと暗号の理解だと感じた。この辺、ちょっと試してみようかなぁ。

雑メモ

分散したネットワーク環境において、唯一の情報を共有し、それに基づいて何らかの処理を行う がブロックチェーンの基礎。しかし、ビットコインの為に生まれたのでやはり仮想通貨に特化している。それを汎用的にしているのがスマートコントラクトとなる

  • 基本技術は以下の四つ
    • P2Pネットワーク
    • ブロックチェーン
    • 分散マイニング
    • トランザクションスクリプト(取引履歴とその処理系)
  • ブロックチェーンはデータの作成、データの内容、改ざんの有無を保証できる技術
  • Bip(Bitcoin Improvement Proposals)はBitcoin改善の提案書
  • 大前提としてブロックチェーンでコスト削減という誤認識
    • そもそもそんな意識がなかったのだが、技術の成り立ち、特性を知るのは大切
  • P2Pネットワークで動く
    • トランザクションのブロードキャストは数秒!
  • ビザンチン将軍問題を解決している
  • コントラクトの仕組みそのものはサプライチェーンやトレーサビリティなど応用範囲はたくさんありそう
  • 取引記録をすべての参加者が共有
  • 水増しは他の参加者に否定される
    • ある時点で書き込みができるのはその時のみなので、改竄するにはそこまでのすべてのブロックを書き直す必要があるので実質無理である
  • 取引をデータ化出来るものじゃないとキツそう
  • 権利や証拠を残していくものは良さそう
  • 計算能力を51%以上占有していると実質操作可能な市場になる
    • だがそれを用いてハッキングしても自分の資産価値が減るだけなのでやらないだろうというのが根本
  • 決済の不確実性
  • ネットワークによる性能限界はある
  • ブロックチェーンデータの容量が大きい問題
  • BlockChainの課題
    • 取引実行スクリプトは署名対象じゃない
    • データは秘匿情報じゃない
    • アカウント検証ができない
  • block chain explorerで検索すると全ての取引について調べられるWebサイトがたくさんでてくる

暗号技術と離散対数問題

秘密鍵、公開鍵、トランザクション、Bitcoinアドレス、署名などなどブロックチェーンを支えるほぼ全ての部分に置いて、暗号技術が重要になってる。秘密鍵以外のこれらの情報が全てのノードに公開、共有されてP2Pのネットワークに乗っているのは、暗号技術があるためだ。Bitcoinでは秘密鍵は1からn - 1の間の任意の整数で、

  • 公開鍵の作成にECDSA(楕円曲線暗号を使った楕円曲線DSA =ECDSA=Elliptic Curve Digital Signature Algorithm)
  • Bitcoinアドレスの作成にSHA-2のSHA-256とRIPEMD160のダブルハッシュ
  • できあがった160bitのアドレスをBase58Checkでエンコード

となっている。この辺について読んで理解はしたが、実際にJavaで実装してみるのが楽しいかもしれない。(Mastering BitcoinにはPython実装が載っている)つまるところ、ある値からある値を求める計算において、AからBを求める(ハッシュ化)のは簡単だが、BからAを求めるのは難しいという 一方向性関数 の仕組みが重要なのだ。新しいコンセンサスアルゴリズムを考えるのが楽しそう。(簡単ではないが…)

全体的に勉強不足なのでAndroidでウォレットを作ってみるのが早そう。夏休みにやろうかな。

近い文脈で離されがちなICOについて

最近のVALUとヒカル事件などでとりだたされいるICOはBTCに換金できるサービスが多いせいか、同じ文脈で語られることが多いが、換金対象がBTCであることが多いだけで、まったく関係のないものだ。その辺はちゃんと理解しておきたい。

その辺の話についてはこの辺を参照すると大体流れを掴める

tannomizuki.hatenablog.com

記事からもわかるように、個人でお金を簡単に集められる時代がきている。自分の身の回りでは先輩と飯に行ったときにKyashで支払いをしたり、会社の同僚がVALUで時価総額跳ね上がってたりと自然に目に入ってくる。

fukuyuki.net

これも面白い。収入によっては税金周りちゃんとしておいた方が良さそう。

今後も勉強してかないといけないやつ

  • 暗号技術とセキュリティわまり
  • P2Pネットワークの詳しい仕組み(すごく近くに得意な人いるなぁ)

そのほかの情報源

twitter.com

大石さんのTwitterは要チェックかと。

その大石さんらが運営してるビットコイン研究所ブログ

doublehash.me

ザキヤマさんのTwitter

twitter.com

BitcoinNews

btcnews.jp

富士ゼロックス社員のスライドが図付きでわかりやすい。

www.slideshare.net