(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2025-07-04
(45)【発行日】2025-07-14
(54)【発明の名称】ブロックチェーントランザクションアウトプットの確率的メンバシップテスト
(51)【国際特許分類】
H04L 9/32 20060101AFI20250707BHJP
【FI】
H04L9/32 200Z
(21)【出願番号】P 2022572648
(86)(22)【出願日】2021-04-23
(86)【国際出願番号】 EP2021060654
(87)【国際公開番号】W WO2021239345
(87)【国際公開日】2021-12-02
【審査請求日】2024-03-26
(32)【優先日】2020-05-28
(33)【優先権主張国・地域又は機関】GB
(73)【特許権者】
【識別番号】318001991
【氏名又は名称】エヌチェーン ライセンシング アーゲー
(74)【代理人】
【識別番号】100107766
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【氏名又は名称】伊東 忠彦
(74)【代理人】
【識別番号】100135079
【氏名又は名称】宮崎 修
(72)【発明者】
【氏名】パガーニ,アレッシオ
(72)【発明者】
【氏名】ライト,クレイグ スティーヴン
【審査官】平井 誠
(56)【参考文献】
【文献】特開2019-145925(JP,A)
【文献】国際公開第2019/170171(WO,A2)
【文献】国際公開第2019/137563(WO,A2)
(58)【調査した分野】(Int.Cl.,DB名)
G09C 1/00- 5/00
H04L 9/00-40
(57)【特許請求の範囲】
【請求項1】
ブロックチェーントランザクションアウトプットの二重使用試行を識別する、コンピュータにより実施される方法であって、当該方法は送信エンティティにより実行され、
前記方法は、
前記送信エンティティに利用可能な第1の複数の使用されたブロックチェーントランザクションアウトプットの各々にハッシュ関数を適用することにより、前記第1の複数の使用されたブロックチェーントランザクションアウトプットの各々のそれぞれの識別子を生成するステップと、
第1の確率的フィルタを生成するステップであり、前記第1の確率的フィルタは、
前記第1の複数の使用されたブロックチェーントランザクションアウトプットの各々の
前記それぞれの識別子を符号化している、ステップと、
前記第1の確率的フィルタを、受信エンティティに利用可能にするステップと、
を含む方法。
【請求項2】
前記第1の複数の使用された
ブロックチェーントランザクションアウトプットは、ブロックチェーンノードにより維持される公開されていないトランザクションの順序付けられたセットに存在するそれぞれのトランザクションにより使用されている、使用された
ブロックチェーントランザクションアウトプットのセットを含み、前記トランザクションの順序付けられたセット内の各トランザクションは、前記ブロックチェーンノードにより検証されている、請求項1に記載の方法。
【請求項3】
前記第1の複数の使用された
ブロックチェーントランザクションアウトプットは、ブロックチェーンのそれぞれのブロックに存在するそれぞれのトランザクションにより使用されているトランザクションアウトプットのそれぞれのセットを含む、請求項1又は請求項2に記載の方法。
【請求項4】
前記第1の複数の使用された
ブロックチェーントランザクションアウトプットは、トランザクションアウトプットの複数のそれぞれのセットを含み、トランザクションアウトプットの各セットは、前記ブロックチェーンの複数のブロックのそれぞれのブロックに存在するそれぞれのトランザクションにより使用されている、請求項3に記載の方法。
【請求項5】
前記確率的フィルタは、ブルームフィルタ又はカッコウフィルタである、請求項1乃至4のいずれかに記載の方法。
【請求項6】
各それぞれの識別子は、それぞれの使用された
ブロックチェーントランザクションアウトプットを含むそれぞれのトランザクションのそれぞれの識別子に基づく、請求項1乃至5のいずれかに記載の方法。
【請求項7】
各それぞれの識別子はさらに、前記それぞれのトランザクション内の前記それぞれの使用された
ブロックチェーントランザクションアウトプットのそれぞれのアウトプットインデックスに基づく、請求項6に記載の方法。
【請求項8】
第2の確率的フィルタを生成するステップであり、前記第2の確率的フィルタは、前記送信エンティティに利用可能な第2の複数の使用されたブロックチェーントランザクションアウトプットの各々のそれぞれの識別子を含む、ステップと、
前記第2の確率的フィルタを、受信エンティティに利用可能にするステップと、
を含む、請求項1乃至7のいずれかに記載の方法。
【請求項9】
前記第2の確率的フィルタの生成は、前記第1の複数の使用されたブロックチェーントランザクションアウトプットに既に含まれていない前記第2の複数の使用されたブロックチェーントランザクションアウトプットのうちの1つ以上のそれぞれの識別子を含むように前記第1の確率的フィルタを更新することを含む、請求項8に記載の方法。
【請求項10】
前記第1又は第2の確率的フィルタが二重使用試行であると示すブロックチェーントランザクションアウトプットを、前記受信エンティティが受信しているという通知を受信するステップと、
前記ブロックチェーントランザクションアウトプットが、前記送信エンティティに利用可能な前記第1又は第2の複数の使用されたブロックチェーントランザクションアウトプットに存在するかどうかを決定するステップと、
を含む、請求項8又は9に記載の方法。
【請求項11】
前記ブロックチェーントランザクションアウトプットが、前記送信エンティティに利用可能な前記第1又は第2の複数の使用されたブロックチェーントランザクションアウトプットに存在しないと決定された場合
、ブロックチェーントランザクションが二重使用試行でないことを前記受信エンティティに知らせるステップ、を含む請求項10に記載の方法。
【請求項12】
前記ブロックチェーントランザクションアウトプットが、前記送信エンティティに利用可能な前記第1又は第2の複数の使用されたブロックチェーントランザクションアウトプットに存在すると決定された場合
、ブロックチェーントランザクションが二重使用試行であることを前記受信エンティティ及び/又は異なるエンティティに知らせるステップ、を含む請求項10に記載の方法。
【請求項13】
前記送信エンティティはブロックチェーンノードである、請求項1乃至12のいずれかに記載の方法。
【請求項14】
前記受信エンティティは軽量ブロックチェーンクライアントアプリケーションを含む、請求項1乃至13のいずれかに記載の方法。
【請求項15】
前記受信エンティティは異なるブロックチェーンノードである、請求項1乃至14のいずれかに記載の方法。
【請求項16】
ブロックチェーントランザクションアウトプットの二重使用試行を識別する、コンピュータにより実施される方法であって、当該方法は受信エンティティにより実行され、
送信エンティティから第1の確率的フィルタを取得するステップであり、前記第1の確率的フィルタは、前記送信エンティティに利用可能な第1の複数の使用されたブロックチェーントランザクションアウトプットの各々のそれぞれの識別子を符号化している、ステップと、
1つ以上のブロックチェーントランザクションアウトプットの指示を取得するステップと、
前記1つ以上のブロックチェーントランザクションアウトプットのそれぞれの識別子が前記第1の確率的フィルタに存在するかどうかに基づいて、前記1つ以上のブロックチェーントランザクションアウトプットが二重使用試行であるかどうかを決定するステップと、
を含む方法。
【請求項17】
前記1つ以上のブロックチェーントランザクションアウトプットの指示の前記取得は、前記1つ以上のブロックチェーントランザクションアウトプットへのそれぞれの参照を含むトランザクションテンプレートを取得することを含む、請求項16に記載の方法。
【請求項18】
前記送信エンティティから第2の確率的フィルタを取得するステップであり、前記第2の確率的フィルタは、前記送信エンティティに利用可能な第2の複数の使用されたブロックチェーントランザクションアウトプットの各々のそれぞれの識別子を含む、ステップを含み、
前記1つ以上のブロックチェーントランザクションアウトプットが二重使用試行であるかどうかの前記決定は、前記1つ以上のブロックチェーントランザクションアウトプットのそれぞれの識別子が前記第2の確率的フィルタに存在するかどうかに基づく、
請求項16又は請求項17に記載の方法。
【請求項19】
1つ以上の異なるエンティティから1つ以上のさらなる確率的フィルタを取得するステップ、を含み、
前記1つ以上のブロックチェーントランザクションアウトプットが二重使用試行であるかどうかの前記決定は、前記1つ以上のブロックチェーントランザクションアウトプットのそれぞれの識別子が、前記1つ以上のさらなる確率的フィルタの一部又は全部に存在するかどうかに基づく、
請求項16乃至18のいずれかに記載の方法。
【請求項20】
前記第1及び/又は第2の確率的フィルタの要求を前記送信エンティティに送信するステップ、を含む請求項18又は19に記載の方法。
【請求項21】
前記1つ以上のブロックチェーントランザクションアウトプットが二重使用試行でないと決定することに応答して
、ブロックチェーントランザクションをブロックチェーンネットワークの1つ以上のブロックチェーンノード
に送信するステップ
を含む請求項17
乃至20のいずれかに記載の方法。
【請求項22】
前記1つ以上のブロックチェーントランザクションアウトプットが二重使用試行であると決定することに応答して、前記1つ以上のブロックチェーントランザクションアウトプットが二重使用試行であることを前記第1の確率的フィルタが示すという通知を前記送信エンティティに送信するステップ
を含む請求項16乃至20のいずれかに記載の方法。
【請求項23】
前記受信エンティティは軽量ブロックチェーンクライアントを含む、請求項16乃至22のいずれかに記載の方法。
【請求項24】
前記受信エンティティは、複数の軽量ブロックチェーンクライアントを含み、前記1つ以上のブロックチェーントランザクションの前記指示の前記取得は、前記複数の軽量ブロックチェーンクライアントの1つから前記指示を取得することを含む、請求項16乃至23のいずれかに記載の方法。
【請求項25】
前記受信エンティティはブロックチェーンノードを含む、請求項16乃至22のいずれかに記載の方法。
【請求項26】
1つ以上のメモリユニットを含むメモリと、
1つ以上の処理ユニット
を含む処理装置と、
を含
み、前記メモリはコードを記憶し、前記コードは、前記処理ユニットにより実行されると前記処理装置に請求項1乃至
15のいずれかに記載の方法を実行させる
、コンピュータ機器。
【請求項27】
コンピュータ読取可能記憶装置上に具現化されたコンピュータプログラムであり、コンピュータ機器上で実行されたときに前記コンピュータ機器に請求項1乃至
15のいずれかに記載の方法を実行させる、コンピュータプログラム。
【請求項28】
1つ以上のメモリユニットを含むメモリと、
1つ以上の処理ユニットを含む処理装置と、
を含み、前記メモリはコードを記憶し、前記コードは、前記処理ユニットにより実行されると前記処理装置に請求項16乃至25のいずれかに記載の方法を実行させる、コンピュータ機器。
【請求項29】
コンピュータ読取可能記憶装置上に具現化されたコンピュータプログラムであり、コンピュータ機器上で実行されたときに前記コンピュータ機器に請求項16乃至25のいずれかに記載の方法を実行させる、コンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、ブロックチェーントランザクションアウトプットの二重使用試行、すなわち、ブロックチェーントランザクションの前に使用された(又は、割り当てられた)アウトプットを再使用(又は、再割り当て)する試みを識別する方法に関する。
【背景技術】
【0002】
ブロックチェーンは、分散型データ構造の一形態を指し、ブロックチェーンの複製コピーは、分散型ピアツーピア(P2P)ネットワーク(以下、「ブロックチェーンネットワーク」と呼ぶ)内の複数のノードの各々で維持され、広く公開されている。ブロックチェーンは、データのブロックのチェーンを含み、各ブロックは、1つ以上のトランザクションを含む。いわゆる「コインベーストランザクション」以外の各トランザクションは、1つ以上のコインベーストランザクションまで、1つ以上のブロックに及ぶ可能性があるシーケンス内の先行トランザクションをさかのぼって指し示す。コインベーストランザクションについては、以下で論じられる。ブロックチェーンネットワークにサブミットされるトランザクションは、新しいブロックに含まれる。新しいブロックは、しばしば「マイニング」と呼ばれるプロセスにより作成され、これは、複数のノードの各々が「プルーフオブワーク(proof-of-work)」を実行するために競合すること、すなわち、ブロックチェーンの新しいブロックに含まれるのを待っている順序付けられ及び検証された保留中のトランザクションの定義されたセットの表現に基づいて暗号パズルを解くことを含む。ブロックチェーンはノードにおいて切り取られることがあり、ブロックの公開は単なるブロックヘッダの公開により達成可能であることに留意されたい。
【0003】
ブロックチェーン内のトランザクションは、次のうちの1つ以上を実行するため、すなわち、デジタル資産(すなわち、複数のデジタルトークン)を伝達するため、仮想化された台帳又はレジストリ内のジャーナルエントリのセットを順序付けるため、タイムスタンプエントリを受信及び処理するため、及び/又はインデックスポインタを時間で順序付けるために使用される。ブロックチェーンを活用して、ブロックチェーンの上にさらなる機能を層状にすることもできる。ブロックチェーンプロトコルは、トランザクションにおける、さらなるユーザデータ又はデータに対するインデックスの記憶を可能にすることができる。単一のトランザクション内に記憶することができる最大データ容量に対する予め指定された制限はなく、したがって、ますます多くの複雑なデータが組み込まれる可能性がある。例えば、これは、ブロックチェーンに電子文書を、又はオーディオ若しくはビデオデータを記憶するために使用されてもよい。
【0004】
ブロックチェーンネットワークのノード(しばしば「マイナー」と呼ばれる)は、分散型のトランザクション登録及び立証プロセスを実行し、これについては、以下で詳細に説明される。要約すると、このプロセスの間、ノードは、トランザクションを検証し、トランザクションを、それらが有効なプルーフオブワークの解を識別しようと試みるためのブロックテンプレートに挿入する。有効な解が見つかると、新しいブロックがネットワークの他のノードに伝搬され、ゆえに、各ノードはブロックチェーン上にこの新しいブロックを記録することができる。トランザクションをブロックチェーンに記録させるために、ユーザ(例えば、ブロックチェーンクライアントアプリケーション)は、トランザクションを、伝搬されるようにネットワークのノードの1つに送信する。トランザクションを受け取るノードは、検証されたトランザクションを新しいブロックに組み込むプルーフオブワークの解を見つけるために競争する場合がある。各ノードは、同じノードプロトコルを強制するように構成され、これは、トランザクションが有効であるための1つ以上の条件を含む。無効なトランザクションは、伝搬されず、ブロックに組み込まれもしない。トランザクションが検証され、それによりブロックチェーンに受け入れられると仮定すると、トランザクション(任意のユーザデータを含む)はしたがって、不変の(immutable)公開レコードとして、ブロックチェーンネットワーク内のノードの各々において登録され、インデックスをつけられたままになる。
【0005】
最新のブロックを作成するためにプルーフオブワークパズルを成功裏に解いたノードは典型的には、「コインベーストランザクション」と呼ばれる新しいトランザクションで報酬を与えられ、これは、デジタル資産の金額、すなわち複数のトークンを分配する。無効なトランザクションの検出及び拒絶は、ネットワークのエージェントとして機能し、不正行為を報告及びブロックするように動機づけされる競合ノードのアクションにより強制される。情報の広範な公開により、ユーザはノードの性能を継続的に監査することができる。単なるブロックヘッダの公開により、参加者はブロックチェーンの継続的な完全性を確保することができる。
【0006】
「アウトプットベース」モデル(時にUTXOベースモデルと呼ばれる)において、所与のトランザクションのデータ構造は、1つ以上のインプットと1つ以上のアウトプットを含む。任意の使用可能なアウトプットは、トランザクションの進行シーケンスから導出可能であるデジタル資産の金額を指定する要素を含む。使用可能なアウトプットは、時にUTXO(「未使用トランザクションアウトプット(unspent transaction output)」)と呼ばれる。アウトプットは、アウトプットの将来の引き換え(redemption)のための条件を指定するロッキングスクリプト(locking script)をさらに含むことができる。ロッキングスクリプトは、デジタルトークン又は資産を検証及び移転するために必要な条件を定義するプレディケート(predicate)である。(コインベーストランザクション以外の)トランザクションの各インプットは、先行トランザクションにおけるそのようなアウトプットへのポインタ(すなわち、参照)を含み、さらに、指し示されたアウトプットのロッキングスクリプトをロック解除するためのアンロッキングスクリプト(unlocking script)を含むことができる。そこで、トランザクションのペアを考え、それらを第1のトランザクション及び第2のトランザクション(又は「ターゲット」トランザクション)と呼ぶ。第1のトランザクションは、デジタル資産の額を指定し、アウトプットをロック解除する1つ以上の条件を定義するロッキングスクリプトを含む、少なくとも1つのアウトプットを含む。第2の、ターゲットトランザクションは、第1のトランザクションのアウトプットへのポインタと、第1のトランザクションのアウトプットをロック解除するアンロッキングスクリプトとを含む、少なくとも1つのインプットを含む。
【0007】
このようなモデルでは、第2の、ターゲットトランザクションが、ブロックチェーン内で伝搬及び記録されるようにブロックチェーンネットワークに送信されるとき、各ノードで適用される有効性の基準の1つは、アンロッキングスクリプトが、第1のトランザクションのロッキングスクリプトで定義された1つ以上の条件の全てを満たすことである。もう1つは、第1のトランザクションのアウトプットが、別の、より早期の有効なトランザクションにより既に引き換えられて(redeemed)いないことである。これらの条件のいずれかに従ってターゲットトランザクションが無効であることを見い出したノードは、それを伝搬せず(有効なトランザクションとしては伝搬しないが、可能性として、無効なトランザクションを登録するために伝搬する)、ブロックチェーンに記録されるようにそれを新しいブロックに含めることもしない。
【0008】
代替的なタイプのトランザクションモデルは、アカウントベースモデルである。この場合、各トランザクションは、過去のトランザクションのシーケンス内の先行トランザクションのUTXOをさかのぼって参照することにより移転される金額を定義するのでなく、むしろ、絶対的なアカウント残高への参照により定義する。全てのアカウントの現在の状態は、ブロックチェーンとは別個のノードにより記憶され、常に更新される。
【発明の概要】
【0009】
少なくともいくつかのブロックチェーンプロトコルによれば、ブロックチェーンノードが新しいトランザクションを受信したとき、そのノードは、新しいトランザクションのインプットにより参照される未使用トランザクションアウトプット(UTXO)が、ブロックにおいて既に公開されている(published)か、又は検証されたが公開されていない(unpublished)トランザクションの順序付けられたセット(ordered set)(しばしば「メモリプール(mempool)」と呼ばれる)にある、別のトランザクションにより既に参照されていないことをチェックすることを求められる。これは、二重使用(double-spending)を防止することを目的としている。
【0010】
一部のユーザ、特に、限られた計算リソースを有するユーザは、ブロックチェーンネットワークにブロックチェーントランザクションを送信するために、軽量(lightweight)クライアントアプリケーション(本明細書において単に「ライト(light)」クライアントとも呼ばれる)を操作する。ブロックチェーンノードとは異なり、ライトクライアントは、ブロックチェーンを記憶せず、検証されたが公開されていないトランザクションの順序付けられたセットを保持しない。
【0011】
トランザクションの有効性を(高い確率で)チェックしたいライトクライアントは、トランザクションにより参照されるUTXOが別のトランザクションにより既に使用されていないことを立証するために、1つ又は複数のブロックチェーンノードに照会する(query)べきである。しかしながら、ライトクライアントは、それらのトランザクションがブロックで公開されるまで待つことなく、及び新たに受信したトランザクションごとにブロックチェーンノードに照会する必要なく、トランザクションを受け入れたい場合がある。インスタントトランザクション(instant transactions)とも呼ばれる「0-confトランザクション」は、それらが受信されるとすぐに、及びトランザクションがブロック内で公開されるのを待つことなく、(例えば、商品又はサービスと交換でマーチャント(merchant)により)受け入れられるトランザクションである。0-confトランザクションを受け入れることのリスクは、悪意のあるユーザが同じトランザクションを二重使用し、マーチャントに損失をもたらす可能性があることである。
【0012】
したがって、当事者(party)(ライトクライアントアプリケーションを操作するユーザなど)は、新しいトランザクションがその当事者により受信されるたびに1つ又は複数のブロックチェーンノードと通信する必要なく、既に使用されているか又はその他の方法で割り当てられているトランザクションアウトプットを新しいトランザクションが二重使用しようと試みているかどうかを識別することができる必要がある。
【0013】
本明細書に開示される1つの態様によれば、ブロックチェーントランザクションアウトプットの二重使用試行を識別する、コンピュータにより実施される方法が提供され、当該方法は送信エンティティにより実行され、第1の確率的フィルタ(probabilistic filter)を生成するステップであり、第1の確率的フィルタは、送信エンティティに利用可能な第1の複数の使用されたブロックチェーントランザクションアウトプットの各々のそれぞれの識別子を符号化している、ステップと、第1の確率的フィルタを受信エンティティに利用可能にするステップと、を含む。
【0014】
送信エンティティ(例えば、ブロックチェーンノード)は、前に使用されたブロックチェーンアウトプット、例えば、そのノードにより維持される(maintained)公開されていないトランザクションの順序付けられたセット内の、又はブロックチェーンの公開されたブロック(例えば、ブロックチェーンの最後の6ブロック)内のトランザクションにより使用されたアウトプットの識別子を、確率的フィルタに投入する(populates)。確率的フィルタ(例えば、ブルームフィルタ(Bloom filter)又はカッコウフィルタ(Cuckoo filter))は、要素がセットのメンバであるかどうかをテストするために用いられる確率的データ構造である。確率的フィルタの特徴は、偽陽性はあり得るが、偽陰性はあり得ないことである。すなわち、確率的フィルタを用いて、要素が確実にセット内にないかどうか、又は要素がセット内にある可能性があるかどうかを決定することができる。確率的フィルタを受信エンティティ(例えば、ライトクライアント)に利用可能にすることにより、受信エンティティは、前のトランザクションの1つ以上のアウトプットを参照するトランザクションが、確実に二重使用試行でないか、又はそれが二重使用試行である可能性があるかどうかのいずれかをチェックすることができる。
【0015】
フィルタを受信エンティティに利用可能にすることは、フィルタを受信エンティティに直接送信すること、フィルタを(例えば、ウェブサイトで)公開すること、又はフィルタを多数の異なる受信エンティティにブロードキャストすることを含んでもよい。
【0016】
受信エンティティはさらに、ブロックチェーンノードでもよい。第1のブロックチェーンノードは、公開されていないトランザクションの順序付けられたセット内のトランザクションにより使用されたトランザクションアウトプットの識別子を含む確率的フィルタを生成することができる。第1のブロックチェーンノードは次いで、そのフィルタを1つ又は複数の他のブロックチェーンノードと共有することができる。これらのブロックチェーンノードは、受信したフィルタを用いて、新たに受信したトランザクションのトランザクションアウトプットが、第1のブロックチェーンノードにより維持される公開されていないトランザクションの順序付けられたセット内のトランザクションで既に使用されているかどうかをチェックすることができる。
【0017】
本明細書に開示される別の態様によれば、ブロックチェーントランザクションアウトプットの二重使用試行を識別する、コンピュータにより実施される方法が提供され、当該方法は受信エンティティにより実行され、送信エンティティから第1の確率的フィルタを取得するステップであり、第1の確率的フィルタは、送信エンティティに利用可能な第1の複数の使用されたブロックチェーントランザクションアウトプットの各々のそれぞれの識別子を符号化している、ステップと、1つ以上のブロックチェーントランザクションアウトプットの指示(indication)を取得するステップと、1つ以上のブロックチェーントランザクションアウトプットのそれぞれの識別子が第1の確率的フィルタに存在するかどうかに基づいて、1つ以上のブロックチェーントランザクションアウトプットが二重使用試行であるかどうかを決定するステップと、を含む。
【0018】
本発明は、0-confトランザクションを受け入れるためにライトクライアントを使用するマーチャント又は他の当事者のセキュリティを向上させる。セキュリティは、可能な二重使用攻撃を識別及び防止することにより向上する。ライトクライアントは、ほとんどの時間の間オフラインにすることができ、新しい0-confトランザクションを受け入れる前にブロックチェーンノードから少量のデータをダウンロードするだけでよく、ゆえにデータストレージが改善される。さらに、本発明を用いて二重使用試行を識別する当事者は、詐欺的な及び不正なユーザを報告することができる。
【0019】
さらに、本手法は、ブロックチェーンノードのセキュリティを強化し、それらをサービス拒否(denial-of-service)攻撃から防御するために使用することもできる。例えば、ライトウォレットを動作させるデバイス(例えば、自動販売機)は、簡易支払立証(simplified payment verification、SPV)方式を使用して支払いを受け入れることがある。確率的フィルタの使用なしでは、ライトウォレットは、あらゆる到来するトランザクションをブロックチェーンノードのセットを用いてチェックしなければならない。そのようにする際、悪意のあるユーザが、複数の二重使用トランザクション(これらは、SPVルールに従って有効である)をサブミットする可能性がある。ライトウォレットは、全てのトランザクションをブロックチェーンノードに送信する。ブロックチェーンノードは、あまりに多数の要求を受信すると、ライトウォレットをクラッシュさせ、あるいは禁止する場合がある(これはその後、新しい正当な支払いを受け入れることができない)。攻撃者にとっては、拒絶されることになる二重使用を送信しているため、コストがかからない。しかしながら、代わりにライトウォレットが確率的フィルタを用いた場合、ライトウォレットは、ブロックチェーンノードに無効なトランザクションをフラッディングすることなく、二重使用をローカルでチェックし、次いでそれらを拒絶することができる。したがって、確率的フィルタは、ライトウォレットの安全性を向上させるだけでなく、さらにブロックチェーンノードを「保護」する。
【図面の簡単な説明】
【0020】
本開示の実施形態の理解を助け、そのような実施形態がどのように実施され得るかを示すために、例としてのみ、以下の添付図面を参照する。
【
図1】ブロックチェーンを実装するシステムの概略ブロック図である。
【
図2】ブロックチェーンに記録され得るトランザクションのいくつかの例を概略的に示す。
【
図3】同期されていないメモリプールに起因する二重使用試行の一例を概略的に示す。
【
図4】一時的なチェーンフォークに起因する二重使用試行の一例を概略的に示す。
【
図5】本発明の実施形態を実施するための一例示的なシステムの概略ブロック図である。
【
図6】二重使用を防止するために、確率的フィルタをどのように使用して複数のノードの迅速なチェックを可能にするかを概略的に示す。
【
図7】ノードにより受信した新しいトランザクションが確率的フィルタにどのように挿入されるかの一例を概略的に示す。
【
図8】新しいブロックが見つかるたびに新しいフィルタを初期化する一例を概略的に示す。
【
図9】接続されたデバイスで受信したトランザクションを立証するための確率的フィルタを維持する中央集権型ローカルサーバを概略的に示す。
【
図10】二重使用試行を識別するクライアントアプリケーションにより実行されるアクションの一例示的なフローを示す。
【発明を実施するための形態】
【0021】
例示的なシステムの概要
図1は、ブロックチェーン150を実装するための一例示的なシステム100を示す。システム100は、パケット交換ネットワーク101、典型的にはインターネットなどの広域インターネットワークを含むことができる。パケット交換ネットワーク101は、パケット交換ネットワーク101内でピアツーピア(P2P)ネットワーク106を形成するように配置され得る複数のブロックチェーンノード104を含む。図示されていないが、ブロックチェーンノード104は、ほぼ完全グラフ(near-complete graph)として配置されてもよい。したがって、各ブロックチェーンノード104は、他のブロックチェーンノード104に高度に接続されている。
【0022】
各ブロックチェーンノード104はピアのコンピュータ機器を含み、ノード104の異なるものは異なるピアに属している。各ブロックチェーンノード104は、1つ以上のプロセッサ、例えば、1つ以上の中央処理装置(CPU)、アクセラレータプロセッサ、特定用途向けプロセッサ及び/又はフィールドプログラマブルゲートアレイ(FPGA)、及び特定用途向け集積回路(ASIC)などの他の機器を含む処理装置を含む。各ノードは、メモリ、すなわち、1つ又は複数の非一時的コンピュータ読取可能媒体の形態のコンピュータ読取可能記憶装置も含む。メモリは、1つ以上のメモリ媒体、例えばハードディスクなどの磁気媒体、ソリッドステートドライブ(SSD)、フラッシュメモリ、又はEEPROMなどの電子媒体、及び/又は光ディスクドライブなどの光学媒体を採用する1つ以上のメモリユニットを含むことができる。
【0023】
ブロックチェーン150は、データのブロック151のチェーンを含み、ブロックチェーン150のそれぞれのコピーが、分散型又はブロックチェーンネットワーク160内の複数のブロックチェーンノード104の各々で維持される。上述したように、ブロックチェーン150のコピーを維持することは、必ずしもブロックチェーン150をフルに記憶することを意味しない。代わりに、ブロックチェーン150は、各ブロックチェーンノード150が各ブロック151のブロックヘッダを記憶する(以下で論じられる)限り、データを切り取られ(pruned)てもよい。チェーン内の各ブロック151は、1つ以上のトランザクション152を含み、この文脈におけるトランザクションは、一種のデータ構造を指す。データ構造の性質は、トランザクションモデル又はスキームの一部として使用されるトランザクションプロトコルのタイプに依存する。所与のブロックチェーンは、全体を通して、1つの特定のトランザクションプロトコルを使用する。1つの一般的なタイプのトランザクションプロトコルでは、各トランザクション152のデータ構造は、少なくとも1つのインプットと少なくとも1つのアウトプットを含む。各アウトプットは、プロパティとしてデジタル資産の数量を表す額を指定し、その一例は、アウトプットが暗号的にロックされているユーザ103である(ロック解除され、それにより引き換え又は使用されるためには、そのユーザの署名又は他の解を必要とする)。各インプットは、先行トランザクション152のアウトプットをさかのぼって指し示し(points back)、それによりトランザクションをリンクする。
【0024】
各ブロック151は、ブロック151に対するシーケンシャルな順序を定義するために、チェーン内で前に作成されたブロック151をさかのぼって指し示すブロックポインタ155をさらに含む。各トランザクション152(コインベーストランザクション以外)は、トランザクションのシーケンスに対する順序を定義するために、前のトランザクションにさかのぼるポインタを含む(注意.トランザクション152のシーケンスは、分岐することを許容される)。ブロック151のチェーンは、チェーンにおける最初のブロックであったジェネシスブロック(genesis block、Gb)153までずっとさかのぼる。チェーン150の初期の1つ以上の元のトランザクション152は、先行トランザクションではなくジェネシスブロック153を指し示していた。
【0025】
ブロックチェーンノード104の各々は、トランザクション152を他のブロックチェーンノード104に転送し、それによりトランザクション152をネットワーク106全体にわたり伝搬させるように構成される。各ブロックチェーンノード104は、ブロック151を作成し、同じブロックチェーン150のそれぞれのコピーをそれらそれぞれのメモリに記憶するように構成される。各ブロックチェーンノード104はさらに、ブロック151に組み込まれるのを待っているトランザクション152の順序付けられたセット154を維持する。順序付けられたセット154は、しばしば「メモリプール(mempool)」と呼ばれる。本明細書におけるこの用語は、いずれかの特定のブロックチェーン、プロトコル、又はモデルに限定することを意図していない。これは、ノード104が有効として受け入れており、かつノード104が同じアウトプットを使用しようと試みるいかなる他のトランザクションも受け入れない義務がある、トランザクションの順序付けられたセットを指す。
【0026】
所与の現在のトランザクション152jにおいて、その(又は、各々の)インプットは、トランザクションのシーケンス内の先行トランザクション152iのアウトプットを参照するポインタを含み、このアウトプットが現在のトランザクション152jにおいて引き換えられ又は「使用され(spent)」るべきであることを指定する。一般に、先行トランザクションは、順序付けられたセット154又は任意のブロック151内の任意のトランザクションとすることができる。先行トランザクション152iは、現在のトランザクション152jが作成されるとき、又はネットワーク106に送信されるときでさえ、必ずしも存在する必要はないが、先行トランザクション152iは、現在のトランザクションが有効であるためには、存在し、検証される必要がある。したがって、本明細書における「先行(preceding)」は、ポインタによりリンクされた論理的なシーケンスにおける先行点(predecessor)を指し、必ずしも時間的シーケンスにおける作成又は送信の時間ではなく、したがって、必ずしもトランザクション152i、152jが順不同で作成又は送信されることを除外しない(以下のオーファントランザクションに関する議論を参照する)。先行トランザクション152iは、同様に、先祖又は先行点トランザクションと呼ぶことができる。
【0027】
現在のトランザクション152jのインプットは、インプットの承認、例えば、先行トランザクション152iのアウトプットがロックされているユーザ103aの署名をさらに含む。次に、現在のトランザクション152jのアウトプットは、新しいユーザ又はエンティティ103bに対して暗号的にロックすることができる。したがって、現在のトランザクション152jは、先行トランザクション152iのインプットで定義された額を、現在のトランザクション152jのアウトプットで定義される新しいユーザ又はエンティティ103bに移転することができる。いくつかの場合、トランザクション152は、複数のユーザ又はエンティティ間でインプット額を分割するために(そのうちの1つは、おつり(change)を与えるために元のユーザ又はエンティティ103aとすることができる)、複数のアウトプットを有してもよい。いくつかの場合、トランザクションは、1つ以上の先行トランザクションの複数のアウトプットからの額を一緒に集めるために複数のインプットを有し、現在のトランザクションの1つ以上のアウトプットに再分配することもできる。
【0028】
ビットコイン(登録商標)などのアウトプットベーストランザクションプロトコルによれば、ユーザ又はマシンなどのエンティティ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のネットワーク全体にわたり伝搬される。
【0029】
アウトプットベースモデルにおいて、所与のアウトプット(例えば、UTXO)が割り当てられるかどうかの定義は、ブロックチェーンノードプロトコルに従って、それが別の先のトランザクション152jのインプットによってもう有効に引き換えられているかどうかである。トランザクションが有効であるための別の条件は、該トランザクションが割り当て又は引き換えようと試みる先行トランザクション152iのアウトプットが、別のトランザクションにより既に割り当て/引き換えられていないことである。再びになるが、有効でない場合、トランザクション152jは伝搬されず(無効としてフラグを立てられ、警告するために伝搬されるのでない限り)、あるいはブロックチェーン150に記録されない。これは、トランザクション処理者(transactor)が同じトランザクションのアウトプットを複数回割り当てようとすることによる二重使用からガードする。一方、アカウントベースモデルは、アカウント残高を維持することにより二重使用からガードする。再びになるが、トランザクションの定義された順序があるため、アカウント残高は常に単一の定義された状態を有する。
【0030】
トランザクションを検証することに加えて、ブロックチェーンノード104はさらに、「プルーフオブワーク」によりサポートされる、一般にマイニングと呼ばれるプロセスにおいて、トランザクションのブロックを作成するのが最初であるように競争する。ブロックチェーンノード104において、新しいトランザクションが、ブロックチェーン150に記録されたブロック151にまだ出現していない有効なトランザクションの順序付けられたセット154に追加される。次いで、ブロックチェーンノードは、暗号パズルを解くよう試みることにより、トランザクションの順序付けられたセット154からのトランザクション152の新しい有効なブロック151を組み立てるために競争する。典型的にはこれは、ナンスがトランザクションの順序付けられたセット154の表現と連結されてハッシュされたときにハッシュの出力が所定の条件を満たすような「ナンス(nonce)」値を探索することを含む。例えば、所定の条件は、ハッシュの出力が特定の予め定義された数の先頭ゼロ(leading zeros)を有することでもよい。これは単に1つの特定のタイプのプルーフオブワークパズルであり、他のタイプは除外されないことに留意する。ハッシュ関数の特性は、それがその入力に対して予測不可能な出力を有することである。したがって、この探索は総当たり(brute force)でのみ実行することができ、ゆえに、パズルを解こうとしている各ブロックチェーンノード104で相当量の処理リソースが消費される。
【0031】
パズルを解く第1のブロックチェーンノード104は、これをネットワーク106にアナウンスし(announces)、その解をプルーフとして提供し、これは次いで、ネットワーク内の他のブロックチェーンノード104によって容易にチェックすることができる(ハッシュに対する解を与えられると、それがハッシュの出力に条件を満たさせることをチェックするのは簡単である)。第1のブロックチェーンノード104は、ブロックを受け入れ、したがってプロトコルルールを強制する閾値コンセンサス(threshold consensus)の他のノードにブロックを伝搬する。次いで、トランザクションの順序付けられたセット154は、ブロックチェーンノード104の各々によりブロックチェーン150に新しいブロック151として記録された状態になる。ブロックポインタ155が、さらに、チェーン内で前に作成されたブロック151n-1をさかのぼって指し示す新しいブロック151nに割り当てられる。プルーフオブワークの解を作成するために必要な、例えばハッシュの形式の相当量の労力は、ブロックチェーンプロトコルのルールに従う、第1のノード104の意図を示す。このようなルールには、さもなければ二重使用として知られる、トランザクションが前に検証されたトランザクションと同じアウトプットを割り当てる場合に、このトランザクションを有効として受け入れないことが含まれる。ひとたび作成されると、ブロック151は、それがブロックチェーンネットワーク106内のブロックチェーンノード104の各々で認識及び維持されるため、修正することができない。さらに、ブロックポインタ155は、ブロック151に対するシーケンシャルな順序を課す。トランザクション152が、ネットワーク106内の各ブロックチェーンノード104で順序付けられたブロックに記録されるため、これはしたがって、トランザクションの不変の公開台帳を提供する。
【0032】
任意の所与の時間にパズルを解くために競争する異なるブロックチェーンノード104は、それらがいつ解の探索を開始したか、又はトランザクションが受信された順序に依存して、任意の所与の時間のまだ公開されていないトランザクションの順序付けられたセット154の異なるスナップショットに基づいてそれを行う可能性があることに留意する。誰が最初にそれらそれぞれのパズルを解くとしても、次の新しいブロック151nにどのトランザクション152が、どの順序で含まれるかを定義し、公開されていないトランザクションの現在のセット154は更新される。次いで、ブロックチェーンノード104は、公開されていないトランザクションの新たに定義された未解決の順序付けられたセット154からブロックを作成するために競争することを続ける。プロトコルはまた、発生する可能性のある「フォーク」を解決するために存在し、これは、2つのブロックチェーンノード104が互いにかなり短い時間内にそれらのパズルを解き、それにより、ブロックチェーンの相反するビューがノード104間に伝搬される場合である。要するに、フォークのどの枝が成長するとしても、最も長いものが決定的なブロックチェーン150になる。これは、同じトランザクションが双方のフォークに現れるため、ネットワークのユーザ又はエージェントに影響しないはずであることに留意する。
【0033】
ビットコインブロックチェーン(及び、ほとんどの他のブロックチェーン)によれば、新しいブロック104を成功裏に構築したノードは、(あるエージェント又はユーザから別のエージェント又はユーザにデジタル資産の額を移転するエージェント間、又はユーザ間トランザクションとは対照的に、)デジタル資産の定義された数量を分配する新しい特別な種類のトランザクションにデジタル資産の受け入れられた額を割り当てる能力を付与される。この特別なタイプのトランザクションは、通常「コインベーストランザクション(coinbase transaction)」と呼ばれるが、「開始トランザクション(initiation transaction)」と名付けられることもある。これは典型的には、新しいブロック151nの最初のトランザクションを形成する。このプルーフオブワークは、この特別なトランザクションを後で引き換えることができるプロトコルルールに従う、新しいブロックを構築するノードの意図を示す。ブロックチェーンプロトコルルールは、この特別なトランザクションが引き換えられ得る前に、満期期間、例えば100ブロックを必要とする場合がある。しばしば、通常の(非ジェネレーション(non-generation))トランザクション152は、そのトランザクションが公開されたブロック151nを作成したブロックチェーンノード104にさらに報酬を与えるために、そのアウトプットの1つにさらなるトランザクション手数料も指定する。この手数料は通常「トランザクション手数料」と呼ばれ、以下で論じられる。
【0034】
トランザクションの検証及び公開に関わるリソースに起因して、典型的には少なくともブロックチェーンノード104の各々は、1つ以上の物理サーバユニットを含むサーバ、又はさらには全体としてデータセンターの形態をとる。しかしながら原理的には、任意の所与のブロックチェーンノード104が、ユーザ端末、又は一緒にネットワーク化されたユーザ端末のグループの形態をとることができる。
【0035】
各ブロックチェーンノード104のメモリは、ブロックチェーンノードプロトコルに従ってそのそれぞれの1つ又は複数の役割を果たし、トランザクション152を処理するために、ブロックチェーンノード104の処理装置上で実行されるように構成されたソフトウェアを記憶する。本明細書においてブロックチェーンノード104に帰するいずれのアクションも、それぞれのコンピュータ機器の処理装置上で実行されるソフトウェアにより実行されてもよいことが理解されるであろう。ノードソフトウェアは、アプリケーション層における1つ以上のアプリケーション、又はオペレーティングシステム層若しくはプロトコル層などの下位層、又はこれらの任意の組み合わせで実装されてもよい。
【0036】
さらにネットワーク101に接続されているのは、消費ユーザの役割における複数の当事者103の各々のコンピュータ機器102である。これらのユーザは、ブロックチェーンネットワークと相互作用することができるが、トランザクション及びブロックの検証、構築、又は伝搬に参加しない。これらのユーザ又はエージェント103の一部は、トランザクションにおける送信者及び受信者として機能する場合がある。他のユーザは、必ずしも送信者又は受信者として機能せずに、ブロックチェーン150と相互作用することができる。例えば、一部の当事者が、ブロックチェーン150のコピーを記憶する(例えば、ブロックチェーンノード104からブロックチェーンのコピーを取得している)記憶エンティティとして機能してもよい。
【0037】
当事者103の一部又は全部が、異なるネットワーク、例えば、ブロックチェーンネットワーク106の上にオーバーレイされたネットワークの一部として接続されてもよい。ブロックチェーンネットワークのユーザ(しばしば「クライアント」と呼ばれる)は、ブロックチェーンネットワークを含むシステムの一部であると言われることがある。しかしながら、これらのユーザは、ブロックチェーンノードで必要とされる役割を実行しないため、ブロックチェーンノード104ではない。代わりに、各当事者103は、ブロックチェーンネットワーク106と相互作用し、それにより、ブロックチェーンノード106に接続する(すなわち、ブロックチェーンノード106と通信する)ことによりブロックチェーン150を利用することができる。例示の目的で、2つの当事者103とそれらそれぞれの機器102が示されており、第1の当事者103a及びそのそれぞれのコンピュータ機器102aと、第2の当事者103b及びそのそれぞれのコンピュータ機器102bである。多くのさらなるそのような当事者103及びそれらそれぞれのコンピュータ機器102が存在し、システム100に参加している可能性があるが、簡便さのためにそれらが例示されていないことが理解されるであろう。各当事者103は、個人又は組織であってよい。純粋に例示として、本明細書において第1の当事者103aをアリスと呼び、第2の当事者103bをボブと呼ぶが、これは限定でなく、本明細書におけるアリス又はボブへの参照はそれぞれ「第1の当事者」及び「第2の当事者」に置き換えられてもよいことが理解されるであろう。
【0038】
各当事者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つ以上の他のネットワーク化されたリソースをさらに含んでもよい。
【0039】
クライアントアプリケーション105は、最初、適切な1つ又は複数のコンピュータ読取可能記憶媒体で任意の所与の当事者103のコンピュータ機器102に提供され、例えば、サーバからダウンロードされ、あるいは、リムーバブルSSD、フラッシュメモリキー、リムーバブルEEPROM、リムーバブル磁気ディスクドライブ、磁気フロッピーディスク若しくはテープ、CD若しくはDVD ROMなどの光ディスク、又はリムーバブル光学ドライブなどのリムーバブルストレージデバイスで提供されてもよい。
【0040】
クライアントアプリケーション105は、少なくとも「ウォレット」機能を含む。これは、2つの主な機能性を有する。これらのうちの一方は、それぞれの当事者103がトランザクション152を作成し、承認し(例えば、署名し)、1つ以上のビットコインノード104に送信して、ブロックチェーンノード104のネットワーク全体にわたり伝搬され、それによりブロックチェーン150に含まれるようにすることができることである。他方は、それぞれの当事者に、彼又は彼女が現在所有するデジタル資産の額を報告することである。アウトプットベースシステムにおいて、この第2の機能は、問題の当事者に属する、ブロックチェーン150全体にわたり散在する様々な152のトランザクションのアウトプットにおいて定義された額を照合することを含む。
【0041】
注記:様々なクライアント機能が所与のクライアントアプリケーション105に統合されているものとして記載される場合があるが、これは必ずしも限定でなく、代わりに、本明細書に記載される任意のクライアント機能が、2つ以上の区別可能なアプリケーションのスイートで、例えばAPIを介してインターフェースをとって、又は一方が他方へのプラグインで、代わりに実装されてもよい。より一般的には、クライアント機能は、アプリケーション層、又はオペレーティングシステムなどの下位層、又はこれらの任意の組み合わせで実装することができる。以下ではクライアントアプリケーション105の観点から説明するが、これは限定でないことが理解されるであろう。
【0042】
各コンピュータ機器102上のクライアントアプリケーション又はソフトウェア105のインスタンスは、ネットワーク106のブロックチェーンノード104の少なくとも1つに動作上結合される。これにより、クライアント105のウォレット機能は、トランザクション152をネットワーク106に送信することができる。クライアント105はさらに、ブロックチェーンノード104にコンタクトして、それぞれの当事者103がその受信者であるトランザクションについてブロックチェーン150を照会する(query)ことができる(あるいは、実際には、ブロックチェーン150における他の当事者のトランザクションを検査し、なぜならば、複数の実施形態において、ブロックチェーン150は、その公開の可視性を通じて部分的にトランザクションの信頼を提供する公開の設備であるためである)。各コンピュータ機器102のウォレット機能は、トランザクションプロトコルに従ってトランザクション152を定式化及び送信するように構成される。上述したように、各ブロックチェーンノード104は、ブロックチェーンノードプロトコルに従ってトランザクション152を検証し、トランザクション152を転送してそれらをブロックチェーンネットワーク106全体にわたり伝搬するように構成されたソフトウェアを実行する。トランザクションプロトコルとノードプロトコルは互いに対応し、所与のトランザクションプロトコルは所与のノードプロトコルに適合し、所与のトランザクションモデルを一緒に実現する。ブロックチェーン150内の全てのトランザクション152に対して、同じトランザクションプロトコルが使用される。ネットワーク106内の全てのノード104により、同じノードプロトコルが使用される。
【0043】
所与の当事者103、例えばアリスが、ブロックチェーン150に含まれるように新しいトランザクション152jを送信することを望むとき、彼女は、関連するトランザクションプロトコルに従って(彼女のクライアントアプリケーション105におけるウォレット機能を使用して)新しいトランザクションを定式化する。次いで、彼女は、クライアントアプリケーション105から、自身が接続されている1つ以上のブロックチェーンノード104に、トランザクション152を送信する。例えば、これは、アリスのコンピュータ102に最もよく接続されているブロックチェーンノード104であり得る。任意の所与のブロックチェーンノード104が新しいトランザクション152jを受信したとき、それは、ブロックチェーンノードプロトコル及びそのそれぞれの役割に従ってこの新しいトランザクション152jを処理する。これは、最初、新たに受信したトランザクション152jが「有効」であるための特定の条件を満たすかどうかをチェックすることを含み、その例については、後にさらに詳細に論じる。一部のトランザクションプロトコルにおいて、検証のための条件は、トランザクション152に含まれるスクリプトにより、トランザクションごとに構成可能である場合がある。代替的に、条件は、単にノードプロトコルのビルトインの機能とすることができ、あるいはスクリプトとノードプロトコルの組み合わせにより定義することができる。
【0044】
新たに受信したトランザクション152jが、有効と見なされるためのテストに合格しているという条件で(すなわち、それが「検証されている」という条件で)、トランザクション152jを受信した任意のブロックチェーンノード104は、新しい検証されたトランザクション152を、そのブロックチェーンノード104で維持されるトランザクションの順序付けられたセット154に追加する。さらに、トランザクション152jを受信した任意のブロックチェーンノード104は、検証されたトランザクション152を前方へ、ネットワーク106内の1つ以上の他のブロックチェーンノード104に伝搬する。各ブロックチェーンノード104が同じプロトコルを適用するため、トランザクション152jが有効であると仮定すると、これは、それがすぐにネットワーク106全体にわたって伝搬されることを意味する。
【0045】
所与のブロックチェーンノード104で維持されるトランザクションの順序付けられたセット154に入ることを認められると、そのブロックチェーンノード104は、新しいトランザクション152を含むトランザクションのそれらそれぞれの順序付けられたセット154の最新バージョンでプルーフオブワークパズルを解くために競合することを開始する(他のブロックチェーンノード104は、トランザクションの異なる順序付けられたセット154に基づいてパズルを解こうとしている可能性があるが、誰がそこに最初に到達するとしても、最新のブロック151に含まれるトランザクションの順序付けられたセットを定義することになることを思い出されたい。最終的に、ブロックチェーンノード104は、アリスのトランザクション152jを含む順序付けられたセット154の一部のためのパズルを解くことになる)。新しいトランザクション152jを含む順序付けられたセット154に対してプルーフオブワークが行われると、それは不変的に(immutably)ブロックチェーン150内の複数のブロック151のうちの1つの一部になる。各トランザクション152はより早期のトランザクションにさかのぼるポインタを含み、ゆえにトランザクションの順序も不変的に記録される。
【0046】
異なるブロックチェーンノード104は、1つのインスタンスが新しいブロック151で公開され、その時点で、公開されたインスタンスが唯一の有効なインスタンスであることに全てのブロックチェーンノード104が同意する前に、最初に所与のトランザクションの異なるインスタンスを受信し、したがって、どのインスタンスが「有効」であるかの相反するビューを有する可能性がある。ブロックチェーンノード104が1つのインスタンスを有効として受け入れ、次いで、第2のインスタンスがブロックチェーン150に記録されていることを発見した場合、そのブロックチェーンノード104は、これを受け入れなければならず、それが最初に受け入れていたインスタンス(すなわち、ブロック151において公開されていないもの)を破棄する(すなわち、無効として扱う)。
【0047】
一部のブロックチェーンネットワークにより運用される一代替的なタイプのトランザクションプロトコルは、アカウントベーストランザクションモデルの一部として、「アカウントベース」プロトコルと呼ばれることがある。アカウントベースの場合、各トランザクションは、過去のトランザクションのシーケンス内の先行トランザクションのUTXOをさかのぼって参照することにより移転される額を定義するのでなく、むしろ、絶対的なアカウント残高への参照により定義する。全てのアカウントの現在の状態は、ブロックチェーンとは別個の、そのネットワークのノードにより記憶され、常に更新される。このようなシステムでは、トランザクションは、アカウントの実行トランザクション集計(tally)(「ポジション」とも呼ばれる)を使用して順序付けられる。この値は、送信者により、それらの暗号署名の一部として署名され、トランザクション参照計算の一部としてハッシュされる。さらに、任意のデータフィールドがトランザクションを署名されてもよい。このデータフィールドは、例えば、前のトランザクションIDがデータフィールドに含まれる場合、前のトランザクションをさかのぼって指し示すことができる。
【0048】
UTXOベースモデル
図2は、一例示的なトランザクションプロトコルを示す。これは、UTXOベースプロトコルの一例である。トランザクション152(略称「Tx」)は、ブロックチェーン150の基本的なデータ構造である(各ブロック151は、1つ以上のトランザクション152を含む)。以下では、アウトプットベース又は「UTXO」ベースのプロトコルを参照することにより説明する。しかしながら、これは、全ての可能な実施形態に対する限定ではない。例示的なUTXOベースプロトコルはビットコインを参照して説明されるが、それは他の例示的なブロックチェーンネットワークで同様に実施され得ることに留意する。
【0049】
UTXOベースモデルにおいて、各トランザクション(「Tx」)152は、1つ以上のインプット202と1つ以上のアウトプット203とを含むデータ構造を含む。各アウトプット203は、未使用トランザクションアウトプット(UTXO)を含むことができ、これは、別の新しいトランザクションのインプット202のためのソースとして用いることができる(UTXOが、既に引き換えられていない場合)。UTXOは、デジタル資産の額を指定する値を含む。これは、分散台帳上の設定された数のトークンを表す。UTXOは、他の情報の中でも、それが生じたトランザクションのトランザクションIDをさらに含むことができる。トランザクションデータ構造は、ヘッダ201をさらに含むことができ、これは、インプットフィールド202及びアウトプットフィールド203のサイズの指標を含むことができる。ヘッダ201は、トランザクションのIDをさらに含むことができる。複数の実施形態において、トランザクションIDは、トランザクションデータ(トランザクションID自体を除く)のハッシュであり、ノード104にサブミットされる未加工(raw)トランザクション152のヘッダ201に記憶される。
【0050】
例えば、アリス103aが、問題のデジタル資産の額をボブ103bに移転するトランザクション152jを作成することを望んでいる。
図2において、アリスの新しいトランザクション152jは、「Tx
1」とラベル付けされている。それは、シーケンス内の先行トランザクション152iのアウトプット203内でアリスに対してロックされているデジタル資産の額(amount)を取得し、これの少なくとも一部をボブに移転する。先行トランザクション152iは、
図2で「Tx
0」とラベル付けされている。Tx
0とTx
1は、単なる任意のラベルである。これらは、必ずしもTx
0がブロックチェーン151における最初のトランザクションであることを意味するわけでなく、Tx
1がプール154におけるすぐ次のトランザクションであることも意味しない。Tx
1は、アリスに対してロックされた未使用アウトプット203を依然として有する先行(すなわち、先祖)トランザクションをさかのぼって指し示すことができる。
【0051】
先行トランザクションTx0は、アリスが自身の新しいトランザクションTx1を作成するときに、又は少なくとも彼女がそれをネットワーク106に送信するときまでに、既に検証され、ブロックチェーン150のブロック151に含まれている場合がある。それは、その時点で既に複数のブロック151のうちの1つに含まれている場合があり、あるいは、順序付けられたセット154内で依然として待機している場合もあり、その場合は、すぐに新しいブロック151に含まれることになる。代替的に、Tx0とTx1は、一緒に作成し、ネットワーク106に送信することができ、あるいは、Tx0はさらには、ノードプロトコルが「オーファン(orphan)」トランザクションのバッファリングを可能にする場合、Tx1の後に送信することができる。本明細書において、トランザクションのシーケンスの文脈で用いられる用語「先行」及び「後続」は、トランザクション内で指定されるトランザクションポインタにより定義されるシーケンス内のトランザクションの順序を指す(どのトランザクションが、どの他のトランザクションをさかのぼって指し示すか、など)。これらは、「先行点」と「後続点」、「先祖」と「子孫」、「親」と「子」などに同様に置き換えることができる。それは、必ずしも、それらが作成され、ネットワーク106に送信され、又は任意の所与のブロックチェーンノード104に到達した順序を意味するわけではない。それにもかかわらず、先行トランザクション(先祖トランザクション又は「親」)を指し示す後続トランザクション(子孫トランザクション又は「子」)は、親トランザクションが検証されるまで、及び親トランザクションが検証されない限り、検証されない。その親より前にブロックチェーンノード104に到達した子は、オーファンと見なされる。それは、ノードプロトコル及び/又はノード挙動に依存して、破棄され、あるいは親を待つために特定の時間の間バッファリングされる場合がある。
【0052】
先行トランザクションTx0の1つ以上のアウトプット203のうちの1つは、ここではUTXO0とラベル付けされた特定のUTXOを含む。各UTXOは、UTXOにより表されるデジタル資産の額を指定する値と、後続トランザクションが検証されるため、したがってUTXOが成功裏に引き換えられるために、後続トランザクションのインプット202においてアンロッキングスクリプトにより満たされなければならない条件を定義するロッキングスクリプトとを含む。典型的には、ロッキングスクリプトは、上記額を、特定の当事者(それが含まれるトランザクションの受益者)に対してロックする。すなわち、ロッキングスクリプトは、ロック解除条件を定義し、典型的には、後続トランザクションのインプット内のアンロッキングスクリプトが、先行トランザクションがロックされている当事者の暗号署名を含むという条件を含む。
【0053】
ロッキングスクリプト(別名scriptPubKey)は、ノードプロトコルにより認識されるドメイン固有言語で記述されたコードの断片である。このような言語の特定の例は、ブロックチェーンネットワークで使用される「Script」(大文字のS)と呼ばれる。ロッキングスクリプトは、トランザクションアウトプット203を使用するためにどんな情報が必要とされるか、例えば、アリスの署名の要求を指定する。アンロッキングスクリプトは、トランザクションのアウトプットに現れる。アンロッキングスクリプト(別名scriptSig)は、ロッキングスクリプト基準を満足するために必要な情報を提供する、ドメイン固有言語で記述されたコードの断片である。例えば、それは、ボブの署名を含む場合がある。アンロッキングスクリプトは、トランザクションのインプット202に現れる。
【0054】
したがって、図示の例では、Tx0のアウトプット203におけるUTXO0は、UTXO0が引き換えられるために(厳密には、UTXO0を引き換えようと試みる後続トランザクションが有効であるために)アリスの署名Sig PAを必要とするロッキングスクリプト[Checksig PA]を含む。[Checksig PA]は、アリスの公開・秘密鍵ペアからの公開鍵PAの表現(すなわち、ハッシュ)を含む。Tx1のインプット202は、Tx1をさかのぼって指し示す(例えば、そのトランザクションID、TxID0を用いてであり、これは複数の実施形態において、トランザクションTx0全体のハッシュである)ポインタを含む。Tx1のインプット202は、Tx0内のUTXO0を識別するインデックスを含み、Tx0の任意の他の可能なアウトプットの中からそれを識別する。Tx1のインプット202は、アリスがキーペアからの自身の秘密鍵をデータの予め定義された部分(暗号において時に「メッセージ」と呼ばれる)に適用することにより作成されたアリスの暗号署名を含むアンロッキングスクリプト<Sig PA>をさらに含む。有効な署名を提供するためにアリスにより署名される必要があるデータ(又は「メッセージ」)は、ロッキングスクリプトにより、ノードプロトコルにより、又はこれらの組み合わせにより定義することができる。
【0055】
新しいトランザクションTx1がブロックチェーンノード104に到達したとき、ノードはノードプロトコルを適用する。これは、ロッキングスクリプトとアンロッキングスクリプトを一緒に実行して、アンロッキングスクリプトがロッキングスクリプトに定義される条件を満たすかどうかをチェックすることを含む(ここで、この条件は、1つ以上の基準を含む場合がある)。複数の実施形態において、これは、2つのスクリプトを連結することを含む。
<Sig PA><PA> || [Checksig PA]
ここで、「||」は、連結を表し、「<...>」は、データをスタックに配置することを意味し、「[...]」は、ロッキングスクリプト(この例ではスタックベースの言語)により含まれる関数である。同等に、スクリプトは、連結するのでなく、共通のスタックを用いて順々に実行されてもよい。いずれにせよ、一緒に実行されたとき、スクリプトは、Tx0のアウトプット内のロッキングスクリプトに含まれるアリスの公開鍵PAを使用して、Tx1のインプット内のアンロッキングスクリプトがデータの予期された部分に署名するアリスの署名を含むことを認証する。この認証を実行するためには、データの予期された部分自体(「メッセージ」)も含まれる必要がある。複数の実施形態において、署名されたデータはTx1の全体を含む(ゆえに、平文でのデータの署名された部分を指定する別個の要素が含まれる必要はなく、なぜならば、それは既に本質的に存在しているためである)。
【0056】
公開・秘密暗号による認証の詳細は、当業者によく知られているであろう。基本的には、アリスが自身の秘密鍵を使用してメッセージに署名した場合、アリスの公開鍵と平文のメッセージを所与として、ノード104などの別のエンティティは、メッセージがアリスにより署名されていなければならないことを認証することができる。署名することは典型的には、メッセージをハッシュすること、ハッシュに署名すること、及びこれを署名としてメッセージにタグ付けすることを含み、ゆえに、公開鍵の任意の保持者が署名を認証することができる。したがって、本明細書における、特定のデータ断片又はトランザクションの一部に署名することなどへの参照は、複数の実施形態において、そのデータ断片又はトランザクションの一部のハッシュに署名することを意味する可能性があることに留意する。
【0057】
Tx1内のアンロッキングスクリプトが、Tx0のロッキングスクリプトで指定された1つ以上の条件を満たす場合(ゆえに、図示の例では、アリスの署名がTx1で提供され、認証されている場合)、ブロックチェーンノード104は、Tx1を有効と見なす。これは、ブロックチェーンノード104がTx1をトランザクションの順序付けられたセット154に追加することを意味する。また、ブロックチェーンノード104は、トランザクションTx1をネットワーク106内の1つ以上の他のブロックチェーンノード104に転送し、それにより、それはネットワーク106全体にわたり伝搬される。Tx1が検証され、ブロックチェーン150に含まれていると、これは、Tx0からのUTXO0を使用されたものとして定義する。Tx1は、それが未使用トランザクションアウトプット203を使用する場合にのみ有効とすることができることに留意する。それが、別のトランザクション152により既に使用されているアウトプットを使用するよう試みた場合、Tx1は、全ての他の条件が満たされているとしても無効になる。したがって、ブロックチェーンノード104は、先行トランザクションTx0内の参照UTXOが既に消費されているかどうか(すなわち、それが別の有効なトランザクションへの有効なインプットを既に形成しているかどうか)をチェックする必要もある。これは、ブロックチェーン150がトランザクション152に対して定義された順序を課すことが重要である1つの理由である。実際には、所与のブロックチェーンノード104は、どのトランザクション152におけるどのUTXO203が使用されているかをマークする別個のデータベースを維持することができるが、最終的に、UTXOが使用されているかどうかを定義するものは、それがブロックチェーン150内の別の有効なトランザクションへの有効な入力を既に形成しているかどうかである。
【0058】
所与のトランザクション152の全てのアウトプット203で指定される総額が、全てのそのインプット202により指し示される総額より大きい場合、これは、ほとんどのトランザクションモデルで無効性に対する別の根拠となる。したがって、そのようなトランザクションは伝搬されず、ブロック151に含まれることもない。
【0059】
UTXOベーストランザクションモデルにおいて、所与のUTXOは、全体で使用される必要があることに留意する。それは、UTXOにおいて使用されたものとして定義される額のうちの小部分(fraction)を、別の小部分が使用される一方で「残す(leave behind)」ことはできない。しかしながら、UTXOからの額は、次のトランザクションの複数のアウトプット間で分割することができる。例えば、Tx0内のUTXO0で定義された金額は、Tx1内の複数のUTXO間で分割することができる。したがって、アリスが、UTXO0で定義される額の全てをボブに与えたくない場合、彼女は、残りを使用してTx1の第2のアウトプットで自身にお釣り(change)を与え、あるいは別の当事者に支払うことができる。
【0060】
実際には、アリスは通常、自身のトランザクション104を公開するビットコインノードに対する手数料を含める必要もあるであろう。アリスがそのような手数料を含めない場合、Tx0は、ブロックチェーンノード104により拒絶される可能性があり、したがって技術的には有効であるが、伝搬されず、ブロックチェーン150に含まれない可能性がある(ノードプロトコルは、ブロックチェーンノード104が望まない場合、トランザクション152を受け入れることをそれらに強制しない)。いくつかのプロトコルにおいて、トランザクション手数料は、その独自の別個のアウトプット203を必要としない(すなわち、別個のUTXOを必要としない)。代わりに、所与のトランザクション152のインプット202により指し示される総額とアウトプット203で指定される総額との間の任意の差が、トランザクションを公開するブロックチェーンノード104に自動的に与えられる。例えば、UTXO0へのポインタがTx1への唯一のインプットであり、Tx1は1つのアウトプットUTXO1のみを有するとする。UTXO0で指定されたデジタル資産の額がUTXO1で指定された額より大きい場合、その差が、UTXO1を含むブロックを公開するノード104により割り当てられてもよい。しかしながら、代わりに又はさらに、トランザクション手数料がトランザクション152のUTXO203のうちのその独自の1つに明示的に指定される場合があることは、必ずしも除外されない。
【0061】
アリスとボブのデジタル資産は、ブロックチェーン150内の任意の場所での任意のトランザクション152で彼らに対してロックされたUTXOで構成されている。したがって典型的には、所与の当事者103の資産は、ブロックチェーン150全体にわたり、様々なトランザクション152のUTXO全体にわたり散在している。ブロックチェーン150のどこにも、所与の当事者103の合計残高を定義する記憶された1つの数字はない。それぞれの当事者に対してロックされ、別の先のトランザクションでまだ使用されていない全ての様々なUTXO値を一緒に照合することは、クライアントアプリケーション105におけるウォレット機能の役割である。それは、ビットコインノード104のいずれかに記憶されたブロックチェーン150のコピーを照会することにより、これを行うことができる。
【0062】
スクリプトコードはしばしば、概略的に(すなわち、正確な言語を使用せずに)表されることに留意する。例えば、オペレーションコード(オペコード)を使用して特定の機能を表すことがある。「OP_...」は、Script言語の特定のオペコードを指す。一例として、OP_RETURNは、Script言語のオペコードであり、これは、ロッキングスクリプトの始めでOP_FALSEが先行するとき、トランザクション内にデータを記憶し、それによりブロックチェーン150にデータを不変的に記録することができる、トランザクションの使用不可能なアウトプットを作成する。例えば、データは、ブロックチェーンに記憶することが望ましい文書を含むことができる。
【0063】
典型的には、トランザクションのインプットは、公開鍵PAに対応するデジタル署名を含む。複数の実施形態において、これは、楕円曲線secp256k1を使用したECDSAに基づく。デジタル署名は、特定のデータ断片に署名する。いくつかの実施形態において、所与トランザクションについて、署名は、トランザクションインプットの一部と、トランザクションアウトプットの一部又は全部に署名する。それが署名するアウトプットの特定の部分は、SIGHASHフラグに依存する。SIGHASHフラグは通常、どのアウトプットが署名されている(及び、したがって署名時に固定されている)かを選択するために署名の終わりに含まれる4バイトのコードである。
【0064】
ロッキングスクリプトは時に、それが典型的には、それぞれのトランザクションがロックされている当事者の公開鍵を含むという事実を指して、「scriptPubKey」と呼ばれる。アンロッキングスクリプトは時に、それが典型的には、対応する署名を供給するという事実を指して、「scriptSig」と呼ばれる。しかしながら、より一般的には、ブロックチェーン150の全ての応用において、UTXOが引き換えられるための条件が署名を認証することを含むことは必須ではない。より一般的には、スクリプト言語を使用して、任意の1つ以上の条件を定義することができる。したがって、より一般的な用語「ロッキングスクリプト」及び「アンロッキングスクリプト」が好ましい場合がある。
【0065】
図1に示すように、アリスとボブのコンピュータ機器102a、120bの各々のクライアントアプリケーションは、それぞれ、さらなる通信機能を含むことができる。このさらなる機能により、アリス103aは、ボブ103bとの間で(いずれかの当事者又は第三者の扇動で)別個のサイドチャネル107を確立することができる。サイドチャネル107は、ブロックチェーンネットワークとは別個にデータの交換を可能にする。このような通信は時に、「オフチェーン」通信と呼ばれる。例えば、これは、トランザクション152をアリスとボブの間でやりとりするために使用されてもよく、当事者のうちの1つがそれをネットワーク106にブロードキャストすることを選ぶまで、トランザクションは(まだ)ブロックチェーンネットワーク106に登録されず、あるいはその方法をチェーン150にマークすることもない。このようにトランザクションを共有することは時に、「トランザクションテンプレート」の共有と呼ばれる。トランザクションテンプレートは、完全なトランザクションを形成するために必要とされる1つ以上のインプット及び/又はアウトプットを欠いている場合がある。代わりに又はさらに、サイドチャネル107は、鍵、交渉された額又は条件、データ内容などの、任意の他のトランザクション関連データを交換するために使用されてもよい。
【0066】
サイドチャネル107は、ブロックチェーンネットワーク106と同じパケット交換ネットワーク101を介して確立されてもよい。代わりに又はさらに、サイドチャネル107は、移動セルラーネットワークなどの異なるネットワーク、又はローカルワイヤレスネットワークなどのローカルエリアネットワーク、又はさらにはアリスとボブのデバイス102a、102b間の直接の有線又は無線リンクを介して確立されてもよい。一般に、本明細書の任意の箇所で参照されるサイドチャネル107は、データを「オフチェーン」で交換するための、すなわちブロックチェーンネットワーク106とは別個に、1つ以上のネットワーキング技術又は通信媒体を介した任意の1つ以上のリンクを含むことができる。複数のリンクが使用される場合、オフチェーンリンクのバンドル又は集合が全体として、サイドチャネル107と呼ばれることがある。したがって、アリスとボブがサイドチャネル107を通じて特定の情報又はデータ断片などを交換すると言われている場合、これは必ずしも、すべてのこれらのデータ断片が正確に同じリンク、又はさらには同じタイプのネットワークを通じて送信される必要があることを意味するわけではないことに留意する。
【0067】
準備
確率的フィルタ
確率的フィルタは、要素がセットの一部であるかどうかをテストするために使用されるメモリ効率の良いデータ構造である。偽陰性は決して起こり得ず、それは、ある項目が確率的フィルタに追加された場合、フィルタは、同じ項目が再び提示されているかを常に見分けることができるようになることを意味する。しかしながら、偽陽性は起こり得、いくつかの要因(例えば、確率的フィルタのサイズ)に依存する偽陽性確率を有する。換言すれば、フィルタの空間効率と偽陽性確率との間にはトレードオフが存在する。
【0068】
2つの最も広く使用されている確率的フィルタは、ブルームフィルタとカッコウフィルタである。双方のフィルタは、ターゲット偽陽性確率(fpp)と予期された要素数とを提供して初期化される。これら2つのフィルタ間の1つの基本的な差は、ブルームフィルタは任意の数の要素を収容することができるが、挿入された要素の数が予期された要素の数より多いとき、フィルタの偽陽性確率が増加する(最大100%まで)ことである。逆に、カッコウフィルタはターゲット偽陽性率を維持するが、予期された数の後の新しい要素の挿入は保証されない(挿入が拒絶される可能性がある)。すなわち、フィルタの最大サイズは、作成の後に柔軟性がなく、最大数を超えるさらなる要素を収容するためには、新しいフィルタが作成されなければならない。これら2つのフィルタ間のもう1つの差は、カッコウフィルタは前に挿入された要素の削除を可能にし、一方でこれはブルームフィルタでは不可能であることである。ブルームとカッコウは単なる2つのタイプの確率的フィルタであり、本発明は単なるこれら2つの例に限定されないことに留意する。
【0069】
2つのフィルタの各々の空間効率は類似している。ブルームフィルタの、要素あたりのビットのコストは、
【数1】
であり、一方でカッコウフィルタでは
【数2】
であり、ここで、loadは、フィルタ負荷(通常、90から95%の間)である。
【0070】
カッコウフィルタは、より時間効率が良く、O(1)で挿入、削除、及びルックアップを実行する。ここで、記法O()は、アルゴリズムの複雑さを表す。O(1)は、一定の複雑さと高速のアルゴリズムを表し、これに対してO(k)は、kで増大すると複雑さと、より低速のアルゴリズムを表す。ブルームフィルタは、サポートされていない削除を除き、kがブルームフィルタのハッシュ関数の数であるO(k)で、同じ動作を実行する。
【0071】
あり得る二重使用攻撃:再使用(Re-spend)攻撃
ライトクライアントは、署名されたトランザクションをブロックチェーンノード104に送信し、これは次いで、ネットワーク106全体にブロードキャストされる。したがって、一定の時間の間、これらのトランザクションは、(帯域幅の制限に起因して)ネットワーク106の一部のみに存在する。これは、1つ以上のブロックチェーンノード104で既に使用されているUTXO(すなわち、これらのブロックチェーンノード104により維持される公開されていないトランザクションのセットの中に、このUTXOを消費するトランザクションが存在する)が、他のブロックチェーンノード104で依然として使用可能である可能性があることを意味する。攻撃者は、この脆弱性を活用して、同じUTXOをネットワーク106の異なる部分で二重使用する可能性がある。二重使用は最終的には検出され、これらのトランザクションのうちの一方だけがブロック151内で公開されることになるが、これらの0-confトランザクションのうちの他方(これらのUTXOのうちの1つを使用する)を受け入れたノード104は詐取されることになる。
【0072】
歴史的には、2つの主な再使用攻撃が可能であった。
・ 迅速な再使用:再使用トランザクションが、正当なトランザクションとほぼ同時に送信される。
・ 高手数料再使用:再使用トランザクションが、正当なトランザクションより高いトランザクション手数料で送信される。
【0073】
1つの特定のブロックチェーンネットワーク(ビットコインネットワーク)上では、迅速再使用攻撃は、正当なトランザクションから0.5秒以内にブロードキャストされた場合、10%の成功確率を有する(そうでない場合、成功する確率は0%に近い)。高手数料再使用攻撃は、0.5秒以内にブロードキャストされた場合、約28.7%の成功確率を有し、この確率は、1秒以内にブロードキャストされた場合は17.5%に減少し、5秒以内にブロードキャストされた場合は5.5%に縮小する。
【0074】
したがって、ほとんどの場合、特にマーチャントが正当なトランザクションをブロードキャストしている場合、ブロックチェーンノード104で再使用攻撃を成功裏に完了することはほとんど不可能である。クライアントは、トランザクションがブロードキャストされる正確な時間を知らない。攻撃者が再使用攻撃をあまりに早く実行した場合、そのトランザクションが検出され、正当なものが拒絶され(そして、販売が完了しない)、再使用攻撃があまりに遅く実行された場合、成功する確率はほぼ0%である。しかしながら、ライトクライアントは、トランザクションを検証するためにブロックチェーンノード104に依存しており、これらの効果は、ブロックチェーンノード104が技術的な問題(例えば、低帯域幅)を経験している場合、又は危険にさらされている場合に、増幅される可能性がある。
【0075】
図3の例において、ブロックチェーンノードAは、UTXO1を使用するトランザクションTx1を受信し、ブロックチェーンノードBに送信する。ブロックチェーンノードCは、UTXO1がTx1で使用されていることを認識していない。攻撃者は、同じUTXO1を含む別のトランザクションTx2をライトクライアント(
図3のライトクライアント1、2、及び3)に送信することにより、UTXO1を二重使用する。ライトクライアント1及び2がTx2を拒絶する一方で、ライトクライアント3(これは、トランザクションをチェックするためにノードCに依存している)は、トランザクションTx2を拒絶しない。ライトクライアント3を実行しているマーチャントが、ノードCのUTXOプールに依存する0-confでTx2を受け入れ、続いて、Tx1が有効なブロックに挿入された場合、ライトクライアント3は、そのデジタル資産を失う。
【0076】
あり得る二重使用攻撃:一時的なフォーク
一時的なフォークは、2つのブロックチェーンノード104が同時に同じブロックを見つけたときに発生し、ブロックチェーン150における一時的な分裂を引き起こす。最終的に、ブロックチェーンノード104は、チェーンの同じバージョンに(例えば、ナカモトコンセンサスを使用して)同意し、「負けの」フォーク上のブロックチェーンノード104は、ブロックを破棄し、「勝ちの」フォークとそのブロックを受け入れる。
【0077】
一部のトランザクションは、ネットワーク106の小部分のみにブロードキャストされる場合がある。これは、例えば、トランザクション手数料のないトランザクションの場合に当てはまる(例えば、ブロックチェーンノードとの特別な契約を有する企業は、均一の毎月の手数料を支払って無制限のトランザクションを公開する場合がある)。これらのトランザクションは、ひとたびトランザクションを含んだブロックが公開されるだけで、ネットワーク106全体で利用可能になった。すなわち、公開されたブロックを受信する全てのノード104は、それに含まれるトランザクションをチェックし、欠落しているものを要求することができる。しかしながら、一時的なフォークの間、1つ以上のトランザクションが、ブロックチェーン150のそのバージョンのみのブロックに挿入される可能性がある。代替的なバージョンを実行しているブロックチェーンノード104は、フォークが解決されるまでトランザクションを認識しない可能性がある。これらのノードは、最初、チェーンの第1のバージョンで既に消費された同じUTXOを消費する他のトランザクションを受け入れ、次いで、ナカモトコンセンサスに達したときに(チェーンの第1のバージョンが競争に勝つと仮定して)それらを拒絶する。
【0078】
図4の例において、ブロックチェーン150は、チェーン(a)及びチェーン(b)の2つのチェーンに一時的に分裂している。UTXO1を使用するトランザクションTx1は、チェーン(a)内のブロックに挿入されるが、チェーン(b)では挿入されず、したがって、UTXO1は、チェーン(b)で依然として使用可能である。これは、二重使用攻撃を実行するために攻撃者により活用される可能性がある。UTXO1を使用する別のトランザクションTx2は、ブロックチェーンノードA及びBにより拒絶されるが、ブロックチェーンノードCにより受け入れられる。そのトランザクションを0-conf(又は、この例ではさらには1-conf)で検証するためにノードCに依存するライトクライアント3は、Tx2を受け入れる。最終的に合意に達し、勝ちのチェーンがチェーン(a)であると仮定すると、ライトクライアント3はそのデジタル資産を失うことになる。
【0079】
二重使用試行の識別
上記で論じたように、0-confトランザクションを受け入れたいライトクライアント(又は、一般にユーザ)は、これらのトランザクションのインプットとして用いられるUTXOを検証しなければならない。これらのUTXOは、有効でなければならず、他のトランザクションにより既に使用されていてはならず、他のトランザクションには、公開されたブロック151にはまだないが、公開されていないトランザクションの順序付けられたセット154には既に存在するトランザクションが含まれる。6つより多くの確認(confirmations)を有するブロック151は、一般に不変であると見なされ、UTXOが、それらのブロックの1つで使用されている場合、このUTXOを使用しようとするトランザクションは、いずれのブロックチェーンノード104にも拒絶されると仮定することができる。このUTXOは、実際には、全てのブロックチェーンノード104のUTXOプールから既に除去されている。最近使用されたUTXO(例えば、ブロックチェーン150の最も最近の6つのブロックにおけるもの)では、同じ仮定を行うことができず、UTXOの二重使用が理論的に可能である。さらに、異なるブロックチェーンノード104の公開されていないトランザクションのセット154は同期されておらず、これは、トランザクションがネットワーク106の一部のみに存在する可能性があることを意味する。
【0080】
セキュリティを向上させるために、ブロックチェーンノード104は、メモリプール内のトランザクションで使用された全てのUTXOを含む確率的フィルタ(例えば、ブルームフィルタ又はカッコウフィルタ)を作成し、それをライトクライアントに送信することができる。ライトクライアント105は、確率的フィルタをメモリプールメンバシップテストとして用い、インプットとして用いられる全てのUTXOがメンバシップテストに落第している(すなわち、UTXOがメモリプール内のトランザクションで決して使用されたことがなく、ゆえにフィルタに決して挿入されたことがなかった)場合のみ、トランザクションを受け入れることができる。このフィルタは、最後のx個のブロック、例えば、最後の6ブロック又は10ブロックに存在するトランザクションアウトプットを含むように拡張することができる。
【0081】
図5に、本発明の実施形態を実施する一例示的なシステム500を示す。システム500は、送信エンティティ501と受信エンティティ502を含む。システムは、複数の異なる送信エンティティ501(図示せず)及び/又は複数の異なる受信エンティティ502(同様に図示せず)を含んでもよい。システムは、1以上のユーザ503をさらに含むことができる。本明細書において用いられるとき、用語「送信エンティティ」501は、確率的フィルタを生成し、1つ以上の受信エンティティに送信するように構成された当事者を指すために用いられる。同様に、用語「受信エンティティ」502は、フィルタ内の、1つ以上のトランザクションアウトプットのメンバシップをチェックする目的で、確率的フィルタを受信するように構成された当事者を指すために用いられる。用語「ユーザ」503は、前のトランザクションにより既に使用されているか又はそうでない可能性がある1つ以上のブロックチェーントランザクションアウトプット(例えば、トランザクション又はトランザクションテンプレートの当事者として)を受信エンティティに提供するように構成された当事者を指すために用いられる。
【0082】
各送信エンティティ501、受信エンティティ502、及びユーザ503は、それぞれのコンピュータ機器(図示せず)を操作する。各送信エンティティ501、受信エンティティ502、及びユーザ503のそれぞれのコンピュータ機器は、1つ以上のプロセッサ、例えば1つ以上のCPU、GPU、他のアクセラレータプロセッサ、特定用途向けプロセッサ、及び/又はFPGAを含むそれぞれの処理装置を含む。送信エンティティ501、受信エンティティ502、及びユーザ503のそれぞれのコンピュータ機器は、メモリ、すなわち、1つ又は複数の非一時的コンピュータ読取可能媒体の形態のコンピュータ読取可能記憶装置をさらに含む。このメモリは、1つ以上のメモリ媒体、例えばハードディスクなどの磁気媒体、SSD、フラッシュメモリ、又はEEPROMなどの電子媒体、及び/又は光ディスクドライブなどの光学媒体を採用する1つ以上のメモリユニットを含んでもよい。それぞれのコンピュータ機器上のメモリは、処理装置上で実行されるように配置された少なくとも1つのクライアントアプリケーション105のそれぞれのインスタンスを含むソフトウェアを記憶する。本明細書において所与の当事者に帰するいかなるアクションも、それぞれのコンピュータ機器の処理装置で実行されるソフトウェアを使用して実行されてもよいことが理解されるであろう。送信エンティティ501、受信エンティティ502、及びユーザ503の各々のそれぞれのコンピュータ機器は、少なくとも1つのユーザ端末、例えば、デスクトップ又はラップトップコンピュータ、タブレット、スマートフォン、又はスマートウォッチなどのウェアラブルデバイスなどを含んでもよい。所与の当事者のコンピュータ機器は、ユーザ端末を介してアクセスされるクラウドコンピューティングリソースなどの、1つ以上の他のネットワーク化されたリソースをさらに含んでもよい。
【0083】
いくつかの実施形態において、ユーザ503は、1つ以上のUTXOをプリロードされているオフラインデバイスを使用して、受信エンティティ502にトランザクションを送信することができる。例えば、オフラインデバイスは、オンラインデバイスに接続したときにロードすることができるカード(例えば、クレジットカード等)の形態をとる場合がある。例えば、ユーザ503は、非接触カードを使用して、受信エンティティ502を使用して支払いを行うことができ、これにより、カードは、トランザクションに署名し、それを近距離通信(NFC)又は同様の無線通信チャネルを使用して受信エンティティ502に送信するように構成される。
【0084】
いくつかの実施形態において、送信エンティティ501は、ブロックチェーンノード104を操作することができる。いくつかの実施形態において、各受信エンティティ502は、クライアントアプリケーション105の役割を担い、あるいはクライアントアプリケーション105を実行するように構成されたコンピューティング機器を少なくとも操作することができる。例えば、受信エンティティ502は、上述のアリス103a及び/又はボブ103bのアクションを実行するように構成することができる。同様に、各ユーザ503は、クライアントアプリケーション105の役割を担い、あるいはクライアントアプリケーション105を実行するように構成されたコンピューティング機器を少なくとも操作することができる。
【0085】
簡潔さのために、本発明は、顧客(ユーザ503)、マーチャント(受信エンティティ502)、及びブロックチェーンノード(送信エンティティ501)を参照して説明される。しかしながら、これらのラベルは限定することを意図していないことが理解されるであろう。特に、送信ノード501が使用されたトランザクションアウトプットのセットを入手できる限り、送信エンティティ501は必ずしもブロックチェーンノード104である必要はない。
【0086】
図5の例示的な例において、顧客503は、トランザクションTx1をマーチャント502に提供する。トランザクションTx1は、1つ又は複数の前の(すなわち、より早期に生成された)トランザクションのそれぞれのアウトプットを参照する1つ以上のインプットを含む。例えば、トランザクションは、商品又はサービスの見返りとしてデジタル資産のある金額の所有権を顧客503からマーチャント502に移転することを意図していてもよい。Tx1のインプットにより参照される前のアウトプットが既に使用されていないことをチェックしたいマーチャント502は、ブロックチェーンノード501から確率的フィルタを取得する。マーチャント502は、Tx1を受信したとき、又はTx1を受信する前に、ブロックチェーンノード501からのフィルタを要求することができる。すなわち、マーチャント502は、既にフィルタを受信し、後の使用のためにフィルタを記憶している場合がある。ブロックチェーンノード501は、以下で論じるように、更新されたフィルタをマーチャント502に定期的に送信することができる。フィルタは、識別子のセットの圧縮された表現を含む。各識別子は、それぞれの使用されたトランザクションアウトプット、すなわち、より早期のトランザクションで既に使用されているトランザクションのアウトプットを識別する。マーチャント502は、Tx1のアウトプット(又はむしろ、それらそれぞれの識別子)をフィルタに供給して、フィルタにそれらが含まれることをチェックする。マーチャント502は、フィルタを用いて、Tx1により参照されるアウトプットが、確実に既に使用されていない(すなわち、確実にフィルタに含まれない)か、あるいは可能性として既に使用されているかを決定することができる。マーチャント502が、アウトプットが確実に、既に使用されていない(すなわち、ユーザ503が確実に、Tx1で二重使用試行を行っていない)ことを見い出した場合、マーチャント502は、Tx1を、例えば商品又はサービスの見返りとして受け入れることができる。一方、マーチャント502が、アウトプットが既に使用されている可能性がある(すなわち、ユーザ503が、Tx1で二重使用試行を行っている可能性がある)ことを見い出した場合、マーチャント502は、ブロックチェーンノード501に通知することができる。応答において、ブロックチェーンノード501は、アウトプットが実際に使用されたものとして記録されているかどうか、すなわち、ブロックチェーンノード501が、マーチャント501に送信されたフィルタにそれらのアウトプットのそれぞれの識別子を含んでいたかどうかをチェックすることができる。ブロックチェーンノード501は、次いで、マーチャント502に結果を知らせ、かつ/あるいは二重使用試行に関する情報を関係当局に渡してもよい。
【0087】
より一般的には、ブロックチェーンノード501は、第1の確率的フィルタを生成するように構成される。第1の確率的フィルタは、前に使用されたトランザクションアウトプット(spent transaction output、STXO)の第1のセットのそれぞれの識別子の表現を含む(又は、符号化している)。例えば、第1のSTXOセットは、ブロックチェーンノード501(又は、異なるブロックチェーンノード501)により維持される公開されていないトランザクションの順序付けられたセットに含まれるトランザクションの一部又は全部により使用されている場合がある。いくつかの例において、STXOの第1のセットは、ブロックチェーンの1つ以上のブロックに含まれる1つ以上のトランザクション、例えば、ブロックチェーンの最後のn個のブロック、例えば最後の6ブロックに含まれる、全てのトランザクションにより使用されている場合がある。すなわち、STXOの第1のセットは、最後のn個のブロックのいずれかに記録された1つ以上のトランザクションにより消費されている場合がある。STXOは、必ずしも最後のn個のブロックのいずれかに記録される必要はなく、代わりにブロックチェーンのブロックのいずれか又は全てに記録されていてもよいことに留意する。
【0088】
好ましくは、ブロックチェーンノードは、公開されるべき新しいブロックごとに新しいフィルタを作成する。フィルタは、順序付けられたセット154に既に存在するSTXOの表現に加えて、新しい到来トランザクションにおけるものを符号化する。ブロックチェーンノード501は、前のブロックに存在するSTXOを必ずしも追加する必要はなく、なぜならば、それらは前のフィルタに既に存在する可能性があるためである。
【0089】
ブロックチェーンノード501は、第1の確率的フィルタをマーチャント502に利用可能にする。例えば、ブロックチェーンノード501は、フィルタをマーチャント502に直接送信し、あるいはフィルタを複数のマーチャント502にブロードキャストし、あるいはフィルタをアクセス可能なソース上(例えば、インターネット上)に公開し、あるいはこれら又は他の選択肢の任意の組み合わせを行うことができる。
【0090】
第1の確率的フィルタにより符号化された各STXOは、それぞれの識別子により識別される。いくつかの例において、識別子は、STXO(これは、消費される前はUTXOであった)を含むトランザクションに基づくことができる。例えば、STXOは、トランザクションのトランザクション識別子(TxID)と、そのトランザクション内のアウトプットインデックス、例えば、TxIDがアウトプットインデックスと連結されたものにより識別されてもよい。他の例では、単なるSTXO自体のハッシュが、識別子として使用されてもよい。
【0091】
ブロックチェーンノード501は、いくつかの実施形態において、第2の確率的フィルタをマーチャント502に送信する(又はその他の方法で、利用可能にする)ことができる。第2の確率的フィルタは、前に使用されたトランザクションアウトプット(STXO)の第2のセットのそれぞれの識別子を含む(又は、符号化している)。STXOの第1及び第2のセットは、排他的な(すなわち、重複しない)セットでもよい。代替的に、STXOの第2のセットは、STXOの第1のセットに含まれる1つ以上のSTXOを含んでもよい。例えば、第2のフィルタは、1つ以上のさらなるSTXO、例えば、第1のフィルタが生成されてからの時間にブロックチェーンノード501のメモリプールに追加されたトランザクションにより参照されているものを含むように、第1のフィルタを更新することにより生成されてもよい。第1のフィルタが、生成時にメモリプール内にあったトランザクションにより参照されたSTXOのみを含むように生成され、それらのトランザクションが、ブロックチェーンのブロックで今や受け入れられている場合、第2のフィルタは、現在メモリプール内にあるトランザクションにより参照されるSTXOのみを含むように、同様に生成されてもよい。その場合、第1及び第2のセットは、重複しない可能性がある。いくつかの例において、ブロックチェーンノード501により生成され、マーチャント502に送信される各フィルタは、STXOの区別可能なセットに基づくことができる。
【0092】
マーチャント502(例えば、ライトクライアント、別のブロックチェーンノード、又は他のタイプのブロックチェーンノードなど)は、ブロックチェーンノード501から1つ以上の確率的フィルタ、例えば、第1及び/又は第2のフィルタを取得する。マーチャント502はまた、1つ以上のトランザクションアウトプット、又は、1つ以上のトランザクションアウトプットへの少なくともそれぞれの参照を取得する。一例として、マーチャント502は、ユーザ503からトランザクションテンプレートを取得することができ、これにおいて、トランザクションテンプレートは、1つ以上のインプットを含み、各インプットは、前のトランザクションのそれぞれのアウトプットを参照する(異なる前のトランザクションが、テンプレートトランザクションのインプットのうちの異なるものにより参照される可能性があることに留意する)。他の例では、ユーザ503が、マーチャント502にトランザクションアウトプットへの参照を提供することができるが、必ずしもトランザクションテンプレートの形式でなく提供することができる。
【0093】
マーチャント502は、確率的フィルタとトランザクションアウトプットを任意の適切な方法で、例えば、ブロックチェーンノード501とユーザ503からそれぞれ直接受信することで取得することができることに留意する。
【0094】
マーチャント502はまた、1つ以上のさらなる(すなわち、異なる)ブロックチェーンノード501(又は、より一般的には送信エンティティ)から、1つ以上のさらなるフィルタを取得し(例えば、受信し)てもよい。
【0095】
1つ以上の確率的フィルタを取得して、マーチャント502は、フィルタの1つ、いくつか、又は全てを用いて、ユーザ503から取得されたトランザクションアウトプットのいずれかが既に使用されている可能性があるかどうかを決定することができる。すなわち、マーチャント502は、トランザクションアウトプット、又はむしろ、それらそれぞれの識別子が、確率的フィルタの1つ以上における要素であるかどうかをチェックする。フィルタの確率的な性質に起因して、チェックを実行した後、マーチャント502は、識別されたトランザクションアウトプットが二重使用試行でない(すなわち、それらが未使用トランザクションアウトプット(UTXO)としてブロックチェーンネットワーク106上に存在する)ことを確信することができ、あるいは、マーチャント502は、識別されたトランザクションアウトプットが二重使用試行である可能性があるという証拠を提示される場合がある。
【0096】
識別されたトランザクションアウトプットが確率的フィルタに存在しない場合、マーチャント502は、例えば商品、サービス、又はデータを交換するために、ユーザ503との間でトランザクション処理することに進むことができる。
【0097】
識別されたトランザクションアウトプットが確率的フィルタに存在する可能性がある場合、マーチャント502は、ユーザ503との間でトランザクション処理するのをやめることを選ぶことができる。さらに又は代わりに、マーチャント502は、対応するフィルタを提供したブロックチェーンノード501に、又は任意の他のブロックチェーンノードに、通知を送信してもよい。例えば、マーチャント502は、あり得る二重使用試行についてブロックチェーンノード501に知らせることができる。マーチャント502は、トランザクションアウトプットが実際に二重使用試行であるかをブロックチェーンノード501が識別することを要求してもよい。
【0098】
マーチャント502から通知を受信し、ブロックチェーンノード501は、識別されたトランザクションアウトプットが実際にSTXOであるかどうか、又はマーチャント502により使用された確率的フィルタが偽陽性を返しているかを決定することができる。すなわち、ブロックチェーンノード501は、識別されたトランザクションアウトプットが、ブロックチェーンノード501のメモリプール内に、又はブロックチェーン150上の公開されたブロック内に含まれるトランザクションにより参照されているかどうかをチェックする。
【0099】
ブロックチェーンノード501は、このチェックの結果をマーチャント502に送信して、例えば、識別されたトランザクションアウトプットが二重使用試行であるか否かをマーチャント502に知らせることができる。さらに又は代わりに、ブロックチェーンノード501は、二重使用試行について関連当局に通知してもよい。
【0100】
マーチャント502により取得されたトランザクションテンプレートにより参照されるトランザクションアウトプットが二重使用試行でないと仮定し、マーチャント502は、トランザクションテンプレートを受け入れることができる。これは、テンプレートにデジタル署名で署名すること、及び/又はトランザクションテンプレートの完成バージョンをブロックチェーンネットワーク106に送信することを含むことができる。
【0101】
代替的に、マーチャント502がトランザクションテンプレートを受け入れた場合、マーチャント502は、ユーザ503に、それに署名して返すように求めてもよい。マーチャント502は、次いで、トランザクション(ユーザ503により署名されている)をブロックチェーンネットワーク106に送信することができる。トラストレス(trustless)シナリオでは、これは必要であり、なぜならば、さもなければマーチャント502が不正を行い、UTXOが二重使用であると言い、テンプレートを拒絶し、次いでユーザ503に他のUTXOを求める可能性があるためである。次いで、マーチャント502は、UTXOの双方のセットを収集し、そのもうけを2倍にする(このプロセスが何度も繰り返される場合には、2倍以上にする)可能性がある。これを防ぐために、ユーザ503は、UTXOがマーチャント502により承認されたときにのみ、それらに署名することができる。
【0102】
いくつかの実施形態において、マーチャント502は、確率的フィルタを取得するローカルサーバと、複数のライトクライアント又は他のデバイスを含むことができ、複数のライトクライアント又は他のデバイスは各々、トランザクションアウトプット(又は、それらそれぞれの識別子)をサーバに送信する。サーバは、識別されたトランザクションアウトプットを確率的フィルタに供給してメンバシップをチェックし、次いでその結果をライトクライアントに返す。
【0103】
上述したように、受信エンティティ502(例えば、マーチャント又はブロックチェーンノード)は、メンバシップテストに確率的フィルタを使用することができる。送信エンティティ501(例えば、ブロックチェーンノード)は、公開されていないトランザクションの順序付けられたセット154に含まれるトランザクションで使用された全てのUTXOを含む確率的フィルタ(例えば、ブルームフィルタ又はカッコウフィルタ)を作成し、次いで、そのフィルタを、受信エンティティ502、例えば1つ以上のライトクライアントに送信することができる。確率的フィルタの維持とサービスは、送信エンティティにとって、二重使用試行を識別するために必要な現在のチェックよりもより計算的に高価でなく、フィルタは、新しいトランザクションごとに1回だけ更新される必要がある(ライトクライアントが要求を行うたびにメモリプールと最後の6ブロックをチェックするのと対照的である)。
【0104】
確率的フィルタは、予め定義された偽陽性率を有するが、決して偽陰性を有さない。ライトクライアントは、メンバシップテストに確率的フィルタを使用することができる。フィルタが「いいえ」を提示した場合、トランザクションをすぐに受け入れることができる。フィルタが「はい」を、又はより正確には「おそらく」(偽陽性に起因して)を提示した場合、ユーザ503(例えば、顧客)は、トランザクションが有効なブロックに挿入されるまで待つか、又は別のトランザクションを使用して支払うかという選択肢を提供される。確率的フィルタは、送信及び記憶するのに安価であり、異なるブロックチェーンノードの、及び前のブロック(すなわち、6-confの深さに対しては最後の6ブロック)における、複数の迅速なチェックを可能にし(すなわち、受信エンティティ502は、UTXOがネットワークのいずれの部分でも既に消費されていないことをチェックすることができる)、この場合、0-confトランザクションは、全てのフィルタが「No」を提示した場合にのみ受け入れられる。
【0105】
図6に、アーキテクチャの一例を示す。3つのブロックチェーンノードA、B、及びCは、Tx1で使用されたUTXO1を含む、最後のx個のブロックで使用されたUTXOを含むフィルタを作成し、維持する(Tx1は現在、ブロックチェーンノードA及びBの公開されていないトランザクションの順序付けられたセット154にのみ存在する)。ライトクライアントは、UTXO1を使用しようとする新しいトランザクションTx2を受信した場合、それを受け入れる前に、自身のフィルタを更新し、UTXO1のメンバシップをチェックする。全てのライトクライアントは、UTXO1がネットワーク106のどこかで(すなわち、Tx1により)既に使用されていることを検出し、それら全てがTx2を拒絶する。
【0106】
偽陽性に起因して、いくつかのUTXOは、それらがどこにも使用されていない場合でも、拒絶される可能性がある。これらのUTXOでは、0-confの受け入れが不可能な場合があり、それらのUTXOを使用したいユーザは、それらを後の時間に(例えば、フィルタが置換されたときに)使用し、あるいはそれらをいずれにせよ使用し、これらのUTXOを含むトランザクションが有効なブロックに挿入されるのを待つことができる。
【0107】
上述したように、UTXOを確率的フィルタに記録するためには、それらが一意に識別される必要がある。典型的には、UTXOは個々のIDを有さない。新しいトランザクションが作成されたとき、トランザクションインプットベクトルが、トランザクションハッシュ(トランザクションID)とアウトプットインデックス(これは、そのトランザクションの「vout」ベクトル内のUTXOを識別する)への参照により、どのUTXOが消費されるかを識別する。
【0108】
いくつかの実施形態において、使用されているUTXOを識別するための同様の手法が用いられており、これは以後、UTXO IDと呼ばれる。UTXO IDは、そのUTXOを含むトランザクションIDとそのアウトプットインデックスとの連結として定義される。
UTXO ID=トランザクションID+アウトプットインデックス
【0109】
UTXO IDのサイズは、少なくとも1つのブロックチェーンプロトコルによれば、トランザクションID(32バイト)とアウトプットインデックス(8バイト)の合計であり、UTXO IDあたり40バイトの合計サイズである。UTXO IDの他のバリエーションが用いられてもよいことが理解されるであろう。すなわち、UTXO IDは、TxIDとアウトプットインデックスの関数であるが、必ずしも連結でなくてもよい。
【0110】
ここで、フィルタを作成及び維持するために送信エンティティ501(例えば、ブロックチェーンノード)により実行されるプロセスを要約する。まず、ブロックチェーンノードにより組み立てられる新しい候補ブロックごとに、以下を行う。
1. ブロックチェーンノードが、新しい確率的フィルタを作成し、既にメモリプールにあるトランザクションで使用されたUTXOのUTXO IDの全てを挿入する。
【0111】
次いで、新しいトランザクションが受信されるたびに、以下を行う。
2. トランザクションが検証され、有効である場合、以下を行う。
a. トランザクションがメモリプールに挿入される、及び
b. 新しいトランザクションでインプットとして用いられるUTXOのIDがフィルタに挿入される。
【0112】
新しいブロックが公開されたとき、ブロックチェーンノードは、現在のフィルタをアーカイブし(例えば、それはハードドライブに格納される)、新しいものを初期化し、既にメモリプールにあるトランザクションで使用された全てのUTXOを挿入する。古いフィルタは、削除することができる(例えば、最後の6つのフィルタだけを保持する)。ブロックチェーンノードが現在のフィルタを記憶することは必須ではないことが理解されるであろう。
【0113】
図7は、新しいトランザクションを受信したときに実行され得るプロセスを示す。ブロックチェーンノードは、トランザクション(トランザクションA)を検証し、それを、公開されていないトランザクションのその順序付けられたセット154に挿入する。同時に、そのトランザクションで使用されたUTXOは、確率的フィルタnに挿入される。
【0114】
既に述べたように、フィルタnは、公開されていないトランザクションの順序付けられたセット154に新しいトランザクションが挿入されるたびに、及び新しいブロックが公開されるまで、更新することができ、次いで、新しいフィルタn+1が初期化される。
図8に、このシーケンスを示す。したがって、各ブロックチェーンノードは、最後のx個のブロックに現在のメモリプールを加えたもの(フィルタn+1)で使用されたUTXOのIDを含むフィルタを有するローリングウィンドウを維持することができる。公開されていないトランザクションの順序付けられたセット154内の全てのトランザクションは、それらがブロックに挿入されるという事実とは独立して、フィルタに追加されることに留意する。ここで、公開されていないこと(unpublished)は、トランザクションがブロック内で公開されておらず、代わりにノード104のメモリプールにのみ存在することを意味することに留意する。
【0115】
再びになるが、既に述べたように、最後のn個のフィルタ(例えば、6-confの深さではn=6)だけを維持することは、nより深いブロックで使用されたUTXOが全てのUTXOプールにより除去されていることが保証され、一方で、最後のn個のブロックで使用されたものは、ネットワーク106の一部で依然として使用可能である可能性があることを意味する(例えば、それらは、二重使用攻撃及び一時的なチェーン分裂に対して脆弱である)。例えば、ブロックチェーンノードは、最新のブロックを受信していない場合があり、あるいは、一時的なフォーク(UTXOが依然として利用可能である)に属するブロックを受信している場合がある。これらのノードの1つへのトランザクションの送信は、トランザクションの最初の受け入れを結果としてもたらし、それは次いで、最終的に拒絶される。これは、ブロックチェーン150それ自体にとって問題ではないが、実際には、0-confトランザクションを受け入れるマーチャントなどにとって問題である。
【0116】
ブルームとカッコウは、送信エンティティ501により使用され得る単なる2つのタイプの確率的フィルタである。ブルームフィルタとカッコウフィルタは、要素の削除が要件ではないため、特に適している。以下の表は、2つのフィルタの利点と欠点の要約を提供する。
【表1】
【0117】
ユースケース:販売ポイントインスタントトランザクション
ライトクライアントを実行し、新しいトランザクションを即座に受け入れる意思のあるマーチャント502(これは、当該分野で「簡易支払立証」として知られているトランザクション立証プロセスに対する追加であっても又はそうでなくてもよい)は、トランザクションインプットとして用いられるUTXOの「使用可能性(spendability)」を立証する。UTXOの使用可能性は、メンバシップテストを実行するための確率的フィルタを用いて立証され、トランザクションは、全ての結果が陰性である場合にのみ使用可能と見なされる。セキュリティを高め、二重使用攻撃を防ぐために、マーチャントは、フィルタを複数のブロックチェーンノードと同期させることができる。セキュリティのレベルと帯域幅消費のトレードオフは、ライトクライアントにより選択することができる。
【0118】
ユーザ503が、商品又はサービスを要求したとき、マーチャント502は、次のように立証プロセスを実行する。
1. マーチャントライトクライアント502が、1つ以上のブロックチェーンノードからの、最後のx個のフィルタ(例えば、一時的なフォークに対して6-confの深さの保護では、x=6)を要求する(既に受信していない場合)。
2. 新しいトランザクションが、ある時間にわたり最後のフィルタに追加されたとき、ライトウォレット502が、トランザクションを受け入れる前に、最後のフィルタを1つ以上のブロックチェーンノード501と同期させる。
3. マーチャント502が、トランザクションテンプレートをユーザ503に送信する。テンプレートは、支払いが送られる必要があるアドレス、VAT、チップ、任意の他のコストなど、販売を完了するための全ての条件を含む。インプットフィールドは空白のままである。
【0119】
ユーザ503は、マーチャントのテンプレートに記入し、インプット及びおつり(change)を追加するが、資金をロック解除するために必要な署名は追加しない。次いで、ユーザ503は、テンプレートをマーチャント502に再送信する。記入されたテンプレートと共に、ユーザ503は、使用されるUTXOのフルのトランザクションデータとマークル(Merkle)パスを送信しなければならない。この情報は、トランザクションが存在し、十分な資金をローカルに含むことを証明し、それにより、立証のためのさらなるワークはブロックチェーンノード501によって必要とされない。
4. マーチャント502が、テンプレートのインプットフィールド内の全てのUTXOを取り出し、マークル証明(Merkle proof)が有効であることを立証する。
5. UTXOメンバシップテストが(UTXO IDを使用して)実行される。
a. UTXOのいずれも、確率的フィルタのいずれにもない場合:
i. UTXOは、既にメモリプールに、又は前のブロックにない(保証され、偽陰性はない)。
ii. マーチャント502が、ユーザ503に、テンプレートに署名するように求め、それを受け入れ、0-confである。
b. 1つ以上のUTXOが確率的フィルタ内にある場合:
i. 陽性のUTXOは、メモリプールに、又は最近公開されたブロックに既に存在する可能性がある(フィルタ偽陽性に起因して、わずかな不確実性がある)。
ii. マーチャント502が、ユーザ503に、確認を(及び、この場合、テンプレートに署名するのを)待つか、又はテンプレートを更新し、インプット内の無効なUTXOを変更するように求める。
【0120】
トランザクションを拒絶し、テンプレートを新しい未使用トランザクションアウトプットで更新するように求めることは、手間のかかるプロセスのように見える可能性があるが、ユーザ503が、このメカニズムをサポートするウォレットで支払う場合、UTXOをチェックし、テンプレートを更新し、それに署名するプロセス全体を、ミリ秒単位で自動的に実行することができる。
【0121】
ライトクライアント502は、あり得る二重使用を検出したとき、ネットワーク106に警告することができる。ブロックチェーンノード501は、確率的フィルタの偽陽性のケースを除外するためにさらなるチェックを実行し、二重使用が確認された場合、署名者、及び有罪とされたトランザクションが報告されてもよい。インプットと同じUTXOを含むトランザクションは、それが小切手詐欺であるかのように、不正の証明として使用することができる(この時点で、当局は、どのように介入し、紛争を解決するかを選択することができる)。したがって、上記のプロセスは次のように拡張することができる。
【0122】
UTXOメンバシップテストが実行され、使用される1つ以上のUTXOが確率的フィルタ内にある場合、以下を行う。
1. マーチャントライトクライアント502が、ブロックチェーンノードに警告する。
2. ブロックチェーンノード501が、最終的なチェックを実行し、UTXOが、公開されていないトランザクションの順序付けられたセット154内のトランザクションで既に使用されている場合、以下を行う。
a) ブロックチェーンノード501が、ネットワーク106全体に警告を出すことができる。
b) ブロックチェーンノード501が、2つ(又は、それ以上)の署名されたトランザクションを不正の証明として用いて、署名者を当局に報告することができる。
【0123】
本発明の利点のいくつかは以下のとおりである。確率的フィルタは、維持するのに安価である。いくつかのブロックチェーンノード501が照会され、ネットワークのセキュリティを高めることができる。ライトクライアントを実行しているマーチャント502は、二重使用をチェックするために常にオンラインである必要はなく、支払いを受け取る前に接続し、少量のデータを受信/送信すればよく、最後のx個の確率的フィルタ(6-confではx=6)を更新し、テンプレートを送信する。ライトクライアント502を実行しているビジネスでの支払いをする意思のあるユーザ503は、支払いを実行するためにオンラインである必要はない。ユーザ503は、彼らが使用する意思のあるUTXO、それらのフルのトランザクション、及びそれらのマークル証明を記憶することを単に要求される。ユーザ503は、最小限の計算能力を必要とし、トランザクションに署名するだけでよい。無効なUTXOは、ローカルで、マークル証明と確率的フィルタを用いて検出される。ライトクライアントを実行しているマーチャント502は、スパム攻撃及びDoS攻撃には使用できない。ブロックチェーンノード501は、不正なユーザを禁止し、それらを当局に報告することができる。
【0124】
以下では、本発明の一例示的な実装について説明する。フィルタのサイズは、次の例示的な24時間統計を用いて計算される。
・ トランザクションのインプットにおける平均UTXO: 3 UTXO/Tx
・ 1秒あたりの平均トランザクション数: 7 Tx/s
・ ブロック間の平均時間: 625秒
・ 平均メモリプールサイズ: 5 MB
ブロックあたりの平均トランザクション数: 7×625=4375 Tx
ブロックあたりの平均UTXO数: 4375×3=13125 UTXO
【0125】
比較のために、ライトクライアントが本発明を用いずにUTXOの使用可能性をチェックしたいと仮定すると、クライアントは、UTXO IDのフルのリスト(UTXO IDサイズは40バイトである)を必要とすることになり、以下のとおりである。
UTXO IDリストのサイズ: 13125×40バイト=525 KB
【0126】
次に、本発明によるフィルタを用いると、以下のとおりである。
【数3】
パラメータ:
・ 偽陽性確率(fpp)=0.1%
・ フィルタ負荷(カッコウフィルタのみ)=95%
ブルームフィルタサイズ=23.5 KB - UTXO IDリストと比較した圧縮率:4.5%
カッコウフィルタサイズ=20.7 KB - UTXO IDリストと比較した圧縮率:3.9%
【0127】
フィルタのサイズは、予期された要素の数により線形に増大する。例えば、ブロックが1秒あたりにより多くのトランザクションを有し(すなわち、1秒あたりのトランザクション数を2倍にする)こと、又は公開されるのにより多くの時間を必要とし(すなわち、公開にかかる時間を2倍にする)ことを仮定すると、いずれの場合も、フィルタのサイズが同様に2倍になる。さらに、ブロックにすぐに追加されず、メモリプールにとどまるトランザクションは、次に続くフィルタに追加されなければならない。
【0128】
こうした状況は頻繁であるため、偽陽性率の増加(ブルームフィルタの場合)又は挿入の拒絶(カッコウフィルタの場合)を避けるために、新しいフィルタは、ブロックあたりの平均UTXOの2倍を管理するように構成することができる。
【0129】
この場合、フィルタは、以下を用いて作成されてもよい。
・ fpp=0.1%
・ 予期される要素=2 * ブロックあたりの平均UTXO=26250
ブルームフィルタサイズ=47.0 KB
カッコウフィルタサイズ=41.4 KB
【0130】
フィルタサイズは、例えば、過去1時間又は過去24時間の1秒あたりの平均トランザクションを考慮して、送信エンティティ501により動的に確立することができる。これにより、フィルタは、空間を無駄にすることなく、ネットワーク106上のトラフィックに応じて増大することができる。
【0131】
ここで、次の数年でいくつかのブロックチェーンネットワークが、最大40億個のトランザクションを含む最大1TBのサイズのブロックを処理する可能性があるという仮説を立てて、提案されるアプローチのスケーラビリティを示す。次の表は、フィルタのサイズと、それらを維持するのに必要な帯域幅を要約している。3UTXO/トランザクション、及び10分のブロック間平均時間と共に、250バイトの平均トランザクションサイズが仮定されている。
【表2】
【0132】
上記の表から、以下を確かめることができる。
・ 最大100MBのブロックを表す確率的フィルタは、維持するのにかなり安価である。6つのフィルタを記憶するのに12MBから18MBの間で、必要な最大帯域幅が4.7KB/sである。
・ 1GBブロックを表す確率的フィルタは、現在市販されているデバイスの大多数で処理することができ、6つのフィルタを記憶するのに120MBから180MBの間で、47KB/sの最大帯域幅を必要とする。
【0133】
上記のユースケースは、数分ごとにトランザクションを受信する小規模なマーチャントに最適化されている。それらの唯一の要件は、0-confトランザクションを受け入れる前に最新のフィルタを更新することである。一方、より大規模なマーチャントは、異なる要件を有する場合がある。それらは通常、いくつかの販売ポイント(points of sale、PoS)を有し、1秒あたりにいくつかのトランザクションを処理する。各PoSで確率的フィルタを維持することは効率的でなく、多くのストレージ空間を無駄にし、ネットワークトラフィックを増加させる。このような状況では、若干異なるアーキテクチャが必要とされる場合がある。ローカルサーバ1201は、更新された確率的フィルタを記憶し、維持することができる。サーバ1201は、常にオンラインで継続的に更新することができる。各PoS1202は、記入されたテンプレートとユーザ503から受け取った他の情報を、立証のためにローカルサーバ1201に送信する。これは、ネットワークトラフィックを削減し、それは、各々の単一のPoS1202について、計算的により低負荷になる。
図9に、このアーキテクチャの一例を示す。
【0134】
ユースケース:ブロックチェーンノードのセキュリティの強化
本発明は、0-confトランザクションを受け入れる意思のあるライトクライアントにおける無効なトランザクション及び二重使用を検出するための新規のアプローチを提供する。従前のアプローチは、ブロックチェーンノードの多くのさらなるワークを必要とするため、効率的ではない(ライトクライアントは、トランザクション有効性をチェックするために、それをローカルで行う代わりに、複数のブロックチェーンノードを用いる必要がある)。さらに、それらは、ネットワーク106上で(例えば、偽のトランザクションを作成し、それらを検証するためにブロックチェーンノードにフラッディングすることをライトクライアントに強制することにより)サービス拒否攻撃を行うためにライトクライアントを用いる意思のある攻撃者に、ライトクライアントを公開する。
【0135】
ライトクライアントと同様に、ブロックチェーンノードは、他のブロックチェーンノードからのUTXO確率的フィルタを要求することができる。ライトクライアントから受信した新しいトランザクションを検証するとき、標準の検証チェックに加えて、ブロックチェーンノードは、UTXOがネットワークの他の部分で既に使用されているかをテストすることができる。この手法は、二重使用を防ぐためのさらなるセキュリティ対策として機能する。それはまた、一時的なチェーン分裂及び破損したノードの迅速な検出も可能にする。
【0136】
ユースケース:シンプルマーチャントウォレット
このセクションは、シンプルマーチャントウォレット(simple merchant wallets、SMW)、限られた計算リソースを有するマーチャント又は他の当事者に有用なライトウォレットについて説明する。SMWは、特に、ブロックチェーントランザクションを即座に受け入れることがビジネスにとって重要であるときに、提案される本発明の典型的なユースケースである。SMWは、マーチャント及びPoSデバイスにより使用することができるライトウォレットである。SMWは、支払いテンプレートを作成し、それらをユーザ(例えば、顧客)に送信し、ユーザがそれらに記入した後にトランザクションを立証すればよい。SMWは、トランザクションができるだけ早く、可能性としてブロックチェーン上での確認がゼロで、例えばカフェ、自動販売機等で検証される必要がある場合に、特に有用である。例えば、カフェは、トランザクションがブロックチェーンに挿入される前に、支払いを立証し、受け入れ、飲料を提供しなければならない(6-confの深さの検証は、平均して、1時間を必要とすることになる)。
図10に、インスタントSMWによりトランザクションを処理する一例示的なフローを示す。
【0137】
本明細書における開示を与えられると、開示された手法の他の変形又はユースケースが当業者に明らかになる場合がある。本開示の範囲は、記載された実施形態により限定されず、添付の特許請求の範囲によってのみ限定される。
【0138】
例えば、上記のいくつかの実施形態は、ビットコインネットワーク106、ビットコインブロックチェーン150、及びビットコインノード104という観点で説明されている。しかしながら、ビットコインブロックチェーンはブロックチェーン150の1つの特定の例であり、上記の説明は一般に任意のブロックチェーンに適用されてよいことが理解されるであろう。より一般的には、本発明はビットコインのブロックチェーンに限定されるものではない。より一般的には、上記のビットコインネットワーク106、ビットコインブロックチェーン150、及びビットコインノード104へのいずれの参照も、ブロックチェーンネットワーク106、ブロックチェーン150、及びブロックチェーンノード104への参照にそれぞれ置き換えられてもよい。ブロックチェーン、ブロックチェーンネットワーク、及び/又はブロックチェーンノードは、上述したビットコインブロックチェーン150、ビットコインネットワーク106、及びビットコインノード104の説明された特性の一部又は全てを共有することができる。
【0139】
本発明の好ましい実施形態において、ブロックチェーンネットワーク106は、ビットコインネットワークであり、ビットコインノード104は、少なくとも、ブロックチェーン150のブロック151を作成、公開、伝搬、及び記憶する説明された機能の全てを実行する。これらの機能の全てではないが1つ又はいくつかのみを実行する他のネットワークエンティティ(又は、ネットワーク要素)が存在する場合があることは除外されない。すなわち、ネットワークエンティティは、ブロックを作成及び公開することなく、ブロックを伝搬及び/又は記憶する機能を実行してもよい(これらのエンティティは、好ましいビットコインネットワーク106のノードとは見なされないことを思い出されたい)。
【0140】
本発明の優先されない実施形態において、ブロックチェーンネットワーク106は、ビットコインネットワークでない場合がある。これらの実施形態において、ノードが、ブロックチェーン150のブロック151を作成、公開、伝搬、及び記憶する機能の全てではないが少なくとも1つ又はいくつかを実行できることは除外されない。例えば、こうした他のブロックチェーンネットワーク上で、「ノード」は、ブロック151を作成及び公開するがそれらのブロック151を記憶及び/又は他のノードに伝搬しないように構成されているネットワークエンティティを指すために使用されることがある。
【0141】
さらにより一般的には、上記の用語「ビットコインノード」104への参照は、用語「ネットワークエンティティ」又は「ネットワーク要素」に置き換えられてもよく、そのようなエンティティ/要素は、ブロックを作成、公開、伝搬、及び記憶する役割の一部又は全部を実行するように構成される。このようなネットワークエンティティ/要素の機能は、ブロックチェーンノード104を参照して上述された同じ方法でハードウェアに実装されてもよい。
【0142】
上記の実施形態は、単に例として説明されていることが理解されるであろう。より一般的には、以下のステートメントの1つ以上に従って方法、装置、又はプログラムが提供される場合がある。
【0143】
ステートメント1. ブロックチェーントランザクションアウトプットの二重使用試行を識別する、コンピュータにより実施される方法であって、当該方法は送信エンティティにより実行され、
第1の確率的フィルタを生成するステップであり、前記第1の確率的フィルタは、前記送信エンティティに利用可能な第1の複数の使用されたブロックチェーントランザクションアウトプットの各々のそれぞれの識別子を符号化している、ステップと、
前記第1の確率的フィルタを、受信エンティティに利用可能にするステップと、
を含む方法。
【0144】
すなわち、第1の確率的フィルタは、それぞれの識別子の各々の表現を含む。「利用可能(available)」は、送信エンティティが第1の複数の使用されたブロックチェーントランザクションアウトプットを入手できる(has access to)ことを意味することに留意する。それは、第1の複数の使用されたブロックチェーントランザクションが、送信エンティティが認識しているありとあらゆる使用されたブロックチェーントランザクションアウトプットを含むことを意味するわけではない。好ましくは、メモリプール内のトランザクションにより使用されたトランザクションアウトプットのみが、各々の新たに生成されたフィルタに符号化される。
【0145】
ステートメント2. 前記第1の複数の使用されたトランザクションアウトプットは、ブロックチェーンノードにより維持される公開されていないトランザクションの順序付けられたセットに存在するそれぞれのトランザクションにより使用されている、使用されたトランザクションアウトプットのセットを含み、前記トランザクションの順序付けられたセット内の各トランザクションは、前記ブロックチェーンノードにより検証されている、ステートメント1に記載の方法。
【0146】
例えば、新しいフィルタは、新しいブロックが公開されるたびに(したがって、保留中のトランザクションの順序付けられたセットからトランザクションの一部又は全部が除去されたときに)生成されてもよい。すなわち、新しいフィルタは、新しいブロックが作成及び公開されるたびに生成されてもよく、送信エンティティは、最後のx個の(例えば、最後の6個の)フィルタを保持してもよい。各フィルタは、このプロセスに従って生成される(新しいものが作成されるたび、最後のものは破棄される)。
【0147】
ステートメント3. 前記第1の複数の使用されたトランザクションアウトプットは、前記ブロックチェーンのそれぞれのブロックに存在するそれぞれのトランザクションにより使用されているトランザクションアウトプットのそれぞれのセットを含む、ステートメント1又はステートメント2に記載の方法。
【0148】
ステートメント4. 前記第1の複数の使用されたトランザクションアウトプットは、トランザクションアウトプットの複数のそれぞれのセットを含み、トランザクションアウトプットの各セットは、前記ブロックチェーンの複数のブロックのそれぞれのブロックに存在するそれぞれのトランザクションにより使用されている、ステートメント3に記載の方法。
【0149】
ステートメント5. 前記確率的フィルタは、ブルームフィルタ又はカッコウフィルタである、いずれかの先行するステートメントに記載の方法。
【0150】
ステートメント6. 各それぞれの識別子は、それぞれの使用されたトランザクションアウトプットを含むそれぞれのトランザクションのそれぞれの識別子に基づく、いずれかの先行するステートメントに記載の方法。
【0151】
ステートメント7. 各それぞれの識別子はさらに、前記それぞれのトランザクション内の前記それぞれの使用されたトランザクションアウトプットのそれぞれのアウトプットインデックスに基づく、ステートメント6に記載の方法。
【0152】
ステートメント8. 第2の確率的フィルタを生成するステップであり、前記第2の確率的フィルタは、前記送信エンティティに利用可能な第2の複数の使用されたブロックチェーントランザクションアウトプットの各々のそれぞれの識別子を含む、ステップと、
前記第2の確率的フィルタを、受信エンティティに利用可能にするステップと、
を含む、いずれかの先行するステートメントに記載の方法。
【0153】
ステートメント9. 前記第2の確率的フィルタの生成は、前記第1の複数の使用されたブロックチェーントランザクションアウトプットに既に含まれていない前記第2の複数の使用されたブロックチェーントランザクションアウトプットのうちの1つ以上のそれぞれの識別子を含むように前記第1の確率的フィルタを更新することを含む、ステートメント8に記載の方法。
【0154】
ステートメント10. 前記第1又は第2の確率的フィルタが二重使用試行であると示すブロックチェーントランザクションアウトプットを、前記受信エンティティが受信しているという通知を受信するステップと、
前記ブロックチェーントランザクションアウトプットが、前記送信エンティティに利用可能な前記第1又は第2の複数の使用されたブロックチェーントランザクションアウトプットに存在するかどうかを決定するステップと、
を含む、いずれかの先行するステートメントに記載の方法。
【0155】
ステートメント11. 前記ブロックチェーントランザクションアウトプットが、前記送信エンティティに利用可能な前記第1又は第2の複数の使用されたブロックチェーントランザクションアウトプットに存在しないと決定された場合、前記ブロックチェーントランザクションが二重使用試行でないことを前記受信エンティティに知らせるステップ、を含むステートメント10に記載の方法。
【0156】
ステートメント12. 前記ブロックチェーントランザクションアウトプットが、前記送信エンティティに利用可能な前記第1又は第2の複数の使用されたブロックチェーントランザクションアウトプットに存在すると決定された場合、前記ブロックチェーントランザクションが二重使用試行であることを前記受信エンティティ及び/又は異なるエンティティに知らせるステップ、を含むステートメント10に記載の方法。
【0157】
ステートメント13. 前記送信エンティティは前記ブロックチェーンノードである、いずれかの先行するステートメントに記載の方法。
【0158】
ステートメント14. 前記受信エンティティは軽量ブロックチェーンクライアントアプリケーションを含む、いずれかの先行するステートメントに記載の方法。
【0159】
ステートメント15. 前記受信エンティティは異なるブロックチェーンノードである、ステートメント1乃至14のいずれかに記載の方法。
【0160】
ステートメント16. ブロックチェーントランザクションアウトプットの二重使用試行を識別する、コンピュータにより実施される方法であって、当該方法は受信エンティティにより実行され、
送信エンティティから第1の確率的フィルタを取得するステップであり、前記第1の確率的フィルタは、前記送信エンティティに利用可能な第1の複数の使用されたブロックチェーントランザクションアウトプットの各々のそれぞれの識別子を符号化している、ステップと、
1つ以上のブロックチェーントランザクションアウトプットの指示を取得するステップと、
前記1つ以上のブロックチェーントランザクションアウトプットのそれぞれの識別子が前記第1の確率的フィルタに存在するかどうかに基づいて、前記1つ以上のブロックチェーントランザクションアウトプットが二重使用試行であるかどうかを決定するステップと、
を含む方法。
【0161】
ステートメント17.前記1つ以上のブロックチェーントランザクションアウトプットの指示の前記取得は、前記1つ以上のブロックチェーントランザクションアウトプットへのそれぞれの参照を含むトランザクションテンプレートを取得することを含む、ステートメント16に記載の方法。
【0162】
ステートメント18. 前記送信エンティティから第2の確率的フィルタを取得するステップであり、前記第2の確率的フィルタは、前記送信エンティティに利用可能な第2の複数の使用されたブロックチェーントランザクションアウトプットの各々のそれぞれの識別子を含む、ステップを含み、
前記1つ以上のブロックチェーントランザクションアウトプットが二重使用試行であるかどうかの前記決定は、前記1つ以上のブロックチェーントランザクションアウトプットのそれぞれの識別子が前記第2の確率的フィルタに存在するかどうかに基づく、
ステートメント16又はステートメント17に記載の方法。
【0163】
ステートメント19. 1つ以上の異なるエンティティから1つ以上のさらなる確率的フィルタを取得するステップ、を含み、
前記1つ以上のブロックチェーントランザクションアウトプットが二重使用試行であるかどうかの前記決定は、前記1つ以上のブロックチェーントランザクションアウトプットのそれぞれの識別子が、前記1つ以上のさらなる確率的フィルタの一部又は全部に存在するかどうかに基づく、
ステートメント16乃至18のいずれかに記載の方法。
【0164】
好ましくは、受信エンティティは、少なくとも6つのフィルタを取得する。例えば、受信エンティティは、ブロックチェーンノードからの最後の6つのフィルタを要求してもよい。セキュリティを向上させるために、受信エンティティは、異なる送信エンティティからのこれら6つのフィルタを要求してもよく、なぜならば、フィルタが異なる可能性があるためである。
【0165】
ステートメント20. 前記第1及び/又は第2の確率的フィルタの要求を前記送信エンティティに送信するステップ、を含むステートメント16乃至19のいずれかに記載の方法。
【0166】
ステートメント21. 前記1つ以上のブロックチェーントランザクションアウトプットが二重使用試行でないと決定することに応答して、前記ブロックチェーントランザクションをブロックチェーンネットワークの1つ以上のブロックチェーンノード送信するステップ
を含むステートメント17又はステートメント17に従属するいずれかに記載の方法。
【0167】
ステートメント22. 前記1つ以上のブロックチェーントランザクションアウトプットが二重使用試行であると決定することに応答して、前記1つ以上のブロックチェーントランザクションアウトプットが二重使用試行であることを前記第1の確率的フィルタが示すという通知を前記送信エンティティに送信するステップ
を含むステートメント16乃至20のいずれかに記載の方法。
【0168】
ステートメント23. 前記受信エンティティは軽量ブロックチェーンクライアントを含む、ステートメント16乃至22のいずれかに記載の方法。
【0169】
ステートメント24. 前記受信エンティティは、複数の軽量ブロックチェーンクライアントを含み、前記1つ以上のブロックチェーントランザクションの前記指示の前記取得は、前記複数の軽量クライアントの1つから前記指示を取得することを含む、ステートメント16乃至23のいずれかに記載の方法。
【0170】
例えば、ローカルサーバは、確率的フィルタを取得し、軽量クライアントのためにチェックを実行してもよい。
【0171】
ステートメント25. 前記受信エンティティはブロックチェーンノードを含む、ステートメント16乃至22のいずれかに記載の方法。
【0172】
ステートメント26. 1つ以上のメモリユニットを含むメモリと、
1つ以上の処理ユニットを含む処理装置であり、前記メモリは、前記処理装置上で実行されるように配置されたコードを記憶し、前記コードは、前記処理装置上にあるときにステートメント1乃至25のいずれかに記載の方法を実行するように構成される、処理装置と、
を含むコンピュータ機器。
【0173】
ステートメント27. コンピュータ読取可能記憶装置上に具現化されたコンピュータプログラムであり、ステートメント26に記載のコンピュータ機器上で実行されたときにステートメント1乃至25のいずれかに記載の方法を実行するように構成される、コンピュータプログラム。
【0174】
本明細書に開示される別の態様によれば、送信エンティティ及び受信エンティティのアクションを含む方法が提供される場合がある。
【0175】
本明細書に開示される別の態様によれば、送信エンティティ及び受信エンティティのコンピュータ機器を含むシステムが提供される場合がある。