272ページ中31〜34ページ。
前回まで
取引データが支払か受取か判別する方法を知りたくて読む。
今回
マイニングの話なのでトランザクションからは離れてしまう。でも一応読んでおく。
Bitcoinマイニング
- 取引はトランザクションとしてBitcoinネットワークに伝わった
- トランザクションはマイニングされることでブロックチェーンに取り込まれる
取引のうち支払う人がトランザクションを作成し、ネットワークに通知する。マイナーはそれを受け取ってマイニングすることで、取引データをブロックチェーンに取り込む。
- マイニングとは膨大な計算を要する行為である
- ブロックチェーンに取り込まれたか判定するのは簡単な計算で済む
マイニング専用コンピュータがあるって、ばっちゃが言ってた。
- マイニングは各ブロックの中に新しいbitcoinを作る(中央銀行が新しい紙幣を刷るのと同じ)
- ブロックごとに作成されるコイン量は決められており、時間とともに減少する
え、新しいコインを作るの? マイニングは取引を承認しブロックチェーンに取り込み、その手数料をもらうだけでなく、新しいコインを作るの? ふーん? だからマイニング(採掘)って呼ぶのか。
ブロック
ブロックとは何か。8ページ目に説明がある。
グループにまとめられたトランザクションのことで、タイムスタンプとひとつ前のブロックのフィンガー プリントが刻印されています。ブロックヘッダのハッシュ値が求められることでproof of workが作られ、それによってトランザクションが検証されます。検証されたブロックは、ネットワークに おける合意によりブロックチェーンに加えられます。
「ブロックとは、グループにまとめられたトランザクションのこと」らしい。
複数のトランザクションをひとつのグループにまとめてブロックにし、その単位で検証とやらをし、それが済んだブロックは合意とやらを成したのちブロックチェーンに加えられる。ということか。
ブロックチェーンのブロックは、トランザクションの集まりってことね。
「タイムスタンプとひとつ前のブロックのフィンガー プリントが刻印されています」ともある。これって、モナコインの取引トランザクションを取得する方法を調べたときAPIで取得したトランザクションデータ配列の要素ひとつのことをブロックと呼んでいるって意味でいいのかな? あれにはvin
とvout
がある。たぶんそれが「グループにまとめられたトランザクション」かな? タイムスタンプもあるし。まあそんなことは一言も書いていないから違うかもしれないけど。
マイニングは信用を作り出す
マイニングは、信用を作り出します。マイニングは、「トランザクションを含むブロックに十分な計算量 がつぎ込まれた場合にのみ、そのトランザクションが承認される」ということを保証することによって、 信用を作り出します。
なぜ計算量をつぎ込んだらその取引を承認したことになるの? なぜそれが信用になるの? 誰が何を信じたことになるの?
より多くのブロックがあるということは、より多くの計算量を要したことを意味し 、従って、より多くの信用を得ていることを意味するのです。
より多くのブロックがある? ってどんな状態? 同じ取引データが複数のブロックとして存在するってこと? それとも複数のコンピュータのディスクに存在するってこと? そんなこと一言も書いてないけど。
なぜ多くの計算量を要するほど多くの信用を得たことになるの? 今まで読んだ話だと、その計算をするのはマイナーであり、マイナーは手数料ほしさに計算する。こぞって多数の人々が計算するほど多くの計算量を獲得できる。人が集まるくらい多くの手数料を支払っているトランザクションほど、多くの信用を得られる。といっているのかな?
なぜその計算が信用になるのかは知らないけど。
すべて読み終えたら理解できるのだろう。272ページか……。
マイニングを説明するためには、数独パズルを考えるのが分かりやすいです。それは、誰かが解法を見つける ごとにリセットされて、約10分間で解けるように難しさが自動的に調整されるような数独パズルです。数千 の行と列を持つ、巨大な数独パズルを想像してください。私があなたに完成したパズルを見せたら、完成した ことを確認することはすぐにできます。しかし、パズルがある部分だけ完成していて他が全て空欄であれば、 解くためにとても多くの時間がかかってしまいます。数独パズルの難しさは、行や列の数を増やしたり減らし たりすることで調整できます。しかし、完成したかを確認することについては、パズルの大きさによらず短時 間でできます。Bitcoinで使っているこのような”パズル”は、暗号化ハッシュに基づいており、上記の数独パ ズルと似た特徴を持っています。すなわち、解くのはとても大変なのに確認するのは簡単という非対称性と、難しさを調整できるという特徴です。
これは先述の以下についての説明だと思われる。
- マイニングとは膨大な計算を要する行為である
- ブロックチェーンに取り込まれたか判定するのは簡単な計算で済む
そもそも、なんで数独だかなんだかよくわからん問題を解く必要があるんだ? それがブロックチェーンに組み込むために何の意義や必要性があるの? そんな計算しなくていいから、さっさと取り込むわけにはいかないの?
その計算をすることで「信用」とやらを形成していると言っているみたいだけど、そこがよくわからない。
今はまだ知るときではない、という神の思し召しだろう。モヤるけどスルーだ。
ブロック内のトランザクションのマイニング
Bitcoinネットワークに送られたトランザクションは、グローバルに分散した元帳であるブロックチェーンの 一部となるまでは、検証されたことにはなりません。
「検証」とか「承認」とか「マイニング」とか「ブロックチェーンに取り込む」というのは全部同じことを指していると思っていいのかな?
平均して10分ごとに、マイナーはブロックチェーンに 取り込まれていないトランザクションを含むブロックを生成します。
それだけ取引したがる人がいるってことか。
新しいトランザクションは、ウォレット やその他のソフトウェアから常にBitcoinネットワークに流れ込みます。Bitcoinネットワークのノードがこの 新しいトランザクションを見つけると、各ノードの中にある、未検証のトランザクションを一時的にとどめて おくトランザクションプールに加えます。マイナーは、新しいブロックを作るとき、未検証のトランザクショ ンをこのプールから取り出して新しいブロックに追加します。その上で、新しいブロックの有効性を証明する ために(proof of workとして知られる) 非常に難しい問題を解きます。このマイニングの過程の詳細は[mining]で説明されています。
数独にたとえられた問題を解く行為はproof of work
と呼ぶらしい。日本語では証明作業、かな?
「新しいブロックの有効性を証明するため」に行うらしい。それをすることが信用の形成になるということか。
トランザクションは新しいブロックに追加されますが、この新しいブロックには、最も高い手数料が設定され ているものが最初に処理されるという基準や、その他のいくつかの基準によって、処理の優先順位が付けられ ています。
同じ電気代をかけるなら、より多くのコインが得られるほうが嬉しいからだろう。
マイナーは、Bitcoinネットワークからマイニングされたブロックを受け取ったことで競争に負け たことを知るとすぐに、新しいブロックのマイニングに取りかかります。マイナーはすぐに新しいブロックの 箱を作り、それにトランザクションと前のブロックのハッシュ値を入れて、その新しいブロックのためのpro of of workの計算を開始します。
「proof of work」はそのブロックの有効性を証明するための膨大な計算のこと。
マイナーは自分が作るブロックに、特別なトランザクションを含めます。これは 、マイナー自身のBitcoinアドレスに、新たに作られたbitcoinの報酬(現在は1ブロックあたり25BTC)を支払う トランザクションです。
マイニングすることは新しいコインを作ること、だっけ? そうして産まれた新しいコインの所有者を自分にする。そのためのトランザクションを自分で作成し、さらに自分で作ったブロックにそれを含める。
ブロック作成時にゲットできる新しいコインの量は、だれかがどうにかして決めており、時間とともに減っていく。だっけ? そのうちマイナーいなくなるんじゃない? そしたら取引成立しなくなってその暗号通貨システムが運用されなくなり崩壊するのでは? まあいいや。
マイナーは、ブロックが有効であることを示す解法を見つけると、報酬を勝ち取りま す。このマイナーが解法を見つけたブロックがグローバルなブロックチェーンに追加され、報酬を得るために 含めたトランザクションがマイナーにとって利用可能となるからです。
そしてブロックチェーンに追加されたコインだけが使用可能。だからマイナーはマイニングにより報酬をゲットできると。
ふーん、まさか自分で自分に向けたコインを新たに生成するとは。マイナーは中央銀行で紙幣を刷るのと同じことをしているって話だったな。
マイニングプールに参加しているJing は、彼のソフトウェアをあらかじめ設定しておきます。これによって提供した計算量に応じて分けられた報酬 が、プールのアドレスからJingやその他のマイナーに配られます。
マイニングプール? 本書の最初のほうにある用語集にもなかった。ググってみるとWikipediaには以下のようにあった。
協力関係にある多数のマイナーがマイニングすること
ザコマシン同士が徒党を組んでマイニングを成功させ報酬を分散させる。ということかな?
たとえ話
[user-stories]では、上海でコンピュータエンジニアリングを学ぶ学生であるJingを例として挙げました。 JingはマイナーとしてBitcoinネットワークに参加しています。Jingは、世界中の数千のマイナーとともに、約 10分毎に解法を見つけるレースに参加しているのです。このような解法を見つける作業は"proof of work"と呼ばれ、秒間数千兆回のハッシュの生成処理を必要とします。
proof of work
はハッシュ生成処理のことを指すらしい。ハッシュってあの意味不明な文字列のことかな? 暗号化アルゴリズムとして名前くらい聞いたことがあるけど、それ以上は知らない。
proof of workのアルゴリズムは、前もって決められたパターンに合う解法が現れるまで反復的に、ブロックのヘッダ とランダム値をSHA256暗号化アルゴリズムでハッシュ化することです。
SHA256
とか聞いたことある。Linuxにもそれを生成するコマンドがあったはず。ブロックのヘッダというのが具体的に何のデータを指しているかはわからない。ブロックはトランザクションをグループにまとめたものらしいけど。ランダム値ってのも一体どこから湧いてきたのか。それらを引数にしてSHA256
化するのがproof of work
の処理内容らしい。
そのような解法を最初に見つけたマ イナーがそのブロックの勝者となり、解法を見つけたブロックをブロックチェーンに組み込みます。
ふーん。つまりマイニング成功率をあげるには、SHA256アルゴリズムを高速で実行できるマシンにすればいいってことか。
Jingは2010年に、新しいブロックのproof of workを見つけるために、非常に速いデスクトップコンピュータを使って、マイニングを始めました。多くの マイナーがBitcoinネットワークに参加するにつれ、解法を得る難しさはどんどん増していきました。Jingと 他のマイナーは、すぐにさらに特殊なハードウェア、例えば、ゲーム用デスクトップコンピュータに用いられ るような、ハイエンドの専用グラフィック処理装置(GPU)などにアップグレードしました。
高性能なGPUを搭載しているほうが処理が高速だって話は聞くけど、その理由がよくわからない。あれって3Dのための計算に特化したCPUじゃないの? よくしらんけど行列計算とか。それがSHA256を高速に実行するために効率のよいハードウェア構成なの? よくわからない。
なぜ「解法を得る難しさはどんどん増して」ゆくの? アルゴリズムは同じはずだから、ブロックのヘッダやらランダム値やらの桁数が増えて計算に時間がかかるようになる、とか?
この本を書いてい る時点で、数百のマイニングアルゴリズムを組み込んだハードウェアであるASICという回路を、複数同時に 稼働させて、ようやく利益が出るくらいに難しいものになっています。Jingは、"マイニングプール"にも参加 しました。これは、解法を見つける作業の負担を何人かで分担し、報酬も参加者で分けるという、宝くじの共 同購入のようなものです。
ああ、ここでマイニングプールについての説明が出てきた。
まあそうだよね。すべて勝者だけが全部かっさらっていくのは、多くの人々にとって勝ち目がない。するとマイニングする人はスパコンみたいなごっついマシンを持てるだけのリッチマンだけが行うハイソでセレブな行為になる。
そしたら大勢の人々で構成する公平なネットワークってやつが実現しなくなりそうだし。それじゃ結局今までと同じ中央集権になって差別化されなくなって暗号通貨の価値も意味もなくなるもんね。
けど、競争って形にすると、おのずと一強になるのだろうし。報酬がなければ動機もないなら、報酬目当てでやるわけで。より多くの報酬を欲するなら、自分だけが独占しようと企むようになる。すると行き着く先は決まっている。手段を選ばぬサイコパスが一強として君臨し、中央集権へと収束する。権力の分散って実現するのがむずかしいのだろうな。三権分立だって形骸化しているし。動物は本質的に利己的なものだし。
マイニングプールというのは、マイニングの負担と利益を分散することで成立する仕組みなのだろう。
Jingは現在、24時間マイニングを行うためにUSB接続のASICマシンを2台使ってい ます。彼はマイニングで得たbitcoinを売ることで電気代を支払いながら、収益をあげています。彼のコンピ ュータ上では、Bitcoinクライアントのリファレンス実装であるbitcoindのコピーを走らせており、これを特 殊なマイニングソフトウェアのバックエンドとして使っています。
なんか不思議な話だな。なぜ計算したことが収益になるんだろう。経済のことはさっぱりわからない。たぶん信用や期待があるのだろう。
でも物理的にみれば不健全にみえる。計算のために電気が消費され、その電気を生み出すために原発や火発が稼働し、そのせいで放射能汚染物質や二酸化炭素が排出され、汚染や地球温暖化がすすみ、天候不順により食糧不足となって、食料をめぐって戦争が勃発する流れだと思うのだが。
地震などの天災によって地下に埋めた汚染物質が拡散して人々を死に至らしめるとかも起きそう。放射能汚染物質の冷却が一時停止したとかいうトラブル話はかなり頻繁に新聞でみかけるし。電気をより多く使うことは人の安全を脅かし、生活圏を狭めることになるのでは?
だから膨大な計算が必要な暗号資産業界はその価値がさがっていると言われているのだろう。よく知らないけど。
逆に、もしソーラーなど自然エネルギーでラズパイを稼働させ、それでマイニングできたらボロ儲けでは? そのソーラー設備を暗号通貨で購入すれば、自然破壊も防げて、かつ暗号通貨を運用しつづけられるかもしれない。公平な取引ができる持続可能な社会になるかもしれない。きっとそんなうまくはいかないのだろけど。なんとなく私の暗号通貨の使いみちが見えてきた気がする。
脱線した。ドキュメントに戻ろう。
AliceのトランザクションはBitcoinネットワークによって回収され、未検証のトランザクションのプールに入 れられます。そのトランザクションは十分な手数料を含んでいたため、Jingが参加するマイニングプールが作 ったブロックに入ることになりました。
Ask Mona 3.0で「未承認」の受け取りデータをみたことがある。あれはトランザクションのプールに入ったものの、まだマイニングが完了していないタイミングだったということなのだろう。
手数料が少ないとマイニングプールとやらがそのトランザクションを含めたブロックを作成しようとしないのかな? だからマイニングプールに参加している人たちもマイニング作業をせず、その取引はずっとブロックチェーンに取り込まれることなく取引が成立しない、と。
手数料はマイニングしたがる人が出るくらいの額にする必要があると。その額が具体的にいくつかは不明だが。
Aliceのウォレットがトランザクションを送ってから約5分後に、Jing のASICマイナーがブロックの解法を見つけ、他に419のトランザクションを含むそのブロックを #277316としてビットコインネットワーク上に放出しました。
ブロックひとつの中には420ものトランザクションが入っているのか。
他のマイナーがそれを検証し、それが終わると 、次のブロックを作るレースが始まりました。
検証ってなに? 数独の答えがすべて埋まってて正解であるかチェックするってやつ? それは少しの計算でできるって言ってたやつかな?
Aliceのトランザクションを含むブロックを、見ることができます(Aliceのトランザクション)。 数分後に、新しいブロック #277317 が別のマイナーによってマイニングされました。この新しいブロックは、Aliceのトランザクションを含んだ 直前のブロック #277316 を前提にしているため、 #277316がマイニングされたときよりもさらに多くの計算がブロックチェーンに注ぎ込まれ、それによりAlic eのトランザクションの信用が強化されることになります。
はあ。計算量と信用値は比例するという話か。よくわからないけど。
つまり取引を重ねるほど信用が強化されるってことかな?
Aliceのトランザクションを含んでいるブロックは 、 "承認" 1回とカウントされます。 Aliceのトランザクションを含むブロックの上に、新たにブロックが積み重ねられるごとに、承認が積み重ね られることになります。ブロックが積み重ねられるにつれて、トランザクションの取り消しが指数関数的に難 しくなり、このことで、そのブロックのBitcoinネットワークにおける信用がますます増えるのです。
え、そもそもトランザクションの取り消しってできるの? 取り消しが難しくなるほど信用が増える? なんのこっちゃ。
ブロック #277316 に含まれているAliceのトランザクション図には、 Aliceのトランザクションを含むブロック #277316が示されています。ブロック #277316 の下には (#0を含めて)277316個のブロックあり、genesisブロックとして知られる#0まで、全てのブロックがブロック の連鎖(ブロックチェーン)として繋がっているのです。
このつながりがブロックチェーンのチェーンたる所以か。
時間の経過とともにブロックの"高さ"が高くなると、 計算の難易度はより高くなります。チェーンが長くなるほど計算量が積み重なることになるため、Aliceのト ランザクションが含まれるブロックの後にマイニングされたブロックは、さらなる保証として働きます。慣例 的に、6回より多くの検証がなされたブロックは改変ができないと考えられています。というのは、6個のブ ロックを無効にし、再計算するためには、膨大な計算量が必要だからです。マイニングの過程やマイニングが 信用を作り出す方法は、第8章で詳しく説明します。
ああ、そういえばAPIで取得したトランザクションデータの中にheight
ってプロパティがあったな。高さってなんだよ、と思っていたが「ブロックの高さ」のことだったのか。
でもチェーンに例えるなら高さでなく長さでは? どうでもいいけど。
あ、わかった。マイニングの計算が時間とともに大変になる理由は、取引データ量が増えてブロックの高さが増えることで計算が大変になるからってことか。
SHA256による解法の発見には、ブロックチェーンでつながったデータが必要なため、取引を重ねてチェーンが長くなるほど膨大な計算が必要になる。同時に、その分だけ信用も強くなる。それはブロックデータの改変がそれだけ難しいから。ああ、信用ってのは改竄されにくさのことを言ってたのか。
詳しくは第8章だってさ。今日はもういいや。
所感
結局、いまだ取引データ(ブロック?)が支払か受取かを区別する方法は見つけられなかった。まあマイニングの話だというし、期待はしていなかったが。けれどブロックチェーンについて概要を理解することはできたかもしれない。
はやくコード書きたい。