見出し画像

【完全保存版】ブロックチェーンを技術的にしっかり学ぼう!


0 はじめに

この記事は、下の動画を元にしています。

とても良く見られた、非常に良い動画なので、よかったらぜひどうぞ。

また、下から実際にデモを動かすことができます。

自分で動かすことにより、理解が深まりますので、デモを行うことをお勧めします。

1 ハッシュについて

まずは、ハッシュについて学んでいきましょう。

ハッシュには「SHA256」「Keccak256」など、さまざまなものがあります。

今回は、ビットコインで使われている「SHA256」を扱います。

https://academy.bit2me.com/en/sha256-bitcoin-algorithm/

下のように、「データ」に対して一意の「ハッシュ」が決定します。

この場合は空白(何もない)という「データ」に対する「ハッシュ」「e3…55」であることがわかります。

では、何か入力してみましょう。

「a」というデータを入力すると、「ca…bb」というハッシュが得られました。

例えば、「Yuki」と入力すると、下のように、「8f…11」というハッシュが得られます。

一方、逆に「8f…11」というハッシュになるデータを見つけるのは非常に困難であるという特徴があります。

また、下のように、少しだけデータを変えてみました。

すると、全く異なる値になりました。

このように、少し変えただけで、全く違う値になるというのも大きな特徴の一つです。

2 Nonce(ノンス)について

では、「ブロック」タブに進んでみましょう。

「ノンス」という値が追加されました。

「ブロック」「ノンス」「データ」を繋げた値をハッシュ化したものが下の結果となっています。

具体的に見てみましょう。

下のように、「ブロック」「ノンス」繋げた値をハッシュ化すると、同じハッシュになることが確認できました。

なお、今回は「データ」は空白のため、データ部分は特に繋げません。

3 Difficulty(ディフィカルティ)について

次に、ハッシュを見てみましょう。

先頭が「0000」となっていますね。

これはたまたまではなく、先頭が「0000」となるように「ノンス」を決めています。

これがビットコインが採用している「PoW」の仕組みです。

先頭○桁が「0」となるような「ノンス」一番早く見つけられた人がブロックを追加できます。

https://www.coindeskjapan.com/learn/pow-pos/

なお、この「先頭◯桁」が増えると、その分難易度が増します。

この難易度の指標を「ディフィカルティ(Difficulty)」と言います。

なお、詳しくは、こちらもご参照ください。

ここで、データを少し変えてみましょう。

すると、画面が赤くなりました。

これは先頭4桁が「0」という条件を満たしていないからです。

ここで、「掘る」を押してみます。

すると、「ノンス」の値が変わり、緑色になりました。

このように先頭4桁が0となる「ノンスの値」を見つけることで適切なブロックとしています。

また、実際にハッシュを試してみると、下のように同じハッシュになったことが確認できます。

4 ブロック「チェーン」とは

次に、「ブロックチェーン」を見てみましょう。

前回の「ハッシュ」「ブロック」毎チェーンのようにつながっています。

そのため、「ブロックチェーン」と呼ばれます。

下のように、ここでの最後のブロックである、5番までつながっていることが確認できました。

ちなみに、下のように、データを変えると、ハッシュが変わってしまい、条件を満たさなくなりました。

念の為、同じハッシュになるかも確認してみましょう。

最新のブロックが変わったのなら、新しい「ノンス」を見つければ良いのかもしれません。(実はそれだけではないのですが。)

では、3番目のブロックのデータが変わったらどうなるでしょうか?

3番目のブロックの条件に合う新しい「ノンス」を見つければ、3番目は緑色になりました。

しかし、4番目、5番目は未だに赤色です。

4番目も条件に合う「ノンス」にしても、5番目は赤いままです。

そして、5番目のブロックノンスも変えて、ようやく全て緑色になりました。

このように、過去のブロックを変えようとするとその後に続く、全てのブロックの「ノンス」を変える必要が出てきます。

5 分散性について

では、次に、「分散」タブを見てみましょう。

実際のブロックチェーンは、このように、たくさんのノード(ピア)によって構成されています。

中身は全て同じブロックチェーンです。

下のように、あるピアの情報を書き換えたとします。

そして、仮に、条件に合うハッシュを見つけるために、下のように「ノンス」を全て変更したとします。

これで、一見うまくいきそうです。

しかし、「ノンス」を変えてきたため、最新ブロックのハッシュを確認すると、他のピアのハッシュと異なることが判明します。

このように、たとえ、最新のブロックまで条件の合うノンスを見つけたとしても他のノードとの違いが明確です。

そのため、何かおかしいということがわかってしまいます。

6 ノード数を考えてみよう

ちなみに、実際には、どのくらいのノードがあるのかを考えるのも大事だと思います。

こちらのサイトによれば、執筆時点では、「到達可能なノード数」はこのくらいでした。

https://bitnodes.io/

このように、状況の推移も確認することができます。

https://bitnodes.io/dashboard/7y/

ちなみに、「到達可能なノード」「到達不可能なノード」を合わせた総数はこちらです。

chatGPT 注
「到達不可能なノード」
は、様々な理由で他のノードから直接アクセスできないノードを指します。

例えば、ファイアウォールやNATの背後にあるノード、または最大接続数に達したノードなどが含まれます。

到達不可能なノードもネットワークに参加している可能性がありますが、その存在は確認できないことが多いです。

https://bitnodes.io/nodes/all/#global-bitcoin-nodes

一方、イーサリアムも見てみましょう。

現在のバリデータの数は約82万程度でした。

ただ、この数はすごい勢いで変化しているため、都度情報のアップデートは必要そうです。

https://beaconcha.in/charts/validators


7 トランザクションについて

次に、「トークン」タブを見てみましょう。

実際にはデータのところに「トランザクション」と呼ばれるデータが入っています。

下のように、「誰から誰にいくら送ったのか」がデータとして格納されます。

そして、今までと同様に、データを改竄しようとすると、「ハッシュ」が変わって条件に合わなくなりました。

そして、なんとか、無理矢理「ノンス」を見つけたとしても、他のノードの結果と異なるので、改ざんがバレてしまいます。

結局は今までと同じ内容でしたね。

8 コインベーストランザクションについて

一方、一番最初のブロックを見てみましょう。

すでにトランザクションが行われていますが、誰もいくらも持っていないので、いきなりトランザクションはできません。

そのため、「コインベース」タブで正しいブロックを見てみましょう。

下のように、「コインベース」があり、¥100が「Anders」に振り込まれています。

これがいわゆる「ブロック報酬」と呼ばれるもので「コインベーストランザクション」が起きています。

「コインベーストランザクション」ブロックを生成した人に報酬を配るためのトランザクションです。

これにより、チェーン内で通貨が生成され、これに基づいて、トランザクションが行われるようになっています。

9 コインベーストランザクションを確認しよう

では、実際に、ビットコインのコインベーストランザクションを見てみましょう。

下のように、最初のブロックで、このように、50BTCが渡されていることが確認できました。

https://www.blockchain.com/explorer/blocks/btc/0

ちなみに、現時点での、ブロックでは、基礎としては、「6.25BTC」が割り当てられていることも確認できます。

https://www.blockchain.com/explorer/blocks/btc/809071

せっかくなので、イーサリアムも見てみましょう。

このように、5ETHが割り当てられていることがわかります。

https://etherscan.io/block/18202727

ちなみに、現時点では、イーサリアムはこのように、ブロック報酬が0になっています。(手数料分は入ってきます。)

https://etherscan.io/block/18202727

この辺りについては、よかったらこの辺りをご確認ください。

10 サトシナカモトの最初の文言を見てみよう

では、ジェネシスブロックからサトシの文言を見てみましょう。

https://www.blockchain.com/explorer/blocks/btc/0

こちらが最初のトランザクションです。

https://www.blockchain.com/explorer/transactions/btc/4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b

ここにサトシの文言の元があります。

こちらを使いましょう。

このようにASCIIに変換すると、文字が出てきました。

https://www.rapidtables.org/ja/convert/number/hex-to-ascii.html


今回は以上です。

サポートをしていただけたらすごく嬉しいです😄 いただけたサポートを励みに、これからもコツコツ頑張っていきます😊