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

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

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

<>
  • 特表-ブロックチェーントランザクション 図1
  • 特表-ブロックチェーントランザクション 図2
  • 特表-ブロックチェーントランザクション 図3A
  • 特表-ブロックチェーントランザクション 図3B
  • 特表-ブロックチェーントランザクション 図4
  • 特表-ブロックチェーントランザクション 図5
  • 特表-ブロックチェーントランザクション 図6
  • 特表-ブロックチェーントランザクション 図7
  • 特表-ブロックチェーントランザクション 図8
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-12-26
(54)【発明の名称】ブロックチェーントランザクション
(51)【国際特許分類】
   H04L 9/32 20060101AFI20241219BHJP
【FI】
H04L9/32 200Z
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2024537544
(86)(22)【出願日】2022-11-17
(85)【翻訳文提出日】2024-08-19
(86)【国際出願番号】 EP2022082339
(87)【国際公開番号】W WO2023117230
(87)【国際公開日】2023-06-29
(31)【優先権主張番号】2118636.6
(32)【優先日】2021-12-21
(33)【優先権主張国・地域又は機関】GB
(81)【指定国・地域】
(71)【出願人】
【識別番号】318001991
【氏名又は名称】エヌチェーン ライセンシング アーゲー
(74)【代理人】
【識別番号】100108453
【弁理士】
【氏名又は名称】村山 靖彦
(74)【代理人】
【識別番号】100110364
【弁理士】
【氏名又は名称】実広 信哉
(74)【代理人】
【識別番号】100133400
【弁理士】
【氏名又は名称】阿部 達彦
(72)【発明者】
【氏名】リュウシュアン・パン
(72)【発明者】
【氏名】クレイグ・スティーヴン・ライト
(57)【要約】
ブロックチェーンに記録するための証明可能なタスクを生成するコンピュータにより実施される方法であって、証明可能なタスクは(n+1)個のデータアイテムを検証するためのものである。(n+1)個のサブスクリプトを備える第1のロックスクリプトを備える、タスクブロックチェーントランザクションが生成され、各々のそれぞれのサブスクリプトは、知識証明に対応する異なるロック解除条件を定義し、各ロック解除条件は、(n+1)個の検証値riのシーケンスの異なる検証値riによって満たされ、検証値riは(i+1)のデータ値から導出される。1つまたは複数の第1の証明トランザクションテンプレートが生成され、それらの各々が検証値のシーケンスの異なる検証値に対応し、各々の第1の証明トランザクションテンプレートが、テンプレートの第1のロック解除スクリプトと第1のロックスクリプトを特定する出力点とを備え、テンプレートの第1のロック解除スクリプトが、対応する検証値に対応する公開鍵を備え、第1のロック解除スクリプトが、テンプレートの第1のロック解除スクリプトおよび対応する検証値から導出される。
【特許請求の範囲】
【請求項1】
ブロックチェーンに記録するための証明可能なタスクを生成するコンピュータにより実施される方法であって、前記証明可能なタスクが(n+1)個のデータアイテムを検証するためのものであり、前記方法が、
タスクブロックチェーントランザクションを生成するステップであって、前記タスクブロックチェーントランザクションが(n+1)個のサブスクリプトを備える第1のロックスクリプトを備え、各々のそれぞれのサブスクリプトが知識証明に対応する異なるロック解除条件を定義し、各ロック解除条件が(n+1)個の検証値riのシーケンスの異なる検証値riによって満たされ、0≦i≦nであり、各サブスクリプトが前記サブスクリプトの前記ロック解除条件を満たす対応する検証値に対応する公開鍵を備え、前記それぞれのサブスクリプトが、証明ブロックチェーントランザクションの第1のロック解除スクリプトと共に実行されると、前記ロック解除条件に基づいて前記第1のロック解除スクリプトにおいて提供される検証値を検証するように構成され、前記検証値riが検証されるべき(i+1)個のデータ値から導出される、ステップと、
前記タスクブロックチェーントランザクションをブロックチェーンネットワークの1つまたは複数のノードに対して利用可能にするステップと、
1つまたは複数の第1の証明トランザクションテンプレートを生成するステップであって、各々の第1の証明トランザクションテンプレートが検証値の前記シーケンスの異なる検証値に対応し、各々の第1の証明トランザクションテンプレートが、テンプレートの第1のロック解除スクリプトと前記第1のロックスクリプトを特定する出力点とを備え、前記テンプレートの第1のロック解除スクリプトが、前記対応する検証値に対応する前記公開鍵を備え、前記第1のロック解除スクリプトが、前記テンプレートの第1のロック解除スクリプトおよび前記対応する検証値から導出される、ステップと、
前記1つまたは複数の第1の証明トランザクションテンプレートを作業者に対して利用可能にするステップと
を含む、方法。
【請求項2】
前記検証値riが前記(i+1)個のデータ値の連結に基づいて生成される、請求項1に記載の方法。
【請求項3】
前記検証値riが前記(i+1)個のデータ値のハッシュに基づいて生成される、請求項1または2に記載の方法。
【請求項4】
検証値の前記シーケンスの最後の検証値rnに対応する前記第1の証明トランザクションテンプレートの前記テンプレートの第1のロック解除スクリプトが、前記第1のロック解除スクリプトを備える第1の証明トランザクションの入力に署名し、前記第1の証明トランザクションの出力に署名しないための第1の署名フラグを備える、請求項1から3のいずれか一項に記載の方法。
【請求項5】
検証値の前記シーケンスの最初のn個の検証値のうちの1つに対応する前記第1の証明トランザクションテンプレートの前記テンプレートの第1のロック解除スクリプトが、前記第1のロック解除スクリプトを備える第1の証明トランザクションの入力および前記第1の証明トランザクションの出力に署名するための第2の署名フラグを備える、請求項1から4のいずれか一項に記載の方法。
【請求項6】
前記第1の証明トランザクションテンプレートの中の前記第1のロック解除スクリプトと同じインデックスを有する、前記第1の証明トランザクションテンプレートの第1の出力が、デジタル資産の額を定義する、請求項1から5のいずれか一項に記載の方法。
【請求項7】
前記第1の出力が、前記タスクブロックチェーントランザクションの提供者にデジタル資産の前記額を割り当てるための第2のロックスクリプトをさらに備え、
前記第1の証明トランザクションを提供する前記作業者に残りの額が割り当てられ、前記第1の証明トランザクションが、前記第1の証明トランザクションテンプレートおよび前記対応する検証値を備え、前記残りの額が、前記第1の出力において定義される前記額および前記タスクブロックチェーントランザクションにおいて定義されるデジタル資産の報酬額に基づく、請求項5または6に記載の方法。
【請求項8】
各々の第1の証明トランザクションテンプレートが異なるシーケンス番号を備え、前記シーケンス番号がiの増大と共に増大し、
最後の検証値rnに対応する前記第1の証明トランザクションテンプレートの前記シーケンス番号が最大であり、最初の検証値r0に対応する前記第1の証明トランザクションテンプレートの前記シーケンス番号が最小である、請求項1から7のいずれか一項に記載の方法。
【請求項9】
0≦x<nであるrxに対応する前記第1の証明トランザクションテンプレートが第2のロックスクリプトをさらに備え、前記第2のロックスクリプトが(n-x)個のサブスクリプトを備え、各々のそれぞれのサブスクリプトが知識証明に対応する異なるロック解除条件を定義し、
各ロック解除条件が(n-x)個の残りの検証値riのセットの異なる1つによって満たされ、残りの検証値の前記セットがx<i≦nに対する検証値の前記シーケンスの前記検証値を備え、
前記それぞれのサブスクリプトが、前記対応する残りの検証値に対応する公開鍵を備え、
前記それぞれのサブスクリプトが、第2の証明ブロックチェーントランザクションの第2のロック解除スクリプトと共に実行されると、前記ロック解除条件に基づいて前記第2のロック解除スクリプトにおいて提供される前記残りの検証値を検証するように構成され、
前記方法が、
1つまたは複数の第2の証明トランザクションテンプレートを生成するステップであって、各々の第2の証明トランザクションテンプレートが、
前記対応する残りの検証値に対応する前記公開鍵を備える、テンプレートの第2のロック解除スクリプトと、
前記第1の証明トランザクションテンプレートを特定する出力点と
を備える、ステップと、
前記1つまたは複数の第2の証明トランザクションテンプレートを前記作業者に対して利用可能にするステップと
をさらに含む、請求項1から8のいずれか一項に記載の方法。
【請求項10】
前記第1のロック解除スクリプトが、前記テンプレートの第1のロック解除スクリプトおよび前記検証値を備える、請求項1から9のいずれか一項に記載の方法。
【請求項11】
前記第1のロック解除スクリプトが、前記テンプレートの第1のロック解除スクリプトと、前記作業者に関連する公開鍵と、前記作業者の前記公開鍵を使用して導出される前記作業者の署名と、前記作業者の前記公開鍵を使用して導出される前記検証値の署名とを備える、請求項1から9のいずれか一項に記載の方法。
【請求項12】
前記作業者の前記署名および前記検証値の前記署名が、異なる署名されたメッセージに基づいて生成される、請求項11に記載の方法。
【請求項13】
前記作業者の前記署名が、前記第1のロック解除スクリプトを備える第1の証明トランザクションの入力に署名し、前記第1の証明トランザクションの出力に署名しないための第1の署名フラグと関連付けられ、
前記検証値の前記署名が、前記第1の証明トランザクションのすべての入力および出力に署名するための第3の署名フラグと関連付けられる、請求項11または12に記載の方法。
【請求項14】
前記第1のロック解除スクリプトの構成要素が事前に定められた順序で提供され、前記順序が、前記作業者の前記公開鍵を使用して導出される前記作業者の前記署名、前記タスクブロックチェーントランザクションの提供者の署名、前記対応する検証値に対応する前記公開鍵、前記作業者に関連する前記公開鍵、および前記作業者の前記公開鍵を使用して導出される前記検証値の前記署名である、請求項11から13のいずれか一項に記載の方法。
【請求項15】
前記データ値がデータアイテムのハッシュである、請求項1から14のいずれか一項に記載の方法。
【請求項16】
ブロックチェーンに記録するための第1の証明トランザクションを生成するコンピュータにより実施される方法であって、前記方法が、
1つまたは複数の第1の証明トランザクションテンプレートにアクセスするステップであって、各証明トランザクションテンプレートが、(n+1)個の検証値riのシーケンスの異なる検証値riに対応し、0≦i≦nであり、各証明トランザクションテンプレートが、テンプレートの第1のロック解除スクリプトと、タスクトランザクションの第1のロックスクリプトを特定する出力点とを備え、前記テンプレートの第1のロック解除スクリプトが、前記対応する検証値に対応する公開鍵を備える、ステップと、
(i+1)個のデータ値から(n+1)個の検証値riの前記シーケンスの検証値riを導出するステップと、
前記第1の証明トランザクションの第1のロック解除スクリプトにおいて、前記導出された検証値に対応するテンプレートロック解除スクリプト、および前記導出された検証値に基づく値を提供するステップと、
タスクブロックチェーントランザクションをブロックチェーンネットワークの1つまたは複数のノードに対して利用可能にするステップと
を含む、方法。
【請求項17】
前記導出された検証値に基づく前記値が、前記導出された検証値である、請求項16に記載の方法。
【請求項18】
前記導出された検証値に基づく前記値が、作業者の公開鍵および前記導出された検証値を使用して導出される前記証明トランザクションを生成する前記作業者の署名であり、
前記方法が、前記作業者に関連する前記公開鍵と、前記作業者の前記公開鍵および前記導出された検証値を使用して導出される前記作業者の前記署名とを、前記第1のロック解除スクリプトにおいて提供するステップをさらに含む、請求項16に記載の方法。
【請求項19】
コンピュータ機器であって、
1つまたは複数のメモリユニットを備えるメモリと、
1つまたは複数の処理ユニットを備える処理装置と
を備え、前記メモリが、前記処理装置によって実行されるように構成されたコードを記憶し、前記コードが、前記処理装置によって実行されると、請求項1から18のいずれか一項に記載の方法を実行するように構成される、コンピュータ機器。
【請求項20】
コンピュータ可読ストレージ上に記憶され、1つまたは複数のプロセッサによって実行されると、請求項1から18のいずれか一項に記載の方法を実行するように構成される、コンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、ブロックチェーンに記録するための証明可能なタスクを生成するコンピュータ実装方法、証明トランザクションを生成するための方法、ならびにそれらの方法を実施するためのデバイスおよびコンピュータプログラムに関する。
【背景技術】
【0002】
ブロックチェーンとは分散型データ構造の一形態を指し、ブロックチェーンの重複コピーは、分散型ピアツーピア(P2P)ネットワーク(以下では「ブロックチェーンネットワーク」と呼ばれる)内の複数のノードの各々において維持され、広く公開される。ブロックチェーンは、データのブロックのチェーンを備え、各ブロックは、1つまたは複数のトランザクションを備える。いわゆる「コインベーストランザクション」以外の各トランザクションは、あるシーケンスの中の先行するトランザクションを指し示し、シーケンスは、1つまたは複数のブロックにまたがって、1つまたは複数のコインベーストランザクションにまで戻り得る。コインベーストランザクションは、以下でさらに論じられる。ブロックチェーンネットワークに出されたトランザクションは、新しいブロックに含められる。新しいブロックは、「マイニング」と呼ばれることが多いプロセスによって作成され、マイニングは、複数のノードの各々が競って「プルーフオブワーク」を実行すること、すなわち、ブロックチェーンの新しいブロックに含められることを待機している順序付けられた正当性確認済みの未処理のトランザクションの定義されたセットの表現に基づいて暗号パズルを解くことを伴う。ブロックチェーンは一部のノードにおいて剪定されることがあり、ブロックの公開はブロックヘッダのみの公開を通じて達成され得ることに留意されたい。
【0003】
ブロックチェーンにおけるトランザクションは、デジタル資産(すなわち、ある数のデジタルトークン)を動かすこと、仮想化された台帳もしくはレジストリのエントリのセットを順序付けること、タイムスタンプエントリを受信して処理すること、および/またはインデックスポインタを時間的に順序付けることという目的の1つまたは複数のために使用され得る。ブロックチェーンは、ブロックチェーンの上に追加の機能を重ねるためにも活用され得る。たとえば、ブロックチェーンプロトコルは、追加のユーザデータの記憶またはトランザクションの中のデータに対するインデックスを可能にし得る。単一のトランザクションに記憶できる最大のデータ容量には事前に指定された限界がないので、ますますより複雑なデータを組み入れることができる。たとえば、これは、ブロックチェーンに電子文書を、またはオーディオもしくはビデオデータを記憶するために使用され得る。
【0004】
ブロックチェーンネットワークのノード(「マイナー」と呼ばれることが多い)は、分散されたトランザクションの登録と検証のプロセスを実行し、これは後でより詳しく説明される。要約すると、このプロセスの間に、ノードは、トランザクションを正当性確認し、トランザクションが正当なプルーフオブワークの解を特定しようとする対象のブロックテンプレートへとトランザクションを挿入する。正当な解が見つかると、新しいブロックはネットワークの他のノードに伝播されるので、各ノードがブロックチェーンに新しいブロックを記録することが可能になる。ブロックチェーンにトランザクションが記録されるようにするために、ユーザ(たとえば、ブロックチェーンクライアントアプリケーション)は、伝播されるべきネットワークのノードのうちの1つにトランザクションを送信する。トランザクションを受信するノードは、正当性確認されたトランザクションを新しいブロックに組み入れるプルーフオブワークの解を見つけるために争い得る。各ノードは同じノードプロトコルを施行するように構成され、これはトランザクションが正当であるための1つまたは複数の条件を含む。不正なトランザクションは、広められず、ブロックにも組み入れられない。トランザクションが正当性確認され、それによりブロックチェーン上で受け入れられると仮定すると、トランザクション(任意のユーザデータを含む)は、変更不可能な公開記録としてブロックチェーンネットワーク中のノードの各々において登録されインデクシングされたままである。
【0005】
プルーフオブワークパズルを解くことに成功して最新のブロックを作成したノードは、ある量のデジタル資産、すなわちある数のトークンを分配する、通常は「コインベーストランザクション」と呼ばれる新しいトランザクションで報いられる。不正なトランザクションの検出と拒絶は、ネットワークの代理として振る舞い不正行為を報告して阻止するようにインセンティブを与えられた、競合するノードのアクションによって実施される。情報の広範な公開が、ユーザがノードの挙動を継続的に監査することを可能にする。単なるブロックヘッダの公開が、ブロックチェーンの持続的な完全性を参加者が保証することを可能にする。
【0006】
「出力ベース」モデル(UTXOベースモデルと呼ばれることがある)では、所与のトランザクションのデータ構造は1つまたは複数の入力および1つまたは複数の出力を備える。あらゆる消費可能な出力は、トランザクションの先行するシーケンスから導出可能なデジタル資産の量を指定する要素を備える。消費可能な出力は、UTXO(「未消費トランザクション出力」)と呼ばれることがある。出力はさらに、出力の将来の引き換え(redemption)のための条件を指定するロックスクリプト(locking script)を備え得る。ロックスクリプトは、デジタルトークンまたは資産を正当性確認して伝送するために必要な条件を定義する述部である。トランザクション(コインベーストランザクション以外)の各入力は、先行するトランザクションにおけるそのような出力へのポインタ(すなわち、参照)を備え、指し示された出力のロックスクリプトをロック解除するためのロック解除スクリプトをさらに備え得る。よって、トランザクションのペアを考え、それらを第1のトランザクションおよび第2のトランザクション(または「ターゲット」トランザクション)と呼ぶ。第1のトランザクションは、デジタル資産の量を指定する少なくとも1つの出力を備え、出力をロック解除する1つまたは複数の条件を定義するロックスクリプトを備える。第2のターゲットトランザクションは少なくとも1つの入力を備え、これは、第1のトランザクションの出力へのポインタと、第1のトランザクションの出力をロック解除するためのロック解除スクリプトとを備える。
【0007】
そのようなモデルでは、第2のターゲットトランザクションが、ブロックチェーンにおいて広められ記録されるようにブロックチェーンネットワークに送信されるとき、各ノードにおいて適用される正当性の基準の1つは、ロック解除スクリプトが第1のトランザクションのロックスクリプトにおいて定義される1つまたは複数の条件のすべてを満たすことである。別の基準は、第1のトランザクションの出力が別のより早い正当なトランザクションによってまだ引き換えられていないということである。これらの条件のいずれかに従ってターゲットトランザクションが不正であることを見出すいずれのノードも、ターゲットトランザクションを広めず(正当なトランザクションとして広めず、しかし場合によっては不正なトランザクションを登録するために伝播する)、また、ブロックチェーンに記録されるようにターゲットトランザクションを新しいブロックに含めない。
【0008】
代替のタイプのトランザクションモデルはアカウントベースモデルである。この場合、各トランザクションは、過去のトランザクションのシーケンスの中の先行するトランザクションのUTXOに戻って参照することによって伝送されるべき量を定義するのではなく、絶対的なアカウントの残高を参照することによってそれを定義する。すべてのアカウントの現在の状態が、複数のノードによって別々にブロックチェーンに記憶され、常に更新される。
【発明の概要】
【発明が解決しようとする課題】
【0009】
企業のビジネスにおいて、データをサードパーティのクラウドプラットフォームにアップロードする傾向が高まっている。ユーザは、自身のデータを適切に記憶して維持することを、これらのクラウドサービス提供者に委託する。ユーザが記憶されているデータの完全性の保証を必要とする場合、自身で定期的にデータを確認することができる。これをするには、ユーザは、関心対象のデータの全体を、その完全性を検証するためにダウンロードする必要がある。
【0010】
しかしながら、ユーザは、リソースが制約されており、適時に完全性の検証を完了できないことが多い一方で、これらの検証のために計算リソースを消費する意思があるのでタスクを完了するためのアウトソーシングされたサービス提供者になる意思があり得るような、第三者の作業者が存在することがある。したがって、ユーザはこれらの作業者に計算をアウトソーシングすることができる。しかしながら、計算をアウトソーシングする際に、計算を正しく実行するものとユーザ(アウトソーシングする側)が作業者を信用できず、同様に、完了した仕事に対価を支払うものと作業者がユーザを信用しないという、問題が生じる。
【0011】
上で説明された支払の問題を解決するために、本明細書で逐次支払プロトコルが説明される。重要なことに、アウトソーシングする側と作業者との間に信用は必要ではない。アウトソーシングされた検証が効率的に検証され、正当に報いられることは、ユーザにとって役立つ。アウトソーシングする側は、タスクトランザクションの形態でタスクを提出し、検証タスクに参加する機会をあらゆる作業者に与える。これらの理由で、この方式は逐次検証プロトコルとも呼ばれることがある。
【0012】
提案されるプロトコルは、アウトソーシングする側の行動にかかわらず、誠実な作業者が正しい検証結果をブロックチェーンネットワークに提出すれば、その作業者が対応する支払を受け取ることを保証する。さらに、このプロトコルは、可能な限り早くタスクを完了するように作業者に促す競争モデルを導入する。
【課題を解決するための手段】
【0013】
本明細書で開示される一態様によれば、ブロックチェーンに記録するための証明可能なタスクを生成するコンピュータ実装方法が提供され、証明可能なタスクは(n+1)個のデータアイテムを検証するためのものであり、この方法は、タスクブロックチェーントランザクションを生成するステップであって、タスクブロックチェーントランザクションが(n+1)個のサブスクリプトを備える第1のロックスクリプトを備え、各々のそれぞれのサブスクリプトが知識証明に対応する異なるロック解除条件を定義し、各ロック解除条件が(n+1)個の検証値riのシーケンスの異なる検証値riによって満たされ、0≦i≦nであり、各サブスクリプトがサブスクリプトのロック解除条件を満たす対応する検証値に対応する公開鍵を備え、それぞれのサブスクリプトが、証明ブロックチェーントランザクションの第1のロック解除スクリプトと共に実行されると、ロック解除条件に基づいて第1のロック解除スクリプトにおいて提供される検証値を検証するように構成され、検証値riが検証されるべき(i+1)個のデータ値から導出される、ステップと、タスクブロックチェーントランザクションをブロックチェーンネットワークの1つまたは複数のノードに対して利用可能にするステップと、1つまたは複数の第1の証明トランザクションテンプレートを生成するステップであって、各々の第1の証明トランザクションテンプレートが検証値のシーケンスの異なる検証値に対応し、各々の第1の証明トランザクションテンプレートが、テンプレートの第1のロック解除スクリプトと第1のロックスクリプトを特定する出力点とを備え、テンプレートの第1のロック解除スクリプトが、対応する検証値に対応する公開鍵を備え、第1のロック解除スクリプトが、テンプレートの第1のロック解除スクリプトおよび対応する検証値から導出される、ステップと、1つまたは複数の第1の証明トランザクションテンプレートを作業者に対して利用可能にするステップとを含む。
【0014】
本開示の実施形態の理解を助け、そのような実施形態がどのように実施され得るかを示すために、単なる例として、添付の図面が参照される。
【図面の簡単な説明】
【0015】
図1】ブロックチェーンを実装するためのシステムの概略ブロック図である。
図2】ブロックチェーンに記録され得るトランザクションのいくつかの例を概略的に示す図である。
図3A】クライアントアプリケーションの概略ブロック図である。
図3B図3Aのクライアントアプリケーションによって提示され得る例示的なユーザインターフェースの概略モックアップである。
図4】トランザクションを処理するためのいくつかのノードソフトウェアの概略ブロック図である。
図5】データ値のセットと検証値のシーケンスとの関係を概略的に示す図である。
図6】計算トランザクションのマルチレイヤ証明の階層構造を概略的に示す図である。
図7】データ値のセットから導出可能な検証値を概略的に示す図である。
図8】データ完全性の検証をアウトソーシングするための例示的な方法を示す図である。
【発明を実施するための形態】
【0016】
1. 例示的なシステムの概要
図1は、ブロックチェーン150を実装するための例示的なシステム100を示す。システム100は、パケット交換ネットワーク101、通常はインターネットなどのワイドエリアインターネットワークを備え得る。パケット交換ネットワーク101は、パケット交換ネットワーク101内でピアツーピア(P2P)ネットワーク106を形成するようになされ得る複数のブロックチェーンノード104を備える。示されていないが、ブロックチェーンノード104は、準完全グラフ(near-complete graph)として構成され得る。したがって、各ブロックチェーンノード104は、他のブロックチェーンノード104に高度に接続される。
【0017】
各ブロックチェーンノード104はピアのコンピュータ機器を備え、ノード104の異なるノードは異なるピアに属する。各ブロックチェーンノード104は、1つまたは複数のプロセッサ、たとえば、1つまたは複数の中央処理装置(CPU)、アクセラレータプロセッサ、特定用途向けプロセッサ、および/またはフィールドプログラマブルゲートアレイ(FPGA)を備える処理装置、ならびに、特定用途向け集積回路(ASIC)などの他の機器を備える。各ノードはまた、メモリ、すなわち、非一時的コンピュータ可読媒体の形態のコンピュータ可読ストレージを備える。メモリは、1つまたは複数のメモリ媒体、たとえば、ハードディスクなどの磁気媒体、ソリッドステートドライブ(SSD)、フラッシュメモリ、もしくはEEPROMなどの電子媒体、および/または光ディスクドライブなどの光媒体を利用する、1つまたは複数のメモリユニットを備え得る。
【0018】
ブロックチェーン150はデータのブロック151のチェーンを備え、ブロックチェーン150のそれぞれのコピーは、分散型ネットワークまたはブロックチェーンネットワーク106の中の複数のブロックチェーンノード104の各々において維持される。上で言及されたように、ブロックチェーン150のコピーを維持することは、ブロックチェーン150を完全に記憶することを必ずしも意味しない。代わりに、ブロックチェーン150は、各ブロックチェーンノード150が各ブロック151のブロックヘッダ(以下で論じられる)を記憶する限り、データについて剪定され得る。チェーンの中の各ブロック151は1つまたは複数のトランザクション152を備え、この文脈におけるトランザクションはある種のデータ構造を指す。データ構造の性質は、トランザクションモデルまたはスキームの一部として使用されるトランザクションプロトコルのタイプに依存する。所与のブロックチェーンは、1つの特定のトランザクションプロトコルを全体で使用する。1つの一般的なタイプのトランザクションプロトコルでは、各トランザクション152のデータ構造は、少なくとも1つの入力および少なくとも1つの出力を備える。各出力は、デジタル資産の量を表す額をプロパティとして指定し、その例は、出力が暗号的にロックされる対象であるユーザ103である(ロック解除され、それにより引き換えられまたは消費されるために、そのユーザの署名または他の解を必要とする)。各入力は先行するトランザクション152の出力を指し示し、それによりトランザクションをつなぐ。
【0019】
各ブロック151はまた、ブロック151に対する逐次的な順序を定義するために、チェーンの中の以前に作成されたブロック151を指し示すブロックポインタ155を備える。各トランザクション152(コインベーストランザクション以外)は、トランザクションのシーケンスに対する順序を定義するために、以前のトランザクションへのポインタを備える(トランザクション152のシーケンスは分岐することが許容されることに注意)。ブロック151のチェーンは、チェーンの中の最初のブロックであったジェネシスブロック(Gb)153まで戻る。チェーン150の中の初期の1つまたは複数の元のトランザクション152は、先行するトランザクションではなくジェネシスブロック153を指し示していた。
【0020】
ブロックチェーンノード104の各々は、トランザクション152を他のブロックチェーンノード104に転送し、それにより、トランザクション152がネットワーク106全体に伝播されるようにするように構成される。各ブロックチェーンノード104は、ブロック151を作成し、同じブロックチェーン150のそれぞれのコピーをそれぞれのメモリに記憶するように構成される。各ブロックチェーンノード104はまた、ブロック151へと組み入れられることを待機しているトランザクション152の順序付けられたセット(または「プール」)154を維持する。順序付けられたプール154はしばしば、「メムプール」と呼ばれる。本明細書では、この用語は、特定のブロックチェーン、プロトコル、またはモデルに限定するものではない。それは、ノード104が正当であるものとして受け入れた、かつ、同じ出力を消費しようとする他のトランザクションをノード104が受け入れる義務をそれについて負わない、トランザクションの順序付けられたセットを指す。
【0021】
所与の現在のトランザクション152jにおいて、その(または各)入力は、トランザクションのシーケンスの中の先行するトランザクション152iの出力を参照するポインタを備え、これは、この出力が現在のトランザクション152jにおいて引き換えられるまたは「消費される」べきであることを指定する。消費または引き換えは必ずしも金融資産の移動を示唆しないが、それも当然一般的な適用例である。より一般的には、消費は、出力を費やすこと、または別の前方のトランザクションにおける1つまたは複数の出力にそれを割り当てることとして記述され得る。一般に、先行するトランザクションは、順序付けられたセット154または任意のブロック151の中の任意のトランザクションであり得る。先行するトランザクション152iは、現在のトランザクション152jが作成される時点で、またはネットワーク106に送信される時点ですら、必ずしも存在していなくてもよいが、現在のトランザクションが正当であるためには、先行するトランザクション152iは存在しており正当性確認されている必要がある。したがって、本明細書では「先行する」とは、ポインタによってつながれた論理的なシーケンスにおいて先行するものを指し、時系列における作成または送信の時間を必ずしも指さないので、トランザクション152i、152jが異なる順序で作成または送信されることを必ずしも排除しない(オーファントランザクションについての以下の議論を参照)。先行するトランザクション152iは、祖先トランザクションまたは前任トランザクションとして等価的に呼ばれ得る。
【0022】
現在のトランザクション152jの入力は、入力の認可、たとえば、先行するトランザクション152iの出力がロックされるユーザ103aの署名も備える。そして、現在のトランザクション152jの出力は、新しいユーザまたはエンティティ103bに暗号的にロックされ得る。したがって、現在のトランザクション152jは、先行するトランザクション152iの入力において定義される額を、現在のトランザクション152jの出力において定義されるような新しいユーザまたはエンティティ103bに移すことができる。いくつかの場合、トランザクション152は、複数のユーザまたはエンティティ(それらの1名は変化を与えるために元のユーザまたはエンティティ103aであり得る)の間で入力された額を分割するための複数の出力を有し得る。いくつかの場合、トランザクションはまた、1つまたは複数の先行するトランザクションの複数の出力からの額を共に集めるために複数の入力を有し、現在のトランザクションの1つまたは複数の出力に再分配し得る。
【0023】
ビットコインなどの出力ベースのトランザクションプロトコルによれば、個人のユーザまたは組織などの関係者103が新しいトランザクション152jを制定する(手動で、または関係者によって利用される自動プロセスによってのいずれかで)ことを望むとき、制定する関係者は、そのコンピュータ端末102から受信者に新しいトランザクションを送信する。制定する関係者または受信者は最終的に、このトランザクションをネットワーク106のブロックチェーンノード104(これは今日では通常はサーバまたはデータセンターであるが、原則として他のユーザ端末であってもよい)のうちの1つまたは複数に送信する。新しいトランザクション152jを制定する関係者103が、ブロックチェーンノード104のうちの1つまたは複数にトランザクションを直接送信してもよく、いくつかの例では受信者に送信しなくてもよいことも排除されない。トランザクションを受信するブロックチェーンノード104は、ブロックチェーンノード104の各々において適用されるブロックチェーンノードプロトコルに従って、トランザクションが正当であるかどうかを確認する。ブロックチェーンノードプロトコルは通常、新しいトランザクション152jにおける暗号署名が予想される署名と一致することをブロックチェーンノード104が確認することを必要とし、これは、トランザクション152の順序付けられたシーケンスにおける以前のトランザクション152iに依存する。そのような出力ベースのトランザクションプロトコルでは、これは、新しいトランザクション152jの入力に含まれる関係者103の暗号署名または他の認可が、新しいトランザクションが消費する(または「割り当てる」)先行するトランザクション152iの出力において定義される条件と一致することを確認することを備えてもよく、この条件は通常、新しいトランザクション152jの入力における暗号署名または他の認可が、新しいトランザクションの入力がリンクされる対象である以前のトランザクション152iの出力をロック解除することを、少なくとも確認することを備える。この条件は、先行するトランザクション152iの出力に含まれるスクリプトによって少なくとも部分的に定義され得る。代替として、それは、単にブロックチェーンノードプロトコルだけによって定められてもよく、またはこれらの組合せによるものであってもよい。いずれにしても、新しいトランザクション152jが正当である場合、ブロックチェーンノード104は、それをブロックチェーンネットワーク106の中の1つまたは複数の他のブロックチェーンノード104に転送する。これらの他のブロックチェーンノード104は、同じブロックチェーンノードプロトコルに従って同じテストを適用し、新しいトランザクション152jを1つまたは複数のさらなるノード104に転送するなどする。このようにして、新しいトランザクションは、ブロックチェーンノード104のネットワーク全体に伝播される。
【0024】
出力ベースのモデルでは、所与の出力(たとえば、UTXO)が割り当てられる(または「消費される」)かどうかの定義は、それがブロックチェーンノードプロトコルに従って別の前方のトランザクション152jの入力によってまだ正当に引き換えられていないかどうかである。トランザクションが正当であるための別の条件は、それが引き換えようとする先行するトランザクション152iの出力が別のトランザクションによってまだ引き換えられていないことである。やはり、正当ではない場合、トランザクション152jは、ブロックチェーン150において広められず(不正であるとフラグを付けられて警告のために広められない限り)、または記録されない。これは、取引者が同じトランザクションの出力を1回より多く割り当てようとするような二重消費から保護する。一方、アカウントベースモデルは、アカウントの残高を維持することによって二重消費から保護する。やはり、トランザクションに定義された順序はないので、アカウントの残高は任意のある時間において単一の定義された状態を有する。
【0025】
トランザクションを正当性確認することに加えて、ブロックチェーンノード104はまた、マイニングと一般に呼ばれるプロセスにおいてトランザクションのブロックを競って最初に作成しようとし、これは「プルーフオブワーク」によって支援される。ブロックチェーンノード104において、ブロックチェーン150に記録されたブロック151にまだ現れていない新しいトランザクションが、正当なトランザクションの順序付けられたプール154に追加される。そして、ブロックチェーンノードは、暗号パズルを解こうとすることによって、トランザクション154の順序付けられたセットからトランザクション152の新しい正当なブロック151を競って組み立てる。通常、これは、「ノンス」が未処理のトランザクション154の順序付けられたプールの表現と連結されハッシュされると、ハッシュの出力が所定の条件を満たすような、ノンス値を探すことを備える。たとえば、所定の条件は、ハッシュの出力がある定義された数の先頭の0を有することであり得る。これは、1つの特定のタイプのプルーフオブワークのパズルにすぎず、他のタイプが排除されないことに留意されたい。ハッシュ関数の性質は、その入力に関して予測不可能な出力を有するというものである。したがって、この探索は、力ずくで実行することしかできないので、パズルを解こうとする各ブロックチェーンノード104において大量の処理リソースを消費する。
【0026】
パズルを解くことになる第1のブロックチェーンノード104は、これをネットワーク106に告知し、解を証明として提供し、証明は次いでネットワークの中の他のブロックチェーンノード104によって容易に確認され得る(ハッシュに対する解が与えられれば、その解によりハッシュの出力が条件を満たすようになることを確認するのは簡単である)。第1のブロックチェーンノード104は、ブロックを受け入れてプロトコルルールを施行する、合意された閾値の数の他のノード(threshold consensus of other nodes)にブロックを伝播する。そして、トランザクション154の順序付けられたセットは、ブロックチェーンノード104の各々によってブロックチェーン150の中の新しいブロック151として記録されるようになる。ブロックポインタ155は、チェーンの中の以前に作成されたブロック151n-1を指し示す新しいブロック151nにも割り当てられる。プルーフオブワークの解を作り出すために必要とされる、たとえばハッシュの形態の大量の努力は、ブロックチェーンプロトコルのルールに従おうとする第1のノード104の意思を示す。そのようなルールは、以前に正当性確認されたトランザクションと同じ出力を消費するまたは割り当てる場合(これは二重消費としても知られている)、正当であるものとしてトランザクションを受け入れないことを含む。作成されると、ブロック151を改変することはできず、それは、ブロックチェーンネットワーク106の中のブロックチェーンノード104の各々においてブロック151が認識されて維持されるからである。ブロックポインタ155はまた、ブロック151に逐次的な順序を課す。トランザクション152はネットワーク106の中の各ブロックチェーンノード104において順序付けられたブロックに記録されるので、これはトランザクションの変更不可能な公開台帳になる。
【0027】
任意の所与の時間においてパズルを競って解く異なるブロックチェーンノード104は、解の探索をいつ開始したか、またはトランザクションが受信された順序に応じて、任意の所与の時間においてまだ公開されていないトランザクション154のプールの異なるスナップショットに基づいて、それを行い得ることに留意されたい。それぞれのパズルを最初に解いた者が、どのトランザクション152が次の新しいブロック151nに含まれてどの順序で含まれるかを定義し、公開されていないトランザクションの現在のプール154が更新される。次いで、ブロックチェーンノード104は、公開されていないトランザクション154の新しく定義された順序付けられたプールからブロックを競って作成し続けるなどする。生じ得るあらゆる「フォーク」を解くためのプロトコルも存在し、これは、2つのブロックチェーンノード104が互いに非常に短い時間内にパズルを解き、ブロックチェーンの矛盾する見方がノード104間で伝播されるような状況である。つまり、フォークの枝が最も長くなったものが、最終的なブロックチェーン150になる。同じトランザクションが両方のフォークに現れるので、これはネットワークのユーザまたはエージェントに影響しないはずであることに留意されたい。
【0028】
ビットコインブロックチェーン(および大半の他のブロックチェーン)に従うと、新しいブロック104を構築することに成功するノードは、追加の定められた量のデジタル資産を分配する新しい特別な種類のトランザクション(あるエージェントまたはユーザから別の者にある額のデジタル資産を移すエージェント間またはユーザ間トランザクションではなく)において、追加の受け入れられる額のデジタル資産を新しく割り当てるための能力を与えられる。この特別なタイプのトランザクションは通常、「コインベーストランザクション」と呼ばれるが、「初期トランザクション」または「生成トランザクション」とも名付けられ得る。それは、通常は新しいブロック151nの最初のトランザクションを形成する。プルーフオブワークは、この特別なトランザクションが後で引き換えられることを可能にするプロトコルルールに従おうという、新しいブロックを構築するノードの意思を示す。ブロックチェーンプロトコルルールは、この特別なトランザクションが引き換えられるようになるまでに、成熟期間、たとえば100ブロックを必要とし得る。しばしば、普通の(非生成)トランザクション152は、そのトランザクションがその中で公開されるブロック151nを作成したブロックチェーンノード104にさらに報いるために、その出力の1つにおいて追加のトランザクションフィーも指定する。このフィーは通常、「トランザクションフィー」と呼ばれ、以下で論じられる。
【0029】
トランザクションの正当性確認および公開に関与するリソースにより、通常はブロックチェーンノード104の少なくとも各々が、1つまたは複数の物理的なサーバユニットを備えるサーバ、またはデータセンター全体という形態すらもとる。しかしながら、原則として、任意の所与のブロックチェーンノード104は、ユーザ端末、または共にネットワーク接続されるユーザ端末のグループの形態をとり得る。
【0030】
各ブロックチェーンノード104のメモリは、それぞれの役割を実行してブロックチェーンノードプロトコルに従ってトランザクション152を扱うために、ブロックチェーンノード104の処理装置上で実行するように構成されるソフトウェアを記憶する。本明細書でブロックチェーンノード104に帰されるあらゆるアクションは、それぞれのコンピュータ機器の処理装置上で実行されるソフトウェアによって実行されてもよいことが理解されるだろう。ノードソフトウェアは、アプリケーションレイヤにおける1つまたは複数のアプリケーション、またはオペレーティングシステムレイヤもしくはプロトコルレイヤなどのより下のレイヤ、またはこれらの任意の組合せにおいて実装され得る。
【0031】
消費するユーザの役割を果たす複数の関係者103の各々のコンピュータ機器102も、ネットワーク101に接続される。これらのユーザは、ブロックチェーンネットワーク106と対話し得るが、トランザクションを正当性確認することまたはブロックを構築することに参加しない。これらのユーザまたはエージェント103の一部は、トランザクションにおいて送信者および受信者として振る舞い得る。他のユーザは、送信者または受信者として必ずしも振る舞わずにブロックチェーン150と対話し得る。たとえば、一部の関係者は、ブロックチェーン150のコピーを記憶する(たとえば、ブロックチェーンノード104からブロックチェーンのコピーを取得した)記憶エンティティとして振る舞い得る。
【0032】
関係者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の関係者」で置き換えられ得ることが理解されるだろう。
【0033】
各関係者103のコンピュータ機器102は、1つまたは複数のプロセッサ、たとえば、1つまたは複数のCPU、GPU、他のアクセラレータプロセッサ、特定用途向けプロセッサ、および/またはFPGAを備える、それぞれの処理装置を備える。各関係者103のコンピュータ機器102はさらに、メモリ、すなわち、非一時的コンピュータ可読媒体の形態のコンピュータ可読ストレージを備える。このメモリは、1つまたは複数のメモリ媒体、たとえば、ハードディスクなどの磁気媒体、SSD、フラッシュメモリ、もしくはEEPROMなどの電子媒体、および/または光ディスクドライブなどの光媒体を利用する、1つまたは複数のメモリユニットを備え得る。各関係者103のコンピュータ機器102のメモリは、処理装置上で実行されるようになされる少なくとも1つのクライアントアプリケーション105のそれぞれの実体を備えるソフトウェアを記憶する。所与の関係者103に本明細書では帰されるあらゆるアクションが、それぞれのコンピュータ機器102の処理装置で実行されるソフトウェアを使用して実行され得ることが理解されるだろう。各関係者103のコンピュータ機器102は、少なくとも1つのユーザ端末、たとえば、デスクトップもしくはラップトップコンピュータ、タブレット、スマートフォン、またはスマートウォッチなどのウェアラブルデバイスを備える。所与の関係者103のコンピュータ機器102はまた、ユーザ端末を介してアクセスされるクラウドコンピューティングリソースなどの、1つまたは複数の他のネットワーク接続されたリソースを備え得る。
【0034】
クライアントアプリケーション105は最初に、適切なコンピュータ可読記憶媒体上で任意の所与の関係者103のコンピュータ機器102に提供され、たとえば、サーバからダウンロードされ、リムーバブルSSD、フラッシュメモリキー、リムーバブルEEPROM、リムーバブル磁気ディスクドライブ、磁気フロッピーディスクもしくはテープ、CDもしくはDVD ROMなどの光ディスク、またはリムーバブル光学ドライブなどの、リムーバブル記憶デバイスで提供されてもよい。
【0035】
クライアントアプリケーション105は、少なくとも「ウォレット」機能を備える。これには2つの主要な機能がある。これらの一方は、それぞれの関係者103が、トランザクション152を作成し、認可し(たとえば署名し)、1つまたは複数のビットコインノード104に送信して、トランザクション152がブロックチェーンノード104のネットワーク全体に広められ、それによりブロックチェーン150に含まれるようにすることを可能にすることである。他方は、それぞれの関係者が現在所有するデジタル資産の額をそれぞれの関係者に報告することである。出力ベースのシステムでは、第2の機能は、対象の関係者に属する、ブロックチェーン150全体に散在した様々なトランザクション152の出力において定義される額を照合することを備える。
【0036】
注意:様々なクライアント機能は、所与のクライアントアプリケーション105へと統合されるものとして説明されることがあるが、これは必ずしも限定するものではなく、本明細書で説明されるあらゆるクライアント機能は代わりに、たとえばAPIを介してインターフェースする、または一方が他方へのプラグインである、2つ以上の別個のアプリケーションのスイートで実装されてもよい。より一般的には、クライアント機能は、アプリケーションレイヤ、オペレーティングシステムなどのより下のレイヤ、またはこれらの任意の組合せにおいて実装され得る。以下は、クライアントアプリケーション105に関して説明されるが、これは限定するものではないことが理解されるだろう。
【0037】
各コンピュータ機器102上のクライアントアプリケーションまたはソフトウェア105の実体は、ネットワーク106のブロックチェーンノード104の少なくとも1つに動作可能に結合される。これは、クライアント105のウォレット機能がトランザクション152をネットワーク106に送信することを可能にする。クライアント105は、それぞれの関係者103がその受信者であるあらゆるトランザクションについてブロックチェーン150に尋ねるために(または、実施形態において、ブロックチェーン150が、一部には公に見えていることによりトランザクションに信用をもたらす公的な機関であるので、ブロックチェーン150における他の関係者のトランザクションを実際に調査するために)、ブロックチェーンノード104に連絡することも可能である。各コンピュータ機器102のウォレット機能は、トランザクションプロトコルに従ってトランザクション152を編成して送信するように構成される。上で述べられたように、各ブロックチェーンノード104は、ブロックチェーンノードプロトコルに従ってトランザクション152を正当性確認し、ブロックチェーンネットワーク106全体にトランザクション152を伝播するためにトランザクション152を転送するように構成される、ソフトウェアを実行する。トランザクションプロトコルおよびノードプロトコルは互いに対応し、所与のトランザクションプロトコルは所与のノードプロトコルに付随し、所与のトランザクションモデルを共に実装する。ブロックチェーン150の中のすべてのトランザクション152に同じトランザクションプロトコルが使用される。同じノードプロトコルは、ネットワーク106の中のすべてのノード104によって使用される。
【0038】
所与の関係者103、たとえばAliceが、ブロックチェーン150に含められるように新しいトランザクション152jを送信することを望むとき、Aliceは関連するトランザクションプロトコルに従って(Aliceのクライアントアプリケーション105のウォレット機能を使用して)新しいトランザクションを編成する。Aliceは次いで、クライアントアプリケーション105から、Aliceが接続されている1つまたは複数のブロックチェーンノード104に、トランザクション152を送信する。たとえば、これは、Aliceのコンピュータ102に最良に接続されるブロックチェーンノード104であり得る。任意の所与のブロックチェーンノード104が新しいトランザクション152jを受信するとき、ブロックチェーンノード104は、ブロックチェーンノードプロトコルおよびそのそれぞれの役割に従ってトランザクション152jを扱う。これは、新しく受信されたトランザクション152jが「正当である」ためのある条件を満たすかどうかをまず確認することを備え、この例がまもなく詳しく論じられる。いくつかのトランザクションプロトコルでは、正当性確認のための条件は、トランザクション152に含まれるスクリプトによってトランザクションごとに構成可能であり得る。代替として、条件は単に、ノードプロトコルの内蔵機能であってもよく、またはスクリプトとノードプロトコルの組合せによって定義されてもよい。
【0039】
新しく受信されたトランザクション152jが正当であると見なされるための(すなわち、それが「正当性確認される」条件についての)テストに合格することを条件に、トランザクション152jを受信するあらゆるブロックチェーンノード104が、そのブロックチェーンノード104において維持されるトランザクション154の順序付けられたセットに新しく正当性確認されたトランザクション152を追加する。さらに、トランザクション152jを受信するあらゆるブロックチェーンノード104が、正当性確認されたトランザクション152を、ネットワーク106内の1つまたは複数の他のブロックチェーンノード104へ前方に伝播する。各ブロックチェーンノード104は同じプロトコルを適用するので、トランザクション152jが正当であると仮定すると、これは、トランザクション152jがネットワーク106全体にまもなく伝播されることを意味する。
【0040】
所与のブロックチェーンノード104において維持される未処理のトランザクション154の順序付けられたプールに入ることを認められると、そのブロックチェーンノード104は、新しいトランザクション152を含むそれぞれのプール154の最新のバージョンについてプルーフオブワークのパズルを競って解き始める(他のブロックチェーンノード104はトランザクション154の異なるプールに基づいてパズルを解こうとしていることがあるが、最初に解いた者が最新のブロック151に含まれるトランザクションのセットを定義することを思い出されたい。最終的に、ブロックチェーンノード104は、Aliceのトランザクション152jを含む順序付けられたプール154の部分に対するパズルを解く)。新しいトランザクション152jを含むプール154に対してプルーフオブワークが行われると、それは変更不可能に、ブロックチェーン150の中のブロック151の1つの一部になる。各トランザクション152は、より早いトランザクションへのポインタを備えるので、トランザクションの順序も変更不可能に記録される。
【0041】
異なるブロックチェーンノード104は、所与のトランザクションの異なる実例を最初に受信するので、ある実例が新しいブロック151において公開される前にはどの実例が「正当」であるかについての矛盾する見方を有することがあり、その公開の時点では、すべてのブロックチェーンノード104が、公開された実例が唯一の正当な実例であることに合意する。ブロックチェーンノード104がある実例を正当であるものとして受け入れ、ブロックチェーン150に第2の実例が記録されていることを発見する場合、そのブロックチェーンノード104はこれを受け入れなければならず、それが最初に受け入れた実例(すなわち、ブロック151において公開されていないもの)を廃棄する(すなわち、不正として扱う)。
【0042】
一部のブロックチェーンネットワークによって運用される代替のタイプのトランザクションプロトコルは、アカウントベースのトランザクションモデルの一部として、「アカウントベース」のプロトコルと呼ばれ得る。アカウントベースの場合、各トランザクションは、過去のトランザクションのシーケンスの中の先行するトランザクションのUTXOを参照することによってではなく、絶対的なアカウントの残高を参照することによって、移されるべき額を定義する。すべてのアカウントの現在の状態は、そのネットワークのノードによって、ブロックチェーンに別々に記憶され、常に更新される。そのようなシステムでは、トランザクションは、アカウントのトランザクション実行記録(「ポジション」とも呼ばれる)を使用して順序付けられる。この値は、送信者の暗号署名の一部として送信者によって署名され、トランザクション参照計算の一部としてハッシュされる。加えて、任意選択のデータフィールドは、署名されたトランザクションでもあり得る。このデータフィールドは、たとえば以前のトランザクションIDがこのデータフィールドに含まれる場合、以前のトランザクションを指し示し得る。
【0043】
2. UTXOベースモデル
図2は、例示的なトランザクションプロトコルを示す。これは、UTXOベースのプロトコルの例である。トランザクション152(「Tx」と省略される)は、ブロックチェーン150の基本的なデータ構造である(各ブロック151が1つまたは複数のトランザクション152を備える)。以下は、出力ベースまたは「UTXO」ベースプロトコルを参照して説明される。しかしながら、これはすべての可能な実施形態に対する制限ではない。例示的なUTXOベースプロトコルはビットコインを参照して説明されるが、それは他の例示的なブロックチェーンネットワーク上で等しく実装され得ることに留意されたい。
【0044】
UTXOベースモデルでは、各トランザクション(「Tx」)152は、1つまたは複数の入力202および1つまたは複数の出力203を備えるデータ構造を備える。各出力203は未消費トランザクション出力(UTXO)を備えてもよく、これは、別の新しいトランザクションの入力202のためのソースとして使用され得る(UTXOがまだ引き換えられていない場合)。UTXOはデジタル資産の額を指定する値を含む。これは、分散型台帳上の設定された数のトークンを表す。UTXOはまた、情報の中でもとりわけ、それが由来するトランザクションのトランザクションIDを含み得る。トランザクションデータ構造はヘッダ201も備えてもよく、これは、入力フィールド202および出力フィールド203のサイズを示すものを備えてもよい。ヘッダ201はまた、トランザクションのIDを含んでもよい。実施形態では、トランザクションIDは、トランザクションデータのハッシュ(トランザクションID自体を除く)であり、ノード104に提出される生のトランザクション152のヘッダ201に記憶される。
【0045】
Alice 103aが、対象のデジタル資産の額をBob 103bに移すトランザクション152jを作成することを望んでいるとする。図2では、Aliceの新しいトランザクション152jは「Tx1」と標識される。それは、シーケンスの中の先行するトランザクション152iの出力203においてAliceにロックされるデジタル資産の額をもち、この少なくとも一部をBobに移す。先行するトランザクション152iは図2では「Tx0」と標識される。Tx0およびTx1は恣意的なラベルにすぎない。それらは、Tx0がブロックチェーン151において最初のトランザクションであることも、Tx1がプール154において直後のトランザクションであることも必ずしも意味しない。Tx1は、Aliceにロックされた未消費の出力203をまだ有する任意の先行する(すなわち、祖先)トランザクションを指し示し得る。
【0046】
Aliceが新しいトランザクションTx1を作成するときには、または少なくとも、Aliceがそれをネットワーク106に送信するまでには、その時点で先行するトランザクションTx0はすでに正当性確認されており、ブロックチェーン150のブロック151に含められていることがある。それは、その時点でブロック151の1つにすでに含められていることがあり、または、順序付けられたセット154においてまだ待機していることがあり、その場合、それは新しいブロック151にまもなく含められる。代替として、Tx0およびTx1は、作成されてネットワーク106に共に送信されてもよく、または、ノードプロトコルが「オーファン」トランザクションのバッファリングを許容する場合、Tx0がTx1の後に送信されることすらあってもよい。トランザクションのシーケンスの文脈において本明細書で使用されるような「先行する」および「後続の」という用語は、トランザクションにおいて指定されるトランザクションポインタによって定義されるようなシーケンスにおけるトランザクションの順序を指す(どのトランザクションがどの他のトランザクションを指し示すかなど)。それらは、「前任者」および「後任者」、または「祖先」および「子孫」、「親」および「子」などで等しく置き換えられ得る。それは、それらが作成される順序、ネットワーク106に送信される順序、または任意の所与のブロックチェーンノード104に到達する順序を必ずしも示唆しない。それでも、先行するトランザクション(祖先トランザクションまたは「親」)を指し示す後続のトランザクション(子孫トランザクションまたは「子」)は、親トランザクションが正当性確認されるまで、かつそうされない限り、正当性確認されない。その親より前にブロックチェーンノード104に到達する子は、オーファンであると見なされる。それは、ノードプロトコルおよび/またはノード挙動に応じて、廃棄されてもよく、または親を待機するためにある期間バッファリングされてもよい。
【0047】
先行するトランザクションTx0の1つまたは複数の出力203の1つは、UTXO0とここでは標識される特定のUTXOを備える。各UTXOは、UTXOによって表されるデジタル資産の額を指定する値と、後続のトランザクションが正当性確認されるために、したがってUTXOの引き換えが成功するために、後続のトランザクションの入力202の中のロック解除スクリプトによって満たされなければならない条件を定義する、ロックスクリプトとを備える。通常、ロックスクリプトは、その額を特定の関係者(ロックスクリプトが含まれるトランザクションの受取人)にロックする。すなわち、ロックスクリプトはロック解除条件を定義し、これは通常、後続のトランザクションの入力の中のロック解除スクリプトが、先行するトランザクションがロックされる先の関係者の暗号署名を備えるという条件を備える。
【0048】
ロックスクリプト(scriptPubKeyとしても知られている)は、ノードプロトコルによって認識される分野固有の言語によって書かれるコードである。そのような言語の特定の例は、ブロックチェーンネットワークによって使用される「Script」(大文字のS)と呼ばれる。ロックスクリプトは、トランザクション出力203を消費するためにどのような情報が必要とされるか、たとえば、Aliceの署名の要件を指定する。ロック解除スクリプトは、トランザクションの出力に現れる。ロック解除スクリプト(scriptSigとしても知られている)は、ロックスクリプト基準を満たすために必要とされる情報を提供する分野固有の言語で書かれたコードである。たとえば、それはBobの署名を含み得る。ロック解除スクリプトは、トランザクションの入力202に現れる。
【0049】
よって、示される例では、Tx0の出力203の中のUTXO0はロックスクリプト[Checksig PA]を備え、これは、UTXO0が引き換えられるために(厳密には、UTXO0を引き換えることを試みる後続のトランザクションが正当であるために)、Aliceの署名Sig PAを必要とする。[Checksig PA]は、Aliceの公開鍵-秘密鍵ペアからの公開鍵PAの表現(すなわち、ハッシュ)を含む。Tx1の入力202は、Tx1を指し示す(たとえば、トランザクションID TxID0によって指し示す、ここで、実施形態ではTxID0はトランザクションTx0全体のハッシュである)ポインタを備える。Tx1の入力202は、Tx0のあらゆる他のあり得る出力の中からUTXO0を特定するために、Tx0内のUTXO0を特定するインデックスを備える。Tx1の入力202はさらにロック解除スクリプト<Sig PA>を備え、これは、Aliceが鍵のペアからの自分の秘密鍵をデータのあらかじめ定められた部分(暗号学では「メッセージ」と呼ばれることがある)に適用することによって作成される、Aliceの暗号署名を備える。正当な署名を提供するためにAliceによって署名される必要のあるデータ(または「メッセージ」)は、ロックスクリプトによって、またはノードプロトコルによって、またはこれらの組合せによって定義され得る。
【0050】
新しいトランザクションTx1がブロックチェーンノード104に到達すると、そのノードはノードプロトコルを適用する。これは、ロック解除スクリプトがロックスクリプトにおいて定義される条件(ここで、この条件は1つまたは複数の基準を備え得る)を満たすかどうかを確認するために、ロックスクリプトとロック解除スクリプトを共に実行することを備える。実施形態では、これは2つのスクリプトを連結することを伴う。
<Sig PA><PA>||[Checksig PA]
ここで、「||」は連結を表し、「<…>」はスタックにデータを置くことを意味し、「[…]」はロックスクリプトが含む機能(この例ではスタックベースの言語)である。等価的に、スクリプトは、スクリプトを連結するのではなく、共通のスタックを用いて次々に実行されてもよい。いずれにしても、共に実行されると、これらのスクリプトは、Tx0の出力の中のロックスクリプトに含まれるようなAliceの公開鍵PAを使用して、Tx1の入力の中のロック解除スクリプトがデータの予想される部分に署名するAliceの署名を含むことを認証する。データの予想される部分自体(「メッセージ」)も、この認証を実行するために含まれる必要がある。実施形態では、署名されたデータはTx1の全体を備える(よって、データの署名された部分を平文で指定する別個の要素は、本質的にすでに存在しているので、含まれる必要はない)。
【0051】
公開-秘密暗号による認証の詳細は、当業者に馴染みがある。基本的に、Aliceが自分の秘密鍵を使用してメッセージを署名している場合、Aliceの公開鍵と平文と平文のメッセージがあれば、ノード104などの別のエンティティが、メッセージがAliceによって署名されたに違いないと認証することが可能である。署名は通常、メッセージをハッシュすること、ハッシュに署名すること、およびこれを署名としてメッセージにタグ付けして、それにより公開鍵のあらゆる保有者が署名を認証することを可能にすることを備える。したがって、特定のデータまたはトランザクションの部分などに署名することへの本明細書におけるあらゆる言及は、実施形態において、そのデータまたはトランザクションの部分のハッシュに署名することを意味し得ることに留意されたい。
【0052】
Tx1におけるロック解除スクリプトがTx0のロックスクリプトにおいて指定される1つまたは複数の条件を満たす場合(よって示される例では、Aliceの署名がTx1において提供されて認証される)、ブロックチェーンノード104はTx1を正当であると見なす。これは、ブロックチェーンノード104がTx1を未処理のトランザクション154の順序付けられたプールに追加することを意味する。ブロックチェーンノード104はまた、トランザクションTx1をネットワーク106内の1つまたは複数の他のブロックチェーンノード104に転送するので、トランザクションTx1はネットワーク106全体に伝播される。Tx1が正当性確認されてブロックチェーン150に含められると、これはTx0からのUTXO0を消費されたものとして定義する。Tx1は、それが未消費トランザクション出力203を消費する場合にのみ、正当であり得ることに留意されたい。Tx1が別のトランザクション152によってすでに消費されている出力を消費しようとする場合、Tx1はすべての他の条件が満たされる場合でも不正である。したがって、ブロックチェーンノード104はまた、先行するトランザクションTx0における参照されるUTXOがすでに消費されているかどうか(すなわち、それが別の正当なトランザクションへの正当な入力をすでに形成したかどうか)を確認する必要もある。これは、トランザクション152に定められた順序を課すことがブロックチェーン150にとって重要である1つの理由である。実際には、所与のブロックチェーンノード104は、トランザクション152がどのUTXO203で消費されたかをマークする別個のデータベースを維持し得るが、UTXOが消費されたかどうかを最終的に定義するものは、それがブロックチェーン150において別の正当なトランザクションへの正当な入力をすでに形成しているかどうかである。
【0053】
所与のトランザクション152のすべての出力203において指定される総額がすべてのその入力202によって指し示される総額より大きい場合、これは、大半のトランザクションモデルにおいて無効性の別の根拠になる。したがって、そのようなトランザクションは、ブロック151において伝播されることも含められることもない。
【0054】
UTXOベースのトランザクションモデルでは、所与のUTXOは全体として消費される必要があることに留意されたい。UTXOにおいて定義される額の一部が未消費として「置き去りにされる」一方で、別の一部が消費されることはない。しかしながら、UTXOからの額は、次のトランザクションの複数の出力の間で分割され得る。たとえば、Tx0の中のUTXO0において定義される額は、Tx1において複数のUTXOの間で分割され得る。したがって、AliceがUTXO0において定義される額のすべてをBobに与えたくない場合、Aliceは、リマインダーを使用して、Tx1の第2の出力において自分自身に釣銭を与え、または別の関係者に支払うことができる。
【0055】
実際には、Aliceは通常、ブロック151に自分のトランザクション104を含めることに成功するビットコインノード104のためのフィーを含める必要もある。Aliceがそのようなフィーを含めない場合、Tx0はブロックチェーンノード104によって拒否され得るので、技術的に正当であっても、ブロックチェーン150において広められず、含められないことがある(ノードプロトコルは、ブロックチェーンノード104が望まない場合、トランザクション152を受け入れることを強いない)。いくつかのプロトコルでは、トランザクションフィーは、固有の別個の出力203を必要としない(すなわち、別個のUTXOを必要としない)。代わりに、所与のトランザクション152の入力202によって指し示される総額と出力203において指定される総額とのあらゆる差が、トランザクションを発行するブロックチェーンノード104に自動的に与えられる。たとえば、UTXO0へのポインタがTx1への唯一の入力であり、Tx1が1つだけの出力UTXO1を有するとする。UTXO0において指定されるデジタル資産の額がUTXO1において指定される額より大きい場合、UTXO1を含むブロックを作成するためのプルーフオブワークの競争に勝つノード104によって差が割り当てられ(または消費され)得る。しかしながら、代替または追加として、トランザクションフィーがトランザクション152のUTXO203のうちの固有の1つにおいて明確に指定され得ることも必ずしも排除されない。
【0056】
AliceとBobのデジタル資産は、ブロックチェーン150の中の任意の場所の任意のトランザクション152において彼らにロックされたUTXOからなる。したがって、通常は、所与の関係者103の資産は、ブロックチェーン150全体の様々なトランザクション152のUTXO全体に散在する。所与の関係者103の全体の残高を定義する1つの数字が、ブロックチェーン150のどこかに記憶されることはない。それぞれの関係者にロックされ、別の前方のトランザクションにおいてまだ消費されていないすべての様々なUTXOの値を共に照合することが、クライアントアプリケーション105のウォレット機能の役割である。ウォレット機能は、ビットコインノード104のいずれかに記憶されているようなブロックチェーン150のコピーをクエリすることによってこれを行うことができる。
【0057】
スクリプトコードは、しばしば概略的に表される(すなわち、厳密な言語を使用しない)ことに留意されたい。たとえば、特定の機能を表すために、オペレーションコード(オペコード)を使用することがある。「OP_...」はScript言語の特定のオペコードを指す。例として、OP_RETURNは、ロックスクリプトの最初においてOP_FALSEが前にあるときに、トランザクション内のデータを記憶できるトランザクションの消費不可能な出力を作成し、それによりブロックチェーン150に変更不可能にデータを記録するような、Script言語のオペコードである。たとえば、データは、ブロックチェーンに記憶することが望まれる文書を備え得る。
【0058】
通常、トランザクションの入力は、公開鍵PAに対応するデジタル署名を含む。実施形態において、これは楕円曲線secp256k1を使用するECDSAに基づく。デジタル署名は特定のデータに署名する。いくつかの実施形態では、所与のトランザクションに対して、署名は、トランザクション入力の一部、およびトランザクション出力の一部またはすべてに署名する。デジタル署名が署名する出力の具体的な部分は、SIGHASHフラグに依存する。SIGHASHフラグは通常、どの出力が署名されるかを選択するための(したがって署名の時点で固定される)、署名の最後に含まれる4バイトコードである。
【0059】
ロックスクリプトは「scriptPubKey」と呼ばれることがあり、これは、それぞれのトランザクションがロックされる先の関係者の公開鍵をロックスクリプトが通常は備えるという事実に関連している。ロック解除スクリプトは「scriptSig」と呼ばれることがあり、これは、ロック解除スクリプトが対応する署名を通常は供給するという事実に関連している。しかしながら、より一般的には、UTXOが引き換えられるための条件が署名を認証することを含むことは、ブロックチェーン150のすべての適用例において必須ではない。より一般的には、スクリプティング言語は、任意の1つまたは複数の条件を定義するために使用され得る。したがって、より一般的な用語「ロックスクリプト」および「ロック解除スクリプト」が好まれ得る。
【0060】
3. サイドチャネル
図1に示されるように、Aliceのコンピュータ機器102aおよびBobのコンピュータ機器102bの各々のクライアントアプリケーションは、追加の通信機能を備え得る。この追加の機能は、Alice 103aが(関係者または第三者のいずれかの教唆により)Bob 103bとの別個のサイドチャネル107を確立することを可能にする。サイドチャネル107は、ブロックチェーンネットワークとは別個にデータの交換を可能にする。そのような通信は、「オフチェーン」通信と呼ばれることがある。たとえば、これは、AliceとBobの一方がAliceとBobとの間のトランザクション152をネットワーク106にブロードキャストすることを選ぶまで、トランザクション152が(まだ)ブロックチェーンネットワーク106に登録されることなく、またはチェーン150に進入することなく、トランザクション152を交換するために使用され得る。このようにトランザクションを共有することは、「トランザクションテンプレート」の共有と呼ばれることがある。トランザクションテンプレートは、完全なトランザクションを形成するために必要とされる1つまたは複数の入力および/または出力を欠いていることがある。代替または追加として、サイドチャネル107は、鍵、交渉される額または条項、データコンテンツなどの、任意の他のトランザクション関連データを交換するために使用され得る。
【0061】
サイドチャネル107は、ブロックチェーンネットワーク106と同じパケット交換ネットワーク101を介して確立され得る。代替または追加として、サイドチャネル301は、モバイルセルラーネットワークなどの異なるネットワーク、またはローカルワイヤレスネットワークなどのローカルエリアネットワーク、またはさらにはAliceのデバイス102aとBobのデバイス102bの間の直接の有線もしくはワイヤレスリンクなどを介して確立され得る。一般に、本明細書の任意の箇所で言及されるサイドチャネル107は、「オフチェーン」で、すなわちブロックチェーンネットワーク106とは別個にデータを交換するための1つまたは複数のネットワーキング技術または通信媒体を介した、任意の1つまたは複数のリンクを備え得る。1つより多くのリンクが使用される場合、オフチェーンリンクの束または集合体は全体として、サイドチャネル107と呼ばれ得る。したがって、AliceとBobがサイドチャネル107を介してある情報またはデータなどを交換すると言われる場合、これは、すべてのこれらのデータが厳密に同じリンクを介して送信されなければならないこと、または同じタイプネットワークを送信されなければならないことすらも、必ずしも示唆しないことに留意されたい。
【0062】
4. クライアントソフトウェア
図3Aは、ここで開示される方式の実施形態を実装するためのクライアントアプリケーション105の例示的な実装形態を示す。クライアントアプリケーション105は、トランザクションエンジン401およびユーザインターフェース(UI)レイヤ402を備える。トランザクションエンジン401は、上で論じられた方式に従って、かつまもなくさらに詳しく論じられるように、トランザクション152を編成すること、サイドチャネル301を介してトランザクションおよび/もしくは他のデータを受信および/もしくは送信すること、ならびに/またはブロックチェーンネットワーク106を通じて伝播されるようにトランザクションを1つまたは複数のノード104に送信することなどの、クライアント105の土台のトランザクション関連機能を実装するように構成される。本明細書で開示される実施形態に従って、各クライアント105のトランザクションエンジン401は、データ値および関係者の署名から検証値を導出する機能403を備え、関係者は導出された検証値に基づいてトランザクションを提供する。
【0063】
UIレイヤ402は、機器102のユーザ出力手段を介して情報をそれぞれのユーザ103に出力すること、および機器102のユーザ入力手段を介して入力をそれぞれのユーザ103から受け取ることを含む、それぞれのユーザのコンピュータ機器102のユーザ入力/出力(I/O)手段を介してユーザインターフェースをレンダリングするように構成される。たとえば、ユーザ出力手段は、視覚的な出力を提供するための1つまたは複数の表示画面(タッチスクリーンまたは非タッチスクリーン)、オーディオ出力を提供するための1つまたは複数のスピーカー、および/または、触覚出力を提供するための1つまたは複数の触覚出力デバイスなどを備え得る。ユーザ入力手段は、たとえば、1つまたは複数のタッチスクリーンの入力アレイ(出力手段のために使用されるものと同じまたは異なる)、マウス、トラックパッド、もしくはトラックボールなどの1つまたは複数のカーソルベースのデバイス、発話もしくは音声入力を受け取るための1つまたは複数のマイクロフォンおよび発話もしくは音声認識アルゴリズム、手もしくは体のジェスチャの形式の入力を受け取るための1つまたは複数のジェスチャベース入力デバイス、または、1つまたは複数の機械的なボタン、スイッチ、もしくはジョイスティックなどを備え得る。
【0064】
注意:本明細書の様々な機能は同じクライアントアプリケーション105へと統合されるものとして説明され得るが、これは必ずしも限定するものではなく、代わりに、それらは2つ以上の別個のアプリケーションのスイートとして実装されてもよく、たとえば一方が他方へのプラグインであり、またはAPI(アプリケーションプログラミングインターフェース)を介してインターフェースする。たとえば、トランザクションエンジン401の機能は、UIレイヤ402とは別のアプリケーションにおいて実装されてもよく、または、トランザクションエンジン401などの所与のモジュールの機能は、1つより多くのアプリケーション間で分割されてもよい。説明される機能の一部またはすべてが、たとえばオペレーティングシステムレイヤにおいて実装され得ることも排除されない。本明細書の任意の箇所で単一または所与のアプリケーション105などへの言及が行われる場合、これは例にすぎず、より一般的には、説明される機能は任意の形態のソフトウェアで実装され得ることが理解されるだろう。
【0065】
図3Bは、Aliceの機器102aのクライアントアプリケーション105aのユーザインターフェース(UI)レイヤ402によってレンダリングされ得るUI500の例のモックアップを与える。同様のUIは、Bobの機器102b上または任意の他の関係者の機器のクライアント105bによってレンダリングされ得ることが、理解されるだろう。
【0066】
例示として、図3Bは、Aliceの観点からのUI500を示す。UI500は、ユーザ出力手段を介して別個のUI要素としてレンダリングされる1つまたは複数のUI要素501、502、503を備え得る。
【0067】
たとえば、UI要素は、異なる画面上のボタン、またはメニューの中の異なるオプションなどであり得る、1つまたは複数のユーザ選択可能要素501を備え得る。ユーザ入力手段は、UI要素を画面上でクリックもしくはタッチすること、または所望のオプションの名前を話すことなどによって、ユーザ103(この場合はAlice 103a)がオプションの1つを選択すること、または別様に動作させることを可能にするようになされる(本明細書で使用される「手動」という用語は、自動と対比することのみが意図され、手の使用に必ずしも限定されないことに注意)。このオプションは、ユーザ(Alice)が、検証が必要とされるデータアイテムのセット、またはそれから導出されたデータ値を選択することを可能にする。Aliceはまた、データを検証するための、証明トランザクションテンプレートを送信すべき1名または複数の作業者を選択することが可能であり得る。
【0068】
代替または追加として、UI要素は1つまたは複数のデータ入力フィールド502を含んでもよく、ユーザはそれを通じて、データアイテムの識別子および/または証明トランザクションテンプレートを受信するための作業者を入力することができる。これらのデータエントリフィールドは、ユーザ出力手段を介して、たとえば画面上でレンダリングされ、データは、ユーザ入力手段、たとえばキーボードまたはタッチスクリーンを通じてフィールドに入力され得る。代替として、データは、たとえば発話認識に基づいて口頭で受け取られ得る。
【0069】
代替または追加として、UI要素は、情報をユーザに出力するために、1つまたは複数の情報要素503の出力を備え得る。たとえば、これ/これらは画面上でまたは音声でレンダリングされ得る。
【0070】
様々なUI要素をレンダリングし、オプションを選択し、データを入力する具体的な手段は、不可欠ではないことが理解されるだろう。これらのUI要素の機能はまもなくより詳しく論じられる。図3に示されるUI500は、概略的なモックアップにすぎず、実際には、簡潔にするために示されていない1つまたは複数のさらなるUI要素を備えてもよいことも、理解されるだろう。
【0071】
5. ノードソフトウェア
図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に渡す。
【0072】
したがって、スクリプトエンジン452は、TxiのロックスクリプトおよびTxjの対応する入力からのロック解除スクリプトを有する。たとえば、Tx0およびTx1と標識されるトランザクションが図2に示されているが、同じことが任意のトランザクションの任意のペアに適用され得る。スクリプトエンジン452は、前に論じられたように2つのスクリプトを共に実行し、これは、使用されているスタックベースのスクリプティング言語(たとえば、Script)に従ってスタック453にデータを置き、それからデータを取り出すことを含む。
【0073】
スクリプトを共に実行することによって、スクリプトエンジン452は、ロック解除スクリプトがロックスクリプトにおいて定義される1つまたは複数の基準を満たすかどうか、すなわち、ロックスクリプトが含まれる出力を「ロック解除する」かどうかを決定する。スクリプトエンジン452は、この決定の結果をプロトコルエンジン451に返す。ロック解除スクリプトが対応するロックスクリプトにおいて指定される1つまたは複数の基準を満たすと、スクリプトエンジン452が決定する場合、スクリプトエンジン452は結果「真」を返す。それ以外の場合、それは結果「偽」を返す。
【0074】
出力ベースモデルでは、スクリプトエンジン452からの結果「真」は、トランザクションの正当性の条件の1つである。通常、同様に満たされなければならないプロトコルエンジン451により評価される1つまたは複数のさらなるプロトコルレベル条件もあり、それはたとえば、Txjの出力において指定されるデジタル資産の総額がその入力により指し示される総額を超えないこと、およびTxjの指し示される出力が別の正当なトランザクションによりまだ消費されていないことである。プロトコルエンジン451は、1つまたは複数のプロトコルレベル条件と共にスクリプトエンジン452からの結果を評価し、それらがすべて真である場合にのみ、トランザクションTxjを正当性確認する。プロトコルエンジン451は、トランザクションが正当であるかどうかの標示をアプリケーションレベル決定エンジン454に出力する。Txjが実際に正当性確認されるという条件のもとでのみ、決定エンジン454は、Txjに関してそれぞれのブロックチェーン関連機能を実行するようにコンセンサスモジュール455Cと伝播モジュール455Pの両方を制御することを選択し得る。これは、ブロック151に組み入れるためのトランザクション154のノードのそれぞれの順序付けられたセットにTxjを追加するコンセンサスモジュール455Cと、ネットワーク106の中の別のブロックチェーンノード104にTxjを転送する伝播モジュール455Pとを備える。任意選択で、実施形態では、アプリケーションレベル決定エンジン454は、これらの機能のいずれかまたは両方をトリガする前に、1つまたは複数の追加の条件を適用し得る。たとえば、決定エンジンは、トランザクションが正当であり、かつ十分なトランザクションフィーを残すという条件のもとでのみ、トランザクションを公開することを選択し得る。
【0075】
本明細書での「真」および「偽」という用語は、単一の二進の桁(ビット)の形態でのみ表される結果を返すことに必ずしも限定しないが、それは当然1つの可能な実装形態であることにも留意されたい。より一般的には、「真」は成功したまたは肯定的な結果を示すあらゆる状態を指すことができ、「偽」は失敗したまたは否定的な結果を示すあらゆる状態を指すことができる。たとえば、アカウントベースモデルでは、「真」の結果は、署名の暗黙的なプロトコルレベルの正当性確認と、スマートコントラクトの追加の肯定的な出力との組合せによって示され得る(両方の個々の結果が真である場合、全体の結果は真を示すと見なされる)。
【0076】
6. 署名方式
6.1 楕円曲線デジタル署名アルゴリズム(ECDSA)
ECDSA方式は、楕円曲線を使用してデジタル署名を作成して検証するために使用される。このセクションでは、デジタル署名を生成してそれをECDSA方式に基づいて検証するプロセスを簡単に説明する。デジタル署名は、UTXOの所有権を証明するために使用される。
【0077】
署名を生成するには、身元を証明するために秘密鍵Vが必要とされる。対応する公開鍵PKは
PK=V・G
により計算され、「・」は楕円曲線のスカラー積を示し、Gは楕円曲線の生成点である。
【0078】
ここで、秘密鍵Vが与えられると、ECDSA方式を使用してメッセージmについて以下のように署名が生成され得る。
1. SHA-256ハッシュ関数を使用してメッセージmを二重ハッシュする。
e=SHA-256(SHA-256(m))
2. 一時的な秘密鍵として整数k∈{1,2,…,n-1}をランダムに選ぶ。
3. 対応する一時的な公開鍵R=k・G=(x,y)を計算する。
4. 計算された点Rのx座標
r=[R]x
をとり、[R]xは楕円曲線の点のx座標をとるプロセスを示す。r=0である場合、署名はVに依存しないので、ステップ2に戻り別のkを選ぶことに留意されたい。
5. k mod nのモジュラ逆数k-1を計算し、nは何らかの素数の法である。
6. s=k-1(e+Vr) mod nを計算する。s=0である場合、ステップ2に戻り別のkを選ぶ。s≠0は、その逆数が必要とされるので署名検証が可能であることを確実にすることである。
7. そうすると署名は(r,s)により与えられる。
【0079】
kは一時的な鍵であり各事例に対して異なるので、同じメッセージmが異なる署名を有し得る。
【0080】
メッセージm、公開鍵PK、および署名(r,s)が与えられると、以下の計算を使用して署名を検証することができる。
R'=SHA-256(SHA-256(m))s-1・G+rs-1・PK
【0081】
[R']x=rである場合、署名は有効であり、そうではない場合、無効である。
【0082】
7. ブロックチェーンスクリプト
7.1 知識証明
「R-puzzle」は、消費する関係者が任意の有効な公開鍵-秘密鍵のペアを使用して入力UTXOに署名することを可能にするトランザクションスクリプトのタイプである。この鍵のペアは、用途固有であってもよく、一度だけの使用のためにランダムに生成されてもよい。
【0083】
そのような知識証明では、署名者は、秘密の数字kを使用して署名(r,s)のr部分を導出する。
【0084】
R-puzzleを使用する例示的なロックスクリプトは、以下の形式を有し得る。
OP_OVER OP3 OP_SPLIT OP_NIP OP_1 OP_SPLIT OP_SWAP OP_SPLIT OP_DROP
OP_HASH160 <HASH(r)> OP_EQUALVERIFY OP_CHECKSIG
【0085】
ハッシュ化を実行する任意のオペコード、たとえばOP_RIPEMD160、OP_SHA1、OP_SHA256、またはOP_Hash256が、OP_HASH160の代わりに使用されることが理解されるだろう。
【0086】
簡潔にするために、ロックスクリプトを
OP_OVER [Extract_r] OP_HASH160 <HASH(r)> OP_EQUALVERIFY OP_CHECKSIG
と表現することができ、Extract_rは、署名からrを抽出するオペコードの集合体に対する略称である。Extract_rは
OP3 OP_SPLIT OP_NIP OP_1 OP_SPLIT OP_SWAP OP_SPLIT OP_DROP
により与えられる。
【0087】
上のスクリプトは、署名の最初の3バイトを省略し、次いで署名のr部分を抽出し、次いで署名の残りを省略する。
【0088】
ロック解除スクリプトは
<Sig><PK>
という形態を有し、署名は(r,s)という形態をとり、rは秘密の数字kから導出され、<PK>は署名者の公開鍵である。
【0089】
ロック解除スクリプトを提供する署名者は、kG=(x,y)かつr=x mod nであるようなrを知っているはずであり、すなわち、署名者は、Gと乗じられるとそのx座標がnを法とするときのrであるような点を生み出す、kを知っている。
【0090】
<Hash(r)>は、ロックスクリプトにおいて提供されるので、公開されている。秘密はkである。スクリプトの実行は以下の表にある。
【0091】
【表1】
【0092】
署名者は、任意の秘密鍵と公開鍵のペアを使用してメッセージに署名することができる。これは、秘密鍵も対応する公開鍵も、ロックスクリプトを作成する際に使用されないからである。したがって、ロックスクリプトを提供する関係者は、ロック解除スクリプトを誰が提供するかを、トランザクションを生成する時点では知らなくてもよい。
【0093】
pay-to-R-Puzzleも、P2RP HASH(r)として表され得る。
【0094】
7.2 Pay to Public Key Hash (P2PKH)
P2PKHトランザクションは、トランザクションの出力が、公開鍵の特定のハッシュ(アドレスとしても知られている)に支払うこと、またはある額のデジタル資産を移すことであるような、一般的なタイプの支払トランザクションである。このUTXOを別のトランザクションの入力として使用するには、公開鍵PKおよび有効な対応するECDSA署名を伴うロック解除スクリプトが提供されなければならない。
【0095】
P2PKHトランザクションのためのScriptPubKeyおよびScriptSigが以下に示される。
scriptPubKey: OP_DUP OP_HASH160 <H(PK)> OP_EQUALVERIFY OP_CHECKSIG
scriptSig: <sig> <PK>
【0096】
7.3 Pay to R-Puzzle Hash (P2RPH)
P2RPHトランザクションは、R-puzzleの課題に支払を行うトランザクションである。入力UTXOを消費するには、R-puzzleの課題に使用されるのと同じrを含む署名を伴うロック解除スクリプトが提供される必要がある。
【0097】
P2RPHトランザクションのためのScriptPubKeyおよびScriptSigが以下に示される。
scriptPubKey: OP_DUP OP_3 OP_SPLIT OP_NIP OP_1 OP_SPLIT OP_SWAP OP_SPLIT
OP_DROP OP_HASH160 <H(r)> OP_EQUALVERIFY OP_SWAP OP_CHECKSIG
scriptSig: <sig'><PK><sigr>
【0098】
署名sigrはrを使用し、消費する者は任意の秘密鍵/公開鍵のペアを使用して署名を計算することができる。署名sig'は、別の署名されたメッセージ(署名sigrにおいて使用されるものとは異なる)と共に生成され、これは、異なるsighashフラグを使用することによって行われ得る。署名sig'は、秘密鍵を漏洩しないようにrの異なる値を使用しなければならないことに留意されたい。
【0099】
署名の偽造可能性を避けるために、署名sig'がscriptSigに追加される。署名sig'がないと、悪意のある者がP2RPHトランザクションを傍受し、資金を自身へ送信するようにトランザクションを変更しながら、トランザクションの送信者が元のトランザクションにおいて使用したのと同じ署名を使用することができる。
【0100】
7.4 条件項を伴うスクリプト
条件項は、OP_IFステートメントを使用してロックスクリプトにおいて実装され得る。OP_IFは、スタックの一番上の値が真である、すなわち0ではない場合に、次のOP_ELSEまたはOP_ENDIFまで後続のオペコードのセットを実行する。OP_ELSEが後続の条件項であり、最初の条件項が成功であった場合、スクリプトは、元の項の条件スタック高さにあるOP_ENDIFへと飛ぶ。OP_ENDIFが処理されると、スクリプト実行は終了し、結果を返す。
【0101】
8. 条件的支払プロトコル
本明細書では、作業者がサードパーティのプラットフォームに記憶されているデータを検証するような例示的な使用事例の文脈において、支払プロトコルが説明される。
【0102】
この例示的な使用事例において、ユーザはデータをサードパーティのクラウドプラットフォームに記憶している。ユーザは、自身のデータを適切に記憶して維持することを、クラウドサービス提供者に委託する。ユーザが記憶されているデータの完全性の保証を必要とする場合、自身で定期的にデータを確認することができる。これをするには、ユーザは、関心対象のデータの全体を、その完全性を検証するためにダウンロードする必要がある。
【0103】
しかしながら、ユーザは、リソースが制約されており、適時に完全性の検証を完了できないことが多い一方で、これらの検証のために計算リソースを消費する意思があるのでタスクを完了するためのアウトソーシングされたサービス提供者になる意思があり得るような、第三者の作業者が存在することがある。したがって、ユーザはこれらの作業者に計算をアウトソーシングすることができる。しかしながら、計算をアウトソーシングする際に、計算を正しく実行するものとユーザ(アウトソーシングする側)が作業者を信用できず、同様に、完了した仕事に対価を支払うものと作業者がユーザを信用しないという、問題が生じる。
【0104】
本明細書で説明されるプロトコルは、アウトソーシングされた計算のための支払ルールを定めるために使用され得る。アウトソーシングされた計算は、クラウドおよび/または任意の他のデータベースからデータを取り出し、オフチェーンで保存されたデータの完全性を検証することを含み得る。アウトソーシングする側、たとえばAlice 103aは、タスクトランザクションをブロックチェーンに提出することを介して計算をアウトソーシングし、計算トランザクションの一連の証明を介して様々な計算結果に対する支払額を指定することができる。
【0105】
任意の作業者、たとえばBob 103bは、タスクを獲得し、そして計算を開始することができる。Alice 103aおよびBob 103bは、暗号ベースの秘密共有方式に基づいてセキュアな通信チャネルを構築するために使用される公開鍵を有する。計算トランザクションの証明のテンプレートは、Alice 103aによって作成され、チャネルを介してAlice 103aからBob 103bに送信される。計算が終了すると、Bob 103bは、計算トランザクションの証明の所与のテンプレートの1つを通じて結果を明らかにし、そして支払を受けるためにそのトランザクションをブロックチェーンネットワークにブロードキャストし得る。
【0106】
クラウドプラットフォームに記憶されているメタデータが何らかの悪意のある者により改変される場合、作業者は正しい結果を生み出すことができないことがある。メタデータは、任意の適切な方法で作業者により取得され得ることに留意されたい。たとえば、作業者はクラウドプラットフォームから直接メタデータにアクセスしてもよい。そのようなシナリオでは、タスクはいずれの作業者によっても獲得されず、すなわち、有効な証明トランザクションが提供されないので、タスク報酬は獲得されない。Alice 103aは、作業者に連絡することによってこの理由を調査してもよく、メタデータが改竄されているかどうかを決定することができる。次いで、関係者間でのコンセンサスの存在を前提として、Alice 103aは、タスクを受け入れた作業者にいくらかの補償を支払ってもよい。
【0107】
以下に記載される例では、メタデータが改竄されておらず、作業者が適切に作業すれば正しい計算結果が得られるであろうことが仮定される。
【0108】
このプロトコルは以下の特徴を有する。
・透明性 - 支払額がすべての作業者に対して目に見える。
・競争的 - 作業者は結果に対して支払を受けるために競争において最良の結果を残す必要がある。タスクトランザクションのUTXOは、一名の作業者により一度だけ消費され得る。この競争は、Alice 103aにとって、結果を可能な限り早く得るためだけではなく、一名だけの作業者に依存しないためにも有益である。一名の作業者に依存することは、作業者が正しく作業しなかった場合にタスクが完了しないリスクを高めることがある。
・逐次的 - 計算トランザクションの証明に対する支払額はシーケンスにおいてロックされ、より良い計算結果が明らかになるほど、より多くの報酬が得られる。ロックスクリプトはこれに対処するように設計され、そうでなければ支払は正しく割り当てられない。
【0109】
以下のセクションでは、タスクトランザクションの詳細および計算の証明、または証明、トランザクション。簡潔にするために、トランザクションフィーはこれらのトランザクションでは無視されるが、当業者には明らかであるように、論理を乱すことなくそれらを含めることができる。
【0110】
8.1 メタデータおよび明らかにされた結果
Alice 103aが作業者に検証することを望む暗号化されたデータを指すために、本明細書ではメタデータが使用される。たとえば、クラウドに保存されたAliceの月曜日の文書はk0として暗号化され表現され、火曜日の文書はk1として暗号化され表現され、以下同様である。Alice 103aのために記憶されているデータのプライバシーを確保するために、文書は暗号化される。
【0111】
明らかにされた結果rは、メタデータkの知識を証明するために作業者がブロックチェーン上で明らかにするデータである。明らかにされた結果rは、様々なメタデータkの連結であり得る。
【0112】
kiが、Alice 103aが検証することを望むi番目のメタデータであり、riが、作業者がブロックチェーン上で明らかにする明らかにされた結果であり、i=0,1,2,…,nとすると、
【0113】
【数1】
【0114】
である。
【0115】
メタデータkと明らかにされたデータrとの関係が、図5に示されている。
【0116】
最初のデータ値k0 602、1つまたは複数の中間データ値、および最後のデータ値kn 604を備える、データ値、またはメタデータ、kのシーケンス600が示されている。検証値のシーケンス610は、データ値のシーケンス600から導出される。最初の検証値r0 612は最初のデータ値k0 602から導出され、第2の検証値r1はk0およびk1から導出され、以下同様であるので、最後の検証値rn 614はデータ値のシーケンス600のデータ値のすべてから導出される。
【0117】
本明細書で説明される例では、データ値は、検証値を導出するためにシーケンスにおいて連結される。しかしながら、データ値は他の方法で組み合わせられてもよいことが、当業者には明らかであろう。たとえば、データ値は、検証値を導出するためにシーケンスにおいて加算または乗算され得る。
【0118】
データ値kはデータアイテムから導出されると言われ、この例ではデータアイテムはクラウドに記憶されている文書である。
【0119】
8.2 タスクトランザクション
タスクトランザクションは、ブロックチェーンネットワーク上で計算をアウトソーシングし、これらの計算に対する報酬を指定するために、Alice 103aによって作成される。報酬は、これらの計算の結果を明らかにすることができる任意の作業者により獲得されることが可能であり得る。Alice 103aにより管理されるあらゆる未消費のUTXOが、タスクトランザクションにおける入力として使用され得る。タスクトランザクションの表現が以下に示される。
【0120】
【表2】
【0121】
条件項が、所望の計算結果を指定するためにロックスクリプトにおいて使用される。出力におけるパラメータが以下で説明される。
・bは計算結果に割り当てられることになる最高の支払額である。
【0122】
【数2】
【0123】
は、Alice 103aによって管理されるi番目の公開鍵であり、明らかにされた結果riに割り当てられる。このUTXOを別のトランザクションへの入力として使用するとき、そのトランザクションは、
【0124】
【数3】
【0125】
を使用して、有効なECDSA署名をロック解除スクリプトに提供しなければならない。この公開鍵は、異なる結果への支払ルールをAlice 103aが管理するのに役立つ。
・OP_RETURN出力の中のデータは、
・Alice 103aが情報を作業者にいつ送信するかを示すタイムスタンプ、および
・計算トランザクションの証明のすべての生成されたテンプレートのマークル根を含む。これは、Alice 103aが自身の支払ルールの透明性を証明するのに有用である。
【0126】
ペイロードデータは、各作業者が、Aliceから同時に同じ支払ルールを得るかどうかについての公平性を検証できることを、確実にするためのものである。実際には、Alice 103aには情報を同時に送信する動機がなく、それは、その情報が作業者に事前に与えられている場合に、どの作業者が他の作業者より早くタスクを完了できるかをAliceは知らないからである。
【0127】
上で示されたように、ロックスクリプトは、複数の異なるロック解除条件を備え、それらの各々がロックスクリプトの別個のサブスクリプトにおいて定義される。
【0128】
ロックスクリプトの第1のサブスクリプトは、作業者が最初の検証値r0を提供する場合に満たされるロック解除条件を定義する。このサブスクリプトでは、Aliceの公開鍵はr0に基づく。
【0129】
第1のサブスクリプトのロック解除条件が満たされない場合、第2のサブスクリプトが実行され、これは、作業者が第2の検証値r1を提供する場合に満たされる。このサブスクリプトでは、Aliceの公開鍵はr1に基づく。
【0130】
このパターンが続き、各々の次のサブスクリプトは、検証値のシーケンスの中の次の検証値によって満たされるロック解除条件を有する。したがって、検証値を提供する作業者は、作業者が行った計算作業の量について報いられる。
【0131】
以下で説明されるように、作業者がロック解除スクリプトにおいて検証値rを提供する場合、サブスクリプト条件が満たされる。したがって、ロックスクリプトは、ある種の知識パズルであるハッシュパズルに対応すると言われ得る。
【0132】
8.3 計算トランザクションの証明(PCTX)
計算トランザクションの証明、または証明トランザクションは、正しい計算結果を生み出してこれらの結果をブロックチェーンネットワークにブロードキャストすることに対して作業者が自動的に支払を受けることを可能にするトランザクションである。
【0133】
Alice 103aは、検証値のセットの各々に対応する証明トランザクションテンプレートを生成する。証明トランザクションテンプレートは、テンプレートロック解除スクリプトを備え、これは、Alice 103aによって提供される署名および公開鍵を備え、検証値またはそれから導出される値と一緒に提供されると、ロックスクリプトのサブスクリプトの1つをロック解除するためのロック解除スクリプトを形成する。
【0134】
計算トランザクションの証明のすべてのn個のテンプレートが、対応する結果の支払額(r値)を指定するためにAlice 103aによって作成される。これらのテンプレートトランザクションはブロードキャストされない。タスクトランザクションにおいて提示される異なるr値に対して、計算トランザクションの証明に割り当てられる支払額は変化する。変化がない場合(たとえば、rnを明らかにする作業者に最高額bが支払われる)を考えると、入力に署名し、出力には署名しないために、以下に示されるn番目のTxIDn(テンプレート)において、signhash_NONEフラグが使用される。これは、公開された証明トランザクションTxIDnにおいて見られるように、Bob 103bが自身の出力を追加して最高の支払bを受け取ることを可能にする。
【0135】
【表3】
【0136】
【表4】
【0137】
上の例では、作業者は最後の検証値rnを提供する。rnはデータ値のすべてから導出されるので、作業者は、データ値のシーケンスのすべてのデータ値に対して計算を実行したはずであり、したがって全体の入手可能な報酬bにより報いられることになる。
【0138】
計算トランザクションTxIDi(テンプレート)の証明のテンプレートは、i≠nについて以下に示される。このテンプレートは、上に示されるTxIDn(テンプレート)とは異なる。同じインデックスで入力と出力に署名するために、sighash_SINGLEフラグがTxIDi(テンプレート)において使用される。このフラグは、Aliceが自身の出力を追加して釣銭(b-bi)を受け取ることを可能にする。Aliceの出力へのあらゆる変化が、TxIDiの妥当性確認を失敗させる。作業者はbiにより報いられる。
【0139】
【表5】
【0140】
【表6】
【0141】
PCTXの特徴は次の通りである。
・同じ出力点TxIDtask||0が、すべてのPCTX(TxID0、TxID1、…、TxIDn)への入力として使用される。
・T1は、資金の凍結時間であり、計算トランザクションの証明がT1の後に引き換え可能になることを示す。これは、少なくとも時間T1まで出力bを誰も消費できないことを意味する。
・すべてのPCTXのためのシーケンス番号が、最大の整数値(0xFFFFFFFF)に設定される。
・引き換えられるとき、1つのPCTXだけがブロックチェーンネットワーク上で見られる(UTXOを一度しか消費できない)。
・公開鍵
【0142】
【数4】
【0143】
は各トランザクションTxIDiに対して変化する。全体の文字列(タスクトランザクションのロックスクリプト+計算トランザクションの証明のロック解除スクリプト)がマイナーにより評価され、マイナーは正しい公開鍵
【0144】
【数5】
【0145】
が提供されることを確認する。
【0146】
【数6】
【0147】
は、公開鍵
【0148】
【数7】
【0149】
からのAliceの署名である。sighashフラグSIGHASH_NONEが
【0150】
【数8】
【0151】
に追加され、これは、Alice 103aに釣銭が返されないように、Bob 103bがTxIDnに自身の出力を追加することを可能にする。
【0152】
【数9】
【0153】
は、公開鍵
【0154】
【数10】
【0155】
からのAliceの署名であり、i≠nである。
・(b-bi)BSVを支払う出力に署名するために、sighashフラグSIGHASH_SINGLEが
【0156】
【数11】
【0157】
に追加される。この出力は、署名と同じインデックスを共有する。その出力がBob 103bによって改変される場合、署名
【0158】
【数12】
【0159】
は無効になる。この場合、Bob 103bは支払を受けることができない。これは、Alice 103aが自身に返される釣銭の額を管理するのに役立ち、言い換えると、Alice 103aは異なる支払額を異なるr値に割り当てることができる。
・nLocktime T1がこの署名されたメッセージに埋め込まれる。これはBob 103bによって改変される場合、署名
【0160】
【数13】
【0161】
は無効になる。
・Alice 103aによって管理される公開鍵PKAは、計算トランザクションの各証明に対して同じであり、釣銭を受け取るために使用される。
・(b-bi)BSVはAlice 103aへの釣銭である。
・biはAliceがriに割り当てる支払額である。b0、b1、…、biは、増加線形数列bi=a*i+dなどの増加数列であり、aは共通の差分であり、dは正の定数であり、i=0,1,2,3,…,nであるが、bn≦bである。たとえば、a=1、d=1である場合、b0、b1、…、b5は、b0=1、b1=2、b2=3、b3=4、b4=5、およびb5=6である。すなわち、最高額bはb5以上であるべきである。aおよびbは、自身の支払ルールを満たすためにAlice 103aによって設定されるパラメータであるが、作業者はそれらを知らなくてもよいことに留意されたい。
【0162】
計算トランザクションのテンプレート証明を受信した後、Bob 103bは計算を開始してriを得る。次いで、Bob 103bはriまたはそれから導出された値をロック解除スクリプトに置き、支払を受け取るためのロックスクリプトに自身の公開鍵PKBを置く。Bobは、bi satを獲得するためにTxIDi(上の例を参照)をブロックチェーンネットワークにブロードキャストする。
【0163】
上の例では、Alice 103aは、証明トランザクションテンプレートのすべてに対して同じnLocktimeおよび同じシーケンス番号(最大値0xFFFFFFFF)を設定する。同じシーケンス番号(最大値)は、これがトランザクションの「最後の」バージョンであり、却下できないことを示す。それらがすべてUNIT_MAX(0xFFFFFFFF)シーケンス番号を有する場合、nLocktimeに到達すると、マイナーにより見られる最初のトランザクションが、検証されてブロックチェーン上に公開されるものとして選ばれる。これは、より良い結果を残している作業者にとって不公平な報酬をもたらし得る。たとえば、Bob 103bが(たとえば、r1を見つけるために)少量の計算を行い、Charlieが(rnを見つけるために)完全な計算を完了する場合、Bob 103bはわずかな作業しか行っていないので、自身のトランザクションを最初にネットワークに送信するのはBob 103bにとって簡単である。Charlieはすべての作業を行い、自身の証明トランザクションTxを後で提出する(しかし、それでも同じブロック期間において)。ここで、ブロック期間とは、10分の平均ブロック確認時間などの、2つのブロック間の時間間隔を意味する。Bob 103bおよびCharlieからの送信されたトランザクションは同じ入力UTXOを有し、getのうちの1つのみがブロックに含まれることを意味する。nLocktimeに達すると、それはBobのトランザクションであり、それはBobが最初に提出したからである。Charlieのトランザクションは拒絶される。
【0164】
これにより、さらなるri値を計算する能力があるにもかかわらず、作業者は、トランザクション提出に後れを取る可能性を恐れて、これらの追加の計算を続けないことを選び得る。その場合、Alice 103aは最良の結果を得られない。
【0165】
これを軽減するために、Alice 103aが各PCTXテンプレートに署名するときに、異なるシーケンス番号が使用され得る。これは、より基本的な計算よりもより高度な計算がマイナーにより自動的に選ばれることを可能にする方法で行われ、それは、高度な計算のPCTXのシーケンス番号はより大きいからである。すなわち、最初の検証値r0のための証明トランザクションテンプレートはシーケンス番号が最も小さく、検証値のシーケンスにおける各々の連続する検証値は増分的に大きくなるシーケンス番号と関連付けられ、最後の検証値rnのための証明トランザクションテンプレートは、シーケンス番号が最も大きい。
【0166】
Alice 103aは、トランザクションテンプレートのすべてに対して同じnLocktimeを保つ。これは、シーケンス番号が何であったとしてもこのnLocktimeより前に公開されるトランザクションがないことを意味する。nLocktimeに到達し、異なるシーケンス番号をもつ多くのトランザクションがある場合、最大値をもつトランザクションがマイナーによって選ばれる。しかし、いずれにしても、nLocktimeは守られ、その時間より前に公開され得るトランザクションはない。たとえば、Alice 103aは、TxIDn-1のために最大のシーケンス番号UNIT_MAX(0xFFFFFFFF)を設定することができ、TxIDn-2のために2番目に大きいUNIT_MAX-1を設定することができ、以下同様である。0などの最も小さいシーケンス番号が、TxID0に対して設定される。これは、最も難しい計算が報いられることを確実にする。
【0167】
シーケンス番号は、各トランザクションテンプレートの対応する署名のための署名されたメッセージに含まれる(たとえば、
【0168】
【数14】
【0169】
SINGLE (i≠n)および
【0170】
【数15】
【0171】
NONE)。署名検証は、Alice 103aが証明トランザクションテンプレートに署名した後で作業者がシーケンス番号を改変する場合、失敗する。
【0172】
8.4 2層PCTX
上で言及したように、計算トランザクションの1つの証明だけが、ブロックチェーンネットワーク上で公開される。公開されるトランザクションが、最長の連結rnの結果を明らかにするTxIDnではない場合、それは何らかのメタデータ(たとえば、kn-1、kn)が検証されなかったことを意味する。
【0173】
この問題を解決するために、2層または多層の階層構造である、PCTXが提供される。第1の層のPCTXは、上に示されるようなタスクトランザクションを消費するトランザクションとして定義され、第2の層のPCTXは、計算トランザクションの公開された第1の層の証明のAliceの釣銭を消費するトランザクションである。たとえば、作業者が検証値r1を決定し、それにより作業者がb1で報いられる場合、Aliceの釣銭は(b-b1)であり、Aliceはこれを第2の層のPCTXにおいて報酬として提供することができる。
【0174】
第2の層のPCTXは、残りのk値を検証し、そして対応するr値と共にそれらを明らかにするように、作業者に促すことができる。
【0175】
TxIDi(i≠n)が公開され、Alice 103aが第2の層のPCTX:TxIDi,j、IxIDi,j+1、…、TxIDi,nを作成し(0≦j≦n-i)、第1のサブスクリプトiが、第2の層のPCTXのすべてが出力点TxIDi||0(TxIDiの釣銭出力)を入力として使用することを示し、第2のサブスクリプトjが、明らかにされることが可能なr値の数を表すとする。ここで、第1の層のPCTXにおいて支払を得る機会を失う作業者は、第2の層のPCTXから支払を受ける機会を有し得る。
【0176】
この文脈では、上に示される第1の層のPCTX TxID0、TxID1、…、TxIDnのテンプレートにおけるAliceの釣銭出力のロックスクリプトが改変されることに留意されたい。Alice 103aがタスクトランザクションTxIDtaskにおいてr0、r1、r2という3つのr値を準備する場合、トランザクションTxID0(テンプレート)のためのロックスクリプト、すなわちr0に対応する証明トランザクションテンプレートは、
【0177】
【数16】
【0178】
であるので、作業者は、r1またはr2のいずれかを後続の証明トランザクションにおいて提供することについて報いられる。
【0179】
r1に対応する証明トランザクションテンプレートであるTxID1(テンプレート)のためのロックスクリプトは、
【0180】
【数17】
【0181】
であるので、作業者は、r2を後続の証明トランザクションにおいて提供することについて報いられる。
【0182】
TxID2(テンプレート)のためのロックスクリプトは、
OP_DUP OP_HASH160 <H(PKA)> OP_EQUALVERIFY OP_CHECKSIG
であり、それは、作業者がすべてのタスク計算をすでに完了しているからである。r2は最後の検証値であり、したがって釣銭がAlice 103aに返されないことがあり得るので、TxID2(テンプレート)のロックスクリプトは任意選択であることが理解されるだろう。
【0183】
TxID0がブロックチェーンネットワーク上で公開される場合、第2の層のPCTX TxID00およびTxID01のテンプレートは、以下に示されるようにAlice 103aによって作成される。TxID0は、TxIDtaskのようなタスクトランザクションであると見なされ得るが、OP_FALSE OP_RETURN出力がない。Alice 103aは、どのPCTXが公開されるかを知らないので、第2の層のPCTXのテンプレートを生成し、すべての生成されたテンプレートのマークル根を第1の層のTxIDiのOP_FALSE OP_RETURN出力に含めるのは時間と費用がかかる。しかしながら、上で説明されたタスクの透明性を維持するために、Alice 103aは、テンプレートを作成するときに、同様の情報(たとえば、PCTXのすべての生成された第2の層のテンプレートのタイムスタンプおよびマークル根)を第2の層のPCTXのOP_FALSE OP_RETURN出力に追加することができる。
【0184】
【表7】
【0185】
【表8】
【0186】
図6は、3つの検証値が定義される上の例に対する、計算トランザクションの2層の証明の階層構造を示す。
【0187】
タスクトランザクション700は、Aliceの任意のUTXOを参照する入力を備える。UTXOの値は少なくともbである。タスクトランザクション700の出力は、作業者が最後の検証値r2を見つければ作業者に報いられる報酬値bと、r0、r1、およびr2の各々に対するサブスクリプトを備えるロックスクリプトとを備える。
【0188】
作業者は、第1の層の証明トランザクション702a、702b、702cの1つを提供すれば報いられる。作業者がr0を導出する場合、作業者は、r0に対応するタスクトランザクション700におけるロック解除条件を満たすためのテンプレートロック解除スクリプトを用いて、証明トランザクションテンプレートから証明トランザクションTxID0 702aを生成する。作業者がr1を導出する場合、作業者は、r1に対応するタスクトランザクション700におけるロック解除条件を満たすためのテンプレートロック解除スクリプトを用いて、証明トランザクションテンプレートから証明トランザクションTxID1 702bを生成する。作業者がr2を導出する場合、作業者は、r2に対応するタスクトランザクション700におけるロック解除条件を満たすためのテンプレートロック解除スクリプトを用いて、証明トランザクションテンプレートから証明トランザクションTxID2 702cを生成する。
【0189】
第1の層の証明トランザクション702a、702b、702cの各々が、入力および出力を備える。各入力は、ロックスクリプトが位置するタスクトランザクション700の出力を指し示す出力点、ならびに導出された検証値に基づく署名を備えるロック解除スクリプトを備える。各出力は、Alice 103aに戻されるべき支払額、またはデジタル資産の値、および計算を完了したことに対する見返りとして作業者(Bob 103b)に移されるべきデジタル資産の値を定義する。
【0190】
2つの第2の層の証明トランザクション704a、704bが図6に示されている。これらは、作業者が最初にr0だけを導出する場合に提供され得る。作業者が代わりに最初にr1を導出した場合には、1つの第2の層の証明トランザクションが提供され得ることが理解されるだろう。この第2の層の証明トランザクションは図6には示されない。
【0191】
図6に示される第2の層の証明トランザクション704a、704bの各々は、ロックスクリプトを備えるTxID0 702aの出力を指し示す出力点を有する。
【0192】
第2の層の証明トランザクションのうちの第1の証明トランザクションTxID00 704aは、第1の層の証明トランザクションTxID0 702aのロック解除条件を満たし、すなわち、入力がr1に基づく署名を備えるように、TxID00 704aのロック解除スクリプトがr1を使用して生成される。
【0193】
第2の層の証明トランザクションのうちの第2の証明トランザクションTxID01 704bは、第1の層の証明トランザクションTxID0 702aの異なるロック解除条件を満たし、すなわち、入力がr2に基づく署名を備えるように、TxID01 704aのロック解除スクリプトがr2から導出される。
【0194】
図6に示される第2の層の証明トランザクション704a、704bの各々は、Alice 103aおよびBob 103bに割り当てられる値を定義する出力を有する。Alice 103aに割り当てられる量は、第2の層の証明トランザクション704a、704bにおいてBob 103bに割り当てられる量より少ない、TxID0においてAlice 103aに割り当てられる量である。
【0195】
最後の検証値r2に対応する証明トランザクションTxID2およびTxID01は、Alice 103aがどのような値も受け取らないように、すなわちAlice 103aに関連する出力がないように、改変され得る。
【0196】
計算トランザクション702a、702b、702c、704a、704bの各証明に示されるr値は、それが対応する消費トランザクションにおいて明らかにされ得ることのみを示す。r0が明らかにされるのは、TxID0のような計算トランザクション702a、702b、702c、704a、704bの証明の1つがブロックチェーンネットワーク上で公開されるときだけであり、これはロック解除スクリプトにおいて示される。
【0197】
加えて、計算トランザクション704a、704b(TxID00およびTxID01)の証明の第2の層は、TxID0がビットコインネットワーク上で公開されたとき、入力としてTxID0|0を使用する。
【0198】
トランザクションTxID00 704aは、b00の支払を受けるためにr1を明らかにするために使用され、TxID01 704bはr2を明らかにするためのものである。図6に示されるように、TxID01 704bがブロックチェーンネットワークにブロードキャストされる場合、それは、すべての必要とされるメタデータkの知識証明が提供されるので、計算トランザクションの証明のそれ以上の層が必要とされないことを意味する。しかしながら、必要とされる場合、第2の層のPCTXの下流が同様の原理に従うことによって拡張され得る。
【0199】
上で説明されたPCTXの設計によれば、r値はロック解除スクリプトにおいて明らかにされる。TxID01 704bなどの計算トランザクションの証明が、Bob 103bとブロックチェーンノードとの間のチャネルにおいて悪意のある者によって傍受される場合、この悪意のある者は、明らかにされたr2によって資金を得ることができる。悪意のある者は、r2を維持するが、Bobの公開鍵を自身の公開鍵で置き換えて支払を受け取り、そして改変されたトランザクションをブロックチェーンネットワークに伝播することができる。この場合、Bob 103bは支払を受けることができず、Alice 103aは自身の支払がBob 103bではなく悪意のある者によって獲得されたことを知らない。
【0200】
このセキュリティ上の問題に対する可能な方策は、トランザクション(タスクトランザクションと計算トランザクションの証明の両方)においてR-puzzleを使用することである。R-puzzleは一種の知識パズルである。
【0201】
R-puzzleの実装形態において、作業者は、rを使用してECDSA署名を生成し、Alice 103aによってロックされたデジタル資産をロック解除する。Alice 103aがメタデータkの完全性を検証することを望んでいるとする。ECDSA署名には、上に記載されたrおよびsという2つの主要部分がある。rはBob 103bが明らかにする必要のある結果であり、kはBob 103bが検証する必要のある値である。ECDSA署名において256ビットの長さである秘密鍵/一時鍵を使用する場合、明らかにされる結果rおよびメタデータkは次のように関連付けられる。
r=[SHA-256(k)・G]x
ここで、「・」は楕円曲線のスカラー乗算を示し、Gは楕円曲線の生成点を示し、[]xは楕円曲線の点のx座標をとることを示し、SHA-256は暗号学的ハッシュ関数であり、SHA-256(k)はECDSA署名における一時的な秘密鍵であると考えられる。作業者Bob 103bは、Bobにより管理される任意の秘密鍵/公開鍵のペアを使用して署名sigr=(r,s)を計算できることに留意されたい。
【0202】
簡潔にするために、図6の例のように3つのr値だけを考え、メタデータからマッピングされる3つの256ビットのハッシュ値はk0、k1、k2であり、そうすると、
r0=[SHA-256(k0)・G]x
r1=[SHA-256(k0||k1)・G]x
r2=[SHA-256(k0||k1||k2)・G]x
である。
【0203】
r1を計算する上の式において、連結されたk0||k1がハッシュされ、r1上で
【0204】
【数18】
【0205】
を生成するための一時的な鍵としてハッシュ値が使用される。rとkを結びつけるあらゆる他の方法が、Alice 103aの必要に応じてAliceにより決められてもよいが、Aliceは作業者にその方法を伝える必要があることに留意されたい。R-puzzleの知識に基づくと、タスクトランザクションにおけるロックスクリプトは次の通りである。
【0206】
【数19】
【0207】
この場合、r0がブロックチェーンネットワーク上で計算トランザクションTxID0の証明を公開することを通じて作業者Bob0によって明らかにされる場合、TxID0の対応するロック解除スクリプトは
【0208】
【数20】
【0209】
であり、r0上の署名
【0210】
【数21】
【0211】
はBob0によって管理される公開鍵
【0212】
【数22】
【0213】
から生成され、
【0214】
【数24】
【0215】
からの
【0216】
【数23】
【0217】
は別の署名である。
【0218】
【数25】
【0219】
は、異なる署名されたメッセージについて生成されるべきである(たとえば、
【0220】
【数26】
【0221】
の署名されたメッセージにおいて使用されるフラグであるSIGHASH_ALLの代わりの異なるsighashフラグSIGHASH_NONEと、公開鍵
【0222】
【数27】
【0223】
に関連する秘密鍵を漏洩しないように異なる一時的な鍵とを使用して)。これは予防措置であり、それは、同じ一時的な鍵を使用する2つのEC署名から秘密鍵が導出され得るからである。
【0224】
下の表は、R-puzzleが使用されるときにタスクトランザクションのロックスクリプトが証明トランザクションのロック解除スクリプトと一緒に実行される、スクリプト実行ステップを示す。
【0225】
【表9A】
【0226】
【表9B】
【0227】
【表9C】
【0228】
同様に、r1がTxID1において作業者Bob0によって明らかにされる場合、対応するロック解除スクリプトは
【0229】
【数28】
【0230】
である。
【0231】
まとめると、rを使用する署名<sigrALL>をロック解除スクリプトに含めることは、悪意のあるブロックチェーンノードが支払を獲得できないことを確実にするための可能な方策であり、それは、ブロックチェーンノードは、署名において使用される秘密鍵を知らない限り、rを使用してその署名を偽造することはできないからである。
【0232】
R-puzzleの方策では、メタデータkはr値に直接結びつけられる。これは別のセキュリティ上の問題を引き起こす。kを知っている第三者Daveが、何の計算も行わずに意図的に資金を獲得し得る。この場合、支払は獲得されるが、Alice 103aは、それが妥当性確認を生み出すために作業を行った人物に支払われたかどうかを知らない。資金がいずれの作業者よりも前にDaveによって獲得されるので、これは計算を行うが支払を受けない作業者にとって不公平である。
【0233】
Daveが報酬を獲得するのを防ぐために、Alice 103aは、計算トランザクションの証明の署名されたテンプレートが、メタデータkを知っているDaveに共有されないことを確実にしなければならない。したがって、Alice 103aは、タスクに参加する資格のある作業者の所定のセットだけに関連情報(たとえば、PCTXのテンプレート)を共有する。
【0234】
Alice 103aは、タスクトランザクションにおいてR-puzzleを生成するとき、k値のシーケンスを決定している。Aliceがこれを行う動機は、作業者により検証されるべきkの値を可能な限り多くするためである。作業者は、計算を実行する間にパズルに埋め込まれたk値のシーケンスを知らないことがある。これは、ロックスクリプトのサブスクリプトを満たすための検証値を導出するために、作業者がより多くのk値を検証しなければならない可能性が高く、したがって、Alice 103aがすべてのデータ値kの検証を受け取る可能性がより高いことを意味する。
【0235】
例が図7に示されており、検証値の各々を生成するために導出するデータ値の組合せを示す。図7の実線の矢印は有効な導出を表すが、破線の矢印は無効な導出を表す。
【0236】
Bob 103bは、k1またはk2を最初に見つけるとr0を得ることができず、k0がなければr1またはr2を得ることができない。それは、作業者が最初のk値を見つけるとき、作業者は発見されたk値がk0であるかどうかを知らないことを意味する。したがって、作業者は、可能な限り多くのサービスフィーを可能な限り早く取得するためにr2を得るには、rの値を得るために可能な限り多くのk値を見つける必要があり得る。
【0237】
8.5 例示的な使用事例
例示的な使用事例が図8において提供される。Alice 103aは、データを記憶するためのクラウドサービス900のユーザである。Alice 103aは、自身の暗号化されたファイルをそれに記憶する。Alice 103aは、ローカルコピーを削除する前に、クラウドサービス900に記憶されているファイルの完全性を確認することを望む。したがって、Alice 103aは、作業者1 103cおよび作業者2 103dに完全性検証をアウトソーシングする。作業者1 103cおよび作業者2 103dは、クラウドサービス900上の暗号化されたデータにアクセスすることを認可されるサービス提供者である。
【0238】
作業者1 103cおよび作業者2 103dに検証をアウトソーシングするプロセスが、図8に示されている。
1. Alice 103aが、2つのファイルをk0=[f0]Enおよびk1=[f1]Enへと暗号化し、クラウドサービス900にこれらの2つの暗号化されたファイルを記憶する。
2. Alice 103aが、クラウドサービス900上の記憶されているファイルの位置を示すタグを得るための要求をクラウドサービス900に送信する。
3. クラウドサービス900がk0およびk1についての2つのタグを返す。
4. Alice 103aが、k0のためのTxID0(テンプレート)ならびにk0およびk1のためのTxID1(テンプレート)というPCTXのテンプレートを生成する。
5. Alice 103aが、k0およびk1を使用することによってR-puzzleタスクトランザクションを生成し、タスクトランザクションをブロックチェーン150に提出する。タスクトランザクションのOP_RETURN出力の中のデータは、
・タイムスタンプ - Alice 103aが情報をいつ作業者103c、103dに送信するかを示す、
・TxID0(テンプレート)およびTxID1(テンプレート)のすべての生成されたテンプレートのマークル根、ならびに
・タグのハッシュ値 - Alice 103aが同じタグを作業者103c、103dに送信することを示す
を含む。
6. Alice 103aが、タグおよびPCTXのテンプレートを作業者1 103cおよび作業者2 103dに同時に送信する。
7. 作業者1 103cおよび作業者2 103dは、クラウドサービス900に記憶されているデータのコピー全体をダウンロードしている。彼らは、タグの検索を開始し、対応するファイルを見つける。作業者103c、103dは、PCTXをいつ提出するか、およびどのPCTXが提出されるかを決定しなければならないことに留意する価値がある。
8. 図8は、作業者1 103cが、r0に対応する提供されたタグを使用してアクセスされたデータから第1のデータファイルを見つける、単純な事例を示す。しかしながら、作業者1 103cがk1を最初に見つけ、値r=[SHA-256(k1)・G]xを計算する場合、計算されるrはタスクトランザクションのr0に等しくない。すなわち、作業者1 103cは最初にk0を見つけ、次いでk1を見つける必要がある。
9. 作業者1 103cがr0およびk0を見つける。
10. 作業者1 103cが、作業者2 103dより前にTxID1をブロックチェーン150に提出し、資金b0の獲得に成功する。
11. 作業者2 103dが、r0に対応する最初のデータファイルを見つける。
12. 作業者2 103dがr0およびk0を見つける。
13. 作業者2 103dが、作業者1 103cの後でTxID1をブロックチェーン150に提出し、したがって報酬の獲得に失敗する。
【0239】
ステップS11からS13は、図8のステップS8からS10の後にあるものとして示され、作業者2 103dは、作業者1 103bがステップS8からS10の1つまたは複数を実行するのと実質的に同時に、ステップS11およびS12を実行し得る。作業者1 103cは、ステップS10を実行するだけでよく、作業者2が報酬を獲得するためにステップS13を実行する前に、証明トランザクションをブロックチェーン150に提出する。
【0240】
上の例では、2名の作業者103c、103dが検証値の導出を競う。作業者がタスクトランザクション報酬をめぐって競争できるように、任意の数の作業者がタグおよび証明トランザクションテンプレートを提供され得ることが理解されるだろう。
【0241】
このアウトソーシングプロセスは、種々の異なるデータタイプについて複数のクラウドサービス900に適用され得る。たとえば、Alice 103aは、自分の写真、作業ファイル、および/または他の個人情報をサードパーティのクラウドストレージプラットフォームに保存することがあり、すべての対応するコピーをダウンロードして自分で検証を行うのではなく、データ完全性の検証をアウトソーシングすることが、Aliceにとって有用である。
【0242】
ファイルを見つけられないという問題がある。言い換えると、どの作業者もファイルを見つけることができない。この状況において、Alice 103aは、ファイルがクラウドサービス900に適切に保存されていないのではないかと疑うことができる。Alice 103aは、アウトソーシングされた計算のためにnLocktimeを設定し、したがって、結果を長時間待たない。nLocktimeより後の提出のための妥当な時間が過ぎても、Alice 103aが作業者から成功した結果を受け取らない場合、Aliceはクラウドサービスにこの問題を確認するように頼むことができる。Alice 103aが悪意のあるユーザであり、存在しないファイルを参照するパズルをいつも生成する場合、作業者はこれ以上Aliceのタスクを受け入れない。
【0243】
別の問題は、作業者103c、103dとクラウドサービス900の両方による不正である。この問題を考慮することができ、これは誰かの信用調査と似た状況である。作業者103c、103dまたはクラウドサービス900のいずれかが悪意のある行動をとっている場合、彼らは評判を落とす。したがって、彼らは今後ユーザから金儲けをすることはできない。
【0244】
本明細書で説明される方法は、クラウドプラットフォーム上でのデータ完全性の検証のための支払の例示的な使用事例を使用する。しかしながら、支払プロトコルは、アウトソーシングする側がデータ完全性の検証に対して逐次支払を行うことを望むような、任意のタイプのプラットフォームに拡張され得ることが理解されるだろう。
【0245】
9. さらなる所見
開示される技法の他の変形または使用事例は、本明細書の開示が与えられれば当業者に明らかになり得る。本開示の範囲は、説明される実施形態ではなく、添付の特許請求の範囲だけによって限定される。
【0246】
たとえば、上記のいくつかの実施形態は、ビットコインネットワーク106、ビットコインブロックチェーン150、およびビットコインノード104に関して説明されている。しかしながら、ビットコインブロックチェーンはブロックチェーン150の1つの特定の例であり、上記の説明は全般に任意のブロックチェーンに当てはまり得ることが理解されるだろう。すなわち、本発明は、決してビットコインブロックチェーンに限定されない。より一般的には、ビットコインネットワーク106、ビットコインブロックチェーン150、およびビットコインノード104への上でのあらゆる言及はそれぞれ、ブロックチェーンネットワーク106、ブロックチェーン150、およびブロックチェーンノード104への言及で置き換えられ得る。ブロックチェーン、ブロックチェーンネットワーク、および/またはブロックチェーンノードは、上で説明されたように、ビットコインブロックチェーン150、ビットコインネットワーク106、およびビットコインノード104の説明される特性の一部またはすべてを共有し得る。
【0247】
本発明の好ましい実施形態では、ブロックチェーンネットワーク106はビットコインネットワークであり、ビットコインノード104は、ブロックチェーン150のブロック151を作成し、公開し、広め、および記憶するという説明された機能の少なくともすべてを実行する。これらの機能のすべてではなく1つまたはいくつかしか実行しない他のネットワークエンティティ(またはネットワーク要素)があり得ることは排除されない。すなわち、ネットワークエンティティは、ブロックを作成して公開することなく、ブロックを伝播するおよび/または記憶するという機能を実行し得る(これらのエンティティは好ましいビットコインネットワーク106のノードであると考えられないことを思い出されたい)。
【0248】
本発明の他の実施形態では、ブロックチェーンネットワーク106はビットコインネットワークではなくてもよい。これらの実施形態では、ノードが、ブロックチェーン150のブロック151を作成し、公開し、広め、および記憶するという機能のすべてではなく少なくとも1つまたはいくつかを実行し得ることは排除されない。たとえば、それらの他のブロックチェーンネットワーク上では、「ノード」は、ブロック151を作成して公開するが、それらのブロック151を他のノードに記憶しないおよび/または広めないように構成される、ネットワークエンティティを指すために使用され得る。
【0249】
さらにより一般的には、上の「ビットコインノード」104という用語へのあらゆる言及は、「ネットワークエンティティ」または「ネットワーク要素」という用語で置き換えられてもよく、そのようなエンティティ/要素は、ブロックを作成し、公開し、広め、および記憶するという役割の一部またはすべてを実行するように構成される。そのようなネットワークエンティティ/要素の機能は、ブロックチェーンノード104を参照して上で説明されたのと同じ方法でハードウェアで実装され得る。
【0250】
上の実施形態は例として説明されるだけであることが理解されるだろう。より一般的には、以下の陳述の任意の1つまたは複数に従って、方法、装置、またはプログラムが提供され得る。
【0251】
陳述1. ブロックチェーンに記録するための証明可能なタスクを生成するコンピュータ実装方法であって、証明可能なタスクが(n+1)個のデータアイテムを検証するためのものであり、方法が、タスクブロックチェーントランザクションを生成するステップであって、タスクブロックチェーントランザクションが(n+1)個のサブスクリプトを備える第1のロックスクリプトを備え、各々のそれぞれのサブスクリプトが知識証明に対応する異なるロック解除条件を定義し、各ロック解除条件が(n+1)個の検証値riのシーケンスの異なる検証値riによって満たされ、0≦i≦nであり、各サブスクリプトがサブスクリプトのロック解除条件を満たす対応する検証値に対応する公開鍵を備え、それぞれのサブスクリプトが、証明ブロックチェーントランザクションの第1のロック解除スクリプトと共に実行されると、ロック解除条件に基づいて第1のロック解除スクリプトにおいて提供される検証値を検証するように構成され、検証値riが検証されるべき(i+1)個のデータ値から導出される、ステップと、タスクブロックチェーントランザクションをブロックチェーンネットワークの1つまたは複数のノードに対して利用可能にするステップと、1つまたは複数の第1の証明トランザクションテンプレートを生成するステップであって、各々の第1の証明トランザクションテンプレートが検証値のシーケンスの異なる検証値に対応し、各々の第1の証明トランザクションテンプレートが、テンプレートの第1のロック解除スクリプトと第1のロックスクリプトを特定する出力点とを備え、テンプレートの第1のロック解除スクリプトが、対応する検証値に対応する公開鍵を備え、第1のロック解除スクリプトが、テンプレートの第1のロック解除スクリプトおよび対応する検証値から導出される、ステップと、1つまたは複数の第1の証明トランザクションテンプレートを作業者に対して利用可能にするステップとを含む、コンピュータ実装方法。
【0252】
陳述2. 検証値riが(i+1)個のデータ値の連結に基づいて生成され得る、陳述1に記載の方法。
【0253】
陳述3. 検証値riが(i+1)個のデータ値のハッシュに基づいて生成され得る、任意の先行する陳述のいずれかに記載の方法。
【0254】
陳述4. 検証値のシーケンスの最後の検証値rnに対応する第1の証明トランザクションテンプレートのテンプレートの第1のロック解除スクリプトが、第1のロック解除スクリプトを備える第1の証明トランザクションの入力に署名し第1の証明トランザクションの出力に署名しないための第1の署名フラグを備え得る、任意の先行する陳述のいずれかに記載の方法。
【0255】
陳述5. 検証値のシーケンスの最初のn個の検証値のうちの1つに対応する第1の証明トランザクションテンプレートのテンプレートの第1のロック解除スクリプトが、第1のロック解除スクリプトを備える第1の証明トランザクションの入力および第1の証明トランザクションの出力に署名するための第2の署名フラグを備え得る、任意の先行する陳述のいずれかに記載の方法。
【0256】
陳述6. 第1の証明トランザクションテンプレートの中の第1のロック解除スクリプトと同じインデックスを有する、第1の証明トランザクションテンプレートの第1の出力が、デジタル資産の額を定義し得る、任意の先行する陳述のいずれかに記載の方法。
【0257】
陳述7. 第1の出力がさらに、タスクトランザクションの提供者にデジタル資産の額を割り当てるための第2のロックスクリプトを含んでもよく、第1の証明トランザクションを提供する作業者に残りの額が割り当てられ、第1の証明トランザクションが、第1の証明トランザクションテンプレートおよび対応する検証値を備え、残りの額が、第1の出力において定義される額およびタスクトランザクションにおいて定義されるデジタル資産の報酬額に基づく、陳述5または6に記載の方法。
【0258】
陳述8. 各々の第1の証明トランザクションテンプレートが異なるシーケンス番号を含んでもよく、シーケンス番号がiの増大と共に増大し、最後の検証値rnに対応する第1の証明トランザクションテンプレートのシーケンス番号が最大であり、最初の検証値r0に対応する第1の証明トランザクションテンプレートのシーケンス番号が最小である、任意の先行する陳述のいずれかに記載の方法。
【0259】
陳述9. 0≦x<nであるrxに対応する第1の証明トランザクションテンプレートがさらに第2のロックスクリプトを含んでもよく、第2のロックスクリプトが(n-x)個のサブスクリプトを備え、各々のそれぞれのサブスクリプトが知識証明に対応する異なるロック解除条件を定義し、各ロック解除条件が(n-x)個の残りの検証値riのセットの異なる1つによって満たされ、残りの検証値のセットがx<i≦nに対する検証値のシーケンスの検証値を備え、それぞれのサブスクリプトが、対応する残りの検証値に対応する公開鍵を備え、それぞれのサブスクリプトが、第2の証明ブロックチェーントランザクションの第2のロック解除スクリプトと共に実行されると、ロック解除条件に基づいて第2のロック解除スクリプトにおいて提供される残りの検証値を検証するように構成され、方法がさらに、1つまたは複数の第2の証明トランザクションテンプレートを生成するステップであって、各々の第2の証明トランザクションテンプレートが、対応する残りの検証値に対応する公開鍵を備える、テンプレートの第2のロック解除スクリプトと、第1の証明トランザクションテンプレートを特定する出力点とを備える、ステップと、1つまたは複数の第2の証明トランザクションテンプレートを作業者に対して利用可能にするステップとを含む、任意の先行する陳述のいずれかに記載の方法。
【0260】
陳述10. 第1のロック解除スクリプトが、テンプレートの第1のロック解除スクリプトおよび検証値を備え得る、任意の先行する陳述のいずれかに記載の方法。
【0261】
陳述11. 第1のロック解除スクリプトが、テンプレートの第1のロック解除スクリプトと、作業者に関連する公開鍵と、作業者の公開鍵を使用して導出される作業者の署名と、作業者の公開鍵を使用して導出される検証値の署名とを備え得る、陳述1から9のいずれかに記載の方法。
【0262】
陳述12. 作業者の署名および検証値の署名が、異なる署名されたメッセージに基づいて生成され得る、陳述11の方法。
【0263】
陳述13. 作業者の署名が、第1のロック解除スクリプトを備える第1の証明トランザクションの入力に署名し第1の証明トランザクションの出力に署名しないための第1の署名フラグと関連付けられてもよく、検証値の署名が、証明トランザクションのすべての入力および出力に署名するための第3の署名フラグと関連付けられる、陳述11または12に記載の方法。
【0264】
陳述14. 第1のロック解除スクリプトの構成要素が事前に定められた順序で提供されてもよく、その順序が、作業者の公開鍵を使用して導出される作業者の署名、タスクブロックチェーントランザクションの提供者の署名、対応する検証値に対応する公開鍵、作業者に関連する公開鍵、および作業者の公開鍵を使用して導出される検証値の署名である、陳述11から13のいずれかの方法。
【0265】
陳述15. データ値がデータアイテムのハッシュであり得る、任意の先行する陳述のいずれかに記載の方法。
【0266】
陳述16. ブロックチェーンに記録するための第1の証明トランザクションを生成するコンピュータ実装方法であって、方法が、1つまたは複数の第1の証明トランザクションテンプレートにアクセスするステップであって、各証明トランザクションテンプレートが、(n+1)個の検証値riのシーケンスの異なる検証値riに対応し、0≦i≦nであり、各証明トランザクションテンプレートが、テンプレートの第1のロック解除スクリプトと、タスクトランザクションの第1のロックスクリプトを特定する出力点とを備え、テンプレートの第1のロック解除スクリプトが、対応する検証値に対応する公開鍵を備える、ステップと、(i+1)個のデータ値から(n+1)個の検証値riのシーケンスの検証値riを導出するステップと、第1の証明トランザクションの第1のロック解除スクリプトにおいて、導出された検証値に対応するテンプレートロック解除スクリプト、および導出された検証値に基づく値を提供するステップと、タスクブロックチェーントランザクションをブロックチェーンネットワークの1つまたは複数のノードに対して利用可能にするステップとを含む、コンピュータ実装方法。
【0267】
陳述17. 導出された検証値に基づく値が、導出された検証値であり得る、陳述16に記載の方法。
【0268】
陳述18. 導出された検証値に基づく値が、作業者の公開鍵および導出された検証値を使用して導出される証明トランザクションを生成する作業者の署名であってもよく、方法がさらに、作業者に関連する公開鍵と、作業者の公開鍵および導出された検証値を使用して導出される作業者の署名とを、第1のロック解除スクリプトにおいて提供するステップを含む、陳述16に記載の方法。
【0269】
陳述19. コンピュータ機器であって、1つまたは複数のメモリユニットを備えるメモリと、1つまたは複数の処理ユニットを備える処理装置とを備え、メモリが、処理装置上で実行するようになされるコードを記憶し、コードが、処理装置上で実行されると、陳述1から18のいずれかに記載の方法を実行するように構成される、コンピュータ機器。
【0270】
陳述20. コンピュータ可読ストレージ上に具現化され、1つまたは複数のプロセッサ上で実行されると、陳述1から18のいずれかに記載の方法を実行するように構成される、コンピュータプログラム。
【符号の説明】
【0271】
101 インターネット、パケット交換ネットワーク
102 コンピュータ端末、機器
103 ユーザ
104 ブロックチェーンノード
105 クライアントアプリケーション
106 P2Pネットワーク
107 サイドチャネル
150 ブロックチェーン
151 ブロック
152 トランザクション
153 ジェネシスブロック
154 プール
155 ブロックポインタ
201 ヘッダ
202 入力
203 出力
401 トランザクションエンジン
402 UIレイヤ
451 プロトコルエンジン
452 スクリプトエンジン
454 アプリケーションレベル決定エンジン
455 ブロックチェーン関連機能モジュール
500 UI
501 UI要素、ユーザ選択可能要素
502 UI要素
503 UI要素、情報要素
600 シーケンス
602 最初のデータ値
604 最後のデータ値
610 シーケンス
612 最初の検証値
614 最後の検証値
700 タスクトランザクション
702 第1の層の証明トランザクション
704 第2の層の証明トランザクション
900 クラウドサービス
図1
図2
図3A
図3B
図4
図5
図6
図7
図8
【手続補正書】
【提出日】2024-08-21
【手続補正1】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項1】
ブロックチェーンに記録するための証明可能なタスクを生成するコンピュータにより実施される方法であって、前記証明可能なタスクが(n+1)個のデータアイテムを検証するためのものであり、前記方法が、
タスクブロックチェーントランザクションを生成するステップであって、前記タスクブロックチェーントランザクションが(n+1)個のサブスクリプトを備える第1のロックスクリプトを備え、各々のそれぞれのサブスクリプトが知識証明に対応する異なるロック解除条件を定義し、各ロック解除条件が(n+1)個の検証値riのシーケンスの異なる検証値riによって満たされ、0≦i≦nであり、各サブスクリプトが前記サブスクリプトの前記ロック解除条件を満たす対応する検証値に対応する公開鍵を備え、前記それぞれのサブスクリプトが、証明ブロックチェーントランザクションの第1のロック解除スクリプトと共に実行されると、前記ロック解除条件に基づいて前記第1のロック解除スクリプトにおいて提供される検証値を検証するように構成され、前記検証値riが検証されるべき(i+1)個のデータ値から導出される、ステップと、
前記タスクブロックチェーントランザクションをブロックチェーンネットワークの1つまたは複数のノードに対して利用可能にするステップと、
1つまたは複数の第1の証明トランザクションテンプレートを生成するステップであって、各々の第1の証明トランザクションテンプレートが検証値の前記シーケンスの異なる検証値に対応し、各々の第1の証明トランザクションテンプレートが、テンプレートの第1のロック解除スクリプトと前記第1のロックスクリプトを特定する出力点とを備え、前記テンプレートの第1のロック解除スクリプトが、前記対応する検証値に対応する前記公開鍵を備え、前記第1のロック解除スクリプトが、前記テンプレートの第1のロック解除スクリプトおよび前記対応する検証値から導出される、ステップと、
前記1つまたは複数の第1の証明トランザクションテンプレートを作業者に対して利用可能にするステップと
を含む、方法。
【請求項2】
前記検証値riが前記(i+1)個のデータ値の連結に基づいて生成される、請求項1に記載の方法。
【請求項3】
前記検証値riが前記(i+1)個のデータ値のハッシュに基づいて生成される、請求項1に記載の方法。
【請求項4】
検証値の前記シーケンスの最後の検証値rnに対応する前記第1の証明トランザクションテンプレートの前記テンプレートの第1のロック解除スクリプトが、前記第1のロック解除スクリプトを備える第1の証明トランザクションの入力に署名し、前記第1の証明トランザクションの出力に署名しないための第1の署名フラグを備える、請求項1に記載の方法。
【請求項5】
検証値の前記シーケンスの最初のn個の検証値のうちの1つに対応する前記第1の証明トランザクションテンプレートの前記テンプレートの第1のロック解除スクリプトが、前記第1のロック解除スクリプトを備える第1の証明トランザクションの入力および前記第1の証明トランザクションの出力に署名するための第2の署名フラグを備える、請求項1に記載の方法。
【請求項6】
前記第1の証明トランザクションテンプレートの中の前記第1のロック解除スクリプトと同じインデックスを有する、前記第1の証明トランザクションテンプレートの第1の出力が、デジタル資産の額を定義する、請求項1に記載の方法。
【請求項7】
検証値の前記シーケンスの最初のn個の検証値のうちの1つに対応する前記第1の証明トランザクションテンプレートの前記テンプレートの第1のロック解除スクリプトが、前記第1のロック解除スクリプトを備える第1の証明トランザクションの入力および前記第1の証明トランザクションの出力に署名するための第2の署名フラグを備え、
前記第1の出力が、前記タスクブロックチェーントランザクションの提供者にデジタル資産の前記額を割り当てるための第2のロックスクリプトをさらに備え、
前記第1のロック解除スクリプトを備える第1の証明トランザクションを提供する前記作業者に残りの額が割り当てられ、前記第1の証明トランザクションが、前記第1の証明トランザクションテンプレートおよび前記対応する検証値を備え、前記残りの額が、前記第1の出力において定義される前記額および前記タスクブロックチェーントランザクションにおいて定義されるデジタル資産の報酬額に基づく、請求項6に記載の方法。
【請求項8】
各々の第1の証明トランザクションテンプレートが異なるシーケンス番号を備え、前記シーケンス番号がiの増大と共に増大し、
最後の検証値rnに対応する前記第1の証明トランザクションテンプレートの前記シーケンス番号が最大であり、最初の検証値r0に対応する前記第1の証明トランザクションテンプレートの前記シーケンス番号が最小である、請求項1に記載の方法。
【請求項9】
0≦x<nであるrxに対応する前記第1の証明トランザクションテンプレートが第2のロックスクリプトをさらに備え、前記第2のロックスクリプトが(n-x)個のサブスクリプトを備え、各々のそれぞれのサブスクリプトが知識証明に対応する異なるロック解除条件を定義し、
各ロック解除条件が(n-x)個の残りの検証値riのセットの異なる1つによって満たされ、残りの検証値の前記セットがx<i≦nに対する検証値の前記シーケンスの前記検証値を備え、
前記それぞれのサブスクリプトが、前記対応する残りの検証値に対応する公開鍵を備え、
前記それぞれのサブスクリプトが、第2の証明ブロックチェーントランザクションの第2のロック解除スクリプトと共に実行されると、前記ロック解除条件に基づいて前記第2のロック解除スクリプトにおいて提供される前記残りの検証値を検証するように構成され、
前記方法が、
1つまたは複数の第2の証明トランザクションテンプレートを生成するステップであって、各々の第2の証明トランザクションテンプレートが、
前記対応する残りの検証値に対応する前記公開鍵を備える、テンプレートの第2のロック解除スクリプトと、
前記第1の証明トランザクションテンプレートを特定する出力点と
を備える、ステップと、
前記1つまたは複数の第2の証明トランザクションテンプレートを前記作業者に対して利用可能にするステップと
をさらに含む、請求項1に記載の方法。
【請求項10】
前記第1のロック解除スクリプトが、前記テンプレートの第1のロック解除スクリプトおよび前記検証値を備える、請求項1に記載の方法。
【請求項11】
前記第1のロック解除スクリプトが、前記テンプレートの第1のロック解除スクリプトと、前記作業者に関連する公開鍵と、前記作業者の前記公開鍵を使用して導出される前記作業者の署名と、前記作業者の前記公開鍵を使用して導出される前記検証値の署名とを備える、請求項1に記載の方法。
【請求項12】
前記作業者の前記署名および前記検証値の前記署名が、異なる署名されたメッセージに基づいて生成される、請求項11に記載の方法。
【請求項13】
前記作業者の前記署名が、前記第1のロック解除スクリプトを備える第1の証明トランザクションの入力に署名し、前記第1の証明トランザクションの出力に署名しないための第1の署名フラグと関連付けられ、
前記検証値の前記署名が、前記第1の証明トランザクションのすべての入力および出力に署名するための第3の署名フラグと関連付けられる、請求項11に記載の方法。
【請求項14】
前記第1のロック解除スクリプトの構成要素が事前に定められた順序で提供され、前記順序が、前記作業者の前記公開鍵を使用して導出される前記作業者の前記署名、前記タスクブロックチェーントランザクションの提供者の署名、前記対応する検証値に対応する前記公開鍵、前記作業者に関連する前記公開鍵、および前記作業者の前記公開鍵を使用して導出される前記検証値の前記署名である、請求項11に記載の方法。
【請求項15】
前記データ値がデータアイテムのハッシュである、請求項1に記載の方法。
【請求項16】
ブロックチェーンに記録するための第1の証明トランザクションを生成するコンピュータにより実施される方法であって、前記方法が、
1つまたは複数の第1の証明トランザクションテンプレートにアクセスするステップであって、各証明トランザクションテンプレートが、(n+1)個の検証値riのシーケンスの異なる検証値riに対応し、0≦i≦nであり、各証明トランザクションテンプレートが、テンプレートの第1のロック解除スクリプトと、タスクトランザクションの第1のロックスクリプトを特定する出力点とを備え、前記テンプレートの第1のロック解除スクリプトが、前記対応する検証値に対応する公開鍵を備える、ステップと、
(i+1)個のデータ値から(n+1)個の検証値riの前記シーケンスの検証値riを導出するステップと、
前記第1の証明トランザクションの第1のロック解除スクリプトにおいて、前記導出された検証値に対応するテンプレートロック解除スクリプト、および前記導出された検証値に基づく値を提供するステップと、
タスクブロックチェーントランザクションをブロックチェーンネットワークの1つまたは複数のノードに対して利用可能にするステップと
を含む、方法。
【請求項17】
前記導出された検証値に基づく前記値が、前記導出された検証値である、請求項16に記載の方法。
【請求項18】
前記導出された検証値に基づく前記値が、作業者の公開鍵および前記導出された検証値を使用して導出される前記証明トランザクションを生成する前記作業者の署名であり、
前記方法が、前記作業者に関連する前記公開鍵と、前記作業者の前記公開鍵および前記導出された検証値を使用して導出される前記作業者の前記署名とを、前記第1のロック解除スクリプトにおいて提供するステップをさらに含む、請求項16に記載の方法。
【請求項19】
コンピュータ機器であって、
1つまたは複数のメモリユニットを備えるメモリと、
1つまたは複数の処理ユニットを備える処理装置と
を備え、前記メモリが、前記処理装置によって実行されるように構成されたコードを記憶し、前記コードが、前記処理装置によって実行されると、請求項1から18のいずれか一項に記載の方法を実行するように構成される、コンピュータ機器。
【請求項20】
コンピュータ可読ストレージ上に記憶され、1つまたは複数のプロセッサによって実行されると、請求項1から18のいずれか一項に記載の方法を実行するように構成される、コンピュータプログラム。
【国際調査報告】