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

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

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

<>
  • 特表-署名ベースのアトミックスワップ 図1
  • 特表-署名ベースのアトミックスワップ 図2
  • 特表-署名ベースのアトミックスワップ 図3A
  • 特表-署名ベースのアトミックスワップ 図3B
  • 特表-署名ベースのアトミックスワップ 図4
  • 特表-署名ベースのアトミックスワップ 図5
  • 特表-署名ベースのアトミックスワップ 図6
  • 特表-署名ベースのアトミックスワップ 図7
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-12-26
(54)【発明の名称】署名ベースのアトミックスワップ
(51)【国際特許分類】
   H04L 9/32 20060101AFI20241219BHJP
【FI】
H04L9/32 200C
H04L9/32 200Z
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2024537538
(86)(22)【出願日】2022-11-23
(85)【翻訳文提出日】2024-08-20
(86)【国際出願番号】 EP2022082968
(87)【国際公開番号】W WO2023117274
(87)【国際公開日】2023-06-29
(31)【優先権主張番号】2118682.0
(32)【優先日】2021-12-21
(33)【優先権主張国・地域又は機関】GB
(81)【指定国・地域】
(71)【出願人】
【識別番号】318001991
【氏名又は名称】エヌチェーン ライセンシング アーゲー
(74)【代理人】
【識別番号】100108453
【弁理士】
【氏名又は名称】村山 靖彦
(74)【代理人】
【識別番号】100110364
【弁理士】
【氏名又は名称】実広 信哉
(74)【代理人】
【識別番号】100133400
【弁理士】
【氏名又は名称】阿部 達彦
(72)【発明者】
【氏名】キャサリン・モロイ
(72)【発明者】
【氏名】クレイグ・スティーヴン・ライト
(72)【発明者】
【氏名】ウェイ・ジャン
(57)【要約】
第1の関係者および第2の関係者を含むシステムにおいて実行される方法であって、第1の関係者によって、第2の関係者に関連する前のトランザクションからの出力に基づく入力を有する第1のトランザクションのテンプレートを生成するステップと、第1の関係者によって、第1のトランザクションのテンプレートに基づくメッセージを生成するステップと、第1の関係者によって、メッセージに基づく秘密を生成するステップと、第1の関係者によって、秘密に基づく値を生成するステップであって、秘密が、値から導出され得ない、ステップと、第1の関係者によって、第1のパズルトランザクションを生成するステップであって、第1のパズルトランザクションの第1のロックスクリプトが、ロック解除スクリプトが秘密を含むことを要求するように構成された知識証明を含む、ステップと、第1の関係者によって、第1のパズルトランザクションを第1のブロックチェーンに公開するステップと、第2の関係者によって、秘密に基づく値を取得するステップと、前記第2の関係者によって、署名を作成するために前記秘密に基づく前記値に署名するステップと、第2の関係者から第1の関係者に署名を送信するステップと、第1の関係者によって、第1のトランザクションのロック解除スクリプトに署名を含め、それから、第1のトランザクションを第2のブロックチェーンに送信するステップと、第2の関係者によって、第2のブロックチェーン上の第1のトランザクションから、メッセージおよび秘密を決定するステップと、第2の関係者によって、秘密に基づいて第1のパズルトランザクションの第1の出力のロックを解除する第2のトランザクションを作成し、第2のトランザクションを第1のブロックチェーンに提出するステップとを含む、方法。
【特許請求の範囲】
【請求項1】
第1の関係者および第2の関係者を含むシステムにおいて実行される方法であって、
前記第1の関係者によって、前記第2の関係者に関連する前のトランザクションからの出力に基づく入力を有する第1のトランザクションのテンプレートを生成するステップと、
前記第1の関係者によって、前記第1のトランザクションの前記テンプレートに基づくメッセージを生成するステップと、
前記第1の関係者によって、前記メッセージに基づく秘密を生成するステップと、
前記第1の関係者によって、前記秘密に基づく値を生成するステップであって、前記秘密が、前記値から導出され得ない、ステップと、
前記第1の関係者によって、第1のパズルトランザクションを生成するステップであって、前記第1のパズルトランザクションの第1のロックスクリプトが、ロック解除スクリプトが前記秘密を含むことを要求するように構成された知識証明を含む、ステップと、
前記第1の関係者によって、前記第1のパズルトランザクションを第1のブロックチェーンに公開するステップと、
前記第2の関係者によって、前記秘密に基づく前記値を取得するステップと、
前記第2の関係者によって、署名を作成するために前記秘密に基づく前記値に署名するステップと、
前記第2の関係者から前記第1の関係者に前記署名を送信するステップと、
前記第1の関係者によって、前記第1のトランザクションの前記ロック解除スクリプトに前記署名を含め、それから、前記第1のトランザクションを第2のブロックチェーンに送信するステップと、
前記第2の関係者によって、前記第2のブロックチェーン上の前記第1のトランザクションから、前記メッセージおよび前記秘密を決定するステップと、
前記第2の関係者によって、前記秘密に基づいて前記第1のパズルトランザクションの第1の出力のロックを解除する第2のトランザクションを作成し、前記第2のトランザクションを前記第1のブロックチェーンに提出するステップとを含む、方法。
【請求項2】
前記第1のトランザクションの出力が、前記第1の関係者の公開鍵にロックされる請求項1に記載の方法。
【請求項3】
前記第1のパズルトランザクションが、前記第2の関係者の公開鍵にロックされる請求項1に記載の方法。
【請求項4】
前記第2の関係者によって、前記秘密に基づく前記値を取得するステップが、前記第2の関係者によって、前記第1のパズルトランザクションから前記秘密に基づく前記値を取得することを含み、前記方法が、
前記第2の関係者によって、前記第1の関係者から、前記第1のパズルトランザクションからの前記秘密に基づく前記値の候補値を受信するステップ、
前記第2の関係者によって、前記候補値と前記第1のパズルトランザクションからの前記秘密に基づく前記値とが等しいことをチェックするステップを含む請求項1に記載の方法。
【請求項5】
前記秘密が、前記第1のトランザクションの入力および対応する出力を含む請求項1に記載の方法。
【請求項6】
前記秘密が、前記第1のトランザクションのすべての入力およびすべての出力を含む請求項1に記載の方法。
【請求項7】
前記秘密が、前記第1のトランザクションの入力を含み、前記第1のトランザクションの出力のいずれも含まない請求項1に記載の方法。
【請求項8】
前記第1のトランザクションの入力が、前記前のトランザクションの複数署名出力のロックを解除し、前記複数署名出力が、前記第1の関係者および/または前記第2の関係者の1つまたは複数の公開鍵にロックされる請求項1に記載の方法。
【請求項9】
第5のトランザクションが、第3の関係者の公開鍵にロックされた出力を含み、前記方法が、
前記第1の関係者によって、前記第5のトランザクションの前記出力を消費する第3のトランザクションのテンプレートを生成するステップと、
前記第1の関係者によって、前記第3のトランザクションの前記テンプレートに基づく第2のメッセージを生成するステップと、
前記第1の関係者によって、前記第2のメッセージに基づく第2の秘密を生成するステップと、
前記第1の関係者によって、前記第2の秘密に基づく第2の値を生成するステップであって、前記第2の秘密が、前記第2の値から導出され得ない、ステップと、
前記第1の関係者によって、第2のパズルトランザクションを生成するステップであって、前記第2のパズルトランザクションの第2のロックスクリプトが、第2のロック解除スクリプトが前記第2の秘密を含むことを要求するように構成された知識証明を含む、ステップと、
第3の関係者によって、第2の署名を作成するために前記第2の秘密に基づく前記第2の値に署名するステップと、
前記第3の関係者から第4の関係者に前記第2の署名を送信するステップと、
第4の関係者によって、前記第3のトランザクションを取得するステップと、
前記第4の関係者によって、前記第3のトランザクションのロック解除スクリプトに前記第2の署名を含め、それから、前記第3のトランザクションを前記第2のブロックチェーンに送信するステップと、
前記第3の関係者によって、前記第2のブロックチェーン上の前記第3のトランザクションから、前記第2のメッセージおよび前記第2の秘密を決定するステップと、
前記第3の関係者によって、前記第2の秘密に基づいて前記第2のパズルトランザクションの出力のロックを解除する第4のトランザクションを作成し、前記第2のトランザクションを前記第1のブロックチェーンに提出するステップとを含む請求項1に記載の方法。
【請求項10】
前記第1のパズルトランザクションおよび前記第2のパズルトランザクションが、独立したパズルトランザクションである請求項9に記載の方法。
【請求項11】
前記第1のパズルトランザクションが、前記第2のパズルトランザクションを含む請求項9に記載の方法。
【請求項12】
前記第1のブロックチェーンおよび前記第2のブロックチェーンが、異なるブロックチェーンである請求項1に記載の方法。
【請求項13】
前記第1のブロックチェーンおよび前記第2のブロックチェーンが、同じブロックチェーンである請求項1に記載の方法。
【請求項14】
前記秘密が、前記メッセージをハッシュすることによって生成される請求項1に記載の方法。
【請求項15】
前記秘密が、Rパズルを使用することによって生成される請求項1に記載の方法。
【請求項16】
第1の関係者によって実行される方法であって、
第2の関係者に関連する前のトランザクションからの出力に基づく入力を有する第1のトランザクションのテンプレートを生成するステップ、
前記第1のトランザクションの前記テンプレートに基づくメッセージを生成するステップ、
前記メッセージに基づく秘密を生成するステップ、
前記秘密に基づく値を生成するステップであって、前記秘密が、前記値から導出され得ない、ステップ、
第1のパズルトランザクションを生成するステップであって、前記第1のパズルトランザクションの第1のロックスクリプトが、ロック解除スクリプトが前記秘密を含むことを要求するように構成された知識証明を含む、ステップ、
前記第1のパズルトランザクションを第1のブロックチェーンに公開するステップ、
前記第2の関係者から署名を受信するステップであって、前記署名が、前記秘密に基づく前記値を使用して前記第2の関係者によって作成される、ステップ、
前記第1のトランザクションの前記ロック解除スクリプトに前記署名を含め、それから、前記第1のトランザクションを第2のブロックチェーンに送信するステップを含む、方法。
【請求項17】
前記第1のトランザクションの出力が、前記第1の関係者の公開鍵にロックされる請求項16に記載の方法。
【請求項18】
前記第1のパズルトランザクションが、前記第2の関係者の公開鍵にロックされる請求項16に記載の方法。
【請求項19】
前記第1のパズルトランザクションからの前記秘密に基づく前記値の候補値を前記第2の関係者に送信するステップを含む請求項16に記載の方法。
【請求項20】
前記秘密が、前記第1のトランザクションの入力および対応する出力を含む請求項16に記載の方法。
【請求項21】
前記秘密が、前記第1のトランザクションのすべての入力およびすべての出力を含む請求項16に記載の方法。
【請求項22】
前記秘密が、前記第1のトランザクションの入力を含み、前記第1のトランザクションの出力のいずれも含まない請求項16に記載の方法。
【請求項23】
前記第1のトランザクションの入力が、前記前のトランザクションの複数署名出力のロックを解除し、前記複数署名出力が、前記第1の関係者および/または前記第2の関係者の1つまたは複数の公開鍵にロックされる請求項16に記載の方法。
【請求項24】
第5のトランザクションが、第3の関係者の公開鍵にロックされた出力を含み、前記方法が、
前記第5のトランザクションの前記出力を消費する第3のトランザクションのテンプレートを生成するステップと、
前記第3のトランザクションの前記テンプレートに基づく第2のメッセージを生成するステップと、
前記第2のメッセージに基づく第2の秘密を生成するステップと、
前記第2の秘密に基づく第2の値を生成するステップであって、前記第2の秘密が、前記第2の値から導出され得ない、ステップと、
前記第1の関係者によって、第2のパズルトランザクションを生成するステップであって、前記第2のパズルトランザクションの第2のロックスクリプトが、第2のロック解除スクリプトが前記第2の秘密を含むことを要求するように構成された知識証明を含む、ステップとを含む請求項16に記載の方法。
【請求項25】
前記第1のパズルトランザクションおよび前記第2のパズルトランザクションが、独立したパズルトランザクションである請求項24に記載の方法。
【請求項26】
前記第1のパズルトランザクションが、前記第2のパズルトランザクションを含む請求項24に記載の方法。
【請求項27】
前記第1のブロックチェーンおよび前記第2のブロックチェーンが、異なるブロックチェーンである請求項16に記載の方法。
【請求項28】
前記第1のブロックチェーンおよび前記第2のブロックチェーンが、同じブロックチェーンである請求項16に記載の方法。
【請求項29】
前記秘密が、前記メッセージをハッシュすることによって生成される請求項16に記載の方法。
【請求項30】
前記秘密が、Rパズルを使用することによって生成される請求項16に記載の方法。
【請求項31】
秘密に基づいて第1の関係者によって生成された値を第2の関係者によって取得するステップであって、前記秘密が、前記値から導出され得ず、前記秘密が、第1のトランザクションのテンプレートに基づいて前記第1の関係者によって生成されたメッセージに基づき、前記第1のトランザクションの前記テンプレートが、前記第2の関係者に関連する前のトランザクションからの出力に基づく入力を有する、ステップと、
前記第2の関係者によって、署名を作成するために前記秘密に基づく前記値に署名するステップと、
前記第2の関係者から前記第1の関係者に前記署名を送信するステップであって、前記第1の関係者が、前記第1のトランザクションのロック解除スクリプトに前記署名を含め、それから、前記第1のトランザクションを第2のブロックチェーンに送信する、ステップと、
前記第2の関係者によって、前記第2のブロックチェーン上の前記第1のトランザクションから、前記メッセージおよび前記秘密を決定するステップと、
前記第2の関係者によって、前記秘密に基づいて第1のパズルトランザクションの第1の出力のロックを解除する第2のトランザクションを作成し、前記第2のトランザクションを第1のブロックチェーンに提出するステップであって、前記第1のパズルトランザクションの第1のロックスクリプトが、ロック解除スクリプトが前記秘密を含むことを要求するように構成された知識証明を含む、ステップとを含み、
前記第1のトランザクションの前記テンプレート、前記秘密、および前記第1のパズルトランザクションが、前記第1の関係者によって生成される方法。
【請求項32】
前記第1のトランザクションが、前記第1の関係者の公開鍵にロックされる請求項31に記載の方法。
【請求項33】
前記第1のパズルトランザクションが、前記第2の関係者の公開鍵にロックされる請求項31に記載の方法。
【請求項34】
前記秘密に基づく前記値を取得するステップが、前記第1のパズルトランザクションから前記秘密に基づく前記値を取得することを含み、前記方法が、
前記第1の関係者から、前記第1のパズルトランザクションからの前記秘密に基づく前記値の候補値を受信するステップ、
前記候補値と前記第1のパズルトランザクションからの前記秘密に基づく前記値とが等しいことをチェックするステップを含む請求項31に記載の方法。
【請求項35】
前記秘密が、前記第1のトランザクションの入力および対応する出力を含む請求項31に記載の方法。
【請求項36】
前記秘密が、前記第1のトランザクションのすべての入力およびすべての出力を含む請求項31に記載の方法。
【請求項37】
前記秘密が、前記第1のトランザクションの入力を含み、前記第1のトランザクションの出力のいずれも含まない請求項31に記載の方法。
【請求項38】
前記第1のトランザクションの入力が、前記前のトランザクションの複数署名出力のロックを解除し、前記複数署名出力が、前記第1の関係者および/または前記第2の関係者の1つまたは複数の公開鍵にロックされる請求項31に記載の方法。
【請求項39】
第5のトランザクションが、第3の関係者の公開鍵にロックされた出力を含み、前記第1の関係者が、
前記第5のトランザクションの前記出力を消費する第3のトランザクションのテンプレートを生成することと、
前記第3のトランザクションの前記テンプレートに基づく第2のメッセージを生成することと、
前記第2のメッセージに基づく第2の秘密を生成することと、
前記第2の秘密に基づく第2の値を生成することであって、前記第2の秘密が、前記第2の値から導出され得ない、生成することと、
前記第1の関係者によって、第2のパズルトランザクションを生成することであって、前記第2のパズルトランザクションの第2のロックスクリプトが、第2のロック解除スクリプトが前記第2の秘密を含むことを要求するように構成された知識証明を含む、生成することとを実行する請求項31に記載の方法。
【請求項40】
前記第1のパズルトランザクションおよび前記第2のパズルトランザクションが、独立したパズルトランザクションである請求項39に記載の方法。
【請求項41】
前記第1のパズルトランザクションが、前記第2のパズルトランザクションを含む請求項39に記載の方法。
【請求項42】
前記第1のブロックチェーンおよび前記第2のブロックチェーンが、異なるブロックチェーンである請求項31に記載の方法。
【請求項43】
前記第1のブロックチェーンおよび前記第2のブロックチェーンが、同じブロックチェーンである請求項31に記載の方法。
【請求項44】
前記秘密が、前記メッセージをハッシュすることによって生成される請求項31に記載の方法。
【請求項45】
前記秘密が、Rパズルを使用することによって生成される請求項31に記載の方法。
【請求項46】
1つまたは複数のメモリユニットを含むメモリと、
1つまたは複数の処理ユニットを含む処理装置であって、前記メモリが、処理装置上で実行されるように配置されたコードを記憶し、前記コードが、処理装置上にあるときに、請求項1から45のいずれか一項に記載の方法を実行するように構成される、処理装置とを含むコンピュータ機器。
【請求項47】
コンピュータ可読ストレージ上に具現化され、1つまたは複数のプロセッサ上で実行されるときに、請求項1から45のいずれか一項に記載の方法を実行するように構成されたコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、トランザクションを安全に行うための方法に関する。方法は、ブロックチェーンテクノロジーに適用可能である。
【背景技術】
【0002】
ブロックチェーンは、分散型データ構造の形態を指し、分散型ピアツーピア(P2P)ネットワーク(以下、「ブロックチェーンネットワーク」と呼ばれる)の複数のノードの各々においてブロックチェーンの複製が維持され、広く公開される。ブロックチェーンは、データのブロックのチェーンを含み、各ブロックが、1つまたは複数のトランザクションを含む。いわゆる「コインベーストランザクション」以外の各トランザクションは、1つまたは複数のコインベーストランザクションに戻る1つまたは複数のブロックに及ぶ可能性があるシーケンス内の先行トランザクションを後ろ向きに指し示す。コインベーストランザクションは、下でさらに検討される。ブロックチェーンネットワークに提出されるトランザクションは、新しいブロックに含められる。新しいブロックは、多くの場合「マイニング」と呼ばれるプロセスによって作成され、マイニングは、複数のノードの各々が「プルーフオブワーク」、すなわち、ブロックチェーンの新しいブロックに含められるのを待っている順序付けられた承認済みの保留トランザクションの定義されたセットの表現に基づく暗号パズルを解くことを競い合って実行することを含む。ブロックチェーンは一部のノードにおいて刈り込まれる場合があり、ブロックの公開は単なるブロックヘッダの公開によって実現され得ることに留意されたい。
【0003】
ブロックチェーンにおけるトランザクションは、以下の目的、すなわち、デジタル資産(すなわち、いくつかのデジタルトークン)の伝達、仮想台帳もしくはレジストリのエントリのセットの順序付け、タイムスタンプエントリの受信および処理、ならびに/またはインデックスポインタの時間順序付け(time-order)のうちの1つまたは複数のために使用される場合がある。ブロックチェーンは、ブロックチェーンの上にさらなる機能を積み重ねるために利用されることも可能である。たとえば、ブロックチェーンのプロトコルは、トランザクションに追加のユーザデータまたはデータへのインデックスを記憶することを可能にする場合がある。単一のトランザクションに記憶され得る最大データ容量に対する予め規定された制限はなく、したがって、より一層複雑なデータが組み込まれ得る。たとえば、これは、電子文書をブロックチェーンに記憶するため、またはオーディオもしくはビデオデータを記憶するために使用されてよい。
【0004】
ブロックチェーンネットワークのノード(多くの場合「マイナー」と呼ばれる)は、後でより詳細に説明される分散型トランザクション登録および検証プロセスを実行する。要約すると、このプロセス中に、ノードは、トランザクションを承認し、それらが有効なプルーフオブワークの解を特定しようと試みるブロックテンプレートにトランザクションを挿入する。有効な解が見つかると、新しいブロックが、ネットワークのその他のノードに伝播され、したがって、各ノードがブロックチェーンに新しいブロックを記録することを可能にする。ブロックチェーンにトランザクションを記録させるために、ユーザ(たとえば、ブロックチェーンクライアントアプリケーション)は、伝播されるようにネットワークのノードのうちの1つにトランザクションを送信する。トランザクションを受信するノードは、承認されたトランザクションを新しいブロックに組み込むプルーフオブワークの解を見つけるために競争してよい。各ノードは、トランザクションが有効であるための1つまたは複数の条件を含む同じノードプロトコルを施行するように構成される。無効なトランザクションは伝播されず、ブロックに組み込まれることもない。トランザクションが承認され、それによってブロックチェーンに受け入れられると仮定すると、トランザクション(任意のユーザデータを含む)は、したがって、不変の公的記録としてブロックチェーンネットワークのノードの各々に登録され、インデックス付けされたままとなる。
【0005】
プルーフオブワークのパズルを解いて最新のブロックを作ることに成功したノードは、概して、ある額のデジタル資産、すなわち、いくつかのトークンを分配する「コインベーストランザクション」と呼ばれる新しいトランザクションによって報酬を与えられる。無効なトランザクションの検出および拒否は、ネットワークのエージェントとして働き、不正行為を報告し、ブロックするようにインセンティブを与えられる競い合うノードのアクションによって施行される。情報の広範な公開は、ユーザがノードの性能を継続的に監査することを可能にする。単なるブロックヘッダの公開は、参加者がブロックチェーンの継続している完全性を保証することを可能にする。
【0006】
「出力ベース」のモデル(UTXOベースのモデルと呼ばれることもある)において、所与のトランザクションのデータ構造は、1つまたは複数の入力および1つまたは複数の出力を含む。すべての消費可能な出力は、トランザクションの進行中のシーケンスから導出可能なデジタル資産の額を指定する要素を含む。消費可能な出力は、UTXO(「未使用トランザクション出力(unspent transaction output)」)と呼ばれることもある。出力は、出力の将来の履行(redemption)の条件を指定するロックスクリプトをさらに含んでよい。ロックスクリプトは、デジタルトークンまたは資産を承認し、送金するために必要な条件を定義するプレディケート(predicate)である。(コインベーストランザクション以外の)トランザクションの各入力は、先行トランザクションのそのような出力へのポインタ(すなわち、参照)を含み、指し示される出力のロックスクリプトのロックを解除するためのロック解除スクリプトをさらに含んでよい。そこで、一対のトランザクションを考え、それらを第1のトランザクションおよび第2のトランザクション(または「目標」トランザクション)と呼ぶ。第1のトランザクションは、デジタル資産の額を指定する少なくとも1つの出力を含み、出力のロックを解除する1つまたは複数の条件を定義するロックスクリプトを含む。第2の、目標トランザクションは、第1のトランザクションの出力へのポインタと、第1のトランザクションの出力のロックを解除するためのロック解除スクリプトとを含む少なくとも1つの入力を含む。
【0007】
そのようなモデルにおいては、第2の、目標トランザクションがブロックチェーン内で伝播され、記録されるようにブロックチェーンネットワークに送信されるとき、各ノードにおいて適用される有効性の基準のうちの1つは、ロック解除スクリプトが第1のトランザクションのロックスクリプトにおいて定義された1つまたは複数の条件のすべてを満たすことである。別の基準は、第1のトランザクションの出力が、別の以前の有効なトランザクションによって既に履行されていないことである。これらの条件のいずれかに従って目標トランザクションが無効であることが分かったすべてのノードは、そのトランザクションを伝播せず(有効なトランザクションとしては、ただし、場合によっては無効なトランザクションを登録するために伝播する)、そのトランザクションをブロックチェーンに記録されるように新しいブロックに含めることもない。
【0008】
代替的な種類のトランザクションモデルは、アカウントベースのモデルである。この場合、各トランザクションは、過去のトランザクションのシーケンス内の先行トランザクションのUTXOを参照することによって送金される額を定義するのではなく、絶対的なアカウントの残高を参照することによって送金される額を定義する。すべてのアカウントの現在の状態は、ブロックチェーンとは別のノードによって記憶され、絶えず更新される。
【発明の概要】
【課題を解決するための手段】
【0009】
一部の例において、未公開トランザクションの署名メッセージに基づく秘密の値が決定される。秘密のトランザクションが明かされる前に、秘密によってロックを解除され得るパズルトランザクションが生成され、公開される。秘密のトランザクションが公開されるとき、それは、2人の関係者の間のアトミックスワップを生み出す。これは、どちらかの関係者がお互いを「だます」ことを防止することによって、セキュリティを高める。
【0010】
本明細書において開示される一態様によれば、第1の関係者および第2の関係者を含むシステムにおいて実行される方法が提供される。方法は、第1の関係者によって、第2の関係者に関連する前のトランザクションからの出力に基づく入力を有する第1のトランザクションのテンプレートを生成するステップを含む。方法は、第1の関係者によって、第1のトランザクションのテンプレートに基づくメッセージを生成するステップと、第1の関係者によって、メッセージに基づく秘密を生成するステップとを含み得る。方法は、第1の関係者によって、秘密に基づく値を生成するステップであって、秘密が、値から導出され得ない、ステップと、第1の関係者によって、第1のパズルトランザクションを生成するステップであって、第1のパズルトランザクションの第1のロックスクリプトが、ロック解除スクリプトが秘密を含むことを要求するように構成された知識証明(knowledge proof)を含む、ステップとをさらに含み得る。方法は、第1の関係者が第1のパズルトランザクションを第1のブロックチェーンに公開するステップと、第2の関係者が秘密に基づく値を取得し、署名を作成するために秘密に基づく値に署名するステップとを含んでよい。方法は、第2の関係者から第1の関係者に署名を送信するステップと、第1の関係者によって、第1のトランザクションのロック解除スクリプトに署名を含め、それから、第1のトランザクションを第2のブロックチェーンに送信するステップとをさらに含んでよい。方法は、第2の関係者によって、第2のブロックチェーン上の第1のトランザクションから、メッセージおよび秘密を決定するステップと、第2の関係者によって、秘密に基づいて第1のパズルトランザクションの第1の出力のロックを解除する第2のトランザクションを作成し、第2のトランザクションを第1のブロックチェーンに提出するステップとをさらに含んでよい。
【0011】
本開示の実施形態の理解を助け、そのような実施形態がどのようにして実施されてよいかを示すために、添付の図面が、例としてのみ参照される。
【図面の簡単な説明】
【0012】
図1】ブロックチェーンを実装するためのシステムの概略的なブロック図である。
図2】ブロックチェーンに記録されてよいトランザクションのいくつかの例を概略的に示す図である。
図3A】クライアントアプリケーションの概略的なブロック図である。
図3B図3Aのクライアントアプリケーションによって提示されてよい例示的なユーザインターフェースの概略的なモックアップの図である。
図4】トランザクションを処理するためのあるノードソフトウェアの概略的なブロック図である。
図5】6つの異なる種類のsighashフラグの概略図である。
図6】例示的な方法の流れの図である。
図7】例示的な方法の流れの図である。
【発明を実施するための形態】
【0013】
例示的なシステムの概要
図1は、ブロックチェーン150を実装するための例示的なシステム100を示す。システム100は、パケット交換ネットワーク101、典型的には、インターネットなどの広域インターネットワークを含んでよい。パケット交換ネットワーク101は、パケット交換ネットワーク101内でピアツーピア(P2P)ネットワーク106を形成するように配置される場合がある複数のブロックチェーンノード104を含む。図示されていないが、ブロックチェーンノード104は、ほぼ完全なグラフ(near-complete graph)として配置される場合がある。したがって、各ブロックチェーンノード104は、その他のブロックチェーンノード104と緊密に接続される。
【0014】
各ブロックチェーンノード104は、ピアのコンピュータ機器を含み、ノード104のうちの異なるノードは、異なるピアに属する。各ブロックチェーンノード104は、1つまたは複数のプロセッサ、たとえば、1つまたは複数の中央演算処理装置(CPU)、アクセラレータプロセッサ、特定用途向けプロセッサおよび/またはフィールドプログラマブルゲートアレイ(FPGA)、ならびに特定用途向け集積回路(ASIC)などのその他の機器を含む処理装置を含む。各ノードは、メモリ、すなわち、1つの非一時的コンピュータ可読媒体または複数の非一時的コンピュータ可読媒体の形態のコンピュータ可読ストレージも含む。メモリは、1つまたは複数のメモリ媒体、たとえば、ハードディスクなどの磁気媒体、ソリッドステートドライブ(SSD)、フラッシュメモリ、もしくはEEPROMなどの電子媒体、および/または光ディスクドライブなどの光媒体を採用する1つまたは複数のメモリユニットを含んでよい。
【0015】
ブロックチェーン150は、データのブロック151のチェーンを含み、ブロックチェーン150のそれぞれのコピーが、分散型またはブロックチェーンネットワーク106の複数のブロックチェーンノード104の各々において維持される。上述のように、ブロックチェーン150のコピーを維持することは、必ずしもブロックチェーン150をすべて記憶することを意味しない。そうではなく、各ブロックチェーンノード150が各ブロック151のブロックヘッダ(下で検討される)を記憶する限り、ブロックチェーン150は、データを刈り込まれる場合がある。チェーンの各ブロック151は、1つまたは複数のトランザクション152を含み、この文脈におけるトランザクションは、データ構造の一種を指す。データ構造の性質は、トランザクションモデルまたは方式の一部として使用されるトランザクションプロトコルの種類に依存する。所与のブロックチェーンは、全体を通じて1つの特定のトランザクションプロトコルを使用する。1つのよくある種類のトランザクションプロトコルにおいて、各トランザクション152のデータ構造は、少なくとも1つの入力および少なくとも1つの出力を含む。各出力は、財産としてのデジタル資産の量を表す額を指定し、その例は、出力が暗号的にロックされるユーザ103である(ロックを解除され、それによって、履行または消費されるためにはそのユーザの署名またはその他の解決策を必要とする)。各入力は、先行トランザクション152の出力を後ろ向きに指し示し、それによって、トランザクションをリンクする。
【0016】
各ブロック151は、ブロック151までの発生順を定義するために、チェーン内の前に作成されたブロック151を後ろ向きに指し示すブロックポインタ155も含む。(コインベーストランザクション以外の)各トランザクション152は、トランザクションのシーケンスに順序を定義するように、前のトランザクションに戻るポインタを含む(トランザクション152のシーケンスは分岐することを許されることに注意されたい)。ブロック151のチェーンは、チェーンの最初のブロックであったジェネシスブロック(Gb)153までさかのぼる。チェーン150の初期の1つまたは複数の当初のトランザクション152は、先行トランザクションではなくジェネシスブロック153を指し示していた。
【0017】
ブロックチェーンノード104の各々は、トランザクション152をその他のブロックチェーンノード104に転送し、それによって、トランザクション152をネットワーク106全体に伝播させるように構成される。各ブロックチェーンノード104は、ブロック151を作成し、同じブロックチェーン150のそれぞれのコピーをそれらのブロックチェーンノード104のそれぞれのメモリに記憶するように構成される。また、各ブロックチェーンノード104は、ブロック151に組み込まれるのを待っているトランザクション152の順序付けられたセット(または「プール」)154を維持する。順序付けられたプール154は、多くの場合「メムプール(mempool)」と呼ばれる。本明細書におけるこの用語は、いかなる特定のブロックチェーン、プロトコル、またはモデルにも限定するように意図されていない。この用語は、ノード104が有効であるものとして受け入れ、ノード104が同じ出力を消費しようと試みるいかなるその他のトランザクションも受け入れないことを義務付けられるトランザクションの順序付けられたセットを指す。
【0018】
所与の現在のトランザクション152jにおいて、その(または各)入力は、トランザクションのシーケンス内の先行トランザクション152iの出力を参照するポインタを含み、この出力が現在のトランザクション152jにおいて履行されるまたは「消費される」ことになると指定する。概して、先行トランザクションは、順序付けられたセット154または任意のブロック151内の任意のトランザクションである可能性がある。先行トランザクション152iは、現在のトランザクション152jが作成される時点、またはそれどころかネットワーク106に送信される時点で必ずしも存在する必要がないが、現在のトランザクションが有効であるためには、先行トランザクション152iが存在し、承認される必要がある。したがって、本明細書における「先行」は、ポインタによってリンクされた論理的なシーケンスにおける先任者(predecessor)を指し、必ずしも時間的なシーケンスにおける作成または送信の時間を指すものではなく、したがって、トランザクション152i、152jが順不同で作成または送信されることを必ずしも除外しない(孤児(orphan)トランザクションに関する下の検討を参照されたい)。先行トランザクション152iは、同様に先祖(antecedent)または先任者トランザクションと呼ばれる可能性がある。
【0019】
現在のトランザクション152jの入力は、入力の認可、たとえば、先行トランザクション152iの出力がロックされているユーザ103aの署名も含む。そして今度は、現在のトランザクション152jの出力が、新しいユーザまたはエンティティ103bに暗号的にロックされ得る。したがって、現在のトランザクション152jは、先行トランザクション152iの入力において定義された額を、現在のトランザクション152jの出力において定義されたように新しいユーザまたはエンティティ103bに送金することができる。場合によっては、トランザクション152は、複数のユーザまたはエンティティ(そのうちの1つは、お釣りを渡すために元のユーザまたはエンティティ103aである可能性がある)の間で入力額を分けるために複数の出力を有する場合がある。場合によっては、トランザクションは、1つまたは複数の先行トランザクションの複数の出力からの金額を集め、現在のトランザクションの1つまたは複数の出力に再分配するために複数の入力を有することも可能である。
【0020】
ビットコインのような出力ベースのトランザクションプロトコルによれば、個人ユーザまたは組織などの関係者103が(手動でかまたは関係者によって採用された自動化されたプロセスによってかのどちらかで)新しいトランザクション152jを実行に移したいとき、実行に移す者は、自分のコンピュータ端末102から受取人に新しいトランザクションを送信する。実行に移す者または受取人は、最終的に、このトランザクションを(現在は概してサーバまたはデータセンターであるが、原理的にはその他のユーザ端末である可能性がある)ネットワーク106のブロックチェーンノード104のうちの1つまたは複数に送信する。また、新しいトランザクション152jを実行に移す関係者103が、トランザクションをブロックチェーンノード104のうちの1つまたは複数に直接送信し、一部の例においては、受取人に送信しない可能性があることも除外されない。トランザクションを受信するブロックチェーンノード104は、ブロックチェーンノード104の各々において適用されるブロックチェーンノードプロトコルに従って、トランザクションが有効であるかどうかをチェックする。ブロックチェーンノードプロトコルは、概して、新しいトランザクション152jの暗号署名が、トランザクション152の順序付けられたシーケンス内の前のトランザクション152iに依存する期待される署名と一致することをブロックチェーンノード104がチェックすることを要求する。そのような出力ベースのトランザクションプロトコルにおいて、これは、新しいトランザクション152jの入力に含まれる関係者103の暗号署名またはその他の認可が、新しいトランザクションが割り振る先行トランザクション152iの出力において定義された条件と一致することをチェックすることを含む場合があり、この条件は、概して、少なくとも、新しいトランザクション152jの入力の暗号署名またはその他の認可が、新しいトランザクションの入力がリンクされる前のトランザクション152iの出力のロックを解除することをチェックすることを含む。条件は、先行トランザクション152iの出力に含まれるスクリプトによって少なくとも部分的に定義されてよい。代替的に、条件は、単にブロックチェーンノードプロトコルのみによって決められる可能性があり、またはこれらの組合せに起因する可能性がある。いずれにせよ、新しいトランザクション152jが有効である場合、ブロックチェーンノード104は、その新しいトランザクション152jをブロックチェーンネットワーク106の1つまたは複数のその他のブロックチェーンノード104に転送する。これらのその他のブロックチェーンノード104は、同じブロックチェーンノードプロトコルに従って同じテストを適用し、したがって、新しいトランザクション152jを1つまたは複数のさらなるノード104に転送し、以下同様である。このようにして、新しいトランザクションは、ブロックチェーンノード104のネットワーク全体に伝播される。
【0021】
出力ベースのモデルにおいて、所与の出力(たとえば、UTXO)が割り振られる(たとえば、消費される)かどうかの定義は、その出力がブロックチェーンノードプロトコルに従って別のオンワードトランザクション(onward transaction)152jの入力によって既に有効に履行されたかどうかということである。トランザクションが有効であるための別の条件は、それが履行しようと試みる先行トランザクション152iの出力が別のトランザクションによって既に履行されていないことである。やはり、有効でない場合、トランザクション152jは(警告のために無効であるものとしてフラグを立てられ、伝播されるのでない限り)伝播されず、ブロックチェーン150に記録されない。これは、トランザクションを行う者が同じトランザクションの出力を2回以上割り振ろうとする二重支払いを防ぐ。一方、アカウントベースのモデルは、アカウントの残高を維持することによって二重支払いを防止する。やはり、トランザクションの定義された順序が存在するので、アカウントの残高は、常に単一の定義された状態を有する。
【0022】
トランザクションを承認することに加えて、ブロックチェーンノード104は、「プルーフオブワーク」によってサポートされる、通常、マイニングと呼ばれるプロセスでトランザクションのブロックを最初に作成するノードになろうとさらに競争する。ブロックチェーンノード104において、新しいトランザクションは、ブロックチェーン150に記録されたブロック151にまだ現れていない有効なトランザクションの順序付けられたプール154に追加される。それから、ブロックチェーンノードは、暗号パズルを解くことを試みることによって、トランザクションの順序付けられたセット154からトランザクション152の新しい有効なブロック151を組み立てようと競争する。概して、これは、ナンスが保留トランザクションの順序付けられたプール154の表現と連結され、ハッシュされるときに、ハッシュの出力が所定の条件を満たすような「ナンス」値を探索することを含む。たとえば、所定の条件は、ハッシュの出力が特定の予め定義された数の先頭のゼロを有することである場合がある。これは、プルーフオブワークのパズルの単なる1つの特定の種類であり、その他の種類は除外されないことに留意されたい。ハッシュ関数の特性は、ハッシュ関数がその入力に対して予測不可能な出力を有することである。したがって、この探索は、総当たりによってのみ実行されることが可能であり、したがって、パズルを解こうとしている各ブロックチェーンノード104において相当大量の処理リソースを費やす。
【0023】
パズルを解いた最初のブロックチェーンノード104は、これをネットワーク106に告知し、ネットワークのその他のブロックチェーンノード104によってその後容易にチェックされ得る証明として解を提供する(ハッシュの解が与えられると、それがハッシュの出力に条件を満足させることをチェックすることは簡単である)。最初のブロックチェーンノード104は、ブロックを受け入れ、したがって、プロトコルの規則を施行するその他のノードの閾値のコンセンサスまでブロックを伝播する。そして、トランザクションの順序付けられたセット154は、ブロックチェーンノード104の各々によってブロックチェーン150に新しいブロック151として記録されるようになる。また、チェーン内の前に作成されたブロック151n-1を後ろ向きに指し示すブロックポインタ155が、新しいブロック151nに割り振られる。プルーフオブワークの解を作成するために必要とされる、たとえば、ハッシュの形態の著しい量の労力は、ブロックチェーンプロトコルの規則に従うという最初のノード104の意図を知らせる。そのような規則は、二重支払いとしても知られている、トランザクションが前に承認されたトランザクションと同じ出力を割り振る場合、トランザクションを有効であるものとして受け入れないことを含む。作成されると、ブロック151は、ブロックチェーンネットワーク106のブロックチェーンノード104の各々において認識され、維持されるので、修正され得ない。また、ブロックポインタ155は、ブロック151に発生順を付与する。トランザクション152がネットワーク106の各ブロックチェーンノード104の順序付けられたブロックに記録されるので、これは、したがって、トランザクションの不変の公開台帳を提供する。
【0024】
任意の所与の時間にパズルを解こうと競争する異なるブロックチェーンノード104は、それらのブロックチェーンノード104がいつ解を探索し始めたか、またはトランザクションが受信された順序に応じて、任意の所与の時間にまだ公開されていないトランザクションのプール154の異なるスナップショットに基づいてそうしている場合があることに留意されたい。最初にそれらのそれぞれのパズルを解いた者は誰でも、どのトランザクション152が次の新しいブロック151nにどの順序で含まれるかを定義し、未公開トランザクションの現在のプール154が、更新される。それから、ブロックチェーンノード104は、未公開トランザクションの新たに定義された順序付けられたプール154からブロックを作成しようと競争を続け、以下同様である。発生する可能性があるすべての「フォーク(fork)」を解決するためのプロトコルも存在し、フォークは、ブロックチェーンの相反するビュー(view)がノード104の間で伝播されるように、2つのブロックチェーンノード104が互いに非常に短い時間内にそれらのブロックチェーンノード104のパズルを解く地点である。手短に言えば、どちらでも最も長くなる方のフォークの爪が、最終的なブロックチェーン150となる。これは、同じトランザクションが両方のフォークに現れるので、ネットワークのユーザまたはエージェントに影響を与えないはずであることに留意されたい。
【0025】
ビットコインブロックチェーン(およびほとんどのその他のブロックチェーン)によれば、新しいブロック104を成功裏に構築するノードは、(ある額のデジタル資産をあるエージェントまたはユーザから別のエージェントまたはユーザに送金するエージェント間またはユーザ間トランザクションとは対照的に)追加の定義された量のデジタル資産を分配する新しい特別な種類のトランザクションにおいて追加の認められた額のデジタル資産を新たに割り振る能力を付与される。この特別な種類のトランザクションは、通常「コインベーストランザクション」と呼ばれるが、「イニシエーショントランザクション(initiation transaction)」または「生成トランザクション」と呼ばれる場合もある。この特別な種類のトランザクションは、概して、新しいブロック151nの最初のトランザクションを形成する。プルーフオブワークは、この特別なトランザクションが後で履行されることを可能にするプロトコルの規則に従うという、新しいブロックを構築するノードの意図を知らせる。ブロックチェーンプロトコルの規則は、この特別なトランザクションが履行されてよい前に、満期期間(maturity period)、たとえば、100ブロックを必要とする場合がある。多くの場合、通常の(非生成(non-generation))トランザクション152は、トランザクションが公開されたブロック151nを作成したブロックチェーンノード104にさらに報酬を与えるために、その出力の1つにおいて追加の取引手数料も指定する。この手数料は、通常「取引手数料」と呼ばれ、下で検討される。
【0026】
トランザクションの承認および公開に関わるリソースが原因で、概して、少なくとも、ブロックチェーンノード104の各々は、1つもしくは複数の物理サーバユニットを含むサーバ、またはそれどころかデータセンター全体の形態をとる。しかし、原理的には、任意の所与のブロックチェーンノード104は、ユーザ端末、または一緒にネットワーク化されたユーザ端末のグループの形態をとる可能性がある。
【0027】
各ブロックチェーンノード104のメモリは、ブロックチェーンノードプロトコルに従ってそのそれぞれの1つの役割または複数の役割を実行し、トランザクション152を処理するために、ブロックチェーンノード104の処理装置上で実行されるように構成されたソフトウェアを記憶する。本明細書においてブロックチェーンノード104に帰せられるすべてのアクションは、それぞれのコンピュータ機器の処理装置上で実行されるソフトウェアによって実行されてよいことが理解されるであろう。ノードソフトウェアは、アプリケーションレイヤの1つもしくは複数のアプリケーションに、またはオペレーティングシステムレイヤもしくはプロトコルレイヤなどのより下位のレイヤに、またはこれらの任意の組合せで実装されてよい。
【0028】
ネットワーク101にさらに接続されるのは、消費ユーザの役割の複数の関係者103の各々のコンピュータ機器102である。これらのユーザは、ブロックチェーンネットワーク106とインタラクションする場合があるが、トランザクションの承認またはブロックの構築には参加しない。これらのユーザまたはエージェント103の一部は、トランザクションにおいて送信者および受信者として働く場合がある。その他のユーザは、必ずしも送信者または受信者として働くことなく、ブロックチェーン150とインタラクションしてよい。たとえば、一部の関係者は、(たとえば、ブロックチェーンノード104からブロックチェーンのコピーを取得した)ブロックチェーン150のコピーを記憶するストレージエンティティとして働く場合がある。
【0029】
関係者103の一部またはすべては、異なるネットワーク、たとえば、ブロックチェーンネットワーク106の上に重ねられたネットワークの一部として接続される場合がある。ブロックチェーンネットワークのユーザ(多くの場合「クライアント」と呼ばれる)は、ブロックチェーンネットワーク106を含むシステムの一部であると言われる場合があるが、これらのユーザは、ブロックチェーンノードの必要とされる役割を果たさないので、ブロックチェーンノード104ではない。その代わりに、各関係者103は、ブロックチェーンネットワーク106とインタラクションし、それによって、ブロックチェーンノード106に接続すること(すなわち、通信すること)によりブロックチェーン150を利用してよい。例示を目的として、2人の関係者103およびそれらのそれぞれの機器102、すなわち、第1の関係者103aおよびそのそれぞれのコンピュータ機器102a、ならびに第2の関係者103bおよびそのそれぞれのコンピュータ機器102bが示される。多くのさらなるそのような関係者103およびそれらのそれぞれのコンピュータ機器102が存在し、システム100に参加していてよいが、便宜上、それらは図示されていないことは理解されるであろう。各関係者103は、個人または組織である場合がある。純粋に例示のために、第1の関係者103aは、本明細書においてはAliceと呼ばれ、第2の関係者103bは、Bobと呼ばれるが、これは限定的でなく、AliceまたはBobに対する本明細書のすべての言及は、それぞれ「第1の関係者」および「第2の関係者」によって置き換えられてよいことが理解されるであろう。
【0030】
各関係者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つまたは複数のその他のネットワーク化されたリソースも含む場合がある。
【0031】
クライアントアプリケーション105は、最初に、1つの好適なコンピュータ可読ストレージ媒体または複数の好適なコンピュータ可読ストレージ媒体上で任意の所与の関係者103のコンピュータ機器102に提供され、たとえば、サーバからダウンロードされるか、あるいはリムーバブルSSD、フラッシュメモリキー、リムーバブルEEPROM、リムーバブル磁気ディスクドライブ、磁気フロッピーディスクもしくはテープ、CDもしくはDVD ROMなどの光ディスク、またはリムーバブル光学ドライブなどのリムーバブルストレージデバイス上で提供される場合がある。
【0032】
クライアントアプリケーション105は、少なくとも「ウォレット」機能を含む。これは、2つの主な機能を有する。これらのうちの一方は、それぞれの関係者103が、トランザクション152を作成し、認可し(たとえば、署名し)、その後ブロックチェーンノード104のネットワーク全体に伝播され、それによって、ブロックチェーン150に含められるように1つまたは複数のビットコインノード104に送信することを可能にすることである。他方は、それぞれの関係者が現在所有しているデジタル資産の額の報告をその関係者に返すことである。出力ベースのシステムにおいて、この第2の機能は、問題にしている関係者に属する、ブロックチェーン150全体に散在する様々なトランザクション152の出力に定義された額をまとめることを含む。
【0033】
注: 様々なクライアント機能が所与のクライアントアプリケーション105に統合されているものとして説明される場合があるが、これは、必ずしも限定的ではなく、むしろ、本明細書において説明される任意のクライアント機能は、その代わりに、たとえば、APIを介してインターフェースをとる、または1つがそれ以外のプラグインである2つ以上の異なるアプリケーションのスイートに実装されてよい。より広く、クライアント機能は、アプリケーションレイヤ、またはオペレーティングシステムなどのより下位のレイヤ、またはこれらの任意の組合せに実装される可能性がある。以下は、クライアントアプリケーション105の観点で説明されるが、これが限定的でないことは、理解されるであろう。
【0034】
各コンピュータ機器102上のクライアントアプリケーションまたはソフトウェア105のインスタンスは、ネットワーク106のブロックチェーンノード104のうちの少なくとも1つに動作可能なように結合される。これは、クライアント105のウォレット機能がネットワーク106にトランザクション152を送信することを可能にする。また、クライアント105は、それぞれの関係者103がいずれかのトランザクションの受信者であるブロックチェーン150に問い合わせる(または実施形態において、ブロックチェーン150は、その公開された可視性(public visibility)によって部分的にトランザクションに対する信頼を提供する公共機関(public facility)であるので、ブロックチェーン150内のその他の関係者のトランザクションを確かに検査する)ためにブロックチェーンノード104に連絡することができる。各コンピュータ機器102のウォレット機能は、トランザクションプロトコルに従ってトランザクション152を組み立て、送信するように構成される。上述のように、各ブロックチェーンノード104は、ブロックチェーンノードプロトコルに従ってトランザクション152を承認し、ブロックチェーンネットワーク106全体にトランザクション152を伝播するためにトランザクション152を転送するように構成されたソフトウェアを実行する。トランザクションプロトコルおよびノードプロトコルは、互いに対応し、所与のトランザクションプロトコルが、所与のノードプロトコルと一緒になって、所与のトランザクションモデルを実装する。ブロックチェーン150のすべてのトランザクション152のために、同じトランザクションプロトコルが使用される。ネットワーク106のすべてのノード104によって、同じノードプロトコルが使用される。
【0035】
所与の関係者103、たとえば、Aliceは、ブロックチェーン150に含められるように新しいトランザクション152jを送信したいとき、(自分のクライアントアプリケーション105のウォレット機能を使用して)関連するトランザクションプロトコルに従って新しいトランザクションを組み立てる。そして、その関係者103は、クライアントアプリケーション105から、自分が接続されている1つまたは複数のブロックチェーンノード104にトランザクション152を送信する。たとえば、これは、Aliceのコンピュータ102に最良に接続されているブロックチェーンノード104である可能性がある。任意の所与のブロックチェーンノード104は、新しいトランザクション152jを受信するとき、ブロックチェーンノードプロトコルおよびそのそれぞれの役割に従ってその新しいトランザクション152jを処理する。これは、新しく受信されたトランザクション152jが「有効」であるための特定の条件を満たすかどうかを最初にチェックすることを含み、その例は、まもなくより詳細に検討される。一部のトランザクションプロトコルにおいて、承認のための条件は、トランザクション152に含まれるスクリプトによってトランザクションごとに構成可能である場合がある。代替的に、条件は、単にノードプロトコルの組み込まれた特徴であるか、またはスクリプトとノードプロトコルとの組合せによって定義される可能性がある。
【0036】
新しく受信されたトランザクション152jが有効とみなされるためのテストに合格することを条件に(すなわち、新しく受信されたトランザクション152jが「承認される」ことを条件に)、トランザクション152jを受信するすべてのブロックチェーンノード104は、そのブロックチェーンノード104において維持されるトランザクション154の順序付けられたセットに、新しい承認されたトランザクション152を追加する。さらに、トランザクション152jを受信するすべてのブロックチェーンノード104は、承認されたトランザクション152をネットワーク106の1つまたは複数のその他のブロックチェーンノード104に向かって伝播する。各ブロックチェーンノード104が同じプロトコルを適用するので、トランザクション152jが有効であると仮定すると、これは、トランザクション152jがネットワーク106全体にすぐに伝播されることを意味する。
【0037】
所与のブロックチェーンノード104において維持される保留トランザクションの順序付けられたプール154に入れられると、そのブロックチェーンノード104は、新しいトランザクション152を含むトランザクションのそのそれぞれのプール154の最新バージョンに関するプルーフオブワークのパズルを解く競い合いを開始する(その他のブロックチェーンノード104がトランザクションの異なるプール154に基づくパズルを解こうとしている可能性があるが、誰であれ最初に成功する者が最新のブロック151に含まれるトランザクションのセットを定義することを思い出されたい。最終的に、ブロックチェーンノード104は、Aliceのトランザクション152jを含む順序付けられたプール154の一部に関するパズルを解く)。新しいトランザクション152jを含むプール154に関してプルーフオブワークが行われると、プール154は、不変的にブロックチェーン150のブロック151のうちの1つの一部となる。各トランザクション152は、以前のトランザクションに戻るポインタを含み、したがって、トランザクションの順序も不変的に記録される。
【0038】
異なるブロックチェーンノード104は、最初に、所与のトランザクションの異なるインスタンスを受信し、したがって、1つのインスタンスが新しいブロック151で公開される前は、どのインスタンスが「有効」であるかについての相反するビューを有する可能性があり、1つのインスタンスが新しいブロック151で公開された時点で、すべてのブロックチェーンノード104は、公開されたインスタンスが唯一の有効なインスタンスであると合意する。ブロックチェーンノード104が1つのインスタンスを有効であるものとして受け入れ、その後、第2のインスタンスがブロックチェーン150に記録されたことを発見する場合、そのブロックチェーンノード104は、これを受け入れなければならず、そのブロックチェーンノード104が最初に受け入れたインスタンス(すなわち、ブロック151で公開されなかったインスタンス)を破棄する(すなわち、無効であるものとして扱う)。
【0039】
一部のブロックチェーンネットワークによって運用される代替的な種類のトランザクションプロトコルは、アカウントベースのトランザクションモデルの一部として、「アカウントベース」のプロトコルと呼ばれる場合がある。アカウントベースの場合、各トランザクションは、過去のトランザクションのシーケンス内の先行トランザクションのUTXOを後ろ向きに参照することによって送金される額を定義するのではなく、絶対的なアカウントの残高を参照することによって送金される額を定義する。すべてのアカウントの現在の状態は、ブロックチェーンとは別のそのネットワークのノードによって記憶され、絶えず更新される。そのようなシステムにおいて、トランザクションは、アカウントの実行中の取引勘定(running transaction tally)(「ポジション」とも呼ばれる)を使用して順序付けられる。この値は、送信者によって送信者の暗号署名の一部として署名され、トランザクション参照計算(transaction reference calculation)の一部としてハッシュされる。さらに、任意のデータフィールドが、トランザクションに割り振られる場合もある。このデータフィールドは、たとえば、前のトランザクションIDがデータフィールドに含まれる場合、前のトランザクションを後ろ向きに指し示す場合がある。
【0040】
UTXOベースのモデル
図2は、例示的なのトランザクションプロトコルを示す。これは、UTXOベースのプロトコルの例である。トランザクション152(「Tx」と略される)は、ブロックチェーン150の基本的なデータ構造である(各ブロック151は、1つまたは複数のトランザクション152を含む)。以下は、出力ベースまたは「UTXO」ベースのプロトコルを参照して説明される。しかし、これは、すべての可能な実施形態への限定ではない。例示的なUTXOベースのプロトコルは、ビットコインに関連して説明されるが、その他の例示的なブロックチェーンネットワークに同様に実装されてよいことに留意されたい。
【0041】
UTXOベースのモデルにおいて、各トランザクション(「Tx」)152は、1つまたは複数の入力202および1つまたは複数の出力203を含むデータ構造を含む。各出力203は、未使用トランザクション出力(UTXO)を含んでよく、UTXOは、(UTXOが既に履行されていない場合)別の新しいトランザクションの入力202のソースとして使用され得る。UTXOは、デジタル資産の額を指定する値を含む。これは、分散台帳上のトークンの設定された数を表す。UTXOは、情報の中でもとりわけ、そのUTXOが由来するトランザクションのトランザクションIDも含んでよい。トランザクションデータ構造は、入力フィールド202および出力フィールド203のサイズのインジケータを含む場合があるヘッダ201も含んでよい。ヘッダ201は、トランザクションのIDも含んでよい。実施形態において、トランザクションIDは、(トランザクションID自体を除く)トランザクションデータのハッシュであり、ノード104に提出される生のトランザクション152のヘッダ201に記憶される。
【0042】
Alice 103aが、問題にしているデジタル資産の額をBob 103bに送金するトランザクション152jを作成したいものとする。図2において、Aliceの新しいトランザクション152jは、「Tx1」とラベル付けされている。トランザクション152jは、シーケンス内の先行トランザクション152iの出力203においてAliceにロックされているデジタル資産の額を取得し、このうちの少なくとも一部をBobに送金する。先行トランザクション152iは、図2において「Tx0」とラベル付けされている。Tx0およびTx1は、任意のラベルであるに過ぎない。それらは、必ずしも、Tx0がブロックチェーン151の最初のトランザクションであることも、Tx1がプール154内のすぐ次のトランザクションであることも意味しない。Tx1は、Aliceにロックされた未使用の出力203をまだ持っている任意の先行(すなわち、先祖)トランザクションを後ろ向きに指し示す可能性がある。
【0043】
先行トランザクションTx0は、Aliceが自分の新しいトランザクションTx1を作成するときに、または少なくともAliceがその新しいトランザクションTx1をネットワーク106に送信するまでに、既に承認され、ブロックチェーン150のブロック151に含められた可能性がある。先行トランザクションTx0は、そのとき、既にブロック151のうちの1つに含められた可能性があり、または順序付けられたセット154内でまだ待っている可能性があり、その場合は、先行トランザクションTx0は、すぐに新しいブロック151に含められる。代替的に、Tx0およびTx1は、一緒に作成され、ネットワーク106に送信される可能性があり、またはノードプロトコルが「孤児」トランザクションをバッファリングすることを許す場合、Tx0がTx1の後に送信される可能性さえある。本明細書においてトランザクションのシーケンスの文脈で使用される用語「先行」および「後続」は、トランザクションにおいて指定されたトランザクションポインタによって定義されるシーケンス内のトランザクションの順序(どのトランザクションがどのその他のトランザクションを後ろ向きに指し示すかなど)を指す。それらの用語は、「先任者」および「後任者(successor)」、または「先祖」および「子孫(descendant)」、「親」および「子」などによって等しく置き換えられる可能性がある。それは、必ずしも、それらのトランザクションが作成される、ネットワーク106に送信される、または任意の所与のブロックチェーンノード104に到着する順序を示唆しない。しかしながら、先行トランザクション(先祖トランザクションまたは「親」)を指し示す後続のトランザクション(子孫トランザクションまたは「子」)は、親トランザクションが承認されるまで、および親トランザクションが承認されない限り、承認されない。その親の前にブロックチェーンノード104に到着する子は、孤児とみなされる。その子は、ノードプロトコルおよび/またはノードの挙動に応じて、破棄されるか、または親を待つために特定の時間バッファリングされる場合がある。
【0044】
先行トランザクションTx0の1つまたは複数の出力203のうちの1つは、ここではUTXO0とラベル付けされた特定のUTXOを含む。各UTXOは、UTXOによって表されるデジタル資産の額を指定する値と、後続のトランザクションが承認され、したがって、UTXOが成功裏に履行されるために後続のトランザクションの入力202のロック解除スクリプトによって満たされなければならない条件を定義するロックスクリプトとを含む。概して、ロックスクリプトは、額を特定の関係者(そのロックスクリプトが含まれるトランザクションの受益者)にロックする。すなわち、ロックスクリプトは、概して、後続のトランザクションの入力のロック解除スクリプトが先行トランザクションがロックされている関係者の暗号署名を含むという条件を含むロック解除条件を定義する。
【0045】
ロックスクリプト(別名scriptPubKey)は、ノードプロトコルによって認識されるドメイン固有の言語で記述されたコード片である。そのような言語の特定の例は、ブロックチェーンネットワークによって使用される「Script」(大文字のS)と呼ばれる。ロックスクリプトは、どの情報がトランザクション出力203を消費するために必要とされるか、たとえば、Aliceの署名の必要を指定する。ロック解除スクリプトは、トランザクションの出力に現れる。ロック解除スクリプト(別名scriptSig)は、ロックスクリプトの基準を満たすために必要とされる情報を提供する、ドメイン固有の言語で記述されたコード片である。たとえば、ロック解除スクリプトは、Bobの署名を含む場合がある。ロック解除スクリプトは、トランザクションの入力202に現れる。
【0046】
したがって、図示された例において、Tx0の出力203のUTXO0は、UTXO0が履行されるために(厳密には、UTXO0を履行しようと試みる後続のトランザクションが有効であるために)Aliceの署名Sig PAを必要とするロックスクリプト[Checksig PA]を含む。[Checksig PA]は、Aliceの公開-プライベート鍵ペアからの公開鍵PAの表現(すなわち、ハッシュ)を含む。Tx1の入力202は、(たとえば、実施形態においてはトランザクションTx0全体のハッシュであるそのトランザクションID、TxID0によって)Tx0を後ろ向きに指し示すポインタを含む。Tx1の入力202は、Tx0の任意のその他の可能な出力の中でUTXO0を特定するために、Tx0内のUTXO0を特定するインデックスを含む。Tx1の入力202は、Aliceが鍵ペアからの自分のプライベート鍵をデータの予め定義された部分(暗号技術においては「メッセージ」と呼ばれることがある)に適用することによって作成されたAliceの暗号署名を含むロック解除スクリプト<Sig PA>をさらに含む。有効な署名を提供するためにAliceによって署名される必要があるデータ(または「メッセージ」)は、ロックスクリプトによって、またはノードプロトコルによって、またはこれらの組合せによって定義される場合がある。
【0047】
新しいトランザクションTx1がブロックチェーンノード104に到着するとき、ノードは、ノードプロトコルを適用する。これは、ロックスクリプトおよびロック解除スクリプトを一緒に実行して、ロック解除スクリプトがロックスクリプトにおいて定義された条件(この条件は1つまたは複数の基準を含む場合がある)を満たすかどうかをチェックすることを含む。実施形態において、これは、2つのスクリプトを連結すること、すなわち、
<Sig PA> <PA> || [Checksig PA]
を含み、「||」は、連結を表し、「<...>」は、スタックにデータを置くことを意味し、「[...]」は、ロックスクリプト(この例においては、スタックベースの言語)によって含まれる関数である。等価的に、スクリプトは、スクリプトを連結するのではなく、共通のスタックを用いて順々に実行されてよい。いずれにせよ、一緒に実行されるとき、スクリプトは、Tx0の出力のロックスクリプトに含まれるAliceの公開鍵PAを使用して、Tx1の入力のロック解除スクリプトがデータの期待される部分に署名するAliceの署名を含むことを認証する。データの期待される部分自体(「メッセージ」)も、この認証を実行するために含められる必要がある。実施形態において、署名されたデータは、Tx1の全体を含む(したがって、平文のデータの署名された部分を指定する別個の要素は、それが既に本質的に存在するので含められる必要がない)。
【0048】
公開-プライベート暗号技術による認証の詳細は、当業者によく知られているであろう。基本的に、Aliceが自分のプライベート鍵を使用してメッセージに署名した場合、Aliceの公開鍵および平文のメッセージがあれば、ノード104などの別のエンティティは、メッセージがAliceによって署名されたに違いないことを認証することができる。署名は、通常、メッセージをハッシュし、ハッシュに署名し、これを署名としてメッセージにタグ付けすることを含み、したがって、公開鍵のすべての保有者が署名を認証することを可能にする。したがって、特定のデータまたはトランザクションの一部などに署名することへの本明細書におけるすべての言及は、実施形態においては、そのデータまたはトランザクションの一部のハッシュに署名することを意味し得ることに留意されたい。
【0049】
Tx1のロック解除スクリプトがTx0のロックスクリプトにおいて指定された1つまたは複数の条件を満たす場合(したがって、示された例では、Aliceの署名がTx1において提供され、認証される場合)、ブロックチェーンノード104は、Tx1を有効とみなす。これは、ブロックチェーンノード104が、Tx1を保留トランザクションの順序付けられたプール154に追加することを意味する。また、ブロックチェーンノード104は、トランザクションTx1がネットワーク106全体に伝播されるように、ネットワーク106の1つまたは複数のその他のブロックチェーンノード104にトランザクションTx1を転送する。Tx1が承認され、ブロックチェーン150に含められると、これは、Tx0からのUTXO0を使用済みとして定義する。Tx1は、未使用トランザクション出力203を消費する場合にのみ有効であり得ることに留意されたい。Tx1が別のトランザクション152によって既に消費された出力を消費しようと試みる場合、Tx1は、たとえすべてのその他の条件が満たされるとしても無効となる。したがって、ブロックチェーンノード104は、先行トランザクションTx0の参照されたUTXOが既に消費されているかどうか(すなわち、そのUTXOが別の有効なトランザクションへの有効な入力を既に形成したかどうか)をチェックする必要もある。これは、ブロックチェーン150がトランザクション152に定義された順序を付与することが重要である1つの理由である。実際には、所与のブロックチェーンノード104は、どのトランザクション152のどのUTXO 203が消費されたかを示す別個のデータベースを維持する場合があるが、結局、UTXOが消費されたかどうかを定義するのは、それがブロックチェーン150内の別の有効なトランザクションへの有効な入力を既に形成したかどうかということである。
【0050】
所与のトランザクション152のすべての出力203において指定された総額が、そのトランザクション152のすべての入力202によって指し示された総額よりも大きい場合、これは、ほとんどのトランザクションモデルにおいて無効の別の根拠となる。したがって、そのようなトランザクションは、伝播されず、ブロック151に含められることもない。
【0051】
UTXOベースのトランザクションモデルにおいて、所与のUTXOは、丸ごと消費される必要があることに留意されたい。所与のUTXOは、UTXOにおいて使用済みとして定義された額の一部分が消費される一方で、別の部分を「残しておく」ことはできない。ただし、UTXOからの額は、次のトランザクションの複数の出力の間で分けられ得る。たとえば、Tx0のUTXO0において定義された額が、Tx1の複数のUTXOの間で分けられ得る。したがって、Aliceは、BobにUTXO0において定義された額のすべてを与えたくない場合、残りを使用してTx1の第2の出力において自分自身にお釣りを与えるかまたは別の関係者に支払いをすることができる。
【0052】
実際には、Aliceは、通常さらに、ブロック151に自分のトランザクション104を成功裏に含めるビットコインノード104への手数料を含める必要がある。Aliceがそのような手数料を含めない場合、Tx0は、ブロックチェーンノード104によって拒否される場合があり、したがって、厳密に言えば有効であるが、伝播されず、ブロックチェーン150に含められない場合がある(ノードプロトコルは、ブロックチェーンノード104が望まない場合に、ブロックチェーンノード104にトランザクション152を受け入れるように強制しない)。一部のプロトコルにおいて、取引手数料は、それ自体の別個の出力203を必要としない(すなわち、別個のUTXOを必要としない)。その代わりに、所与のトランザクション152の入力202によって指し示される総額と出力203において指定される総額との間のすべての差が、トランザクションを公開するブロックチェーンノード104に自動的に与えられる。たとえば、UTXO0へのポインタがTx1への唯一の入力であり、Tx1が1つの出力UTXO1のみを有するものとする。UTXO0において指定されたデジタル資産の額がUTXO1において指定された額よりも大きい場合、UTXO1を含むブロックを作成するプルーフオブワークの競争に勝つノード104によって差が割り振られてよい。しかし、代替的または追加的に、取引手数料がトランザクション152のUTXO 203のうちのそれ自体のUTXO 203において明示的に指定される可能性があることは、必ずしも除外されない。
【0053】
AliceおよびBobのデジタル資産は、ブロックチェーン150の任意の場所の任意のトランザクション152においてAliceおよびBobにロックされたUTXOから成る。したがって、典型的には、所与の関係者103の資産は、ブロックチェーン150全体の様々なトランザクション152のUTXO全体に散在している。ブロックチェーン150のどこにも、所与の関係者103の総残高を定義する1つの数字は記憶されていない。それぞれの関係者にロックされ、別のオンワードトランザクションにおいてまだ消費されていないすべての様々なUTXOの値をまとめることは、クライアントアプリケーション105内のウォレット機能の役割である。ウォレット機能は、ビットコインノード104のいずれかに記憶されたブロックチェーン150のコピーに問い合わせることによってこれを行うことができる。
【0054】
スクリプトコードは、概略的に(つまり、正確な言語を使用せずに)表現されることが多いことに留意されたい。たとえば、特定の機能を表現するためにオペレーションコード(オペコード)を使用する場合がある。「OP_...」は、Script言語の特定のオペコードを指す。例として、OP_RETURNは、ロックスクリプトの始めにOP_FALSEが先にあるとき、トランザクション内にデータを記憶することができ、それによって、ブロックチェーン150にデータを不変的に記録することができるトランザクションの消費不可能な出力を作成するScript言語のオペコードである。たとえば、データは、ブロックチェーンに記憶することが望まれる文書を含む可能性がある。
【0055】
概して、トランザクションの入力は、公開鍵PAに対応するデジタル署名を含む。実施形態において、これは、楕円曲線secp256k1を使用するECDSAに基づく。デジタル署名は、特定のデータに署名する。一部の実施形態において、所与のトランザクションに関して、署名は、トランザクション入力の一部と、トランザクション出力の一部またはすべてに署名する。署名が署名する出力の特定の部分は、SIGHASHフラグに応じて決まる。SIGHASHフラグは、通常、どの出力が署名されるかを選択するために署名の最後に含まれる(したがって署名する時点で決まっている)4バイトのコードである。
【0056】
ロックスクリプトは、概してそれがそれぞれのトランザクションがロックされている関係者の公開鍵を含むという事実を指して、「scriptPubKey」と呼ばれることがある。ロック解除スクリプトは、概してそれが対応する署名を供給するという事実を指して、「scriptSig」と呼ばれることがある。しかし、より広く、UTXOが履行されるための条件が署名を認証することを含むことは、ブロックチェーン150のすべての応用において必須ではない。より広く、スクリプト言語が、任意の1つまたは複数の条件を定義するために使用される可能性がある。したがって、より広い用語「ロックスクリプト」および「ロック解除スクリプト」が、好ましい場合がある。
【0057】
サイドチャネル
図1に示されたように、AliceおよびBobのコンピュータ機器102a、102bの各々のクライアントアプリケーションは、それぞれ、追加の通信機能を含む場合がある。この追加の機能は、Alice 103aが、(どちらかの関係者または第三者の勧めによって)Bob 103bとの別個のサイドチャネル107を確立することを可能にする。サイドチャネル107は、ブロックチェーンネットワークとは別にデータのやりとりを可能にする。そのような通信は、「オフチェーン」通信と呼ばれることがある。たとえば、これは、関係者の一方がトランザクション152をネットワーク106にブロードキャストすることを選択するまで、トランザクションが(まだ)ブロックチェーンネットワーク106に登録されていない、またはチェーン150に向かって進んでいない状態で、AliceとBobとの間でトランザクション152をやりとりするために使用される場合がある。このようにしてトランザクションを共有することは、「トランザクションテンプレート(transaction template)」の共有と呼ばれることがある。トランザクションテンプレートは、完全なトランザクションを形成するために必要とされる1つまたは複数の入力および/または出力を欠いている場合がある。代替的または追加的に、サイドチャネル107は、鍵、交渉された額または条項、データ内容などの任意のその他のトランザクション関連データをやりとりするために使用される場合がある。
【0058】
サイドチャネル107は、ブロックチェーンネットワーク106と同じパケット交換ネットワーク101を介して確立されてよい。代替的または追加的に、サイドチャネル107は、モバイルセルラネットワーク、またはローカルワイヤレスネットワークなどのローカルエリアネットワーク、またはそれどころかAliceおよびBobのデバイス102a、102bの間の直接有線もしくは無線リンクなどの異なるネットワークを介して確立されてよい。概して、本明細書のどこで言及されるサイドチャネル107も、「オフチェーン」、すなわち、ブロックチェーンネットワーク106とは別でデータをやりとりするための1つまたは複数のネットワーキングテクノロジーまたは通信媒体を介した任意の1つまたは複数のリンクを含んでよい。2つ以上のリンクが使用される場合、オフチェーンリンクの束または集まりが全体としてサイドチャネル107と呼ばれる場合がある。したがって、AliceおよびBobがサイドチャネル107を介して特定の情報またはデータなどをやりとりすると言われる場合、これは、これらのデータすべてがまったく同じリンクまたはそれどころか同じ種類のネットワーク上で送信されなければならないことを必ずしも示唆しないことに留意されたい。
【0059】
クライアントソフトウェア
図3Aは、今開示されている方式の実施形態を実施するためのクライアントアプリケーション105の例示的な実装を示す。クライアントアプリケーション105は、トランザクションエンジン401およびユーザインターフェース(UI)レイヤ402を含む。トランザクションエンジン401は、上で検討された方式に従っておよびまもなくさらに詳細に検討されるように、トランザクション152を組み立てること、サイドチャネル107を介してトランザクションおよび/もしくはその他のデータを受信および/もしくは送信すること、ならびに/またはブロックチェーンネットワーク106を通じて伝播するように1つもしくは複数のノード104にトランザクションを送信することなどの、クライアント105の基礎となるトランザクション関連機能を実装するように構成される。
【0060】
UIレイヤ402は、機器102のユーザ出力手段を介してそれぞれのユーザ103に情報を出力すること、および機器102のユーザ入力手段を介してそれぞれのユーザ103から返ってくる入力を受け取ることを含め、それぞれのユーザのコンピュータ機器102のユーザ入力/出力(I/O)手段を介してユーザインターフェースを提供するように構成される。たとえば、ユーザ出力手段は、視覚的出力を提供するための1つもしくは複数のディスプレイスクリーン(タッチスクリーンもしくは非タッチスクリーン)、音声出力を提供するための1つもしくは複数のスピーカ、および/または触覚的出力を提供するための1つもしくは複数の触覚出力デバイスなどを含む可能性がある。ユーザ入力手段は、たとえば、1つもしくは複数のタッチスクリーン(出力手段に使用されるものと同じもしくは異なる)、マウス、トラックパッド、もしくはトラックボールなどの1つもしくは複数のカーソルベースのデバイス、スピーチもしくは発声入力を受け取るための1つもしくは複数のマイクロフォンおよび音声もしくは声認識アルゴリズム、手もしくは体のジェスチャの形態の入力を受け取るための1つもしくは複数のジェスチャベースの入力デバイス、または1つもしくは複数の機械式ボタン、スイッチ、もしくはジョイスティックなどの入力アレイ(input array)を含む可能性がある。
【0061】
注: 本明細書における様々な機能は同じクライアントアプリケーション105に統合されるものとして説明される場合があるが、これは、必ずしも限定的ではなく、その代わりに、それらの機能は、たとえば、1つがそれ以外のプラグインであるか、またはAPI(アプリケーションプログラミングインターフェース)を介してインターフェースをとる、2つ以上の異なるアプリケーションのスイートに実装される可能性がある。たとえば、トランザクションエンジン401の機能は、UIレイヤ402とは別個のアプリケーションに実装されてよく、またはトランザクションエンジン401などの所与のモジュールの機能は、2つ以上のアプリケーションの間で分けられる可能性がある。説明される機能の一部またはすべてが、たとえば、オペレーティングシステムレイヤに実装される可能性があることも排除されない。本明細書の任意の箇所で単一のまたは所与のアプリケーション105などへの言及がなされる場合、これは単なる例示であり、より広く、説明される機能は任意の形態のソフトウェアで実装される可能性があることが理解されるであろう。
【0062】
図3Bは、Aliceの機器102aのクライアントアプリケーション105aのUIレイヤ402によってレンダリングされる場合があるユーザインターフェース(UI)500の例のモックアップを与える。同様のUIが、Bobの機器102bのクライアント105b、または任意のその他の関係者の機器のクライアントによってレンダリングされてよいことは理解されるであろう。
【0063】
例示として、図3Bは、Aliceの観点でUI 500を示す。UI 500は、ユーザ出力手段を介して異なるUI要素としてレンダリングされる1つまたは複数のUI要素501、502、502を含んでよい。
【0064】
たとえば、UI要素は、異なる画面上のボタン、またはメニューの異なる選択肢などである場合がある1つまたは複数のユーザが選択可能な要素501を含んでよい。ユーザ入力手段は、ユーザ103(この場合、Alice 103a)が、画面上のUI要素をクリックもしくはタッチするか、または所望の選択肢の名前を言うことによるなどして、選択肢のうちの1つを選択するかまたはそれ以外の方法で操作することを可能にするように配置される(本明細書において使用される用語「手動」は、自動と対照を成すことを意図されているに過ぎず、必ずしも1つの手または複数の手の使用に限定しないことに注意されたい)。
【0065】
代替的または追加的に、UI要素は、1つまたは複数のデータ入力フィールド502を含んでよい。これらのデータ入力フィールドは、ユーザ出力手段を介して、たとえば、画面上にレンダリングされ、データは、ユーザ入力手段、たとえば、キーボードまたはタッチスクリーンを通じてフィールドに入力され得る。代替的に、データは、たとえば、音声認識に基づいて口述で受け取られる可能性がある。
【0066】
代替的または追加的に、UI要素は、ユーザに対して情報を出力するための1つまたは複数の情報要素503の出力を含んでよい。たとえば、これ/これらは、画面上にまたは聞こえるようにレンダリングされる可能性がある。
【0067】
様々なUI要素をレンダリングし、選択肢を選択し、データを入力する特定の手段は重要ではないことが理解されるであろう。これらのUI要素の機能は、まもなくより詳細に検討される。図3に示されたUI 500は図式化されたモックアップであるに過ぎず、実際には、簡潔にするために図示されていない1つまたは複数のさらなるUI要素を含む場合があることも理解されるであろう。
【0068】
ノードソフトウェア
図4は、UTXOまたは出力ベースのモデルの例において、ネットワーク106の各ブロックチェーンノード104上で実行されるノードソフトウェア450の例を示す。別のエンティティが、ネットワーク106上でノード104として分類されることなく、すなわち、ノード104の必要とされるアクションを実行することなく、ノードソフトウェア450を実行する場合があることに留意されたい。ノードソフトウェア450は、プロトコルエンジン451、スクリプトエンジン452、スタック453、アプリケーションレベル判断エンジン454、および1つまたは複数のブロックチェーン関連機能モジュール455のセットを含んでよいがこれらに限定されない。各ノード104は、コンセンサスモジュール455C(たとえば、プルーフオブワーク)、伝播モジュール455P、およびストレージモジュール455S(たとえば、データベース)の3つすべてを含むがこれらに限定されないノードソフトウェアを実行してよい。プロトコルエンジン401は、典型的には、トランザクション152の異なるフィールドを認識し、ノードプロトコルに従ってそれらのフィールドを処理するように構成される。別の先行トランザクション152i(Txm-1)の出力(たとえば、UTXO)を指し示す入力を有するトランザクション152j(Txj)が受信されるとき、プロトコルエンジン451は、Txjのロック解除スクリプトを特定し、そのロック解除スクリプトをスクリプトエンジン452に渡す。また、プロトコルエンジン451は、Txjの入力のポインタに基づいてTxiを特定し、取り出す。Txiは、ブロックチェーン150上で公開されている場合があり、その場合、プロトコルエンジンは、ノード104に記憶されたブロックチェーン150のブロック151のコピーからTxiを取り出してよい。代替的に、Txiは、ブロックチェーン150上でまだ公開されていない場合がある。その場合、プロトコルエンジン451は、ノード104によって維持される未公開トランザクションの順序付けられたセット154からTxiを取り出してよい。いずれにせよ、プロトコルエンジン451は、Txiの参照された出力のロックスクリプトを特定し、これをスクリプトエンジン452に渡す。
【0069】
したがって、スクリプトエンジン452は、Txiのロックスクリプトと、Txjの対応する入力からのロック解除スクリプトとを有する。たとえば、Tx0およびTx1とラベル付けされたトランザクションが図2に示されるが、同じことがトランザクションのどのペアにも当てはまる可能性がある。スクリプトエンジン452は、既に検討されたように2つのスクリプトを一緒に実行し、これは、使用されているスタックベースのスクリプト言語(たとえば、Script)に従って、スタック453にデータを入れることと、スタック453からデータを取り出すこととを含む。
【0070】
スクリプトを一緒に実行することによって、スクリプトエンジン452は、ロック解除スクリプトがロックスクリプトにおいて定義された1つまたは複数の基準を満たすか否か -- すなわち、ロック解除スクリプトがロックスクリプトが含まれる出力の「ロックを解除する」かどうか -- を判定する。スクリプトエンジン452は、この判定の結果をプロトコルエンジン451に返す。スクリプトエンジン452は、ロック解除スクリプトが対応するロックスクリプトにおいて指定された1つまたは複数の基準を満たすと判定する場合、結果「真」を返す。それ以外の場合、スクリプトエンジン452は、結果「偽」を返す。
【0071】
出力ベースのモデルにおいて、スクリプトエンジン452からの結果「真」は、トランザクションの有効性の条件のうちの1つである。概して、Txjの出力において指定されたデジタル資産の総額がTxjの入力によって指し示された総額を超えないこと、およびTxiの指し示された出力が別の有効なトランザクションによって既に消費されていないことなどの、同様に満たされなければならない、プロトコルエンジン451によって評価される1つまたは複数のさらなるプロトコルレベルの条件も存在する。プロトコルエンジン451は、スクリプトエンジン452からの結果を1つまたは複数のプロトコルレベルの条件と一緒に評価し、それらがすべて真である場合にのみ、トランザクションTxjを承認する。プロトコルエンジン451は、トランザクションが有効であるかどうかのインジケーションをアプリケーションレベル判断エンジン454に出力する。Txjが確かに承認されるという条件でのみ、判断エンジン454は、コンセンサスモジュール455Cと伝播モジュール455Pとの両方を制御して、Txjに関してそれらのそれぞれのブロックチェーン関連機能を実行することを選択してよい。これは、コンセンサスモジュール455Cが、ブロック151に組み込むためのトランザクションのノードのそれぞれの順序付けられたセット154にTxjを追加することと、伝播モジュール455Pが、Txjをネットワーク106の別のブロックチェーンノード104に転送することとを含む。任意で、実施形態において、アプリケーションレベル判断エンジン454は、これらの機能のどちらかまたは両方をトリガする前に、1つまたは複数の追加の条件を適用する場合がある。たとえば、判断エンジンは、トランザクションが有効であり、かつ十分な取引手数料を残すという条件でのみ、トランザクションを公開することを選択する場合がある。
【0072】
本明細書における用語「真」および「偽」は必ずしも2進数1桁(ビット)のみの形態で表された結果を返すことに限定しないが、それは確かに1つの可能な実装であることにも留意されたい。より広く、「真」は、成功したまたは肯定的な結果を示す任意の状態を指すことが可能であり、「偽」は、失敗したまたは非肯定的な結果を示す任意の状態を指すことが可能である。たとえば、アカウントベースのモデルにおいて、「真」の結果は、署名の暗黙的なプロトコルレベルの承認とスマートコントラクトの追加の肯定的な出力との組合せによって示される可能性がある(個々の結果が両方とも真である場合に、全体の結果が真を知らせるとみなされる)。
【0073】
ブロックチェーン署名メッセージ
例示的なブロックチェーントランザクションが、Table 1(表1)に概略的に示される。ブロックチェーントランザクションは、たとえば、ビットコイントランザクションを含む場合がある。Table 1(表1)の例において、トランザクションは、2つの入力および3つの出力を含むが、その他の例では、異なる数の入力および出力が使用されてよいことは、理解されるであろう。
【0074】
【表1】
【0075】
Table 1(表1)の例において、インデックス2で使用されるアウトポイントは、公開鍵Pを指定するpay-to-public-key-hash(P2PKH)ロックスクリプトを含む。したがって、インデックス2は、関連するプライベート鍵aおよびメッセージmを使用して生成された署名を提供するロック解除スクリプトを必要とする。
【0076】
ブロックチェーン署名メッセージ(たとえば、ビットコイン署名メッセージ)は、署名されているトランザクションの詳細から導出される。したがって、ユーザが適切なプライベート鍵を保持していることを証明することに加えて、署名は、署名メッセージに含まれるトランザクション内のすべての詳細の完全性も保証する。署名されたトランザクションの詳細が修正される場合、署名検証プロセスは失敗する。
【0077】
Table 1(表1)の例において、TxIDフィールドおよびロック解除スクリプトフィールドは、署名が生成された後に作成および/または編集されなければならないので、署名メッセージに含まれない。VersionおよびLocktimeフィールドは、承認するために署名が使用される入力の詳細(たとえば、OutpointjおよびnSeqj)がそうであるように、常に署名メッセージに含まれる。メッセージは、署名中にどのsighashフラグが使用されるかに応じて、その他の入力および任意のトランザクション出力の詳細も含む場合がある。
【0078】
sighashフラグ
図5は、6つの異なるsighashフラグを使用する署名メッセージに含まれる入力および出力の6つの概略図である。括弧に入れられている(括弧によって囲まれている)入力または出力は、署名されない要素を示す。署名メッセージに含まれる入力および出力は、括弧に入れられていない(括弧で囲まれていない)。
【0079】
図5に示された6つのsighashフラグの種類において、それぞれのsighashフラグの種類は、署名がすべての入力および出力かまたは様々なサブセットかのどちらかを選択的に裏書きする(およびそれらの詳細を確定する)ことを可能にする。インデックス1の入力のロックを解除する署名に基づいて、異なるセットが図5に示される。署名が適用される入力は、常に署名される。
【0080】
例によると、Table 1(表1)に示されたトランザクションおよび入力1に関する署名に基づく完全な署名メッセージは、以下のように構築される。
m = [Version][Hash(アウトポイント)][Hash(nSeq)][Outpointk]...
[LockScriptLengthk][LockScriptk][Valuek][nSeqk][Hash(出力)]...
[Locktime][Flag]
【0081】
メッセージの最後にある1バイトのフィールドFlagは、図5に示された6つのsighashフラグの種類のうちの1つに対応する場合があるsighashフラグを示す。フィールド[Hash(アウトポイント)]、Hash(nSeq)、およびHash(出力)は、使用されるsighashフラグに応じて異なる情報を含む。ハッシュフィールドが空の値をハッシュすることを含む場合(たとえば、NONEフラグを使用するときのHash(出力))、フィールド値は0に設定される。そのような例では、Hash(空)という表記が、これらの場合を示すために使用される場合がある。
【0082】
図5は、6つのsighashフラグの種類と、それぞれに関して署名メッセージにどの入力および出力が含められるかとを示す。表の上の行は、すべての入力と、ALL(すべて)、NONE(0個)、またはSINGLE(1つ)の出力とに署名する「通常の」sighashフラグの変種を示す。表の下の行は、単一の入力 -- 署名が配置されるインデックス1の入力 -- のみが署名メッセージに含まれる「anyone can pay」(ACP)の変種を示す。
【0083】
ハッシュパズル
ハッシュ関数
ハッシュ関数は、可変長の入力を特定の長さの出力に変換する暗号学的関数である。ハッシュ関数は、以下の特性を有する場合がある。
・決定的(deterministic): 同じ入力を使用することが、常に同じ出力を返す。
・予測不可能: 入力の小さな変化が、出力の大きな変化をもたらす。
・一方行: 出力だけが与えられた場合、入力を再構築することが計算上実行不可能である。
・衝突耐性(collision-resistant): 2つの入力が同じ出力値をもたらす見込みが極めて小さい。
衝突の厳密な見込みは、出力の大きさに依存し、出力が大きいほど、少ない衝突をもたらす。ハッシュ関数の例は、RIPEMD-160、SHA-1、およびSHA-256を含む。
【0084】
ビットコインのハッシュパズル
ビットコイントランザクションは、伝統的にPay to Public Key Hash(P2PKH)ロックスクリプトを使用するが、2020年2月のジェネシスのアップグレード以降、様々な標準化されていないロックスクリプトが有効になっている。これらのうちの1つが、UTXOを消費するためにユーザが特定のハッシュ値の原像(preimage)を提供しなければならないようなロックスクリプトが設定されるハッシュパズルである。
【0085】
原像sに関して、H256(s)は、SHA-256ハッシュ関数からのハッシュダイジェストである場合がある。この値のビットコインのハッシュパズルは、以下のロックスクリプトを有するUTXOを作成することによって実装され得る。
OP_SHA256 < H256(s) > OP_EQUALVERIFY
このUTXOを消費するために、ユーザは、原像sの値を知っていなければならない。これが、UTXOを消費するトランザクションのロック解除スクリプトとして使用される。検証中、SCRIPTエンジンは、ロック解除スクリプトとロックスクリプトとを連結して、以下を与える。
< s > OP_SHA256 < H256(s) > OP_EQUALVERIFY
OP_EQUALVERIFYコードは、
SHA-256(s) = H256(s)
である場合にのみ値1を返す、すなわち、トランザクションは、ユーザが正しい原像を提出した場合にのみ有効となる。このスタイルのロックスクリプトパズルは、ハッシュ関数の衝突耐性の特性に依拠しており、すなわち、sの(秘密の)値を知っているユーザだけが、ハッシュパズルを「解く」ことができる。
【0086】
セキュリティ
ハッシュパズルは必要とされる原像を知らない人によって解かれ得ないが、秘密の原像の値を知っているユーザによってトランザクションが構築されると、そのトランザクションは、ビットコインネットワークにブロードキャストされ、ブロックチェーンに公開されなければならない。トランザクションがビットコインネットワークに送信された後、攻撃に対する脆弱性が存在し、すなわち、トランザクションの詳細を受信するすべての関係者が秘密の値を知るようになり、これはパズルUTXOの消費を認可するのに十分である。ロック解除スクリプトにおいては署名が必要とされないので、悪意のある者が、トランザクションを無効にすることなく出力の詳細を変更する可能性がある。
【0087】
この展性(malleability)に対処するために、ハッシュパズルは、UTXOを特定のユーザの公開鍵と結びつけるためにOP_CHECKSIG要件と組み合わされ得る。たとえば、公開鍵Pを持つユーザに関して、xのRIPEMD-160ハッシュを表す表記H160(x)を使用すると、ハッシュパズルのロックスクリプトは、以下のように構築される可能性がある。
OP_SHA256 < H256(s) > OP_EQUALVERIFY OP_DUP OP_ HASH160
<H160(P)> OP_EQUALVERIFY OP_CHECKSIG
このパズルは、ロック解除スクリプトにおいて以下の入力を必要とする。
<sigP> <P> <s>
このフォーマットのためのパズルは、UTXOを特定のユーザにロックし、ユーザが必要とされる秘密の原像を知っている場合にのみ消費され得る。結果として得られるトランザクションは、sigPを作成するために使用された署名メッセージに含まれたいずれの値のマリエーション(malleation)に対しても安全である。上述のように、署名メッセージに含まれるトランザクション情報は、使用されるsighashフラグに依存する場合がある。
【0088】
秘密のアクセストークン
図6は、第1の関係者によって所有されるリソース(たとえば、データリソース)へのアクセスを制御するための例示的な方法を示す。第1の関係者は、1人または複数のユーザを含む場合がある。この例において、第1の関係者は、Alice 103aである。一部の例において、リソースは、データリソースまたは物理リソースを含む場合があり、Aliceは、オラクル(oracle)、または他の種類の信頼できる第三者である場合がある。一部の例においては、関係者(たとえば、Bob 103b)が、リソースへのアクセスを申請してよく、アクセスは、特定の条件(たとえば、十分な料金を支払うこと、またはアイデンティティ(identity)のチェックに合格すること)が満たされる場合、オラクルによって許可される。その他の例において、方法は、Bob 103bがトランザクションにおいてAlice 103aから品物を購入するために使用される場合がある。
【0089】
Alice 103aおよびBob 103bは、このセクションにおいて説明されるプロトコル全体で1つまたは複数のプライベート鍵を使用する必要がある場合がある。PAおよびPBは、それぞれAlice 103aまたはBob 130bが保持する、使い捨てのプライベート-公開鍵ペアのセットからの全体的な公開鍵を指す。それらは表記を共有するが、各鍵は一意であることが理解されるであろう。表記
【0090】
【数1】
【0091】
【0092】
【数2】
【0093】
【0094】
【数3】
【0095】
などは、プロトコル内で使用される単一の特定の公開鍵を指す。各鍵は、一貫した表記を有し、すなわち、
【0096】
【数4】
【0097】
のすべてのインスタンスは、同じ公開鍵を指す。
【0098】
ECDSA署名アルゴリズムなどのいくつかの署名アルゴリズムの一部として、署名メッセージは、ダブルハッシュされる(すなわち、SHA-256ハッシュアルゴリズムが2回適用される)。署名メッセージのシングルハッシュとダブルハッシュとの両方の値は、メッセージmに関して、以下のように定義される。
シングルハッシュ: h1 = H256(m)
ダブルハッシュ: h2 = H256(h1) = H256(H256(m))
【0099】
一部の例においては、(Rパズル(R-puzzle)アルゴリズムまたは異なるSHAアルゴリズム、たとえば、SHA-512などの)SHA-256アルゴリズム以外のハッシュアルゴリズムが、使用される場合がある。h1は、ハッシュアルゴリズムを一回使用してメッセージmをハッシュすることによって決定されてよく、h2は、ハッシュアルゴリズムを使用してメッセージmを2回ハッシュすることによって決定されてよい。
【0100】
Alice 103aは、一部の例において第1の関係者とみなされる場合がある。Bob 103bは、一部の例において第2の関係者とみなされる場合がある。
【0101】
S|ACPトークン
611において、Bob 103bは、TxIDsetupを生成し、TxIDsetupにおいて、Bob 103bは、自分の公開鍵
【0102】
【数5】
【0103】
にアクセスのために必要とされる料金を割り振る。また、Bob 103bは、その出力のOP_RETURNに、自分のアクセス申請に関連するデータ(たとえば、暗号化されたアイデンティティ証明)を含めることができる。セットアップトランザクションは、オンチェーンで公開されてよい。Table 2(表2)は、TxIDsetupの例を示す。本明細書のすべての例において、TxIDsetupは、前のトランザクションとみなされてよい。
【0104】
【表2】
【0105】
613において、Bob 103bは、UTXOの詳細、すなわち、TxIDsetup || 0および自分の公開鍵のうちの別のもの
【0106】
【数6】
【0107】
をAlice 103aに送信する。
【0108】
615において、Alice 103aは、第1のトランザクションTxIDsaleのテンプレートを生成する。第1のトランザクションは、BobのUTXO、すなわち、TxIDsetup || 0を入力として有していてよく、値を
【0109】
【数7】
【0110】
に割り振る。一部の例において、Bob 103bは、
【0111】
【数8】
【0112】
の詳細を知らない。
【0113】
【表3】
【0114】
TxIDsaleは、第1のトランザクションとみなされてよく、前のトランザクションTxIDsetupの出力に基づく入力を有する。第1のトランザクションの出力は、第1の関係者の公開鍵にロックされてよい。
【0115】
615において、Alice 103aは、TxIDsaleのテンプレートのS|ACP署名メッセージmのh1およびh2、シングルハッシュおよびダブルハッシュを計算する。したがって、メッセージは、第1のトランザクションのテンプレートに基づく。メッセージmは、たとえば、以下を使用して決定されてよい。
m = [Version][Hash(Outpoint0)][Hash(nSeq0)][Outpoint0][LockScriptLength0]
[LockScript0][Value0][nSeq0][Hash(Output0)][Locktime][S|ACP]
【0116】
上式に見られるように、この例においては、S|ACP sighashフラグが使用される。
【0117】
そのとき、秘密h1は、メッセージmに基づいて決定され得る。一部の例においては、そのとき、h1は、メッセージmを、たとえば、SHA-256ハッシュを使用することによってハッシュすることにより決定され得る。
【0118】
h1に基づく値、すなわち、秘密に基づく値が、h2と表記される。一部の例において、そのとき、h2は、h1を、たとえば、SHA-256ハッシュを使用することによってハッシュすることにより決定され得る。Bob 103bは、入力の詳細を知っているが、Alice 103aが定義した出力の詳細を推測することはできず、したがって、値h1は、Bob 103bには知られていない。これは、h1が秘密として働くことを可能にする。
【0119】
617において、Alice 103aは、解くために秘密h1を必要とするロックスクリプトのハッシュパズルを持つ出力に、(一部の例においては、631の取引手数料をカバーするのに十分である場合がある)小さな値を割り振るTxIDpuzzleを作成する。
【0120】
【表4】
【0121】
たとえば、ロックスクリプトのパズルは、以下の形態をとる場合がある。
OP_SHA256 <h2> OP_EQUALVERIFY P2PKH
【0122】
【数9】
【0123】
このUTXOは、Bob 103bによってのみ、およびBob 103bがh2の原像である秘密h1の値を知るときにのみ消費され得る。Alice 103aは、単一のトランザクションで複数のパズルUTXOを生成することが可能であることに留意されたい。それぞれが、h2の一意な値を有し、1人のユーザの公開鍵に関連付けられる。
【0124】
619において、Alice 103aは、TxIDpuzzleに署名し、それが、第1のブロックチェーン150aに公開される。一部の例において、第1のブロックチェーン150aは、第2のブロックチェーン150bと同じブロックチェーンである。一部の例において、第1のブロックチェーン150aは、第2のブロックチェーン150bと比較して異なるブロックチェーンである。たとえば、第1のブロックチェーン150aは、プルーフオブワークのブロックチェーンである場合があり、第2のブロックチェーンは、プルーフオブステークのブロックチェーン150bである場合があり、またはその逆である場合がある。
【0125】
621bにおいて、Alice 103aは、チェーン上のTxIDpuzzleのマークル証明(Merkle proof)と、値h2とをBob 103bに送信する。Bob 103bに渡される情報は、(チェーン上で公開されている)パズルトランザクションに関連することに留意されたい。販売トランザクションTxIDsaleは、この段階では、Alice 103aによってテンプレートとして保持された秘密である。
【0126】
一部の例において、Bob 103bは、621bのようにAlice 103aから値h2を受信してよい。その他の例において、Bob 103bは、621aに示されるように、第1のブロックチェーン150aから値h2を取り出してよい。
【0127】
値h2は、今や2つの役割を果たす。それは、以下である。
・Bobがアクセスパズルを解くために原像を見つけなければならないハッシュダイジェスト、および
・Bobの支払いUTXO(TxIDsetup || 0)の消費を認可するために署名されなければならないメッセージのダブルハッシュ。
【0128】
623において、Bob 103bは、(Bob 103bが621aを使用してh2の値を取り出したのではなく621bにおいてh2の値を受信した場合は)Bob 103bがAlice 103aから受信したh2の同じ値をTxIDpuzzleが有することと、ロックスクリプトがP2PKH
【0129】
【数10】
【0130】
も含むこととをチェックしてよい。Alice103aからBob 103bによって受信されたh2の値は、候補値とみなされてよい。そうである場合、Bob 103bは、Alice 103aがアクセスのために秘密が必要とするトランザクションの詳細を明かすことなく販売トランザクションを認可するためにBobの署名を使用することができないことを知る。
【0131】
623において、Bob 103bは、
【0132】
【数11】
【0133】
に関連するプライベート鍵を使用してh2に署名し、625において、署名をAlice 103aに送信する。
【0134】
627において、Bobのアクセスのすべての条件が満たされると(たとえば、Bobによって供給されたデータに基づくアイデンティティの検証)、Alice 103aは、615においてAliceによって生成されたTxIDsaleのテンプレートにBobの署名を適用する。この例においては、Bob 103bがS|ACP sighashフラグを使用して導出された署名メッセージに署名したので、結果として得られる署名は、その他のインデックス位置の入力または出力のいずれの情報にも制約を課さない。これは、Alice 103aが、ユーザの署名のいずれも無効にすることなく、複数のユーザからの支払いを単一のトランザクションに自由に組み合わせることができることを意味する。Alice 103aは、第1のトランザクションのロック解除スクリプトに署名を含め、それから、第1のトランザクションを第2のブロックチェーンに送信してよい。
【0135】
【表5】
【0136】
Alice 103aは、629において販売トランザクションを第2のブロックチェーン150bに公開する。
【0137】
629において、Alice 103aは、公開されるようにTxIDsaleを送信するとき、Bob 103bに通知する。代替的または追加的に、Bob 103bは、自身がTxIDsetupにおいて作成したUTXOまたは自分の公開鍵
【0138】
【数12】
【0139】
に関してブロックチェーン150bを監視することによってトランザクションを特定することができる。631において、Bob 103bは、パズルUTXO TxIDpuzzle || 0を消費するために必要とされる秘密h1(Bob 103bのUTXOが入力であるインデックスに基づくS|ACP署名メッセージのシングルハッシュ)を導出する。Bob 103bは、公開されたTxIDsaleからメッセージmを決定することもできる。
【0140】
633において、Bob 103bは、TxIDpuzzle || 0を入力とするTxIDaccessを作成する。TxIDaccessは、第2のトランザクションを含むとみなされてよい。一部の例において、このUTXOは、このトランザクションの取引手数料をカバーするのに十分な値を有する。必要とされるロック解除スクリプトは、有効な署名および関連する公開鍵
【0141】
【数13】
【0142】
をともなう秘密h1である。TxIDaccessがチェーン上で公開され、提示されるとき、Alice 103aからのBobの購入がトリガされる。これは、Alice 103aからBob 103bへのアクセスをトリガすることを含む場合がある。
【0143】
【表6】
【0144】
図6の方法およびシステムは、Alice 103aが、Bob 103bにアクセスを許可すること(または関連する品物またはサービスをBob 103bに提供すること)なしに、Bobの料金を徴収することができないことを保証する。TxIDsaleは、同時に、Alice 103aにアクセス料金を送金し、Bob 103bにアクセスの秘密を明かし、アトミックスワップと考えられ得ることを実施する。
【0145】
Bob 103bは、このスワップが発生する前に自分の申請を取り下げると判断する場合、TxIDsetup || 0を消費する代替トランザクションを作成することができる。Bobの料金は返金され、TxIDsaleはもはや有効でなく、したがって、アクセスの秘密はオンチェーンで明かされ得ない。同様に、Bobのアクセスの条件が満たされない(たとえば、アイデンティティの検証が失敗する)場合、Alice 103aは、TxIDsaleを公開し得ず、Bob 103bは、TxIDsetup || 0を制御し続ける。
【0146】
パズルUTXOがBobの公開鍵にロックされるという事実は、Alice 103aが、必要とされる秘密をたとえ知っているとしても、パズルUTXOを消費することができないことを意味する。このため、パズルUTXOは、アクセスがBob 103bに許可されない場合に備えて、ダスト(dust)(またはそれどころかゼロ)値を有していてよい。しかし、署名の要件は、Alice 103aが、TxIDsaleに関するBobの署名を受信すると、Alice 103aがTxIDsaleを公開する前に自分自身でパズルUTXOを消費することによってBob 103bのアクセスを拒否することができないことを保証するので、システムの重要な側面である。図6の例において、TxIDsaleおよびTxIDaccessは、共通の公開鍵を共有せず、外部の観測者には独立しているように見え、したがって、ユーザのプライバシーが保たれる。
【0147】
一部の例では、TxIDpuzzleにおいて、ハッシュパズルの代わりにRパズルを使用することが可能である。秘密h1は、r = [h1・G]xであるように、ECDSA署名の生成中に一時鍵(ephemeral key)として使用される。パズルのロックスクリプトは、rの適切な値が使用されたことをチェックする。
【0148】
Bob 103bは、Alice 103aがTxIDsaleのために定義する出力の詳細を知らないので、秘密h1の値を予測することはできない。しかし、システムは、プロセスの一番初めにAlice 103aが料金のための自分の出力アドレスを定義することを要求し、それは、変更され得ない。これは、たとえAlice 103aが複数のユーザのアクセストークンを1つのTxIDsaleに組み合わせるとしても、各入力に関して定義された一意の出力が存在しなければならいことを意味する。単一の出力を定義することに比べて、これは、トランザクションのサイズと、Alice 103aが支払わなければならない関連する取引手数料とを大幅に増加させる。
【0149】
以下のセクション「NONE|ACPトークン」においては、トークンの一部が、Alice 103aにTxIDsaleの出力を制御する際の柔軟性を与えるように適合される。
【0150】
NONE|ACPトークン
図6に関連して上で説明された例においては、S|ACP sighashフラグが、TxIDsaleのために使用される。TxIDsaleのためにS|ACPではなくNONE|ACP sighashフラグが使用されるさらなる例が、以降で(やはり図6に関連して)考察される。
【0151】
611において、Bob 103bは、Alice 103aからの一意の公開鍵
【0152】
【数14】
【0153】
を要求することができる。Bob 103bは、TxIDsetupを生成してよく、TxIDsetupにおいて、Bob 103bは、
【0154】
【数15】
【0155】
【0156】
【数16】
【0157】
、および
【0158】
【数17】
【0159】
に関連する2-of-3マルチシグアカウントにアクセスのために必要とされる料金を割り振る。また、Bob 103bは、その出力のOP_RETURNに、自分のアクセス申請に関連するデータ(たとえば、暗号化されたアイデンティティ証明)を含めてよい。セットアップトランザクションは、オンチェーンで公開される。
【0160】
【表7】
【0161】
613において、Bob 103bは、UTXOの詳細、すなわち、TxIDsetup || 0および自分の公開鍵のうちの別のもの
【0162】
【数18】
【0163】
をAliceに送信する。
【0164】
615において、Alice 103aは、マルチシグ入力を有するが、出力は持たないTxIDsaleのテンプレートを作成する。
【0165】
【表8】
【0166】
615において、Alice 103aは、標準的なロック時間を使用するが、n0をランダム化し、その結果、Bob 103bは、TxIDsaleの入力の完全な詳細を知らない。NONE|ACP署名メッセージは、出力に署名しないが、このようにして、署名メッセージ(およびそのハッシュダイジェストh1)は、TxIDsaleがオンチェーンで公開されるまでBob 103bに知られない情報に基づく。
【0167】
Alice 103aは、TxIDsaleのテンプレートのNONE|ACP署名メッセージmのh1およびh2、シングルハッシュおよびダブルハッシュを計算する。
m = [Version][Hash(Outpoint0)][Hash(nSeq0)][Outpoint0][LockScriptLength0]
[LockScript0][Value0][nSeq0][Hash(空)][Locktime][NONE|ACP]
【0168】
上述のように、h1およびh2を計算するためのハッシュアルゴリズムの代わりに、Rパズルが使用されてよい。ハッシュアルゴリズムまたはRパズルアルゴリズムの任意のその他の好適なアルゴリズムが使用されてよいことに留意されたい。
【0169】
617において、Alice 103aは、解くために秘密h1を必要とするロックスクリプトのハッシュパズルを持つ出力にダスト値を割り振るAlice 103aからの入力を持つTxIDpuzzleを作成する。
【0170】
【表9】
【0171】
ロックスクリプトのパズルは、以下の形態をとる場合がある。
OP_SHA256 <h2> OP_EQUALVERIFY P2PKH
【0172】
【数19】
【0173】
Alice 103aは、TxIDpuzzleに署名し、そのTxIDpuzzleは、619において公開される。621bにおいて、Alice 103aは、チェーン上のTxIDpuzzleの位置と、値h2とをBob 103bに送信する。そのとき、Bob 103bは、これを使用してTxIDpuzzleを取り出すことができる。代替的に、Bob 103bは、621aにおいてブロックチェーン150aからTxIDpuzzleを直接取り出すことができる。
【0174】
623において、Bob 103bは、Bob 103bがAlice 103aから受信したh2の同じ値をTxIDpuzzleが有することと、ロックスクリプトがP2PKH
【0175】
【数20】
【0176】
も含むこととをチェックする。そうである場合、Bob 103bは、Alice 103aがアクセスのためにBob 103bが必要とする秘密h1が導出されるトランザクションの詳細を明かすことなく販売トランザクションを認可するためにBobの署名を使用することができないことを知る。Bob 103bは、
【0177】
【数21】
【0178】
(または
【0179】
【数22】
【0180】
)に関連するプライベート鍵を使用してh2に署名し、625において、署名をAlice 103aに送信する。
【0181】
627において、Bobのアクセスのすべての条件が満たされると(たとえば、Bob 103bによって供給されたデータに基づくアイデンティティの検証)、Alice 103aは、TxIDsaleにBobの署名を適用する。Bob 103bおよびその他のユーザがNONE|ACP sighashフラグを使用して導出された署名メッセージに署名したので、Alice 103aは、ユーザの署名のいずれも無効にすることなく、複数のユーザからの支払いを入力として単一のトランザクションに組み合わせることができる。出力は署名されていないので、Alice 103aは、すべてのユーザからの料金を単一のアドレスにまとめる出力をちょうど1つ設定することができる。
【0182】
【表10】
【0183】
627において、Alice 103aは、マルチシグの要件を満たすために自身の署名を追加する。Aliceの署名は、Aliceの出力が修正され得ないことを保証するために、sighash ALLなどの、出力の詳細に署名するsighashを使用することができる。
【0184】
629において、Alice 103aは、チェーン上でTxIDsaleを公開する。
【0185】
631において、Bob 103bは、UTXOまたは自分の公開鍵に基づいてTxIDsaleを特定する。Bobは、パズルUTXO TxIDpuzzle || 0を消費するために必要とされる秘密h1(BobのUTXOが入力であるインデックスに基づくNONE|ACP署名メッセージのシングルハッシュ)を導出する。
【0186】
633において、Bob 103bは、TxIDpuzzle || 0を入力とするTxIDaccessを作成する。必要とされるロック解除スクリプトは、有効な署名および関連する公開鍵
【0187】
【数23】
【0188】
をともなう秘密h1である。Bob 103bは、パズルUTXOがダスト値を持っていたので、取引手数料を賄うための追加の入力を含めてよい。TxIDaccessが635においてチェーン上で公開されるとき、Bobのアクセスがトリガされる。
【0189】
【表11】
【0190】
NONE|ACP sighashフラグを使用するとき、秘密h1の基礎をNONE|ACP sighashフラグに置くことによって、ユーザは、h2に署名するときにいかなる出力の詳細も確定しない。これは、Alice 103aがトランザクションをファイナライズする時点でTxIDsaleの出力の詳細を設定することを可能にし、Alice 103aが単一の出力を定義しさえすればよいことを意味し、これは、TxIDsaleの取引手数料を削減し、Aliceの鍵の管理を簡素化する。出力の詳細を保護するために、Alice 103aは、署名を提供することができ、これは、一部の例において、ユーザの料金を含む入力をマルチシグの要件を持つように設定することによって実現され得る。
【0191】
Alice103aはマルチシグUTXOのための1つの鍵を制御し、消費を認可するために2つの署名が必要とされ、したがって、Alice 103aはBobの同意なしに料金を取ることはできない。Bob 103bは、鍵のうちの2つを制御し、したがって、マルチシグUTXOを消費するための必要とされる2つの署名を生成することによって、必要な場合にプロトコルを中止する力を保持している。
【0192】
NONE|ACPシステムは、必要な出力の数を制限することによってTxIDsaleのサイズを削減する場合があるが、入力にマルチシグの要件を有することは、増大したロック解除スクリプトのサイズが原因でこれを打ち消す可能性がある。閾値署名システムは、トランザクションのサイズを増大させることなく、マルチシグシステムの利点の多くを提供することができるが、すべての関係者が同じ署名メッセージに署名することを要求する(すなわち、Alice 103aがBob 103bと異なるsighashフラグを使用しない可能性がある)ので、ここで設計されたシステムには適用され得ない。
【0193】
Alice 103aからのいかなる署名も導入することを必要としない代替的な解決策は、Alice 103aが、TxIDsaleがより広いネットワークにブロードキャストされることなく公開され得る信頼できるブロック生成者と取り決めを結ぶことである。この場合、TxIDsaleへの入力は、S|ACPトークンに関して図6に関連して上で説明されたように、単一のユーザの公開鍵にロックされたP2PKH UTXOのままである可能性がある。
【0194】
Bob 103bは、秘密の値を推測するかまたは総当たりで計算することができないはずである。S|ACPトークンに関して、Bobは、トランザクションがオンチェーンで公開されるまで、Aliceの出力の詳細を知ることができない。すべてのP2PKHロックスクリプトが、総当たり攻撃を防ぐのに十分安全であると考えられる20バイト(160ビット)の公開鍵を含む。(追加のセキュリティが必要とされる場合、Alice 103aは、セキュリティレベルを上げるために -- たとえば、OP_PUSH、OP_DROP、またはOP_RETURNを使用して -- 任意のサイズの追加的な秘密のナンスを出力ロックスクリプトに含める可能性がある)。対照的に、NONE|ACPトークンに関して、出力は、h1の導出に含まれず、したがって、署名メッセージ内の知られていない要素になり得ない。Bob 103bに知られていない値として入力のシーケンス番号を使用すること。しかし、nSeqフィールドは、一部の例においてサイズを制限されており(4バイト=32ビット)、Bobによる総当たり攻撃をずっと実行しやすくする。署名メッセージに含まれるその他の値は、バージョンおよびロック時間である。しかし、一部の例において、これらの値は、やはり両方とも4バイトを上限とされる場合がありしたがって、Alice 103aが3つの値すべてをランダムに設定する(およびロック時間がトランザクションの公開を遅らせることなく完全にランダムに設定されることは不可能であることに留意する)として、セキュリティは、96ビットにしかならない。したがって、NONE|ACP sighashフラグを使用して説明されたシステムは、Bobの計算能力が制約されている状況、たとえば、IoTネットワークに接続されたデバイス、およびAlice 103aがh2をBob 103bに渡してからBob 103bが自分のアクセスを行うまでの時間が短い状況により適している可能性がある。Bob 103bが高い計算能力を有するか、またはAlice 103aがh2をBob 103bに渡してからBob 103bが自分のアクセスを行うまでの時間が長い状況では、TxIDsaleにS|ACP sighashフラグを使うことが好ましい可能性がある。
【0195】
連鎖された秘密のアクセストークン
一部の例において、秘密のアクセストークンは、連鎖される。これの1つの用途は、サプライチェーン管理にある可能性があり、たとえば、サプライチェーンの関係者の間の各送金が行われるときに、品物を引き渡す関係者が支払いを受けるために必要とされる秘密を明かすトランザクションがオンチェーンで行われる。スワップは、今完了されたサプライチェーンの段階に関して、品物と代金との間で発生する場合がある。
【0196】
たとえば、オラクルであるAlice 103a、チェーン内の品物を担当する2人の関係者であるBob 103bおよびCharlie 103c、品物を受け取る最後の関係者であるDebbie 103dが存在するサプライチェーンを考える。一部の例においては、サプライチェーンの異なる数の関係者で同様の方法が使用される可能性があることは理解されるであろう。
【0197】
一部の例においては、最後の関係者であるDebbie 103dが、サプライチェーンのオラクルとして働く可能性があり、Aliceに割り振られた役割を引き受ける。上述の表記が適用され、各関係者は、下付き文字としてのそれらの関係者の頭文字によって示される公開鍵を所有し、*の上付き文字が付いていない鍵は、関係者に属する使い捨ての鍵のセットの全体的なラベルである。
【0198】
741aにおいて、チェーンの第1の関係者であるBob 103bは、
【0199】
【数24】
【0200】
に関連する、チェーン上のBob 103bが制御するUTXOの詳細(TxIDBob || iB)をAlice 103aに送信する。簡単にするために、このUTXOが、ダストの額が後に残されるようにしてトランザクションのチェーンの取引手数料をカバーするのに十分な値を有すると仮定する。Bob 103bは、自分の公開鍵のうちの別のもの
【0201】
【数25】
【0202】
もAliceに送信する。741bにおいて、チェーンの途中の関係者(ここではCharlie 103c)は、2つの未使用の公開鍵をAlice 103aに送信し、741cにおいて、連鎖の最後の関係者Debbie 103dは、1つの未使用の公開鍵をAlice 103aに送信する。Alice 103aは、
【0203】
【数26】
【0204】
の詳細を知っている。チェーンの関係者は、互いの公開鍵の詳細を知らない。
【0205】
743において、Alice 103aは、チェーン内で発生する各トランザクションのテンプレートを作成し、各トランザクションに基づいて秘密を計算する。この例において、Alice 103aは、トランザクションTxIDchain1(この例の第1のトランザクションとみなされる)およびTxIDchain2(この例の第3のトランザクションとみなされる)のテンプレートを作成し、それらのトランザクションは、サプライチェーン内の受け渡し点(handover point)を表す。Alice 103aは、これらのトランザクションを形成する入力および出力の詳細を知っているが、これらの詳細は、チェーンの関係者によって知られていない。
【0206】
【表12】
【0207】
【表13】
【0208】
各トランザクションから、Alice 103aは、使用される署名メッセージを計算することができる。これは、上述のように、S|ACP sighashフラグである可能性があるが、チェーントランザクションはいかなるその他の入力または出力も含むことを期待されないので、ALLフラグである可能性もあることに留意されたい。
【0209】
sighash ALLフラグを使用するTxIDchain1のメッセージは、
m1 = [Version][Hash(Outpoint0)][Hash(nSeq0)][Outpoint0][LockScriptLength0]
[LockScript0][Value0][nSeq0][Hash(Output0)][Locktime][ALL]
であり、このメッセージから、Alice 103aは、秘密の値h11およびそのハッシュh12を計算することができる。これらは、Bob 103bが自分の支払いを受けるために解く必要があるパズルの基礎として使用される。Alice 103aは、TxIDchain2に対して同じ動作を実行して、m2(第2のメッセージ)、h21(第2の秘密)、およびh22(第2の秘密に基づく第2の値)を導出することができる。
【0210】
745aにおいて、Alice 103aは、TxIDchain1のテンプレートの詳細をCharlie 103cだけに送信する。TxIDchain1のテンプレートの詳細は、Bob 103bに送信されない。745bにおいて、Alice 103aは、TxIDchain2のテンプレートの詳細をDebbie 103dだけに送信する。TxIDchain2のテンプレートの詳細は、Charlie 103cに送信されない。
【0211】
747において、Alice 103aは、サプライチェーンにおけるBob 103bおよびCharlie 103cの役割に関するBob 103bおよびCharlie 103cへの支払いを含むパズルトランザクションを作成する。Bob 103bおよびCharlie 103cは、サプライチェーンの関係者として、自分のサービスに対する支払いを必要とする。Alice 103aは、2つの出力を持つパズルトランザクションを作成し、それらの出力は、以下のロックスクリプトを有する場合がある。
Puzzle1: OP_SHA256 <h12> OP_EQUALVERIFY P2PKH
【0212】
【数27】
【0213】
Puzzle2: OP_SHA256 <h22> OP_EQUALVERIFY P2PKH
【0214】
【数28】
【0215】
【表14】
【0216】
Puzzle1およびPuzzle2は、独立したパズルを含む場合があり、またはPuzzle1が、Puzzle2を含む場合がある。
【0217】
749において、Alice 103aは、パズルトランザクションに署名し、公開する。Alice 103aは、TxIDpuzzleのマークル証明と、値h12とをBob 103bに送信する。Alice 103aは、TxIDpuzzleのマークル証明と、値h22とをCharlie 103cに送信する。
【0218】
751において、Bob 103bは、品物をCharlie 103cに譲渡する。Bob 103bは、オンラインのTxIDpuzzle1が自分の期待される料金を含むこと、TxIDpuzzle1が資金をロックする公開鍵が
【0219】
【数29】
【0220】
であること、およびパズルスクリプト内の値h12がAlice 103aがBob 103bに送信した値と同じであることをチェックする。Bob 103bは、品物をCharlie 103cに届ける。Bob 103bは、
【0221】
【数30】
【0222】
に関連するプライベート鍵を使用して、メッセージh12を使用した署名を生成する。Bob 103bは、Charlie 103cに署名を与え、753において、Charlieは、TxIDchain1のテンプレートに署名を適用することができ、それから、TxIDchain1をオンラインで公開する。Bob 103bは、757において、トランザクションが公開されたことを検証し、759において、品物をCharlie 103cに譲渡する。
【0223】
【表15】
【0224】
761において、Bob 103bは、自分の支払いを徴収することができる。TxIDchain1の詳細から、Bob 103bは、Bobの支払いを含むTxIDpuzzleの出力のロックを解除するために必要とされる秘密であるh11を計算することができる。
【0225】
【表16】
【0226】
763において、Charlie 103cは、品物をDebbieに譲渡する。Charlie 103cは、オンラインのTxIDpuzzle2が自分の期待される料金を含むこと、TxIDpuzzle2が資金をロックする公開鍵が
【0227】
【数31】
【0228】
であること、およびパズルスクリプト内の値h22がAlice 103aがCharlie 103cに送信した値と同じであることをチェックする。Charlie 103cは、品物をDebbie 103dに届ける。Charlie 103cは、
【0229】
【数32】
【0230】
に関連するプライベート鍵を使用して、メッセージh22を使用した署名を生成する。Charlie 103cは、Debbie 103dに署名を与え、Debbie 103dは、765において、TxIDchain2のテンプレートに署名を適用することができ、766において、TxIDchain2をオンラインで公開する。767において、Charlie 103cは、トランザクションが公開されたことを検証し、品物をDebbie 103dに譲渡する。
【0231】
【表17】
【0232】
771において、Charlie 103cは、自分の支払いを取得することができる。TxIDchain2の詳細から、Charlie 103cは、Charlieの支払いを含むTxIDpuzzleの出力のロックを解除するために必要とされる秘密であるh21を計算することができる。
【0233】
【表18】
【0234】
図7に関連して上で説明された方法は、チェーンの各関係者が、その関係者が代金を支払われることを知っている後続の関係者に品物を譲渡することを可能にする。チェーン上での対応するチェーントランザクションの公開を待つことによって、各関係者は、その関係者の支払いのロックを解除するためにその関係者が必要とする秘密がその関係者によって利用可能であることを知る。
【0235】
2人の関係者が共謀する、たとえば、品物の譲渡が行われることなく、Charlie 103cがBob 103bとTxIDchain1の詳細(それらの詳細から、Bob 103bは支払いのためにBob 103bが必要とする秘密を決定することができる)を共有することに合意するとしたら、Charlie 103cは、自分がDebbie 104dに品物を届けることができず、したがって、自分の支払いを受け取らないことを知っている。たとえBob 103bが自分が受け取る料金をCharlie 103cと分けると言うとしても、Charlie 103cは、これが行われるという証拠を何も持っておらず、したがって、共謀しようと動機付けられない。
【0236】
パズルトランザクションに関しては、秘密の値がオンチェーンで明かされるときに、料金が別の関係者によって盗まれ得ないことを保証するため、期待されるチェーンの関係者からの署名がロック解除スクリプトに含まれていることのチェックが含められ得る。このユースケースに関しては、チェーンの関係者が自分の役割を果たさない場合、パズルUTXOにおいて資金がロックされないように、パズルトランザクションのロックスクリプトが1-of-2マルチシグ署名条件(Alice 103aを1人の可能な署名者とする)を有することが適切である場合がある。この状況で、Alice 103aは、サプライチェーンから独立した信頼できる関係者である。
【0237】
システムは、供給サービスの合意された条件が満たされることを保証するために、IoTデバイス、たとえば、品物と一緒に梱包された温度計からの情報を統合するように適合され得る。これを実施するために、(支払いを含む)パズルトランザクションは、1-of-n署名要件(チェーンの関係者に加えてn - 1台のIoTデバイス)を有する可能性がある。すべてのIoTデバイスは、それらがいつでもパズルトランザクションを消費することができるように秘密の詳細を有し、特定の条件の下で、たとえば、品物の温度が特定の閾値を超えた場合にトランザクションを消費するようにプログラミングされる。
【0238】
クロスチェーン
それらは秘密の値h2によってリンクされるが、TxIDsaleおよびTxIDpuzzleは、入力および出力の点で完全に独立していることに留意されたい。したがって、TxIDsaleおよびTxIDpuzzleは、異なるブロックチェーン上で発生する可能性がある。これは、2つのチェーン(たとえば、これらのブロックチェーンが互いに異なる例においては、ブロックチェーン150aおよびブロックチェーン150b)の間でアトミックスワップが行われることを可能にする。これは、たとえば、あるチェーンのコインまたはトークンを別のチェーンのコインまたはトークンと交換するために使用される可能性がある。
【0239】
交換に関与する両方の関係者は、両方のチェーン上で公開鍵を制御する必要がある。TxIDsaleがチェーン1上で発生する(下のTable 19(表19))場合、TxIDpuzzleは、チェーン2上で発生する(下のTable 20(表20))。チェーン1上のBobのUTXOは、チェーン2上のAliceのUTXOと交換される。
【0240】
【表19】
【0241】
【表20】
【0242】
結論
開示された技術のその他の変形またはユースケースは、本明細書の開示が与えられれば、当業者に明らかになるであろう。本開示の範囲は、記載された実施形態によって限定されず、添付の請求項によってのみ限定される。
【0243】
たとえば、上記のいくつかの実施形態は、ビットコインネットワーク106、ビットコインブロックチェーン150、およびビットコインノード104の観点で説明された。しかし、ビットコインブロックチェーンは、ブロックチェーン150の1つの特定の例であり、上の説明は、任意のブロックチェーンに広く当てはまる可能性があることが理解されるであろう。すなわち、本発明は、ビットコインブロックチェーンに決して限定されない。より広く、ビットコインネットワーク106、ビットコインブロックチェーン150、およびビットコインノード104への上記のすべての言及は、それぞれ、ブロックチェーンネットワーク106、ブロックチェーン150、およびブロックチェーンノード104への言及に置き換えられてよい。ブロックチェーン、ブロックチェーンネットワーク、および/またはブロックチェーンノードは、上述のビットコインブロックチェーン150、ビットコインネットワーク106、およびビットコインノード104の一部のまたはすべての説明された特性を共有する場合がある。
【0244】
本発明の好ましい実施形態において、ブロックチェーンネットワーク106は、ビットコインネットワークであり、ビットコインノード104が、少なくとも、ブロックチェーン150のブロック151を作成し、公開し、伝播し、記憶するすべての説明された機能を実行する。これらの機能のうちの1つまたは一部だけを実行するが、すべては実行しないその他のネットワークエンティティ(またはネットワーク要素)が存在する可能性があることは、排除されない。すなわち、ネットワークエンティティが、ブロックを作成および公開することなく、ブロックを伝播および/または記憶する機能を実行する場合がある(これらのエンティティは、好ましいビットコインネットワーク106のノードとはみなされないことを思い出されたい)。
【0245】
本発明のその他の実施形態において、ブロックチェーンネットワーク106は、ビットコインネットワークではない場合がある。これらの実施形態においては、ノードが、ブロックチェーン150のブロック151を作成し、公開し、伝播し、記憶する機能の少なくとも1つまたは一部を実行するが、すべては実行しない場合があることは排除されない。たとえば、それらのその他のブロックチェーンネットワーク上で、「ノード」は、ブロック151を作成および公開するように構成されるが、それらのブロック151を記憶および/またはその他のノードに伝播するように構成されないネットワークエンティティを指すために用いられる場合がある。
【0246】
さらに一層広く、上記の用語「ビットコインノード」104へのすべての言及は、用語「ネットワークエンティティ」または「ネットワーク要素」によって置き換えられてよく、そのようなエンティティ/要素は、ブロックを作成し、公開し、伝播し、記憶する一部のまたはすべての役割を実行するように構成される。そのようなネットワークエンティティ/要素の機能は、ブロックチェーンノード104に関連して上で説明された同じ方法でハードウェアに実装されてよい。
【0247】
上記の実施形態が例として説明されたに過ぎないことは、理解されるであろう。より広く、以下のステートメントのいずれか1つまたは複数による方法、装置、またはプログラムが提供されてよい。
【0248】
ステートメント1:
第1の関係者および第2の関係者を含むシステムにおいて実行される方法であって、第1の関係者によって、第2の関係者に関連する前のトランザクションからの出力に基づく入力を有する第1のトランザクションのテンプレートを生成するステップと、第1の関係者によって、第1のトランザクションのテンプレートに基づくメッセージを生成するステップと、第1の関係者によって、メッセージに基づく秘密を生成するステップと、第1の関係者によって、秘密に基づく値を生成するステップであって、秘密が、値から導出され得ない、ステップと、第1の関係者によって、第1のパズルトランザクションを生成するステップであって、第1のパズルトランザクションの第1のロックスクリプトが、ロック解除スクリプトが秘密を含むことを要求するように構成された知識証明を含む、ステップと、第1の関係者によって、第1のパズルトランザクションを第1のブロックチェーンに公開するステップと、第2の関係者によって、秘密に基づく値を取得するステップと、第2の関係者によって、署名を作成するために秘密に基づく値に署名するステップと、第2の関係者から第1の関係者に署名を送信するステップと、第1の関係者によって、第1のトランザクションのロック解除スクリプトに署名を含め、それから、第1のトランザクションを第2のブロックチェーンに送信するステップと、第2の関係者によって、第2のブロックチェーン上の第1のトランザクションから、メッセージおよび秘密を決定するステップと、第2の関係者によって、秘密に基づいて第1のパズルトランザクションの第1の出力のロックを解除する第2のトランザクションを作成し、第2のトランザクションを第1のブロックチェーンに提出するステップとを含む、方法。
【0249】
ステートメント2:
第1のトランザクションの出力が、第1の関係者の公開鍵にロックされるステートメント1による方法。
【0250】
ステートメント3:
第1のパズルトランザクションが、第2の関係者の公開鍵にロックされるいずれかの前述のステートメントによる方法。
【0251】
ステートメント4:
第2の関係者によって、秘密に基づく値を取得するステップが、第2の関係者によって、第1のパズルトランザクションから秘密に基づく値を取得することを含み、方法が、第2の関係者によって、第1の関係者から、第1のパズルトランザクションからの秘密に基づく値の候補値を受信するステップ、第2の関係者によって、候補値と第1のパズルトランザクションからの秘密に基づく値とが等しいことをチェックするステップを含むいずれかの前述のステートメントによる方法。
【0252】
ステートメント5:
秘密が、第1のトランザクションの入力および対応する出力を含むいずれかの前述のステートメントによる方法。
【0253】
ステートメント6:
秘密が、第1のトランザクションのすべての入力およびすべての出力を含むいずれかの前述のステートメントによる方法。
【0254】
ステートメント7:
秘密が、第1のトランザクションの入力を含み、第1のトランザクションの出力のいずれも含まないステートメント1から5のいずれかによる方法。
【0255】
ステートメント8:
第1のトランザクションの入力が、前のトランザクションの複数署名(multiple signature)出力のロックを解除し、複数署名出力が、第1の関係者および/または第2の関係者の1つまたは複数の公開鍵にロックされるいずれかの前述のステートメントによる方法。
【0256】
ステートメント9:
第1のトランザクションが、第3の関係者の公開鍵にロックされた出力を含み、方法が、第1の関係者によって、第1のトランザクションの出力を消費する第3のトランザクションのテンプレートを生成するステップと、第1の関係者によって、第3のトランザクションのテンプレートに基づく第2のメッセージを生成するステップと、第1の関係者によって、第2のメッセージに基づく第2の秘密を生成するステップと、第1の関係者によって、第2の秘密に基づく第2の値を生成するステップであって、第2の秘密が、第2の値から導出され得ない、ステップと、第1の関係者によって、第2のパズルトランザクションを生成するステップであって、第2のパズルトランザクションの第2のロックスクリプトが、第2のロック解除スクリプトが第2の秘密を含むことを要求するように構成された知識証明を含む、ステップと、第3の関係者によって、第2の署名を作成するために第2の秘密に基づく第2の値に署名するステップと、第3の関係者から第4の関係者に第2の署名を送信するステップと、第4の関係者によって、第3のトランザクションを取得するステップと、第4の関係者によって、第3のトランザクションのロック解除スクリプトに第2の署名を含め、それから、第3のトランザクションを第2のブロックチェーンに送信するステップと、第3の関係者によって、第2のブロックチェーン上の第3のトランザクションから、第2のメッセージおよび第2の秘密を決定するステップと、第3の関係者によって、第2の秘密に基づいて第2のパズルトランザクションの出力のロックを解除する第4のトランザクションを作成し、第2のトランザクションを第1のブロックチェーンに提出するステップとを含むいずれかの前述のステートメントによる方法。
【0257】
ステートメント9A.
第5のトランザクションが、第3の関係者の公開鍵にロックされた出力を含み、方法が、第1の関係者によって、第5のトランザクションの出力を消費する第3のトランザクションのテンプレートを生成するステップと、第1の関係者によって、第3のトランザクションのテンプレートに基づく第2のメッセージを生成するステップと、第1の関係者によって、第2のメッセージに基づく第2の秘密を生成するステップと、第1の関係者によって、第2の秘密に基づく第2の値を生成するステップであって、第2の秘密が、第2の値から導出され得ない、ステップと、第1の関係者によって、第2のパズルトランザクションを生成するステップであって、第2のパズルトランザクションの第2のロックスクリプトが、第2のロック解除スクリプトが第2の秘密を含むことを要求するように構成された知識証明を含む、ステップと、第3の関係者によって、第2の署名を作成するために第2の秘密に基づく第2の値に署名するステップと、第3の関係者から第4の関係者に第2の署名を送信するステップと、第4の関係者によって、第3のトランザクションを取得するステップと、第4の関係者によって、第3のトランザクションのロック解除スクリプトに第2の署名を含め、それから、第3のトランザクションを第2のブロックチェーンに送信するステップと、第3の関係者によって、第2のブロックチェーン上の第3のトランザクションから、第2のメッセージおよび第2の秘密を決定するステップと、第3の関係者によって、第2の秘密に基づいて第2のパズルトランザクションの出力のロックを解除する第4のトランザクションを作成し、第2のトランザクションを第1のブロックチェーンに提出するステップとを含むステートメント1から8のいずれかによる方法。
【0258】
ステートメント10:
第1のパズルトランザクションおよび第2のパズルトランザクションが、独立したパズルトランザクションであるステートメント9またはステートメント9Aによる方法。
【0259】
ステートメント11:
第1のパズルトランザクションが、第2のパズルトランザクションを含むステートメント9またはステートメント9Aによる方法。
【0260】
ステートメント12:
第1のブロックチェーンおよび第2のブロックチェーンが、異なるブロックチェーンであるいずれかの前述のステートメントによる方法。
【0261】
ステートメント13:
第1のブロックチェーンおよび第2のブロックチェーンが、同じブロックチェーンであるいずれかの前述のステートメントによる方法。
【0262】
ステートメント14:
秘密が、メッセージをハッシュすることによって生成されるいずれかの前述のステートメントによる方法。
【0263】
ステートメント15:
秘密が、Rパズルを使用することによって生成されるいずれかの前述のステートメントによる方法。
【0264】
ステートメント16:
第1の関係者によって実行される方法であって、第2の関係者に関連する前のトランザクションからの出力に基づく入力を有する第1のトランザクションのテンプレートを生成するステップ、第1のトランザクションのテンプレートに基づくメッセージを生成するステップ、メッセージに基づく秘密を生成するステップ、秘密に基づく値を生成するステップであって、秘密が、値から導出され得ない、ステップ、第1のパズルトランザクションを生成するステップであって、第1のパズルトランザクションの第1のロックスクリプトが、ロック解除スクリプトが秘密を含むことを要求するように構成された知識証明を含む、ステップ、第1のパズルトランザクションを第1のブロックチェーンに公開するステップ、第2の関係者から署名を受信するステップであって、署名が、秘密に基づく値を使用して第2の関係者によって作成される、ステップ、第1のトランザクションのロック解除スクリプトに署名を含め、それから、第1のトランザクションを第2のブロックチェーンに送信するステップを含む、方法。
【0265】
ステートメント17:
第1のトランザクションの出力が、第1の関係者の公開鍵にロックされるステートメント16による方法。
【0266】
ステートメント18:
第1のパズルトランザクションが、第2の関係者の公開鍵にロックされるステートメント16または17による方法。
【0267】
ステートメント19:
第1のパズルトランザクションからの秘密に基づく値の候補値を第2の関係者に送信するステップを含むステートメント16から18のいずれかによる方法。
【0268】
ステートメント20:
秘密が、第1のトランザクションの入力および対応する出力を含むステートメント16から19のいずれかによる方法。
【0269】
ステートメント21:
秘密が、第1のトランザクションのすべての入力およびすべての出力を含むステートメント16から20のいずれかによる方法。
【0270】
ステートメント22:
秘密が、第1のトランザクションの入力を含み、第1のトランザクションの出力のいずれも含まないステートメント16から21のいずれかによる方法。
【0271】
ステートメント23:
第1のトランザクションの入力が、前のトランザクションの複数署名出力のロックを解除し、複数署名出力が、第1の関係者および/または第2の関係者の1つまたは複数の公開鍵にロックされるステートメント16から22のいずれかによる方法。
【0272】
ステートメント24:
第1のトランザクションが、第3の関係者の公開鍵にロックされた出力を含み、方法が、第1のトランザクションの出力を消費する第3のトランザクションのテンプレートを生成するステップと、第3のトランザクションのテンプレートに基づく第2のメッセージを生成するステップと、第2のメッセージに基づく第2の秘密を生成するステップと、第2の秘密に基づく第2の値を生成するステップであって、第2の秘密が、第2の値から導出され得ない、ステップと、第1の関係者によって、第2のパズルトランザクションを生成するステップであって、第2のパズルトランザクションの第2のロックスクリプトが、第2のロック解除スクリプトが第2の秘密を含むことを要求するように構成された知識証明を含む、ステップとを含むステートメント16から23のいずれかによる方法。
【0273】
ステートメント24A:
第5のトランザクションが、第3の関係者の公開鍵にロックされた出力を含み、方法が、第5のトランザクションの出力を消費する第3のトランザクションのテンプレートを生成するステップと、第3のトランザクションのテンプレートに基づく第2のメッセージを生成するステップと、第2のメッセージに基づく第2の秘密を生成するステップと、第2の秘密に基づく第2の値を生成するステップであって、第2の秘密が、第2の値から導出され得ない、ステップと、第1の関係者によって、第2のパズルトランザクションを生成するステップであって、第2のパズルトランザクションの第2のロックスクリプトが、第2のロック解除スクリプトが第2の秘密を含むことを要求するように構成された知識証明を含む、ステップとを含むステートメント16から23のいずれかによる方法。
【0274】
ステートメント25:
第1のパズルトランザクションおよび第2のパズルトランザクションが、独立したパズルトランザクションであるステートメント24またはステートメント24Aによる方法。
【0275】
ステートメント26:
第1のパズルトランザクションが、第2のパズルトランザクションを含むステートメント24またはステートメント24Aによる方法。
【0276】
ステートメント27:
第1のブロックチェーンおよび第2のブロックチェーンが、異なるブロックチェーンであるステートメント16から26のいずれかによる方法。
【0277】
ステートメント28:
第1のブロックチェーンおよび第2のブロックチェーンが、同じブロックチェーンであるステートメント16から27のいずれかによる方法。
【0278】
ステートメント29:
秘密が、メッセージをハッシュすることによって生成されるステートメント16から28のいずれかによる方法。
【0279】
ステートメント30:
秘密が、Rパズルを使用することによって生成されるステートメント16から29のいずれかによる方法。
【0280】
ステートメント31:
第2の関係者によって実行される方法であって、秘密に基づいて第1の関係者によって生成された値を取得するステップであって、秘密が、値から導出され得ず、秘密が、第1のトランザクションのテンプレートに基づいて第1の関係者によって生成されたメッセージに基づき、第1のトランザクションのテンプレートが、第2の関係者に関連する前のトランザクションからの出力に基づく入力を有する、ステップと、署名を作成するために秘密に基づく値に署名するステップと、第1の関係者に署名を送信するステップであって、第1の関係者が、第1のトランザクションのロック解除スクリプトに署名を含め、それから、第1のトランザクションを第2のブロックチェーンに送信する、ステップと、第2のブロックチェーン上の第1のトランザクションから、メッセージおよび秘密を決定するステップと、第2の関係者によって、秘密に基づいて第1のパズルトランザクションの第1の出力のロックを解除する第2のトランザクションを作成し、第2のトランザクションを第1のブロックチェーンに提出するステップとを含み、パズルトランザクションの第1のロックスクリプトが、ロック解除スクリプトが秘密を含むことを要求するように構成された知識証明を含む、方法。
【0281】
ステートメント32:
第1のトランザクションが、第1の関係者の公開鍵にロックされるステートメント31による方法。
【0282】
ステートメント33:
第1のパズルトランザクションが、第2の関係者の公開鍵にロックされるステートメント31またはステートメント32による方法。
【0283】
ステートメント34:
秘密に基づく値を取得するステップが、第1のパズルトランザクションから秘密に基づく値を取得することを含み、方法が、第1の関係者から、第1のパズルトランザクションからの秘密に基づく値の候補値を受信するステップ、候補値と第1のパズルトランザクションからの秘密に基づく値とが等しいことをチェックするステップを含むステートメント31から33のいずれかによる方法。
【0284】
ステートメント35:
秘密が、第1のトランザクションの入力および対応する出力を含むステートメント31から34のいずれかによる方法。
【0285】
ステートメント36:
秘密が、第1のトランザクションのすべての入力およびすべての出力を含むステートメント31から35のいずれかによる方法。
【0286】
ステートメント37:
秘密が、第1のトランザクションの入力を含み、第1のトランザクションの出力のいずれも含まないステートメント31から34のいずれかによる方法。
【0287】
ステートメント38:
第1のトランザクションの入力が、前のトランザクションの複数署名出力のロックを解除し、複数署名出力が、第1の関係者および/または第2の関係者の1つまたは複数の公開鍵にロックされるステートメント31から37のいずれかによる方法。
【0288】
ステートメント39:
第1のトランザクションが、第3の関係者の公開鍵にロックされた出力を含み、第1の関係者が、第1のトランザクションの出力を消費する第3のトランザクションのテンプレートを生成することと、第3のトランザクションのテンプレートに基づく第2のメッセージを生成することと、第2のメッセージに基づく第2の秘密を生成することと、第2の秘密に基づく第2の値を生成することであって、第2の秘密が、第2の値から導出され得ない、生成することと、第1の関係者によって、第2のパズルトランザクションを生成することであって、第2のパズルトランザクションの第2のロックスクリプトが、第2のロック解除スクリプトが第2の秘密を含むことを要求するように構成された知識証明を含む、生成することとを実行するステートメント31から38のいずれかによる方法。
【0289】
ステートメント39A:
第5のトランザクションが、第3の関係者の公開鍵にロックされた出力を含み、第1の関係者が、第5のトランザクションの出力を消費する第3のトランザクションのテンプレートを生成することと、第3のトランザクションのテンプレートに基づく第2のメッセージを生成することと、第2のメッセージに基づく第2の秘密を生成することと、第2の秘密に基づく第2の値を生成することであって、第2の秘密が、第2の値から導出され得ない、生成することと、第1の関係者によって、第2のパズルトランザクションを生成することであって、第2のパズルトランザクションの第2のロックスクリプトが、第2のロック解除スクリプトが第2の秘密を含むことを要求するように構成された知識証明を含む、生成することとを実行するステートメント31から38のいずれかによる方法。
【0290】
ステートメント40:
第1のパズルトランザクションおよび第2のパズルトランザクションが、独立したパズルトランザクションであるステートメント39またはステートメント39Aによる方法。
【0291】
ステートメント41:
第1のパズルトランザクションが、第2のパズルトランザクションを含むステートメント39またはステートメント39Aによる方法。
【0292】
ステートメント42:
第1のブロックチェーンおよび第2のブロックチェーンが、異なるブロックチェーンであるステートメント31から41のいずれかによる方法。
【0293】
ステートメント43:
第1のブロックチェーンおよび第2のブロックチェーンが、同じブロックチェーンであるステートメント31から42のいずれかによる方法。
【0294】
ステートメント44:
秘密が、メッセージをハッシュすることによって生成されるステートメント31から43のいずれかによる方法。
【0295】
ステートメント45:
秘密が、Rパズルを使用することによって生成されるステートメント31から44のいずれかによる方法。
【0296】
ステートメント46:
1つまたは複数のメモリユニットを含むメモリと、1つまたは複数の処理ユニットを含む処理装置であって、メモリが、処理装置上で実行されるように配置されたコードを記憶し、コードが、処理装置上にあるときに、ステートメント1から45のいずれかの方法を実行するように構成される、処理装置とを含むコンピュータ機器。
【0297】
ステートメント47:
コンピュータ可読ストレージ上に具現化され、1つまたは複数のプロセッサ上で実行されるときに、ステートメント1から45のいずれかの方法を実行するように構成されたコンピュータプログラム。
【0298】
本明細書において開示された別の態様によれば、第1のユーザおよび第2のユーザのアクションを含む方法が提供される可能性がある。
【0299】
本明細書において開示された別の態様によれば、第1のユーザのアクションを含む方法が提供される場合がある。
【0300】
本明細書において開示された別の態様によれば、第2のユーザのアクションを含む方法が提供される場合がある。
【0301】
本明細書において開示された別の態様によれば、第1のユーザおよび第2のユーザのコンピュータ機器を含むシステムが提供される可能性がある。
【0302】
本明細書において開示された別の態様によれば、第1のユーザのコンピュータ機器を含むシステムが提供される可能性がある。
【0303】
本明細書において開示された別の態様によれば、第2のユーザのコンピュータ機器を含むシステムが提供される可能性がある。
【符号の説明】
【0304】
100 システム
101 パケット交換ネットワーク
102 コンピュータ端末、コンピュータ機器
102a コンピュータ機器
102b コンピュータ機器
103 ユーザ、関係者、エージェント
103a ユーザ、元のユーザまたはエンティティ、第1の関係者、Alice
103b 新しいユーザまたはエンティティ、第2の関係者、Bob
103c Charlie
103d Debbie
104 ブロックチェーンノード、ビットコインノード
105 クライアントアプリケーション、ソフトウェア
105a クライアントアプリケーション
106 ピアツーピア(P2P)ネットワーク、ブロックチェーンネットワーク、ビットコインネットワーク
107 サイドチャネル
150 ブロックチェーン、ビットコインブロックチェーン
150a 第1のブロックチェーン
150b 第2のブロックチェーン
151 データのブロック
151n-1 前に作成されたブロック
151n 新しいブロック
152 トランザクション
152i 先行トランザクション
152j 現在のトランザクション、新しいトランザクション、オンワードトランザクション
153 ジェネシスブロック(Gb)
154 順序付けられたセット、順序付けられたプール
155 ブロックポインタ
201 ヘッダ
202 入力
203 出力、UTXO
401 トランザクションエンジン
402 ユーザインターフェース(UI)レイヤ
450 ノードソフトウェア
451 プロトコルエンジン
452 スクリプトエンジン
453 スタック
454 アプリケーションレベル判断エンジン
455 ブロックチェーン関連機能モジュール
455C コンセンサスモジュール
455P 伝播モジュール
455S ストレージモジュール
500 ユーザインターフェース(UI)
501 UI要素、ユーザが選択可能な要素
502 UI要素、データ入力フィールド
502 UI要素、情報要素
図1
図2
図3A
図3B
図4
図5
図6
図7
【国際調査報告】