技術情報

超簡単なBlockchainプロトタイプを Golang で構築

はじめに

Blockchainの使い道や可能性として様々なユースケース事例が数多く出てきており、21世紀の最も画期的な技術の1つだと思いますが、潜在的にはまだ完全な実用化には至っていないという面もあります。

以前の記事にもありましたが、ブロックチェーンの本質は単なるレコードの分散データベースです。しかし、普通の分散データベースと異なるユニークな点は、それがプライベートなデータベースだけではなく、公開されたデータベースでもある、という点です。

つまりユースケースにもよりますが、それを使用する全員が、完全または部分的に、データをコピーして保持しているということです。新しいレコードは、データベースの他のユーザーの同意がある場合にのみ追加できます。また、ブロックチェーンの技術のおかげで、私達は今のデータの暗号化とスマートコントラクトを実現できるようになりました。

さて今回の記事では、今はやっているGolangを使って、ブロックチェーン実装に基づくベーシックなプロトタイプを構築します。

ブロック

まず「ブロックチェーン」の「ブロック」の部分から作り始めましょう。

ブロックチェーンにおいて、ブロックには貴重な情報を格納しています。例えば、「トランザクション(取引履歴)」です。トランザクションはあらゆる仮想通貨等の本質です。この他にブロックには「バージョン」「現在のタイムスタンプ」「前のブロックのハッシュ」などの技術情報が含まれることが多いです。

この記事では、ブロックチェーンやBitcoinの仕様で説明されているようにブロックを実装するつもりではなく、重要な情報のみが含まれる単純なバージョンを使用します。以下はその様子です:

“Timestamp” は現在のタイムスタンプ(ブロックの作成時)、”Data” はブロック内の実際の貴重な情報、”PrevBlockHash” は前のブロックのハッシュ、”Hash” は今のブロックのハッシュです。 Bitcoinの仕様ですと、”Timestamp”、”PrevBlockHash”、および”Hash” はブロックヘッダであり、個別のデータ構造を形成し、トランザクション(ここでのData)は別のデータ構造です。ここでは単純化のためにそれらを混在させています。

ハッシュ値はどのように計算するのでしょうか?

ハッシュ計算は、ブロックチェーンにとって非常に重要な機能です。この機能によって、ブロックチェーンの安全性が担保されています。問題は、ハッシュ値を計算することは困難な作業であり、高速コンピュータでも時間がかかります。(Bitcoinのマイニング事業者が、強力なGPUを購入するのはそのためです)。これは意図的なアーキテクチャ設計であり、新しいブロックを追加するのを難しくし、そして追加後に容易に変更されるのを防ぐ(データを改ざんされないようにする)ことが目的となっています。この仕組みについては、今後の記事で説明する予定です。

今回は、ブロックフィールドを取得し、それらを連結し、連結された組み合わせに対してSHA-256ハッシュを計算します。 “SetHash” メソッドでこれを行ってみましょう:

次に、Golangのコンベンションに従って、ブロックの作成を簡単にする関数を実装します:

これでブロックが作成されます!

ブロックチェーン

さて、ブロックチェーンを実装しましょう。 本質的にブロックチェーンは、特定の構造を持つ単なるデータベースです。順序付けされたバックリンクリストです。 つまり、ブロックは挿入順に格納され、各ブロックは前のブロックにリンクされています。 この構造により、チェーン内の最新のブロックを迅速に取得し、そのハッシュによってブロックを効率的に取得することができます。

Golangでは配列とマップ(連想配列)を使ってこの構造を実装することができます。(参考)
配列は順序付きハッシュ(配列はGolangで順序付けされています)を保持し、マップはhash → blockのペア(マップは順序なし)を保持します。 しかし、今、私たちのブロックチェーンのプロトタイプでは、ハッシュでブロックを取得する必要がないので、ただ配列を使用します。

これが私達の初ブロックチェーンです! (そこまで簡単だとは決して思わなかったでしょう^^;)

さて、今度はブロックを追加することができるようにしましょう:

「これだけですか?それとも・・・」

新しいブロックを追加するには、既存のブロックが必要ですが、私達のブロックチェーンにブロックはまだありませんでした!

そう、どのブロックチェーンでも、少なくとも1つのブロックは最初から存在しなければならないということです。そのようなブロック、チェーン内の最初のブロックは、 genesis ブロックと呼ばれます。 そのようなブロックを作成するメソッドを実装しましょう:

ここで、ジェネシスブロックを持つブロックチェーンを作成する関数を実装できます:

ブロックチェーンが正しく動作することを確認しましょう:

おしまいです!

結論

今回は、非常に単純なブロックチェーンのプロトタイプを作成しました。

これはブロックの配列であり、各ブロックは前のブロックとの接続を持っています。実際のブロックチェーンははるかに複雑です。そして上記で作成した私たちのブロックチェーンにはまだトランザクションが含まれていません!

また、実際のブロックチェーンでは新しいブロックを追加するにはいくつかの作業が必要です。例えば、ブロックを追加する許可を得る前にいくつかの計算を実行する必要があります(Proof-of-Work)。 また、以前の記事を読んでいただくと分かると思いますが、ブロックチェーンは、単一の意思決定者を持たない分散データベースです。 従って、新しいブロックを追加する際には、ネットワークの他の参加者によって確認・承認される必要があります(このメカニズムはコンセンサスと呼ばれます)。

今後の記事では、それらの機能について説明予定です。
参考のコードはGitHubにあるので、こちらもぜひご覧ください!

Pickup post

  1. ブロックチェーンの基本的な仕組み
  2. ブロックチェーンの技術:公開鍵暗号
  3. ブロックチェーンを活用した医薬品のデッドストック販売プラットフォーム PoC […
  4. 【満席御礼】2018年3月1日開催 無料セミナー 《ブロックチェーンフェスティ…

Related post

  1. Ethereum

    ブロックチェーンとは

    Ethereum入門:5分でわかるEthereum(イーサリアム)とは?

    昨年よりメディア等でよく話題に上がるブロックチェーン技術。暗号通貨を含…

  2. Fabric × Raspberry Pi

    技術情報

    Hyperledger Fabric 1.0.6 を Raspberry Pi で実行する環境の構築…

    はじめに以前の記事で Ethereum をRaspberry …

  3. Blockchain 技術情報

    技術情報

    DockerでHyperLedger Fabricの実行環境を構築する(v1.0.0-alpha向け…

    はじめまして。最近BlockChainを触り始めたzukaです。B…

  4. 技術情報

    Hyperledger Fabric vs Hyperledger Composer

    はじめに今回はHyperledger FabricとHyperle…

  5. Blockchain 技術情報

    技術情報

    IBM bluemixで HyperLedger Fabricの環境を構築してみる

    6月上旬となり一年ですごしやすい日々が続くはずの北海道ですが、日々シラ…

  6. Blockchain 技術情報 Hyperledger Composer

    技術情報

    Hyperledger Composerのチュートリアルをやってみる

    はじめにPoCが一段落し、さらにブロックチェーンを使って実装の知識…

Comment

  1. 本記事に対するコメントはまだありません

  1. 本記事に対するトラックバックはまだありません

最近の記事

おすすめ記事

  1. ブロックチェーンの基本的な仕組み
  2. ブロックチェーンを活用した医薬品のデッドストック販売プラット…
  3. 【満席御礼】2018年3月1日開催 無料セミナー 《ブロッ…
  1. INDETAIL × Orb

    イベント情報

    12月1日北海道初開催!エンジニア向け OrbDLTハンズオンセミナー★参加申し…
  2. イベント情報

    イベント情報

    【参加無料】勉強会「初めてでもここまでできるブロックチェーン」 6月30日開催!…
  3. Z.com Cloud ブロックチェーン

    トピックス/業界動向

    【GMOインターネット】ブロックチェーンを活用したビジネスの実現を支援する「Z.…
  4. トピックス/業界動向

    一般社団法人ブロックチェーン北海道イノベーションプログラム(BHIP) 設立のお…
  5. Blockchain 技術情報

    技術情報

    Macにgethを入れてEthereumの内部通貨etherを手に入れる
PAGE TOP