【完全保存版】ブロックチェーンを技術的にしっかり学ぼう!
0 はじめに
この記事は、下の動画を元にしています。
とても良く見られた、非常に良い動画なので、よかったらぜひどうぞ。
また、下から実際にデモを動かすことができます。
自分で動かすことにより、理解が深まりますので、デモを行うことをお勧めします。
1 ハッシュについて
まずは、ハッシュについて学んでいきましょう。
ハッシュには「SHA256」や「Keccak256」など、さまざまなものがあります。
今回は、ビットコインで使われている「SHA256」を扱います。
下のように、「データ」に対して一意の「ハッシュ」が決定します。
この場合は空白(何もない)という「データ」に対する「ハッシュ」が「e3…55」であることがわかります。
では、何か入力してみましょう。
「a」というデータを入力すると、「ca…bb」というハッシュが得られました。
例えば、「Yuki」と入力すると、下のように、「8f…11」というハッシュが得られます。
一方、逆に「8f…11」というハッシュになるデータを見つけるのは非常に困難であるという特徴があります。
また、下のように、少しだけデータを変えてみました。
すると、全く異なる値になりました。
このように、少し変えただけで、全く違う値になるというのも大きな特徴の一つです。
2 Nonce(ノンス)について
では、「ブロック」タブに進んでみましょう。
「ノンス」という値が追加されました。
「ブロック」と「ノンス」と「データ」を繋げた値をハッシュ化したものが下の結果となっています。
具体的に見てみましょう。
下のように、「ブロック」と「ノンス」を繋げた値をハッシュ化すると、同じハッシュになることが確認できました。
なお、今回は「データ」は空白のため、データ部分は特に繋げません。
3 Difficulty(ディフィカルティ)について
次に、ハッシュを見てみましょう。
先頭が「0000」となっていますね。
これはたまたまではなく、先頭が「0000」となるように「ノンス」を決めています。
これがビットコインが採用している「PoW」の仕組みです。
先頭○桁が「0」となるような「ノンス」を一番早く見つけられた人がブロックを追加できます。
なお、この「先頭◯桁」が増えると、その分難易度が増します。
この難易度の指標を「ディフィカルティ(Difficulty)」と言います。
なお、詳しくは、こちらもご参照ください。
ここで、データを少し変えてみましょう。
すると、画面が赤くなりました。
これは先頭4桁が「0」という条件を満たしていないからです。
ここで、「掘る」を押してみます。
すると、「ノンス」の値が変わり、緑色になりました。
このように先頭4桁が0となる「ノンスの値」を見つけることで適切なブロックとしています。
また、実際にハッシュを試してみると、下のように同じハッシュになったことが確認できます。
4 ブロック「チェーン」とは
次に、「ブロックチェーン」を見てみましょう。
前回の「ハッシュ」が「ブロック」毎にチェーンのようにつながっています。
そのため、「ブロックチェーン」と呼ばれます。
下のように、ここでの最後のブロックである、5番までつながっていることが確認できました。
ちなみに、下のように、データを変えると、ハッシュが変わってしまい、条件を満たさなくなりました。
念の為、同じハッシュになるかも確認してみましょう。
最新のブロックが変わったのなら、新しい「ノンス」を見つければ良いのかもしれません。(実はそれだけではないのですが。)
では、3番目のブロックのデータが変わったらどうなるでしょうか?
3番目のブロックの条件に合う新しい「ノンス」を見つければ、3番目は緑色になりました。
しかし、4番目、5番目は未だに赤色です。
4番目も条件に合う「ノンス」にしても、5番目は赤いままです。
そして、5番目のブロックのノンスも変えて、ようやく全て緑色になりました。
このように、過去のブロックを変えようとすると、その後に続く、全てのブロックの「ノンス」を変える必要が出てきます。
5 分散性について
では、次に、「分散」タブを見てみましょう。
実際のブロックチェーンは、このように、たくさんのノード(ピア)によって構成されています。
中身は全て同じブロックチェーンです。
下のように、あるピアの情報を書き換えたとします。
そして、仮に、条件に合うハッシュを見つけるために、下のように「ノンス」を全て変更したとします。
これで、一見うまくいきそうです。
しかし、「ノンス」を変えてきたため、最新ブロックのハッシュを確認すると、他のピアのハッシュと異なることが判明します。
このように、たとえ、最新のブロックまで条件の合うノンスを見つけたとしても、他のノードとの違いが明確です。
そのため、何かおかしいということがわかってしまいます。
6 ノード数を考えてみよう
ちなみに、実際には、どのくらいのノードがあるのかを考えるのも大事だと思います。
こちらのサイトによれば、執筆時点では、「到達可能なノード数」はこのくらいでした。
このように、状況の推移も確認することができます。
ちなみに、「到達可能なノード」と「到達不可能なノード」を合わせた総数はこちらです。
一方、イーサリアムも見てみましょう。
現在のバリデータの数は約82万程度でした。
ただ、この数はすごい勢いで変化しているため、都度情報のアップデートは必要そうです。
7 トランザクションについて
次に、「トークン」タブを見てみましょう。
実際にはデータのところに「トランザクション」と呼ばれるデータが入っています。
下のように、「誰から誰にいくら送ったのか」がデータとして格納されます。
そして、今までと同様に、データを改竄しようとすると、「ハッシュ」が変わって条件に合わなくなりました。
そして、なんとか、無理矢理「ノンス」を見つけたとしても、他のノードの結果と異なるので、改ざんがバレてしまいます。
結局は今までと同じ内容でしたね。
8 コインベーストランザクションについて
一方、一番最初のブロックを見てみましょう。
すでにトランザクションが行われていますが、誰もいくらも持っていないので、いきなりトランザクションはできません。
そのため、「コインベース」タブで正しいブロックを見てみましょう。
下のように、「コインベース」があり、¥100が「Anders」に振り込まれています。
これがいわゆる「ブロック報酬」と呼ばれるもので「コインベーストランザクション」が起きています。
「コインベーストランザクション」はブロックを生成した人に報酬を配るためのトランザクションです。
これにより、チェーン内で通貨が生成され、これに基づいて、トランザクションが行われるようになっています。
9 コインベーストランザクションを確認しよう
では、実際に、ビットコインのコインベーストランザクションを見てみましょう。
下のように、最初のブロックで、このように、50BTCが渡されていることが確認できました。
ちなみに、現時点での、ブロックでは、基礎としては、「6.25BTC」が割り当てられていることも確認できます。
せっかくなので、イーサリアムも見てみましょう。
このように、5ETHが割り当てられていることがわかります。
ちなみに、現時点では、イーサリアムはこのように、ブロック報酬が0になっています。(手数料分は入ってきます。)
この辺りについては、よかったらこの辺りをご確認ください。
10 サトシナカモトの最初の文言を見てみよう
では、ジェネシスブロックからサトシの文言を見てみましょう。
こちらが最初のトランザクションです。
ここにサトシの文言の元があります。
こちらを使いましょう。
このようにASCIIに変換すると、文字が出てきました。
今回は以上です。