(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-12-26
(54)【発明の名称】受信側が促進するブロックチェーントランザクションのための方法及びシステム
(51)【国際特許分類】
G06Q 20/38 20120101AFI20241219BHJP
H04L 9/32 20060101ALI20241219BHJP
【FI】
G06Q20/38 310
H04L9/32 200Z
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2024535379
(86)(22)【出願日】2022-12-08
(85)【翻訳文提出日】2024-06-13
(86)【国際出願番号】 EP2022085036
(87)【国際公開番号】W WO2023117471
(87)【国際公開日】2023-06-29
(32)【優先日】2021-12-23
(33)【優先権主張国・地域又は機関】GB
(81)【指定国・地域】
(71)【出願人】
【識別番号】318001991
【氏名又は名称】エヌチェーン ライセンシング アーゲー
(74)【代理人】
【識別番号】100107766
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100229448
【氏名又は名称】中槇 利明
(72)【発明者】
【氏名】デヴィーズ,ジャック オーウェン
(72)【発明者】
【氏名】ワハブ,ジェド
(72)【発明者】
【氏名】ジャン,ウェイ
(72)【発明者】
【氏名】スミス,マーク
【テーマコード(参考)】
5L020
【Fターム(参考)】
5L020AA71
(57)【要約】
受信側が促進するブロックチェーントランザクションを生成するシステム及びコンピュータ実装方法。受信側装置は、受信側アウトポイントを送信側装置に送信する。送信側装置は、部分的に完了したトランザクションへの受信側インプットとして受信側アウトポイントを含み、少なくとも1つの送信側インプットを含む、部分的に完了したトランザクションを返す。次に、受信側装置は、部分的に完了したトランザクションにアウトプットとして受信側アウトプットスクリプトを追加し、全てのインプットとアウトプットに渡ってデジタル署名を使用して受信側アウトポイントのアンロックスクリプトを追加して完全なトランザクションを生成し、伝搬及びブロックへの包含のために、ブロックチェーンネットワークのブロックチェーンノードに完全なトランザクションを送信する。
【特許請求の範囲】
【請求項1】
受信側により促進されるブロックチェーントランザクションを生成するコンピュータ実装方法であって、前記方法は、
受信側装置から送信側装置に受信側アウトポイントを送信するステップと、
前記受信側装置において、前記送信側装置から、部分的に完了したトランザクションを受信するステップであって、前記部分的に完了したトランザクションは、前記部分的に完了したトランザクションへの受信側インプットとして前記受信側アウトポイントを含み、少なくとも1つの送信側インプットを含む、ステップと、
前記部分的に完了したトランザクションが、前記送信側装置によって前記少なくとも1つの送信側インプットに適用され全てのアウトプットよりも少ない1つ以上のデジタル署名を含むことを決定するステップと、
前記部分的に完了したトランザクションへのアウトプットとして受信側アウトプットスクリプトを追加するステップと、
全てのインプット及びアウトプットに渡ってデジタル署名を使用して前記受信側アウトポイントのアンロックスクリプトを追加し、完全なトランザクションを生成するステップと、
伝搬及びブロックへの包含のために、前記受信側装置からブロックチェーンネットワークのブロックチェーンノードに前記完全なトランザクションを送信するステップと、
を含む方法。
【請求項2】
前記部分的に完了したトランザクションが全てのアウトプットに渡る署名を含まないことを決定するステップ、を更に含む請求項1に記載の方法。
【請求項3】
前記部分的に完了したトランザクションが、前記送信側装置によって前記少なくとも1つの送信側インプットに適用され全てのアウトプットより少ない1つ以上のデジタル署名を含むことを決定するステップは、前記部分的に完了したトランザクションが、前記送信側装置によって適用された前記1つ以上のデジタル署名を無効にすることなく、前記受信側アウトプットスクリプトの追加を許可することを決定するステップを含む、請求項1に記載の方法。
【請求項4】
前記部分的に完了したトランザクションが、前記送信側装置によって前記少なくとも1つの送信側インプットに適用され全てのアウトプットより少ない1つ以上のデジタル署名を含むことを決定するステップは、前記送信側装置によって適用された全ての署名が、SIGHASH_SINGLE又はSIGHASH_NONEのタイプであることを決定するステップを含む、請求項1に記載の方法。
【請求項5】
決定するステップは、前記送信側装置によって適用された署名がSIGHASH_ALLタイプではないことを決定するステップを含む、請求項1に記載の方法。
【請求項6】
前記受信側装置が、前記送信側装置に、送信側インプット及び送信側アウトプットに関する最大条件を提供するステップ、を更に含む請求項1に記載の方法。
【請求項7】
前記受信側装置が、前記部分的に完了したトランザクションにおける送信側インプット及び送信側アウトプットの数を決定し、前記送信側インプット及び送信側アウトプットの数が、前記最大条件によって設定された最大値より大きくないことを確認するステップ、を更に含む請求項6に記載の方法。
【請求項8】
前記部分的に完了したトランザクションにおける送信側インプット及び送信側アウトプットのバイトサイズを決定し、前記バイトサイズが前記最大条件によって設定された最大サイズより大きくないことを確認するステップ、を更に含む請求項6に記載の方法。
【請求項9】
前記受信側装置から前記送信側装置に前記受信側アウトポイントを送信するステップは、前記受信側アウトポイントをトランザクションテンプレートへのインプットとして含む前記トランザクションテンプレートを生成して送信するステップを含む、請求項1に記載の方法。
【請求項10】
前記トランザクションテンプレートは、1つのアウトプットとして受信側アウトプットアドレスを参照するアウトプットスクリプトを更に含み、前記1つのアウトプットへの移転量を指定する、請求項9に記載の方法。
【請求項11】
前記受信側装置において、
トランザクション手数料を決定するステップと、
前記受信側アウトポイントに関連付けられた格納された量と前記トランザクション手数料との差から超過量を決定するステップと、
前記超過量を前記受信側アウトプットスクリプトに指定するステップと、
を更に含む請求項1に記載の方法。
【請求項12】
前記送信側装置において、以下:
前記少なくとも1つの送信側インプットに関連付けられた合計量が移転量以上となるように、前記少なくとも1つの送信側インプットを選択し、
前記部分的に完了したトランザクションに、全てのアウトプットよりも少ないアウトプットを含む前記部分的に完了したトランザクションの各々の部分に署名する、各送信側インプットに対するデジタル署名を添付し、
前記部分的に完了したトランザクションを前記受信側装置に送信する、
ことにより、前記部分的に完了したトランザクションを生成するステップ、を更に含む請求項1に記載の方法。
【請求項13】
コンピューティング装置であって、
1つ以上のプロセッサと、
メモリと、
前記メモリに格納されたコンピュータ実行可能命令であって、前記1つ以上のプロセッサにより実行されると、前記プロセッサに請求項1~12のいずれか一項に記載の方法を実行させる、コンピュータ実行可能命令と、
を含むコンピューティング装置。
【請求項14】
前記コンピューティング装置は販売時点端末を含む、請求項13に記載のコンピューティング装置。
【請求項15】
プロセッサ実行可能命令を格納しているコンピュータ可読媒体であって、前記プロセッサ実行可能命令は、1つ以上のプロセッサにより実行されると、前記プロセッサに請求項1~12のいずれか一項に記載の方法を実行させる命令を含む、コンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、ブロックチェーンネットワークに関し、特に、受信側が促進するブロックチェーントランザクションを生成及び実装するための方法及び装置に関する。
【背景技術】
【0002】
ブロックチェーンとは、分散型ピアツーピア(P2P)ネットワーク(以下で「ブロックチェーンネットワーク」とも呼ばれる)内の複数のノードの各々において、ブロックチェーンの重複コピーが維持され広く公表される、分散データ構造の形態を指す。ブロックチェーン内のトランザクションは、以下:デジタルアセット(つまり、多数のデジタルトークン)を運ぶこと、仮想台帳又はレジストリの中のジャーナルエントリのセットを順序付けること、タイムスタンプエントリを受信し処理すること、及び/又はインデックスポインタを時系列にすること、のうちの1つ以上を実行するために使用される。
【0003】
「アウトプットベースの」モデル(UTXOに基づくモデルと呼ばれることもある)では、所与のトランザクションのデータ構造は、1つ以上のインプット及び1つ以上のアウトプットを含む。任意の使用可能アウトプットは、先行するトランザクションシーケンスから導出可能なデジタルアセットの量を指定する要素を含む。使用可能アウトプットは、時にUTXO(unspent transaction output、未使用トランザクションアウトプット)又は「アウトポイント(outpoint)」と呼ばれる。アウトプットは、アウトプットの将来の償還(redemption)のための条件を指定するロックスクリプトを更に含んでよい。ロックスクリプトは、デジタルトークン又はアセットを妥当性確認し及び移転するために必要な条件を定義する述部(predicate)である。(コインベーストランザクション以外の)トランザクションの各インプットは、先行するトランザクション内のそのようなアウトプットへのポインタ(つまり参照)を含み、ポイントされたアウトプットのロックスクリプトをアンロックするためのアンロックスクリプトを更に含んでよい。
【0004】
ブロックチェーンネットワークが多数の参加者にとって実用的に役立つように、エンドユーザ装置はクライアントアプリケーション(「ウォレット」又はSimplified Payment Verification (SPV)ソフトウェアと呼ばれることもある)を操作することがある。このようなクライアントアプリケーションは、完全なブロックチェーンノードの機能を備えておらず、ブロックチェーンの完全なコピーを持たない。
【0005】
ブロックチェーントランザクションは、通常、適正にマイニングされた有効なブロックにトランザクションを含めるのに成功したブロックチェーンノード(例えばマイナー)に支払可能なトランザクション手数料(及び/又は幾つかのプロトコルの場合には「ガス」)を含む。典型的なモデルは、送信側ノードがトランザクションへのインプットとして十分なデジタルアセット(暗号通貨など)を提供し、インプットのデジタルアセットの一部がトランザクション手数料の支払に使用されるものである。指定された量のデジタルアセットが受信側ノードのアウトプットスクリプトに割り当てられるか、移転され、残りのアセットは「お釣り(change)」として送信側のアウトプットスクリプトに割り当てられるか、送信される。これにより、通常、クレジットカードの手数料などの金銭的なトランザクションのコストは商人(受信側)によって負担されるという点で、一般的な小売消費者トランザクションを逆転する。これは、日常的なトランザクションのためのブロックチェーンシステムの採用と使用に対する障壁となり、一部の法域では法律や規制によって禁止される可能性がある。しかし、商人/受信側は、見込み消費者装置に、トランザクションを構築する際に商人にトランザクション手数料を請求する権限を与えることは期待できない。これは、受信側ノードがロックされていない形式で適切なインプットを、実質的に「無記名小切手」を、提供する必要があるためである。これは、受取人に予想外に高額なトランザクション手数料を課す可能性があり、悪用されやすく、実行不可能である可能性がある。これらの欠点の少なくとも幾つかを解決する、受取人が促進するブロックチェーントランザクションを実行するための方法及びシステムを有することが有利である。
【図面の簡単な説明】
【0006】
例として、本願の例示的な実施形態を示す以下の添付の図面を参照する。
【0007】
【
図1】ブロックチェーンを実装するための例示的なシステムを示す。
【0008】
【
図2】トランザクションプロトコルの例を示している。
【0009】
【
図3A】クライアントアプリケーションの例示的な実装を示している。
【0010】
【
図3B】クライアントアプリケーションの例示的なユーザインタフェースを示している。
【0011】
【
図4】ブロックチェーンノードのノードソフトウェアの例を示している。
【0012】
【
図5】受信側が促進するブロックチェーントランザクションを生成するために受信側装置において実施される1つの例示的な方法をフローチャート形式で示す。
【0013】
【
図6】部分的に完了したブロックチェーントランザクションを生成するために送信側装置において実施される1つの例示的な方法をフローチャート形式で示す。
【0014】
【
図7】受信側が促進するブロックチェーントランザクションを生成するために受信側装置において実施される別の例示的な方法をフローチャート形式で示す。
【0015】
【
図8】保持トランザクションのための単純化された例示的なシステムを図示する。
【0016】
【
図9A】例示的なトランザクションデータ構造を示す。
【
図9B】例示的なトランザクションデータ構造を示す。
【
図9C】例示的なトランザクションデータ構造を示す。
【
図9D】例示的なトランザクションデータ構造を示す。
【
図9E】例示的なトランザクションデータ構造を示す。
【
図9F】例示的なトランザクションデータ構造を示す。
【0017】
図中の同様の参照符号は同様の要素及び特徴を示すために使用される。
【発明を実施するための形態】
【0018】
一態様では、受信側が促進するブロックチェーントランザクションを生成するコンピュータ実装方法が提供され得る。前記方法は、
受信側装置から送信側装置に受信側アウトポイントを送信するステップと、
前記送信側装置から、部分的に完了したトランザクションを受信するステップであって、前記部分的に完了したトランザクションは、前記部分的に完了したトランザクションへの受信側インプットとして前記受信側アウトポイントを含み、少なくとも1つの送信側インプットを含む、ステップと、
全てのインプット及びアウトプットに渡ってデジタル署名を使用して前記受信側アウトポイントのアンロックスクリプトを追加し、完全なトランザクションを生成するステップと、
伝搬及びブロックへの包含のために、ブロックチェーンネットワークのブロックチェーンノードに前記完全なトランザクションを送信するステップと、を含む。
【0019】
幾つかの実装では、前記方法は、前記部分的に完了したトランザクションを受信した後に、前記部分的に完了したトランザクションが、前記送信側装置によって前記少なくとも1つの送信側インプットに適用され全てのアウトプットより少ない1つ以上のデジタル署名を含むことを決定するステップ、を含み得る。幾つかの場合には、決定するステップは、前記部分的に完了したトランザクションが全てのアウトプットに渡る署名を含まないことを決定するステップ、を更に含む。決定するステップは、前記部分的に完了したトランザクションが、前記送信側装置によって適用された1つ以上のデジタル署名を無効にすることなく、前記受信側アウトプットスクリプトの追加を許可することを決定するステップを含み得る。決定するステップは、前記送信側装置によって適用された全ての署名がタイプSIGHASH_SINGLE又はSIGHASH_NONEであることを決定するステップを含み得る。決定するステップは、前記送信側装置によって適用された署名がSIGHASH_ALLタイプではないことを決定するステップを含み得る。
【0020】
幾つかの実施形態では、前記方法は、前記受信側装置に関連付けられた送信側インプット及び送信側アウトプットに関する最大条件を前記送信側装置に提供するステップを更に含み得る。前記方法は、前記受信側装置が、前記部分的に完了したトランザクションにおける送信側インプット及び送信側アウトプットの数を決定し、前記送信側インプット及び送信側アウトプットの数が、前記最大条件によって設定された最大値より大きくないことを確認するステップを含み得る。前記方法は、前記部分的に完了したトランザクションにおける送信側インプット及び送信側アウトプットのバイトサイズを決定し、前記最大条件によって設定された最大サイズより大きくないことを確認するステップを含み得る。
【0021】
別の態様では、受信側が促進するブロックチェーントランザクションを生成するコンピューティング装置が提供され得る。前記コンピューティング装置は、メモリと、1つ以上のプロセッサと、実行されると前記プロセッサに本願明細書に記載の方法のうちの1つ以上を実行させるコンピュータ実行可能命令と、を含んでよい。
【0022】
幾つかの実施形態では、受信側アウトポイントを受信側装置から送信側装置に送信することは、トランザクションテンプレートへのインプットとして前記受信側アウトポイントを含む前記トランザクションテンプレートを生成して送信することを含む。幾つかの場合には、前記トランザクションテンプレートは、1つのアウトプットとして受信側アウトプットアドレスを参照するアウトプットスクリプトを更に含み、前記1つのアウトプットへの移転量を指定する。
【0023】
幾つかの実装では、前記方法は、
トランザクション手数料を決定するステップと、
前記受信側アウトポイントに関連付けられた格納された量と前記トランザクション手数料との差から超過量を決定するステップと、
前記超過量を前記受信側アウトプットスクリプトに指定するステップと、
を更に含む。
【0024】
幾つかの実装では、前記方法は、前記送信側装置において、以下:
前記少なくとも1つの送信側インプットに関連付けられた合計量が移転量以上となるように、前記少なくとも1つの送信側インプットを選択し、
前記部分的に完了したトランザクションに、全てのアウトプットよりも少ないアウトプットを含む前記部分的に完了したトランザクションの各々の部分に署名する、各送信側インプットに対するデジタル署名を添付し、
前記部分的に完了したトランザクションを前記受信側装置に送信する、
ことにより、前記部分的に完了したトランザクションを生成するステップ、を更に含む。
【0025】
更なる態様において、本出願は、メモリと、1つ以上のプロセッサと、1つ以上のプロセッサによって実行されると、前記1つ以上のプロセッサに本明細書に記載される方法の少なくとも1つを実行させるメモリに格納されたコンピュータ実行可能命令と、を有するコンピューティング装置を記載する。
【0026】
更に別の態様では、プロセッサ実行可能命令を格納しているコンピュータ可読媒体であって、前記プロセッサ実行可能命令は、1つ以上のプロセッサにより実行されると、前記プロセッサに本願明細書に記載の方法のうちの少なくとも1つを実行させる、コンピュータ可読媒体が提供され得る。
【0027】
本開示の他の例示的な実施形態は、図面と関連して以下の詳細な説明を読むことから当業者に明らかになるだろう。
【0028】
本願では、用語「及び/又は」は、列挙された要素単独、任意の一部の組み合わせ、又は要素の全部、を含む列挙された要素の全部の可能な組み合わせ及び一部の組み合わせをカバーすることを意図しており、必ずしも追加要素を排除しない。
【0029】
本願では、用語「...又は...のうちの少なくとも1つ」は、列挙された要素単独、任意の一部の組み合わせ、又は要素の全部、を含む列挙された要素の全部の可能な組み合わせ及び一部の組み合わせをカバーすることを意図しており、必ずしも追加要素を排除せず、必ずしも全部の要素を必要としない。
【0030】
<例示的なシステムの概要>
図1は、ブロックチェーン150を実装するための例示的なシステム100を示す。システム100は、典型的にはインターネットのような広域インターネットワークであるパケット交換ネットワーク101を含んでよい。パケット交換ネットワーク101は、パケット交換ネットワーク101内にピアツーピア(P2P)ネットワーク106を形成するように配置され得る複数のブロックチェーンノード104を含む。図示されないが、ブロックチェーンノード104は、ほぼ完全なグラフとして配置されてよい。各ブロックチェーンノード104は、従って、他のブロックチェーンノード104と高度に結合される。
【0031】
各ブロックチェーンノード104は、ピアのコンピュータ機器を含み、ノード104のうちの異なるノード104は異なるピアに属する。各ブロックチェーンノード104は、1つ以上のプロセッサ、例えば、1つ以上の中央処理装置(CPU)、アクセラレータプロセッサ、特定用途向けプロセッサ、及び/又はフィールドプログラマブルゲートアレイ(FPGA)、及び特定用途向け集積回路(ASIC)のような他の機器、により実装される処理機器を含む。各ノードはまた、メモリ、すなわち、非一時的コンピュータ読み取り可能媒体又は媒体の形態のコンピュータ読み取り可能記憶装置を備える。メモリは、1つ以上のメモリ媒体、例えば、ハードディスクなどの磁気媒体、固体ドライブ(solid-state drive (SSD))、フラッシュメモリ又はEEPROMなどの電子媒体、及び/又は光ディスクドライブなどの光学的媒体を使用する1つ以上のメモリユニットを含む。
【0032】
ブロックチェーン150は、データのブロック151のチェーンを含み、ブロックチェーン150の各々のコピーは、分散型又はブロックチェーンネットワーク160内の複数のノード104の各々において維持される。上述のように、ブロックチェーン150のコピーを維持することは、必ずしも、ブロックチェーン150全体を格納することを意味しない。代わりに、各ブロックチェーンノード150が各ブロック151のブロックヘッダ(後述する)を格納する限り、ブロックチェーン150からデータを取り除くことができる。チェーン内の各ブロック151は、1つ以上のトランザクション152を含む、ここでは、この文脈におけるトランザクションは、一種のデータ構造を表す。データ構造の性質は、トランザクションモデル又はスキームの一部として使用されるトランザクションプロトコルのタイプに依存する。所与のブロックチェーンは、全体を通して、1つの特定のトランザクションプロトコルを使用する。1つの一般的なタイプのトランザクションプロトコルでは、各トランザクション152のデータ構造は、少なくとも1つのインプット及び少なくとも1つのアウトプットを含む。各アウトプットは、資産としてのデジタルアセットの量を表す量を指定する。この例では、アウトプットが暗号的にロックされているのはユーザ103である(ロックを解除し、それによって償還又は使用するために、そのユーザの署名又は他の解を必要とする)。各インプットは、先行するトランザクション152のアウトプットを指し示し、それによって、トランザクションをリンクする。
【0033】
各ブロック151は、また、ブロック151への逐次的順序を定義するように、チェーン内の先に生成されたブロック151を遡ってポイントするブロックポインタ155を含む。(コインベーストランザクション以外の)各トランザクション152は、トランザクションのシーケンスに順序を定義するために、前のトランザクションへのポインタを有する(注:トランザクション152のシーケンスは、分岐することが許される)。ブロック151のチェーンは、チェーンの第1ブロックであったジェネシスブロック(genesis block (Gb))153にまで戻る。チェーン150の初期に1つ以上のオリジナルトランザクション152は、先行するトランザクションではなくジェネシスブロック153を指し示した。
【0034】
ブロックチェーンノード104の各々はトランザクション152を他のブロックチェーンノード104へ転送し、それにより、ネットワーク106に渡りトランザクション152を伝播させるよう構成される。各ブロックチェーンノード104は、ブロック151を生成し、同じブロックチェーン150の各々のコピーを自身の各々のメモリに格納するよう構成される。各ブロックチェーンノード104はまた、ブロック151に組み込まれるのを待つトランザクション152の順序付きセット154を維持する。順序付きセット154は、時に「メモプール(mempool)」と呼ばれる。この用語は、本願明細書では、任意の特定のブロックチェーン、プロトコル、又はモデルに限定されない。それは、ノード104が有効であるとして受け付けた、及びノード104が同じアウトプットを使用しようと試みる他のトランザクションを受け付けないよう義務付けられたトランザクションの順序付きセットを表す。
【0035】
所与の現在のトランザクション152jにおいて、インプット(又はその各々)は、トランザクションのシーケンスの中の先行トランザクション152iのアウトプットを参照するポインタを含む、このアウトプットが現在のトランザクション152jにおいて償還されるか又は「消費される(spent)」ことを指定する。一般に、先行するトランザクションは、順序付きセット154又は任意のブロック151内の任意のトランザクションであり得る。先行するトランザクション152iは、必ずしも、現在のトランザクション152jが生成された又はネットワーク106へ送信されたときに存在する必要はないが、先行するトランザクション152iは、現在のトランザクションが有効であるために存在し妥当性確認されている必要がある。従って、本願明細書で「先行する」は、ポインタによりリンクされた論理的シーケンスの中で先行するものを表し、必ずしも時系列の中での生成又は送信の時間を表さない。従って、それは、必ずしも、トランザクション152i,152jが順不同で生成され又は送信されることを排除しない(以下の親のない(orphan)トランザクションに関する議論を参照する)。先行するトランザクション152iは、等しく、祖先(antecedent)又は先行(predecessor)トランザクションと呼ばれ得る。
【0036】
現在のトランザクション152jのインプットは、インプット認可、例えば先行するトランザクション152iのアウトプットがロックされているユーザ103aの署名も含む。次に、現在のトランザクション152jのアウトプットは、新しいユーザ又はエンティティ103bに暗号的にロックすることができる。従って、現在のトランザクション152jは、先行するトランザクション152iのインプットに定義された量を、現在のトランザクション152jのアウトプットに定義された新しいユーザ又はエンティティ103bに移転することができる。ある場合には、トランザクション152は、複数のユーザ又はエンティティ間でインプット量を分割するために複数のアウトプットを有してもよいエンティティ(そのうちの1つは、お釣りを与えるために、元のユーザ又はエンティティ103aであってもよい)。幾つかの場合には、トランザクションが複数のインプットを有し、1つ以上の先行するトランザクションの複数のアウトプットから量をまとめ、現在のトランザクションの1つ以上のアウトプットに再分配することもできる。
【0037】
ビットコインのようなアウトプットに基づくトランザクションプロトコルによると、ユーザ又はマシンのようなエンティティ103は、新しいトランザクション152jに作用したいとき、エンティティは新しいトランザクションを自身のコンピュータ端末102から受信側へ送信する。エンティティ又は受信側は、結局、このトランザクションをネットワーク106のブロックチェーンノード104のうちの1つ以上(これらは、今日では、標準的にサーバ又はデータセンタであるが、原理的に他のユーザ端末も可能である)へと送信する。幾つかの例では、新しいトランザクション152jに作用するエンティティ103が、トランザクションを、受信側ではなくブロックチェーンノード104のうちの1つ以上へと送信し得ることも排除されない。トランザクションを受信するブロックチェーンノード104は、各ブロックチェーンノード104に適用されるブロックチェーンノードプロトコルに従って、トランザクションが有効であるかどうかをチェックする。ブロックチェーンノードプロトコルは、典型的には、ブロックチェーンノード104に、新しいトランザクション152j内の暗号署名が、トランザクション152の順序付きシーケンスの中の前のトランザクション152iに依存する、期待される署名と一致することをチェックすることを要求する。このようなアウトプットに基づくトランザクションプロトコルの場合、これは、新しいトランザクション152jのインプットに含まれるエンティティ103の暗号署名又は他の認証が、新しいトランザクションが割り当てる先行するトランザクション152jのアウトプットに定義された条件と一致することをチェックすることを含んでよく、この条件は、典型的には、新しいトランザクション152jのインプット内の暗号署名又は他の認証が、新しいトランザクションのインプットがリンクされた前のトランザクション152iのアウトプットをアンロックすることを少なくともチェックすることを含む。条件は、先行するトランザクション152iのアウトプットに含まれるスクリプトにより少なくとも部分的に定義されてよい。或いは、単にブロックチェーンノードプロトコルだけで固定することもできるし、或いは、これらの組み合わせによることもある。いずれにせよ、新しいトランザクション152jが有効であれば、ブロックチェーンノード104は、新しいトランザクションをブロックチェーンネットワーク106内の1つ以上の他のブロックチェーンノード104に転送する。これらの他のブロックチェーンノード104は、同じノードプロトコルに従って同じテストを適用し、新しいトランザクション152jを1つ以上の更なるノード104に転送し、以下で同様である。このようにして、新しいトランザクションは、ブロックチェーンノード104のネットワーク全体に伝播される。
【0038】
アウトプットベースのモデルでは、与えられ割り当てアウトプット(例えば、UTXO)が割り当てられるかどうかの定義は、ブロックチェーンノードプロトコルに従って別の今後の(onward)トランザクション152jのインプットによって既に有効に償還されているかどうかである。トランザクションが有効であるための別の条件は、それが割り当て又は償還を試みる先行するトランザクション152iのアウトプットが、別のトランザクションによって未だ割り当て/償還されていことである。ここでも、有効でない場合、トランザクション152jは、(無効であるとしてフラグが立てられ変更するために伝播されない限り)ブロックチェーン150に伝播又は記録されない。これは、取引者が同じトランザクションのアウトプットを複数回割り当てようとする二重支出を防ぐ。一方、アカウントベースモデルは、口座残高を維持することによって、二重支出を防ぐ。この場合も、トランザクションの順序が定義されているため、口座残高は、一度に単一の定義された状態を有する。
【0039】
妥当性確認トランザクションに加えて、ブロックチェーンノード104は、また、「proof -of -work」により支えられているマイニングと呼ばれるプロセスで、トランザクションのブロックを最初に作成するために競合する。ブロックチェーンノード104では、ブロックチェーン150に記録されたブロック151に未だ現れていない有効なトランザクションの順序付きセット154に新しいトランザクションが追加される。ブロックチェーンノードは、次に、暗号パズルを解くことを試みることにより、トランザクションの順序付きセット154からトランザクション152の新しい有効なブロック151を組み立てるために競争する。これは、典型的には、ノンス(nonce)がトランザクションの順序付きセット154の表現と連結され、ハッシュされるときに、ハッシュのアウトプットが所定の条件を満たすような「ノンス」値を探すことを含む。例えば、所定の条件は、ハッシュのアウトプットが、所定の数の先頭ゼロを有することであってもよい。これは、単に1つの特定の種類のproof-of-workパズルであり、他の種類が排除されないことに留意する。ハッシュ関数の特性は、インプットに関して予測不可能なアウトプットを持つことである。従って、この探索は、ブルートフォースによってのみ実行することができ、従って、パズルを解決しようとしている各ブロックチェーンノード104において、相当量の処理リソースを消費する。
【0040】
パズルを解いた第1ブロックチェーンノード104は、これをネットワーク106に通知し、その解を証明として提供する。この解は、ネットワーク内の他のブロックチェーンノード104によって簡単にチェックすることができる(ハッシュに対する解が与えられれば、ハッシュのアウトプットが条件を満たすことを確認することは簡単である)。第1ブロックチェーンノード104は、該ブロックを受け入れる閾値の他のノードの合意に、ブロックを伝播させ、従ってプロトコルルールを実施する。トランザクションの順序付きセット154は、次に、ブロックチェーンノード104の各々により、ブロックチェーン150内の新しいブロック151として記録されるようになる。また、新しいブロック151nにはブロックポインタ155が割り当てられ、チェーン内で前に作成されたブロック151n-1を指すようになっている。proof-of-work解を生成するために必要とされる例えばハッシュの形式の有意な量の労力が、ブロックチェーンプロトコルのルールに従うという第1ノード104の意図をシグナリングする。そのようなルールは、前に妥当性確認されたトランザクションと同じアウトプットを割り当てる場合に有効としてトランザクションを受け付けないこと、或いは二重支払として知られいることを含む。一旦生成されると、ブロック151は、ブロックチェーンネットワーク106内のブロックチェーンノード104の各々で認識され、維持されるので、修正することができない。また、ブロックポインタ155は、ブロック151に順序を課す。トランザクション152は、ネットワーク106内の各ブロックチェーンノード104において順序付きブロックに記録されるので、これは、トランザクションの不変の公開台帳を提供する。
【0041】
パズルを解決するために常に競争している異なるブロックチェーンノード104は、いつ解を探し始めたか、又はトランザクションが受信された順序によって、いつでも未だ公開されていないトランザクションの順序付きセット154の異なるスナップショットに基づいてパズルを解いているかもしれないことに留意する。パズルを解く者は誰でも、最初に次の新しいブロック151nに含まれるトランザクション152を定義し、その順序で、未公開のトランザクションの現在のセット154が更新される。そして、ブロックチェーンノード104は、新たに定義された未公開トランザクションの現在の順序付きセット154からブロックを作り出すために、競争を続ける。また、生じ得る「分岐(フォーク、fork)」を解決するためのプロトコルも存在する。これは、2つのブロックチェーンノード104が互いに非常に短い時間内にパズルを解き、ブロックチェーンの矛盾したビューがノード104の間で伝播する場合である。要するに、分岐の枝が伸びるときは常に、最長のものが最終的なブロックチェーン150になる。これは、同じトランザクションが両方の分岐に現れるので、ネットワークのユーザ又はエージェントに影響しないことに留意する。
【0042】
ビットコインブロックチェーン(及び殆どの他のブロックチェーン)によると、新しいブロック104を構成するのに成功したノードは、デジタルアセットの所定量を分配する新しい特別な種類のトランザクションの中でデジタルアセットの承認された量を割り当てる能力を与えられる(1人のエージェント又はユーザから別のエージェント又はユーザへとデジタルアセットの量を移転するエージェント間又はユーザ間トランザクションと異なる)。この特別な種類のトランザクションは、通常、「コインベーストランザクション」と呼ばれるが、「開始(initiation)トランザクション」とも呼ばれることがある。それは標準に新しいブロック151nの第1トランザクションを形成する。proof-of-workは、この特別なトランザクションが後に償還できるように、新しいブロックを構成したノードがプロトコルルールに従うことを意図していることをシグナリングする。ブロックチェーンプロトコルルールは、この特別なトランザクションが償還できる前に、満期、例えば100ブロックを必要としてよい。通常の(非生成)トランザクション152は、そのアウトプットの1つに追加のトランザクション手数料を指定し、そのトランザクションが公開されたブロック151nを生成したブロックチェーンノード104に更に報酬を与えることが多い。この手数料は、通常、「トランザクション手数料」と呼ばれ、後述する。
【0043】
トランザクションの妥当性確認及び公開に関連するリソースのために、典型的には、少なくともブロックチェーンノード104の各々は、1つ以上の物理的サーバユニットを含むサーバ、又はデータセンタ全体の形態をとる。しかしながら、原理的に、任意の所与のブロックチェーンノード104は、ユーザ端末又は互いにネットワーク接続されたユーザ端末又はユーザ端末のグループの形態をとることができる。
【0044】
各ブロックチェーンノード104のメモリは、各々の1つ以上の役割を実行し、ブロックチェーンノードプロトコルに従ってトランザクション152を処理するために、ブロックチェーンノード104の処理装置上で動作するように構成されたソフトウェアを記憶する。ブロックチェーンノード104に属するいずれの動作も、各々のコンピュータ装置の処理装置上で実行されるソフトウェアによって実行され得ることが理解されよう。ノードソフトウェアは、アプリケーションレイヤにおける1つ以上のアプリケーション、又はオペレーティングシステムレイヤ若しくはプロトコルレイヤのような下位レイヤ、又はこれらの任意の組み合わせの中に実装されてよい。
【0045】
また、ネットワーク101には、消費者ユーザの役割を果たす複数のパーティ103の各々のコンピュータ装置102も接続されている。これらのユーザは、ブロックチェーンネットワークと相互作用できるが、トランザクション及びブロックを妥当性確認し、構成し、又は伝播させることに参加しない。これらのユーザ又はエージェントのうちの一部は、トランザクションにおいて送信側及び受信側として動作してよい。他のユーザは、必ずしも送信側又は受信側として動作することなく、ブロックチェーン150と相互作用してよい。例えば、幾つかのパーティは、ブロックチェーン150のコピーを格納する(例えば、ブロックチェーンノード104からブロックチェーンのコピーを取得した)記憶エンティティとして動作してよい。
【0046】
パーティ103の一部又は全部は、異なるネットワーク、例えば、ブロックチェーンネットワーク106の上に重ねられたネットワークの部分として結合されてよい。ブロックチェーンネットワークのユーザ(「クライアント」と呼ばれることが多い)は、ブロックチェーンネットワークを含むシステムの部分であると言うことができる。しかしながら、これらのユーザは、ブロックチェーンノードの要求される役割を実行しないので、ブロックチェーンノード104ではない。代わりに、各パーティ103は、ブロックチェーンネットワーク106と相互作用し、それにより、ブロックチェーンノード106に結合する(つまり通信する)ことにより、ブロックチェーン150を利用してよい。2つのパーティ103及び各々の機器102は、説明のために示されており、第1パーティ103a及びその各々のコンピュータ機器102a、ならびに第2パーティ103b及びその各々のコンピュータ機器102bである。より多くのこのようなパーティ103及びそれらの各々のコンピュータ機器102がシステム100に存在し、参加することができるが、便宜上、それらは図示されていないことが理解されよう。各パーティ103は、個人又は組織であってもよい。純粋に例示として、第1パーティ103aは、本明細書においてAliceと称され、第2パーティ103bは、Bobと称されるが、これは限定的なものではなく、本明細書においてAlice又はBobという言及は、各々「第1パーティ」及び「第2パーティ」と置き換えることができることは理解されるであろう。
【0047】
各パーティ103のコンピュータ機器102は、1つ以上のプロセッサ、例えば、1つ以上のCPU、GPU、他のアクセラレータプロセッサ、特定用途向けプロセッサ、及び/又はFPGAを備える各々の処理装置を備える。各パーティ103のコンピュータ機器102は、更に、メモリ、すなわち、非一時的コンピュータ読み取り可能媒体又は媒体の形態のコンピュータ読み取り可能記憶装置を備える。このメモリは、1つ以上のメモリ媒体、例えば、ハードディスクのような磁気媒体、SSD、フラッシュメモリ又はEEPROMのような電子媒体、及び/又は光学ディスクドライブのような光学媒体を使用する1つ以上のメモリユニットを含むことができる。各パーティ103のコンピュータ機器102上のメモリは、処理装置上で動作するように配置された少なくとも1つのクライアントアプリケーション105の各々のインスタンスのようなソフトウェアを記憶する。本明細書で与えられたパーティ103に帰属されたいずれのアクションも、各々のコンピュータ装置102の処理装置上で実行されるソフトウェアを使用して実行され得ることが理解されよう。各パーティ103のコンピュータ機器102は、少なくとも1つのユーザ端末、例えばデスクトップ又はラップトップコンピュータ、タブレット、スマートフォン、又はスマートウォッチのようなウェアラブルデバイスを含む。所与のパーティ103のコンピュータ装置102は、ユーザ端末を介してアクセスされるクラウドコンピューティングリソースのような、1つ以上の他のネットワーク化されたリソースを含んでもよい。
【0048】
クライアントアプリケーション105は、最初に、1つ以上の適切なコンピュータ読み取り可能な記憶媒体、例えばサーバからダウンロードされたもの、又はリムーバブルSSD、フラッシュメモリキー、リムーバブルEEPROM、リムーバブル磁気ディスクドライブ、磁気フロッピーディスク又はテープ、光ディスク、例えばCD又はDVD ROM、又はリムーバブル光学ドライブなどのリムーバブル記憶装置上で、任意の所与のパーティ103のコンピュータ機器102に提供され得る。
【0049】
クライアントアプリケーション105は、少なくとも「ウォレット」機能を含む。これには主に2つの機能がある。これらのうちの1つは、各々のパーティ103が、ブロックチェーンノード104のネットワーク全体に渡って伝播され、それによってブロックチェーン150に含まれるべきトランザクション152を作成し、認可し(例えば署名し)、送信することを可能にすることである。もう1つは、現在所有しているデジタルアセットの量を各々のパーティに報告することである。アウトプットベースのシステムでは、この第2機能は、当該パーティに属するブロックチェーン150全体に散在する様々なトランザクション152のアウトプットの中で定義される量を照合することを含む。
【0050】
注:種々のクライアント機能が所与のクライアントアプリケーション105に統合されるとして説明されることがあるが、これは、必ずしも限定的ではなく、代わりに、本願明細書に記載される任意のクライアント機能が2つ以上の異なるアプリケーションのスーツに実装されてよく、例えばAPIを介してインタフェースし、又は一方が他方へのプラグインであることが理解される。より一般的には、クライアント機能は、アプリケーションレイヤ、又はオペレーティングシステムのような下位レイヤ、又はこれらの任意の組み合わせにおいて実装され得る。以下は、クライアントアプリケーション105の観点で説明されるが、これは限定的ではないことが理解される。
【0051】
各コンピュータ機器102上のクライアントアプリケーション又はソフトウェア105のインスタンスは、ネットワーク106のブロックチェーンノード104の少なくとも1つに動作可能に結合される。これにより、クライアント105のウォレット機能は、トランザクション152をネットワーク106に送信することができる。クライアント105は、また、ブロックチェーンノード104にコンタクトして、各々のパーティ103が受信側である任意のトランザクションについてブロックチェーン150に問い合わせることができる(又は、実施形態では、ブロックチェーン150は、部分的にその公開視認性を通じてトランザクションの信頼を提供する公開的設備であるため、実際には、ブロックチェーン150内の他のパーティのトランザクションを検査する)。各コンピュータ機器102上のウォレット機能は、トランザクションプロトコルに従ってトランザクション152を形成し、送信するように構成される。上述のように、各ブロックチェーンノード104は、ブロックチェーンノードプロトコルに従いトランザクション152を妥当性確認し、トランザクション152をブロックチェーンネットワーク106全体に渡り伝播させるために、トランザクション152を転送するよう構成されるソフトウェアを実行する。トランザクションプロトコルとノードプロトコルは互いに対応し、所与のトランザクションプロトコルは所与のノードプロトコルと共に所与のトランザクションモデルを実装する。同じトランザクションプロトコルは、ブロックチェーン150内の全部のトランザクション152について使用される。同じノードプロトコルは、ネットワーク106内の全部のノード104について使用される。
【0052】
所与のパーティ103、例えばAliceがブロックチェーン150に含まれる新たなトランザクション152jを送信したいと望む場合、彼女は関連するトランザクションプロトコルに従って(彼女のクライアントアプリケーション105のウォレット機能を使用して)新たなトランザクションを作成する(formulate)。彼女は、次に、クライアントアプリケーション105からトランザクション152を、彼女が接続されている1つ以上のブロックチェーンノード104に送信する。例えば、これは、Aliceのコンピュータ102に最も良好に接続されているブロックチェーンノード104であってもよい。任意の所与のブロックチェーンノード104が新しいトランザクション152jを受信すると、ブロックチェーンノードプロトコル及びその各々の役割に従って、それを処理する。これは、最初に、新たに受信されたトランザクション152jが「有効」であるための特定の条件を満たしているかどうかをチェックすることを含まれていてもよい、その例については、簡単に詳述する。幾つかのトランザクションプロトコルでは、検証のための条件は、トランザクション152に含まれるスクリプトによってトランザクションごとに構成可能であってよい。或いは、条件は単にノードプロトコルの組み込み機能であってもよく、或いはスクリプトとノードプロトコルの組み合わせによって定義されてもよい。
【0053】
新たに受信されたトランザクション152jが、有効であるとみなされるテストに合格したという条件で(すなわち、「妥当性確認された」という条件で)、トランザクション152jを受信した任意のブロックチェーンノード104は、そのブロックチェーンノード104に維持されているブロックチェーンの順序付きセット154に、新たな妥当性確認済みトランザクション152を追加する。更に、トランザクション152jを受信する任意のブロックチェーンノード104は、妥当性確認済みトランザクション152をネットワーク106内の1つ以上の他のブロックチェーンノード104に伝播する。各ブロックチェーンノード104は同じプロトコルを適用するので、トランザクション152jが有効であると仮定すると、これは、ネットワーク106全体に間もなく伝播されることを意味する。
【0054】
所与のブロックチェーンノード104において維持されるトランザクションの順序付きセット154に入れられると、該ブロックチェーンノード104は、新しいトランザクション152を含む、彼ら各々のトランザクションの順序付きセットの最新バージョンについて、proof-of-workパズルを解く競争を開始する(他のブロックチェーンノード104は、トランザクションの異なる順序付きセット154に基づきパズルを解こうとしているが、誰であっても1番の者が、最新のブロック151に含まれるトランザクションの順序付きセットを定義することに留意する)。最終的に、ブロックチェーンノード104は、Aliceのトランザクション152jを含む順序付きセット154の一部についてパズルを解く。一旦、新しいトランザクション152jを含む順序付きセット154についてproof-of-workが行われると、それは不変の方法でブロックチェーン150内のブロック151のうちの1つの一部となる。各トランザクション152は、以前のトランザクションへのポインタを含むので、トランザクションの順序もまた、不変的に記録される。
【0055】
異なるブロックチェーンノード104は、最初に所与のトランザクションの異なるインスタンスを受信する可能性があり、従って、1つのインスタンスが公開(Publishing)されて新しいブロック151になる前に、どのインスタンスが「有効」であるかについて矛盾するビューを有することがあり、その時点で、全部のブロックチェーンノード104は公開されたインスタンスのみが有効なインスタンスであることに合意する。ブロックチェーンノード104が1つのインスタンスを有効であるとして受け入れ、次に第2インスタンスがブロックチェーン150に記録されていることを発見した場合、該ブロックチェーンノード104は、これを受け入れなければならず、最初に受け入れたインスタンス(つまり未だブロック151の中で公開されていないもの)を破棄する(つまり、無効であるとして扱う)。
【0056】
アカウントベースのトランザクションモデルの一部として、幾つかのブロックチェーンネットワークにより運用される別のタイプのトランザクションプロトコルを「アカウントベース」のプロトコルと呼ぶことがある。アカウントベースの場合、各トランザクションは、過去の一連のトランザクションにおいて、先行するトランザクションのUTXOに戻って参照することによって移転される量を定義するのではなく、絶対的な口座(アカウント)残高を参照することによって移転される。全てのアカウントの現在の状態は、ブロックチェーンと分離して、ネットワークのノードにより格納され、絶えず更新される。このようなシステムでは、トランザクションは、アカウントの連続したトランザクション記録(いわゆる「ポジション」)を用いて発注される。この値は、送信者により彼らの暗号署名の一部として署名され、トランザクション参照計算の一部としてハッシュされる。更に、任意的なデータフィールドもトランザクションに署名することができる。このデータフィールドは、例えば、前のトランザクションIDがデータフィールドに含まれている場合、前のトランザクションを遡ってポイントしてよい。
【0057】
<UTXOベースのモデル>
図2は、トランザクションプロトコルの例を示している。これは、UTXOベースのプロトコルの例である。トランザクション152(「Tx」と略す)は、ブロックチェーン150(各ブロック151は1つ以上のトランザクション152を含む)の基本的なデータ構造である。以下は、アウトプットベース又は「UTXO」ベースのプロトコルを参照して説明される。しかし、これは、全ての可能な実施形態に限定されるものではない。例示的なUTXOベースのプロトコルは、ビットコインを参照して説明されるが、他の例示的なブロックチェーンネットワーク上でも等しく実施できることに留意する。
【0058】
UTXOベースのモデルでは、各トランザクション(「Tx」)152は、1つ以上のインプット202及び1つ以上のアウトプット203を含むデータ構造である。各アウトプット203は、未使用トランザクションアウトプット(UTXO)を含んでもよく、これは、別の新しいトランザクションのインプット202のソースとして使用することができる(UTXOが未だ償還されていない場合)。UTXOは、デジタルアセットの量を指定する値を含む。これは、分散型台帳上のトークンの設定数を表す。また、他の情報の中でも、UTXOは、それが由来するトランザクションのトランザクションIDも含んでよい。トランザクションデータ構造はまた、ヘッダ201も含んでよく、ヘッダ201は、インプットフィールド202及びアウトプットフィールド203のサイズの指示子を含んでもよいヘッダ201を含んでよい。ヘッダ201は、トランザクションのIDも含んでもよい。幾つかの実施形態において、トランザクションIDは、トランザクションデータ(トランザクションID自体を除く)のハッシュであり、ノード104に提出された未処理トランザクション152のヘッダ201に格納される。
【0059】
例えばAlice103aは、問題のデジタルアセットの量をBob103bに移転するトランザクション152jを作成したいと考えているとする。
図2において、Aliceの新しいトランザクション152jは「Tx
1」とラベル付けされている。これは、Aliceにロックされているデジタルアセットの量を、シーケンス内の先行するトランザクション152iのアウトプット203に取り入れ、その少なくとも一部をBobに移転する。先行するトランザクション152iは、
図2において「Tx
0」とラベル付けされている。Tx
0とTx
1は、単なる任意のラベルである。これらは、必ずしも、Tx
0がブロックチェーン151の第1トランザクションであること、又は、Tx
1がプール154の直ぐ次のトランザクションであることを意味しない。Tx
1は、未だAliceへのロックされた未使用アウトプット203を有する任意の先行する(つまり祖先)トランザクションのいずれかを指し示すことができる。
【0060】
先行するトランザクションTx0は、Aliceが彼女の新しいトランザクションTx1を作成するとき、又は少なくとも彼女がそれをネットワーク106に送信するときに、既に妥当性確認され、ブロックチェーン150のブロック151に含まれていてもよい。それは、その時点で既にブロック151のうちの1つに含まれていてもよく、或いは、順序付きセット154内で未だ待機していてもよく、その場合、新しいブロック151にすぐに含まれることになる。或いは、Tx0及びTx1が生成されネットワーク106に送信されることができ、或いは、ノードプロトコルが「孤児(orphan)」トランザクションのバッファリングを許容する場合にはTx1の後にTx0が送信されることもできる。ここでトランザクションのシーケンスの文脈で使用される「先行する」及び「後の」という用語は、トランザクション内で指定されたトランザクションポインタ(どのトランザクションがどの他のトランザクションを指すかなど)によって定義されるシーケンス内のトランザクションの順序を指す。それらは、「先行する」及び「相続する」又は「祖先」及び「子孫」、「親」及び「子」、等により、等しく置き換えられ得る。これは、必ずしも、それらが作成され、ネットワーク106に送られ、又は任意の所与のブロックチェーンノード104に到達する順序を意味しない。それにもかかわらず、先行するトランザクション(祖先トランザクション又は「親」)を指す後続のトランザクション(子孫トランザクション又は「子」)は、親トランザクションが妥当性確認されない限り、妥当性確認されない。親の前にブロックチェーンノード104に到着した子は孤児とみなされる。それは、ノードプロトコル及び/又はノードの行動に応じて、親を待つために特定の時間、破棄又はバッファリングされることがある。
【0061】
先行するトランザクションTx0の1つ以上のアウトプット203のうちの1つは、本明細書でUTXO0とラベル付けされた特定のUTXOである。各UTXOは、UTXOによって表されるデジタルアセットの量を指定する値と、後続のトランザクションが検証されるために、従ってUTXOが正常に償還されるために、後続のトランザクションのインプット202の中のアンロックスクリプトによって満たされなければならない条件を定義するロックスクリプトとを含む。典型的には、ロックスクリプトは、特定のパーティ(それが含まれているトランザクションの受益者)に量をロックする。すなわち、ロックスクリプトは、標準的に以下のようなアンロック条件を定義する:後続のトランザクションのインプット内のアンロックスクリプトは、先行するトランザクションがロックされたパーティの暗号署名を含む。
【0062】
ロックスクリプト(別名scriptPubKey)は、ノードプロトコルによって認識されるドメイン固有の言語で書かれたコードの一部である。そのような言語の特定の例は、ブロックチェーンネットワークにより使用される「スクリプト」(Script,大文字S)と呼ばれる。ロックスクリプトは、トランザクションアウトプット203を消費するために必要な情報、例えば、Aliceの署名の必要条件を指定する。トランザクションのアウトプットには、アンロックスクリプトが現れる。アンロックスクリプト(別名:scriptSig)は、ロックスクリプトの基準を満たすために必要な情報を提供するドメイン固有の言語で書かれたコードの一部である。例えば、Bobの署名を含んでもよい。アンロックスクリプトは、トランザクションのインプット202に現れる。
【0063】
図示の例では、Tx0のアウトプット203のUTXO0は、ロックスクリプト[ChecksigPA]を含む、これは、UTXO0が償還されるために(厳密には、UTXO0を償還しようとする後続のトランザクションが有効であるために)、Aliceの署名SigPAを必要とする。[Checksig PA]は、Aliceの公開-秘密鍵ペアからの公開鍵PAの表現(つまりハッシュ)を含む。Tx1のインプット202は、Tx0を指すポインタ(例えば、そのトランザクションID、幾つかの実施形態ではトランザクションTx0全体のハッシュであるTxID0による)を含む。Tx1のインプット202は、Tx0の任意の他の可能なアウトプットの中でそれを識別するために、Tx0内のUTXO0を識別するインデックスを含む。Tx1のインプット202は、更に、Aliceが鍵ペアからのAliceの秘密鍵をデータの所定の部分(暗号において「メッセージ」と呼ばれることもある)に適用することによって作成された、Aliceの暗号署名を含むアンロックスクリプト<SigPA>を含む。有効な署名を提供するためにAliceが署名する必要があるデータ(又は「メッセージ」)は、ロックスクリプトにより、又はノードプロトコルにより、又はこれらの組み合わせによって定義され得る。
【0064】
新しいトランザクションTx
1がブロックチェーンノード104に到着すると、ノードはノードプロトコルを適用する。これは、ロックスクリプトとアンロックスクリプトを一緒に実行して、アンロックスクリプトがロックスクリプトで定義されている条件(この条件は1つ以上の基準を含むことができる)を満たしているかどうかをチェックすることを含んでよい。実施形態では、これは、2つのスクリプトの連結を含む。
【数1】
【0065】
ここで、「||」は連結を表し、「<...>」はスタックにデータを配置することを意味し、「[...]」はロックスクリプトにより実行される機能である(本例では、スタックベースの言語)。同等に、スクリプトは。、スクリプトを連結するのではなく共通のスタックにより1つずつ実行されてよい。いずれの方法でも、一緒に実行する場合、スクリプトは、Tx0のアウトプット内のロックスクリプトに含まれるAliceの公開鍵PAを使用して、Tx1のインプット内のアンロックスクリプトが、データの期待部分に署名するAliceの署名を含むことを認証する。また、データの期待部分(「メッセージ」)も、この認証を実行するために含まれる必要がある。実施形態において、署名されたデータは、Tx1の全体を含む(従って、データの署名された部分が既に本質的に存在するので、データの署名された部分を平文で指定する別個の要素が含まれる必要はない)。
【0066】
公開-秘密暗号法による認証の詳細は、当業者には周知であろう。基本的に、Aliceが彼女の秘密鍵を用いてメッセージに署名した場合、Aliceの公開鍵とそのメッセージが平文ならば、ノード104のような別のエンティティは、そのメッセージがAliceによって署名されていなければならないことを認証することができる。署名は、典型的には、メッセージをハッシュし、ハッシュに署名し、署名としてメッセージにこれをタグ付けすることを含み、それによって、公開鍵の所有者が署名を認証することを可能にする。従って、本明細書において、データの特定の部分又はトランザクションの一部などに署名するという言及は、実施形態において、そのデータの部分又はトランザクションの一部のハッシュに署名することを意味することができることに留意されたい。
【0067】
Tx1内のアンロックスクリプトが、Tx0のロックスクリプトで指定された1つ以上の条件を満たす場合(示される例では、Aliceの署名が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内の別の有効なトランザクションへの有効なインプットを既に形成しているかどうかである。
【0068】
所与のトランザクション152の全部のアウトプット203の中で指定された総量が全部のそのインプット202により指される総量より大きい場合、これは、殆どのトランザクションモデルにおいて無効の別の基礎である。従って、このようなトランザクションは、伝播されず、ブロック151に含まれることもない。
【0069】
UTXOベースのトランザクションモデルでは、所定のUTXOを全体として使用する必要があることに注意する。UTXOで定義されている量のうち、別の分量が消費されている一方で、ある分量を「残しておく」ことはできない。ただし、UTXOからの量は、次のトランザクションの複数のアウトプットに分割できる。例えば、Tx0のUTXO0で定義された量は、Tx1の複数のUTXOに分割できる。従って、AliceがBobにUTXO0で定義された量の全てを与えることを望まない場合、彼女は残りの量を使って、Tx1の第2アウトプットの中で自分自身にお釣りを与えるか、又は別のパーティに支払うことができる。
【0070】
特に、Aliceは、通常、彼女のトランザクションを公開するビットコインノード104のために手数料も含む必要がある。Aliceがマイナーのための手数料を含まない場合、Tx0はマイナーのブロックチェーンノード104によって拒否される可能性が高く、従って、技術的には有効であるが、それは依然として伝搬されず、ブロックチェーン150に含まれない(ノードプロトコルは、彼らが望まない場合には、ブロックチェーンノード104にトランザクション152を受け入れることを強制しない)。一部のプロトコルでは、トランザクション手数料は、独自の別個のアウトプット203を必要としない(すなわち、別個のUTXOを必要としない)。代わりに、インプット202によって示される総量と、所与のトランザクション152のアウトプット203で指定される総量との間の差は、トランザクションを公開するブロックチェーンノード104に自動的に与えられる。例えば、UTXO0へのポインタがTx1への唯一のインプットであり、Tx1は1つのアウトプットUTXO1しか持っていないとする。UTXO0で指定されたデジタルアセットの量がUTXO1で指定された量より多い場合、その差は、UTXO1を含むブロックを公開するノード104により割り当てられてよい。しかし、代替的又は追加的に、必ずしも、トランザクション152のUTXO203のうちの独自のものにおいて、トランザクション手数料を明示的に指定できることは除外されない。
【0071】
Alice及びBobのデジタルアセットは、ブロックチェーン150内の任意のトランザクション152の中で彼らにロックされたUTXOで構成されている。従って、典型的には、所与のパーティ103のアセットは、ブロックチェーン150を通して、様々なトランザクション152のUTXO全体に分散される。ブロックチェーン150内のどこにも、所与のパーティ103の総残高を定義する1つの数値は記憶されていない。各パーティへのロックされた、別の将来の(onward)トランザクションに未だ使用されていない全ての様々なUTXOの値をまとめることは、クライアントアプリケーション105におけるウォレット機能の役割である。ビットコインノード104のいずれかに格納されたブロックチェーン150のコピーをクエリすることにより、これを行うことができる。
【0072】
スクリプトコードは、概略的に表現されることが多い(すなわち、正確な言語を用いない)ことに注意する。例えば、特定の機能を表現するオペレーションコード(opcode、オペコード)を使用してよい。「OP_....」は、スクリプト言語の特定のオペコードを表す。例として、OP_RETURNは、ロックスクリプトの始めにあるOP_FALSEが先行するとき、トランザクション内にデータを格納することができ、それによってデータをブロックチェーン150に不変に記録することができるトランザクションの使用不可能アウトプットを生成するためのスクリプト言語のオペコードである。例えば、データは、ブロックチェーンに格納することが望ましい文書を含むことができる。
【0073】
標準的に、トランザクションのインプットは、公開鍵PAに対応するデジタル署名を含む。実施形態において、これは楕円曲線secp256k1を使用するECDSAに基づく。デジタル署名は、特定のデータに署名する。幾つかの実施形態では、所与のトランザクションについて、署名はトランザクションインプットの一部、及びトランザクションアウトプットの全部又は一部に署名する。署名するアウトプットの特定の部分はSIGHASHフラグに依存する。SIGHASHフラグは、通常、署名の最後に含まれる4バイトのコードであり、どのアウトプットが署名されるかを選択する(従って、署名の時点で固定される)。
【0074】
ロックスクリプトは、通常、各々のトランザクションがロックされているパーティの公開鍵を含んでいることを表す「scriptPubKey」と呼ばれることがある。アンロックスクリプトは、通常、対応する署名を提供することを表す「scriptSig」と呼ばれることがある。しかし、より一般的には、UTXOが償還される条件が署名を認証することを含むことは、ブロックチェーン150の全てのアプリケーションにおいて必須ではない。より一般的には、スクリプト言語は、1つ以上の条件を定義するために使用され得る。従って、より一般的な用語「ロックスクリプト」及び「アンロックスクリプト」が好ましい。
【0075】
図1に示されるようにAlice及びBobのコンピュータ装置102a、120bの各々にあるクライアントアプリケーションは、付加的な通信機能を備えてよい。この追加機能は、Alice103aが、(いずれかのパーティ又は第3者の勧誘で)Bob103bと別個のサイドチャネル301を確立することを可能にする。サイドチャネル301は、ブロックチェーンネットワークと別個にデータの交換を可能にする。このような通信は、時に「オフチェーン」通信と呼ばれる。例えば、これは、パーティの一方がネットワーク106にトランザクション152をブロードキャストすることを選択するまで、ブロックチェーンネットワーク106上に登録されることなく、又はチェーン150上に進むことなく、AliceとBobとの間でトランザクション152を交換するために使用され得る。このようにトランザクションを共有することは、時に、「トランザクションテンプレート」の共有と呼ばれる。トランザクションテンプレートは、完全なトランザクションを形成するために必要な1つ以上のインプット及び/又はアウトプットが欠けていてよい。代替又は追加で、サイドチャネル301は、任意の他のトランザクションに関連するデータ、例えば、鍵、交渉される量又は条項、データコンテンツ、等を交換するために使用されてよい。
【0076】
サイドチャネル301は、ブロックチェーンネットワーク106と同じパケット交換ネットワーク101を介して確立されてもよい。代替又は追加で、サイドチャネル301は、モバイルセルラネットワーク、又はローカル無線ネットワークのようなローカルエリアネットワーク、又はAliceとBobの装置102a、102bの間の直接有線若しくは無線リンクのような異なるネットワークを介して確立されてよい。一般に、本願明細書のどこかで言及されるサイドチャネル301は、「オフチェーン」で、つまりブロックチェーンネットワーク106と別個にデータを交換するための1つ以上のネットワーキング技術又は通信媒体を介する任意の1つ以上のリンクを含んでよい。1つより多くのリンクが使用されるとき、全体としてのオフチェーンリンクのバンドル又は集合がサイドチャネル301と呼ばれてよい。従って、Alice及びBobが特定の情報又はデータ片等をサイドチャネル301を介して交換すると言われる場合、これは、必ずしも全部のこれらのデータ片が正確に同じリンク又は同じ種類のネットワークを介して送信される必要があることを意味しないことに留意する。
【0077】
クライアントソフトウェア
図3Aは、本開示の方式の実施形態を実装するためのクライアントアプリケーション105の例示的な実装を示す。クライアントアプリケーション105は、トランザクションエンジン401と、ユーザインタフェース(UI)レイヤ402と、を含んでよい。トランザクションエンジン401は、クライアント105の基礎トランザクション関連機能、例えば、トランザクション152を形成し、トランザクション及び/又はサイドチャネル301を介して他のデータを受信及び/又は送信し、及び/又はブロックチェーンネットワーク106を介して伝播されるように1つ以上のノード104にトランザクションを送信するように、上述した処理に従って構成される。
【0078】
UIレイヤ402は、各々のユーザコンピュータ機器102のユーザ入力/出力(I/O)手段を介して、機器102のユーザ出力手段により各々のユーザ103へ情報を出力すること及び機器102のユーザ入力手段により各々のユーザ103から入力を受信することを含む、ユーザインタフェースをレンダリングするよう構成される。例えば、ユーザ出力手段は、視覚的出力を提供する1つ以上のディスプレイスクリーン(タッチ又は非タッチスクリーン)、オーディオ出力を提供する1つ以上のスピーカ、及び/又は触覚出力を提供する1つ以上の触覚出力装置、等を含み得る。ユーザ入力手段は、例えば、1つ又は複数のタッチスクリーンの入力アレイ(出力手段に使用されるものと同じか又は異なる)、マウス、トラックパッド又はトラックボールなどの1つ又は複数のカーソルベースの装置、音声又は声の入力を受け取るための1つ又は複数のマイクロフォン及び音声認識アルゴリズム、手動又は身体のジェスチャの形態で入力を受け取るための1つ又は複数のジェスチャベースの入力装置、又は1つ又は複数の機械的ボタン、スイッチ又はジョイスティックなどを含ことができる。
【0079】
本明細書における種々の機能は、同一のクライアントアプリケーション105に統合されていると記述することができるが、これは、必ずしも限定するものではなく、代わりに、2つ以上の別個のアプリケーション、例えば、一方が他方へのプラグインであるか、又はAPI(アプリケーションプログラミングインタフェース)を介したインタフェースで実装することができることに留意する。例えば、トランザクションエンジン401の機能は、UIレイヤ402と別個のアプリケーション、又は所与のモジュールの機能に実装されてよく、トランザクションエンジン401が1つより多くのアプリケーションの間で分割されてよい。また、記載の機能の一部又は全部が、例えばオペレーティングシステムレイヤに実装されることを除外しない。本願明細書のどこかで、単一の又は所与のアプリケーション105等を参照する場合、これが単に例であること、より一般的には、記載の機能が任意の形式のソフトウェアで実装され得ることが理解される。
【0080】
図3Bは、Aliceの機器102a上のクライアントアプリケーション105aのUI層402によりレンダリングされてよいユーザインタフェース(UI)500の例の模擬表示を与える。同様のUIが、任意の他のパーティのクライアント105b、Bobの機器102b、又は任意の他のパーティの機器によりレンダリングされてよいことが理解される。
【0081】
例示として、
図3Bは、Aliceの観点からUI500を示す。UI500は、ユーザ出力手段を介して別個のUI要素として描画される1つ以上のUI要素501、502、502を含む。
【0082】
例えば、UI要素は、例えば、画面上の異なるボタン、又はメニュー内の異なるオプション等の1つ以上のユーザ選択可能要素501を含むことができる。ユーザ入力手段は、スクリーン上のUI要素をクリック若しくはタッチすることにより、又は所望のオプションの名称を発話することにより、ユーザ103(この場合にはAlice103a)がオプションのうちの1つを選択又は操作できるよう構成される(注:ここで使用される「手動(manual)」は単に自動の反対を意味し、必ずしも手の使用に限定されない)。
【0083】
代替又は追加として、UI要素は、1つ以上のデータ入力フィールド502を含むことができる。これらのデータ入力フィールド502は、ユーザ出力手段、例えば、オンスクリーンを介してレンダリングされ、データは、ユーザ入力手段、例えば、キーボード又はタッチスクリーンを介してフィールドに入力することができる。或いは、データは、例えば、音声認識に基づいて口頭で受信され得る。
【0084】
代替的又は追加的に、UI要素は、ユーザに情報を出力するために出力される1つ以上の情報要素503を含んでもよい。例えば、情報は、スクリーン上に描画されるか、又は可聴でレンダリングされることがある。
【0085】
例えば、この/これらは、スクリーン上に描画されるか、又は可聴で描画されることがある。これらのUI要素の機能は、間もなく更に詳細に議論される。また、
図3Bに示されたUI500は、単に概略的なモックアップであり、実際には、1つ以上の更なるUIエレメントを含んでもよく、これは、簡潔さのために示されていないことが理解される。
【0086】
<ノードソフトウェア>
図4は、UTXO又はアウトプットに基づくモデルの例における、ネットワーク106の各ブロックチェーンノード104で実行され得るノードソフトウェア450の例を示す。別のエンティティが、ネットワーク106上でノード104として分類されずに、つまり、ノード104に必要なアクションを実行せずに、ノードソフトウェア450を実行できることに注意する。ノードソフトウェア450は、プロトコルエンジン451、スクリプトエンジン452、スタック453、アプリケーションレベルの決定エンジン454、及び1つ以上のブロックチェーン関連機能モジュールのセット455を含んでよいが、それらに限定されない。各ノード104は、合意モジュール455C(例えば、proof-of-work)、伝播モジュール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のコピーからTxiを取得できる。又は、Tx
iは、未だブロックチェーン150上で公開されていない可能性がある。その場合、プロトコルエンジン451は、ノード154によって保持されている未公開トランザクションの順序付きセット154からTx
iを取得することができる。いずれの方法も、スクリプトエンジン451は、Txiの参照されるアウトプットの中のロックスクリプトを識別し、これをスクリプトエンジン452に渡す。
【0087】
スクリプトエンジン452は、従って、Tx
iのロックスクリプト、及びTx
j対応するインプットからのアンロックスクリプトを有する。例えば、Tx
0及びTx
1が
図2に示されるが、同じことがトランザクションの任意のペアに適用され得る。スクリプトエンジン452は、前述のように2つのスクリプトを一緒に実行し、これらは、使用されているスタックに基づくスクリプト言語(例えばScript)に従い、スタック453にデータを置くことと、データを検索することとを含む。
【0088】
スクリプトを一緒に実行することにより、スクリプトエンジン452は、アンロックスクリプトがロックスクリプトの中で定義された1つ以上の基準を満たすか否か、つまり、それがロックスクリプトが含まれるアウトプットを「アンロック」するか否かを決定する。スクリプトエンジン452は、この決定の結果をプロトコルエンジン451に返す。スクリプトエンジン452は、アンロックスクリプトは対応するロックスクリプトの中で指定された1つ以上の基準を満たすと決定した場合、結果「真」を返す。その他の場合、それは結果「偽」を返す。
【0089】
アウトプットに基づくモデルでは、スクリプトエンジン452からの結果「真」は、トランザクションの有効性についての条件のうちの1つである。標準的に、同様に満たされなければならない、プロトコルエンジン451により評価される1つ以上の更なるプロトコルレベルの条件が更にあり、Txjのアウトプットの中で指定されたデジタルアセットの総量がそのインプットによりポイントされる総量を超えないこと、Txiのポイントされるアウトプットは別の有効なトランザクションにより未だ使用されていないこと、等である。プロトコルエンジン451は、1つ以上のプロトコルレベルの条件と一緒にスクリプトエンジン452からの結果を評価し、それら全部が真である場合、トランザクションTxjを妥当性確認する。プロトコルエンジン451は、トランザクションが有効であるかどうかの指示を、アプリケーションレベル決定エンジン454に出力する。Txjが実際に妥当性確認されたことのみを条件として、決定エンジン454は、合意モジュール455C及び伝播モジュール455Pの一方又は両方を、それらの各々のブロックチェーンに関連する機能をTxjに関して実行するよう制御することを選択してよい。これは、ブロック151に組み込むためにノードの各々の順序付きトランザクションセット154にTxjを追加する合意モジュール455Cと、ネットワーク106内の別のブロックチェーンノード104にTxjを転送する伝播モジュール455Pを含んでよい。任意的に、実施形態では、アプリケーションレベル決定エンジン454は、これらの機能のうちのいずれか又は両方をトリガする前に、1つ以上の追加条件を適用してよい。例えば、決定エンジンは、トランザクションが妥当性確認されたこと、及び十分なトランザクション手数料が残されることの両方を条件としてのみ、トランザクションを公開することを選択してよい。
【0090】
用語「真(true)」及び「偽(false)」は、本願明細書では、必ずしも単一の2進数字(ビット)のみの形式で表現される結果を返すことに限定しないが、それは勿論1つの可能な実装であることに留意する。より一般的には、「真」は、成功又は肯定的な結果を示す任意の状態を表すことができ、「偽」は、不成功又は非肯定的な結果を示す任意の状態を表すことができる。例えば、アカウントに基づくモデルでは、「真」の結果は、署名の暗示的なプロトコルレベルの検証と、スマートコントラクトの追加の肯定的なアウトプットとの組み合わせにより示され得る(全体の結果は、両方の個々の結果が真である場合に、真を伝達すると考えられる)。
【0091】
開示された技術の他の変形例又は使用事例は、本明細書で開示されると、当業者に明らかになり得る。本開示の範囲は、記載された実施形態によって限定されるものではなく、添付の特許請求の範囲によってのみ限定される。
【0092】
例えば、上述の幾つかの実施形態は、ビットコインネットワーク106、ビットコインブロックチェーン150、及びビットコインノード104の観点で説明された。しかしながら、ビットコインブロックチェーンは、ブロックチェーン150の1つの特定の例であり、上述の説明は任意のブロックチェーンに一般的に適用されてよいことが理解される。つまり、本発明は、ビットコインブロックチェーンに何ら限定されない。より一般的には、上述のビットコインネットワーク106、ビットコインブロックチェーン150、及びビットコインノード104への言及は、ブロックチェーンネットワーク106、ブロックチェーン150、及びブロックチェーンノード104により各々置き換えられてよい。ブロックチェーン、ブロックチェーンネットワーク、及び/又はブロックチェーンノードは、ビットコインブロックチェーン150、ビットコインネットワーク106、及びビットコインノード104の上述の特性の一部又は全部を共有してよい。
【0093】
本発明の幾つかの実施形態では、ブロックチェーンネットワーク106は、ビットコインネットワークであり、ビットコインノード104はブロックチェーン150のブロック151を生成し、公開し、伝播し、及び格納する上述の機能の少なくとも全部を実行する。これらの機能の全部ではなく1つ又は一部のみを実行する他のネットワークエンティティ(又はネットワーク要素)が存在することが除外されない。つまり、ネットワークエンティティは、ブロックを伝播し及び/又は格納する機能を実行してよいが、ブロックを生成し公開しなくてよい(これらのエンティティが好適なビットコインネットワーク106のノードとみなされないことを思い出してほしい)。
【0094】
本発明の幾つかの他の実施形態では、ブロックチェーンネットワーク106はビットコインネットワークでなくてもよい。これらの実施形態では、ノードが、ブロックチェーン150のブロック151を生成し、公開し、伝播し、及び格納する機能の全部ではなく少なくとも1つ又は一部を実行してよいことが除外されない。例えば、これらの他のブロックチェーンネットワークでは、「ノード」は、ブロック151を生成し公開するよう構成されるが該ブロック151を格納し及び/又は他のノードに伝播しないネットワークエンティティを表すために使用されてよい。
【0095】
更に一般的には、上述の用語「ビットコインノード」104の言及は、用語「ネットワークエンティティ」又は「ネットワーク要素」と置き換えられてよい。このようなエンティティ/要素は、ブロックを生成し、公開し、伝播し、及び格納する役割のうちの一部又は全部を実行するよう構成される。そのようなネットワークエンティティ/要素の機能は、ハードウェアで、ブロックチェーンノード104を参照して上述したのと同じ方法で実装されてよい。
【0096】
受信側により促進される(Recipient-Facilitated)トランザクション
上述のように、ブロックチェーントランザクションを介したデジタルアセットの移転は、通常、送信ノードが、送信ノードによって制御される先行トランザクションからの少なくとも1つのアウトポイントのポインタ/アドレスをインプットとして含むトランザクションを構築することを含む。トランザクションは、更に、受信側装置に関連付けられたアウトプットスクリプトへのアウトプットを含み、場合によっては、送信側装置に関連付けられたアウトプットスクリプトへの更なるアウトプットを含み、受信側のアウトプットスクリプトに送られることを意図した量以上の余剰デジタルアセットをアウトポイントから受け取る。送信装置は、アウトポイントのアンロックスクリプトを提供する一部として、トランザクションに少なくとも1つのデジタル署名を含む。
【0097】
本明細書の説明では、トランザクションへのアウトプットを表すために「アウトプットスクリプト」という用語を使用する場合がある。「アウトプットスクリプト」という用語は、上述の「ロックスクリプト」と同義であってもよい。多くの場合、アウトプットスクリプトは、装置が秘密鍵を保持する公開鍵に関連付けられたpay-to-public-key-hash(P2PKH)操作であってもよい。公開鍵(又は公開鍵ハッシュ)は、コンテキストによってはアウトプットアドレスと呼ばれる場合があり、その場合、その公開鍵ハッシュに割り当てられたデジタルアセットは、その「アウトプットアドレス」に属するとみなされ、対応する秘密鍵を保持する装置は、それらのデジタルアセットを利用又は移動するために必要なアンロックスクリプトを提供する能力によって、それらのデジタルアセットへのアクセスを制御する。場合によっては、アウトプットスクリプトは、デジタルアセットへのアクセスに対してより複雑な条件又は要件を課すことがある。
【0098】
通常、そのようなトランザクションを構築する送信装置は、受信側装置にトランザクションを直接送信する場合もあれば、そうでない場合もある。場合によっては、送信装置は、伝搬、妥当性確認、及びブロックへの包含のために、トランザクションをブロックチェーンネットワークに単に送信することがある。受信側装置は、トランザクションを検出するためにブロックチェーンを監視してよく、又は、送信装置から直接コピーを受信してもよい。
【0099】
トランザクションに対する悪意のある変更やトランザクションを無効にする変更から保護するために、送信装置は通常、全てのインプットとアウトプットに少なくとも1つのデジタル署名を適用する。ビットコインネットワークのコンテキストでは、この操作はSIGHASH_ALL操作を使用して実装できる。この操作は、送信側の秘密鍵と、全てのインプットと全てのアウトプットを含むトランザクション内の実質的に全てのデータのハッシュとを使用して、送信装置によってデジタル署名を生成する。これにより、エンティティがデジタル署名を無効にすることなく、トランザクションのインプット又はアウトプットを意味のあるように変更することを防ぐことができる。この意味で、送信装置によって構築されたトランザクションは「完全なトランザクション」である。つまり、ブロックチェーンプロトコルの意味の範囲内では完全なトランザクションとして有効であり、妥当性確認及びブロックへの包含のためにビットコインノードに送信することができる。
【0100】
有効な完全なトランザクションを構築するために、送信装置は、通常、アウトポイントの集計された合計が受信側装置に移転される移転量以上になるように、先行するトランザクションから制御する1つ以上のアウトポイントを識別する。例えば、受信側装置が100個のデジタルトークンを受信する場合、送信装置は、追加されたときに少なくとも100個のデジタルトークンに合計する、前のトランザクションからの1つ以上のアウトポイントを識別することができる。幾つかの例では、100個以上のデジタルトークンを持つ単一のアウトポイントを選択することができる。幾つかの他の例では、まとめて100個以上のデジタルトークンを持つ1つより多くのアウトポイントを選択することができる。また、選択されたアウトポイントは、トランザクション手数料又はその他の手数料又はインプット(例えばガス)がトランザクションへのインプットの一部であることを保証するために十分なトークンも有する必要がある。つまり、トランザクション手数料が3個のデジタルトークンである場合、送信装置は通常、選択されたアウトポイントが少なくとも103個のデジタルトークンの集計関連値を有することを保証して、確実にトランザクションがブロックに含まれるようにする必要がある。トランザクション手数料の量は、多くのブロックチェーンネットワークで異なる。これは、ネットワークの輻輳に応じて時間の経過と共に変化する可能性がある。これは、場合によっては、トランザクションのサイズ及び/又はトランザクション内のインプットとアウトプットの量によって異なる場合がある。
【0101】
トランザクションへのインプットを形成するために必要なアウトポイントを選択すると、送信装置は、受信側装置に関連付けられたアウトプットスクリプトを追加し、移転量を受信するように指定する。例えば、P2PKHを受信側の公開鍵に指定する。移転量は、インプット値の合計からトランザクション手数料を引いた値以下の量である。送信装置に関連付けられたアウトプットスクリプトを含め、そのアウトプットに余剰量を割り当てることによって、余剰アセットを送信装置に返すことができる。次に、送信装置はトランザクションにデジタル署名する。これには、少なくとも全てのインプットと全てのアウトプットに対する署名を構成する少なくとも1つのSIGHASH_ALL署名を使用してトランザクションにデジタル署名することが含まれる。これにより、意味のある変更を防ぐことができる。
【0102】
上記のトランザクション生成プロセスは、ブロックチェーンで実装されていない商取引とは一致しない。殆どの商業取引では、特に小売の文脈では、商人などの受信側(受取人)が、資金又は他のそのような資産の送金(移転)を受け取ることに関連するコストを負担する。一例として、商人は、典型的には、製品又はサービス(及び存在する場合には適用される税金)のリストされた又は表示されたコストに対してクレジットカードの支払を受け取り、クレジットカードの取引手数料を事業費として負担する。
【0103】
送信装置がトランザクション手数料をカバーするのに十分な量のデジタルアセットを提供する上記のトランザクション生成プロセスは、商業取引、特にPOS(point-of-sale)取引などの小売消費者取引のためのブロックチェーントランザクションの採用に対する障壁である。実際、多くの法域では、消費者が取引手数料を請求される形態の取引は、法律又は規制に反する可能性がある。従って、トランザクション手数料としてマイニングノードに移転されるデジタルアセットが受信側装置から提供されるような、受信側が促進するブロックチェーントランザクションを可能にするシステム又は方法を提供することが有利である。その際の課題は、受信側装置も送信装置も、「無記名小切手」を切るような、例えば不正なデジタル移転をもたらす悪意のある変更を許可する可能性のあるトランザクションを生成する、悪用される可能性のあるデータを、公開しない方法及びシステムを提供することである。同時に、方法及びシステムは、通信フローの簡素化及び効率化を目指すべきである。
【0104】
一態様では、本出願は、受信側が促進するブロックチェーントランザクションを可能にするシステム及び方法を提供する。このシステム及び方法では、受信側装置は、前のトランザクションからのアウトポイントを送信側装置に提供し、アウトポイントが、予想されるトランザクション手数料を相殺することを意図したインプットとして、構築された部分的に完了したトランザクションに含まれるようにする。送信側装置は、1つ以上のインプットを追加し、受信側装置に移転されることを意図した移転量を超える過剰なトークン又は資金を(例えば「お釣り」として)受け取るために1つ以上のアウトプットを追加することができる。送信側装置は、更に、少なくとも1つのデジタル署名を使用してインプットにデジタル署名するが、も全てのアウトプットに適用されるデジタル署名はない。すなわち、送信側装置によって生成された部分的に完了したトランザクションは、インプットに変更を加えたり、インプットを追加したりすることができないように、及び、部分的に完了したトランザクション内に既に存在するアウトプットに変更を加えることができないが、1つ以上のアウトプットを追加することはできるように、署名される。この部分的に完了したトランザクションは、受信側装置に送信され、受信側装置は、受信側装置のアドレスを参照するアウトプットスクリプトを、トランザクションのトランザクション手数料よりも大きい程度まで、そのインプットのアウトポイントからの少なくとも超過を受け取るためのアウトプットとして挿入する。
【0105】
別の態様では、本出願は、トランザクションに関連するトランザクション手数料に対する受信側ベースの制御を提供し、一方で、トランザクションで許可されるインプット及び/又はアウトプットの数に対して条件、上限又は最大値を課すことを実現することによって、送信側装置によるトランザクションの生成を依然として可能にする。別の実装では、追加で又は代替として、条件、上限又は最大値は、バイトなどの最大トランザクションサイズを含むことができる。送信側装置によって生成された部分的に完了したトランザクションは、受信側装置による条件、上限又は最大値への準拠について評価される。場合によっては、これらの条件、上限又は最大値は、トランザクションのアウトポイントを提供するのと同じ通信で送信側装置に送信されてもよい。場合によっては、条件、上限又は最大値は、別のチャネルを介して通信されてもよいし、受信側装置に関連付けられたポリシールールセットの一部として送信側装置に知られていてもよい。次に、受信側装置は、トランザクションのサイズ又はインプットとアウトプットの数を制約する条件、上限又は最大値を選択してもよい。これにより、最大トランザクション手数料が事前に確認可能になり、十分なデジタルアセットを有する適切なアウトポイントが受信側装置によって選択され得る。
【0106】
本出願は、商人と商品又はサービスを取得する顧客との間のような小売消費者トランザクションを含むブロックチェーントランザクションに限定されないが、その状況は、以下で参照される有用な例示的な例を提供する。本出願は、他の状況に適用されてもよい。更に、本出願は、暗号通貨以外のデジタルアセット又はトークンを含むコンテキストで実施することができる。
【0107】
図8を参照すると、典型的な商人-顧客システム800が示されている。システム800は、販売時点(point-of-sale (POS))装置802及び顧客装置804を含むことができる。POS装置802は、購入する見込みのある商品又はサービスを手動で又は走査装置を介して入力するために使用される固定又は移動端末装置であってもよい。POS装置802は、商品又はサービスに必要な総支払額及び1つ以上の支払方法を表示することができる。この例では、ブロックチェーン支払オプションを利用可能にすることができる。
【0108】
顧客装置802は、ブロックチェーンウォレットアプリケーションを実装したスマートフォン、タブレット、又は他のモバイルコンピューティング装置を含むことができる。顧客装置802は、Bluetooth(商標)、近距離無線通信(near-field-communications (NFC))、又は他の短距離通信技術を含む任意の適切な通信媒体及びプロトコルを使用してPOS装置802と通信することができる。様々な認証、検証及びペアリング操作を実行することができるが、これらは本説明とは無関係である。
【0109】
この例のPOS装置802は、潜在的なトランザクションに関するデータを顧客装置804に送信することができる。データは、潜在的なトランザクションに対する最大トランザクション手数料を相殺するのに十分な関連資産(アセット)価値を有するPOS装置802によって制御されるアウトポイントを含むことができる。幾つかの実施形態では、POS装置802は、インプット/アウトプットの数又はトランザクションサイズに関する1つ以上の条件、最大値又は上限を更に送信する。例えば、POS装置802は、最大インプット数n、最大アウトプット数n'、及び/又は最大トランザクションサイズNを設定することができる。幾つかの実施形態では、POS装置802は、潜在的なトランザクションに対するインプットとして示される関連アセット価値を有する指定されたインプットとしてアウトポイントを有するトランザクションテンプレートを生成して送信する。このようなトランザクションテンプレート内のアウトポイントは、POS装置802によって未だ署名されていない。トランザクションテンプレートは、幾つかの例では、送金数量(例えば、支払額)が割り当てられる受取側アドレスを含むことができる。テンプレートがこのようなアドレスを含む場合、受取側アドレスは、支払金額(すなわち、顧客装置804によって支払われる購入価格)のみを受け取り、トランザクション手数料を賄うために使用されるアウトポイントからの余剰分を受け取らないようにすることができる。
【0110】
このデータを受信すると、顧客装置804は、集合的に、トランザクション支払金額と同等かそれを超えるのに十分な集計関連値を有する、以前のトランザクションから1つ以上の顧客アウトポイントを選択することができる。トランザクションテンプレートがPOS装置802から受信されない場合、それは顧客装置804によって生成され、受取側が提供するアウトポイントもインプットとして追加される。顧客装置804は、更に1つ以上のアウトプットを追加することができ、例えば、インプットとして使用される顧客アウトポイントの集計値とPOS装置802に送信される総支払金額との差から「お釣り」を受け取ることができる。
【0111】
顧客装置804によって使用されるインプット及びアウトプットの数は、POS装置802によって規定される最大値によって制約される。言い換えると、顧客装置804上のウォレットアプリケーションは、トランザクションへのインプットとして使用するために複数の顧客アウトポイントを選択することができるが、選択された数は、POS装置804によって設定された最大数を超えてはならない。幾つかの実装では、インプットの最大数は、顧客インプットにのみ適用され得るが、幾つかの他の実装では、最大数は、顧客インプットと受信側アウトポイントの両方を含み得る。同様に、許容されるアウトプットの数は、POS装置804によって規定されたアウトプットの最大数によって制約される。代替として、POS装置804は、インプットとアウトプットの最大合計を設定する集約最大インプット/アウトプット条件を設定してもよい。これらの例及び他のそのような制限は、本明細書では、「インプット又はアウトプットの数に関する最大条件」と総称され得る。代替的又は追加的に、トランザクションの全体のサイズは、規定された最大サイズによって制約され、それによって、インプット、アウトプット、又はOP_RETURNコードなどのインプット又はアウトプットにおける追加の超過データの数を制限してもよい。
【0112】
トランザクションに追加された各顧客アウトポイントに対して、顧客装置804は、アウトポイントへのアクセスを可能にするデジタル署名を追加する、すなわち、アンロックスクリプトを提供する。しかしながら、使用されるデジタル署名のタイプは、全てのアウトプットに署名しないタイプである。すなわち、顧客装置802は、全てのインプットを含むがアウトプットのいずれも含まない、又はアウトプットのいずれか1つのみを含むトランザクション内のデータ部分のハッシュに各デジタル署名を適用するデジタル署名のクラス(例えばSIGHASH_SINGLE又はSIGHASH_NONE)を使用する。換言すれば、使用されるデジタル署名のクラスは、全てのアウトプットに署名しないため、デジタル署名を無効にすることなく、アウトプットを後でトランザクションに追加することができる。更に、デジタル署名を無効にすることなく、後からトランザクションにインプットを追加することはできない。
【0113】
ビットコインプロトコルにおける他の例示的な署名クラスには、SIGHASH_ALL|ANYONECANPAY、SIGHASH_SINGLE|ANYONECANPAY、及びSIGHASH_NONE|ANYONECANPAYが含まれることが理解されよう。これらのタイプの署名は、単一のインプットにのみ適用されるため、署名を無効にすることなくインプットを変更することができる。
【0114】
上記のように構築され署名されたトランザクションは、部分的に完了した(partially-complete)トランザクションである。受信側が受信側アウトポイントのインプットを有効にするデジタル署名を提供していないという点で、未だ完了していない。従って、顧客装置804は、部分的に完了したトランザクションをPOS装置802に送信する。POS装置802は、次に、顧客署名が有効であること、又は少なくとも、アウトプットのセット全体に署名することを回避するデジタル署名のクラスであることを検証することができる。部分的に完了したトランザクションが、例えば、インプット/アウトプットの数に関してPOS装置802によって設定された制約に準拠しており、顧客装置804からのデジタル署名が有効であり、全てのアウトプットに適用されていない場合、POS装置802は、例えば、トランザクション手数料に資金を提供するために使用される受信側アウトポイントから支払及び超過資金を受け取るために、アウトプットとして受信側アウトプットスクリプト(受信側アドレスなど)を追加することができる。場合によっては、トランザクションは、支払を受け取るための受信側アウトプットスクリプトを既に含む場合があり、受信側は、トランザクション手数料に資金を提供するために使用される受信側アウトポイントから超過資金を受け取るために、第2受信側アウトプットスクリプトを追加することができる。
【0115】
POS装置802は、トランザクション手数料の支払に資金を提供するために使用される受信側アウトポイントに対してデジタル署名を提供する。このデジタル署名は、トランザクションのアウトプットに対する変更を防止するために、署名されたメッセージ内の全てのアウトプットを含むクラスであってもよい。これは、SIGHASH_ALLのような、全てのインプット及び全てのアウトプットを含むものであってもよい。結果として得られる署名されたトランザクションは、完全なトランザクションである。POS装置802は、次に、完全なトランザクションをブロックチェーンネットワーク806内のブロックチェーンノードに送信することができる。ブロックチェーンノードでは、完全なトランザクションが検証され、伝搬され、最終的には確認される。
【0116】
上記の例は、従来型の小売店舗で使用されるような販売時点情報端末に関するものであるが、他の文脈においては、販売店コンピューティング装置は、モバイル装置、オンラインeコマースプラットフォーム、ウェブサーバ、又は他のそのようなコンピューティング装置によっても実装され得ること、及び、販売店装置と顧客装置804との間の相互作用の文脈は、小売店舗である必要はなく、短距離又は近距離通信を含む必要もないことが理解されるであろう。
【0117】
図5を参照すると、受信側が促進するトランザクションを完了する例示的な方法550をフローチャートの形式で図示する。方法550は、ネットワーク接続されたコンピューティング装置により実施されてよい。一例では、コンピューティング装置は、POS装置であってもよい。方法550は、プロセッサ実行可能命令により実施されてよい。プロセッサ実行可能命令は、プロセッサにより実行されると、プロセッサに、説明された動作を実行させる。操作には、メモリアクセス機能、信号又はデータの送受信機能、表示操作、及びプロセッサに結合されたコンポーネントに関連するその他の操作が含まれる場合がある。命令は、1つ又は複数のソフトウェアモジュール、アプリケーション、ルーチンなどで具体化され得る。
図5は、
図9A~9Fに示された例示的なトランザクションと共に説明される。
【0118】
この例では、方法550は、受信側装置及び送信側装置がネットワーク通信中であり、認証又はハンドシェーク動作を完了したこと、及び支払量が決定されていると想定する。動作552において、受信側装置は、受信側アウトポイントoutpointMを選択し、送信側装置に送信する。受信側アウトポイントは、受信側装置によって制御される以前のトランザクションのアウトポイントである。アウトポイントは、トランザクションの予想最大トランザクション手数料よりも大きい十分な関連値vMを有することに基づいて選択される。送信側装置への通信は、支払金額pを更に含むことができる。場合によっては、支払金額pは、以前の通信又は別のチャネルを通じて送信側装置に既に提供されていてよい。場合によっては、通信は、インプット及びアウトプットの数に関する最大条件、インプットの最大数n、アウトプットの最大数n'、及び/又は最大トランザクションサイズNなど、1つ以上の上限又は最大値を更に含む。上限又は最大値は、トランザクション手数料が最大トランザクション手数料以下であることを確実にするように選択することができる。
【0119】
一例では、受信側装置は、複数のアウトポイントを送信することができ、各アウトポイントは、対応する条件、最大値又は上限のセットを有する。次に、送信側装置は、アウトポイントの1つを選択し、そのアウトポイントに関連する最大値に基づいてトランザクションへのインプット及びアウトプットを選択する際に制約を受けることができる。インセンティブは、例えば、低い支払額と関連付けることによって、又は関連するロイヤルティポイント、バウチャーなどを提供することによって、低い最大値を選択するように送信側装置にバイアスをかけるために実施することができる(従って、受信側装置のトランザクション手数料は低くなる)。
【0120】
動作552は、幾つかの実装において、トランザクションテンプレートを生成し、テンプレート内でアウトポイントを送信することを含むことができる。送信側装置によって生成されたか、受信側装置によって生成され送信されたかにかかわらず、初期トランザクションテンプレートは、
図9Aに示される例示的な形式を有することができる。v
Mの関連値を有する受信側アウトポイントoutpoint
Mが、トランザクションへのインプットの1つとして示されていることに留意されたい。
【0121】
次に
図6を参照すると、部分的に完了したトランザクションを生成する例示的な方法600を示す。方法600は、顧客装置804(
図8)などのコンピューティング装置であってもよい送信側装置によって実施されてもよい。動作602において、送信側装置は、受信側装置からアウトポイント識別子を受信する。上記のように、受信側装置は、場合によっては、アウトポイント、outpoint
M、及びそれに関連するv
Mの値を送信してもよい。場合によっては、
図9Aに示すようなトランザクションテンプレートを送信してもよい。
【0122】
次に、送信側装置は、動作604において、移転量、例えば、適用可能であれば、支払額、及び1つ以上の最大値又は上限を決定してもよい。この意味で、送信側装置は、最大値又は上限を「設定」しているのではなく、受信側装置によって既に設定されている最大値又は上限を識別又は決定している。上述のように、受信側装置は、最大値を送信側装置に送信してもよい。場合によっては、最大値は、受信側装置に関するポリシールール又は他の発行された通知によって事前設定されていてもよい。場合によっては、最大値は、送信側装置と受信側装置との間の認証又はハンドシェークプロセス中に指定されてもよい。支払金額pは、場合によっては、受信側装置から通信中に指定されてもよい。支払金額は、場合によっては、受信側アドレスをアウトプットとして挿入し、そのアウトプットに支払金額pを割り当てることによって、トランザクションテンプレート内で指定されてもよい(
図9Aには示されていない)。
【0123】
動作606において、送信側装置は、合計で少なくとも移転量(例えば、支払額)と同じ大きさの値を有する、1つ以上の送信側アドレス、すなわち、以前のトランザクションからの送信側アウトポイント(例えば、UTXO)を選択する。送信側装置は、動作608において、選択された送信側アウトポイントをインプットとしてトランザクションに追加することによって、トランザクションを構築する。トランザクションに追加された送信側インプットのセットは、outpoint
i
Sと呼ばれてもよく、ここで、インデックスiは、0から最大nまでの範囲である。場合によっては、送信側装置は、1つのインプット:outpoint
0
Sのみを含んでもよい。それにもかかわらず、説明のために、
図9Bは、インデックス0からインデックスn-1までの範囲の最大数のインプットを有するトランザクション構造を示す。送信側インプットoutpoint
i
Sの各々は、v
i
Sとして示される関連する値を有する。
【0124】
動作608において、送信側装置は、インプット値の合計、例えばΣ
i
Sが支払額pを超える程度まで、「お釣り」を受信するための1つ以上の送信側アウトプットスクリプト[P
j
S]を追加することができる。ここで、P
j
Sは、送信側により処理されたj番目の鍵を示す。エッジケースでは、インプット値の合計は、支払額と正確に一致し、送信側アウトプットは追加されない。1つ以上の送信側アウトプットスクリプトを指定することができ、各スクリプトは、そのアドレス(すなわち送信側公開鍵)に割り当てられるようにトランザクション内で指定された割り当て値c
j
Sを有する。インデックスjは、0から最大数n'-1までの範囲とすることができる。多くの場合、送信側装置は、インプットから余剰アセットの移転を受信するための単一のアウトプットスクリプトP
0
Sを提供する可能性が高いことに留意されたい。ただし、送信側装置のウォレットアプリケーションが、より少ない数量又は単位でアドレスに資金を優先的に割り当てるように構成されている場合があり、その結果、ウォレットは、余剰資金(例えば、お釣り)を受信するための複数のアウトプットスクリプトを挿入することになる。
図9Bは、送信側装置が最大数のアウトプットスクリプトを含む例を示す。送信側アウトプットに割り当てられた値の合計Σc
i
Sは、インプット値の合計Σv
i
Sから支払額pを引いた値に等しい。
【0125】
動作610において、送信側装置は、少なくとも1つのデジタル署名を適用する。この例では、各送信側インプットは、そのUTXOをアンロックするための関連するデジタル署名を有する。「アンロックスクリプト」(Unlocking script)とラベル付けされた列に示されるように、送信側装置によって適用されるデジタル署名は、全てのアウトプットに署名しないタイプであることに留意されたい。例えば、Sig0
S||SINGLEとして示される操作は、同じインデックス値を有するインプットと単一のアウトプットに署名する。Sign-1
S||NONEとして示される操作は、インプットのみに署名し、アウトプットには署名しない。1つの実装では、送信側装置は、そのインデックスiが対応する送信側アウトプットスクリプトPi
Sを有する場合、その送信側インプットのいずれか(例えば、outpointi
S)にSIGHASH_SINGLEで署名する。そのインデックスiに対応する送信側アウトプットスクリプトがない場合、送信側装置はSIGHASH_NONEを使用する。
【0126】
図9Cは、網掛けを使用して、Sig
0
S||SINGLEによって署名されたメッセージに含まれるトランザクションの部分を示す。署名されたメッセージには、幾つかのヘッダメタデータ、全てのインプット、及び同じインデックスi=0を持つ1つのアウトプットが含まれることに注意する。
図9Dは、網掛けを使用して、Sig
n-1
S||NONEによって署名されたメッセージに含まれるトランザクションの部分を示す。署名されたメッセージには、幾つかのヘッダメタデータと全てのインプットが含まれるが、アウトプットは含まれないことに注意する。異なるブロックチェーンプロトコルは、デジタル署名プロセスにヘッダメタデータの異なる部分を含めることができる。
【0127】
トランザクションの送信側インプットが送信側装置によってデジタル署名されると、トランザクションは「部分的に完了」する。受信側アウトポイントoutpointMは、受信側装置によって未だ署名されておらず、従って、未だアンロックされていないことに注意する。従って、トランザクションはブロックチェーンプロトコルの観点からは未だ有効ではない。部分的に完了したトランザクションは、動作612で送信側装置から受信側装置に送信される。本説明では、部分的に完了したトランザクションを特定の形式又はテンプレートであるものとして示しているが、受信側装置に送信される部分的に完了したトランザクションは、異なる形式又は順序でデータを含むことができ、受信側装置は、そこからデータを適切に準拠したトランザクション形式及び/又は順序に再配置する。
【0128】
再び
図5を参照すると、動作554で、送信側装置は、送信側装置によって構築された部分的に完了したトランザクションを受信する。次に、動作556で、インプットが送信側装置によってデジタル署名されていることを検証する。(有効でない場合にトランザクションを拒否するようブロックチェーンノードに依存するのではなく)殆どの実装で署名を検証できる。使用されるデジタル署名の種類が、受信側ノードが署名を無効にすることなくトランザクションにアウトプットを追加できるクラスであることを検証できる。ビットコインのコンテキストでは、これには、送信側のデジタル署名の種類がSIGHASH_ALL又はSIGHASH_ALL|ANYONECANPAYでないことの確認、又は送信側の各デジタル署名の種類がSIGHASH_SINGLE又はSIGHASH_NONEであることの確認が含まれる。
【0129】
受信側装置は、インプットとアウトプットの数に基づいて、トランザクションのトランザクション手数料fを決定することができ、従って、受信側のインプットoutpointMの値vMがトランザクション手数料fを超える程度を評価することができる。従って、受信側装置に返される超過アセットの量を決定することができる。
【0130】
トランザクションが正しく署名され、形成された場合、動作558で、受信側ノードは、部分的に完了したトランザクションにアウトプットスクリプトを追加することができる。追加されるアウトプットスクリプトは、支払金額pに加えて、そのインプットの値vMが支払可能なトランザクション手数料fを超える程度までoutpointMからの超過資金を受け取ることを意図した支払アドレスであってもよい。別の実装では、受信側装置は、支払金額pを受け取るように指定された1つ以上のアウトプットスクリプトと、vM-fの超過を受け取るように指定された別の1つ以上のアウトプットスクリプトを追加することができる。幾つかの実装では、支払アドレスが送信側装置に提供されていて、部分的に完了したトランザクションに既に存在していてもよい。次に、受信側装置は、インプットとアウトプットの数に基づいて、トランザクション手数料fを決定し、超過vM-fを格納するための1つ以上のアウトプットスクリプトを挿入することができる。
【0131】
存在する場合には1つ以上のアウトプットスクリプトを追加した後、受信側装置は、その受信側インプットに対してアンロックスクリプトを追加する。すなわち、outpointMに関連付けられた秘密鍵を使用してデジタル署名を提供する。デジタル署名は、トランザクションに対する全てのインプットとアウトプットを含むメッセージテキストに適用され、それによってトランザクションに対するそれ以上の変更を防ぐ。ビットコインのコンテキストでは、これはSIGHASH_ALL操作である。
【0132】
図9Eは、受信側装置がアウトプットスクリプトP
Mを追加した後のトランザクションを示している。そのアウトプットスクリプトに割り当てられる値は、支払金額pに受信側インプットv
Mとトランザクション手数料fとの差を加えたものである。また、受信側インプットのアンロックスクリプト内のSIGHASH_ALLデジタル署名操作も示されている。
図9Fは、Sig
M||ALLデジタル署名操作によって署名されたメッセージを形成するトランザクションの部分を影付きで示している。メッセージテキストは、ヘッダメタデータと全てのインプット及びアウトプットを含むことに留意されたい。
【0133】
動作560でトランザクションがデジタル署名されると、トランザクションは完全なトランザクションとなり、動作562で、受信側装置は、妥当性確認、伝搬、及び確認のために、ブロックチェーンネットワーク内の1つ以上のブロックチェーンノードにトランザクションを送信する。
【0134】
前述の例及び図は、商人装置から顧客装置へのメッセージ及び顧客装置から商人装置への返信メッセージを含むSPV支払の一般的な通信フローを維持する方法及びシステムを提供する。それにもかかわらず、無署名の商人/受信側インプットアウトポイントを提供することによって、受信側装置は、トランザクション手数料のためのデジタルアセットを供給することができるが、トランザクション手数料によって消費されない超過資金を受け取るための最終アウトプットアドレスの挿入を制御し、トランザクションを完了して有効にするために自身のインプットに最終デジタル署名を適用することによって、トランザクションの肥大化とトランザクション手数料のサイズの制御を維持することができる。
【0135】
上述したように、トランザクション手数料を賄うために十分に大きな受信側インプットを提供することへの課題は、そのインプットを自由に提供することが、過剰なインプット及びアウトプットを追加することによって送信側装置による乱用及び無駄を可能にする可能性があることである。受信側装置は、最大トランザクション手数料を制御し、その手数料を賄うために適切な受信側インプットの事前選択を可能にし、トランザクションの肥大化を防止するために、インプット及びアウトプットの数に条件、上限又は最大値を課すことができる。
【0136】
図7を参照すると、受信側が促進するトランザクションを完了する別の例示的な方法700をフローチャートの形式で図示する。方法700は、ネットワーク接続されたコンピューティング装置により実施されてよい。一例では、コンピューティング装置は、POS装置であってもよい。方法700は、プロセッサ実行可能命令により実施されてよい。プロセッサ実行可能命令は、プロセッサにより実行されると、プロセッサに、説明された動作を実行させる。操作には、メモリアクセス機能、信号又はデータの送受信機能、表示操作、及びプロセッサに結合されたコンポーネントに関連するその他の操作が含まれる場合がある。命令は、1つ以上のソフトウェアモジュール、アプリケーション、ルーチンなどに具体化される場合がある。
【0137】
動作702において、受信側装置は、移転量、例えば、送信側装置から受信されるデジタルアセットの量を決定することができる。次に、動作704において、移転量、トランザクションに対する受信側インプットとして使用されるアウトポイント識別子、及び1つ又は複数のインプット及びアウトプット上限パラメータ又は条件を、送信側装置に送信することができる。例として、受信側装置は、インプット最大数n及びアウトプット最大数n'を送信することができる。これらの最大値は、送信側装置がトランザクションに追加できるインプット及びアウトプットの最大数を各々指定することができる。一例では、受信側装置は、送信側装置がトランザクションに追加できるインプット及びアウトプットの最大集計数である単一の最大値を送信することができる。別の例では、最大条件は、a*n+b*n'<Kの形式を取ることができ、ここで、a及びbは、各々、P2PKHアンロック及びロックスクリプトのバイトサイズであり、Kは、受信側装置によって選択された最大値であり、それによって、送信側装置は、最大条件を満たすために、n及びn'を選択することができる。更に別の例では、最大条件は、A+B<Kの形式を取ることができ、ここで、A及びBは、各々、送信側インプット及び送信側アウトプットのセットの合計バイトサイズであり、Kは、受信側装置によって設定された最大値である。前述のように、一部の実装では、受信側装置は、異なる最大トランザクション手数料に対応する最大値のセットを設定することができ、送信側装置は、最大値のセットの中から選択することができる。
【0138】
動作706において、受信側装置は、送信側装置から部分的に完了したトランザクションを受信する。部分的に完了したトランザクションは、受信側アウトポイントをインプットの1つとして含み、少なくとも1つの送信側インプットを含む。送信側インプットの値が移転額を超える場合、超過資金を受け取るための1つ以上の送信側アウトプットを更に含むことができる。送信側インプットは、インプットに対するデジタル署名を含むアンロックスクリプトを含む。デジタル署名は、全てのアウトプットに署名しない。
【0139】
この例では、動作708で、受信側装置は、トランザクション内の送信側インプットの数がインプット最大数nを超えているかどうかを評価する。超えている場合、受信側装置は、動作710でトランザクションを拒否する。これには、送信装置への拒否されたトランザクションの通知の送信が含まれる場合がある。通知には、最大許容値を超える過剰なインプットなど、失敗の理由の指示が含まれる場合がある。受信側装置及び送信側装置のいずれか又は両方が、トランザクションが条件に準拠していないために失敗したことを示す通知をユーザに表示又は出力する場合がある。場合によっては、受信側装置及び送信側装置は、問題を修正するためにトランザクション生成を再開する場合がある。
【0140】
動作712で、受信側装置は、送信側アウトプットの数がアウトプット最大数を超えているかどうかを決定する。超えている場合、動作710でトランザクションは拒否される。
【0141】
動作708及び712は、異なる定式化された条件の場合に修正され得ることが理解されよう。例えば、上記のように、最大条件がa*n+b*n'<Kの形式である場合、受信側装置は、インプットとアウトプットのバイトサイズを合計して、値K未満であるかどうかを決定する。
【0142】
動作714では、受信側装置は、送信側インプットに適用されたデジタル署名が、全てのインプットを含むが全てのアウトプットを含まないメッセージにデジタル署名するタイプ又はクラスであるかどうかを決定する。ビットコインのコンテキストでは、これには、対応するインデックスに送信側アウトプットがない送信側インプットに適用されたデジタル署名がSIGHASH_NONE操作であること、及び同じインデックスに対応する送信側アウトプットがある送信側インプットに適用されたデジタル署名がSIGHASH_SINGLE操作であることを確認することが含まれる。また、デジタル署名操作がSIGHASH_ALL操作でないことを確認することも含まれる場合がある。場合によっては、動作714は、デジタル署名の検証を更に含む。一般に、動作714は、トランザクションにアウトプットを追加しても、送信側装置によって適用されたデジタル署名が無効にならないことを決定することを含む。デジタル署名が準拠していない場合、動作710でトランザクションは拒否される。
【0143】
トランザクションが動作708、712及び714のテストを満たすと仮定すると、動作716で、受信側装置は、受信側インプットの値vMがトランザクション手数料fを超える程度まで残余額を受け取るためのアウトプットスクリプトを追加する。場合によっては、同じアウトプットアドレスを使用して、移転額を受け取ることもできる。場合によっては、移転額を受け取るために第2受信側アウトプットスクリプトを追加することもできる。一部の実装では、受信側アウトプットスクリプトが、移転額を受信するための部分的に完了したトランザクション内に既に存在している場合がある。
【0144】
動作718で、受信側装置は、全てのインプット及びアウトプットに署名するデジタル署名を使用して、受信側インプットにデジタル署名する。ビットコインのコンテキストでは、これはSIGHASH_ALL操作である。従って、このデジタル署名は、署名及びトランザクションを無効にすることなく変更できないように、インプット及びアウトプットを所定の位置にロックする。次に、動作720で、検証、伝搬及び最終的な確認のために、完全なトランザクションをブロックチェーンノードに送信することができる。
【0145】
上述の種々の実施形態は、単なる例であり、本願の範囲を限定することを意味しない。本願の意図された範囲内にある変形のように、ここに記載された種々の技術革新は、当業者に明らかである。特に、上述の例示的な実施形態のうちの1つ以上からの特徴は、以上に明示的に示されない特徴の部分結合を含む代替の例示的な実施形態を生成するために選択されてよい。更に、上述の例示的な実施形態のうちの1つ以上からの特徴は、以上に明示的に示されない特徴の結合を含む代替の例示的な実施形態を生成するために選択され結合されてよい。このような結合及び部分結合に適する特徴は、本願の全体的に吟味することにより当業者に直ちに明らかになるだろう。本願明細書及び請求項に記載された主題は、あらゆる適切な技術的変更をカバーし包含する。
【国際調査報告】