IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ エヌチェーン ホールディングス リミテッドの特許一覧

特表2024-524689ブロックチェーンブロックおよびプルーフオブイグジスタンス
<>
  • 特表-ブロックチェーンブロックおよびプルーフオブイグジスタンス 図1
  • 特表-ブロックチェーンブロックおよびプルーフオブイグジスタンス 図2
  • 特表-ブロックチェーンブロックおよびプルーフオブイグジスタンス 図3A
  • 特表-ブロックチェーンブロックおよびプルーフオブイグジスタンス 図3B
  • 特表-ブロックチェーンブロックおよびプルーフオブイグジスタンス 図4
  • 特表-ブロックチェーンブロックおよびプルーフオブイグジスタンス 図5
  • 特表-ブロックチェーンブロックおよびプルーフオブイグジスタンス 図6
  • 特表-ブロックチェーンブロックおよびプルーフオブイグジスタンス 図7
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-07-05
(54)【発明の名称】ブロックチェーンブロックおよびプルーフオブイグジスタンス
(51)【国際特許分類】
   H04L 9/32 20060101AFI20240628BHJP
【FI】
H04L9/32 200Z
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2024501892
(86)(22)【出願日】2022-06-14
(85)【翻訳文提出日】2024-03-06
(86)【国際出願番号】 EP2022066090
(87)【国際公開番号】W WO2023285052
(87)【国際公開日】2023-01-19
(31)【優先権主張番号】2110119.1
(32)【優先日】2021-07-14
(33)【優先権主張国・地域又は機関】GB
(81)【指定国・地域】
(71)【出願人】
【識別番号】318001991
【氏名又は名称】エヌチェーン ライセンシング アーゲー
(74)【代理人】
【識別番号】100108453
【弁理士】
【氏名又は名称】村山 靖彦
(74)【代理人】
【識別番号】100110364
【弁理士】
【氏名又は名称】実広 信哉
(74)【代理人】
【識別番号】100133400
【弁理士】
【氏名又は名称】阿部 達彦
(72)【発明者】
【氏名】ジャック・オーウェン・デイヴィーズ
(72)【発明者】
【氏名】ミカエラ・ペティット
(72)【発明者】
【氏名】シガニー・ホヴ
(72)【発明者】
【氏名】クレイグ・スティーヴン・ライト
(57)【要約】
ブロックチェーンの候補ブロックを構築するコンピュータ実装方法であって、方法は、少なくとも初期ブロックチェーントランザクションおよび最終ブロックチェーントランザクションを備える、ブロックチェーントランザクションの順序付きシーケンスを取得することと、トランザクション表記を取得することであって、トランザクション表記が、i)それぞれのハッシュ値を取得するために最終ブロックチェーントランザクションをハッシュすること、およびii)それぞれの中間結果を取得するためにそれぞれのハッシュ値を順序付きシーケンスの中の先行するブロックチェーントランザクションと連結し、それぞれのハッシュ値を取得するためにそれぞれの中間結果をハッシュすることによって取得され、初期ブロックチェーントランザクションがそれぞれの中間結果と連結されるとともにそのそれぞれの中間結果がハッシュされてトランザクション表記を取得するまでii)が反復されることと、候補ブロックを構築することであって、候補ブロックがトランザクション表記を備えることとを備える。
【特許請求の範囲】
【請求項1】
ブロックチェーンの候補ブロックを構築するコンピュータにより実施される方法であって、
少なくとも初期ブロックチェーントランザクションおよび最終ブロックチェーントランザクションを備える、ブロックチェーントランザクションの順序付きシーケンスを取得するステップと、
トランザクション表記を取得するステップであって、
前記トランザクション表記が、
i)それぞれのハッシュ値を取得するために前記最終ブロックチェーントランザクションをハッシュするステップ、および
ii)それぞれの中間結果を取得するために前記それぞれのハッシュ値を前記順序付きシーケンスの中の先行するブロックチェーントランザクションと連結し、それぞれのハッシュ値を取得するために前記それぞれの中間結果をハッシュするステップによって取得され、
前記初期ブロックチェーントランザクションがそれぞれの中間結果と連結されるとともに前記それぞれの中間結果がハッシュされて前記トランザクション表記を取得するまでii)が反復される、ステップと、
前記候補ブロックを構築するステップであって、前記候補ブロックが前記トランザクション表記を備える、ステップと
を備える、コンピュータにより実施される方法。
【請求項2】
前記候補ブロックがブロックチェーントランザクションのセットを備える、請求項1に記載の方法。
【請求項3】
前記ブロックチェーンの中に含めるために前記候補ブロックをブロックチェーンネットワークにサブミットするステップを備える、請求項1または2に記載の方法。
【請求項4】
1人または複数のユーザに利用可能な前記トランザクション表記を作成するステップ
を備える、請求項1から3のいずれか一項に記載の方法。
【請求項5】
前記1人または複数のユーザに利用可能な前記トランザクション表記を作成するステップが、前記1人または複数のユーザに利用可能な前記トランザクション表記を送るステップを備える、請求項4に記載の方法。
【請求項6】
前記1人または複数のパーティに利用可能な前記トランザクション表記を作成するステップが、ターゲットブロックチェーントランザクションのプルーフオブイグジスタンスを求める要求の、検証するユーザからの受信に応答する、請求項4または5に記載の方法。
【請求項7】
前記1人または複数のユーザに利用可能なブロックチェーントランザクションの前記セットのうちの1つ、一部、または全部を作成するステップ
を備える、請求項4またはそれに従属するいずれか一項に記載の方法。
【請求項8】
前記1人または複数のユーザに利用可能なブロックチェーントランザクションの前記セットのうちの前記1つ、一部、または全部を作成するステップが、前記検証するユーザに利用可能な前記ターゲットブロックチェーントランザクションを作成するステップを備える、請求項6および7に記載の方法。
【請求項9】
1つまたは複数のブロックチェーンノードに利用可能なブロックチェーントランザクションの前記順序付きシーケンスのうちの1つまたは複数を作成するステップ
を備える、請求項1から8のいずれか一項に記載の方法。
【請求項10】
前記1つまたは複数のブロックチェーンノードに利用可能なブロックチェーントランザクションの前記順序付きシーケンスのうちの前記1つまたは複数を作成するステップが、ブロックチェーントランザクションの前記順序付きシーケンスのうちの前記1つまたは複数をブロックチェーンノードへ送るステップを備える、請求項9に記載の方法。
【請求項11】
各ハッシュ演算がSHAベースのハッシュ関数を使用して実行される、請求項1から10のいずれか一項に記載の方法。
【請求項12】
前記SHAベースのハッシュ関数がSHA256ハッシュ関数である、請求項11に記載の方法。
【請求項13】
前記候補ブロックが、前記ブロックチェーンの以前のブロックに前記ブロックをリンクするために使用されたブロックヘッダを備え、
前記ブロックヘッダが前記トランザクション表記を備える、請求項1から12のいずれか一項に記載の方法。
【請求項14】
前記ブロックヘッダが、前記以前のブロックの前記それぞれのブロックヘッダのハッシュ、および前記ブロックヘッダがハッシュされると前記ブロックヘッダの結果として得られたハッシュが所定の難解ターゲットを満たすようなナンス値を備える、請求項13に記載の方法。
【請求項15】
ブロックチェーントランザクションの前記順序付きシーケンスがコインベーストランザクションを備える、請求項1から14のいずれか一項に記載の方法。
【請求項16】
ブロックチェーントランザクションの前記順序付きシーケンスの各々にそれぞれのインデックスを割り当てるステップ
を備える、請求項1から15のいずれか一項に記載の方法。
【請求項17】
ブロックチェーントランザクションの前記セットの各々の前記それぞれのインデックスを前記候補ブロックの中に明示的に記録するステップ
を備える、請求項16に記載の方法。
【請求項18】
ブロックチェーントランザクションの前記順序付きシーケンスを取得するステップが、前記ブロックチェーントランザクションのうちの少なくともいくつかを1人または複数のユーザから受信するステップを備える、請求項1から17のいずれか一項に記載の方法。
【請求項19】
ブロックチェーントランザクションの前記順序付きシーケンスを取得するステップが、前記ブロックチェーントランザクションのうちの少なくともいくつかを前記ブロックチェーンネットワークの1つまたは複数のノードから受信するステップを備える、請求項1から18のいずれか一項に記載の方法。
【請求項20】
ブロックチェーンのブロックがターゲットブロックチェーントランザクションを備えるかどうかを決定するコンピュータにより実施される方法であって、
前記ブロックがトランザクション表記を備え、
前記トランザクション表記が、i)それぞれのハッシュ値を取得するために最終ブロックチェーントランザクションをハッシュすること、およびii)それぞれの中間結果を取得するために前記それぞれのハッシュ値を順序付きシーケンスの中の先行するブロックチェーントランザクションと連結し、それぞれのハッシュ値を取得するために前記それぞれの中間結果をハッシュすることによって取得され、
初期ブロックチェーントランザクションがそれぞれの中間結果と連結されるとともに前記それぞれの中間結果がハッシュされて前記トランザクション表記を取得するまでii)が反復され、前記方法が、
前記ターゲットブロックチェーントランザクションを取得するステップと、
前記ターゲットブロックチェーントランザクションに先行する、前記順序付きシーケンスの中の各ブロックチェーントランザクションを取得するステップと、
第1の候補ハッシュ値を取得するステップであって、
前記第1の候補ハッシュ値が、a)それぞれのハッシュ値を取得するために前記最終ブロックチェーントランザクションをハッシュするステップ、およびb)それぞれの中間結果を取得するために前記それぞれのハッシュ値を前記順序付きシーケンスの中の先行するブロックチェーントランザクションと連結し、それぞれのハッシュ値を取得するために前記それぞれの中間結果をハッシュするステップによって生成され、
前記順序付きシーケンスの中の前記ターゲットブロックチェーントランザクションに後続する前記ブロックチェーントランザクションがそれぞれの中間結果と連結されるとともに前記それぞれの中間結果がハッシュされて前記第1の候補ハッシュ値を取得するまでb)が反復される、ステップと、
a)前記ターゲットブロックチェーントランザクションを前記第1の候補ハッシュ値と連結することによってそれぞれの中間結果を取得するステップ、
b)それぞれのハッシュ値を取得するために前記それぞれの中間結果をハッシュするステップ、
c)それぞれの中間結果を取得するために前記それぞれのハッシュ値を前記順序付きシーケンスの中の先行するブロックチェーントランザクションと連結し、それぞれのハッシュ値を取得するために前記それぞれの中間結果をハッシュするステップによって、
候補トランザクション表記を取得し、
前記初期ブロックチェーントランザクションがそれぞれの中間結果と連結されるとともに前記それぞれの中間結果がハッシュされて前記候補トランザクション表記を取得するまでc)が反復される、ステップと、
前記トランザクション表記と前記候補トランザクション表記との比較に基づいて、前記ブロックが前記ターゲットブロックチェーントランザクションを備えるかどうかを決定するステップと
を備える、コンピュータにより実施される方法。
【請求項21】
前記ターゲットブロックチェーントランザクションを取得するステップが、前記ブロックチェーンネットワークの1つまたは複数のノードから前記ターゲットブロックチェーントランザクションを取得するステップを備える、請求項20またはそれに従属するいずれか一項に記載の方法。
【請求項22】
前記ターゲットブロックチェーントランザクションを取得するステップが、前記ターゲットブロックチェーントランザクションを1人または複数のユーザから取得するステップを備える、請求項20またはそれに従属するいずれか一項に記載の方法。
【請求項23】
前記ターゲットブロックチェーントランザクションに先行する、前記順序付きシーケンスの中の各ブロックチェーントランザクションを取得するステップが、前記ブロックチェーンネットワークの1つもしくは複数のノード、および/または1人もしくは複数のユーザから、前記ターゲットブロックチェーントランザクションに先行する、前記順序付きシーケンスの中の各ブロックチェーントランザクションを取得するステップを備える、請求項20またはそれに従属するいずれか一項に記載の方法。
【請求項24】
前記第1の候補ハッシュ値を取得するステップが、前記ブロックチェーンネットワークの1つまたは複数のノードから前記第1の候補ハッシュ値を取得するステップを備える、請求項20またはそれに従属するいずれか一項に記載の方法。
【請求項25】
前記ブロックチェーンネットワークの1つまたは複数のノードから前記トランザクション表記を取得するステップを備える、請求項20またはそれに従属するいずれか一項に記載の方法。
【請求項26】
前記ターゲットブロックチェーントランザクションのプルーフオブイグジスタンスを求める要求を前記1つまたは複数のノードへ送信するステップを備え、
前記トランザクション表記を取得するステップが、前記要求の前記送信に応答する、請求項25に記載の方法。
【請求項27】
コンピュータ機器であって、
1つまたは複数のメモリユニットを備えるメモリと、
1つまたは複数の処理ユニットを備える処理装置と
を備え、前記メモリが、前記処理装置上で動作するように構成されたコードを記憶し、前記コードが、前記処理装置上で請求項1から26のいずれか一項に記載の方法を実行するように構成される、コンピュータ機器。
【請求項28】
コンピュータ可読ストレージ上に組み込まれ、1つまたは複数のプロセッサ上で動作するときに請求項1から26のいずれか一項に記載の方法を実行するように構成された、コンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、ブロックチェーンブロックを構築する方法、およびブロックチェーンブロックの中にターゲットブロックチェーントランザクションが存在するかどうかを決定するための証明を実行する方法に関する。
【背景技術】
【0002】
ブロックチェーンとは、ある形態の分散型データ構造を指し、ブロックチェーンの複製コピーが、分散ピアツーピア(P2P)ネットワーク(以下で「ブロックチェーンネットワーク」と呼ばれる)の中の複数のノードの各々において維持され広く公表される。ブロックチェーンはデータのブロックのチェーンを備え、各ブロックは1つまたは複数のトランザクションを備える。いわゆる「コインベーストランザクション」以外の各トランザクションは、1つまたは複数のコインベーストランザクションに戻る1つまたは複数のブロックに広がることがある、シーケンスの中の先行するトランザクションを戻って指し示す。コインベーストランザクションは以下でさらに説明される。ブロックチェーンネットワークにサブミットされるトランザクションは、新たなブロックの中に含められる。新たなブロックは、しばしば、「マイニング」と呼ばれる、プロセスによって作成され、そうしたプロセスは、複数のノードの各々が競合して「プルーフオブワーク」を実行すること、すなわち、ブロックチェーンの新たなブロックの中に含められるのを待っている、順序付けおよび有効化された保留トランザクションの規定されたセットの表記に基づいて、暗号パズルを解くことを伴う。いくつかのノードにおいてブロックチェーンがプルーニングされてよいこと、およびブロックの発行が単なるブロックヘッダの発行を通じて達成され得ることに留意されたい。
【0003】
ブロックチェーンにおけるトランザクションは、以下の目的、すなわち、デジタル資産(すなわち、いくつかのデジタルトークン)を運ぶこと、仮想化された台帳もしくはレジストリの中のエントリのセットを順序付けること、タイムスタンプエントリを受信および処理すること、ならびに/またはインデックスポインタを時間順序付けすることのうちの、1つまたは複数のために使用されてよい。ブロックチェーンはまた、ブロックチェーンの上部に追加の機能性を階層化するために活用され得る。たとえば、ブロックチェーンプロトコルは、追加のユーザデータ、またはトランザクションの中のデータへのインデックスの記憶を可能にし得る。単一のトランザクション内に記憶され得る最大データ容量に対して、あらかじめ指定された限定がなく、したがって、ますます複雑なデータが組み込まれ得る。たとえば、このことは、ブロックチェーンの中の電子文書、またはオーディオもしくはビデオデータを記憶するために使用されてよい。
【0004】
ブロックチェーンネットワークのノード(しばしば、「マイナー」と呼ばれる)は、後でより詳細に説明される分散トランザクション登録および検証プロセスを実行する。要約すれば、このプロセス中、ノードはトランザクションを有効化し、ノードがそれに対して有効なプルーフオブワーク解を識別することを試みるブロックテンプレートの中に、トランザクションを挿入する。有効な解が見つけられると、新たなブロックがネットワークの他のノードに伝搬され、したがって、各ノードがブロックチェーン上に新たなブロックを記録することを可能にする。トランザクションをブロックチェーンの中に記録させるために、ユーザ(たとえば、ブロックチェーンクライアントアプリケーション)は、伝搬されるべきネットワークのノードのうちの1つへトランザクションを送る。トランザクションを受信するノードは、有効化されたトランザクションを新たなブロックの中に組み込むプルーフオブワーク解を見つけるために競争してよい。各ノードは、トランザクションが有効となるための1つまたは複数の条件を含む、同じノードプロトコルを執行するように構成される。無効なトランザクションは、伝搬されることもブロックの中に組み込まれることもない。トランザクションが有効化され、それによって、ブロックチェーン上に受け入れられることを想定すると、その場合、(任意のユーザデータを含む)トランザクションは、不変の公的な記録としてブロックチェーンネットワークの中のノードの各々において、そのように登録およびインデックス付けされたままである。
【0005】
プルーフオブワークパズルを首尾よく解いて最新のブロックを作成したノードは、通常、「コインベーストランザクション」と呼ばれる新規トランザクションを用いて報酬が与えられ、新規トランザクションは、ある金額のデジタル資産、すなわち、いくつかのトークンを分配する。無効なトランザクションの検出および拒絶は、ネットワークのエージェントとして働く競合するノードのアクションによって執行され、不正行為を報告および遮断することが奨励される。情報の広範な発行は、ユーザがノードの実行を継続的に監査することを可能にする。単なるブロックヘッダの発行が、ブロックチェーンの進行中の完全性を参加者が保証することを可能にする。
【0006】
「出力ベースの」モデル(UTXOベースのモデルと呼ばれることがある)では、所与のトランザクションのデータ構造は、1つまたは複数の入力および1つまたは複数の出力を備える。任意の消費可能な出力は、トランザクションの前進しているシーケンスから導出可能な、ある金額のデジタル資産を指定する要素を備える。消費可能な出力は、UTXO(「未消費トランザクション出力」)と呼ばれることがある。出力は、出力の将来の償還に対する条件を指定するロックスクリプトをさらに備えてよい。ロックスクリプトは、デジタルトークンまたはデジタル資産を有効化および移転するために必要な条件を規定する述語である。(コインベーストランザクション以外の)トランザクションの各入力は、先行するトランザクションの中のそのような出力へのポインタ(すなわち、参照)を備え、指し示された出力のロックスクリプトをロック解除するためのロック解除スクリプトをさらに備えてよい。そのため、1対のトランザクションを考慮に入れると、それらを第1のトランザクションおよび第2のトランザクション(または「ターゲット」トランザクション)と呼ぶ。第1のトランザクションは、ある金額のデジタル資産を指定し、および出力をロック解除することの1つまたは複数の条件を規定するロックスクリプトを備える、少なくとも1つの出力を備える。第2の、ターゲットトランザクションは、第1のトランザクションの出力へのポインタ、および第1のトランザクションの出力をロック解除するためのロック解除スクリプトを備える、少なくとも1つの入力を備える。
【0007】
そのようなモデルでは、第2の、ターゲットトランザクションが、ブロックチェーンの中で伝搬および記録されるべきブロックチェーンネットワークへ送られるとき、各ノードにおいて適用される、有効性に対する基準のうちの1つは、第1のトランザクションのロックスクリプトの中で規定された1つまたは複数の条件のすべてをロック解除スクリプトが満たすことである。別の基準は、第1のトランザクションの出力が別のもっと前の有効なトランザクションによってすでに償還されていないことである。これらの条件のうちのいずれかに従って無効なターゲットトランザクションを見つける任意のノードは、それを(有効だが、場合によっては無効なトランザクションを登録するためのトランザクションとして)伝搬させることも、ブロックチェーンの中に記録されるべき新たなブロックの中にそれを含めることもしない。
【0008】
代替のタイプのトランザクションモデルは、勘定ベースのモデルである。この場合、各トランザクションは、過去のトランザクションのシーケンスの中の先行するトランザクションのUTXOを戻って参照することによるのではなく、むしろ完全な勘定残高への参照によって、移転されるべき金額を規定する。すべての勘定の現在の状態は、別個のノードによってブロックチェーンに記憶され、絶えず更新される。
【発明の概要】
【発明が解決しようとする課題】
【0009】
ビットコイン、ライトコイン、およびイーサリアムなどのブロックチェーンの古典的な実装形態では、その実装形態の少なくともいくつかの態様において使用されるマークルツリーを見つけることが一般的である。ブロックチェーン設計におけるマークルツリーの普及は、これらの設計が一般にシステムにおけるトランザクションスループットを最大化することを目指すという事実にあるものとされ得る。したがって、マークルプルーフオブイグジスタンスを算出する計算複雑度が、マークルツリーによって表されるデータセットの中の要素の総数nとともにO(log n)としてスケーリングするので、これらのシステムにおけるコンパクトなデータ表記に対するマークルツリーの使用は自然な選択である。ブロックチェーンシステムの場合には、nは、ブロックチェーンの単一のブロックの中に含まれるトランザクションの個数として理解することができ、定常状態を想定すると、ブロックチェーンのトランザクションスループットに対応する定数として理解することができる。多数の要素に対するマークルツリーの構築はまた、2分木のレイヤの数もO(log n)としてスケーリングすることを仮定すれば、極めて効率的であるものと見なされる。
【0010】
反対に、nが小さいことを意図される代替のブロックチェーンシステムへのマークルツリーの適用可能性は著しく異なる。事実上、設計によってブロック当りのnが小さいブロックチェーンの場合、ブロックの中のトランザクションのセットを表すためのマークルツリーの使用は、マークルツリー自体の計算に起因して不必要な計算オーバーヘッドを加えることがある。この問題は、この追加のオーバーヘッドがブロックごとに遭遇され、そのことが、ブロックチェーン検証者の全体的な動作上の消耗を大きくするので、ブロック創作(block production)の頻度fが極めて大きい(たとえば、10分よりもずっと大きい)そのようなブロックチェーンにおいてさらに悪化させられることがある。
【0011】
したがって、代替形態、すなわち、ブロックチェーンのブロックを構成するトランザクションのセットのもっと効率的な表記を使用することが望ましいことになる。もっと効率的なトランザクション表記は、小さいnと大きいfの両方を伴うブロックチェーンシステムのための基礎として使用され得る低負担ブロックチェーンアーキテクチャをもたらすことになる。もっと効率的なトランザクション表記は、検証者とユーザの両方のための設計によってブロックチェーンが「低負担」であるという特性を達成することになる。
【課題を解決するための手段】
【0012】
本明細書で開示する一態様によれば、ブロックチェーンの候補ブロックを構築するコンピュータ実装方法が提供され、方法は、少なくとも初期ブロックチェーントランザクションおよび最終ブロックチェーントランザクションを備える、ブロックチェーントランザクションの順序付きシーケンスを取得することと、トランザクション表記を取得することであって、トランザクション表記が、i)それぞれのハッシュ値を取得するために最終ブロックチェーントランザクションをハッシュすること、およびii)それぞれの中間結果を取得するためにそれぞれのハッシュ値を順序付きシーケンスの中の先行するブロックチェーントランザクションと連結し、それぞれのハッシュ値を取得するためにそれぞれの中間結果をハッシュすることによって取得され、初期ブロックチェーントランザクションがそれぞれの中間結果と連結されるとともにそのそれぞれの中間結果がハッシュされてトランザクション表記を取得するまでii)が反復されることと、候補ブロックを構築することであって、候補ブロックがトランザクション表記を備えることとを備える。
【0013】
ブロックコンストラクタ、またはブロックプロデューサ(たとえば、ブロックチェーンノード)は、たとえば、他のブロックプロデューサのユーザから、トランザクションのセットを取得する。トランザクションは、新たなブロックチェーンブロックの中に配置されることを待っているトランザクションのプールから取られてよい。トランザクションセットを表すためにマークルルートを使用するのではなく、ブロックプロデューサは、「ネストされたハッシュ値」とともに使用してトランザクションセットを表す。ネストされたハッシュ値は、トランザクションをハッシュすること、その結果を別のトランザクションと連結すること、その結合をハッシュすること、およびトランザクションセットの中の各トランザクションがハッシュされるまで同じプロセスを反復することによって取得される、ハッシュ値に対するラベルである。ハッシュの「ネスト」に基づいて生成されるという意味でハッシュ値は「ネスト」され、ここで、各ハッシュは以前のハッシュに基づく。トランザクションセットは、トランザクションの順序付きシーケンスを備える。シーケンスの中の最終トランザクションが最初にハッシュされ、次いで、得られたハッシュ値が最後から2番目のトランザクションと結合される。ハッシュおよび連結するプロセスは、シーケンスの中の初期トランザクションがハッシュされるまで反復される。各ハッシュ値は、ハッシュ関数のSHAファミリー、たとえば、SHA-256のうちの1つまたは複数の中にデータ(たとえば、トランザクション、またはハッシュ値と連結されたトランザクション)を入力することによって生成されてよい。トランザクションのセットは、ブロックプロデューサによって(たとえば、各トランザクションにそれぞれのインデックスを割り当てることによって)順序付きシーケンスの中に配置されてよく、または各トランザクションは、トランザクションを取得する点においてそれぞれのインデックスに関連付けられてもよい。候補ブロックの中にトランザクション表記を含めて、候補ブロックは、次いで、ネットワークのノードによる有効化のためにブロックチェーンネットワークにサブミットされてよい。
【0014】
本明細書で開示する一態様によれば、ブロックチェーンのブロックがターゲットブロックチェーントランザクションを備えるかどうかを決定するコンピュータ実装方法が提供され、ブロックはトランザクション表記を備え、トランザクション表記は、i)それぞれのハッシュ値を取得するために最終ブロックチェーントランザクションをハッシュすること、およびii)それぞれの中間結果を取得するためにそれぞれのハッシュ値を順序付きシーケンスの中の先行するブロックチェーントランザクションと連結し、それぞれのハッシュ値を取得するためにそれぞれの中間結果をハッシュすることによって取得され、初期ブロックチェーントランザクションがそれぞれの中間結果と連結されるとともにそのそれぞれの中間結果がハッシュされてトランザクション表記を取得するまでii)が反復され、方法は、ターゲットブロックチェーントランザクションを取得することと、ターゲットブロックチェーントランザクションに先行する、順序付きシーケンスの中の各ブロックチェーントランザクションを取得することと、第1の候補ハッシュ値を取得することであって、第1の候補ハッシュ値が、a)それぞれのハッシュ値を取得するために最終ブロックチェーントランザクションをハッシュすること、およびb)それぞれの中間結果を取得するためにそれぞれのハッシュ値を順序付きシーケンスの中の先行するブロックチェーントランザクションと連結し、それぞれのハッシュ値を取得するためにそれぞれの中間結果をハッシュすることによって生成され、順序付きシーケンスの中のターゲットブロックチェーントランザクションに後続するブロックチェーントランザクションがそれぞれの中間結果と連結されるとともにそのそれぞれの中間結果がハッシュされて第1の候補ハッシュ値を取得するまでb)が反復されることと、a)ターゲットブロックチェーントランザクションを第1の候補ハッシュ値と連結することによってそれぞれの中間結果を取得すること、b)それぞれのハッシュ値を取得するためにそれぞれの中間結果をハッシュすること、c)それぞれの中間結果を取得するためにそれぞれのハッシュ値を順序付きシーケンスの中の先行するブロックチェーントランザクションと連結し、それぞれのハッシュ値を取得するためにそれぞれの中間結果をハッシュすることによって、候補トランザクション表記を取得し、初期ブロックチェーントランザクションがそれぞれの中間結果と連結されるとともにそのそれぞれの中間結果がハッシュされて候補トランザクション表記を取得するまでC)が反復されることと、トランザクション表記と候補トランザクション表記との比較に基づいて、ブロックがターゲットブロックチェーントランザクションを備えるかどうかを決定することとを備える。
【0015】
本開示によれば、ネストされたハッシュ値は、ブロックチェーンブロックを構成するトランザクションのセットの一部としてトランザクションが存在するかどうかを証明するために使用され得る。検証するユーザは、ブロックチェーン上にターゲットトランザクション(たとえば、異なるユーザから受信されるトランザクション)が存在するかどうかを決定することを望む。検証するユーザは、所与のブロック、すなわち、ターゲットトランザクションを含むとされているブロックに対して、ターゲットトランザクションおよびトランザクション表記(ネストされたハッシュ値)を取得する。検証するユーザはまた、トランザクション表記がそれに基づくトランザクションの順序付きシーケンスの中でターゲットトランザクションの前に位置するトランザクションのセットを取得する。加えて、検証するユーザは候補ハッシュ値を取得する。候補ハッシュ値は、順序付きシーケンスの中でターゲットトランザクションの直後に位置するトランザクションまでトランザクションをハッシュおよび連結するプロセスを反復することによって生成されるものと断言される。このデータを用いて、検証するユーザは、ターゲットトランザクションを候補ハッシュ値と連結すること、その結果をハッシュすること、および順序付きシーケンスの中の初期トランザクションがハッシュされるまでそのプロセスを反復することによって、候補トランザクション表記を生成することができる。候補トランザクション表記がターゲットブロックからのトランザクション表記に整合する場合、検証するユーザは、ターゲットトランザクションがそのトランザクション表記によって表され、したがって、そのトランザクション表記を備えるブロックの中に含まれることを、確信することができる。
【0016】
本開示の実施形態の理解を支援するために、またそのような実施形態がどのように効果に注ぎ込まれ得るのかを示すために、単に例として添付図面への参照が行われる。
【図面の簡単な説明】
【0017】
図1】ブロックチェーンを実施するためのシステムの概略ブロック図である。
図2】ブロックチェーンの中に記録されてよいトランザクションのいくつかの例を概略的に示す図である。
図3A】クライアントアプリケーションの概略ブロック図である。
図3B図3Aのクライアントアプリケーションによって提示されてよい例示のユーザインターフェースの概略モックアップである。
図4】トランザクションを処理するためのいくつかのノードソフトウェアの概略ブロック図である。
図5】例示のマークルツリーを概略的に示す図である。
図6】マークルパスを使用するマークルルートによって表されるマークルツリーの中のデータブロックのマークルプルーフオブイグジスタンスを概略的に示す図である。
図7】説明する実施形態を実施するための例示のシステムを概略的に示す図である。
【発明を実施するための形態】
【0018】
1. 例示のシステム概要
図1は、ブロックチェーン150を実施するための例示のシステム100を示す。システム100は、パケット交換ネットワーク101、通常、インターネットなどのワイドエリアインターネットワークを備えてよい。パケット交換ネットワーク101は、パケット交換ネットワーク101内でピアツーピア(P2P)ネットワーク106を形成するように構成されてよい複数のブロックチェーンノード104を備える。図示しないが、ブロックチェーンノード104は、ほぼ完全グラフとして構成されてよい。したがって、各ブロックチェーンノード104は、他のブロックチェーンノード104に強度に接続される。
【0019】
各ブロックチェーンノード104は、ノード104のうちの様々なノード104が異なるピアに属する、ピアのコンピュータ機器を備える。各ブロックチェーンノード104は、1つまたは複数のプロセッサ、たとえば、1つまたは複数の中央処理ユニット(CPU)、アクセラレータプロセッサ、特定用途向けプロセッサ、および/またはフィールドプログラマブルゲートアレイ(FPGA)、ならびに特定用途向け集積回路(ASIC)などの他の機器を備える処理装置を備える。各ノードはまた、メモリ、すなわち、1つまたは複数の非一時的コンピュータ可読媒体の形態のコンピュータ可読ストレージを備える。メモリは、1つまたは複数のメモリ媒体、たとえば、ハードディスクなどの磁気媒体、ソリッドステートドライブ(SSD)、フラッシュメモリ、もしくはEEPROMなどの電子媒体、および/または光ディスクドライブなどの光媒体を採用する、1つまたは複数のメモリユニットを備えてよい。
【0020】
ブロックチェーン150は、データ151のブロックのチェーンを備え、ブロックチェーン150のそれぞれのコピーは、分散ネットワークまたはブロックチェーンネットワーク106の中の複数のブロックチェーンノード104の各々において維持される。上述のように、ブロックチェーン150のコピーを維持することとは、必ずしも全体的にブロックチェーン150を記憶することを意味するとは限らない。代わりに、ブロックチェーン150は、各ブロックチェーンノード150が各ブロック151のブロックヘッダ(以下で説明する)を記憶する限り、データからプルーニングされてよい。チェーンの中の各ブロック151は、1つまたは複数のトランザクション152を備え、トランザクションとは、このコンテキストでは、ある種類のデータ構造を指す。そのデータ構造の性質は、トランザクションモデルまたはトランザクション方式の一部として使用されるトランザクションプロトコルのタイプに依存する。所与のブロックチェーンは、全体にわたって、ある特定のトランザクションプロトコルを使用する。1つの一般のタイプのトランザクションプロトコルでは、各トランザクション152のデータ構造は、少なくとも1つの入力および少なくとも1つの出力を備える。各出力は、特性としてデジタル資産の数量を表す金額を指定し、特性の一例は、出力が暗号学的にロックされるユーザ103である(ロック解除され、それによって、償還すなわち消費されるために、そのユーザの署名または他の解を必要とする)。各入力は、先行するトランザクション152の出力を戻って指し示し、それによって、トランザクションをリンクする。
【0021】
各ブロック151はまた、ブロック151への連続した順序を規定するように、チェーンの中の以前に作成されたブロック151を戻って指し示すブロックポインタ155を備える。(コインベーストランザクション以外の)各トランザクション152は、トランザクションのシーケンスへの順序を規定するように以前のトランザクションに戻るポインタを備える(トランザクション152のシーケンスが分岐することを許容されることに注意されたい)。ブロック151のチェーンは、チェーンの中の最初のブロックであったジェネシスブロック(Gb)153まで戻って完全に進む。チェーン150の中で初期の1つまたは複数の元のトランザクション152は、先行するトランザクションではなくジェネシスブロック153を指し示した。
【0022】
ブロックチェーンノード104の各々は、トランザクション152を他のブロックチェーンノード104に転送し、それによって、ネットワーク106全体にわたってトランザクション152を伝搬させるように構成される。各ブロックチェーンノード104は、ブロック151を作成するように、および同じブロックチェーン150のそれぞれのコピーをそれらのそれぞれのメモリの中に記憶するように構成される。各ブロックチェーンノード104はまた、ブロック151の中に組み込まれるのを待っているトランザクション152の順序付きセット(すなわち、「プール」)154を維持する。順序付きプール154は、しばしば、「メモリプール(mempool)」と呼ばれる。本明細書におけるこの用語は、任意の特定のブロックチェーン、プロトコル、またはモデルに限定することを意図しない。それは、有効としてノード104が受け入れており、同じ出力を消費することを試みている任意の他のトランザクションをノード104が受け入れないように義務付けられるべき、トランザクションの順序付きセットを指す。
【0023】
所与の現在のトランザクション152jにおいて、その(または、各)入力は、トランザクションのシーケンスの中の先行するトランザクション152iの出力を参照するポインタを備え、現在のトランザクション152jの中でこの出力が償還すなわち「消費」されることになることを指定する。概して、先行するトランザクションは、順序付きセット154または任意のブロック151の中の任意のトランザクションであり得る。先行するトランザクション152iは、現在のトランザクション152jが作成され、さらにはネットワーク106へ送られる時間において、必ずしも存在することを必要とするとは限らないが、現在のトランザクションが有効となるために、先行するトランザクション152iが存在し有効化される必要がある。したがって、本明細書における「先行する」とは、必ずしも時間的なシーケンスの中で作成するかまたは送ることの時間とは限らない、ポインタによってリンクされた、論理シーケンスの中の先行要素(predecessor)を指し、したがって、そのことは、順序が狂ってトランザクション152i、152jが作成されるかまたは送られることを必ずしも除外するとは限らない(オーファン(orphan)トランザクションにおける以下の説明を参照)。先行するトランザクション152iは、先行者(antecedent)トランザクションまたは先行要素トランザクションと等しく呼ばれることがある。
【0024】
現在のトランザクション152jの入力はまた、入力許可、たとえば、先行するトランザクション152iの出力がロックされるユーザ103aの署名を備える。今度は、現在のトランザクション152jの出力が、新たなユーザまたはエンティティ103bに暗号学的にロックされ得る。したがって、現在のトランザクション152jは、先行するトランザクション152iの入力の中で規定された金額を、現在のトランザクション152jの出力の中で規定されるような新たなユーザまたはエンティティ103bに移転することができる。場合によっては、トランザクション152は、複数のユーザまたはエンティティの間で入力金額を分割するために複数の出力を有してよい(そのうちの1つは釣銭を出すための元のユーザまたはエンティティ103aであり得る)。場合によっては、トランザクションはまた、1つまたは複数の先行するトランザクションの複数の出力からの金額を一緒に集め、および現在のトランザクションの1つまたは複数の出力を再配布するために、複数の入力を有することができる。
【0025】
ビットコインなどの出力ベースのトランザクションプロトコルによれば、個々のユーザまたは団体などのパーティ103が、(手作業で、またはパーティによって採用される自動化プロセスによってのいずれかで)新規トランザクション152jを制定することを望むとき、制定するパーティは、それのコンピュータ端末102から受信者へ新規トランザクションを送る。制定するパーティまたは受信者は、最終的にこのトランザクションをネットワーク106の(今日では一般にサーバまたはデータセンターであるが、原理上は他のユーザ端末であり得る)ブロックチェーンノード104のうちの1つまたは複数へ送る。新規トランザクション152jを制定するパーティ103が、ブロックチェーンノード104のうちの1つまたは複数へトランザクションを直接送る場合があり、またいくつかの例では、受信者へ送らない場合があることも、除外されない。トランザクションを受信するブロックチェーンノード104は、ブロックチェーンノード104の各々において適用されるブロックチェーンノードプロトコルに従って、トランザクションが有効であるかどうかをチェックする。ブロックチェーンノードプロトコルは、通常、新規トランザクション152jにおける暗号署名が、予想される署名に整合することを、ブロックチェーンノード104がチェックすることを必要とし、そのことは、トランザクション152の順序付きシーケンスの中の以前のトランザクション152iに依存する。そのような出力ベースのトランザクションプロトコルでは、このことは、新規トランザクション152jの入力の中に含まれる、パーティ103の暗号署名または他の許可が、新規トランザクションが割り当てる、先行するトランザクション152iの出力の中で規定される条件に整合することを、チェックすることを備えてよく、この条件は、通常、新規トランザクション152jの入力の中の暗号署名または他の許可が、新規トランザクションの入力がリンクされる以前のトランザクション152iの出力をロック解除することを、少なくともチェックすることを備える。その条件は、少なくとも部分的には、先行するトランザクション152iの出力の中に含まれるスクリプトによって規定されてよい。代替として、それは、ブロックチェーンノードプロトコル単体によって単に固定され得るか、またはこれらの組合せに起因することができる。どちらにしても、新規トランザクション152jが有効である場合、ブロックチェーンノード104は、それをブロックチェーンネットワーク106の中の1つまたは複数の他のブロックチェーンノード104に転送する。これらの他のブロックチェーンノード104は、同じブロックチェーンノードプロトコルに従って同じテストを適用し、そのため、新規トランザクション152jを1つまたは複数のさらなるノード104に転送する等々である。このようにして、新規トランザクションは、ブロックチェーンノード104のネットワーク全体にわたって伝搬される。
【0026】
出力ベースのモデルでは、所与の出力(たとえば、UTXO)が割り当てられる(たとえば、消費される)かどうかの規定は、それがまだ、前方に位置する別のトランザクション152jの入力によって、ブロックチェーンノードプロトコルに従って有効に償還されているかどうかである。トランザクションが有効となるための別の条件は、それが償還することを試みる先行するトランザクション152iの出力が、すでに別のトランザクションによって償還されていないことである。再び、有効でない場合、トランザクション152jは、(無効としてフラグ付けされ警告のために伝搬されない限り)伝搬されないか、またはブロックチェーン150の中に記録されない。このことは、同じトランザクションの出力を取引人が2回以上割り当てようとする二重消費に対して保護する。勘定ベースのモデルは、一方、勘定残高を維持することによって二重消費に対して保護する。再び、トランザクションの規定された順序があるので、任意の1つの時間において勘定残高は規定された単一の状態を有する。
【0027】
トランザクションを有効化することに加えて、ブロックチェーンノード104はまた、通常はマイニングと呼ばれるプロセスの中でトランザクションのブロックを作成すべき最初となるために競争し、マイニングは「プルーフオブワーク」によってサポートされる。ブロックチェーンノード104において、ブロックチェーン150上に記録されるブロック151の中にまだ出現していない有効なトランザクションの順序付きプール154に、新規トランザクションが加えられる。ブロックチェーンノードは、次いで、暗号パズルを解くことを試みることによって、トランザクション154の順序付きセットからトランザクション152の新たな有効なブロック151を組み立てるために競争する。通常、このことは、ナンスが保留トランザクション154の順序付きプールの表記に連結およびハッシュされると、次いで、ハッシュの出力が所定の条件を満たすような、「ナンス」値を求めて探索することを備える。たとえば、所定の条件とは、ハッシュの出力がいくつかの既定の数の先頭に立つ0を有することであってよい。これがある特定のタイプのプルーフオブワークパズルにすぎず、他のタイプが除外されないことに留意されたい。ハッシュ関数の特性とは、それの入力に関して予測できない出力をハッシュ関数が有することである。したがって、この探索は、ブルートフォースのみによって実行されることが可能であり、したがって、パズルを解こうとしている各ブロックチェーンノード104において、かなりの量の処理リソースを費やす。
【0028】
パズルを解くべき第1のブロックチェーンノード104は、このことをネットワーク106に告知し、証明として解を提供し、その証明は、次いで、ネットワークの中の他のブロックチェーンノード104によって容易にチェックされ得る(ハッシュに解が与えられると、その解がハッシュの出力に条件を満足させることをチェックすることは簡単である)。第1のブロックチェーンノード104は、ブロックを受け入れ、したがって、プロトコル規則を執行する他のノードのしきい値コンセンサスにブロックを伝搬させる。トランザクション154の順序付きセットが、次いで、ブロックチェーンノード104の各々によって、新たなブロック151としてブロックチェーン150の中に記録されるようになる。チェーンの中の以前に作成されたブロック151n-1を新たなブロック151nが戻って指し示すことにも、ブロックポインタ155が割り当てられる。プルーフオブワーク解を作成するために必要とされる、たとえば、ハッシュの形態をなす、著しい量の取組みが、ブロックチェーンプロトコルの規則に従うべき、第1のノード104の意図をシグナリングする。そのような規則は、さもなければ二重消費として知られる、以前に有効化されたトランザクションと同じ出力をそれが割り当てる場合、トランザクションを有効として受け入れないことを含む。作成されると、ブロック151は、ブロックチェーンネットワーク106の中のブロックチェーンノード104の各々において認識および維持されるので修正され得ない。ブロックポインタ155はまた、連続した順序をブロック151に課する。ネットワーク106の中の各ブロックチェーンノード104において、順序付きブロックの中にトランザクション152が記録されるので、したがって、このことはトランザクションの不変の公的な台帳を提供する。
【0029】
任意の所与の時間においてパズルを解くために競争する異なるブロックチェーンノード104が、それらがいつ解を求めて探索し始めたのかまたはトランザクションが受信された順序に応じて、任意の所与の時間においてまだ発行されていないトランザクション154のプールの異なるスナップショットに基づいて、そのことを行っている場合があることに留意されたい。それらのそれぞれのパズルを最初に解く人は誰でも、どのトランザクション152が次の新たなブロック151nの中にどの順序で含められるのかを規定し、未発行トランザクションの現在のプール154が更新される。ブロックチェーンノード104は、次いで、未発行トランザクション154の新たに規定された順序付きプールからブロックを作成するために競争することを継続する等々である。2つのブロックチェーンノード104が互いの極めて短い時間内にそれらのパズルを解き、その結果、ブロックチェーンの矛盾する見方がノード104間で伝搬させられる場合である、起こり得る任意の「フォーク」を解決するためのプロトコルも存在する。要するに、最も長く伸びる、フォークのどのプロングも、最終的なブロックチェーン150になる。同じトランザクションが両方のフォークの中に出現するので、このことがネットワークのユーザまたはエージェントに影響を及ぼさないはずであることに留意されたい。
【0030】
ビットコインブロックチェーン(および、ほとんどの他のブロックチェーン)によれば、新たなブロック104を首尾よく構築するノードは、(ある金額のデジタル資産を、あるエージェントまたはユーザから別のエージェントまたはユーザに移転する、エージェント間またはユーザ間のトランザクションとは反対に)規定された追加の数量のデジタル資産を分配する、新たな特別な種類のトランザクションの中に、受け入れられた追加の金額のデジタル資産を新たに割り当てるための能力が与えられる。この特別なタイプのトランザクションは、通常、「コインベーストランザクション」と呼ばれるが、「開始トランザクション(initiation transaction)」または「生成トランザクション(generation transaction)」と呼ばれることもある。それは、通常、新たなブロック151nの最初のトランザクションを形成する。この特別なトランザクションが後で償還されることを可能にするプロトコル規則に従うために、プルーフオブワークは、新たなブロックを構築するノードの意図をシグナリングする。ブロックチェーンプロトコル規則は、この特別なトランザクションが償還され得る前に、償還期間、たとえば、100個のブロックを必要とすることがある。しばしば、通常の(非生成)トランザクション152も、そのトランザクションがその中で発行されたブロック151nを作成したブロックチェーンノード104にさらに報酬を与えるために、それの出力のうちの1つの中で追加のトランザクション料金を指定する。この料金は、通常、「トランザクション料金」と呼ばれ、以下で説明される。
【0031】
トランザクション有効化および発行にリソースが関与することに起因して、一般に、ブロックチェーンノード104の少なくとも各々は、1つまたは複数の物理サーバユニットを備えるサーバ、またはさらにはデータセンター全体の形態を取る。しかしながら、原理上、任意の所与のブロックチェーンノード104が、一緒にネットワーク化されたユーザ端末またはユーザ端末のグループの形態を取ることができる。
【0032】
各ブロックチェーンノード104のメモリは、それのそれぞれの1つまたは複数の役割を実行しブロックチェーンノードプロトコルに従ってトランザクション152を処理するために、ブロックチェーンノード104の処理装置上で動作するように構成されたソフトウェアを記憶する。本明細書においてブロックチェーンノード104にあるものとされる任意のアクションが、それぞれのコンピュータ機器の処理装置上でソフトウェアが動作することによって実行されてよいことが理解されよう。ノードソフトウェアは、アプリケーションレイヤ、またはオペレーティングシステムレイヤもしくはプロトコルレイヤなどの下位レイヤ、あるいはこれらの任意の組合せにおける1つまたは複数のアプリケーションの中に実装されてよい。
【0033】
消費するユーザの役割における複数のパーティ103の各々のコンピュータ機器102も、ネットワーク101に接続される。これらのユーザはブロックチェーンネットワーク106と相互作用してよいが、トランザクションを有効化することまたはブロックを構築することに参加しない。これらのユーザまたはエージェント103のうちのいくつかは、トランザクションにおいて送出者および受信者として働くことがある。他のユーザは、必ずしも送出者または受信者として働くことなくブロックチェーン150と相互作用してよい。たとえば、いくつかのパーティは、ブロックチェーン150のコピーを記憶する(たとえば、ブロックチェーンノード104からブロックチェーンのコピーを取得した)記憶エンティティとして働いてよい。
【0034】
パーティ103の一部または全部は、異なるネットワーク、たとえば、ブロックチェーンネットワーク106の上部に重ねられたネットワークの一部として接続されてよい。ブロックチェーンネットワークのユーザ(しばしば、「クライアント」と呼ばれる)は、ブロックチェーンネットワーク106を含むシステムの一部であると言われてよいが、これらのユーザは、ブロックチェーンノードの必要とされる役割を実行しないのでブロックチェーンノード104ではない。代わりに、各パーティ103はブロックチェーンネットワーク106と相互作用してよく、それによって、ブロックチェーンノード106に接続すること(すなわち、それと通信すること)によってブロックチェーン150を利用してよい。2つのパーティ103およびそれらのそれぞれの機器102、すなわち、ファーストパーティ103aおよびその人のそれぞれのコンピュータ機器102a、ならびにセカンドパーティ103bおよびその人のそれぞれのコンピュータ機器102bが、例示のために図示される。はるかに多くのそのようなパーティ103およびそれらのそれぞれのコンピュータ機器102が存在しシステム100に参加していることがあるが、便宜上、それらが図示されないことが理解されよう。各パーティ103は、個人または団体であってよい。純粋に例として、ファーストパーティ103aは本明細書でアリスと呼ばれ、セカンドパーティ103bはボブと呼ばれるが、このことが限定的でなく、アリスまたはボブへの本明細書における任意の参照が、それぞれ、「ファーストパーティ」および「セカンドパーティ」と置き換えられてよいことが、諒解されよう。
【0035】
各パーティ103のコンピュータ機器102は、1つまたは複数のプロセッサ、たとえば、1つまたは複数のCPU、GPU、他のアクセラレータプロセッサ、特定用途向けプロセッサ、および/またはFPGAを備えるそれぞれの処理装置を備える。各パーティ103のコンピュータ機器102は、メモリ、すなわち、1つまたは複数の非一時的コンピュータ可読媒体の形態のコンピュータ可読ストレージをさらに備える。このメモリは、1つまたは複数のメモリ媒体、たとえば、ハードディスクなどの磁気媒体、SSD、フラッシュメモリ、もしくはEEPROMなどの電子媒体、および/または光ディスクドライブなどの光媒体を採用する1つまたは複数のメモリユニットを備えてよい。各パーティ103のコンピュータ機器102上のメモリは、処理装置上で動作するように構成された少なくとも1つのクライアントアプリケーション105のそれぞれのインスタンスを備えるソフトウェアを記憶する。本明細書において所与のパーティ103にあるものとされる任意のアクションが、それぞれのコンピュータ機器102の処理装置上で動作するソフトウェアを使用して実行されてよいことが、理解されよう。各パーティ103のコンピュータ機器102は、少なくとも1つのユーザ端末、たとえば、デスクトップもしくはラップトップコンピュータ、タブレット、スマートフォン、またはスマートウォッチなどのウェアラブルデバイスを備える。所与のパーティ103のコンピュータ機器102はまた、ユーザ端末を介してアクセスされるクラウドコンピューティングリソースなどの1つまたは複数の他のネットワーク化リソースを備えてよい。
【0036】
クライアントアプリケーション105は最初に、1つまたは複数の好適なコンピュータ可読記憶媒体上の任意の所与のパーティ103のコンピュータ機器102に提供されてよく、たとえば、サーバからダウンロードされてよく、あるいはリムーバブルSSD、フラッシュメモリキー、リムーバブルEEPROM、リムーバブル磁気ディスクドライブ、磁気フロッピーディスクもしくはテープ、CDもしくはDVD ROMなどの光ディスク、またはリムーバブル光学ドライブなどのような、リムーバブル記憶デバイス上に設けられてもよい。
【0037】
クライアントアプリケーション105は、少なくとも「金銭管理(wallet)」機能を備える。これは2つの主な機能性を有する。これらのうちの一方は、次いで、ブロックチェーンノード104のネットワーク全体にわたって伝搬され、それによって、ブロックチェーン150の中に含められるべき、トランザクション152を、それぞれのパーティ103が作成し、許可し(たとえば、署名し)、1つまたは複数のビットコインノード104へ送ることを可能にすることである。他方は、その人が現在所有するデジタル資産の金額をそれぞれのパーティに戻って報告することである。出力ベースのシステムでは、この第2の機能性は、当該のパーティに属するブロックチェーン150全体にわたって散乱される様々なトランザクション152の出力の中で規定された金額を照合することを備える。
【0038】
注記: 所与のクライアントアプリケーション105の中に統合されるものとして様々なクライアント機能性が説明されることがあるが、このことは必ずしも限定的であるとは限らず、代わりに、本明細書で説明する任意のクライアント機能性が、代わりに、2つ以上の別々のアプリケーションの一組をなして実装されてよく、たとえば、APIを介してインターフェースするか、または一方は他方へのプラグインである。より一般的には、クライアント機能性は、アプリケーションレイヤ、もしくはオペレーティングシステムなどの下位レイヤ、またはこれらの任意の組合せにおいて実装され得る。以下はクライアントアプリケーション105に関して説明されるが、これが限定的でないことが諒解されよう。
【0039】
各コンピュータ機器102上のクライアントアプリケーションまたはソフトウェア105のインスタンスは、ネットワーク106のブロックチェーンノード104のうちの少なくとも1つに動作可能に結合される。このことは、クライアント105の金銭管理機能がトランザクション152をネットワーク106へ送ることを可能にする。クライアント105はまた、それぞれのどのパーティ103が受信者であるのかを、任意のトランザクションのためのブロックチェーン150に照会するために、ブロックチェーンノード104に接触することができる(または、実施形態では、ブロックチェーン150は、部分的にそれの公的な視界を通じてトランザクションの中に信用を与える公的な機構であるので、ブロックチェーン150の中の他のパーティのトランザクションを確かに検査する)。各コンピュータ機器102上の金銭管理機能は、トランザクションプロトコルに従ってトランザクション152を編成し送るように構成される。上記で提示したように、各ブロックチェーンノード104は、ブロックチェーンノードプロトコルに従ってトランザクション152を有効化し、およびブロックチェーンネットワーク106全体にわたってそれらを伝搬させるためにトランザクション152を転送するように構成された、ソフトウェアを動作させる。トランザクションプロトコルおよびノードプロトコルは互いに対応し、所与のトランザクションプロトコルは、所与のトランザクションモデルを一緒に実装して、所与のノードプロトコルとともに進む。同じトランザクションプロトコルが、ブロックチェーン150の中のすべてのトランザクション152に対して使用される。同じノードプロトコルが、ネットワーク106の中のすべてのノード104によって使用される。
【0040】
所与のパーティ103、たとえば、アリスは、ブロックチェーン150の中に含められるべき新規トランザクション152jを送ることを望むとき、(アリスのクライアントアプリケーション105の中の金銭管理機能を使用して)関連するトランザクションプロトコルに従って新規トランザクションを編成する。アリスは、次いで、アリスが接続されている1つまたは複数のブロックチェーンノード104へ、クライアントアプリケーション105からトランザクション152を送る。たとえば、これは、アリスのコンピュータ102に最も良好に接続されているブロックチェーンノード104であり得る。任意の所与のブロックチェーンノード104は、新規トランザクション152jを受信すると、ブロックチェーンノードプロトコルおよびそれのそれぞれの役割に従ってそれを処理する。このことは、新たに受信されたトランザクション152jが「有効」であるためのいくつかの条件を満たすかどうかを最初にチェックすることを備え、そのことの例がより詳細に手短に説明される。いくつかのトランザクションプロトコルでは、有効化のための条件は、トランザクション152の中に含まれるスクリプトによって、トランザクションごとに構成可能であってよい。代替として、条件は、単にノードプロトコルの内蔵機能であり得るか、またはスクリプトとノードプロトコルとの組合せによって規定され得る。
【0041】
新たに受信されたトランザクション152jが有効と見なされるためのテストをパスする条件において(すなわち、それが「有効化」される条件において)、トランザクション152jを受信する任意のブロックチェーンノード104は、そのブロックチェーンノード104において維持される、トランザクション154の順序付きセットに、有効化された新たなトランザクション152を加える。さらに、トランザクション152jを受信する任意のブロックチェーンノード104は、有効化されたトランザクション152をネットワーク106の中の1つまたは複数の他のブロックチェーンノード104に前方へ伝搬させる。各ブロックチェーンノード104は同じプロトコルを適用するので、次いで、トランザクション152jが有効であることを想定すると、このことは、それがまもなく全体的なネットワーク106全体にわたって伝搬されることを意味する。
【0042】
所与のブロックチェーンノード104において維持される保留トランザクション154の順序付きプールに入ることが許されると、そのブロックチェーンノード104は、新規トランザクション152を含む154のそれらのそれぞれのプールの最新のバージョンにおいてプルーフオブワークパズルを解くことを競合し始める(他のブロックチェーンノード104が、トランザクション154の異なるプールに基づいてパズルを解こうとしている場合があるが、そこに最初に達する人は誰でも、最新のブロック151の中に含められるトランザクションのセットを規定することを、想起されたい。最終的に、ブロックチェーンノード104は、アリスのトランザクション152jを含む順序付きプール154の一部に対してパズルを解く)。新規トランザクション152jを含むプール154に対してプルーフオブワークが行われていると、それは不変にブロックチェーン150の中のブロック151のうちの1つの一部になる。各トランザクション152は、もっと前のトランザクションに戻るポインタを備え、そのため、トランザクションの順序も不変に記録される。
【0043】
異なるブロックチェーンノード104は、所与のトランザクションの異なるインスタンスを最初に受信することがあり、したがって、新たなブロック151の中で1つのインスタンスが発行される前にどのインスタンスが「有効」であるのかの、矛盾する見方を有し、その点において、発行されたインスタンスが唯一の有効なインスタンスであることに、すべてのブロックチェーンノード104が合意する。ブロックチェーンノード104が、有効として1つのインスタンスを受け入れ、次いで、ブロックチェーン150の中に第2のインスタンスが記録されていることを発見する場合、そのブロックチェーンノード104は、これを受け入れなければならず、それが最初に受け入れたインスタンス(すなわち、ブロック151の中で発行されていないインスタンス)を廃棄する(すなわち、無効として扱う)。
【0044】
いくつかのブロックチェーンネットワークによって運用される代替のタイプのトランザクションプロトコルは、勘定ベースのトランザクションモデルの一部として「勘定ベースの」プロトコルと呼ばれることがある。勘定ベースの事例では、各トランザクションは、過去のトランザクションのシーケンスの中の先行するトランザクションのUTXOを戻って参照することによるのではなく、むしろ完全な勘定残高への参照によって、移転されるべき金額を規定する。すべての勘定の現在の状態は、ブロックチェーンとは別個の、そのネットワークのノードによって記憶され、絶えず更新される。そのようなシステムでは、トランザクションは、勘定の動作しているトランザクション勘定書(「ポジション」とも呼ばれる)を使用して順序付けられる。この値は、それらの暗号署名の一部として送出者によって署名され、トランザクション参照計算の一部としてハッシュされる。加えて、任意選択のデータフィールドも、トランザクションが署名されてよい。このデータフィールドは、たとえば、以前のトランザクションIDがそのデータフィールドの中に含まれる場合、以前のトランザクションを戻って指し示してよい。
【0045】
2. UTXOベースのモデル
図2は、例示のトランザクションプロトコルを示す。これは、UTXOベースのプロトコルの一例である。トランザクション152(「Tx」と短縮される)は、ブロックチェーン150の基本データ構造である(各ブロック151が1つまたは複数のトランザクション152を備える)。以下は、出力ベースまたは「UTXO」ベースのプロトコルへの参照によって説明される。しかしながら、このことはすべての可能な実施形態に限定的であるとは限らない。ビットコインを参照しながら例示のUTXOベースのプロトコルが説明されるが、それが他の例示のブロックチェーンネットワークにおいて等しく実施されてよいことに留意されたい。
【0046】
UTXOベースのモデルでは、各トランザクション(「Tx」)152は、1つまたは複数の入力202および1つまたは複数の出力203を備えるデータ構造を備える。各出力203は、(UTXOがすでに償還されていない場合)別の新規トランザクションの入力202のためのソースとして使用され得る未消費トランザクション出力(UTXO)を備えてよい。UTXOは、ある金額のデジタル資産を指定する値を含む。これは、分散台帳上のトークンのセット番号を表す。UTXOはまた、他の情報の中の、UTXOがそこから来たトランザクションのトランザクションIDを含んでよい。トランザクションデータ構造はまた、ヘッダ201を備えてよく、ヘッダ201は、入力フィールド202および出力フィールド203のサイズのインジケータを備えてよい。ヘッダ201はまた、トランザクションのIDを含んでよい。実施形態では、トランザクションIDは、(トランザクションID自体を除外する)トランザクションデータのハッシュであり、ノード104にサブミットされる未加工トランザクション152のヘッダ201の中に記憶される。
【0047】
たとえば、アリス103aは、当該の、ある金額のデジタル資産をボブ103bに移転するトランザクション152jを作成することを望む。図2では、アリスの新規トランザクション152jは「Tx1」とラベル付けされる。それは、シーケンスの中の先行するトランザクション152iの出力203の中でアリスにロックされている、ある金額のデジタル資産を取り、このうちの少なくともいくらかをボブに移転する。図2では、先行するトランザクション152iは「Tx0」とラベル付けされる。Tx0およびTx1は任意のラベルにすぎない。それらは必ずしも、Tx0がブロックチェーン151の中の最初のトランザクションであることも、Tx1がプール154の中のすぐ次のトランザクションであることも、意味するとは限らない。Tx1は、アリスにロックされた未消費出力203を依然として有する任意の先行する(すなわち、先行者)トランザクションを戻って指し示すことができる。
【0048】
アリスがアリスの新規トランザクションTx1を作成する時間において、または少なくともアリスがそれをネットワーク106へ送る時間までに、先行するトランザクションTx0が、すでに有効化されていてよく、ブロックチェーン150のブロック151の中に含められていてよい。先行するトランザクションTx0は、その時間においてすでにブロック151のうちの1つの中に含められていることがあるか、または依然として順序付きセット154の中で待っていることがあり、その場合、新たなブロック151の中にまもなく含められる。代替として、Tx0およびTx1は、作成されることおよび一緒にネットワーク106へ送られることが可能であるか、またはノードプロトコルが「オーファン」トランザクションをバッファリングすることを許容する場合、Tx1の後にTx0が送られることさえ可能である。トランザクションのシーケンスのコンテキストにおいて本明細書で使用する「先行する(preceding)」および「後続の(subsequent)」という用語は、トランザクションの中で指定されるトランザクションポインタによって規定されるような、シーケンスの中のトランザクションの順序を指す(どのトランザクションが他のどのトランザクションを戻って指し示すのかなど)。それらは、「先行要素」および「後継者」、または「先行者」および「子孫(descendant)」、「親(parent)」、および「子(child)」などに等しく置き換えられる場合がある。そのことは、それらが作成され、ネットワーク106へ送られ、または任意の所与のブロックチェーンノード104に到着する順序を、必ずしも暗示するとは限らない。とはいえ、先行するトランザクション(先行者トランザクションまたは「親」)を指し示す後続のトランザクション(子孫トランザクションまたは「子」)は、親トランザクションが有効化されるまで、また親トランザクションが有効化されない限り、有効化されない。それの親の前にブロックチェーンノード104に到着する子は、オーファンと見なされる。ノードプロトコルおよび/またはノード挙動に応じて、オーファンは廃棄されてよく、または親を待つためのいくらかの時間にわたってバッファリングされてもよい。
【0049】
先行するトランザクションTx0の1つまたは複数の出力203のうちの1つは、ここではUTXO0とラベル付けされる特定のUTXOを備える。各UTXOは、UTXOによって表されるある金額のデジタル資産を指定する値、および後続のトランザクションが有効化されるために、したがって、UTXOが首尾よく償還されるために、後続のトランザクションの入力202の中のロック解除スクリプトによって満たされなければならない条件を規定するロックスクリプトを備える。通常、ロックスクリプトは、特定のパーティ(それがその中に含まれるトランザクションの受益者)に金額をロックする。すなわち、ロックスクリプトは、通常、後続のトランザクションの入力の中のロック解除スクリプトが、先行するトランザクションがロックされるパーティの暗号署名を備える条件を備える、ロック解除条件を規定する。
【0050】
ロックスクリプト(scriptPubKeyとも呼ばれる)は、ノードプロトコルによって認識されるドメイン固有の言語で書かれたコードの断片である。そのような言語の特定の例は、ブロックチェーンネットワークによって使用される「Script」(大文字のS)と呼ばれる。ロックスクリプトは、トランザクション出力203を消費するためにどんな情報が必要とされるのか、たとえば、アリスの署名の要件を指定する。ロック解除スクリプトは、トランザクションの出力の中に出現する。ロック解除スクリプト(scriptSigとも呼ばれる)は、ロックスクリプト基準を満足するのに必要とされる情報を提供するドメイン固有の言語で書かれたコードの断片である。たとえば、それはボブの署名を含んでよい。ロック解除スクリプトは、トランザクションの入力202の中に出現する。
【0051】
そのため、図示の例では、Tx0の出力203の中のUTXO0は、UTXO0が償還されるために(厳密には、UTXO0を償還することを試みる後続のトランザクションが有効となるために)アリスの署名Sig PAを必要とするロックスクリプト[Checksig PA]を備える。[Checksig PA]は、アリスの公開鍵-秘密鍵ペアからの公開鍵PAの表記(すなわち、ハッシュ)を含む。Tx1の入力202は、(たとえば、実施形態ではトランザクションTx0全体のハッシュである、それのトランザクションID、TxID0によって)Tx1を戻って指し示すポインタを備える。Tx1の入力202は、Tx0の任意の他の可能な出力の間でそれを識別するために、Tx0内でUTXO0を識別するインデックスを備える。Tx1の入力202は、アリスが鍵ペアからのアリスの秘密鍵をデータの既定の部分(暗号法では「メッセージ」と呼ばれることがある)に適用することによって作成される、アリスの暗号署名を備えるロック解除スクリプト<Sig PA>をさらに備える。有効な署名を提供するためにアリスによって署名される必要があるデータ(すなわち、「メッセージ」)は、ロックスクリプトによって、もしくはノードプロトコルによって、またはこれらの組合せによって規定されてよい。
【0052】
ブロックチェーンノード104に新規トランザクションTx1が到着すると、ノードはノードプロトコルを適用する。このことは、ロックスクリプトの中で規定された条件をロック解除スクリプトが満たすかどうかをチェックするために、ロックスクリプトおよびロック解除スクリプトを一緒に動作させることを備える(ここで、この条件は1つまたは複数の基準を備えてよい)。実施形態では、このことは、2つのスクリプトを連結すること、すなわち、
<Sig PA> <PA> || [Checksig PA]
を伴い、ただし、「||」は連結を表し、「<…>」はスタック上のデータの場所を意味し、「[…]」は、ロックスクリプト(この例では、スタックベースの言語)によって備えられる関数である。等価的に、スクリプトを連結するのではなく、共通スタックを用いてスクリプトが次々に動作させられてよい。どちらにしても、一緒に動作させられるとき、スクリプトは、Tx0の出力の中のロックスクリプトの中に含まれるようなアリスの公開鍵PAを使用して、Tx1の入力の中のロック解除スクリプトが、データの予想される部分に署名するアリスの署名を含むことを認証する。この認証を実行するために、データ自体(「メッセージ」)の予想される部分も含められる必要がある。実施形態では、署名されたデータはTx1の全体を備える(そのため、平文でのデータの署名された部分を指定する別個の要素は、すでに本質的に存在するので含められる必要はない)。
【0053】
公開-秘密暗号法による認証の詳細は当業者に熟知されよう。基本的に、アリスがアリスの秘密鍵を使用してメッセージに署名しており、次いで、アリスの公開鍵および平文でのメッセージが与えられる場合、ノード104などの別のエンティティは、メッセージがアリスによって署名されているにちがいないことを認証することができる。署名することは、通常、メッセージをハッシュすること、そのハッシュに署名すること、およびこれをメッセージ上に署名としてタグ付けすることを備え、したがって、公開鍵の任意の保持者が署名を認証することを可能にする。したがって、データの特定の断片、もしくはトランザクションの一部などに署名することへの、本明細書における任意の参照は、実施形態において、データのその断片またはトランザクションの一部のハッシュに署名することを意味することができることに留意されたい。
【0054】
Tx1の中のロック解除スクリプトがTx0のロックスクリプトの中で指定される1つまたは複数の条件を満たす場合(そのため、図示の例では、アリスの署名がTx1の中で提供され、認証される場合)、ブロックチェーンノード104はTx1を有効と見なす。このことは、ブロックチェーンノード104が保留トランザクション154の順序付きプールにTx1を加えることを意味する。ブロックチェーンノード104はまた、ネットワーク106全体にわたってトランザクションTx1が伝搬されるように、ネットワーク106の中の1つまたは複数の他のブロックチェーンノード104にトランザクションTx1を転送する。Tx1が有効化されておりブロックチェーン150の中に含められていると、このことはTx0からのUTXO0を消費されたものと規定する。Tx1が未消費トランザクション出力203を消費する場合にしかTx1が有効であり得ないことに留意されたい。Tx1が、別のトランザクション152によってすでに消費されている出力を消費することを試みる場合、すべての他の条件が満たされるとしてもTx1は無効となる。したがって、ブロックチェーンノード104はまた、先行するトランザクションTx0の中の参照されるUTXOがすでに消費されているかどうか(すなわち、それが別の有効なトランザクションへの有効な入力をすでに形成しているかどうか)をチェックする必要がある。このことは、ブロックチェーン150が、規定された順序をトランザクション152に課することが重要である1つの理由である。実際には、所与のブロックチェーンノード104は、どのトランザクション152の中のどのUTXO203が消費されているのかをマークする別個のデータベースを維持してよいが、最終的には、UTXOが消費されているかどうかを規定するのは、ブロックチェーン150の中の別の有効なトランザクションへの有効な入力をそれがすでに形成しているかどうかである。
【0055】
所与のトランザクション152のすべての出力203の中で指定される総額が、それのすべての入力202によって指し示される総額よりも大きい場合、このことは、ほとんどのトランザクションモデルにおける非有効性にとっての別の根拠である。したがって、そのようなトランザクションは、伝搬されることもブロック151の中に含められることもない。
【0056】
UTXOベースのトランザクションモデルでは、所与のUTXOが全体として消費される必要があることに留意されたい。UTXOは、別の小部分が消費されながらUTXOの中で規定される金額の小部分を消費されたものとして「後に残して行く」ことができない。ただし、UTXOからの金額は、次のトランザクションの複数の出力の間で分割され得る。たとえば、Tx0の中のUTXO0の中で規定される金額は、Tx1の中の複数のUTXOの間で分割され得る。したがって、アリスは、UTXO0の中で規定される金額のすべてをボブに与えることを希望しない場合、Tx1の第2の出力の中でアリス自身に釣銭を与えるために、または別のパーティに支払うために、その残りを使用することができる。
【0057】
実際には、アリスはまた、通常、アリスのトランザクション104をブロック151の中に首尾よく含めるビットコインノード104のための料金を含める必要がある。アリスがそのような料金を含めない場合、Tx0はブロックチェーンノード104によって拒絶されてよく、したがって、技術的には有効であるが、伝搬されなくてよくブロックチェーン150の中に含められなくてよい(ノードプロトコルは、それらが希望しない場合、トランザクション152を受け入れることをブロックチェーンノード104に強制しない)。いくつかのプロトコルでは、トランザクション料金は、それ自体の別個の出力203を必要としない(すなわち、別個のUTXOを必要としない)。代わりに、入力202によって指し示される総額と所与のトランザクション152の出力203の中で指定される総額との間の任意の差分が、トランザクションを発行するブロックチェーンノード104に自動的に与えられる。たとえば、UTXO0へのポインタはTx1への入力でしかなく、Tx1は1つの出力UTXO1しか有しない。UTXO0の中で指定されるデジタル資産の金額が、UTXO1の中で指定される金額よりも大きい場合、UTXO1を含むブロックを作成するためのプルーフオブワーク競争に勝利するノード104によって差分が割り当てられてよい。しかしながら、代替または追加として、トランザクション料金が、トランザクション152のUTXO203のうちのそれ自体の1つの中で明示的に指定され得ることが、必ずしも除外されるとは限らない。
【0058】
アリスおよびボブのデジタル資産は、ブロックチェーン150の中のどこかで任意のトランザクション152の中で彼らにロックされたUTXOからなる。したがって、通常、所与のパーティ103の資産は、ブロックチェーン150全体にわたって様々なトランザクション152のUTXO全体にわたって散乱される。所与のパーティ103の合計残高を規定する、ブロックチェーン150の中のどこかに記憶された1つの数はない。それぞれのパーティにロックされており前方に位置する別のトランザクションの中でまだ消費されていないすべての様々なUTXOの値を一緒に照合することは、クライアントアプリケーション105の中の金銭管理機能の役割である。それは、ビットコインノード104のうちのいずれかにおいて記憶されるようなブロックチェーン150のコピーを照会することによって、このことを行うことができる。
【0059】
スクリプトコードが、しばしば、概略的に(すなわち、厳密な言語を使用せずに)表されることに留意されたい。たとえば、特定の機能を表すために動作コード(オペコード)を使用してよい。「OP_...」は、Script言語の特定のオペコードを指す。一例として、OP_RETURNは、ロックスクリプトの冒頭においてOP_FALSEに先行されるとき、トランザクション内にデータを記憶できるトランザクションの消費不可能な出力を作成し、それによって、ブロックチェーン150の中に不変にデータを記録する、Script言語のオペコードである。たとえば、データは、ブロックチェーンの中に記憶することが望まれる文書を備える場合がある。
【0060】
通常、トランザクションの入力は、公開鍵PAに対応するデジタル署名を含む。実施形態では、これは楕円曲線secp256k1を使用するECDSAに基づく。デジタル署名は、データの特定の断片に署名する。いくつかの実施形態では、所与のトランザクションに対して、署名は、トランザクション入力の一部、およびトランザクション出力の一部または全部に署名する。それが署名する、出力の特定の部分は、SIGHASHフラグに依存する。SIGHASHフラグは、通常、どの出力が署名されるのか(したがって、署名する時間において固定されるのか)を選択するために署名の末尾に含まれる4バイトコードである。
【0061】
ロックスクリプトは、それが通常はそれぞれのトランザクションがロックされるパーティの公開鍵を備えるという事実を参照して、「scriptPubKey」と呼ばれることがある。ロック解除スクリプトは、それが通常は対応する署名を供給するという事実を参照して、「scriptSig」と呼ばれることがある。しかしながら、より一般的には、ブロックチェーン150のすべての適用において、UTXOが償還されるための条件が、署名を認証することを備えることは必須でない。より一般的には、任意の1つまたは複数の条件を規定するためにスクリプト言語が使用され得る。したがって、「ロックスクリプト」および「ロック解除スクリプト」というもっと一般的な用語が好ましいことがある。
【0062】
3. サイドチャネル
図1に示すように、アリスおよびボブのコンピュータ機器102a、120bの各々におけるクライアントアプリケーションは、それぞれ、追加の通信機能性を備えてよい。この追加の機能性は、(パーティまたはサードパーティのいずれかに誘発されて)アリス103aがボブ103bとの別個のサイドチャネル107を確立することを可能にする。サイドチャネル107は、ブロックチェーンネットワークとは別個にデータの交換を可能にする。そのような通信は、「オフチェーン」通信と呼ばれることがある。たとえば、これは、パーティのうちの1人がそれをネットワーク106へブロードキャストすることを選ぶまで、トランザクションがブロックチェーンネットワーク106上に(まだ)登録されているかまたはチェーン150上に進むことなく、アリスとボブとの間でトランザクション152を交換するために使用されてよい。トランザクションをこのようにして共有することは、「トランザクションテンプレート」を共有することと呼ばれることがある。トランザクションテンプレートは、完全なトランザクションを形成するために必要とされる1つまたは複数の入力および/または出力がなくてよい。代替または追加として、サイドチャネル107は、鍵、折衝された金額または期間、データ内容などの、任意の他のトランザクション関連データを交換するために使用されてよい。
【0063】
サイドチャネル107は、ブロックチェーンネットワーク106と同じパケット交換ネットワーク101を介して確立されてよい。代替または追加として、サイドチャネル301は、モバイルセルラーネットワーク、またはローカルワイヤレスネットワークなどのローカルエリアネットワーク、さらにはアリスのデバイス102aとボブのデバイス102bとの間の直接の有線リンクまたはワイヤレスリンクなどの、様々なネットワークを介して確立されてよい。一般に、本明細書におけるどこかで参照されるようなサイドチャネル107は、「オフチェーン」で、すなわち、ブロックチェーンネットワーク106とは別個にデータを交換するための、1つまたは複数のネットワーキング技術または通信媒体を介した任意の1つまたは複数のリンクを備えてよい。2つ以上のリンクが使用される場合、全体としてオフチェーンリンクのバンドルまたは集合は、サイドチャネル107と呼ばれることがある。したがって、アリスおよびボブがサイドチャネル107を介して情報もしくはデータなどのいくつかの断片を交換すると言われる場合、データのこれらのすべての断片が、厳密に同じリンクさらには同じタイプのネットワークを介して送られなければならないことを、このことが必ずしも暗示するとは限らないことに留意されたい。
【0064】
4. クライアントソフトウェア
図3Aは、本開示の方式の実施形態を実施するためのクライアントアプリケーション105の例示の実装形態を示す。クライアントアプリケーション105は、トランザクションエンジン401およびユーザインターフェース(UI)レイヤ402を備える。トランザクションエンジン401は、上記で説明した方式に従って、手短にさらに詳細に説明するように、トランザクション152を編成すること、サイドチャネル301を介してトランザクションおよび/もしくは他のデータを受信しおよび/もしくは送ること、ならびに/またはブロックチェーンネットワーク106を通じて伝搬されるべき1つもしくは複数のノード104へトランザクションを送ることなどの、クライアント105の下位トランザクション関連の機能性を実施するように構成される。
【0065】
UIレイヤ402は、機器102のユーザ出力手段を介してそれぞれのユーザ103に情報を出力すること、および機器102のユーザ入力手段を介してそれぞれのユーザ103から戻って入力を受信することを含む、それぞれのユーザのコンピュータ機器102のユーザ入力/出力(I/O)手段を介してユーザインターフェースをレンダリングするように構成される。たとえば、ユーザ出力手段は、視覚出力を提供するための1つもしくは複数の表示スクリーン(タッチスクリーンまたは非タッチスクリーン)、音響出力を提供するための1つもしくは複数のスピーカー、および/または触覚出力を提供するための1つもしくは複数の触覚出力デバイスなどを備える場合がある。ユーザ入力手段は、たとえば、(出力手段のために使用されるそれ/それらと同じかまたはそれ/それらとは異なる)1つまたは複数のタッチスクリーンの入力アレイ、マウス、トラックパッド、またはトラックボールなどの1つまたは複数のカーソルベースデバイス、音声または発声入力を受信するための1つまたは複数のマイクロフォンおよび音声または発声認識アルゴリズム、手または体を使うジェスチャーの形態の入力を受信するための1つまたは複数のジェスチャーベース入力デバイス、あるいは1つまたは複数の機械的なボタン、スイッチ、またはジョイスティックなどを備える場合がある。
【0066】
注記: 同じクライアントアプリケーション105の中に統合されるものとして、本明細書における様々な機能性が説明されることがあるが、このことは必ずしも限定的であるとは限らず、代わりにそれらは2つ以上の別々のアプリケーションの一組をなして実装されることが可能であり、たとえば、一方が他方へのプラグインであるか、またはAPI(アプリケーションプログラミングインターフェース)を介してインターフェースする。たとえば、トランザクションエンジン401の機能性が、UIレイヤ402とは別個のアプリケーションの中に実装されてよく、またはトランザクションエンジン401などの所与のモジュールの機能性が、2つ以上のアプリケーションの間で分割される場合がある。また、説明する機能性の一部または全部が、たとえば、オペレーティングシステムレイヤにおいて実装され得ることも、除外されない。単一または所与のアプリケーション105などへ、本明細書におけるどこかで参照が行われる場合、このことが例のためにすぎず、より一般的には、説明する機能性が任意の形態のソフトウェアで実装され得ることが諒解されよう。
【0067】
図3Bは、アリスの機器102a上のクライアントアプリケーション105aのユーザインターフェース(UI)レイヤ402によってレンダリングされてよいUI500の一例のモックアップを与える。類似のUIが、ボブの機器102b上のクライアント105bまたは任意の他のパーティのクライアントによってレンダリングされてよいことが、諒解されよう。
【0068】
例として、図3Bはアリスの観点からUI500を示す。UI500は、ユーザ出力手段を介して別々のUI要素としてレンダリングされた1つまたは複数のUI要素501、502、502を備えてよい。
【0069】
たとえば、UI要素は、異なるオンスクリーンボタン、もしくはメニューの中の異なるオプションなどであってよい、1つまたは複数のユーザ選択可能要素501を備えてよい。ユーザ入力手段は、スクリーン上のUI要素をクリックもしくはタッチすること、または所望のオプションの名称を話すことなどによって、ユーザ103(この場合、アリス103a)がオプションのうちの1つを選択または別のやり方で操作することを、可能にするように配置される(本明細書で使用する「手作業で」という用語が、自動に対して対比をなすことを意図するにすぎず、必ずしも1つまたは複数の手の使用に限定するとは限らないことに、注意されたい)。
【0070】
代替または追加として、UI要素は1つまたは複数のデータ入力フィールド502を備えてよい。これらのデータ入力フィールドは、たとえば、スクリーン上の、ユーザ出力手段を介してレンダリングされ、データは、ユーザ入力手段、たとえば、キーボードまたはタッチスクリーンを通じてフィールドの中に入力され得る。代替として、たとえば、音声認識に基づいて、データが口頭で受信され得る。
【0071】
代替または追加として、UI要素は、情報をユーザに出力するための1つまたは複数の情報要素503出力を備えてよい。たとえば、これ/これらはスクリーン上でまたは可聴的にレンダリングされ得る。
【0072】
様々なUI要素をレンダリングし、オプションを選択し、データを入力する特定の手段が材料でないことが諒解されよう。これらのUI要素の機能性が、より詳細に手短に説明される。図3に示すUI500が図式化されたモックアップにすぎず、実際には、簡潔のために図示されない1つまたは複数のさらなるUI要素を備えてよいことも諒解される。
【0073】
5. ノードソフトウェア
図4は、UTXOまたは出力ベースのモデルの例における、ネットワーク106の各ブロックチェーンノード104上で動作させられるノードソフトウェア450の一例を示す。ネットワーク106上のノード104として分類されることなく、すなわち、ノード104の必要とされるアクションを実行することなく、別のエンティティがノードソフトウェア450を動作させてよいことに留意されたい。ノードソフトウェア450は、限定はしないが、プロトコルエンジン451、スクリプトエンジン452、スタック453、アプリケーションレベル決定エンジン454、および1つまたは複数のブロックチェーン関連機能モジュール455のセットを含んでよい。各ノード104は、限定はしないが、コンセンサスモジュール455C(たとえば、プルーフオブワーク)、伝搬モジュール455P、および記憶モジュール455S(たとえば、データベース)の3つすべてを含むノードソフトウェアを動作させてよい。プロトコルエンジン401は、通常、トランザクション152の様々なフィールドを認識し、ノードプロトコルに従ってそれらを処理するように構成される。トランザクション152j(Txj)が、別の先行するトランザクション152i(Txm-1)の出力(たとえば、UTXO)を指し示す入力を有して受信されるとき、プロトコルエンジン451は、Txjの中のロック解除スクリプトを識別し、それをスクリプトエンジン452に渡す。プロトコルエンジン451はまた、Txjの入力の中のポインタに基づいてTxiを識別し取り出す。Txiはブロックチェーン150上で発行されてよく、その場合、プロトコルエンジンは、ノード104において記憶されるブロックチェーン150のブロック151のコピーからTxiを取り出してよい。代替として、Txiはブロックチェーン150上でまだ発行されていないことがある。その場合、プロトコルエンジン451は、ノード104によって維持される未発行のトランザクションの順序付きセット154からTxiを取り出してよい。どちらにしても、スクリプトエンジン451は、Txiの参照される出力の中でロックスクリプトを識別し、これをスクリプトエンジン452に渡す。
【0074】
したがって、スクリプトエンジン452は、Txiのロックスクリプト、およびTxjの対応する入力からのロック解除スクリプトを有する。たとえば、Tx0およびTx1とラベル付けされたトランザクションが図2に示されるが、トランザクションの任意のペアに対して同じことが適用され得る。スクリプトエンジン452は、前に説明したように2つのスクリプトを一緒に動作させ、そのことは、使用されているスタックベースのスクリプト言語(たとえば、Script)に従って、スタック453上にデータを配置すること、およびスタック453からデータを取り出すことを含む。
【0075】
スクリプトを一緒に動作させることによって、スクリプトエンジン452は、ロックスクリプトの中で規定される1つまたは複数の基準をロック解除スクリプトが満たすか- すなわち、ロックスクリプトがその中に含まれる出力をそれが「ロック解除する」か否かを決定する。スクリプトエンジン452は、この決定の結果をプロトコルエンジン451に戻す。スクリプトエンジン452は、対応するロックスクリプトの中で指定される1つまたは複数の基準をロック解除スクリプトが満たすことを決定する場合、結果「真(true)」を戻す。そうでない場合、スクリプトエンジン452は結果「偽(false)」を戻す。
【0076】
出力ベースのモデルでは、スクリプトエンジン452からの結果「真」は、トランザクションの有効性のための条件のうちの1つである。通常、Txjの出力の中で指定されるデジタル資産の総額が、それの入力によって指し示される総額を上回らないこと、およびTxiの指し示される出力が、別の有効なトランザクションによってすでに消費されていないことなどの、同様に満たされなければならない、プロトコルエンジン451によって評価される1つまたは複数のさらなるプロトコルレベル条件もある。プロトコルエンジン451は、1つまたは複数のプロトコルレベル条件と一緒にスクリプトエンジン452からの結果を評価し、それらがすべて真である場合のみトランザクションTxjを有効化する。プロトコルエンジン451は、トランザクションが有効であるかどうかの表示をアプリケーションレベル決定エンジン454に出力する。Txjが確かに有効化されるという条件においてのみ、決定エンジン454は、Txjに関してそれらのそれぞれのブロックチェーン関連機能を実行するように、コンセンサスモジュール455Cと伝搬モジュール455Pの両方を制御することを選択してよい。このことは、ブロック151の中に組み込むためにコンセンサスモジュール455Cがトランザクション154のノードのそれぞれの順序付きセットにTxjを加えること、および伝搬モジュール455Pがネットワーク106の中の別のブロックチェーンノード104にTxjを転送することを備える。任意選択で、実施形態では、アプリケーションレベル決定エンジン454は、これらの機能のうちの一方または両方をトリガする前に、1つまたは複数の追加の条件を適用してよい。たとえば、決定エンジンは、トランザクションが有効であることとトランザクション料金を十分残すことの両方の条件においてのみ、トランザクションを発行することを選択してよい。
【0077】
本明細書における「真」および「偽」という用語が、単一の2進数字(ビット)だけの形態で表される結果を戻すことに必ずしも限定するとは限らないが、そのことが確かに1つの可能な実装形態であることにも留意されたい。より一般的には、「真」とは、成功した結果または肯定的な結果を示す任意の状態を指すことができ、「偽」とは、失敗した結果または否定的な結果を示す任意の状態を指すことができる。たとえば、勘定ベースのモデルでは、「真」という結果は、署名の暗黙的なプロトコルレベル有効化とスマート契約の追加の肯定的出力との組合せによって示される場合がある(個々の結果の両方が真である場合、全体的な結果が真をシグナリングするものと見なされる)。
【0078】
6. マークルツリー
効率的でさほどリソース集約的でない方法で大きい数量のデータを表すための一般の方法とは、ハッシュツリーとして知られる構造の中にそれを記憶することであり、ここで、ハッシュは、SHA-256などの一方向の暗号ハッシュ関数のダイジェストを意味するものと理解される。ここでハッシュ関数の完全な説明に入ることは必要でないが、典型的なハッシュ関数が任意のサイズの入力を取り、固定の範囲の中の整数を生み出すことを諒解されたい。たとえば、SHA-256ハッシュ関数は、それの出力ハッシュダイジェストとして256ビットの数を与える。
【0079】
一般に、ハッシュツリーは、内部ノードおよびリーフノードを備える、ツリーのようなデータ構造である。各リーフは、ツリーの中に記憶されることになるデータの一部分の暗号ハッシュを表し、各ノードは、それの子の連結をハッシュすることによって生成される。ハッシュツリーのルートは、データの大きいセットをコンパクトに表すために使用されることが可能であり、リーフノードに対応するデータの部分のうちのいずれか1つが確かにそのセットの一部であることを証明するために使用され得る。
【0080】
多くの適用例では、あらゆる非リーフノードが厳密に2つの子を有しリーフノードがデータの一部分のハッシュである、バイナリハッシュツリーが使用される。たとえば、ビットコインブロックチェーンは、ブロックに対するすべてのトランザクションをコンパクトに記憶するために、バイナリハッシュツリー実装形態(マークルツリー)を使用する。ブロックの中に含まれるトランザクションの完全セットを表すために、ルートハッシュがブロックヘッダの中に記憶される。
【0081】
バイナリハッシュツリーの構造が図5に示され、ここで、矢印はハッシュ関数の適用を表し、白い円がリーフノードを表し、内部ノードとルートの両方に対して黒い円が使用される。
【0082】
このハッシュツリーは、各部分をハッシュすることおよび結果として得られたダイジェストをペアごとに連結すること、すなわち、H(D0)||H(D1),...,H(D6)||H(D7)によって、データの8個の部分D0...D7のセットを記憶し、ここで、「||」演算子は、データの2つのストリングの連結を示す。連結された結果が、次いで、ハッシュされ、プロセスは、全体的なデータセットの表記として残っている単一の256ビットハッシュダイジェスト(マークルルート)があるようになるまで反復される。
【0083】
マークルツリーは、一般にバイナリハッシュツリーとして解釈される、1979年にRalph Merkleによって提案されたハッシュツリーの元の実装形態である。マークルツリーがバイナリでなくてもよいことに留意されたい。マークルツリーでは、ツリーの中の各ノードはインデックスペア(i,j)が与えられており、N(i,j)として表される。インデックスi,jは、単にツリーの中の特定の位置に関係する数値ラベルである。
【0084】
マークルツリーの重要な特徴は、それのノードの各々の構築が次式によって統率されることである。
【0085】
【数1】
【0086】
図5に示すように、i=jの事例は、単にデータDiの対応するi番目の断片のハッシュであるリーフノードに対応する。i≠jの事例は、特定のノードまたはルートに達するまでツリーの中の子ノードを再帰的にハッシュおよび連結することによって生成される内部ノードまたはルートノードに対応する。
【0087】
たとえば、ノードN(0,3)は、
N(0,3)=H(N(0,1)||N(2,3))
=H[H(N(0,0)||N(1,1))||H(N(2,2)||N(3,3))]
=H[H(H(D0)||H(D1))||H(H(D2)||H(D3))]
として4つのデータ断片D0、...、D3から構築される。
【0088】
大部分の適用例におけるマークルツリーの主要な機能とは、データDiのいくつかの断片がN個のデータのリストまたはセットD∈{D1,...,DN}のメンバーであるという証明を容易にすることである。マークルルートおよびデータDiの候補部分が与えられると、これはそのセット内のブロックの「プルーフオブイグジスタンス」として扱われることが可能である。
【0089】
そのような証明のためのメカニズムはマークル証明として知られ、データDiの所与の断片およびマークルルートRに対するマークルパスとして知られるハッシュのセットを取得することを備える。データの断片に対するマークルパスは、単に、しばしば、データの断片に対する「認証パス」と呼ばれる、反復されるハッシュおよび連結によってルートRを再構成するために必要とされる、ハッシュの最小リストである。
【0090】
マークル証明を有効化するための方法とはその証明を獲得することであり、そうした証明は、単にハッシュ(マークルツリーの中のノード)のセットであり、証明が適用されるリーフハッシュから始めてシーケンスの中でそれらを連続的にハッシュおよび連結する。リーフから始めるとともに他のハッシュと連続的にハッシュおよび連結するこのプロセスは、事実上、ルートを計算してしまうまでマークルツリーを登ることである。この点において、計算されたルートが、信頼されるべきであり以前に知られているべき既知のルートに等しいことを、単にチェックする。マークルルートRが与えられて、Rによって表されるセットD∈{D0,...,D7}にデータD0が属することを証明することを望む場合、次のようにマークル証明を実行することができる。
i. 信頼されるソースからマークルルートRを取得する。
ii. ソースからマークルパスΓを取得する。この場合、Γはハッシュのセット、すなわち、
Γ={N(1,1),N(2,3),N(4,7)}である。
iii. 次のようにD0およびΓを使用してマークル証明を算出する。
a. データをハッシュして、以下を取得する。
N(0,0)=H(D0)
b. N(1,1)と連結するとともにハッシュして、以下を取得する。
N(0,1)=H(N(0,0)||N(1,1))
c. N(2,3)と連結するとともにハッシュして、以下を取得する。
N(0,3)=H(N(0,1)||N(2,3))
d. N(4,7)と連結するとともにハッシュして、ルート、すなわち、以下を取得する。
N(0,7)=H(N(0,3)||N(4,7))、
R'=N(0,7)
e. 計算されたルートR'を、(i)において取得されたルートRと比較する。
I. R'=Rの場合、ツリーの中でのD0の存在、したがって、データセットDが確認される。
II. R'≠Rの場合、証明は失敗しており、D0はDのメンバーであることが確認されない。
【0091】
これは、マークルツリーおよびそのルートによって表されるデータセットの一部としていくつかのデータに対するプルーフオブイグジスタンスを提供するための効率的なメカニズムである。たとえば、データD0がブロックチェーントランザクションに対応し、ルートRがブロックヘッダの一部として公に利用可能である場合、我々はすることができる。
【0092】
我々の例示のマークルツリーの一部としてのD0の存在を認証するプロセスが図6に示される。このことは、所与のデータD0およびルートRに対してマークル証明を実行することが、事実上、最小数の必要なハッシュ値のみを使用することによってマークルツリーを「上向きに」横断することであることを実証する。
【0093】
トランザクションがブロックの中に含められていることを証明することが、候補マークルパスを使用する、マークル証明の計算上の有効化を必要とするので、マークルプルーフオブイグジスタンスを算出することに関連する様々なオーバーヘッドがあり、ビットコインのようなブロックチェーンの中でトランザクションを有効化するときにそうしたオーバーヘッドが負われるはずである。
【0094】
マークル証明に関連する、以下の計算オーバーヘッドおよび記憶オーバーヘッドを定量化することができる。
・証明の計算複雑度、CΓ
・平均証明サイズ、M=<|Γ|>。バイナリマークルツリーでは、セットの中のすべての要素にとって証明サイズが同じである。
・マークルツリーの合計サイズ。
【0095】
以下の表は、マークルツリーの中のリーフノードの個数とマークル証明のために必要とされるハッシュの個数との間の関係を示す。
【0096】
【表1】
【0097】
7. ビットコインの動作コスト
ビットコインノードを運用することに関連するいくつかの動作コストおよびオーバーヘッドがあり、それはまた、一般に、普及している幅広いブロックチェーン実装形態に適用されてよい。
【0098】
書込みの時間においてビットコインSVノードを運用するための推奨される動作要件の概要が、開発環境、ならびに製造環境にとっての最小要件および推奨要件に対して列挙された、以下の表において与えられる。
【0099】
【表2】
【0100】
競合的マイナーとなるために、トランザクション処理に関連しない、ハッシュおよび一般保守のための電気などの追加のハードウェア要件および動作コストがある。書込みの時間において、一般の競合的マイナーは、それらの処置において10EH/s程度を有することを予想する。
【0101】
ビットコインノードを運用することに関連する動作コストは、これらの要件がシステムのスケーラビリティに関係するので、当業界において広範な討論の原因であった。
【0102】
その討論を要約するために、ある理念は、ノードを運用する動作コストを最小化するように、ブロック当り小さいnを伴って、BTCなどのブロックチェーンが小型のブロックサイズを保持すべきであることを主張する。このことは、ネットワーク上でノードとして競合しないとしても、誰もがビットコインクライアントソフトウェアを運用してよいことを意味し、ここで、「ノード」の定義は、新たなブロックの作成および発行を含む。この理念は、高いトランザクションスループットを全体的に容易にするためにベースブロックチェーンよりも上方のレイヤにおいて解が存在するはずであることを暗示するので、一般に「レイヤ2スケーリング」と呼ばれる。
【0103】
第2の理念は、BSVなどのブロックチェーンが無制限のブロックサイズを有すべきであることを主張し、そのことは、ブロック当り大きいnを有することによって、ずっと大きいトランザクションスループットを可能にする。このことは、ノード操作者に対するトランザクション処理に関して、増大したコストにおいて成り立ち、もっと少数のエンティティがノードを運用できることを意味する。スケーリングに対するこの手法は、システムにおけるトランザクションスループットの大半が、ビットコインノードの要請において自由に拡張するブロックサイズによって達成され得ることを暗示するので、一般に、「ビッグブロックスケーリング」と呼ばれる。
【0104】
ビットコインブロックチェーンに関して説明されたが、上記の説明が同様に他のブロックチェーン実装形態に適用されることに留意されたい。
【0105】
8. ブロック創作およびプルーフオブイグジスタンス
図7は、本開示の実施形態を実施するための例示のシステム700を示す。システム700は、1つまたは複数のパーティ、たとえば、アリス103aおよびボブ103bなどのユーザを備える。ここでの「パーティ」が、一般的な意味で意図されており、ユーザと機械の両方を含むことに留意されたい。便宜上、パーティは、以下でアリス103aおよびボブ103bと呼ばれるが、システム700のパーティが、図1図3を参照しながらアリス103aおよびボブ103bによって実行されるものとして説明する動作のすべてを必ずしも実行するように構成されなければないとは限らないが、そのことが1つの可能性であることを諒解されたい。いくつかの実施形態が、アリス103aと呼ばれる単一のパーティしか伴わないことにも、留意されたい。これらの実施形態では、アリス103aは、検証するパーティ、すなわち、ブロックチェーン上にトランザクションが存在することを検証することを望むパーティの役割を果たす。ボブ103bは、アリス103aへ/からトランザクションを送る/受信するパーティの役割を果たしてよい。アリス103aおよびボブ103bの役割が、以下でもっと説明される。
【0106】
システム700はまた、ブロックチェーンネットワーク106を備える。ブロックチェーンノード104は、図7の中のブロックチェーンネットワーク106とは別個に図示されるが、ブロックチェーンノード104がブロックチェーンネットワーク106の一部であることを理解されたい。ブロックチェーンノード104は、ブロックプロデューサまたはブロックコンストラクタと呼ばれることもある。ブロックチェーンノード104が、以下で説明する動作を実行するように構成される必要しかなく、図1図4を参照しながらブロックチェーンノード104によって実行されるものとして説明するすべての動作を必ずしも実行するように構成される必要があるとは限らないが、そのことが確かに1つの実装形態であることにも留意されたい。
【0107】
本開示の実施形態は、代替形態、すなわち、ブロックチェーンのブロックを構築する(すなわち、創作する)もっと効率的なプロセスをもたらす。プロセスは、通常は現在のブロックチェーンを伴う事例のように、マークルツリーを使用してブロックを構成するトランザクションのセットを表さないことによって、もっと効率的にされる。代わりに、ブロックチェーンノード104は、トランザクション表記として、ネストされたハッシュ値、すなわち、ハッシュ値のネストを作成することによって生成されるハッシュ値を使用するように構成され、各ハッシュ値は、少なくともそれぞれのトランザクションのハッシュである。
【0108】
ブロックチェーンノード104は、候補ブロックの中に含まれることになるトランザクションのセットを取得する。ブロックは、まだブロックチェーンネットワーク106にサブミットされておらずブロックチェーンネットワーク106によって有効化されていないので、この点において候補ブロックにすぎない。トランザクションのうちの1つ、一部、または全部が、ユーザ、たとえば、アリス103aおよびボブ103bから、直接受信されていることがある。追加または代替として、トランザクションのうちの1つ、一部、または全部は、ブロックチェーンネットワーク106の他のノードから受信されていることがある。トランザクションのセットのうちの1つは、もし候補ブロックがネットワーク106によって有効化されるなら、新たなコイン(すなわち、ブロックチェーンの下位デジタル資産)をブロックチェーンノードに割り当てるコインベース(すなわち、生成)トランザクションであってよい。
【0109】
トランザクションのセットは、ある順序で、たとえば、任意に、または各トランザクションのそれぞれのインデックスに基づいて、配置される。トランザクションの順序は、他の方法で、たとえば、ブロックチェーンノードによってトランザクションが受信される順序に基づいて、または各トランザクションのそれぞれのサイズに基づいて、または各トランザクションのそれぞれのトランザクション識別子の最初もしくは最後の桁に基づいて、決定されてよい。順序付きシーケンスは、少なくとも初期トランザクションおよび最終トランザクションを備える。実際には、初期トランザクションと最終トランザクションとの間で順序付きシーケンスの中に1つまたは追加のトランザクションがあることになる可能性がある。
【0110】
ブロックチェーンノード104は、次いで、「トランザクション表記」、すなわち、候補ブロックを構成するトランザクションのセットを表すデータを生成する。この場合、トランザクションのセットはシーケンスの中に順に配置され、トランザクション表記は、トランザクションをハッシュおよび連結するループを実行することによって生成される。より詳細には、そのループは、シーケンスの中の最終トランザクション(すなわち、n個のトランザクションのシーケンスの中のn番目のトランザクション)をハッシュしてそれぞれのハッシュ値を生成することによって始まる。そのハッシュ値は、次いで、シーケンスの中の最後から2番目のトランザクション(すなわち、n-1番目のトランザクション)と連結されてそれぞれの中間結果を生成する。それぞれの中間体がハッシュされてそれぞれのハッシュ値を創作する。そのそれぞれのハッシュ値は、次いで、n-2番目のトランザクションと連結されるとともにハッシュされる。プロセスは、初期トランザクションが、それぞれのハッシュ値と連結されるとき、ハッシュされるまで反復される。最終のハッシュ値がトランザクション表記である。
【0111】
いくつかの例では、最終トランザクションおよび各それぞれの中間結果は、単一のハッシュ関数、たとえば、SHA-256を用いてハッシュされる。他の例では、最終トランザクションおよび各それぞれの中間結果は、複数のハッシュ関数を用いてハッシュされる。最終トランザクションおよび各それぞれの中間結果は、同じハッシュ関数を2回以上、たとえば、二重のSHA-256を用いてハッシュされてよい。一般に、ハッシュ関数は任意の好適なハッシュ関数であってよく、必ずしも暗号ハッシュ関数であり得るとは限らない。ハッシュ関数のうちの1つまたは複数は、ハッシュ関数のSHAファミリーからのものであってよい。
【0112】
候補ブロックは、次いで、たとえば、有効化のために、ブロックチェーンネットワーク106にサブミットされてよい。いくつかの例では、たとえば、異なるノード104によって創作された異なる有効な候補ブロックがブロックチェーンネットワーク106にサブミットされているので、候補ブロックがネットワーク106にサブミットされないことに、留意されたい。ブロックチェーンネットワークによって候補ブロックが有効化されることとは何を意味するのかを当業者は認識する。たとえば、有効なブロックとは、プルーフオブワークパズルへの解を含むブロックであってよく、または最小数のノード104によって有効として投票されているブロックであってもよい。
【0113】
いくつかの実施形態では、候補ブロックは、トランザクション表記によって表されるトランザクションのセットを備える。しかしながら、すべての実施形態においてそのことが必須であるとは限らず、代わりに、トランザクションのセットが、他の場所に、たとえば、オフチェーンデータベースの中に記録されてよい。トランザクション表記は、トランザクションが存在するという証明の働きをする。
【0114】
候補ブロックは、ブロックチェーンの連続のブロックをチェーン結合(すなわち、リンク)するために使用されるブロックヘッダを備えてよい。再び、それらのブロックヘッダを介してブロックをチェーン結合する概念を、当業者は熟知されよう。たとえば、プルーフオブワークブロックチェーンでは、現在の(候補)ブロックのブロックヘッダのハッシュ(「ブロックヘッダハッシュ」)は、ブロックが有効と見なされるために難解ターゲットを満たす(たとえば、ある一定の個数の先行する0を有する)ものとする。ブロックヘッダは、通常、以前のブロックのブロックヘッダのハッシュ、およびナンス値を備える。ナンス値は、プルーフオブワークパズルへの有効な解が見つけられるまでブロックヘッダハッシュを適合させるように適合される。
【0115】
ブロックチェーンノード104は、このようにして複数の候補ブロックを構築してよく、各候補ブロックは、トランザクションの異なるそれぞれのセットに基づき、したがって、異なるそれぞれのトランザクション表記を備える。
【0116】
ブロックチェーンノード104は、他の候補ブロック、すなわち、異なるノード104によってネットワーク106にサブミットされる候補ブロックを有効化してよい。候補ブロックを有効化することは、候補ブロックに属するとされているトランザクションのそれぞれのセットを取得すること、ならびに上記で説明したハッシュ動作および連結動作を実行することによって候補トランザクション表記を構築することを備えてよい。候補トランザクション表記は、次いで、候補ブロックの中に含まれるトランザクション表記と比較され、相等性に対してチェックされる。候補ブロックは、全体としての候補ブロックが有効と見なされるために他の条件を満たさなければならないことがある。
【0117】
上述のように、システム700は、検証するパーティ、すなわち、アリス103aを備える。アリス103aは、ブロックチェーン上にターゲットトランザクションが存在することを検証することを望む。より詳細には、アリス103aは、ブロックチェーンのブロック内にターゲットトランザクションが存在することを検証することを望み、ここで、そのブロックは、上記で説明したように生成されたトランザクション表記を備える。アリス103aは、たとえば、ボブ103bから、またはブロックチェーンノード104から、または他の場所から、たとえば、ブロックチェーンから直接、ターゲットトランザクションを取得する。アリス103aは小売商であってよく、ボブ103bは、ターゲットトランザクションの出力を使用して商品またはサービスの代金を支払うことを試みる顧客であってよい。このことが例示的な例にすぎず、一般に、説明する実施形態が商用のトランザクションだけでなく任意の設定において使用され得ることに、留意されたい。
【0118】
ターゲットブロックの中にターゲットトランザクションが存在するかどうかを検証する(プルーフオブイグジスタンスを実行することとも呼ばれる)ために、アリス103aは、ターゲットブロックを構成すると言われるトランザクションのシーケンスに基づいて候補トランザクション表記を生成する。候補トランザクション表記を生成するために、アリス103aは、ターゲットトランザクション、およびターゲットトランザクションまでの、トランザクションのシーケンスの中のトランザクションの各々を取得する。言い換えれば、アリス103aは、初期トランザクション、および次いで、ターゲットトランザクションまでの後続するトランザクションの各々を取得する。たとえば、ターゲットトランザクションがシーケンスの中の11番目のトランザクションである場合、アリス103aは、11個のトランザクション、すなわち、ターゲットトランザクション、およびシーケンスの中でターゲットトランザクションの前に来る10個のトランザクションを取得する。アリス103aは、トランザクションを(たとえば、ブロックチェーンノード104から)一度に取得してよく、または他のトランザクションとは別個にターゲットトランザクションを取得してもよい。たとえば、アリス103aは、ボブ103bからターゲットトランザクションを、またブロックチェーンノード104から他のトランザクションを取得してよい。アリス103aがトランザクションのうちの1つまたは複数へのアクセスをすでに有する場合があることも、除外されない。アリス103aは、シーケンスの中の適切な位置に配置されたトランザクションを取得してよく、または、たとえば、各トランザクションのそれぞれのインデックスに基づいて、それらの位置にトランザクションを配置してもよい。それぞれのインデックスは、それぞれのトランザクションの中に明示的に記録されてよく、またはさもなければそれぞれのトランザクションに関連付けられてもよい。別の例として、アリス103aは、インデックスを割り当てるための知られている規約に基づいて、たとえば、各トランザクションのそれぞれのトランザクション識別子または各トランザクションのそれぞれのタイムスタンプに基づいて、それぞれのインデックスをアリス自身で生成してよい。
【0119】
アリス103aはまた、候補ハッシュ値を取得する(たとえば、ブロックチェーンノード104から受信する)。アリスは、ターゲットトランザクションを候補ハッシュ値と連結してそれぞれの中間結果を取得する。それぞれの中間結果は、次いで、ハッシュされ、トランザクションのシーケンスの中の、ターゲットトランザクションの前のトランザクションと結合される。このプロセスは、初期トランザクションがハッシュされて最終ハッシュ値を与えるまで反復される。最終ハッシュ値が候補トランザクション表記である。適切な候補ハッシュ値が提供されている場合、候補トランザクション表記は、ターゲットブロックの中に含まれるトランザクション表記に整合するはずである。それらが整合する場合、アリス103aは、ターゲットブロックの中にトランザクションが存在することを知る。アリス103aは、次いで、1つまたは複数のアクションを実行してよく、たとえば、商品またはサービスのための支払いとしてトランザクション(または、UTXO)を受け入れてよい。
【0120】
上述のように、トランザクション表記がターゲットトランザクションにも基づく場合、適切な候補ハッシュ値は、ターゲットブロックの中に含まれるトランザクション表記に整合する候補トランザクション表記をアリス103aが生成することを可能にするはずである。候補ハッシュ値は、ターゲットトランザクションまで(すなわち、それを含まずに)トランザクションをハッシュおよび連結するプロセスを実行することによって生成される。たとえば、ターゲットブロックの中のトランザクションのシーケンスが10個のトランザクションを備え、ターゲットトランザクションがシーケンスの中の5番目のトランザクションである場合、候補ハッシュ値は、シーケンスの中の最後の5個のトランザクションに基づくが、最初の5個のトランザクションには基づかない。
【0121】
アリス103aは、ブロックチェーンノード104(たとえば、トランザクション表記を備える候補ブロックを生成したノード)から、またはネットワーク106の異なるノードから、トランザクション表記を取得してよい。たとえば、アリス103aは、ターゲットブロックの中にターゲットトランザクションが存在するという証明を求める要求を、ブロックチェーンノード104にサブミットしてよい。トランザクション表記は、様々な方法で、たとえば、ブロックチェーンから直接、または異なるパーティ、たとえば、ボブ103bから取得されてよい。アリス103aはまた、トランザクション表記を生成するために使用されたハッシュ関数の表示を(たとえば、ブロックチェーンノード104から)受信してよい。
【0122】
ブロックチェーンノード104の観点から、ブロックチェーンノード104は、たとえば、アリス103aからの、特定のトランザクション(たとえば、ターゲットトランザクション)が存在するという証明を求める要求の受信に応答して、1人または複数のユーザへトランザクション表記を送ってよい。ブロックチェーンノード104はまた、候補ハッシュ値をアリス103aへ送ってよい。ブロックチェーンノード104は、ブロック、たとえば、ターゲットトランザクションを備えるブロックを構成する、トランザクションのセットの一部または全部を1人または複数のユーザ、たとえば、アリス103aへ送ってよい。
【0123】
以下は、ここでは
【0124】
【数2】
【0125】
として示されるトランザクション表記についてのより多くの情報を提供する。この表記は、ある意味ではネストされたループを反映させる、ハッシュの結合および複数のトランザクションの連結である。
【0126】
【数3】
【0127】
これは、以下のステップを用いて計算される。
1. Txnをハッシュし、Hn=H(Txn)が結果として得られる。
2. その結果をTxiと連結し、ここで、i=n-1であり、再びハッシュし、その結果、
Hi=H(Txi||Hi+1)
が出力される。
3. i=n-2、...、1ごとにステップ2を反復する。
4. 最終の出力は、
【0128】
【数4】
【0129】
となる。
【0130】
ハッシュ関数は任意のハッシュ関数であってよく、出力の長さはトランザクションの個数とは無関係である。このことはまた、場合によっては完全なブロックデータへのアクセスなしにプルーフオブイグジスタンスが実行され得るとき、ブロックヘッダしか記憶しないSPVノードがネットワーク上に存在できることを意味する。
【0131】
ブロック創作
【0132】
【数5】
【0133】
を構築するためのこの方法は、ビットコインブロックチェーンなどのブロックチェーンと比較されたとき、ブロック構築中に低減されたオーバーヘッドをもたらす。マイナーは、このシナリオにおいてブロックを構築するとき、トランザクション当り厳密に1つのハッシュを算出しなければならず、O(n)計算複雑度とともにスケーリングする、ブロック創作のこのステップが結果として得られる。
【0134】
プルーフオブイグジスタンス
この表記でのトランザクションに対する証明を実行するために、
【0135】
【数6】
【0136】
を考える。
【0137】
【数7】
【0138】
この表記の中にTxiがあることを証明するために必要とされる成分は以下の通りである。
Λ1=TxCB、Tx1、Tx2、…、Txi-1
Λ2=H(Txi+1||H(...||H(Txn)...)
ここで、H(Txi+1||H(...||H(Txn)...)はHi+1によって示される。
【0139】
Λ1およびΛ2を使用して証明を算出するために、
i. Hiを得るためにTxiをHi+1と連結し、
ii. 結果、すなわち、
【0140】
【数8】
【0141】
が取得されるまで、j=1、...、i-1に対して継続してiをi-jと置き換え、
iii.
【0142】
【数9】
【0143】
【0144】
【数10】
【0145】
と比較する。これらが同じである場合にのみ、受け入れる。
【0146】
この表記の利点は、プロセスを完了するために必要とされるトランザクションの個数が、セットの中でのトランザクションの順序または位置に依存することである。ネストされた構造の上部に近いトランザクションに対して、証明は最小限である。一方、ネストの中で深いトランザクションに対して、証明はもっと費用がかかる。このことは、料金がより高いトランザクションが、証明を最小化するためにネストの中でより高く配置される、料金マーケット(fee market)につながる場合がある。
【0147】
同じブロックの中で消費されるトランザクション、および存在することを再び証明されることをまったく必要としないトランザクションが、それらが直ちに消費されるのでネストの中でより低く配置される場合も、有益であり得る。たとえば、このことは、同じブロック内でその出力がすべて消費されるトランザクションにとって有用であってよく、したがって、それらの存在を後で証明することに対して、さほど需要がなくてよい。
【0148】
この特性はまた、LBBシステム内での新規の料金ダイナミクス(fee dynamics)に対する暗示を有し、彼らのトランザクションに対してより軽量のプルーフオブイグジスタンスを有することを望むユーザは、ネストされたハッシュ表記のさらに左にそれらを含めるために、より高いトランザクション料金を支払う意思がある場合がある。反対に、他のユーザは、もっと低い料金を支払うことがあり、さらに右に含められることがあり、彼らのトランザクションに対して、より大きくより多くの計算量集約的な証明に対する必要に苦しむ。
【0149】
この構築において、変動する証明サイズを実証するために、4つのトランザクションを伴う簡単な例を考えてよく、ここで、以下のネストされたトランザクション表記を伴うブロックを有する。
【0150】
【数11】
【0151】
TxCB
【0152】
【数12】
【0153】
の中のセットのメンバーであることを証明するために、ノードは、TxCB、および残りのトランザクションのハッシュH(Tx1||H(Tx2||H(Tx3)))のみを必要とすることになる。しかしながら、Tx3がそのセットのメンバーであることを証明するために、ノードは、TxCB、Tx1、Tx2、Tx3に対するすべてのデータを必要とすることになる。したがって、セットの中での必要とされるトランザクションの位置に応じて、すべてのトランザクションが必要とされるとは限らない。トランザクションがネストの中で高ければ高いほど、証明は計算量的により費用がかからなくなり、時間はより短くなる。
【0154】
9. 低負担ブロックチェーン
セクション7は、概して、ブロックチェーン企画のためのスケーラビリティを達成するために取られる2つの広い手法、すなわち、「レイヤ2スケーリング」および「ビッグブロックスケーリング」があることを説明した。後者の場合には、スケーラビリティ手法が、従来は、新たなブロックを有効化およびマイニングするための、絶えず増大するハードウェアおよび資本支出需要を満たすために、経済的アクター(すなわち、「マイナー」)が競合することに基づくので、トランザクションのための大型のブロックサイズおよび空間が極めて重要と見なされる。このことは、今度は、複雑なスクリプト記述およびデータ搬送などのある一定の機能性を低減するという影響を有することがある、ブロック空間の使用を最適化すべき必要がほとんどないことを意味する。
反対に、レイヤ2スケーリング手法は、ベースブロックチェーン(すなわち、レイヤ1)が誰によっても保持、有効化、および維持されることが可能となるように、大量のトランザクションを処理する負担を経済的アクターの第2のレイヤにシフトさせる。このことは、レイヤ1ブロックチェーンが低負担であることを必要とし、したがって、ユーザ/検証者/マイナーにおけるその負担が最小化されるようにレイヤ1ブロックチェーンの設計を最適化すべき必要性がある。
【0155】
概して、レイヤ2スケーリング手法を利用することを目指す、BTCブロックチェーンなどのブロックチェーンは、各ブロックの中のトランザクションについての情報を符号化するためのマークルツリーの使用などの、そのような最適化を特徴としない、元のビットコイン設計の歴史的な人為構造を依然として含む。
【0156】
このセクションは、レイヤ1ブロックチェーンがレイヤ2スケーリング原理を使用してスケーリングすることを探索するための、最適化された低負担ブロックチェーン(LBB:low-burden blockchain)アーキテクチャを説明する。以下の特徴のうちの一部または全部が、図7を参照しながら説明するシステム700のブロックチェーンノード104およびブロックチェーンネットワーク106によって実施されてよい。
【0157】
ブロックチェーン設計
低負担ブロックチェーンは、高いレベルにおいて、以下の構成要素、すなわち、
・ブロック、および
・トランザクション
を備える、最適に最小限主義的なデータモデルを有する。
【0158】
これらは、LBBを構築および使用することを必要とされる基本的な機能ユニットであり、ここで、各トランザクションは、LBB上で発生するイベントを表し、ブロックは、これらのトランザクションの、単にタイムスタンプが付けられた集合である。
【0159】
ブロック
LBBデータモデルの中のブロックは、ブロックヘッダ、およびn+1個のトランザクションTxCB、Tx1、Tx2、...、Txnのセット
【0160】
【数13】
【0161】
を備え、ここで、TxCBは、マイナーにブロック報酬を支払う特権的コインベーストランザクションである。LBBのi番目のブロックのためのブロックヘッダは、情報の以下のフィールドを含む。
・以前のブロックハッシュφi-1
・ナンスν、および
・トランザクション表記
【0162】
【数14】
【0163】
【0164】
i番目のブロックを一意に識別するために使用され得る、i番目のブロックのブロックハッシュφiは、暗号ハッシュ関数を使用して算出され、式
【0165】
【数15】
【0166】
によって定義され、ただし、Hは暗号ハッシュ関数であり、
【0167】
【数16】
【0168】
は、トランザクションのセット
【0169】
【数17】
【0170】
の表記である。代替の事例では、コインベーストランザクションではなくブロックヘッダの一部としてマイナー鍵Pmが含められてよいことに留意されたい。
【0171】
2つの異なるクラスのアクターをまかなう必要がないので、この低スループットシステムでは「ブロックヘッダ」に対する厳密な必要はなく、ここで、ビットコインなどのシステムは、簡略化支払い検証(SPV:simplified payment verification)を使用してマイナーとユーザの両方をまかなう助けとなるためのブロックヘッダを含む。
【0172】
システムは、すべてのユーザおよびマイニングノードが同様に、ハードウェア要件、処理要件、およびリソース要件に関してそれらの間を区別する必要なく、ブロックの中のすべてのトランザクションを適度に処理できるという、処理者になることに対して十分低い障壁を有する。LBBフレームワークにおいて「ブロックヘッダ」を参照するとき、トランザクション自体以外のブロックを構成するデータ要素を単に参照している。
【0173】
【表3】
【0174】
初期トランザクションは、マイナーに支払われる報酬が指定されるコインベーストランザクションであり、ブロックの中に配置されるために各トランザクションが支払う標準的な料金を含む。このマイナー鍵Pmはまた、報酬がブロック当り一定となる標準であることを伴って空間を節約するために、ブロックヘッダの一部であってよい。LBBの特定のインスタンスにおいて必要とされる、任意の経済的モデル、発行スケジュール、およびトランザクション料金ポリシーの対象となり得る、マイナー鍵の所有者によって制御されるものとして、そのブロックに関連する鋳造された任意のコインまたはトランザクション料金を解釈してよい。コインベースはまた、追加のナンス空間として使用され得る。
【0175】
トランザクション
LBBモデルにおけるトランザクションは、他のブロックチェーンの中に見られるトランザクションの簡略化されたバージョンであり、UTXOベースのシステムと勘定ベースのシステムの両方にマッピングされ得る。実施形態では、LBBトランザクションは少なくとも以下のものを備える。
・インデックス- 1バイト(ブロック当り256個までのトランザクションを許容する)
・入力アドレス- 32バイト
・出力アドレス- 32バイト
・値- 4バイト
・入力署名- 70バイト
【0176】
上記の値を使用すると、LBBトランザクションの予想されるサイズは、ほぼ140バイトである。書込みの時間におけるビットコインでの対応する(すなわち、P2PKH)トランザクションの平均サイズは193バイトである。したがって、ブロック空間のユニット当りのトランザクションの(バイト単位で測定される)個数は、ビットコインモデルにおけるよりもLBBモデルにおいて著しく多く、著しいスループットおよび効率改善を表す。
【0177】
ブロックチェーン上に記録される各トランザクションを一意に識別するために、LBBにおいてトランザクション識別子(TxID)も使用されてよい。このことは、シリアル化されたトランザクションデータの二重ハッシュTxIDi=SHA256d(Txi)を取ることによって、ビットコインと同様に行われてよい。しかしながら、これらのトランザクションIDの一意性がトランザクションの精密な実装詳細に依存することに留意されたい。たとえば、UTXOベースのモデルが使用される場合、上の表に示すトランザクションにおいて、それら自体が一意である以前の出力点を同じく含めることによって、ビットコインと同様の方法で一意性が保証されてよい。代替として、勘定ベースのモデルが使用される場合、各TxIDの一意性を保証するために勘定/公開鍵ごとのナンスが導入されてよい。
【0178】
トランザクションのライフサイクル
LBBシステムにおけるトランザクションは、そのライフサイクル中に異なるプロセスに関与し、異なる各点において、そのプロセスのコンテキストにおけるその低負担特性の影響を考慮に入れることができる。ライフサイクルおよび対応する低負担考慮事項は、以下の通りである。
・作成- トランザクションが作成されるとき、LBBシステムの直接の利点はないが、小さい数のトランザクションスループットに起因して、以前の関連するトランザクションをチェックすること(たとえば、「勘定」の状態を検証すること)をトランザクション作成が必要とする場合、プロセスが迅速化されることがある。
・有効化- トランザクションがノードによって有効化されるとき、トランザクションの最小化されたスループットに起因して、トランザクション有効化が以前のトランザクションの存在をチェックすることに依存する場合、ビットコインと比較してオーバーヘッドが低減されることがある。
・マイニング- 候補ブロックが構築されるとき、LBB設計は、
【0179】
【数18】
【0180】
の選択に起因してオーバーヘッドを低減するという利点を有し、ここで、ブロック当りの値nは小さい。このことは、LBBシステムのマイナー/ノードによって負われるブロック構築のより低い動作コストを与える。
・プルーフオブイグジスタンス- LBBのエンドユーザは、トランザクションの完全性または有効性をチェックすることを希望するとき、プルーフオブイグジスタンスを実行することができる。そのような証明は、対象のトランザクションが所与のブロックのトランザクションセットの一部であることを証明する方法であり、通常、このトランザクションが
【0181】
【数19】
【0182】
によって表されるセットのメンバーであることを証明することを伴う。
【0183】
【数20】
【0184】
の選択に起因して、プルーフオブイグジスタンスプロセスは、小さいnを想定すると、データサイズまたは計算の回数のいずれかに関して、ビットコインにおいて使用されるマークル証明よりも小さいオーバーヘッドを表す。
【0185】
ブロック創作
ブロック創作プロセスはビットコインのものと類似であるが、システムにおけるトランザクション表記
【0186】
【数21】
【0187】
の選択に応じてわずかに異なる。このことは、
【0188】
【数22】
【0189】
の選択が、所与のブロックに対して特定の
【0190】
【数23】
【0191】
を生成することが必要とされるプロセスに影響を及ぼすからである。ブロックを構築することに関与するステップは、
【0192】
【数24】
【0193】
の選択にかかわらず以下の通りである。
i. トランザクションTx1、Tx2、...、Txnを受信する。
ii. トランザクションTx1、Tx2、...、Txnを有効化する。
iii. 有効なトランザクションのセットに対して
【0194】
【数25】
【0195】
を計算する。
iv. ブロックヘッダφi
【0196】
【数26】
【0197】
を追加する。
v. LBBコンセンサスアルゴリズムの中にφiを入力する。
【0198】
ブロック創作プロセスが、特定のLBBに対して選ばれる特定のコンセンサスアルゴリズムにアグノスティックであることに、留意されたい。
【0199】
トランザクション有効化
ブロック創作プロセスの中のステップiiは、トランザクションを有効化することに関係する。このステップは、ここでは詳述されない、それに関連する複数の下位プロセスを有してよい。たとえば、ビットコインでは、このステップは以下を伴う。
- 各トランザクションのシンタックスが適切であることをチェックすること、
- 各トランザクションが、入力値以下の出力値を有することをチェックすること、および
- ビットコインスクリプトエンジンを使用してスクリプトを有効化すること。
【0200】
トランザクション有効化の仕様は、LBBの特定の実装形態、および前記実装形態において課されることがある任意の追加の規則に依存する。しかしながら、ブロック創作の有効化ステップの複雑度が、ブロック創作に関連するオーバーヘッドおよび必要とされるリソースに影響を及ぼすことに、留意されたい。
【0201】
10. 結論
本明細書における開示が与えられると、開示する技法の他の変形形態または使用事例が当業者に明らかになり得る。本開示の範囲は、説明する実施形態によって限定されず、添付の特許請求の範囲によってのみ限定される。
【0202】
たとえば、上記のいくつかの実施形態は、ビットコインネットワーク106、ビットコインブロックチェーン150、およびビットコインノード104に関して説明されている。しかしながら、ビットコインブロックチェーンがブロックチェーン150の1つの特定の例であること、および上記の説明が任意のブロックチェーンに一般に適用されてよいことが、諒解されよう。すなわち、本発明は、決してビットコインブロックチェーンに限定されない。より一般的には、ビットコインネットワーク106、ビットコインブロックチェーン150、およびビットコインノード104への、上記の任意の言及は、それぞれ、ブロックチェーンネットワーク106、ブロックチェーン150、およびブロックチェーンノード104への言及と置き換えられてよい。ブロックチェーン、ブロックチェーンネットワーク、および/またはブロックチェーンノードは、上記で説明したようなビットコインブロックチェーン150、ビットコインネットワーク106、およびビットコインノード104の、説明する特性の一部または全部を共有してよい。
【0203】
本発明の好ましい実施形態では、ブロックチェーンネットワーク106はビットコインネットワークであり、ビットコインノード104は、ブロックチェーン150のブロック151を作成すること、発行すること、伝搬させること、および記憶することの、説明する機能の少なくともすべてを実行する。これらの機能の全部ではなく、1つまたはいくつかしか実行しない他のネットワークエンティティ(または、ネットワーク要素)があってよいことが、除外されない。すなわち、ネットワークエンティティは、ブロックを作成および発行することなく、ブロックを伝搬させることおよび/または記憶することの機能を実行してよい(これらのエンティティが好適なビットコインネットワーク106のノードとは見なされないことを想起されたい)。
【0204】
本発明の他の実施形態では、ブロックチェーンネットワーク106はビットコインネットワークでなくてよい。これらの実施形態では、ブロックチェーン150のブロック151を作成すること、発行すること、伝搬させること、および記憶することの機能の全部ではないが、少なくとも1つまたはいくつかをノードが実行してよいことが除外されない。たとえば、それらの他のブロックチェーンネットワークにおいて、「ノード」は、ブロック151を作成および発行するが、それらのブロック151を記憶せずおよび/または他のノードに伝搬させないように構成される、ネットワークエンティティを指すために使用されてよい。
【0205】
さらにより一般的には、上記の「ビットコインノード」104という用語への任意の参照は、「ネットワークエンティティ」または「ネットワーク要素」という用語と置き換えられてよく、そのようなエンティティ/要素は、ブロックを作成すること、発行すること、伝搬させること、および記憶することの役割の一部または全部を実行するように構成される。そのようなネットワークエンティティ/要素の機能は、ブロックチェーンノード104を参照しながら上記で説明した同様の方法で、ハードウェアで実装されてよい。
【0206】
上記の実施形態が単に例として説明されていることが諒解されよう。より一般的には、以下の声明のうちの任意の1つまたは複数に従って方法、装置、またはプログラムが提供されてよい。
【0207】
声明1. ブロックチェーンの候補ブロックを構築するコンピュータ実装方法であって、方法は、
少なくとも初期ブロックチェーントランザクションおよび最終ブロックチェーントランザクションを備える、ブロックチェーントランザクションの順序付きシーケンスを取得することと、
トランザクション表記を取得することであって、トランザクション表記が、
i)それぞれのハッシュ値を取得するために最終ブロックチェーントランザクションをハッシュすること、および
ii)それぞれの中間結果を取得するためにそれぞれのハッシュ値を順序付きシーケンスの中の先行するブロックチェーントランザクションと連結し、それぞれのハッシュ値を取得するためにそれぞれの中間結果をハッシュすることによって取得され、初期ブロックチェーントランザクションがそれぞれの中間結果と連結されるとともにそのそれぞれの中間結果がハッシュされてトランザクション表記を取得するまでii)が反復されることと、
候補ブロックを構築することであって、候補ブロックがトランザクション表記を備えることとを備える。
【0208】
実施形態では、データ(たとえば、最終ブロックチェーントランザクション)をハッシュすることは、データを単一の回数(すなわち、hash(data)、または複数回(たとえば、hash1(hash2(data)))ハッシュすることを備えてよく、ここで、hash1およびhash2は、同じかまたは異なるハッシュ関数であってよい。
【0209】
声明2. 声明1の方法であって、候補ブロックはブロックチェーントランザクションのセットを備える。
【0210】
声明3. 声明1または声明2の方法であって、ブロックチェーンの中に含めるために候補ブロックをブロックチェーンネットワークにサブミットすることを備える。
【0211】
声明4. 前述の任意の声明の方法であって、
1人または複数のユーザに利用可能なトランザクション表記を作成することを備える。
【0212】
声明5. 声明4の方法であって、1人または複数のユーザに利用可能なトランザクション表記の前記作成することは、1人または複数のユーザに利用可能なトランザクション表記を送ることを備える。
【0213】
声明6. 声明4または声明5の方法であって、1人または複数のパーティに利用可能なトランザクション表記の前記作成することは、ターゲットブロックチェーントランザクションのプルーフオブイグジスタンスを求める要求の、検証するユーザからの受信に応答する。
【0214】
声明7. 声明4またはそれに従属する任意の声明の方法であって、
1人または複数のユーザに利用可能なブロックチェーントランザクションのセットのうちの1つ、一部、または全部を作成することを備える。
【0215】
声明8. 声明6および声明7の方法であって、1人または複数のユーザに利用可能なブロックチェーントランザクションのセットのうちの1つ、一部、または全部の前記作成することは、検証するユーザに利用可能なターゲットブロックチェーントランザクションを作成することを備える。
【0216】
声明9. 前述の任意の声明の方法であって、
1つまたは複数のブロックチェーンノードに利用可能なブロックチェーントランザクションの順序付きシーケンスのうちの1つまたは複数を作成することを備える。
【0217】
声明10. 声明9の方法であって、1つまたは複数のブロックチェーンノードに利用可能なブロックチェーントランザクションの順序付きシーケンスのうちの1つまたは複数の前記作成することは、ブロックチェーントランザクションの順序付きシーケンスのうちの1つまたは複数をブロックチェーンノードへ送ることを備える。
【0218】
声明11. 前述の任意の声明の方法であって、各ハッシュ演算はSHAベースのハッシュ関数を使用して実行される。
【0219】
声明12. 声明11の方法であって、SHAベースのハッシュ関数はSHA256ハッシュ関数である。
【0220】
声明13. 前述の任意の声明の方法であって、候補ブロックは、ブロックチェーンの以前のブロックにブロックをリンクするために使用されたブロックヘッダを備え、ブロックヘッダはトランザクション表記を備える。
【0221】
声明14. 声明13の方法であって、ブロックヘッダは、以前のブロックのそれぞれのブロックヘッダのハッシュ、およびブロックヘッダがハッシュされるとブロックヘッダの結果として得られたハッシュが所定の難解ターゲットを満たすようなナンス値を備える。
【0222】
声明15. 前述の任意の声明の方法であって、ブロックチェーントランザクションの順序付きシーケンスはコインベーストランザクションを備える。
【0223】
コインベーストランザクションは、生成トランザクションと呼ばれることもある。
【0224】
声明16. 前述の任意の声明の方法であって、
ブロックチェーントランザクションの順序付きシーケンスの各々にそれぞれのインデックスを割り当てることを備える。
【0225】
声明17. 声明16の方法であって、
ブロックチェーントランザクションのセットの各々のそれぞれのインデックスを候補ブロックの中に明示的に記録することを備える。
【0226】
声明18. 前述の任意の声明の方法であって、ブロックチェーントランザクションの順序付きシーケンスの前記取得することは、ブロックチェーントランザクションのうちの少なくともいくつかを1人または複数のユーザから受信することを備える。
【0227】
声明19. 前述の任意の声明の方法であって、ブロックチェーントランザクションの順序付きシーケンスの前記取得することは、ブロックチェーントランザクションのうちの少なくともいくつかをブロックチェーンネットワークの1つまたは複数のノードから受信することを備える。
【0228】
声明20. ブロックチェーンのブロックがターゲットブロックチェーントランザクションを備えるかどうかを決定するコンピュータ実装方法であって、ブロックはトランザクション表記を備え、トランザクション表記は、i)それぞれのハッシュ値を取得するために最終ブロックチェーントランザクションをハッシュすること、およびii)それぞれの中間結果を取得するためにそれぞれのハッシュ値を順序付きシーケンスの中の先行するブロックチェーントランザクションと連結し、それぞれのハッシュ値を取得するためにそれぞれの中間結果をハッシュすることによって取得され、初期ブロックチェーントランザクションがそれぞれの中間結果と連結されるとともにそのそれぞれの中間結果がハッシュされてトランザクション表記を取得するまでii)が反復され、方法は、
ターゲットブロックチェーントランザクションを取得することと、
ターゲットブロックチェーントランザクションに先行する、順序付きシーケンスの中の各ブロックチェーントランザクションを取得することと、
第1の候補ハッシュ値を取得することであって、第1の候補ハッシュ値が、a)それぞれのハッシュ値を取得するために最終ブロックチェーントランザクションをハッシュすること、およびb)それぞれの中間結果を取得するためにそれぞれのハッシュ値を順序付きシーケンスの中の先行するブロックチェーントランザクションと連結し、それぞれのハッシュ値を取得するためにそれぞれの中間結果をハッシュすることによって生成され、順序付きシーケンスの中のターゲットブロックチェーントランザクションに後続するブロックチェーントランザクションがそれぞれの中間結果と連結されるとともにそのそれぞれの中間結果がハッシュされて第1の候補ハッシュ値を取得するまでb)が反復されることと、
a)ターゲットブロックチェーントランザクションを第1の候補ハッシュ値と連結することによってそれぞれの中間結果を取得すること、
b)それぞれのハッシュ値を取得するためにそれぞれの中間結果をハッシュすること、
c)それぞれの中間結果を取得するためにそれぞれのハッシュ値を順序付きシーケンスの中の先行するブロックチェーントランザクションと連結し、それぞれのハッシュ値を取得するためにそれぞれの中間結果をハッシュすることによって、
候補トランザクション表記を取得し、初期ブロックチェーントランザクションがそれぞれの中間結果と連結されるとともにそのそれぞれの中間結果がハッシュされて候補トランザクション表記を取得するまでC)が反復されることと、
トランザクション表記と候補トランザクション表記との比較に基づいて、ブロックがターゲットブロックチェーントランザクションを備えるかどうかを決定することとを備える。
【0229】
声明21. 声明20またはそれに従属する任意の声明の方法であって、ターゲットブロックチェーントランザクションの前記取得することは、ブロックチェーンネットワークの1つまたは複数のノードからターゲットブロックチェーントランザクションを取得することを備える。
【0230】
声明22. 声明20またはそれに従属する任意の声明の方法であって、ターゲットブロックチェーントランザクションの前記取得することは、ターゲットブロックチェーントランザクションを1人または複数のユーザから取得することを備える。
【0231】
声明23. 声明20またはそれに従属する任意の声明の方法であって、ターゲットブロックチェーントランザクションに先行する、順序付きシーケンスの中の各ブロックチェーントランザクションの前記取得することは、ブロックチェーンネットワークの1つもしくは複数のノード、および/または1人もしくは複数のユーザから、ターゲットブロックチェーントランザクションに先行する、順序付きシーケンスの中の各ブロックチェーントランザクションを取得することを備える。
【0232】
声明24. 声明20またはそれに従属する任意の声明の方法であって、第1の候補ハッシュ値の前記取得することは、ブロックチェーンネットワークの1つまたは複数のノードから第1の候補ハッシュ値を取得することを備える。
【0233】
声明25. 声明20またはそれに従属する任意の声明の方法であって、ブロックチェーンネットワークの1つまたは複数のノードからトランザクション表記を取得することを備える。
【0234】
声明26. 声明25の方法であって、ターゲットブロックチェーントランザクションのプルーフオブイグジスタンスを求める要求を1つまたは複数のノードへ送信することを備え、トランザクション表記の前記取得することは、要求の前記送信に応答する。
【0235】
声明27. コンピュータ機器であって、
1つまたは複数のメモリユニットを備えるメモリと、
1つまたは複数の処理ユニットを備える処理装置とを備え、メモリは、処理装置上で動作するように構成されたコードを記憶し、コードは、処理装置上にあるときに声明1~26のうちのいずれかの方法を実行するように構成される。
【0236】
声明28. コンピュータ可読ストレージ上に組み込まれ、1つまたは複数のプロセッサ上で動作するときに声明1~26のうちのいずれかの方法を実行するように構成された、コンピュータプログラム。
【0237】
本明細書で開示する別の態様によれば、ブロックチェーンノードおよび検証するパーティのアクションを備える方法が提供されてよい。
【0238】
本明細書で開示する別の態様によれば、ブロックチェーンノードおよび検証するパーティのコンピュータ機器を備えるシステムが提供されてよい。
【符号の説明】
【0239】
100 システム
101 パケット交換ネットワーク
102 コンピュータ端末、コンピュータ機器
103 ユーザ、パーティ
103a アリス
103b ボブ
104 ブロックチェーンノード
105 クライアントアプリケーション
106 ピアツーピア(P2P)ネットワーク、ブロックチェーンネットワーク
107 サイドチャネル
150 ブロックチェーン
151 データ、ブロック
152 トランザクション
153 ジェネシスブロック(Gb)
154 順序付きセット、順序付きプール
155 ブロックポインタ
201 ヘッダ
202 入力、入力フィールド
203 出力、出力フィールド、未消費出力、トランザクション出力、未消費トランザクション出力、UTXO
301 サイドチャネル
401 トランザクションエンジン
402 ユーザインターフェース(UI)レイヤ
450 ノードソフトウェア
451 プロトコルエンジン
452 スクリプトエンジン
453 スタック
454 アプリケーションレベル決定エンジン
455 ブロックチェーン関連機能モジュール
455C コンセンサスモジュール
455P 伝搬モジュール
455S 記憶モジュール
500 ユーザインターフェース(UI)
501 ユーザ選択可能要素、UI要素
502 データ入力フィールド、UI要素
503 情報要素
700 システム
図1
図2
図3A
図3B
図4
図5
図6
図7
【手続補正書】
【提出日】2024-03-13
【手続補正1】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項1】
ブロックチェーンの候補ブロックを構築するコンピュータにより実施される方法であって、
少なくとも初期ブロックチェーントランザクションおよび最終ブロックチェーントランザクションを備える、ブロックチェーントランザクションの順序付きシーケンスを取得するステップと、
トランザクション表記を取得するステップであって、
前記トランザクション表記が、
i)それぞれのハッシュ値を取得するために前記最終ブロックチェーントランザクションをハッシュするステップ、および
ii)それぞれの中間結果を取得するために前記それぞれのハッシュ値を前記順序付きシーケンスの中の先行するブロックチェーントランザクションと連結し、それぞれのハッシュ値を取得するために前記それぞれの中間結果をハッシュするステップによって取得され、
前記初期ブロックチェーントランザクションがそれぞれの中間結果と連結されるとともに前記それぞれの中間結果がハッシュされて前記トランザクション表記を取得するまでii)が反復される、ステップと、
前記候補ブロックを構築するステップであって、前記候補ブロックが前記トランザクション表記を備える、ステップと
を備える、コンピュータにより実施される方法。
【請求項2】
前記候補ブロックがブロックチェーントランザクションのセットを備える、請求項1に記載の方法。
【請求項3】
前記ブロックチェーンの中に含めるために前記候補ブロックをブロックチェーンネットワークにサブミットするステップを備える、請求項1に記載の方法。
【請求項4】
1人または複数のユーザに利用可能な前記トランザクション表記を作成するステップ
を備える、請求項1に記載の方法。
【請求項5】
前記1人または複数のユーザに利用可能な前記トランザクション表記を作成するステップが、前記1人または複数のユーザに利用可能な前記トランザクション表記を送るステップを備える、請求項4に記載の方法。
【請求項6】
前記1人または複数のユーザに利用可能な前記トランザクション表記を作成するステップが、ターゲットブロックチェーントランザクションのプルーフオブイグジスタンスを求める要求の、検証するユーザからの受信に応答する、請求項4に記載の方法。
【請求項7】
前記候補ブロックがブロックチェーントランザクションのセットを備え、
前記1人または複数のユーザに利用可能なブロックチェーントランザクションの前記セットのうちの1つ、一部、または全部を作成するステップ
を備える、請求項4に記載の方法。
【請求項8】
前記候補ブロックがブロックチェーントランザクションのセットを備え、
前記1人または複数のユーザに利用可能なブロックチェーントランザクションの前記セットのうちの1つ、一部、または全部を作成するステップ
を備え、
前記1人または複数のユーザに利用可能なブロックチェーントランザクションの前記セットのうちの前記1つ、一部、または全部を作成するステップが、前記検証するユーザに利用可能な前記ターゲットブロックチェーントランザクションを作成するステップを備える、請求項6に記載の方法。
【請求項9】
1つまたは複数のブロックチェーンノードに利用可能なブロックチェーントランザクションの前記順序付きシーケンスのうちの1つまたは複数を作成するステップ
を備える、請求項1に記載の方法。
【請求項10】
前記1つまたは複数のブロックチェーンノードに利用可能なブロックチェーントランザクションの前記順序付きシーケンスのうちの前記1つまたは複数を作成するステップが、ブロックチェーントランザクションの前記順序付きシーケンスのうちの前記1つまたは複数をブロックチェーンノードへ送るステップを備える、請求項9に記載の方法。
【請求項11】
各ハッシュ演算がSHAベースのハッシュ関数を使用して実行される、請求項1に記載の方法。
【請求項12】
前記SHAベースのハッシュ関数がSHA256ハッシュ関数である、請求項11に記載の方法。
【請求項13】
前記候補ブロックが、前記ブロックチェーンの以前のブロックに前記ブロックをリンクするために使用されたブロックヘッダを備え、
前記ブロックヘッダが前記トランザクション表記を備える、請求項1に記載の方法。
【請求項14】
前記ブロックヘッダが、前記以前のブロックのそれぞれのブロックヘッダのハッシュ、および前記ブロックヘッダがハッシュされると前記ブロックヘッダの結果として得られたハッシュが所定の難解ターゲットを満たすようなナンス値を備える、請求項13に記載の方法。
【請求項15】
ブロックチェーントランザクションの前記順序付きシーケンスがコインベーストランザクションを備える、請求項1に記載の方法。
【請求項16】
ブロックチェーントランザクションの前記順序付きシーケンスの各々にそれぞれのインデックスを割り当てるステップ
を備える、請求項1に記載の方法。
【請求項17】
前記候補ブロックがブロックチェーントランザクションのセットを備え、
ブロックチェーントランザクションの前記セットの各々の前記それぞれのインデックスを前記候補ブロックの中に明示的に記録するステップ
を備える、請求項16に記載の方法。
【請求項18】
ブロックチェーントランザクションの前記順序付きシーケンスを取得するステップが、前記ブロックチェーントランザクションのうちの少なくともいくつかを1人または複数のユーザから受信するステップを備える、請求項1に記載の方法。
【請求項19】
ブロックチェーントランザクションの前記順序付きシーケンスを取得するステップが、前記ブロックチェーントランザクションのうちの少なくともいくつかをブロックチェーンネットワークの1つまたは複数のノードから受信するステップを備える、請求項1に記載の方法。
【請求項20】
ブロックチェーンのブロックがターゲットブロックチェーントランザクションを備えるかどうかを決定するコンピュータにより実施される方法であって、
前記ブロックがトランザクション表記を備え、
前記トランザクション表記が、i)それぞれのハッシュ値を取得するために最終ブロックチェーントランザクションをハッシュすること、およびii)それぞれの中間結果を取得するために前記それぞれのハッシュ値を順序付きシーケンスの中の先行するブロックチェーントランザクションと連結し、それぞれのハッシュ値を取得するために前記それぞれの中間結果をハッシュすることによって取得され、
初期ブロックチェーントランザクションがそれぞれの中間結果と連結されるとともに前記それぞれの中間結果がハッシュされて前記トランザクション表記を取得するまでii)が反復され、前記方法が、
前記ターゲットブロックチェーントランザクションを取得するステップと、
前記ターゲットブロックチェーントランザクションに先行する、前記順序付きシーケンスの中の各ブロックチェーントランザクションを取得するステップと、
第1の候補ハッシュ値を取得するステップであって、
前記第1の候補ハッシュ値が、a)それぞれのハッシュ値を取得するために前記最終ブロックチェーントランザクションをハッシュするステップ、およびb)それぞれの中間結果を取得するために前記それぞれのハッシュ値を前記順序付きシーケンスの中の先行するブロックチェーントランザクションと連結し、それぞれのハッシュ値を取得するために前記それぞれの中間結果をハッシュするステップによって生成され、
前記順序付きシーケンスの中の前記ターゲットブロックチェーントランザクションに後続する前記ブロックチェーントランザクションがそれぞれの中間結果と連結されるとともに前記それぞれの中間結果がハッシュされて前記第1の候補ハッシュ値を取得するまでb)が反復される、ステップと、
a)前記ターゲットブロックチェーントランザクションを前記第1の候補ハッシュ値と連結することによってそれぞれの中間結果を取得するステップ、
b)それぞれのハッシュ値を取得するために前記それぞれの中間結果をハッシュするステップ、
c)それぞれの中間結果を取得するために前記それぞれのハッシュ値を前記順序付きシーケンスの中の先行するブロックチェーントランザクションと連結し、それぞれのハッシュ値を取得するために前記それぞれの中間結果をハッシュするステップによって、
候補トランザクション表記を取得し、
前記初期ブロックチェーントランザクションがそれぞれの中間結果と連結されるとともに前記それぞれの中間結果がハッシュされて前記候補トランザクション表記を取得するまでc)が反復される、ステップと、
前記トランザクション表記と前記候補トランザクション表記との比較に基づいて、前記ブロックが前記ターゲットブロックチェーントランザクションを備えるかどうかを決定するステップと
を備える、コンピュータにより実施される方法。
【請求項21】
前記ターゲットブロックチェーントランザクションを取得するステップが、ブロックチェーンネットワークの1つまたは複数のノードから前記ターゲットブロックチェーントランザクションを取得するステップを備える、請求項20に記載の方法。
【請求項22】
前記ターゲットブロックチェーントランザクションを取得するステップが、前記ターゲットブロックチェーントランザクションを1人または複数のユーザから取得するステップを備える、請求項20に記載の方法。
【請求項23】
前記ターゲットブロックチェーントランザクションに先行する、前記順序付きシーケンスの中の各ブロックチェーントランザクションを取得するステップが、ブロックチェーンネットワークの1つもしくは複数のノード、および/または1人もしくは複数のユーザから、前記ターゲットブロックチェーントランザクションに先行する、前記順序付きシーケンスの中の各ブロックチェーントランザクションを取得するステップを備える、請求項20に記載の方法。
【請求項24】
前記第1の候補ハッシュ値を取得するステップが、ブロックチェーンネットワークの1つまたは複数のノードから前記第1の候補ハッシュ値を取得するステップを備える、請求項20に記載の方法。
【請求項25】
ロックチェーンネットワークの1つまたは複数のノードから前記トランザクション表記を取得するステップを備える、請求項20に記載の方法。
【請求項26】
前記ターゲットブロックチェーントランザクションのプルーフオブイグジスタンスを求める要求を前記1つまたは複数のノードへ送信するステップを備え、
前記トランザクション表記を取得するステップが、前記要求の前記送信に応答する、請求項25に記載の方法。
【請求項27】
コンピュータ機器であって、
1つまたは複数のメモリユニットを備えるメモリと、
1つまたは複数の処理ユニットを備える処理装置と
を備え、前記メモリが、前記処理装置上で動作するように構成されたコードを記憶し、前記コードが、前記処理装置上で請求項1から26のいずれか一項に記載の方法を実行するように構成される、コンピュータ機器。
【請求項28】
コンピュータ可読ストレージ上に組み込まれ、1つまたは複数のプロセッサ上で動作するときに請求項1から26のいずれか一項に記載の方法を実行するように構成された、コンピュータプログラム。
【国際調査報告】