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

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

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

<>
  • 特表-ロックスクリプトの伝搬 図1
  • 特表-ロックスクリプトの伝搬 図2
  • 特表-ロックスクリプトの伝搬 図3
  • 特表-ロックスクリプトの伝搬 図4
  • 特表-ロックスクリプトの伝搬 図5
  • 特表-ロックスクリプトの伝搬 図6
  • 特表-ロックスクリプトの伝搬 図7
  • 特表-ロックスクリプトの伝搬 図8
  • 特表-ロックスクリプトの伝搬 図9
  • 特表-ロックスクリプトの伝搬 図10
  • 特表-ロックスクリプトの伝搬 図11
  • 特表-ロックスクリプトの伝搬 図12
  • 特表-ロックスクリプトの伝搬 図13
  • 特表-ロックスクリプトの伝搬 図14
  • 特表-ロックスクリプトの伝搬 図15
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-10-04
(54)【発明の名称】ロックスクリプトの伝搬
(51)【国際特許分類】
   H04L 9/32 20060101AFI20240927BHJP
【FI】
H04L9/32 200Z
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2024518593
(86)(22)【出願日】2022-08-30
(85)【翻訳文提出日】2024-03-25
(86)【国際出願番号】 EP2022074013
(87)【国際公開番号】W WO2023052019
(87)【国際公開日】2023-04-06
(31)【優先権主張番号】2113977.9
(32)【優先日】2021-09-30
(33)【優先権主張国・地域又は機関】GB
(81)【指定国・地域】
(71)【出願人】
【識別番号】318001991
【氏名又は名称】エヌチェーン ライセンシング アーゲー
(74)【代理人】
【識別番号】100107766
【弁理士】
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100229448
【弁理士】
【氏名又は名称】中槇 利明
(72)【発明者】
【氏名】ペティット,ミカエラ
(72)【発明者】
【氏名】コグラン,スティーヴン,パトリック
(57)【要約】
ブロックチェーントランザクションのチェーン全体にわたって伝搬されるようにロックスクリプトを強制する方法。この方法は、補助トランザクションのロック解除スクリプトによって実行されると、ロック解除スクリプトが補助トランザクションに基づいて生成されたメッセージを含むことを検証し、メッセージに基づいて、補助トランザクションの出力が補助ロックスクリプトを含むことを検証するように構成された一次ロックスクリプトを含む一次トランザクションを生成するステップを含む。補助ロックスクリプトは、第2の一次トランザクションのロック解除スクリプトが第2の一次トランザクションに基づいて生成されたメッセージを含むことを検証し、第2の一次トランザクションのロック解除スクリプトが一次トランザクションの1つまたは複数のロックスクリプトを含むデータ項目を含むことを検証し、メッセージおよびデータ項目に基づいて、第2の一次トランザクションの出力が一次ロックスクリプトを含むことを検証するように構成される。
【特許請求の範囲】
【請求項1】
ブロックチェーントランザクションのチェーン全体にわたって伝搬されるようにロックスクリプトを強制するコンピュータ実装方法であって、前記方法は、第1の当事者によって実行され、
第1の出力を含む第1の一次トランザクションを生成するステップであって、前記第1の出力は、一次ロックスクリプトを含み、前記一次ロックスクリプトは、第1の補助トランザクションの第1のロック解除スクリプトによって実行されると、i)前記第1のロック解除スクリプトが、前記第1の補助トランザクションに基づいて生成された第1のメッセージを含むことを検証し、ii)前記第1のメッセージに基づいて、前記第1の補助トランザクションの第1の出力が補助ロックスクリプトを含むことを検証するように構成され、前記補助ロックスクリプトは、第2の一次トランザクションの第1のロック解除スクリプトによって実行されると、i)前記第2の一次トランザクションの前記第1のロック解除スクリプトが、前記第2の一次トランザクションに基づいて生成された第2のメッセージを含むことを検証し、ii)前記第2の一次トランザクションの前記第1のロック解除スクリプトが、前記第1の一次トランザクションの1つまたは複数のロックスクリプトを含む第1のデータ項目を含むことを検証し、iii)前記第2のメッセージおよび前記第1のデータ項目に基づいて、前記第2の一次トランザクションの第1の出力が前記一次ロックスクリプトを含むことを検証するように構成される、ステップを含む方法。
【請求項2】
前記第1の補助トランザクションを生成するステップであって、前記第1の補助トランザクションは、前記第1の一次トランザクションの前記第1の出力を参照し、前記第1のメッセージを含む第1の入力と、前記補助ロックスクリプトを含む第1の出力とを含む、ステップ
を含む、請求項1に記載の方法。
【請求項3】
前記一次ロックスクリプトは、前記補助ロックスクリプトのハッシュを含み、前記第1のメッセージは、候補補助ロックスクリプトを含み、前記第1の補助トランザクションの前記第1の出力が前記補助ロックスクリプトを含むことを前記検証することは、前記一次ロックスクリプトが前記候補補助ロックスクリプトをハッシュし、前記候補補助ロックスクリプトのハッシュが前記補助ロックスクリプトの前記ハッシュと一致することを検証することを含む、請求項1に記載の方法。
【請求項4】
前記第1の一次トランザクションは第2の出力を含み、前記補助ロックスクリプトは、前記第2の一次トランザクションの前記第1のロック解除スクリプトによって実行されると、iii)前記第1の一次トランザクションの前記第2の出力が前記第2の一次トランザクションの第2の入力によってロック解除されることを検証するように構成される、請求項1に記載の方法。
【請求項5】
前記補助ロックスクリプトは、前記第2の一次トランザクションの前記第1のロック解除スクリプトによって実行されると、iv)前記第2の一次トランザクションの前記第1のロック解除スクリプトが、前記第1の補助トランザクションを含む第2のデータ項目を含むことを検証するように構成され、前記第2の出力が前記第2の一次トランザクションの前記第2の入力によってロック解除されることを前記検証することは、a)前記第2のメッセージから、前記第2の一次トランザクションの前記第2の入力によってロック解除された前記第2の出力のそれぞれのトランザクション識別子を抽出することと、b)前記第2のデータ項目から、前記第1の補助トランザクションの第1の入力によってロック解除された前記第1の出力のそれぞれのトランザクション識別子を抽出することと、c)ステップa)の間に抽出された前記それぞれのトランザクション識別子が、ステップb)の間に抽出された前記それぞれのトランザクション識別子と一致することを検証することとを含む、請求項4に記載の方法。
【請求項6】
前記第1の一次トランザクションは、ハッシュ関数を前記第1の一次トランザクションに適用することによって生成するそれぞれのトランザクション識別子を有し、前記第2の一次トランザクションの前記第1のロック解除スクリプトは、第3のデータ項目を含み、前記第3のデータ項目は、前記第1の一次トランザクションに適用された前記ハッシュ関数のミッドステートを含み、前記補助ロックスクリプトは、前記第2の一次トランザクションの前記第1のロック解除スクリプトによって実行されると、iv)前記第1のデータ項目および前記第3のデータ項目に基づいて候補トランザクション識別子を生成し、前記候補トランザクション識別子が前記第1の一次トランザクションの前記それぞれのトランザクション識別子と一致することを検証するように構成される、請求項1に記載の方法。
【請求項7】
前記補助ロックスクリプトは、前記第2の一次トランザクションの前記第1のロック解除スクリプトによって実行されると、v)前記第2の一次トランザクションが特定のトランザクション識別子を含むことを検証するように構成される、請求項1に記載の方法。
【請求項8】
前記第2の一次トランザクションを生成するステップであって、前記第2の一次トランザクションは、前記第1の補助トランザクションの前記第1の出力を参照し、前記第2のメッセージおよび前記第1のデータ項目を含む第1の入力を含み、前記第2の一次トランザクションは、前記一次ロックスクリプトを含む第1の出力を含む、ステップ
を含む、請求項1に記載の方法。
【請求項9】
前記第1の補助トランザクションおよび前記第2の一次トランザクションを第2の当事者に送信するステップを含む、請求項1に記載の方法。
【請求項10】
前記一次ロックスクリプトおよび/または前記補助ロックスクリプトは、トークンの所有権に関するデータを含む、請求項1に記載の方法。
【請求項11】
前記第1の一次トランザクションは、前記ブロックチェーントランザクションのチェーンにおける最初の一次トランザクションである、請求項1に記載の方法。
【請求項12】
前記特定のトランザクション識別子は、前記第1の一次トランザクションのそれぞれのトランザクション識別子である、請求項7に記載の方法。
【請求項13】
前記第1の一次トランザクションは第1のカウンタ値を含み、前記補助ロックスクリプトは、前記第2の一次トランザクションの前記第1のロック解除スクリプトによって実行されると、前記第2の一次トランザクションが第2のカウンタ値を含むことを検証するように構成され、前記第2のカウンタ値は前記カウンタ値の反復である、請求項1に記載の方法。
【請求項14】
前記第1の一次トランザクションは、前記ブロックチェーントランザクションのチェーンにおける初期トランザクションではなく、前記第1の一次トランザクションは、前記補助ロックスクリプトを含む前の補助トランザクションの第1の出力を参照する第1の入力を含み、前記前の補助トランザクションは、前記一次ロックスクリプトを含む前の一次トランザクションの第1の出力を参照する第1の入力を含み、前記補助ロックスクリプトは、前記第2の一次トランザクションの前記第1のロック解除スクリプトによって実行されると、vi)前記第2の一次トランザクションの前記第1のロック解除スクリプトが、前記前の一次トランザクションの1つまたは複数のロックスクリプトを含む第4のデータ項目を含むことを検証し、vii)前記第2のメッセージおよび前記第4のデータ項目に基づいて、前記第2の一次トランザクションの前記第1の出力が前記一次ロックスクリプトを含むことを検証するように構成される、請求項1に記載の方法。
【請求項15】
前記前の一次トランザクションは、前記前の一次トランザクションにハッシュ関数を適用することによって生成するそれぞれのトランザクション識別子を有し、前記第2の一次トランザクションの前記第1のロック解除スクリプトは、第5のデータ項目を含み、前記第5のデータ項目は、前記前の一次トランザクションに適用された前記ハッシュ関数のミッドステートを含み、前記補助ロックスクリプトは、前記第2の一次トランザクションの前記第1のロック解除スクリプトによって実行されると、viii)前記第4のデータ項目および前記第5のデータ項目に基づいて候補トランザクション識別子を生成し、前記候補トランザクション識別子が前記前の一次トランザクションの前記それぞれのトランザクション識別子と一致することを検証するように構成される、請求項14に記載の方法。
【請求項16】
前記前の一次トランザクションは、前記ブロックチェーントランザクションのチェーンにおける最初の一次トランザクションであり、前記方法は、前記最初の一次トランザクションが所定の公開鍵に対応する署名で署名されたことを検証するステップを含む、請求項14に記載の方法。
【請求項17】
ロックスクリプトがブロックチェーントランザクションのチェーン全体にわたって強制されたことを検証するコンピュータ実装方法であって、前記方法は、第2の当事者によって実行され、
第2の一次トランザクションを取得するステップであって、前記第2の一次トランザクションは、第1の入力および第1の出力を含み、前記第1の入力は、前記第2の一次トランザクションに基づいて生成された第2のメッセージを含み、第1の補助トランザクションは、第1の一次トランザクションの第1の出力をロック解除する第1の入力を含み、第1のデータ項目は、前記第1の一次トランザクションの1つまたは複数のロックスクリプトを含み、前記第1の一次トランザクションの前記第1の出力は、一次ロックスクリプトを含み、前記第1の補助トランザクションの第1の出力は、補助ロックスクリプトを含み、前記第2の一次トランザクションの前記第1の出力は、前記一次ロックスクリプトを含む、ステップと、
第1の一次トランザクションがブロックチェーンに記録されたことを検証するステップと、
前記第1の一次トランザクションの前記一次ロックスクリプトが、前記第1の補助トランザクションの第1のロック解除スクリプトによって実行されると、i)前記第1のロック解除スクリプトが、前記第1の補助トランザクションに基づいて生成された第1のメッセージを含むことを検証し、ii)前記第1のメッセージに基づいて、前記第1の補助トランザクションの第1の出力が補助ロックスクリプトを含むことを検証するように構成されることを検証するステップであって、前記補助ロックスクリプトは、前記第2の一次トランザクションの第1のロック解除スクリプトによって実行されると、i)前記第1のロック解除スクリプトが前記第2のメッセージを含むことを検証し、ii)前記第1のロック解除スクリプトが前記第1のデータ項目を含むことを検証し、iii)前記第2のメッセージおよび前記第1のデータ項目に基づいて、前記第2の一次トランザクションの前記第1の出力が前記一次ロックスクリプトを含むことを検証するように構成され、それによって、前記一次ロックスクリプトが前記第1の一次トランザクションおよび前記第2の一次トランザクション全体にわたって強制されたことを検証する、ステップと
を含む方法。
【請求項18】
前記一次ロックスクリプトは、前記補助ロックスクリプトのハッシュを含み、前記第1のメッセージは、候補補助ロックスクリプトを含み、前記一次ロックスクリプトは、前記第1の補助トランザクションの前記第1のロック解除スクリプトによって実行されると、前記候補補助ロックスクリプトをハッシュし、前記候補補助ロックスクリプトのハッシュが前記補助ロックスクリプトのハッシュと一致することを検証することによって、前記第1の補助トランザクションの前記第1の出力が前記補助ロックスクリプトを含むことを検証するように構成され、前記一次ロックスクリプトがステップi)およびii)を実行するように構成されることを検証する前記ステップは、ハッシュパズルの一部として前記一次ロックスクリプトが前記補助ロックスクリプトの前記ハッシュを含むことを検証するステップを含む、請求項17に記載の方法。
【請求項19】
コンピュータ機器であって、
1つまたは複数のメモリユニットを備えるメモリと、
1つまたは複数の処理ユニットを備える処理装置であって、前記メモリは、前記処理装置上で実行されるように構成されたコードを記憶し、前記コードは、前記処理装置上にあるときに、請求項1から10のいずれか一項に記載の方法を実行するように構成される、処理装置と
を備えるコンピュータ機器。
【請求項20】
コンピュータ可読ストレージ上に具現化され、1つまたは複数のプロセッサ上で実行されると、請求項1から18のいずれか一項に記載の方法を実行するように構成されたコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、ブロックチェーントランザクションのチェーン全体に伝搬されるようにロックスクリプトを強制(enforce)する方法、およびブロックチェーントランザクションのチェーン全体にロックスクリプトが強制されたことを検証する方法に関する。
【背景技術】
【0002】
ブロックチェーンは、分散型データ構造の形態を指し、ブロックチェーンの複製コピーが、分散型ピアツーピア(P2P)ネットワーク(以下、「ブロックチェーンネットワーク」と呼ぶ)内の複数のノードの各々において維持され、広く公開されている。ブロックチェーンはデータブロックのチェーンを含み、各ブロックは1つまたは複数のトランザクションを含む。いわゆる「コインベーストランザクション」以外の各トランザクションは、1つまたは複数のコインベーストランザクションまで遡る1つまたは複数のブロックにまたがり得るシーケンス内の先行するトランザクションを指し示す。コインベーストランザクションについては以下でさらに説明する。ブロックチェーンネットワークにサブミットされたトランザクションは、新しいブロックに含まれる。新しいブロックは、「マイニング(mining)」と呼ばれることが多いプロセスによって作成され、このプロセスは、複数のノードの各々が「プルーフオブワーク(proof-of-work)」を実行しようと競うこと、すなわち、ブロックチェーンの新しいブロックに含まれるのを待っている、順序付けられ妥当性確認(validate)された保留中のトランザクションのプールに基づいて暗号パズルを解くことを伴う。ブロックチェーンはいくつかのノードでプルーニング(prune)され得、ブロックの公開は、単なるブロックヘッダの公開を通して達成され得ることに留意されたい。
【0003】
ブロックチェーン内のトランザクションは、デジタル資産(すなわち、いくつかのデジタルトークン)を伝達すること、仮想台帳またはレジストリにおけるエントリのセットを順序付けること、タイムスタンプエントリを受信および処理すること、および/またはインデックスポインタを時間順にすることという目的のうちの1つまたは複数のために使用され得る。ブロックチェーンは、ブロックチェーンの上に追加の機能を重ねるために活用することもできる。例えば、ブロックチェーンプロトコルは、トランザクションにおける追加のユーザデータまたはデータへのインデックスの記憶を可能にし得る。単一のトランザクション内に記憶することができる最大データ容量に対してあらかじめ指定された制限はなく、したがって、より複雑なデータを組み込むことができる。例えば、これを使用して、ブロックチェーンに電子文書を記憶したり、オーディオまたはビデオデータを記憶したりすることができる。
【0004】
ブロックチェーンネットワークのノード(「マイナー(miner)」と呼ばれることが多い)は、以下でより詳細に説明する分散型のトランザクション登録および検証プロセスを実行する。要するに、このプロセスの間に、ノードは、トランザクションを妥当性確認し、有効なプルーフオブワークの解の識別を試みるブロックテンプレートにそれらを挿入する。有効な解が見つかると、ネットワークの他のノードに新しいブロックが伝搬され、これにより、各ノードが、新しいブロックをブロックチェーンに記録することができる。トランザクションをブロックチェーンに記録させるために、ユーザ(例えば、ブロックチェーンクライアントアプリケーション)は、ネットワークのノードのうちの1つにトランザクションを送信して、伝搬させる。トランザクションを受信したノードは、妥当性確認済みトランザクションを新しいブロックに組み込むプルーフオブワークの解を見つけようと競い合い得る。各ノードは、同じノードプロトコルを強制するように構成され、そのノードプロトコルには、トランザクションが有効であるための1つまたは複数の条件が含まれる。無効なトランザクションは、伝搬もブロックへの組込みもされない。トランザクションが妥当性確認され、それによってブロックチェーン上に受け入れられたと仮定すると、トランザクション(任意のユーザデータを含む)は、不変の公開記録としてブロックチェーンネットワーク内のノードの各々において登録およびインデックス付けされたままになる。
【0005】
プルーフオブワークパズルを解くのに成功して最新のブロックを作成したノードは、典型的には、ある額のデジタル資産、すなわちいくつかのトークンを配布する「コインベーストランザクション」と呼ばれる新しいトランザクションで報酬が与えられる。無効なトランザクションの検出および拒否は、ネットワークのエージェントとして働き、不正を報告および阻止するようにインセンティブが与えられる競合ノードのアクションによって強制される。情報の広範な公開により、ユーザは、ノードの性能を連続的に監査することができる。単なるブロックヘッダの公開により、参加者は、ブロックチェーンの継続的な完全性を確実にすることができる。
【0006】
「出力ベースの」モデル(UTXOベースモデルと呼ばれることもある)では、所与のトランザクションのデータ構造は、1つまたは複数の入力と1つまたは複数の出力とを含む。任意の使用可能な出力は、トランザクションの先行するシーケンスから導出可能なデジタル資産の額を指定する要素を含む。使用可能な出力は、UTXO(「未使用トランザクション出力」)と呼ばれることがある。出力は、出力を将来償還するための条件を指定するロックスクリプトをさらに含み得る。ロックスクリプトは、デジタルトークンまたは資産を妥当性確認および転送するために必要な条件を定義する述語(predicate)である。トランザクション(コインベーストランザクション以外)の各入力は、先行するトランザクションにおけるそのような出力へのポインタ(すなわち、参照)を含み、指し示された出力のロックスクリプトをロック解除するためのロック解除スクリプトをさらに含み得る。そのため、トランザクションのペアを考慮して、それらを第1のトランザクションおよび第2のトランザクション(または「ターゲット」トランザクション)と呼ぶ。第1のトランザクションは、デジタル資産の額を指定する少なくとも1つの出力を含み、出力をロック解除する1つまたは複数の条件を定義するロックスクリプトを含む。第2のターゲットトランザクションは、第1のトランザクションの出力へのポインタを含む少なくとも1つの入力と、第1のトランザクションの出力をロック解除するためのロック解除スクリプトとを含む。
【0007】
そのようなモデルでは、第2のターゲットトランザクションがブロックチェーンネットワークに送信されて伝搬されブロックチェーンに記録されるとき、各ノードで適用される有効性の基準のうちの1つは、ロック解除スクリプトが第1のトランザクションのロックスクリプトで定義された1つまたは複数の条件のすべてを満たすことである。もう1つは、第1のトランザクションの出力が別の先の有効なトランザクションによってまだ償還されていないということである。これらの条件のいずれかにしたがってターゲットトランザクションが無効であることを発見したノードは、(無効なトランザクションを登録するために伝搬する可能性はあるが、有効なトランザクションとしては)それを伝搬することも、ブロックチェーンに記録されるように新しいブロックにそれを含めることもしない。
【0008】
トランザクションモデルの別のタイプは、アカウントベースのモデルである。このケースでは、各トランザクションは、過去のトランザクションのシーケンスにおける先行するトランザクションのUTXOを参照することによってではなく、絶対アカウント残高を参照することによって転送されるべき額を定義する。すべてのアカウントの現在の状態は、ブロックチェーンとは別個にノードによって記憶され、絶えず更新される。
【発明の概要】
【0009】
支出トランザクション、すなわち、前のトランザクションの出力の使用(ロック解除、割り当て、転送など)を行うトランザクションのフィールドに対して条件を適用(enforce)できることが一般に知られている。例えば、前のトランザクションは、支出トランザクションの1つまたは複数の出力に条件を課すロックスクリプトを含み得る。「支出トランザクション」という用語は、少なくとも1つの前のトランザクションの少なくとも1つの出力をロック解除する現在のトランザクションを意味するために当技術分野で使用され、現在のトランザクションが金融トランザクションに関連することを必ずしも意味しないことに留意されたい。
【0010】
支出トランザクションの分野に条件を適用することを望む理由の1つは、支出トランザクションが前のトランザクションと同じロックスクリプトを含む出力を有することを確実にすることである。こうすることで、支出トランザクションが次の支出トランザクションに対して同じ条件を適用することを確実にすることができる。すなわち、n-1番目のトランザクションは、n番目のトランザクションに強制的に同じロックスクリプトを含ませるロックスクリプトを含み、したがって、n+1番目のトランザクションに強制的に同じロックスクリプトを含ませる。このようにして、トランザクションのチェーンが作成され、それによって、各トランザクションに同じロックスクリプトが含まれる。これは、例えば、現実世界オブジェクト、または仮想世界内のオブジェクトの所有権を表すデジタルトークンの文脈で使用され得る。これは、トークンの各転送が同じ規則に従うことを意味するので、有利である。
【0011】
トランザクションのチェーンに強制的に同じロックスクリプトを含ませる以前の試みは、以下の問題のうちの少なくとも1つに悩まされる。第1に、試みの中には、第1のトランザクションが(例えば、トークン発行者などの特定の権限者によって)正しく作成されたこと、または直近のトランザクションに含まれるロックスクリプトが、チェーン内の第1のトランザクションおよび他のすべてのトランザクションに含まれていたロックスクリプトと同じであることを確実にするために、検証者がチェーン内の第1のトランザクション(例えば、「発行トランザクション」)まで遡ることを必要とするものがある。これは、チェーン内の最新のトランザクションを妥当性確認する際に検証者のリソース(計算リソース、時間、および労力の両方に関して)を消費する。第2に、試みの中には、次のトランザクションが正しく作成されることを確実にするために、第三者がチェーン内の次のトランザクション(例えば、トークンの転送)の作成および/または妥当性確認に関与することを必要とするものがある。これは、第三者に依存することによってセキュリティ上の脆弱性をもたらし、互いに対話しなければならない当事者の数を増加させ、効率性を低下させる。第三に、トランザクションのチェーンに強制的に同じロックスクリプトを含ませる試みの中には、チェーン内の最新のトランザクションがチェーン内の前の各トランザクションを含むことを必要とするものがあり、これは、トランザクション肥大化問題を発生させる。これは、トランザクションの送信および記憶の両方にとって問題である。第四に、試みの中には、以下に説明されるリプレイ攻撃の影響を受けやすいものもある。
【0012】
したがって、識別された問題のうちの1つ、いくつか、またはすべてを解決する同じロックスクリプトを含むようにトランザクションのチェーンを強制する機構を実装することが望ましい。
【0013】
本明細書に開示される一態様によれば、ブロックチェーントランザクションのチェーン全体にわたって伝搬されるようにロックスクリプトを強制するコンピュータ実装方法が提供される。この方法は、第1の当事者によって実行され、第1の出力を含む第1の一次トランザクションを生成するステップであって、第1の出力は、一次ロックスクリプトを含み、一次ロックスクリプトは、第1の補助トランザクションの第1のロック解除スクリプトによって実行されると、i)第1のロック解除スクリプトが、第1の補助トランザクションに基づいて生成された第1のメッセージを含むことを検証し、ii)第1のメッセージに基づいて、第1の補助トランザクションの第1の出力が補助ロックスクリプトを含むことを検証するように構成され、補助ロックスクリプトは、第2の一次トランザクションの第1のロック解除スクリプトによって実行されると、i)第2の一次トランザクションの第1のロック解除スクリプトが、第2の一次トランザクションに基づいて生成された第2のメッセージを含むことを検証し、ii)第2の一次トランザクションの第1のロック解除スクリプトが、第1の一次トランザクションの1つまたは複数のロックスクリプトを含む第1のデータ項目を含むことを検証し、iii)第2のメッセージおよび第1のデータ項目に基づいて、第2の一次トランザクションの第1の出力が一次ロックスクリプトを含むことを検証するように構成される、ステップを含む。
【0014】
「一次トランザクション」という用語は、本明細書では、「一次ロックスクリプト」と呼ばれる同じロックスクリプトを含むように強制されたトランザクションのチェーン内のトランザクションを指すために使用される。例えば、一次ロックスクリプトは、所有物の権利書など、トークンに関連するデータを含み得る。「補助トランザクション」という用語は、一次トランザクションに対する条件、すなわち一次トランザクションが一次ロックスクリプトを含まなければならないという条件を適用するために使用されるトランザクションを指すために使用される。これらの条件は、少なくとも部分的に、各補助トランザクションに含まれる「補助ロックスクリプト」によって適用される。
【0015】
補助トランザクションは、連続する一次トランザクション間のブリッジとして働く。すなわち、第1の補助トランザクションは、第1の一次トランザクションの出力を使用(すなわち、ロック解除)し、第2の一次トランザクションは、第1の補助トランザクションの出力を使用(すなわち、ロック解除)する。一次ロックスクリプトは、次の補助トランザクションに条件を課す。例えば、一次ロックスクリプトは、次の補助トランザクションに強制的に補助ロックスクリプトを含ませる。補助ロックスクリプトは、次の一次トランザクションに条件を課す。例えば、補助ロックスクリプトは、次の一次トランザクションに強制的に一次ロックスクリプトを含ませる。
【0016】
いくつかの例では、第1の一次トランザクションは、チェーン内の最初の一次トランザクション、すなわち、一次ロックスクリプトを含む最初のトランザクションである。これは、例えば、トークンを発行するトークン発行者によって作成されてもよい。他の例では、第1の一次トランザクションは、最初の一次トランザクションではなく、すなわち、一次ロックスクリプトを含むトランザクションのチェーン内に少なくとも1つの他の前の一次トランザクションが存在する。例えば、この例では、第1の一次トランザクションは、トークンの転送者によって作成されてもよい。
【0017】
本明細書に開示される別の態様によれば、ロックスクリプトがブロックチェーントランザクションのチェーン全体にわたって強制されたことを検証するコンピュータ実装方法が提供される。この方法は、第2の当事者によって実行され、第2の一次トランザクションを取得するステップであって、第2の一次トランザクションは、第1の入力および第1の出力を含み、第1の入力は、第2の一次トランザクションに基づいて生成された第2のメッセージを含み、第1の補助トランザクションは、第1の一次トランザクションの第1の出力をロック解除する第1の入力を含み、第1のデータ項目は、第1の一次トランザクションの1つまたは複数のロックスクリプトを含み、第1の一次トランザクションの第1の出力は、一次ロックスクリプトを含み、第1の補助トランザクションの第1の出力は、補助ロックスクリプトを含み、第2の一次トランザクションの第1の出力は、一次ロックスクリプトを含む、ステップを含む。この方法は、第1の一次トランザクションがブロックチェーンに記録されたことを検証するステップと、第1の一次トランザクションの一次ロックスクリプトが、第1の補助トランザクションの第1のロック解除スクリプトによって実行されると、i)第1のロック解除スクリプトが、第1の補助トランザクションに基づいて生成された第1のメッセージを含むことを検証し、ii)第1のメッセージに基づいて、第1の補助トランザクションの第1の出力が補助ロックスクリプトを含むことを検証するように構成されることを検証するステップであって、補助ロックスクリプトは、第2の一次トランザクションの第1のロック解除スクリプトによって実行されると、i)第1のロック解除スクリプトが第2のメッセージを含むことを検証し、ii)第1のロック解除スクリプトが第1のデータ項目を含むことを検証し、iii)第2のメッセージおよび第1のデータ項目に基づいて、第2の一次トランザクションの第1の出力が一次ロックスクリプトを含むことを検証するように構成され、それによって、一次ロックスクリプトが第1の一次トランザクションおよび第2の一次トランザクション全体にわたって強制されたことを検証する、ステップをさらに含む。
【0018】
第2の当事者は、第2の一次トランザクションを取得する(例えば、第1の当事者から受信する)。第2の一次トランザクションは、トランザクションのチェーンにおいて2番目に現れる一次トランザクションであってもよいし、後のトランザクションであってもよい。すなわち、第2のトランザクションは、一般に、トランザクションのチェーンにおけるn番目のトランザクションであり得る。第2の一次トランザクションは、一次ロックスクリプトを出力に含む。第2の一次トランザクションは、第1の補助トランザクションの出力を使用する入力を有し、したがって、補助ロックスクリプトの要件を満たす。第1の補助トランザクションは、第1の一次トランザクションの出力を使用し、したがって、一次ロックスクリプトの要件を満たす。したがって、第1の補助トランザクションが第1の一次トランザクションの一次ロックスクリプトのロック解除に成功し、第2の一次トランザクションが第1の補助トランザクションの補助ロックスクリプトのロック解除に成功した場合、第2の一次トランザクションは一次ロックスクリプトを必ず含む。これは、正しい一次ロックスクリプトがトランザクションのチェーンに含まれていることに依存する。
【0019】
第2の当事者は、第1の一次トランザクションがブロックチェーンに記録されており、したがって、有効なトランザクションであることを検証する。第2の当事者はまた、一次ロックスクリプトが正しいこと、例えば、それが補助トランザクションに補助ロックスクリプトを強制的に含ませることを検証し、次いで、次の一次トランザクションに同じ一次ロックスクリプトを強制的に含ませる。例えば、これは、一次ロックスクリプトが補助ロックスクリプトのハッシュに基づくハッシュパズルを含むことを確実にすることによって達成され得る。このケースでは、ハッシュパズルは、補助トランザクションが補助ロックスクリプトを含む場合にのみ解くことができる(したがって、一次ロックスクリプトはロック解除される)。
【0020】
次いで、第2の当事者は、第2の補助トランザクションおよび第3の一次トランザクションを生成し得る。第2の補助トランザクションは、第2の一次トランザクションの一次ロックスクリプトをロック解除するために必要である。第2の補助トランザクションはまた、第3の一次トランザクションに一次ロックスクリプトを強制的に含ませる。チェーン内の次の各トランザクションは、同じ方法で一次ロックスクリプトを含むように強制される。
【0021】
実際には、2つのロックスクリプトが伝搬されるように強制されることに留意されたい。一次ロックスクリプトは、各一次トランザクションの出力に含まれるように強制され、補助ロックスクリプトは、各補助トランザクションの出力に含まれように強制される。
【図面の簡単な説明】
【0022】
本開示の実施形態の理解を助け、そのような実施形態がどのように実施され得るかを示すために、単なる例として添付の図面を参照する。
図1】ブロックチェーンを実装するためのシステムの概略ブロック図である。
図2】ブロックチェーンに記録され得るトランザクションのいくつかの例を概略的に示す。
図3】ロックスクリプトを伝搬するための例示的なシステムを概略的に示す。
図4】例示的なトークンプロトコルのトランザクション構造の概略図である。
図5】1つの入力および1つの出力を有するトランザクションのチェーンの概略図である。
図6】トランザクション肥大化問題を概略的に示す。
図7】2つの入力および2つの出力を有するトランザクションのチェーンの概略図である。
図8】例示的なトークンプロトコルによってトランザクションの肥大化がどのように防止されるかを示す概略図である。
図9】例示的な発行トランザクションを概略的に示す。
図10】例示的な補助トランザクションを概略的に示す。
図11】アリスからボブにトークンを転送する例示的な一次トランザクションを概略的に示す。
図12】別の補助トランザクションの例を概略的に示す。
図13】ボブからチャーリーにトークンを転送する一次トランザクションの例を概略的に示す。
図14】n番目の一次トランザクションの例示的なフォーマットを概略的に示す。
図15】n番目の補助トランザクションの例示的なフォーマットを概略的に示す。
【発明を実施するための形態】
【0023】
1.例示的なシステムの概要
図1は、ブロックチェーン150を実装するための例示的なシステム100を示す。システム100は、典型的にはインターネットなどの広域インターネットワークであるパケット交換ネットワーク101で構成され得る。パケット交換ネットワーク101は、パケット交換ネットワーク101内にピアツーピア(P2P)ネットワーク106を形成するように構成され得る複数のブロックチェーンノード104を含む。図示されていないが、ブロックチェーンノード104は、ほぼ完全なグラフとして構成され得る。したがって、各ブロックチェーンノード104は、他のブロックチェーンノード104に高度に接続される。
【0024】
各ブロックチェーンノード104は、ピアのコンピュータ機器を含み、ノード104の異なるものは、異なるピアに属する。各ブロックチェーンノード104は、1つまたは複数のプロセッサ、例えば、1つまたは複数の中央処理装置(CPU)、アクセラレータプロセッサ、特定用途向けプロセッサおよび/またはフィールドプログラマブルゲートアレイ(FPGA)、ならびに特定用途向け集積回路(ASIC)などの他の機器を含む処理装置を備える。各ノードはまた、メモリ、すなわち、1つまたは複数の非一時的コンピュータ可読媒体の形態のコンピュータ可読ストレージを備える。メモリは、1つまたは複数のメモリ媒体、例えば、ハードディスクなどの磁気媒体、ソリッドステートドライブ(SSD)、フラッシュメモリもしくはEEPROMなどの電子媒体、および/または光ディスクドライブなどの光学媒体を採用する1つまたは複数のメモリユニットを備え得る。
【0025】
ブロックチェーン150は、データブロック151のチェーンを含み、ブロックチェーン150のそれぞれのコピーは、分散型またはブロックチェーンネットワーク106内の複数のブロックチェーンノード104の各々で維持される。上述したように、ブロックチェーン150のコピーを維持することは、ブロックチェーン150を完全に記憶することを必ずしも意味しない。代わりに、ブロックチェーン150は、各ブロックチェーンノード150が各ブロック151のブロックヘッダ(後述する)を記憶している限り、データがプルーニングされ得る。チェーン内の各ブロック151は、1つまたは複数のトランザクション152を含み、この文脈におけるトランザクションは、データ構造の一種を指す。データ構造の性質は、トランザクションモデルまたは方式の一部として使用されるトランザクションプロトコルのタイプに依存する。所与のブロックチェーンは、全体を通して1つの特定のトランザクションプロトコルを使用する。1つの一般的なタイプのトランザクションプロトコルでは、各トランザクション152のデータ構造は、少なくとも1つの入力および少なくとも1つの出力を含む。各出力は、プロパティとしてデジタル資産の量を表す額を指定し、その例は、出力が暗号的にロックされている(ロック解除され、それによって償還または使用されるためにはそのユーザの署名または他の解決策を必要とする)ユーザ103である。各入力は、先行するトランザクション152の出力を指し示し、それによってトランザクションをリンクする。
【0026】
各ブロック151はまた、ブロック151への順番を定義するために、チェーン内の前に作成されたブロック151を指し示すブロックポインタ155を含む。各トランザクション152(コインベーストランザクション以外)は、トランザクションのシーケンスへの順序を定義するために、前のトランザクションへ戻るポインタを含む(注意:トランザクション152のシーケンスは分岐することが可能である)。ブロック151のチェーンは、チェーン内の最初のブロックであったジェネシスブロック(Gb:genesis block)153まで戻る。チェーン150内の早期にある1つまたは複数の元のトランザクション152は、先行するトランザクションではなくジェネシスブロック153を指し示していた。
【0027】
ブロックチェーンノード104の各々は、トランザクション152を他のブロックチェーンノード104にフォワードし、それによってトランザクション152をネットワーク106全体に伝搬させるように構成される。各ブロックチェーンノード104は、ブロック151を作成し、同じブロックチェーン150のそれぞれのコピーをそれらのそれぞれのメモリに記憶するように構成される。各ブロックチェーンノード104はまた、ブロック151に組み込まれるのを待っているトランザクション152の順序付きセット(またはプール)154を維持する。順序付きプール154は、「メムプール(mempool)」と呼ばれることが多い。本明細書におけるこの用語は、任意の特定のブロックチェーン、プロトコル、またはモデルに限定することを意図するものではない。これは、ノード104が有効であるとして受け入れたトランザクションの順序付きセットを指し、それに対して、ノード104は、同じ出力を使用しようとする他のトランザクションを受け入れないように義務付けられている。
【0028】
所与の現在のトランザクション152jにおいて、その入力(または各入力)は、トランザクションのシーケンスにおける先行するトランザクション152iの出力を参照するポインタを含み、この出力が現在のトランザクション152jにおいて償還または「使用」されるべきであることを指定する。使用することまたは償還することは、必ずしも金融資産の移転を意味するものではないが、それは確かに1つの一般的な用途である。より一般的には、使用することは、出力を消費すること、または別の前方のトランザクションにおける1つまたは複数の出力にそれを割り当てることとして説明され得る。一般に、先行するトランザクションは、順序付きセット154または任意のブロック151内の任意のトランザクションであり得る。先行するトランザクション152iは、現在のトランザクションが有効となるためには存在および妥当性確認される必要があるが、先行するトランザクション152iは、現在のトランザクション152jが作成されるときまたはネットワーク106に送信されるときに必ずしも存在する必要はない。したがって、本明細書における「先行する(preceding)」は、ポインタによってリンクされた論理シーケンスにおける先行するものを指し、必ずしも時間シーケンスにおける作成または送信の時間を指すものではなく、したがって、トランザクション152i、152jが順不同に作成または送信されることを必ずしも除外するものではない(オーファントランザクションに関する以下の説明を参照)。先行するトランザクション152iは、同様に、先のトランザクション(antecedent transaction)または先行したトランザクション(predecessor transaction)とも呼ばれる。
【0029】
現在のトランザクション152jの入力はまた、入力認可、例えば、先行するトランザクション152iの出力がロックされている対象のユーザ103aの署名を含む。次に、現在のトランザクション152jの出力は、新しいユーザまたはエンティティ103bに暗号的にロックされ得る。したがって、現在のトランザクション152jは、先行するトランザクション152iの入力において定義された額を、現在のトランザクション152jの出力において定義されたように、新しいユーザまたはエンティティ103bに転送することができる。いくつかのケースでは、トランザクション152は、複数のユーザまたはエンティティ(そのうちの1つは残り(change)を与えるために元のユーザまたはエンティティ103aであり得る)間で入力額を分割するために複数の出力を有し得る。いくつかのケースでは、トランザクションはまた、1つまたは複数の先行するトランザクションの複数の出力からの額をまとめ、現在のトランザクションの1つまたは複数の出力に再分配するために複数の入力を有することができる。
【0030】
ビットコインなどの出力ベースのトランザクションプロトコルによれば、個々のユーザまたは組織などの当事者103が(手動でまたは当事者によって採用される自動プロセスによって)新しいトランザクション152jを制定することを望むとき、制定を行う当事者は、新しいトランザクションをそのコンピュータ端末102から受信者に送信する。制定を行う当事者または受信者は、最終的に、このトランザクションをネットワーク106のブロックチェーンノード104の1つまたは複数(これは、現在では、典型的にはサーバまたはデータセンタであるが、原則として他のユーザ端末であってもよい)に送信する。新しいトランザクション152jを制定する当事者103がトランザクションをブロックチェーンノード104の1つまたは複数に直接送信し、いくつかの例では、受信者に送信しないことも除外されない。トランザクションを受信するブロックチェーンノード104は、ブロックチェーンノード104の各々で適用されるブロックチェーンノードプロトコルにしたがって、トランザクションが有効であるかどうかをチェックする。ブロックチェーンノードプロトコルは、典型的には、新しいトランザクション152j内の暗号署名が、トランザクション152の順序付きシーケンス内で前のトランザクション152iに依存する予想される署名と一致することをチェックするようにブロックチェーンノード104に要求する。そのような出力ベースのトランザクションプロトコルでは、これは、新しいトランザクション152jの入力に含まれる当事者103の暗号署名または他の認可が、新しいトランザクションが使用する(または「割り当てる」)先行するトランザクション152iの出力において定義される条件と一致することをチェックすることを含み得、この条件は、典型的には、新しいトランザクション152jの入力における暗号署名または他の認可が、新しいトランザクションの入力がリンクされている前のトランザクション152iの出力をロック解除することを少なくともチェックすることを含む。条件は、先行するトランザクション152iの出力に含まれるスクリプトによって少なくとも部分的に定義され得る。代替的に、それは、単にブロックチェーンノードプロトコルのみによって固定されてもよいし、これらの組合せによるものであってもよい。いずれにしても、新しいトランザクション152jが有効である場合、ブロックチェーンノード104は、それをブロックチェーンネットワーク106内の1つまたは複数の他のブロックチェーンノード104にフォワードする。これらの他のブロックチェーンノード104は、同じブロックチェーンノードプロトコルにしたがって同じテストを適用し、そして、新しいトランザクション152jを1つまたは複数のさらなるノード104にフォワードし、以下同様である。このようにして、新しいトランザクションはブロックチェーンノード104のネットワーク全体に伝搬される。
【0031】
出力ベースのモデルでは、所与の出力(例えば、UTXO)が割り当てられる(または、「使用される」)かどうかの定義は、それがブロックチェーンノードプロトコルにしたがって別の前方のトランザクション152jの入力によって有効に償還されたかどうかである。トランザクションが有効であるための別の条件は、それが償還しようとする先行するトランザクション152iの出力が、別のトランザクションによってまだ償還されていないことである。この場合も同様に、有効ではない場合、トランザクション152jは、(無効としてフラグ付けされ、警告のために伝搬されない限り)伝搬されることも、ブロックチェーン150内に記録されることもない。これは、トランザクタ(transactor)が同じトランザクションの出力を複数回割り当てようとする二重支出を防止する。一方、アカウントベースのモデルは、アカウント残高を維持することによって二重支出を防止する。ここでも、トランザクション順序が定義されているので、アカウント残高は常に単一の定義された状態にある。
【0032】
トランザクションを妥当性確認することに加えて、ブロックチェーンノード104はまた、「プルーフオブワーク」によって支持される、一般にマイニングと呼ばれるプロセスにおいてトランザクションのブロックを最初に作成しようと競い合う。ブロックチェーンノード104において、新しいトランザクションが、ブロックチェーン150上に記録されたブロック151内にまだ現れていない有効なトランザクションの順序付きプール154に追加される。次いで、ブロックチェーンノードは、暗号パズルを解こうとすることで、トランザクションの順序付きセット154からトランザクション152の新しい有効なブロック151を組み立てようと競い合う。典型的には、これは、ナンスが保留中のトランザクションの順序付きプール154の表現と連結されハッシュされたときにハッシュの出力が所定の条件を満たすような「ナンス」値を探索することを含む。例えば、所定の条件とは、ハッシュの出力が特定の所定の数の先行ゼロを有することであり得る。これは、プルーフオブワークパズルの1つの特定のタイプにすぎず、他のタイプが除外されないことに留意されたい。ハッシュ関数のプロパティは、その入力に対して予測不可能な出力を持つことである。したがって、この探索は、総当たりでしか実行することができないので、パズルを解こうとしている各ブロックチェーンノード104でかなりの量の処理リソースを消費する。
【0033】
最初にパズルを解いたブロックチェーンノード104は、これをネットワーク106に公表し、後にネットワーク内の他のブロックチェーンノード104によって容易にチェックすることができるその解をプルーフとして提供する(ハッシュに対する解が与えられると、ハッシュの出力が条件を満たすことをチェックすることは簡単である)。この最初のブロックチェーンノード104は、ブロックを、このブロックを受け入れる他のノードのしきい値コンセンサスに伝搬し、プロトコルルールを強制する。次いで、トランザクションの順序付きセット154は、ブロックチェーンノード104の各々によってブロックチェーン150内に新しいブロック151として記録されるようになる。ブロックポインタ155はまた、チェーン内の前に作成されたブロック151n-1を指し示す新しいブロック151nに割り当てられる。プルーフオブワークの解を作成するために必要とされる、例えばハッシュの形態の、かなりの量の労力は、ブロックチェーンプロトコルのルールに従うという最初のノード104の意図を示す。そのようなルールは、前に妥当性確認されたトランザクションと同じ出力の使用または割当てを行った場合にトランザクションを有効として受け入れること(別名二重支出としても知られている)を行わないことを含む。ブロック151は、一旦作成されると、ブロックチェーンネットワーク106内のブロックチェーンノード104の各々において認識および維持されるので、修正することができない。ブロックポインタ155はまた、ブロック151に順番を付与する。トランザクション152は、ネットワーク106内の各ブロックチェーンノード104において順序付きブロックに記録されるので、これは、トランザクションの不変の公開台帳を提供する。
【0034】
任意の所与の時間にパズルを解こうと競い合う異なるブロックチェーンノード104は、それらがいつ解を探索し始めたかまたはトランザクションが受信された順序に応じて、任意の所与の時間に、まだ公開されていないトランザクションのプール154の異なるスナップショットに基づいてそれを行っていてもよいことに留意されたい。誰がそれぞれのパズルを最初に解いても、どのトランザクション152が次の新しいブロック151nにどの順序で含まれるかを定義し、公開されていないトランザクションの現在のプール154が更新される。次いで、ブロックチェーンノード104は、新たに定義された、公開されていないトランザクションの順序付きプール154からブロックを作成しようと競い合い続け、以下同様である。2つのブロックチェーンノード104が互いに非常に短い時間内にパズルを解いて、ブロックチェーンの相反する見解がノード104間で伝搬される場合に発生し得る任意の「フォーク」を解決するためのプロトコルも存在する。要するに、フォークのどちらのプロングでも最も長く成長した方が、確定的なブロックチェーン150となる。同じトランザクションが両方のフォークに現れるので、これがネットワークのユーザまたはエージェントに影響を与えないことに留意されたい。
【0035】
ビットコインブロックチェーン(およびほとんどの他のブロックチェーン)によれば、新しいブロック104の構築に成功したノードには、(あるエージェントまたはユーザから別のエージェントまたはユーザにある額のデジタル資産を転送するエージェント間またはユーザ間のトランザクションとは対照的に)追加の定義された量のデジタル資産を分配する新しい特別な種類のトランザクションにおいて、受け入れられた追加の額のデジタル資産を新たに割り当てる能力が与えられる。この特別なタイプのトランザクションは、通常、「コインベーストランザクション」と呼ばれるが、「開始トランザクション(initiation transaction)」または「生成トランザクジョン(generation transaction)」と称されることもある。これは典型的に、新しいブロック151nの最初のトランザクションを形成する。プルーフオブワークは、新しいブロックを構築するノードが、この特別なトランザクションが後に償還されることを可能にするプロトコルルールに従うという意図を示す。ブロックチェーンプロトコルルールは、この特別なトランザクションが償還され得る前に、満期期間、例えば100個のブロックを必要とし得る。多くの場合、通常の(非生成)トランザクション152はまた、そのトランザクションが公開されたブロック151nを作成したブロックチェーンノード104にさらに報酬を与えるために、その出力のうちの1つにおいて追加のトランザクション手数料を指定する。この手数料は通常「トランザクション手数料」と呼ばれ、以下で説明される。
【0036】
トランザクション妥当性確認および公開に関与するリソースに起因して、典型的には、ブロックチェーンノード104の少なくとも各々は、1つまたは複数の物理サーバユニットで構成されるサーバの形態をとるか、さらにはデータセンタ全体の形態をとる。しかしながら、原則として、任意の所与のブロックチェーンノード104は、ユーザ端末または互いにネットワーク化されたユーザ端末のグループの形態をとることができる。
【0037】
各ブロックチェーンノード104のメモリは、そのそれぞれの1つまたは複数の役割を実行し、ブロックチェーンノードプロトコルにしたがってトランザクション152を処理するために、ブロックチェーンノード104の処理装置上で実行されるように構成されたソフトウェアを記憶する。本明細書においてブロックチェーンノード104に帰する任意のアクションは、それぞれのコンピュータ機器の処理装置上で実行されるソフトウェアによって実行され得ることが理解されよう。ノードソフトウェアは、アプリケーション層、またはオペレーティングシステム層もしくはプロトコル層などの下位層、またはこれらの任意の組合せにおける1つまたは複数のアプリケーションにおいて実装され得る。
【0038】
消費ユーザの役割を担う複数の当事者103の各々のコンピュータ機器102もネットワーク101に接続されている。これらのユーザは、ブロックチェーンネットワーク106と対話し得るが、トランザクションの妥当性確認にもブロックの構築にも参加しない。これらのユーザまたはエージェント103のうちのいくつかは、トランザクションの送信者および受信者として動作し得る。他のユーザは、必ずしも送信者または受信者として動作することなくブロックチェーン150と対話し得る。例えば、いくつかの当事者は、ブロックチェーン150のコピーを記憶する(例えば、ブロックチェーンノード104からブロックチェーンのコピーを取得した)ストレージエンティティとして動作し得る。
【0039】
当事者103のうちのいくつかまたはすべては、異なるネットワーク、例えば、ブロックチェーンネットワーク106の上にオーバーレイされたネットワークの一部として接続され得る。ブロックチェーンネットワークのユーザ(「クライアント」と呼ばれことが多い)は、ブロックチェーンネットワーク106を含むシステムの一部であるといえるが、これらのユーザは、ブロックチェーンノードに要求される役割を果たさないので、ブロックチェーンノード104ではない。代わりに、各当事者103はブロックチェーンネットワーク106と対話してもよく、それによって、ブロックチェーンノード106に接続する(すなわち通信する)ことでブロックチェーン150を利用し得る。2つの当事者103およびそれらのそれぞれの機器102、すなわち、第1の当事者103aおよびそのそれぞれのコンピュータ機器102a、ならびに第2の当事者103bおよびそのそれぞれのコンピュータ機器102bは、例示の目的で示されている。そのような当事者103およびそれらのそれぞれのコンピュータ機器102ははるかに多く存在し、システム100に参加し得るが、便宜上、それらは図示されていないことが理解されよう。各当事者103は、個人または組織であり得る。純粋に例示として、第1の当事者103aは、本明細書ではアリスと呼ばれ、第2の当事者103bはボブと呼ばれるが、これは限定的なものではなく、本明細書におけるアリスまたはボブへのいかなる言及も、それぞれ「第1の当事者」および「第2の当事者」と置き換えられ得ることが理解されよう。
【0040】
各当事者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つまたは複数の他のネットワーク化されたリソースを含み得る。
【0041】
クライアントアプリケーション105は、最初に、1つまたは複数の適切なコンピュータ可読ストレージ上で任意の所与の当事者103のコンピュータ機器102に提供され得、例えば、サーバからダウンロードされ得るか、またはリムーバブルSSD、フラッシュメモリキー、リムーバブルEEPROM、リムーバブル磁気ディスクドライブ、磁気フロッピーディスクもしくはテープ、CDもしくはDVD ROMなどの光ディスク、またはリムーバブル光学ドライブなどのリムーバブル記憶デバイス上で提供され得る。
【0042】
クライアントアプリケーション105は、少なくとも「ウォレット」機能を備える。これは2つの主要な機能を有する。これらのうちの1つは、それぞれの当事者103が、トランザクション152を作成し、認可し(例えば署名し)、1つまたは複数のビットコインノード104に送信することを可能にして、トランザクション152をブロックチェーンノード104のネットワーク全体に伝搬させ、それによってブロックチェーン150に含まれるようにすることである。もう1つは、それぞれの当事者に、その当事者が現在所有しているデジタル資産の額を報告することである。出力ベースのシステムでは、この第2の機能は、当該当事者に属するブロックチェーン150全体に散在している様々なトランザクション152の出力において定義された額を照合することを含む。
【0043】
様々なクライアント機能が、所与のクライアントアプリケーション105に統合されるものとして説明され得るが、必ずしもこれに限定されるものではなく、代わりに、本明細書で説明される任意のクライアント機能は、例えば、APIを介してインターフェースする、または一方が他方へのプラグインである2つ以上の別個のアプリケーション一式において実装され得ることに留意されたい。より一般的には、クライアント機能は、アプリケーション層もしくはオペレーティングシステムなどの下位層、またはこれらの任意の組合せにおいて実装され得る。以下では、クライアントアプリケーション105に関して説明するが、これに限定されないことが理解されよう。
【0044】
各コンピュータ機器102上のクライアントアプリケーションまたはソフトウェア105のインスタンスは、ネットワーク106のブロックチェーンノード104のうちの少なくとも1つに動作可能に結合される。これにより、クライアント105のウォレット機能はトランザクション152をネットワーク106に送信することができる。クライアント105はまた、それぞれの当事者103が受信者である任意のトランザクションについてブロックチェーン150にクエリを行うためにブロックチェーンノード104にコンタクトすることができる(または、実施形態では、ブロックチェーン150は、部分的にその公開性(public visibility)を通じてトランザクションにおける信頼を提供する公共施設であるので、実際にブロックチェーン150における他の当事者のトランザクションを検査する)。各コンピュータ機器102上のウォレット機能は、トランザクションプロトコルにしたがってトランザクション152を定式化し、送信するように構成される。上述したように、各ブロックチェーンノード104は、ブロックチェーンノードプロトコルにしたがってトランザクション152を妥当性確認し、トランザクション152をフォワードして、それらをブロックチェーンネットワーク106全体に伝搬するように構成されたソフトウェアを実行する。トランザクションプロトコルおよびノードプロトコルは互いに対応し、所与のトランザクションプロトコルは所与のノードプロトコルに従い(go with)、一緒に所与のトランザクションモデルを実装する。ブロックチェーン150内のすべてのトランザクション152に対して同じトランザクションプロトコルが使用される。ネットワーク106内のすべてのノード104によって同じノードプロトコルが使用される。
【0045】
所与の当事者103、例えばアリスが、ブロックチェーン150に含まれるべき新しいトランザクション152jを送信することを望むとき、アリスは、関連トランザクションプロトコルにしたがって(アリスのクライアントアプリケーション105内のウォレット機能を使用して)新しいトランザクションを定式化する。次いで、アリスは、クライアントアプリケーション105から、アリスが接続されている1つまたは複数のブロックチェーンノード104にトランザクション152を送信する。例えば、これは、アリスのコンピュータ102に最良に接続されたブロックチェーンノード104であり得る。任意の所与のブロックチェーンノード104は、新しいトランザクション152jを受信すると、ブロックチェーンノードプロトコルおよびそのそれぞれの役割にしたがってそれを処理する。これには、新たに受信されたトランザクション152jが「有効」であるための特定の条件を満たすかを最初にチェックすることが含まれ、その例については、以下でより詳細に説明する。いくつかのトランザクションプロトコルでは、妥当性確認のための条件は、トランザクション152に含まれるスクリプトによってトランザクションごとに構成可能であり得る。代替的に、条件は、単にノードプロトコルの組込み特徴であってもよいし、スクリプトとノードプロトコルとの組合せによって定義されてもよい。
【0046】
新たに受信されたトランザクション152jが、有効であるとみなされるためのテストにパスすることを条件として(すなわち、それが「妥当性確認される」ことを条件として)、トランザクション152jを受信する任意のブロックチェーンノード104は、そのブロックチェーンノード104において維持されるトランザクションの順序付きセット154に新たな妥当性確認済みトランザクション152を追加する。さらに、トランザクション152jを受信する任意のブロックチェーンノード104は、妥当性確認済みトランザクション152をネットワーク106内の1つまたは複数の他のブロックチェーンノード104に伝搬する。各ブロックチェーンノード104は同じプロトコルを適用するので、トランザクション152jが有効であると仮定すると、これは、ネットワーク106全体にわたってすぐに伝搬されることを意味する。
【0047】
所与のブロックチェーンノード104において維持される保留中のトランザクションの順序付きプール154に承認されると、そのブロックチェーンノード104は、新しいトランザクション152を含むそれぞれのプール154の最新バージョンに対してプルーフオブワークパズルを解こうと競い始める(他のブロックチェーンノード104が、トランザクションの異なるプール154に基づいてパズルを解こうと試みている可能性があるが、どのノードでも最初に解いたものが、最新のブロック151に含まれるトランザクションのセットを定義することを想起されたい。最終的に、ブロックチェーンノード104は、アリスのトランザクション152jを含む順序付きプール154の一部についてパズルを解くことになる。)新しいトランザクション152jを含むプール154に対してプルーフオブワークが行われると、それは普遍的にブロックチェーン150内のブロック151のうちの1つの一部となる。各トランザクション152は、先のトランザクションへ戻るポインタを含むので、トランザクションの順序も不変的に記録される。
【0048】
異なるブロックチェーンノード104は、最初、所与のトランザクションの異なるインスタンスを受信し得るので、1つのインスタンスが新しいブロック151において公開される(この時点で、公開されたインスタンスが唯一の有効なインスタンスであることにすべてのブロックチェーンノード104が同意している)までは、どのインスタンスが「有効」であるかについて相反する見解を有する。ブロックチェーンノード104が1つのインスタンスを有効として受け入れ、次いで、別のインスタンスがブロックチェーン150に記録されていることを発見した場合、そのブロックチェーンノード104は、これを受け入れなければならず、最初に受け入れたインスタンス(すなわち、ブロック151で公開されていないもの)を破棄する(すなわち、無効として扱う)。
【0049】
いくつかのブロックチェーンネットワークによって運用される代替タイプのトランザクションプロトコルは、アカウントベースのトランザクションモデルの一部として、「アカウントベース」プロトコルと呼ばれ得る。アカウントベースのケースでは、各トランザクションは、過去のトランザクションのシーケンスにおける先行するトランザクションのUTXOを参照することによってではなく、絶対アカウント残高を参照することによって転送されるべき額を定義する。すべてのアカウントの現在の状態は、ブロックチェーンとは別個にそのネットワークのノードによって記憶され、絶えず更新される。そのようなシステムでは、トランザクションは、アカウントの実行中のトランザクションタリー(「ポジション」とも呼ばれる)を使用して順序付けられる。この値は、送信者によってその暗号署名の一部として署名され、トランザクション参照計算の一部としてハッシュされる。加えて、トランザクションにおけるオプションのデータフィールドも署名され得る。このデータフィールドは、例えば、前のトランザクションIDがデータフィールドに含まれている場合、前のトランザクションを指し示し得る。
【0050】
2.UTXOベースのモデル
図2は、例示的なトランザクションプロトコルを示す。これは、UTXOベースのプロトコルの一例である。トランザクション152(「Tx」と略記される)は、ブロックチェーン150の基本的なデータ構造である(各ブロック151は1つまたは複数のトランザクション152を含む)。以下では、出力ベースまたは「UTXO」ベースのプロトコルを参照して説明する。しかしながら、これはすべての可能な実施形態に限定されるものではない。例示的なUTXOベースのプロトコルは、ビットコインを参照して説明されるが、他の例示的なブロックチェーンネットワーク上でも等しく実装され得ることに留意されたい。
【0051】
UTXOベースのモデルでは、各トランザクション(「Tx」)152は、1つまたは複数の入力202および1つまたは複数の出力203を含むデータ構造を含む。各出力203は、未使用トランザクション出力(UTXO)を含み得、これは、(UTXOがまだ償還されていない場合)別の新しいトランザクションの入力202のソースとして使用され得る。UTXOは、デジタル資産の額を指定する値を含む。これは、分散型台帳上のトークンの設定数を表す。UTXOはまた、他の情報の中でも、元となるトランザクションのトランザクションIDを含み得る。トランザクションデータ構造は、入力フィールド(複数可)202および出力フィールド(複数可)203のサイズを示すインジケータを含み得るヘッダ201も含み得る。ヘッダ201はまた、トランザクションのIDを含み得る。実施形態では、トランザクションIDは、(トランザクションID自体を除く)トランザクションデータのハッシュであり、ノード104にサブミットされる生のトランザクション152のヘッダ201に記憶される。
【0052】
アリス103aが、当該デジタル資産の額をボブ103bに転送するトランザクション152jを作成することを望むとする。図2では、アリスの新しいトランザクション152jは「Tx」とラベル付けされている。これは、シーケンス内の先行するトランザクション152iの出力203においてアリスにロックされたデジタル資産の額をとり、これのうちの少なくとも一部をボブに転送する。先行するトランザクション152iは、図2では「Tx」とラベル付けされている。TxおよびTxは、単なる任意のラベルである。それらは、Txがブロックチェーン151内の最初のトランザクションであること、またはTxがプール154内のすぐ次のトランザクションであることを必ずしも意味するものではない。Txは、アリスにロックされた未使用の出力203を依然として有する任意の先行する(すなわち先の)トランザクションを指し示すことができる。
【0053】
先行するトランザクションTxは、アリスが新しいトランザクションTxを作成した時点では、または少なくともアリスがそれをネットワーク106に送信する時点までには、すでに妥当性確認されブロックチェーン150のブロック151に含まれている可能性がある。それは、その時点でブロック151のうちの1つにすでに含まれていてもよいし、順序付きセット154で依然として待機していてもよく、このケースでは、すぐに新しいブロック151に含まれることになる。代替的に、TxおよびTxを作成してネットワーク106に一緒に送信することもできるし、ノードプロトコルが「オーファン」トランザクションのバッファリングを可能にする場合には、TxをTxの後に送信することさえもできる。トランザクションのシーケンスの文脈において本明細書で使用される「先行する」および「後続する」という用語は、トランザクション内で指定されているトランザクションポインタ(どのトランザクションがどの他のトランザクションを指し示すかなど)によって定義されるシーケンス内のトランザクションの順序を指す。それらは、同様に、「先行するもの(predecessor)」および「後続するもの(successor)」、または「先の(antecedent)」および「後の(descendant)」、「親(parent)」および「子(child)」などと置き換えられ得る。これは、それらの作成、ネットワーク106への送信、または任意の所与のブロックチェーンノード104への到着の順序を必ずしも意味するものではない。それにもかかわらず、先行するトランザクション(先のトランザクションまたは「親」)を指し示す後続するトランザクション(後のトランザクションまたは「子」)は、親トランザクションが妥当性確認されない限り、妥当性確認されない。親より前にブロックチェーンノード104に到着する子は、オーファンとみなされる。それは、ノードプロトコルおよび/またはノード挙動に応じて、親を待つために特定の時間バッファされるかまたは破棄され得る。
【0054】
先行するトランザクションTxの1つまたは複数の出力203のうちの1つは、本明細書ではUTXOとラベル付けされた特定のUTXOを含む。各UTXOは、UTXOによって表されるデジタル資産の額を指定する値と、ロックスクリプトとを含み、ロックスクリプトは、後続するトランザクションが妥当性確認され、したがってUTXOが正常に償還されるために、後続するトランザクションの入力202内のロック解除スクリプトが満たさなければならない条件を定義する。典型的には、ロックスクリプトは、その額を特定の当事者(それが含まれるトランザクションの受益者)にロックする。すなわち、ロックスクリプトは、典型的には、後続するトランザクションの入力内のロック解除スクリプトに、先行するトランザクションがロックされる当事者の暗号署名が含まれるという条件を含むロック解除条件を定義する。
【0055】
ロックスクリプト(通称scriptPubKey)は、ノードプロトコルによって認識されるドメイン固有言語で書かれたコードの一部分である。そのような言語の特定の例は、ブロックチェーンネットワークによって使用される「スクリプト(Script)」(大文字S)と呼ばれる。ロックスクリプトは、トランザクション出力203を使用するためにどの情報が必要とされるか、例えばアリスの署名の必要性、を指定する。ロック解除スクリプトはトランザクションの出力に現れる。ロック解除スクリプト(通称scriptSig)は、ロックスクリプト基準を満たすのに必要な情報を提供するドメイン固有言語で書かれたコードの一部分である。例えば、それはボブの署名を含み得る。ロック解除スクリプトは、トランザクションの入力202に現れる。
【0056】
つまり、図示の例では、Txの出力203内のUTXOは、UTXOが償還されるために(厳密には、UTXOを償還しようとする後続するトランザクションが有効となるために)アリスの署名Sig PAを必要とするロックスクリプト[Checksig PA]を含む。[Checksig PA]は、アリスの公開鍵-秘密鍵ペアの公開鍵Pの表現(すなわち、ハッシュ)を含む。Txの入力202は、(例えば、実施形態ではトランザクションTx全体のハッシュであるそのトランザクションID、TxIDによって)Txを指し示すポインタを含む。Txの入力202は、Txの任意の他の可能な出力の中からUTXOを識別するために、Tx内のUTXOを識別するインデックスを含む。Txの入力202は、アリスが鍵ペアのアリスの秘密鍵をデータの所定の部分(暗号では「メッセージ」と呼ばれることもある)に適用することによって作成された、アリスの暗号署名を含むロック解除スクリプト<Sig PA>をさらに含む。有効な署名を提供するためにアリスによって署名される必要があるデータ(または「メッセージ」)は、ロックスクリプトによって、またはノードプロトコルによって、またはこれらの組合せによって定義され得る。
【0057】
新しいトランザクションTxがブロックチェーンノード104に到着すると、ノードはノードプロトコルを適用する。これは、ロックスクリプトおよびロック解除スクリプトを一緒に実行して、ロック解除スクリプトがロックスクリプトで定義されている条件(この条件は1つまたは複数の基準を含み得る)を満たすかどうかをチェックすることを含む。実施形態では、これは2つのスクリプトを連結することを含む:
<Sig PA> <PA> || [Checksig PA]
ここで、「||」は連結を表し、「<…>」はデータをスタックに置くことを意味し、「[…]」はロックスクリプト(この例ではスタックベースの言語)で構成される関数である。同等に、スクリプトは、スクリプトを連結するのではなく、共通スタックを用いて次々に実行され得る。いずれにしても、一緒に実行されると、スクリプトは、Txの出力内のロックスクリプトに含まれるようなアリスの公開鍵Pを使用して、Txの入力内のロック解除スクリプトが、データの予想される部分に署名するアリスの署名を含むことを認証する。この認証を実行するためには、データの予想される部分自体(「メッセージ」)も含まれる必要がある。実施形態では、署名されるデータはTxの全体を含む(つまり、平文のデータの署名された部分を指定する別個の要素は、すでに本質的に存在するので、含まれる必要がない)。
【0058】
公開-秘密暗号法による認証の詳細は、当業者によく知られている。基本的に、アリスが自身の秘密鍵を使用してメッセージに署名した場合、アリスの公開鍵および平文のメッセージが与えられると、ノード104などの別のエンティティは、メッセージがアリスによって署名されたものに違いないことを認証することができる。署名は、典型的には、メッセージをハッシュし、ハッシュに署名し、これを署名としてメッセージにタグ付けすることを含み、これにより、公開鍵の任意の保持者が署名を認証することができるようになる。したがって、データの特定の部分またはトランザクションの一部などに署名することへの本明細書におけるいかなる参照も、実施形態では、データのその部分またはトランザクションの一部のハッシュに署名することを意味し得ることに留意されたい。
【0059】
Tx内のロック解除スクリプトが、Txのロックスクリプト内で指定されている1つまたは複数の条件を満たす場合(つまり、図示の例では、アリスの署名がTx内で提供され、認証された場合)、ブロックチェーンノード104は、Txが有効であるとみなす。これは、ブロックチェーンノード104が、保留中のトランザクションの順序付きプール154にTxを追加することとなることを意味する。ブロックチェーンノード104はまた、トランザクションTxをネットワーク106内の1つまたは複数の他のブロックチェーンノード104にフォワードして、トランザクションTxがネットワーク106全体に伝搬されるようにする。Txが妥当性確認されてブロックチェーン150に含まれると、これは、TxからのUTXOを使用済みとして定義する。Txは、未使用トランザクション出力203を使用する場合にのみ有効になり得ることに留意されたい。別のトランザクション152によってすでに使用された出力を使用しようとする場合、Txは、他のすべての条件が満たされたとしても無効になる。したがって、ブロックチェーンノード104はまた、先行するトランザクションTx内の参照されたUTXOがすでに使用済みであるかどうか(すなわち、それが別の有効なトランザクションへの有効な入力をすでに形成したかどうか)をチェックする必要がある。これは、ブロックチェーン150がトランザクション152に定義された順序を課すことが重要である理由の1つである。実際には、所与のブロックチェーンノード104は、どのトランザクション152内のどのUTXO203が使用されたかをマーキングする別個のデータベースを維持し得るが、最終的には、UTXOが使用されたかどうかを定義するものは、ブロックチェーン150内の別の有効なトランザクションへの有効な入力をすでに形成しているかどうかである。
【0060】
所与のトランザクション152のすべての出力203において指定された総額が、そのすべての入力202によって指し示された総額よりも大きい場合、これは、ほとんどのトランザクションモデルにおいて無効性の別の根拠となる。そのため、そのようなトランザクションは、伝搬されることも、ブロック151に含まれることもない。
【0061】
UTXOベースのトランザクションモデルでは、所与のUTXOが全体として使用される必要があることに留意されたい。UTXOにおいて使用済みとして定義された額の一部は、別の一部が使用されている間、「残す」ことはできない。しかしながら、次のトランザクションの複数の出力間でUTXOからの額を分割することはできる。例えば、Tx内のUTXOにおいて定義された額を、Tx内の複数のUTXO間で分割することができる。したがって、アリスが、UTXOにおいて定義された額のすべてをボブに与えたくない場合、アリスは、リマインダを使用して、Txの第2の出力において自分自身に残りを与えるか、または別の当事者に支払うことができる。
【0062】
実際には、アリスはまた、通常、アリスのトランザクション104をブロック151に成功裏に含めるビットコインノード104に対する手数料を含める必要がある。アリスがそのような手数料を含めない場合、Txは、ブロックチェーンノード104によって拒否され得、したがって、技術的に有効であっても、伝搬されず、ブロックチェーン150に含まれない可能性がある(ノードプロトコルは、ブロックチェーンノード104が望まない場合にトランザクション152を受け入れることを強制しない)。いくつかのプロトコルでは、トランザクション手数料は、それ自体の別個の出力203を必要としない(すなわち、別個のUTXOを必要としない)。代わりに、所与のトランザクション152の入力(複数可)202によって指し示される総額と出力(複数可)203で指定されている総額との間の任意の差が、トランザクションを公開するブロックチェーンノード104に自動的に与えられる。例えば、UTXOへのポインタがTxへの唯一の入力であり、Txは唯一の出力UTXOを有するとする。UTXOにおいて指定されたデジタル資産の額がUTXOにおいて指定された額よりも大きい場合、その差分は、UTXOを含むブロックを作成するためのプルーフオブワーク競争に勝つノード104によって割り当てられ得る(または、使用され得る)。しかしながら、代替的にまたは追加的に、トランザクション手数料がトランザクション152のUTXO203のうちのそれ自体の1つにおいて明示的に指定され得ることは必ずしも除外されない。
【0063】
アリスおよびボブのデジタル資産は、ブロックチェーン150内のどこかで任意のトランザクション152においてそれらにロックされたUTXOから構成される。したがって、典型的には、所与の当事者103の資産は、ブロックチェーン150全体にわたる様々なトランザクション152のUTXO全体に散在している。ブロックチェーン150内のどこにも、所与の当事者103の総残高を定義する数字は記憶されない。クライアントアプリケーション105におけるウォレット機能の役割は、それぞれの当事者にロックされ、別の前方のトランザクションでまだ使用されていない様々なUTXOのすべての値を一緒に照合することである。これは、ビットコインノード104のいずれかに記憶されたブロックチェーン150のコピーにクエリを行うことによって行うことができる。
【0064】
スクリプトコードは、多くの場合、概略的に(すなわち、正確な言語を使用せずに)表されることに留意されたい。例えば、特定の機能を表すためにオペレーションコード(オペコード)が使用され得る。「OP_...」は、スクリプト言語の特定のオペコードを指す。例として、OP_RETURNは、ロックスクリプトの最初にOP_FALSEが先行するときに、トランザクション内にデータを記憶することができ、それによってデータをブロックチェーン150内に不変的に記録することができる、トランザクションの使用不可能な出力を作成するスクリプト言語のオペコードである。例えば、データは、ブロックチェーンに記憶することが望まれる文書を含み得る。
【0065】
典型的には、トランザクションの入力は、公開鍵Pに対応するデジタル署名を含む。実施形態において、これは、楕円曲線secp256k1を使用するECDSAに基づく。デジタル署名は、データの特定の一部分に署名する。いくつかの実施形態では、所与のトランザクションについて、署名は、トランザクション入力の一部、およびトランザクション出力の一部または全部に署名する。署名された出力の特定の部分は、SIGHASHフラグに依存する。SIGHASHフラグは、通常、どの出力が署名されるかを選択するために署名の最後に含まれる4バイトコードである(したがって、署名時に固定される)。
【0066】
ロックスクリプトは、典型的には、それぞれのトランザクションがロックされる当事者の公開鍵を含むという事実を指して、「scriptPubKey」と呼ばれることがある。ロック解除スクリプトは、典型的には、それが対応する署名を供給するという事実を指して「scriptSig」と呼ばれることがある。しかしながら、より一般的には、UTXOが償還されるための条件が署名を認証することを含むことは、ブロックチェーン150のすべてのアプリケーションにおいて必須ではない。より一般的には、スクリプト言語を使用して、任意の1つまたは複数の条件を定義することができる。したがって、より一般的な用語「ロックスクリプト」および「ロック解除スクリプト」が好まれ得る。
【0067】
3.サイドチャネル
図1に示すように、アリスおよびボブのコンピュータ機器102a、120bの各々上のクライアントアプリケーションは、それぞれ、追加の通信機能を含み得る。この追加の機能により、(いずれかの当事者または第三者の扇動で)アリス103aは、ボブ103bと別個のサイドチャネル107を確立することができる。サイドチャネル107は、ブロックチェーンネットワークとは別でのデータの交換を可能にする。そのような通信は、「オフチェーン」通信と呼ばれることがある。例えば、これは、当事者の一方がトランザクションをネットワーク106にブロードキャストすることを選択するまで、トランザクションが(まだ)ブロックチェーンネットワーク106に登録されることなく、またはチェーン150上に進むことなく、アリスとボブとの間でトランザクション152を交換するために使用され得る。このようにトランザクションを共有することは、「トランザクションテンプレート」の共有と呼ばれることがある。トランザクションテンプレートは、完全なトランザクションを形成するために必要とされる1つまたは複数の入力および/または出力を欠いていてもよい。代替的にまたは追加的に、サイドチャネル107は、鍵、交渉された額または条件、データコンテンツなどの任意の他のトランザクション関連データを交換するために使用され得る。
【0068】
サイドチャネル107は、ブロックチェーンネットワーク106と同じパケット交換ネットワーク101を介して確立され得る。代替的にまたは追加的に、サイドチャネル301は、モバイルセルラーネットワークなどの異なるネットワーク、またはローカルワイヤレスネットワークなどのローカルエリアネットワーク、またはアリスのデバイス102aとボブのデバイス102bとの間の直接のワイヤードまたはワイヤレスリンクを介して確立され得る。一般に、本明細書のどこでも、参照されるサイドチャネル107は、「オフチェーン」すなわちブロックチェーンネットワーク106とは別でデータを交換するための1つまたは複数のネットワーキング技術または通信媒体を介した任意の1つまたは複数のリンクを含み得る。2つ以上のリンクが使用される場合、全体としてのオフチェーンリンクの束または集合は、サイドチャネル107と呼ばれることがある。したがって、アリスおよびボブがサイドチャネル107上で情報またはデータの特定の部分などを交換すると言われている場合、これは、これらのデータの部分のすべてが全く同じリンクまたは同じタイプのネットワーク上で送信されなければならないことを必ずしも意味するものではないことに留意されたい。
【0069】
4.ロックスクリプトの伝搬の強制
図3は、ロックスクリプトの伝搬を強制する、すなわち、トランザクションのチェーン内の各トランザクションに強制的に同じロックスクリプトを含ませるための例示的なシステム300を示す。システム300は、第1の当事者(例えば、アリス103a)および第2の当事者(例えば、ボブ103b)を含む。システム300は、1つまたは複数の追加の当事者、例えばチャーリー103cも含み得る。システム300は、ブロックチェーンネットワーク106の1つまたは複数のブロックチェーンノード104も含む。第1の当事者および第2の当事者は、以下の説明を通してアリス103aおよびボブ103bと呼ばれるが、これは単に便宜上のものであることに留意されたい。すなわち、第1の当事者および第2の当事者は、必ずしも、図1および2に関連してアリス103aおよびボブ103bによって実行されるものとして上記で説明されたアクションの一部または全部を実行するように構成される必要はないが、それは、当然ながらオプションである。より一般的には、第1の当事者と第2の当事者の両方が、図1および図2に関連してアリス103aおよび/またはボブ103bによって実行されるものとして上記で説明されたアクションの一部または全部を実行するように構成されてもよい。アリス103a、ボブ103b、またはチャーリー103cによって実行されるものとして説明される任意の動作は、それらのそれぞれのコンピューティング機器によって実行されることが理解されよう。
【0070】
本発明の実施形態は、ロックスクリプトがブロックチェーントランザクションのチェーン全体に伝搬されることを確実にするために使用され得る。一般に、プロトコルは、一次トランザクションおよび補助トランザクションという2つのタイプのトランザクションに依存する。一次トランザクションはそれぞれ、それぞれの一次ロックスクリプトをロック解除しようとするそれぞれの補助トランザクションに対して条件を適用するそれぞれの一次ロックスクリプトを含む。各一次ロックスクリプトは同じであり、すなわち、それは同じフォーマットをとり、同じデータを含み、同じ機能を実装する。補助トランザクションはそれぞれ、それぞれの補助ロックスクリプトをロック解除しようとするそれぞれの一次トランザクションに対して条件を適用するそれぞれの補助ロックスクリプトを含む。各補助ロックスクリプトは同じである。
【0071】
第1の当事者アリス103aは、発行トランザクションの生成を担い得る。発行トランザクションは、トランザクションのチェーン内の最初の一次トランザクションである。発行トランザクションは、第1の一次トランザクションと呼ばれることもある。一次トランザクションがトークン関連データを含む例では、アリス103aがトークンの発行者であり得る。他の例では、異なる当事者がトークンチェーンを開始してもよい。
【0072】
第1の一次トランザクションは、1つまたは複数の入力および1つまたは複数の出力を含む。例えば、一次トランザクションの入力は、アリスの前のトランザクションのうちの1つの出力をロック解除するために使用され得、したがって、それを行うために必要とされるデータ、例えば、アリスの署名および公開鍵を含み得る。第1の一次トランザクションの出力(例えば、第1の出力)は、一次ロックスクリプト、すなわち、将来のトランザクション全体にわたって伝搬されることになる同じ一次ロックスクリプトのインスタンスを含む。第1の一次トランザクションの別の出力(例えば、第2の出力)は、使用条件(spending condition)を指定し得、例えば、それは、アリス103aまたは異なる当事者によって所有される公開鍵にロックされ得る。例えば、第2の出力は、P2PKH(pay-to-public-key-hash)出力を含み得る。
【0073】
一次ロックスクリプトは、一次ロックスクリプトをロック解除しようとするトランザクション(このケースでは第1の補助トランザクション)に対していくつかの条件を適用するように構成される。補助トランザクションに対して適用される条件の1つは、第1の補助トランザクションのロック解除スクリプトが、第1の補助トランザクション自体に基づく第1のメッセージを含まなければならないことである。すなわち、第1のメッセージは、第1の補助トランザクションのフィールドのうちの1つ、いくつか、またはすべてに基づく。フィールドのいくつかは生の形式であってもよく、いくつかは難読化、例えばハッシュ化されていてもよい。ロック解除スクリプトにそのようなメッセージを強制的に含ませるための1つの技法は、PUSHTXとして当技術分野で知られており、これは、擬似オペコード、すなわち、特定の機能を実行するように構成されたオペコードの組合せである。PUSHTXについては、https://xiaohuiliu.medium.com/op-push-tx-3d3d279174c1に記載されている。別の例は、英国特許出願GB2112930.9に記載されている。ロック解除スクリプトに第1のメッセージを強制的に含ませることにより、第1の補助トランザクションに対して特定のチェックを行うことができる。このメッセージは、ブロックチェーン署名プロトコルの一部として署名の前にハッシュされるプリイメージなので、sighashプリイメージと呼ばれることがある。別の言い方をすれば、ロック解除スクリプトに第1のメッセージを強制的に含ませることにより、第1の補助トランザクションに対して特定の条件を適用することができる。適用される1つの条件は、第1の補助トランザクションの出力(例えば、第1の出力)が補助ロックスクリプト(以下で説明)を含むことである。
【0074】
この条件を適用する方法の例として、一次ロックスクリプトは、補助ロックスクリプトのハッシュに基づいてハッシュパズルを実装するように構成されたサブスクリプトを含み得る。すなわち、ハッシュパズルは、補助ロックスクリプトのハッシュを含み、ハッシュに対するプリイメージが提供された場合にのみ解くことができ、したがってサブスクリプトがロック解除されるように構成され、プリイメージは補助ロックスクリプトである。したがって、一次ロックスクリプトは、第1のメッセージからロックスクリプト(例えば、第1のロックスクリプト)を抽出し、抽出されたロックスクリプトをハッシュし、それが一次ロックスクリプトの一部として含まれる補助ロックスクリプトのハッシュにハッシュすることを検証するように構成され得る。
【0075】
アリス103aが第1の補助トランザクションを作成してもいし、それは異なる当事者によって生成されてもよい。第1の補助トランザクションは、上述したように、第1のメッセージを含む入力と、補助ロックスクリプトを含む出力とを含む。補助ロックスクリプトは、補助ロックスクリプトをロック解除しようとするトランザクション(このケースでは第2の一次トランザクション)に対していくつかの条件を適用するように構成される。第2の一次トランザクションに対して適用される条件のうちの1つは、第2の一次トランザクションのロック解除スクリプト(例えば、第1のロック解除スクリプト)が、第2の一次トランザクションに基づく第2のメッセージを含まなければならないことである。すなわち、第2のメッセージは、第2の一次トランザクションのフィールドのうちの1つ、いくつか、またはすべてに基づく。フィールドのいくつかは生の形式であってもよく、いくつかは難読化、例えばハッシュ化されていてもよい。第2の一次トランザクションに対して適用される別の条件は、ロック解除スクリプトが、第1の一次トランザクションの1つ、いくつか、または各ロックスクリプトを含むデータ項目も含まなければならず、したがって、第1のデータ項目が一次ロックスクリプトを含まなければならないことである。すなわち、第1のデータ項目は、少なくとも一次ロックスクリプトを含まなければならない。いくつかの例では、第1のデータ項目は、以下に説明する第1の一次トランザクションの第2のロックスクリプトも含まなければならない。第2のメッセージおよび第1のデータ項目を使用して、補助ロックスクリプトは、第2の一次トランザクションに一次ロックスクリプトを強制的に出力(例えば、第1の出力)に含ませる。したがって、一次ロックスクリプトが一次トランザクション間で伝搬される。一次ロックスクリプトは、補助トランザクションに補助ロックスクリプトを強制的に含ませるので、補助ロックスクリプトもまた、補助トランザクション間で伝搬される。したがって、一次ロックスクリプトまたは補助ロックスクリプトの一部として含まれる任意のデータ(例えば、トークン関連データ)は、それぞれ一次トランザクションまたは補助トランザクションの間で伝搬される。
【0076】
上述したように、第1の一次トランザクションは第2の出力を含み得る。補助ロックスクリプトは、第1の一次トランザクションの第2の出力が第2の一次トランザクションの入力によって強制的に使用されるように構成され得る。すなわち、これらの例では、第1の一次ロックスクリプトの第2の出力および第1の補助トランザクションの第1の出力は、別個のトランザクションではなく、第2の一次トランザクションのそれぞれの入力によって使用されなければならない。
【0077】
この条件を適用するための1つのオプションは、第2の一次トランザクションの第1のロック解除スクリプトに第1の補助トランザクションを強制的に含ませることである。すなわち、第2のデータ項目は、第2の一次トランザクションのロック解除スクリプトに含まれ、その第2のデータ項目は、第1の補助トランザクションを、例えばシリアル化された形式で含む。補助ロックスクリプトは、第2のメッセージから、第2の一次トランザクションの第1の入力によって使用される出力のそれぞれのトランザクション識別子を抽出するように構成される。同様に、補助ロックスクリプトは、第2のデータ項目から、第1の補助トランザクションの第1の入力によって使用される出力のそれぞれのトランザクション識別子を抽出するように構成される。補助トランザクションは、抽出されたトランザクション識別子を強制的に同じにするように構成される。
【0078】
これらの例では、第2の一次トランザクションは、第1の一次トランザクションの第2の出力をロック解除するように構成された第2の入力を含み、したがって、トランザクションのリンクされたチェーンを作成する。トランザクションは、第1の一次トランザクションの出力および第1の補助トランザクションの出力が同じ第2の一次トランザクションによって使用されるという上記で説明した強制なしに、このようにリンクされてもよいことに留意されたい。しかしながら、この条件をスクリプト内で適用させることには(後述する)利点がある。
【0079】
いくつかの例では、第1のデータ項目(すなわち、第1の一次トランザクションのロックスクリプトを含むデータ項目)が正しいことを検証するために、補助ロックスクリプトによって追加の検証が実行され得る。第1の一次トランザクションは、ハッシュ関数、例えばSHA256またはSHA512を用いてトランザクションをハッシュすることによって生成されるトランザクション識別子を有するか、または少なくともそれに関連付けられる。任意の適切なハッシュ関数が使用され得る。第2の一次トランザクションの第1のロック解除スクリプトは、ハッシュ関数を第1の一次トランザクションに適用するミッドステート(midstate)を含む第3のデータ項目を含み得る。当業者は、ミッドステート自体に精通しているであろう。一般に、データが(例えば、SHAベースのハッシュ関数を用いて)ハッシュされると、データはブロックに分割される。ブロックの第1のセットを使用して一連の計算を実行して第1のミッドステートを生成する。第1のミッドステートとブロックの第2のセットとを使用して一連の計算を実行して第2のミッドステートを生成し、以下同様に、すべてのブロックが演算されてハッシュダイジェストを得られるまで続けられる。言い換えると、ハッシュ関数は単一の演算を含まない。むしろ、ハッシュ関数への入力はブロック(例えば、SHA256の場合は64バイト)に分割され、これらのブロックは順番に処理される。ミッドステートは、これらのブロックのうちの1つまたは複数を処理した後の内部状態である。ミッドステートは、各ブロックが処理された後に生成される。n番目のブロックを処理した後に計算されたミッドステートは、すべての前のブロックに依存するが、後続するブロックには依存しない。SHA256ハッシュ関数の内部動作の一例は、https://qvault.io/cryptography/how-sha-2-works-step-by-step-sha-256/において見ることができる。
【0080】
本開示は、ロックスクリプトを含まない第1の一次トランザクションの第1の部分にハッシュ関数を適用することによって生成されたミッドステートを提供することによって、第1のデータ項目(すなわち、ロックスクリプト)を使用してスクリプト内で計算を継続して、第1の一次トランザクションの候補トランザクション識別子を生成することができることを認識する。候補トランザクション識別子が第1の一次トランザクションの実際のトランザクション識別子と一致する場合、第1のデータ項目は、第1の一次トランザクションの実際のロックスクリプト(したがって、一次ロックスクリプト)を含まなければならない。
【0081】
補助ロックスクリプトはまた、第2の一次トランザクションに、チェーン内の最初の一次トランザクションのトランザクション識別子を強制的に含ませるように構成され得る。例えば、第2の一次トランザクションは、トランザクション識別子を第2の出力に含めるように要求され得る。第1の一次トランザクションがチェーン内の最初のトランザクションである場合、第2の一次トランザクションを含む後続する各トランザクションは、第1の一次トランザクションのトランザクション識別子を含むように強制される。これらの例では、最初の一次トランザクション(例えば、第1の一次トランザクション)は、最初の一次トランザクションの全体に基づくので、それ自体のトランザクション識別子を含まない。後続する各一次トランザクションは、最初の一次トランザクションのトランザクション識別子を含むように強制され得る。
【0082】
第2の一次トランザクションは、アリス103aまたは異なる当事者によって生成され得る。上述したように、第2の一次トランザクションは、第1の補助トランザクションの第1の出力を使用する第1の入力を含み、第1の一次トランザクションの第2の出力を使用する第2の入力を含み得る。第2の一次トランザクションはまた、一次ロックスクリプトを含む第1の入力を含む。第2の一次トランザクションは、例えば、次の一次トランザクションの第2の出力によってロック解除される第2の出力を含み得る。第2の出力は、第2の当事者であるボブ103bの公開鍵にロックされ得る。第2の出力は、最初の一次トランザクションのトランザクション識別子を含み得る。
【0083】
アリス103aは、第1の一次トランザクションを1つまたは複数のブロックチェーンノード104にサブミットさせるように構成される。例えば、アリス103a自身が第1の一次トランザクションをブロックチェーンネットワーク106に送信してもよいし、アリス103aが第1の一次トランザクションをブロックチェーンネットワークに中間者、例えばボブ103bを介して送信してもよい。同様に、アリス103aは、第1の補助トランザクションおよび/または第2の一次トランザクションを1つまたは複数のブロックチェーンノード104にサブミットさせるように構成され得る。
【0084】
いくつかの例では、アリス103aは、第2の一次トランザクションをボブ103bに送信し得る。アリス130aはまた、マークルプルーフをボブ103bに送信し得、マークルプルーフは、第1の一次トランザクションがブロックチェーン150に記録されたことを検証するために使用され得る。
【0085】
ここまで、第1の一次トランザクションは、最初の一次トランザクションとして主に説明してきた。しかしながら、第1の一次トランザクションは、一般に、n番目の一次トランザクションであり得、このケースでは、上記で説明される第2の一次トランザクションは、n+1番目の一次トランザクションとなる。同様に、この例では、n-1番目の一次トランザクションが存在する。このケースでは、アリス130aは、発行トランザクションの生成を担っても担わなくてもよい。
【0086】
この例を続けると、第1の一次トランザクションは、前の補助トランザクションの第1の出力を参照する第1の入力を含み得る。第1の補助トランザクションと同様に、前の補助トランザクションの第1の出力は、補助ロックスクリプト(すなわち、同じ正確な補助スクリプトのインスタンス)を含む。前の補助トランザクションは、前の一次トランザクションの第1の出力を参照する入力も有する。前の一次トランザクションの第1の出力は、一次ロックスクリプトを含む。この例では、前の一次トランザクションは、最初の一次トランザクションであり得るか、一次トランザクションのチェーン内の異なる一次トランザクションであり得る。
【0087】
前の補助トランザクションの補助ロックスクリプトは、第1の補助トランザクションの補助ロックスクリプトが第2の一次トランザクションに対して行うのと同じように、第1の一次トランザクションに対して上記で説明したチェックを行う(すなわち、同じ条件を適用する)ように構成される。例えば、第1の一次トランザクションに一次ロックスクリプトを強制的に含ませる。
【0088】
これらの例では、第2の一次トランザクションが親一次トランザクション(すなわち、第1の一次トランザクション)および祖父母一次トランザクション(すなわち、前の一次トランザクション)を有するとき、第1の一次トランザクションの補助ロックスクリプトは、第2の一次トランザクションのロック解除スクリプトに、前の一次トランザクションの1つ、いくつか、または各ロックスクリプトを含む第4のデータ項目を強制的に含ませるように構成される。これは、一次ロックスクリプトを含む。第2の一次トランザクションのロック解除スクリプトに含まれる第2のメッセージ(すなわち、第2の一次トランザクションに基づいて生成されたメッセージ)および第4のデータ項目を使用して、補助ロックスクリプトは、第2の一次トランザクションの第1の出力に含まれる一次ロックスクリプトが前の一次トランザクションに含まれる一次ロックスクリプトと同じであることを検証する。これは、同じ一次ロックスクリプトがある一次トランザクションから次の一次トランザクションへ、そして次の一次トランザクションへ渡されることを検証する。言い換えると、前の一次トランザクションの一次ロックスクリプトが実行されたことを証明する。
【0089】
前の一次トランザクションにハッシュ関数(例えば、SHA256)を適用することによって生成されたミッドステートを使用して、第4のデータ項目が正しいことを検証し得る。すなわち、第4のデータ項目(すなわち、前の一次トランザクションのロックスクリプトを含むデータ項目)が正しいことを検証するために、補助ロックスクリプトによって追加の検証が実行され得る。前の一次トランザクションは、ハッシュ関数、例えば、SHA256を用いてトランザクションをハッシュすることによって生成されるトランザクション識別子を有するか、または少なくともそれに関連付けられる。第2の一次トランザクションの第1のロック解除スクリプトは、ハッシュ関数を前の一次トランザクションに適用するミッドステートを含む第5のデータ項目を含み得る。補助ロックスクリプトは、第4のデータ項目および第5のデータ項目を使用して前の一次トランザクションの候補トランザクション識別子を生成し得る。候補トランザクション識別子が前の一次トランザクションの実際のトランザクション識別子と一致する場合、第4のデータ項目は、前の一次トランザクションの実際のロックスクリプト(したがって、一次ロックスクリプト)を含まなければならない。
【0090】
第1の一次トランザクションは、前の一次トランザクションの第2の出力を使用する第2の入力を含み得る。条件は、前の補助ロックスクリプトに含まれる補助ロックスクリプトによって適用され得る。
【0091】
前の一次トランザクションおよび/または前の補助トランザクションは、アリス103aによって生成されてもよいし、異なる当事者、例えばボブ103bもしくはチャーリー103cによって生成されてもよい。同様に、上記の説明は概して、アリス103aが第1の一次トランザクション、第1の補助トランザクション、および第2の一次トランザクションを生成することに関して説明したが、これらのトランザクションのいずれか1つまたは複数は、代わりに、ボブ103bまたはチャーリー103cによって生成されてもよい。
【0092】
当事者、例えばボブ103bは、一次トランザクションが正しく生成されたことを検証する意図をもって、一次トランザクションを取得し得る。例えば、ボブ103bは、アリス103aから第2の一次トランザクションを取得し得る。以上、第2の一次トランザクションについて説明した。簡単に要約すると、第2の一次トランザクションは、一次ロックスクリプトを含む第1の出力と、少なくとも(第2の一次トランザクションに基づいて生成された)第2のメッセージおよび第1の一次トランザクションの1つ、いくつか、または各ロックスクリプトを含む第1のデータ項目とを含む第1の入力(すなわち、第1の入力のロック解除スクリプト)とを有する。ロックスクリプトの1つは、一次ロックスクリプトを含む。以下の例では、第2の一次トランザクションの第1の入力は、第1の補助トランザクションも含む。
【0093】
ボブ103bは、第1の一次トランザクションがブロックチェーン150上に記録されており、したがって、有効なトランザクションであることを検証する。そうするための1つのオプションは、候補ブロックヘッダを計算するために、第1の一次トランザクションのトランザクション識別子とともに使用することができるマークルプルーフ(すなわち、ハッシュのセット)を取得することである。候補ブロックヘッダがブロックチェーンブロック151のブロックヘッダと一致する場合、ボブ103bは、ブロックが第1の一次トランザクションを含むことを確信することができる。別のオプションは、ブロックチェーンノード104に確認を要求することである。
【0094】
上述したように、第2の一次トランザクションのロック解除スクリプトは、第3のデータ項目(第1の一次トランザクションの一部に適用されたハッシュ関数のミッドステート)を含み得る。ボブ103bは、第1のデータ項目および第3のデータ項目を使用して、第1の一次トランザクションの候補トランザクション識別子を生成し、候補トランザクション識別子を使用してマークルプルーフを実行し得る。
【0095】
ボブ103bはまた、一次ロックスクリプトが、第1の補助トランザクションが補助ロックスクリプトを含むことを要求するように構成されているという意味で、第1の一次トランザクションに含まれる一次ロックスクリプトが正しいことを検証する。ボブ103bは、一次ロックスクリプトを明示的に検証し、すなわち、それが正しい機能などを含むことをチェックし得る。より効率的なオプションとして、上述したように、一次ロックスクリプトは、ハッシュパズルの一部として補助ロックスクリプトのハッシュを含み得る。したがって、ハッシュパズルを解くためには、補助トランザクションに補助ロックスクリプトが含まれていなければならない。したがって、ボブ103bは、一次ロックスクリプトが補助ロックスクリプトのハッシュを含むことを検証し得る。例えば、ハッシュは、例えば、アリス103aまたは最初の一次トランザクションを生成した当事者によって送信され得るなどして、ボブ103bが事前に知っていてもよい。
【0096】
オプションのチェックとして、ボブ103aは、第2の一次トランザクションが、第1の一次トランザクションであり得る、一次トランザクションのチェーン内の最初のトランザクションのトランザクション識別子を(例えば、第2の出力内に)含むことを検証し得る。
【0097】
検証を実行すると、ボブ103bは、第2の補助トランザクションおよび第3の一次トランザクションを生成し得る。例えば、これは、トークンをチャーリー103cに転送するために使用され得る。第2の補助トランザクションは、第1の補助トランザクションと同じフォーマットをとる。第2の補助トランザクションは、第2の一次トランザクションの第1の出力、すなわち一次ロックスクリプトを含む出力を使用する第1の入力を有する。そうするために、それは、第2の補助トランザクションのいくつかまたはすべてのフィールドに基づいて生成された第3のメッセージを含む。第2の補助トランザクションは、補助ロックスクリプトを含む第1の入力を有する。ボブ103bは、第2の補助トランザクションをブロックチェーンネットワーク106に、直接または異なる当事者を介して送信する。
【0098】
ボブ103bはまた、第3の一次トランザクションを生成する。第3の一次トランザクションは、第2の一次トランザクションと同様である。それは、第2の一次トランザクションの第1の出力を使用する第1の入力を含む。第3の一次トランザクションの第1の入力は、第3の一次トランザクションのいくつかまたはすべてのフィールドに基づいて生成された第3のメッセージを含む。この例では、第1の入力は、第2の補助トランザクションと、第1のデータ項目(すなわち、第1の一次トランザクションの各ロックスクリプト)と、第2の一次トランザクションの1つ、いくつか、または各ロックスクリプトとを含む第6のデータ項目を含む。第3の一次トランザクションは、チャーリー103cの公開鍵にロックされた第2の出力を含み得る。第3の一次トランザクションは、第2の一次トランザクションの第2の出力を使用する第2の入力を含み得る。ボブ103bは、第2の一次トランザクションをブロックチェーンネットワーク106に、直接または異なる当事者を介して送信する。
【0099】
5.ブロックチェーンノード妥当性確認済みトークン
このセクションでは、上述の実施形態の詳細な例を説明した。このセクションで提示される特徴のいくつかはオプションであることを理解されたい。この例は、トランザクションがトークントランザクションである、すなわち、それらがトークン関連データを含むユースケースに焦点を当てる。これは、例示的なユースケースにすぎず、一般に、発行まで戻ってすべてのトランザクションを検証する必要なしに、証明可能なトランザクションチェーンを必要とする他のアプリケーションに使用され得る。
【0100】
このセクションでは、4つの要件を満たすトークンプロトコルについて説明する。
1.トークントランザクションの検証者はトークンの発行トランザクションまで遡る必要がなく、よって、効率が向上する。
2.トークンが発行された後は、信頼できる第三者が2人のユーザ間のトークンの転送に関与せず、よって、セキュリティおよびユーザビリティが向上する。
3.トークントランザクションのサイズは一定である。履歴トランザクションの数とは無関係であり、よって、ストレージが向上する。
4.この解決策は、リプレイ攻撃の影響を受けにくく、すなわち、トークンをコピーすることができなく、よって、セキュリティが向上する。
【0101】
検証者または第三者がトークン規則を実行する必要なしにスクリプトで強制されるトークンは、「マイナー妥当性確認済み」トークン、または「ブロックチェーンノード妥当性確認済み」トークンとして知られている。本出願は、出願人の知る限りにおいて、ブロックチェーン150上の第1のマイナー妥当性確認済みトークンプロトコルを開示する。
【0102】
プロトコルは、以下のビルディングブロックを使用する:
・ トランザクションチェーン内の祖父母の2つのロックスクリプトの各々に同じオペコードが現れたこと、およびこれらのロックスクリプトが実行されたことを検証するスクリプトスニペット、
・ トランザクションチェーン内の次の子ロックスクリプトの両方が同じオペコードを含むことを強制するスクリプトスニペット、
・ 部分的SHA256を実装するスクリプトスニペット、
・ (自己参照を回避するために)1つのトークントランザクションからその支出トランザクションに検証データを渡す補助トランザクション、および
・ 再生不可能な一意のトークンID(UTID)
簡単にするために、これは発行トランザクションIDであると仮定する。
【0103】
プロトコルは以下にステップで示され、一度に解決策の一部を説明する。解決策の反復のたびに問題が作り出され、その問題は解決策の次の反復によって解決され、最終的に完全な解決策に終わる。支出トランザクションTxn+1を視点とし、発行トランザクションまで遡ることなく、どのようにしてTxn+1を有効なトークントランザクションとして決定することができるかを説明する。Txn+1に関連するトランザクションを参照するために、以下の用語を使用する:
【数1】
【0104】
これらのトランザクションおよびそれらの関係を図4に示す。祖父母トランザクション、親トランザクション、および補助トランザクションはすべてマイナーによって受け入れられたと仮定する。支出トランザクションTxn+1は、最後に見られたトランザクションである。
【0105】
5.1.トランザクション構造
このプロトコルは、トークンチェーン内の最後の3つのトランザクションを考慮する。トランザクションごとに、補助トランザクションがある。補助トランザクションは、トランザクションの肥大化および自己参照を回避するために必要である。図4にトランザクション構造の概略図が示されており、トランザクションチェーンは、第2の入力および出力のチェーンとして定義されている。これについて、以下でより詳細に説明する。
【0106】
トランザクションのシリアル化では、すべての入力が最初に現れ、次いですべての出力が現れる。入力および出力は、それらのインデックスの順序で現れる。以下の説明は、トランザクション符号化を考慮から外して、ロック解除スクリプトおよびロックスクリプトのみに焦点を当てる。ロック解除スクリプトに言及するとき、そのロック解除スクリプトに対応して参照されているアウトポイントにも言及し得ることに留意されたい。これは、関数への「入力」との混同を避けるためである。
【0107】
非代替トークン(NFT)の表現のようなトランザクションの単一のチェーンを考える。トークンの分割および結合はなく、トランザクション有向非巡回グラフ(DAG)が作成されると仮定する。また、追加可能な他の入力および出力はないと仮定する。
【0108】
5.2.表記
OPプレフィックスを有する事前定義されたオペコードをOP_CODEと表記し、プレフィックスのない事前定義されたオペコードの組合せを、例えばCODEと表記する。公開鍵などの変数に依存するオペコードまたはオペコードの組合せは、CODE(PK)のように括弧で表記される。オペコードの組合せの構成をCODE1+CODE2と表記する。
【0109】
5.3.プッシュトランザクションおよびその派生物
トランザクションTxn+1のsighashプリイメージmn+1が入力として与えられると、Txのロックスクリプト内のPUSHTXとラベル付けされたオペコードの組合せはTRUEと評価される。内部で(under the hood)、オペコードは、sighashプリイメージmn+1の署名を構築し、検証する。最後のオペコードOP_CHECKSIGは、対応する公開鍵を有する署名が入力された場合、TRUEと評価され、署名は、トランザクション自体から抽出されたトランザクションメッセージmn+1に対するものである。
【0110】
トランザクションメッセージmn+1は、Txn+1およびTx内の様々なフィールドから構築される。特に関心のある分野は次の通りである:
【数2】
【0111】
上付き文字Aは、トランザクションが補助トランザクションであることを示す。
【0112】
PUSHTXを含めることの意味は、現在のトランザクションTxn+1のsighashプリイメージがスタック上にあることが証明可能であるということである。これは、これらのフィールドのいずれかが、オペコードまたはシリアル番号の特定の組合せを含むなど、それらに対して適用される条件を有することができることを意味する。これらの条件が満たされない場合、支出トランザクションは有効ではない。
【0113】
dSHA256(Tx)=TxIDである場合、TxおよびTxID(mn+1からとられる)が入力として与えられると、Tx内のロックスクリプト内のオペコードPUSHTXPARENTの組合せはTRUEと評価され、ここで、dSHA256はダブルSHA256ハッシュ関数である。内部で、オペコードは、シリアル化されたトランザクションTxのハッシュを計算し、その結果をTxIDと比較する。ここで、トランザクションIDは、PUSHTXに入力されたsighashプリイメージ内のアウトポイントから抽出されている。これは、2つの値が同じである場合にTRUEと評価される。スタックにプッシュされるのが実際に現在のトランザクションの親トランザクションであることを確実にするために、PUSHTXPARENTは、これからアウトポイントを抽出するためのPUSHTXを含む。PUSHTXはすべてのアウトポイントを含むので、親トランザクションは、それが現れる入力のアウトポイントに対応しない場合であっても、プッシュされ得る。
【0114】
シリアル化されたトランザクションメッセージTxは、様々なフィールドから構築される。特に関心のある分野は次の通りである:
1.Txのロックスクリプト(複数可);および
2.アウトポイントTxIDn-1
【0115】
PUSHTXPARENTをPUSHTXと組み合わせて含めることの意味は、シリアル化された親トランザクション内の任意のフィールドが、上記のように、それらに対して適用される条件を有することができるということである。
【0116】
同様に、dSHA256(Txn-1)=TxIDn-1である場合、Txn-1およびTxIDn-1(Txから)が入力として与えられると、Tx内のロックスクリプト内のオペコードPUSHTXGRANDPARENTの組合せはTRUEと評価される。PUSHTXPARENTおよびPUSHTXと同様に、Txは、これが実際に祖父母トランザクションであることを確実にするためにPUSHTXPARENTに与えられる入力である。これは、リンクがPUSHTXPARENT、PUSHTXGRANDPARENTなどを介して反復的に行われる限り、任意の祖先トランザクションをプッシュするために繰り返すことができる。
【0117】
5.4.SHA256ハッシュ関数
ハッシュ関数は、任意のサイズmのデータを固定サイズのデータにマッピングする。入力データが447ビットよりも長い場合、SHA256ハッシュ関数の実行は、
【数3】
を使用して、圧縮関数CF(■,■)によってデータを反復的に処理する。圧縮関数は、以下の方法でSHA256(m)を計算するために使用される。
1.パディングされたプリイメージPI=m||padを計算する。ここで、padは、長さが512ビットの倍数であることを保証するメッセージ上のパディングである。
2.PIを、サイズ512ビットのl個のブロックに分割し、PI=m||m||…||mとする。
3.mid=CF(m,IV)を計算する。ここで、IVは所定の初期化ベクトルである。
4.mid=CF(m,mid)を計算する。
5.プリイメージ全体が処理されるまで、512ビットの各j番目のブロックmid=CF(m,midj-1)を続ける。
6.CF(m,midl-1)=SHA256(m)を出力する。
【0118】
上記のステップの計算は、j番目の反復まで実行され、停止され得る。残りのプリイメージPPI=mj+1||…||mおよびミッドステートmid=CF(m,midj-1)を記憶することができ、計算は後で続けることができる。さらなる「部分的SHA」計算は、h=partialSHA256(PPI,mid)と表記され、SHA256(m)と同じものを出力する。
【0119】
5.5.オペコードにおける部分的SHA256
最初のj回の反復の計算は、オフチェーンで実行される。最後の(l-j)回の反復は、スクリプトで実行され、オペコードでの計算の実装を必要とする。これらのオペコードPARTIALSHA256は、h=partialSHA256(PPI,mid)である場合、hならびに残りのプリイメージPPIおよびミッドステートmidが入力として与えられるとTRUEを返す。内部で、オペコードは、PPIおよびmidが入力として与えられると、SHA256ハッシュ関数の残りの反復を計算する。この結果をhと比較する。それらが同じである場合、このオペコードのセットはTRUEを返す。
【0120】
このケースでは、ハッシュされ、所与のTxIDと比較されるシリアル化されたトランザクションの部分的SHA256を計算することとなる。上述したように、入力は、シリアル化されたトランザクションにおいて最初に現れる。これは、部分的SHA256計算を使用して、PUSHTXPARENTまたはPUSHTXGRANDPARENTへの入力として必要とされるロック解除スクリプトにおけるシリアル化されたトランザクションの第1の入力を編集することができることを意味する。
【0121】
部分的SHA256を利用して、シリアル化されたトランザクションの第1のロック解除スクリプトを編集する。上記の表記を乱用して、第1の入力の終わりまでのSHA256ハッシュ関数の最初のj回の反復の計算を意味するようにCF(usn,0,IV)と書く。言い換えると、このように書き込むことは、usn,0がわずか512ビット(および、SHA256ハッシュ計算の最初の反復)であることを意味しない。もっと長くなる可能性が高い。
【0122】
5.6.課題1:実行と伝搬の証明
最初に考察する問題は、いわゆる「バック・トゥ・ジェネシス」問題である。これは、トークンのバリデータが、受け取ったトークントランザクションが発行トランザクションに戻るトランザクションのチェーンの一部であることを証明したい場合に生じる。
【0123】
PUSHTXを単独で使用することにより、発行者は、任意の子トランザクションを、それらの子、孫などのいずれかを含む特定のフォーマットに強制することができる。例えば、それらは、シリアル番号が将来の各トランザクションに含まれることを必要としてもよい。しかしながら、バリデータは、発行トランザクションまで遡ってすべてのトランザクションを明示的に妥当性確認しなければならない。これにより、転送のたびにプルーフ長および妥当性確認時間が増加する。
【0124】
各トランザクションをジェネシスまで遡って妥当性確認する必要性を回避するために、信頼できるトークンプロセッサが各転送の証人(witness)となる可能性がある。これは、バック・トゥ・ジェネシス問題を解決するが、性能のボトルネックおよびセキュリティリスクが生じるためユーザビリティが低下する。また、通信およびインフラストラクチャのコストも発生する。追加的に、これは、マイナー妥当性確認済みトークンを目指すという目的を損なう。信頼できるトークンプロセッサは、スクリプトの複雑さおよびPUSHTXのコストを除去して、転送全体を処理することもできる。
【0125】
図5に示すように、1つの入力および1つの出力を含むトランザクションの単純なチェーンを考える。
【0126】
Txn-1およびTxのすべて(このケースでは1つ)のロックスクリプトが同一である場合、すなわち、Tx内の第1のロックスクリプトがTxn-1内の第1のロックスクリプトと同じである場合、sighashプリイメージmn+1が入力として与えられるとTRUEと評価されるPROOFOFEXECUTIONを定義する。オペコード内の同じ関数がlsおよびlsn-1で実行されることを保証するためにスクリプトスニペットが必要であるので、この実行証明(proof-of-execution)にラベル付けする。ロックスクリプトが公開鍵などの変数を含む場合、それは同じままであるとは期待されず、無視される。オペコードPROOFOFEXECUTIONは、以下を含む:
1.mn+1がトランザクションTxn+1のsighashプリイメージである場合、mn+1を入力としてとり、TRUEを出力するPUSHTX。
2.TxがTxIDのハッシュプリイメージである場合、Txおよびmn+1からのアウトポイントTxIDをとり、TRUEを出力するPUSHTXPARENT。
3.Txn-1がTxIDn-1のハッシュプリイメージである場合、TxからTxn-1およびTxIDn-1をとり、TRUEを出力するPUSHTXGRANDPARENT。
4.Txn-1およびT内のロックスクリプトが同じオペコードを含む場合、Txn-1からのlsn-1内のオペコードをTxからのls内のオペコードと比較し、TRUEを出力するオペコード。
5.親トランザクションおよび祖父母トランザクションに1つの入力および1つの出力のみが存在することを保証するオペコード。
【0127】
したがって、PROOFOFEXECUTIONを含むスクリプトは、(mn+1,Tx,Txn-1)によってロック解除される。TxおよびTxn+1のすべて(このケースでは1つ)のロックスクリプトが同一である場合、すなわちTx内の第1のロックスクリプトがTxn+1内の第1のロックスクリプトと同じである場合などに、sighashプリイメージmn+1が入力として与えられるとTRUEと評価されるPROOFOFPROPAGATIONを定義する。オペコード内の同じ関数がlsで実行され、lsn+1で実行されることとなることを保証するためにスクリプトスニペットが必要であるので、伝搬証明(proof-of-propagation)にラベル付けする。PROOFOFEXECUTIONと同様に、ロックスクリプトが公開鍵のような変数を含む場合、それは無視される。オペコードPROOFOFPROPAGATIONは、以下を含む:
1.mn+1がトランザクションTxn+1のsighashプリイメージである場合、mn+1を入力としてとり、TRUEを出力するPUSHTX。
2.TxがTxIDのハッシュプリイメージである場合、Txおよびmn+1からのアウトポイントTxIDをとり、TRUEを出力するPUSHTXPARENT。
3.Txからのls内のオペコードをmn+1からのlsn+1内のオペコードと比較し、第1のロックスクリプト内のオペコードが同じである場合にTRUEを出力するオペコード。
4.子トランザクションに1つの入力および1つの出力のみが存在することを保証するオペコード。
【0128】
したがって、PROOFOFPROPAGATIONを含むスクリプトは、(mn+1,Tx)によってロック解除される。
【0129】
【数4】
ここで、PROOFOFEXECUTIONはn≧3の場合に実行される。どのようにこのケースをキャプチャ(capture)するかについては後で詳細に説明する。
【0130】
すべてのn≧3に対するTx内のロックスクリプトlsがsである場合、ロック解除スクリプトは、us=(mn+1,Tx,Txn-1)であり、ここで、以下の通りである:
n+1=Txn+1のsighashプリイメージ、
Tx=シリアル化された親トランザクション、および
Txn-1=シリアル化された祖父母トランザクション。
【0131】
n=2の場合、ロック解除スクリプトは、us=(m,Tx)である。Txが発行であるので、Txには関連するロックスクリプトはない。Txは、このロックスクリプトが現れる最初のトランザクションである。
【0132】
ls内のオペコードsの組合せは、ロックスクリプトls内のオペコードsがlsn-1およびlsn+1にも含まれることを証明することに留意されたい。
【0133】
PROOFOFEXECUTIONおよびPROOFOFPROPAGATIONは両方とも、それら自身も含むsの存在を探す。言い換えると、オペコードのこれらの両方のセットを含むロックスクリプトは、オペコードの両方のセットへの入力の一部である。
【0134】
Txn+1が上記のオペコードを含む場合、Txn+1は発行トランザクションTxにリンクされなければならないことが帰納法によって証明される。
【0135】
命題:
それぞれが少なくとも1つの入力および1つの出力を有するTxからTxまでのトランザクションのセットを考える。Txは以下の条件を満たすとする:
・ Txの入力のうちの1つは、上記で定義されたように、ロックスクリプトlsにsを含むTxn-1の出力を使用する、
・ Txはマイナーによって受け入れられる、
すると、Txが、発行トランザクションTxにリンクされる。
【0136】
証明:
この主張は帰納法によって証明される。n=2のとき、Txがマイナーによって受け入れられると、それがTxのアウトポイントによってTxにリンクされることは明らかである。基本のケースn=3:
Txにはロックスクリプトls=sが含まれており、ロック解除スクリプトus=(m,Tx,Tx)はTx内にある。Txがマイナーによって受け入れられる場合、それは、sの使用条件により、Txの孫でなければならない。したがって、発行トランザクションにリンクされる。
n番目のケース:
n番目のケースが真であると仮定する。
n+1番目のケース:
ロックスクリプトls=sを含む出力を有するトランザクションTxが与えられると、Txn+1がマイナーによって受け入れられる場合、lsを有する出力を使用するトランザクションTxn+1が、トランザクションのチェーンを介して発行トランザクションTxにリンクされることが証明される。以下の3つの条件がある場合:
・ ls=sであること、
・ Txn+1がTxのその出力を使用すること、および
・ Txn+1がマイナーによって受け入れられること、
出力をロック解除するためには、us=(mn+1,Tx,Txn-1)でなければならない。ls=sであるので、PROOFOFEXECUTIONによりlsn-1=sであり、PROOFOFPROPAGATIONによりlsn+1=sでなければならない。したがって、Txn-1は:
・ ロックスクリプトlsn-1=sを含み、
・ これは、Txによって使用され(usがlsを使用するためのリンクが必要である)、そして、
・ Txがマイナーによって受け入れられる(Txn+1がそうである場合)。
【0137】
したがって、TxはTxにリンクされる。また、Txn+1はTxの子であるので、Txにリンクされる。したがって、Txn+1はTxにリンクされる。
【0138】
図6に示すように、チェーン内の各トランザクションがすべての前のトランザクションを含み、トランザクション肥大化問題が発生することを証明する。
【0139】
命題:
上記の主張を満たすトランザクションTxからTxのセットを考える。n番目のトランザクションTxは、発行Txまで遡ってすべてのトランザクションを含む。
【0140】
証明:
トランザクションTxのロック解除スクリプトは、Txn-1のロックスクリプト内のオペコードsによって必要とされるように、その親トランザクションおよび祖父母トランザクションを含む。これは、すべてのn≧3に当てはまる。したがって、所与のTxについて、その親および祖父母もまた、それぞれの親および祖父母を含む。これは、これらのトランザクションの各々に当てはまり、したがって、Txは、発行まで遡ってすべてのトランザクションを含む。
【0141】
5.7.課題2:部分的SHA256ハッシュ関数
問題1を解く際、PROOFOFPROPAGATIONおよびPROOFOFEXECUTIONを実行するためには、Txのls、TxのアウトポイントのトランザクションID TxIDn-1、および親トランザクションおよび祖父母トランザクションからのusへの入力におけるTxn-1のlsn-1のみが必要である。親トランザクションおよび祖父母トランザクションのロック解除スクリプトは不要である。トランザクションのこれらの部分をどのように編集するかについて考える。
【0142】
図7に示すような、2つの入力および2つの出力を有するトランザクションのチェーンを考える。追加の入力および出力は、P2PKH(PK)スクリプトに対応する。第1のロック解除スクリプトが編集され、PROOFOFEXECUTIONが第2のアウトポイントを使用して祖父母トランザクションを依然として利用できるようにするために、第2の入力および出力を導入する。以下の解決策を説明した後、n番目のトランザクションが発行までのすべてのトランザクションは含まなくなる理由を明示的に示す。大まかに言えば、これは、前のトランザクションに関する情報を搬送するトランザクションの一部であるロック解除スクリプトデータが伝搬されないためである。(TxIDと比較するために)トランザクションのハッシュをオフチェーンで計算することによって、データが伝搬されることを防止する。
【0143】
TxID=SHA256(partialSHA256(PPI,mid))である場合、Txn+1における第2のアウトポイントからのTxIDならびにPPIおよびmidが入力として与えられるとTRUEと評価されるPUSHTXPARTIALPARENTを定義する。
【0144】
TxIDn-1=SHA256(partialSHA256(PPIn-1,midn-1))である場合、Txにおける第2のアウトポイントからのTxIDn-1ならびにPPIn-1およびmidn-1が入力として与えられるとTRUEと評価されるPUSHTXPARTIALGRANDPARENTを定義する。
【0145】
上述したように、部分的SHA256計算は、それぞれこれらの2つのオペコードにおける親トランザクションおよび祖父母トランザクションの第1の入力の編集を可能にする。したがって、入力usn-1,0およびusn-2,0は、usn,0に現れない。次いで、PPIは、第2のロック解除スクリプトと、親トランザクションの両方のロックスクリプトとを含む。PPIn-1は、祖父母トランザクションの2つのロックスクリプトを含む。親トランザクションの第2のロック解除スクリプトは、祖父母トランザクションIDの抽出を可能にする。ロックスクリプトは、PROOFOFPROPAGATIONおよびPROOFOFEXECUTIONの実行への入力として抽出される。
【0146】
それぞれPUSHTXPARENTおよびPUSHTXGRANDPARENTの代わりに、PUSHTXPARTIALPARENTおよびPUSHTXPARTIALGRANDPARENTを含むようにPROOFOFPROPAGATIONおよびPROOFOFEXECUTIONを再定義する。再定義とは、スクリプトが、前述のように、TxおよびTxn-1ではなくPPIまたはPPIn-1から必要なロックスクリプト内のオペコードを抽出することを意味する。したがって、PROOFOFEXECUTIONを含むスクリプトは、(mn+1,PPI,mid,PPIn-1,midn-1)によってロック解除され、PROOFOFPROPAGATIONを含むスクリプトは、(mn+1,PPI,mid)によってロック解除される。
【0147】
追加的に、PROOFOFPROPAGATIONおよびPROOFOFEXECUTIONは、ロックスクリプトの1つのセットだけではなく、ロックスクリプトの複数のセット内のオペコードを比較するオペコードを含むように再定義される。前述のように、それは、Tx内の第1のロックスクリプト内のオペコードを、それぞれ、Txn+1またはTxn-1の第1のロックスクリプト内のオペコードとそれぞれ比較する。ここで、これらのトランザクションにおける第2のロックスクリプトのセットも比較する。これらのオペコードは、第1のロックスクリプトのセットが同じオペコードを含み、第2のロックスクリプトのセットが同じオペコードを含む場合、TRUEを返す。これはまた、各トランザクションにおいて1つの入力および出力をチェックするのではなく、各トランザクションに2つの入力および出力のみがあることを保証することを意味する。これらのオペコードのさらなる参照は、これらの新しい定義を参照する。再定義されたオペコードでオペコードのセットをsとなるように定義する:
【数5】
【0148】
ロックスクリプトlsn,0=sを、すべてのnについて、usn,0=(mn+1,mid,PPI,midn-1,PPIn-1)でロック解除されるように定義し、ここで、以下の通りである:
n+1=Txn+1のsighashプリイメージ、
mid=CF(usn-1,0,IV)、
PPI=usn-1,1||lsn,0||lsn,1||pad
midn-1=CF(usn-2,0||usn-2,1,IV)、
PPIn-1=lsn-1,0||lsn-1,1||padn-1
【0149】
各ロック解除スクリプトは、これらの5つの構成要素のみを含み、これらは、固定長を有することが証明される。肥大化につながるロック解除スクリプトusn-1,0、usn-2,0は、部分的SHA256計算で編集されている。
【0150】
命題:
Txを、2つの入力および2つの出力を有する上記で定義されたトランザクションチェーンのトランザクションとすると、Txのサイズは、すべてのnに対して定数未満であり、すなわち、len(Tx)≦constである。
【0151】
証明:
len(Tx)がnに依存しないことを簡単に示す。シリアル化されたトランザクションおよびsighashプリイメージでは、ほとんどのフィールドが、そのサイズに関して明確な境界を有する。
【0152】
Sighashプリイメージ:
ロックスクリプトおよびロック解除スクリプトを除くと、上限は以下となる:
4+32+32+32+4+9+8+4+32+4+4=165バイト。
【0153】
本発明の解決策ではロックスクリプトを検査する必要があるので、最後の32バイト(ハッシュ関数の出力である)をそのプリイメージで置き換える必要があることに留意されたい。これは、ロックスクリプトを除き、上限が以下であることを意味する:
4+32+32+32+4+9+8+4+8vout+4+4=149バイト。ここで、本願のケースでは、voutは値2を有する。9は、VarIntであり、したがって、1~9バイトのいずれかであり得る。使用されているロックスクリプト(親ロックスクリプトlsn-1)および現在のトランザクション内のロックスクリプトlsn,voutを除外した。
【0154】
明示的に、ロック解除スクリプトおよびロックスクリプトは、以下の表に与えられるサイズを有する。
【表1】
【0155】
ロックスクリプトおよびロック解除スクリプトを除いて、シリアル化されたトランザクションの上限は、(4+9+9+4+vin(32+4+9+4)+vout(8+9))=158バイトとなる。
ここで、vinおよびvoutは、それぞれ入力および出力の数であり、それぞれ値2を有する。9バイトの各々がVarIntフィールドを表すことに留意されたい。これらは、1バイトから9バイトの間で指定でき、入力または出力ごとに異なり得る。
【0156】
ロックスクリプトおよびロック解除スクリプトを含めて、上記の表を使用すると、シリアル化されたトランザクションのサイズは、len(Tx)=711+5len(s)+len(midn-1)+len(midn-2)バイトになる。
【0157】
トランザクションTx内のすべてのフィールドは、スクリプトsの長さと、親トランザクションおよび祖父母トランザクションのミッドステートの長さとに依存し、これらは両方とも一定長である。したがって、nに依存しないトランザクションのサイズの上限が得られる。
【0158】
備考:ロック解除スクリプトには重複があり、sが4回出現する。これは、それを入力として一度とり、データを複製することによって軽減され得る。その結果、サイズ(711+2len(s)+len(midn-1)+len(midn-2))バイトを有するシリアル化されたトランザクションが得られる。
【0159】
現在のトランザクションから親トランザクションおよび祖父母トランザクションの第1のロック解除スクリプトを編集することによって、n番目のトランザクションTxは、発行Txまでのすべてのトランザクションは含まなくなる。図8に示されるように、第1の入力には、第2のロック解除スクリプトおよび2つの前のトランザクションの2つの出力のみが含まれ、前のトランザクションに関するいかなる情報も含まれていない。
【0160】
トランザクション肥大化問題を再導入することになるので、usn-1,0およびusn-1,1に対応するアウトポイントをスワップすることはできないことに留意されたい。usn,0で編集されるためには、前のトランザクションを含むロック解除スクリプトusn-1,0が最初に現れなければならない。
【0161】
肥大化問題を解決した一方で、次のような自己参照問題が発生した。圧縮関数の各ラウンドは64バイトを処理し、オペコードで書かれなければならない。関数CF()は、既存のオペコードに基づいて64バイトより多くを必要とする。
【0162】
ロックスクリプトlsn,0は、midおよびPPIを入力としてとる、partialSHA256()として定義される複数の圧縮関数ラウンドを含む。これは、オペコード内のpartialSHA256()が、自分自身を(オペコード内に)含むPPIを処理しなければならないことを意味する。自己参照問題を説明するために、65バイトで実装することができる最良のシナリオを考える。PPIは、65バイトの長さを有するように、最初はSHA256()を1ラウンドのみを含むと仮定する。
【0163】
PPIの65バイトを処理するためには、PPI内のオペコードにSHA256()が2ラウンドなければならない。したがって、PPIの長さは130バイトに増加する。この時点で、PPIを処理するためにはオペコード内にSHA256()が3ラウンドなければならず、すなわち、PPIが実際には195バイトである。自己参照問題があることはすぐに分かる。
【0164】
PUSHTXPARENTの長さはプリイメージ長に依存して変化しないので、これは問題ではない。オペコードOP_HASH256は、任意の長さのプリイメージを処理することができ、依然として単一のオペコードを使用して計算することができる。
【0165】
5.8.解決策:補助トランザクション
図4に示されるような、Txn-1の第1の出力を使用し、Txの第1の入力によって参照される補助トランザクションを導入する。補助トランザクション内のロックスクリプトは、Txではなくオペコード内の部分的SHA256ハッシュ関数を含む。このトランザクションを含めた結果、部分的SHA256ハッシュ関数がそれ自体への入力として使用されることはない。
【0166】
dSHA256(Tx )=TxID の場合、mn+1およびTx を入力として与えられると、オペコードPUSHTXAUXILIARYのセットはTRUEと評価され、ここで、TxID は、mn+1の第1のアウトポイントから抽出される。
【0167】
オペコードPUSHTXAUXILIARYは、以下を含む:
1.mn+1を入力としてとり、mn+1がトランザクションTxn+1のsighashプリイメージである場合、TRUEを出力するPUSHTX
2.mn+1からTx およびTxID をとり、Tx がTxID のハッシュプリイメージである場合、TRUEを出力するPUSHTXPARENT
【0168】
したがって、PUSHTXAUXILIARYを含むスクリプトは、(mn+1,Tx )によってロック解除される。
【0169】
スクリプトsを以下のように定義する:
【数6】
【0170】
図1に示されるようなls =sを有するロックスクリプトは、usn,0=(mn+1,Tx ,mid,PPI,midn-1,PPIn-1)によってロック解除され、ここで、以下の通りである:
n+1=Txn+1のsighashプリイメージ、
Tx =シリアル化された補助トランザクション、
mid=partialSHA256(usn-1,0,IV)、
PPI=usn-1,1||lsn,0||lsn,1||pad
midn-1=partialSHA256(usn-2,0||usn-2,1,IV)、および
PPIn-1=lsn-1,0||lsn-1,1||padn-1
【0171】
また、hash(ls )=hash(s)である場合、ls が入力として与えられるとTRUEと評価されるオペコードHASHPUZZLEのセットを定義し、ここで、hash(s)は、HASHPUZZLE内の固定定数である。
【0172】
スクリプトsを以下のように定義する:
【数7】
【0173】
すべてのnに対するロックスクリプトlsn,0をsであると再定義すると、ロック解除スクリプトは、us =m であり、ここで、m は、Tx のsighashプリイメージである。
【0174】
このロックスクリプトは、ls が上記で定義されたオペコードを含むことを強制する。sがlsn,0内のハッシュパズルをロック解除することを強制することによって、PROOFOFEXECUTIONおよびPROOFOFPROPAGATIONの定義を変更する必要はなく、補助トランザクションは、明示的にチェックしなくても各転送において正しいフォーマットを有する。すべての補助トランザクションは自動的に強制される。
【0175】
最後に、ロックスクリプトlsn,1は、前述のように、P2PKH(PK)である。
【0176】
部分的SHA256ハッシュ関数は、部分プリイメージPPIに含まれることはない。これは、OP_HASH256に入力されるls に含まれる。新たな問題が発生することなく自己参照問題が解決された。
【0177】
5.9.プロトコルを開始
発行トランザクションは、祖父母トランザクションを有さない。これは、sへの修正を必要とする特殊なケースを導入する。発行トランザクションは、少なくとも2つの方法で識別され得る:
1.発行者によって所有される公開鍵からトランザクションに関する署名を妥当性確認する。
2.各トークンに一意のトークンID(UTID)を与える。
【0178】
特定の発行者の導入を避けるために、UTIDが発行トランザクションTxIDのTxIDであると定義される第2の方法を選択する。Txn+1内のUTIDがTx内に存在するとき、mn+1が入力として与えられるとTRUEと評価されるオペコードUTIDPRESENTを定義する。また、Tx内のUTIDとTxIDへの第2のアウトポイントからのTxIDn-1とが等価である場合、mn+1が入力として与えられるとTRUEと評価されるオペコードDEFINEUTIDも定義する。これは、UTID=TxIDであるので、n=2のときのみ当てはまることに留意されたい。これは、UTIDがTxに存在しないことを意味する。その代わりに、それは、すべてのn≧2に対してTxのロックスクリプトに存在することが強制される。
【0179】
また、usn,1へのアウトポイントおよびus へのアウトポイントが与えられると、それらが同じTxIDを含む場合に、TRUEと評価されるSAMEOUTPOINTも定義する。
【0180】
スクリプトsを以下のように定義する:
【数8】
【0181】
UTIDPRESENTが実行され、1を出力する場合(すなわち、n>2のとき)、PROOFOFPROPAGATIONを含む「if」ステートメントが実行される。UTIDPRESENTが実行され、0を出力する場合(すなわち、n=2のとき)、DEFINEUTIDを含む「else」ステートメントが実行される。
【0182】
ロック解除スクリプトusn,0=(mn+1,Tx ,mid,PPI,midn-1,PPIn-1)によってロック解除される図1に示されるようなls =sを用いてロックスクリプトを精緻化する。これは、他のロック解除スクリプトとともに、前のロック解除スクリプトから変化しないままである。ロックスクリプトに対する唯一の変更は、以下の通りである:
・ lsn,0は、ハッシュパズルの固定データとしてhash(s)ではなくhash(s)を含む;
・ OP_RETURN<UTID>を終わりにさらに含むlsn,1
PROOFOFPROPAGATIONおよびPROOFOFEXECUTIONの両方におけるPUSHTXおよびPUSHTXPARTIALPARENTのように、オペコードの各セットに含まれるオペコードとの重複があることに留意されたい。これらは、同じ機能を利用し、効率を向上させるための任意の必要な情報を複製することができる。
【0183】
親トランザクションの2つの出力TxIDn-1||0、TxIDn-1||1がそれぞれ補助トランザクションおよび現在のトランザクションで使用されることを強制する。この方法で使用されるように出力が強制されない場合、トランザクションチェーンをフォークしても、プロトコルが正しく守れられているように見える可能性がある。これにより、攻撃者が第2の出力なしに第1の出力を容易に使用することができる攻撃ベクトルが導入される可能性がある。
【0184】
現状では、Txの第2の出力とともに使用されなければならないTx の出力がロックされるので、第1の出力なしに第2の出力を使用することによってトークンをバーンする(burn)ことが可能である。これは、(オペコード内に部分的SHA256ハッシュ関数を含む)補助トランザクションが第2のロック解除スクリプトの一部となるので、自己参照問題を再導入しない限りスクリプト内で防止することはできない。したがって、部分的SHA256ハッシュ関数は、それ自身をオペコードにおいて処理しなければならず、これは自己参照問題である。Txの第2の出力を使用するためには署名が必要とされるので、トークンがこのようにしてバーンされた場合は、署名がそれを証明することとなる。
【0185】
また、第2の出力で補助トランザクションを使用することによってトークンをバーンすることも可能であるが、これは、トランザクションサイズの増大および部分的SHA256の自己参照問題を再導入する。しかしながら、本発明の解決策は、PROOFOFEXECUTIONがmn+1内の第2のアウトポイントのみからアウトポイントを抽出することを必要とし、第2のアウトポイントが補助トランザクションでない場合にのみトランザクションが有効になるようにすることで、これを防止する。
【0186】
前述したように、mn+1における第2のアウトポイントからアウトポイントを抽出することをPROOFOFEXECUTIONに要求することによって、Tx のアウトポイントがTxの第2のアウトポイントとともに使用されなければならないことを強制する。これは、TxおよびTxn-1内のロックスクリプトが、同じオペコードのセットと発行トランザクションのTxIDとして定義された同じUTIDとを含む場合にのみ、Tx のロックスクリプト内のオペコードがTRUEを返すからである。これは、第2のアウトポイントがTxの第2の出力であるときのみ当てはまり、任意の他のアウトポイントは、同じオペコードとUTIDとを含まない。したがって、Tx の出力は、Txの第2の出力とともに使用されなければならず、そうでなければ無効になる。
【0187】
スクリプトsは、上記で説明した補助ロックスクリプトの一例である。スクリプトsは、上記で説明した一次ロックスクリプトの一例である。下付き文字Aは、一次ロックスクリプトが補助トランザクションに対して条件を適用することを意味する。
【0188】
5.10.トークン転送プロトコル
発行者Iによるアリス103aへのトークンの発行と、次いで、最初にボブ103bへ転送し、そのボブ103bがチャーリー103cへ転送する2回のトークンの転送とを考える。
1.発行者は、Txを生成し、ここで、ls1,0=sおよびls1,1=P2PKH(PK)は、セクション3.3において定義され、トークンをアリスの公開鍵に支払う。
2.アリスは、セクション3.4で定義されるような補助トランザクションTx と、セクション3.3で定義されるようなTxとを生成し、これらをボブに送信する。
3.ボブは、以下のステップを使用してトランザクションを妥当性確認する。
4.ボブは、Tx およびTxを生成し、チャーリーに送信する。
5.チャーリーは、以下のステップを使用してトランザクションを妥当性確認する。
【0189】
さらなる転送はチャーリーへの転送と同じ方法で実行される。
【0190】
5.11.n回の転送のためのバリデータステップ
1.トランザクションTxおよびTxn-1のマークルプルーフを受信する。Tx内のデータを使用してTxIDn-1を計算し、マークルプルーフが有効であることを確認する。
2.Txn-1内のハッシュパズルから補助ロックスクリプトのハッシュを抽出し、それがこれの周知のハッシュに対応することを検証する。
3.UTIDを抽出し、発行者からの有効なUTIDのリストを用いて、または発行トランザクション上の署名を用いて、それが署名されていることを確認する。
【0191】
バリデータが実行するステップはいくつかあるが、これは、正しいマーキングを有する場合にのみ紙幣を受け入れること、または正しい公開鍵に対するP2PPKを含む場合にのみブロックチェーントランザクションを受け入れることなど、内部での現金の任意の交換と同様であることに留意されたい。これは、正しく発行されたトランザクションが与えられたときのマイナー妥当性確認済みトークンであり、いかなる転送も、バリデータからの努力なしに、常に別の有効なトークンを生成しなければならない。
【0192】
5.12.プロトコルの詳細な例
発行者Iによるアリス103aへのトークンの発行と、最初にボブ103bへ転送し、そのボブ103bがチャーリー103cへ転送する2回のトークンの転送とを考える。さらなる転送はチャーリー103cへの転送と同じ方法で実行される。
【0193】
発行
1.発行者は、図9のようなトークンを表す、署名を必要とする任意の出力を使用するトランザクションを生成し、これをアリスに送信する。このトークンのUTIDはTxIDである。このトランザクションは、アリス103aが出力をロック解除することを要求するP2PKH出力を含む。他方の出力は、補助トランザクションが出力内に正しい関数を含むことを強制する。
【0194】
トークン転送
2.アリス103aは、図10に示されるように、Txの第1の出力を使用する補助トランザクションを生成する。このトランザクションは、sおよびUTIDが次のトランザクションに存在し、Txから出力されたP2PKHと同じトランザクションにおいてのみ使用されることを強制する。
3.このトークンをボブ103bに転送するために、アリス103aは、図11に示すトランザクションを生成して送信する。ボブ103bは、(上記で詳述した)検証に合格した場合、これを受け入れる。
4.ボブは、図12に示されるように、Txの第2の出力を使用する補助トランザクションを生成する。
5.このトークンをチャーリー103cに転送するために、ボブ103bは、図13に示すトランザクションを生成してチャーリー103cに送信する。チャーリー103cは、(上記で詳述した)検証に合格した場合、これを受け入れる。
【0195】
さらなる転送は、図12および図13のトランザクションと同じフォーマットで、同じ方法で実行される。
【0196】
n番目のトークン転送の一般的なフォーマットを図14に示す。補助トランザクションTx n-1図15に示される。
【0197】
6.さらなる備考
開示される技法の他の変形形態またはユースケースは、本明細書の開示が与えられると、当業者には明らかになり得る。本開示の範囲は、説明された実施形態によって限定されず、添付の特許請求の範囲によってのみ限定される。
【0198】
例えば、上記のいくつかの実施形態は、ビットコインネットワーク106、ビットコインブロックチェーン150およびビットコインノード104に関して説明されている。しかしながら、ビットコインブロックチェーンはブロックチェーン150の1つの特定の例であり、上記の説明は一般に任意のブロックチェーンに適用されてもよいことが理解されるであろう。すなわち、本発明はビットコインブロックチェーンに限定されるものではない。より一般的には、ビットコインネットワーク106、ビットコインブロックチェーン150およびビットコインノード104への上記の任意の参照は、それぞれブロックチェーンネットワーク106、ブロックチェーン150およびブロックチェーンノード104への参照に置き換えられてもよい。ブロックチェーン、ブロックチェーンネットワークおよび/またはブロックチェーンノードは、上記で説明したようなビットコインブロックチェーン150、ビットコインネットワーク106およびビットコインノード104の説明された特性の一部またはすべてを共有してもよい。
【0199】
本発明の好ましい実施形態では、ブロックチェーンネットワーク106はビットコインネットワークであり、ビットコインノード104は、ブロックチェーン150のブロック151を作成、発行、伝搬、および記憶する説明した機能を少なくともすべて実行する。これらの機能のすべてではなく1つまたはいくつかのみを実行する他のネットワークエンティティ(またはネットワーク要素)が存在し得ることは除外されない。すなわち、ネットワークエンティティは、ブロックを作成および発行することなしに、ブロックを伝搬および/または記憶する機能を実行し得る(これらのエンティティが好ましいビットコインネットワーク106のノードとみなされないことを想起されたい)。
【0200】
本発明の他の実施形態では、ブロックチェーンネットワーク106はビットコインネットワークでなくてもよい。これらの実施形態では、ノードが、ブロックチェーン150のブロック151を作成、発行、伝搬、および記憶する機能のうちの少なくとも1つまたはすべてではないがいくつかを実行してもよいことは除外されない。例えば、それらの他のブロックチェーンネットワーク上では、「ノード」は、ブロック151を作成および発行はするが、それらのブロック151を記憶および/または他のノードへの伝搬はしないように構成されたネットワークエンティティを指すために使用され得る。
【0201】
さらにより一般的には、上記の「ビットコインノード」104という用語へのいかなる言及も、「ネットワークエンティティ」または「ネットワーク要素」という用語と置き換えラレ絵、そのようなエンティティ/要素は、ブロックを作成、発行、伝搬、および記憶する役割の一部または全部を実行するように構成される。そのようなネットワークエンティティ/要素の機能は、ブロックチェーンノード104を参照して上記で説明したものと同じ方法でハードウェアに実装されてもよい。
【0202】
上記の実施形態は、単なる例として説明されていることが理解されるであろう。より一般的には、以下のステートメントのうちの任意の1つまたは複数による方法、装置、またはプログラムが提供され得る。
【0203】
<ステートメント1>ブロックチェーントランザクションのチェーン全体にわたって伝搬されるようにロックスクリプトを強制するコンピュータ実装方法であって、方法は、第1の当事者によって実行され、
第1の出力を含む第1の一次トランザクションを生成するステップであって、第1の出力は、一次ロックスクリプトを含み、一次ロックスクリプトは、第1の補助トランザクションの第1のロック解除スクリプトによって実行されると、i)第1のロック解除スクリプトが、第1の補助トランザクションに基づいて生成された第1のメッセージを含むことを検証し、ii)第1のメッセージに基づいて、第1の補助トランザクションの第1の出力が補助ロックスクリプトを含むことを検証するように構成され、補助ロックスクリプトは、第2の一次トランザクションの第1のロック解除スクリプトによって実行されると、i)第2の一次トランザクションの第1のロック解除スクリプトが、第2の一次トランザクションに基づいて生成された第2のメッセージを含むことを検証し、ii)第2の一次トランザクションの第1のロック解除スクリプトが、第1の一次トランザクションの1つまたは複数のロックスクリプトを含む第1のデータ項目を含むことを検証し、iii)第2のメッセージおよび第1のデータ項目に基づいて、第2の一次トランザクションの第1の出力が一次ロックスクリプトを含むことを検証するように構成される、ステップを含む方法。
【0204】
<ステートメント2>第1の補助トランザクションを生成するステップであって、第1の補助トランザクションは、第1の一次トランザクションの第1の出力を参照し、第1のメッセージを含む第1の入力と、補助ロックスクリプトを含む第1の出力とを含む、ステップと
を含む、ステートメント1に記載の方法。
【0205】
<ステートメント3>一次ロックスクリプトは、補助ロックスクリプトのハッシュを含み、第1のメッセージは、候補補助ロックスクリプトを含み、第1の補助トランザクションの第1の出力が補助ロックスクリプトを含むことを上記検証することは、一次ロックスクリプトが候補補助ロックスクリプトをハッシュし、候補補助ロックスクリプトのハッシュが補助ロックスクリプトのハッシュと一致することを検証することを含む、ステートメント1またはステートメント2に記載の方法。
【0206】
<ステートメント4>第1の一次トランザクションは第2の出力を含み、補助ロックスクリプトは、第2の一次トランザクションの第1のロック解除スクリプトによって実行されると、iii)第1の一次トランザクションの第2の出力が第2の一次トランザクションの第2の入力によってロック解除されることを検証するように構成される、先行するステートメントのいずれかに記載の方法。
【0207】
<ステートメント5>補助ロックスクリプトは、第2の一次トランザクションの第1のロック解除スクリプトによって実行されると、iv)第2の一次トランザクションの第1のロック解除スクリプトが、第1の補助トランザクションを含む第2のデータ項目を含むことを検証するように構成され、第2の出力が第2の一次トランザクションの第2の入力によってロック解除されることを上記検証することは、a)第2のメッセージから、第2の一次トランザクションの第2の入力によってロック解除された第2の出力のそれぞれのトランザクション識別子を抽出することと、b)第2のデータ項目から、第1の補助トランザクションの第1の入力によってロック解除された第1の出力のそれぞれのトランザクション識別子を抽出することと、c)ステップa)の間に抽出されたそれぞれのトランザクション識別子が、ステップb)の間に抽出されたそれぞれのトランザクション識別子と一致することを検証することとを含む、ステートメント4に記載の方法。
【0208】
<ステートメント6>第1の一次トランザクションは、ハッシュ関数を第1の一次トランザクションに適用することによって生成するそれぞれのトランザクション識別子を有し、第2の一次トランザクションの第1のロック解除スクリプトは、第3のデータ項目を含み、第3のデータ項目は、第1の一次トランザクションに適用されたハッシュ関数のミッドステートを含み、補助ロックスクリプトは、第2の一次トランザクションの第1のロック解除スクリプトによって実行されると、iv)第1のデータ項目および第3のデータ項目に基づいて候補トランザクション識別子を生成し、候補トランザクション識別子が第1の一次トランザクション識別子のそれぞれのトランザクション識別子と一致することを検証するように構成される、先行するステートメントのいずれかに記載の方法。
【0209】
<ステートメント7>補助ロックスクリプトは、第2の一次トランザクションの第1のロック解除スクリプトによって実行されると、v)第2の一次トランザクションが特定のトランザクション識別子を含むことを検証するように構成される、先行するステートメントのいずれかに記載の方法。
【0210】
<ステートメント8>第2の一次トランザクションを生成するステップであって、第2の一次トランザクションは、第1の補助トランザクションの第1の出力を参照し、第2のメッセージおよび第1のデータ項目を含む第1の入力を含み、第2の一次トランザクションは、一次ロックスクリプトを含む第1の出力を含む、ステップ
を含む、先行するステートメントのいずれかに記載の方法。
【0211】
<ステートメント9>第1の補助トランザクションおよび第2の一次トランザクションを第2の当事者に送信するステップを含む、先行するステートメントのいずれかに記載の方法。
【0212】
<ステートメント10>第1の一次トランザクションがブロックチェーンのブロックに記録されたことを証明するためのマークルプルーフを第2の当事者に送信するステップを含む、ステートメント9に記載の方法。
【0213】
<ステートメント11>一次ロックスクリプトおよび/または補助ロックスクリプトは、トークンの所有権に関するデータを含む、先行するステートメントのいずれかに記載の方法。
【0214】
<ステートメント12>第1の一次トランザクションは、ブロックチェーントランザクションのチェーンにおける最初の一次トランザクションである、先行するステートメントのいずれかに記載の方法。
【0215】
<ステートメント13>第1の当事者は、トークンの発行者である、ステートメント11およびステートメント12に記載の方法。
【0216】
<ステートメント14>特定のトランザクション識別子は、第1の一次トランザクションのそれぞれのトランザクション識別子である、ステートメント7に従属するときのステートメント12またはステートメント13に記載の方法。
【0217】
<ステートメント15>第1の一次トランザクションは第1のカウンタ値を含み、補助ロックスクリプトは、第2の一次トランザクションの第1のロック解除スクリプトによって実行されると、第2の一次トランザクションが第2のカウンタ値を含むことを検証するように構成され、第2のカウンタ値はカウンタ値の反復である、先行するステートメントのいずれかに記載の方法。
【0218】
<ステートメント16>第1の一次トランザクションは、ブロックチェーントランザクションのチェーンにおける初期トランザクションではなく、第1の一次トランザクションは、補助ロックスクリプトを含む前の補助トランザクションの第1の出力を参照する第1の入力を含み、前の補助トランザクションは、一次ロックスクリプトを含む前の一次トランザクションの第1の出力を参照する第1の入力を含み、補助ロックスクリプトは、第2の一次トランザクションの第1のロック解除スクリプトによって実行されると、vi)第2の一次トランザクションの第1のロック解除スクリプトが、前の一次トランザクションの1つまたは複数のロックスクリプトを含む第4のデータ項目を含むことを検証し、vii)第2のメッセージおよび第4のデータ項目に基づいて、第2の一次トランザクションの第1の出力が一次ロックスクリプトを含むことを検証するように構成される、ステートメント1から11のいずれかに記載の方法。
【0219】
<ステートメント17>前の一次トランザクションは、前の一次トランザクションにハッシュ関数を適用することによって生成するそれぞれのトランザクション識別子を有し、第2の一次トランザクションの第1のロック解除スクリプトは、第5のデータ項目を含み、第5のデータ項目は、前の一次トランザクションに適用されたハッシュ関数のミッドステートを含み、補助ロックスクリプトは、第2の一次トランザクションの第1のロック解除スクリプトによって実行されると、viii)第4のデータ項目および第5のデータ項目に基づいて候補トランザクション識別子を生成し、候補トランザクション識別子が前の一次トランザクション識別子のそれぞれのトランザクション識別子と一致することを検証するように構成される、ステートメント16に記載の方法。
【0220】
<ステートメント18>前の一次トランザクションは、ブロックチェーントランザクションのチェーンにおける最初の一次トランザクションであり、方法は、最初の一次トランザクションが所定の公開鍵に対応する署名で署名されたことを検証するステップを含む、ステートメント16またはステートメント17に記載の方法。
【0221】
<ステートメント19>第1の一次トランザクションをブロックチェーンネットワークにサブミットするステップを含む、先行するステートメントのいずれかに記載の方法。
【0222】
<ステートメント20>第1の補助トランザクションおよび/または第2の一次トランザクションをブロックチェーンネットワークにサブミットするステップを含む、先行するステートメントのいずれかに記載の方法。
【0223】
<ステートメント21>ロックスクリプトがブロックチェーントランザクションのチェーン全体にわたって強制されたことを検証するコンピュータ実装方法であって、方法は、第1の当事者によって実行され、
第2の一次トランザクションを取得するステップであって、第2の一次トランザクションは、第1の入力および第1の出力を含み、第1の入力は、第2の一次トランザクションに基づいて生成された第2のメッセージを含み、第1の補助トランザクションは、第1の一次トランザクションの第1の出力をロック解除する第1の入力を含み、第1のデータ項目は、第1の一次トランザクションの1つまたは複数のロックスクリプトを含み、第1の一次トランザクションの第1の出力は、一次ロックスクリプトを含み、第1の補助トランザクションの第1の出力は、補助ロックスクリプトを含み、第2の一次トランザクションの第1の出力は、一次ロックスクリプトを含む、ステップと、
第1の一次トランザクションがブロックチェーンに記録されたことを検証するステップと、
第1の一次トランザクションの一次ロックスクリプトが、第1の補助トランザクションの第1のロック解除スクリプトによって実行されると、i)第1のロック解除スクリプトが、第1の補助トランザクションに基づいて生成された第1のメッセージを含むことを検証し、ii)第1のメッセージに基づいて、第1の補助トランザクションの第1の出力が補助ロックスクリプトを含むことを検証するように構成されることを検証するステップであって、補助ロックスクリプトは、第2の一次トランザクションの第1のロック解除スクリプトによって実行されると、i)第1のロック解除スクリプトが第2のメッセージを含むことを検証し、ii)第1のロック解除スクリプトが第1のデータ項目を含むことを検証し、iii)第2のメッセージおよび第1のデータ項目に基づいて、第2の一次トランザクションの第1の出力が一次ロックスクリプトを含むことを検証するように構成され、それによって、一次ロックスクリプトが第1の一次トランザクションおよび第2の一次トランザクション全体にわたって強制されたことを検証する、ステップと
を含む方法。
【0224】
<ステートメント22>一次ロックスクリプトは、補助ロックスクリプトのハッシュを含み、第1のメッセージは、候補補助ロックスクリプトを含み、一次ロックスクリプトは、第1の補助トランザクションの第1のロック解除スクリプトによって実行されると、候補補助ロックスクリプトをハッシュし、候補補助ロックスクリプトのハッシュが補助ロックスクリプトのハッシュと一致することを検証することによって、第1の補助トランザクションの第1の出力が補助ロックスクリプトを含むことを検証するように構成され、一次ロックスクリプトがステップi)およびii)を実行するように構成されることを検証する上記ステップは、ハッシュパズルの一部として一次ロックスクリプトが補助ロックスクリプトのハッシュを含むことを検証するステップを含む、ステートメント21に記載の方法。
【0225】
<ステートメント23>第1の一次トランザクションがブロックチェーンに記録されたことを検証する上記ステップは、第1の一次トランザクションがブロックチェーンのブロックに記録されたことを証明するためのマークルプルーフを取得するステップを含む、ステートメント21またはステートメント22に記載の方法。
【0226】
<ステートメント24>第1の一次トランザクションは、ハッシュ関数を第1の一次トランザクションに適用することによって生成するそれぞれのトランザクション識別子を有し、第2の一次トランザクションの第1の入力は、第3のデータ項目を含み、第3のデータ項目は、第1の一次トランザクションに適用されたハッシュ関数のミッドステートを含み、第1の一次トランザクションがブロックチェーンに記録されたことを検証する上記ステップは、第1のデータ項目および第3のデータ項目に基づいて候補トランザクション識別子を生成するステップと、マークルプルーフが候補トランザクション識別子に対して有効であることを検証するステップとを含む、ステートメント23に記載の方法。
【0227】
<ステートメント25>第1の一次トランザクションを取得するステップを含み、第1の一次トランザクションがブロックチェーンに記録されたことの上記検証は、取得されたマークルプルーフおよび取得された第1の一次トランザクションに基づく、ステートメント23またはステートメント24に記載の方法。
【0228】
<ステートメント26>第2の一次トランザクションが最初の一次トランザクションのそれぞれのトランザクション識別子を含むことを検証するステップを含む、ステートメント19またはそれに従属する任意のステートメントに記載の方法。
【0229】
<ステートメント27>第2の補助トランザクションを生成するステップであって、第2の補助トランザクションは、第2の一次トランザクションの第1の出力を参照し、第2の補助トランザクションに基づいて生成された第3のメッセージを含む第1の入力と、補助ロックスクリプトを含む第1の出力とを含む、ステップと、
第3の一次トランザクションを生成するステップであって、第3の一次トランザクションは、第2の補助トランザクションの第1の出力を参照し、第3の一次トランザクションに基づいて生成された第4のメッセージ、第1のデータ項目、第2の補助トランザクション、および第2の一次トランザクションの1つまたは複数のロックスクリプトを含む第6のデータ項目を含む第1の入力を含み、第3の一次トランザクションは、一次ロックスクリプトを含む第1の出力を含む、ステップと
を含む、ステートメント19またはそれに従属する任意のステートメントに記載の方法。
【0230】
<ステートメント28>補助ロックスクリプトは、第3の一次トランザクションの第1のロック解除スクリプトによって実行されると、vi)第2の一次トランザクションの第1のロック解除スクリプトが第3のデータ項目を含むことを検証し、vii)第3のメッセージおよび第6のデータ項目に基づいて、第3の一次トランザクションの第1の出力が一次ロックスクリプトを含むことを検証するように構成される、ステートメント27に記載の方法。
【0231】
<ステートメント29>第2の補助トランザクションおよび第3の一次トランザクションを第三者に送信するステップを含む、ステートメント27またはステートメント28に記載の方法。
【0232】
<ステートメント30>第2の一次トランザクションがブロックチェーンのブロックに記録されたことを証明するためのマークルプルーフを第三者に送信するステップを含む、ステートメント29に記載の方法。
【0233】
<ステートメント31>一次ロックスクリプトおよび/または補助ロックスクリプトは、トークンの所有権に関するデータを含み、第1の一次トランザクションおよび/または第1の補助ロックスクリプトは、トークン発行者によって生成されている、ステートメント21またはそれに従属する任意のステートメントに記載の方法。
【0234】
<ステートメント32>第2の補助トランザクションおよび第3の一次トランザクションをブロックチェーンにサブミットすることを含む、ステートメント27またはそれに従属する任意のステートメントに記載の方法。
【0235】
<ステートメント33>コンピュータ機器であって、
1つまたは複数のメモリユニットを備えるメモリと、
1つまたは複数の処理ユニットを備える処理装置であって、メモリは、処理装置上で実行されるように構成されたコードを記憶し、コードは、処理装置上にあるときに、ステートメント1から29のいずれかに記載の方法を実行するように構成される、処理装置と
を備えるコンピュータ機器。
【0236】
<ステートメント34>コンピュータ可読ストレージ上に具現化され、1つまたは複数のプロセッサ上で実行されると、ステートメント1から32のいずれかに記載の方法を実行するように構成されたコンピュータプログラム。
【0237】
本明細書で開示される別の態様によれば、第1の当事者および第2の当事者のアクションを含む方法が提供され得る。本明細書に開示される別の態様によれば、少なくとも第1の一次トランザクションおよび第1の補助トランザクションを処理するように構成されたブロックチェーンノードのアクションを含む方法が提供され得る。
【0238】
本明細書で開示される別の態様によれば、第1の当事者および第2の当事者のコンピュータ機器を備えるシステムが提供され得る。本明細書に開示される別の態様によれば、少なくとも第1の一次トランザクションおよび第1の補助トランザクションを処理するように構成されたブロックチェーンノードが提供され得る。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
【国際調査報告】