JP2023529468A - ブロックチェーンアドレスの生成 - Google Patents
ブロックチェーンアドレスの生成 Download PDFInfo
- Publication number
- JP2023529468A JP2023529468A JP2022576153A JP2022576153A JP2023529468A JP 2023529468 A JP2023529468 A JP 2023529468A JP 2022576153 A JP2022576153 A JP 2022576153A JP 2022576153 A JP2022576153 A JP 2022576153A JP 2023529468 A JP2023529468 A JP 2023529468A
- Authority
- JP
- Japan
- Prior art keywords
- blockchain
- data
- component
- transaction
- prefix
- 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
Links
- 238000013515 script Methods 0.000 claims abstract description 248
- 238000000034 method Methods 0.000 claims abstract description 87
- 230000006870 function Effects 0.000 claims description 47
- 230000015654 memory Effects 0.000 claims description 22
- 238000012545 processing Methods 0.000 claims description 16
- 230000003287 optical effect Effects 0.000 claims description 8
- 238000004590 computer program Methods 0.000 claims description 3
- 230000001419 dependent effect Effects 0.000 claims description 2
- 230000008569 process Effects 0.000 description 9
- 230000008901 benefit Effects 0.000 description 8
- 238000012546 transfer Methods 0.000 description 8
- 230000000694 effects Effects 0.000 description 7
- 238000004891 communication Methods 0.000 description 6
- 230000000644 propagated effect Effects 0.000 description 5
- 238000013507 mapping Methods 0.000 description 4
- 238000013475 authorization Methods 0.000 description 3
- 239000002131 composite material Substances 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 230000008676 import Effects 0.000 description 2
- 238000007726 management method Methods 0.000 description 2
- 238000005065 mining Methods 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 238000010200 validation analysis Methods 0.000 description 2
- 241000282412 Homo Species 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 238000012550 audit Methods 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000006855 networking Effects 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 230000002040 relaxant effect Effects 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 230000009182 swimming Effects 0.000 description 1
- 238000012384 transportation and delivery Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION 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/00—Payment architectures, schemes or protocols
- G06Q20/02—Payment architectures, schemes or protocols involving a neutral party, e.g. certification authority, notary or trusted third party [TTP]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION 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/00—Payment architectures, schemes or protocols
- G06Q20/22—Payment schemes or models
- G06Q20/223—Payment schemes or models based on the use of peer-to-peer networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/64—Protecting data integrity, e.g. using checksums, certificates or signatures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION 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/00—Payment architectures, schemes or protocols
- G06Q20/30—Payment architectures, schemes or protocols characterised by the use of specific devices or networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION 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/00—Payment architectures, schemes or protocols
- G06Q20/30—Payment architectures, schemes or protocols characterised by the use of specific devices or networks
- G06Q20/36—Payment architectures, schemes or protocols characterised by the use of specific devices or networks using electronic wallets or electronic money safes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION 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/00—Payment architectures, schemes or protocols
- G06Q20/38—Payment protocols; Details thereof
- G06Q20/382—Payment protocols; Details thereof insuring higher security of transaction
- G06Q20/3829—Payment protocols; Details thereof insuring higher security of transaction involving key management
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/32—Cryptographic 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/3236—Cryptographic 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/3239—Cryptographic 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
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/32—Cryptographic 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/3247—Cryptographic 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 involving digital signatures
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/50—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols using hash chains, e.g. blockchains or hash trees
Landscapes
- Engineering & Computer Science (AREA)
- Business, Economics & Management (AREA)
- Computer Security & Cryptography (AREA)
- Accounting & Taxation (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Strategic Management (AREA)
- General Business, Economics & Management (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Finance (AREA)
- Health & Medical Sciences (AREA)
- General Health & Medical Sciences (AREA)
- Computer Hardware Design (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Bioethics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Financial Or Insurance-Related Operations Such As Payment And Settlement (AREA)
Abstract
ブロックチェーントランザクションの対応するテンプレート出力スクリプトに基づいてブロックチェーンアドレスを生成するコンピュータ実装方法であり、ブロックチェーンアドレスは、プレフィックス構成要素と、データ構成要素とを含み、この方法は、第1の関係者によって行われ、第1のテンプレート出力スクリプトに基づいて第1のブロックチェーンアドレスを生成するステップを含み、第1のブロックチェーンアドレスは、第1のテンプレート出力スクリプトを識別するための第1のプレフィックス構成要素と、第1のテンプレート出力スクリプトをポピュレートするために必要とされる1つまたは複数のデータ項目を表す第1のデータ構成要素とを含み、第1のプレフィックス構成要素は、1バイトよりも大きく、かつ/または第1のデータ構成要素は、第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のトランザクションの出力が別のより前の有効なトランザクションによってまだ引き換えられていないということである。これらの条件のいずれかに従って標的トランザクションが無効であることを見出したいずれのノードも、トランザクションを広めず(場合によっては無効なトランザクションを登録するために有効なトランザクションとして広めない)、またブロックチェーンに記録されるべき新しいブロックにトランザクションを含めない。
代替的なタイプのトランザクションモデルは、アカウントベースモデルである。この場合、各トランザクションは、過去のトランザクションのシーケンスの中の先行するトランザクションのUTXOを参照することによってではなく、絶対的なアカウント残高を参照することによって、移されるべき額を定義する。すべてのアカウントの現在の状態が、ブロックチェーンとは別のノードによって記憶され、定期的に更新される。
以前は、いくつかのブロックチェーンネットワークは、トランザクションの入力および出力を、各々が特定のスクリプトパターンを有する、少数の「標準的」トランザクションタイプに制限した。すなわち、トランザクションがブロックチェーンネットワークによって運用されるコンセンサスルールに従って有効であるために、トランザクションの入力および出力は、それらの標準的トランザクションタイプの1つに準拠することを要求された。
今では、それらの制限の一部または全部が取り除かれ、したがってカスタマイズされたトランザクションスクリプトの作成が可能になり、ブロックチェーンノードが新たに受信したトランザクションの処理について「ポリシールール」を個々に規定することが可能になっている。
トランザクションタイプについての制限を緩めることに伴う課題が、出力スクリプト、もっと正確に言えば出力スクリプトを正しく生成するための情報を符号化するために(たとえば、クライアントアプリケーションアプリケーションによって)使用される対応するブロックチェーンアドレスである。ブロックチェーンアドレスは、トランザクションスクリプトを比較的小さい(たとえば、25バイト)文字列(string)に置き換えることによって、デジタル資産を別のユーザに割り当てることを望むブロックチェーンのユーザに、ユーザフレンドリな体験を提供する。ブロックチェーンアドレスは、必ずしもブロックチェーン自体で見られるとは限らず、代わりにクライアントアプリケーションレベルで実装される。最も一般的なトランザクションタイプ、すなわち標準的なトランザクションの1つは、「ペイツーパブリックキーハッシュ(pay-to-public-key-hash)」(P2PKH)トランザクションとして知られている。P2PKHトランザクションでは、デジタル資産が、受信者の公開鍵のハッシュを指定する出力スクリプトにロックされる。対応するP2PKHアドレスは、そのスクリプトを一意に表す文字列である。
しかしながら、「非標準的」またはカスタムスクリプトについての形式的なスクリプトからアドレスへのマップは、現在存在しない。したがって、ユーザが非標準的トランザクションスクリプトを符号化する(すなわち表す)ブロックチェーンアドレスを生成可能にできるようにする必要がある。第1のユーザが、生成されたアドレスを第2のユーザに提供し、第2のユーザが対応する出力スクリプトを生成することを可能にすることができる。
本明細書で開示する一態様によれば、ブロックチェーントランザクションの対応するテンプレート出力スクリプトに基づいてブロックチェーンアドレスを生成するコンピュータ実装方法が提供され、ブロックチェーンアドレスは、プレフィックス構成要素と、データ構成要素とを含み、この方法は、第1の関係者によって行われ、第1のテンプレート出力スクリプトに基づいて第1のブロックチェーンアドレスを生成するステップを含み、第1のブロックチェーンアドレスは、第1のテンプレート出力スクリプトを識別するための第1のプレフィックス構成要素と、第1のテンプレート出力スクリプトをポピュレートするために必要とされる1つまたは複数のデータ項目を表す第1のデータ構成要素とを含み、第1のプレフィックス構成要素は、1バイトよりも大きく、かつ/または第1のデータ構成要素は、第1のテンプレート出力スクリプトをポピュレートするために必要とされる複数のデータ項目に基づいて生成される。
本明細書で開示する別の態様によれば、対応するブロックチェーンアドレスに基づいてブロックチェーントランザクションの出力スクリプトを生成するコンピュータ実装方法が提供され、ブロックチェーンアドレスは、プレフィックス構成要素と、データ構成要素とを含み、この方法は、第2の関係者によって行われ、第1のブロックチェーントランザクションの第1の出力スクリプトを生成するステップを含み、第1の出力スクリプトは、第1のブロックチェーンアドレスに基づいて生成され、第1のブロックチェーンアドレスは、第1のテンプレート出力スクリプトを識別する第1のプレフィックス構成要素と、第1のテンプレート出力スクリプトをポピュレートするために必要とされる1つまたは複数のデータ項目を表す第1のデータ構成要素とを含み、第1のプレフィックス構成要素は、1バイトよりも大きく、かつ/または第1のデータ構成要素は、第1のテンプレート出力スクリプトをポピュレートするために必要とされる複数のデータ項目に基づいて生成される。
本開示の実施形態の理解を助けるために、およびそのような実施形態がどのように実行に移され得るかを示すために、単に例として、添付の図面を参照する。
例示的なシステムの概要
図1は、ブロックチェーン150を実装するための例示的なシステム100を示す。システム100は、通常はインターネットなどのワイドエリアインターネットワークである、パケット交換ネットワーク101からなり得る。パケット交換ネットワーク101は、パケット交換ネットワーク101内でピアツーピア(P2P)ネットワーク106を形成するように並べられ得る複数のブロックチェーンノード104を備える。示されていないが、ブロックチェーンノード104は準完全グラフとして並べられ得る。したがって、各ブロックチェーンノード104は、他のブロックチェーンノード104に高度に接続される。
図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のそれぞれのコピーが、分散ネットワークまたはブロックチェーンネットワーク106の中の複数のブロックチェーンノード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に基づいてパズルを解こうとしていることがあるが、最初にたどり着いた者が最新のブロック151に含まれるトランザクションのセットを定義することを思い出されたい。最終的に、ブロックチェーンノード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ベースのプロトコルはビットコインに言及して説明されるが、それは他の例示的なブロックチェーンネットワーク上で等しく実装され得ることに留意されたい。
図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の全体を備える(よって、平文でデータの署名された部分を指定する別個の要素が含まれる必要がなく、それは、もともと存在していたからである)。
<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の中の複数のUTX0間で分割され得る。したがって、AliceがUTXO0において定義される額のすべてをBobに与えることを望まない場合、彼女はリマインダーを使用してTx1の第2の出力の残金を自分に与え、または別の関係者に支払うことができる。
実際には、Aliceはまた通常、ブロック151に自分のトランザクション104を含むことに成功するビットコインノード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との別個のサイドチャネル160を確立する(いずれかの関係者または第三者の教唆により)ことを可能にする。サイドチャネル160は、ブロックチェーンネットワークとは別にデータの交換を可能にする。そのような通信は、「オフチェーン」通信と呼ばれることがある。たとえば、これは、AliceおよびBobの一方がトランザクション152をネットワーク106にブロードキャストすることを選ぶまで、トランザクション152がブロックチェーンネットワーク106に(まだ)登録されることなく、またはチェーン150に向かって進むことなく、AliceとBobとの間でトランザクション152を交換するために使用され得る。このようにトランザクションを共有することは、「トランザクションテンプレート」の共有と呼ばれることがある。トランザクションテンプレートは、完全なトランザクションを形成するために必要とされる1つまたは複数の入力および/または出力を欠いていることがある。代替または追加として、サイドチャネル160は、鍵、交渉される額または条項、データコンテンツなどの、任意の他のトランザクション関連データを交換するために使用され得る。
サイドチャネル107は、ブロックチェーンネットワーク106と同じパケット交換ネットワーク101を介して確立され得る。代替または追加として、サイドチャネル301は、モバイルセルラーネットワークなどの異なるネットワーク、またはローカルワイヤレスネットワークなどのローカルエリアネットワーク、または、Aliceのデバイス102aとBobのデバイス102bとの間の直接の有線もしくはワイヤレスリンクすらも介して確立され得る。一般に、本明細書の他の箇所において言及されるサイドチャネル107は、「オフチェーン」で、すなわちブロックチェーンネットワーク106とは別にデータを交換するための、1つまたは複数のネットワーキング技術または通信媒体を介した、任意の1つまたは複数のリンクを備え得る。1つより多くのリンクが使用される場合、オフチェーンリンクの束または集合体は全体として、サイドチャネル107と呼ばれ得る。したがって、AliceおよびBobがいくつかの情報またはデータなどを、サイドチャネル107を介して交換すると言われる場合、これは必ずしも、すべてのこれらのデータが厳密に同じリンクで送信されなければならないこと、または同じタイプのネットワークで送信されなければならないことすらも示唆しない。
準備
ブロックチェーンアプリケーションは、一般に、ユーザがある額のデジタル資産を移し、データをブロックチェーンに書き込むことを可能にする秘密鍵の集合を含む(すなわち記憶する)。ブロックチェーンエコシステムにはクライアントアプリケーションの多くの異なる実装がある。デバイスベースのアプリケーションの設計アーキテクチャは、2つのタイプのトラストモデル、すなわちサーバ-クライアント(より良いユーザ体験および鍵バックアップのために設計された鍵の管理または部分管理制御)とピアツーピア(ユーザへの責任の負担がより高度な鍵の非集中的制御)の間のスケールで存在すると考えることができる。
ブロックチェーンアプリケーションは、一般に、ユーザがある額のデジタル資産を移し、データをブロックチェーンに書き込むことを可能にする秘密鍵の集合を含む(すなわち記憶する)。ブロックチェーンエコシステムにはクライアントアプリケーションの多くの異なる実装がある。デバイスベースのアプリケーションの設計アーキテクチャは、2つのタイプのトラストモデル、すなわちサーバ-クライアント(より良いユーザ体験および鍵バックアップのために設計された鍵の管理または部分管理制御)とピアツーピア(ユーザへの責任の負担がより高度な鍵の非集中的制御)の間のスケールで存在すると考えることができる。
クライアントアプリケーションの文脈における相互運用性は、1つの製品内の情報が他の製品またはシステムに対してどのように移転可能であるかの測度である。ブロックチェーンのユーザが自身のデジタル資産またはブロックチェーンデータにアクセスするために自身の特定のクライアントアプリケーションプロバイダに依存しないように、クライアントは、相互運用可能である必要がある。たとえば、ユーザは、ユーザの秘密鍵を1つのアプリケーションから引き出すことができ、それらを資産/データの損失なしに新しいアプリケーションにインポートすることができるべきである。
以前のブロックチェーンアドレス-一般的にアドレスは、特定のブロックチェーンスクリプトタイプに関係する情報を符号化することによってデジタル資産(たとえば、支払い)を受け取るために使用される英数字の識別子である。いくつかのブロックチェーンアドレスは、26~34文字の長さとすることができ、ベース58(base-58)の符号化された文字列(すなわち、視覚的なあいまいさによりI、l、0、およびOを除く英数字)である。それらは、公開鍵およびスクリプトからの生のバイトをフォーマットされた文字列に変換することによって、安全性および使いやすさを改善するように設計される。
従来のブロックチェーンアドレスの3つの特徴がある。
・プレフィックス-アドレスタイプおよびアドレスが使用されるネットワーク(たとえば、MainnetまたはTestnet)を符号化する、アドレス文字列の始まりにプリペンドされるシングルバイト。
・ハッシュダイジェスト-ロッキングスクリプトが資金提供を阻止するデータは、一意の20バイトの文字列を生成するためにSHA256+RIPEMD-160を使用してハッシュ化される。これはまた、トランザクション出力をアンロックするために公開鍵が使用される前に公開鍵を生の形態で送信されないよう保護する。
・チェックサム-4バイトのチェックサムがアドレスの終わりに追加され、タイピングエラーがアドレスの不正確な伝達を生じないことを確実にする。ハッシュ160データと連結されたプレフィックスのハッシュがチェックサムと一致しない場合、クライアントアプリケーションは、誤りを犯したことをユーザに警告する。
・プレフィックス-アドレスタイプおよびアドレスが使用されるネットワーク(たとえば、MainnetまたはTestnet)を符号化する、アドレス文字列の始まりにプリペンドされるシングルバイト。
・ハッシュダイジェスト-ロッキングスクリプトが資金提供を阻止するデータは、一意の20バイトの文字列を生成するためにSHA256+RIPEMD-160を使用してハッシュ化される。これはまた、トランザクション出力をアンロックするために公開鍵が使用される前に公開鍵を生の形態で送信されないよう保護する。
・チェックサム-4バイトのチェックサムがアドレスの終わりに追加され、タイピングエラーがアドレスの不正確な伝達を生じないことを確実にする。ハッシュ160データと連結されたプレフィックスのハッシュがチェックサムと一致しない場合、クライアントアプリケーションは、誤りを犯したことをユーザに警告する。
既存のアドレスタイプは、以下のように一般化され得る。
Address=Base58(<Prefix><H(Data)><Checksum>)、
ここで、「Prefix」は、知られているロッキングスクリプトテンプレートを識別する部分文字列(sub-string)であり、「Data」は、それ自体が、またはそれの一部の関数がスクリプトテンプレートをポピュレートするために使用される追加情報に対応する。
Address=Base58(<Prefix><H(Data)><Checksum>)、
ここで、「Prefix」は、知られているロッキングスクリプトテンプレートを識別する部分文字列(sub-string)であり、「Data」は、それ自体が、またはそれの一部の関数がスクリプトテンプレートをポピュレートするために使用される追加情報に対応する。
たとえば、ペイツーパブリックキーハッシュ(P2PKH)ロッキングスクリプトの場合、プレフィックスは、数字1を割り当てられ、これが以下のスクリプトテンプレートを識別する(すなわちこれにマップする)。
TP2PKH=OP_DUP OP_HASH160<EMPTY>OP_EQUALVERIFY OP_CHECKSIG
ここで、スクリプト<EMPTY>の空のデータ部分は、公開鍵のRIPEMD-160 SHA256ハッシュ、H160(P)で満たされることになる。これは、公開鍵Pの場合のP2PKHアドレスAP2PKH(P)、および対応するロッキングスクリプトLSP2PKH(P)を、以下のように書くことができることを意味する。
AP2PKH(P)=Base58(<1><H160(P)><Checksum>)、
LSP2PKH(P)=OP_DUP OP_HASH160<H160(P)>OP_EQUALVERIFY OP_CHECKSIG。
TP2PKH=OP_DUP OP_HASH160<EMPTY>OP_EQUALVERIFY OP_CHECKSIG
ここで、スクリプト<EMPTY>の空のデータ部分は、公開鍵のRIPEMD-160 SHA256ハッシュ、H160(P)で満たされることになる。これは、公開鍵Pの場合のP2PKHアドレスAP2PKH(P)、および対応するロッキングスクリプトLSP2PKH(P)を、以下のように書くことができることを意味する。
AP2PKH(P)=Base58(<1><H160(P)><Checksum>)、
LSP2PKH(P)=OP_DUP OP_HASH160<H160(P)>OP_EQUALVERIFY OP_CHECKSIG。
同じプロセスを続けることができるが、今回は、「Prefix」を、ペイツースクリプトハッシュ(P2SH)ロッキングスクリプトテンプレートに対応する数字3に置き換え、「Data」を、スクリプトのシリアル化された部分「SS」に置き換えて、アドレスAP2SH(SS)および対応するロッキングスクリプトLSP2SH(SS)を以下のように生成する。
AP2SH(SS)=Base58(<3><H160(SS)><Checksum>)、
LSP2SH(SS)= OP_HASH160<H160(SS)>OP_EQUAL。
ここで、P2SHロッキングスクリプトの場合の標準的なスクリプトテンプレートTP2SHが使用され、スクリプト<EMPTY>の空のデータ部分は、所望のシリアル化されたスクリプトハッシュH160(SS)に対応する。
TP2SH=OP_HASH160<EMPTY>OP_EQUAL。
AP2SH(SS)=Base58(<3><H160(SS)><Checksum>)、
LSP2SH(SS)= OP_HASH160<H160(SS)>OP_EQUAL。
ここで、P2SHロッキングスクリプトの場合の標準的なスクリプトテンプレートTP2SHが使用され、スクリプト<EMPTY>の空のデータ部分は、所望のシリアル化されたスクリプトハッシュH160(SS)に対応する。
TP2SH=OP_HASH160<EMPTY>OP_EQUAL。
これらの例は、各アドレスがロッキングスクリプトにどのようにマップされ得るかを示し、これらの両方が、特定のロッキングスクリプトテンプレートをポピュレートするために使用されている「Data」のハッシュを含む。このマップは、以下のように視覚化することができる。
P2PKH: AP2PKH(P)⇔LSP2PKH(P)。
P2SH: AP2SH(P)⇔LSP2SH(P)。
P2PKH: AP2PKH(P)⇔LSP2PKH(P)。
P2SH: AP2SH(P)⇔LSP2SH(P)。
以下に示すように、マルチシグネチャ(multisignature)テンプレートTMultiSigおよびデータ出力テンプレートTOPRETURNなどの、他の標準的な出力スクリプトテンプレートがある。
TMultiSig=<m=EMPTY><P1=EMPTY> … <Pn=EMPTY><n=EMPTY>OP_CHECKMULTISIG、
TOPRETURN=OP_FALSE OP_RETURN<EMPTY>。
TMultiSig=<m=EMPTY><P1=EMPTY> … <Pn=EMPTY><n=EMPTY>OP_CHECKMULTISIG、
TOPRETURN=OP_FALSE OP_RETURN<EMPTY>。
しかしながら、このタイプの出力スクリプトにマップするために使用されるような、対応する「アドレス」がない。
AP2PKHおよびAP2SHは、書込み時にいくつかのブロックチェーンネットワークで使用されるただ2つの標準的なアドレスタイプであり、したがってこれらは単に、2つの対応するスクリプトテンプレートTP2PKHおよびTP2SHをそれぞれ必要とし、1バイトのスペースは、ただ2つのアドレスタイプを考慮に入れるのに十分であるので、これらのアドレスは、単一文字の(1バイトの)プレフィックス1および3をそれぞれ使用することができる。
標準的なアドレスタイプが、現在、非常に単純なロッキングスクリプトにマップするために使用され、どちらの場合もアドレス中のハッシュ化されたデータ(すなわち、H160(P)またはH160(SS))は、対応するテンプレートの<EMPTY>スクリプト部分に直接挿入することができる。これは単に、以下のために可能である。
・P2PKHの場合は極めて原始的であり、単純なロッキングスクリプトが構築されるよう考慮に入れるだけである。
・P2SHの場合は、すべての他の可能なスクリプトに対応するために使用されるが、これらのスクリプトを後続のアンロッキングスクリプトで提供する負担は受信者にあるような方法で使用される。これは、ロッキングスクリプトの作成者が単に、複雑なスクリプトをハッシュとして表し、これを単純なP2SHテンプレートに直接挿入できることを意味する。
・P2PKHの場合は極めて原始的であり、単純なロッキングスクリプトが構築されるよう考慮に入れるだけである。
・P2SHの場合は、すべての他の可能なスクリプトに対応するために使用されるが、これらのスクリプトを後続のアンロッキングスクリプトで提供する負担は受信者にあるような方法で使用される。これは、ロッキングスクリプトの作成者が単に、複雑なスクリプトをハッシュとして表し、これを単純なP2SHテンプレートに直接挿入できることを意味する。
実際は、既存のアドレスタイプとそれらの対応するロッキングスクリプトとの間には、単に一方向のマップではなく、双方向の関係があり、すなわち、データのいずれの外部ソースへもアクセスすることなく、常に一方を他方から直接引き出すことができ、その逆も同様である。
この関係は、以下のように書くことができる。
AType(Data)⇔LSType(Data)。
AType(Data)⇔LSType(Data)。
アドレスとロッキングスクリプトとの間のこの双方向の関係は、既存のアドレスフレームワークの重要な特性であり、これは、人間が認識可能な、かつユーザによって処理されることが可能な方法で、ピア間でロッキングスクリプト全体を通信する高効率な手段として使用されるアドレスを可能にする。
大部分のブロックチェーンプロトコルによれば、前のアドレスを作成するために使用される各公開鍵は、必ず一意の秘密鍵から導出されなければならない。アドレス生成中に、生の秘密鍵のバイトは、秘密鍵がMainnetまたはTestnet上でトランザクションを生成するために使用されるかどうかをそれぞれ示すシングルバイト(0x80または0xef)を最初にプリペンドされる。次いでチェックサムが、プレフィックス付き秘密鍵を使用して生成され、秘密鍵の終わりに付加される。最後に、文字列全体は、50~51のBase58シンボルに変換され、ウォレット機能が圧縮または非圧縮形態で公開鍵を記憶するかどうかに応じて5、L、またはKをプリペンドされる。得られた文字列は、今ではウォレットインポートフォーマット(WIF)である。
公開鍵-公開鍵Pが、最初に秘密鍵sから生成される。これは、秘密鍵にsecp256k1楕円曲線生成元(generator point)Gを掛けることによって行われる。
P=s・G
P=s・G
公開鍵は次いで、公開鍵が圧縮または非圧縮フォーマットで記憶されているかどうかを示すシングルバイト(0x02、0x03、または0x04)をプリペンドされる。公開鍵は、次いでSHA256 + RIPEMD160ハッシュ化されて、20バイトの文字列を生成する。ネットワークIDバイトが、文字列にプリペンドされる(たとえば、Mainnetの場合0x00)。文字列は、ダブルSHA256ハッシュ化されて、ハッシュダイジェストに付加されるチェックサムを作成する。
ブロックチェーンアドレス
ブロックチェーンネットワークによって使用される現在のアドレスフレームワークは、限られた数の異なるアンロッキング状態を考慮に入れる。確かに、いくつかのスクリプト状態はP2SHロッキングスクリプトで符号化できるが、アドレッシングの以前の方法は、ロッキングスクリプトを2つの標準的なタイプ、すなわちP2PKHおよびP2SHに減らすことによって制限された。これは、ユーザがこれらの2つのタイプ以外のロッキングスクリプトを自由に作成できなかったことを意味する。
ブロックチェーンネットワークによって使用される現在のアドレスフレームワークは、限られた数の異なるアンロッキング状態を考慮に入れる。確かに、いくつかのスクリプト状態はP2SHロッキングスクリプトで符号化できるが、アドレッシングの以前の方法は、ロッキングスクリプトを2つの標準的なタイプ、すなわちP2PKHおよびP2SHに減らすことによって制限された。これは、ユーザがこれらの2つのタイプ以外のロッキングスクリプトを自由に作成できなかったことを意味する。
ロッキングスクリプトについての制限は、現在、少なくとも1つのブロックチェーンネットワーク上で緩和されている。しかしながら、制限は、将来において他のブロックチェーンネットワーク上でも緩和される可能性があり、その場合、本明細書で言及する問題は、それらのネットワークにも当てはまる。しかしながら、新しいアドレッシングプロトコルの確立がない場合、「標準的」トランザクションの概念の除去は、以下の問題を提示する。
1.アドレスの1バイトのプレフィックススペースは、広範囲の使用事例およびロッキング要求に対応するために十分なロッキングスクリプトテンプレートを考慮に入れない。
2.多くのロッキングスクリプトテンプレートは、2つ以上の<EMPTY>スクリプト部分をポピュレートされる必要がある。たとえば、m-of-nマルチシグネチャロッキングスクリプトテンプレートTMultiSigは、n個の異なる公開鍵を表すアドレスの「データ」構成要素、ならびにmとnの両方の値を必要とする。
1.アドレスの1バイトのプレフィックススペースは、広範囲の使用事例およびロッキング要求に対応するために十分なロッキングスクリプトテンプレートを考慮に入れない。
2.多くのロッキングスクリプトテンプレートは、2つ以上の<EMPTY>スクリプト部分をポピュレートされる必要がある。たとえば、m-of-nマルチシグネチャロッキングスクリプトテンプレートTMultiSigは、n個の異なる公開鍵を表すアドレスの「データ」構成要素、ならびにmとnの両方の値を必要とする。
本発明は、ユーザ、クライアントアプリケーション、およびブロックチェーンノードがロッキングスクリプトを効率的に送信し、処理することを可能にする方法で、アドレス生成が限りない様々なロッキングスクリプトに適用されることを可能にする新しいアドレッシングフレームワークを提供する。
図3は、本発明の実施形態を実装するための例示的なシステム300を示す。システム300は、ブロックチェーンアドレスを生成するように構成された第1の関係者301と、ブロックチェーントランザクションの出力(すなわち、ロッキング)スクリプトを生成するように構成された第2の関係者とを含む。システム300は、ブロックチェーンネットワーク106の一部または全部、すなわちブロックチェーンノード104の1つまたは複数をさらに含み得る。第2の関係者302は、生成された出力スクリプトを含むブロックチェーントランザクションをブロックチェーンネットワーク106に出してもよく、または別の関係者(たとえば、第1の関係者301)に出して、その関係者がトランザクションをブロックチェーンネットワーク106に出してもよい。
第1の関係者301および第2の関係者302は各々、それぞれのコンピュータ機器 (図示せず)を備える。いずれかの関係者301、302に起因するいずれの活動も、その関係者301、302のそれぞれのコンピュータ機器に適用されることが諒解されよう。特定の例として、第2の関係者302は、Alice 103a(たとえば、Alice 103aによって操作されるクライアントアプリケーション105a)の形態をとり、Alice 103aと関連するとして上記で説明された活動の一部または全部を実行するように構成され得る。同様に、第1の関係者301は、Bob 103b(たとえば、Bob 103bによって操作されるクライアントアプリケーション105b)の形態をとり、Alice 103bと関連するとして上記で説明された活動の一部または全部を実行するように構成され得る。この例では、第2の関係者302(Alice 103a)が、ある額のデジタル資産を第1の関係者301(Bob 103b)に移しているが、他の例では、第1の関係者301が、ある額のデジタル資産を第2の関係者302に移す場合があることが諒解されよう。いくつかの実施形態では、第2の関係者302および第1の関係者301が、実際は同じエンティティである場合があることに留意されたい。すなわち、同じエンティティが、スクリプトと対応するアドレスの両方を生成し得る。
第1の関係者301は、テンプレート出力スクリプトに基づいてブロックチェーンアドレス(たとえば、第1の関係者301に関連するブロックチェーンアドレス)を生成するように構成される。テンプレート出力スクリプトは、1つまたは複数のデータ項目をポピュレートする必要がある出力スクリプトである。たとえば、テンプレート出力スクリプトは、1つまたは複数のオペレーションコード(「オペコード」)を含み得る。オペコードおよびそれらの機能は、当業者によく知られているであろう。
第1の関係者301によって生成されたアドレスは、少なくともプレフィックス構成要素と、データ構成要素とを備える。アドレスはまた、以下で議論されるチェックサム構成要素を備えてもよい。アドレスの構成要素はアドレスのフィールドに等しいことが諒解されよう。
プレフィックス構成要素は、ブロックチェーンアドレスを生成するために使用されるテンプレート出力スクリプトを識別する。すなわち、プレフィックスは、テンプレート出力スクリプトにマップする。たとえば、プレフィックスは、その値が対応するテンプレート出力スクリプトであって、鍵の値のペアにおいて鍵として働くことができる。プレフィックスは、第1の関係者301および/または第2の関係者302によって記憶されたデータベース、たとえばルックアップテーブルでテンプレート出力スクリプトを識別するために使用され得る。追加または代替として、データベースは、第1の関係者301および/または第2の関係者302に他の方法で利用可能であってもよい。たとえば、データベースは、ブロックチェーン150に記憶されてもよく、または場合によってはインターネット上で見つけられてもよい。
マッピングは、一意のマッピングを排除しないが、必ずしも一意のマッピングである必要はないことに留意されたい。言い換えれば、所与のプレフィックスが、ただ1つのテンプレートスクリプトにマップしてもよく、またはプレフィックスがいくつかのテンプレートスクリプトにマップしてもよい。
データ構成要素は、ブロックチェーントランザクションの出力スクリプトを生成するために、テンプレート出力スクリプトをポピュレートするのに必要とされる1つまたは複数のデータ項目を表す。データ項目の例は、公開鍵、または出力スクリプトをアンロックするかつ/または形成するのに必要とされるデータ、または第1の関係者301に知られている他のデータを含む。
本発明によれば、プレフィックス構成要素は、1バイトよも大きい場合があるサイズを有する。すなわち、プレフィックス構成要素は、シングルバイトに制限されない。一般に、プレフィックス構成要素は、第1の関係者301、第2の関係者302、またはブロックチェーンネットワーク106のいずれか1つによって強要されるデータサイズ制限に従って2バイトから上限までサイズが変動し得る。いくつかの実施形態では、プレフィックスは、ただ1バイトであってもよく、256までのテンプレートスクリプトを表すために使用され得る。
追加または代替として、データ構成要素は、複数のデータ構成要素に基づいて生成される。すなわち、データ構成要素は、少なくとも、テンプレート出力スクリプトをポピュレートするために必要とされる複数のデータ項目の関数である。
ひとたび生成されると、第1の関係者301は生成されたアドレスを、たとえば自身のクライアントアプリケーション105に記憶してもよい。アドレスを記憶する代わりにまたはそれに加えて、第1の関係者301は、図3に示されているように、ブロックチェーンアドレスを第2の関係者301に送信してもよい。第1の関係者301は、場合によっては、第2の関係者302がアドレスを取得するように、第2の関係者302に利用可能なアドレスを作ってもよい。たとえば、第1の関係者301は、たとえば文字列として、またはアドレスの光学表現として、第2の関係者302にアドレスを提示してもよい。特定の例として、第1の関係者301は、アドレスをバーコードまたはQRコード(登録商標)に変換し、第2の関係者302に(たとえば、ディスプレイ画面上に)アドレスを表示してもよい。
プレフィックス構成要素は、1つまたは複数のサブ構成要素を含んでもよい。たとえば、プレフィックスの第1のサブ構成要素は、人間が読み取れる文字列を含んでもよい。人間が読み取れる文字列は、ユーザによって解釈されるよりも、文字および/または数字の連続として理解されることになる。いくつかの例では、人間が読み取れる文字列は、文字のみ、または文字と数字の組合わせを含む。たとえば、人間が読み取れる文字列は、アドレスが生成されるテンプレート出力スクリプトの識別子を含んでもよい。
別の例として、プレフィックス構成要素は、テンプレート出力スクリプトに基づいて生成された第2のサブ構成要素を含んでもよい。すなわち、第2のサブ構成要素は、たとえば、テンプレート出力スクリプトを符号化するまたは場合によっては暗号化するために、テンプレート出力スクリプトに関数を適用することによって生成され得る。関数は、1つまたは複数のハッシュ関数を含み得る。たとえば、テンプレート出力スクリプトは、ハッシュ化されてもよく、ハッシュ結果は、第2のサブ構成要素の一部または全部を形成し得る。いくつかの例では、関数(たとえば、ハッシュ関数)が、テンプレート出力スクリプトに適用されて結果生成元となり、その結果の一部のみが第2のサブ構成要素を形成する。たとえば、テンプレート出力スクリプトのハッシュダイジェストの第1のn個の先頭の数字は、第2のサブ構成要素を形成し得る。
別の例として、プレフィックス構成要素は、ユーザおよび/またはブロックチェーンネットワーク106のノードの識別子を含む第3の構成要素を含み得る。たとえば、識別子は、ユーザおよびまたはブロックチェーンノード104に関連する公開鍵であってもよい。たとえば、ノード104は、テンプレート出力スクリプトを含むトランザクションを公開する意思を、たとえば他のトランザクションより先に、示していてもよい。
プレフィックス構成要素は、第1、第2、および第3のサブ構成要素のいずれかの組合わせを含んでもよい。「第1」、「第2」、および「第3」という用語は、単に任意のラベルとして使用され、必ずしも順序または他のサブ構成要素の1つの存在を意味しない。たとえば、プレフィックス構成要素は、第1および/または第2のサブ構成要素とは無関係に第3のサブ構成要素を含み得る。
同様に、データ構成要素は、1つまたは複数のサブ構成要素、たとえば、第1のサブ構成要素および/または第2のサブ構成要素を含み得る。第1のサブ構成要素は、テンプレート出力スクリプトをポピュレートするために必要とされる1つまたは複数の(たとえば、複数の)データ項目を含み得る。たとえば、テンプレート出力スクリプトが一連の公開鍵をポピュレートされる場合、データ構成要素の第1のサブ構成要素は、それらの公開鍵を含み得る。
第2のサブ構成要素は、たとえば、データ項目を符号化するまたは場合によっては暗号化するために、1つまたは複数の(たとえば、複数の)データ項目に関数を適用することによって生成される場合がある。データ項目に適用される関数は、プレフィックス構成要素の第2のサブ構成要素を生成するためにテンプレート出力スクリプトに適用される同じ関数であっても、なくてもよい。関数をデータ項目に適用することは、データ項目をハッシュ化することを含み得る。
第1の関係者301によって生成されたアドレスは、チェックサム構成要素を含み得る。たとえば、チェックサム構成要素は、第1の関係者301および/または第2の関係者302が、アドレスが正しく、すなわちアドレスフレームワークに従って生成されたことを確認することを可能にし得る。チェックサムは、プレフィックス構成要素の一部もしくは全部、および/またはデータ構成要素の一部もしくは全部に基づいて生成され得る。追加または代替のオプションとして、チェックサム構成要素は、テンプレート出力スクリプトをポピュレートするために必要とされるデータ項目の一部または全部に基づいて生成され得る。
アドレスは、アドレスを構成する次の構成要素および/もしくはサブ構成要素の数、ならびに/またはアドレスの次の構成要素および/もしくはサブ構成要素の長さを示すことを示す1つまたは複数のサブ構成要素を含み得る。たとえば、プレフィックス構成要素および/またはデータ構成要素のサブ構成要素のそれぞれの数が示され得る。別の例として、プレフィックスサブ構成要素の1つもしくは複数のそれぞれの長さおよび/またはデータサブ構成要素の1つもしくは複数のそれぞれの長さが示され得る。特定の例では、アドレスは、サブ構成要素の上述の数および/または長さを示す1つまたは複数の可変整数(VarInt)構成要素を含み得る。
いくつかの例では、ブロックチェーンアドレスは、0(ゼロ)、O(大文字のo)、I(大文字のi)、およびl(小文字のL)、ならびに非英数字+(プラス)および/または/(スラッシュ)を省くためにbase58符号化を使用して符号化され得る。
第2の関係者302は、ブロックチェーンアドレスに基づいて出力スクリプトを生成するように構成される。アドレスは、第1の関係者301から取得されてもよく、たとえば、第2の関係者は、アドレスをQRコードとして受信してもよい。第2の関係者302は、ある額のデジタル資産を第1の関係者301に割り当てるために出力スクリプトをブロックチェーントランザクションに組み込んでもよい。
第2の関係者302は、アドレスが生成されたテンプレート出力スクリプトを識別するためにアドレスのプレフィックス構成要素を使用してもよい。たとえば、第2の関係者302は、各々がプレフィックス構成要素またはサブ構成要素にマップされる、1つまたは複数のテンプレート出力スクリプトを(たとえば、メモリに)記憶してもよい。第2の関係者302は、プレフィックス構成要素またはそのサブ構成要素を使用して、正しいテンプレート出力スクリプトをルックアップしてもよい。
代替的に、テンプレート出力スクリプトは、データ構成要素に基づいて、またはアドレスを添付するデータ、たとえば第1の関係者301からのメッセージに基づいて、識別され得る。
第2の関係者302は、テンプレート出力スクリプトをポピュレートするためにデータ構成要素を使用してもよい。すなわち、テンプレート出力スクリプトは、未入力の(unpopulated)1つまたは複数のフィールドを含む。完全な出力スクリプトを生成するために、それらのフィールドは、データ構成要素によって表されるデータ項目をポピュレートされる必要がある。
代替的に、テンプレート出力スクリプトの一部または全部が、プレフィックス構成要素に基づいて、またはアドレスを添付するデータ、たとえば第1の関係者301からのメッセージに基づいて、ポピュレートされ得る。すなわち、第1の関係者301は、データ項目の一部または全部を第2の関係者302に送ってもよい。
本発明は、標準的なロッキングスクリプトタイプの現在の概念の除去を支援するアドレッシングフレームワークを提供する。このフレームワークは、いずれかの可能なロッキング「スクリプトタイプ」(LSType)に対して認識可能な「アドレスタイプ」(AType)を作成するためのプロセスを提供する。この新しいフレームワークは、以前のアドレスのいくつかの特性が維持されることを可能にし、すなわちそのアドレスは、人間が認識可能であり、アドレスとスクリプトとの間で双方向の関係(AType(Data)⇔LSType(Data))である。
アドレス生成のための新しいフレームワークは、以下の3つの構成要素を含み得る。
1.アドレスが対応するロッキングスクリプトテンプレートTTypeを識別するために使用される、アドレスプレフィックス。このプレフィックスは、好ましくは6バイトから8バイトの長さである。
2.アドレステンプレートTTypeをポピュレートするために使用されるべき「データ」を表すために使用される、データ表現、R(Data)。
3.アドレスを生成するときに、エラーチェックを可能にするチェックサム(たとえば、アドレスの残部のハッシュの先頭の4バイト)。
1.アドレスが対応するロッキングスクリプトテンプレートTTypeを識別するために使用される、アドレスプレフィックス。このプレフィックスは、好ましくは6バイトから8バイトの長さである。
2.アドレステンプレートTTypeをポピュレートするために使用されるべき「データ」を表すために使用される、データ表現、R(Data)。
3.アドレスを生成するときに、エラーチェックを可能にするチェックサム(たとえば、アドレスの残部のハッシュの先頭の4バイト)。
これらの3つの構成要素は、新しいフレームワークの基礎を形成し、以下の形態のアドレスを生成する。
Address=AType=Base58 (<Prefix><R(Data)><Checksum>)
Address=AType=Base58 (<Prefix><R(Data)><Checksum>)
既存のアドレスフレームワークと新しいアドレスフレームワークとの間の主要な差別化要因は、以下である。
・プレフィックスは、より多くの考えられるアドレスタイプに対応するために、より大きくてもよい。
・プレフィックスは、(人間が認識できるだけではなく)人間が読み取れるデータを含むように選択することができる。
・プレフィックスは、柔軟な方法で選択することができる。
・アドレス内のデータの表現は、複数の形態、たとえば、ハッシュ、生データ、ハッシュの集合の形態をとることができる。
・プレフィックスとデータ表現の両方が、構成可能である。
・プレフィックスは、より多くの考えられるアドレスタイプに対応するために、より大きくてもよい。
・プレフィックスは、(人間が認識できるだけではなく)人間が読み取れるデータを含むように選択することができる。
・プレフィックスは、柔軟な方法で選択することができる。
・アドレス内のデータの表現は、複数の形態、たとえば、ハッシュ、生データ、ハッシュの集合の形態をとることができる。
・プレフィックスとデータ表現の両方が、構成可能である。
本質的に、このフレームワークは、ロッキングスクリプトタイプの(たとえば、ノード104による)広告、交換、および通信を可能にし、従来のスクリプト制限の廃止に対処するのに十分な拡張性があるとともに、既存のアドレスタイプの有用な特性を保持する。ユーザは、以前は非標準であると考えられていた新しいスクリプトタイプを自由に作成できるので、このフレームワークは、(ユーザのそれぞれのクライアントアプリケーションによる)効率的なユーザ間の通信を容易にすることに特に役立つよう意図されている。
フレームワークの構成可能な部分の1つは、アドレスプレフィックスであり、これは、特定のロッキングスクリプトテンプレートTTypeに対応するアドレスタイプATypeを識別する(たとえば、6バイトの)文字列として定義される。
AType=Base58(<Prefix><R(Data)><Checksum>)
AType=Base58(<Prefix><R(Data)><Checksum>)
プレフィックス、データ、およびチェックサムのバイト長が文字列に明示的に符号化されるように、Varlnt符号化が使用され得る。そうすることで、可変のプレフィックス、データ、およびチェックサム長のアドレスを容易にし、したがってより大きい柔軟性をユーザに提供する。
このプレフィックスを生成する複数の方法があり、得られるアドレスの特性は、選択した方法によって決まる。一般に、少なくとも4つの広範なオプションがある、
1.人間が読み取れる文字列を使用すること、
2.スクリプトテンプレートのハッシュを使用すること、
3.(1)もしくは(2)に加えてMinerIDを使用すること、または
4.(1)、(2)、および(3)の組み合わせを使用すること。
1.人間が読み取れる文字列を使用すること、
2.スクリプトテンプレートのハッシュを使用すること、
3.(1)もしくは(2)に加えてMinerIDを使用すること、または
4.(1)、(2)、および(3)の組み合わせを使用すること。
プレフィックスをアドレスタイプに割り当てる簡単な方法は、使用されるロッキングスクリプトテンプレートの性質を意味する記述的な、人間が読み取れる文字列を使用することである。たとえば、以下に示されるpay-to-r-puzzle(P2RPH)テンプレートTP2RPHを検討する。
TP2RPH=OP_DUP OP_3 OP_SPLIT OP_NIP OP_1 OP_SPLIT OP_SWAP OP_SPLIT OP_DROP OP_HASH160<EMPTY>OP_EQUALVERIFY OP_OVER OP_CHECKSIGVERIFY OP_CHECKSIG
TP2RPH=OP_DUP OP_3 OP_SPLIT OP_NIP OP_1 OP_SPLIT OP_SWAP OP_SPLIT OP_DROP OP_HASH160<EMPTY>OP_EQUALVERIFY OP_OVER OP_CHECKSIGVERIFY OP_CHECKSIG
このテンプレートのアドレスは、プレフィックス自体として文字列「P2RPH」を割り当てること<Prefix>=<P2RPH>、および次の形態のアドレスを生成することによって作成され得る。
AP2RPH(r)=Base58(<P2RPH><R(r)><Checksum>)、
ここで、テンプレートロッキングスクリプトTP2RPHをポピュレートするために使用される「Data」は、整数rである。
以下でこれを議論するように、ここではrの値をどのように表現すべきかは規定されないことに留意されたい。
AP2RPH(r)=Base58(<P2RPH><R(r)><Checksum>)、
ここで、テンプレートロッキングスクリプトTP2RPHをポピュレートするために使用される「Data」は、整数rである。
以下でこれを議論するように、ここではrの値をどのように表現すべきかは規定されないことに留意されたい。
アドレスAP2RPH(r)は、P2RPH出力の場合に新しいアドレスフレームワークを実装するために、ロッキングスクリプトLP2RPH(r)にマップされ得る。対応するスクリプトは、以下のように書かれる。
LP2RPH(r)=OP_DUP OP_3 OP_SPLIT OP_NIP OP_1 OP_SPLIT OP_SWAP OP_SPLIT OP_DROP OP_HASH160<H(r)>OP_EQUALVERIFY OP_OVER OP_CHECKSIGVERIFY OP_CHECKSIG
LP2RPH(r)=OP_DUP OP_3 OP_SPLIT OP_NIP OP_1 OP_SPLIT OP_SWAP OP_SPLIT OP_DROP OP_HASH160<H(r)>OP_EQUALVERIFY OP_OVER OP_CHECKSIGVERIFY OP_CHECKSIG
人間が読み取れるプレフィックスの利点は、それによりユーザがアドレスからロッキングスクリプトの性質を解釈できるようになり、人間にとっての有用性が向上することである。さらに、人間が読み取れるプレフィックスは、マルウェアから保護し、出力が消費不可能なアドレスにロックされるのを防ぐのに役立つ。
特定のアドレスタイプのプレフィックスを作成する代替方法は、所与のロッキングスクリプトタイプにスクリプトテンプレートTTypeのハッシュダイジェストを採用することである。たとえば、再びP2RPHの場合を使用して、プレフィックスは、<Prefix>=<L64[H(TP2RPH)]>として生成されてもよく、ここでL64[Data]は、データの最初の8バイト(64ビット)である(プレフィックスのバイト長は、ハッシュ衝突の可能性を極めて低く確保しながら、できる限りコンパクトであるように選択される)。これは、以下の形態のP2RPH出力スクリプトのアドレスの作成を可能にする。
AP2RPH(r)=Base58(<L64[H(TP2RPH)]><R(r)><Checksum>)、
ここで、再び、アドレス内の整数値rをどのように厳密に表すかは指定されない。
AP2RPH(r)=Base58(<L64[H(TP2RPH)]><R(r)><Checksum>)、
ここで、再び、アドレス内の整数値rをどのように厳密に表すかは指定されない。
スクリプトテンプレートハッシュプレフィックスの利点は、プレフィックスが、ロッキングスクリプトの実際の形態と密接につながっていて、それによりユーザが、予想されるロッキングスクリプトテンプレートのハッシュをアドレスの先頭のバイトと比較することによってエラーチェックおよびバージョン比較を実行できるようになることである。
特定のブロックチェーンノードが自身のトランザクション妥当性ポリシー(すなわち、個々のノードによって実装される構成可能なポリシールール)を広告することをより容易にするために、スクリプトテンプレートタイプを特定のノード104のMinerID(すなわち、公開鍵)につなげることは有利である。各ノード104が、それ自体一意の公開鍵である、ノード自身のMinerIDを有する場合、各ノード104は、新しく構築されたブロックで公開する用意があるアドレスタイプのセットを定義し、クライアントアプリケーションおよび支払いサービスプロバイダがトランザクションの構築時にクエリおよび監視を行い得るポリシーを形成することができる。MinerIDをアドレステンプレートに組み込むために、MinerID鍵の4バイトのプレフィックスは、各アドレスタイプおよび対応するロッキングスクリプトテンプレートが単一ノードのドメイン内で一意に定義されることを確保するために、以前の方法の少なくとも1つと組み合わせられ得る。これは本質的に、複数の構成要素で構成された複合プレフィックスを使用することを意味する。
P2RPHロッキングスクリプトに生成され得るアドレスの一例は、以下の通りである。
または
しかしながら、前述のプレフィクス構成要素とは無関係のMinerIDが使用され得ることは排除されない。
MinerIDを使用する利点は、プレフィックスが、ロッキングスクリプトの実際の形態と密接につながっていて、それによりユーザが、予想されるロッキングスクリプトテンプレートのハッシュをアドレスの6~8バイトと比較することによってエラーチェックおよびバージョン比較を実行できるようになることである。
アドレスプレフィックスを生成するための先の3つの方法の各々は、異なる特性および利点を有するので、3つすべての要素が、所与のアドレスで使用され得る。
たとえば、以下のアドレスは、P2RPH出力の妥当と思われる例となり得る。
たとえば、以下のアドレスは、P2RPH出力の妥当と思われる例となり得る。
本質的に、より大きい複合プレフィックスが、各アドレスタイプおよび対応するロッキングスクリプトタイプについてのより多くの情報を符号化する。
以下は、アドレス
AType=Base58(<Prefix><R(Data)><Checksum>)
におけるデータ表現をどのように構成するかを論ずる。
AType=Base58(<Prefix><R(Data)><Checksum>)
におけるデータ表現をどのように構成するかを論ずる。
プレフィックスについては、アドレスフォーマットのこの態様を構成する複数の方法があり、各々が異なる事例において利点を有し得る。2つの手法が以下のようにまとめられ得る。
1.データの関数(たとえば、ハッシュ)を使用する。
2.データ自体を直接アドレスで使用する。
1.データの関数(たとえば、ハッシュ)を使用する。
2.データ自体を直接アドレスで使用する。
一般に、アドレスの文脈での「データ」は、特定のロッキングスクリプトを一意にするデータを指す。言い換えれば、スクリプトテンプレートが複数回使用および再利用される場合、それらのテンプレートの<EMPTY>データフィールドは、特定の文脈においてテンプレートに意味を与えるデータ要素の一意のセットをポピュレートされる。
たとえば、ペイツーパブリックキーハッシュ(P2PKH)ロッキングスクリプトの場合、データは、ロッキングスクリプトによって支払われている公開鍵Pである。同じテンプレートTP2PKHを使用してそのロッキングスクリプトと他のロッキングスクリプトを差別化するのは、Pの特定の選択であるからである。
ブロックチェーンネットワークが、考慮に入れる必要がある唯一のデータタイプがそれぞれData=PおよびData=SSである、P2PKHおよびP2SHの単純な既存のシナリオから移行するとき、ここでデータとデータのハッシュとの間に作成される微細な差異がある。これらの場合、P2PKHおよびP2SHの性質は、出力がハッシュへの支払いであるようなものであり、これは好都合であって、ユーザがアドレスフォーマットとロッキングスクリプトの両方においてデータをユーザのそれぞれのハッシュH(P)およびH(SS)として表すことを可能にする。
しかしながら、これは、ユーザがコンパクトなハッシュメッセージダイジェストに支払うことを望まない場合があり、かつ/またはユーザが複数のデータ要素、たとえば公開鍵およびいくつかの他の秘密に支払うことを望む場合がある、より複雑なスクリプトではそれほど容易に実現されない。
これは、ロッキングスクリプトをポピュレートするために使用されるデータが、整数値m、nならびに署名に有効であるn個の公開鍵を含むので、ペイツーマルチシグネチャ(pay-to-multisignature:P2MS)ロッキングスクリプトに現在標準的な「アドレス」フォーマットがない理由の1つである。この場合、出力は、単純なメッセージハッシュへの支払いではなく、単一のデータ項目への支払いでもない。新しいアドレッシングフレームワークが考慮に入れるのは、これらのような場合である。
検討すべき第1のオプションは、データの関数をそれの表現としてアドレスで使用することである。たとえば、nの大きい値を有するP2MSの場合、公開鍵のセットをコンパクトに表すために、ハッシュ関数が公開鍵のセットに適用されてもよい。
この場合、P2MS出力のアドレスは、以下のように生成され得る。
AMultiSig=Base58(<Prefix><H(m//n//P1//P2//…//Pn)><Checksum>)。
AMultiSig=Base58(<Prefix><H(m//n//P1//P2//…//Pn)><Checksum>)。
このアドレスと、アドレスに完全なデータを使用するP2MSアドレスの例との違いは、このアドレスが公開鍵の完全なリストP1、P2、…Pnならびにパラメータm、nを、複数の33バイトの公開鍵および32バイトの整数ではなく、単一の20バイトハッシュ値を使用してコンパクトに表すことであり、これは、はるかに管理しやすく、ユーザフレンドリなアドレスフォーマットを生み出す。これはまた、ロッキングスクリプトにどの鍵が含まれているかをすべての関係者が知ることなくアドレスが構築され得るという点において、プライバシーのさらなるレベルを可能にする。しかしながらこれには、変更されない限り、アドレスは、P2MSテンプレートをポピュレートするために必要とされるデータのすべてを通信するとは限らないという兼ね合いがある。これは、以下の2つのオプションを残している。
(i)組み合わせられた公開鍵ハッシュに支払うために、このアドレスが対応するテンプレートスクリプトをTMultiSig→
(i)組み合わせられた公開鍵ハッシュに支払うために、このアドレスが対応するテンプレートスクリプトをTMultiSig→
に変更すること、または
(ii)支払人/被支払人に、別個のチャネル(たとえば、サイドチャネル301)を介した生形態のデータ(すなわち、m//n//P1//P2//…//Pn)またはメッセージを提供すること。
(ii)支払人/被支払人に、別個のチャネル(たとえば、サイドチャネル301)を介した生形態のデータ(すなわち、m//n//P1//P2//…//Pn)またはメッセージを提供すること。
これは、ロッキングスクリプトからアドレスを引き出すことは可能であるが、その逆は不可能である、すなわち
AType(Data)←LSType(Data)
であるので、この方法を使用すると、アドレスAMultiSigとロッキングスクリプトLMultiSigとの間の双方向関係を壊し得ることを意味する。
AType(Data)←LSType(Data)
であるので、この方法を使用すると、アドレスAMultiSigとロッキングスクリプトLMultiSigとの間の双方向関係を壊し得ることを意味する。
しかしながら、これはすべての場合において必ずしもそうであるとは限らないことに留意されたい。実際は、ロッキングスクリプトが明示的にハッシュに支払う場合、アドレスにデータのハッシュを使用すると、双方向の関係が保持されることが可能になる。
表現としてデータの関数を使用する利点は、それによりアドレス内でロッキングスクリプトのよりコンパクトな表現が可能になることであり、データのハッシュ関数を使用すると、スクリプトテンプレートをポピュレートするために使用されるデータの一意表現が可能になる。
データを表す代替方法は、データをアドレスの一部として含めることによってデータ自体を使用することである。たとえば、ペイツーマルチシグネチャ(P2MS)ロッキングスクリプトの場合、m、n、P1、P2、…Pnが、以下に示すように、P2MSアドレス自体にデータとして含まれ得る。
AMultiSig=Base58(<Prefix><m//n//P1//P2//…//Pn><Checksum>)
ここではアドレスAMultiSigは、テンプレートTMultiSigを識別できるように<Prefix>が選択されると仮定すると、以下に示すように、マルチシグネチャロッキングスクリプトLMultiSigを構築するための必要な情報すべてを含む。
LSMultiSig=<m><P1>…<Pn><n>OP_CHECKMULTISIG
AMultiSig=Base58(<Prefix><m//n//P1//P2//…//Pn><Checksum>)
ここではアドレスAMultiSigは、テンプレートTMultiSigを識別できるように<Prefix>が選択されると仮定すると、以下に示すように、マルチシグネチャロッキングスクリプトLMultiSigを構築するための必要な情報すべてを含む。
LSMultiSig=<m><P1>…<Pn><n>OP_CHECKMULTISIG
このようにしてデータを直接使用すると、アドレスが以前に記された有益な特性を保持することを可能にし、すなわち、この場合アドレスおよびロッキングスクリプトは、双方向の関係を有し、したがって、テンプレートスクリプトTMultiSigの知識を与えられると、互いから引き出されることが可能である。
AMultiSig(m、n、P1、P2、…Pn)⇔LSMultiSig(m、n、P1、P2、…Pn)
AMultiSig(m、n、P1、P2、…Pn)⇔LSMultiSig(m、n、P1、P2、…Pn)
明らかに、データの表現として実際のデータを使用することが適当である多くの他の使用事例があり、これらの場合の多くにおいて、ユーザがロッキングスクリプト全体を簡潔に通信することを可能にするために双方向の関係を保持することが望ましい。
データを表現として使用する1つの利点は、スクリプトテンプレートタイプをポピュレートするために必要とされるすべてのデータを、アドレスから引き出すことができることである。これは、アドレスプレフィックスとスクリプトテンプレートとの間のマッピングが、公に知られていて、検証可能であるとすれば、アドレスが「支払われる」スクリプト全体を伝えるための媒体として使用され続けることがあることを意味する。他の利点は、事例の大多数において双方向の関係、すなわちAType(Data)⇔LSType(Data)を維持することであり、ロッキングスクリプトは、単一のメッセージで完全に通信でき、トランザクションをポピュレートするデータがたとえば手入力中のユーザエラーについて(アドレスにチェックサムを使用して)エラーチェックされることを可能にし、ロッキングスクリプトデータは透過的であり、トランザクションを行っている関係者に信用を与え得る。
いくつかの事例が、アドレスでデータを表す方法の組み合わせに適している場合があることもまた考えられる。たとえば、以下のアドレスフォーマットは、先に示した同じP2MSスクリプトに構築されてもよい。
このアドレスは、何人の関係者が関与しているかおよび署名者のしきい値数を通信する間、公開鍵のプライバシーを保護するために、データ自体の使用(R(Data)=Data)およびデータのハッシュを使用すること(R(Data)=H(Data))を組み合わせる。
結論
開示される技法の他の変形または使用事例は、本明細書の開示を与えられれば当業者に明らかになり得る。本開示の範囲は、説明される実施形態ではなく、添付の特許請求の範囲だけによって限定される。
開示される技法の他の変形または使用事例は、本明細書の開示を与えられれば当業者に明らかになり得る。本開示の範囲は、説明される実施形態ではなく、添付の特許請求の範囲だけによって限定される。
たとえば、上のいくつかの実施形態は、ビットコインネットワーク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のテンプレート出力スクリプトを識別するための第1のプレフィックス構成要素を含み、第1のデータ構成要素が、第1のテンプレート出力スクリプトをポピュレートするために必要とされる1つまたは複数のデータ項目を表す、生成するステップ
を含み、
第1のデータ構成要素が、第1のテンプレート出力スクリプトをポピュレートするために必要とされる複数のデータ項目に基づいて生成される、方法。
第1のテンプレート出力スクリプトに基づいて第1のブロックチェーンアドレスを生成するステップであって、第1のブロックチェーンアドレスが、第1のテンプレート出力スクリプトを識別するための第1のプレフィックス構成要素を含み、第1のデータ構成要素が、第1のテンプレート出力スクリプトをポピュレートするために必要とされる1つまたは複数のデータ項目を表す、生成するステップ
を含み、
第1のデータ構成要素が、第1のテンプレート出力スクリプトをポピュレートするために必要とされる複数のデータ項目に基づいて生成される、方法。
陳述2 第1のブロックチェーンアドレスを記憶するステップおよび/または第1のブロックチェーンアドレスを第2の関係者に利用可能にするステップを含む、陳述1の方法。
陳述3 第1のブロックチェーンアドレスを第2の関係者に利用可能にするステップが、第1のブロックチェーンアドレスを第2の関係者に送信するステップを含む、陳述2の方法。
陳述4 第1のブロックチェーンアドレスを上記記憶するステップおよび/または利用可能にするステップが、第1のブロックチェーンアドレスを機械可読光ラベルとして表すステップを含む、陳述2または陳述3の方法。
陳述5 第1のデータ構成要素が、第1のテンプレート出力スクリプトをポピュレートするために必要とされる複数のデータ項目に基づいて生成される、陳述1から4のいずれかの方法。
陳述6 第1のプレフィックス構成要素が、人間が読み取れる文字列を含む第1のプレフィックスサブ構成要素を含む、陳述1から5のいずれかの方法。
陳述7 第1のプレフィックス構成要素が、第1のテンプレート出力スクリプトに関数を適用することによって生成された第2のプレフィックスサブ構成要素を含む、陳述1から6のいずれかの方法。
陳述8 第1のテンプレート出力スクリプトに関数を適用することが、第1のテンプレート出力スクリプトに1つまたは複数のハッシュ関数を適用することを含む、陳述7の方法。
陳述9 第2のプレフィックスサブ構成要素が、第1のテンプレート出力スクリプトに関数を適用した結果の一部のみを含む、陳述7または陳述8の方法。
陳述10 第1のプレフィックス構成要素が、第3のプレフィックスサブ構成要素を含み、第3のプレフィックスサブ構成要素が、公開鍵の少なくとも一部を含む、陳述1から9のいずれかの方法。
陳述11 公開鍵が、ブロックチェーンノードに関連している、陳述10の方法。
いくつかの例では、第1のプレフィックス構成要素は、第1、第2、および第3のプレフィックスサブ構成要素のうちの1つ、一部、または全部の組合わせを含む場合がある。
陳述12 第1のデータ構成要素が、複数のデータ項目のうちの少なくとも1つを含む第1のデータサブ構成要素を含む、陳述1から11のいずれかの方法。
陳述13 第1のデータサブ構成要素が、複数のデータ項目を含む、陳述12の方法。
陳述14 第1のデータ構成要素が、複数のデータ項目に関数を適用することによって生成された第2のデータサブ構成要素を含む、陳述1から13のいずれかの方法。
陳述15 複数のデータ項目に関数を適用することが、複数のデータ項目に1つまたは複数のハッシュ関数を適用することを含む、陳述13または陳述14の方法。
陳述16 第1のプレフィックス構成要素および/または第1のデータ構成要素が、第1のプレフィックス構成要素のそれぞれの長さおよび第1のデータ構成要素のそれぞれの長さを示すそれぞれのサブ構成要素を含む、陳述1から15のいずれかの方法。
陳述17 第1のプレフィックス構成要素が、第1、第2、および/もしくは第3のプレフィックスサブ構成要素のそれぞれの長さを示す1つまたは複数のそれぞれのサブ構成要素を含み、かつ/または
第1のデータ構成要素が、第1および/もしくは第2のデータサブ構成要素のそれぞれの長さを示す1つまたは複数のそれぞれのサブ構成要素を含む、
陳述1から16のいずれかの方法。
第1のデータ構成要素が、第1および/もしくは第2のデータサブ構成要素のそれぞれの長さを示す1つまたは複数のそれぞれのサブ構成要素を含む、
陳述1から16のいずれかの方法。
陳述18 第1のブロックチェーンアドレスが、第1のチェックサム構成要素を含む、陳述1から17のいずれかの方法。
陳述19 第1のブロックチェーンアドレスが、base58符号化を使用して表される、陳述1から18のいずれかの方法。
陳述20 複数のデータ項目を第2の関係者に送信するステップを含む、陳述2またはそれに従属するいずれかの陳述の方法。
陳述21 対応するブロックチェーンアドレスに基づいてブロックチェーントランザクションの出力スクリプトを生成するコンピュータ実装方法であって、ブロックチェーンアドレスが、プレフィックス構成要素と、データ構成要素とを含み、方法が、第2の関係者によって実行され、
第1のブロックチェーントランザクションの第1の出力スクリプトを生成するステップであって、第1の出力スクリプトが、第1のブロックチェーンアドレスに基づいて生成され、第1のブロックチェーンアドレスが、第1のテンプレート出力スクリプトを識別する第1のプレフィックス構成要素を含み、第1のデータ構成要素が、第1のテンプレート出力スクリプトをポピュレートするために必要とされる1つまたは複数のデータ項目を表す、生成するステップ
を含み、
第1のデータ構成要素が、第1のテンプレート出力スクリプトをポピュレートするために必要とされる複数のデータ項目に基づいて生成される、方法。
第1のブロックチェーントランザクションの第1の出力スクリプトを生成するステップであって、第1の出力スクリプトが、第1のブロックチェーンアドレスに基づいて生成され、第1のブロックチェーンアドレスが、第1のテンプレート出力スクリプトを識別する第1のプレフィックス構成要素を含み、第1のデータ構成要素が、第1のテンプレート出力スクリプトをポピュレートするために必要とされる1つまたは複数のデータ項目を表す、生成するステップ
を含み、
第1のデータ構成要素が、第1のテンプレート出力スクリプトをポピュレートするために必要とされる複数のデータ項目に基づいて生成される、方法。
陳述22 第1のプレフィックス構成要素が、1バイトよりも大きい、陳述21の方法。
陳述23 第1の関係者から第1のブロックチェーンアドレスを取得するステップを含む、陳述21または陳述22の方法。
陳述24 第1のプレフィックス構成要素に基づいて複数の候補テンプレート出力スクリプトから第1のテンプレート出力スクリプトを識別するステップを含む、陳述21から23のいずれかの方法。
陳述25 第1のデータ構成要素によって表される1つまたは複数のデータ項目に基づいて第1の出力スクリプトをポピュレートするステップを含む、陳述21から24のいずれかの方法。
陳述26 第1のブロックチェーントランザクションを生成するステップと、
ブロックチェーンで公開される1つまたは複数のブロックチェーンノードに第1のブロックチェーントランザクションを送信するステップと
を含む、陳述21から陳述25のいずれかの方法。
ブロックチェーンで公開される1つまたは複数のブロックチェーンノードに第1のブロックチェーントランザクションを送信するステップと
を含む、陳述21から陳述25のいずれかの方法。
陳述27 コンピュータ機器であって、
1つまたは複数のメモリユニットを備えるメモリと、
1つまたは複数の処理ユニットを備える処理装置とを備え、メモリが、処理装置で動作するように配列されたコードを記憶し、コードが、処理装置上にあるとき、陳述1から26のいずれかの方法を実行するように構成された、コンピュータ機器。
1つまたは複数のメモリユニットを備えるメモリと、
1つまたは複数の処理ユニットを備える処理装置とを備え、メモリが、処理装置で動作するように配列されたコードを記憶し、コードが、処理装置上にあるとき、陳述1から26のいずれかの方法を実行するように構成された、コンピュータ機器。
陳述28 コンピュータ可読ストレージ上で実施されるコンピュータプログラムであって、陳述26のコンピュータ機器上で動作するとき、陳述1から26のいずれかの方法を実行するように構成された、コンピュータプログラム。
本明細書で開示される別の態様によれば、第1の関係者および第2の関係者の活動を含む方法が提供され得る。
本明細書で開示される別の態様によれば、第1の関係者および第2の関係者のコンピュータ機器を含むシステムが提供され得る。
102 コンピュータ端末
103 関係者
104 ノード
105 クライアントアプリケーション
106 ブロックチェーンネットワーク
150 ブロックチェーン
151 ブロック
152 トランザクション
154 プール
201 ヘッダ
202 入力フィールド
203 出力フィールド
300 システム
301 第1の関係者
302 第2の関係者
103 関係者
104 ノード
105 クライアントアプリケーション
106 ブロックチェーンネットワーク
150 ブロックチェーン
151 ブロック
152 トランザクション
154 プール
201 ヘッダ
202 入力フィールド
203 出力フィールド
300 システム
301 第1の関係者
302 第2の関係者
Claims (28)
- ブロックチェーントランザクションの対応するテンプレート出力スクリプトに基づいてブロックチェーンアドレスを生成するコンピュータ実装方法であって、前記ブロックチェーンアドレスが、プレフィックス構成要素と、データ構成要素とを含み、前記方法が、第1の関係者によって実行され、
第1のテンプレート出力スクリプトに基づいて第1のブロックチェーンアドレスを生成するステップであって、前記第1のブロックチェーンアドレスが、第1のテンプレート出力スクリプトを識別するための第1のプレフィックス構成要素を含み、第1のデータ構成要素が、前記第1のテンプレート出力スクリプトをポピュレートするために必要とされる1つまたは複数のデータ項目を表す、生成するステップ
を含み、
前記第1のデータ構成要素が、前記第1のテンプレート出力スクリプトをポピュレートするために必要とされる複数のデータ項目に基づいて生成される、方法。 - 前記第1のブロックチェーンアドレスを記憶するステップおよび/または前記第1のブロックチェーンアドレスを第2の関係者に利用可能にするステップを含む、請求項1に記載の方法。
- 前記第1のブロックチェーンアドレスを前記第2の関係者に利用可能にするステップが、前記第1のブロックチェーンアドレスを前記第2の関係者に送信するステップを含む、請求項2に記載の方法。
- 前記第1のブロックチェーンアドレスを前記記憶するステップおよび/または利用可能にするステップが、前記第1のブロックチェーンアドレスを機械可読光ラベルとして表すステップを含む、請求項2または請求項3に記載の方法。
- 前記第1のプレフィックス構成要素が、1バイトよりも大きい、請求項1から4のいずれか一項に記載の方法。
- 前記第1のプレフィックス構成要素が、人間が読み取れる文字列を含む第1のプレフィックスサブ構成要素を含む、請求項1から5のいずれか一項に記載の方法。
- 第1のプレフィックス構成要素が、前記第1のテンプレート出力スクリプトに関数を適用することによって生成された第2のプレフィックスサブ構成要素を含む、請求項1から6のいずれか一項に記載の方法。
- 前記第1のテンプレート出力スクリプトに前記関数を適用することが、前記第1のテンプレート出力スクリプトに1つまたは複数のハッシュ関数を適用することを含む、請求項7に記載の方法。
- 前記第2のプレフィックスサブ構成要素が、前記第1のテンプレート出力スクリプトに前記関数を適用した結果の一部のみを含む、請求項7または請求項8に記載の方法。
- 前記第1のプレフィックス構成要素が、第3のプレフィックスサブ構成要素を含み、前記第3のプレフィックスサブ構成要素が、公開鍵の少なくとも一部を含む、請求項1から9のいずれか一項に記載の方法。
- 前記公開鍵が、ブロックチェーンノードに関連している、請求項10に記載の方法。
- 前記第1のデータ構成要素が、前記複数のデータ項目のうちの少なくとも1つを含む第1のデータサブ構成要素を含む、請求項1から11のいずれか一項に記載の方法。
- 前記第1のデータサブ構成要素が、前記複数のデータ項目を含む、請求項12に記載の方法。
- 前記第1のデータ構成要素が、前記複数のデータ項目に関数を適用することによって生成された第2のデータサブ構成要素を含む、請求項1から13のいずれか一項に記載の方法。
- 前記複数のデータ項目に関数を適用することが、前記複数のデータ項目に1つまたは複数のハッシュ関数を適用することを含む、請求項13または請求項14に記載の方法。
- 前記第1のプレフィックス構成要素および/または前記第1のデータ構成要素が、前記第1のプレフィックス構成要素のそれぞれの長さおよび前記第1のデータ構成要素のそれぞれの長さを示すそれぞれのサブ構成要素を含む、請求項1から15のいずれか一項に記載の方法。
- 前記第1のプレフィックス構成要素が、第1、第2、および/もしくは第3のプレフィックスサブ構成要素のそれぞれの長さを示す1つまたは複数のそれぞれのサブ構成要素を含み、かつ/または
前記第1のデータ構成要素が、前記第1および/もしくは第2のデータサブ構成要素のそれぞれの長さを示す1つまたは複数のそれぞれのサブ構成要素を含む、
請求項1から16のいずれか一項に記載の方法。 - 前記第1のブロックチェーンアドレスが、第1のチェックサム構成要素を含む、請求項1から17のいずれか一項に記載の方法。
- 前記第1のブロックチェーンアドレスが、base58符号化を使用して表される、請求項1から18のいずれか一項に記載の方法。
- 前記複数のデータ項目を前記第2の関係者に送信するステップを含む、請求項2またはそれに従属するいずれか一項に記載の方法。
- 対応するブロックチェーンアドレスに基づいてブロックチェーントランザクションの出力スクリプトを生成するコンピュータ実装方法であって、前記ブロックチェーンアドレスが、プレフィックス構成要素と、データ構成要素とを含み、前記方法が、第2の関係者によって実行され、
第1のブロックチェーントランザクションの第1の出力スクリプトを生成するステップであって、前記第1の出力スクリプトが、第1のブロックチェーンアドレスに基づいて生成され、前記第1のブロックチェーンアドレスが、第1のテンプレート出力スクリプトを識別する第1のプレフィックス構成要素を含み、第1のデータ構成要素が、前記第1のテンプレート出力スクリプトをポピュレートするために必要とされる1つまたは複数のデータ項目を表す、生成するステップ
を含み、
前記第1のデータ構成要素が、前記第1のテンプレート出力スクリプトをポピュレートするために必要とされる複数のデータ項目に基づいて生成される、方法。 - 前記第1のプレフィックス構成要素が、1バイトよりも大きい、請求項21に記載の方法。
- 第1の関係者から前記第1のブロックチェーンアドレスを取得するステップを含む、請求項21または請求項22に記載の方法。
- 前記第1のプレフィックス構成要素に基づいて複数の候補テンプレート出力スクリプトから前記第1のテンプレート出力スクリプトを識別するステップを含む、請求項21から23のいずれか一項に記載の方法。
- 前記第1のデータ構成要素によって表される前記1つまたは複数のデータ項目に基づいて前記第1の出力スクリプトをポピュレートするステップを含む、請求項21から24のいずれか一項に記載の方法。
- 前記第1のブロックチェーントランザクションを生成するステップと、
前記ブロックチェーンで公開される1つまたは複数のブロックチェーンノードに前記第1のブロックチェーントランザクションを送信するステップと
を含む、請求項21から請求項25のいずれか一項に記載の方法。 - コンピュータ機器であって、
1つまたは複数のメモリユニットを備えるメモリと、
1つまたは複数の処理ユニットを備える処理装置とを備え、前記メモリが、前記処理装置で動作するように配列されたコードを記憶し、前記コードが、前記処理装置上にあるとき、請求項1から26のいずれか一項の方法を実行するように構成された、コンピュータ機器。 - コンピュータ可読ストレージ上で実施されるコンピュータプログラムであって、コンピュータ機器上で動作するとき、請求項1から26のいずれか一項に記載の方法を実行するように構成された、コンピュータプログラム。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GB2008950.4A GB2596065A (en) | 2020-06-12 | 2020-06-12 | Generating blockchain addresses |
GB2008950.4 | 2020-06-12 | ||
PCT/EP2021/062611 WO2021249716A1 (en) | 2020-06-12 | 2021-05-12 | Generating blockchain addresses |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2023529468A true JP2023529468A (ja) | 2023-07-10 |
Family
ID=71835498
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2022576153A Pending JP2023529468A (ja) | 2020-06-12 | 2021-05-12 | ブロックチェーンアドレスの生成 |
Country Status (6)
Country | Link |
---|---|
US (1) | US20230230052A1 (ja) |
EP (1) | EP4136560A1 (ja) |
JP (1) | JP2023529468A (ja) |
CN (1) | CN115917546A (ja) |
GB (1) | GB2596065A (ja) |
WO (1) | WO2021249716A1 (ja) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112039661A (zh) * | 2020-08-20 | 2020-12-04 | 上海简苏网络科技有限公司 | 携带指定信息的地址编码方法及装置 |
WO2023117230A1 (en) * | 2021-12-21 | 2023-06-29 | Nchain Licensing Ag | Blockchain transaction |
CN116051278A (zh) * | 2022-12-01 | 2023-05-02 | 北京中科深智科技有限公司 | 一种基于区块链数字人捏造和鉴权使用与交易的方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB201701589D0 (en) * | 2017-01-31 | 2017-03-15 | Nchain Holdings Ltd | Computer-implemented system and method |
-
2020
- 2020-06-12 GB GB2008950.4A patent/GB2596065A/en active Pending
-
2021
- 2021-05-12 WO PCT/EP2021/062611 patent/WO2021249716A1/en unknown
- 2021-05-12 CN CN202180041832.6A patent/CN115917546A/zh active Pending
- 2021-05-12 US US18/009,319 patent/US20230230052A1/en active Pending
- 2021-05-12 JP JP2022576153A patent/JP2023529468A/ja active Pending
- 2021-05-12 EP EP21725508.2A patent/EP4136560A1/en active Pending
Also Published As
Publication number | Publication date |
---|---|
GB202008950D0 (en) | 2020-07-29 |
CN115917546A (zh) | 2023-04-04 |
US20230230052A1 (en) | 2023-07-20 |
WO2021249716A1 (en) | 2021-12-16 |
EP4136560A1 (en) | 2023-02-22 |
GB2596065A (en) | 2021-12-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2023529468A (ja) | ブロックチェーンアドレスの生成 | |
KR20230101883A (ko) | 머클 증명 엔티티 | |
US20220309504A1 (en) | Multi-criteria blockchain protocol | |
KR20240100377A (ko) | 분산된 블록체인 기능들을 위한 방법들 및 시스템들 | |
KR20240100373A (ko) | 분산된 블록체인 기능들을 위한 방법들 및 시스템들 | |
KR20240088974A (ko) | 잠금 스크립트의 전파 | |
JP2023529467A (ja) | カスタムトランザクションスクリプト | |
WO2022268430A1 (en) | Tiered consensus | |
WO2022268429A1 (en) | Multi-level blockchain | |
JP2024518079A (ja) | マルチパーティブロックチェーンアドレス方式 | |
JP2023547715A (ja) | マークルプルーフエンティティ | |
US20240214179A1 (en) | Blockchain-implemented hash function | |
US20240205030A1 (en) | Uniform resource identifier | |
KR20240034793A (ko) | 블록체인 트랜잭션들에 대한 조건들의 시행 | |
KR20240037243A (ko) | 블록체인 트랜잭션들에 대한 조건들의 시행 | |
KR20240012503A (ko) | 부분적 sha 기반 해시 함수 | |
KR20240093714A (ko) | 분산된 블록체인 기능들을 위한 방법들 및 시스템들 | |
KR20240093494A (ko) | 샤딩된 머클 트리 | |
KR20240096560A (ko) | 분산된 블록체인 기능들을 위한 방법들 및 시스템들 | |
WO2022101023A1 (en) | Key generation method |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20240412 |