(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2023-12-19
(54)【発明の名称】相互参照を用いてブロック・テンプレートをストリーミングする方法及びシステム
(51)【国際特許分類】
H04L 9/32 20060101AFI20231212BHJP
【FI】
H04L9/32 200Z
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2023534142
(86)(22)【出願日】2021-11-24
(85)【翻訳文提出日】2023-08-03
(86)【国際出願番号】 EP2021082871
(87)【国際公開番号】W WO2022117418
(87)【国際公開日】2022-06-09
(32)【優先日】2020-12-04
(33)【優先権主張国・地域又は機関】GB
(81)【指定国・地域】
(71)【出願人】
【識別番号】318001991
【氏名又は名称】エヌチェーン ライセンシング アーゲー
(74)【代理人】
【識別番号】100107766
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【氏名又は名称】伊東 忠彦
(74)【代理人】
【識別番号】100135079
【氏名又は名称】宮崎 修
(72)【発明者】
【氏名】ランド,リッキー チャールズ
(72)【発明者】
【氏名】コグラン,スティーヴン パトリック
(57)【要約】
方法及びデバイスはブロックチェーン・ネットワークにおける第1のマイニング・ノードによりトランザクション識別子を圧縮する。方法は:トランザクション識別子の第1の順序付けられたリストを含む第1の候補ブロックを構築するステップ;第2のマイニング・ノードによりマイニングされる第2の候補ブロックにおけるトランザクション識別子の第2の順序付けられたリストを定めるデータを、第2のマイニング・ノードから受信するステップ;第1の順序付けられたリストにおける少なくとも1つのトランザクション識別子が第2の順序付けられたリストにもあると判断するステップ;トランザクション識別子の第1の順序付けられたリストを定めるデータを含むアペンド・メッセージを生成するステップであって、当該データは、トランザクション識別子の第2の順序付けられたリストにおける少なくとも1つのトランザクション識別子のインデックス位置を含むことによって、トランザクション識別子の第1の順序付けられたリストにおける少なくとも1つのトランザクション識別子を指定する、ステップ;及びアペンド・メッセージを第2のマイニング・ノードへ伝送するステップを含むことが可能である。
【特許請求の範囲】
【請求項1】
ブロックチェーン・ネットワークにおける第1のマイニング・ノードによりトランザクション識別子を圧縮するためのコンピュータが実行する方法であって、当該方法は:
トランザクション識別子の第1の順序付けられたリストを含む第1の候補ブロックを構築するステップ;
第2のマイニング・ノードによりマイニングされる第2の候補ブロックにおけるトランザクション識別子の第2の順序付けられたリストを定めるデータを、前記第2のマイニング・ノードから受信するステップ;
前記第1の順序付けられたリストにおける少なくとも1つのトランザクション識別子が前記第2の順序付けられたリストにもあると判断するステップ;
前記トランザクション識別子の第1の順序付けられたリストを定めるデータを含むアペンド・メッセージを生成するステップであって、当該データは、前記トランザクション識別子の第2の順序付けられたリストにおける前記少なくとも1つのトランザクション識別子のインデックス位置を含むことによって、前記トランザクション識別子の第1の順序付けられたリストにおける前記少なくとも1つのトランザクション識別子を指定する、ステップ;及び
前記アペンド・メッセージを前記第2のマイニング・ノードへ伝送するステップ;
を含む方法。
【請求項2】
請求項1に記載の方法において、前記生成するステップは、前記インデックス位置が、前記少なくとも1つのトランザクション識別子に対する圧縮されたトランザクション識別子よりもコンパクトであると判断するステップを含む、方法。
【請求項3】
請求項2に記載の方法において、前記インデックス位置はよりコンパクトであると判断するステップは、前記圧縮されたトランザクション識別子を生成するステップを含む、方法。
【請求項4】
請求項3に記載の方法において、前記第1のマイニング・ノードと前記第2のマイニング・ノードは、少なくとも2つの長さの圧縮されたトランザクション識別子を定めており、前記圧縮されたトランザクション識別子を生成するステップは、前記少なくとも1つのトランザクション識別子は、衝突に起因して、前記少なくとも2つの長さのうち長い方を必要とすると判断し、前記判断に基づいて、前記インデックス位置はよりコンパクトなものであると判断するステップを含む、方法。
【請求項5】
請求項1-4のうちの何れか一項に記載の方法において、更に:
第3のマイニング・ノードによりアクティブにマイニングされる第3の候補ブロックにおけるトランザクション識別子の第3の順序付けられたリストを定めるデータを、前記第3のマイニング・ノードから受信するステップ;
前記第1の順序付けられたリストにおけるトランザクション識別子のうちの1つが前記第3の順序付けられたリストにもあると判断するステップ;及び
前記第3の順序付けられたリストに対するリファレンス、前記トランザクション識別子の第3の順序付けられたリストにおける前記トランザクション識別子のうちの1つのインデックス位置を含むことによって、前記アペンド・メッセージにおいて前記トランザクション識別子のうちの1つを指定するステップ;
を含む方法。
【請求項6】
請求項5に記載の方法において、前記指定するステップは、前記第2のマイニング・ノードが前記第3の順序付けられたリストを記憶していることを先ず判断するステップを含む、方法。
【請求項7】
請求項6に記載の方法において、前記第2のマイニング・ノードに記憶されているリストを指定するデータを、前記第2のマイニング・ノードから受信するステップを更に含み、前記リストを指定するデータは前記第3の順序付けられたリストに対するリファレンスを含む、方法。
【請求項8】
請求項1-7のうちの何れか一項に記載の方法において、第2のアペンド・メッセージを前記第2のマイニング・ノードから受信するステップであって、前記第2のアペンド・メッセージはトランザクション識別子の別の順序付けられたリストを定めるデータを含んでいる、ステップと、前記データを分析して前記トランザクション識別子の別の順序付けられたリストを取得するステップと、前記トランザクション識別子の第2の順序付けられたリストに付加された前記トランザクション識別子の別の順序付けられたリストを記憶するステップとを更に含む、方法。
【請求項9】
請求項8に記載の方法において、前記データは前記トランザクション識別子の第1の順序付けられたリストにおけるトランザクション識別子に対するリファレンスを含む、方法。
【請求項10】
請求項9に記載の方法において、前記リファレンスは前記第1の順序付けられたリストのインデックス位置を含み、前記分析することは、前記第1の順序付けられたリストにおける前記インデックス位置にあるトランザクション識別子を取得することを含む、方法。
【請求項11】
請求項5-7のうちの何れか一項に記載の方法において、前記第2のマイニング・ノードから第2のアペンド・メッセージを受信するステップであって、前記第2のアペンド・メッセージはトランザクション識別子の別の順序付けられたリストを定めるデータを含む、ステップと、前記データを分析して前記トランザクション識別子の別の順序付けられたリストを取得するステップと、前記トランザクション識別子の第2の順序付けられたリストに付加された前記トランザクション識別子の別の順序付けられたリストを記憶するステップとを更に含み、前記データは前記トランザクション識別子の第3の順序付けられたリストにおけるトランザクション識別子に対するリファレンスを含んでいる、方法。
【請求項12】
請求項11に記載の方法において、前記リファレンスは、前記第3の順序付けられたリストに対するリファレンスと前記第3の順序付けられたリストにおけるインデックス位置とを含み、前記分析することは、前記第3の順序付けられたリストにおける前記インデックス位置にあるトランザクション識別子を取得することを含む、方法。
【請求項13】
請求項12に記載の方法において、前記トランザクション識別子の第3の順序付けられたリストを参照する初期メッセージを、前記第2のマイニング・ノードへ送信するステップを更に含む、方法。
【請求項14】
ブロックチェーン・ネットワークにおいてトランザクション識別子を圧縮するための演算デバイスであって、当該演算デバイスは:
1つ以上のプロセッサ;
メモリ;及び
前記メモリに記憶されたプロセッサ実行可能命令;
を含み、前記プロセッサ実行可能命令は、前記1つ以上のプロセッサにより実行されると、請求項1-13のうちの何れか一項に記載の方法を前記プロセッサに実行させる、演算デバイス。
【請求項15】
ブロックチェーン・ネットワークにおいてトランザクション識別子を圧縮するためのプロセッサ実行可能命令を記憶するコンピュータ読み取り可能な記憶媒体であって、前記プロセッサ実行可能命令は、1つ以上のプロセッサにより実行されると、請求項1-13のうちの何れか一項に記載の方法を前記プロセッサに実行させる、記憶媒体。
【発明の詳細な説明】
【技術分野】
【0001】
[0001] 本開示は、ブロックチェーン・ネットワークに関連し、特に、マイナー・ノード間でのブロックの伝搬速度を改善すること、及び/又はブロックを伝搬するために必要な帯域幅を低減することに関連する。
【背景技術】
【0002】
[0002] プルーフ・オブ・ワーク(proof-of-work)ブロックチェーン・システムにおいて、マイナーが有効なブロックを発見すると、その成功を他の全てのマイナーに迅速に伝達しようと試みる。これは、そのブロックに関する情報を、ブロックチェーン・ネットワークを介して、全てのマイニング・ノードへ伝搬することを含む。場合によっては、これは、完全なブロック・データを送ることを含む可能性がある。場合によっては、これは、ブロック・ヘッダ及びトランザクション・リスト情報を送信することを含む可能性がある。受信するマイナーは、ヘッダをハッシュし、それが成功したマイナーによって提供されたハッシュ値と一致することを確認することによって、新しいブロックを検証する。
【0003】
[0003] ブロックがサイズやトランザクション数において増加するにつれて、ブロック伝搬の遅延は、一時的なフォークやオーファン・ブロック(orphan blocks)の問題を悪化させる可能性がある。これらの状況は、マイナーにとって及びシステム全体にとってコストがかかる。
【0004】
[0004] ブロック・データによって消費される帯域幅を削減し、伝搬の速度を改善するための方法及びシステムを案出することは、ブロック・データを伝搬する際に有益であろう。
【図面の簡単な説明】
【0005】
[0005] 本件出願の例示的な実施形態を示す添付図面を例示として参照する。
【
図1】[0006]
図1は、ブロックチェーン・ネットワークの例示的なブロック構造を示す。
【
図2】[0007]
図2は、ストリーミング・ブロック・テンプレート・ネットワークの一例を図式的に示している。
【
図3】[0008]
図3は、トランザクションに関する圧縮識別子の例示的な構成を示している。
【
図4】[0009]
図4は、圧縮トランザクション識別子ストレージ・システムの一例を示す。
【
図5】[0010]
図5は、圧縮トランザクション識別子を生成する例示的な方法をフローチャート形式で示している。
【
図6】[0011]
図6は、第1のマイニング・ノードに記憶されたアペンド専用リスト(append-only-list)を更新する例示的な方法をフローチャート形式で示している。
【
図7】[0012]
図7は、圧縮トランザクション識別子を生成する別の例示的な方法をフローチャート形式で示している。
【
図8】[0013]
図8は、IDXリファレンスを使用する2つのマイニング・ノードを含む簡略化された例示的なシステムをブロック図形式で示している。
【
図9】[0014]
図9は、EIDXリファレンスを使用する3つのマイニング・ノードを含む別の簡略化された例示的なシステムをブロック図形式で示している。
【
図10】[0015]
図10は、例示的なマイニング・ノードをブロック図形式で示している。
【
図11】[0016]
図11は、例示的なマイニング・ノードの状況における候補ブロックの構築及び分配を示す。
【
図12】[0017]
図12は、マイニング・ノードのための候補ブロック更新及びストリーミング・ブロック・テンプレート通信の並列プロセスを図式的に示している。
【
図13】[0018]
図13は、マイニング・ノード内のトランザクション・プロセッサの1つの例示的な動作方法をフローチャート形式で示している。
【
図14】[0019]
図14は、マイニング・ノードによってブロック・テンプレートをストリーミングする1つの例示的な方法をフローチャート形式で示している。
【
図15】[0020]
図15は、ブロックチェーン・ノードの簡略化された例をブロック図形式で示している。 [0021] 図中、同様な参照番号は、同様な要素及び特徴を示すために使用されている。
【発明を実施するための形態】
【0006】
[0022] 一態様では、ブロックチェーン・ネットワークにおける第1のマイニング・ノードによりトランザクション識別子を圧縮するためのコンピュータが実行する方法を提供することが可能である。方法は:トランザクション識別子の第1の順序付けられたリストを含む第1の候補ブロックを構築するステップ;第2のマイニング・ノードによりマイニングされる第2の候補ブロックにおけるトランザクション識別子の第2の順序付けられたリストを定めるデータを、第2のマイニング・ノードから受信するステップ;第1の順序付けられたリストにおける少なくとも1つのトランザクション識別子が第2の順序付けられたリストにもあると判断するステップ;トランザクション識別子の第1の順序付けられたリストを定めるデータを含むアペンド・メッセージを生成するステップであって、当該データは、トランザクション識別子の第2の順序付けられたリストにおける少なくとも1つのトランザクション識別子のインデックス位置を含むことによって、トランザクション識別子の第1の順序付けられたリストにおける少なくとも1つのトランザクション識別子を指定する、ステップ;及びアペンド・メッセージを第2のマイニング・ノードへ伝送するステップを含むことが可能である。
【0007】
[0023] 別の実装では、生成するステップは、インデックス位置が、少なくとも1つのトランザクション識別子に対する圧縮されたトランザクション識別子よりもコンパクトであると判断するステップを含む。場合によっては、インデックス位置がよりコンパクトであると判断することは、圧縮されたトランザクション識別子を生成することを含む。場合によっては、第1のマイニング・ノードと第2のマイニング・ノードは、少なくとも2つの長さの圧縮されたトランザクション識別子を定めており、圧縮されたトランザクション識別子を生成するステップは、少なくとも1つのトランザクション識別子は、衝突(collision)に起因して、少なくとも2つの長さのうち長い方を必要とすると判断し、その判断に基づいて、インデックス位置はよりコンパクトなものであると判断するステップを含む。
【0008】
[0024] 一部の実装では、方法は更に:第3のマイニング・ノードによりアクティブにマイニングされる第3の候補ブロックにおけるトランザクション識別子の第3の順序付けられたリストを定めるデータを、第3のマイニング・ノードから受信するステップ;第1の順序付けられたリストにおけるトランザクション識別子のうちの1つが第3の順序付けられたリストにもあると判断するステップ;及び第3の順序付けられたリストに対するリファレンス、トランザクション識別子の第3の順序付けられたリストにおけるトランザクション識別子のうちの1つのインデックス位置を含むことによって、アペンド・メッセージにおいてトランザクション識別子のうちの1つを指定するステップを含むことが可能である。場合によっては、指定するステップは、第2のマイニング・ノードが第3の順序付けられたリストを記憶していることを先ず判断するステップを含む。場合によっては、本方法は、第2のマイニング・ノードに記憶されているリストを指定するデータを、第2のマイニング・ノードから受信するステップを更に含むことが可能であり、リストを指定するデータは第3の順序付けられたリストに対するリファレンスを含む。
【0009】
[0025] 一部の実装では、方法は更に、第2のアペンド・メッセージを第2のマイニング・ノードから受信するステップであって、第2のアペンド・メッセージはトランザクション識別子の別の順序付けられたリストを定めるデータを含んでいる、ステップと、データを分析してトランザクション識別子の別の順序付けられたリストを取得するステップと、トランザクション識別子の第2の順序付けられたリストに付加されたトランザクション識別子の別の順序付けられたリストを記憶するステップとを含むことが可能である。場合によっては、データはトランザクション識別子の第1の順序付けられたリストにおけるトランザクション識別子に対するリファレンスを含む。場合によっては、リファレンスは第1の順序付けられたリストのインデックス位置を含み、分析することは、第1の順序付けられたリストにおけるそのインデックス位置にあるトランザクション識別子を取得することを含む。
【0010】
[0026] 一部の実装では、方法は、第2のマイニング・ノードから第2のアペンド・メッセージを受信するステップであって、第2のアペンド・メッセージはトランザクション識別子の別の順序付けられたリストを定めるデータを含む、ステップと、データを分析してトランザクション識別子の別の順序付けられたリストを取得するステップと、トランザクション識別子の第2の順序付けられたリストに付加されたトランザクション識別子の別の順序付けられたリストを記憶するステップとを更に含むことが可能であり、データはトランザクション識別子の第3の順序付けられたリストにおけるトランザクション識別子に対するリファレンスを含んでいる。場合によっては、リファレンスは、第3の順序付けられたリストに対するリファレンスと第3の順序付けられたリストにおけるインデックス位置とを含み、分析することは、第3の順序付けられたリストにおけるインデックス位置にあるトランザクション識別子を取得することを含む。場合によっては、方法は、トランザクション識別子の第3の順序付けられたリストを参照する初期メッセージを、第2のマイニング・ノードへ送信するステップを更に含む。
【0011】
[0027] 別の態様では、ブロックチェーン・ネットワークにおいてトランザクション識別子を圧縮するための演算デバイスを提供することが可能である。演算デバイスは:1つ以上のプロセッサ;メモリ;及びメモリに記憶されたプロセッサ実行可能命令;を含むことが可能であり、プロセッサ実行可能命令は、1つ以上のプロセッサにより実行されると、本件で説明される1つ以上の方法をプロセッサに実行させる。
【0012】
[0028] 更に別の態様では、本件出願は、ブロックチェーン・ネットワークにおいてトランザクション識別子を圧縮するためのプロセッサ実行可能命令を記憶するコンピュータ読み取り可能な記憶媒体を提供し、プロセッサ実行可能命令は、1つ以上のプロセッサにより実行されると、本件で説明される1つ以上の方法をプロセッサに実行させる。
【0013】
[0029] 本開示の他の例示的な実施形態は、図面に関連する以下の詳細な説明を検討することによって当業者には明らかになるであろう。
【0014】
[0030] 本件出願において、「及び/又は」という用語は、列挙された要素の全ての可能なコンビネーション及びサブ・コンビネーションを網羅するように意図されており、列挙された要素単独の任意の1つ、任意のサブ・コンビネーション、又は要素の全てを含み、また、必ずしも追加の要素を除外してはいない。
【0015】
[0031] 本件出願では、「...又は...のうちの少なくとも1つ」という言い回しは、列挙された要素の任意の1つ以上を網羅するように意図されており、列挙された要素単独の任意の1つ、任意のサブ・コンビネーション、又は要素の全てを含み、また、必ずしも追加の要素を除外しておらず、必ずしも要素の全てを必須としてもいない。
【0016】
[0032] 本件出願は、ハッシュ演算を行うこと又はハッシュ関数に言及しており、これは多数の暗号学的ハッシュ関数のうちの任意の何れかを含むように意図されており、データ又は「メッセージ」の任意のセットに適用されると、一意の固定長の英数字列を決定論的に生成する。ハッシュ関数の結果は、ハッシュ値、フィンガープリント、ハッシュ結果、又は均等物と呼ばれる場合がある。具体例は、SHA-2,SHA-3,及びBLAKE2を含むが、これらに限定されない。ブロック又は候補ブロックをハッシュするマイナーに対する以下の何らかの参照は、暗号ハッシュ関数を、候補ブロックのヘッダ部分に適用することを意味するように理解されるであろう。使用されるハッシュ関数は、特定のハッシュ関数が指定されない限り、任意の適切なハッシュ関数であってもよい。
【0017】
[0033] 本件明細書において、「ブロックチェーン」という用語は、電子的な、コンピュータ・ベースの、分散された台帳の全ての形態を含むように理解される。これらは、コンセンサス・ベースのブロックチェーン及びトランザクション・チェーン技術を含み、また、許可された及び許可されない台帳、共有される台帳、そしてそれらの変形を含む。ブロックチェーン技術の最も広く知られているアプリケーションは、ビットコイン台帳であるが、他のブロックチェーン実装も提案され開発されている。ビットコインSVプロトコルによって例示されるようなビットコイン(Bitcoin)は、便宜上及び説明のために本件で言及される場合があるが、本発明は、ビットコイン・ブロックチェーンとともに使用することには限定されず、代替のブロックチェーン実装及びプロトコルも本発明の範囲内にあることに留意すべきである。
【0018】
[0034] ブロックチェーンは、ピア・ツー・ピアの電子台帳であって、ブロックから構成されるコンピュータ・ベースの非集中型・分散システムとして実装され、ブロックはトランザクションから構成される。各トランザクションは、ブロックチェーン・システムにおける参加者どうしの間のデジタル資産の支配権(control)の移転をエンコードするデータ構造であり、少なくとも1つのインプットと少なくとも1つのアウトプットとを含む。各ブロックは当該ブロックに先行するブロックのハッシュを含み、開始以来ブロックチェーンに書き込まれてきた全てのトランザクションの永続的で変更不可能な記録を作成するために、一緒にチェーン状にされている。トランザクションは、それらのインプット及びアウトプットに組み込まれたスクリプトとして知られる小さなプログラムを含み、プログラムは、トランザクションのアウトプットが誰によってどのようにアクセスされ得るかを指定する。ビットコイン・プラットフォームでは、これらのスクリプトは、スタック・ベースのスクリプト言語を使用して書かれている。
【0019】
[0035] ブロックチェーンは、ノードのネットワーク上で実装される。各ノードは、ネットワーク接続性を有し、適用可能なブロックチェーン・プロトコルを実行するソフトウェアを実行する演算デバイスである。ノードは、トランザクションを検証し、それらをネットワーク内の他のノードへ伝播させる。「マイニング・ノード」又は「マイナー」と呼ばれる特殊なネットワーク・ノードは、未確認のトランザクション、即ちペンディングのトランザクションのセットをブロックに集め、そのブロックを「採掘(mine)」することを試みる。これらの例では、マイニングは、ネットワーク内の何らかの他のマイナーが、それら各自のブロックについてプルーフ・オブ・ワークを解くことに成功する前に、プルーフ・オブ・ワーク(POW)を解くことを指す。ビットコインの例では、POWは、結果が、困難度パラメータによって設定された閾値を下回るまで、ノンス(nonce)を含むブロック・ヘッダをハッシュすることを含む。結果が閾値未満になるまで、又は、あるマイナーが別のマイナーが成功したという通知を受け取るまで、ノンスは反復してインクリメントされ、ハッシュ演算が反復される。マイニング・プロセスにおける変形例は当業者によく知られているであろう。
【0020】
[0036] 典型的なブロックは、ブロック・ヘッダ及びトランザクションという2つのデータ構造を含む。
図1は、ビットコイン・プロトコルからの例示的なブロック構造100を概略的に示す。ブロック構造100は、ブロック・ヘッダ102及びペイロード104を含む。この例におけるブロック・ヘッダ102は、バージョン番号106、前のブロック・ハッシュ値108、マークル・ルート(Merkle root)110、タイムスタンプ112、ターゲット困難度パラメータ114、及びノンス116のためのフィールドを含む。前のブロック・ハッシュ値108は、このブロックを、チェーン内の前のブロックに対してチェーン化し、それによって「ブロックチェーン」構造をもたらし、ブロックチェーン構造は暗号ハッシュにより、連続するブロックを互いにリンクする。マークル・ルート110は、ブロックに含まれる全てのトランザクションに基づくマークル・ツリー構造を指す。ノンス116は、マイニングの際に、異なるハッシュ結果を生成するために、マイニング・ノードがインクリメント又はデクリメントを繰り返して、ブロック・ヘッダ102の内容を変更することが可能な任意の値である。
【0021】
[0037] ペイロード104は、トランザクション・カウント値118及びトランザクションのリスト120を含む。トランザクションのリスト120は、一部の実装形態では、トランザクションID番号のリストであってもよい。
【0022】
[0038] マイニング・ノードが、閾値未満であるハッシュ結果を生成するブロック・ヘッダを発見することに成功した場合、マイニング・ノードは、成功したハッシュ結果値を含む更新されたインベントリ・メッセージを使用して、他のノードへ通知することに進む。次いで、他のノードは、新しいブロックのコピーを要求し、その有効性を独立して検証する。
【0023】
[0039] ブロックチェーン・エコシステム(blockchain ecosystem)は、トランザクション・ボリューム、そして結果としてブロック・サイズの大幅な増加を通じて、向上した有用性を提供するように成熟しつつある。ブロックが大きくなるにつれて、場合によっては128 MBを超過し、首尾良くマイニングされた新しいブロックを他のノードへネットワーク全体に伝搬させるには、時間がかかるようになる。伝搬の遅延はコストにふりかかる。第1に、首尾良くマイニングされたブロックが作成されていることに気付いていないマイナーは、彼ら自身の候補ブロックを採掘する試みを継続するであろうが、その新しいブロックが有効であると判明した場合には無駄な努力となってしまう。第2に、伝搬及び検証における遅延は、(一時的な)フォークやオーファン・ブロックの可能性の増加をもたらす可能性がある。
【0024】
[0040] 多くのブロックチェーン・プロトコルにおいて、マイナーはブロックの完全なコピーを送信せず、その代わりにハッシュ結果をインベントリ・メッセージで送信する、ということが理解されるであろう。受信側のマイニング・ノードは、彼らがその主張されている新しいブロックを見ていないと判断し、GETBLOCK又はGETDATAメッセージを、成功したマイナーに送信する。ブロックの完全なコピーを送信するのではなく、成功したマイナーは、ブロック・ヘッダ、ペイロードからのトランザクション・カウント・フィールド、及びブロックに含まれるトランザクションの順序付けられたリスト(ordered list)を送信する。順序付けられたリストは、トランザクションのための完全なトランザクションID番号(TxID)のセットを含むことが可能である。TxIDは、一部の実施形態では、トランザクションの固定長ハッシュであってもよい。TxIDは、例えば、SHA-256を使用してトランザクションをハッシュすることによって得られる256ビット(32バイト)の数であってもよい。受信ノードは、識別されたトランザクションを、それらのTxIDによってメモリープール(mempool)から取り出すことによって、完全なブロックを組み立て直すことができる。
【0025】
[0041] それにもかかわらず、現在のブロック・サイズが128 MBに増大しつつあり、伝送される予定のデータのサイズを超えると、トランザクション数が大きい場合には、依然として深刻になる可能性がある。例えば、50万のトランザクションを含むブロックは、16 MBであるTxIDの順序付けられたリストを有することになるであろう。
【0026】
[0042] 従って、PCT特許公開WO2020/208590及びWO2020/208596に記載されているように、マイニング・ノードは、他のマイナーに、それらの各自の候補ブロックについての情報を、それらの候補ブロックをハッシュしながら提供することが提案されている。このようにして、各マイナーは、成功したブロックの発見の間の時間遅延を利用して(ビットコインの例では約10分)、マイナーが作業している候補ブロックの構造及び内容に関する詳細を、他のマイナーに提供する。この情報を事前に提供することによって、成功したブロックが発見された場合に、成功したマイナーは、ブロック・ヘッダからの情報、及び場合によってはコインベース・トランザクションを送信することだけを必要とし、他の全てのノードが完全な新しいブロックを組み立てて検証できることを保証する。このデータは、数百バイト程度に小さいものである可能性がある。これは、成功した新しいブロックが全ネットワークを通じて伝搬される速度を増加させる。PCT特許公開WO2020/208580及びWO2020/208596の内容は、参照により本件に援用される。
【0027】
[0043] マイナー間の候補ブロック・データのプレ・ソリューション伝搬は、ストリーミング・ブロック・テンプレート(streaming block templates,SBT)と呼ばれることがある。各マイナーは、現在作業している候補ブロックにおけるトランザクション識別子の順序付きリストを、他のマイナーに提供する。場合によっては、帯域幅を節約するために、トランザクション識別子は、打ち切られたトランザクション識別子として送信されてもよい。PCT特許公開WO2020/208596は、打ち切られたトランザクション識別子の場合における衝突を解決する方法を詳述している。
【0028】
[0044] 例として説明するために、ここで
図2を参照すると、ブロックチェーン・システムにおいてブロック・データを事前に配布する簡略化されたシステム200が概略的に示されている。この例では、システム200は、4つのマイニング・ノード202:マイナーA 202a,マイナーB 202b,マイナーC 202c,及びマイナーD 202dを含んでいる。マイニング・ノード202は、他のノード(図示せず)を含んでいる可能性があるブロックチェーン・ネットワーク204内のノードである。他のノードは、フル・ノード(full node)、SPVノード、マイニング・ノード、又はその他のタイプのブロックチェーン・ノードを含む可能性がある。
【0029】
[0045] 各マイニング・ノード202は、1つ以上の処理ユニットを含む可能性がある演算デバイスにおいて実現されてもよい。当業者に理解されているように、処理ユニットは、著しい速度と効率でブロックチェーン・マイニングに関連する演算処理を実行するように設計された専用ハードウェアを備える特化された処理ユニットを含む可能性がある。しかしながら、それはまた或いは代替的に、汎用演算デバイスを含む可能性もある。演算デバイスは、プロセッサ可読命令を含むプロセッサ実行可能ソフトウェアを含み、その命令は、実行されると、1つ以上の処理ユニットに、説明される動作を実行させる。演算デバイスは、ネットワーク接続を取得し、適用可能なネットワーク・プロトコルに従ってメッセージを送受信するための関連するハードウェア及びソフトウェアとのネットワーク接続及びメモリを含む。
【0030】
[0046] 各マイニング・ノード202は、ブロックチェーン・ネットワーク204からトランザクションを受信して検証し、マイニングのための候補ブロックを構築する。例えば、マイナーD 202dは、検証されるトランザクションの順序付けられたセット(ordered set)を含む候補ブロック208を構築し、その後、それらに関してプルーフ・オブ・ワークを発見するように試みる。
【0031】
[0047] その間に、マイナーD 202dは、ブロック・テンプレート、即ち、その候補ブロック208内のトランザクションの順序付けられたリストに関する情報を、他のマイニング・ノード202へ送信する。また、そのマイナーは、他のマイニング・ノード202の各々から、各自がマイニングしているそれぞれの候補ブロックに関する情報を受信する。マイナーD 202dは、その情報を、他のマイニング・ノードの各々に関するアペンド専用リスト(append-only list,AOL)210に記憶する。即ち、例えば、マイナーD 202dは、それがマイナーA 202aから受信するメッセージであって、そのマイナーの候補ブロックの順序付けられた内容を指定するメッセージに基づいて、マイナーA 202aに関するアペンド専用リスト210を構築する。と同時に、マイナーD 202dは、AOL-Dのようなレコードを構築して維持することが可能であり、そのレコードは、そのマイナーが他のノードへ送信したトランザクション情報の順序付けられたリストを記録している。これは、以下で更に説明されるように、POWソリューションが発見された場合に、候補ブロック208とAOL-Dデータを同期させるのに有用である可能性がある。
【0032】
[0048] それぞれの候補ブロックを反映する他のそれぞれのマイニング・ノード202に関する、トランザクションのそれぞれの順序付きリスト(AOL)を、各マイニング・ノード202が有するように、候補ブロック情報を事前に分配することは、POWが発見された後に、最小限の量の情報のみが伝搬されることを必要とすることを保証している、ということが理解されるであろう。これは、マイニング・ノード202が可能な限り迅速に新しいブロックを検証するために必要とする情報を有することを保証し、それにより、別のマイニング・ノード202が既に成功している場合に、POWを探索する際に浪費される時間を低減する。マイニング・ノード202は、次のブロックの検索に移ることができるように、可能な限り迅速に新しいブロックを伝播及び検証するためのあらゆるインセンティブを有する。ネットワーク待ち時間に起因する潜在的な遅延は、連続するブロック間の約10分間の間に、トランザクションの順序付けられたリストを事前に分配する場合には、大きな問題にはならない
[0049] マイニング・ノード202のうちの1つがその候補ブロックのPOWを発見することに成功すると、そのノードは、他のマイニング・ノード202にメッセージを送信し、そのメッセージは、そのマイニング・ノードのAOL 210を使用して、解決されたブロックを再構成するために、それら他のマイニング・ノード202によって必要とされるブロック・ヘッダ情報のうちの少なくとも一部を含む。例えば、メッセージは、完全なブロック・ヘッダをハッシュする場合に取得されたハッシュ値とともに、ノンス及びタイムスタンプを含んでいてもよい。
【0033】
[0050] 一部の実装形態では、AOLs 210に関係するマイニング・ノード202間のメッセージは、現在のストリーミング・ブロック・テンプレートに関するテンプレート識別子を含んでいる可能性がある。これは、本件ではSBテンプレート識別子として言及される場合がある。SBテンプレート識別子は、マイニング・ノード202及びブロック・レベルに固有である可能性があり、特定の候補ブロック、即ち、トランザクションの特定の順序付けられたリストを参照するようにしている。トランザクションの順序付けられたリスト(AOL)に関連するマイニング・ノード202からの如何なるメッセージングも、SBテンプレート識別子を含む可能性があり、受信側のマイニング・ノード202が、その変更を、トランザクションの正しい特定の順序付けられたリストに関連付けることを確実にする。ある実装において、SBテンプレート識別子は、ブロック・ヘッダ中のprev_blockフィールドとマイナー識別子(miner ID)のハッシュ、即ち、以前のブロックのハッシュであってもよい。
【0034】
TmID = H(prev block || miner ID)
[0051] これは、SBテンプレート識別子を、ブロック・レベル及び特定のマイナーに結び付けている。
【0035】
[0052] 順序付けられたリストに関係する各メッセージは、シーケンス番号を更に含む可能性がある。シーケンス番号は、特定のテンプレートに関連する1つのマイナーからのメッセージの順序を示すために使用される符号なし整数値であってもよい。順序付け(Sequencing)は、一部のメッセージが受信されていないか又は順序通りではなく受信されている場合に、特定のマイナーに関するTXIDの順序(ordering)を一意に決定するために、メッセージ受信者にとって役立つ。従って、各々のアペンド・メッセージは、SBテンプレート識別子とシーケンス番号の両方を含む可能性がある。SBテンプレート識別子は、ブロックに対して一定のままである可能性があるが、シーケンス番号は、そのSBテンプレート識別子に関連して送信される各メッセージとともにインクリメントされる。
【0036】
[0053] 本件で説明されるSBテンプレート識別子は、マイナーの中のトランザクション・プロセッサ又はブロック・アセンブラによって使用される可能性のある「テンプレート識別子」(template_id)又は「候補ブロック識別子」(cb_id)であって、候補ブロックのそのバージョンがマイニング・ユニットに渡される特定の時点における候補ブロックの内容を表現するためのもの、とは相違し且つ区別される。以下で後述するように、トランザクションが追加され、更新された候補ブロックが、候補ブロックに対して作業するために利用可能な様々なマイニング・ユニットへ渡される場合に、候補ブロックの内容は経時的に変化する可能性がある。一部の実装では<base>.<sequence_number>の形式をとる可能性のあるtemplate_id(又はcb_id)は、時間経過とともにその候補ブロックの状態を追跡し、その結果、マイニング・ユニットが解(ソリューション)を返す場合に、ブロック・アセンブラ又はトランザクション・プロセッサは、マイニング・ユニットが作業していた候補ブロックのバージョンを知ることができる。一方、ストリーミング・ブロック・テンプレート・プロセスは、テンプレート構築プロセスと幾らか非同期的に実行され、現在のマイナーの候補ブロックに含まれるトランザクションに対して他のマイナーに警告するために送信されるアペンド・メッセージは、候補ブロックの状態、特に、ソリューションが発見されている候補ブロックのバージョンから切り離される可能性がある。従って、以下で更に説明するように、マイナーは、POWソリューションが発見されると、同期プロセスに関与する可能性がある。
【0037】
[0054] 上述したように、マイナーIDは、マイニング・ノードのIPアドレス、又はマイニング・ノード202のための何らかの他の一意の識別子である可能性がある。一部の実施形態において、初期認証動作は、マイナーがネットワークにアタッチする場合に生じる可能性があり、その動作は、一意のマイナーIDをそのマイナー・ノード202に関連付ける結果となる。認証動作は、各マイニング・ノード202が公開鍵及びデジタル署名を提供するハンドシェイク動作を含む可能性がある。認証は、デジタル署名の検証に結び付けられる。場合によっては、マイナーIDは、公開鍵、デジタル署名、又はそれらの何らかの組み合せに基づいていてもよい。従って、マイニング・ノード202は、ピア・ツー・ピア認証チャネル206によって相互接続されてもよい。ストリーミング・ブロック・テンプレート・メッセージは、これらの認証されたチャネル206を介して交換される可能性がある。
【0038】
[0055] 圧縮識別子
ストリーミング・ブロック・テンプレートに関連してマイニング・ノード間で伝送されるデータの量を低減するために、SBTメッセージにおいて指定されるトランザクション識別子は圧縮されてもよい。圧縮の1つのオプションは、識別子の一部分のみが伝送されるように、トランザクション識別子を切り捨てることである。これは、打ち切られた識別子どうしの間の衝突(collision)という結果になる可能性がある。衝突は、「製造されたTxID(manufactured TxIDs)」の場合に悪化する可能性があり、即ち、それらのTxIDが、TxID内のあるパターン(例えば、複数のゼロが先行しているもの)のような特定の特徴を有することを保証するように、トランザクションが構築されるような何らかの場合がある。このような場合は、衝突の増加につながる可能性があり、更に、衝突を引き起こす攻撃の可能性を広げてしまう。従って、TxIDの単なる切り捨て以外の、トランザクション識別子の圧縮プロセスを提供することが有用であるかもしれない。
【0039】
[0056] 場合によっては、トランザクション量又は条件に応じて増加する衝突耐性を持たせるように拡張可能な圧縮識別子構造を提供することが有用であるかもしれない。場合によっては、合理的に可能な限り多くのランダム性を保持しようと試みるように、TxIDを圧縮することが有用である可能性がある。コーディング方法は、異なるマイニング・ノードからのメッセージを取り扱うために、異なるコーディング・プロセスを維持する必要がないように、全てのピアノードにわたって共通であるべきである。更に、実装において、変化する条件下で動作するデータ構造において高速な記憶及びルックアップが可能であるプロセスを有することが有利であろう。
【0040】
[0057] 一態様では、本件出願は、トランザクション識別子を圧縮し、また、圧縮された識別子から完全なトランザクション識別子を特定するための方法及びシステムを提供する。
【0041】
[0058]
図3を次に参照すると、本件出願による例示的な圧縮された識別子の構造が概略的に示されている。既知の方法で、トランザクション識別子302がトランザクション300に関して生成される。ビットコインの例では、トランザクション識別子302は、トランザクション300をハッシュすることによって得られる。特に、ビットコインは、トランザクション識別子302を生成するために、トランザクション300のダブルSHA 256ハッシュを規定している。
【0042】
[0059] トランザクション識別子302は、固定長の擬似乱数である。SHA256の場合、結果として得られる数は32バイトの数である。圧縮トランザクション識別子(CID)304は、プレフィックス306を作成すること、及び、それをトランザクション識別子302の打ち切られた部分308と連結すること、という2つの部分で生成されることが可能である。プレフィックス306は、完全なトランザクション識別子302に適用される関数を使用して生成される固定長の数である。一部の例では、それは、コンパクトな数を生成するために、再帰ハッシュ関数(recursive hash function)を使用して生成されてもよい。一部の例では、プレフィックス306は、2,3,又は4バイト長であってもよい。プレフィックス306を生成するために使用されるハッシュ関数は、非暗号ハッシュ(non-cryptographic hash)であってもよい。ハッシュ関数は、計算実装の容易性に基づいて及びそのランダム性に基づいて選択されてもよい。理想的には、ハッシュ関数は、可能性のある値の全範囲にわたって等確率であるプレフィックス値をもたらすものであり、即ち、等確率分布を有する。関数は、ムァームァー・ハッシュ関数(murmer hash function)又はその変形のバージョンのうちの1つであってもよい。
【0043】
[0060] 一例では、関数は、XOR演算及び折り畳み演算(folding operations)を含む。場合によっては、関数はまた或いは代替的に循環演算(rotate operations)を含んでもよい。場合によっては、関数は、トランザクション識別子をソルト値とXOR演算して、任意の非ランダム化トランザクション識別子(例えば、生成された識別子(manufactured identifiers))のランダム性を改善することを更に含んでもよい。ソルト(salt)は、全てのマイニング・ノードに既知の値であり、また、場合によってはブロックチェーンに記録されている値であってもよい。一例では、ソルト値は、前のブロック時間の前には利用可能でない値であってもよい。一例では、ソルト値は、極最近のブロックのマークル・ルート(Merkle root)であってもよい。
【0044】
[0061] 1つの例示的なプロセスの概要は以下のとおりである:
[0062] 1.Salt XOR TxID = CID32
{TxIDにおける任意の非ランダム・パターンをランダム化する}
[0062] 2.CID32[0:15] XOR CID32[16:31] = CID16
{CID 32を16バイトに折り畳む}
[0064] 3.CID16[0:7] XOR CID16[8:15] = CID8
{CID16を8バイトに折り畳む}
[0065] 4.CID8[0:3] XOR CID8[4:7] = CID4
{CDI8を4バイトに折り畳む}
[0066] 5.CID4[0:2] = CIDprefix
{CID4を最初の3バイトに切り捨てる}
[0067] 場合によっては、プロセスの様々なステップにおいて1つ以上の循環が導入されてもよい。結果として得られるCIDprefixは、統計的な等確率分布を有する3バイトのランダム化された数である。
【0045】
[0068] 使用の際に、CIDprefixのようなプレフィックス306は、トランザクション識別子の切り捨てられた部分308と連結される。切り捨てられた部分308は、トランザクション識別子の可変長部分であってもよい。切り捨てられた部分308の長さは、場合によっては個々のマイニング・ノードによって設定されることが可能な所定のCID長パラメータcid_lenに基づいて設定されてもよい。cid_len値は、マイニング・ノードが新しいブロック・テンプレートのその確立に関する初期化メッセージを送信するときに、マイニング・ノードによって指定されてもよい。cid_len値は、切り捨てられた部分308の長さを、例えば1ないし16の範囲内のようなバイト単位で指定するように構成されていてもよい。CIDに関する切り捨てられた部分308の典型的な長さは、多くの例において、1ないし6である可能性がある。一部の他の場合において、cid_len値は、3バイト・プレフィックス306を含む全体的なCID長を指定することが可能である。実験及びモデリング・データは、1000万ないし5億のトランザクションを有するブロックの場合には、4バイトという全長のCIDが最適である可能性があり、5億ないし100億のトランザクションを有するブロックの場合には、5バイトが最適である可能性がある、ということを示している。これらのCID長は、それぞれ1バイト又は2バイトの切り捨てられた部分308に対応する。
【0046】
[0069]
図4を次に参照すると、圧縮トランザクション識別子ストレージ・システム400の一例が示されている。システム400は、マイニング・ノードにおいてCIDに基づいてトランザクション識別子を格納し、迅速にアクセスするためのものである。システム400は、1つのメモリ・デバイス又は複数のメモリ・デバイスを使用して実装されてもよい。
【0047】
[0070] システム400は、グローバルTxIDデータ構造402と、TxIDストア・インデックス404と、複数のバケット406とを含むことが可能である。グローバルTxIDデータ構造402は、マイニング・ノードによって検証され、ブロックに含めるために利用可能なトランザクション識別子の包括的なリスト、即ち、ペンディングの未確認トランザクションに関する識別子である。これは本件ではグローバル・トランザクション識別子リストと言及されることがある。トランザクション識別子は、到着順にグローバルTxIDデータ構造402に付加される。以下で説明されるように、到着の順序は、トランザクション・プロセッサが、それらをSBTモジュールにそれらを伝送する順序である可能性があり、SBTモジュールはCID生成及び解決プロセスを管理するものであり、その管理は圧縮トランザクション識別子ストレージ・システム400の管理を含む。
【0048】
[0071] TxIDストア・インデックス404のサイズは、CIDプレフィックスの長さに依存する。この例では、プレフィックスは3バイト値であると仮定されている。TxIDストア・インデックス404は、トランザクション識別子に対して生成された何らかのCIDプレフィックスに、ポインタ408を割り当てる。ポインタ408は、そのCIDプレフィックスに対応するバケット406の位置を指し示す。TxIDストア・インデックス404は、各CIDプレフィックスに対応するそれぞれのバケット406に関する各アドレスのそれぞれのポインタ408を記憶するのに十分なメモリを含むことが可能である。
【0049】
[0072] 各バケット406は、対応するフルTxIDが記憶されているグローバルTxIDデータ構造402中のロケーション(即ち、インデックス位置)を指し示す1つ以上のTxIDインデックス410を含むように設計されたフレキシブルなサイズのデータ構造であることが可能である。
【0050】
[0073] 使用時に、新たなトランザクションがマイニング・ノードによって受信されて検証されると、マイニング・ノードは、TxIDを生成し(まだ知られていない場合)、TxIDをグローバルTxIDデータ構造402に付加し、TxIDがグローバルTxIDデータ構造402に記憶されている場所のインデックスを記録する。次いで、マイニング・ノードは、上記で説明した再帰的折り畳み方法のような、TxIDに対する圧縮プロセスを使用してCIDプレフィックスを生成することによって、CIDを生成する。プレフィックスが見出されると、プレフィックスは、TxIDストア・インデックス404を使用して、対応するバケット・アドレスを識別するために使用される。次いで、マイニング・ノードは、TxIDインデックス410をそのバケット406に付加し、TxIDインデックスは、グローバルTxIDデータ構造402に記憶されているTxIDのロケーション、即ち、ポジション又はインデックス・ポジションを指し示す。
【0051】
[0074] 受信したCIDを解決するために、マイニング・ノードは、受信したCIDのプレフィックス部分に基づいて、TxIDストア・インデックス402内の対応するバケット・アドレスを見出す。次いで、マイニング・ノードは、そのバケット406内のTxIDインデックス410を読み取り、グローバルTxIDデータ構造402内の対応するTxIDを、TxIDインデックス410によって示されるロケーションに配置する。これらのTxIDのうちの1つは、CIDの切り捨てられた部分に適合することになる。
【0052】
[0075] 特に、この例におけるデータ構造は、良好にスケーリングし、高度に同時アクセスを可能にする。
【0053】
[0076]
図5を次に参照すると、圧縮されたトランザクション識別子を生成するための例示的な方法500がフローチャート形式で提供されている。方法500は、一部の例ではマイニング・ノードによって実施されてもよい。方法500は、コンピュータ読み取り可能な媒体に記憶されたプロセッサ実行可能命令によって実現されてもよく、その命令は、1つ以上のプロセッサによって実行されると、説明される機能を1つ以上のプロセッサに実行させる。命令は、アプリケーション、又はSBTモジュールのようなモジュールとして実装されてもよい。SBTモジュールは、ソフトウェアのスタンドアロン・ユニットであってもよいし、或いは、ソフトウェア・ルーチン、命令、アプリケーション、モジュール等のより大きなシステムの一部分として組み込まれてもよい。
【0054】
[0077] 動作502において、SBTモジュールはトランザクション識別子を受信する。トランザクション識別子は、新しいトランザクションを検証するように構成されたマイニング・ノード内のトランザクション・プロセッサによって提供されてもよい。トランザクションそれ自体は、ネットワークを通じたトランザクションの伝搬に関連して、ピア・ツー・ピア・ブロックチェーン・ネットワークを介して受信されてもよい。それは、マイニング・ノード及び/又はブロックチェーン・ネットワークに接続されたマーチャント・デバイス(merchant device)から、マーチャントAPIを介して受信されてもよい。トランザクション識別子は、トランザクションをハッシュすることを通じて、トランザクション・プロセッサによって決定されていてもよく、これはトランザクションを検証することの一部であってもよい。
【0055】
[0078] CIDを生成するために、SBTモジュールは、この例では、動作504において、TxIDをソルトとともにXOR演算することによってTxIDをランダム化する。ソルトは、マイニング・ノードに知られている何らかの固定された数であってもよい。一部の例では、ソルトは、ブロックチェーンにおいて最近に確認されたブロックのマークル・ツリー・ルートであってよい。32バイトのマークル・ルートによる32バイトのTxIDのXOR演算は、32バイトのランダム化されたTxID値を生成する。
【0056】
[0079] 次いで、SBTモジュールは、動作506及び508において、XOR演算を使用して、ランダム化されたTxID値を再帰的に折り畳む。再帰的な畳み込みは、その数の前半をその数の後半とXOR演算することを含む。例えば、32バイト値は、最初の16バイトを次の16バイトとXOR演算することによって折り畳まれる。幾つかの実装では、半分の一方又は両方の半分が、XOR演算の前に循環させられていてもよい。再帰的折り畳みは、所望の長さに達するまで続く。この例では、折り畳みは、その値が4バイト長になるまで行われる。
【0057】
[0080] 動作510は、オプションの循環動作を示す。場合によっては、再帰的折り畳みにより取得された最終的な値に、循環が適用されてもよい。動作512は、オプションの切り捨て動作を示す。場合によっては、再帰的畳み込みによって得られた最終値の一部分のみが保持される。この例では、折り畳まれた値の最初の3バイトのみが保持される。次いで、動作514において、結果がCIDプレフィックスとして出力される。
【0058】
[0081] この例示的な方法500では、CID生成プロセスは、次いで、動作516によって示されるように、トランザクション識別子を打ち切ること、及び、プレフィックスと打ち切られたTxIDとを連結することを更に含む。TxIDは、cid_lenパラメータによって反映されるように、所定のCID長に基づいて決定された長さに打ち切られても良い。動作516は、CIDの生成をもたらし、CIDは、次いで、関連付けられたトランザクションが現在のマイニング・ノードによって候補ブロックに含まれていることを、他のマイニング・ノードにシグナリングするために使用されることが可能である。
【0059】
[0082] 方法500は、動作518ないし522によって示されるように、CIDマッピングを記憶することを更に含む。特に、動作518において、SBTモジュールは、TxIDをglobal_listに格納し、TxIDが格納されるロケーション(例えば、インデックス)を記録する。動作520において、SBTモジュールは、次いで、TxIDのために生成されたCIDプレフィックスに関連付けられたバケットを識別する。次いで、動作522において、global_listに対するインデックスがそのバケットに付加される。
【0060】
[0083] 現在のマイニング・ノードのためのアペンド専用リスト(append-only list,AOL)にTxIDを付加すること、現在のマイニング・ノードによって構築された候補ブロックの内容を反映すること、又は、他のマイニング・ノードに送信されるアペンド・メッセージにCIDを含めること等のような他の動作が、SBTモジュールによる新たなTxIDの受信に関連して実行されてもよいことが、認められるであろう。
【0061】
[0084]
図6をここで参照すると、第1のマイニング・ノードに記憶されたAOLを更新する例示的な方法600を示すフローチャートが示されている。第1のマイニング・ノードは、動作602において、第2のマイニング・ノードからアペンド・メッセージを受信する。アペンド・メッセージは、CIDの順序付けられたセットを含む。以下で更に説明されるように、場合によっては、より長いCID又は完全なTxIDが衝突を回避するのに有用であると送信マイニング・ノードが決定した場合に、アペンド・メッセージは1つ以上の拡張されたCID又は完全なTxIDさえも含む可能性がある。
【0062】
[0085] 受信マイニング・ノードは、動作604において、受信したCIDのプレフィックス部分を抽出し、プレフィックスは、TxIDストア内の対応するバケットを識別するために使用される。一例では、プレフィックス部分は最初の3バイトである。上述したように、バケットは、グローバルTxIDデータ構造内のロケーションであってそのプレフィックスに対応するTxIDが記憶されているロケーション、を指し示す1つ以上のインデックスを含む。動作606において、インデックス(複数可)が指し示すTxIDsが読み取られて、CIDの残りの部分、即ち、切り捨てられた部分に合致するTxIDを見出す。即ち、TxIDの第1の部分は、CIDの残りの部分に合致するであろう。一致が見出されない場合、或いは、バケットが如何なるインデックスも含まない場合、動作608において、受信マイニング・ノードは、欠落しているトランザクション・データを解決するために、送信マイニング・ノードへメッセージを送ることができる。例えば、メッセージは、CIDに対応する完全なTxID又は完全なトランザクションを要求している可能性がある。
【0063】
[0086] 動作606において、一致が見出された場合、動作610において、アペンド・メッセージ内のチェックサムが検証される可能性がある。一部の例示的な実装では、アペンド・メッセージは、アペンド・メッセージ内のCIDから取得されたトランザクション識別子の解決済みセットが間違いないかどうかを判定するためのチェックサム又は別のエラー検出機構を含むことが可能である。失敗であった場合、それは、解決を要する未検出衝突(undetected collision)を示している可能性がある。その結果、受信マイニング・ノードは、動作608によって示されるように、失敗したチェックサムに関して送信マイニング・ノードへメッセージを送り、衝突解決を要求することができる。チェックサムが検証された場合、動作612において、受信マイニング・ノードは、送信マイニング・ノードに関するメモリに格納されるAOLにトランザクション識別子を付加する。ある実装では、アペンド・メッセージで参照される全てのトランザクション識別子の順序付きリストに対して、単一のチェックサム値が提供される。別の実装では、アペンド・メッセージで参照される各トランザクション識別子にチェックサム値が提供される。更に別の実装では、アペンド・メッセージで参照される順序でX個のシーケンシャル・トランザクション識別子の各グループに対して、チェックサム値が提供される。グループのサイズXは、ブロックチェーン・プロトコルによって設定されてもよいし、或いは、初期化中にマイニング・ノードによって設定されてもよい。
【0064】
[0087] 上述したように、CID長は固定値であってもよい。固定値は、ネットワーク・プロトコルで規定され、場合によっては、ハード・コーディングされてもよい。場合によっては、それはマイニング・ネットワークのコンセンサスによって選択された所定のネットワーク・パラメータであってもよい。場合によっては、それは、マイニング・ノードが、SBTネットワークに参加しており且つそれがシグナリングすることになる候補ブロックを有していることをシグナリングするSBT初期化メッセージをマイニング・ノードが送信する場合に、マイニング・ノードによって選択された長さに基づいていてもよい。
【0065】
[0088] 帯域幅の利用と衝突確率とのバランスをとるための最適な長さは、トランザクションの量の変化とともに変化する可能性がある。条件要求に応じてCIDの長さを調整するためにエレガントな機構を提供することは有利であるかもしれない。一例では、デフォルトCID長は、CID長パラメータcid_lenによって設定されることが可能であるが、プロトコルは、送信ノードによって衝突が確認される場合に、より長いCIDを使用してトランザクション識別子をシグナリングすることを許可してもよい。一部の実装では、CID長さに対する2回以上の調整を行って、長さを徐々に調整し、ケース・バイ・ケースで衝突を回避することが可能である。場合によっては、完全なTxID又は完全なトランザクションさえもが、アペンド・メッセージで送信されてもよい。
【0066】
[0089] 送信されるリファレンスのタイプをシグナリングするために、異なるオペコードが、異なるタイプのリファレンスのために定義されてもよい。例えば、オペコードOP_APPEND_CIDは、長さcid_lenバイトの圧縮トランザクション識別子をシグナリングするために定義されてもよい。別のオペコードOP_APPEND_ECIDは、「拡張CID(Extended CID)」が付加されることをシグナリングするために使用されることが可能であり、これは(cid_len+1)バイトの長さを有し、即ち、CIDよりも1バイト余分に長い。即ち、ECIDの切り捨てられた部分は、CIDの切り捨てられた部分よりも1バイト長い。
【0067】
[0090] 場合によっては、ECIDが衝突を解決できない場合のために、「更なる拡張CID(further eXtended CID)」をシグナリングするために、別のオペコード、OP_APPEND_XCIDが定義されてもよい。XCIDは、例えば、(cid_len+4)バイトの長さを有することが可能であり、即ち、ECIDより3バイト長く、CIDより4バイト長い。ECIDが衝突を解決できない非常に希なケースでは、オペコードOP_APPEND_IDを使用して(それは、後続のデータが完全な32バイトTxIDであることを示す)、完全なTxIDを送信する可能性があるかもしれない。
【0068】
[0091] 場合によっては、例えば、マイナーが、ピア・ツー・ピア・ブロックチェーン・ネットワークを介してではなく、マーチャントAPIから直接的に投入されたトランザクションを受信する場合に、受信側マイニング・ノードはピア・ツー・ピア・ネットワークを介して伝搬されたメッセージをまだ見ていない可能性が高いことを予想して、(ピア・ツー・ピア・ネットワーク上でそれを伝搬することに加えて)アペンド・メッセージ内でそのトランザクションを完全に送信することを選択することができる。このような状況に対してオペコードOP_APPEND_FULLを定義することができ、後続のトランザクション・データの長さを示す値がこれに続き、次いで、完全なトランザクション・データが後に続く可能性がある。
【0069】
[0092]
図7をここで参照すると、圧縮されたトランザクション識別子を生成する1つの例示的な方法700を示すフローチャートが示されている。方法700は、マイニング・ノードのような適切にプログラムされた演算デバイスによって実施されてもよい。マイニング・ノードは、検証されたトランザクションのTxIDを有するここと、及び、マイニング・ノードは、CIDのプレフィックス部分を生成していること、を想定することが可能である。プレフィックス部分は、例えば、
図5に関連して説明される再帰的折り畳み方法のような再帰的圧縮方法を使用して生成されてもよい。
【0070】
[0093] 動作702において、マイニング・ノードは、TxIDのために生成されたプレフィックスに対応するバケットを識別する。これは、txid_storeデータ構造においてプレフィックスに関連して記憶されたバケットのアドレスに対するポインタを識別することを含むことが可能である。次いで、マイニング・ノードは、動作704によって示されるように、TxIDを、バケット内で既に参照されているTxIDsと比較する。即ち、バケットは、グローバルTxIDデータ構造内のロケーションであって同じプレフィックスを有するTxIDsが記憶されているロケーション、を指し示す1つ以上のTxIDインデックスを既に含んでいる可能性がある。
【0071】
[0094] 動作706において、マイニング・ノードは、バケットによって参照されるTxIDのうちの1つが、現在のTxIDの少なくとも最初のNバイトに一致するかどうかを評価する。Nは、N=cid_len+1のような、CID長パラメータcid_lenによって設定される値であってもよい。即ち、Nは、プレフィックスの3バイト長を差し引いたXCIDの規定された長さに一致していてもよく、即ち、Nは、XCIDの切り捨てられた部分の長さに一致する。既存の記憶済みのTxIDが現在のTxIDの最初のNバイトと一致する場合、動作708において、マイニング・ノードは、完全なIDが送信されるべきであると判断する。従って、OP_APPEND_IDオペコードが、完全なTxIDをアペンド・メッセージに追加するために使用される。
【0072】
[0095] そのような一致が存在しない場合、動作710において、マイニング・ノードは、現在のTxIDの少なくともMバイトが、バケットにおいて参照されるTxIDのうちの1つと一致するかどうかを評価し、ここで、M<Nである。場合によっては、Mは、ECIDの切り捨てられた部分の長さ、例えばcid_len-2に対応する。その場合、動作712において、マイニング・ノードは、例えば、cid_len+4の全長を有するXCID、即ち、cid_len+1バイトの長さを有するTxIDの切り詰められた部分を有する XCIDが送信されるべきであることを決定する。従って、XCIDは、プレフィックス及びTxIDの最初のcid_len+1バイトから組み立てられ、OP_APPEND_XCIDオペコードが、XCIDをアペンド・メッセージに追加するために使用される。
【0073】
[0096] そのような一致が存在しない場合、動作714において、マイニング・ノードは、現在のTxIDの少なくともPバイトが、バケットにおいて参照されるTxIDのうちの1つと一致するかどうかを評価し、ここで、P<M<Nである。場合によっては、Pは、CIDの切り捨てられた部分の長さ、例えば、cid_len-3に対応する。その場合、動作716において、マイニング・ノードは、例えば、cid_len+1の全長を有するECIDが送信されるべきであることを決定し、ここで、切り捨てられた部分は長さcid_len-2によるものである。従って、ECIDは、プレフィックス及びTxIDの最初のcid_len_2バイトから組み立てられ、OP_APPEND_ECIDオペコードが、ECIDをアペンド・メッセージに追加するために使用される。
【0074】
[0097] 動作706,710,又は716において一致が見出されなかった場合、又は、バケット内で参照されるTxIDが未だ存在していない場合、動作718において、マイニング・ノードは、プレフィックス及びTxIDの最初のcid_len-3バイトを使用してCIDを生成する。次いで、OP_APPEND_CIDオペコードを使用して、CIDをアペンド・メッセージに追加する。
【0075】
[0098] この例示的なプロセスは3つの可能な圧縮されたID長(CID,ECID,XCID)を使用しているが、他の実装は、より多くの可能な長さ又はより少ない可能な長さを有する可能性があることが、認められるであろう。更に、これらの例におけるCID,ECID,及びXCID値の長さは、長さのセットの一例である。他の実装では、異なる長さが使用されてもよい。上述のプロセスは、圧縮された識別子の長さを徐々に適合させて、検出された衝突に対処し、トランザクション量が大きい状況に適合させる
[0099] 上述した方法及びシステムは、マイニング・ノード間でブロック・テンプレート・データをストリーミングするための様々なオプションを提供し、事前解決ブロック・テンプレート伝播(pre-solution block template propagation)を可能にする。圧縮されたトランザクション識別子を使用することは、削減された帯域幅の使用を可能にする。圧縮されたトランザクション識別子を生成するために説明された例示的なプロセスは、圧縮された識別子のエレガントな適応可能な拡張により、衝突が生じる前に、衝突を検出及び解決することを支援する。概して等確率分布を有するように構成されたプレフィックスを有する圧縮された識別子の構造、及び、CIDを圧縮解除/解決するためにデータを記憶するためのデータ・モデルの構造は、アタック・ベクトル(attack vectors)に対するレジリエンスを提供し、CIDを解決するための高速で高度な同時メモリ・アクセスを可能にする。
【0076】
[0100] 帯域幅-効率的方法でトランザクション識別子をシグナリングするためのオプションを更に活用することは有利であろう。従って、別の態様では、本件出願は、SBTネットワークに参加しているマイニング・ノードが他のマイニング・ノードのAOLの共通の全体像を構築しているという事実を活用する、トランザクション識別子をシグナリングするための方法及びシステムを提供する。これらのAOLリストのほとんどは、未確認トランザクションの同じ全体セットから構築されている。従って、一態様では、マイニング・ノードは、別のマイニング・ノードのAOL内の同じトランザクション識別子に対するポインタを使用して、自身のAOL内のトランザクション識別子を参照することができる。
【0077】
[0101]
図8は、2つのマイニング・ノード:マイナーA及びマイナーBを含む簡略化された例示的なシステムを概略的に示している。マイナーAは、その現在の候補ブロックに追加されたトランザクションの順序付けられたリストを反映しているAOL-Aリスト802と、マイナーBがマイナーBの候補ブロックに含まれると通知したトランザクションの順序付けられたリストを反映するAOL-Bリスト804とを有する。これは、2つのマイナー間の認証された接続806を介して、マイナーBから受信されたアペンド・メッセージに基づいてAOL-Bリストを構築する
[0102] マイナーBは、同様に、その候補ブロック内のトランザクションの順序付けられたリストを反映するそれ自身のAOL-Bリスト808と、マイナーAがマイナーAの候補ブロックに含まれると通知したトランザクションの順序付けられたリストを反映するAOL-Aリスト810とを維持している。
【0078】
[0103] 上述したように、マイナー達が各自それぞれのAOL内のトランザクションの順序付けられたリストを互いにシグナリングするために使用するアペンド・メッセージは、
OP_APPEND_CID,
OP_APPEND_ECID,
OP_APPEND_XCID,又は
OP_APPEND_IDのようなオペコードを使用して、順序付けられたリスト内のトランザクション識別子をシグナリングすることが可能である。しかしながら、マイナーAが、特定のトランザクション識別子812をAOL-Aリスト802に包含していることをシグナリングしており、マイナーBからのアペンド・メッセージに基づいて、その同じ特定のトランザクション識別子812を、AOL-Bリスト804に既に入力していた場合、マイナーAは、マイナーBのAOL-Bリスト804を指し示すことによって、その特定のトランザクション識別子をマイナーBに指定するオプションを有する。具体的には、マイナーAは、AOL-Bリスト804を構成するトランザクションの順序付けられたセット内での、その特定のトランザクションのインデックスを示すことができる。この例では、インデックスは0x03であるとすることが可能である。
【0079】
[0104] 従って、マイナーBに送られるべきアペンド・メッセージを構築する場合に、マイナーAは、圧縮されたトランザクション識別子を参照する別のオペコードの代わりに、OP_APPEND_IDX 0x03を使用することを選択してもよい。アペンド・メッセージの受信時に、マイナーBがOP_APPEND_IDXオペコードに遭遇すると、マイナーBは、指定されたインデックスが自身のAOL-Bリスト808に対するインデックスであることを理解する。次いで、AOL-Bリストからのそのインデックスにおける内容、即ちTxIDを、AOL-Aリスト810へコピーすることができる。この例では、AOL-Bリスト808のインデックス0x03におけるTxIDが、AOL-Aリスト810に追加される。
【0080】
[0105] トランザクション識別子をシグナリングするこの方式は、AOLインデックス値をシグナリングすることが、圧縮されたトランザクション識別子をシグナリングすることよりも効率的である場合、特に、圧縮されたトランザクション識別子が、拡張された、又は更に拡張された、又は完全なトランザクション識別子である場合に、帯域幅の節約効果をもたらすことが可能である。
【0081】
[0106] インデックスをAOLにシグナリングすることによってトランザクション識別子を指定する概念は、1つのマイナーが、インデックスを第3のマイナーのAOLに提供することによって、トランザクション識別子を第2のマイナーにシグナリングすることが可能なマルチ・マイナーの状況に拡張されることが可能である。
図9は、マイナーA,マイナーB,及びマイナーCを含むそのような状況を示す。マイナーAは、自身のAOL-Aリスト902と、マイナーBのためのAOL-Bリスト904と、マイナーCのためのAOL-Cリスト906とを維持している。AOL-Cリスト906は、マイナーCから受信したアペンド・メッセージに基づいて、マイナーAによって構築されている。同様に、マイナーBは、自身のAOL-Bリスト910と、マイナーAのためのAOL-Aリスト912と、マイナーCのためのAOL-Cリスト914とを記憶している。
【0082】
[0107] マイナーAが、そのAOL-Aリスト902中のTxID 920を指定するアペンド・メッセージを、マイナーBへ送ることを意図しており、同じTxID 920がマイナーCに関するAOL-Cリスト906中に現れていることを知っている場合、マイナーAは、AOL-Cリスト906を指定し、且つそのリストに対するインデックス、例えば0x05を指定するアペンド・メッセージを送信することが可能である。マイナーBは、アペンド・メッセージを受信し、このリファレンスに遭遇すると、次に、自身のAOL-Cリスト914のコピー内のTxIDを、指定されたインデックス、例えば0x05に配置することができる。次いで、マイナーBは、そのTxIDをコピーし、それを自身のAOL-Aリスト912に付加する。
【0083】
[0108] 第三者インデックス・リファレンス・オペコード,OP_APPEND_EIDXが、第三者AOLリストに対するインデックスを指定するために定義されてもよい。OP_APPEND_EIDXは、インデックスと、AOLリスト及び/又は関連するマイナーに対するリファレンスとの両方を含む。この意味で、それは、追加データの包含に起因して、OP_APPEND_IDXよりも効率的ではないが、それにもかかわらず、場合によっては、CID,ECID,XCID,及び/又はIDシグナリングを上回る帯域幅節約効果をもたらす可能性がある。
【0084】
[0109] アペンド・メッセージに含まれるAOLリストに対するリファレンスは、場合によっては第三者マイナーに対するリファレンス、例えばマイナーIDであってもよいが、これは、特定のテンプレートに対する参照を許可せず、むしろ、その第三者マイナーに関するその時点でのテンプレート(then-current template)に対する参照として解釈されるであろう。ブロック時間内であっても、新しい候補ブロックが開始される場合、テンプレートは初期化し直される可能性があるので、テンプレート自体を参照することが有利である可能性がある。
【0085】
[0110] テンプレートは、各々、初期化メッセージを送信する場合に使用されるストリーミング・ブロック・テンプレート識別子sb_template_idを有する。sb_template_idは、現在のテンプレートの中で一意であり、各アペンド・メッセージに適用されるシーケンス番号との組み合わせにおいて、受信ノードが、アペンド・メッセージを適切に順序付けし且つそれらを適用して正しいテンプレートを更新することを可能にする。従って、OP_APPEND_EIDX動作は、sb_template_id番号を参照し、インデックスが、正しいテンプレートにおけるTxIDを特定するために使用されることを保証することができる。
【0086】
[0111] OP_APPEND_EIDXを効率的にするために、よりコンパクトな形態のSBテンプレート識別子を使用することが有利である可能性がある。何らかの時点で数十ないし数百のテンプレートしか存在しないことが仮定される場合、SBテンプレート識別子のコンパクトな形式は、それを固定された短縮バイト数(例えば、2バイト)に打ち切ることによって取得されてもよい。短縮は、切り捨て、切り捨てられたハッシュ、murmerハッシュ(murmer hash)、又は他の任意のそのような仕組みによるものであってもよい。一部の実装では、新しいテンプレートを初期化し、新しいSBテンプレート識別子を選択するマイナーは、最初に、SBテンプレート識別子のコンパクトな形式が、自身で認識している何らかの現在のテンプレートと衝突するかどうかを検査し、そうであった場合、新しいSBテンプレート識別子を選択し、衝突について、新しいSBテンプレート識別子のコンパクト形式を検査する。
【0087】
[0112] 少なくとも1つのモデル環境において、約10億のトランザクションを含むブロックを用いて検査する際に、IDX及びCIDは同様な平均メッセージ・サイズをもたらす結果となり得ることが分かっている。CIDは、よりわずかに効率的である可能性がある。IDXは、別の方法で、ECID又はXCIDを使用する必要がある場合に選択される可能性がある。ECIDは、EIDXよりも効率的である可能性がある。利用可能であれば、XCID又はIDに優先して、EIDXを選択することが有利であるかもしれない。
【0088】
[0113] 上記で示したように、SBTプロセスは、送信側のマイニング・ノードのSBテンプレート識別子を指定する初期化メッセージをSBTネットワーク上で送信又はブロードキャストすることを含む可能性がある。そのマイニング・ノードは、それぞれのSBテンプレート識別子を示す初期化メッセージを、他のマイニング・ノードから受信することが可能であり、それらのメッセージを受信すると、マイニング・ノードは、対応するAOLリストをそれぞれに1つずつ構築する準備を行う。初期化メッセージは、そのマイニング・ノードのAOLリストに関連する幾つかのパラメータを設定することが可能である。例えば、それは、マイニング・ノードによって使用されるマイナーID、SBテンプレート識別子、及びCID長(cid_len)を指定することができる。場合によっては、それはマイナー公開鍵情報とマイナー署名を含んでもよい。場合によっては、アペンド・メッセージを送信する場合に、チェックサムが実行され提供されるグループ内のトランザクションの数であるチェックサム・グループ・サイズを指定することができる。また、この値は、一部の実装では、個々のアペンド・メッセージにおいて指定されてもよい。場合によっては、初期化メッセージは以前のブロック・ハッシュを含んでもよく、その結果、受信者は、メッセージが現在のマイニング・ウィンドウに関連する候補ブロックに関係することを検証できるようになる。
【0089】
[0114] 初期化メッセージは他のマイニング・ノードを更に指定してもよく、当該他のマイニング・ノードから、現在のマイニング・ノードは、初期化メッセージ及びアペンド・メッセージのようなSBテンプレート・データを受信している。換言すれば、初期化メッセージは、どのAOLリストを、現在のマイニング・ノードが追跡しているかをシグナリングすることができる。これは、他のマイニング・ノードが、特定の第三者マイニング・ノードのAOLリストを参照する現在のマイニング・ノードとのEIDXシグナリングを使用できるかどうかを知ることを可能にする。場合によっては、マイニング・ノードは、追加のマイニング・ノードについてAOL情報を追跡していることをシグナリングするために、後続のアペンド・メッセージにおいてそのAOL追跡データを更新する。一例では、マイニング・ノードは、特定の他のノードについてのAOL情報を追跡していることを、それが構築している第三者テンプレートとしてその初期化及び/又はアペンド・メッセージにおけるそれら他のノードについてのSBテンプレート識別子を列挙することによってシグナリングする。
【0090】
[0115] 初期化メッセージを送信した後、マイニング・ノードは、その時点での候補ブロック(then-current candidate block)におけるトランザクションの順序付けられたリストを指定する1つ以上のアペンド・メッセージを送信することができる。同じテンプレートに関連してマイニング・ノードによって送信される各々の連続的なアペンド・メッセージは、テンプレート識別子及びシーケンス番号を含む。このように、順序通りでないアペンド・メッセージを受信又は処理するマイニング・ノードは、AOLリストを構築するために、及び/又は、何らかの欠落したアペンド・メッセージを順番どおりに識別するために、それらが正しい順序で処理されることを保証することができる。
【0091】
[0116] アペンド・メッセージは、各々、テンプレート識別子、シーケンス番号、メッセージ中のリファレンスの数を示すトランザクション・カウントを含む可能性がある。AOLデータのブロック、即ちCIDs,IDXsなど対するリファレンスの後に、メッセージは、1つ以上のチェックサム値を含むことが可能である。場合によっては、チェックサムを実行及び評価する目的で、どの程度多くの解決されたトランザクション識別子が一緒にグループ化されているかを指定するチェックサム・グループ・サイズ・パラメータを含むことが可能である。場合によっては、解決された全てのトランザクション識別子に対して、1つのチェックサムが存在してもよい。場合によっては、それらは、より小さなグループのトランザクション識別子に、各グループのチェックサム値とともに分割されてもよい。
【0092】
[0117] POWソリューションが発見された場合、即ちマイニング・ノードがその候補ブロックのバージョンに対するPOWを解いている場合、マイニング・ノードは、ファイナライズ・メッセージsbt_finalizeをSBTネットワーク上で送信して、自身がソリューションを発見したことを他のマイニング・ノードに通知し、ソリューションの詳細を提供する。sbt_finalizeメッセージは、例えば、完全なブロック・ヘッダ、コインベース(生成)トランザクションなどを含むことが可能である。以下で更に説明されるように、それは、AOLリストの候補ブロックに対する同期を可能にするデータを更に含むことが可能である。
【0093】
[0118] 同期の問題に対処するために、例示的なマイニング・ノードの様々な部分の動作を考察することが有利であろう。
図10は、マイニング・ノード1000の簡略化された例をブロック図形式で示している。この例におけるマイニング・ノード1000は、新しいトランザクションを受信して検証し、それらをトランザクション・データ・ストア1004に記憶するように構成されたトランザクション・プロセッサ1002を含む。トランザクション・データ・ストア1004は、ローカルなものであってもよいし、或いは、リモートに配置されて、1つ以上のネットワーク接続を利用してトランザクション・プロセッサ1002に接続されてもよい。
【0094】
[0119] マイニング・ノード1000は、CIDs,ECIDs,XCIDs,及び様々なメッセージであって、SBTネットワークを介して他のマイニング・ノードへ送信されるアペンド・メッセージを含むもの、を構築するように構成されたSBTモジュール1006を更に含む。SBTモジュール1006は、他のマイニング・ノードからアペンド・メッセージを受信し、ローカル・メモリに格納される対応するAOL 1008を構築するように更に構成される。SBTモジュール1006は、IDX又はEIDXリファレンスの使用が有利である特定の状況において、CIDs,ECIDs,XCIDs,又はIDsを、IDX又はEIDXリファレンスと置換するかどうかを決定するように更に構成されることが可能である。
【0095】
[0120] SBTモジュール1006は、他のマイニング・ノードとの認証された接続1010を介して、SBTネットワーク上で通信を送受信する。トランザクション・プロセッサ1002は、ブロックチェーン・ネットワークとのネットワーク接続1012を介して、他のノードとピア・ツー・ピア・メッセージを送受信してもよい。
【0096】
[0121] トランザクション・データは、3つのソースからマイニング・ノード1000によって受信される可能性がある。トランザクションは、適用可能なブロックチェーン・プロトコルによって管理されるようなトランザクションの伝搬に従って、ブロックチェーン・ネットワークに対するネットワーク接続1012を介して受信されることが可能である。そのようなトランザクションは、トランザクション・プロセッサ1002によって検証され、トランザクション・データ・ストア1004に記憶され、適用可能な場合には、ネットワーク接続1012を介してブロックチェーン・ネットワークにおける他のノードへ更に伝搬される。
【0097】
[0122] トランザクションは、別のマイニング・ノードへの認証された接続1010のうちの1つを通じて、SBTネットワークを介して受信される可能性がある。そのようなトランザクションは、当該他のマイニング・ノードから完全な形で受信されてもよく、特に、トランザクションがブロックチェーン・ネットワークでまだ全体的に伝搬されていないことを、他のマイニング・ノードが知っているような場合である。SBTモジュール1006は、完全なトランザクション・データを、検証してトランザクション・データ・ストア1004に格納するために、トランザクション・プロセッサ1002へ転送する。
【0098】
[0123] また、トランザクションは、マーチャント接続1014を介して、マーチャントAPI 1020を経由してマイニング・ノード1000によって受信されてもよい。マーチャントAPI 1020は、例えば、ポイント・オブ・セールス(POS)デバイス又は支払処理ゲートウェイなどに関連付けられてもよく、検証及び伝搬のために、新たに生成されたトランザクションの、マイニング・ノード1000への直接的な投入を可能にしてもよい。
【0099】
[0124] トランザクション・プロセッサ1002は、候補ブロックを構築するように構成されたジャーナリング・ブロック・アセンブラ1030を更に含んでもよい。候補ブロックは、トランザクション・データ・ストア1004からの検証済みトランザクションの順序付けられたセットを含む。
図11をここで参照すると、候補ブロックの組み立て及び分配が図式的に示されている。
【0100】
[0125] マイニング・ノード1000は、所与の候補ブロック1040に関してPOWを探索するための演算を実行するように構成された複数のマイニング・ユニット1050を含むことが可能である。場合によっては、これらのマイニング・ユニット1050は、マイニング・ノード1000内にある。場合によっては、それらのマイニング・ユニット1050の一部又は全部は、マイニング・ノード1000がマイニング・プールのためのプール・コーディネータとして機能するような場合に、マイニング・ノード1000の外部にあってもよい。
【0101】
[0126] ジャーナリング・ブロック・アセンブラ1030は、トランザクションがトランザクション・プロセッサ1002によって受信され検証される際に、経時的に候補ブロック1040にトランザクションを追加するように構成されていてもよい。一部の実装において、これは、ジャーナリング・ブロック・アセンブラ1030が新しい又は更新された候補ブロックを周期的に作成する、という結果ことをもたらす可能性がある。幾つかの例では、新しい候補ブロックは、約1/10秒ごとに組み立てられる。
【0102】
[0127] マイニング・ユニット1050は、それが作業していた対象の候補ブロックに対するソリューションを発見することに失敗すると、新しい候補ブロックを要求する可能性がある。次いで、ジャーナリング・ブロック・アセンブラ1030は、その時点で組み立てられた候補ブロック1040をそれらに提供することによって応答することが可能である。従って、異なるマイニング・ユニット1050は、それらがジャーナリング・ブロック・アセンブラ1030から候補ブロック1040をいつ取得したかに応じて、候補ブロック1040の異なる「バージョン」に対して作業している可能性がある。各々の「バージョン」は、関連するcandidate_block識別子を有することが可能である。
【0103】
[0128] 同様に、いくらか非同期的な方法で、トランザクション・プロセッサ1002、及び場合によってはジャーナリング・ブロック・アセンブラ1030は、具体的には、更新された候補ブロック情報をSBTモジュール1006に提供することが可能である。次いで、SBTモジュール1006は、マイニング・ノード1000によってテストされる候補ブロックに関して他のマイニング・ノードを更新するために適切なアペンド・メッセージを構築する。場合によっては、SBTモジュール1006は、ジャーナリング・ブロック・アセンブラ1030から、フリー・ランニング・ベースで追加されたトランザクションに関する候補ブロック・データを受信することが可能であり、その到来する情報に基づいてアペンド・メッセージを構築することを、到来する情報が新しいcandidate_block識別子でマーキングされるときまで行うことができる。SBTモジュール1006が新しいcandidate_block識別子を検出すると、それは終了し、ドラフト・アペンド・メッセージを送信し、新しいcandidate_block識別子に関連付けられた新しいトランザクション・データを使用して、新しいものを開始する。このようにして、各アペンド・メッセージはcandidate_block識別子に対応し、これは以後の同期をより容易にする。
【0104】
[0129] マイニング・ユニット1050がPOWソリューションを特定すると、トランザクション・プロセッサ1002に通知し、トランザクション・プロセッサ1002は、次いで、POWソリューションが発見されたことをSBTモジュール1006に通知し、関連するcandidate_block識別子を提供する。マイニング・ユニット1050は、必ずしも全てが同期した方法で現在の候補ブロックに対して動作しているわけではないので、SBTモジュール1006は、生成及び送信されるアペンド・メッセージに関して、一部のマイニング・ユニット1050よりも先に動作している可能性がある、ということが認められるであろう。従って、SBTモジュール1006は、どのアペンド・メッセージが、解決されたcandidate_block識別子に一致するかを確認する。アペンド・メッセージはそれぞれ、テンプレート識別子、sb_template_id(ブロック時間に対して一定である)、及びシーケンス番号を有する、ということを想起されたい。SBTモジュール1006は、どのシーケンス番号がcandidate_block識別子に関連付けられているかを判定すると、同期が必要とされるかどうかを判定することができる。同期が必要とされる場合、それは、マイニング・ノード1000の各自のAOLリストを更新して、1つ以上のアペンド動作をロール・バックするように、他のマイニング・ノードに指示するアクションをとる。
【0105】
[0130] 一例では、同期ロール・バックは、ファイナライズ・メッセージ中のcandidate_blockに対応するシーケンス番号を、他のマイニング・ノードへ送ることによって実装されてもよい。次いで、他のマイニング・ノードは、解決された候補ブロックに一致するAOLに到達するために、後続のシーケンス番号を有するアペンド・メッセージに起因して発生した任意のアペンドを巻き戻す(unwind)ことが可能である。
【0106】
[0131] 別の例では、同期ロール・バックは、OP_DELETEメッセージ中で示された所定のインデックスの後に付加された全てのトランザクションの削除を指定するOP_DELETEオペレーションを、ファイナライズ・メッセージ中に挿入することによって実施されてもよい。
【0107】
[0132]
図12をここで参照すると、マイニング・ノードに関する候補ブロック更新及びSBT通信の並列プロセスが図式的に示されている。図の左側には、ジャーナリング・ブロック・アセンブラによって形成される候補ブロックの第1のバージョンがある。第1のバージョンは、アセンブラが、検証済みトランザクションを、候補ブロックに順序通りに追加する場合に形成される。これらのトランザクション、及び場合によっては候補ブロック内のそれらのインデックス(例えば、ロケーション/順序)は、SBTモジュールに中継される。そのトランザクション・データをSBTモジュールに渡すことは、候補ブロック識別子、例えば、candidate_block_idとともにタグ付けされたメッセージにおいて行われる。一例では、参照を容易にするために、識別子cb_idが指定されている。この簡略化された例では、cb_idは最初に0に設定され、その結果、SBTモジュールに中継される第1のバージョン内の各トランザクションは、cb_id=0を指定するメッセージ内にある。
【0108】
[0133] SBTモジュールは、受信したトランザクション・データを、ドラフト・アペンド・メッセージに、それが受信されたときに追加し、それによって、送信のためのアペンド・メッセージを構築する。アペンド・メッセージは、完全なTxIDではなく、CIDs,ECIDs,又はXCIDsを含む可能性があることが、認められるであろう。一部のケースでは、それは、IDX又はEIDXリファレンスを含む可能性があるが;一部の実装では、メッセージを特定のマイナーへ送信する前に、SBTモジュールが、CID,ECID,XCID,又はIDリファレンスを、IDX又はEIDXリファレンスと置換するかどうかを後に決定するために残される可能性がある。
【0109】
[0134] ある時点で、ジャーナリング・ブロック・アセンブラは、現在の候補ブロックの組み立てを完了する。これは、周期的に、例えば1/10秒ごとにトリガされてもよいし、或いは、新しいブロックに対するマイニング・ユニットからの要求に応答してトリガされてもよい。場合によっては、候補ブロックの初期バージョンは、ジャーナリング・ブロック・アセンブラが現在利用可能なトランザクションを使用してそれを完了すると速やかに組み立てられて送信され、その後、それらがトランザクション・プロセスで検証及び記憶される場合に、追加の検証されたトランザクションを追加し、また、候補ブロックをマイニングするためのマイニング・ユニットからの要求に応答して、発展する候補ブロックがマイニング・ユニットに送信されるたびに、候補ブロックの新しい「バージョン」がマーキングされる。
【0110】
[0135] 候補ブロック・バージョンがいつ変化するかをジャーナリング・ブロック・アセンブラがどのように決定するかに関係なく、それが変化するたびに、SBTモジュールに中継される後続のトランザクションは、更新された候補ブロック識別子でマーキングされる。図示の例では、インデックス位置0x05におけるトランザクションがSBTモジュールに中継される場合に、それはcb_id=1を含むメッセージ内にある。従って、そのメッセージを受信すると、SBTモジュールは、候補ブロック・バージョンが(0x00から0x01に)変化したと判断する。その結果、更に新しいトランザクションを追加することなく、ドラフト・アペンド・メッセージを終了し、それを送信する。次いで、次のシーケンス番号を有する新しいドラフト・アペンド・メッセージを開き、候補ブロック内のインデックス0x05にあるトランザクションを、新しいドラフト・アペンド・メッセージに追加する。また、候補ブロックの現在の状態を追跡するために、このマイニング・ノードのメモリに記憶されたローカルAOLを更新することが可能である。
【0111】
[0136] このプロセスは、図示されるように、候補ブロック識別子がインクリメントされたことを、ジャーナリング・ブロック・アセンブラからの中継されたトランザクションから発見するたびに、SBTモジュールがアペンド・メッセージを閉じて送信することに続く。マイニング・ユニットのうちの1つがソリューションを発見した場合、そのマイニング・ユニットは、ソリューションを発見した対象の候補ブロックの候補ブロック識別子とともに、そのソリューションをトランザクション・プロセッサに返す。これは必ずしも現在の候補ブロック識別子とは限らず、なぜなら、マイニング・ユニットに、作業対象の候補ブロック・バージョンが提供されて以来、1回以上更新されている可能性があるからである。従って、候補ブロック識別子を用いて、ジャーナリング・ブロック・アセンブラは、候補ブロックのどのバージョンが解決されているかを判定することができる。
【0112】
[0137] ソリューション及びそれに関連する候補ブロック識別子もまたSBTモジュールに中継される。次いで、SBTモジュールは、どのアペンド・メッセージが、解決された候補ブロックに関連付けられていたか、即ち、候補ブロック識別子がインクリメントされた場合に、どのアペンド・メッセージが送信されたかを決定する。例えば、図示されたプロセスを使用して、解決されたブロックの候補ブロック識別子がcb_id=1であったとすると、候補ブロックは、インデックス0x00から0x10にわたるトランザクションの順序付けられたセットを含む。次いで、SBTモジュールは、シーケンス番号0及び1を有するアペンド・メッセージは候補ブロックと一致すること、しかし、アペンド・メッセージ・シーケンス番号2及び下書き(但し、未送信)アペンド・メッセージ・シーケンス番号3は、解決された候補ブロックの一部ではないことを識別する。
【0113】
[0138] 従って、SBTモジュールは、ソリューションが発見されたことを他のマイニング・ノードに通知するSBTファイナライズ・メッセージ、例えばsbt_finalizeを準備して送信し、ソリューション・データ(例えば、ブロック・ヘッダ・データ、コインベース・トランザクションなど)を提供し、同期データを提供する。一例では、同期データは、解決された候補ブロックに対応する最後のアペンド・メッセージのシーケンス番号であってもよい。次いで、受信マイニング・ノードは、後のシーケンス番号を有するアペンド・メッセージを用いて、対応するAOLリストを更新したかどうかを確認し、それらのアペンドを巻き戻して、AOLリストが、解決された候補ブロックの内容と一致することを保証する。次いで、それらは、SBTファイナライズ・メッセージからのソリューション・データを使用して、完成したブロックを組み立て、ブロック・ソリューションを検証することができる。
【0114】
[0139] 代替的に、同期データは、前のアペンド動作を巻き戻すために、AOLリストから除去されるべきトランザクションを指定する1つ以上の明示的な削除オペコード(delete opcode)であってもよい。削除オペコードは、全ての後続のアペンドも削除されなければならないという理解の下で、削除されることを必要とする最も古いアペンドに対する単一のオペコードであってもよいし、或いは、削除オペコードは、AOLリストから削除されることを必要とする全てのトランザクション識別子に対して含まれていてもよい。
【0115】
[0140] 上記の例を再び参照すると、SBTモジュールが、アペンド・メッセージ2とドラフト・アペンド・メッセージ3は除去されるべきであると決定した場合、SBTモジュールは、シンプルにドラフト・アペンド・メッセージ3を破棄し、SBTファイナライズ・メッセージにおいてシーケンス番号1を指定する。次いで、受信側のマイニング・ノードは、アペンド・メッセージ・シーケンス番号2に基づいて、どのトランザクションが追加されたかを判定し、それらのトランザクション識別子をAOLリストから削除する。代替的に、SBTファイナライズ・メッセージは、それらのトランザクション識別子を削除するために適用されるべき削除オペレーションを含む。
【0116】
[0141] このように、ジャーナリング・ブロック・アセンブラは、SBTモジュールとは無関係に動作し、これは、別個のアペンド・メッセージ内のトランザクション識別子のブロッキングに関して、候補ブロック・バージョンに部分的に同期されるものであり、次いで、ソリューションの発見時にリモート・マイニング・ノードにおけるAOLリストの迅速かつ洗練された同期を可能にするものである。
【0117】
[0142]
図13をここで参照すると、マイニング・ノード内のトランザクション・プロセッサの動作の1つの例示的な方法1300がフローチャート形式で示されている。トランザクション・プロセッサの全ての動作又は機能がフローチャートに示されているわけではない、ということは認められるであろう。フローチャートに記載されている動作のうちの幾つかは、ジャーナリング・ブロック・アセンブラによって実行されてもよい。フローチャートに記載されている動作のうちの幾つかは、ジャーナリング・ブロック・アセンブラ以外のトランザクション・プロセッサの他の部分によって実行されてもよい。場合によっては、フローチャートに記載されている動作のうちの幾つかは、トランザクション・プロセッサ自体の外部のマイニング・ノードの構成要素によって実行されてもよい。
【0118】
[0143] 動作1302において、トランザクションが受信される。トランザクションは、ピア・ツー・ピア・ブロックチェーン・ネットワーク、マーチャントAPI接続、又はその他のものを介して受信されてもよい。トランザクション・プロセッサは、トランザクションを検証し、未確認のトランザクションのメモリープールに格納する。動作1304において、トランザクション・プロセッサは、トランザクションが現在の候補ブロックに含まれるべきであると決定する。その決定のための基礎は、異なる実装では異なっていてもよい。この場合、決定が行われ、トランザクションは、候補ブロック識別子iを有する現在の候補ブロックに付加される。トランザクションは、そのトランザクション識別子によって表現されるように、候補ブロック内のトランザクションの順序付けられたリスト内のインデックスnにおいて、候補ブロックに付加されてもよい。候補ブロック内のトランザクション識別子及びそのインデックスnは、動作1306において、関連する候補ブロック識別子iとともにSBTモジュールに送信される。
【0119】
[0144] 動作1308において、トランザクション・プロセッサは、そのマイニング・ユニットのうちの何れかによって、ソリューションが発見されたかどうかを評価する。何れかのマイニング・ユニットからのソリューションの通知は、それが解いた候補ブロックに関連する候補ブロック識別子やソリューションの詳細(例えば、ノンス、マークル・ルート等)を同伴して行われるであろう。このようなソリューションが発見された場合、トランザクション・プロセッサは、ソリューションの検証を開始することができ、動作1312に示されているように、そのソリューション及び関連する候補ブロック識別子に関してSBTモジュールに通知し、その結果、SBTモジュールは他のマイナーへ通知し、それらのAOLリストを同期させるプロセスを開始することができるようになる。そのようなソリューションが発見されなかった場合、トランザクション・プロセッサは、動作1310によって示されているように、外部のマイナーによるソリューションの通知が受信されたかどうかも評価する。その通知は、ピア・ツー・ピア・ブロックチェーン・ネットワークを介して、又はSBTネットワークを介して到来する可能性がある。トランザクション・プロセッサは、SBTモジュールによって維持される対応するAOLリストから、新たに発見されたブロックを構築することができ、また、新しいブロックを検証してそれが正当であることを確認する作業を行うであろう、ということが理解されるであろう。また、正当なブロックは、確認されたトランザクションのメモリープールをフラッシュする結果となる可能性がある。
【0120】
[0145] 外部又は内部のいずれかでソリューションが発見された場合、動作1314において、ブロック識別子及びインデックスがリセットされ、動作1316において、トランザクション・プロセッサによって、新しい候補ブロックが初期化される。次いで、プロセスは動作1302に戻り、新しい候補ブロックを、未確認トランザクションで満たすことを開始する。
【0121】
[0146] ソリューションが発見されなかった場合、動作1318において、トランザクション・プロセッサは、候補ブロック識別子をインクリメントすべきかどうかを決定することができる。上述したように、トランザクション・プロセッサは、固定期間ベースで、例えば1/10秒ごとに、候補ブロック・バージョン及び識別子を更新するように構成されていてもよい。場合によっては、トランザクション・プロセッサは、1つ以上のマイニング・ユニットからの候補ブロック要求に応答して、候補ブロック・バージョン及び識別子を更新するように構成されてもよい。更新が予定されていない場合、動作1319において、インデックスnがインクリメントされ、プロセスは動作1302に戻り、未確認トランザクションを現在の候補ブロックに追加し続ける。
【0122】
[0147] 候補ブロック・バージョン及びインデックスが更新される予定である場合、動作1320において、トランザクション・プロセッサは、マイニングされるべき1つ以上のマイニング・ユニットに、その時点の候補ブロックを送ることが可能であり、また、動作1302に戻って未確認トランザクションを現在の候補ブロックに追加し続ける前に、候補ブロック識別子iをインクリメントすることが可能である。
【0123】
[0148] マイニング・ノード内のSBTモジュールの動作の1つの例示的な方法1400が、
図14のフローチャートによって示されている。必ずしもSBTモジュールの全ての動作又は機能がフローチャートに示されているわけではない、といことが理解されるであろう。例えば、このフローチャートは、到来するアペンド・メッセージの取り扱い及び対応するAOLリストの構築、或いは、TxID圧縮識別子の生成若しくは解決プロセスを示していない。フローチャートに記載されている動作の幾つかは、SBTモジュールによって実行されてもよい。フローチャートに記載されている動作の幾つかは、SBTモジュール自体の外部のマイニング・ノードの他のコンポーネントによって実行されてもよい。
【0124】
[0149] 動作1402において、SBTモジュールは、データ構造をクリアすること、インデックスをゼロにすること、メモリを割り当てること等のような初期化を実行することが可能である。動作1402は、現在のブロックのためにマイニング・ノードによって使用されるSBテンプレート識別子及び他のパラメータを示す初期化メッセージを、他のマイニング・ノードへ送信することを更に含む可能性がある。SBTモジュールは、動作1404において、現在の候補ブロックに対するドラフト・アペンド・メッセージを開始する。アペンド・メッセージは、SBテンプレート識別子sb_template_idを含むことが可能であり、これは、他のマイニング・ノードから受信した任意の既存のSBテンプレート識別子、又は、存在するならばそれらの圧縮バージョン、と衝突しないように選択することが可能である。アペンド・メッセージは、初期に、0に設定される可能性があるシーケンス番号を更に含んでもよい。
【0125】
[0150] 動作1404において、SBTモジュールは、トランザクション識別子、トランザクションが付加された候補ブロック・バージョンを示す候補ブロック識別子(例えばcb_id)、及び、候補ブロック内のトランザクションの順序付けられたリスト内のトランザクションの位置を示すインデックスのようなトランザクション・データを、トランザクション・プロセッサから受信する。
【0126】
[0151] 動作1408において、SBTモジュールは、受信した候補ブロック識別子が、最後に受信した識別子以降にインクリメントされたかどうかを決定する。そうしていなかった場合、SBTモジュールは、受信したトランザクション識別子が現在の候補ブロック・バージョンに追加されていたことを知り、該当する場合には、対応するCID,ECID,XCIDなどを生成することに進み、動作1410によって示されるように、トランザクションに対するリファレンス(例えば、CID,ECID,XCID,ID,IDX,EIDXなど)をドラフト・アペンド・メッセージに追加する。
【0127】
[0152] 動作1416によって示されるように、ブロック・ソリューションが発見されていない場合、方法1400は、動作1406に戻り、トランザクション・プロセッサから受信される次のトランザクション・データを処理する。これは、動作1408において、トランザクション・プロセッサから受信されるトランザクション識別子が、インクリメントされた候補ブロック識別子、例えばcb_idに関連付けられていることを、SBTモジュールが判定するまで継続することが可能である。そのような場合、SBTモジュールは、次いで、動作1412によって示されるように、新しいトランザクション識別子を追加することなく、ドラフト・アペンド・メッセージを閉じて、それを他のマイニング・ノードへ送信する。次いで、オペレーション1414において、インクリメントされたシーケンス番号を有する新たなドラフト・アペンド・メッセージを開き、次いで、動作1410に進み、受信したトランザクション識別子(又はその圧縮された形式)を新しいドラフト・アペンド・メッセージに追加する。
【0128】
[0153] ブロック・ソリューションが動作1416において検出され、それが外部マイニング・ノードによって発見された場合、SBTモジュールは初期化動作1402に戻る。AOLリスト及びデータ構造は初期化し直され、新しい候補ブロックを構築するプロセスが新たに始まる。
【0129】
[0154] 動作1418によって示されているように、ソリューションがこのマイニング・ノードによって発見されたことを示すトランザクション・プロセッサによって、ソリューションの通知をSBTモジュールが受信した場合、SBTモジュールは、他のマイニング・ノードへ送信されるべきSBTファイナライズ・メッセージを準備する。特に、発見されたソリューションに関するトランザクション・プロセッサからの通知は、ソリューションに関連付けられた候補ブロック識別子に対するリファレンスを含む。動作1420において、SBTモジュールは、どのアペンド・メッセージが、候補ブロック識別子に関連付けられた候補ブロック内のトランザクションの最後に追加されたグループに対応するかを判定する。次いで、動作1422において、ブロック・ソリューション情報及び同期データを含むSBTファイナライズ・メッセージを、他のマイニング・ノードへ送信する。上述したように、一部の実装では、同期データは、解決された候補ブロックに関連する最後の有効なアペンド・メッセージのシーケンス番号を含んでいてもよい。一部の実装では、同期データは、解決された候補ブロックにそれを同期させるために、関連するAOLリストから除去されるべきトランザクション識別子を識別する削除命令を含むことが可能である。
【0130】
[0155]
図15をここで参照すると、本件出願の一例による簡略化されたマイニング・ノード1500がブロック図形式で示されている。マイニング・ノード1500は、1つ以上のマイクロプロセッサ、特定用途向け集積回路(ASIC)、マイクロコントローラ、又は同様のコンピュータ処理デバイスを含む可能性があるプロセッサ1502を含む。マイニング・ノード1500は、値、変数、及び一部の事例ではプロセッサ実行可能プログラム命令を記憶するための、永続的メモリ及び非永続的メモリを含む可能性のあるメモリ1504と、1つ以上のネットワーク・インターフェース1506とを更に含む可能性がある。
【0131】
[0156] マイニング・ノード1500は、プロセッサ実行可能命令を含むプロセッサ実行可能ブロックチェーン・アプリケーション1508を含んでもよく、プロセッサ実行可能命令は、実行されると、本件で説明された1つ以上の機能又は動作をプロセッサ1502に実行させる。
【0132】
[0157] 上記に提示された様々な実施形態は、単なる例であるに過ぎず、本件出願の範囲を限定することを決して意味していない。本件に記載されている技術革新の変形例は、当業者には明らかであり、そのような変形例は本件出願の意図される範囲内にある。特に、1つ以上の上述の例示的な実施形態から特徴を選択して、上記で明示的には説明されていないかもしれない特徴のサブ・コンビネーションを含む代替的な例示的な実施形態を作成することが可能である。更に、1つ以上の上述の例示的な実施形態からの特徴を選択して、組み合わせ、上記で明示的には説明されていないかもいしれない特徴のコンビネーションを含む代替的な例示的な実施形態を作成することが可能である。そのようなコンビネーション及びサブ・コンビネーションに適した特徴は、本件出願を全体として検討する際に当業者には容易に明らかになるであろう。明細書及び特許請求の範囲に記載される対象事項は、技術の適切な全ての変更をカバー及び包含するように意図している。
【国際調査報告】