Hyperledger Fabric Architecture(1) ~ システム構成

これから数回にわたって、Hyperledger Fabric(以下Fabric)のアーキテクチャーを公式ドキュメントを基にご説明します。

今回はFabricのシステム構成について説明します。

1.システム構成

Fabricは状態データと元帳データという2つのデータ構造を有します。これらはトランザクションを実行することで変化します。

1.1 トランザクション

Fabricのトランザクションには2つのタイプがあります。

Deploy Transactions

新しいチェーンコードを作成し、プログラムをパラメータとして取得するトランザクションです。Deploy Transactionsが正常に実行されると、そのチェーンコードはブロックチェーン上にインストールされます。

※チェンコード:トランザクションを実行するプログラム。スマートコントラクトと同義。

Invoke Transactions

既にdeployされたチェーンコードのコンテキスト上で実行されるトランザクションです。Invoke Transactionsは、チェーンコード、および提供された機能の1つを参照します。成功するとチェーンコードは指定された関数を実行します。それにより、対応する状態を変更し、出力を返します。

1.2 データ構造

続いてFabricのデータ構造を説明します。

1.2.1 State(状態)

状態は、KVS(key value store)方式で実装されています。 状態はブロックチェーン上で実行されるチェーンコードによって操作されます。 状態は永続的に保存され、状態の更新はログに記録されます。 状態を操作するノードはPeerのみです。OrdererやClientによっては操作されません。(ノードについての説明は後述)

1.2.2 Ledger(台帳)

台帳は、システムの稼働中に発生する正常な状態変更(有効なトランザクション)、または失敗に終わった状態変更(無効なトランザクション)の履歴を有します。

台帳は、ordering serviceによって順序付けされたトランザクションの、ブロックのハッシュチェーンとして構築されます。ハッシュチェーンは台帳上のブロックの順序を規定し、各ブロックは順序付けされた取引の配列を有します。これにより、全てのトランザクションが適切な順序で保存されることになります。

台帳はすべてのPeerに保存されます。またOrdererの一部に保管されることもあります。Peer側の台帳をPeerLedgerと呼び、Orderer側の台帳をOrdererLedgerと呼びます。 PeerLedgerとOrdererLedgerの違いは、前者のみ、有効なトランザクションと無効なトランザクションを区別する機能を有している点です。

台帳はすべてのトランザクションの履歴を再生しすることで、状態を再構築できます。

1.3 ノード

Fabricのノードには3つのタイプがあります。各々、以下の役割を担います。

  1. Client(クライアント):トランザクションを提出する。
  2. Peer:トランザクションのシミュレーション、承認を行う。
  3. Ordering-service-node or orderer:トランザクションを整列する。

1つ注意点として、ノードは論理機能であり物理機能ではありません。そのため、異なるタイプの複数のノードを同じ物理サーバー上で実行することも可能です。

1.3.1 Client(クライアント)

クライアントはエンドユーザーの役割を担います。クライアントがブロックチェーンと通信するにはPeerに接続する必要があります。クライアントが担う役割はtransactionsの作成と呼び出しです。クライアントはPeerとOrdering Serviceの両方と通信します。

1.3.2 Peer

Peerはクライアントから受け取ったチェインコードをシミュレーションする役割を担います。 Peerはまたendorser(承認者)の役割も担います。endorserの仕事はコミットされる前のトランザクションを承認することです。endorserは各々、承認ポリシーを有しており、このポリシーは有効なトランザクション承認のために必要かつ十分な条件を定義します。 更に、PeerはOrdering Serviceから、ブロックの形で順序付けられた状態更新を受け取り、状態と台帳を更新する役割も担います。

1.3.3 Ordering-service-node or Orderer

OrdererはOrdering service(トランザクションの整列)を提供するノードです。 各peerに整列されたトランザクション群を伝える役割を担います。

まとめ

今回はFabricのシステム構成についての概略を説明しました。次回は、peer承認プロセスについての詳細をご説明致します。

Bitcoin(Mainnet, Testnet)への接続方法

Bitcoinへの接続環境をMacにインストールし、ネットワークに接続する方法です。

用語

  • Mainnet...実際に市場で取引されるBitcoinデータが格納されているBlockchain
  • Testnet...開発のためのBlockchainネットワーク。TestnetのBitcoinならばネットで無料で手に入る。
  • Blockchain...Bitcoinの取引記録。BitcoinP2Pネットワークに参加している全てのノードが同一のデータを持つ

何が出来るか

取引所でBitcoinを購入するなど単純にBitcoinの売り買いをしたり、Bitcoinで投資をしてみたり、友人に送金してみたり、といったことは、下記に記載するような、Bitcoinへの接続環境をローカルに作らなくても問題なく行えます。

ただ、自分でBitcoinウォレットを作ってみたり、取引所を作ってみたり、他にもBitcoinを用いたアプリケーションを作ってみたり、(あまり現実的ではないですが)個人でマイニングを行ったりする際には、このような環境構築が必要になってきます。

また、実際に手元で動かしてみることで、Blockchainとはどういうものかというのが実感として理解出来ると思います。

Read more

Smartcontractの開発を効率化するBrowser-solidityの使い方

概要

EthereumのGoクライアントである「Geth」と、SmartContractの記述言語である「Solidity」を用いることにより、SmartContractを自ら作成することが出来ます。
しかし、コーディングしコンパイルし動作を確認する、という作業を試行錯誤しながらコマンドライン上で繰り返すのは非効率であり、そんな時に開発環境として便利なツールがいくつか存在しております。
その中の1つである、Browser-solidityというIDEの使い方を見ていきたいと思います。

このIDEはSolidityの開発者がMeteorで作成しており、IDEのコード自体を読むこともSmartContractやMeteorを学ぶにも良い教材となりそうです。

主な使い方

このIDEを通してEthereumと接続できるため、コーディング、コンパイルされたものをワンクリックでBlockchain上に登録することが可能です。
なので、SmartContractをこのIDEで試行錯誤しながら作成し、完成したら実際にアプリケーションに組み込んで、Dappsを作成する、といった流れが良いと思います。

Read more

Multichainを用いたプライベートブロックチェーン開発(1):環境構築

今回からMultichainを用いたプライベートブロックチェーン開発について紹介致します。

Multichain

MultichainとはBitcoinをフォークしたブロックチェーンです。
参加するnodeを制限できるためプライベートブロックチェーンとして利用可能です。
ブロックの採掘時間(Bitcoinは約10分)、ブロックの最大サイズ、各nodeの権限の個別設定などが可能です。
具体的にどんなパラメータを調整可能かについては、こちらを見てください。

ちなみにMultichainはBitcoinから分岐すると、元のBitcoinには戻れません。
この点、ElementsRootstockなどの2-way-pegのSidechainとの違いです。

環境構築

Read more

Solidityによるコントラクトの作成(3) - スワップ取引

[前回]はオプション取引の実装方法を紹介しました。

sendeetech.hatenablog.com

今回は同じ要領でスワップ取引を実装しましょう。

コントラクト概要

今回は金利スワップを実装します。
金利スワップとは同一通貨間で異なる種類の金利を交換する取引のことです。最も多い取引は固定金利と変動金利の交換です。
例えば円の金利スワップでは、固定金利と6ヵ月TIBORとを半年毎に交換する取引などがあります。

今回実装する取引の設定は以下の通りです。

基本情報

Read more