JP2023529467A - カスタムトランザクションスクリプト - Google Patents

カスタムトランザクションスクリプト Download PDF

Info

Publication number
JP2023529467A
JP2023529467A JP2022576152A JP2022576152A JP2023529467A JP 2023529467 A JP2023529467 A JP 2023529467A JP 2022576152 A JP2022576152 A JP 2022576152A JP 2022576152 A JP2022576152 A JP 2022576152A JP 2023529467 A JP2023529467 A JP 2023529467A
Authority
JP
Japan
Prior art keywords
transaction
output
blockchain
script
transactions
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2022576152A
Other languages
English (en)
Inventor
ジャック・オーウェン・デイヴィーズ
クロエ・タータン
アレクサンダー・マッケイ
アントアネタ・セルギエヴァ
クレイグ・スティーヴン・ライト
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nchain Holdings Ltd
Original Assignee
Nchain Holdings Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Nchain Holdings Ltd filed Critical Nchain Holdings Ltd
Publication of JP2023529467A publication Critical patent/JP2023529467A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
    • G06Q20/00Payment architectures, schemes or protocols
    • G06Q20/38Payment protocols; Details thereof
    • G06Q20/389Keeping log of transactions for guaranteeing non-repudiation of a transaction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
    • G06Q20/00Payment architectures, schemes or protocols
    • G06Q20/22Payment schemes or models
    • G06Q20/223Payment schemes or models based on the use of peer-to-peer networks
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/32Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
    • H04L9/3236Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials using cryptographic hash functions
    • H04L9/3239Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials using cryptographic hash functions involving non-keyed hash functions, e.g. modification detection codes [MDCs], MD5, SHA or RIPEMD
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
    • G06Q20/00Payment architectures, schemes or protocols
    • G06Q20/38Payment protocols; Details thereof
    • G06Q20/382Payment protocols; Details thereof insuring higher security of transaction
    • G06Q20/3825Use of electronic signatures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
    • G06Q20/00Payment architectures, schemes or protocols
    • G06Q20/38Payment protocols; Details thereof
    • G06Q20/40Authorisation, e.g. identification of payer or payee, verification of customer or shop credentials; Review and approval of payers, e.g. check credit lines or negative lists
    • G06Q20/401Transaction verification
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/50Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols using hash chains, e.g. blockchains or hash trees
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L2209/00Additional information or applications relating to cryptographic mechanisms or cryptographic arrangements for secret or secure communication H04L9/00
    • H04L2209/56Financial cryptography, e.g. electronic payment or e-cash
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L63/00Network architectures or network communication protocols for network security
    • H04L63/12Applying verification of the received information

Landscapes

  • Business, Economics & Management (AREA)
  • Engineering & Computer Science (AREA)
  • Accounting & Taxation (AREA)
  • Computer Security & Cryptography (AREA)
  • General Physics & Mathematics (AREA)
  • Strategic Management (AREA)
  • Physics & Mathematics (AREA)
  • General Business, Economics & Management (AREA)
  • Theoretical Computer Science (AREA)
  • Finance (AREA)
  • Signal Processing (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Financial Or Insurance-Related Operations Such As Payment And Settlement (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

ブロックチェーントランザクションを受け入れるコンピュータで実施される方法であって、方法は、ブロックチェーンネットワークのブロックチェーンノードによって実行され、第1の出力を備える第1のトランザクションを生成するステップであって、第1の出力が第1の出力スクリプトを備える、ステップと、第1のトランザクションがブロックチェーンで公開されるようにするステップと、第2の出力を備える第2のトランザクションを受信するステップであって、第2の出力が第2の出力スクリプトを備える、ステップと、1つまたは複数の条件が満たされることに基づいて第2のトランザクションを受け入れるステップとを備え、前記1つまたは複数の条件のうちの第1の条件は、第2の出力スクリプトが第1の出力スクリプトに対応することである。

Description

本開示は、ブロックチェーントランザクションを受け入れるかどうかを選ぶ方法、たとえば、ブロックチェーンノードが、ブロックにおいてトランザクションを公開するか、または他のブロックチェーンノードに広めるかを選ぶ方法に関する。
ブロックチェーンとは、ある形式の分散型データ構造を指し、ブロックチェーンの複製は、分散型ピアツーピア(P2P)ネットワーク(以下では「ブロックチェーンネットワーク」と呼ばれる)の中の複数のノードの各々において維持され、広く公開される。ブロックチェーンは、データのブロックのチェーンを備え、各ブロックは、1つまたは複数のトランザクションを備える。いわゆる「コインベーストランザクション」以外の各トランザクションは、1つまたは複数のコインベーストランザクションまで戻る1つまたは複数のブロックにまたがり得るシーケンスの中の先行するトランザクションを指し示す。コインベーストランザクションは以下でさらに論じられる。ブロックチェーンネットワークに出されるトランザクションは、新しいブロックに含まれる。新しいブロックは「マイニング」と呼ばれることが多い処理により作成され、これは、複数のノードの各々が競争して「プルーフオブワーク」を実行すること、すなわち、ブロックチェーンの新しいブロックに含められることを待機している、順序付けられ妥当性確認された未処理のトランザクションの定められたセットの表現に基づいて、暗号パズルを解くことを伴う。ブロックチェーンは一部のノードにおいて枝刈りされてもよく、ブロックの公開はブロックヘッダだけの公開により達成され得ることに留意されたい。
ブロックチェーンにおけるトランザクションは、デジタル資産(すなわち、ある数のデジタルトークン)を運ぶこと、仮想化された台帳もしくは登録簿の仕訳のセットを順序付けること、タイムスタンプエントリを受信して処理すること、および/またはインデックスポインタを時間的に順序付けることという、目的のうちの1つまたは複数のために使用され得る。ブロックチェーンは、ブロックチェーンに追加の機能を重ねるためにも利用され得る。たとえば、ブロックチェーンプロトコルは、トランザクションにおける追加のユーザデータまたはデータに対するインデックスの記憶を可能にし得る。単一のトランザクションに記憶され得る最大のデータ容量にはあらかじめ指定された限界はないので、ますます複雑になるデータを組み込むことができる。たとえば、これは、ブロックチェーンの中の電子文書、またはオーディオデータもしくはビデオデータを記憶するために使用され得る。
ブロックチェーンネットワークのノード(「マイナー」と呼ばれることが多い)は、後でより詳しく説明される、分散型のトランザクションの登録および検証のプロセスを実行する。要約すると、この処理の間に、ノードはトランザクションを妥当性確認し、それらをブロックテンプレートに挿入し、ノードはそのブロックテンプレートについて有効なプルーフオブワークの解を特定することを試みる。有効な解が見つかると、新しいブロックがネットワークの他のノードに広められるので、各ノードがブロックチェーンに新しいブロックを記録することを可能にする。トランザクションがブロックチェーンに記録されるようにするために、ユーザ(たとえば、ブロックチェーンクライアントアプリケーション)は、トランザクションが広められるように、それをネットワークのノードのうちの1つに送信する。トランザクションを受信するノードは競って、妥当性確認されたトランザクションを新しいブロックへ組み込むプルーフオブワークの解を見つけることができる。各ノードは同じノードプロトコルを実施するように構成され、これは、トランザクションが有効になるための1つまたは複数の条件を含む。無効なトランザクションは、広められることも、ブロックに組み込まれることもない。トランザクションが妥当性確認され、それによりブロックチェーン上で受け入れられると仮定すると、トランザクション(あらゆるユーザデータを含む)は、イミュータブルな公開記録としてブロックチェーンネットワークの中のノードの各々において登録されインデクシングされたままになる。
最新のブロックを作成するためにプルーフオブワークパズルを解くことに成功したノードは通常、ある額のデジタル資産、すなわちある数のトークンを分配する「コインベーストランザクション」と呼ばれる新しいトランザクションにより報酬を受ける。無効なトランザクションの検出および拒絶は、ネットワークのエージェントとして活動し不正を報告して阻止する動機のある、競合するノードの活動によって実施される。情報を広く公開することで、ユーザはノードの実績を継続的に監査することが可能になる。ブロックヘッダのみの公開により、参加者はブロックチェーンの完全性が継続中であることを確実にすることが可能になる。
「出力ベース」モデル(UTXOベースのモデルと呼ばれることがある)では、所与のトランザクションのデータ構造は、1つまたは複数の入力および1つまたは複数の出力を備える。あらゆる消費可能な出力は、トランザクションの先行するシーケンスから導出可能であるデジタル資産の額を指定する要素を備える。消費可能な出力は、UTXO(「未消費トランザクション出力」)と呼ばれることがある。出力はさらに、出力のさらなる引き換えのための条件を指定するロッキングスクリプトを備え得る。ロッキングスクリプトは、デジタルトークンまたは資産を妥当性確認して移すために必要な条件を定義する述部である。トランザクション(コインベーストランザクション以外)の各入力は、先行するトランザクションにおけるそのような出力へのポインタ(すなわち、参照)を備え、指し示された出力のロッキングスクリプトをアンロックするためのアンロッキングスクリプトをさらに備え得る。よって、トランザクションのペアを考え、それらを第1のトランザクションおよび第2のトランザクション(または「標的」トランザクション)と呼ぶ。第1のトランザクションは、デジタル資産の額を指定し、出力をアンロッキンングする1つまたは複数の条件を定義するロッキングスクリプトを備える、少なくとも1つの出力を備える。第2の標的トランザクションは、第1のトランザクションの出力へのポインタと、第1のトランザクションの出力をアンロックするためのアンロッキングスクリプトとを備える、少なくとも1つの入力を備える。
そのようなモデルでは、第2の標的トランザクションが、ブロックチェーンにおいて広められて記録されるようにブロックチェーンネットワークに送信されるとき、各ノードにおいて適用される有効性の基準の1つは、アンロッキングスクリプトが第1のトランザクションのロッキングスクリプトにおいて定義される1つまたは複数の条件のすべてを満たすというものである。別の基準は、第1のトランザクションの出力が別のより前の有効なトランザクションによってまだ引き換えられていないということである。これらの条件のいずれかに従って標的トランザクションが無効であることを見出したいずれのノードも、トランザクションを広めず(場合によっては無効なトランザクションを登録するために有効なトランザクションとして広めない)、またブロックチェーンに記録されるべき新しいブロックにトランザクションを含めない。
コンセンサスルールに加えて、ブロックチェーンノードは、そのノードがブロックにおいて公開する用意のあるトランザクションをそのノードがさらに改良することを可能にする、1つまたは複数のローカルポリシールールを適用し得る。
一部のブロックチェーンネットワークは、有効なトランザクションに含まれることが許容される入力スクリプトおよび/または出力スクリプトのタイプに関して、他のブロックチェーンネットワークより制約がある。すなわち、一部のネットワークは、たとえばより複雑なロッキングスクリプトを許容するために、関係者(たとえば、ユーザ)がトランザクションの出力をロックするために使用できるトランザクションスクリプトについて、他のネットワークより柔軟性がある。しかしながら、ブロックチェーンノードが、そのノードが受け入れる(たとえば、そのノードによって構築されるブロックにおいて公開する)用意のあるトランザクション、またはそのノードが受け入れを優先するトランザクションに含まれ得るスクリプトのタイプを通信する方法は、現在は存在しない。
したがって、ノードは、自身が特定のスクリプトタイプを処理して受け入れることを伝えることが可能である必要があり、同様に、ユーザは、ノードによって受け入れられるスクリプト(たとえば、「テンプレート」スクリプト)を取得することが可能である必要がある。
本明細書において開示される一態様によれば、ブロックチェーントランザクションを受け入れるコンピュータで実施される方法が提供され、この方法は、ブロックチェーンネットワークのブロックチェーンノードによって実行され、第1の出力を備える第1のトランザクションを生成するステップであって、第1の出力が第1の出力スクリプトを備える、ステップと、第1のトランザクションがブロックチェーン上で公開されるようにするステップと、第2の出力を備える第2のトランザクションを受信するステップであって、第2の出力が第2の出力スクリプトを備える、ステップと、1つまたは複数の条件が満たされることに基づいて第2のトランザクションを受け入れるステップとを備え、前記1つまたは複数の条件のうちの第1の条件が、第2の出力スクリプトが第1の出力スクリプトに対応することである。
ブロックチェーンノードは、ブロックチェーンにトランザクションテンプレート(すなわち、第1のトランザクション)を登録する。したがって、関係者(たとえば、ユーザ)は、トランザクションテンプレートを取得し、それを使用して、「テンプレート」スクリプトに対応するスクリプトを有する自分自身のトランザクションを生成することができる。たとえば、ユーザのトランザクションの中のスクリプトは、ブロックチェーンノードによって選ばれる任意の変数、またはヌルデータの代わりに、ユーザによって選ばれる変数(たとえば、公開鍵)を伴うテンプレートスクリプトと同じフォーマットに従い得る。ブロックチェーンノードがユーザのトランザクションを受信するとき、ブロックチェーンノードは、それがテンプレートトランザクションに対応するかどうかを確認し、対応する場合、ユーザのトランザクションを受け入れる。ブロックチェーンノードは次いで、ノードによって構築されるブロックにおいてユーザのトランザクションを公開すること、および/またはトランザクションを他のノードに広めることを試み得る。
本明細書において開示される一態様によれば、ブロックチェーントランザクションを生成するコンピュータで実施される方法が提供され、ブロックチェーンは、第1の出力スクリプトを備える第1の出力を備える第1のトランザクションを備え、第3のトランザクションは、第1の入力スクリプトを備える第1の入力を備え、第1の入力スクリプトは、第1の出力スクリプトとともに実行されると、第1の出力スクリプトをアンロックするように構成され、第1および第3のトランザクションはブロックチェーンノードによって生成され、方法は、関係者によって実行され、第1のトランザクションおよび/または第3のトランザクションを取得するステップと、a)第1のトランザクションの第1のスクリプトに対応する第2の出力スクリプトを備える第2の出力、および/または、b)第1のテンプレートトランザクションの第1の入力スクリプトに対応する第2の入力スクリプトを備える第2の入力を備える、第2のトランザクションを生成するステップと、第2のトランザクションがブロックチェーンノードに送信されるようにするステップとを備える。
テンプレートトランザクションは、ブロックチェーン上で公開されており、ユーザは、テンプレートスクリプトを使用して自分自身のトランザクションを生成することを望む。ユーザは、たとえばブロックチェーンからテンプレートトランザクションを要求することによって、テンプレートトランザクションを取得する。ユーザがブロックチェーンノードによって受け入れられるテンプレートスクリプトを知ると、ユーザは、対応するスクリプトを使用して自分自身のトランザクションを生成し、ユーザのトランザクションをブロックチェーンノードに送信することができる。
つまり、本発明は、ブロックチェーンノードがブロックチェーンにトランザクションテンプレートを登録することを可能にし、こうして、ブロックチェーンノードのローカルポリシールールをシグナリングする。ブロックチェーンノードは、ホワイトリストに載っているトランザクションタイプのブロックチェーンノードのリストを公開するための方法を使用し、ブロックチェーンノードがカスタムスクリプトを使用する必要があるときにブロックチェーンノードが適切なノードに接続するのを助けるユーザ情報を与えることができる。
本開示の実施形態の理解を助けるために、およびそのような実施形態がどのように具体化され得るかを示すために、単なる例として、添付の図への参照が行われる。
ブロックチェーンを実装するためのシステムの概略ブロック図である。 ブロックチェーンに記録され得るトランザクションのいくつかの例を概略的に示す図である。 トランザクションを処理するための何らかのノードソフトウェアの概略ブロック図である。 本発明の実施形態を実装するためのシステムの概略ブロック図である。 例示的な第1のテンプレートトランザクションの概略的な表現の図である。 例示的な第2のテンプレートトランザクションの概略的な表現の図である。 図6の第2のテンプレートトランザクションの拡大図である。 図5から図7の例示的なテンプレートトランザクションに含まれ得る例示的なデータフィールドを示す図である。 スクリプト候補に含めるべきデータのタイプをシグナリングするために使用され得る例示的なバイトコードを示す図である。 例示的な統合トランザクションの概略的な表現の図である。 図10の例示的な統合トランザクションに含まれ得る例示的なデータフィールドを示す図である。 例示的な第1のテンプレートトランザクションの概略的な表現の図である。 例示的な第2のテンプレートトランザクションの概略的な表現の図である。 図12aおよび図12bのテンプレートトランザクションの拡大図である。 さらなる例示的な第1のテンプレートトランザクションの概略的な表現の図である。 さらなる例示的な第2のテンプレートトランザクションの概略的な表現の図である。 図13aおよび図13bのテンプレートトランザクションの拡大図である。
例示的なシステムの概要
図1は、ブロックチェーン150を実装するための例示的なシステム100を示す。システム100は、通常はインターネットなどのワイドエリアインターネットワークである、パケット交換ネットワーク101からなり得る。パケット交換ネットワーク101は、パケット交換ネットワーク101内でピアツーピア(P2P)ネットワーク106を形成するように並べられ得る複数のブロックチェーンノード104を備える。示されていないが、ブロックチェーンノード104は準完全グラフとして並べられ得る。したがって、各ブロックチェーンノード104は、他のブロックチェーンノード104に高度に接続される。
各ブロックチェーンノード104は、ピアのコンピュータ機器を備え、異なるノード104は異なるピアに属する。各ブロックチェーンノード104は、1つまたは複数のプロセッサ、たとえば1つまたは複数の中央処理装置(CPU)、アクセラレータプロセッサ、特定用途向けプロセッサおよび/またはフィールドプログラマブルゲートアレイ(FPGA)、ならびに特定用途向け集積回路(ASIC)などの他の機器を備える、処理装置を備える。各ノードはまた、メモリ、すなわち、非一時的コンピュータ可読媒体の形態のコンピュータ可読ストレージを備える。メモリは、1つまたは複数のメモリ媒体、たとえば、ハードディスクなどの磁気媒体、ソリッドステートドライブ(SSD)、フラッシュメモリ、もしくはEEPROMなどの電子媒体、および/または高額ディスクドライブなどの光学媒体を利用する、1つまたは複数のメモリユニットを備え得る。
ブロックチェーン150はデータのブロック151のチェーンを備え、ブロックチェーン150のそれぞれのコピーが、分散ネットワークまたはブロックチェーンネットワーク101の中の複数のブロックチェーンノード104の各々において維持される。上で言及されたように、ブロックチェーン150のコピーを維持することは、ブロックチェーン150を完全に記憶することを必ずしも意味しない。代わりに、ブロックチェーン150は、各ブロックチェーンノード150が各ブロック151のブロックヘッダ(以下で論じられる)を記憶する限り、データを枝刈りされ得る。チェーンの中の各ブロック151は1つまたは複数のトランザクション152を備え、この文脈においてトランザクションはある種のデータ構造を指す。データ構造の性質は、トランザクションモデルまたはスキームの一部として使用されるトランザクションプロトコルのタイプに依存する。所与のブロックチェーンは、1つの特定のトランザクションプロトコルを全体で使用する。ある一般的なタイプのトランザクションプロトコルにおいて、各トランザクション152のデータ構造は、少なくとも1つの入力および少なくとも1つの出力を備える。各出力は、ある数量のデジタル資産を表す額を財産として指定し、その例は、出力が暗号によりにロックされる対象であるユーザ103である(アンロック、および引き換えまたは消費のために、そのユーザの署名または他のソリューションを必要とする)。各入力は、先行するトランザクション152の出力を指し示し、それによりそれらのトランザクションをつなぐ。
各ブロック151はまた、ブロック151に対する逐次的な順序を定義するために、チェーンの中の以前に作成されたブロック151を指し示すブロックポインタ155を備える。各トランザクション152(コインベーストランザクション以外)は、トランザクションのシーケンスに対する順序を定義するために、以前のトランザクションへのポインタを備える(トランザクション152のシーケンスは分岐することが許容されることに留意されたい)。ブロック151のチェーンは、チェーンにおいて最初のブロックであったジェネシスブロック(Gb)153まで戻る。チェーン150の初期の1つまたは複数の元のトランザクション152は、先行するトランザクションではなくジェネシスブロック153を指し示していた。
ブロックチェーンノード104の各々は、トランザクション152を他のブロックチェーンノード104に転送し、それにより、トランザクション152がネットワーク106全体に広められるようにするように構成される。各ブロックチェーンノード104は、ブロック151を作成し、同じブロックチェーン150のそれぞれのコピーをそれぞれのメモリに記憶するように構成される。各ブロックチェーンノード104はまた、ブロック151へと組み込まれるのを待機しているトランザクション152の順序付けられたセット(または「プール」)154を維持する。順序付けられたプール154は、「メモリプール」と呼ばれることが多い。本明細書におけるこの用語は、任意の特定のブロックチェーン、プロトコル、またはモデルに限定することを意図しない。それは、ノード104が有効であるものとして受け入れた、かつ同じ出力を消費することを試みる他のトランザクションをノード104が受け入れることが義務付けられない、トランザクションの順序付けられたセットを指す。
所与の現在のトランザクション152jにおいて、入力(または各入力)は、トランザクションのシーケンスの中の先行するトランザクション152iの出力を参照するポインタを備え、これは、この出力が現在のトランザクション152jにおいて引き換えられる、または「消費される」ことになることを指定する。一般に、先行するトランザクションは、順序付けられたセット154または任意のブロック151における任意のトランザクションであり得る。先行するトランザクション152iは、現在のトランザクション152iが作成される時点で、またはネットワーク106に送信される時点ですら、必ずしも存在する必要はないが、現在のトランザクションが有効になるためには、先行するトランザクション152iが存在して妥当性確認される必要がある。したがって、本明細書における「先行する」は、ポインタにより連結される論理シーケンスにおいて先行するものを指し、時間的な順序における作成または送信の時間を必ずしも指さず、したがって、トランザクション152i、152jが順不同で作成または送信されることを必ずしも排除しない(オーファントランザクションについての以下の議論を参照)。先行するトランザクション152iは同様に、祖先トランザクションまたは先行者トランザクションと呼ばれ得る。
現在のトランザクション152jの入力はまた、入力承認、たとえば、先行するトランザクション152iの出力がロックされる対象であるユーザ103aの署名を備える。そして、現在のトランザクション152jの出力は、新しいユーザまたはエンティティ103bに暗号によりロックされ得る。したがって、現在のトランザクション152jは、現在のトランザクション152jの出力において定義されるような新しいユーザまたはエンティティ103bに、先行するトランザクション152iの入力において定義される額を移すことができる。いくつかの場合、トランザクション152は、複数のユーザまたはエンティティ(そのうちの1つは、残金を与えるために元のユーザまたはエンティティ103aであり得る)の間で入力の額を分割するために、複数の出力を有し得る。いくつかの場合、トランザクションはまた、1つまたは複数の先行するトランザクションの複数の出力からの額を一緒に集めて、現在のトランザクションの1つまたは複数の出力を再分配するために、複数の入力を有し得る。
ビットコインなどの出力ベースのトランザクションプロトコルによれば、個々のユーザまたは組織などの関係者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のネットワーク全体に広められる。
出力ベースのモデルにおいて、所与の出力(たとえば、UXTO)が割り当てられる(たとえば、消費される)かどうかの定義は、それがブロックチェーンノードプロトコルに従って別の前方のトランザクション152jの入力によりすでに有効に引き換えられているかどうかである。トランザクションが有効になるための別の条件は、そのトランザクションが割り当てることまたは引き換えることを試みる先行するトランザクション152iの出力が、別のトランザクションによってまだ引き換えられていないことである。やはり、有効ではない場合、トランザクション152jは、ブロックチェーン150において広められず(無効であるものとしてフラグを立てられて警告のために広められない限り)、または記録されない。これは、取引者が同じトランザクションの出力を一度より多く割り当てることを試みるような、二重消費から守る。一方、アカウントベースのモデルは、アカウント残高を維持することによって二重消費から守る。やはり、トランザクションの定められた順序があるので、アカウント残高は任意のある時間において単一の定められた状態を有する。
トランザクションを検証することに加えて、ブロックチェーンノード104はまた、マイニングと一般に呼ばれるプロセスにおいて、トランザクションのブロックを最初に作成するのを競い、これは「プルーフオブワーク」により支援される。ブロックチェーンノード104において、新しいトランザクションは、ブロックチェーン150に記録されているブロック151にまだ表れていない有効なトランザクションの順序付けられたプール154に追加される。そして、ブロックチェーンノードは、暗号パズルを解こうとすることによって、トランザクションの順序付けられたセット154からトランザクション152の新しい有効なブロック151を競って組み立てる。通常、これは、「ノンス」が未処理のトランザクションの順序付けられたプール154の表現と連結されてハッシュされると、ハッシュの出力が所定の条件を満たすような、ノンス値を探すことを備える。たとえば、所定の条件は、ハッシュの出力がある定められた数の先頭の0を有するということであり得る。これは、プルーフオブワークパズルの1つの具体的なタイプにすぎず、他のタイプが排除されないことに留意されたい。ハッシュ関数の性質は、それがその入力に関して予測不可能な出力を有するというものである。したがって、この探索は、ブルートフォースによってのみ実行することができるので、パズルを解こうとしている各ブロックチェーンノード104において大量の処理リソースを消費する。
パズルを解こうとする第1のブロックチェーンノード104は、これをネットワーク106に告知し、ネットワークの中の他のブロックチェーンノード104によって容易に確かめられ得る証明として解を提供する(ハッシュへの解が与えられると、それによりハッシュの出力が条件を満たすようになることを確かめるのは単純である)。第1のブロックチェーンノード104は、ブロックを受け入れしたがってプロトコルルールを実施する、他のノードの閾値コンセンサスにブロックを広める。トランザクションの順序付けられたセット154は次いで、ブロックチェーンノード104の各々によってブロックチェーン150の中の新しいブロック151として記録されるようになる。ブロックポインタ155はまた、チェーンの中の以前に作成されたブロック151n-1を指し示す新しいブロック151nに割り当てられる。プルーフオブワークの解を作成するために必要とされる、たとえばハッシュの形式のこの大量の労力は、ブロックチェーンプロトコルのルールに従うという第1のノードの104の意図を示すものである。そのようなルールは、以前に妥当性確認されたトランザクションと同じ出力を割り当てる場合(これは別様に二重消費として知られている)、有効であるものとしてトランザクションを受け入れないことを含む。作成されると、ブロック151を改変することはできず、それは、ブロック151が、ブロックチェーンネットワーク106の中のブロックチェーンノード104の各々において認識され維持されるからである。ブロックポインタ155はまた、逐次的な順序をブロック151に課す。トランザクション152は、ネットワーク106の中の各ブロックチェーンノード104において順序付けられるブロックに記録されるので、これはトランザクションのイミュータブルな公開台帳を提供する。
任意の所与の時間において競ってパズルを解く異なるブロックチェーンノード104は、それらのブロックチェーンノードがいつ解の探索を始めたか、またはトランザクションが受信された順序に応じて、任意の所与の時間におけるまだ公開されていないトランザクション154のプールの異なるスナップショットに基づいて、競ってパズルを解いていることがあることに留意されたい。それぞれのパズルを最初に解いた者が、どのトランザクション152が次の新しいブロック151nに含まれるか、およびどの順序で含まれるかを定義し、公開されていないトランザクションの現在のプール154は更新される。ブロックチェーンノード104は次いで、公開されていないトランザクション154の新しく定義された順序付けられたプールからブロックを競って作成し続け、以下同様である。生じ得るあらゆる「フォーク」を解決するためのプロトコルも存在し、これは、2つのブロックチェーンノード104が互いに非常に短い時間内にパズルを解き、その結果、ブロックチェーンの矛盾する景色がノード104間で広められるようになる状況である。つまり、フォークの先端がより長く成長した方が、最終的なブロックチェーン150になる。同じトランザクションが両方のフォークに現れるので、これはネットワークのユーザまたはエージェントに影響しないはずであることに留意されたい。
ビットコインブロックチェーン(および大半の他のブロックチェーン)では、新しいブロック104の構築に成功するノードは、追加の定められた量のデジタル資産を分配する新しい特別な種類のトランザクション(あるエージェントまたはユーザから別の者にある額のデジタル資産を移転するエージェント間またはユーザ間トランザクションではなく)において、追加の受け入れられる額のデジタル資産を新しく割り当てるための能力を与えられる。この特別なタイプのトランザクションは通常、「コインベーストランザクション」と呼ばれるが、「開始トランザクション」または「生成トランザクション」とも呼ばれることがある。それは通常、新しいブロック151nの最初のトランザクションを形成する。プルーフオブワークは、この特別なトランザクションが後で引き換えられることを可能にするプロトコルルールに従うという、新しいブロックを構築するノードの意図を示すものである。ブロックチェーンプロトコルルールは、この特別なトランザクションを引き換えられるようになるまで、成熟期間、たとえば100ブロックを必要とし得る。しばしば、通常の(非生成)トランザクション152はまた、そのトランザクションが公開されたブロック151nを作成したブロックチェーンノード104にさらに報酬を与えるために、その出力の1つにおいて追加のトランザクションフィーを指定する。この料金は普通は「トランザクションフィー」と呼ばれ、以下で論じられる。
トランザクションの妥当性確認および公開に関与するリソースにより、典型的にはブロックチェーンノード104の少なくとも各々が、1つまたは複数の物理サーバユニットを備えるサーバという形態をとり、またはデータセンター全体という形態すらとる。しかしながら、原理的には、あらゆる所与のブロックチェーンノード104は、一緒にネットワーク接続されたユーザ端末またはユーザ端末のグループという形態をとり得る。
各ブロックチェーンノード104のメモリは、それぞれの役割を実行し、ブロックチェーンノードプロトコルに従ってトランザクション152を扱うように、ブロックチェーンノード104の処理装置上で実行するように構成される、ソフトウェアを記憶する。ブロックチェーンノード104に対する本明細書に起因するあらゆる活動が、それぞれのコンピュータ機器の処理装置で実行されるソフトウェアによって実施され得ることが理解されるだろう。ノードソフトウェアは、アプリケーション層における1つまたは複数のアプリケーションで、またはオペレーティングシステム層もしくはプロトコル層などのより低次の層で、またはこれらの任意の組合せで実装され得る。
消費するユーザの役割を果たす複数の関係者103の各々のコンピュータ機器102も、ネットワーク101に接続される。これらのユーザは、ブロックチェーンネットワーク106と対話し得るが、トランザクションの検証またはブロックの構築には参加しない。これらのユーザまたはエージェント103の一部は、トランザクションにおいて送信者または受信者として活動し得る。他のユーザは、必ずしも送信者または受信者として活動することなく、ブロックチェーン150と対話し得る。たとえば、一部の関係者は、ブロックチェーン150のコピーを記憶する(たとえば、ブロックチェーンノード104からブロックチェーンのコピーを取得した)ストレージエンティティとして活動し得る。
関係者103の一部またはすべてが、異なるネットワーク、たとえばブロックチェーンネットワーク106に重畳されるネットワークの一部として接続され得る。ブロックチェーンネットワークのユーザ(「クライアント」と呼ばれることが多い)は、ブロックチェーンネットワーク106を含むシステムの一部であると言われることがある。しかしながら、これらのユーザはブロックチェーンノード104ではなく、それは、ブロックチェーンノードに必要とされる役割を実行しないからである。代わりに、各関係者103は、ブロックチェーンネットワーク106と対話し、それにより、ブロックチェーンノード106に接続する(すなわち、それと通信する)ことによって、ブロックチェーン150を利用し得る。第1の関係者103aおよびそのそれぞれのコンピュータ機器102a、ならびに第2の関係者103bおよびそのそれぞれのコンピュータ機器102bという、2名の関係者103および彼らのそれぞれの機器102が例示を目的に示されている。より多くのそのような関係者103およびそれぞれのコンピュータ機器102が、システム100において存在して参加していてもよいが、便宜的にそれらは示されていないことが理解されるだろう。各関係者103は、個人または組織であり得る。純粋に例示として、第1の関係者103aはAliceと本明細書では呼ばれ、第2の関係者103bはBobと呼ばれるが、これは限定するものではなく、本明細書でのAliceまたはBobへのあらゆる言及は、それぞれ「第1の関係者」および「第2の関係者」で置き換えられ得ることが理解されるだろう。
各関係者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つまたは複数の他のネットワーク接続されたリソースを備え得る。
クライアントアプリケーション105は最初に、たとえばサーバからダウンロードされる、あるいは、リムーバブルSSD、フラッシュメモリキー、リムーバブルEEPROM、リムーバブル磁気ディスクドライブ、磁気フロッピーディスクもしくはテープ、CDもしくはDVD ROMなどの光学ディスク、またはリムーバブル光学ドライブなどの、リムーバブルストレージデバイス上で提供される、適切なコンピュータ可読記憶媒体上の任意の所与の関係者103のコンピュータ機器102に提供され得る。
クライアントアプリケーション105は、少なくとも「ウォレット」機能を備える。これには2つの主要な機能がある。これらのうちの1つは、それぞれの関係者103がトランザクション152を作成し、承認(たとえば署名)し、1つまたは複数のビットコインノード104に送信して、トランザクション152がブロックチェーンノード104のネットワーク全体に広められてブロックチェーン150に含まれるようにすることを可能にすることである。もう1つは、それぞれの関係者が現在所有するデジタル資産の額をそれぞれの関係者に報告することである。出力ベースのシステムでは、この第2の機能は、対象の関係者に属するブロックチェーン150全体に散在する様々な152トランザクションの出力において定義される額を照合することを備える。
注意:様々なクライアント機能は所与のクライアントアプリケーション105へと統合されるものとして説明されることがあるが、これは必ずしも限定するものではなく、代わりに、本明細書において説明されるあらゆるクライアント機能は、一連の2つ以上の別個の適用例、たとえばAPIを介してインターフェースすること、または一方が他方へのプラグインであることにおいて実装され得る。より一般的には、クライアント機能は、アプリケーション層、またはオペレーティングシステムなどのより低次の層、またはこれらの任意の組合せにおいて実装され得る。以下は、クライアントアプリケーション105に関して説明されるが、それは限定するものではないことが理解されるだろう。
各コンピュータ機器102上のクライアントアプリケーションまたはソフトウェア105のインスタンスは、ネットワーク106のブロックチェーンノード104のうちの少なくとも1つに動作可能に結合される。これは、クライアント105のウォレット機能がトランザクション152をネットワーク106に送信することを可能にする。クライアント105はまた、それぞれの関係者103が受信者であるあらゆるトランザクションについてブロックチェーン150にクエリするために、ブロックチェーンノード104に連絡することも可能である(または、実施形態では、ブロックチェーン150が、公的な存在であることにより一部トランザクションに信用をもたらす公的機関であるので、実際にブロックチェーン150における他の関係者のトランザクションを調査する)。各コンピュータ機器102のウォレット機能は、トランザクションプロトコルに従ってトランザクション152を編成して送信するように構成される。上で述べられたように、各ブロックチェーンノード104は、ブロックチェーンノードプロトコルに従ってトランザクション152を妥当性確認し、ブロックチェーンネットワーク106全体にトランザクション152を広めるためにそれらを転送するように構成される、ソフトウェアを実行する。トランザクションプロトコルおよびノードプロトコルは互いに対応し、所与のトランザクションプロトコルは所与のノードプロトコルを伴い、一緒に所与のトランザクションモデルを実装する。ブロックチェーン150の中のすべてのトランザクション152に対して、同じトランザクションプロトコルが使用される。同じノードプロトコルが、ネットワーク106の中のすべてのノード104によって使用される。
所与の関係者103、たとえばAliceが、新しいトランザクション152jをブロックチェーン150に含まれるように送信することを望むとき、彼女は関連するトランザクションプロトコルに従って(彼女のクライアントアプリケーション105のウォレット機能を使用して)新しいトランザクションを編成する。彼女は次いで、クライアントアプリケーション105から、彼女が接続されている1つまたは複数のブロックチェーンノード104に、トランザクション152を送信する。たとえば、これは、Aliceのコンピュータ102に最善に接続されるブロックチェーンノード104であり得る。任意の所与のブロックチェーンノード104が新しいトランザクション152jを受信するとき、ブロックチェーンノード104は、ブロックチェーンノードプロトコルおよびそのそれぞれの役割に従って、新しいトランザクション152jを扱う。これは、新しく受信されたトランザクション152jが「有効」であるための何らかの条件を満たすかどうかをまず確かめることを備え、その例がまもなくより詳しく論じられる。一部のトランザクションプロトコルでは、妥当性確認のための条件は、トランザクション152に含まれるスクリプトによってトランザクションごとに構成可能であり得る。代替として、この条件は単に、ノードプロトコルの内蔵機能であってもよく、またはスクリプトとノードプロトコルの組合せによって定義されてもよい。
新しく受信されるトランザクション152jが有効であるものとして見なされるように試験に合格する条件(すなわち、それが「妥当性確認される」条件)のもとで、トランザクション152jを受信する任意のブロックチェーンノード104が、新しい妥当性確認されたトランザクション152をそのブロックチェーンノード104に維持されているトランザクションの順序付けられたセット154に追加する。さらに、トランザクション152jを受信するあらゆるブロックチェーンノード104は、妥当性確認されたトランザクション152以降をネットワーク106の中の1つまたは複数の他のブロックチェーンノード104に広める。各ブロックチェーンノード104は同じプロトコルを適用するので、トランザクション152jが有効であると仮定すると、これは、それがまもなくネットワーク106全体に広められることを意味する。
所与のブロックチェーンノード104において維持される未処理のトランザクションの順序付けられたプール154の利用を認められると、そのブロックチェーンノード104は、新しいトランザクション152を含むそれぞれのプール154の最新のバージョンについてのプルーフオブワークパズルを競って解き始める(他のブロックチェーンノード104が、トランザクションの異なる順序付けられたセット154に基づいてパズルを解こうとしていることがあるが、最初にたどり着いた者が最新のブロック1511に含まれるトランザクションのセットを定義することを思い出されたい。最終的に、ブロックチェーンノード104は、Aliceのトランザクション152jを含む順序付けられたプール154の一部のためのパズルを解く)。プルーフオブワークが、新しいトランザクション152jを含むプール154に対して行われると、それはイミュータブルに、ブロックチェーン150の中のブロック151のうちの1つの一部になる。各トランザクション152は、より前のトランザクションへのポインタを備えるので、トランザクションの順序もイミュータブルに記録される。
異なるブロックチェーンノード104は、所与のトランザクションの異なるインスタンスをまず受信するので、あるインスタンスが新しいブロック151において公開される前は、どのインスタンスが「有効」であるかについて矛盾した見方を有することがあり、それが公開される時点では、公開されるインスタンスが唯一の有効なインスタンスであることにすべてのブロックチェーンノード104が合意している。ブロックチェーンノード104があるインスタンスを有効であるものとして受け入れ、第2のインスタンスがブロックチェーン150に記録されていることを発見する場合、そのブロックチェーンノード104は、これを受け入れ、最初に受け入れたインスタンス(すなわち、ブロック151において公開されていないインスタンス)を廃棄する(すなわち、無効であるものとして扱う)。
一部のブロックチェーンネットワークによって運用される代替のタイプのトランザクションプロトコルは、アカウントベースのトランザクションモデルの一部として、「アカウントベース」プロトコルと呼ばれることがある。アカウントベースの場合、各トランザクションは、過去のトランザクションのシーケンスの中の先行するトランザクションのUTXOを参照することによってではなく、絶対的なアカウント残高を参照することによって、移されるべき額を定義する。すべてのアカウントの現在の状態が、ブロックチェーンとは別に、そのネットワークのノードによって記憶され、定期的に更新される。そのようなシステムでは、トランザクションは、アカウントの実行中のトランザクションタリー(「ポジション」とも呼ばれる)を使用して順序付けられる。この値は、暗号署名の一部として送信者により署名され、トランザクション参照計算の一部としてハッシュされる。加えて、任意選択のデータフィールドはまた、署名されたトランザクションであってもよい。このデータフィールドは、たとえば以前のトランザクションIDがデータフィールドに含まれる場合、以前のトランザクションを指し示し得る。
UTXOベースのモデル
図2は、例示的なトランザクションプロトコルを示す。これは、UTXOベースのプロトコルの例である。トランザクション152(「Tx」と省略される)は、ブロックチェーン150の基本データ構造である(各ブロック151は1つまたは複数のトランザクション152を備える)。以下は、出力ベースまたは「UTXO」ベースのプロトコルに言及して説明される。しかしながら、これはすべての可能な実施形態への限定ではない。例示的なUTXOベースのプロトコルはビットコインに言及して説明されるが、それは他の例示的なブロックチェーンネットワーク上で等しく実装され得ることに留意されたい。
UTXOベースのモデルでは、各トランザクション(「Tx」)152は、1つまたは複数の入力202および1つまたは複数の出力203を備えるデータ構造を備える。各出力203は、未消費のトランザクション出力(UTXO)を備えてもよく、これは、別の新しいトランザクションの入力202のソースとして使用され得る(UTXOがまだ引き換えられていない場合)。UTXOは、デジタル資産の額を指定する値を含む。これは、分散型台帳上のある設定された数のトークンを表す。UTXOはまた、情報の中でもとりわけ、UTXOの由来であるトランザクションのトランザクションIDを含み得る。トランザクションデータ構造はヘッダ201も備えることがあり、これは入力フィールド202および出力フィールド203のサイズのインジケータを備えることがある。ヘッダ201はまた、トランザクションのIDを含むことがある。実施形態では、トランザクションIDは、トランザクションデータ(トランザクションID自体を除く)のハッシュであり、ノード104に出される生のトランザクション152のヘッダ201に記憶される。
Alice 103aが、対象のある額のデジタル資産をBob 103bに移すトランザクション152jを作成することを望んでいるとする。図2において、Aliceの新しいトランザクション152jは「Tx1」とラベリングされる。Tx1は、シーケンスの中の先行するトランザクション152iの出力203においてAliceにロックされるデジタル資産の額をとり、その少なくとも一部をBobに移す。先行するトランザクション152iは、図2では「Tx0」とラベリングされる。Tx0およびTx1は任意のラベルにすぎない。それらは、Tx0がブロックチェーン151の最初のトランザクションであることを必ずしも意味せず、Tx1がプール154の中のすぐ次のトランザクションであることも意味しない。Tx1は、Aliceにロックされている未消費の出力203をまだ有するあらゆる先行する(すなわち、祖先)トランザクションを指し示し得る。
先行するトランザクションTx0は、Aliceが新しいトランザクションTx1を作成するとき、または少なくとも彼女がそれをネットワーク106に送信するときにはすでに、ブロックチェーン150のブロック151において妥当性確認されそれに含まれていることがある。それは、その時点ですでにブロック151のうちの1つに含まれていることがあり、または、順序付けられたセット154においてまだ待機していることがあり、その場合、それは新しいブロック151にまもなく含められる。代替として、Tx0およびTx1は、一緒に作成されてネットワーク106に送信されてもよく、または、ノードプロトコルが「オーファン」トランザクションのバッファリングを許容する場合、Tx0がTx1の後に送信されることすらあってもよい。トランザクションのシーケンスの文脈で本明細書において使用される「先行する」および「後続の」という用語は、トランザクションにおいて指定されるトランザクションポインタによって定義されるようなシーケンスにおけるトランザクションの順序を指す(どのトランザクションがどの他のトランザクションを指し示すか、など)。それらは、「先行者」および「後継者」、または「祖先」および「子孫」、「親」および「子」などにより等しく置き換えられ得る。これは、それらが作成される順序、ネットワーク106に送信される順序、または任意の所与のブロックチェーンノード104に到達する順序を必ずしも示唆しない。それでも、先行するトランザクション(祖先トランザクションまたは「親」)を指し示す後続のトランザクション(子孫トランザクションまたは「子」)は、親トランザクションが妥当性確認されるまでは、かつ妥当性確認されない限り、妥当性確認されない。親より前にブロックチェーンノード104に到達する子は、オーファンであると見なされる。それは、ノードプロトコルおよび/またはノード挙動に応じて、廃棄され、または親を待機するためにある時間の間バッファリングされ得る。
先行するトランザクションTx0の1つまたは複数の出力203のうちの1つは、ここでUTXO0とラベリングされる特定のUTXOを備える。各UTXOは、UTXOによって表されるデジタル資産の額を指定する値と、後続のトランザクションが妥当性確認されるようにするために、したがってUTXOの引き換えが成功するために、後続のトランザクションの入力202におけるアンロッキングスクリプトによって満たされなければならない条件を定義するロッキンスクリプトとを備える。通常、ロッキングスクリプトは、額を特定の関係者(ロッキングスクリプトが含まれるトランザクションの受益者)にロックする。すなわち、ロッキングスクリプトはアンロッキング条件を定義し、その条件は通常、後続のトランザクションの入力におけるアンロッキングスクリプトが、先行するトランザクションがロックされる対象である関係者の暗号署名を備えるという条件を備える。
ロッキングスクリプト(scriptPubKeyとしても知られている)は、ノードプロトコルによって認識される分野特有の言語で書かれるコードである。そのような言語の具体的な例は、ブロックチェーンネットワークによって使用される「Script」(大文字のS)と呼ばれる。ロッキングスクリプトは、トランザクション出力203を消費するためにどの情報が必要とされるか、たとえば、Aliceの署名の要件を指定する。アンロッキングスクリプトは、トランザクションの出力に現れる。アンロッキングスクリプト(scriptSigとしても知られている)は、ロッキングスクリプト基準を満たすために必要とされる情報を提供する分野特有の言語で書かれるコードである。たとえば、それはBobの署名を含み得る。アンロッキングスクリプトはトランザクションの入力202に現れる。
よって、示される例では、Tx0の出力203におけるUTXO0は、UXTO0が引き換えられるようにするために(厳密には、UTXO0を引き換えようとする後続のトランザクションが有効になるために)Aliceの署名Sig PAを必要とするロッキングスクリプト[Checksig PA]を備える。[Checksig PA]は、Aliceの公開-秘密鍵のペアからの公開鍵PAの表現(すなわち、ハッシュ)を含む。Tx1の入力202は、Tx1を指し示す(たとえば、そのトランザクションIDであるTxID0によって指し示す、TxID0は実施形態ではトランザクション全体Tx0のハッシュである)ポインタを備える。Tx1の入力202は、Tx0のあらゆる他のあり得る出力の中からUTXO0を特定するために、Tx0内でUTXO0を特定するインデックスを備える。Tx1の入力202はさらに、Aliceが鍵のペアからの自身の秘密鍵をデータのあらかじめ定められた部分(暗号学では「メッセージ」と呼ばれることがある)に適用することによって作成される、Aliceの暗号署名を備えるアンロッキングスクリプト<Sig PA>を備える。Aliceにより有効な署名を提供するために署名される必要のあるデータ(または「メッセージ」)は、ロッキングスクリプトによって、またはノードプロトコルによって、またはこれらの組合せによって定義され得る。
新しいトランザクションTx1がブロックチェーンノード104に到達すると、ノードはノードプロトコルを適用する。これは、アンロッキングスクリプトがロッキングスクリプトにおいて定義される条件(この条件は1つまたは複数の基準を備え得る)を満たすかどうかを確かめるために、ロッキングスクリプトおよびアンロッキングスクリプトを一緒に実行することを備える。実施形態では、これは2つのスクリプトを連結することを伴う。
<Sig PA><PA>||[Checksig PA]
ここで、「||」は連結を表し、「<...>」はスタックにデータを置くことを意味し、「[...]」はロッキングスクリプト(この例では、スタックベース言語)に含まれる関数である。等価的に、スクリプトを連結するのではなく、スクリプトは共通のスタックを用いて次々に実行されてもよい。いずれにしても、一緒に実行されると、スクリプトは、Tx0の出力の中のロッキングスクリプトに含まれるような、Aliceの公開鍵PAを使用して、Tx1の入力の中のアンロッキングスクリプトがデータの予想される部分に署名するAliceの署名を含むことを認証する。データ自体(「メッセージ」)の予想される部分も、この認証を実行するために含まれる必要がある。実施形態では、署名されたデータはTx1の全体を備える(よって、平文でデータの署名された部分を指定する別個の要素が含まれる必要がなく、それは、もともと存在していたからである)。
公開-秘密暗号による認証の詳細は、当業者には馴染みがある。基本的に、Aliceが自身の秘密鍵を使用してメッセージに署名した場合、平文のAliceの公開鍵およびメッセージを与えられると、ノード104などの別のエンティティは、メッセージがAliceによって署名されたに違いないことを認証することが可能である。署名することは通常、メッセージをハッシュし、ハッシュに署名し、これを署名としてメッセージへとタグ付けすることで、公開鍵のあらゆる保有者が署名を認証することを可能にすることを備える。したがって、本明細書における、特定のデータまたはトランザクションの一部に署名することなどへのあらゆる言及は、実施形態では、そのデータまたはトランザクション一部のハッシュに署名することを意味することに留意されたい。
Tx1におけるアンロッキングスクリプトがTx0のロッキングスクリプトにおいて指定される1つまたは複数の条件を満たす場合(よって示される例では、Aliceの署名がTx1において提供されて認証される場合)、ブロックチェーンノード104はTx1を有効であると見なす。これは、ブロックチェーンノード104がTx1を未処理のトランザクションの順序付けられたプール154に追加することを意味する。ブロックチェーンノード104はまた、ネットワーク106の中の1つまたは複数の他のブロックチェーンノード104にトランザクションTx1を転送するので、それは、ネットワーク106全体に広められる。Tx1がブロックチェーン150において妥当性確認され含められると、これは消費されるものとしてTx0からのUTXO0を定義する。Tx1は、未消費のトランザクション出力203を消費する場合にのみ、有効であり得ることに留意されたい。別のトランザクション152によってすでに消費されている出力を消費しようとする場合、Tx1は、すべての他の条件が満たされている場合でも無効になる。したがって、ブロックチェーンノード104は、先行するトランザクションTx0の中の参照されるUTXOがすでに消費されているかどうか(すなわち、すでに有効な入力を別の有効なトランザクションへと形成したかどうか)を確かめる必要もある。これは、トランザクション152に定められた順序を課すことがブロックチェーン150にとって重要である1つの理由である。実際には、所与のブロックチェーンノード104は、トランザクション152がその中で消費されたどのUTXO203をマークする別個のデータベースを維持してもよいが、究極的には、UTXOが消費されたかどうかを定義するものは、UTXOが有効な入力をブロックチェーン150の中の別の有効なトランザクションへとすでに形成したかどうかである。
所与のトランザクション152のすべての出力203において指定される総額が、すべてのその入力202によって指し示される総額より大きい場合、これもまた、大半のトランザクションモデルにおいて、無効であることの根拠になる。したがって、そのようなトランザクションは、広められず、ブロック151にも含められない。
UTXOベースのトランザクションモデルにおいて、所与のUTXOは全体として消費される必要があることに留意されたい。それは、消費されるものとしてUTXOにおいて定義される額の一部を、別の一部が消費されながら「置き去りにする」ことができない。しかしながら、UTXOからの額は、次のトランザクションの複数の出力の間で分割され得る。たとえば、Tx0の中のUTXO0において定義される額は、Tx1の中の複数のUTXO間で分割され得る。したがって、AliceがUTXO0において定義される額のすべてをBobに与えることを望まない場合、彼女はリマインダーを使用してTx1の第2の出力の残金を自分に与え、または別の関係者に支払うことができる。
実際には、Aliceは普通は、Aliceのトランザクション104をブロック151に含めることに成功するビットコインノード104に対する料金も含める必要がある。Aliceがそのような料金を含めない場合、Tx0はブロックチェーンノード104によって拒絶されてもよく、したがって、技術的には有効であっても、広められず、ブロックチェーン150に含められなくてもよい(ノードプロトコルは、ブロックチェーンノード104がトランザクション152を受け入れることを望まない場合、それを強いることはない)。一部のプロトコルでは、トランザクションフィーは、固有の別々の出力203を必要としない(すなわち、別個のUTXOを必要としない)。代わりに、入力202によって指し示される総額と所与のトランザクション152の出力203において指定される総額とのあらゆる差が、トランザクションを公開するブロックチェーンノード104に自動的に与えられる。たとえば、UTXO0へのポインタがTx1への唯一の入力であり、Tx1が唯一の出力UTXO1を有するとする。UTXO0において指定されるデジタル資産の額がUTXO1において指定される額より大きい場合、その差が、UTXO1を含むブロックを作成するために、プルーフオブワークの競争に勝利するノード104によって割り当てられ得る。しかしながら、代替または追加として、トランザクションフィーが、トランザクション152のUTXO203のうちの自身固有のUTXOにおいて明示的に指定され得ることは、必ずしも排除されない。
AliceおよびBobのデジタル資産は、ブロックチェーン150のどこかにある任意のトランザクション152において彼らにロックされるUTXOからなる。したがって、通常は、所与の関係者103の資産は、ブロックチェーン150全体の、様々なトランザクション152のUTXO全体に分散している。所与の関係者103の総残高を定義する1つの数字が、ブロックチェーン150のどこかに保管されているということはない。それぞれの関係者にロックされており、別のその先のトランザクションにおいてまだ消費されていないすべての様々なUTXOの値を一緒に照合することが、クライアントアプリケーション150のウォレット機能の役割である。そのウォレット機能は、ビットコインノード104のいずれかに記憶されているようなブロックチェーン150のコピーをクエリすることによって、これを行うことができる。
スクリプトコードはしばしば、概略的(すなわち、厳密な言語を使用せずに)に表現されることに留意されたい。たとえば、特定の関数を表すためにオペレーションコード(オペコード)を使用することがある。「OP_...」は、Script言語の特定のオペコードを指す。例として、OP_RETURNは、ロッキングスクリプトの最初おいてOP_FALSEが前にあるとトランザクション内のデータを記憶できるトランザクションの消費不可能な出力を生み出し、それによりブロックチェーン150にデータをイミュータブルに記録するような、Script言語のオペコードである。たとえば、データは、ブロックチェーンに記憶することが望まれる文書を備え得る。
通常、トランザクションの入力は、公開鍵PAに対応するデジタル署名を含む。実施形態では、これは、楕円曲線secp256k1を使用するECDSAに基づく。デジタル署名は特定のデータに署名する。いくつかの実施形態では、所与のトランザクションに対して、署名はトランザクション入力の一部、およびトランザクション出力の一部またはすべてに署名する。署名する出力の具体的な部分は、SIGHASHフラグに依存する。SIGHASHフラグは普通は、どの出力が署名されるかを選択するために署名の最後に含まれる(したがって署名の時点で固定される)4バイトのコードである。
ロッキングスクリプトは時々「scriptPubKey」と呼ばれ、それぞれのトランザクションがロックされる対象である関係者の公開鍵をロッキングスクリプトが通常は備えるという事実を指している。アンロッキングスクリプトは時々「scriptSig」と呼ばれ、アンロッキングスクリプトが対応する署名を通常は供給するという事実を指している。しかしながら、より一般的には、UTXOが引き換えられるようにするための条件が署名を認証することを備えることは、ブロックチェーン150のすべての適用例において必須ではない。より一般的には、スクリプト言語は、任意の1つまたは複数の条件を定義するために使用され得る。したがって、より一般的な用語「ロッキングスクリプト」および「アンロッキングスクリプト」が好まれることがある。
図1に示されるように、AliceおよびBobのコンピュータ機器102a、120bの各々のクライアントアプリケーションは、それぞれ、追加の通信機能を備え得る。この追加の機能は、Alice 103aがBob 103bとの別個のサイドチャネル107を確立する(いずれかの関係者または第三者の教唆により)ことを可能にする。サイドチャネル107は、ブロックチェーンネットワークとは別にデータの交換を可能にする。そのような通信は、「オフチェーン」通信と呼ばれることがある。たとえば、これは、AliceおよびBobの一方がトランザクション152をネットワーク106にブロードキャストすることを選ぶまで、トランザクション152がブロックチェーンネットワーク106に(まだ)登録されることなく、またはチェーン150に向かって進むことなく、AliceとBobとの間でトランザクション152を交換するために使用され得る。このようにトランザクションを共有することは、「トランザクションテンプレート」の共有と呼ばれることがある。トランザクションテンプレートは、完全なトランザクションを形成するために必要とされる1つまたは複数の入力および/または出力を欠いていることがある。代替または追加として、サイドチャネル107は、鍵、交渉される額または条項、データコンテンツなどの、任意の他のトランザクション関連データを交換するために使用され得る。
サイドチャネル107は、ブロックチェーンネットワーク106と同じパケット交換ネットワーク101を介して確立され得る。代替または追加として、サイドチャネル301は、モバイルセルラーネットワークなどの異なるネットワーク、またはローカルワイヤレスネットワークなどのローカルエリアネットワーク、または、Aliceのデバイス102aとBobのデバイス102bとの間の直接の有線もしくはワイヤレスリンクすらも介して確立され得る。一般に、本明細書の他の箇所において言及されるサイドチャネル107は、「オフチェーン」で、すなわちブロックチェーンネットワーク106とは別にデータを交換するための、1つまたは複数のネットワーキング技術または通信媒体を介した、任意の1つまたは複数のリンクを備え得る。1つより多くのリンクが使用される場合、オフチェーンリンクの束または集合体は全体として、サイドチャネル107と呼ばれ得る。したがって、AliceおよびBobがいくつかの情報またはデータなどを、サイドチャネル107を介して交換すると言われる場合、これは必ずしも、すべてのこれらのデータが厳密に同じリンクで送信されなければならないこと、または同じタイプのネットワークで送信されなければならないことすらも示唆しない。
ノードソフトウェア
図4は、UTXOベースまたは出力ベースのモデルの例では、ネットワーク106の各ブロックチェーンノード104で実行されるノードソフトウェア450の例を示す。別のエンティティは、ネットワーク106のノード104として分類されることなく、すなわち、ノード104に必要とされる活動を実行することなく、ノードソフトウェア450を実行し得ることに留意されたい。ノードソフトウェア450は、限定はされないが、プロトコルエンジン451、スクリプトエンジン452、スタック453、アプリケーションレベル決定エンジン454、および1つまたは複数のブロックチェーン関連機能モジュール455のセットを含み得る。各ノード104は、コンセンサスモジュール455C(たとえば、プルーフオブワーク)、伝播モジュール455P、および記憶モジュール455S(たとえば、データベース)の3つすべてを含むがそれらに限定されない、ノードソフトウェアを実行し得る。プロトコルエンジン401は通常、トランザクション152の様々なフィールドを認識し、ノードプロトコルに従ってそれらを処理するように構成される。別の先行するトランザクション152i(Txm-1)の出力(たとえば、UXTO)を指し示す入力を有するトランザクション152j(Txj)が受信されるとき、プロトコルエンジン451は、Txjにおいてアンロッキングスクリプトを特定し、それをスクリプトエンジン452に渡す。プロトコルエンジン451はまた、Txjの入力の中のポインタに基づいて、Txiを特定して取り出す。Txiはブロックチェーン150上で公開されてもよく、この場合、プロトコルエンジンは、ノード104に記憶されているブロックチェーン150のブロック151のコピーからTxiを取り出し得る。代替として、Txiはまだブロックチェーン150上で公開されていないことがある。その場合、プロトコルエンジン451は、ノード104によって維持される公開されていないトランザクションの順序付けられたセット154からTxiを取り出し得る。いずれにしても、スクリプトエンジン451は、Txiの参照された出力においてロッキングスクリプトを特定し、これをスクリプトエンジン452に渡す。
したがって、スクリプトエンジン452は、TxiのロッキングスクリプトおよびTxiの対応する入力からのアンロッキングスクリプトを有する。たとえば、Tx0およびTx1とラベリングされたトランザクションが図2に示されているが、同じことがトランザクションの任意のペアに当てはまり得る。スクリプトエンジン452は、前に論じられたように2つのスクリプトを一緒に実行し、これは、使用されているスタックベースのスクリプト言語(たとえば、Script)に従って、データをスタック453に置き、スタック453からデータを取り出すことを含む。
スクリプトを一緒に実行することによって、スクリプトエンジン452は、ロッキングスクリプトにおいて定義される1つまたは複数の基準をアンロッキングスクリプトが満たすかどうか、すなわち、ロッキングスクリプトが含まれる出力をアンロッキングスクリプトが「アンロック」するかどうかを決定する。スクリプトエンジン452は、この決定の結果をプロトコルエンジン451に返す。アンロッキングスクリプトが対応するロッキングスクリプトにおいて指定される1つまたは複数の基準を満たすとスクリプトエンジン452が決定する場合、それは「真」という結果を返す。それ以外の場合、それは「偽」という結果を返す。
出力ベースのモデルにおいて、スクリプトエンジン452からの「真」という結果は、トランザクションが有効であるための条件の1つである。通常、やはり満たされなければならないプロトコルエンジン451により評価される1つまたは複数のさらなるプロトコルレベル条件もある。それは、Txjの出力において指定されるデジタル資産の総額が入力によって指し示される総額を超えないこと、およびTxiの指し示される出力が別の有効なトランザクションによってまだ消費されていないことなどである。プロトコルエンジン451は、スクリプトエンジン452からの結果を1つまたは複数のプロトコルレベル条件と一緒に評価して、それらがすべて真である場合にのみ、トランザクションTxjを妥当性確認する。プロトコルエンジン451は、トランザクションが有効であるかどうかの標示を、アプリケーションレベル決定エンジン454に出力する。Txjが実際に妥当性確認されるという条件のもとで、決定エンジン454は、Txjに関してそれぞれのブロックチェーン関連機能を実行するようにコンセンサスモジュール455Cと伝播モジュール455Pの両方を制御することを選び得る。これは、コンセンサスモジュール455Cが、ブロック151に組み込むためにTxjをトランザクションのノードのそれぞれの順序付けられたセット154に追加することと、伝播モジュール455Pが、Txjをネットワーク106の中の別のブロックチェーンノード104に転送することとを備える。任意選択で、実施形態では、アプリケーションレベル決定エンジン454は、これらの機能のいずれかまたは両方を起動する前に、1つまたは複数の追加の条件を適用し得る。たとえば、決定エンジンは、トランザクションが有効でありかつ十分なトランザクションフィーを残すという条件のもとでのみ、トランザクションを公開することを選び得る。
本明細書における「真」および「偽」という用語は、単一の二値の桁(ビット)のみの形式で表される結果を返すことに必ずしも限定しないが、それは当然1つのあり得る実装形態であることにも留意されたい。より一般的には、「真」は成功したまたは肯定的な結果を示す任意の状態を指すことができ、「偽」は不成功のまたは否定的な結果を示す任意の状態を指すことができる。たとえば、アカウントベースのモデルでは、「真」という結果は、署名の暗黙的なプロトコルレベルの妥当性確認と、スマートコントラクトの追加の肯定的な出力との組合せによって示され得る(両方の個々の結果が真であれば、全体の結果が真を示すものと見なされる)。
トランザクションテンプレート
上で言及されたように、ブロックチェーンネットワーク106の各ブロックチェーンノード104は、トランザクションを妥当性確認するときに同じコンセンサスルールを適用する。コンセンサスルールに違反するトランザクション152は、拒絶され、ブロックチェーン上で公開されることも、他のノード104に広められることもない。ノード104は、自分自身の構成可能なポリシールールを適用することを選ぶこともある。ポリシールールは、ブロックにおける公開および他のノード104への伝播のために個々のノード104が受け入れることが可能なトランザクション151の数をさらに制約するために個々のノード104が設定することができる、追加のルールである。公開のためにトランザクション151を受け入れることは、いくつかの異なる「トランザクションキュー」のうちの1つにトランザクションを置くことを備えてもよく、各キューは異なる速さで処理される。言い換えると、一部のトランザクションタイプは他のトランザクションタイプより速く処理されることがあり、これは、一部のトランザクションタイプが他のトランザクションタイプより前に新しいブロック152に含められ得ることを意味する。具体的な例として、pay-to-public-key-hash(P2PKH)スクリプトフォーマットを有するトランザクションは、他の、恐らくより複雑なスクリプトより前に処理されるように、「速いキュー」に置かれ得る。いくつかの例では、ノード104は、一部のトランザクションタイプを禁止することと、異なるトランザクションキューに他の特定のトランザクションタイプを置くことの組合せを実行し得る。
ノード104は、自分自身のポリシールールに違反する公開されていない(すなわち、未処理の)トランザクション152jを広めないことを選ぶことができる。同様に、ノード104は、異なるノード104によって生み出された新しいブロック151nを妥当性確認するとき、あるローカルポリシールールを適用することを選び得る。たとえば、ノード104は、大きすぎる、すなわち最大のブロックサイズを超えるブロック151nを拒絶する、ローカルポリシーを運用し得る。これは、ブロック151n自体がネットワーク106によって拒絶されることを意味せず、むしろ、特定のノード104がブロック151nの妥当性確認に参加しないことを意味する。
通常、新しいブロック151を受け入れるためのローカルポリシールールは、新しいブロック151を生み出すためのローカルポリシーより弱い。したがって、ノード104はそれでも、ブロックを生み出すための自分自身のポリシールールと適合しないトランザクションを含むブロック151を受け入れる(すなわち、妥当性確認する)ことがある。これらのポリシールールは、図3のアプリケーションレベル決定エンジンによって適用されるレベルルールとして実装され得る。
一部のブロックチェーンネットワーク106、たとえばビットコインネットワークは、広範な複雑なトランザクションロッキング条件、すなわち、トランザクションの出力をロックするロッキングスクリプトをサポートする。一般に、ノード104は、ノードが構成可能な制限を設定することができ、これは、ノードが、新しく構築されるブロックにどのトランザクションを含めるかをポリシーの問題として決定できるが、他のノード104によって分配されるブロックにトランザクションが含まれる場合にはトランザクションを処理しなければならないことを意味する。
構成可能なルールセットは、一部のノード104はブロックにおいて公開するために特定のトランザクションを受け入れるが、他のノードは新しく構築されるブロックにそのトランザクションを含めないことを選び得ることを意味する。以下の表は、任意の所与のノード104によって構成可能である例示的な制限を示す。あらゆる与えられる制限(たとえば、トランザクションサイズ)の現在の値は、時間とともに変化し得ることに留意されたい。
Figure 2023529467000002
図4は、ブロックチェーン150にトランザクションテンプレートを登録するための例示的なシステムを示す。システムは、第1のブロックチェーンノード501およびユーザ502を備える。「ユーザ」への言及は、ユーザ502によって操作されるコンピュータ機器を意味するための省略として使用され得ることが理解されるだろう。ユーザは、図1および図2を参照すると、Alice103aまたはBob103bに関連する行動の1つ、いくつか、またはすべてを実行し得る。いくつかの実施形態では、システムはさらに、1つまたは複数の追加のブロックチェーンノード503を備える。
第1のブロックチェーンノード501は、第1のテンプレートトランザクションを生成する。第1のテンプレートトランザクションは、第1のブロックチェーンが受け入れる用意のあるテンプレート出力スクリプトを含む第1の出力を含む。第1のテンプレートトランザクションの例が、図5に示されている。テンプレート出力スクリプトは、「<Nonstandard output script>」によって表記される。第1のテンプレートトランザクションは、以前のトランザクション(ブロックにおいて公開するためにブロックチェーンネットワーク106に以前に出されたことがあるという意味で以前の)の出力を消費する入力を含む。入力は、第1のブロックチェーン501に関連する公開鍵を含み得る。入力はまた、第1のテンプレートトランザクションの一部またはすべてに署名する署名を含み得る。
いくつかの例では、第1のテンプレートトランザクションは、1つもしくは複数のさらなる入力および/または1つもしくは複数のさらなる出力を備え得る。たとえば、第1のテンプレートトランザクションは、第1のブロックチェーンノード501の公開鍵にロックされる第2の出力を備え得る。たとえば、図5に示されるように、第2の出力は、第1のブロックチェーンノード501の公開鍵に基づいてアドレスにロックされるP2PKH出力であり得る。いくつかの例では、アドレスは公開鍵のハッシュであり得る。入力に含まれる公開鍵および第2の出力がロックされる公開鍵は、同じ公開鍵であっても、または異なる公開鍵(それらは互いに数学的に連結されてもまたはされなくてもよい)であってもよい。
第1のテンプレートトランザクションは、テンプレート出力スクリプトに関するデータを含む第3の出力も備え得る。第3の出力は、消費不可能な出力、たとえば「OP_RETURN output」であり得る。OP_RETURNは、OP_FLASE OP_RETURNまたはOP_0 OP_RETURNの省略として本明細書では使用され得ることに留意されたい。代替として、データは消費可能な出力に含まれ得る。第3の出力は、図7および図8に示されるデータフィールドの1つまたは複数を備え得る。たとえば、第3の出力は、第1のブロックチェーンノード106に関連するマスター公開鍵を備え得る。「Miner ID」公開鍵と呼ばれることがあるマスター公開鍵は、第1のテンプレートトランザクションの入力および/または第2の出力に含まれるそれぞれの公開鍵と数学的に連結され得る。第3の出力は、マスター公開鍵を導出するためのチェーンコードを含んでもよく、これは、マスター公開鍵を上で言及された公開鍵と連結するために使用されてもよい。第3の出力は、第3の出力の一部またはすべてに署名する署名、たとえばマスター公開鍵に対応する秘密鍵を使用して生成される署名を備え得る。1つまたは複数のさらなるデータフィールドは、第3の出力に含まれてもよく、たとえば、テンプレート出力スクリプトのデータ長(バイトの数)、テンプレート入力スクリプトのデータの長さ(バイトの数)、および/またはテンプレート出力スクリプトに含まれるオペコードの総数であり得る。
第1のブロックチェーンノード501はまた、第2のテンプレートトランザクションを生成し得る。第2のテンプレートトランザクションは、第1のブロックチェーンノードが新しいブロックにおいて公開するために受け入れる用意のあるテンプレート入力スクリプトを含む第1の入力を含む。テンプレート入力はまた、第1のテンプレートトランザクションに含まれるテンプレート出力スクリプトをアンロックするように構成される。すなわち、テンプレート出力スクリプトがテンプレート入力スクリプトとともに実行された場合、この実行は有効に完了する。第2のテンプレートトランザクションの例が、図6に示されている。テンプレート出力スクリプトは、「<Nonstandard input data>」によって表記される。
いくつかの例では、第2のテンプレートトランザクションの第1の入力は、第1のテンプレートトランザクションの第1の出力を参照する。すなわち、第2のテンプレートトランザクションの第1の入力は、第1のテンプレートトランザクションの第1の出力をアンロックするように構成される。第2のテンプレートトランザクションは、1つまたは複数のさらなる入力および/または1つまたは複数のさらなる出力を含み得る。たとえば、第2のテンプレートトランザクションは、以前のトランザクションの出力を消費する第2の入力を含む。第2の入力は、第1のブロックチェーンノード501に関連する公開鍵を含み得る。第2の入力はまた、第1のテンプレートトランザクションの一部またはすべてに署名する署名を含み得る。たとえば、第2のテンプレートトランザクションの第2の入力は、第1のテンプレートトランザクションの第2の出力、たとえば第1のテンプレートトランザクションのP2PKH出力を参照し、アンロックするように構成され得る。第2のテンプレートトランザクションは、第1のテンプレートトランザクションの第3の出力に含まれるデータフィールドの一部またはすべてを含む第1の出力を備え得る。すなわち、第2のテンプレートトランザクションの第1の出力は、消費不可能な出力であり得る。第2のテンプレートトランザクションは、追加または代替として、第1のテンプレートトランザクションのテンプレート出力スクリプトを備える第2の出力を含み得る。
第1のブロックチェーンノード501は、第1および第2のトランザクションがブロックチェーン150に出されるようにする。第1のブロックチェーンノード501は、同じブロック151、または異なるブロックにおいて、第1および第2のテンプレートトランザクションを公開し得る。代替として、第1のブロックチェーンノード501は、第1および第2のテンプレートトランザクションを異なるノード104に転送してもよく、異なるノード104が次いで、新しい1つまたは複数のブロック151においてトランザクションを公開する。
ブロックチェーン150で公開されると、ユーザ502は、テンプレートトランザクションを使用して自分自身のトランザクションを生成し得る。ユーザ502によって生成されるトランザクションは、「トランザクション候補」と呼ばれるが、これは単なる標識であることが理解されるだろう。
ユーザ502は、少なくとも第1のテンプレートトランザクションを取得する。ユーザ502はまた、第2のテンプレートトランザクションを取得し得る。第1のテンプレートトランザクションは、ユーザ502が、テンプレート出力スクリプトに対応する出力スクリプトを含む第1のトランザクション候補を第1のブロックチェーンノード501に出すことを可能にする。第2のテンプレートトランザクションは、ユーザ502または別のユーザが、第1のトランザクション候補をアンロックするように構成される入力スクリプトを含む第2のトランザクション候補を生成することを可能にする。
ユーザ502がテンプレートトランザクションを取得し得る様々な方法がある。第1の選択肢として、ユーザ502は、テンプレートトランザクションについてブロックチェーンをスキャンしてもよく、たとえば、テンプレートトランザクションは、第1のブロックチェーンノード501の識別子、および/または、テンプレートスクリプトを含むものとしてテンプレートトランザクションを識別するフラグを含み得る。別の選択肢として、ユーザ502は、テンプレートトランザクションのそれぞれのトランザクション識別子を取得し、それらのトランザクション識別子を使用してブロックチェーン150からテンプレートトランザクションを取得し得る。たとえば、ユーザ502は、テンプレートトランザクションに対する要求を第1のブロックチェーンノード501に送信してもよく、第1のブロックチェーンノード501は、トランザクション識別子を返してもよい。いくつかの例では、第1のブロックチェーンノード501は、完全なトランザクションテンプレート、または少なくともテンプレートスクリプトを返し得る。別の選択肢として、ユーザ502は、第1のブロックチェーンノード501からトランザクション識別子を取得し、トランザクションテンプレートに対する要求を異なるノード503に送信し得る。他のノード503が次いで、トランザクションテンプレートをユーザ502に返し得る。
テンプレートトランザクションが実際にブロックチェーン150で公開されたことを検証するために、ユーザ502は、第1および/または第2のテンプレートの存在のマークルプルーフを要求し得る。ユーザ502は、要求を第1のブロックチェーンノード501または別のノード503に出し得る。
取得されると、ユーザ502は、第1および/または第2のテンプレートトランザクションが、第1のブロックチェーンノード501に関連するそれぞれの公開鍵を備えることを検証し得る。たとえば、ユーザ502は、第1および/または第2のテンプレートトランザクションが第1のブロックチェーンノード501のマスター公開鍵(Miner ID)を備えることを検証し得る。いくつかの例では、ユーザ502は、第1および/または第2のテンプレートトランザクションが、マスター公開鍵に連結されたそれぞれの公開鍵を備えることを検証し得る。
ユーザ502は、トランザクション候補を生成し、それが第1のブロックチェーンノード501に送信されるようにする。ユーザ502は、トランザクション候補を第1のブロックチェーンノード501に直接送信してもよく、または、ユーザ502は、第1のブロックチェーンノード501への転送のためにトランザクション候補を別の関係者に送信してもよい。トランザクション候補は、テンプレート出力スクリプトに対応する出力スクリプト、および/またはテンプレート入力スクリプトに対応する入力スクリプトを備える。
第1のブロックチェーンノード501は、出力スクリプト候補を備える第1のトランザクション候補を少なくとも受信する。第1のブロックチェーンノード501は、ユーザ502から直接、または1つまたは複数の他のノード104を介して、第1のトランザクション候補を受信し得る。第1のブロックチェーンノード501は、出力スクリプト候補がテンプレート出力スクリプトに対応するかどうかを決定する。出力スクリプト候補がテンプレート出力スクリプトに対応する場合、第1のブロックチェーンノードは、第1のトランザクション候補を受け入れる(すべての他の条件、たとえばネットワーク106のコンセンサスルールが満たされたと仮定して)。
第1のブロックチェーンノード501が第1のトランザクション候補を受け入れるには、第1のブロックチェーンノードは、出力スクリプト候補がテンプレート出力スクリプトと同じ数のオペレーションコード(オペコード)を備えること、出力スクリプト候補がテンプレート出力スクリプトと同じ順序のオペレーションコード(オペコード)を備えること、出力スクリプト候補がテンプレート出力スクリプトと同じ数のデータ項目(たとえば、非オペコード)を備えること、出力スクリプト候補がテンプレート出力スクリプトと同じ順序のデータ項目を備えること、および/または出力スクリプト候補がテンプレート出力スクリプトと同じフォーマットのデータ項目を備えることという条件のうちの1つ、いくつか、またはすべてが満たされたかどうかを確認し得る。
第1のブロックチェーンノード501が第1のトランザクション候補を受け入れる場合、第1のブロックチェーンノード501は、ブロックチェーン150の新しく構築されたブロック151に第1のトランザクション候補を含め、および/または、ネットワーク106の他のノード104に第1のトランザクション候補を広めることを試みる。
いくつかの実施形態では、第1のブロックチェーンノード501は、入力スクリプト候補を備える第2のトランザクション候補、たとえば、第1のトランザクション候補の出力候補を消費するトランザクション候補を受信し得る。第1のブロックチェーンノード501は、入力スクリプト候補に対して同じ確認を実行し、すなわち、入力スクリプト候補に含まれるオペコードならびに/またはデータ項目の数、順序、および/もしくはタイプがそれぞれ、テンプレート入力スクリプトに含まれるオペコードならびに/またはデータ項目の数、順序、および/もしくはタイプに対応するかどうかを決定し得る。
第1および第2のテンプレートトランザクションを生成することに加えて、第1のブロックチェーンノード501は、テンプレートトランザクションの1つまたは複数のさらなるペアを生成し得る。テンプレートトランザクションの各ペアは、異なるテンプレート出力スクリプトおよびテンプレート入力スクリプトを含み得る。第1のブロックチェーンノード501は、テンプレートトランザクションの各ペアがブロックチェーン150で公開されるようにし得る。
第1のブロックチェーンノード501は、統合トランザクションを生成し得る。例示的な統合トランザクションが図10に示されている。統合トランザクションは、第1および第2のテンプレートトランザクションのそれぞれのトランザクション識別子を含む第1の出力(たとえば、消費不可能な出力)を備える。いくつかの例では、第1の出力は、テンプレートトランザクションの各々のさらなるペアのそれぞれの識別子も含む。ユーザ502からの要求に応答して、第1のブロックチェーンノード501は、統合トランザクションのトランザクション識別子を返してもよく、こうして、所望のテンプレートトランザクションを取得するための別の方法をユーザ502に提供する。図11は、統合トランザクションの第1の出力に含まれ得るデータフィールドの例示的なセットを示す。
具体例:
準備:ノード104がMiner ID ECDSA鍵ペアskID、PKIDを保持している(ここでPKID=skID.G)。
ステップ1:ノード104が、非標準的な出力スクリプトを含むカスタムトランザクション(Tx1)と、Tx1において非標準的な出力を消費する対応する非標準的な入力スクリプトを含むトランザクション(Tx2)とを作成する。
ステップ1b:ノード104が、Tx1とTx2の両方を含む新しいブロックを構築する。このブロックは、ネットワーク106の残りにブロードキャストされる。
ステップ2:ユーザが、ノード104によって作成されるカスタムの非標準的なトランザクションに対する要求を行う。
ステップ3:ノード104が、Tx1およびTx2のためのTXIDを返信する。
ステップ4:ユーザが、異なるノード104からの完全なトランザクションデータを要求する(代替例を参照)。
ステップ4(代替例):ユーザが、Tx1およびTx2ならびにブロックヘッダ情報について、含まれていることのマークルプルーフを要求することができる。
ステップ5:他のノードがTx1およびTx2を返信し、これらは有効なブロックにおいて公開されているはずである。
ステップ6:ユーザが、Miner ID認証署名を妥当性確認し、カスタムスクリプトデータを抽出する。
ステップ7:ユーザが、たとえば子秘密鍵導出関数を使用して、PK1、PK2がPKIDに連結されることを検証する。
この方法は、ユーザ(すなわち、ユーザのクライアントアプリケーション)が、ブロックチェーンから以下の4つのデータ項目を抽出することを可能にする。
・Miner ID public key:PKID
・Tx type:<custom Tx name>
・ScriptSig(input):<Nonstandard input data>
・ScriptPubKey(output):<Nonstandard output script>
ユーザ502がこの情報を取得すると、ユーザ502は、両方のトランザクションを作成したノード104が、指定された非標準的なスクリプトを含むトランザクションを公開して広めることに、確信を持つことができる。
この方法は、Tx1およびTx2という2つの連鎖したトランザクションを使用し得る(図5および図6参照)。それらは、P2PKH、OP_RETURNデータ、および非標準的なスクリプト出力を含む。Tx1とTX2の両方が、ノード104によって作成された非標準的な出力が受け入れ可能であることをネットワークコンセンサスルールに従って保証することが、必要とされ得る。いくつかの例では、TX1の消費可能な出力の両方が、TX2によって消費されなければならない。これは、スクリプティングエラーから生じ得る資金の喪失を防ぐことによって、ユーザのための安全対策としての機能を果たす。両方のトランザクションが、トランザクション入力の順応性が攻撃者により利用されるのを防ぐために、SIGHASH_ALL署名ハッシュタイプを伴う署名を含む通常のP2PKH入力を含み得る。
さらに、これらのトランザクションはノード104によって作成されるので、トランザクションがトランザクションフィーを含む必要はない。実際に、ノード104は、トランザクションがネットワーク106上で他のノード104によって見られた場合であっても、トランザクションが異なるノード104によって構築されるブロックにおいて公開されることがないように、トランザクションフィーを含めないことを意図的に選ぶことがある。
テンプレートトランザクションの中の証明可能に消費不可能な出力は、非標準的な入力データおよび対応する非標準的なスクリプト出力についての情報、ならびに有用なCPUコスト尺度を含む、メタデータを含む。図8の表は、ヌルデータOP_RETURNフィールドを列挙する。
Miner ID and signature:ヌルデータペイロードは、圧縮されたMiner ID公開鍵で始まり、Miner ID公開鍵を使用して生成されるECDSA署名が後に続き、署名の後にスクリプトマッピングデータを備えるメッセージ(すなわち、OP_RETURNペイロードの内容からMiner ID鍵および署名自体を引いたもの)がある。
Script prefix/Script identifier:script prefixは、スクリプトタイプの固有の識別子である。ScriptPubkeyからあらゆるユーザ固有データを引いたもののSHA256ハッシュの最初の6バイトを用いる。
H(empty template)[0:6]
empty templateは、スクリプトからユーザ固有テンプレートデータを引いたものを表す。たとえば、P2PKHトランザクションのための以下のプレフィックス生成を考える。
P2PKH ScriptPubkey:76a91412d9253a252ca9bbbcdefd0b077e83666d12f12388ac
P2PKH empty template:76a914000000000000000000000000000000000000000088ac
H(empty template)[0:6]=9a5d6f105da6
Fee tuple:Fee tuple(フィータプル)は、新しく構築されたブロックにおいてトランザクションを公開するためにノード104によって課される最小のトランザクションフィーをシグナリングするために使用されるデータ構造である。たとえば、1バイト毎サトシは[0x0001 0x0001]というフィータプルと等価であるが、5バイトごとに3サトシは[0x0003 0x0005]というフィータプルによって表現される。
Data type and length:「データタイプ」および「データ空間」は、ScriptSig(input)およびScriptPubkey(output)を作成するために使用されるデータの長さおよびタイプを示すために使用され、こうして、トランザクションをどのように構築するかということについてより詳細な説明をユーザに与える。
各出力スクリプトは、ユーザおよびトランザクションに固有のデータを含むが、トランザクションタイプは同様のパターンに従う。たとえば、pay-to-public-keyハッシュでは、出力は20バイトのハッシュダイジェストおよび4個のオペコードを含む。対応する入力は、75バイトの署名および33バイトまたは65バイトの公開鍵を含む。
Number of opcodes:ScriptPubkeyの中のオペコードの数は、スクリプトの実行がどれだけ高価になるかを決定するための有用な尺度である。入力および出力のスクリプト長は、スクリプトの実行がどれだけ高価になるかを決定するための別の有用な尺度である。
ノード104が上記の方法を複数回実行し、非標準的なトランザクションのセットを公開すると、ノードは、TxIDのリストの記録をとり、テンプレートスクリプティング情報を要求するエンティティにそれらを送信する必要があり得る。リストサイズを最小にするために、ノード104は、Policy Document(ポリシードキュメント)を含む統合トランザクションを作成することができる。ポリシードキュメント自体が、ノードがマイニングしたテンプレートトランザクションのすべてのトランザクションIDのリストである。
関連するテンプレートトランザクションIDのリストを収集してそれらをチェーン上で公開することによって、TxIDの大きくなり続けるリストを維持する負担がなくなり、代わりにリストを単一のTxIDへと縮小する。関連するスクリプトを発見するために必要とされるデータは、今やチェーン自体にある。TxIDの単一のポリシーリストを取得することによって、複数のノード104からデータをフェッチすることができ、ネットワークのすべてのノードに作業負荷を分散させる。図10は、統合トランザクションの内容を示す。
同様の方式で、ノード104は、テンプレートデータを符号化する最小値OP_RETURN/データトランザクションを作成して、それらのトランザクションをブロック151において公開することができ、これにより、ネットワーク106全体でデータを容易に利用可能にする。図11は、統合トランザクションのOP_RETURNフィールドの説明を与える。
実際には、テンプレートトランザクションに署名するために使用される鍵sk1、sk2(それぞれPK1およびPK2に対応する)は、Miner IDキーskIDとは異なるべきであり、これは、OP_RETURNデータフィールドにおいて署名
Figure 2023529467000003
(ポリシードキュメント)を生成するために使用される。しかしながら、これは、OP_RETURNデータがコピーされて、Miner IDキーを制御するエンティティにより作成されない別のトランザクションへと置かれ得るリスクをもらし、それにより、非標準的なスクリプトの受け入れが保証されなくなる。これは、鍵を連結するために子秘密鍵導出を使用することによって改善され得る。たとえば、BIP32プロトコル(https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki)によれば、子秘密鍵導出関数CKDprivおよびCKDpubを、秘密鍵
[sk1,c1]=CKDpriv([skID,cID],1),
[sk2,c2]=CKDpriv([skID,cID],2),

[skN,cN]=CKDpriv([skID,cID],N),
および対応する公開鍵
[PK1,c1]=CKDpub([PKID,cID],1),
[PK2,c2]=CKDpub([PKID,cID],2),

[PKN,cN]=CKDpub([PKID,cID],N)
を生成するために上記のように直接使用することができ、ここでcIDは延長された公開鍵のチェーンコード(一番右の256ビット)であり、インデックス範囲(1,...,N)はテンプレートトランザクションのOP_RETURN出力にフィールドとして追加され得る。テンプレートトランザクションのいずれの受信者も、CKDpub関数を使用して、2つの鍵の間の連結を検証することができる。この方法は、受信者によって見られているトランザクションが実際にマイナーID鍵の制御下でエンティティによって作成されたことを保証する。
図12aおよび図12bは、pay-to-public-hash(P2PKH)出力を実装するためのテンプレート出力スクリプト、およびP2PKH出力を消費するためのテンプレート入力スクリプトをそれぞれ備える、例示的な第1および第2のテンプレートトランザクションを示す。P2PKHは、ECDSA公開鍵のHASH160に支払う普通のトランザクションである。受信者は、公開鍵ハッシュを作成するために使用される公開鍵と一致する署名を提供することによって、出力をアンロックすることができる。図12cは、図12aおよび図12bのテンプレートトランザクションのOP_RETURNデータを示す。
図13aおよび図13bは、pay-to-R-puzzle-hash(P2RPH)出力を実装するためのテンプレート出力スクリプト、およびP2RPH出力を消費するためのテンプレート入力スクリプトをそれぞれ備える、例示的な第1および第2のテンプレートトランザクションを示す。P2RPHは、トランザクションECDSA署名のr成分を生成するために特定の公開一時鍵を消費者が使用するかどうかを確認するスクリプトに支払う非標準的なトランザクションである。P2RPHトランザクションをセキュアにするには2つの署名確認が必要とされ、普通のトランザクションよりも実行を高価にする。図13cは、図13aおよび図13bのテンプレートトランザクションのOP_RETURNデータを示す。
結論
開示される技法の他の変形または使用事例は、本明細書の開示を与えられれば当業者に明らかになり得る。本開示の範囲は、説明される実施形態ではなく、添付の特許請求の範囲だけによって限定される。
たとえば、上のいくつかの実施形態は、ビットコインネットワーク106、ビットコインブロックチェーン150、およびビットコインノード104に関して説明されている。しかしながら、ビットコインブロックチェーンはブロックチェーン150の1つの特定の例であり、上の説明はあらゆるブロックチェーンに一般に当てはまり得ることが理解されるだろう。すなわち、本発明は、決してビットコインブロックチェーンに限定されない。より一般的には、ビットコインネットワーク106、ビットコインブロックチェーン150、およびビットコインノード104への上記のあらゆる言及は、それぞれ、ブロックチェーンネットワーク106、ブロックチェーン150、およびブロックチェーンノード104に関して置き換えられ得る。ブロックチェーン、ブロックチェーンネットワーク、および/またはブロックチェーンノードは、上で説明されたような、ビットコインブロックチェーン150、ビットコインネットワーク106、およびビットコインノード104の説明された性質の一部またはすべてを共有し得る。
本発明の好ましい実施形態では、ブロックチェーンネットワーク106はビットコインネットワークであり、ビットコインノード104は、ブロックチェーン150のブロック151を作成し、公開し、広め、記憶するという説明された機能の少なくともすべてを実行する。これらの機能のすべてではなく1つまたは一部だけを実行する他のネットワークエンティティ(またはネットワーク要素)があり得ることは排除されない。すなわち、ネットワークエンティティは、ブロックを作成して公開することなく、ブロックを広めるおよび/または記憶する機能を実行し得る(これらのエンティティは好ましいビットコインネットワーク106のノードであるとは考えられないことを思い出されない)。
本発明の好ましくない実施形態では、ブロックチェーンネットワーク106はビットコインネットワークではないことがある。これらの実施形態では、ノードが、ブロックチェーン150のブロック151を作成し、公開し、広め、記憶する機能のすべてではなく、少なくとも1つまたは一部を実行し得ることは排除されない。たとえば、それらの他のブロックチェーンネットワークでは、「ノード」は、ブロック151を作成して公開するが、それらのブロック151を記憶せず、かつ/または他のノードに広めないように構成される、ネットワークエンティティを指すために使用されることがある。
またさらに一般的には、上記の「ビットコインノード」104という用語へのあらゆる言及は、「ネットワークエンティティ」または「ネットワーク要素」という用語で置き換えられてもよく、そのようなエンティティ/要素は、ブロックを作成し、公開し、広め、記憶する役割の一部またはすべてを実行するように構成される。そのようなネットワークエンティティ/要素の機能は、ブロックチェーンノード104に関して上で説明されたのと同じ方法でハードウェアにおいて実装され得る。
上記の実施形態は、単なる例として説明されたことが理解されるだろう。より一般的には、以下の陳述の任意の1つまたは複数に従った方法、装置、またはプログラムが提供され得る。
陳述1 ブロックチェーントランザクションを受け入れるコンピュータで実施される方法であって、方法が、ブロックチェーンネットワークのブロックチェーンノードによって実行され、
第1の出力を備える第1のトランザクションを生成するステップであって、第1の出力が第1の出力スクリプトを備える、ステップと、
第1のトランザクションがブロックチェーンで公開されるようにするステップと、
第2の出力を備える第2のトランザクションを受信するステップであって、第2の出力が第2の出力スクリプトを備える、ステップと、
1つまたは複数の条件が満たされることに基づいて第2のトランザクションを受け入れるステップとを備え、1つまたは複数の条件のうちの第1の条件が、第2の出力スクリプトが第1の出力スクリプトに対応することである、方法。
陳述2 第1の入力を備える第3のトランザクションを生成するステップであって、第1の入力が第1の入力スクリプトを備え、第1の入力スクリプトが、第1の出力スクリプトとともに実行されるとき、第1の出力スクリプトをアンロックするように構成される、ステップと、
第3のトランザクションがブロックチェーン上で公開されるようにするステップとを備える、陳述1の方法。
陳述3 第4の入力を備える第4のトランザクションを受信するステップであって、第4の入力が第2の入力スクリプトを備える、ステップと、
1つまたは複数の条件が満たされることに基づいて第4のトランザクションを受け入れるステップとを備え、前記1つまたは複数の条件のうちの第1の条件が、第2の入力スクリプトが第1の入力スクリプトに対応することである、陳述2の方法。
陳述4 第2のトランザクションを受け入れるステップが、第2のトランザクションがブロックチェーン上で公開されるようにするステップを備える、任意の先行する陳述の方法。
陳述5 第2のトランザクションがブロックチェーン上で公開されるようにする前記ステップが、ブロックチェーン上で第2のトランザクションを公開するステップ、および/または、第2のトランザクションを1つまたは複数のブロックチェーンノードに広めるステップを備える、陳述4の方法。
陳述6 第1のトランザクションがブロックチェーン上で公開されるようにする前記ステップが、ブロックチェーン上で第1のトランザクションを公開するステップ、および/または、第1のトランザクションを1つまたは複数の異なるブロックチェーンノードに広めるステップを備える、任意の先行する陳述の方法。
陳述7 第2のトランザクションを受信する前記ステップが、第2のトランザクションを生成した関係者から第2のトランザクションを受信するステップを備える、任意の先行する陳述の方法。
陳述8 第2のトランザクションを受信する前記ステップが、異なるブロックチェーンノードから、またはブロックチェーンネットワークの中継ノードから、第2のトランザクションを受信するステップを備える、陳述1から6のいずれかの方法。
陳述9 第1および第3のトランザクションが各々、それぞれのトランザクション識別子によって識別され、方法が、
関係者から、第1および第3のトランザクションのそれぞれの識別子に対する要求を受信するステップと、
第1および第3のトランザクションのそれぞれの識別子を関係者に送信するステップとを備える、任意の先行する陳述の方法。
陳述10 第2の出力スクリプトが第1の出力スクリプトに対応するには、
第2の出力スクリプトが、第1の出力スクリプトと同じ数のオペレーションコードを備えること、
第2の出力スクリプトが、第1の出力スクリプトと同じ順序のオペレーションコードを備えること、
第2の出力スクリプトが、第1の出力スクリプトと同じ数のデータ項目を備えること、
第2の出力スクリプトが、第1の出力スクリプトと同じ順序のデータ項目を備えること、および/または、
第2の出力スクリプトが、第1の出力スクリプトと同じフォーマットのデータ項目を備えること
という条件のうちの1つ、いくつか、またはすべてが満たされなければならない、任意の先行する陳述の方法。
陳述11 第3のトランザクションの第1の入力が、第1のトランザクションの第1の出力を参照する、任意の先行する陳述の方法。
陳述12 第1のトランザクションが、ブロックチェーンノードの第1の公開鍵にロックされる第3の出力を備える、任意の先行する陳述の方法。
たとえば、第3の出力は、第1の公開鍵のハッシュにロックされるP2PKHハッシュ出力であり得る。
陳述13 第3のトランザクションが第2の入力を備え、第2の入力が、第1のトランザクションの第3の出力とともに実行されるとき、第1のトランザクションの第3の出力をアンロックするように構成される、陳述12の方法。
陳述14 第3のトランザクションの第2の入力がブロックチェーンノードによって生成される署名を備え、署名が第3のトランザクションの入力および/または出力の一部またはすべてに署名する、陳述13の方法。
陳述15 第1および/または第3のトランザクションがブロックチェーンノードの識別子を備える、任意の先行する陳述の方法。
たとえば、識別子は、ブロックチェーンノードに関連する公開鍵、または他の識別情報、たとえば名前、IPアドレスなどであり得る。
陳述16 ブロックチェーンノードの識別子が、ブロックチェーンノードの第1の公開鍵または第2の公開鍵を備える、陳述15の方法。
陳述17 第3のトランザクションが第4の出力を備え、第4の出力が第1の出力スクリプトを備える、陳述2またはそれに従属する任意の陳述の方法。
陳述18 第1および/または第3のトランザクションが、
ブロックチェーンノードに関連するマスター公開鍵、
マスター公開鍵を第1の公開鍵および/または第2の公開鍵と連結するチェーンコード、
マスター公開鍵を使用して生成される署名、
テンプレート出力スクリプトのデータ長、
テンプレート入力スクリプトのデータ長、
テンプレート出力スクリプトに含まれるオペコードの総数
のうちの1つ、いくつか、またはすべてを備えるそれぞれの出力を備える、任意の先行する陳述の方法。
陳述19 第5の出力を備える第5のトランザクションを生成するステップを備え、第5の出力が第1および第3のトランザクションのそれぞれのトランザクション識別子を備える、任意の先行する陳述の方法。
陳述20 第5のトランザクションの第5の出力が、それぞれのトランザクション識別子の1つまたは複数のペアを備え、各ペアが、異なる第1のトランザクションのそれぞれのトランザクション識別子および異なる第3のトランザクションのそれぞれのトランザクション識別子を備え、各々の異なる第1および第3のトランザクションがそれぞれ、異なる第1の出力スクリプトおよび異なる第1の入力スクリプトを備える、陳述19の方法。
陳述21 ブロックチェーントランザクションを生成するコンピュータで実施される方法であって、ブロックチェーンが、第1の出力スクリプトを備える第1の出力を備える第1のトランザクションと、第1の入力スクリプトを備える第1の入力を備える第3のトランザクションとを備え、第1の入力スクリプトが、第1の出力スクリプトとともに実行されるとき、第1の出力スクリプトをアンロックするように構成され、第1および第3のトランザクションがブロックチェーンノードによって生成され、方法が、関係者によって実行され、
第1のトランザクションおよび/または第3のトランザクションを取得するステップと、
a)第1のトランザクションの第1の出力スクリプトに対応する第2の出力スクリプトを備える第2の出力、および/または、b)第3のトランザクションの第1の入力スクリプトに対応する第2の入力スクリプトを備える第2の入力を備える、第2のトランザクションを生成するステップと、
第2のトランザクションがブロックチェーンノードに送信されるようにするステップとを備える、方法。
陳述22 第1および/または第3のトランザクションを取得する前記ステップが、ブロックチェーンから第1および/または第3のトランザクションを取得するステップを備える、陳述21の方法。
陳述23 第1および第3のトランザクションが各々、それぞれのトランザクション識別子によって識別され、取得する前記ステップが、第1および/または第3のトランザクションのそれぞれのトランザクション識別子を取得するステップを備える、陳述21または陳述22の方法。
陳述24 取得する前記ステップが、第1および/または第3のトランザクションに対する要求をブロックチェーンノードに送信するステップを備える、陳述23の方法。
陳述25 第1および/または第3のトランザクションに対する要求を異なるブロックチェーンノードに送信するステップを備え、要求が、第1および/または第3のトランザクションのそれぞれのトランザクション識別子を備え、取得する前記ステップが、異なるノードから第1および/または第3のトランザクションを取得するステップを備える、陳述21または陳述22の方法。
陳述26 ブロックチェーンノードに、第1および/または第3のトランザクションがブロックチェーン上で公開されることのそれぞれのマークルプルーフに対する要求を送信するステップを備える、陳述21から25のいずれかの方法。
陳述27 第1および/または第3のトランザクションが各々マスター公開鍵を備え、方法が、マスター公開鍵がブロックチェーンノードに関連することを検証するステップを備える、陳述21から26のいずれかの方法。
陳述28 第1のトランザクションが第1の公開鍵を備え、および/または、第3のトランザクションが第2の公開鍵を備え、方法が、第1および/または第2の公開鍵がマスター公開鍵に連結されることを検証するステップを備える、陳述27の方法。
陳述29 1つまたは複数のメモリユニットを備えるメモリと、
1つまたは複数の処理ユニットを備える処理装置とを備え、メモリが、処理装置で動作するようになされるコードを記憶し、コードが、処理装置で実行されると、陳述1から28のいずれかの方法を実行するように構成される、コンピュータ機器。
陳述30 コンピュータ可読ストレージ上で具現化され、コンピュータ機器で実行されると陳述1から28のいずれかの方法を実行するように構成される、コンピュータプログラム。
本明細書において開示される別の態様によれば、ブロックチェーンノードおよび関係者の行動を備える方法が提供され得る。
本明細書において開示される別の態様によれば、ブロックチェーンノードおよび関係者のコンピュータ機器を備えるシステムが提供され得る。
100 システム
101 ブロックチェーンネットワーク、パケット交換ネットワーク、インターネット
102 コンピュータ機器、コンピュータ端末
103 ユーザ、関係者
104 ブロックチェーンノード
105 クライアントアプリケーション
106 ピアツーピア(P2P)ネットワーク、ネットワーク
107 サイドチャネル
150 ブロックチェーン
151 ブロック
152 トランザクション
153 ジェネシスブロック
154 セット、プール
155 ブロックポインタ
201 ヘッダ
202 入力フィールド、入力、
203 出力フィールド、出力、トランザクション出力、UTXO
450 ノードソフトウェア
451 プロトコルエンジン
452 スクリプトエンジン
453 スタック
454 アプリケーションレベル決定エンジン
455 ブロックチェーン関連機能モジュール
501 第1のブロックチェーンノード
502 ユーザ
503 第2のブロックチェーンノード

Claims (30)

  1. ブロックチェーントランザクションを受け入れるコンピュータで実施される方法であって、前記方法が、ブロックチェーンネットワークのブロックチェーンノードによって実行され、
    第1の出力を備える第1のトランザクションを生成するステップであって、前記第1の出力が第1の出力スクリプトを備える、ステップと、
    前記第1のトランザクションが前記ブロックチェーンで公開されるようにするステップと、
    第2の出力を備える第2のトランザクションを受信するステップであって、前記第2の出力が第2の出力スクリプトを備える、ステップと、
    1つまたは複数の条件が満たされることに基づいて前記第2のトランザクションを受け入れるステップとを備え、前記1つまたは複数の条件のうちの第1の条件が、前記第2の出力スクリプトが前記第1の出力スクリプトに対応することである、方法。
  2. 第1の入力を備える第3のトランザクションを生成するステップであって、前記第1の入力が第1の入力スクリプトを備え、前記第1の入力スクリプトが、前記第1の出力スクリプトとともに実行されるとき、前記第1の出力スクリプトをアンロックするように構成される、ステップと、
    前記第3のトランザクションが前記ブロックチェーン上で公開されるようにするステップとを備える、請求項1に記載の方法。
  3. 第4の入力を備える第4のトランザクションを受信するステップであって、前記第4の入力が第2の入力スクリプトを備える、ステップと、
    1つまたは複数の条件が満たされることに基づいて前記第4のトランザクションを受け入れるステップとを備え、前記1つまたは複数の条件のうちの第1の条件が、前記第2の入力スクリプトが前記第1の入力スクリプトに対応することである、請求項2に記載の方法。
  4. 前記第2のトランザクションを受け入れるステップが、前記第2のトランザクションが前記ブロックチェーン上で公開されるようにするステップを備える、請求項1から3のいずれか一項に記載の方法。
  5. 前記第2のトランザクションが前記ブロックチェーン上で公開されるようにする前記ステップが、前記ブロックチェーン上で前記第2のトランザクションを公開するステップ、および/または、前記第2のトランザクションを1つまたは複数のブロックチェーンノードに広めるステップを備える、請求項4に記載の方法。
  6. 前記第1のトランザクションが前記ブロックチェーン上で公開されるようにする前記ステップが、前記ブロックチェーン上で前記第1のトランザクションを公開するステップ、および/または、前記第1のトランザクションを1つまたは複数の異なるブロックチェーンノードに広めるステップを備える、請求項1から5のいずれか一項に記載の方法。
  7. 前記第2のトランザクションを受信する前記ステップが、前記第2のトランザクションを生成した関係者から前記第2のトランザクションを受信するステップを備える、請求項1から6のいずれか一項に記載の方法。
  8. 前記第2のトランザクションを受信する前記ステップが、異なるブロックチェーンノードから、または前記ブロックチェーンネットワークの中継ノードから、前記第2のトランザクションを受信するステップを備える、請求項1から6のいずれか一項に記載の方法。
  9. 前記第1および第3のトランザクションが各々、それぞれのトランザクション識別子によって識別され、前記方法が、
    関係者から、前記第1および第3のトランザクションの前記それぞれの識別子に対する要求を受信するステップと、
    前記第1および第3のトランザクションの前記それぞれの識別子を前記関係者に送信するステップとを備える、請求項1から8のいずれか一項に記載の方法。
  10. 前記第2の出力スクリプトが前記第1の出力スクリプトに対応するには、
    前記第2の出力スクリプトが、前記第1の出力スクリプトと同じ数のオペレーションコードを備えること、
    前記第2の出力スクリプトが、前記第1の出力スクリプトと同じ順序のオペレーションコードを備えること、
    前記第2の出力スクリプトが、前記第1の出力スクリプトと同じ数のデータ項目を備えること、
    前記第2の出力スクリプトが、前記第1の出力スクリプトと同じ順序のデータ項目を備えること、および/または、
    前記第2の出力スクリプトが、前記第1の出力スクリプトと同じフォーマットのデータ項目を備えること
    という条件のうちの1つ、いくつか、またはすべてが満たされなければならない、請求項1から9のいずれか一項に記載の方法。
  11. 前記第3のトランザクションの前記第1の入力が、前記第1のトランザクションの前記第1の出力を参照する、請求項1から10のいずれか一項に記載の方法。
  12. 前記第1のトランザクションが、前記ブロックチェーンノードの第1の公開鍵にロックされる第3の出力を備える、請求項1から11のいずれか一項に記載の方法。
  13. 前記第3のトランザクションが第2の入力を備え、前記第2の入力が、前記第1のトランザクションの前記第3の出力とともに実行されるとき、前記第1のトランザクションの前記第3の出力をアンロックするように構成される、請求項12に記載の方法。
  14. 前記第3のトランザクションの前記第2の入力が前記ブロックチェーンノードによって生成される署名を備え、前記署名が前記第3のトランザクションの前記入力および/または出力の一部またはすべてに署名する、請求項13に記載の方法。
  15. 前記第1および/または第3のトランザクションが前記ブロックチェーンノードの識別子を備える、請求項1から14のいずれか一項に記載の方法。
  16. 前記ブロックチェーンノードの前記識別子が、前記ブロックチェーンノードの第1の公開鍵または第2の公開鍵を備える、請求項15に記載の方法。
  17. 前記第3のトランザクションが第4の出力を備え、前記第4の出力が前記第1の出力スクリプトを備える、請求項2または請求項2に従属するいずれかの請求項に記載の方法。
  18. 前記第1および/または第3のトランザクションが、
    前記ブロックチェーンノードに関連するマスター公開鍵、
    前記マスター公開鍵を前記第1の公開鍵および/または前記第2の公開鍵と連結するチェーンコード、
    前記マスター公開鍵を使用して生成される署名、
    テンプレート出力スクリプトのデータ長、
    テンプレート入力スクリプトのデータ長、
    前記テンプレート出力スクリプトに含まれるオペコードの総数
    のうちの1つ、いくつか、またはすべてを備えるそれぞれの出力を備える、請求項1から17のいずれか一項に記載の方法。
  19. 第5の出力を備える第5のトランザクションを生成するステップを備え、前記第5の出力が前記第1および第3のトランザクションのそれぞれのトランザクション識別子を備える、請求項1から18のいずれか一項に記載の方法。
  20. 前記第5のトランザクションの前記第5の出力が、それぞれのトランザクション識別子の1つまたは複数のペアを備え、各ペアが、異なる第1のトランザクションのそれぞれのトランザクション識別子および異なる第3のトランザクションのそれぞれのトランザクション識別子を備え、各々の異なる第1および第3のトランザクションがそれぞれ、異なる第1の出力スクリプトおよび異なる第1の入力スクリプトを備える、請求項19に記載の方法。
  21. ブロックチェーントランザクションを生成するコンピュータで実施される方法であって、前記ブロックチェーンが、第1の出力スクリプトを備える第1の出力を備える第1のトランザクションと、第1の入力スクリプトを備える第1の入力を備える第3のトランザクションとを備え、前記第1の入力スクリプトが、前記第1の出力スクリプトとともに実行されるとき、前記第1の出力スクリプトをアンロックするように構成され、前記第1および第3のトランザクションがブロックチェーンノードによって生成され、前記方法が、関係者によって実行され、
    前記第1のトランザクションおよび/または前記第3のトランザクションを取得するステップと、
    a)前記第1のトランザクションの前記第1の出力スクリプトに対応する第2の出力スクリプトを備える第2の出力、および/または、b)前記第3のトランザクションの前記第1の入力スクリプトに対応する第2の入力スクリプトを備える第2の入力を備える、第2のトランザクションを生成するステップと、
    前記第2のトランザクションが前記ブロックチェーンノードに送信されるようにするステップとを備える、方法。
  22. 前記第1および/または第3のトランザクションを取得する前記ステップが、前記ブロックチェーンから前記第1および/または第3のトランザクションを取得するステップを備える、請求項21に記載の方法。
  23. 前記第1および第3のトランザクションが各々、それぞれのトランザクション識別子によって識別され、取得する前記ステップが、前記第1および/または第3のトランザクションの前記それぞれのトランザクション識別子を取得するステップを備える、請求項21または22に記載の方法。
  24. 取得する前記ステップが、前記第1および/または第3のトランザクションに対する要求を前記ブロックチェーンノードに送信するステップを備える、請求項23に記載の方法。
  25. 前記第1および/または第3のトランザクションに対する要求を異なるブロックチェーンノードに送信するステップを備え、前記要求が、前記第1および/または第3のトランザクションの前記それぞれのトランザクション識別子を備え、取得する前記ステップが、前記異なるノードから前記第1および/または第3のトランザクションを取得するステップを備える、請求項21または22に記載の方法。
  26. 前記ブロックチェーンノードに、前記第1および/または第3のトランザクションが前記ブロックチェーン上で公開されることのそれぞれのマークルプルーフに対する要求を送信するステップを備える、請求項21から25のいずれか一項に記載の方法。
  27. 前記第1および/または第3のトランザクションが各々マスター公開鍵を備え、前記方法が、前記マスター公開鍵が前記ブロックチェーンノードに関連することを検証するステップを備える、請求項21から26のいずれか一項に記載の方法。
  28. 前記第1のトランザクションが第1の公開鍵を備え、および/または、前記第3のトランザクションが第2の公開鍵を備え、前記方法が、前記第1および/または第2の公開鍵が前記マスター公開鍵に連結されることを検証するステップを備える、請求項27に記載の方法。
  29. 1つまたは複数のメモリユニットを備えるメモリと、
    1つまたは複数の処理ユニットを備える処理装置とを備え、前記メモリが、前記処理装置で動作するようになされるコードを記憶し、前記コードが、前記処理装置で実行されると、請求項1から28のいずれか一項に記載の方法を実行するように構成される、コンピュータ機器。
  30. コンピュータ可読ストレージ上で具現化され、コンピュータ機器で実行されると請求項1から28のいずれか一項に記載の方法を実行するように構成される、コンピュータプログラム。
JP2022576152A 2020-06-12 2021-05-12 カスタムトランザクションスクリプト Pending JP2023529467A (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GB2008969.4 2020-06-12
GB2008969.4A GB2598277A (en) 2020-06-12 2020-06-12 Custom transaction scripts
PCT/EP2021/062599 WO2021249715A1 (en) 2020-06-12 2021-05-12 Custom transaction scripts

Publications (1)

Publication Number Publication Date
JP2023529467A true JP2023529467A (ja) 2023-07-10

Family

ID=71835563

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2022576152A Pending JP2023529467A (ja) 2020-06-12 2021-05-12 カスタムトランザクションスクリプト

Country Status (6)

Country Link
US (1) US20230230078A1 (ja)
EP (1) EP4136802A1 (ja)
JP (1) JP2023529467A (ja)
CN (1) CN115699676A (ja)
GB (1) GB2598277A (ja)
WO (1) WO2021249715A1 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20230342775A1 (en) * 2022-04-26 2023-10-26 Xilinx, Inc. Adaptive block processor for blockchain machine compute acceleration engine

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB201605032D0 (en) * 2016-03-24 2016-05-11 Eitc Holdings Ltd Recording multiple transactions on a peer-to-peer distributed ledger

Also Published As

Publication number Publication date
WO2021249715A1 (en) 2021-12-16
GB202008969D0 (en) 2020-07-29
GB2598277A (en) 2022-03-02
US20230230078A1 (en) 2023-07-20
CN115699676A (zh) 2023-02-03
EP4136802A1 (en) 2023-02-22

Similar Documents

Publication Publication Date Title
US20230388136A1 (en) Merkle proof entity
JP2023529468A (ja) ブロックチェーンアドレスの生成
US20220309504A1 (en) Multi-criteria blockchain protocol
JP2023529467A (ja) カスタムトランザクションスクリプト
WO2023052019A1 (en) Propagating locking scripts
US20230394063A1 (en) Merkle proof entity
EP4360246A1 (en) Tiered consensus
WO2023057151A1 (en) Implementing a layer 2 token protocol using a layer 1 blockchain
KR20240034793A (ko) 블록체인 트랜잭션들에 대한 조건들의 시행
WO2024041866A1 (en) Blockchain transaction
KR20240096560A (ko) 분산된 블록체인 기능들을 위한 방법들 및 시스템들
KR20240093714A (ko) 분산된 블록체인 기능들을 위한 방법들 및 시스템들
KR20240100373A (ko) 분산된 블록체인 기능들을 위한 방법들 및 시스템들
KR20240100377A (ko) 분산된 블록체인 기능들을 위한 방법들 및 시스템들
KR20240093494A (ko) 샤딩된 머클 트리
WO2024052065A1 (en) Determining shared secrets using a blockchain
WO2024041862A1 (en) Blockchain transaction
KR20240037243A (ko) 블록체인 트랜잭션들에 대한 조건들의 시행
GB2608840A (en) Message exchange system
WO2023117274A1 (en) Signature-based atomic swap
KR20240093548A (ko) 분산된 블록체인 기능들을 위한 방법들 및 시스템들
EP4348927A1 (en) Partial sha-based hash function
WO2024061546A1 (en) Enforcing constraints on blockchain transactions
WO2023104405A1 (en) Blockchain script engine

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20240412