タノラマタウン

エンジニアリング、スタートアップ、仮想通貨..etc

pythonでブロックチェーン作ってみた

3週間くらい前にQitaの週間1位取ったこの記事に触発されて作ってみた。

https://qiita.com/hidehiro98/items/841ece65d896aeaa8a2a?utm_source=Qiita%E3%83%8B%E3%83%A5%E3%83%BC%E3%82%B9&utm_campaign=68f4ff2c4a-Qiita_newsletter_295_01_24_2018&utm_medium=email&utm_term=0_e44feaa081-68f4ff2c4a-33816713

というので割と舐めていったら、予想外に難しかった

まずはpythonほぼ初めて触ったということもあり、実行するまでが結構長かった 笑 versionが2x,3xと2つあってpyenvとか使わないといけないし、インデントで処理の意味が変わるとか、java,ruby,jsにない要素が色々勉強になった

あとはブロックチェーンの概念自体がまだ咀嚼しきれてないのに躓いた - トランザクションが溜まって、マイニング処理によってこれらをまとめたブロックが作られる - ブロックを作るのはProof of workの原理使って、前のブロックの情報使って計算処理 - 各ブロックには1つ前のブロックのオブジェクトをhashにした値を持っている

この辺りが大変だったな。。。あとコンセンサスアルゴリズムは概念だけで、中身は割と適当 他のノードの情報取ってきて、blockの数と各ブロックの中身を比較して、ブロックの中身が全部一致していて、一番長いやつの情報を上書きするという仕組み

問題は、マイニング結果がビットコインとかだと確か最初に計算終わらした1ノードだけに保存されて、次のマイニングは10分後とかになるから、その間に他のノードが更新されて整合性が保たれるけど、そこら辺の仕組みがないから、各ノードが個別にマイニングできちゃって、それをされると成立しないという。いや、同じ条件でマイニングしたら、同じブロックが追加されるから整合性は保たれるのか?? このあたり、理論はあるものの、実運用をしていないからこれで回るのか不明。。。 あと本格的にアプリのロジックにブロックチェーンが使われるようになったら、開発どうするんだっていうのはある。これまでもマルチスレッド時の不具合を再現させるとか結構難しかったけど、その比じゃない。。。ブロックチェーンやってるスタートアップとかは開発環境どうしているんだろう