みなさん、こんにちは!
第12回の168(いろは)プロジェクトでは、ブロックチェーンの調査を行いました!
今のブロックチェーンのベースとなっているビットコインのベースの仕組みをコードを書きながら調査しました。
本当はブロックチェーンを活用したサービスの開発を目指していましたが、ブロックチェーンを自作するための調査で手一杯ですた😭
今後の168プロジェクトでブロックチェーンを活用したサービスを開発していくので、お楽しみに!
概要
ブロックチェーンの調査をするにあたって、まずはブロックチェーンの仕組みとコードを勉強しようと思いました。
使用した教材: https://www.udemy.com/course/build-blockchain-full-stack/
JavaScriptで作っていくので、英語でもなんとかなります😊
最終的には、これができるようになって理解できました
- 独自チェーンが作れる
- 仮想通貨を発行できる
- 他のユーザーと交換ができる
- TransactionをTransaction Poolに溜められる
- Transaction Poolをマイニングしてブロックにできる
- ブロックチェーンの履歴と中のTransactionを確認できる
ブロックチェーンの仕組み
ちゃんと説明をするなら、ブロックチェーンを発明したこちらの論文を読んでください!
今回は、簡単にブロックを作られるまでの流れを説明します。
https://bitcoin.org/bitcoin.pdf
大枠の流れ
ブロックチェーンは下の流れで進んでいきます。
ChainやTransitionが正しいかを何度も検証しています。
Step 1. 仮想通貨を送る
自分のWalletの残高から友達のWalletに仮想通貨を送ります
Step 2. 仮想通貨を送る履歴をためる
Step 1の履歴を決まったルールまで貯めます(1,000件になったらなど)
Step 3. マイニングをしてBlockを繋げる
Step 2の取引履歴をまとめ、条件を満たすハッシュ値を求めるます
Step 1. 仮想通貨を送る
Transactionという仮想通貨のやり取りの履歴を作成します。
過去に自分が送金をしたTransactionと以降に自分に送金されたTransactionをもとに、今の自分のWalletの残高を計算します。
計算した残高以下の金額を指定したアドレスのWalletに送金するTransactionを作成します。
Step 2. 仮想通貨を送る履歴をためる
マイニングには時間がかかるため、Step 1で作成されるTransactionをまとめるTransaction Poolというものを作成します。
まとめるルールは自由に設定できます。(1,000件ごとに、1MB以上になったら etc.)
Step 3. マイニングをしてブロックを繋げる
Step 2で作成したTransaction Poolを元にBlockを作成してこれまでのチェーンに繋げます。
一つ前のBlockのハッシュ値やTransaction Poolのデータ、マイニングの難易度、時間、nonceなどのすべてのデータをもとに有効なハッシュ値になるまで計算します。
有効ハッシュ値とは、先頭に0が○以上付いているなどの条件を満たしたハッシュ値です。
有効なハッシュ値を見つけるために、nonceを1, 2, 3, …と増やしていきます。
裏側で自動的に、特定の時間よりも短かったら先頭についていないといけない0の数を増やして見つけにくくしたりします。
最後に
ブロックチェーンの仕組みはいかがだったでしょうか?
今回はサービスの開発ではなくて調査だけになってしまいましたが、今後の168プロジェクトで徐々に機能を開発していきサービスにできたらと思いました。
これからの168プロジェクトを楽しみにしていてください!