(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-08-21
(54)【発明の名称】ブロックチェーンを使用するピアツーピア接続の形成
(51)【国際特許分類】
H04L 9/32 20060101AFI20240814BHJP
G06F 21/62 20130101ALI20240814BHJP
G06F 21/44 20130101ALI20240814BHJP
【FI】
H04L9/32 200B
H04L9/32 200Z
G06F21/62 318
G06F21/44
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2024505137
(86)(22)【出願日】2022-07-21
(85)【翻訳文提出日】2024-03-15
(86)【国際出願番号】 EP2022070495
(87)【国際公開番号】W WO2023006573
(87)【国際公開日】2023-02-02
(32)【優先日】2021-07-29
(33)【優先権主張国・地域又は機関】GB
(32)【優先日】2022-05-25
(33)【優先権主張国・地域又は機関】GB
(81)【指定国・地域】
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
(71)【出願人】
【識別番号】318001991
【氏名又は名称】エヌチェーン ライセンシング アーゲー
(74)【代理人】
【識別番号】100108453
【氏名又は名称】村山 靖彦
(74)【代理人】
【識別番号】100110364
【氏名又は名称】実広 信哉
(74)【代理人】
【識別番号】100133400
【氏名又は名称】阿部 達彦
(72)【発明者】
【氏名】アレクサンドル・パウノイウ
(72)【発明者】
【氏名】クレイグ・スティーヴン・ライト
(57)【要約】
P2PネットワークのP2Pノード間の接続を形成するためにブロックチェーンを使用するコンピュータ実装方法であって、各P2Pノードは、それぞれの公開鍵に関連付けられ、方法は、P2Pノードのうちの第2のP2Pノードに関連付けられたそれぞれの公開鍵を取得するステップと、第1のP2Pノードのそれぞれの公開鍵に対応する署名を用いて署名された第1の入力、第2のP2Pノードのそれぞれの公開鍵にロックされた第1の出力を備える、第1のブロックチェーントランザクションを生成するステップであって、第1のブロックチェーントランザクションが、P2Pネットワークのネットワークアドレスを備える、ステップと、ブロックチェーンネットワークにサブミットされるべき第1のブロックチェーントランザクションをブロックチェーン上に記録させるステップであって、第2のP2Pノードが、ブロックチェーン上での第1のブロックチェーントランザクションの記録に応答してP2Pネットワーク上で第1のP2Pノードと接続するように構成される、ステップとを備える。
【特許請求の範囲】
【請求項1】
ピアツーピアP2PネットワークのP2Pノード間の接続を形成するためにブロックチェーンを使用するコンピュータ実装方法であって、前記P2Pネットワークが、ネットワークアドレスに関連付けられ、複数のP2Pノードを備え、前記複数のP2Pノードの各々が、それぞれの公開鍵に関連付けられ、前記方法が、前記P2Pノードのうちの第1のP2Pノードによって実行され、
前記P2Pノードのうちの第2のP2Pノードに関連付けられたそれぞれの公開鍵を取得するステップと、
第1のブロックチェーントランザクションを生成するステップであって、前記第1のブロックチェーントランザクションが、i)前記第1のP2Pノードの前記それぞれの公開鍵に対応する署名を用いて署名された第1の入力、ii)前記第2のP2Pノードの前記それぞれの公開鍵にロックされた第1の出力を備え、前記第1のブロックチェーントランザクションが、前記P2Pネットワークの前記ネットワークアドレスを備える、ステップと、
ブロックチェーンネットワークの1つまたは複数のブロックチェーンノードにサブミットされるべき前記第1のブロックチェーントランザクションを前記ブロックチェーン上に記録させるステップであって、前記第2のP2Pノードが、前記ブロックチェーン上での前記第1のブロックチェーントランザクションの記録に応答して、前記P2Pネットワーク上で前記第1のP2Pノードと接続するように構成される、ステップとを備える、
コンピュータ実装方法。
【請求項2】
前記複数のP2Pノードの各々が、それぞれの識別子に関連付けられ、前記第1のブロックチェーントランザクションが、前記第1のP2Pノードの前記それぞれの識別子を備える、請求項1に記載の方法。
【請求項3】
各それぞれのP2Pノードに関連付けられた前記それぞれの識別子が、認証局によって認証される、請求項2に記載の方法。
【請求項4】
前記第2のP2Pノードに関連付けられた前記それぞれの公開鍵の前記取得するステップが、各それぞれのP2Pノードの前記それぞれの公開鍵を備えるリソースを照会するステップを備える、請求項1から3のいずれか一項に記載の方法。
【請求項5】
前記リソースがドメインネームシステムDNSサービスを備える、請求項4に記載の方法。
【請求項6】
前記リソースが、それぞれのP2Pノードごとに、前記それぞれのP2Pノードに関連付けられたそれぞれのインターネットプロトコルIPアドレスを備え、前記第2のP2Pノードに関連付けられた前記それぞれの公開鍵の前記取得するステップが、前記第2のP2Pノードに関連付けられた前記それぞれのIPアドレスを取得するステップを備える、請求項4または5に記載の方法。
【請求項7】
前記第2のP2Pノードの前記それぞれのIPアドレスを使用して前記第2のP2Pノードとのインターネットハンドシェイクを開始するステップと、
デジタル署名を用いて署名された前記第2のP2Pノードの前記それぞれのIPアドレスを前記第2のP2Pノードから取得するステップと、
前記第2のP2Pノードの前記それぞれの公開鍵を使用して前記デジタル署名を検証するステップとを備え、前記第1のブロックチェーントランザクションの前記生成するステップが、前記デジタル署名が検証されることを条件とする、
請求項6に記載の方法。
【請求項8】
前記第1のP2Pノードが、それぞれのRSA鍵を有し、前記第1のP2Pノードの前記それぞれの公開鍵に対応する前記署名を生成するために使用される前記第1のP2Pノードのそれぞれの秘密鍵が、1つまたは複数のハッシュ関数を用いて前記第1のP2Pノードの少なくとも前記それぞれのRSA鍵をハッシュすることによって生成される、請求項1から7のいずれか一項に記載の方法。
【請求項9】
前記第1のP2Pノードの前記それぞれの秘密鍵が、少なくとも2つのハッシュ関数を用いて前記第1のP2Pノードの少なくとも前記それぞれのRSA鍵をハッシュすることによって生成される、請求項8に記載の方法。
【請求項10】
前記第1のブロックチェーントランザクションが、前記第1のP2Pノードに関連するそれぞれの専門化を示す1つまたは複数のそれぞれの専門化フラグを備える、請求項1から9のいずれか一項に記載の方法。
【請求項11】
前記第1のブロックチェーンがiii)第2の出力を備え、前記第2の出力が、前記P2Pネットワークの前記ネットワークアドレス、および前記第1のP2Pノードのそれぞれの識別子を備える、請求項1から10のいずれか一項に記載の方法。
【請求項12】
前記第1のブロックチェーントランザクションの第2の出力が、前記1つまたは複数のそれぞれの専門化フラグを備える、請求項10および11に記載の方法。
【請求項13】
前記第1のブロックチェーントランザクションの前記第1の出力が、前記P2Pネットワークの前記ネットワークアドレス、および前記第1のP2Pノードのそれぞれの識別子を備える、請求項1から10のいずれか一項に記載の方法。
【請求項14】
前記第1のブロックチェーントランザクションの前記第1の出力が、前記1つまたは複数のそれぞれの専門化フラグを備える、請求項10または13に記載の方法。
【請求項15】
前記第1のブロックチェーンがiv)第3の出力を備え、ブロックチェーントランザクションの入力と一緒に実行されたとき、前記第3の出力が、a)前記第1のP2Pノードに関連付けられたそれぞれの公開鍵に対応する署名、またはb)前記第2のP2Pノードに関連付けられたそれぞれの公開鍵に対応するそれぞれの署名のいずれかを、前記ブロックチェーントランザクションの前記入力が備えることを必要とするように構成され、前記第2のP2Pノードが、前記第1のブロックチェーントランザクションの前記第3の出力の消費の成功に応答して前記第1のP2Pノードとの接続を断つように構成される、請求項1から14のいずれか一項に記載の方法。
【請求項16】
前記第3の出力が、チャレンジデータのハッシュを備え、前記第3の出力が、a)前記第1のP2Pノードに関連付けられたそれぞれの公開鍵に対応する前記署名、またはb)前記第2のP2Pノードに関連付けられたそれぞれの公開鍵に対応する前記それぞれの署名のいずれか、および前記チャレンジデータを、前記ブロックチェーントランザクションの前記入力が備えることを必要とするように構成される、請求項15に記載の方法。
【請求項17】
第2のブロックチェーントランザクションを生成するステップであって、前記第2のブロックチェーントランザクションが、前記第1のブロックチェーントランザクションの前記第3の出力を参照するとともに、前記第1のP2Pノードに関連付けられた前記それぞれの公開鍵に対応する前記署名を備える、入力を備える、ステップと、
ブロックチェーンネットワークの1つまたは複数のブロックチェーンノードにサブミットされるべき前記第2のブロックチェーントランザクションを前記ブロックチェーン上に記録させるステップであって、前記第2のブロックチェーントランザクションが、前記第1のP2Pノードとの接続を断つための前記第2のP2Pノードへのシグナリングのためのものである、ステップと
を備える、請求項15または16に記載の方法。
【請求項18】
前記P2Pノードのうちの異なるそれぞれのP2Pノードに各々が関連付けられた1つまたは複数のそれぞれの公開鍵を取得するステップと、
前記1つまたは複数のそれぞれの公開鍵の各々に対して、それぞれのブロックチェーントランザクションを生成するステップであって、前記それぞれのブロックチェーントランザクションが、i)前記第1のP2Pノードの前記それぞれの公開鍵に対応する署名を用いて署名された第1の入力、およびii)前記異なるそれぞれのP2Pノードの前記それぞれの公開鍵にロックされた第1の出力を備え、前記それぞれのブロックチェーントランザクションが、前記P2Pネットワークの前記ネットワークアドレスを備える、ステップと、
前記ブロックチェーンネットワークの1つまたは複数のブロックチェーンノードにサブミットされるべき前記それぞれのブロックチェーントランザクションの各々を前記ブロックチェーン上に記録させるステップであって、各異なるそれぞれのP2Pノードが、前記ブロックチェーン上での前記それぞれのブロックチェーントランザクションの記録に応答して前記第1のP2Pノードと接続するように構成される、ステップと
を備える、請求項1から17のいずれか一項に記載の方法。
【請求項19】
前記ブロックチェーンが、i)第3のP2Pノードの前記それぞれの公開鍵に対応する署名を用いて署名された入力、およびii)第4のP2Pノードの前記それぞれの公開鍵にロックされた第1の出力を備える、第3のブロックチェーントランザクションを備え、前記第3のブロックチェーントランザクションが、前記P2Pネットワークの前記ネットワークアドレスを備え、前記方法が、
前記第3のブロックチェーントランザクションに基づいて、前記第3のP2Pノードが前記第4のP2Pノードに接続されていることを決定するステップを備える、
請求項1から18のいずれか一項に記載の方法。
【請求項20】
複数のそれぞれの要求トランザクションを取得するステップであって、各それぞれの要求トランザクションが、それぞれのP2Pノードの前記それぞれの公開鍵にロックされたそれぞれの第1の出力を備え、前記それぞれの第1の出力が、それぞれの金額のデジタル資産をロックし、各それぞれの要求トランザクションが、前記P2Pネットワークの前記ネットワークアドレスを備え、各それぞれの要求トランザクションが、それぞれのタイムスタンプに関連付けられる、ステップと、
各それぞれの要求トランザクションの前記それぞれの金額およびそれぞれのタイムスタンプに基づいて回帰モデルを算出するステップと、
ターゲットタイムスタンプを想定してターゲット金額を決定するために前記回帰モデルを使用するステップであって、前記第1のトランザクションの前記第1の出力が、前記ターゲット金額の前記デジタル資産をロックする、ステップと
を備える、請求項1から19のいずれか一項に記載の方法。
【請求項21】
前記取得するステップが、前記ブロックチェーンから前記複数のそれぞれの要求トランザクションのうちの少なくともいくつかを取得するステップを備える、請求項20に記載の方法。
【請求項22】
前記取得するステップが、サービスプロバイダから前記複数のそれぞれの要求トランザクションのうちの少なくともいくつかを受信するステップを備える、請求項20または21に記載の方法。
【請求項23】
前記回帰モデルが線形回帰モデルである、請求項20から22のいずれか一項に記載の方法。
【請求項24】
ピアツーピアP2PネットワークのP2Pノード間の接続を形成するためにブロックチェーンを使用するコンピュータ実装方法であって、前記P2Pネットワークが、ネットワークアドレスに関連付けられ、複数のP2Pノードを備え、前記複数のP2Pノードの各々が、それぞれの公開鍵に関連付けられ、前記ブロックチェーンが、第1のブロックチェーントランザクションを備え、前記第1のブロックチェーントランザクションが、i)第1のP2Pノードの前記それぞれの公開鍵に対応する署名を用いて署名された第1の入力、ii)第2のP2Pノードの前記それぞれの公開鍵にロックされた第1の出力を備え、前記第1のブロックチェーントランザクションが、前記P2Pネットワークの前記ネットワークアドレスを備え、前記方法が、前記P2Pノードのうちの第2のP2Pノードによって実行され、
前記ブロックチェーンが前記第1のブロックチェーントランザクションを備えることを決定するステップと、
前記決定するステップに応答して、前記P2Pネットワーク上で前記第1のP2Pノードと接続するステップとを備える、
コンピュータ実装方法。
【請求項25】
前記P2Pネットワーク上で前記第1のP2Pノードと前記接続するステップが、前記P2Pネットワーク上で前記第2のP2Pが通信できるP2Pノードのリストに前記第1のP2Pノードを加えるステップを備える、請求項24に記載の方法。
【請求項26】
前記第1のP2Pノードからインターネットハンドシェイクを受信するステップと、
前記第2のP2Pノードの前記それぞれの公開鍵に対応するデジタル署名を用いて署名された前記第2のP2PノードのそれぞれのIPアドレスを前記第1のP2Pノードへ送るステップと
を備える、請求項24または25に記載の方法。
【請求項27】
前記第2のP2Pノードが、それぞれのRSA鍵を有し、前記第2のP2Pノードの前記それぞれの公開鍵に対応する前記署名を生成するために使用される前記第2のP2Pノードのそれぞれの秘密鍵が、1つまたは複数のハッシュ関数を用いて前記第2のP2Pノードの少なくとも前記それぞれのRSA鍵をハッシュすることによって生成される、請求項26に記載の方法。
【請求項28】
前記第1のブロックチェーントランザクションが、前記第1のP2Pノードに関連するそれぞれの専門化を示す1つまたは複数のそれぞれの専門化フラグを備え、前記方法が、
前記1つまたは複数のそれぞれの専門化フラグによって示されるような前記第1のP2Pノードに関連する前記それぞれの専門化に基づいて第1のP2Pノードと通信するステップを備える、
請求項24またはそれに従属するいずれか一項に記載の方法。
【請求項29】
前記第1のブロックチェーンが第3の出力を備え、ブロックチェーントランザクションの入力と一緒に実行されたとき、前記第3の出力が、a)前記第1のP2Pノードに関連付けられたそれぞれの公開鍵に対応する署名、またはb)前記第2のP2Pノードに関連付けられたそれぞれの公開鍵に対応するそれぞれの署名のいずれかを、前記ブロックチェーントランザクションの前記入力が備えることを必要とするように構成され、前記方法が、
前記第3の出力が首尾よく消費されていることを決定するステップと、
前記決定するステップに応答して、前記P2Pネットワーク上で前記第1のP2Pノードとの接続を断つステップとを備える、
請求項24またはそれに従属するいずれか一項に記載の方法。
【請求項30】
前記第3の出力が首尾よく消費されていることを前記決定するステップが、
第2のブロックチェーントランザクションを生成するステップであって、前記第2のブロックチェーントランザクションが、前記第1のブロックチェーントランザクションの前記第3の出力を参照するとともに、前記第2のP2Pノードに関連付けられた前記それぞれの公開鍵に対応する前記署名を備える、入力を備える、ステップと、
ブロックチェーンネットワークの1つまたは複数のブロックチェーンノードにサブミットされるべき前記第2のブロックチェーントランザクションを前記ブロックチェーン上に記録させるステップとを備える、
請求項29に記載の方法。
【請求項31】
前記第3の出力が、チャレンジデータのハッシュを備え、前記第3の出力が、a)前記第1のP2Pノードに関連付けられたそれぞれの公開鍵に対応する前記署名、またはb)前記第2のP2Pノードに関連付けられたそれぞれの公開鍵に対応する前記それぞれの署名のいずれか、および前記チャレンジデータを、前記ブロックチェーントランザクションの前記入力が備えることを必要とするように構成され、前記方法が、
前記チャレンジデータを取得するステップを備え、前記第2のブロックチェーントランザクションの前記入力が、前記チャレンジデータを備える、
請求項30に記載の方法。
【請求項32】
前記チャレンジデータが認証局から取得される、請求項31に記載の方法。
【請求項33】
前記第2のブロックチェーントランザクションの前記生成するステップが、前記第1のP2Pノードが前記P2Pネットワーク上でオフラインに進んでおり、および/または不正直に行動しているという決定に応答する、請求項30またはそれに従属するいずれか一項に記載の方法。
【請求項34】
1つまたは複数のメモリユニットを備えるメモリと、
1つまたは複数の処理ユニットを備える処理装置とを備え、前記メモリが、前記処理装置上で動作するように構成されたコードを記憶し、前記コードが、前記処理装置上にあるときに請求項1から33のいずれか一項に記載の方法を実行するように構成される、
コンピュータ機器。
【請求項35】
コンピュータ可読ストレージ上に組み込まれ、1つまたは複数のプロセッサ上で動作するときに請求項1から33のいずれか一項に記載の方法を実行するように構成された、コンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、ピアツーピア(P2P)ネットワークのP2Pノード間の接続を形成するためにブロックチェーンを使用する方法に関する。本方法は、P2Pノード間の接続の立証を可能にする。
【背景技術】
【0002】
ブロックチェーンとは、ある形態の分散型データ構造を指し、ブロックチェーンの複製コピーが、分散ピアツーピア(P2P)ネットワーク(以下で「ブロックチェーンネットワーク」と呼ばれる)の中の複数のノードの各々において維持され広く公表される。ブロックチェーンはデータのブロックのチェーンを備え、各ブロックは1つまたは複数のトランザクションを備える。いわゆる「コインベーストランザクション」以外の各トランザクションは、1つまたは複数のコインベーストランザクションに戻る1つまたは複数のブロックに広がることがある、シーケンスの中の先行するトランザクションを指し示す。コインベーストランザクションは以下でさらに説明される。ブロックチェーンネットワークにサブミットされるトランザクションは、新しいブロックの中に含められる。新しいブロックは、しばしば、「マイニング」と呼ばれるプロセスによって作成され、このプロセスは、複数のノードの各々が競合して「プルーフオブワーク」を実行すること、すなわち、ブロックチェーンの新しいブロックの中に含められるのを待っている、順序付けおよび有効化された保留トランザクションの規定されたセットの表現に基づいて、暗号パズルを解くこと、を伴う。いくつかのノードにおいてブロックチェーンがプルーニングされてよいこと、およびブロックの公開が単なるブロックヘッダの公開を通じて達成され得ることに留意されたい。
【0003】
ブロックチェーンにおけるトランザクションは、以下の目的、すなわち、デジタル資産(すなわち、いくつかのデジタルトークン)を運ぶこと、仮想化された台帳もしくはレジストリの中のエントリのセットを順序付けること、タイムスタンプエントリを受信および処理すること、ならびに/またはインデックスポインタを時間順序付けすることのうちの、1つまたは複数のために使用されてよい。ブロックチェーンはまた、ブロックチェーンの上部に追加の機能性を階層化するために活用され得る。たとえば、ブロックチェーンプロトコルは、追加のユーザデータ、またはトランザクションの中のデータへのインデックスの記憶を可能にし得る。単一のトランザクション内に記憶され得る最大データ容量に対して、あらかじめ指定された制限がなく、したがって、ますます複雑なデータが組み込まれ得る。たとえば、このことは、ブロックチェーンの中の電子文書、またはオーディオもしくはビデオデータを記憶するために使用されてよい。
【0004】
ブロックチェーンネットワークのノード(しばしば、「マイナー」と呼ばれる)は、後でより詳細に説明される分散トランザクション登録および検証プロセスを実行する。要約すれば、このプロセス中、ノードはトランザクションを有効化し、ノードがそれに対して有効なプルーフオブワーク解を識別することを試みるブロックテンプレートの中に、トランザクションを挿入する。有効な解が見つかると、新しいブロックがネットワークの他のノードに伝搬され、したがって、各ノードがブロックチェーン上に新しいブロックを記録することを可能にする。トランザクションをブロックチェーンの中に記録させるために、ユーザ(たとえば、ブロックチェーンクライアントアプリケーション)は、伝搬されるべきネットワークのノードのうちの1つへトランザクションを送る。トランザクションを受信するノードは、有効化されたトランザクションを新しいブロックの中に組み込むプルーフオブワーク解を見つけるために競争してよい。各ノードは、トランザクションが有効となるための1つまたは複数の条件を含む、同じノードプロトコルを執行するように構成される。無効なトランザクションは、伝搬されることもブロックの中に組み込まれることもない。トランザクションが有効化され、それによって、ブロックチェーン上に受け入れられると想定すると、その場合、(任意のユーザデータを含む)トランザクションは、不変の公的な記録としてブロックチェーンネットワークの中のノードの各々において、そのように登録およびインデックス付けされたままである。
【0005】
プルーフオブワークパズルを首尾よく解いて最新のブロックを作成したノードは、通常、「コインベーストランザクション」と呼ばれる新規トランザクションを用いて報酬が与えられ、新規トランザクションは、ある金額のデジタル資産、すなわち、いくつかのトークンを分配する。無効なトランザクションの検出および拒絶は、ネットワークのエージェントとして働く、競合するノードのアクションによって執行され、不正行為を報告および遮断することが奨励される。情報の広範な公開は、ユーザがノードの実行を継続的に監査することを可能にする。単なるブロックヘッダの公開が、ブロックチェーンの進行中の完全性を参加者が保証することを可能にする。
【0006】
「出力ベースの」モデル(UTXOベースのモデルと呼ばれることがある)では、所与のトランザクションのデータ構造は、1つまたは複数の入力および1つまたは複数の出力を備える。任意の消費可能な出力は、トランザクションの前進しているシーケンスから導出可能な、ある金額のデジタル資産を指定する要素を備える。消費可能な出力は、UTXO(「未消費トランザクション出力」)と呼ばれることがある。出力は、出力の将来の償還に対する条件を指定するロッキングスクリプトをさらに備えてよい。ロッキングスクリプトは、デジタルトークンまたはデジタル資産を有効化および移転するために必要な条件を規定する述語である。(コインベーストランザクション以外の)トランザクションの各入力は、先行するトランザクションの中のそのような出力へのポインタ(すなわち、参照)を備え、指し示された出力のロッキングスクリプトをロック解除するためのアンロッキングスクリプトをさらに備えてよい。そのため、1対のトランザクションを考慮に入れると、それらを第1のトランザクションおよび第2のトランザクション(または「ターゲット」トランザクション)と呼ぶ。第1のトランザクションは、ある金額のデジタル資産を指定し、および出力をロック解除することの1つまたは複数の条件を規定するロッキングスクリプトを備える、少なくとも1つの出力を備える。第2の、ターゲットトランザクションは、第1のトランザクションの出力へのポインタ、および第1のトランザクションの出力をロック解除するためのアンロッキングスクリプトを備える、少なくとも1つの入力を備える。
【0007】
そのようなモデルでは、第2の、ターゲットトランザクションが、ブロックチェーンの中で伝搬および記録されるべきブロックチェーンネットワークへ送られるとき、各ノードにおいて適用される、有効性に対する基準のうちの1つは、第1のトランザクションのロッキングスクリプトの中で規定された1つまたは複数の条件のすべてをアンロッキングスクリプトが満たすことである。別の基準は、第1のトランザクションの出力が別のもっと前の有効なトランザクションによってすでに償還されていないことである。これらの条件のうちのいずれかに従ってターゲットトランザクションが無効であることを発見した任意のノードは、それを(有効なトランザクションとして、しかし場合によっては無効なトランザクションを登録するために)伝搬させることも、ブロックチェーンの中に記録されるべき新しいブロックの中にそれを含めることもしない。
【0008】
代替のタイプのトランザクションモデルは、勘定ベースのモデルである。この場合、各トランザクションは、過去のトランザクションのシーケンスの中の先行するトランザクションのUTXOに戻って参照することによるのではなく、むしろ完全な勘定残高への参照によって、移転されるべき金額を規定する。すべての勘定の現在の状態は、ブロックチェーンとは別個のノードによって記憶され、絶えず更新される。
【発明の概要】
【発明が解決しようとする課題】
【0009】
ピアツーピア(P2P)ネットワークは、インターネット通信および情報共有の発展における駆動力のうちの1つとなっている。特に、2009年からブロックチェーンネットワークはP2Pネットワークサービスにおける暗号学的革新となっている。BitTorrentネットワーク、Kazaa、またはGnutellaなどの、有力なファイル共有サービスは、よく知られているP2Pネットワークの他の例である。
【0010】
しばしば、P2Pネットワークに加入するために、すなわち、P2Pネットワークの他のP2Pノードとの接続を形成するために、P2Pネットワークのノード(「P2Pノード」)が奮闘することがある時間がある。たとえば、初めてP2Pネットワークに加入するP2Pノードは、新たに加入したそのP2Pノードを他のP2Pノードが認識していないとき、接続を形成するために奮闘することがある。このことは、既存のP2Pノードが新たに加入したP2Pノードと通信しない(たとえば、それとデータを共有しない)場合があることを意味する。このことは、新たに加入したP2Pノードが、データを他のP2Pノードへ送信するためのより効率的な経路を与えることがあるとき、非効率性を引き起こすことがある。したがって、P2Pノード間の接続が形成され得るようにP2Pノードが他のP2Pノードに身元を明かすことを可能にすること、また同様にP2Pノードがネットワークの他のP2Pノードを識別することを可能にすることが望ましい。
【課題を解決するための手段】
【0011】
本明細書で開示する一態様によれば、ピアツーピア(P2P)ネットワークのP2Pノード間の接続を形成するためにブロックチェーンを使用するコンピュータ実装方法が提供され、P2Pネットワークは、ネットワークアドレスに関連付けられ、複数のP2Pノードを備え、複数のP2Pノードの各々は、それぞれの公開鍵に関連付けられ、方法は、P2Pノードのうちの第1のP2Pノードによって実行され、P2Pノードのうちの第2のP2Pノードに関連付けられたそれぞれの公開鍵を取得するステップと、第1のブロックチェーントランザクションを生成するステップであって、第1のブロックチェーントランザクションが、i)第1のP2Pノードのそれぞれの公開鍵に対応する署名を用いて署名された第1の入力、ii)第2のP2Pノードのそれぞれの公開鍵にロックされた第1の出力を備え、第1のブロックチェーントランザクションが、P2Pネットワークのネットワークアドレスを備える、ステップと、ブロックチェーンネットワークの1つまたは複数のブロックチェーンノードにサブミットされるべき第1のブロックチェーントランザクションをブロックチェーン上に記録させるステップであって、第2のP2Pノードが、ブロックチェーン上での第1のブロックチェーントランザクションの記録に応答してP2Pネットワーク上で第1のP2Pノードと接続するように構成される、ステップとを備える。
【0012】
本明細書で開示する別の態様によれば、ピアツーピア(P2P)ネットワークのP2Pノード間の接続を形成するためにブロックチェーンを使用するコンピュータ実装方法が提供され、P2Pネットワークは、ネットワークアドレスに関連付けられ、複数のP2Pノードを備え、複数のP2Pノードの各々は、それぞれの公開鍵に関連付けられ、ブロックチェーンは、第1のブロックチェーントランザクションを備え、第1のブロックチェーントランザクションは、i)第1のP2Pノードのそれぞれの公開鍵に対応する署名を用いて署名された第1の入力、ii)第2のP2Pノードのそれぞれの公開鍵にロックされた第1の出力を備え、第1のブロックチェーントランザクションは、P2Pネットワークのネットワークアドレスを備え、方法は、P2Pノードのうちの第2のP2Pノードによって実行され、ブロックチェーンが第1のブロックチェーントランザクションを備えることを決定するステップと、前記決定するステップに応答して、P2Pネットワーク上で第1のP2Pノードと接続するステップとを備える。
【0013】
本開示は、P2Pノードが他のP2Pノードに身元を明かすこと、およびP2Pノード間の接続が作られ得るかまたは作られていることをシグナリングすることを可能にするために、ブロックチェーンを利用する。各P2Pノードは、公開鍵(たとえば、認証された公開鍵)を有する。第1のP2Pノード(たとえば、初めてP2Pネットワークに加入するノード)は、ブロックチェーントランザクションを第2のP2Pノード(たとえば、P2Pネットワークの既存のノード)へ送り、というより、たとえば、ペイツーパブリックキーハッシュ(P2PKH: pay-to-public-key-hash)出力を使用して、トランザクションの出力を第2のノードの公開鍵にロックする。第1のP2Pノードの公開鍵に対応する(すなわち、それを使用して検証可能な)署名を用いて署名されたトランザクションは、P2Pネットワークのネットワークアドレスを含む。トランザクションは、トランザクションの中に含まれるネットワークアドレスを有するP2Pネットワーク上で第1のP2Pノードがピアとして利用可能であること(すなわち、それとの接続を形成すること)を第2のP2Pノードに警告する。第2のP2Pノードは、次いで、P2Pネットワーク上で第1のP2Pノードとの接続を形成してよい。いくつかの例では、ノードとの接続を形成することは、それと通信するために、たとえば、それに、またはそれを介してデータをルーティングするために利用可能な、ピアのリストにノードを加えることを備えてよい。
【0014】
ブロックチェーンの使用は、トランザクションを公開鍵へ送ることによって、その公開鍵を有する任意の他のP2Pノードに第1のP2Pノードが接続することを可能にする。P2Pノードがより多くのノードに接続できるので、P2Pネットワークの接続性およびスケーラビリティが改善される。ネットワークのより多くのP2Pノードとは、より多くの利用可能な経路がノード間にあることを意味するので、このことは、あるP2Pノードから別のP2Pノードへデータが送信されることになる場合に特に有用である。その上、ブロックチェーン上に記録される結果としてP2Pネットワーク上でのノード間の接続が公に利用可能にされ、他のP2Pノードが、どのノードが他のどのノードに接続されているのかを決定すること、したがって、特定の経路を使用してデータをエンドノードにルーティングできることを意味する。言い換えれば、P2Pネットワークのトポロジーがブロックチェーン上に配置され、デジタル的に署名されることによりP2Pノードによって立証される。
【0015】
本明細書で使用するとき、「P2Pネットワーク」へのいかなる参照も、ブロックチェーンネットワーク以外のP2Pネットワーク、たとえば、一般的なP2Pコンピュータネットワークを意味するものとして理解されるべきであることに留意されたい。P2Pノードへのいかなる参照も、P2Pネットワークのノードを意味するものとして理解されるべきである。
【0016】
本開示の実施形態の理解を支援するために、またそのような実施形態がどのように具体化され得るかを示すために、単に例として添付図面への参照が行われる。
【図面の簡単な説明】
【0017】
【
図1】ブロックチェーンを実施するためのシステムの概略ブロック図である。
【
図2】ブロックチェーンの中に記録されてよいトランザクションのいくつかの例を概略的に示す図である。
【
図3A】クライアントアプリケーションの概略ブロック図である。
【
図3B】
図3Aのクライアントアプリケーションによって提示されてよい例示のユーザインターフェースの概略モックアップである。
【
図4】トランザクションを処理するためのいくつかのノードソフトウェアの概略ブロック図である。
【
図5】ブロックチェーンネットワークと相互作用するP2Pネットワークの一例を概略的に示す図である。
【
図6】第1のノードとともに利用可能な接続を第2のノードに警告するために使用される、例示のトランザクションを概略的に示す図である。
【
図7】第1のノードとともに利用可能な接続を第2のノードに警告し、第1のノードの専門分野を詳述するために使用される、例示のトランザクションを概略的に示す図である。
【
図8】第1のノードとともに利用可能な接続を第2のノードに警告するために使用される、別の例示のトランザクションを概略的に示す図である。
【
図9】第1のノードとの接続が利用不可能であることを第2のノードに警告するために使用される、例示のトランザクションを概略的に示す図である。
【
図10】第1のノードとの接続を終了させるために第2のノードによって使用される、例示のトランザクションを概略的に示す図である。
【
図11】第1のノードの専門分野を更新するために使用される、例示のトランザクションを概略的に示す図である。
【
図12】ブロックチェーンネットワークと相互作用するP2Pネットワークの別の例を概略的に示す図である。
【
図13】点の集合を近似している線形回帰モデルの出力を示すグラフである。
【
図14】別のノードからの接続を受け入れることをノードに奨励する、例示の履歴トランザクションを示す図である。
【
図15】第1のノードからの接続を受け入れることを第2のノードに奨励する、例示のトランザクションを示す図である。
【発明を実施するための形態】
【0018】
1. 例示のシステム概要
図1は、ブロックチェーン150を実施するための例示のシステム100を示す。システム100は、パケット交換ネットワーク101、典型的には、インターネットなどのワイドエリアインターネットワークを備えてよい。パケット交換ネットワーク101は、パケット交換ネットワーク101内でピアツーピア(P2P)ネットワーク106を形成するように構成されてよい複数のブロックチェーンノード104を備える。図示しないが、ブロックチェーンノード104は、ほぼ完全グラフとして構成されてよい。したがって、各ブロックチェーンノード104は、他のブロックチェーンノード104に強度に接続される。
【0019】
各ブロックチェーンノード104は、ノード104のうちの様々なノード104が、異なるピアに属する、ピアのコンピュータ機器を備える。各ブロックチェーンノード104は、1つまたは複数のプロセッサ、たとえば、1つまたは複数の中央処理ユニット(CPU)、アクセラレータプロセッサ、特定用途向けプロセッサ、および/またはフィールドプログラマブルゲートアレイ(FPGA)、ならびに特定用途向け集積回路(ASIC)などの他の機器を備える処理装置を備える。各ノードはまた、メモリ、すなわち、1つまたは複数の非一時的コンピュータ可読媒体の形態のコンピュータ可読ストレージを備える。メモリは、1つまたは複数のメモリ媒体、たとえば、ハードディスクなどの磁気媒体、ソリッドステートドライブ(SSD)、フラッシュメモリ、もしくはEEPROMなどの電子媒体、および/または光ディスクドライブなどの光媒体を採用する、1つまたは複数のメモリユニットを備えてよい。
【0020】
ブロックチェーン150は、データ151のブロックのチェーンを備え、ブロックチェーン150のそれぞれのコピーは、分散ネットワークまたはブロックチェーンネットワーク106の中の複数のブロックチェーンノード104の各々において維持される。上述のように、ブロックチェーン150のコピーを維持することとは、必ずしも全体的にブロックチェーン150を記憶することを意味するとは限らない。代わりに、ブロックチェーン150は、各ブロックチェーンノード150が各ブロック151のブロックヘッダ(以下で説明する)を記憶する限り、データからプルーニングされてよい。チェーンの中の各ブロック151は、1つまたは複数のトランザクション152を備え、トランザクションとは、このコンテキストでは、ある種類のデータ構造を指す。そのデータ構造の性質は、トランザクションモデルまたはトランザクション方式の一部として使用されるトランザクションプロトコルのタイプに依存する。所与のブロックチェーンは、全体にわたって、ある特定のトランザクションプロトコルを使用する。ある一般のタイプのトランザクションプロトコルでは、各トランザクション152のデータ構造は、少なくとも1つの入力および少なくとも1つの出力を備える。各出力は、特性としてデジタル資産の数量を表す金額を指定し、特性の一例は、出力が暗号学的にロックされるユーザ103である(ロック解除され、それによって、償還すなわち消費されるために、そのユーザの署名または他の解を必要とする)。各入力は、先行するトランザクション152の出力を指し示し、それによって、トランザクションをリンクする。
【0021】
各ブロック151はまた、ブロック151への連続した順序を規定するように、チェーンの中の以前に作成されたブロック151を指し示すブロックポインタ155を備える。(コインベーストランザクション以外の)各トランザクション152は、トランザクションのシーケンスへの順序を規定するように以前のトランザクションに戻るポインタを備える(トランザクション152のシーケンスが分岐することを許容されることに注意されたい)。ブロック151のチェーンは、チェーンの中の最初のブロックであったジェネシスブロック(Gb)153まで戻って完全に進む。チェーン150の中で初期の1つまたは複数の元のトランザクション152は、先行するトランザクションではなくジェネシスブロック153を指し示した。
【0022】
ブロックチェーンノード104の各々は、トランザクション152を他のブロックチェーンノード104に転送し、それによって、ネットワーク106全体にわたってトランザクション152を伝搬させるように構成される。各ブロックチェーンノード104は、ブロック151を作成するように、および同じブロックチェーン150のそれぞれのコピーをそれらのそれぞれのメモリの中に記憶するように構成される。各ブロックチェーンノード104はまた、ブロック151の中に組み込まれるのを待っているトランザクション152の順序付きセット(すなわち、「プール」)154を維持する。順序付きプール154は、しばしば、「メモリプール(mempool)」と呼ばれる。本明細書におけるこの用語は、任意の特定のブロックチェーン、プロトコル、またはモデルに限定することを意図しない。それは、有効としてノード104が受け入れており、同じ出力を消費することを試みている任意の他のトランザクションをノード104が受け入れないように義務付けられるべき、トランザクションの順序付きセットを指す。
【0023】
所与の現在のトランザクション152jにおいて、その(または、各)入力は、トランザクションのシーケンスの中の先行するトランザクション152iの出力を参照するポインタを備え、現在のトランザクション152jの中でこの出力が償還すなわち「消費」されることになることを指定する。概して、先行するトランザクションは、順序付きセット154または任意のブロック151の中の任意のトランザクションであり得る。先行するトランザクション152iは、現在のトランザクション152jが作成され、さらにはネットワーク106へ送られる時間において、必ずしも存在することを必要とするとは限らないが、現在のトランザクションが有効となるために、先行するトランザクション152iが存在し有効化される必要がある。したがって、本明細書における「先行する」とは、必ずしも時間的なシーケンスの中で作成するか、または送ることの時間とは限らない、ポインタによってリンクされた、論理シーケンスの中の先行要素(predecessor)を指し、したがって、そのことは、順序が狂ってトランザクション152i、152jが作成されるか、または送られることを必ずしも除外するとは限らない(オーファン(orphan)トランザクションにおける以下の説明を参照)。先行するトランザクション152iは、先行者(antecedent)トランザクションまたは先行要素トランザクションと等しく呼ばれることがある。
【0024】
現在のトランザクション152jの入力はまた、入力許可、たとえば、先行するトランザクション152iの出力がロックされるユーザ103aの署名を備える。今度は、現在のトランザクション152jの出力が、新たなユーザまたはエンティティ103bに暗号学的にロックされ得る。したがって、現在のトランザクション152jは、先行するトランザクション152iの入力の中で規定された金額を、現在のトランザクション152jの出力の中で規定されるような新たなユーザまたはエンティティ103bに移転することができる。場合によっては、トランザクション152は、複数のユーザ間またはエンティティ間(そのうちの1つは釣銭を出すために、元のユーザまたはエンティティ103aであり得る)で入力金額を分割するために複数の出力を有してよい。場合によっては、トランザクションはまた、1つまたは複数の先行するトランザクションの複数の出力からの金額を一緒に集め、および現在のトランザクションの1つまたは複数の出力を再配布するために、複数の入力を有することができる。
【0025】
ビットコインなどの出力ベースのトランザクションプロトコルによれば、個々のユーザまたは団体などのパーティ103が、(手作業で、またはパーティによって採用される自動化プロセスによってのいずれかで)新規トランザクション152jを制定することを望むとき、制定するパーティは、それのコンピュータ端末102から受信者へ新規トランザクションを送る。制定するパーティまたは受信者は、最終的にこのトランザクションをネットワーク106のブロックチェーンノード104のうちの1つまたは複数(今日では一般にサーバまたはデータセンターであるが、原理上は他のユーザ端末であり得る)へ送る。新規トランザクション152jを制定するパーティ103が、ブロックチェーンノード104のうちの1つまたは複数へトランザクションを直接送る場合があり、またいくつかの例では、受信者へ送らない場合があることも、除外されない。トランザクションを受信するブロックチェーンノード104は、ブロックチェーンノード104の各々において適用されるブロックチェーンノードプロトコルに従って、トランザクションが有効であるかどうかをチェックする。ブロックチェーンノードプロトコルは、通常、新規トランザクション152jにおける暗号署名が、予想される署名に整合することを、ブロックチェーンノード104がチェックすることを必要とし、そのことは、トランザクション152の順序付きシーケンスの中の以前のトランザクション152iに依存する。そのような出力ベースのトランザクションプロトコルでは、このことは、新規トランザクション152jの入力の中に含まれる、パーティ103の暗号署名または他の許可が、新規トランザクションが割り当てる、先行するトランザクション152iの出力の中で規定される条件に整合することを、チェックすることを備えてよく、この条件は、通常、新規トランザクション152jの入力の中の暗号署名または他の許可が、新規トランザクションの入力がリンクされる以前のトランザクション152iの出力をロック解除することを、少なくともチェックすることを備える。その条件は、少なくとも部分的には、先行するトランザクション152iの出力の中に含まれるスクリプトによって規定されてよい。代替として、それは、ブロックチェーンノードプロトコル単体によって単に固定され得るか、またはこれらの組合せに起因することができる。どちらにしても、新規トランザクション152jが有効である場合、ブロックチェーンノード104は、それをブロックチェーンネットワーク106の中の1つまたは複数の他のブロックチェーンノード104に転送する。これらの他のブロックチェーンノード104は、同じブロックチェーンノードプロトコルに従って同じテストを適用し、そのため、新規トランザクション152jを1つまたは複数のさらなるノード104に転送する等々である。このようにして、新規トランザクションは、ブロックチェーンノード104のネットワーク全体にわたって伝搬される。
【0026】
出力ベースのモデルでは、所与の出力(たとえば、UTXO)が割り当てられる(たとえば、消費される)かどうかの規定は、それがまだ、前方に位置する別のトランザクション152jの入力によって、ブロックチェーンノードプロトコルに従って有効に償還されているかどうかである。トランザクションが有効となるための別の条件は、それが償還することを試みる先行するトランザクション152iの出力が、すでに別のトランザクションによって償還されていないことである。再び、有効でない場合、トランザクション152jは、(無効としてフラグ付けされ警告のために伝搬されない限り)伝搬されないし、ブロックチェーン150の中に記録されない。このことは、同じトランザクションの出力を取引人が2回以上割り当てようとする二重消費に対して保護する。勘定ベースのモデルは、一方、勘定残高を維持することによって二重消費に対して保護する。再び、トランザクションの規定された順序があるので、任意の1つの時間において勘定残高は規定された単一の状態を有する。
【0027】
トランザクションを有効化することに加えて、ブロックチェーンノード104はまた、通常はマイニングと呼ばれるプロセスの中でトランザクションのブロックを作成する最初となるために競争し、マイニングは「プルーフオブワーク」によってサポートされる。ブロックチェーンノード104において、ブロックチェーン150上に記録されるブロック151の中にまだ出現していない有効なトランザクションの順序付きプール154に、新規トランザクションが加えられる。ブロックチェーンノードは、次いで、暗号パズルを解くことを試みることによって、トランザクションの順序付きセット154からトランザクション152の新しい有効なブロック151を組み立てるために競争する。通常、このことは、ナンスが保留トランザクションの順序付きプール154の表現に連結およびハッシュされると、次いで、ハッシュの出力が所定の条件を満たすような、「ナンス」値を求めて探索することを備える。たとえば、所定の条件とは、ハッシュの出力がいくつかの既定の数の先行ゼロを有することであってよい。これがある特定のタイプのプルーフオブワークパズルにすぎず、他のタイプが除外されないことに留意されたい。ハッシュ関数の特性とは、それの入力に関して予測できない出力をハッシュ関数が有することである。したがって、この探索は、ブルートフォースのみによって実行され得、したがって、パズルを解こうとしている各ブロックチェーンノード104において、かなりの量の処理リソースを費やす。
【0028】
パズルを解く第1のブロックチェーンノード104は、このことをネットワーク106に告知し、証明として解を提供し、その証明は、次いで、ネットワークの中の他のブロックチェーンノード104によって容易にチェックされ得る(ハッシュに解が与えられると、その解がハッシュの出力に条件を満足させることをチェックすることは簡単である)。第1のブロックチェーンノード104は、ブロックを受け入れ、したがって、プロトコル規則を執行する他のノードのしきい値総意にブロックを伝搬させる。トランザクションの順序付きセット154が、次いで、ブロックチェーンノード104の各々によって、新しいブロック151としてブロックチェーン150の中に記録されるようになる。チェーンの中の以前に作成されたブロック151n-1を新しいブロック151nが指し示すことにも、ブロックポインタ155が割り当てられる。プルーフオブワーク解を作成するために必要とされる、たとえば、ハッシュの形態をなす、著しい量の取組みが、ブロックチェーンプロトコルの規則に従うように、第1のノード104の意図をシグナリングする。そのような規則は、さもなければ二重消費として知られる、以前に有効化されたトランザクションと同じ出力をそれが割り当てる場合、トランザクションを有効として受け入れないことを含む。作成されると、ブロック151は、ブロックチェーンネットワーク106の中のブロックチェーンノード104の各々において認識および維持されるので、修正され得ない。ブロックポインタ155はまた、連続した順序をブロック151に課する。ネットワーク106の中の各ブロックチェーンノード104において、順序付きブロックの中にトランザクション152が記録されるので、したがって、このことはトランザクションの不変の公的な台帳を提供する。
【0029】
任意の所与の時間においてパズルを解くために競争する異なるブロックチェーンノード104が、それらがいつ解を求めて探索し始めたのか、またはトランザクションが受信された順序に応じて、任意の所与の時間においてまだ公開されていないトランザクションのプール154の異なるスナップショットに基づいて、そのことを行っている場合があることに留意されたい。それらのそれぞれのパズルを最初に解く人は誰でも、どのトランザクション152が次の新しいブロック151nの中にどの順序で含められるのかを規定し、未公開トランザクションの現在のプール154が更新される。ブロックチェーンノード104は、次いで、未公開トランザクションの新たに規定された順序付きプール154からブロックを作成するために競争することを継続する等々である。2つのブロックチェーンノード104が互いの極めて短い時間内にそれらのパズルを解き、その結果、ブロックチェーンの矛盾する見方がノード104間で伝搬する場合である、起こり得る任意の「フォーク」を解決するためのプロトコルも存在する。要するに、最も長く伸びる、フォークのどのプロングも、最終的なブロックチェーン150になる。同じトランザクションが両方のフォークの中に出現するので、このことがネットワークのユーザまたはエージェントに影響を及ぼさないはずであることに留意されたい。
【0030】
ビットコインブロックチェーン(および、ほとんどの他のブロックチェーン)によれば、新しいブロック104を首尾よく構築するノードは、(ある金額のデジタル資産を、あるエージェントまたはユーザから別のエージェントまたはユーザに移転する、エージェント間またはユーザ間のトランザクションとは反対に)規定された追加の数量のデジタル資産を分配する、新しい特別な種類のトランザクションの中に、受け入れられた追加の金額のデジタル資産を新たに割り当てるための能力が与えられる。この特別なタイプのトランザクションは、通常、「コインベーストランザクション」と呼ばれるが、「開始トランザクション(initiation transaction)」または「生成トランザクション(generation transaction)」と呼ばれることもある。それは、通常、新しいブロック151nの最初のトランザクションを形成する。この特別なトランザクションが後で償還されることを可能にするプロトコル規則に従うために、プルーフオブワークは、新しいブロックを構築するノードの意図をシグナリングする。ブロックチェーンプロトコル規則は、この特別なトランザクションが償還され得る前に、償還期間、たとえば、100個のブロックを必要とすることがある。しばしば、通常の(非生成)トランザクション152も、そのトランザクションがその中で公開されたブロック151nを作成したブロックチェーンノード104にさらに報酬を与えるために、それの出力のうちの1つの中で追加のトランザクション料金を指定する。この料金は、通常、「トランザクション料金」と呼ばれ、以下で説明される。
【0031】
トランザクション有効化および公開にリソースが関与することに起因して、一般に、ブロックチェーンノード104の少なくとも各々は、1つもしくは複数の物理サーバユニットを備えるサーバ、またはさらにはデータセンター全体の形態を取る。しかしながら、原理上、任意の所与のブロックチェーンノード104が、一緒にネットワーク化されたユーザ端末またはユーザ端末のグループの形態を取ることができる。
【0032】
各ブロックチェーンノード104のメモリは、それのそれぞれの1つまたは複数の役割を実行しブロックチェーンノードプロトコルに従ってトランザクション152を処理するために、ブロックチェーンノード104の処理装置上で動作するように構成されたソフトウェアを記憶する。本明細書においてブロックチェーンノード104にあるものとされる任意のアクションが、それぞれのコンピュータ機器の処理装置上でソフトウェアが動作することによって実行されてよいことが理解されよう。ノードソフトウェアは、アプリケーションレイヤ、またはオペレーティングシステムレイヤもしくはプロトコルレイヤなどの下位レイヤ、またはこれらの任意の組合せにおける1つまたは複数のアプリケーションの中に実装されてよい。
【0033】
消費するユーザの役割における複数のパーティ103の各々のコンピュータ機器102も、ネットワーク101に接続される。これらのユーザはブロックチェーンネットワーク106と相互作用してよいが、トランザクションを有効化すること、またはブロックを構築することに参加しない。これらのユーザまたはエージェント103のうちのいくつかは、トランザクションにおいて送出者および受信者として働くことがある。他のユーザは、必ずしも送出者または受信者として働くことなくブロックチェーン150と相互作用してよい。たとえば、いくつかのパーティは、ブロックチェーン150のコピーを記憶する(たとえば、ブロックチェーンノード104からブロックチェーンのコピーを取得した)記憶エンティティとして働いてよい。
【0034】
パーティ103の一部または全部は、異なるネットワーク、たとえば、ブロックチェーンネットワーク106の上部に重ねられたネットワークの一部として接続されてよい。ブロックチェーンネットワークのユーザ(しばしば、「クライアント」と呼ばれる)は、ブロックチェーンネットワーク106を含むシステムの一部であると言われてよいが、これらのユーザは、ブロックチェーンノードの必要とされる役割を実行しないのでブロックチェーンノード104ではない。代わりに、各パーティ103はブロックチェーンネットワーク106と相互作用してよく、それによって、ブロックチェーンノード106に接続すること(すなわち、それと通信すること)によってブロックチェーン150を利用してよい。2つのパーティ103およびそれらのそれぞれの機器102、すなわち、第1のパーティ103aおよびその人のそれぞれのコンピュータ機器102a、ならびに第2のパーティ103bおよびその人のそれぞれのコンピュータ機器102bが、例示のために図示される。はるかに多くのそのようなパーティ103およびそれらのそれぞれのコンピュータ機器102が存在しシステム100に参加していることがあるが、便宜上、それらが図示されないことが理解されよう。各パーティ103は、個人または団体であってよい。純粋に例として、第1のパーティ103aは本明細書でアリスと呼ばれ、第2のパーティ103bはボブと呼ばれるが、このことが限定的でなく、アリスまたはボブへの本明細書におけるいかなる参照も、それぞれ、「第1のパーティ」および「第2のパーティ」と置き換えられてよいことが、諒解されよう。
【0035】
各パーティ103のコンピュータ機器102は、1つまたは複数のプロセッサ、たとえば、1つもしくは複数のCPU、GPU、他のアクセラレータプロセッサ、特定用途向けプロセッサ、および/またはFPGAを備えるそれぞれの処理装置を備える。各パーティ103のコンピュータ機器102は、メモリ、すなわち、1つまたは複数の非一時的コンピュータ可読媒体の形態のコンピュータ可読ストレージをさらに備える。このメモリは、1つまたは複数のメモリ媒体、たとえば、ハードディスクなどの磁気媒体、SSD、フラッシュメモリ、もしくはEEPROMなどの電子媒体、および/または光ディスクドライブなどの光媒体を採用する1つまたは複数のメモリユニットを備えてよい。各パーティ103のコンピュータ機器102上のメモリは、処理装置上で動作するように構成された少なくとも1つのクライアントアプリケーション105のそれぞれのインスタンスを備えるソフトウェアを記憶する。本明細書において所与のパーティ103にあるものとされる任意のアクションが、それぞれのコンピュータ機器102の処理装置上で動作するソフトウェアを使用して実行されてよいことが、理解されよう。各パーティ103のコンピュータ機器102は、少なくとも1つのユーザ端末、たとえば、デスクトップもしくはラップトップコンピュータ、タブレット、スマートフォン、またはスマートウォッチなどのウェアラブルデバイスを備える。所与のパーティ103のコンピュータ機器102はまた、ユーザ端末を介してアクセスされるクラウドコンピューティングリソースなどの1つまたは複数の他のネットワーク化リソースを備えてよい。
【0036】
クライアントアプリケーション105は最初に、1つまたは複数の好適なコンピュータ可読記憶媒体上の任意の所与のパーティ103のコンピュータ機器102に提供されてよく、たとえば、サーバからダウンロードされてよく、あるいはリムーバブルSSD、フラッシュメモリキー、リムーバブルEEPROM、リムーバブル磁気ディスクドライブ、磁気フロッピーディスクもしくはテープ、CDもしくはDVD ROMなどの光ディスク、またはリムーバブル光学ドライブなどのような、リムーバブル記憶デバイス上に設けられてもよい。
【0037】
クライアントアプリケーション105は、少なくとも「金銭管理(wallet)」機能を備える。これは2つの主な機能性を有する。これらのうちの一方は、次いで、ブロックチェーンノード104のネットワーク全体にわたって伝搬され、それによって、ブロックチェーン150の中に含められるべき、トランザクション152を、それぞれのパーティ103が作成し、許可し(たとえば、署名し)、1つまたは複数のビットコインノード104へ送ることを可能にすることである。他方は、その人が現在所有するデジタル資産の金額をそれぞれのパーティに戻って報告することである。出力ベースのシステムでは、この第2の機能性は、当該のパーティに属するブロックチェーン150全体にわたって散乱される様々な152個のトランザクションの出力の中で規定された金額を照合することを備える。
【0038】
注記: 所与のクライアントアプリケーション105の中に統合されるものとして様々なクライアント機能性が説明されることがあるが、このことは必ずしも限定的であるとは限らず、代わりに、本明細書で説明するいかなるクライアント機能性も、代わりに、2つ以上の別々のアプリケーションの一組をなして実装されてよく、たとえば、APIを介してインターフェースするか、または一方は他方へのプラグインである。より一般的には、クライアント機能性は、アプリケーションレイヤ、もしくはオペレーティングシステムなどの下位レイヤ、またはこれらの任意の組合せにおいて実装され得る。以下はクライアントアプリケーション105に関して説明されるが、これが限定的でないことが諒解されよう。
【0039】
各コンピュータ機器102上のクライアントアプリケーションまたはソフトウェア105のインスタンスは、ネットワーク106のブロックチェーンノード104のうちの少なくとも1つに動作可能に結合される。このことは、クライアント105の金銭管理機能がトランザクション152をネットワーク106へ送ることを可能にする。クライアント105はまた、それぞれのどのパーティ103が受信者であるのかを、任意のトランザクションのためのブロックチェーン150に照会するために、ブロックチェーンノード104に接触することができる(または、実施形態では、ブロックチェーン150は、部分的にそれの公的な視界を通じてトランザクションの中に信用を与える公的な機構であるので、ブロックチェーン150の中の他のパーティのトランザクションを確かに検査する)。各コンピュータ機器102上の金銭管理機能は、トランザクションプロトコルに従ってトランザクション152を編成し、送るように構成される。上記で提示したように、各ブロックチェーンノード104は、ブロックチェーンノードプロトコルに従ってトランザクション152を有効化し、およびブロックチェーンネットワーク106全体にわたってそれらを伝搬させるためにトランザクション152を転送するように構成されたソフトウェアを動作させる。トランザクションプロトコルおよびノードプロトコルは互いに対応し、所与のトランザクションプロトコルは、所与のトランザクションモデルを一緒に実装して、所与のノードプロトコルとともに進む。同じトランザクションプロトコルが、ブロックチェーン150の中のすべてのトランザクション152に対して使用される。同じノードプロトコルが、ネットワーク106の中のすべてのノード104によって使用される。
【0040】
所与のパーティ103、たとえば、アリスは、ブロックチェーン150の中に含められるべき新規トランザクション152jを送ることを望むとき、(アリスのクライアントアプリケーション105の中の金銭管理機能を使用して)関連するトランザクションプロトコルに従って新規トランザクションを編成する。アリスは、次いで、アリスが接続されている1つまたは複数のブロックチェーンノード104へ、クライアントアプリケーション105からトランザクション152を送る。たとえば、これは、アリスのコンピュータ102に最も良好に接続されているブロックチェーンノード104であり得る。任意の所与のブロックチェーンノード104は、新規トランザクション152jを受信すると、ブロックチェーンノードプロトコルおよびそのそれぞれの役割に従って新規トランザクション152jを処理する。このことは、新たに受信されたトランザクション152jが「有効」であるためのいくつかの条件を満たすかどうかを最初にチェックすることを備え、そのことの例がより詳細に手短に説明される。いくつかのトランザクションプロトコルでは、有効化のための条件は、トランザクション152の中に含まれるスクリプトによって、トランザクションごとに構成可能であってよい。代替として、条件は、単にノードプロトコルの内蔵機能であり得るか、またはスクリプトとノードプロトコルとの組合せによって規定され得る。
【0041】
新たに受信されたトランザクション152jが有効と見なされるためのテストをパスする条件において(すなわち、それが「有効化」される条件において)、トランザクション152jを受信する任意のブロックチェーンノード104は、そのブロックチェーンノード104において維持される、トランザクションの順序付きセット154に、有効化された新しいトランザクション152を加える。さらに、トランザクション152jを受信する任意のブロックチェーンノード104は、有効化されたトランザクション152をネットワーク106の中の1つまたは複数の他のブロックチェーンノード104に前方へ伝搬させる。各ブロックチェーンノード104は同じプロトコルを適用するので、次いで、トランザクション152jが有効であると想定すると、このことは、トランザクション152jがまもなく全体的なネットワーク106全体にわたって伝搬されることを意味する。
【0042】
所与のブロックチェーンノード104において維持される保留トランザクションの順序付きプール154に入ることが許されると、そのブロックチェーンノード104は、新規トランザクション152を含む154のそれらのそれぞれのプールの最新のバージョンにおいてプルーフオブワークパズルを解くことを競合し始める(他のブロックチェーンノード104が、トランザクションの異なるプール154に基づいてパズルを解こうとしている場合があるが、そこに最初に達する人は誰でも、最新のブロック151の中に含められるトランザクションのセットを規定することを、想起されたい。最終的に、ブロックチェーンノード104は、アリスのトランザクション152jを含む順序付きプール154の一部に対してパズルを解く)。新規トランザクション152jを含むプール154に対してプルーフオブワークが行われていると、それは不変にブロックチェーン150の中のブロック151のうちの1つの一部になる。各トランザクション152は、もっと前のトランザクションに戻るポインタを備え、そのため、トランザクションの順序も不変に記録される。
【0043】
異なるブロックチェーンノード104は、所与のトランザクションの異なるインスタンスを最初に受信することがあり、したがって、新しいブロック151の中で1つのインスタンスが公開される前にどのインスタンスが「有効」であるのかの、矛盾する見方を有し、その点において、公開されたインスタンスが唯一の有効なインスタンスであることに、すべてのブロックチェーンノード104が合意する。あるブロックチェーンノード104が、有効として1つのインスタンスを受け入れ、次いで、ブロックチェーン150の中に第2のインスタンスが記録されていることを発見する場合、そのブロックチェーンノード104は、これを受け入れなければならず、そのブロックチェーンノード104が最初に受け入れたインスタンス(すなわち、ブロック151の中で公開されていないインスタンス)を廃棄する(すなわち、無効として扱う)。
【0044】
いくつかのブロックチェーンネットワークによって運用される代替のタイプのトランザクションプロトコルは、勘定ベースのトランザクションモデルの一部として「勘定ベースの」プロトコルと呼ばれることがある。勘定ベースの事例では、各トランザクションは、過去のトランザクションのシーケンスの中の先行するトランザクションのUTXOを戻って参照することによるのではなく、むしろ完全な勘定残高への参照によって、移転されるべき金額を規定する。すべての勘定の現在の状態は、ブロックチェーンとは別個の、そのネットワークのノードによって記憶され、絶えず更新される。そのようなシステムでは、トランザクションは、勘定の動作しているトランザクション勘定書(「ポジション」とも呼ばれる)を使用して順序付けられる。この値は、それらの暗号署名の一部として送出者によって署名され、トランザクション参照計算の一部としてハッシュされる。加えて、任意選択のデータフィールドも、トランザクションが署名されてよい。このデータフィールドは、たとえば、以前のトランザクションIDがそのデータフィールドの中に含まれる場合、以前のトランザクションを指し示してよい。
【0045】
2. UTXOベースのモデル
図2は、例示のトランザクションプロトコルを示す。これは、UTXOベースのプロトコルの一例である。トランザクション152(「Tx」と短縮される)は、ブロックチェーン150の基本データ構造である(各ブロック151が1つまたは複数のトランザクション152を備える)。以下は、出力ベースの、または「UTXO」ベースのプロトコルへの参照によって説明される。しかしながら、このことはすべての可能な実施形態に限定的でない。ビットコインを参照しながら例示のUTXOベースのプロトコルが説明されるが、それが他の例示のブロックチェーンネットワークにおいて等しく実施されてよいことに留意されたい。
【0046】
UTXOベースのモデルでは、各トランザクション(「Tx」)152は、1つまたは複数の入力202および1つまたは複数の出力203を備えるデータ構造を備える。各出力203は、(UTXOがすでに償還されていない場合)別の新規トランザクションの入力202のためのソースとして使用され得る未消費トランザクション出力(UTXO)を備えてよい。UTXOは、ある金額のデジタル資産を指定する値を含む。これは、分散台帳上のトークンのセット番号を表す。UTXOはまた、他の情報の中の、UTXOがそこから来たトランザクションのトランザクションIDを含んでよい。トランザクションデータ構造はまた、ヘッダ201を備えてよく、ヘッダ201は、入力フィールド202および出力フィールド203のサイズのインジケータを備えてよい。ヘッダ201はまた、トランザクションのIDを含んでよい。実施形態では、トランザクションIDは、(トランザクションID自体を除外する)トランザクションデータのハッシュであり、ノード104にサブミットされる未加工トランザクション152のヘッダ201の中に記憶される。
【0047】
たとえば、アリス103aは、当該の、ある金額のデジタル資産をボブ103bに移転するトランザクション152jを作成することを望む。
図2では、アリスの新規トランザクション152jは「Tx
1」とラベル付けされる。それは、シーケンスの中の先行するトランザクション152iの出力203の中でアリスにロックされている、ある金額のデジタル資産を取り、このうちの少なくともいくらかをボブに移転する。
図2では、先行するトランザクション152iは「Tx
0」とラベル付けされる。Tx
0およびTx
1は任意のラベルにすぎない。それらは必ずしも、Tx
0がブロックチェーン151の中の最初のトランザクションであることも、Tx
1がプール154の中のすぐ次のトランザクションであることも、意味するとは限らない。Tx
1は、アリスにロックされた未消費出力203を依然として有する任意の先行する(すなわち、先行者)トランザクションを指し示すことができる。
【0048】
アリスがアリスの新規トランザクションTx1を作成する時間において、または少なくともアリスがそれをネットワーク106へ送る時間までに、先行するトランザクションTx0が、すでに有効化されていてよく、ブロックチェーン150のブロック151の中に含められていてよい。先行するトランザクションTx0は、その時間においてすでにブロック151のうちの1つの中に含められていることがあるか、または依然として順序付きセット154の中で待っていることがあり、その場合、新しいブロック151の中にまもなく含められる。代替として、Tx0およびTx1は、作成され得、一緒にネットワーク106へ送られ得るか、またはノードプロトコルが「オーファン」トランザクションをバッファリングすることを許容する場合、Tx1の後にTx0が送られ得もする。トランザクションのシーケンスのコンテキストにおいて本明細書で使用する「先行する(preceding)」および「後続の(subsequent)」という用語は、トランザクションの中で指定されるトランザクションポインタによって規定されるような、シーケンスの中のトランザクションの順序を指す(どのトランザクションが他のどのトランザクションを指し示すのかなど)。それらの用語は、「先行要素」および「後継者」、または「先行者」および「子孫(descendant)」、「親(parent)」および「子(child)」などに等しく置き換えられる場合がある。そのことは、トランザクションが作成され、ネットワーク106へ送られ、または任意の所与のブロックチェーンノード104に到着する順序を、必ずしも暗示するとは限らない。とはいえ、先行するトランザクション(先行者トランザクションまたは「親」)を指し示す後続のトランザクション(子孫トランザクションまたは「子」)は、親トランザクションが有効化されるまで、また親トランザクションが有効化されない限り、有効化されない。それの親の前にブロックチェーンノード104に到着する子は、オーファンと見なされる。ノードプロトコルおよび/またはノード挙動に応じて、オーファンは廃棄されてよく、または親を待つためのいくらかの時間にわたってバッファリングされてもよい。
【0049】
先行するトランザクションTx0の1つまたは複数の出力203のうちの1つは、ここではUTXO0とラベル付けされる特定のUTXOを備える。各UTXOは、UTXOによって表される、ある金額のデジタル資産を指定する値、および後続のトランザクションが有効化されるために、したがって、UTXOが首尾よく償還されるために、後続のトランザクションの入力202の中のアンロッキングスクリプトによって満たされなければならない条件を規定するロッキングスクリプトを備える。通常、ロッキングスクリプトは、特定のパーティ(それがその中に含まれるトランザクションの受益者)に金額をロックする。すなわち、ロッキングスクリプトは、通常、後続のトランザクションの入力の中のアンロッキングスクリプトが、先行するトランザクションがロックされるパーティの暗号署名を備える条件を備える、ロック解除条件を規定する。
【0050】
ロッキングスクリプト(scriptPubKeyとしても知られる)は、ノードプロトコルによって認識されるドメイン固有の言語で書かれたコードの断片である。そのような言語の特定の例は、ブロックチェーンネットワークによって使用される「Script」(大文字のS)と呼ばれる。ロッキングスクリプトは、トランザクション出力203を消費するためにどんな情報が必要とされるのか、たとえば、アリスの署名の要件、を指定する。アンロッキングスクリプトは、トランザクションの出力の中に出現する。アンロッキングスクリプト(scriptSigとしても知られる)は、ロッキングスクリプト基準を満足するのに必要とされる情報を提供するドメイン固有の言語で書かれたコードの断片である。たとえば、それはボブの署名を含んでよい。アンロッキングスクリプトは、トランザクションの入力202の中に出現する。
【0051】
そのため、図示の例では、Tx0の出力203の中のUTXO0は、UTXO0が償還されるために(厳密には、UTXO0を償還することを試みる後続のトランザクションが有効となるために)アリスの署名Sig PAを必要とするロッキングスクリプト[Checksig PA]を備える。[Checksig PA]は、アリスの公開鍵-秘密鍵ペアからの公開鍵PAの表現(すなわち、ハッシュ)を含む。Tx1の入力202は、(たとえば、実施形態ではトランザクションTx0全体のハッシュである、それのトランザクションID、TxID0によって)Tx1を指し示すポインタを備える。Tx1の入力202は、Tx0の任意の他の可能な出力の間でそれを識別するために、Tx0内でUTXO0を識別するインデックスを備える。Tx1の入力202は、アリスが鍵ペアからのアリスの秘密鍵をデータの既定の部分(暗号法では「メッセージ」と呼ばれることがある)に適用することによって作成される、アリスの暗号署名を備えるアンロッキングスクリプト<Sig PA>をさらに備える。有効な署名を提供するためにアリスによって署名される必要があるデータ(すなわち、「メッセージ」)は、ロッキングスクリプトによって、またはノードプロトコルによって、またはこれらの組合せによって規定されてよい。
【0052】
ブロックチェーンノード104に新規トランザクションTx1が到着すると、ノードはノードプロトコルを適用する。このことは、ロッキングスクリプトの中で規定された条件をアンロッキングスクリプトが満たすかどうかをチェックするために、ロッキングスクリプトおよびアンロッキングスクリプトを一緒に動作させることを備える(この条件は1つまたは複数の基準を備えてよい)。実施形態では、このことは、2つのスクリプトを連結すること、すなわち、
<Sig PA> <PA> || [Checksig PA]
を伴い、ただし、「||」は連結を表し、「<…>」はスタック上のデータの場所を意味し、「[…]」は、ロッキングスクリプト(この例では、スタックベースの言語)によって備えられる関数である。等価的に、スクリプトを連結するのではなく、共通スタックを用いてスクリプトが次々に動作してよい。どちらにしても、一緒に動作するとき、スクリプトは、Tx0の出力の中のロッキングスクリプトの中に含まれるようなアリスの公開鍵PAを使用して、Tx1の入力の中のアンロッキングスクリプトが、データの予想される部分に署名するアリスの署名を含むことを認証する。この認証を実行するために、データ自体(「メッセージ」)の予想される部分も含められる必要がある。実施形態では、署名されたデータはTx1の全体を備える(そのため、平文でのデータの署名された部分を指定する別個の要素は、すでに本質的に存在するので含められる必要はない)。
【0053】
公開-秘密暗号法による認証の詳細は当業者に熟知されよう。基本的に、アリスが自身の秘密鍵を使用してメッセージに署名しており、次いで、アリスの公開鍵および平文でのメッセージが与えられる場合、ノード104などの別のエンティティは、メッセージがアリスによって署名されているにちがいないことを認証することができる。署名することは、通常、メッセージをハッシュすること、そのハッシュに署名すること、およびこれをメッセージ上に署名としてタグ付けすることを備え、したがって、公開鍵の任意の保持者が署名を認証することを可能にする。したがって、データの特定の断片、またはトランザクションの一部などに署名することへの、本明細書におけるいかなる参照も、実施形態において、データのその断片またはトランザクションの一部のハッシュに署名することを意味することができることに留意されたい。
【0054】
Tx1の中のアンロッキングスクリプトがTx0のロッキングスクリプトの中で指定される1つまたは複数の条件を満たす場合(そのため、図示の例では、アリスの署名がTx1の中で提供され、認証される場合)、ブロックチェーンノード104はTx1を有効と見なす。このことは、ブロックチェーンノード104が保留トランザクションの順序付きプール154にTx1を加えることを意味する。ブロックチェーンノード104はまた、ネットワーク106全体にわたってトランザクションTx1が伝搬されるように、ネットワーク106の中の1つまたは複数の他のブロックチェーンノード104にトランザクションTx1を転送する。Tx1が有効化されておりブロックチェーン150の中に含められていると、このことはTx0からのUTXO0を消費されたものと規定する。Tx1が未消費トランザクション出力203を消費する場合にしかTx1が有効であり得ないことに留意されたい。Tx1が、別のトランザクション152によってすでに消費されている出力を消費することを試みる場合、すべての他の条件が満たされるとしてもTx1は無効となる。したがって、ブロックチェーンノード104はまた、先行するトランザクションTx0の中の参照されるUTXOがすでに消費されているかどうか(すなわち、それが別の有効なトランザクションへの有効な入力をすでに形成しているかどうか)をチェックする必要がある。このことは、ブロックチェーン150が、規定された順序をトランザクション152に課することが重要である1つの理由である。実際には、所与のブロックチェーンノード104は、どのトランザクション152の中のどのUTXO 203が消費されているのかをマークする別個のデータベースを維持してよいが、最終的には、UTXOが消費されているかどうかを規定するのは、ブロックチェーン150の中の別の有効なトランザクションへの有効な入力をそれがすでに形成しているかどうかである。
【0055】
所与のトランザクション152のすべての出力203の中で指定される総額が、所与のトランザクション152のすべての入力202によって指し示される総額よりも大きい場合、このことは、ほとんどのトランザクションモデルにおける非有効性にとっての別の根拠である。したがって、そのようなトランザクションは、伝搬されることもブロック151の中に含められることもない。
【0056】
UTXOベースのトランザクションモデルでは、所与のUTXOが全体として消費される必要があることに留意されたい。UTXOは、別の小部分が消費されながらUTXOの中で規定される金額の小部分を消費されたものとして「後に残して行く」ことができない。ただし、UTXOからの金額は、次のトランザクションの複数の出力の間で分割され得る。たとえば、Tx0の中のUTXO0の中で規定される金額は、Tx1の中の複数のUTXOの間で分割され得る。したがって、アリスは、UTXO0の中で規定される金額のすべてをボブに与えることを希望しない場合、Tx1の第2の出力の中でアリス自身に釣銭を与えるために、または別のパーティに支払うために、その残りを使用することができる。
【0057】
実際には、アリスはまた、通常、アリスのトランザクション104をブロック151の中に首尾よく含めるビットコインノード104のための料金を含める必要がある。アリスがそのような料金を含めない場合、Tx0はブロックチェーンノード104によって拒絶されてよく、したがって、技術的には有効であるが、伝搬されず、ブロックチェーン150の中に含められなくてよい(ノードプロトコルは、ブロックチェーンノード104が希望しない場合、トランザクション152を受け入れることをブロックチェーンノード104に強制しない)。いくつかのプロトコルでは、トランザクション料金は、それ自体の別個の出力203を必要としない(すなわち、別個のUTXOを必要としない)。代わりに、入力202によって指し示される総額と所与のトランザクション152の出力203の中で指定されるものの総額との間の任意の差分が、トランザクションを公開するブロックチェーンノード104に自動的に与えられる。たとえば、たとえば、UTXO0へのポインタはTx1への入力でしかなく、Tx1は1つの出力UTXO1しか有しない。UTXO0の中で指定されるデジタル資産の金額が、UTXO1の中で指定される金額よりも大きい場合、UTXO1を含むブロックを作成するためのプルーフオブワーク競争に勝利するノード104によって差分が割り当てられてよい。しかしながら、代替または追加として、トランザクション料金が、トランザクション152のUTXO 203のうちのそれ自体の1つの中で明示的に指定され得ることが、必ずしも除外されるとは限らない。
【0058】
アリスおよびボブのデジタル資産は、ブロックチェーン150の中のどこかの任意のトランザクション152の中で彼らにロックされたUTXOからなる。したがって、通常、所与のパーティ103の資産は、ブロックチェーン150全体にわたって様々なトランザクション152のUTXO全体にわたって散乱される。所与のパーティ103の合計残高を規定する、ブロックチェーン150の中のどこかに記憶された1つの数はない。それぞれのパーティにロックされており前方に位置する別のトランザクションの中でまだ消費されていないすべての様々なUTXOの値を一緒に照合することは、クライアントアプリケーション105の中の金銭管理機能の役割である。それは、ビットコインノード104のうちのいずれかにおいて記憶されるようなブロックチェーン150のコピーを照会することによって、このことを行うことができる。
【0059】
スクリプトコードが、しばしば、概略的に(すなわち、厳密な言語を使用せずに)表されることに留意されたい。たとえば、特定の機能を表すために動作コード(オペコード)を使用してよい。「OP_…」は、Script言語の特定のオペコードを指す。一例として、OP_RETURNは、ロッキングスクリプトの冒頭においてOP_FALSEに先行されるとき、トランザクション内にデータを記憶できるトランザクションの消費不可能な出力を作成し、それによって、ブロックチェーン150の中に不変にデータを記録する、Script言語のオペコードである。たとえば、データは、ブロックチェーンの中に記憶することが望まれる文書を備える場合がある。
【0060】
通常、トランザクションの入力は、公開鍵PAに対応するデジタル署名を含む。実施形態では、これは楕円曲線secp256k1を使用するECDSAに基づく。デジタル署名は、データの特定の断片に署名する。いくつかの実施形態では、所与のトランザクションに対して、署名は、トランザクション入力の一部、およびトランザクション出力の一部または全部に署名する。それが署名する、出力の特定の部分は、SIGHASHフラグに依存する。SIGHASHフラグは、通常、どの出力が署名されるのか(したがって、署名する時間において固定されるのか)を選択するために署名の末尾に含まれる4バイトコードである。
【0061】
ロッキングスクリプトは、それが通常はそれぞれのトランザクションがロックされるパーティの公開鍵を備えるという事実を参照して、「scriptPubKey」と呼ばれることがある。アンロッキングスクリプトは、それが通常は対応する署名を供給するという事実を参照して、「scriptSig」と呼ばれることがある。しかしながら、より一般的には、ブロックチェーン150のすべての適用において、UTXOが償還されるための条件が、署名を認証することを備えることは必須でない。より一般的には、任意の1つまたは複数の条件を規定するためにスクリプト言語が使用され得る。したがって、「ロッキングスクリプト」および「アンロッキングスクリプト」というもっと一般的な用語が好ましいことがある。
【0062】
3. サイドチャネル
図1に示すように、アリスおよびボブのコンピュータ機器102a、120bの各々におけるクライアントアプリケーションは、それぞれ、追加の通信機能性を備えてよい。この追加の機能性は、(パーティまたはサードパーティのいずれかに誘発されて)アリス103aがボブ103bとの別個のサイドチャネル107を確立することを可能にする。サイドチャネル107は、ブロックチェーンネットワークとは別個にデータの交換を可能にする。そのような通信は、「オフチェーン」通信と呼ばれることがある。たとえば、オフチェーン通信は、パーティのうちの1人がトランザクション152をネットワーク106へブロードキャストすることを選ぶまで、そのトランザクションがブロックチェーンネットワーク106上に(まだ)登録されているか、またはチェーン150上に進むことなく、アリスとボブとの間でトランザクション152を交換するために使用されてよい。トランザクションをこのようにして共有することは、「トランザクションテンプレート」を共有することと呼ばれることがある。トランザクションテンプレートは、完全なトランザクションを形成するために必要とされる1つまたは複数の入力および/または出力がなくてよい。代替または追加として、サイドチャネル107は、鍵、折衝された金額または期間、データ内容などの、任意の他のトランザクション関連データを交換するために使用されてよい。
【0063】
サイドチャネル107は、ブロックチェーンネットワーク106と同じパケット交換ネットワーク101を介して確立されてよい。代替または追加として、サイドチャネル301は、モバイルセルラーネットワーク、またはローカルワイヤレスネットワークなどのローカルエリアネットワーク、さらにはアリスのデバイス102aとボブのデバイス102bとの間の直接の有線リンクまたはワイヤレスリンクなどの、様々なネットワークを介して確立されてよい。一般に、本明細書におけるどこかで参照されるようなサイドチャネル107は、「オフチェーン」で、すなわち、ブロックチェーンネットワーク106とは別個にデータを交換するための、1つまたは複数のネットワーキング技術または通信媒体を介した任意の1つまたは複数のリンクを備えてよい。2つ以上のリンクが使用される場合、全体としてオフチェーンリンクのバンドルまたは集合は、サイドチャネル107と呼ばれることがある。したがって、アリスおよびボブがサイドチャネル107を介して情報またはデータなどのいくつかの断片を交換すると言われる場合、データのこれらのすべての断片が、厳密に同じリンクさらには同じタイプのネットワークを介して送られなければならないことを、このことが必ずしも暗示するとは限らないことに留意されたい。
【0064】
4. クライアントソフトウェア
図3Aは、本開示の方式の実施形態を実施するためのクライアントアプリケーション105の例示の実装形態を示す。クライアントアプリケーション105は、トランザクションエンジン401およびユーザインターフェース(UI)レイヤ402を備える。トランザクションエンジン401は、上記で説明した方式に従って、手短にさらに詳細に説明するように、トランザクション152を編成すること、サイドチャネル301を介してトランザクションおよび/もしくは他のデータを受信し、および/もしくは送ること、ならびに/またはブロックチェーンネットワーク106を通じて伝搬されるべきトランザクションを1つもしくは複数のノード104へ送ることなどの、クライアント105の下位トランザクション関連の機能性を実施するように構成される。
【0065】
UIレイヤ402は、機器102のユーザ出力手段を介してそれぞれのユーザ103に情報を出力すること、および機器102のユーザ入力手段を介してそれぞれのユーザ103から戻ってきた入力を受信することを含む、それぞれのユーザのコンピュータ機器102のユーザ入力/出力(I/O)手段を介してユーザインターフェースをレンダリングするように構成される。たとえば、ユーザ出力手段は、視覚出力を提供するための1つもしくは複数の表示スクリーン(タッチスクリーンまたは非タッチスクリーン)、音響出力を提供するための1つもしくは複数のスピーカー、および/または触覚出力を提供するための1つもしくは複数の触覚出力デバイスなどを備える場合がある。ユーザ入力手段は、たとえば、(出力手段のために使用される、それ/それらと同じか、またはそれ/それらとは異なる)1つまたは複数のタッチスクリーンの入力アレイ、マウス、トラックパッド、またはトラックボールなどの1つまたは複数のカーソルベースデバイス、音声または発声入力を受信するための1つまたは複数のマイクロフォンおよび音声または発声認識アルゴリズム、手または体を使うジェスチャーの形態の入力を受信するための1つまたは複数のジェスチャーベース入力デバイス、あるいは1つまたは複数の機械的なボタン、スイッチ、またはジョイスティックなどを備える場合がある。
【0066】
注記: 同じクライアントアプリケーション105の中に統合されるものとして、本明細書において様々な機能性が説明されることがあるが、このことは必ずしも限定的であるとは限らず、代わりにそれらは2つ以上の別々のアプリケーションの一組をなして実装され得、たとえば、一方が他方へのプラグインであるか、またはアプリケーションプログラミングインターフェース(API)を介してインターフェースする。たとえば、トランザクションエンジン401の機能性が、UIレイヤ402とは別個のアプリケーションの中に実装されてよく、またはトランザクションエンジン401などの所与のモジュールの機能性が、2つ以上のアプリケーションの間で分割される場合がある。また、説明する機能性の一部または全部が、たとえば、オペレーティングシステムレイヤにおいて実装され得ることも、除外されない。単一または所与のアプリケーション105などへ、本明細書におけるどこかで参照が行われる場合、このことが例示のためにすぎず、より一般的には、説明する機能性が任意の形態のソフトウェアで実装され得ることが諒解されよう。
【0067】
図3Bは、アリスの機器102a上のクライアントアプリケーション105aのユーザインターフェース(UI)レイヤ402によってレンダリングされてよいUI500の一例のモックアップを与える。類似のUIが、ボブの機器102b上のクライアント105bまたは任意の他のパーティのクライアントによってレンダリングされてよいことが、諒解されよう。
【0068】
例として、
図3Bはアリスの観点からのUI500を示す。UI500は、ユーザ出力手段を介して別々のUI要素としてレンダリングされた1つまたは複数のUI要素501、502、502を備えてよい。
【0069】
たとえば、UI要素は、異なるスクリーン上のボタン、またはメニューの中の異なるオプションなどであってよい、1つまたは複数のユーザ選択可能要素501を備えてよい。ユーザ入力手段は、スクリーン上のUI要素をクリックもしくはタッチすること、または所望のオプションの名称を話すことなどによって、ユーザ103(この場合、アリス103a)がオプションのうちの1つを選択または別のやり方で操作することを、可能にするように配置される(本明細書で使用する「手作業で」という用語が、自動に対して対比をなすことを意図するにすぎず、必ずしも1つまたは複数の手の使用に限定するとは限らないことに、注意されたい)。
【0070】
代替または追加として、UI要素は1つまたは複数のデータ入力フィールド502を備えてよい。これらのデータ入力フィールドは、たとえば、スクリーン上のユーザ出力手段を介してレンダリングされ、データは、ユーザ入力手段、たとえば、キーボードまたはタッチスクリーンを通じてフィールドの中に入力され得る。代替として、たとえば、音声認識に基づいて、データが口頭で受信され得る。
【0071】
代替または追加として、UI要素は、情報をユーザに出力するための1つまたは複数の情報要素503出力を備えてよい。たとえば、これ/これらはスクリーン上でまたは可聴的にレンダリングされ得る。
【0072】
様々なUI要素をレンダリングし、オプションを選択し、データを入力する特定の手段は重要ではないことが諒解されよう。これらのUI要素の機能性が、より詳細に手短に説明される。
図3に示すUI500が図式化されたモックアップにすぎず、実際には、簡潔のために図示されない1つまたは複数のさらなるUI要素を備えてよいことも諒解される。
【0073】
5. ノードソフトウェア
図4は、UTXOベースの、または出力ベースのモデルの例における、ネットワーク106の各ブロックチェーンノード104上で動作するノードソフトウェア450の一例を示す。ネットワーク106上のノード104として分類されることなく、すなわち、ノード104の必要とされるアクションを実行することなく、別のエンティティがノードソフトウェア450を動作させてよいことに留意されたい。ノードソフトウェア450は、限定はしないが、プロトコルエンジン451、スクリプトエンジン452、スタック453、アプリケーションレベル決定エンジン454、および1つまたは複数のブロックチェーン関連機能モジュール455のセットを含んでよい。各ノード104は、限定はしないが、総意モジュール455C(たとえば、プルーフオブワーク)、伝搬モジュール455P、および記憶モジュール455S(たとえば、データベース)の3つすべてを含むノードソフトウェアを動作させてよい。プロトコルエンジン401は、通常、トランザクション152の様々なフィールドを認識し、ノードプロトコルに従ってそれらを処理するように構成される。トランザクション152j(Tx
j)が、別の先行するトランザクション152i(Tx
m-1)の出力(たとえば、UTXO)を指し示す入力を有して受信されるとき、プロトコルエンジン451は、Tx
jの中のアンロッキングスクリプトを識別し、それをスクリプトエンジン452に渡す。プロトコルエンジン451はまた、Tx
jの入力の中のポインタに基づいてTx
iを識別し取り出す。Tx
iはブロックチェーン150上で公開されてよく、その場合、プロトコルエンジンは、ノード104において記憶されるブロックチェーン150のブロック151のコピーからTx
iを取り出してよい。代替として、Tx
iはブロックチェーン150上でまだ公開されていないことがある。その場合、プロトコルエンジン451は、ノード104によって維持される未公開のトランザクションの順序付きセット154からTx
iを取り出してよい。どちらにしても、スクリプトエンジン451は、Tx
iの参照される出力の中でロッキングスクリプトを識別し、これをスクリプトエンジン452に渡す。
【0074】
したがって、スクリプトエンジン452は、Tx
iのロッキングスクリプト、およびTx
jの対応する入力からのアンロッキングスクリプトを有する。たとえば、Tx
0およびTx
1とラベル付けされたトランザクションが
図2に示されるが、トランザクションの任意のペアに対して同じことが適用され得る。スクリプトエンジン452は、前に説明したように2つのスクリプトを一緒に動作させ、そのことは、使用されているスタックベースのスクリプト言語(たとえば、Script)に従って、スタック453上にデータを配置すること、およびスタック453からデータを取り出すことを含む。
【0075】
スクリプトを一緒に動作させることによって、スクリプトエンジン452は、ロッキングスクリプトの中で規定される1つまたは複数の基準をアンロッキングスクリプトが満たすか、すなわち、ロッキングスクリプトがその中に含まれる出力を、アンロッキングスクリプトが「ロック解除する」か否かを決定する。スクリプトエンジン452は、この決定の結果をプロトコルエンジン451に戻す。スクリプトエンジン452は、対応するロッキングスクリプトの中で指定される1つまたは複数の基準をアンロッキングスクリプトが満たすことを決定する場合、結果「真(true)」を戻す。そうでない場合、スクリプトエンジン452は結果「偽(false)」を戻す。
【0076】
出力ベースのモデルでは、スクリプトエンジン452からの結果「真」は、トランザクションの有効性のための条件のうちの1つである。通常、Txjの出力の中で指定されるデジタル資産の総額が、その入力によって指し示される総額を上回らないこと、およびTxiの指し示される出力が、別の有効なトランザクションによってすでに消費されていないことなどの、同様に満たされなければならない、プロトコルエンジン451によって評価される1つまたは複数のさらなるプロトコルレベル条件もある。プロトコルエンジン451は、1つまたは複数のプロトコルレベル条件と一緒にスクリプトエンジン452からの結果を評価し、それらがすべて真である場合のみトランザクションTxjを有効化する。プロトコルエンジン451は、トランザクションが有効であるかどうかの表示をアプリケーションレベル決定エンジン454に出力する。Txjが確かに有効化されるという条件においてのみ、決定エンジン454は、Txjに関してそれらのそれぞれのブロックチェーン関連機能を実行するように、総意モジュール455Cと伝搬モジュール455Pの両方を制御することを選択してよい。このことは、ブロック151の中に組み込むために総意モジュール455Cがトランザクションのノードのそれぞれの順序付きセット154にTxjを加えること、および伝搬モジュール455Pがネットワーク106の中の別のブロックチェーンノード104にTxjを転送することを備える。任意選択で、実施形態では、アプリケーションレベル決定エンジン454は、これらの機能のうちの一方または両方をトリガする前に、1つまたは複数の追加の条件を適用してよい。たとえば、決定エンジンは、トランザクションが有効であることとトランザクション料金を十分残すことの両方の条件においてのみ、トランザクションを公開することを選択してよい。
【0077】
本明細書における「真」および「偽」という用語が、単一の2進数字(ビット)だけの形態で表される結果を戻すことに必ずしも限定するとは限らないが、そのことが確かに1つの可能な実装形態であることにも留意されたい。より一般的には、「真」とは、成功した結果または肯定的な結果を示す任意の状態を指すことができ、「偽」とは、失敗した結果または否定的な結果を示す任意の状態を指すことができる。たとえば、勘定ベースのモデルでは、「真」という結果は、署名の暗黙的なプロトコルレベル有効化とスマート契約の追加の肯定的出力との組合せによって示される場合がある(個々の結果の両方が真である場合、全体的な結果が真をシグナリングするものと見なされる)。
【0078】
6. P2Pネットワーク接続
図5は、本発明の実施形態を実施するために使用されてよい例示のシステムを示す。システムは、ピアツーピア(P2P)ネットワーク500およびブロックチェーンネットワーク106を備える。P2Pネットワーク500は、本明細書でP2Pノードと呼ばれる複数のノードを備える。たとえば、P2Pネットワークは、第1のP2Pノード501a、第2のP2Pノード501b等々を備える。
図5には5つのP2Pノード501しか示されないが、一般に、P2Pネットワーク500が任意の数のP2Pノード501を有してよいことが諒解されよう。本明細書で使用する「第1の」、「第2の」などが、任意のラベルとして使用されるにすぎず、文脈上他の意味に解すべき場合を除いて、必ずしも順序を暗示するとは限らないことに留意されたい。当業者は、P2Pネットワーク、すなわち、ピアがネットワークの中の等しく特権的な、能力が等しい参加者である、分散ネットワークの概念を熟知されよう。そのため、P2Pネットワークがネットワークアドレスを有することを語ること以外に、P2Pネットワーク500それ自体は詳細には説明されない。ネットワークアドレスは、任意の好適な形式を取ってよい。たとえば、ネットワークアドレスは、IPアドレスまたはドメインネームであってよい。ネットワークアドレスは全体としてP2Pネットワークのアドレス(または、識別子)であってよく、または各P2Pノードがネットワーク上のアドレスを有してもよい。P2Pネットワーク500は、1つまたは複数の目的または用途を有してよい。たとえば、P2Pネットワークは、コンテンツもしくはファイル共有ネットワーク、または通信(たとえば、ビデオ発呼)ネットワーク、クラウドコンピューティングネットワーク、リモートデスクトップネットワークなどであってよい。
【0079】
各P2Pノード501は、P2Pノード501によって実行されるものとして以下で説明するアクションを実行するように構成された、それぞれのコンピューティング機器を動作させる。いくつかの実施形態では、各P2Pノード501は、
図1~
図3Bに関してアリス103aおよび/またはボブ103bによって実行されるものとして説明したアクションの一部または全部を実行するように構成されてよい。各P2Pノード501はそれぞれの公開鍵を有し、すなわち、対応する秘密鍵へのアクセスを有する。
【0080】
図5に示すように、P2Pノード501のうちのいくつかは、P2Pノード501を接続する実線によって示される既存の接続を有する。たとえば、第3のP2Pノード501cは、第4のP2Pノード501dおよび第5のP2Pノード501eに接続されて図示される。第2のP2Pノード501bは第4のP2Pノード501dに接続されている。さらなる接続が示される。第1のP2Pノードが形成することを望む接続も図の中で示され、それらは第1のP2Pノード501aを他のP2Pノードに接続する破線によって示される。たとえば、第1のP2Pノード501aは、たとえば、第2のP2Pノード501bおよび第3のP2Pノード501cが第1のP2Pノード501aに最も近いので、これらのノードに接続することを望む。ここで、「最も近い」とは地理的な観点であってよく、またはそれ以外でもよい。
【0081】
第2のP2Pノード501bと接続するために、第1のP2Pノード501aは、第2のP2Pノード501bに関連付けられた公開鍵を取得する。第1のP2Pノード501aは、メモリから、公的にアクセス可能なリソース、たとえば、ウェブページもしくはブロックチェーンから、信用局から、またはP2Pノード501のうちの別のP2Pノードから、公開鍵を取得してよい。別の例として、第1のP2Pノード501aは、たとえば、P2Pネットワークアドレスを使用して、ドメインネームシステム(DNS)サービスに照会することによって第2のP2Pノードの公開鍵を取得してよい。
【0082】
第1のP2Pノード501aは、(第1のトランザクションと呼ばれる)ブロックチェーントランザクションを生成するように構成される。第1のトランザクションは、第2のノードの公開鍵にロックされた第1の出力を備える。たとえば、その出力はP2PKH出力であってよい。第1の出力は、P2Pが接続を形成することを試みているという事実を第2のP2Pノード501bに警告するために使用される。たとえば、第2のP2Pノード501bは、第2のP2Pノードの公開鍵にロックされている出力を求めてブロックチェーンを監視する金銭管理アプリケーションを動作させてよい。当業者は、公開鍵へ送られる「支払い」を識別する他の方法を熟知されよう。第1のトランザクションはまた、P2Pネットワークアドレスを備え、P2Pネットワークアドレスは、第1のP2Pノード501aがそこで第2のP2Pノード501bに接続することを望むP2Pネットワークを識別するために使用される。ネットワークアドレスは、第1のトランザクションの第1の出力の一部、または第2の出力として含められてよい。第2の出力は、消費不可能な出力および/またはOP_RETURN出力であってよい。第1のトランザクションは、第1のP2Pノードの公開鍵を使用して検証され得る署名を用いて署名される。このことは、どのP2Pノード501が接続を形成することを試みているのかを第2のP2Pノード501bが決定することを可能にする。
【0083】
第1のP2Pノード501aは、ブロックチェーンネットワーク106または代替として仲介者に、第1のトランザクションをサブミットし、仲介者は、次いで、ブロックチェーンネットワーク106に第1のトランザクションをサブミットする。
【0084】
第2のP2Pノード501bは、第1のブロックチェーントランザクションがブロックチェーン150にサブミットされている(または、その上に記録されている)ことを決定するように構成される。上述のように、このことは、第2のP2Pノード501bによって動作する金銭管理アプリケーションによって実行されてよい。または、第2のP2Pノード501は、第2のP2Pノードの公開鍵にロックされた出力を有するトランザクションを求めてブロックチェーン150を手作業でスキャンしてよい。別の例として、サービスプロバイダが、第2のP2Pノード501bに代わってブロックチェーン150を監視してよく、第1のトランザクションが識別されると第2のP2Pノード501bに通知してよい。第1のトランザクションの存在の検出または別のやり方での識別に応答して、第2のP2Pノード501bは、第1のP2Pノード501aと接続するように構成される。第1のP2Pノード501aと接続することは、第2のP2Pノード501bが、P2Pネットワーク500上で第2のP2Pノード501bが通信するノードのリストに第1のP2Pノード501aを加えることを伴ってよい。ここで、第1のP2Pノード501aと通信することは、第1のP2Pノード501bから着信データを受け入れるとともに第1のP2Pノード501bへ発信データを送ることを意味するものと理解される。追加または代替として、第1のP2Pノード501と接続することは、第1のP2Pノード501aとアクティブに通信すること、すなわち、第1のP2Pノード501aへデータを送ることを伴ってよい。
【0085】
第1のトランザクションは、第1および第2のP2Pノード501a、501bにだけでなく、全体としてP2Pネットワーク500にも有益である。第1のトランザクションは、第1のP2Pノード501aと第2のP2Pノード501bとが接続されることを他のノード501が決定することを可能にする。言い換えれば、第1のトランザクションがブロックチェーン150上に記録されることを見ると、P2Pネットワーク500の他のノードは、それらが、それぞれ、第2または第1のP2Pノードを介して、第1または第2のP2Pノードと通信できることを知る。このことは、ノード501が他のノード501へのより多くの接続およびより多くの経路を認識するようになるので、P2Pネットワーク500の接続性を改善する。
【0086】
図6は、第1のP2Pノード501aと第2のP2Pノード501bとの間の接続をシグナリングするために使用される第1のトランザクションの一例を示す。第1のP2Pノード501aの署名および公開鍵が、トランザクションのアンロッキングスクリプトの中に示される。この例では、第1の出力は、第2のP2Pノード501bの公開鍵にロックされ、第2の、異なる出力は、P2Pネットワーク500のネットワークアドレスを備える。この例に示すように、第1のトランザクションは第1のP2Pノード501aの識別子を備えてよい。識別子は、ネットワーク上で第1のP2Pノード501aを一意に識別し、認証局(または、P2Pネットワーク500によって信頼される、別の形態の当局)によって認証されてよい。識別子は第1のP2Pノードの公開鍵にマッピングされてよく、それが確かに第1のトランザクションを生成した第1のP2Pノード501aであることを第2のP2Pノード501bが確信することを可能にする。マッピングは、あらかじめ知られていてよく、または公的にアクセス可能なリソース、たとえば、ウェブページもしくはブロックチェーンにおいて記憶されてもよい。識別子は、第1のP2Pノードの識別情報において信用を確立するために使用される。それは、第1のP2Pノードの公開鍵(および、場合によってはその所有者についての情報)を含む認証であってよい。IPアドレスはブロックチェーン上で公であるので、第1のP2PノードのIPアドレスが第1のP2Pノードのコンピュータを攻撃にさらす場合があるとき、好ましくは、認証は第1のP2PノードのIPアドレスを含まない。
【0087】
上述のように、第2のP2Pノードの公開鍵はDNSサービスから取得されてよい。DNSサービスへの照会に応答して、第1のP2Pノード501aは、第2のP2Pノード501bの公開鍵およびインターネットプロトコル(IP)アドレスを受信してよい。第1のP2Pノード501aは、そのIPアドレスに基づいて第2のP2Pノード501bに接続することを選んでよい。第2のP2PノードのIPアドレスが、代替方法で取得されてよく、たとえば、第1および第2のP2Pノード501a、501bとの確立された接続をすでに有する異なるノード501によって提供されてよいことに、留意されたい。
【0088】
第1のトランザクションを生成するより前に、第1のP2Pノード501aは、第2のP2Pノード501bのIPアドレスを使用して第1のP2Pノード501bとのインターネットハンドシェイク(たとえば、TCPの3ウェイハンドシェイク)を実行してよい。このことは、第1のP2Pノード501aが第2のP2Pノードの識別情報における信用を確立することを可能にする。第2のP2Pノード501bは、第2のP2Pノードの公開鍵に対応する署名を用いて署名されたそれのIPアドレスを第1の第1のP2Pノード501aへ送ってよい。第1のP2Pノード501aは、次いで、第2のP2Pノードの公開鍵を使用して署名を検証してよい。これらの例では、署名が検証される場合、またはその場合のみ、第1のP2Pノード501aがブロックチェーンネットワーク106に第1のトランザクションをサブミットする。
【0089】
第1のP2Pノード501aは、それの専門分野、たとえば、能力、機能、属性などを第2のP2Pノード501bにシグナリングするために、第1のトランザクションを使用してよい。すなわち、第1のP2Pノード501aは、すべてのノードができるとは限らない、P2Pネットワーク500上でのいくつかのアクションを実行できる場合があり、または第1のP2Pノード501bは、他のアクションよりも良好に、もしくは他のノードができるよりも良好に、いくつかのアクションを実行できる場合がある。専門分野の例は、グリッドコンピューティング、マイニング、DNSノード、信用局ノード、ファイル共有などの能力を含む。いくつかの例では、専門分野は、良好な帯域幅、接続性、インターネット接続、記憶などの属性であってよい。ここで、「良好」とは、ネットワークノード501の平均よりも良好であることを意味するものと理解されてよい。P2Pノード501の1つまたは複数のサブセットがあってよく、各サブセットは、共通して少なくとも1つの専門分野を有する。第1のトランザクションは、それぞれの専門分野をその各々が示す1つまたは複数のフラグを含んでよい。このことは、第1のP2Pノードの専門分野に基づいて、いくつかのタイプのデータまたは要求を第1のP2Pノード501aへ送るべきか否かを第2のP2Pノード501bが知るので、P2Pネットワーク500の効率を改善する。
【0090】
図7は、専門分野フラグを含む第1のトランザクションの一例を示す。専門分野フラグは、第1の出力または第2の出力の中に含まれてよい。
【0091】
任意選択で、第1のトランザクションは、第2のP2Pノードの公開鍵にロックされている第1の出力に加えて、少なくとも2つの代替のロック条件を含む消費可能な別の出力を含んでよい。この出力は第3の出力と呼ばれるが、出力のリストの中で3番目に出現する必要はない。第1のロック条件として、第3の出力が第1のP2Pノード501aの公開鍵にロックされてよい。第2のロック条件として、第3の出力が第2のP2Pノード501bの公開鍵にロックされてよい。公開鍵は、上記で説明した公開鍵と同じであってよく、またはそれとは異なってもよい。言い換えれば、第1および/または第2のP2Pノード501a、501bは、2つ以上の公開鍵を有してよい。これらの例では、第3の出力が未消費であることは、第1のP2Pノード501aと第2のP2Pノード501bとの間の接続が利用可能である(すなわち、終了していない)ものとして、第2のP2Pノード501bによって解釈される。第3の出力が消費されると、その接続は、たとえば、第1のノード501aがオフラインに進んでいるので、接続が終了しているものとして解釈される。第3の出力が消費されていることを見ると、第2のP2Pノード501bは、第1のP2Pノード501aから接続を断ってよい。
【0092】
たとえば、第1のP2Pノード501aがもはや第2のP2Pノード501bとの接続を維持できない場合には、第1のP2Pノード501aは、第3の出力を消費する第2のトランザクションを生成してよい。第2のトランザクションは、第1のトランザクションの第3の出力を参照するとともに、第3の出力がロックされる第1のP2Pノードの公開鍵に対応する署名を含む、入力を含む。
図9は、第2のトランザクションの一例を示す。
【0093】
代替として、たとえば、第2のP2Pノード501bがもはや第1のP2Pノード501aとの接続を維持できないか、あるいは第1のP2Pノード501aが、悪意をもってもしくはP2Pネットワークのポリシーに逆らって行動しているか、またはハッキングされているなどの場合には、第2のP2Pノード501bは、第3の出力を消費する第2のトランザクションを生成してよい。第1のP2Pノード501aは、少なくとも第2のP2Pノード501bの観点からはオフラインであるが、いくつかの例では、他のノード、たとえば、第3のP2Pノード501cとのアクティブな接続を維持してよい。第2のトランザクションの第3の出力の消費は、第1のP2Pノード501aが正しくネットワークプロトコルに従っていないので第2のP2Pノード501bを介して第1のP2Pノード501aと通信することが推奨されないこと、または第1のP2Pノード501aと通信することがまったく推奨されないことを、ネットワークの他のノードにシグナリングする。第2のトランザクションは、第1のトランザクションの第3の出力を参照するとともに、第3の出力がロックされる第1のP2Pノードの公開鍵に対応する署名を含む、入力を含む。
【0094】
いくつかの例では、
図8に示すように、(
図8における出力のリストの中で2番目に出現する)第3の出力の第2のロック条件はハッシュ値を含んでよく、第3の出力がロック解除されるために、第3の出力を消費する入力はハッシュ値の原像を含む。原像は、第3の出力をロック解除するために第2のP2Pノード501bが取得しなければならないチャレンジであってよい。たとえば、チャレンジは信用局から取得されてよい。チャレンジデータを含む、第2のP2Pノード501bによって生成される第2のトランザクションの一例が、
図10に示される。
【0095】
図11は、第1のP2Pノードの専門分野を更新するために、というより、更新された専門分野を第2のP2Pノードに通知するために使用され得る、トランザクションの一例を示す。
【0096】
上記の説明は第1のP2Pノード501aと第2のP2Pノード501bとの間の相互作用に焦点を当てたが、第1のP2Pノード501aは、1つまたは複数の追加のP2Pノード501のために均等なアクションを実行してよい。たとえば、
図5では、第1のP2Pノード501aは、第3のP2Pノードの公開鍵を取得すること、およびその公開鍵にロックされた出力を備えるトランザクションを生成することによって、第3のP2Pノード501cと接続する。そのトランザクションはP2Pネットワークアドレスも含む。
【0097】
第1のP2Pノード501aはまた、ブロックチェーン150上に記録されたトランザクション、たとえば、第4のP2Pノード501dによって署名された入力および第5のP2Pノード501eの公開鍵にロックされた出力を有するトランザクションに基づいて、他のP2Pノード間の、たとえば、第4のP2Pノード501dと第5のP2Pノード501eとの間の接続を決定する(すなわち、識別する)ように構成される。第1のP2Pノード501aは、識別された接続を使用して特定のP2Pノード501にデータをルーティングなどしてよい。たとえば、第2のP2Pノード501bに接続されている
図5の例を取ると、データは、第2および第4のP2Pノード501b、501dを介して第5のP2Pノード501eにルーティングされてよい。
【0098】
いくつかの例では、P2Pノードは、第2のタイプの秘密鍵(たとえば、ECDSA)を必要とする、ブロックチェーンネットワーク106上のトランザクションに署名するために使用され得ない、P2Pネットワーク500上のメッセージに署名するために、第1のタイプの秘密鍵(たとえば、RSA)を使用してよい。P2Pノード501は、第1のタイプのそれぞれの秘密鍵を(同じであっても同じでなくてもよい1つまたは複数のハッシュ関数、たとえば、二重SHA256を用いて)ハッシュすることによって、第1のタイプのそれぞれの秘密鍵から第2のタイプのそれぞれの秘密鍵に変換してよい。
【0099】
7. P2Pオーバーレイモデル
説明する実施形態の特定の例がここで提供される。このセクションは、P2Pネットワークトポロジー立証のための報奨メカニズムを開示する。P2Pネットワークに対して報奨を加えるために、ノードは、ブロックチェーンネットワーク上での関連するトランザクション支払いを通じてブロックチェーン上のデータを立証してよい。これらの支払いは、通信プロセスに関与するノードによって受信される。このセクション全体にわたって、どのようにノードが加入を立証すること、P2Pネットワーク上でそれらの仕様を更新すること、およびブロックチェーン上のそれらの隣接するノードの証明を保持することができるのかを詳述する。
【0100】
この解決策は、ノード間でのすべてのタイプのデータ転送に対して経済的報奨を加える。さらに、P2Pネットワークノードが、それらの元のP2Pプロトコル通信を保持することができ、報酬を移転する別の通信レイヤをそこに加えるという意味で、そうした解決策はフレキシブルである。NiによってP2Pネットワークのノードにラベル付けし、ただし、iは、コンテキストに応じて、正の整数またはインデックスセットである。
【0101】
7.1 ネットワークセットアップ
このセクションでは、どのようにノードN1がP2Pネットワークに安全に加入することができ、受け入れられるべき十分な報奨を与えるのかを示す。その上、ノードN1は、P2Pネットワークから任意の他のノードに接続することを希望するたびに、以下で説明する同じ手順に従うべきである。このことは、ブロックチェーンがP2Pネットワークの完全なネットワークトポロジーを記憶することを保証する。
【0102】
加入プロセスは次の通りである。すなわち、アドレスNETADDRを有するネットワークに新しいノードN1が加入することを希望すると想定する。ネットワーク上でN1が接続できる利用可能なピアを見つけるために、N1は、GETのような要求を
【0103】
【0104】
という形式のリンクへ送ることによって、DNSサービスに照会することができる。取り出されるデータは、JSONフォーマットされ、ノードのインターネットアドレスのリスト、および(たとえば、ビットコインフォーマットで符号化された)楕円曲線公開鍵を含む。エントリ例は、
【0105】
【0106】
である。
【0107】
利用可能なピアの受信されたリストに基づいて、N
1は、上記のエントリ例の中に見られるようなインターネットアドレスを使用して、接続すべきピアN
2を取り上げる。この瞬間において、2つのノードN
1およびN
2は以下で説明するプロトコルに従う。
1. N
1は、N
2のインターネットアドレスをJSONエントリから取得する。
2. N
1は、N
2とのインターネットハンドシェイクを開始する。そのようなハンドシェイクはネットワーク依存である。たとえば、2つのノードは、RFC793に記載されるようなTCPの3ウェイハンドシェイクを選ぶことができる。
3. N
2は、JSONエントリ公開鍵を用いて署名されたそれのインターネットアドレスを送る。
4. N
1は、JSONエントリからの公開鍵を使用すること、およびN
2のインターネットアドレスに対して署名をチェックすることによって、N
2の識別情報を有効化する。
5. N
1は、
図6に見られるような2つの出力を有する、ブロックチェーン上のトランザクションを作成する。第1の出力、すなわち、N
2によって償還可能なP2PKHロッキングスクリプト。第2の出力、すなわち、N
1が加入しつつあるネットワークアドレスNETADDRと一緒に一意識別子
【0108】
【0109】
を含むロッキングスクリプト。
【0110】
【0111】
識別子は、認証局によって発行され、それの目的とは、信頼される方式でネットワークノードN1の識別情報を識別することである。
6. N2は、ブロックチェーン上でトランザクションTxIDnet-addが確認されたことを見ると、隣接するピアのそれのリストにN1を加える。
【0112】
ステップ3およびステップ4は、他のノードがなりすまし攻撃を実行するとともにN2のインターネットアドレスを使用することによって不正を働くことを防止する。N1は、ステップ2によってN2というインターネットアドレスを使用するノードと通信している。N2が、JSONエントリにおいて利用可能な公開鍵を用いてそれのインターネットアドレスに署名できる唯一のノードであるので、そのノードがN2であることが確信され得る。したがって、ステップ3およびステップ4は公開鍵基盤を可能にする。
【0113】
我々が対処する必要がある1つの問題とは、N2が不正直なノードであるかどうか、および隣接するノードのそれのリストにN1を加えないかどうかである。どのようにN1がネットワークに安全に加入でき、N2によって詐取されていないことを確信できるのかを示す。各ノードは、信用局によって発行されたそれらの識別情報を反映する割り当てられた識別認証CAを有する。ノードN1は、それが詐取されたことを証明する、認証を発行した当局に接触することができる。この瞬間において、信用局は、これが信頼されるノードでないことをノードN2と共同作業する他のP2Pノードに認識させるフラグを発行することができる。
【0114】
7.2 ネットワーク公平性アーキテクチャ
信用局とともにクロスチェックし、ノードN2が詐取されている場合にはノードN2に報告する可能性をノードN1に与えることに加えて、悪いアクターからP2Pネットワークをさらに保護できる総意を実施することができる。この総意は、ノードの大多数が正直に行動するとともに絶えず奨励されることに依拠している。
【0115】
ノードN2がノードN2,1、…、N2,nに接続されていることを想定しよう。それを正直に保つことはN2の隣接するノードの各々のためである。N2を正直に保つことがノードN2,1、…、N2,nのためであるそのような2つのシナリオを詳述する。
・N2が不正直であり、それの接続に新しいノードN1を加えていない場合、要求をN2に伝搬させるノードは、要求を不正直なノードへ送ることから、報酬を失いつつある場合がある。
・ノードN1がオフラインに進むときにN2が正しくネットワークを更新していない場合、ノードN2,1、…、N2,nは、N2が要求をノードN1に伝搬させつつあることをブロックチェーン上に見ることができる。このことは、それらが余分なノードのためにN2に支払っていることを意味する。
【0116】
上記の2つのシナリオの各々において、隣接するノードは、次の要求伝搬の中でより少ない報酬を与えることによってN2にペナルティを課すことができるか、またはネットワークからN2を完全にオフラインに持っていくことができるかのいずれかである。
【0117】
この総意が、N2が正直であるかどうかをN1がチェックするプロセスをオフロードしており、その上、それらの隣接するノードが正直に振舞っていることを保証するためにネットワークの中の既存のノードに報奨を提供することに、我々は気付く。また、N2に接続されたノードに対してさらなるチェックを行うためにノードN1に負担があることになるなら、ノードN2が偽の識別情報を作成している場合があり、したがって、ノードN1を欺く場合があり、シビル(Sybil)攻撃を可能にすることを、我々は強調する。
【0118】
7.3 識別情報リンケージ
RSA鍵を使用するP2Pネットワークの場合には、それらの識別情報を確立するための1つの方法は、それらのRSA秘密鍵kRSAを、トランザクションに署名するためにビットコインネットワーク上で使用されるECDSA秘密鍵kECDSAにリンクすることである。このことは、次式を通じて行われ得る。
kECDSA=H1(H0(kRSA))
ただし、H1およびH0は、必ずしも異なるとは限らない2つのハッシュ関数である。次いで、ECDSA公開鍵が次のように定義される。
PECDSA=kECDSA・G
ノードN1が、ネットワーク内で使用されるいくつかのRSA秘密鍵を保持する場合、鍵のインデックスは、次のようなものとしてECDSA秘密鍵の生成の中に含まれ得る。
kECDSA=H1(H0(kRSA||index))
それらのRSA鍵とECDSA鍵との間のリンクを証明するために、P2Pノードは、RSAデジタル署名暗号系を使用して、それらのRSA秘密鍵を用いてそれらのECDSA公開鍵に署名することができる。
【0119】
7.4 ノード専門化
ネットワークに対する最適化の1つの領域は、各ノードが特定の機能を実行するように専門化し得るノード専門化を加えている。グリッドコンピューティング、マイニング、DNSノード、信用局ノード、ファイル共有などの、我々がそれについて考えることができるいくつかのそのような専門化がある。確かに、ノードはP2Pネットワークに加入することができ、汎用ノードとして分類されることになる任意の種類の要求を受け入れることができる。専門化が存在する場合、専門化は以下でさらに示すようなP2Pネットワークをモジュール化するネットワーク構造につながることができる。
【0120】
図7は、ネットワークセットアップのステップ5におけるトランザクションTxID
net-addの簡単な修正を伴って、ネットワークセットアップフェーズにおいてそのような専門化がどのように行われ得るのかを示す。
【0121】
専門化フラグは、標準的なフォーマット、たとえば、
【0122】
【0123】
で表現されてよい。
【0124】
上記のSPECエントリを使用するノードは、それの専門化がデータ共有ノードの専門化でありDNSサービス提供ノードの一部であり得ることをネットワークに告げる。そのような標準化は、たとえば、ノードN1が最初に所望のネットワークを見つけることの助けとなった既存のDNSサービスによって発行されてよい。
【0125】
7.5 ネットワーク更新
前のセクションにおいて、ノードN1がそれを通じてネットワークに加入することおよび報奨を与えることができ、ある程度の公平性を保証する手順を説明した。ここではネットワーク完全性をどのように保護すべきかを示し、ここで、ブロックチェーントランザクションは、ノードがオフラインに進むかまたはそれらの専門化を変更するが、経済的報奨を保証することなどの、ネットワーク構造の変化を反映すべきである。
【0126】
このセクションは、ネットワーク構造の完全性を保護するために、ノードがそれを通じてネットワーク構造を更新できる更新手順を構築する。このプロセスを達成するための1つの方法は、TxIDnet-addの第2のトランザクション出力が消費可能となるように、前のセクションにおいて説明したネットワークセットアッププロトコルを修正することである。出力が消費されつつある場合、我々はこのことをノードがP2Pネットワークから接続を断つこととして解釈する。簡潔のために、我々はノードがオフラインに進むというこの事例の中で語る。
【0127】
したがって、焦点はTxIDnet-addの第2の出力がどのように消費され得るのかを理解することにある。このことが重要なのは、間違った報奨をネットワークに提供しそれの完全性を危うくすることを我々は希望しないからである。
【0128】
そうするために、我々は認証
【0129】
【0130】
を生み出したデータを必要とする。このデータをチャレンジC(たとえば、ランダムな整数)と呼ぶ。Cは、ノードN1および発行する信用局にしか知られていない。下の図では、オペコードOP_SHA256によって算出される関数に対応するようにハッシュ関数Hを修正する。
【0131】
図6の中で与えられ上記で詳述したネットワークセットアップ手順のステップ5において使用されるTxID
net-addを修正する。ノードは、このセクションの中で提示した機能性を可能にするために、セットアッププロトコルの中で
図8に示すトランザクションフォーマットを採用してよい。
【0132】
第2の出力の中で与えられるロッキングスクリプトは、N
1がオフラインに進みつつあることをN
1がP2Pネットワークにシグナリングすることを可能にする。そうするために、N
1は以下のステップを実行する。
1. N
1は、それの署名を提供するとともに
図8の中で与えられるTxID'
net-addの第2の出力を消費する、
図9の中で与えられるようなトランザクションを作成する。
2. N
1は、P2Pネットワークから安全に接続を断つことができる。
【0133】
N
1が不正直でありオフラインに進むための上記のプロトコルを実行しない場合、N
2は以下のプロトコルに従う。
1. N
2は、信用局からチャレンジCを獲得する。
2. N
2は、それの署名を提供するとともに
図8の中で与えられるTxID'
net-addの第2の出力を消費する、
図10の中のトランザクションをブロードキャストする。
【0134】
ネットワークを更新するときに行うことができるシナリオは次の通りであり、この方式の報奨およびセキュリティを強調する。
・N1は正直なノードであり、オフラインに進むとそれの署名を通じてトランザクションの第2の出力を消費して金銭を取り戻す。N1がまた、その金銭を取り戻すための経済的報奨を有するので、これは主要なシナリオである。
・N1は不正直なノードであり、N1がオフラインに進みつつあることをネットワークにシグナリングするためにTxID'net-addの第2の出力を消費しない。この場合、ノードN2は、N1が更新総意に従わなかったことを証明する信頼されるパーティに接触することができる。
【0135】
【0136】
を発行した認証局がオンラインになると、N2は、N2がそれを用いてTxID'net-addの第2の出力をロック解除し、したがって、N1がオフラインに進んだことをネットワークにシグナリングする、チャレンジCを取得することができる。
【0137】
N
1が、オフラインに進むときにネットワークを更新しないという挙動を繰り返す場合、N
2は、信頼できないものとしてN
1にフラグ付けすることができ、ノードN
1からのさらなる加入要求を拒否する。その上、我々はまた、認証局に、信頼できないものしてノードN
1にフラグ付けさせることができ、発行された識別情報を無効化する。たとえば、フラグ付けはトランザクションを通じて行われ得る。最後に、どのようにN
1がそれの専門化SPECを変更できるのかを示す。そうするために、N
1は、TxID'
net-addの第2の出力を消費する、
図11の中で与えられるような新規トランザクションを作成することしか必要としない。
【0138】
結論として、我々が提案した更新手順は、その構造を最新に保持するとともに必要とされる経済的報奨を与えることによってネットワーク完全性を保証する。
【0139】
説明する実施形態による例示のP2Pオーバーレイモデルが
図12に示される。P2Pネットワークは、上記で説明したように、ノード専門化を通じていくつかのサービスを実施することができる。このことはネットワークモジュール化につながり、それによって、ノードはP2Pネットワーク通信をもっと効率的にさせるためにいくつかの役割を呈する。
【0140】
以下のサービスを実施するために、P2Pネットワークに加入する各ノードN
1はそれらのSPECフラグを規定する必要がある。
図12は、ノードが以下のサービスを与える、P2Pモジュール化の視覚表現を与える。
・DNSサービス:SPEC:={ "role": "dns" }
・認証局サービス:SPEC:={ "role": "CA" }
・マルチパーティ計算(MPC)サービス:SPEC:={ "role": “MPC" }
【0141】
P2Pネットワークがブロックチェーン上でのその構造の立証を保持するので、DNSサービスは、ネットワークを探索可能にすることができるサービス(クローラ(crawler)サービスとも呼ばれる)を与えることができる。ネットワーク構造を監視することによって、クローラは、探索適用例を容易にすることができる、現在のネットワークのグラフを保持することができる。
【0142】
8. 接続の奨励
上記で説明したように、P2Pネットワークのノードに接続するために、第1のノード501aは、接続されたものが作成されることになるP2Pノードの公開鍵にロックされた出力を有するトランザクションを生成する。すなわち、第1のノード501aは、第2のノード501bに関連付けられた公開鍵にロックされた第1の出力を有する第1のトランザクションを生成する。いくつかの実施形態では、第1のノード501aは、接続を形成することを第2のノード501bに奨励するように、第1の出力によってロックされるべきデジタル資産のある金額を決定してよい。デジタル資産のその金額は、以前の接続要求に基づいて決定されてよい。以前の接続要求は、第1のノード501aからP2Pネットワークの他のノードへの要求であってよい。追加または代替として、以前の接続要求は、異なるノード501(すなわち、第1のノード501a以外のノード)からP2Pネットワークの他のノード、たとえば、第2のノード501bへの要求であってよい。
【0143】
第1のノード501aは、ブロックチェーン150上に記録された複数の以前の要求トランザクションを集めてよい。トランザクションは、あるノードが別のノードに前記ノード間の接続を加えるように要求しているという意味で「要求」である。第1のノード501aは、たとえば、ブロックチェーンノード104に照会することによって、ブロックチェーン150から直接、トランザクションのうちの1つまたは複数を取得してよい。第1のノード501aは、追加または代替として、専用のサービスプロバイダなどの異なるエンティティからトランザクションのうちの1つまたは複数を取得してよい。
【0144】
各要求トランザクションは、それぞれのP2Pノード501によってブロックチェーンにサブミットされたが、それぞれのP2Pノード501のそれぞれの公開鍵にロックされた出力を有する。各出力は、ブロックチェーンの、たとえば、ビットコインの、ある金額の下位デジタル資産をロックする。各要求トランザクションは、P2Pネットワークのネットワークアドレスを備える。各以前の要求トランザクションは、それぞれのタイムスタンプに関連付けられる。タイムスタンプは、任意の好適な形式を取ってよい。タイムスタンプは、トランザクションがブロックチェーンネットワーク106にサブミットされた、またはブロックチェーン上に記録された時間を示す。たとえば、タイムスタンプはUnix時間であってよい。
【0145】
複数の以前の要求トランザクションを取得して、第1のノード501aは、それぞれの出力によってロックされたそれぞれのデジタル資産金額、およびそれぞれのタイムスタンプに基づいて、回帰モデルを算出する。すなわち、それぞれの金額およびそれぞれのタイムスタンプを備えるデータペアが各トランザクションから抽出され、それらのデータペアは回帰モデルを算出するために使用される。モデルは線形回帰モデルであってよい。例示のモデルが
図13に示される。第1のノード501aは、次いで、回帰モデルを使用して、所与のタイムスタンプ、たとえば、第1のノード501aがブロックチェーンネットワーク106に第1のトランザクションをサブミットする時間に対応するタイムスタンプに対して、第1のトランザクションの第1の出力によってロックされるべきターゲット金額を決定する。
【0146】
【0147】
【0148】
をロックする、以前のトランザクションの一例を示す。
図15は、第2のノード501の公開鍵にロックされたターゲット金額を有する例示の第1のトランザクションを示す。わかるように、第1の出力によってロックされるターゲット金額p
t'が回帰モデルに従って決定されるが、第1の出力によってロックされる金額xが任意に決定されてよいことを除いて、
図15に示す第1のトランザクションは
図6に示したものと類似である。
【0149】
8.1 ネットワークセットアップ価格設定
このセクションは、接続を奨励するための説明する実施形態の特定の実装形態を説明する。
図5を参照しながら説明したP2Pネットワークセットアップを考慮に入れる。ネットワークに加入すべきノードN
1に対して、ノードは、以下のステップに従うことによって、ノードN
2へ送るべき価値を推定する。
1. ノードN
1は、ネットワークセットアップのためにノードN
iが支払った価格を求めてブロックチェーントランザクションを探索する。そのようなトランザクションは、Tx
net-add-N
i(
図14)の中のトランザクション構造によって識別可能である。
2. ノードN
1は、ノードN
iが支払った価格
【0150】
【0151】
のセットを構築する。各価格
【0152】
【0153】
は時間依存であり、ただし、t
iは、ノードN
iのネットワークセットアップトランザクションTx
net-add-N
iがマイニングされたブロックのタイムスタンプである。
3. 価格のセットが与えられると、ノードN
1は、(y
tがp
tとなるように設定されて)セクション2.1に示すような線形回帰モデルを構築する。
4. N
1は、
p
t'=b・t'+a
として、現在時刻t'における最も良好な価格p
t'を算出する。
5. ノードN
1は、価格p
t'を使用して
図15の中のトランザクションTx
net-add-N
1を作成およびブロードキャストする。
【0154】
ノードN1がトランザクションを通じて探索するのではなく、ノードに代わってこの情報を処理できるサービスが将来において与えられてよいことに留意されたい。
【0155】
9. 結論
本明細書における開示が与えられると、開示する技法の他の変形形態または使用事例が当業者に明らかになり得る。本開示の範囲は、説明する実施形態によって限定されず、添付の特許請求の範囲によってのみ限定される。
【0156】
たとえば、上記のいくつかの実施形態は、ビットコインネットワーク106、ビットコインブロックチェーン150、およびビットコインノード104に関して説明されている。しかしながら、ビットコインブロックチェーンがブロックチェーン150の1つの特定の例であること、および上記の説明がいかなるブロックチェーンにも概して適用されてよいことが、諒解されよう。すなわち、本発明は、決してビットコインブロックチェーンに限定されない。より一般的には、ビットコインネットワーク106、ビットコインブロックチェーン150、およびビットコインノード104への、上記のいかなる言及も、それぞれ、ブロックチェーンネットワーク106、ブロックチェーン150、およびブロックチェーンノード104への言及と置き換えられてよい。ブロックチェーン、ブロックチェーンネットワーク、および/またはブロックチェーンノードは、上記で説明したようなビットコインブロックチェーン150、ビットコインネットワーク106、およびビットコインノード104の、説明する特性の一部または全部を共有してよい。
【0157】
本発明の好ましい実施形態では、ブロックチェーンネットワーク106はビットコインネットワークであり、ビットコインノード104は、ブロックチェーン150のブロック151を作成すること、公開すること、伝搬させること、および記憶することの、説明する機能の少なくともすべてを実行する。これらの機能の全部ではなく、1つまたはいくつかしか実行しない他のネットワークエンティティ(または、ネットワーク要素)があってよいことが、除外されない。すなわち、ネットワークエンティティは、ブロックを作成および公開することなく、ブロックを伝搬させることおよび/または記憶することの機能を実行してよい(これらのエンティティが好適なビットコインネットワーク106のノードとは見なされないことを想起されたい)。
【0158】
本発明の他の実施形態では、ブロックチェーンネットワーク106はビットコインネットワークでなくてよい。これらの実施形態では、ブロックチェーン150のブロック151を作成すること、公開すること、伝搬させること、および記憶することの機能の全部ではないが、少なくとも1つまたはいくつかをノードが実行してよいことが除外されない。たとえば、それらの他のブロックチェーンネットワークにおいて、「ノード」は、ブロック151を作成および公開するが、それらのブロック151を記憶せずおよび/または他のノードに伝搬させないように構成される、ネットワークエンティティを指すために使用されてよい。
【0159】
さらにより一般的には、上記の「ビットコインノード」104という用語へのいかなる参照も、「ネットワークエンティティ」または「ネットワーク要素」という用語と置き換えられてよく、そのようなエンティティ/要素は、ブロックを作成すること、公開すること、伝搬させること、および記憶することの役割の一部または全部を実行するように構成される。そのようなネットワークエンティティ/要素の機能は、ブロックチェーンノード104を参照しながら上記で説明した同様の方法で、ハードウェアで実装されてよい。
【0160】
上記の実施形態が単に例として説明されていることが諒解されよう。より一般的には、以下のステートメントのうちの任意の1つまたは複数に従って方法、装置、またはプログラムが提供されてよい。
【0161】
ステートメント1. ピアツーピア(P2P)ネットワークのP2Pノード間の接続を形成するためにブロックチェーンを使用するコンピュータ実装方法であって、P2Pネットワークは、ネットワークアドレスに関連付けられ、複数のP2Pノードを備え、複数のP2Pノードの各々は、それぞれの公開鍵に関連付けられ、方法は、P2Pノードのうちの第1のP2Pノードによって実行され、
P2Pノードのうちの第2のP2Pノードに関連付けられたそれぞれの公開鍵を取得するステップと、
第1のブロックチェーントランザクションを生成するステップであって、第1のブロックチェーントランザクションが、i)第1のP2Pノードのそれぞれの公開鍵に対応する署名を用いて署名された第1の入力、ii)第2のP2Pノードのそれぞれの公開鍵にロックされた第1の出力を備え、第1のブロックチェーントランザクションが、P2Pネットワークのネットワークアドレスを備える、ステップと、
ブロックチェーンネットワークの1つまたは複数のブロックチェーンノードにサブミットされるべき第1のブロックチェーントランザクションをブロックチェーン上に記録させるステップであって、第2のP2Pノードが、ブロックチェーン上での第1のブロックチェーントランザクションの記録に応答してP2Pネットワーク上で第1のP2Pノードと接続するように構成される、ステップとを備える。
【0162】
ステートメント2. ステートメント1の方法であって、複数のP2Pノードの各々は、それぞれの識別子に関連付けられ、第1のブロックチェーントランザクションは、第1のP2Pノードのそれぞれの識別子を備える。
【0163】
ステートメント3. ステートメント2の方法であって、各それぞれのP2Pノードに関連付けられたそれぞれの識別子は、認証局によって認証される。
【0164】
ステートメント4. 前述の任意のステートメントの方法であって、第2のP2Pノードに関連付けられたそれぞれの公開鍵の前記取得するステップは、各それぞれのP2Pノードのそれぞれの公開鍵を備えるリソースを照会するステップを備える。
【0165】
リソースは、公的にアクセス可能であり得るデータベースであってよい。
【0166】
ステートメント5. ステートメント4の方法であって、リソースはドメインネームシステム(DNS)サービスを備える。
【0167】
ステートメント6. ステートメント4またはステートメント5の方法であって、リソースは、それぞれのP2Pノードごとに、それぞれのP2Pノードに関連付けられたそれぞれのインターネットプロトコル(IP)アドレスを備え、第2のP2Pノードに関連付けられたそれぞれの公開鍵の前記取得するステップは、第2のP2Pノードに関連付けられたそれぞれのIPアドレスを取得するステップを備える。
【0168】
ステートメント7. ステートメント6の方法であって、方法は、
第2のP2PノードのそれぞれのIPアドレスを使用して第2のP2Pノードとのインターネットハンドシェイクを開始するステップと、
デジタル署名を用いて署名された第2のP2PノードのそれぞれのIPアドレスを第2のP2Pノードから取得するステップと、
第2のP2Pノードのそれぞれの公開鍵を使用してデジタル署名を検証するステップとを備え、第1のブロックチェーントランザクションの前記生成するステップは、デジタル署名が検証されることを条件とする。
【0169】
ステートメント8. 前述の任意のステートメントの方法であって、第1のP2Pノードは、それぞれのRSA鍵を有し、第1のP2Pノードのそれぞれの公開鍵に対応する署名を生成するために使用される第1のP2Pノードのそれぞれの秘密鍵は、1つまたは複数のハッシュ関数を用いて第1のP2Pノードの少なくともそれぞれのRSA鍵をハッシュすることによって生成される。
【0170】
ハッシュ関数は異なってよく、または同じであってもよい。
【0171】
ステートメント9. ステートメント8の方法であって、第1のP2Pノードのそれぞれの秘密鍵は、少なくとも2つのハッシュ関数を用いて第1のP2Pノードの少なくともそれぞれのRSA鍵をハッシュすることによって生成される。
【0172】
ステートメント10. 前述の任意のステートメントの方法であって、第1のブロックチェーントランザクションは、第1のP2Pノードに関連するそれぞれの専門化を示す1つまたは複数のそれぞれの専門化フラグを備える。
【0173】
専門化は、たとえば、第1のP2Pノードに関連する能力、機能、属性であってよい。
【0174】
ステートメント11. 前述の任意のステートメントの方法であって、第1のブロックチェーンはiii)第2の出力を備え、第2の出力は、P2Pネットワークのネットワークアドレス、および第1のP2Pノードのそれぞれの識別子を備える。
【0175】
ステートメント12. ステートメント10およびステートメント11の方法であって、第1のブロックチェーントランザクションの第2の出力は、1つまたは複数のそれぞれの専門化フラグを備える。
【0176】
ステートメント13. ステートメント1~10のうちのいずれかの方法であって、第1のブロックチェーントランザクションの第1の出力は、P2Pネットワークのネットワークアドレス、および第1のP2Pノードのそれぞれの識別子を備える。
【0177】
ステートメント14. ステートメント10およびステートメント13の方法であって、第1のブロックチェーントランザクションの第1の出力は、1つまたは複数のそれぞれの専門化フラグを備える。
【0178】
ステートメント15. 前述の任意のステートメントの方法であって、第1のブロックチェーンはiv)第3の出力を備え、ブロックチェーントランザクションの入力と一緒に実行されたとき、第3の出力は、a)第1のP2Pノードに関連付けられたそれぞれの公開鍵に対応する署名、またはb)第2のP2Pノードに関連付けられたそれぞれの公開鍵に対応するそれぞれの署名のいずれかを、ブロックチェーントランザクションの入力が備えることを必要とするように構成され、第2のP2Pノードは、第1のブロックチェーントランザクションの第3の出力の消費の成功に応答して第1のP2Pノードとの接続を断つように構成される。
【0179】
ステートメント16. ステートメント15の方法であって、第3の出力は、チャレンジデータのハッシュを備え、第3の出力は、a)第1のP2Pノードに関連付けられたそれぞれの公開鍵に対応する署名、またはb)第2のP2Pノードに関連付けられたそれぞれの公開鍵に対応するそれぞれの署名のいずれか、およびチャレンジデータを、ブロックチェーントランザクションの入力が備えることを必要とするように構成される。
【0180】
ステートメント17. ステートメント15またはステートメント16の方法であって、
第2のブロックチェーントランザクションを生成するステップであって、第2のブロックチェーントランザクションが、第1のブロックチェーントランザクションの第3の出力を参照するとともに、第1のP2Pノードに関連付けられたそれぞれの公開鍵に対応する署名を備える、入力を備える、ステップと、
ブロックチェーンネットワークの1つまたは複数のブロックチェーンノードにサブミットされるべき第2のブロックチェーントランザクションをブロックチェーン上に記録させるステップであって、第2のブロックチェーントランザクションが、第1のP2Pノードとの接続を断つための第2のP2Pノードへのシグナリングのためのものである、ステップとを備える。
【0181】
ステートメント18. 前述の任意のステートメントの方法であって、
P2Pノードのうちの異なるそれぞれのP2Pノードに各々が関連付けられた1つまたは複数のそれぞれの公開鍵を取得するステップと、
1つまたは複数のそれぞれの公開鍵の各々に対して、それぞれのブロックチェーントランザクションを生成するステップであって、それぞれのブロックチェーントランザクションが、i)第1のP2Pノードのそれぞれの公開鍵に対応する署名を用いて署名された第1の入力、およびii)異なるそれぞれのP2Pノードのそれぞれの公開鍵にロックされた第1の出力を備え、それぞれのブロックチェーントランザクションが、P2Pネットワークのネットワークアドレスを備える、ステップと、
ブロックチェーンネットワークの1つまたは複数のブロックチェーンノードにサブミットされるべきそれぞれのブロックチェーントランザクションの各々をブロックチェーン上に記録させるステップであって、各異なるそれぞれのP2Pノードが、ブロックチェーン上でのそれぞれのブロックチェーントランザクションの記録に応答して第1のP2Pノードと接続するように構成される、ステップとを備える。
【0182】
ステートメント19. 前述の任意のステートメントの方法であって、ブロックチェーンは、i)第3のP2Pノードのそれぞれの公開鍵に対応する署名を用いて署名された入力、およびii)第4のP2Pノードのそれぞれの公開鍵にロックされた第1の出力を備える、第3のブロックチェーントランザクションを備え、第3のブロックチェーントランザクションは、P2Pネットワークのネットワークアドレスを備え、方法は、
第3のブロックチェーントランザクションに基づいて、第3のP2Pノードが第4のP2Pノードに接続されていることを決定するステップを備える。
【0183】
ステートメント20. 前述の任意のステートメントの方法であって、
複数のそれぞれの要求トランザクションを取得するステップであって、各それぞれの要求トランザクションが、それぞれのP2Pノードのそれぞれの公開鍵にロックされたそれぞれの第1の出力を備え、それぞれの第1の出力が、それぞれの金額のデジタル資産をロックし、各それぞれの要求トランザクションが、P2Pネットワークのネットワークアドレスを備え、各それぞれの要求トランザクションが、それぞれのタイムスタンプに関連付けられる、ステップと、
各それぞれの要求トランザクションのそれぞれの金額およびそれぞれのタイムスタンプに基づいて回帰モデルを算出するステップと、
ターゲットタイムスタンプを想定してターゲット金額を決定するために回帰モデルを使用するステップであって、第1のトランザクションの第1の出力が、ターゲット金額のデジタル資産をロックする、ステップとを備える。
【0184】
ステートメント21. ステートメント20の方法であって、前記取得するステップは、ブロックチェーンから複数のそれぞれの要求トランザクションのうちの少なくともいくつかを取得するステップを備える。
【0185】
ステートメント22. ステートメント20またはステートメント21の方法であって、前記取得するステップは、サービスプロバイダから複数のそれぞれの要求トランザクションのうちの少なくともいくつかを受信するステップを備える。
【0186】
ステートメント23. ステートメント20~22のうちのいずれかの方法であって、回帰モデルは線形回帰モデルである。
【0187】
ステートメント24. ピアツーピア(P2P)ネットワークのP2Pノード間の接続を形成するためにブロックチェーンを使用するコンピュータ実装方法であって、P2Pネットワークは、ネットワークアドレスに関連付けられ、複数のP2Pノードを備え、複数のP2Pノードの各々は、それぞれの公開鍵に関連付けられ、ブロックチェーンは、第1のブロックチェーントランザクションを備え、第1のブロックチェーントランザクションは、i)第1のP2Pノードのそれぞれの公開鍵に対応する署名を用いて署名された第1の入力、ii)第2のP2Pノードのそれぞれの公開鍵にロックされた第1の出力を備え、第1のブロックチェーントランザクションは、P2Pネットワークのネットワークアドレスを備え、方法は、P2Pノードのうちの第2のP2Pノードによって実行され、
ブロックチェーンが第1のブロックチェーントランザクションを備えることを決定するステップと、
前記決定するステップに応答して、P2Pネットワーク上で第1のP2Pノードと接続するステップとを備える。
【0188】
ステートメント25. ステートメント24の方法であって、P2Pネットワーク上で第1のP2Pノードと前記接続するステップは、P2Pネットワーク上で第2のP2Pが通信できるP2Pノードのリストに第1のP2Pノードを加えるステップを備える。
【0189】
ステートメント26. ステートメント24またはステートメント25の方法であって、
第1のP2Pノードからインターネットハンドシェイクを受信するステップと、
第2のP2Pノードのそれぞれの公開鍵に対応するデジタル署名を用いて署名された第2のP2PノードのそれぞれのIPアドレスを第1のP2Pノードへ送るステップとを備える。
【0190】
ステートメント27. ステートメント26の方法であって、第2のP2Pノードは、それぞれのRSA鍵を有し、第2のP2Pノードのそれぞれの公開鍵に対応する署名を生成するために使用される第2のP2Pノードのそれぞれの秘密鍵は、1つまたは複数のハッシュ関数を用いて第2のP2Pノードの少なくともそれぞれのRSA鍵をハッシュすることによって生成される。
【0191】
ステートメント28. ステートメント24またはそれに従属する任意のステートメントの方法であって、第1のブロックチェーントランザクションは、第1のP2Pノードに関連するそれぞれの専門化を示す1つまたは複数のそれぞれの専門化フラグを備え、方法は、
1つまたは複数のそれぞれの専門化フラグによって示されるような第1のP2Pノードに関連するそれぞれの専門化に基づいて第1のP2Pノードと通信するステップを備える。
【0192】
ステートメント29. ステートメント24またはそれに従属する任意のステートメントの方法であって、第1のブロックチェーンは第3の出力を備え、ブロックチェーントランザクションの入力と一緒に実行されたとき、第3の出力は、a)第1のP2Pノードに関連付けられたそれぞれの公開鍵に対応する署名、またはb)第2のP2Pノードに関連付けられたそれぞれの公開鍵に対応するそれぞれの署名のいずれかを、ブロックチェーントランザクションの入力が備えることを必要とするように構成され、方法は、
第3の出力が首尾よく消費されていることを決定するステップと、
前記決定するステップに応答して、P2Pネットワーク上で第1のP2Pノードとの接続を断つステップとを備える。
【0193】
ステートメント30. ステートメント29の方法であって、第3の出力が首尾よく消費されていることを前記決定するステップは、
第2のブロックチェーントランザクションを生成するステップであって、第2のブロックチェーントランザクションが、第1のブロックチェーントランザクションの第3の出力を参照するとともに、第2のP2Pノードに関連付けられたそれぞれの公開鍵に対応する署名を備える、入力を備える、ステップと、
ブロックチェーンネットワークの1つまたは複数のブロックチェーンノードにサブミットされるべき第2のブロックチェーントランザクションをブロックチェーン上に記録させるステップとを備える。
【0194】
ステートメント31. ステートメント30の方法であって、第3の出力は、チャレンジデータのハッシュを備え、第3の出力は、a)第1のP2Pノードに関連付けられたそれぞれの公開鍵に対応する署名、またはb)第2のP2Pノードに関連付けられたそれぞれの公開鍵に対応するそれぞれの署名のいずれか、およびチャレンジデータを、ブロックチェーントランザクションの入力が備えることを必要とするように構成され、方法は、
チャレンジデータを取得するステップを備え、第2のブロックチェーントランザクションの入力は、チャレンジデータを備える。
【0195】
ステートメント32. ステートメント31の方法であって、チャレンジデータは認証局から取得される。
【0196】
ステートメント33. ステートメント30またはそれに従属する任意のステートメントの方法であって、第2のブロックチェーントランザクションの前記生成するステップは、第1のP2PノードがP2Pネットワーク上でオフラインに進んでおり、および/または不正直に行動しているという決定に応答する。
【0197】
ステートメント34. コンピュータ機器であって、
1つまたは複数のメモリユニットを備えるメモリと、
1つまたは複数の処理ユニットを備える処理装置とを備え、メモリは、処理装置上で動作するように構成されたコードを記憶し、コードは、処理装置上にあるときにステートメント1~33のうちのいずれかの方法を実行するように構成される。
【0198】
ステートメント35. コンピュータ可読ストレージ上に組み込まれ、1つまたは複数のプロセッサ上で動作するときにステートメント1~33のうちのいずれかの方法を実行するように構成された、コンピュータプログラム。
【0199】
本明細書で開示する別の態様によれば、第1のP2Pノードおよび第2のP2Pノードのアクションを備える方法が提供されてよい。
【0200】
本明細書で開示する別の態様によれば、第1のP2Pノードおよび第2のP2Pノードのコンピュータ機器を備えるシステムが提供されてよい。
【符号の説明】
【0201】
100 システム
101 パケット交換ネットワーク
102 コンピュータ端末、コンピュータ機器
102a コンピュータ機器、アリスのデバイス、アリスの機器
102b コンピュータ機器、ボブのデバイス、ボブの機器
103 ユーザ、パーティ、エージェント
103a ユーザ、エンティティ、ファーストパーティ、アリス
103b ユーザ、エンティティ、セカンドパーティ、ボブ
104 ブロックチェーンノード、ビットコインノード
105 クライアントアプリケーション、クライアント
106 ピアツーピア(P2P)ネットワーク、分散ネットワーク、ブロックチェーンネットワーク、ビットコインネットワーク
107 サイドチャネル
150 ブロックチェーン、ビットコインブロックチェーン
151 データ、ブロック
152 トランザクション
152i 先行するトランザクション
152j 現在のトランザクション、新規トランザクション
153 ジェネシスブロック(Gb)
154 順序付きセット、順序付きプール
155 ブロックポインタ
201 ヘッダ
202 入力、入力フィールド
203 出力、出力フィールド、トランザクション出力、未消費トランザクション出力、UTXO
401 トランザクションエンジン
402 ユーザインターフェース(UI)レイヤ
450 ノードソフトウェア
451 プロトコルエンジン
452 スクリプトエンジン
453 スタック
454 アプリケーションレベル決定エンジン
455 ブロックチェーン関連機能モジュール
455C 総意モジュール
455P 伝搬モジュール
455S 記憶モジュール
500 ユーザインターフェース(UI)
500 ピアツーピア(P2P)ネットワーク
501 UI要素、ユーザ選択可能要素、P2Pノード
501a 第1のP2Pノード
501b 第2のP2Pノード
501c 第3のP2Pノード
501d 第4のP2Pノード
501e 第5のP2Pノード
502 UI要素、データ入力フィールド
503 情報要素
【国際調査報告】