2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

goでblockchain実装してみた

Posted at

もういろんな人がやっているかもしれませんが、goでブロックチェーンを実装してみました。
レポジトリはこちらです。

本ネタはこちらでpythonで実装していたものをgoに移植してみた感じになります。

普通のチュートリアルと違うところ

  • httpサーバーにして、インタラクティブにしてみました。
  • ノードを複数立ち上げて、コンセンサスを取る処理も実装しています。
  • 一応テストコードを部分的に書いています。(timeのところが怪しいままになっていますが)

コンセンサスを取るところまでのシミュレーション

readmeにも書かれていますが、シミュレーションをしてみます。
複数ノード立ち上げてみます。

$ go run main.go :8080

別セッションで:
$ go run main.go :8081

8080のほうに8081のノードを登録します。

$ curl localhost:8080/nodes/register -d \
'{"Nodes": "localhost:8081"}'

New nodes have been added. Total nodes: map[localhost:8081:{}]

8081をわざと長くしてみます。

$ curl localhost:8081/mine

New block forged, block index 2, transactions [0xc00011c840] proof 35293, previousHash 2aa689b29c7e3bef87216b319de7a09aa5916da4f47586e46d4444c3e58c6583

これで8081のほうのチェーンは長さ2、8080はチェーンの長さが1のため、8081が正とされます。
8080はいやでも8081に従わなければいけません。
これは以下のAPIを叩くことでわかります。

$ curl localhost:8080/nodes/resolve

chain was replaced, [0xc00007c980 0xc00007c9c0]

最後に

ブロックチェーンとgo両方について理解する良い機会になりました!
ノード同士のコンセンサスは実装することでさらに理解が深まりました。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?