技術情報

超簡単な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. ブロックチェーンを活用した医薬品のデッドストック販売プラットフォーム PoC […
  3. 【満席御礼】2018年3月1日開催 無料セミナー 《ブロックチェーンフェスティ…
  4. ブロックチェーンの技術:公開鍵暗号

Related post

  1. Blockchain 技術情報

    技術情報

    勉強会「初めてでもここまでできるブロックチェーン」第2部の内容紹介

    こんにちは。先日、6月30日に株式会社INDETAILにて勉強会「…

  2. Blockchain 技術情報

    技術情報

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

    こんにちは。badyと申します。最近、金融やIT業界の一部では…

  3. Blockchain 技術情報 Hyperledger Composer

    技術情報

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

    はじめに今回の目的は、「その1」で更新したビジネスネットワークを使…

  4. Blockchain 技術情報

    技術情報

    DockerでHyperLedger Fabricの実行環境を構築する(v0.6.1向け)

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

  5. Ethereum

    ブロックチェーンとは

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

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

  6. Blockchain 技術情報

    技術情報

    Raspberry Pi(ラズパイ)でEthereumを動かす

    はじめまして。IoT機器でブロックチェーンが世の中に偏在する世界を妄想…

Comment

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

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

最近の記事

  1. AWS Blockchain Templates

おすすめ記事

  1. ブロックチェーンの技術:公開鍵暗号
  2. ブロックチェーンの基本的な仕組み
  3. ブロックチェーンを活用した医薬品のデッドストック販売プラット…
  1. Z.com Cloud ブロックチェーン

    トピックス/業界動向

    【GMOインターネット】ブロックチェーンを活用したビジネスの実現を支援する「Z.…
  2. No Mapsブロックチェーンカンファレンス

    イベント情報

    2017年10月12日は、No Mapsブロックチェーンデー!ブロックチェーン無…
  3. Blockchain 技術情報

    技術情報

    Windowsにgethを入れてEthereumの内部通貨etherを手に入れる…
  4. BHIP PoC 構想イメージ

    トピックス/業界動向

    ブロックチェーンを活用した医薬品のデッドストック販売プラットフォーム PoC […
  5. 公開鍵暗号方式

    ブロックチェーンとは

    ブロックチェーンの技術:公開鍵暗号
PAGE TOP