(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-09-20
(45)【発行日】2023-09-28
(54)【発明の名称】ブロックチェーン・タイムスタンプ協定
(51)【国際特許分類】
H04L 9/32 20060101AFI20230921BHJP
G06F 11/07 20060101ALI20230921BHJP
H04L 67/50 20220101ALI20230921BHJP
【FI】
H04L9/32 200Z
G06F11/07 157
H04L67/50
G06F11/07 140A
(21)【出願番号】P 2021518767
(86)(22)【出願日】2019-10-07
(86)【国際出願番号】 EP2019077111
(87)【国際公開番号】W WO2020074456
(87)【国際公開日】2020-04-16
【審査請求日】2022-08-16
(32)【優先日】2018-10-08
(33)【優先権主張国・地域又は機関】US
(32)【優先日】2018-10-08
(33)【優先権主張国・地域又は機関】US
(32)【優先日】2018-10-08
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】521173926
【氏名又は名称】グリーン・マーケット・スクエア・リミテッド
【氏名又は名称原語表記】GREEN MARKET SQUARE LIMITED
(74)【代理人】
【識別番号】110000028
【氏名又は名称】弁理士法人明成国際特許事務所
(72)【発明者】
【氏名】吉濱 佐知子
(72)【発明者】
【氏名】稲垣 達氏
(72)【発明者】
【氏名】上田 陽平
(72)【発明者】
【氏名】上條 浩一
(72)【発明者】
【氏名】中村 宏明
【審査官】行田 悦資
(56)【参考文献】
【文献】米国特許出願公開第2017/0250972(US,A1)
【文献】国際公開第2018/057322(WO,A1)
【文献】特表2019-530308(JP,A)
【文献】米国特許出願公開第2012/0117385(US,A1)
【文献】特開2012-249238(JP,A)
【文献】米国特許出願公開第2005/0138383(US,A1)
【文献】NARAYANAN, Arvind,仮想通貨の教科書,第1版,日本,日経BP社,2016年12月09日,pp.357-358
【文献】大野 有輝,情報爆発時代の分散アプリケーションの性能解析に関する検討,第70回(平成20年)全国大会講演論文集(5) ,日本,社団法人情報処理学会,2008年03月13日,pp.5-147-5-148
(58)【調査した分野】(Int.Cl.,DB名)
H04L 9/32
G06F 11/07
H04L 67/50
(57)【特許請求の範囲】
【請求項1】
エンドーシング・ノードであって、
ブロックチェーン要求をクライアント・アプリケーションから受信するように構成されるネットワーク・インターフェースと、
前記クライアント・アプリケーションと前記エンドーシング・ノードとの間のネットワーク経路に基づいて前記クライアント・アプリケーションと前記エンドーシング・ノードとの間のネットワーク・レイテンシを判断し、前記ブロックチェーン要求からタイムスタンプを抽出し、前記クライアント・アプリケーションと前記エンドーシング・ノードとの間の前記ネットワーク・レイテンシに基づいて、前記抽出されたタイムスタンプが無効であるかどうかを判断し、前記タイムスタンプが有効であるとの判断に応答して、前記ブロックチェーン要求についてのエンドースメントを生成し、かつ前記ネットワーク・インターフェースを制御して前記エンドースメントを前記クライアント・アプリケーションに送信するように構成されるプロセッサと、
を備える、エンドーシング・ノード。
【請求項2】
前記プロセッサが、前記タイムスタンプが無効であるとの判断に応答して、前記ブロックチェーン要求をエンドースすることを拒否するようにさらに構成される、請求項1に記載のエンドーシング・ノード。
【請求項3】
前記ネットワーク・レイテンシが、前記エンドーシング・ノード上で動作し、かつ前記エンドーシング・ノードとブロックチェーン・ネットワーク内の複数のクライアント・アプリケーションのそれぞれとの間の前記ネットワーク・レイテンシを周期的に測定する、モニタリング・スレッドによって判断される、請求項1
または請求項2に記載のエンドーシング・ノード。
【請求項4】
前記ネットワーク・レイテンシが、前記エンドーシング・ノードのインメモリ・ストレージから取り出される、請求項1
ないし請求項3のいずれかに記載のエンドーシング・ノード。
【請求項5】
前記プロセッサが、前記ネットワーク・レイテンシに基づいて前記ブロックチェーン要求についてのタイムスタンプを推定し、前記抽出されたタイムスタンプが、前記推定されたタイムスタンプの事前定義された閾値の範囲内にあるかどうかを判断して、前記抽出されたタイムスタンプが有効であるかどうかを判断するように構成される、請求項1
ないし請求項4のいずれかに記載のエンドーシング・ノード。
【請求項6】
前記プロセッサが、前記抽出されたタイムスタンプが早すぎるかどうかを判断するように構成される、請求項1
ないし請求項5のいずれかに記載のエンドーシング・ノード。
【請求項7】
前記プロセッサが、前記ブロックチェーン要求をシミュレートし、前記タイムスタンプが有効であり、かつ前記ブロックチェーン要求のシミュレーションに成功しているとの判断に応答して、前記エンドースメントを生成するようにさらに構成される、請求項1
ないし請求項3のいずれかに記載のエンドーシング・ノード。
【請求項8】
エンドーシング・ノードであって、
ブロックチェーン要求をクライアント・アプリケーションから受信するように構成されるネットワーク・インターフェースと、
前記ブロックチェーン要求からタイムスタンプを抽出し、前記エンドーシング・ノードによって前記クライアント・アプリケーションと前記エンドーシング・ノードとの間で判断されるネットワーク・レイテンシに基づいて、前記抽出されたタイムスタンプが誤りであるか否かを判断し、前記抽出されたタイムスタンプが誤りであるとの判断に応答して、前記ブロックチェーン要求についての正しいタイムスタンプを判断し、前記抽出されたタイムスタンプを前記正しいタイムスタンプと置換することによって前記ブロックチェーン要求を修正し、かつ前記ネットワーク・インターフェースを制御して前記正しいタイムスタンプを有する前記ブロックチェーン要求を前記クライアント・アプリケーションに送信するように構成されるプロセッサと、
を備える、エンドーシング・ノード。
【請求項9】
前記プロセッサが、ピア・ノードと前記エンドーシング・ノードとの間のネットワーク経路に基づいて前記クライアント・アプリケーションと前記エンドーシング・ノードとの間の前記ネットワーク・レイテンシを判断するようにさらに構成される、請求項
8に記載のエンドーシング・ノード。
【請求項10】
前記プロセッサが、前記ネットワーク・レイテンシに基づいて前記ブロックチェーン要求のためのタイムスタンプを推定し、前記抽出されたタイムスタンプが、前記推定されたタイムスタンプの事前定義された閾値の範囲内にあるかどうかを判断して、前記抽出されたタイムスタンプが誤りであるかどうかを判断するように構成される、請求項
8または請求項9に記載のエンドーシング・ノード。
【請求項11】
前記プロセッサが、前記抽出されたタイムスタンプを前記推定されたタイムスタンプと置換するように構成される、請求項
10に記載のエンドーシング・ノード。
【請求項12】
前記プロセッサが、前記抽出されたタイムスタンプが早すぎるかどうかを判断するように構成される、請求項
8ないし請求項11のいずれかに記載のエンドーシング・ノード。
【請求項13】
エンドーシング・ノード
に実行される方法であって、
ブロックチェーン要求をクライアント・アプリケーションから受信することと、
前記クライアント・アプリケーションと前記エンドーシング・ノードとの間のネットワーク経路に基づいて、前記クライアント・アプリケーションと前記エンドーシング・ノードとの間のネットワーク・レイテンシを判断することと、
前記ブロックチェーン要求からタイムスタンプを抽出することと、
前記クライアント・アプリケーションと前記エンドーシング・ノードとの間の前記ネットワーク・レイテンシに基づいて、前記抽出されたタイムスタンプが無効であるかどうかを判断することと、
前記タイムスタンプが有効であるとの判断に応答して、前記ブロックチェーン要求についてのエンドースメントを生成すること、および前記エンドースメントを前記クライアント・アプリケーションに送信することと、
を含む、方法。
【請求項14】
前記タイムスタンプが無効であるとの判断に応答して、前記ブロックチェーン要求をエンドースすることを拒否することをさらに含む、請求項
13に記載の方法。
【請求項15】
前記ネットワーク・レイテンシが、前記エンドーシング・ノードとブロックチェーン・ネットワーク内の複数のクライアント・アプリケーションのそれぞれとの間の前記ネットワーク・レイテンシを周期的に測定する、前記エンドーシング・ノード上で動作するモニタリング・スレッドによって判断される、請求項
13または請求項14に記載の方法。
【請求項16】
前記ネットワーク・レイテンシが、前記エンドーシング・ノードのインメモリ・ストレージから取り出される、請求項
13ないし請求項15のいずれかに記載の方法。
【請求項17】
前記抽出されたタイムスタンプが無効であるかどうかを前記判断することが、前記ネットワーク・レイテンシに基づいて前記ブロックチェーン要求についてのタイムスタンプを推定することと、前記抽出されたタイムスタンプが、前記推定されたタイムスタンプの事前定義された閾値の範囲内にあるかどうかを判断することと、を含む、請求項
13ないし請求項16のいずれかに記載の方法。
【請求項18】
前記抽出されたタイムスタンプが無効であるかどうかを前記判断することが、前記抽出されたタイムスタンプが早すぎるかどうかを判断することを含む、請求項
13ないし請求項17のいずれかに記載の方法。
【請求項19】
前記ブロックチェーン要求をシミュレートすることと、前記タイムスタンプが有効と判断されること、および前記ブロックチェーン要求のシミュレーションに成功していることに応答して、前記エンドースメントを生成することと、をさらに含む、請求項
13ないし請求項18のいずれかに記載の方法。
【請求項20】
エンドーシング・ノード
に実行される方法であって、
ブロックチェーン要求をクライアント・アプリケーションから受信することと、
前記ブロックチェーン要求からタイムスタンプを抽出することと、
前記エンドーシング・ノードによって判断される前記クライアント・アプリケーションと前記エンドーシング・ノードとの間で判断されるネットワーク・レイテンシに基づいて、前記抽出されたタイムスタンプが誤りであるか否かを判断することと、
前記抽出されたタイムスタンプが誤りであるとの判断に応答して、前記ブロックチェーン要求についての正しいタイムスタンプを判断すること、前記抽出されたタイムスタンプを前記正しいタイムスタンプと置換することによって前記ブロックチェーン要求を修正すること、および前記正しいタイムスタンプを有する前記ブロックチェーン要求を前記クライアント・アプリケーションに送信することと、
を含む、方法。
【請求項21】
前記クライアント・アプリケーションと前記エンドーシング・ノードとの間のネットワーク経路に基づいて、前記クライアント・アプリケーションと前記エンドーシング・ノードとの間の前記ネットワーク・レイテンシを判断することをさらに含む、請求項
20に記載の方法。
【請求項22】
前記抽出されたタイムスタンプが誤りであるかどうかを前記判断することが、前記ネットワーク・レイテンシに基づいて前記ブロックチェーン要求についてのタイムスタンプを推定することと、前記抽出されたタイムスタンプが、前記推定されたタイムスタンプの事前定義された閾値の範囲内にあるかどうかを判断することと、を含む、請求項
20または請求項21に記載の方法。
【請求項23】
前記修正することが、前記抽出されたタイムスタンプを前記推定されたタイムスタンプと置換することを含む、請求項
22に記載の方法。
【請求項24】
前記抽出されたタイムスタンプが誤りであるかどうかを前記判断することが、前記抽出されたタイムスタンプが早すぎるかどうかを判断することを含む、請求項
20ないし請求項23のいずれかに記載の方法。
【請求項25】
プロセッサによって読み出されることに応じて、
ブロックチェーン要求をクライアント・アプリケーションから受信することと、
前記クライアント・アプリケーションとエンドーシング・ノードとの間のネットワーク経路に基づいて、前記クライアント・アプリケーションと前記エンドーシング・ノードとの間のネットワーク・レイテンシを判断することと、
前記ブロックチェーン要求からタイムスタンプを抽出することと、
前記クライアント・アプリケーションと前記エンドーシング・ノードとの間の前記ネットワーク・レイテンシに基づいて、前記抽出されたタイムスタンプが無効であるかどうかを判断することと、
前記タイムスタンプが有効であるとの判断に応答して、前記ブロックチェーン要求についてのエンドースメントを生成すること、および前記エンドースメントを前記クライアント・アプリケーションに送信することと、
を含む方法を前記プロセッサに
実行させる、コンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本出願は、概して、データベース・ストレージ・システムに関し、より具体的には、ブロックチェーン要求を記憶する前にブロックチェーン要求のタイムスタンプ情報が検証される、ブロックチェーンなどの非集中型データベースに関する。
【背景技術】
【0002】
集中型データベースは、1つの場所にある1つの単一データベース(例えば、データベース・サーバ)内にデータを記憶し、維持する。この場所は、中央コンピュータ、例えば、サーバ・コンピュータ、クラウド・サービスにおけるコンピュータ、またはメインフレーム・コンピュータであることが多い。集中型データベース上に記憶された情報は、典型的には、複数の異なるポイントからアクセス可能である。複数のユーザまたはクライアント・ワークステーションは、例えばクライアント/サーバ構成に基づいて、集中型データベース上で同時に作動し得る。その場所が単一であるために、集中型データベースは、特にセキュリティ目的で管理、維持、および制御が容易である。全てのデータを単一の場所に記憶することが、また、所与のデータのセットが1つのプライマリ・レコードのみを有することを示唆する時、集中型データベース内で、データ保全性が最大化されデータ冗長性が最小化される。これは、データを可能な限り正確かつ整合性を有するように維持することに役立ち、データの信頼性を強化する。
【0003】
しかしながら、集中型データベースは、重大な欠点を抱えている。例えば、集中型データベースは、単一障害点を有する。特に、フォールト・トレランスの設定がなく、ハードウェア故障が発生する場合、データベース内の全てのデータが失われ、全てのユーザの作業が中断される。さらに、集中型データベースは、ネットワーク接続性に高度に依存している。その結果、インターネット接続が遅くなるほど、各データベース・アクセスに必要な時間量が長くなる。別の欠点は、集中型データベースが単一場所に起因して高いトラフィックを経験する時に、ボトルネックが発生するということである。さらに、データベースによってデータのコピーが1つしか維持されないために、集中型データベースは、データへのアクセスに制限がある。その結果、複数ユーザが、記憶済みデータを上書きするなどの問題を生じることなしに、同時にデータの同一部分にアクセスすることができない場合がある。さらに、中央データベース・システムは、データ冗長性を最小限だけ有するか全く有しないために、データのセットが予期せず失われた場合に、バックアップ・ディスク・ストレージから手動操作による以外にはそれを取り戻すことが困難である。
【0004】
ブロックチェーン・システムなどの非集中型データベースは、集中型データベースの欠点に対処することが可能なストレージ・システムを提供する。ブロックチェーン・システムでは、複数のピア・ノードのそれぞれが、分散型台帳として同一の台帳の複製を記憶し、しばしばブロックチェーンと呼ばれる。クライアントは、ブロックチェーンへのアクセスを得るためにピア・ノードと対話する。ピア・ノードは、異なる関心を有する異なるエンティティによって制御されてもよく、したがって、互いに対して信頼性のあるエンティティを有しない。さらに、ブロックチェーンには、中央権限がない。したがって、データが分散型台帳に信頼性のある方式で追加され、または変更されるためには、ピア・ノードのコンセンサスが生じなければならない。コンセンサスは、信頼性のないピア・ノードのブロックチェーン・システムにおいて信頼性を実現するための方法を提供する。
【0005】
ブロックチェーンを介してデータの交換を行い、またはデータを記憶するために、クライアントは、要求(例えば、トランザクションなど)をピア・ノードにサブミットし得る。要求は、それらがサブミットされた順序でブロックチェーンにおいて処理され、記録されるべきであるが、ノードのシステム・クロックが互いに完全に同期していない場合があり、かつノード間にネットワーク・レイテンシが存在すると、複数ノードにわたって時間について同意するメカニズムが存在しないために、公平な順序付けを保証することが困難である。さらに、ノードが、互いに対して公正に挙動しないことがある異なるエンティティに属するため、各ノードは、それ自体の要求をそれ以外よりも早く順序付けすることによって、利点/恩恵を得ようとする場合がある。
【0006】
例えば、金融市場では、時間優先および価格優先が、公正取引の原則である。時間優先は、株式取引において売注文および買注文を処理する規則の1つである。複数の注文が、同一株式に対して同一価格で行われる時に、より早く行われた売/買注文が、対応する売/買注文と競合し、取引として実行されることになることを意味する。売/買注文の競合が、集中型システムによって処理される場合、システムは、時間優先を尊重するように各注文を逐次的に処理し得る。しかしながら、非集中型システムでは、注文が複数システムによって並列で処理されることがあり、その間、注文の順序が正しく制御されない場合がある。正しい順序付けを保証することができないことによって、市場慣行において許容できない不公平を生じることとなる。
【0007】
要求は、要求がフロントエンド・アプリケーションによってサブミットされた時間を示すタイムスタンプを含む。タイムスタンプは、複数の要求の中で要求を順序付けするための基礎として使用されるべきである。適切に使用されると、タイムスタンプは、複数トランザクションが同一リソースと対話する時にトランザクションに公平性がもたらされることを保証する。しかしながら、ブロックチェーンは、不正行為を受けやすい。例えば、アプリケーション・ノードが乗っ取られ、または完全に置換されることがある。そのようなアプリケーションは、要求が他のエンティティに属するアプリケーションによってサブミットされた要求よりも早く順序付けされ得るように、不正な挙動を行い、現実のタイムスタンプよりも早いタイムスタンプを付与する。別の例として、ピア・ノードは、他のエンティティからの要求が、それ自体のエンティティの要求よりも後に順序付けされるように、それらの要求の処理を行うコンセンサスを意図的に無視し、遅延させることがある。その結果、ブロックチェーン・ネットワーク内で信頼性を保証し不正行為を防止する、ブロックチェーン内の時間管理メカニズムが必要とされる。
【発明の概要】
【0008】
1つの例としての実施形態は、ブロックチェーン要求をクライアント・アプリケーションから受信するように構成されるネットワーク・インターフェースと、クライアント・アプリケーションとエンドーシング・ノードとの間のネットワーク経路に基づいてクライアント・アプリケーションとエンドーシング・ノードとの間のネットワーク・レイテンシを判断すること、ブロックチェーン要求からタイムスタンプを抽出すること、クライアント・アプリケーションとエンドーシング・ノードとの間のネットワーク・レイテンシに基づいて、抽出されたタイムスタンプが無効であるかどうかを判断すること、ならびにタイムスタンプが有効であるとの判断に応答して、ブロックチェーン要求についてのエンドースメントを生成すること、およびネットワーク・インターフェースを制御してエンドースメントをクライアント・アプリケーションに送信することのうちの1つまたは複数を行うように構成されるプロセッサと、のうちの1つまたは複数を含むコンピューティング・システムを提供し得る。
【0009】
別の例としての実施形態は、ブロックチェーン要求をクライアント・アプリケーションから受信することと、クライアント・アプリケーションとエンドーシング・ノードとの間のネットワーク経路に基づいてクライアント・アプリケーションとエンドーシング・ノードとの間のネットワーク・レイテンシを判断することと、ブロックチェーン要求からタイムスタンプを抽出することと、クライアント・アプリケーションとエンドーシング・ノードとの間のネットワーク・レイテンシに基づいて、抽出されたタイムスタンプが無効であるかどうかを判断することと、タイムスタンプが有効であるとの判断に応答して、ブロックチェーン要求についてのエンドースメントを生成すること、およびエンドースメントをクライアント・アプリケーションに送信することと、のうちの1つまたは複数を含む方法を提供し得る。
【0010】
さらなる例としての実施形態は、プロセッサによって読み出される時に、ブロックチェーン要求をクライアント・アプリケーションから受信することと、クライアント・アプリケーションとエンドーシング・ノードとの間のネットワーク経路に基づいてクライアント・アプリケーションとエンドーシング・ノードとの間のネットワーク・レイテンシを判断することと、ブロックチェーン要求からタイムスタンプを抽出することと、クライアント・アプリケーションとエンドーシング・ノードとの間のネットワーク・レイテンシに基づいて、抽出されたタイムスタンプが無効であるかどうかを判断することと、タイムスタンプが有効であるとの判断に応答して、ブロックチェーン要求についてのエンドースメントを生成すること、およびエンドースメントをクライアント・アプリケーションに送信することと、のうちの1つまたは複数をプロセッサに実行させる命令を含む、非一過性コンピュータ可読媒体を提供し得る。
【0011】
さらなる例としての実施形態は、ブロックチェーン要求をクライアント・アプリケーションから受信するように構成されるネットワーク・インターフェースと、ブロックチェーン要求からタイムスタンプを抽出すること、エンドーシング・ノードによってクライアント・アプリケーションとエンドーシング・ノードとの間で判断されるネットワーク・レイテンシに基づいて、抽出されたタイムスタンプが誤りであるか否かを判断すること、ならびに抽出されたタイムスタンプが誤りであるとの判断に応答して、ブロックチェーン要求についての正しいタイムスタンプを判断すること、抽出されたタイムスタンプを正しいタイムスタンプと置換することによってブロックチェーン要求を修正すること、およびネットワーク・インターフェースを制御して正しいタイムスタンプを有するブロックチェーン要求をクライアント・アプリケーションに送信すること、のうちの1つまたは複数を行うように構成されるプロセッサと、のうちの1つまたは複数を含むコンピューティング・システムを提供し得る。
【0012】
さらなる例としての実施形態は、ブロックチェーン要求をクライアント・アプリケーションから受信することと、ブロックチェーン要求からタイムスタンプを抽出することと、エンドーシング・ノードによって判断されるクライアント・アプリケーションとエンドーシング・ノードとの間で判断されるネットワーク・レイテンシに基づいて、抽出されたタイムスタンプが誤りであるか否かを判断することと、抽出されたタイムスタンプが誤りであるとの判断に応答して、ブロックチェーン要求についての正しいタイムスタンプを判断すること、抽出されたタイムスタンプを正しいタイムスタンプと置換することによってブロックチェーン要求を修正すること、および正しいタイムスタンプを有するブロックチェーン要求をクライアント・アプリケーションに送信することと、のうちの1つまたは複数を含む方法を提供し得る。
【0013】
本発明の実施形態が、ここで単なる例として添付図面を参照して説明される。
【図面の簡単な説明】
【0014】
【
図1】例としての実施形態による、タイムスタンプ協定のためのブロックチェーン・ネットワークを示す図である。
【
図2A】例としての実施形態による、資産共有シナリオのためのピア・ノード・ブロックチェーン・アーキテクチャ構成を示す図である。
【
図2B】例としての実施形態による、ピア・ノード・ブロックチェーン構成を示す図である。
【
図3】例としての実施形態による、許可型ブロックチェーン・ネットワークを示す図である。
【
図4A】例としての実施形態による、エンドーシング・ピア・ノードがタイムスタンプを修正するプロセスを示す図である。
【
図4B】例としての実施形態による、クライアント・ピア・ノードが評判値を生成するプロセスを示す図である。
【
図4C】例としての実施形態による、順序付けノードが最終タイムスタンプを判断するプロセスを示す図である。
【
図5A】例としての実施形態による、タイムスタンプに基づいてブロックチェーン・トランザクションをエンドースする方法を示す図である。
【
図5B】例としての実施形態による、ブロックチェーン・トランザクションのタイムスタンプを修正する方法を示す図である。
【
図5C】例としての実施形態による、有効性情報に基づいてトランザクションの元のタイムスタンプを修正する方法を示す図である。
【
図5D】例としての実施形態による、加重タイムスタンプに基づいてトランザクションについての最終タイムスタンプを判断する方法を示す図である。
【
図5E】例としての実施形態による、ピア・ノードについての評判値を判断する方法を示す図である。
【
図5F】例としての実施形態による、加重評判に基づいて最終値を判断する方法を示す図である。
【
図6A】例としての実施形態による、本明細書に説明される1つまたは複数の動作に従ってブロックチェーン上で様々な動作を実行するように構成される物理インフラストラクチャを示す図である。
【
図6B】例としての実施形態による、ブロックチェーン上でスマート・コントラクト条件を施行するように構成される契約当事者と仲介サーバとの間のスマート・コントラクト構成を示す図である。
【
図6C】例としての実施形態による、ブロックチェーン上でスマート・コントラクト条件を施行するように構成される契約当事者と仲介サーバとの間のスマート・コントラクト構成を示す図である。
【
図6D】例としての実施形態による、別の例としてのブロックチェーン・ベースのスマート・コントラクト・システムを示す図である。
【
図7A】例としての実施形態による、新たなブロックがブロックチェーン台帳に追加されるプロセスを示す図である。
【
図7B】例としての実施形態による、ブロックチェーンのためのデータ・ブロック構造のコンテンツを示す図である。
【
図8】例としての実施形態のうちの1つまたは複数をサポートするように構成される、例としてのコンピュータ・システムを示す図である。
【発明を実施するための形態】
【0015】
本コンポーネントは、本明細書において概して説明され図面に示されるように、多種多様な異なる構成において配置および設計され得ると、容易に理解される。よって、添付図面において表される、方法、装置、非一過性コンピュータ可読媒体、およびシステムのうちの少なくとも1つの実施形態の以下の詳細な説明は、特許請求される本出願の範囲を限定することを意図しておらず、単に選択された実施形態を表している。
【0016】
本明細書全体を通して説明される、本特徴、構造、または特性は、1つまたは複数の実施形態において任意の適当な方式で結合され得る。例えば、「例としての実施形態」、「いくつかの実施形態」という語句、または他の類似の言葉の使用は、本明細書全体を通して、実施形態に関連して説明される特定の特徴、構造、または特性が少なくとも1つの実施形態に含まれ得るという事実を指す。よって、「例としての実施形態」、「いくつかの実施形態において」、「他の実施形態において」という語句、または他の類似の言葉の出現は、本明細書全体を通して、必ずしも全てが実施形態の同一グループを指すわけではなく、説明される特徴、構造、または特性が、1つまたは複数の実施形態において任意の適当な方式で結合され得る。
【0017】
さらに、「メッセージ」という用語が、実施形態の説明において使用されている場合があるが、本出願は、パケット、フレーム、データグラムなどの多くの種類のネットワーク・データに適用され得る。「メッセージ」という用語は、パケット、フレーム、データグラム、およびそれらの任意の均等物も含む。さらに、ある種類のメッセージおよびシグナリングが、例示的実施形態に示されることがあるが、それらは、ある種類のメッセージに限定されず、本出願は、ある種類のシグナリングに限定されない。
【0018】
例としての実施形態は、方法、システム、非一過性コンピュータ可読媒体、デバイス、またはネットワーク、あるいはそれらの組み合わせを提供し、それらは、改ざんされたタイムスタンプについてブロックチェーン要求(例えばトランザクションなど)内のタイムスタンプ情報を評価するブロックチェーン・ネットワークを提供する。さらに、ブロックチェーン・ネットワークは、改ざんされたタイムスタンプ情報を修正し、訂正されたタイムスタンプ情報に基づいてトランザクションを記憶し得る。いくつかの実施形態では、ピア・ノードが、新たなトランザクションをサブミットする時、または他のピア・ノードによってサブミットされたトランザクションをエンドースする時、あるいはその両方の時に、ネットワークによって高度に精査されるように、ネットワークは、タイムスタンプを改ざんしているピア・ノードの評判を低下させ得る。
【0019】
非集中型データベースは、互いに通信する複数のノードを含む分散型ストレージ・システムである。ブロックチェーンは、相互に信頼関係のない当事者間でレコードを維持することが可能な分散型台帳に似た、追加専用の不変データ構造を含む非集中型データベースの例である。信頼関係のない当事者は、本明細書においてピアまたはピア・ノードと呼ばれる。各ピアは、データベース・レコードのコピーを維持し、単一のピアが、分散型ピア間でコンセンサスに達することなしにデータベース・レコードを修正することはできない。例えば、ピアは、ブロックチェーン・ストレージ・トランザクションを検証し、ストレージ・トランザクションをブロックにグループ化し、ブロックにわたってハッシュ・チェーンを構築するように、コンセンサス・プロトコルを実行し得る。このプロセスは、一貫性のために必要に応じてストレージ・トランザクションを順序付けすることによって台帳を形成する。パブリックまたは非許可型ブロックチェーンでは、特定の識別なしに誰でも参加できる。パブリック・ブロックチェーンは、しばしばネイティブ暗号通貨に関係し、プルーフ・オブ・ワーク(PoW)に基づくコンセンサスを用いる。一方、許可型ブロックチェーン・データベースは、資金、商品、情報などを交換するビジネスなど、共通目的を共有するが互いに完全な信頼関係のない、エンティティのグループ間の相互作用を安全にし得るシステムを提供する。
【0020】
ブロックチェーンは、非集中型ストレージ方式に適合され、かつ「スマート・コントラクト」または「チェーンコード」と呼ばれる、任意のプログラマブル・ロジックを動作させる。いくつかの場合において、専門チェーンコードは、システム・チェーンコードと呼ばれる管理関数およびパラメータに対して存在し得る。スマート・コントラクトは、ブロックチェーン・データベースの耐タンパ性、およびエンドースメントまたはエンドースメント・ポリシーと呼ばれる、ノード間の基礎となる協定を活用する、信頼性のある分散型アプリケーションである。概して、ブロックチェーン・トランザクションは、典型的には、ブロックチェーンにコミットされる前に「エンドース」されなければならず、エンドースされないトランザクションは無視される。典型的なエンドースメント・ポリシーは、チェーンコードが、エンドースメントに必要なピア・ノードのセットの形式でトランザクションのためのエンドーサを指定することを可能にする。クライアントが、エンドースメント・ポリシーにおいて指定されるピアにトランザクションを送信する時、トランザクションは、トランザクションを検証するために実行される。検証後、トランザクションは、ブロックにグループ化されたエンドース済みトランザクションの順序付けされたシーケンスを作り出すためにコンセンサス・プロトコルが使用される、順序付け段階に入る。
【0021】
ノードは、ブロックチェーン・システムの通信エンティティである。「ノード」は、異なる種類の複数のノードが同一の物理サーバ上で動作し得るという意味で、論理関数を実行し得る。ノードは、信頼できるドメイン内にグループ化され、様々な方法でそれらを制御する論理エンティティに関連付けられる。ノードは、トランザクション呼び出しをエンドーサ(例えば、ピア)にサブミットし、かつトランザクション提案を順序付けサービス(例えば、順序付けノード)にブロードキャストする、クライアントまたはサブミット側クライアント・ノードなどの異なる種類を含み得る。ノードの別の種類は、クライアントがサブミットしたトランザクションを受信し、トランザクションをコミットし、ブロックチェーン・トランザクションの台帳の状態およびコピーを維持し得るピア・ノードである。ピアは、エンドーサの役割も有し得るが、それは必須ではない。順序付けサービス・ノードまたはオーダラは、全てのノードについて通信サービスを実行するノードであり、トランザクションをコミットし、かつブロックチェーンのワールド・ステートを修正する時に、システム内のピア・ノードのそれぞれに対するブロードキャストなど、配信保証を実施する。ワールド・ステートは、制御およびセットアップ情報を通常含む、最初のブロックチェーン・トランザクションの別名である。
【0022】
台帳は、ブロックチェーンの全ての状態遷移の、順番に配列された耐改ざんレコードである。状態遷移は、参加している当事者(例えば、クライアント・ノード、順序付けノード、エンドーサ・ノード、ピア・ノードなど)によってサブミットされるチェーンコード呼び出し(即ち、トランザクション)から生じ得る。トランザクションは、生成、更新、削除などの1つまたは複数のオペランドとして台帳にコミットされている資産キー値ペアのセットをもたらし得る。台帳は、不変性の、順番に配列されたレコードをブロックに記憶するために使用される、ブロックチェーン(チェーンとも呼ばれる)を含む。台帳は、ブロックチェーンの現在の状態を維持する状態データベースも含む。典型的には、チャネル毎に1つの台帳が存在する。各ピア・ノードは、それらがメンバであるチャネル毎に台帳のコピーを維持する。
【0023】
チェーンは、ハッシュ・リンク付きブロックとして構築されるトランザクション・ログであり、各ブロックは、N個のトランザクションのシーケンスを含み、Nは1以上である。ブロック・ヘッダは、ブロックのトランザクションのハッシュだけでなく、前のブロックのヘッダのハッシュも含む。このようにして、台帳上の全てのトランザクションが、順番に配列され、暗号によって共にリンクされ得る。したがって、ハッシュ・リンクを壊すことなく台帳データを改ざんすることはできない。最新の追加されたブロックチェーン・ブロックのハッシュは、その前に生じたチェーン上のあらゆるトランザクションを表し、全てのピア・ノードが整合性および信頼性のある状態にあることを保証することを可能にする。チェーンは、ピア・ノード・ファイル・システム(即ち、ローカル、取り付けストレージ、クラウドなど)上に記憶されてもよく、ブロックチェーンの作業負荷の追加専用の性質を効率的にサポートする。
【0024】
不変性台帳の現在の状態は、チェーン・トランザクション・ログに含まれる全てのキーについての最新の値を表す。現在の状態は、チャネルにとって既知の最新のキー値を表すため、それは、ワールド・ステートと呼ばれることがある。チェーンコード呼び出しは、台帳の現在の状態データに対してトランザクションを実行する。これらのチェーンコードの相互作用を効率的にするために、キーの最新の値が、状態データベースに記憶され得る。状態データベースは、単にチェーンのトランザクション・ログへのインデックス付きビューであってもよく、したがって、それはいかなる時でもチェーンから再生成され得る。状態データベースは、ピア・ノードの起動時に、およびトランザクションが受け取られる前に、自動的に回復され得る(または必要であれば生成され得る)。
【0025】
トランザクションまたは他の要求(プロセス、ストレージなど)が、集中型データベースなどの単一システムによって処理される時、システムは、集中型システムがいつ要求を受信したかに基づいて時間優先を尊重するように、各注文を逐次的に処理し得る。しかしながら、並列処理システムでは、要求は、複数システムによって並列で処理されることがあり、その間、注文の順序が変更される場合がある。このような並列処理によって、市場慣行において許容できない不公平を生じることがある。公平性を保証するためには、注文は、注文がアプリケーションによって受け取られた時間に基づいて順序付けされるべきである。
【0026】
しかしながら、ピア・ノード(即ち、クライアント・アプリケーション、ピア(エンドーサ)、およびオーダラなど)は、並列で非同期的に挙動するため、ブロックチェーンなどの分散型台帳技術(DLT)においてアプリケーションのタイムスタンプの正確性を保証することが困難である。さらに、各ノードは、異なる組織に属する場合がある。結果として、タイムスタンプが、改ざんされるか、または誤って生成されることがある。例えば、アプリケーション(クライアント・ノード)が、トランザクションに対してより高い時間優先度を有するために、トランザクションに任意の誤ったタイムスタンプを付与することがある。別の例として、エンドーサ・ピアは、ピアと同一の組織内のアプリケーションによって発行されるトランザクションに対して相対的優位性を得るために、他のピアからのトランザクション提案への応答を遅延させることがある。
【0027】
例としての実施形態は、改ざんされたタイムスタンプについてブロックチェーン要求(例えば、トランザクションなど)内のタイムスタンプ情報を評価するブロックチェーン・ネットワークを提供することによって、これらの欠点を克服する。さらに、ブロックチェーン・ネットワークは、改ざんされたタイムスタンプ情報を修正し、訂正されたタイムスタンプ情報に基づいてトランザクションを記憶し得る。いくつかの実施形態では、ピア・ノードが、新たなトランザクションをサブミットする時、または他のピア・ノードによってサブミットされたトランザクションをエンドースする時、あるいはその両方の時に、ネットワークによって高度に精査されるように、ネットワークは、タイムスタンプを改ざんしているピア・ノードの評判を低下させ得る。本明細書で説明されるように、改ざんされたタイムスタンプは、要求に追加される意図的に誤ったタイムスタンプを指してもよく、または、それは、遅すぎて不公平である現実のタイムスタンプを生成するために意図的に遅延されているメッセージを含み得る。
【0028】
本明細書で説明され、図示される本解決策のいくつかの恩恵は、分散型台帳技術においてトランザクションに与えられるタイミング(タイムスタンプ)の精度に対する改善を含む。そうすることで、システムは、ブロックチェーンなどにおいて台帳が信頼性のないメンバを有する時であっても、順序の公平性を作り出す。タイムスタンプ情報は、エンドーシング・ピア・ノードによってモニタリングされ、評価され得る。エンドーシング・ノードが、タイムスタンプ値がサブミット側ノードによって改ざんされていると判断する場合、エンドーシング・ノードは、タイムスタンプ値を訂正された値に変更し得る。エンドーシング・ノードは、タイムスタンプが改ざんされているかどうかを、エンドーシング・ノードとサブミット側ピア・ノードとの間で測定されるネットワーク・レイテンシに基づいて判断し得る。さらに、エンドーシング・ノードは、トランザクションについての提案タイムスタンプをネットワーク・レイテンシに基づいて判断し、この値をサブミット側ノードから提供されるタイムスタンプと比較し得る。提案タイムスタンプおよびサブミットされたタイムスタンプに閾値より多くの差がある場合、エンドーシング・ノードは、タイムスタンプ値を提案タイムスタンプに変更し得る。
【0029】
ブロックチェーンは中央ストレージではなく、非集中型の不変かつ安全なストレージであるという点において、ブロックチェーンは従来のデータベースとは異なり、ノードは、ストレージ内のレコードに対する変更を共有しなければならない。ブロックチェーンにおいて固有であり、ブロックチェーンを実施する助けとなるいくつかの特性は、本明細書においてさらに説明される、不変性台帳、スマート・コントラクト、セキュリティ、プライバシー、非集中型、コンセンサス、エンドースメント、アクセス可能性などを含むが、これらに限定されない。様々な態様によれば、タイムスタンプの公平性は、ブロックチェーンに固有かつ特有であるエンドースメント、コンセンサス、およびブロックチェーンの分散型特性を用いて実施される。特に、システムは、エンドーシング・ピア・ノードによる意見/判断のみに依拠しない。その代わりに、エンドーシング・ピア・ノードが誤ったタイムスタンプをトランザクションに追加したとサブミット側ピア・ノードが判断する時、サブミット側ピア・ノードは、修正されたタイムスタンプを受信し、エンドーシング・ピア・ノードについての評判値を生成し得る。これによって、エンドーシング・ピア・ノードとサブミット側ピア・ノードとの間の均衡が保証され得る。
【0030】
さらに、サブミット側ピア・ノードは、ブロックチェーン内に含めるためのトランザクションを順序付けノードに送信し得る。順序付けノードは、サブミット側ノードによって提供された元のタイムスタンプ、エンドーシング・ノードによってサブミットされた修正済みタイムスタンプ、エンドーシング・ノードの評判などを評価し、トランザクションについての最終タイムスタンプを判断し得る。いくつかの実施形態では、順序付けノードは、エンドーシング・ピア・ノードまたはサブミット側ピア・ノードあるいはその両方によって提供されるタイムスタンプの加重平均または加重組み合わせに基づいて、最終タイムスタンプを生成し得る。最終タイムスタンプは、データ・ブロック内のトランザクションのグループを用いてトランザクションを順序付けするために使用され得る。
【0031】
ブロックチェーン・プラットフォームによって採用される複数のコンセンサス・メカニズムが存在する。提案される解決策は、Hyperledger Fabricのコンセンサス・メカニズムなどのコンセンサス・メカニズムの上に設計され、そこで、ブロックチェーン・ネットワークは、クライアント・アプリケーション、ピア・ノード、および順序付けサービス・ノードを含む。クライアント・アプリケーションは、要求をブロックチェーン・ネットワークにサブミットするフロントエンド・サービスである。ピア・ノードは、分散型台帳の複製を管理するノードである。ピア・ノードのいくつかは、エンドーシング・ノード(またはエンドーシング・ピア)と呼ばれ、クライアント・アプリケーションから要求を受信し、要求を検証し、そのエンドースメントをクライアント・アプリケーションに返す。各エンドースメントは、元の要求、およびエンドーシング・ノードによって検証されたその有効性、ならびに任意の他の情報を含むデジタル署名されたメッセージである。順序付けサービス・ノードは、ブロックチェーン・ネットワークにおいて要求を均等に順序付けすることを担当する専用ノードである。クライアント・アプリケーションとピアのそれぞれは、ブロックチェーン・ネットワークの参加者である、組織(またはエンティティ)のうちの1つに属する。
【0032】
Hyperledger Fabricのメカニズムでは、コンセンサスは、以下の方式で行われる。まず、クライアント・アプリケーションが、要求を1つまたは複数のエンドーシング・ノードに送信し、エンドースメントを受信する。エンドースメント・ポリシーは、要求が有効であるために必要とされる組織からの要求の数を判断するように、要求の種類毎に事前定義される。したがって、クライアント・アプリケーションは、1つまたは複数の組織に属する1つまたは複数のエンドーシング・ピアから十分な数のエンドースメントを収集する。第2に、十分なエンドースメントを収集した後、クライアント・アプリケーションは、収集したエンドースメントと共に、要求を順序付けサービスにサブミットする。第3に、順序付けサービス・ノードは、要求を複数のクライアント・アプリケーションから受信し、それらを均等に順序付けし、ピア・ノードに送出する。第4に、次いで各ピア・ノードは、要求を受信し、それを分散型台帳のそれ自体の複製の中に記憶する。このメカニズムは、要求が、ブロックチェーン・ネットワーク内のピアのコピー全てにおいて同じ順序で完全に順序付けされることを保証する。
【0033】
Hyperledger Fabricの元のコンセンサス・メカニズムでは、エンドーシング・ピアは、トランザクション・コンテンツを評価することのみを担当し、結果となる読み取り-書き込みセットを導出する。一方、順序付けピアは、トランザクションを公平に順序付けすることを担当する。提案されるアイデアは、トランザクション到着タイミングについてのコンセンサスが非集中型方式で行われるように、現在のコンセンサス・メカニズムを拡張する。それは、エンドーシング・ピアおよびサブミット側ピア(例えば、クライアント・アプリケーションなど)のそれぞれが、ブロックチェーンの非集中型の性質を尊重することによって、公正に挙動しない場合がある可能性も考慮する。本明細書におけるシステムは、ブロックチェーン内のトランザクションの時系列順序付けを改善する。
【0034】
図1は、例としての実施形態による、ブロックチェーン・トランザクションのタイムスタンプ協定のためのブロックチェーン・ネットワーク100を示す。
図1を参照すると、ブロックチェーン・ネットワーク100は、インターネット、プライベート・ネットワーク、または同様のものあるいはその組み合わせなどのネットワーク140を介して通信する、複数のピア・ノード120~123および順序付けノード130を含む。ここで、ピア・ノード120~123は、異なる信頼性のないエンティティに対応し得るが、実施形態はそれに限定されない。各ピア・ノード120~123は、ブロックチェーン上に記憶するためにトランザクションをサブミットするためのサブミット側ノード(クライアント・ノード)として動作することが可能であり得る。ブロックチェーンは、ピア・ノード120~123のうちの全ての間で複製される分散型台帳内に記憶され得る。ピア・ノード120~123のそれぞれが、エンドーシング・ノードとして動作することも可能であってもよい。
【0035】
図1の例において、クライアント110は、ブロックチェーン・ネットワーク100によって管理されるブロックチェーン内の実行および記憶のために、トランザクション要求をピア・ノード123にサブミットする。トランザクションは、1つまたは複数のエンドースメント・ポリシーによって事前定義され得る、エンドーシング・ピア・ノード120および121に転送され得る。トランザクションは、ピア・ノード123からエンドーシング・ピア・ノード120および121に提供され、トランザクションがピア・ノード123にサブミットされた時を表すタイムスタンプを含む。しかしながら、ピア・ノード123が悪意で動作した場合、ピア・ノード123は、クライアント・トランザクションが時間的に早くなり、それによってブロックチェーン上に記憶された同一品目または資産に関連する別のサブミットされたトランザクションに勝つ、またはその前に来る可能性を与えるように、クライアント・トランザクションの順序を改善するためにタイムスタンプを減少させ得る(即ち、時間を減少させるなど)。
【0036】
したがって、エンドーシング・ピア・ノード120および121のそれぞれが、ピア・ノード123によって追加されたタイムスタンプを評価し得る。例えば、ピア・ノード120~123は、それぞれのピア・ノード120~123の間のネットワーク・レイテンシ値をルーチン的に測定する、モニタリング・スレッドをそれぞれ含み得る。それに応じて、各ピア・ノードは、ブロックチェーン・ネットワークにおけるそれぞれのピア・ノードと他のピア・ノードとの間のネットワーク・レイテンシ値のテーブルを維持し得る。ネットワーク・レイテンシ値は、現在のおよび更新されたネットワーク条件を経時的に反映するために、スレッドに基づいてランダムに、周期的に、などにより更新され得る。エンドーシング・ピア・ノード(例えば、ピア・ノード120)とサブミット側ノード123との間のネットワーク・レイテンシに基づいて、エンドーシング・ピア・ノードは、トランザクションがクライアント110によってサブミット側ピア・ノード123にサブミットされた時についての、それ自体の提案タイムスタンプを判断し得る。言い換えると、エンドーシング・ピア・ノードは、サブミット側ピア・ノード123によって追加されたタイムスタンプが正確であるかどうかを現在のネットワーク・レイテンシ条件に基づいてチェックし得る。元のタイムスタンプが提案タイムスタンプから逸脱する場合、エンドーシング・ピア・ノードは、元のタイムスタンプが無効である、誤りである、改ざんされている、エラーであるなどと判断し得る。いずれにせよ、エンドーシング・ピア・ノードは、タイムスタンプを修正し、トランザクションをエンドースし、トランザクションをサブミット側ピア・ノード123に返送し得る。このプロセスは、トランザクション毎に全てのエンドーシング・ピア・ノード(例えば、120および121)によって実行され得る。
【0037】
ピア・ノード123は、タイムスタンプがエンドーシング・ピア・ノード120または121あるいはその両方によって修正されたかどうかを検出し得る。タイムスタンプが修正されている場合、ピア・ノード123は、タイムスタンプ値の変更に基づいて、エンドーシング・ピア・ノード120および121についての評判値を判断し得る。1つのエンドーシング・ピア・ノードが悪意で動作している場合、他のピア・ノードは、サブミット側ピア・ノード123によって提供される元のタイムスタンプと類似のタイムスタンプ値を有するとみられる。しかしながら、サブミット側ピア・ノード123が悪意で動作している場合、エンドーシング・ピア・ノードからのタイムスタンプ値の全てが修正されることとなる。したがって、最終トランザクション提案が、順序付けノード130に送信される時、順序付けノード130は、サブミット側ピア・ノード123によって提供されたタイムスタンプにより多くの重みが与えられるべきであるかどうか、またはエンドーシング・ノード120および121によって提供されたタイムスタンプにより多くの重みが与えられるべきであるかどうかを容易に判断し得る。いくつかの場合において、順序付けノードは、タイムスタンプのそれぞれに重みを与え、サブミット側ピア・ノード123ならびにエンドーシング・ピア・ノード120および121からのタイムスタンプの加重組み合わせに基づいて最終タイムスタンプを判断し得る。ここで、各ノード120、121、および123には、それぞれ異なる重みが与えられ得る。
【0038】
いくつかの実施形態では、サブミット側ピア・ノードがタイムスタンプを改ざんした(即ち、提案タイムスタンプが、元のタイムスタンプとは著しく異なる)ことが明らかである時に、エンドーシング・ピア・ノードは、トランザクションをエンドースすることを拒否し得る。この場合、トランザクションは、適切にエンドースされなくてもよく、ブロックチェーン内のブロックに追加されないこととなる。
【0039】
図2Aは、例としての実施形態による、ブロックチェーン・アーキテクチャ構成200を示す。
図2Aを参照すると、ブロックチェーン・アーキテクチャ200は、あるブロックチェーン要素、例えばブロックチェーン・ノード202のグループを含み得る。ブロックチェーン・ノード202は、1つまたは複数のノード204~210を含み得る(これらの4つのノードは単なる例として示されている)。これらのノードは、ブロックチェーン・トランザクションの追加および検証プロセス(コンセンサス)などのいくつかのアクティビティに参加する。ブロックチェーン・ノード204~210のうちの1つまたは複数が、エンドースメント・ポリシーに基づいてトランザクションをエンドースし得、アーキテクチャ200内の全てのブロックチェーン・ノードに順序付けサービスを提供し得る。ブロックチェーン・ノードは、ブロックチェーン認証を開始し、ブロックチェーン層216に記憶されるブロックチェーン不変性台帳に書き込みしようとし得る。ブロックチェーン不変性台帳のコピーも、支持物理インフラストラクチャ214上に記憶され得る。ブロックチェーン構成は、1つまたは複数のアプリケーション224を含んでもよく、アプリケーション224は、記憶されたプログラム/アプリケーション・コード220(例えば、チェーンコード、スマート・コントラクトなど)にアクセスし実行するために、アプリケーション・プログラミング・インターフェース(API)222にリンクされる。プログラム/アプリケーション・コード220は、参加者によって求められるカスタマイズされた構成に従って生成されてもよく、それ自体の状態を維持し、それ自体の資産を制御し、外部情報を受信し得る。これは、トランザクションとして展開され、分散型台帳に付加することによって全てのブロックチェーン・ノード204~210上にインストールされ得る。
【0040】
ブロックチェーン・ベースまたはプラットフォーム212は、ブロックチェーン・データの様々な層、サービス(例えば、暗号による信用サービス、仮想実行環境など)、ならびに新たなトランザクションを受信および記憶し、データ・エントリにアクセスしようとしている監査役へのアクセスを提供するために使用され得る支持物理コンピュータ・インフラストラクチャを含み得る。ブロックチェーン層216は、プログラム・コードを処理し物理インフラストラクチャ214に関与するのに必要な仮想実行環境へのアクセスを提供するインターフェースを公開し得る。暗号による信頼性サービス218は、資産交換トランザクションなどのトランザクションを確認し、情報を秘密状態に保つために使用され得る。
【0041】
図2Aのブロックチェーン・アーキテクチャ構成は、ブロックチェーン・プラットフォーム212によって公開された1つまたは複数のインターフェースおよび提供されるサービスを介して、プログラム/アプリケーション・コード220を処理および実行し得る。コード220は、ブロックチェーン資産を制御し得る。例えば、コード220は、データを記憶および移転してもよく、スマート・コントラクトの形態でノード204~210によって実行されてもよく、その実行の影響を受ける条件または他のコード要素とチェーンコードを関連付けられてもよい。非限定的な例として、スマート・コントラクトは、リマインダ、更新、または変更、更新などの影響を受ける他の通知、あるいはそれらの組み合わせを実行するために生成され得る。スマート・コントラクト自体は、認可およびアクセス要件、ならびに台帳の使用に関する規則を識別するために使用され得る。例えば、読み取りセット226は、ブロックチェーン層216に含まれる1つまたは複数の処理エンティティ(例えば、仮想機械)によって処理され得る。書き込みセット228は、キー値に対する変更を含み得る。物理インフラストラクチャ214は、本明細書で説明されるデータまたは情報のいずれかを取り出すために使用され得る。
【0042】
チェーンコード内で、スマート・コントラクトは、高レベル・アプリケーションおよびプログラミング言語によって生成されてもよく、その後ブロックチェーン内のブロックに書き込まれてもよい。スマート・コントラクトは、ブロックチェーン(例えば、ブロックチェーン・ピアの分散型ネットワーク)を用いて、登録、記憶、または複製、あるいはそれらの組み合わせが行われる実行可能コードを含み得る。トランザクションは、スマート・コントラクトに関連付けられた条件が満たされていることに応答して実行され得るスマート・コントラクト・コードの実行である。スマート・コントラクトの実行は、デジタル・ブロックチェーン台帳の状態に対する信頼性のある修正をトリガし得る。スマート・コントラクト実行により生じるブロックチェーン台帳に対する修正は、1つまたは複数のコンセンサス・プロトコルを通してブロックチェーン・ピアの分散型ネットワーク全体で自動的に複製され得る。
【0043】
スマート・コントラクトは、キー値ペアのフォーマットでブロックチェーンにデータを書き込み得る。さらに、スマート・コントラクト・コードは、ブロックチェーンに記憶された値を読み出し、アプリケーション動作においてそれらを使用し得る。スマート・コントラクト・コードは、様々な論理演算の出力をブロックチェーン内に書き込み得る。コードは、仮想機械または他のコンピューティング・プラットフォームにおいて一時的なデータ構造を生成するために使用され得る。ブロックチェーンに書き込まれたデータは、公開であってもよく、または秘密として暗号化され維持されてもよく、あるいはその両方であってもよい。スマート・コントラクトによって使用され/生成される一時データは、供給される実行環境によってメモリ内に保持され、次いでブロックチェーンに必要なデータが識別された時点で削除される。
【0044】
チェーンコードは、追加の特徴を用いて、スマート・コントラクトのコード解釈を含み得る。本明細書で説明されるように、チェーンコードは、コンピューティング・ネットワーク上に展開されるプログラム・コードであってもよく、そこで、チェーンコードは、コンセンサス・プロセス中にチェーン・バリデータによって共に実行され検証される。チェーンコードは、ハッシュを受信し、以前記憶された特徴抽出器の使用により生成されるデータ・テンプレートに関連付けられたハッシュをブロックチェーンから取り出す。ハッシュ識別子のハッシュと記憶された識別子テンプレート・データから生成されるハッシュとが合致する場合、チェーンコードは、要求されたサービスに認可キーを送信する。チェーンコードは、暗号の詳細に関連付けられたブロックチェーン・データに書き込み得る。
【0045】
図2Bは、例としての実施形態による、ブロックチェーンのノード間のトランザクション・フロー250の例を示す。
図2Bを参照すると、トランザクション・フローは、アプリケーション・クライアント・ノード260によってエンドーシング・ピア・ノード281に送信されたトランザクション提案291を含み得る。エンドーシング・ピア281は、クライアント署名を確認し、トランザクションを開始するためにチェーンコード関数を実行し得る。出力は、チェーンコード結果、チェーンコードにおいて読み出されたキー/値バージョンのセット(読み取りセット)、およびチェーンコードに書き込まれたキー/値のセット(書き込みセット)を含み得る。提案応答292は、承認された場合に、エンドースメント署名と共にクライアント260に返送される。クライアント260は、トランザクション・ペイロード293内にエンドースメントを集め、順序付けサービス・ノード284にそれをブロードキャストする。順序付けサービス・ノード284は、次いで、チャネル上の全てのピア281~283に順序付けされたトランザクションをブロックとして送出する。ブロックチェーンへの引き渡しの前に、各ピア281~283は、トランザクションを検証し得る。例えば、ピアは、指定されたピアの正しい割り当てが結果に署名し、トランザクション・ペイロード293に対して署名を認証したことを保証するために、エンドースメント・ポリシーをチェックし得る。
【0046】
クライアント・ノード260は、ピア・ノード281への要求を構成し送信することによって、トランザクション291を開始し得る。ピア・ノード281は、エンドーサである。1つより多くのエンドーサが存在してもよいが、ここでは便宜上示されているのは1つである。クライアント260は、NODE、JAVA(R)、PYTHONなどのサポートされたソフトウェア開発キット(SDK)を活用するアプリケーションを含んでもよく、SDKは、利用可能なAPIを使用してトランザクション提案を生成する。トランザクション提案291は、データが読み出され得るか、または台帳に書き込まれ得る(即ち、資産についての新たなキー値ペアを書き込む)か、あるいはその両方が行われ得るように、チェーンコード関数を呼び出すための要求である。SDKは、トランザクション提案を適切に設計されたフォーマット(例えば、リモート・プロシージャ・コール(RPC)上のプロトコル・バッファ)をパッケージ化し、クライアントの暗号による信用証明書を取ってトランザクション提案についての一意の署名を作り出すためのシム(shim)の役割をし得る。
【0047】
これに応答して、エンドーシング・ピア・ノード281は、(a)トランザクション提案がうまく形成されること、(b)トランザクションが過去に既にサブミットされていないこと(リプレイ・アタック防御)、(c)署名が有効であること、(d)サブミッタ(例でのクライアント260)が、提案された動作をそのチャネル上で実行することを適切に認可されていること、および(e)元のタイムスタンプが有効であることを確認してもよく、そうでなければタイムスタンプが正しくなるように修正してもよい。エンドーシング・ピア・ノード281は、呼び出されたチェーンコード関数への引数としてトランザクション提案入力を取り得る。チェーンコードは、次いで、応答値、読み取りセット、および書き込みセットを含むトランザクション結果を作り出すために現在の状態データベースに対して実行される。しかしながら、この時点では台帳に更新は行われない。292において、値のセットは、エンドーシング・ピア・ノード281の署名と共に、消費するアプリケーションについてのペイロードを解析するクライアント260のSDKに提案応答292として返される。
【0048】
これに応答して、クライアント260のアプリケーションは、エンドーシング・ピアの署名を検査/検証し、提案応答が同一であるかどうかを判断するために提案応答を比較する。チェーンコードが台帳に照会のみをした場合、アプリケーションは、クエリ応答を検査し、典型的には順序付けノード・サービス284にトランザクションをサブミットしない。クライアント・アプリケーションが、台帳を更新するために順序付けノード・サービス284にトランザクションをサブミットすることを意図する場合、指定されたエンドースメント・ポリシーがサブミットの前に満たされている(即ち、トランザクションに必要な全てのピア・ノードがトランザクションをエンドースした)かどうかを、アプリケーションが判断する。ここで、クライアントは、トランザクションに対する複数の当事者のうちの1つだけを含み得る。この場合、各クライアントが、それ自体のエンドーシング・ノードを有してもよく、各エンドーシング・ノードが、トランザクションをエンドースする必要がある。アーキテクチャは、アプリケーションが応答を検査しないように選択するか、またはエンドースされていないトランザクションを転送するとしても、エンドースメント・ポリシーが、依然としてピアによって施行され、コミット検証段階において支持されるようにする。
【0049】
検査成功後、ステップ293において、クライアント260は、エンドースメントをトランザクション内に集め、トランザクション・メッセージ内のトランザクション提案および応答を順序付けノード284にブロードキャストする。トランザクションは、読み取り/書き込みセット、エンドーシング・ピアの署名、およびチャネルIDだけでなく、本明細書で説明されるタイムスタンプ情報および評判情報を含み得る。順序付けノード284は、その動作を実行するためにトランザクションの内容全体を検査する必要はなく、その代わりに、順序付けノード284は、ネットワーク内の全てのチャネルからトランザクションを単に受信し、トランザクション毎に最終タイムスタンプを判断し、チャネルによって暗号によりそれらを時系列で順序付けし、チャネル毎にトランザクションのブロックを生成し得る。
【0050】
トランザクションのブロックは、順序付けノード284からチャネル上の全てのピア・ノード281~283に送出される。ブロック内のトランザクション294は、任意のエンドースメント・ポリシーが満たされていることを保証するため、および読み取りセットがトランザクション実行によって生成された以降読み取りセット変数についての台帳状態に変更がなかったことを保証するために検証される。ブロック内のトランザクションは、有効または無効であるとしてタグ付けされる。さらに、ステップ295において、各ピア・ノード281~283は、ブロックをチャネルのチェーンに付加し、有効トランザクション毎に、書き込みセットが、現在の状態データベースにコミットされる。トランザクション(呼び出し)が、チェーンに不変的に付加されていることをクライアント・アプリケーションに通知するため、およびトランザクションが有効化されたかまたは無効化されたかを通知するために、イベントが発行される。
【0051】
図3は、許可型ブロックチェーン・ネットワーク300の例を示す。許可型ブロックチェーン・ネットワーク300は、分散型で、非集中型ピアツーピア・アーキテクチャ、ならびにユーザの役割および許可を管理する証明書権限318を特徴とする。この例では、ブロックチェーン・ユーザ302は、許可型ブロックチェーン・ネットワーク310にトランザクションをサブミットし得る。この例では、トランザクションは、展開、呼び出し、または照会であってもよく、SDKを活用するクライアント側アプリケーションを通して、REST APIを通して直接、などにより発行されてもよい。信頼性のあるビジネス・ネットワークは、監査役(例えば、米国株式市場における証券取引委員会)などの規定者システム314へのアクセスを提供し得る。一方、ノードのブロックチェーン・ネットワーク事業者システム308は、規定者システム314を「監査役」として、ブロックチェーン・ユーザ302を「クライアント」として登録するなど、メンバ許可を管理する。監査役は、台帳を照会することのみに制限されてもよく、クライアントは、ある種類のチェーンコードを展開し、呼び出し、および照会することを認可されてもよい。
【0052】
ブロックチェーン開発者システム316は、チェーンコードおよびクライアント側アプリケーションを書き込む。ブロックチェーン開発者システム316は、RESTインターフェースを通してネットワークに直接チェーンコードを展開し得る。従来のデータ・ソース330からの信用証明書をチェーンコードに含めるために、開発者システム316は、帯域外接続を使用して、データにアクセスし得る。この例では、ブロックチェーン・ユーザ302は、ピア・ノード312を通してネットワークに接続する。任意のトランザクションを続行する前に、ピア・ノード312は、証明書権限318からユーザの役割およびトランザクション証明書を取り出す。いくつかの場合において、ブロックチェーン・ユーザは、許可型ブロックチェーン・ネットワーク310上で取引するために、これらのデジタル証明書を所有しなければならない。一方、チェーンコードを駆動しようとするユーザは、従来のデータ・ソース330上で彼らの信用証明書を確認することを必要とされ得る。ユーザの認可を確かめるために、チェーンコードは、従来の処理プラットフォーム320を通してこのデータへの帯域外接続を使用し得る。
【0053】
図4Aは、例としての実施形態による、エンドーシング・ピア・ノードがタイムスタンプを修正するプロセス400Aを示す。
図4Aを参照すると、クライアント・ピア・ノードA410は、ピア・ノードB420およびピア・ノードC430によるエンドースメントのためにクライアントからトランザクションをサブミットする。これに応答して、各エンドーシング・ピア(例えば、ピア・ノードB420およびピア・ノードC430など)は、以下のステップを実行して、トランザクション提案tx
iをエンドースすることを試み得る。例えば、各ピアは、他の手段(例えば、ICMPなど)を用いることによって、それぞれのピアとピア・ノードA410との間のネットワーク・レイテンシ(即ち、L
a-pj)を測定し得る。エンドーシング・ピアがトランザクション提案tx
iを受信した時に、各ピアは、タイムスタンプr
jiを記録し得る。次いで、クライアント・ピア・ノードA410とそれ自体との間の推定されるネットワーク・レイテンシとしてr
ji-a
iを計算する。ここで、推定されたネットワーク・レイテンシが、事前に測定されたネットワーク・レイテンシよりも大きく、かつその差が許容誤差より大きい(即ち、r
ji-a
i-L
a-pj>err)場合、それぞれのエンドーシング・ピアは、ピア・ノードA410が改ざんしたタイムスタンプをトランザクション上に付加していると判断し得る。それに応じて、エンドーシング・ピアは、422および432において、提案された新たなタイムスタンプに基づいてタイムスタンプを訂正または修正してもよく、または424および434において、それをエンドースするかエンドースしないかのいずれかによって、トランザクション提案を拒絶するかどうかを判断してもよく、あるいは、その両方であってもよい。
【0054】
図4Aの例において、エンドーシング・ピア・ノードB420およびエンドーシング・ピア・ノードC430は、424および434それぞれにおいて、トランザクションをエンドースするようにそれぞれ判断する。トランザクションをエンドースする前に、エンドーシング・ピアは、提案された、または修正されたタイムスタンプを判断し得る。修正されたタイムスタンプを判断するために、エンドーシング・ピアは、エンドースメント要求が受信された時に生成されるそれ自体のタイムスタンプからネットワーク・レイテンシを引いたもの(即ち、p
ji=r
ji-L
a-pj)に基づいて、ピア・ノードAにおけるtx
iの正しいタイムスタンプを推定し得る。チェーンコードを実行した後、ピアは、推定されたタイムスタンプ(p
ji)をエンドースメントに添付し、エンドースメントをクライアント・ノードA410に転送し得る。
【0055】
様々な実施形態によれば、各エンドーサは、各エンドーサがクライアント・アプリケーションのタイムスタンプの正確性を評価し得る(評価することを目指す)ように、クライアント・アプリケーションのトランザクションを、トランザクションが生成されたピア・ノードから直接受信するため、各エンドーサは、ネットワーク・レイテンシを考慮してもよい。したがって、正確にするためには、クライアント・アプリケーションとエンドーシング・ピアとの間のネットワーク・レイテンシを考慮することが必要である。一方、あるピアが不公平であり、いくつかのクライアント・アプリケーションのトランザクションを遅延させようとすることがある。オーダラ(
図4Cに示される)は、エンドーシング・ピアの評判を考慮することによって、そのような状況を回避しようと試みている。いくつかの実施形態において、ネットワーク・レイテンシは、エンドーシング・ピア自体によって判断され得る。例えば、エンドーシング・ピアとネットワークの他のピア・ノードとの間のネットワーク・レイテンシを、ICMPプロトコル(即ち、ping)を用いること、およびそれをインメモリ・ストアまたはファイルなどに記憶することによって、定期的に測定する、新たなネットワーク・レイテンシ・モニタ・スレッドが実施され得る。
【0056】
いくつかの実施形態において、各エンドーシング・ピアは、タイムスタンプの偏差のための閾値を定義し得る。非限定的な仮想例として、閾値は、10秒であってもよい。この例では、エンドーシング・ピアは、(i)タイムスタンプの偏差が10秒よりも大きい場合にエンドースメントを拒絶してもよく、(ii)そうでない場合、タイムスタンプを修正してもよい。実際には(i)は、任意選択であってもよく、ピアは、常にタイムスタンプを修正してもよい。しかし、ピアが(i)のための選択肢を有する理由は、クライアント・アプリケーションが改ざんされたタイムスタンプを付加しており、不公平な挙動をしているとピアが判断する時であってもよい。
【0057】
図4Bは、例としての実施形態による、クライアント・ノードA410が評判値を生成するプロセス400Bを示し、
図4Cは、例としての実施形態による、順序付けノードが最終タイムスタンプを判断するプロセス400Cを示す。この例では、エンドーシング・ノードB420およびエンドーシング・ノードC430の両方が、クライアント・ノードA410によってサブミットされたトランザクションを、それぞれのノードにおいて計算された修正済みタイムスタンプを用いてエンドースする。これに応答して、クライアント・ノードA410は、修正済みタイムスタンプを識別し、エンドーシング・ノードのそれぞれについての評判値を生成し得る。例えば、クライアント・ノードA410は、エンドースメントにおけるエンドーシング・ピアの推定されたタイムスタンプ(p
ji)と、アプリケーションのタイムスタンプ(a
i)とが異なり、それらの差(p
ji-a
i)が、閾値より大きいと判断し得る。この場合、クライアント・ノードA410は、エンドーシング・ピア420および430についての否定的な評判412および414を生成し、トランザクションに添付し得る。同様に、クライアント・ノードA410は、エンドースメントが誤って拒絶される時に、ピアの否定的な評判を添付し得る。
【0058】
ピアA、B、およびCを含むブロックチェーン・ネットワークのエンドースメント・ポリシーは、各トランザクションをコミットするために必要とされるエンドースメントの数を定義する。したがって、クライアント・ノードA410が、いかなる拒絶するエンドーシング・ピアを除外しても十分なエンドースメントを受信する場合、クライアント・ノードA410は、
図4Cに示されるように、トランザクションを順序付けノード440にやはりサブミットし得る。次いで、順序付けノード440は、タイムスタンプに基づいてトランザクションを順序付けし、順序付けされたトランザクションを用いてデータ・ブロックを生成し得る。さらに、順序付けノード440は、分散型台帳上に記憶するために、順序付けされたトランザクションを有するブロックを各ピア(A、B、およびCなど)に送出し得る。次いで、各ピアは、各トランザクションが十分なエンドースメントを有するかどうかをエンドースメント・ポリシーに従ってチェックし、トランザクションを台帳にコミットする。
【0059】
図4Bを再び参照すると、クライアント・ノードA410は、それぞれのエンドーシング・ピアB420およびC430それぞれの評判を判断してもよく、最終タイムスタンプ442を判断するためにピアの評判を使用し得る順序付けノード440にそれを送信し得る。いくつかの実施形態では、ピア間で評判を共有するために、評判は、同一台帳を有する全てのピアに自動的に伝播される台帳データに記憶され得る。
【0060】
クライアント・ノードA410は、txi上のクライアント・ノードA410のタイムスタンプ(ai)と、ピア・ノードB420およびピア・ノードC430などのエンドーシング・ピアのタイムスタンプとの差を比較することによって、各ピアの評判を決定し得る。クライアント・ノードA410は、タイムスタンプの差が全てのピアの平均よりも大きい時に、より低い評判をピアに割り当て得る。この例では、平均を計算する時に、クライアント・ノードA410は、クライアント・ノードA410のタイムスタンプと比較されるタイムスタンプの差が許容誤差より大きいピアを無視し得る。
【0061】
以下は、クライアント・ノードA410によって評判を計算するための例としてのステップである(これは、単なる1つの例であり、他の手法も可能である)。
repjをピアjの評判とし、0と1との間の数によって表される(即ち、1が最高である)。errを許容誤差とする。ピアpj(j=1...k)によるtxi上のタイムスタンプの平均としてpi-aveを取得する。ただし、(pji-ai)>errである全てのpjiを除去した後である。pj(j=1...k)の標準偏差としてsを取得する。ただし、(pji-ai)>errである全てのpjiを除去した後である。repj=1-(pji-pi-ave)/sであり、repi<0の場合、repi=0である。
【0062】
図4Cは、例としての実施形態による、順序付けノード440が最終タイムスタンプ442を判断すること、およびグループ444の中のトランザクションについての修正済み最終タイムスタンプ値に基づいて、グループ444内にトランザクションを配置することのプロセス400Cを示す。
図4Cの例において、順序付けノード440は、tx
iに対しそれ自体のタイムスタンプo
iを判断し得る。この例では、順序付けノード440は、クライアント・ノードA410のタイムスタンプa
iおよびエンドーシング・ピアのタイムスタンプ(p
1i、p
2i、...)の加重平均としてそのタイムスタンプo
iを計算してもよく、重みは、各ピアの評判から判断される。トランザクション毎のピア
jの評判(rep
j)および累積された評判(REP
j)を含む、複数種類の評判が存在し得る。順序付けノード440は、悪い評価を有するピアと同一の組織に属するクライアント・ノードから送信されたトランザクションにペナルティを与えてもよい。ペナルティは、アプリケーションのタイムスタンプに対する小さな重みとして与えられ得る。
【0063】
オーダラは、順序付けを行ってもよく、またはoiに従ってトランザクションを配置してもよい(より小さなoiを有するトランザクションほどキュー内のより早い位置に置かれる)。この例では、順序付けノード440は、クライアント・ノードA410によって提供された元のタイムスタンプと、順序付けノード440によって生成された最終タイムスタンプ442との間の差に基づいて、ブロック444に示されるように、トランザクションをその元の順序から離れて新たな修正済み順序に移動し得る。順序付けノード440は、アプリケーションおよびピアによるタイムスタンプの平均を計算することによって、タイムスタンプOiを取得し得る。オーダラは、また、重みとして各ピアの評判を使用してもよく、したがって、低い評価であるピアのタイムスタンプは、平均に与える影響が少ない。以下は、タイムスタンプOiを計算するための例としてのステップである(これは、単なる1つの例であり、他の手法も可能である)。pi-aveをピアpj(j=1...k)によるtxi上のタイムスタンプの平均として取得する。niをtxiにエンドースメントを提供したピアの数とする。Oi=pi-ave+(Σk
j=1(pji-pi-ave)*repi
*REPi)/niである。
【0064】
図5Aは、例としての実施形態による、タイムスタンプに基づいてブロックチェーン・トランザクションをエンドースする方法510を示す。例えば、方法510は、ブロックチェーン・ネットワーク内のクライアント・アプリケーションによって実行され得る。
図5Aを参照すると、511において、方法は、ブロックチェーン要求をクライアント(クライアント・ピア・ノードまたはクライアント・ノードとも呼ばれる)から受信することを含み得る。例えば、ブロックチェーン要求は、ブロックチェーン・ネットワーク内の1つまたは複数のピア・ノードによってエンドースされるべきトランザクションを含み得る。512において、方法は、クライアント・アプリケーション(またはクライアント・アプリケーションをホストするシステム)とエンドーシング・ノードとの間のネットワーク経路に基づいて、トランザクションをサブミットしたクライアント・アプリケーションと、方法を実行するエンドーシング・ノードとの間のネットワーク・レイテンシを判断することを含み得る。ここで、ネットワーク・レイテンシは、エンドーシング・ノードとブロックチェーン・ネットワーク内の他のピア・ノードとの間のネットワーク・レイテンシを周期的またはランダムに測定し、かつエンドーシング・ピア・ノードのメモリ内に維持されるテーブルまたはファイル内にレイテンシ値を記憶する、エンドーシング・ピア・ノード上で動作するモニタリング・スレッドによって測定され得る。
【0065】
513において、方法は、ブロックチェーン要求からタイムスタンプを抽出することを含み得る。例えば、タイムスタンプは、ブロックチェーン・メッセージのヘッダまたはデータ・セクション内に含まれてもよく、エンドースメントのためのトランザクションをサブミットしたピア・ノードによって、メッセージに追加されてもよい。514において、方法は、クライアント・アプリケーションとエンドーシング・ノードとの間のネットワーク・レイテンシに基づいて、抽出されたタイムスタンプが無効であるかどうかを判断することを含み得る。さらに、515において、方法は、タイムスタンプが有効であると判断することに応答して、ブロックチェーン要求についてのエンドースメントを生成すること、およびエンドースメントをクライアント・アプリケーションに送信することを含み得る。いくつかの実施形態では、タイムスタンプが無効であると判断することに応答して、方法は、ブロックチェーン要求をエンドースすることを拒否することをさらに含み得る。いくつかの実施形態では、方法は、ブロックチェーン要求をシミュレートすることと、タイムスタンプが有効と判断されること、およびブロックチェーン要求のシミュレーションに成功していることに応答して、エンドースメントを生成することと、をさらに含み得る。
【0066】
様々な実施形態によれば、抽出されたタイムスタンプが無効であるかどうかを判断することは、ネットワーク・レイテンシに基づいてブロックチェーン要求についてのタイムスタンプを推定することと、抽出されたタイムスタンプが、推定されたタイムスタンプの事前定義された閾値の範囲内にあるかどうかを判断することと、を含み得る。いくつかの実施形態では、抽出されたタイムスタンプが無効であるかどうかを判断することは、抽出されたタイムスタンプが早すぎるかどうかを判断することを含み得る。
【0067】
図5Bは、例としての実施形態による、ブロックチェーン・トランザクションのタイムスタンプを修正する方法520を示す。例えば、方法520は、ブロックチェーン・ネットワーク内のエンドーシング・ピア・ノードによって実行され得る。
図5Bを参照すると、521において、方法は、クライアント・システム上でホストされるクライアント・アプリケーションからブロックチェーン要求を受信することを含み得る。例えば、ブロックチェーン要求は、クライアント・ノードとも呼ばれる別のピア・ノードによってサブミットされたトランザクションを含み得る。522において、方法は、ブロックチェーン要求からタイムスタンプを抽出することを含み得る。ここで、タイムスタンプは、トランザクションをエンドーシング・ピア・ノードにサブミットしたクライアント・アプリケーションによってトランザクションに追加され得る。
【0068】
523において、方法は、クライアント・アプリケーションによって、クライアント・アプリケーションとエンドーシング・ノードとの間で判断されるネットワーク・レイテンシに基づいて、抽出されたタイムスタンプが誤りであるか否かを判断することを含み得る。さらに、抽出されたタイムスタンプが誤りであるとの判断に応答して、524において、方法は、ブロックチェーン要求についての正しいタイムスタンプを判断することと、抽出されたタイムスタンプを正しいタイムスタンプと置換することによってブロックチェーン要求を修正することと、正しいタイムスタンプを有するブロックチェーン要求をクライアント・アプリケーションに送信することと、を含み得る。いくつかの実施形態では、方法は、ピア・ノードとエンドーシング・ノードとの間のネットワーク経路に基づいて、クライアント・アプリケーションとエンドーシング・ノードとの間のネットワーク・レイテンシを判断することをさらに含み得る。いくつかの実施形態によれば、抽出されたタイムスタンプが誤りであるかどうかを判断することは、ネットワーク・レイテンシに基づいてブロックチェーン要求についてのタイムスタンプを推定することと、抽出されたタイムスタンプが、推定されたタイムスタンプの事前定義された閾値の範囲内にあるかどうかを判断することと、を含み得る。いくつかの実施形態において、修正することは、抽出されたタイムスタンプを推定されたタイムスタンプと置換することを含み得る。いくつかの実施形態では、方法は、抽出されたタイムスタンプが誤りであるかどうかを判断することが、抽出されたタイムスタンプが早すぎるかどうかを判断することを含むことを含み得る。
【0069】
図5Cは、例としての実施形態による、有効性情報に基づいてトランザクションの元のタイムスタンプを修正する方法530を示す。例えば、方法530は、ブロックチェーン・ネットワークの順序付けノードによって実行され得る。
図5Cを参照すると、531において、方法は、ブロックチェーン要求をブロックチェーン・ネットワーク内のクライアント・アプリケーションから受信することを含み得る。例えば、要求は、クライアント・ノードによってサブミットされ、1つまたは複数の他のエンドーシング・ノードによってエンドースされたトランザクションを含み得る。532において、方法は、ブロックチェーン要求に含まれるタイムスタンプの有効性情報を、ブロックチェーン・ネットワーク内の1つまたは複数のエンドーシング・ノードから受信することを含み得る。例えば、有効性情報は、1つまたは複数のエンドーシング・ピア・ノードによって提案される、ブロックチェーン要求についての異なる提案タイムスタンプを含み得る。いくつかの実施形態では、有効性情報は、提案タイムスタンプに重みを与えて使用するための、エンドーシング・ピア・ノードについての評判情報も含み得る。
【0070】
533において、方法は、1つまたは複数のエンドーシング・ノードから受信した有効性情報に基づいて、ブロックチェーン要求に含まれるタイムスタンプを修正することを含み得る。修正は、トランザクションをブロックチェーン・ネットワークにサブミットしたクライアント・アプリケーションによって、トランザクションに追加された元のタイムスタンプとは異なる、トランザクションについての最終タイムスタンプ値を生成することを含み得る。例えば、修正することは、タイムスタンプが時間的に早すぎると有効性情報が示していることに応答して、ブロックチェーン要求に含まれるタイムスタンプに、追加時間を加えることを含み得る。
【0071】
534において、方法は、グループ内の他のブロックチェーン要求のタイムスタンプに対して、修正済みタイムスタンプに基づいて、ブロックチェーン要求のグループ内でブロックチェーン要求を順序付けすることを含み得る。例えば、ブロックチェーン・トランザクションは、タイムスタンプ値に基づいて、他のトランザクションを有するキュー内で順序付けされてもよく、またはキュー内に挿入されてもよい。ここで、修正済みタイムスタンプは、元のタイムスタンプと比較して、ブロックチェーン・トランザクションがキュー内に挿入され、配置され、または順序付けされる位置を変更してもよい。キューは、ブロックチェーンのデータ・ブロックに記憶されるべきブロックチェーン・トランザクションのグループを記憶するために使用され得る。535において、方法は、データ・ブロックのハッシュ・リンク付きチェーンのうちのデータ・ブロック内に、ブロックチェーン要求の順序付けされたグループを記憶することを含み得る。いくつかの実施形態では、方法は、ブロックチェーンにおいて記憶するためにデータ・ブロックをピア・ノードおよび1つまたは複数の他のピア・ノードに送信することをさらに含み得る。
【0072】
図5Dは、例としての実施形態による、タイムスタンプの加重平均に基づいてトランザクションについての最終タイムスタンプを判断する方法540を示す。例えば、方法540は、ブロックチェーン・ネットワークの順序付けノードによって実行され得る。
図5Dを参照すると、541において、方法は、ブロックチェーン要求(例えば、トランザクション、ストレージ要求など)の複数のエンドースメントを、ブロックチェーン・ネットワークの複数のエンドーシング・ノードから受信することを含み得る。様々な実施形態によれば、複数のエンドースメントは、複数のエンドーシング・ノードによってブロックチェーン要求のために提案された異なるタイムスタンプを含み得る。例えば、各エンドースメントは、トランザクションがクライアント・ピア・ノード上のクライアント・アプリケーションによって生成された時点をエンドーシング・ピア・ノードが示すことによって、提案タイムスタンプを含み得る。
【0073】
542において、方法は、複数のエンドーシング・ノードの前のタイムスタンプ情報に基づいて、複数のエンドーシング・ノードによって与えられる異なるタイムスタンプに重みを適用することを含み得る。重みは、他のエンドーシング・ノードによって判断される、ブロックチェーン・ネットワーク内のエンドーシング・ノードの精度に基づいて判断され得る。いくつかの実施形態では、複数のピア・ノードのうちの各エンドーシング・ノードは、前のタイムスタンプの精度に基づく精度値を含み得る。方法は、543において、複数のピア・ノードの加重タイムスタンプに基づいて、ブロックチェーン要求についての最終タイムスタンプを判断することと、544において、最終判断されたタイムスタンプに基づいて、データ・ブロック内にブロックチェーン要求を配置することと、を含み得る。いくつかの実施形態において、配置することは、キュー内のブロックチェーン要求のタイムスタンプに対して、最終判断されたタイムスタンプに基づいてブロックチェーン要求の順序付けされたキュー内にブロックチェーン要求を挿入することを含み得る。いくつかの実施形態では、方法は、データ・ブロックのハッシュ・リンク付きチェーン内にブロックチェーン要求を含むデータ・ブロックを記憶することをさらに含み得る。
【0074】
図5Eは、例としての実施形態による、ピア・ノードについての評判値を判断する方法550を示す。例えば、方法550は、ブロックチェーン・ネットワークにトランザクションをサブミットするクライアント・アプリケーション(クライアント・ノード)、クライアント・デバイスなどによって実行され得る。
図5Eを参照すると、551において、方法は、ブロックチェーン・ネットワーク内に含まれる1つまたは複数のエンドーシング・ノードによって追加されたタイムスタンプを含むブロックチェーン要求を受信することを含み得る。ここで、タイムスタンプは、少なくとも1つのエンドーシング・ピア・ノードによってブロックチェーン要求に追加されるタイムスタンプであってもよい。タイムスタンプは、クライアント・ノードがトランザクションを生成した、提案される時間であってもよい。552において、方法は、1つまたは複数のエンドーシング・ノードのうちの1つのエンドーシング・ノードによって追加されたタイムスタンプが、クライアント・アプリケーションによって提供される、前に追加されたタイムスタンプに対する修正であることを識別することを含み得る。即ち、クライアント・アプリケーションは、エンドーシング・ノードが、クライアント・アプリケーションによって元々追加されたタイムスタンプを変更していると判断し得る。
【0075】
553において、方法は、エンドーシング・ノードによって追加されたタイムスタンプと、コンピューティング・ノードによって提供された、前に追加されたタイムスタンプとの間の差に基づいて、エンドーシング・ノードについての評判値を判断することを含み得る。いくつかの実施形態では、評判値は、エンドーシング・ノードによって追加されたタイムスタンプを含む、前のブロックチェーン要求から判断された評判値の累積に基づいて判断され得る。554において、方法は、エンドーシング・ノードの判断された評判値を、ブロックチェーン・ネットワーク内の順序付けノードに送信することをさらに含み得る。いくつかの実施形態では、方法は、前に追加されたタイムスタンプとピア・ノードによって追加されたタイムスタンプとの間の時間差に基づいて、エンドーシング・ノードによって追加されたタイムスタンプがあまりに多くの遅延を有すると判断することをさらに含み得る。
【0076】
いくつかの実施形態では、553において判断することが、エンドーシング・ノードによって追加されたタイムスタンプと前に追加されたタイムスタンプとの差が、ブロックチェーン・ネットワーク上の複数のエンドーシング・ノードの中からの平均差より大きいことに応答して、より低い評判値をエンドーシング・ノードに割り当てることを含み得る。別の例として、553において判断することが、エンドーシング・ノードによって追加されたタイムスタンプと前に追加されたタイムスタンプとの差が、ブロックチェーン・ネットワーク上の複数のエンドーシング・ノードの中からの平均差より小さいことに応答して、より高い評判値をエンドーシング・ノードに割り当てることを含み得る。いくつかの実施形態では、方法は、エンドーシング・ノードによって追加されたタイムスタンプを無視することと、前に追加されたタイムスタンプと共にブロックチェーン要求を順序付けノードにサブミットすることと、をさらに含む。
【0077】
図5Fは、例としての実施形態による、加重評判に基づいて最終値を判断する方法560を示す。例えば、方法560は、ブロックチェーン・トランザクションおよびブロックチェーン・トランザクションのエンドースメントを受信し、ブロックチェーン上のデータ・ブロックに記憶するためにトランザクションを順序付けする、ブロックチェーン・ネットワークの順序付けノードによって実行され得る。
図5Fを参照すると、561において、方法は、ブロックチェーンについてのブロックチェーン要求を受信することを含み得る。ストレージ要求は、ブロックチェーン・ネットワークの複数のエンドーシング・ノードによって提案された複数の異なる値(例えば、タイムスタンプ、金融、意見、医療診断など)を含むトランザクションを含み得る。ここで、各エンドーシング・ピア・ノードは、サブミット側(クライアント)ノードによって追加された元の値とは異なる、トランザクションに適用されるべき値を提案し得る。例えば、異なるタイムスタンプは、ストレージ要求がクライアントによってブロックチェーン・ネットワークにサブミットされた、推定時間を表し得る。しかしながら、値は、タイムスタンプに限定されない。
【0078】
562において、方法は、複数のエンドーシング・ノードのそれぞれの評判に基づいて、異なる値の加重組み合わせを用いてブロックチェーン要求についての最終値を判断することを含み得る。例えば、判断することは、高い評判を有するエンドーシング・ノードによって提案された値ほど高い重みを適用することと、低い評判を有する異なるエンドーシング・ノードによって提案された異なる値ほど低い重みを適用することと、を含み得る。563において、方法は、判断された最終値に基づいてブロックチェーン要求のグループ内でブロックチェーン要求を順序付けすることを含み得る。564において、方法は、データ・ブロックのハッシュ・リンク付きチェーンのうちのデータ・ブロック内に、ストレージ要求の順序付けされたグループを記憶することを含み得る。
【0079】
図6Aは、例としての実施形態による動作の例としての方法の1つまたは複数に従って、ブロックチェーン上の様々な動作を実行するように構成される例としての物理インフラストラクチャを示す。
図6Aを参照すると、例としての構成600Aは、ブロックチェーン620およびスマート・コントラクト630を有する物理インフラストラクチャ610を含み、スマート・コントラクト630は、例としての実施形態のうちのいずれかに含まれる動作ステップ612のいずれかを実行し得る。ステップ/動作612は、1つまたは複数のフロー図またはロジック図あるいはその両方において説明され、または示されるステップのうちの1つまたは複数を含み得る。ステップは、コンピュータ・システム構成の物理インフラストラクチャ610上に存在する、1つまたは複数のスマート・コントラクト630またはブロックチェーン620あるいはその両方に書き込まれ、または読み出される、出力または書き込み情報を表し得る。データは、実行されたスマート・コントラクト630またはブロックチェーン620あるいはその両方から出力され得る。物理インフラストラクチャ610は、1つまたは複数のコンピュータ、サーバ、プロセッサ、メモリ、または無線通信デバイス、あるいはそれらの組み合わせを含み得る。いくつかの実施形態では、チェーンコードとも呼ばれるスマート・コントラクト630は、ブロックチェーン・リソース情報をブロックチェーン通知ボードから取り出すために実行され得る。
【0080】
図6Bは、例としての実施形態による、ブロックチェーン上でスマート・コントラクト条件を施行するように構成される契約当事者と仲介サーバとの間の例としてのスマート・コントラクト構成を示す。
図6Bを参照すると、構成650Bは、1つまたは複数のユーザ・デバイス652または656あるいはその両方を明示的に識別するスマート・コントラクト630によって駆動される、通信セッション、資産移転セッション、またはプロセスもしくは手続きを表し得る。実行、動作、およびスマート・コントラクト実行の結果が、サーバ654によって管理され得る。スマート・コントラクト630の内容は、スマート・コントラクト・トランザクションに対する当事者であるエンティティ652および656のうちの1つまたは複数によるデジタル署名を必要とし得る。スマート・コントラクト実行の結果は、ブロックチェーン・トランザクションとしてブロックチェーンに書き込まれ得る。
【0081】
図6Cは、例としての実施形態による、ブロックチェーン上でスマート・コントラクト条件を施行するように構成される契約当事者と仲介サーバとの間の例としてのスマート・コントラクト構成を示す。
図6Cを参照すると、構成650は、1つまたは複数のユーザ・デバイス652または656あるいはその両方を明示的に識別するスマート・コントラクト630によって駆動される、通信セッション、資産移転セッション、またはプロセスもしくは手続きを表し得る。実行、動作、およびスマート・コントラクト実行の結果が、サーバ654によって管理され得る。スマート・コントラクト630の内容は、スマート・コントラクト・トランザクションに対する当事者であるエンティティ652および656のうちの1つまたは複数によるデジタル署名を必要とし得る。スマート・コントラクト実行の結果は、ブロックチェーン・トランザクションとしてブロックチェーン620に書き込まれ得る。スマート・コントラクト630は、1つまたは複数のコンピュータ、サーバ、プロセッサ、メモリ、または無線通信デバイス、あるいはそれらの組み合わせの上に存在し得る、ブロックチェーン620上に存在する。
【0082】
図6Dは、例としての実施形態による、ブロックチェーンのロジックおよびデータにアクセスするための共通インターフェースを示す。
図6Dの例を参照すると、アプリケーション・プログラミング・インターフェース(API)・ゲートウェイ662は、ブロックチェーン・ロジック(例えば、スマート・コントラクト630または他のチェーンコード)およびデータ(例えば、分散型台帳など)にアクセスするための共通インターフェースを提供する。この例では、APIゲートウェイ662は、1つまたは複数のエンティティ652および656をブロックチェーン・ピア(即ち、サーバ654)に接続することによって、ブロックチェーン上でトランザクション(呼び出し、照会など)を実行するための共通インターフェースである。サーバ654は、ワールド・ステートのコピーおよび分散型台帳を保持するブロックチェーン・ネットワーク・ピア・コンポーネントであり、クライアント652および656がワールド・ステートについてのデータを照会すること、ならびにスマート・コントラクト630およびエンドースメント・ポリシーに依存して、エンドーシング・ピアがスマート・コントラクト630を実行するブロックチェーン・ネットワーク内にトランザクションをサブミットすることを可能にする。
【0083】
図7Aは、例としての実施形態による、新たなブロック730が分散型台帳720に追加されるプロセス700を示し、
図7Bは、例としての実施形態による、ブロックチェーンのためのブロック構造730のコンテンツを示す。
図7Aを参照すると、クライアント(図示せず)は、トランザクションをブロックチェーン・ノード711、712、または713、あるいはそれらの組み合わせにサブミットし得る。クライアントは、ブロックチェーン上のアクティビティを規定するための、任意のソースから受信される命令であってもよい。例として、クライアントは、ブロックチェーンについてのトランザクションを提案するためのデバイス、人、またはエンティティなどの要求者の代理として動作する(SDKに基づく)アプリケーションであってもよい。複数のブロックチェーン・ピア(例えば、ブロックチェーン・ノード711、712、および713)は、ブロックチェーン・ネットワークの状態および分散型台帳720のコピーを維持し得る。
【0084】
異なる種類のブロックチェーン・ノード/ピアは、クライアントによって提案されるトランザクションをシミュレートし、エンドースするエンドーシング・ピアと、エンドースメントを確認し、トランザクションを検証し、トランザクションを分散型台帳720にコミットするコミッティング・ピアと、を含むブロックチェーン・ネットワーク内に存在し得る。この例では、ブロックチェーン・ノード711、712、および713は、エンドーサ・ノード、コミッタ・ノード、またはその両方の役割を実行し得る。
【0085】
分散型台帳720は、不変性のシーケンス型レコードをブロックに記憶するブロックチェーン722と、ブロックチェーン722の現在の状態(キー値)を維持する状態データベース724(現在のワールド・ステート)と、を含む。1つの分散型台帳720は、チャネル毎に存在してもよく、各ピアは、それらがメンバであるチャネル毎に分散型台帳720のそれ自体のコピーを維持する。ブロックチェーン722は、トランザクション・ログであり、各ブロックがN個のトランザクションのシーケンスを含むハッシュ・リンク付きブロックとして構築される。ブロック(例えば、ブロック730)は、
図7Bに示されるような様々なコンポーネントを含み得る。ブロックのリンク付け(
図7Aにおいて矢印で示される)は、前のブロックのヘッダのハッシュを現在のブロックのブロック・ヘッダ内に追加することによって生成され得る。このようにして、ブロックチェーン722上の全てのトランザクションが、シーケンス化され、暗号によって共にリンク付けされて、ハッシュ・リンクを壊すことなくブロックチェーン・データを改変することを防止する。さらに、リンクにより、ブロックチェーン722内の最後のブロックが、それより前に来たあらゆるトランザクションを表す。ブロックチェーン722は、追加専用ブロックチェーンの作業負荷をサポートする、ピア・ファイル・システム(ローカルまたは取り付けストレージ)上に記憶され得る。
【0086】
ブロックチェーン722の現在の状態および分散型台帳720は、状態データベース724に記憶され得る。ここで、現在の状態データは、ブロックチェーン722のチェーン・トランザクション・ログにこれまで含まれている全てのキーについての最新の値を表す。チェーンコード呼び出しは、状態データベース724内の現在の状態に対してトランザクションを実行する。これらのチェーンコードの相互作用を極めて効率的にするために、全てのキーの最新の値が、状態データベース724内に記憶され得る。状態データベース724は、ブロックチェーン722のトランザクション・ログへのインデックス付きビューを含んでもよく、したがって、いかなる時でもチェーンから再生成され得る。状態データベース724は、トランザクションが受け取られる前に、ピアの起動時に自動的に回復され得る(または必要であれば生成され得る)。
【0087】
エンドーシング・ノードは、トランザクションをクライアントから受信し、シミュレートされた結果に基づいてトランザクションをエンドースする。エンドーシング・ノードは、トランザクション提案をシミュレートするスマート・コントラクトを保持している。トランザクションをエンドースするために必要なノードは、チェーンコード内で指定され得るエンドースメント・ポリシーに依存している。エンドースメント・ポリシーの例は、「エンドーシング・ピアの過半数が、トランザクションをエンドースしなければならない」である。異なるチャネルが、異なるエンドースメント・ポリシーを有し得る。エンドースされたトランザクションは、クライアント・アプリケーションによって順序付けサービス710に転送される。
【0088】
順序付けサービス710は、エンドースされたトランザクションを受け取り、それらをブロック内に順序付けし、ブロックをコミッティング・ピアに送出する。例えば、順序付けサービス710は、トランザクションの閾値に到達した時、タイマがタイムアウトした時、または別の条件で、新たなブロックを開始し得る。順序付けサービス710は、ブロックチェーン・ノード711~713などからのタイムスタンプの加重平均に基づいて、トランザクション毎の最終タイムスタンプを計算するなど、本明細書で説明されるタイムスタンプ協定プロセスに基づいて動作し得る。
図7Aの例において、ブロックチェーン・ノード712は、ブロックチェーン722上に記憶するために新たなデータ・ブロック730を受信したコミッティング・ピアである。
【0089】
順序付けサービス710は、オーダラのクラスタからできていてもよい。順序付けサービス710は、トランザクション、スマート・コントラクトを処理せず、または共有台帳を維持しない。むしろ、順序付けサービス710は、エンドースされたトランザクションを受け取り、トランザクションについての最終タイムスタンプを判断し得、それらのトランザクションが最終タイムスタンプに基づいて分散型台帳720にコミットされる順序を指定する。ブロックチェーン・ネットワークのアーキテクチャは、「順序付け」の特定の実施(例えば、Solo、Kafka、BFTなど)が、プラグ可能コンポーネントになるように、設計され得る。
【0090】
トランザクションは、一貫性のある順序で分散型台帳720に書き込まれる。トランザクションの順序は、それらがネットワークにコミットされる時に状態データベース724への更新が有効であることを保証するように確立される。順序付けが暗号パズルを解くことまたはマイニングを通して発生する、暗号通貨ブロックチェーン・システム(例えば、ビットコインなど)とは異なり、この例では、分散型台帳720の当事者は、時系列順序付けなどのそのネットワークに最適な順序付けメカニズムを選択し得る。
【0091】
順序付けサービス710が新たなブロック730を初期化する時、新たなブロック730は、コミッティング・ピア(例えば、ブロックチェーン・ノード711、712、および713)にブロードキャストされ得る。これに応じて、各コミッティング・ピアは、読み取りセットおよび書き込みセットが依然として状態データベース724内の現在のワールド・ステートに合致することを確認するためにチェックすることによって、新たなブロック730内のトランザクションを検証する。具体的には、コミッティング・ピアは、エンドーサがトランザクションをシミュレートした時に存在した読み取りデータが、状態データベース724内の現在のワールド・ステートに一致するかどうかを判断し得る。コミッティング・ピアがトランザクションを検証する時、トランザクションは、分散型台帳720上のブロックチェーン722に書き込まれ、状態データベース724は、読み取り-書き込みセットから書き込みデータを用いて更新される。トランザクションが失敗する場合、即ち、読み取り-書き込みセットが状態データベース724内の現在のワールド・ステートに合致しないことをコミッティング・ピアが見出す場合、ブロック内に順序付けされたトランザクションは、依然としてそのブロックに含まれるが、それは無効としてマークされ、状態データベース724は更新されない。
【0092】
図7Bを参照すると、分散型台帳720のブロックチェーン722上に記憶されるブロック730(データ・ブロックとも呼ばれる)は、ブロック・ヘッダ732、ブロック・データ734、およびブロック・メタデータ736などの複数のデータ・セグメントを含み得る。
図7Bに示されるブロック730およびそのコンテンツなどの、様々な図示されるブロックおよびそのコンテンツは、単に例示のためであり、例としての実施形態の範囲を制限することを意味しないと理解されるべきである。いくつかの場合、ブロック・ヘッダ732およびブロック・メタデータ736の両方が、トランザクション・データを記憶するブロック・データ734よりも小さくてもよいが、これは必要要件ではない。ブロック730は、N個のトランザクション(例えば、100、500、1000、2000、3000など)のトランザクション情報をブロック・データ734内に記憶し得る。様々な実施形態によれば、各トランザクションは、順序付けノード710によって追加されるブロック・データ734内に最終タイムスタンプ情報735を含み得る。最終タイムスタンプ情報735は、サブミット側ノードによって提供される元のタイムスタンプ値と異なっても(または元のタイムスタンプ値の修正であっても)よい。
【0093】
ブロック730は、また、ブロック・ヘッダ732内に前のブロック(例えば、
図7Aにおけるブロックチェーン722上に)へのリンクを含み得る。特に、ブロック・ヘッダ732は、前のブロックのヘッダのハッシュを含み得る。ブロック・ヘッダ732は、一意のブロック数、現在のブロック730のブロック・データ734のハッシュなども含み得る。ブロック730のブロック数は、一意であってもよく、0から始まる増加する/連続する順序において割り当てられてもよい。ブロックチェーン内の第1のブロックは、ブロックチェーンについての情報、そのメンバ、その中に記憶されたデータなどを含むジェネシス・ブロックと呼ばれ得る。
【0094】
ブロック・データ734は、ブロック730内に記憶される各トランザクションのトランザクション情報を記憶し得る。例えば、ブロック・データ734内に記憶されたトランザクション・データは、トランザクションの種類、バージョン、タイムスタンプ(例えば最終計算されたタイムスタンプなど)、分散型台帳720のチャネルID、トランザクションID、エポック、ペイロード可視性、チェーンコード・パス(txを展開)、チェーンコード名、チェーンコード・バージョン、入力(チェーンコードおよび関数)、公開鍵および証明書などのクライアント(クリエータ)識別、クライアントの署名、エンドーサの識別、エンドーサの署名、提案ハッシュ、チェーンコード・イベント、応答状態、名前空間、読み取りセット(キーのリストおよびトランザクションにより読み出されるバージョンなど)、書き込みセット(キーおよび値のリストなど)、開始キー、終了キー、キーのリスト、マークル木の照会サマリなどのうちの1つまたは複数を含み得る。トランザクション・データは、N個のトランザクションのそれぞれについて記憶され得る。
【0095】
様々な実施形態によれば、ブロック730のブロック・データ734のセクションは、最終タイムスタンプ情報735内のブロックチェーン・トランザクションのタイムスタンプに対する修正、更新、削除、追加、または他の変更についての情報を記憶し得る。したがって、トランザクションのタイムスタンプ情報に対する修正は、ブロックチェーン(即ち、ブロックのハッシュ・リンク付きチェーン)内に記憶され得る。
【0096】
ブロック・メタデータ736は、メタデータの複数フィールドを(例えば、バイト・アレイなどとして)記憶し得る。メタデータ・フィールドは、ブロック生成についての署名、最後の構成ブロックに対する参照、ブロック内の有効および無効トランザクションを識別するトランザクション・フィルタ、ブロックを順序付けした順序付けサービスの持続される最後のオフセットなどを含み得る。署名、最後の構成ブロック、およびオーダラ・メタデータは、順序付けサービス710によって追加され得る。一方、ブロックのコミッティング・ノード(ブロックチェーン・ノード712など)は、エンドースメント・ポリシー、読み取り/書き込みセットの検証などに基づいて有効性/無効性情報を追加し得る。トランザクション・フィルタは、ブロック・データ734内のトランザクションの数に等しいサイズのバイト・アレイ、およびトランザクションが有効/無効のいずれであったかを識別する検証コードを含み得る。
【0097】
上記実施形態は、ハードウェアにおいて、プロセッサにより実行されるコンピュータ・プログラムにおいて、ファームウェアにおいて、または上記の組み合わせにおいて実施され得る。コンピュータ・プログラムは、記憶媒体などのコンピュータ可読媒体上で具現化され得る。例えば、コンピュータ・プログラムは、ランダム・アクセス・メモリ(「RAM」)、フラッシュ・メモリ、読み出し専用メモリ(「ROM」)、消去可能プログラマブル読み出し専用メモリ(「EPROM」)、電気的消去可能プログラマブル読み出し専用メモリ(「EEPROM」)、レジスタ、ハード・ディスク、リムーバブル・ディスク、コンパクト・ディスク読み出し専用メモリ(「CD-ROM」)、または当技術分野において既知の任意の他の形式の記憶媒体に存在し得る。
【0098】
プロセッサが記憶媒体から情報を読み出し、かつ情報を書き込み得るように、例示的記憶媒体は、プロセッサに連結され得る。代替的には、記憶媒体が、プロセッサと一体であってもよい。プロセッサおよび記憶媒体は、特定用途向け集積回路(「ASIC」)に存在してもよい。代替的には、プロセッサおよび記憶媒体は、個別のコンポーネントとして存在してもよい。例えば、
図8は、例としてのコンピュータ・システム・アーキテクチャ800を示し、それは、上述したコンポーネントのうちのいずれかを表してもよく、または上述したコンポーネントのうちのいずれかにおいて一体化されてもよい、などである。
【0099】
図8は、本明細書で説明されるアプリケーションの実施形態の使用または機能性の範囲に関するいかなる限定も示唆することを意図しない。それにかかわらず、コンピューティング・ノード800は、実施されること、または上述した機能性のいずれかを実行すること、あるいはその両方が可能である。例えば、コンピューティング・ノード800は、
図5A~5Fに関して示され説明される方法510~560のうちのいずれかを実行し得る。
【0100】
コンピューティング・ノード800において、コンピュータ・システム/サーバ802が存在し、コンピュータ・システム/サーバ802は、多数の他の汎用または専用コンピューティング・システム環境または構成を用いて動作可能である。コンピュータ・システム/サーバ802を用いた使用に適当であり得る周知のコンピューティング・システム、環境、または構成、あるいはそれらの組み合わせの例は、パーソナル・コンピュータ・システム、サーバ・コンピュータ・システム、シン・クライアント、シック・クライアント、手持ち式またはラップトップ・デバイス、マルチプロセッサ・システム、マイクロプロセッサベース・システム、セット・トップ・ボックス、プログラマブル家電、ネットワークPC、ミニコンピュータ・システム、メインフレーム・コンピュータ・システム、および上記システムまたはデバイスのいずれかを含む分散型クラウド・コンピューティング環境などを含むが、これらに限定されない。
【0101】
コンピュータ・システム/サーバ802は、コンピュータ・システムによって実行されている、プログラム・モジュールなどのコンピュータ・システム実行可能命令の一般的状況において説明され得る。概して、プログラム・モジュールは、特定のタスクを実行し、または特定の抽象データ型を実施する、ルーチン、プログラム、オブジェクト、コンポーネント、ロジック、データ構造などを含み得る。コンピュータ・システム/サーバ802は、通信ネットワークを通してリンクされたリモート処理デバイスによってタスクが実行される、分散型クラウド・コンピューティング環境において実施され得る。分散型クラウド・コンピューティング環境では、プログラム・モジュールが、メモリ・ストレージ・デバイスを含むローカルおよびリモート両方のコンピュータ・システム記憶媒体に位置し得る。
【0102】
図8に示されるように、クラウド・コンピューティング・ノード800内のコンピュータ・システム/サーバ802は、汎用コンピューティング・デバイスの形態で示される。コンピュータ・システム/サーバ802のコンポーネントは、1つまたは複数のプロセッサまたは処理ユニット804、システム・メモリ806、およびシステム・メモリ806を含む様々なシステム・コンポーネントをプロセッサ804に連結するバスを含み得るが、これらに限定されない。
【0103】
バスは、メモリ・バスまたはメモリ・コントローラ、周辺バス、高速グラフィック・ポート、および多様なバス・アーキテクチャのいずれかを使用するプロセッサまたはローカル・バスを含む、複数種類のバス構造のいずれかの1つまたは複数を表す。限定ではなく例として、そのようなアーキテクチャは、インダストリ・スタンダード・アーキテクチャ(ISA)・バス、マイクロ・チャネル・アーキテクチャ(MCA)・バス、拡張ISA(EISA)バス、ビデオ・エレクトロニクス・スタンダーズ・アソシエーション(VESA)・ローカル・バス、およびペリフェラル・コンポーネント・インターコネクト(PCI)・バスを含む。
【0104】
コンピュータ・システム/サーバ802は、典型的には多様なコンピュータ・システム可読媒体を含む。このような媒体は、コンピュータ・システム/サーバ802によってアクセス可能な任意の利用可能な媒体であってもよく、それは、揮発性媒体および不揮発性媒体の両方、リムーバブル媒体および非リムーバブル媒体の両方を含む。一実施形態において、システム・メモリ806は、他の図面のフロー図を実施する。システム・メモリ806は、コンピュータ・システム可読媒体を、ランダム・アクセス・メモリ(RAM)810またはキャッシュ・メモリ812あるいはその両方などの揮発性メモリの形態で含み得る。コンピュータ・システム/サーバ802は、他のリムーバブル/非リムーバブル、揮発性/不揮発性コンピュータ・システム記憶媒体をさらに含み得る。単なる例として、ストレージ・システム814は、非リムーバブル不揮発性磁気媒体(図示せず、かつ典型的には「ハード・ドライブ」と呼ばれる)から読み出し、かつ書き込むために提供され得る。図示されないが、リムーバブル不揮発性磁気ディスク(例えば、「フロッピー(R)・ディスク」)からの読み出しおよび書き込みのための磁気ディスク・ドライブ、ならびにCD-ROM、DVD-ROM、または他の光学媒体などのリムーバブル不揮発性光ディスクからの読み出しまたは書き込みのための光学ディスク・ドライブが、提供され得る。このような場合、それぞれが、1つまたは複数のデータ媒体インターフェースによってバスに接続され得る。以下でさらに示され、説明されるように、メモリ806は、本出願の様々な実施形態の機能を実行するように構成されるプログラム・モジュールのセット(例えば、少なくとも1つ)を有する少なくとも1つのプログラム製品を含み得る。
【0105】
プログラム・モジュール818のセット(少なくとも1つ)を有するプログラム/ユーティリティ816は、限定ではなく例として、オペレーティング・システム、1つまたは複数のアプリケーション・プログラム、他のプログラム・モジュール、およびプログラム・データと同様に、メモリ806に記憶され得る。オペレーティング・システム、1つもしくは複数のアプリケーション・プログラム、他のプログラム・モジュール、およびプログラム・データのそれぞれ、またはそれらの何らかの組み合わせは、ネットワーキング環境の実施を含み得る。プログラム・モジュール818は、概して、本明細書に説明されるような、本出願の様々な実施形態の機能または方法論あるいはその両方を実行する。
【0106】
当業者によって理解されるように、本出願の態様は、システム、方法、またはコンピュータ・プログラム製品として具現化されてもよい。したがって、本出願の態様は、完全なハードウェア実施形態、完全なソフトウェア実施形態(ファームウェア、常駐ソフトウェア、マイクロコードなどを含む)、または本明細書で「回路」、「モジュール」、もしくは「システム」と全て概して呼ばれ得るソフトウェアおよびハードウェア態様を組み合わせた実施形態の形態を取ってもよい。さらに、本出願の態様は、その上で具現化されるコンピュータ可読プログラム・コードを有する、1つまたは複数のコンピュータ可読媒体において具現化されるコンピュータ・プログラム製品の形態を取ってもよい。
【0107】
コンピュータ・システム/サーバ802は、また、キーボード、ポインティング・デバイス、ディスプレイ822などの1つもしくは複数の外部デバイス820、ユーザがコンピュータ・システム/サーバ802と対話することを可能にする1つもしくは複数のデバイス、またはコンピュータ・システム/サーバ802が1つもしくは複数の他のコンピューティング・デバイスと通信することを可能にする任意のデバイス(例えば、ネットワーク・カード、モデムなど)、あるいはそれらの組み合わせと通信し得る。このような通信は、I/Oインターフェース824を介して発生し得る。さらに、コンピュータ・システム/サーバ802は、ローカル・エリア・ネットワーク(LAN)、汎用ワイド・エリア・ネットワーク(WAN)、または公衆ネットワーク(例えば、インターネット)、あるいはそれらの組み合わせなどの1つまたは複数のネットワークと、ネットワーク・アダプタ826を介して通信し得る。図示されるように、ネットワーク・アダプタ826は、バスを介してコンピュータ・システム/サーバ802の他のコンポーネントと通信する。図示されないが、他のハードウェア・コンポーネントまたはソフトウェア・コンポーネント、あるいはその両方が、コンピュータ・システム/サーバ802と併せて使用され得ると理解されるべきである。例は、マイクロコード、デバイス・ドライバ、冗長処理ユニット、外部ディスク・ドライブ・アレイ、RAIDシステム、テープ・ドライブ、およびデータ・アーカイブ・ストレージ・システムなどを含むが、これらに限定されない。
【0108】
システム、方法、および非一過性コンピュータ可読媒体の少なくとも1つの例示的実施形態は、添付図面に示され、前述の詳細な説明に記載されているが、本出願は、開示される実施形態に限定されず、以下の特許請求の範囲によって明記され定義されるように、多数の再配列、修正、および代用が可能であると、理解されたい。例えば、様々な図面のシステムのケイパビリティは、本明細書に説明されるモジュールもしくはコンポーネントのうちの1つもしくは複数によって、または分散型アーキテクチャにおいて実行されてもよく、送信機、受信機、またはその両方の対を含んでもよい。例えば、個々のモジュールによって実行される機能性の全てまたは一部が、これらのモジュールのうちの1つまたは複数によって実行され得る。さらに、本明細書に説明される機能性は、様々な時に、かつ様々なイベントに関連して、モジュールまたはコンポーネントの内部または外部で実行され得る。また、様々なモジュール間で送信される情報は、データ・ネットワーク、インターネット、音声ネットワーク、インターネット・プロトコル・ネットワーク、無線デバイス、有線デバイスのうちの少なくとも1つを介して、または複数のプロトコルを介して、あるいはその両方を介して、モジュール間で送信され得る。また、モジュールのいずれかによって送信または受信されるメッセージは、直接、または他のモジュールの1つもしくは複数を介して、あるいはその両方で、送信または受信され得る。
【0109】
「システム」は、パーソナル・コンピュータ、サーバ、コンソール、携帯情報端末(PDA)、携帯電話、タブレット・コンピューティング・デバイス、スマートフォン、または任意の他の適当なコンピューティング・デバイス、あるいはデバイスの組み合わせとして具現化され得ると、当業者は理解するであろう。「システム」によって実行される上述の機能を提示することは、いかなる方法でも本出願の範囲を限定することを意図しておらず、多くの実施形態のうちの一例を提供することを意図している。実際に、本明細書において開示された方法、システム、および装置は、コンピューティング技術と一貫した局所型および分散型形態で実施され得る。
【0110】
本明細書において説明されたシステム特徴のうちのいくつかが、より詳細にはそれらの実施の独立性を強調するために、モジュールとして提示されていることに留意すべきである。例えば、モジュールは、カスタム超大規模集積(VLSI)回路またはゲート・アレイ、論理チップなどのオフザシェルフ半導体、トランジスタ、または他の個別のコンポーネントを含むハードウェア回路として実施され得る。モジュールは、また、フィールド・プログラマブル・ゲート・アレイ、プログラマブル・アレイ・ロジック、プログラマブル論理デバイス、グラフィック処理ユニットなどのプログラマブル・ハードウェア・デバイスにおいて実施され得る。
【0111】
モジュールは、また、様々な種類のプロセッサによる実行のためにソフトウェアにおいて少なくとも部分的に実施され得る。例えば、実行可能コードの識別されるユニットは、例えば、オブジェクト、手続き、または関数として編成され得るコンピュータ命令の1つまたは複数の物理または論理ブロックを含み得る。それにもかかわらず、識別されるモジュールの実行可能ファイルは、物理的に共に位置されなくともよいが、論理的に接合される時に、モジュールを含み、モジュールについての述べられた目的を達成する、異なる場所に記憶された別個の命令を含んでもよい。さらに、モジュールは、コンピュータ可読媒体上に記憶されてもよく、コンピュータ可読媒体は、例えば、ハード・ディスク・ドライブ、フラッシュ・デバイス、ランダム・アクセス・メモリ(RAM)、テープ、またはデータを記憶するために使用される任意の他のそのような媒体であってもよい。
【0112】
実際に、実行可能コードのモジュールは、単一の命令または多数の命令であってもよく、複数の異なるコード・セグメントにわたって、異なるプログラムの間に、かつ複数のメモリ・デバイスにわたって分散されてもよい。同様に、動作データはモジュール内において本明細書に識別され、例示されてもよく、任意の適当な形態で具現化され、任意の適当な種類のデータ構造内に編成されてもよい。動作データは、単一のデータ・セットとして収集されてもよく、または異なるストレージ・デバイスを含む異なる場所にわたって分散されてもよく、かつ単にシステムまたはネットワーク上の電子信号として少なくとも部分的に存在してもよい。
【0113】
本出願のコンポーネントは、本明細書において概して説明され図面に示されるように、多種多様な異なる構成において配置され設計され得ると、容易に理解されるであろう。したがって、実施形態の詳細な説明は、特許請求される本出願の範囲を限定することを意図しておらず、単に本出願の選択された実施形態を表している。
【0114】
上記は、異なる順序のステップで実施されてもよく、または開示されたものとは異なる構成におけるハードウェア要素で実施されてもよく、あるいはその両方であってもよいと、当業者は容易に理解するであろう。したがって、本出願は、これらの好適な実施形態に基づいて説明されているが、ある修正、変形、および代替的な構造が明らかであることが、当業者には明らかであろう。
【0115】
本出願の好適な実施形態が説明されているが、説明された実施形態が単なる例示であり、本出願の範囲は、均等物およびそれに対する修正(例えば、プロトコル、ハードウェア・デバイス、ソフトウェア・プラットフォームなど)の全範囲と共に考慮される時に、添付の特許請求の範囲のみによって定義されるものと理解されるべきである。