企業向けスマートコントラクト「Quorum」って、Ethereumとどう違うの?Ethereumではじめる“スマートコントラクト開発”(4)(1/2 ページ)

Ethereumをベースとしたスマートコントラクトプラットフォーム「Quorum」は企業向けに改良されている。サンプルで動かしつつ、どのように改良されているのかを探る。

» 2018年04月16日 05時00分 公開
[大竹祐貴トライデントアーツ]

超入門スマートコントラクト

 「スマートコントラクト」は、契約の条件確認や履行などを自動で行えることから、ブロックチェーン技術を活用したアプリケーションプラットフォームの中でも研究開発が進み、注目されている技術です。

 本連載では、スマートコントラクトの概念や仕組みを整理しつつ、DApps(Decentralized Applications:分散ノード上で実行されるアプリケーション)でのスマートコントラクトのコーディング方法、企業向けアプリケーション開発の実践方法について解説していきます。

 今回は、Ethereumをベースとした企業向けスマートコントラクトプラットフォーム「Quorum」の紹介とサンプル動作環境の構築手順を説明します。

Quorumの概要

 Quorumとは、JPモルガンが開発したオープンソースソフトウェア(OSS)であり、Ethereumをベースとした企業向けスマートコントラクトプラットフォームです。金融分野におけるエンタープライズ用途として開発され、Ethereumと互換性を持っています。Quorumは、Ethereumから主に下記の内容が改良されています。

許可型のネットワークモデル

 Quorumでは、参加するノードを許可リストとして事前に定義することで、許可されたノードのみでネットワークを構成できます。仮に、許可リストにないノードがネットワークに参加しても、許可されたノードをピアとして認識できず、また許可されたノードからピアとして認識されず、実質的にネットワークに参加できない状況になります。

プライベートトランザクション

 Ethereumでのトランザクションは、ネットワーク内の全ノードで実行され、実行結果も全ノードで更新されます。これを便宜上「パブリックトランザクション」と呼びます。

 Quorumでは、パブリックトランザクションに加えて、「プライベートトランザクション」を実装しています。プライベートトランザクションとは、“実行するノードを指定した”トランザクションであり、トランザクションの実行結果は、指定されたノードにのみ保持されます。このプライベートトランザクションを活用することで、データの秘匿化が可能となります。

 プライベートトランザクションにより、取引の当事者に該当するノードでのみトランザクションを実行することで、データは当事者間でしか共有されません。例えば、監査機関のノードを参加させて、「取引の当事者同士+監査機関」のノードでトランザクションを実行するルールにすることで、取引の当事者のノードには関係する取引データのみが記録され、監査機関のノードには全取引のデータが記録されることになります。

コンセンサスアルゴリズム

 執筆時点での最新版では「Raft-based」と「Istanbul-BFT」というアルゴリズムが実装されています。

 Raft-basedは、「Raftコンセンサスアルゴリズム」を実装したもので、信頼性のあるノードで構成された「BFT」(Byzantine Fault Tolerance)が不要なコンソーシアム型向けになっています。ノードは「leader」と「follower」という役割に分かれます。

 Istanbul-BFTは、「Istanbul Byzantine Fault Tolerance」(GitHub)を実装したものです。ノードは「Proposer」と「Validator」という役割に分かれます。ブロックの作成はProposerの役割を持ったノードが行い、ネットワークにブロードキャストします。その後、Validatorの役割を持ったノードが検証し、承認が得られるとブロックが確定します。

 なお、以前のQuorumは「Voting」(投票)というコンセンサスアルゴリズムが実装されていました。ブロックの作成は「block maker」の役割を持ったノードが行い、作成されたブロックはblock makerで署名され、その後ネットワークの他ノードに配布されます。そして「voter」の役割を持ったノードが検証していました。

 いずれのアルゴリズムも、ネットワーク内の限られたノードでブロックを生成し、他ノードが検証する仕組みです。現在、アルゴリズムの処理性能の向上が図られています。

処理性能

 Istanbul Byzantine Fault Tolerance(GitHub)によると、秒間400〜1200のトランザクションが処理可能とされています。ネットワークやコントラクトへの依存はあるものの、秒間数百のトランザクションは処理できると見込めるでしょう。

       1|2 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。