はじめに

Goを使って何かがしたい. という気持ちと、Blockchainを学んでみたい、という気持ちが交差した.

今回はいたって平凡な取り組みとなるが、Goを使ったBlockchainの実装を紹介.

参考にしたのはQiitaでバズっていた下記記事

上記は下記の翻訳記事

先人の肩の上に乗らせていただく.
感謝しかない.

Goを使ってBlockChain実装する際に感じたこと

GitHubのRepositoryは下記です.

ディレクトリの構成としては

├── blockchain
│   ├── blockchain.go
│   ├── blockchain_test.go
│   ├── model.go
│   ├── proof.go
│   └── validation.go
├── data
│   └── blockchain.data
├── main.go
└── server
    ├── server.go
    └── server_test.go

こんな感じになっています.

基本、Blockchain関連の処理はblockchainフォルダ、Web Serverを立てたりエンドポイント毎に処理を切り分けたりする処理をserverフォルダにいれています.

データのやりとりのところを少してこづりまして、本家の実装(python)だと、全てメモリ上で完結(インスタンス化したblockchainクラスの中で処理が完結)していたので、Goでもと思ったのですが、ポインタをWeb Serverにうまく受け渡しができませんでした.

デモレベルでDB入れるのもなんだったので、最終的にgobを利用しています.

データのsaveとloadの部分をblockchain/model.goの中で記載しています. そのsave/laodの処理を、Web Serverのエンドポイント処理を開始する時点と終了する時点で利用しています.

あとは割とすんなり実装完了.

実際動かしてみて、とまとめ

アプリ側の動くところまでは簡単にいけたのですが、実際には複数サーバ上(単一サーバの場合は除く)で動かすケースが多いはずなので、これはインフラ側も合わせて試してみないと、(分散型管理台帳型の)Blockhainがわかったといえなそう.

ということで今回はGoを学びました.