C#
Unity
ブロックチェーン

ブロックチェーンシミュレータ(1)

これからブロックチェーンシミュレータに関しての投稿をしていこうと思います。
私が大学で研究しているテーマがブロックチェーン技術に関してです。現在、ブロックチェーン技術に関しての知識をどんどんインプットしてるのですが、やはりアウトプットをしないと理解が進まないので、趣味でやっていたUnityを使って、アウトプットしていこうと思い、このブロックチェーンシミュレータを作りました。

ここにブロックチェーンシミュレータの作り方を記すので、興味がある方はぜひ参考にしてみてください。

少し長くなると思うので、投稿を二つに分けたいと思います。
書き方とかまだあまり分かってないのですが、頑張ります!
修正があれば、その都度更新していく予定です。

二つ目→ブロックチェーンシミュレータ(2)

目的

そもそもブロックチェーンってなんだ?ということで、簡単にブロックチェーンとは何かを技術的な面から、理解するためのツールを作ることを目指しています。

ブロックチェーン技術に関しての基礎知識

ブロックチェーンシミュレータの作り方の前にまずはブロックチェーン技術の基礎的なことから書きます。

image.png

ブロックチェーンはその名の通り、ブロック同士が繋がってできています。ブロックには、やりとりや取引の情報が記録されているトランザクションヘッダというものが存在しています。

image.png
ヘッダの中にある三つの値を関数に入れ、ある一定の値より小さな値を求めることができれば、ブロックを生成することができます。ある一定の値を調整することによって、生成の難易度が変わり、生成時間が変わってくるというわけです。例えば、ビットコインではPoW(proof of works)を採用しており、約10分でブロックを生成しています。また、イーサリアムではPoS(proof of stake)を採用しており、約12秒でブロックを生成しています。他にもありますが、今回はここまで。(笑)
詳細に関しては別のサイトや書籍などで調べてみてください。。

image.png

ブロックチェーンは分散型システムを採用しています。集中型システムでは通常の銀行ネットワークように、管理者が一人だけでありますが、分散型システムでは、参加者全員が管理者となっています。

[参考文献] ビットコインとブロックチェーン:暗号通貨を支える技術(コンサイス版)-アンドレア・M・アントノプス-NTT出版(2018)

ブロックチェーンシミュレータのアルゴリズム

さてさて、ブロックチェーンシミュレータではどのような動きをするのかについて話します。
さきほど説明したヘッダの三つの値をこのブロックチェーンシミュレータでは以下のように定義します。

・トランザクションの圧縮データ → MakeTimeValue
・最新ブロックのヘッダの圧縮データ → BaseValue
・ナンス → AnswerValue

ブロック間の繋がりに関しては①のような式で表します。

①(MakeTimeValue + BaseValue + AnswerValue) % ModValue = BaseValue'

BaseValue'が次のブロックのBaseValueとなりブロック間の繋がりを実現することができます。

そして、ブロックを生成するためにナンス(ブロックチェーンシミュレータではAnswerValue)を計算するには②のような式で表します。

②(BaseValue + AnswerValue) % ModValue = 求める値(ブロックチェーンのある一定の値のようなもの)

ブロックチェーンシミュレータはある一定の値より小さな値を求めるのではなく、求める値と同じ値になるようにAnswerValueを計算していきます。
※ブロックチェーンシミュレータでは最初のブロックは自動生成するようにしてあるので、最初のBaseValueとModValue、求める値は乱数としています。

終わりに

目的とブロックチェーン技術に関しての基礎知識、ブロックチェーンシミュレータのアルゴリズムを記しましたがどうだったでしょうか。

次の投稿から、実際にUnityを使ってブロックチェーンシミュレータの制作の内容を記していこうと思います。
ここまで見ていただき、ありがとうございました。

二つ目→ブロックチェーンシミュレータ(2)