ビットコインのウォレットを実装してみたいなぁと以前から思っていて。
たまに本読んだりしてた。
必ず出てくる「ビザンチン将軍問題」。各々のノードが利己的であればあるほど合意が形成されるという矛盾(というか仕組みというか)が素晴らしい。
各ノードが(利己的に=報酬のビットコインをもらうために)難しい計算(=暗号の解読)をすることによって、それによって得られた成果(=ブロックチェーン格納パラメータ)を再度他人が作り出す(=改ざん)ことはほぼ不可能であることをもって、ブロックチェーン(合意結果)の安全性を保っている。これ考えた人間はホント天才すぎるだろう。
おそらく選挙とかにも関係する。ときの政権が採用するかどうかとかじゃなくて、ビットコインに使われる意思決定システム(ビザンチン将軍問題を解決する一つの解)は、選挙における民意の反映の一つの方法として使えるのではないか。
要は不正選挙を無くせる(不正を不可能にする)のと、投票の透明性を、ブロックチェーン選挙なら格納できるのではとフト思った(でも誰に投票したか分かっちゃうか)。
ビザンチン将軍問題
相互に通信しあう何らかのオブジェクト群において、通信および個々のオブジェクトが故障または故意によって偽の情報を伝達する可能性がある場合に、全体として正しい合意を形成できるかを問う問題です。
一般的には、インターネットのような信頼のおけないネットワークにおいて、見知らぬ人とどうやって信頼を築きあげるかという問題あります。
ブロックチェーンは利己的な各ノードに難しい計算をさせることで合意を形成させます。これをプルーフ・オブ・ワークといいます。プルーフ・オブ・ワークによってビットコインの記録と送金の安全性が保たれています。
https://bitcoin.dmm.com/glossary/byzantine_generals_problem
ビザンチン将軍問題とは、1980年代にコンピュータ科学者であるレスリー・ランポート氏らによって定式化された問題です。中央の管理システムが存在せず、参加者の中に故障したコンピュータや悪意を持った個人が紛れ込んでいる状態で、全体で正しい合意を形成できるのかが焦点にある問題です。
中略
たとえば、あるコンピュータが一方には「Aさんに1BTC(ビットコインの単位)送った」と通知し、他方には「Bさんに1BTC送った」と通知したケースを考えてみましょう。この場合、1BTC送ったという情報が二重に記録されてしまうとともに、ビットコインの残高情報にも不整合が発生します。これは、まさにビザンチン将軍問題の発露と言えます。
ビットコインにおけるビザンチン将軍問題を解決するのが、プルーフ・オブ・ワーク(Proof of Work、「PoW」と略されます)でした。これは、取引データに誤りがなく、間違いなく送信者本人から発生したものであることを承認するための承認システムです。取引データをいくつかまとめたブロックを作り、ブロックチェーン(block chain)というデータベースへ格納するために必要な出力値になるようなパラメータを探します。
パラメータを探すのは大変ですが、一度発見されるとそれが正しいかどうかはすぐに計算できるようになっています。そのため、パラメータを含めて取引データを改ざんするのが難しく、仮にネットワーク内に悪意あるハッカーがいても問題なく「取引データは正しい」という合意形成を取ることができるようになっているのです。パラメータの計算という作業(=ワーク)によってデータを承認すること(=プルーフ)から、プルーフ・オブ・ワークと呼ばれています。
プルーフ・オブ・ワークを導入したことで、分散型ネットワークであるビットコインは致命的なセキュリティトラブルを起こすことなく稼働を続けています。
とりあえず本に書いてるの実装してTESTNETで遊んでみることにする。
やることメモ
・RaspberryPi4 セットアップ
・Bitcoin coreのインストール
・Wallet実装