JP2022548553A - ブロックチェーンからのプログラムの実行 - Google Patents
ブロックチェーンからのプログラムの実行 Download PDFInfo
- Publication number
- JP2022548553A JP2022548553A JP2022515632A JP2022515632A JP2022548553A JP 2022548553 A JP2022548553 A JP 2022548553A JP 2022515632 A JP2022515632 A JP 2022515632A JP 2022515632 A JP2022515632 A JP 2022515632A JP 2022548553 A JP2022548553 A JP 2022548553A
- Authority
- JP
- Japan
- Prior art keywords
- transaction
- script
- value
- language
- code
- 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 278
- 238000000034 method Methods 0.000 claims abstract description 76
- 238000012795 verification Methods 0.000 claims abstract description 19
- 238000005065 mining Methods 0.000 claims description 35
- 230000015654 memory Effects 0.000 claims description 21
- 238000012545 processing Methods 0.000 claims description 16
- 230000001419 dependent effect Effects 0.000 claims description 13
- 238000004590 computer program Methods 0.000 claims description 2
- 230000006870 function Effects 0.000 description 12
- 230000008569 process Effects 0.000 description 12
- 230000000644 propagated effect Effects 0.000 description 9
- 230000003287 optical effect Effects 0.000 description 6
- 238000010586 diagram Methods 0.000 description 4
- 230000001902 propagating effect Effects 0.000 description 4
- 230000007246 mechanism Effects 0.000 description 3
- 238000012546 transfer Methods 0.000 description 3
- 238000004422 calculation algorithm Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 239000000284 extract Substances 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 238000010200 validation analysis Methods 0.000 description 2
- 230000009471 action Effects 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000008901 benefit 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
- 230000008859 change Effects 0.000 description 1
- 238000010205 computational analysis Methods 0.000 description 1
- 230000001143 conditioned effect Effects 0.000 description 1
- 239000000428 dust Substances 0.000 description 1
- 238000011156 evaluation Methods 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 239000010979 ruby Substances 0.000 description 1
- 229910001750 ruby Inorganic materials 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/20—Software design
-
- 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
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
-
- 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/40—Authorisation, 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/401—Transaction verification
-
- 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
- G06Q40/00—Finance; Insurance; Tax strategies; Processing of corporate or income taxes
- G06Q40/04—Trading; Exchange, e.g. stocks, commodities, derivatives or currency exchange
-
- 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
-
- 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
- G06Q2220/00—Business processing using cryptography
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Business, Economics & Management (AREA)
- Computer Security & Cryptography (AREA)
- Accounting & Taxation (AREA)
- Computing Systems (AREA)
- Finance (AREA)
- Signal Processing (AREA)
- Computer Networks & Wireless Communication (AREA)
- General Business, Economics & Management (AREA)
- Strategic Management (AREA)
- Databases & Information Systems (AREA)
- Marketing (AREA)
- Data Mining & Analysis (AREA)
- Economics (AREA)
- Technology Law (AREA)
- Development Economics (AREA)
- Health & Medical Sciences (AREA)
- Bioethics (AREA)
- General Health & Medical Sciences (AREA)
- Computer Hardware Design (AREA)
- Financial Or Insurance-Related Operations Such As Payment And Settlement (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
ブロックチェーンネットワークのノードにより実行される方法は、ブロックチェーン上の第1トランザクションからのロックスクリプトにアクセスするステップと、オンチェーンに未だ記録されていない第2トランザクションを受信するステップであって、前記第2トランザクションはアンロックスクリプトを含む、ステップと、前記第1トランザクション又は前記ブロックチェーン上の別のトランザクションから、前記第1言語以外の第2言語で作成されたコードの部分を抽出するステップと、前記第2言語で前記抽出したコードの部分を実行するステップであって、その結果として、前記コードが少なくとも1つの値を生成する、ステップと、前記ロックスクリプトにより読み取り可能な記憶位置に、この値を書き込むステップと、前記第2トランザクションを検証するために、前記アンロックスクリプトと一緒に前記ロックスクリプトを実行するステップであって、前記ロックスクリプトは前記記憶位置から前記値を読み取るよう構成され、前記ロックスクリプトに従う検証の条件は前記値に依存する。
Description
本開示は、ブロックチェーン上のトランザクションに格納されたプログラムを実行する方法に関する。
ブロックチェーンとは、分散型データ構造の形式を指し、ブロックチェーンの複製のコピーは、ピアツーピア(peer-to-peer (P2P))ネットワーク内の複数のノードのそれぞれにおいて維持される。ブロックチェーンは、データのブロックのチェーンを含み、各ブロックは1つ以上のトランザクションを含む。各トランザクションは、1つ以上のブロックに渡り得るシーケンスの中の先行するトランザクションを指してよい。トランザクションは、新しいブロックに含まれるようネットワークへ提出され得る。新しいブロックは、「マイニング」として知られる処理により生成される。「マイニング」は、複数のマイニングノードの各々が「proof-of-work」を実行するために競争する、つまりブロックに含まれることを待っている保留中のトランザクションのプールに基づき、暗号パズルを解くことを含む。
従来、ブロックチェーン内のトランザクションは、デジタルアセット、すなわち、価値のストアとして機能するデータを伝達するために使用される。しかし、ブロックチェーンの上に追加の機能を積み重ねるために、ブロックチェーンを利用することもできる。例えば、ブロックチェーンプロトコルは、トランザクションのアウトプットに追加のユーザデータを格納することを可能にしてよい。現代のブロックチェーンは、単一トランザクション内に格納できる最大データ容量を増加させ、より複雑なデータを組み込むことを可能にしている。例えば、これは、ブロックチェーン内に電子ドキュメント(electronic document)、或いはオーディオ若しくはビデオデータを格納するために使用され得る。
ネットワーク内の各ノードは、転送、マイニング、及び記憶のうちの任意の1、2、又は3つ全部の役割を有することができる。転送ノードは、ネットワークのノードを通じてトランザクションを伝播させる。マイニングノードは、トランザクションのマイニングを実行してブロックにする。記憶ノードは、それぞれ、ブロックチェーンのマイニングされたブロックの彼ら自身のコピーを格納する。トランザクションをブロックチェーンに記録させるために、パーティは、該トランザクションを、伝播させるようにネットワークのノードのうちの1つへ送信する。トランザクションを受信したマイニングノードは、トランザクションをマイニングして新しいブロックにするよう競争してよい。各ノードは、トランザクションが有効であるための1つ以上の条件を含む同じノードプロトコルに関するよう構成される。無効なトランザクションは、伝播されず、マイニングされてブロックにされることもない。トランザクションが検証され、それによってブロックチェーンに受け入れられたと仮定すると、(任意のユーザデータを含む)トランザクションは、従って、不変の公開レコードとしてP2Pネットワークの各ノードに格納されたままである。
最新のブロックを生成するためにproof-of-workパズルを解くことに成功したマイナーは、標準的に、デジタルアセットの新しい額を生成する「生成トランザクション(generation transaction)」と呼ばれる新しいトランザクションにより報酬を受ける。proof-of-workは、ブロックをマイニングするために膨大な量の計算リソースを必要とするので、及び二重支払いの企てを含むブロックは他のノードにより受け入れられない可能性があるので、マイナーが、彼らのブロックに二重支払いトランザクションを含めることによりシステムを騙さないことを奨励する。
「アウトプットに基づく」モデル(UTXOに基づくモデルと呼ばれることもある)では、所与のトランザクションのデータ構造は、1つ以上のインプット及び1つ以上のアウトプットを含む。任意の使用可能アウトプットは、時にUTXO(「unspent transaction output(未使用トランザクションアウトプット)」)と呼ばれる、デジタルアセットの額を指定する要素を含む。アウトプットは、アウトプットを償還(redeem)するための条件を指定するロックスクリプトを更に含んでよい。各インプットは、先行するトランザクション内のそのようなアウトプットへのポインタを含み、ポイントされたアウトプットのロックスクリプトをアンロックするためのアンロックスクリプトを更に含んでよい。従って、トランザクションのペアを考えるとき、それらを、第1トランザクション及び第2トランザクション(又は「ターゲット」トランザクション)と呼ぶ。第1トランザクションは、デジタルアセットの額を指定する、及びアウトプットをアンロックする1つ以上の条件を定義するロックスクリプトを含む、少なくとも1つのアウトプットを含む。第2のターゲットトランザクションは、第1トランザクションのアウトプットへのポインタと、第1トランザクションのアウトプットをアンロックするためのアンロックスクリプトと、を含む少なくとも1つのインプットを含む。
このようなモデルでは、第2のターゲットトランザクションが、伝搬されてブロックチェーンに記録されるようP2Pネットワークへ送信されると、各ノードにおいて適用される有効性のための基準のうちの1つは、アンロックスクリプトが第1トランザクションのロックスクリプト内で定義された1つ以上の条件のうちの全部を満たすことである。もう1つは、第1トランザクションのアウトプットが、別の前の有効なトランザクションによって未だ償還されていないことである。これらの条件のうちのいずれかに従いターゲットトランザクションが無効であると分かった任意のノードは、該トランザクションを伝搬させず、ブロックチェーンに記録させるためにマイニングしてブロックに含めることもしない。
トランザクションモデルの代替のタイプは、アカウントに基づくモデルである。この場合、各トランザクションは、過去の一連のトランザクションにおいて、先行するトランザクションのUTXOに戻って参照することによって移転される量を定義するのではなく、絶対的な口座(アカウント)残高を参照することによって移転される。全てのアカウントの現在の状態は、ブロックチェーンとは別個のマイナーによって格納され、絶えず更新される。状態は、トランザクションに含まれ該トランザクションがブロックチェーンネットワークのノードにより検証されると実行されるスマートコントラクトを実行することにより変更される。
アウトプットに基づくモデルにおいて使用されるロックスクリプト及びアンロックスクリプトは、標準的に、アカウントに基づくモデルにおけるスマートコントラクトよりも限定されたスクリプト言語を利用する。例えば、アウトプットに基づくモデルは、標準的に、Script(capital S)と簡単に命名される言語のようなスタックに基づく言語を利用する。スタックに基づく言語は、「チューリング完全(Turing complete)」ではない。これは、ループのような特定のタイプのアルゴリズムを実施できないことを意味する。
この又は他の理由で、ブロックチェーンネットワークのノードにより認識されるスクリプト言語の限定により制限されずに、アウトプットに基づくモデルにおけるトランザクションのロックスクリプトに、検証のための追加基準を包含できることが望ましい。例えば、アカウントに基づくモデルのスマートコントラクトに似た機能を、アウトプットに基づくモデル(例えば、UTXOに基づくモデル)において可能にすることが望ましい。別の例として、第2言語に堪能なプログラマにより記述された条件を、主に第1言語に基づき動作するアウトプットに基づくモデルのロックスクリプトに組み込み可能にすることが望ましい。
本願明細書に開示される1つの態様によると、ブロックチェーンネットワークのノードにより実行される、コンピュータにより実施される方法であって、ブロックチェーンのコピーが前記ブロックチェーンネットワークの前記ノードのうちの少なくとも幾つかに渡り維持され、前記ブロックチェーンはブロックのチェーンを含み、各ブロックは1つ以上のトランザクションを含み、各トランザクションは1つ以上のアウトプットを含み、各アウトプットは第1言語で作成されたロックスクリプトを含む、方法が提供される。前記方法は、
a)前記トランザクションのうちの第1トランザクションの少なくとも第1アウトプットから前記ロックスクリプトにアクセスするステップであって、前記第1アウトプットの前記ロックスクリプトは、前記第1言語で、前記第1アウトプットをアンロックするための1つ以上の条件を指定する、ステップと、
b)ブロックチェーンに未だ記録されていない第2トランザクションを受信するステップであって、前記第2トランザクションは前記第1言語で作成されたアンロックスクリプトを含む、ステップと、
c)前記第1トランザクション又は前記ブロックチェーン上の前記トランザクションのうちの別のトランザクションから、前記第1言語以外の第2言語で作成されたコードの部分を抽出するステップと、
d)前記第2言語で前記抽出したコードの部分を実行するステップであって、その結果として、前記コードが少なくとも1つの第1値を生成する、ステップと、
e)前記ロックスクリプトにより読み取り可能な記憶位置に、前記第1言語で前記第1値を書き込むステップと、
f)前記第2トランザクションからの前記アンロックスクリプトと一緒に、前記第1言語で、前記第1トランザクションの前記第1アウトプットからの前記ロックスクリプトを実行するステップであって、それにより、前記1つ以上の条件を評価する、ステップと、
を含み、
前記方法は、前記1つ以上の条件が満たされることを条件として、前記第2トランザクションを評価するステップを含む、方法。前記アンロックスクリプトは、前記記憶位置から前記第1値を読み取るよう構成され、前記1つ以上の条件は、前記第1値に依存する条件を含む。
a)前記トランザクションのうちの第1トランザクションの少なくとも第1アウトプットから前記ロックスクリプトにアクセスするステップであって、前記第1アウトプットの前記ロックスクリプトは、前記第1言語で、前記第1アウトプットをアンロックするための1つ以上の条件を指定する、ステップと、
b)ブロックチェーンに未だ記録されていない第2トランザクションを受信するステップであって、前記第2トランザクションは前記第1言語で作成されたアンロックスクリプトを含む、ステップと、
c)前記第1トランザクション又は前記ブロックチェーン上の前記トランザクションのうちの別のトランザクションから、前記第1言語以外の第2言語で作成されたコードの部分を抽出するステップと、
d)前記第2言語で前記抽出したコードの部分を実行するステップであって、その結果として、前記コードが少なくとも1つの第1値を生成する、ステップと、
e)前記ロックスクリプトにより読み取り可能な記憶位置に、前記第1言語で前記第1値を書き込むステップと、
f)前記第2トランザクションからの前記アンロックスクリプトと一緒に、前記第1言語で、前記第1トランザクションの前記第1アウトプットからの前記ロックスクリプトを実行するステップであって、それにより、前記1つ以上の条件を評価する、ステップと、
を含み、
前記方法は、前記1つ以上の条件が満たされることを条件として、前記第2トランザクションを評価するステップを含む、方法。前記アンロックスクリプトは、前記記憶位置から前記第1値を読み取るよう構成され、前記1つ以上の条件は、前記第1値に依存する条件を含む。
ターゲットトランザクションを含む複数のトランザクションの各々について、前記ネットワークの少なくとも幾つかのノードは、前記トランザクションが有効であることを条件として、各トランザクションを伝播させるよう構成され、少なくとも幾つかのノードは、前記トランザクションが有効であることを条件として、該ノードにある前記ブロックチェーンのコピーに各トランザクションを記録するよう構成される。前記ター源とトランザクションの検証は、前記第2言語の前記コードの結果を条件とする。この条件が満たされない場合、前記トランザクションは、前記ブロックチェーンネットワークを通じて伝播されず、マイニングのためにプーリングされず、又はブロックチェーンに記録されない。従って、第2言語で記述された機能は、その他の場合に第1のスクリプト言語を用いる検証に基づくモデルで検証のための条件を設定するために組み込むことができる。
本開示の実施形態の理解を助け、そのような実施形態がどのように実施され得るかを示すために、例としてのみ、以下の添付の図面を参照する。
ブロックチェーンを実装するためのシステムの概略ブロック図である。
ブロックチェーンに記録されるトランザクションの幾つかの例を概略的に示している。
本願明細書に開示される実施形態による、non-Scriptコードの実行を示す概略ブロック図である。
トランザクションを処理するための幾つかの例示的なノードソフトウェアの概略ブロック図である。
本願明細書に開示される実施形態による、ノードソフトウェアの更なる詳細を示す概略ブロック図である。
本願明細書に開示される実施形態による、例示的なスクリプトの実行シーケンスを概略的に示す。
<例示的なシステムの概要>
図1は、ブロックチェーン150を実装するための例示的なシステム100を示す。システム100は、典型的にはインターネットのような広域インターネットワークであるパケット交換ネットワーク101を含む。パケット交換ネットワーク101は、パケット交換ネットワーク101内にピアツーピア(P2P)オーバレイネットワーク106を形成するように配置された複数のノード104を含む。各ノード104は、異なるピアに属する異なるノード104を有するピアのコンピュータ装置を含む。各ノード104は、1つ以上のプロセッサ、例えば、1つ以上の中央処理装置(CPU)、アクセラレータプロセッサ、特定用途向けプロセッサ、及び/又はフィールドプログラマブルゲートアレイ(FPGA)を含む処理装置を含む。各ノードはまた、メモリ、すなわち、1つ以上の非一時的コンピュータ読取可能媒体の形態のコンピュータ読取可能記憶装置を備える。メモリは、1つ以上のメモリ媒体、例えば、ハードディスクなどの磁気媒体、固体ドライブ(solid-state drive (SSD))、フラッシュメモリ又はEEPROMなどの電子媒体、及び/又は光ディスクドライブなどの光学的媒体を使用する1つ以上のメモリユニットを含んでもよい。
図1は、ブロックチェーン150を実装するための例示的なシステム100を示す。システム100は、典型的にはインターネットのような広域インターネットワークであるパケット交換ネットワーク101を含む。パケット交換ネットワーク101は、パケット交換ネットワーク101内にピアツーピア(P2P)オーバレイネットワーク106を形成するように配置された複数のノード104を含む。各ノード104は、異なるピアに属する異なるノード104を有するピアのコンピュータ装置を含む。各ノード104は、1つ以上のプロセッサ、例えば、1つ以上の中央処理装置(CPU)、アクセラレータプロセッサ、特定用途向けプロセッサ、及び/又はフィールドプログラマブルゲートアレイ(FPGA)を含む処理装置を含む。各ノードはまた、メモリ、すなわち、1つ以上の非一時的コンピュータ読取可能媒体の形態のコンピュータ読取可能記憶装置を備える。メモリは、1つ以上のメモリ媒体、例えば、ハードディスクなどの磁気媒体、固体ドライブ(solid-state drive (SSD))、フラッシュメモリ又はEEPROMなどの電子媒体、及び/又は光ディスクドライブなどの光学的媒体を使用する1つ以上のメモリユニットを含んでもよい。
ブロックチェーン150は、データのブロック151のチェーンを指し、ブロックチェーン150のそれぞれのコピーは、ピアツーピア(peer-to-peer (P2P))ネットワーク160内の複数のノードのそれぞれにおいて維持される。チェーン内の各ブロック151は、1つ以上のトランザクション152を含み、この文脈ではトランザクションは、一種のデータ構造を参照する。データ構造の性質は、トランザクションモデル又はスキームの一部として使用されるトランザクションプロトコルのタイプに依存する。所与のブロックチェーンは、典型的には、全体を通して、1つの特定のトランザクションプロトコルを使用する。1つの一般的なタイプのトランザクションプロトコルでは、各トランザクション152のデータ構造は、少なくとも1つのインプット及び少なくとも1つのアウトプットを含む。各アウトプットは、そのアウトプットが暗号的にロックされている(アンロックされ、それによって償還又は使用されるために、そのユーザ103の署名を必要とする)ユーザに属するデジタルアセットの数量を表す額(amount)を指定する。各インプットは、先行するトランザクション152のアウトプットを逆にポイントし、それによってトランザクションをリンクする。
ノード104の少なくとも幾つかは、トランザクション152を転送し、それによって伝播する転送ノード104Fの役割を引き受ける。ノード104の少なくともいくつかは、ブロック151をマイニングするマイナー104Mの役割を担う。ノード104の少なくとも幾つかは、記憶ノード104S(「フルコピー(full-copy)」ノードとも呼ばれる)の役割を引き受け、各ノードは、それぞれのメモリに同じブロックチェーン150のそれぞれのコピーを格納する。各マイナーノード104Mは、マイニングされてブロック151にされることを待っているトランザクション152のプール154も維持する。所与のノード104は、転送ノード104、マイナー104M、記憶ノード104S、又はこれらの2つ若しくは全部の任意の組み合わせであり得る。
所与の現在のトランザクション152jにおいて、インプット(又はそのそれぞれ)は、トランザクションのシーケンスの中の先行トランザクション152iのアウトプットを参照するポインタを含み、このアウトプットが現在のトランザクション152jにおいて償還されるか又は「消費される(spent)」ことを指定する。一般に、先行するトランザクションは、プール154又は任意のブロック151内の任意のトランザクションであり得る。先行するトランザクション152iは、必ずしも、現在のトランザクション152jが生成された又はネットワーク106へ送信されたときに存在する必要はないが、先行するトランザクション152iは、現在のトランザクションが有効であるために存在し検証されている必要がある。従って、本願明細書で「先行する」は、ポインタによりリンクされた論理的シーケンスの中で先行するものを表し、必ずしも時系列の中での生成又は送信の時間を表さない。従って、それは、必ずしも、トランザクション152i,152jが順不同で生成され又は送信されることを排除しない(以下の親のない(orphan)トランザクションに関する議論を参照する)。先行するトランザクション152iは、等しく、祖先(antecedent)又は先行(predecessor)トランザクションと呼ばれ得る。
現在のトランザクション152jのインプットは、先行するトランザクション152iのアウトプットがロックされているユーザ103aの署名も含む。また、現在のトランザクション152jのアウトプットは、新しいユーザ103bに暗号的にロックできる。従って、現在のトランザクション152jは、先行するトランザクション152iのインプットで定義された量を、現在のトランザクション152jのアウトプットで定義された新しいユーザ103bに移転することができる。幾つかの場合には、トランザクション152が複数のアウトプットを有し、複数のユーザ間でインプット量を分割してよい(変更を行うために、そのうちの1人がオリジナルユーザとなる)。幾つかの場合には、トランザクションが複数のインプットを有し、1つ以上の先行するトランザクションの複数のアウトプットから量をまとめ、現在のトランザクションの1つ以上のアウトプットに再分配することもできる。
上記は「アウトプットベースの」トランザクションプロトコルと呼ばれることがあり、時には「未使用のトランザクションアウトプット(unspent transaction output (UTXO))タイプのプロトコル」(アウトプットはUTXOと呼ばれる)とも呼ばれる。ユーザの合計残高は、ブロックチェーンに格納されている1つの数値で定義されるのではなく、代わりに、ユーザは、ブロックチェーン151内の多くの異なるトランザクション152に分散されている該ユーザの全てのUTXOの値を照合するために、特別な「ウォレット」アプリケーション105を必要とする。
アカウントベースのトランザクションモデルの一部として、別のタイプのトランザクションプロトコルを「アカウントベース」のプロトコルと呼ぶことがある。アカウントベースの場合、各トランザクションは、過去の一連のトランザクションにおいて、先行するトランザクションのUTXOに戻って参照することによって移転される量を定義するのではなく、絶対的な口座(アカウント)残高を参照することによって移転される。全てのアカウントの現在の状態は、ブロックチェーンとは別個のマイナーによって格納され、絶えず更新される。このようなシステムでは、トランザクションは、アカウントの連続したトランザクション記録(いわゆる「ポジション」)を用いて発注される。この値は、送信者により彼らの暗号署名の一部として署名され、トランザクション参照計算の一部としてハッシュされる。さらに、任意的なデータフィールドもトランザクションに署名することができる。このデータフィールドは、例えば、前のトランザクションIDがデータフィールドに含まれている場合、前のトランザクションを遡ってポイントしてよい。
どちらのタイプのトランザクションプロトコルでも、ユーザ103が新しいトランザクション152jを実行したい場合、ユーザは、自分のコンピュータ端末102からP2Pネットワーク106のノードの1つ104(現在は、通常、サーバ又はデータセンタであるが、原則として、他のユーザ端末でもよい)に新しいトランザクションを送信する。このノード104は、各ノード104に適用されるノードプロトコルに従って、トランザクションが有効であるかどうかをチェックする。ノードプロトコルの詳細は、問題のブロックチェーン150で使用されているトランザクションプロトコルのタイプに対応し、全体のトランザクションモデルを一緒に形成する。ノードプロトコルは、典型的には、ノード104に、新しいトランザクション152j内の暗号署名が、トランザクション152の順序付けされたシーケンスの中の前のトランザクション152iに依存する、期待される署名と一致することをチェックすることを要求する。アウトプットベースの場合、これは、新しいトランザクション152jのインプットに含まれるユーザの暗号署名が、新しいトランザクションが消費する先行するトランザクション152jのアウトプットに定義された条件と一致することをチェックすることを含んでよく、この条件は、典型的には、新しいトランザクション152jのインプット内の暗号署名が、新しいトランザクションのインプットがポイントする前のトランザクション152iのアウトプットをアンロックすることを少なくともチェックすることを含む。幾つかのトランザクションプロトコルでは、条件は、少なくとも部分的に、インプット及び/又はアウトプットに含まれるカスタムスクリプトによって定義されてもよい。或いは、単にノードプロトコルだけで固定することもできるし、或いは、これらの組み合わせによることもある。いずれにせよ、新しいトランザクション152jが有効であれば、現在のノードは新しいトランザクションをP2Pネットワーク106内のノード104の1つ以上の他のノードに転送する。これらのノード104の少なくともいくつかは、同じノードプロトコルに従って同じテストを適用し、新しいトランザクション152jを1つ以上のさらなるノード104に転送するなど、転送ノード104Fとしても機能する。このようにして、新しいトランザクションは、ノード104のネットワーク全体に伝播される。
アウトプットベースのモデルでは、与えられたアウトプット(例えば、UTXO)が消費されるかどうかの定義は、ノードプロトコルに従って別の今後の(onward)トランザクション152jのインプットによって既に有効に償還されているかどうかである。トランザクションが有効であるための別の条件は、それが消費又は償還を試みる先行するトランザクション152iのアウトプットが、別の有効なトランザクションによって未だ消費/償還されていないことである。ここでも、有効でない場合、トランザクション152jは、ブロックチェーンに伝播又は記録されない。これは、支払者が同じトランザクションのアウトプットを複数回消費しようとする二重支出を防ぐ。一方、アカウントベースのモデルは、口座残高を維持することによって、二重支出を防ぐ。この場合も、トランザクションの順序が定義されているため、口座残高は、一度に単一の定義された状態を有する。
検証に加えて、ノード104Mのうちの少なくともいくつかは、「proof of work」に支えられているマイニングと呼ばれるプロセスで、トランザクションのブロックを最初に作成するために競合する。マイニングノード104Mでは、まだブロックに現れていない有効なトランザクションのプールに新しいトランザクションが追加される。そして、マイナーは、暗号パズルを解決しようと試みることにより、トランザクションのプール154からトランザクション152の新しい有効なブロック151を組み立てるために競争する。これは、典型的には、ノンスがトランザクションのプール154と連結され、ハッシュされるときに、ハッシュのアウトプットが所定の条件を満たすような「ノンス」値を探すことを含む。例えば、所定の条件は、ハッシュのアウトプットが、所定の数の先行ゼロを有することであってもよい。ハッシュ関数の特性は、インプットに関して予測不可能なアウトプットを持つことである。従って、この探索は、ブルートフォースによってのみ実行することができ、従って、パズルを解決しようとしている各ノード104Mにおいて、相当量の処理リソースを消費する。
パズルを解く最初のマイナーノード104Mは、これをネットワーク106に通知し、その解を証明として提供する。この解は、ネットワーク内の他のノード104によって簡単にチェックすることができる(ハッシュが対する解が与えられれば、ハッシュのアウトプットが条件を満たすことを確認することは簡単である)。勝者がパズルを解いたトランザクションのプール154は、各ノードで勝者が発表した解をチェックしたことに基づいて、記憶ノード104Sとして機能するノード104のうちの少なくともいくつかによってブロックチェーン150の新しいブロック151として記録される。また、新しいブロック151nにはブロックポインタ155が割り当てられ、チェーン内で前に作成されたブロック151n-1を指すようになっている。proof-of-workは、新しいブロックを151作成するのに多大な労力を要し、二重の支出を含むブロックは他のノード104によって拒否される可能性が高く、従ってマイニングノード104Mが二重支払いを彼らのブロックに含まないようにする動機が働くので、二重の支出のリスクを減じるのを助ける。一旦生成されると、ブロック151は、同じプロトコルに従ってP2Pネットワーク106内の各格納ノード104Siで認識され、維持されるため、変更することはできない。また、ブロックポインタ155は、ブロック151に順序を課す。トランザクション152は、P2Pネットワーク106内の各記憶ノード104Sで順序付けられたブロックに記録されるので、これはトランザクションの不変の公開台帳を提供する。
パズルを解決するために常に競争している異なるマイナー104Mは、いつ解を探し始めたかによって、いつでもマイニングされていないトランザクションプール154の異なるスナップショットに基づいてパズルを解いているかもしれないことに留意する。パズルを解く者は誰でも、最初に次の新しいブロック151nに含まれるトランザクション152を定義し、現在のマイニングされていないトランザクションのプール154が更新される。そして、マイナー104Mは、新たに定義された未解決のプール154からブロックを作り出すために、競争を続ける。また、生じ得る「分岐(フォーク、fork)」を解決するためのプロトコルも存在する。これは、2人のマイナー104Mが互いに非常に短い時間内にパズルを解決し、ブロックチェーンの矛盾したビューが伝播する場合である。要するに、分岐の枝が伸びるときは常に、最長のものが最終的なブロックチェーン150になる。
ほとんどのブロックチェーンでは、勝ったマイナー104Mは、何も無いものから新しい量のデジタルアセットを生み出す特別な種類の新しいトランザクションによって自動的に報酬を受けている(通常のトランザクションでは、あるユーザから別のユーザにデジタルアセットの量を移転する)。したがって、勝ったノードは、ある量のデジタルアセットを「マイニング」したと言える。この特殊なタイプのトランザクションは「生成(generation)」トランザクションと呼ばれることもある。それは自動的に新しいブロック151nの一部を形成する。この報酬は、マイナー104Mがproof-of-work競争に参加する動機を与える。多くの場合、通常の(非生成)トランザクションは、そのトランザクションが含まれたブロック151nを生成した勝ったマイナー104Mにさらに報酬を与えるために、追加のトランザクション手数料をそのアウトプットの1つにおいて指定する。
マイニングに含まれる計算リソースのために、典型的には、少なくともマイナーノード104Mの各々は、1つ以上の物理的サーバユニットを含むサーバ、又はデータセンタ全体の形態をとる。各転送ノード104M及び/又は記憶ノード104Sは、サーバ又はデータセンタの形態をとることもできる。しかしながら、原則として、任意の所与のノード104は、ユーザ端末又は互いにネットワーク接続されたユーザ端末のグループを含むことができる。
各ノード104のメモリは、それぞれの1つ以上の役割を実行し、ノードプロトコルに従ってトランザクション152を処理するために、ノード104の処理装置上で動作するように構成されたソフトウェアを記憶する。ノード104に属するいずれの動作も、それぞれのコンピュータ装置の処理装置上で実行されるソフトウェアによって実行され得ることが理解されよう。ノードソフトウェアは、アプリケーションレイヤにおける1つ以上のアプリケーション、又はオペレーティングシステムレイヤ若しくはプロトコルレイヤのような下位レイヤ、又はこれらの任意の組合せの中に実装されてよい。また、本明細書で使用される「ブロックチェーン」という用語は、一般的な技術の種類を指す一般的な用語であり、任意の特定の専有のブロックチェーン、プロトコル又はサービスに限定されない。
また、ネットワーク101には、消費者ユーザの役割を果たす複数のパーティ103の各々のコンピュータ装置102も接続されている。これらは、トランザクションにおける支払人及び被支払人の役割を果たすが、他のパーティの代わりにトランザクションをマイニングし又は伝播することに必ずしも参加しない。それらは必ずしもマイニングプロトコルを実行するわけではない。2つのパーティ103及びそれぞれの機器102が説明のために示されており、第1パーティ103a及びそのそれぞれのコンピュータ機器102a、幾つかの第2パーティ103b及びそのそれぞれのコンピュータ機器102bである。より多くのこのようなパーティ103及びそれらのそれぞれのコンピュータ機器102がシステムに存在し、参加することができるが、便宜上、それらは図示されていないことが理解されよう。各パーティ103は、個人又は組織であってもよい。純粋に例示として、第1パーティ103aは、本明細書においてAliceと称され、第2パーティ103bは、Bobと称されるが、これは限定的なものではなく、本明細書においてAlice又はBobという言及は、それぞれ「第1パーティ」及び「第2パーティ」と置き換えることができることは理解されるであろう。
各パーティ103のコンピュータ機器102は、1つ以上のプロセッサ、例えば1つ以上のCPU、GPU、他のアクセラレータプロセッサ、特定用途向けプロセッサ、及び/又はFPGAを備えるそれぞれの処理装置を備える。各パーティ103のコンピュータ機器102は、さらに、メモリ、すなわち、非一時的コンピュータ読取可能媒体又は媒体の形態のコンピュータ読取可能記憶装置を備える。このメモリは、例えば、ハードディスクなどの磁気媒体、SSD、フラッシュメモリ又はEEPROMなどの電子媒体、及び/又は光ディスクドライブなどの光学的媒体を使用する1つ以上のメモリユニットを含んでもよい。各パーティ103のコンピュータ機器102上のメモリは、処理装置上で動作するように配置された少なくとも1つのクライアントアプリケーション105のそれぞれのインスタンスを含むソフトウェアを記憶する。所与のノード104に属するいずれの動作も、それぞれのコンピュータ機器102の処理装置上で実行されるソフトウェアを使用することにより実行され得ることが理解されよう。各パーティ103のコンピュータ機器102は、少なくとも1つのユーザ端末、例えばデスクトップ又はラップトップコンピュータ、タブレット、スマートフォン、又はスマートウォッチのようなウェアラブルデバイスを備えている。所与のパーティ103のコンピュータ装置102は、ユーザ端末を介してアクセスされるクラウドコンピューティングリソースのような、1つ以上の他のネットワーク接続されたリソースを含んでもよい。
クライアントアプリケーション105は、最初に、1つ以上の適切なコンピュータ読取可能な記憶媒体、例えばサーバからダウンロードされたもの、又はリムーバブルSSD、フラッシュ・メモリ・キー、リムーバブルEEPROM、リムーバブル磁気ディスクドライブ、磁気フロッピー・ディスク又はテープ、光ディスク、例えばCD又はDVD ROM、又はリムーバブル光学ドライブなどのリムーバブル記憶装置上で、任意の所与のパーティ103のコンピュータ機器102に提供され得る。
クライアントアプリケーション105は、少なくとも「ウォレット」機能を備える。これには主に2つの機能を有する。これらのうちの1つは、それぞれのユーザパーティ103が、ノード104のネットワーク全体に渡り伝播され、それによってブロックチェーン150に含まれるトランザクション152を作成し、署名し、送信することを可能にすることである。もう1つは、現在所有しているデジタルアセットの量をそれぞれのパーティに報告することである。アウトプットベースのシステムでは、この第2の機能は、当該パーティに属するブロックチェーン150全体に散在する様々なトランザクション152のアウトプットの中で定義される量を照合することを含む。
注:種々のクライアント機能が所与のクライアントアプリケーション105に統合されるとして説明されることがあるが、これは、必ずしも限定的ではなく、代わりに、本願明細書に記載される任意のクライアント機能が2つ以上の異なるアプリケーションのスーツに実装されてよく、例えばAPIを介してインタフェースし、又は一方が他方へのプラグインである。より一般的には、クライアント機能は、アプリケーションレイヤ、又はオペレーティングシステムのような下位レイヤ、又はこれらの任意の組合せにおいて実装され得る。以下は、クライアントアプリケーション105の観点で説明されるが、これは限定的ではないことが理解される。
各コンピュータ機器102上のクライアントアプリケーション又はソフトウェア105のインスタンスは、P2Pネットワーク106の転送ノード104Fの少なくとも1つに動作可能に結合される。これにより、クライアント105のウォレット機能は、トランザクション152をネットワーク106に送信することができる。クライアント105は、また、記憶ノード104のうちの1つ、一部、又は全部にコンタクトして、それぞれのパーティ103が受領者である任意のトランザクションについてブロックチェーン150に問い合わせることができる(又は、実施形態では、ブロックチェーン150は、部分的にその公開視認性を通じてトランザクションの信頼を提供する公開的設備であるため、実際には、ブロックチェーン150内の他のパーティのトランザクションを検査する)。各コンピュータ機器102上のウォレット機能は、トランザクションプロトコルに従ってトランザクション152を形成し、送信するように構成される。各ノード104は、ノードプロトコルに従ってトランザクション152を検証するように構成されたソフトウェアを実行し、転送ノード104Fの場合は、ネットワーク106全体にトランザクション152を伝搬させるためにトランザクション152を転送する。トランザクションプロトコルとノードプロトコルは互いに対応し、所与のトランザクションプロトコルは所与のノードプロトコルと共に所与のトランザクションモデルを実装する。同じトランザクションプロトコルが、ブロックチェーン150内の全てのトランザクション152に使用される(ただし、トランザクションプロトコルは、トランザクションの異なるサブタイプを許可することができる)。同じノードプロトコルは、ネットワーク106内の全てのノード104によって使用される(ただし、多くのノードは、そのサブタイプに対して定義されたルールに従って異なるトランザクションのサブタイプを異なるように処理し、また、異なるノードは異なる役割を引き受け、従って、プロトコルの異なる対応する側面を実装することができる)。
上述のように、ブロックチェーン150は、ブロック151のチェーンを含み、各ブロック151は、前述のように、proof-of-workプロセスによって作成された1つ以上のトランザクション152のセットを含む。各ブロック151は、また、ブロック151への逐次的順序を定義するように、チェーン内の先に生成されたブロック151を遡ってポイントするブロックポインタ155を含む。ブロックチェーン150はまた、proof-of-workプロセスによって新しいブロックに含まれることを待つ有効なトランザクション154のプールを含む。各トランザクション152(生成トランザクション以外)は、トランザクションのシーケンスに順序を定義するために、前のトランザクションへのポインタを含む(注:トランザクション152のシーケンスは、分岐することが許される)。ブロック151のチェーンは、チェーンの最初のブロックであったジェネシスブロック(genesis block (Gb))153にまで戻る。チェーン150の初期に1つ以上のオリジナルトランザクション152は、先行するトランザクションではなくジェネシスブロック153を指し示した。
所与のパーティ103、例えばAliceがブロックチェーン150に含まれる新たなトランザクション152jを送信したいと望む場合、彼女は関連するトランザクションプロトコルに従って(彼女のクライアントアプリケーション105のウォレット機能を使用して)新たなトランザクションを作成する(formulate)。次に、クライアントアプリケーション105からトランザクション152を、彼女が接続されている1つ以上の転送ノード104Fの1つに送信する。例えば、これは、Aliceのコンピュータ102に最も近いか又は最も良好に接続されている転送ノード104Fであってもよい。任意の所与のノード104が新しいトランザクション152jを受信すると、ノードプロトコル及びそのそれぞれの役割に従って、それを処理する。これは、最初に、新たに受信されたトランザクション152jが「有効」であるための特定の条件を満たしているかどうかをチェックすることを含み、その例については、簡単に詳述する。幾つかのトランザクションプロトコルでは、検証のための条件は、トランザクション152に含まれるスクリプトによってトランザクションごとに構成可能であってよい。或いは、条件は単にノードプロトコルの組み込み機能であってもよく、或いはスクリプトとノードプロトコルの組み合わせによって定義されてもよい。
新たに受信されたトランザクション152jが、有効であると見なされるテストに合格したという条件で(すなわち、「有効である」という条件で)、トランザクション152jを受信した任意の記憶ノード104Sは、そのノード104Sに維持されているブロックチェーン150のコピー内のプール154に、新たに有効とされたトランザクション152を追加する。さらに、トランザクション152jを受信する任意の転送ノード104Fは、検証済みトランザクション152をP2Pネットワーク106内の1つ以上の他のノード104に伝播する。各転送ノード104Fは同じプロトコルを適用するので、トランザクション152jが有効であると仮定すると、これは、P2Pネットワーク106全体に間もなく伝播されることを意味する。
ひとたび1つ以上の記憶ノード104で維持されるブロックチェーン150のコピー内のプール154に入ると、マイナーノード104Mは、新しいトランザクション152を含むプール154の最新バージョンのproof-of-workパズルを解決するために競争を開始する(他のマイナー104Mは、依然として、プール154の古いビューに基づいてパズルを解決しようとしているが、そこに到達した者は誰でも、最初に、次の新しいブロック151が終了し、新しいプール154が開始する場所を定義し、最終的には、誰かが、Aliceのトランザクション152jを含むプール154の一部のパズルを解決する)。一旦、新しいトランザクション152jを含むプール154についてproof-of-workが行われると、ブロックチェーン150内のブロック151の1つの一部となる。各トランザクション152は、以前のトランザクションへのポインタを含むので、トランザクションの順序もまた、不変的に記録される。
異なるノード104は、最初に所与のトランザクションの異なるインスタンスを受信する可能性があり、従って、1つのインスタンスがマイニングされてブロック150になる前に、どのインスタンスが「有効」であるかについて矛盾するビューを有することがあり、その時点で、全部のノード104は、マイニングされたインスタンスのみが有効なインスタンスであることに合意する。ノード104が1つのインスタンスを有効であるとして受け入れ、次に第2のインスタンスがブロックチェーン150に記録されていることを発見した場合、該ノード104は、これを受け入れなければならず、最初に受け入れた未だマイニングされていないインスタンスを破棄する(つまり、無効であるとして扱う)。
<UTXOに基づくモデル>
図2は、トランザクションプロトコルの例を示している。これは、UTXOベースのプロトコルの例である。トランザクション152(「Tx」と略す)は、ブロックチェーン150(各ブロック151は1つ以上のトランザクション152を含む)の基本的なデータ構造である。以下は、アウトプットベース又は「UTXO」ベースのプロトコルを参照して説明される。しかし、これは、全ての可能な実施形態に限定されるものではない。
図2は、トランザクションプロトコルの例を示している。これは、UTXOベースのプロトコルの例である。トランザクション152(「Tx」と略す)は、ブロックチェーン150(各ブロック151は1つ以上のトランザクション152を含む)の基本的なデータ構造である。以下は、アウトプットベース又は「UTXO」ベースのプロトコルを参照して説明される。しかし、これは、全ての可能な実施形態に限定されるものではない。
UTXOベースのモデルでは、各トランザクション(「Tx」)152は、1つ以上のインプット202及び1つ以上のアウトプット203を含むデータ構造を含む。各アウトプット203は、未使用トランザクションアウトプット(UTXO)を含んでもよく、これは、別の新しいトランザクションのインプット202のソースとして使用することができる(UTXOが未だ償還されていない場合)。UTXOは、デジタルアセット(値のストア)の量を指定する。それは、情報の中でも特にその元となったトランザクションのトランザクションIDを含む。トランザクションデータ構造はまた、ヘッダ201も含んでよく、ヘッダ201は、インプットフィールド202及びアウトプットフィールド203のサイズの指示子を含んでもよいヘッダ201を含んでよい。ヘッダ201は、トランザクションのIDも含んでもよい。実施形態において、トランザクションIDは、トランザクションデータのハッシュ(トランザクションID自体を除く)であり、マイナー104Mに提出された未処理トランザクション152のヘッダ201に格納される。
例えばAlice103aは、問題のデジタルアセットの量をBob103bに移転するトランザクション152jを作成したいと考えているとする。図2において、Aliceの新しいトランザクション152jは「Tx1」とラベル付けされている。これは、Aliceにロックされているデジタルアセットの量を、シーケンス内の先行するトランザクション152iのアウトプット203に取り入れ、その少なくとも一部をBobに移転する。先行するトランザクション152iは、図2において「Tx0」とラベル付けされている。Tx0とTx1は、単なる任意のラベルである。これらは、必ずしも、Tx0がブロックチェーン151の最初のトランザクションであること、又は、Tx1がプール154の直ぐ次のトランザクションであることを意味しない。Tx1は、まだAliceへのロックされた未使用アウトプット203を有する任意の先行する(つまり祖先)トランザクションのいずれかを指し示すことができる。
先行するトランザクションTx0は、Aliceがその新しいトランザクションTx1を作成するとき、又は少なくとも彼女がそれをネットワーク106に送信するときまでに、既に検証され、ブロックチェーン150に含まれていてもよい。それは、その時点で既にブロック151のうちの1つに含まれていてもよく、或いは、プール154内でまだ待機していてもよく、その場合、新しいブロック151にすぐに含まれることになる。あるいは、Tx0及びTx1が生成されネットワーク102に送信されることができ、あるいは、ノードプロトコルが「孤児(orphan)」トランザクションのバッファリングを許容する場合にはTx1の後にTx0が送信されることもできる。ここでトランザクションのシーケンスの文脈で使用される「先行する」及び「後の」という用語は、トランザクション内で指定されたトランザクションポインタ(どのトランザクションがどの他のトランザクションを指すかなど)によって定義されるシーケンス内のトランザクションの順序を指す。それらは、「先行する」及び「相続する」又は「祖先」及び「子孫」、「親」及び「子」、等により、等しく置き換えられ得る。これは、必ずしも、それらが作成され、ネットワーク106に送られ、又は任意の所与のノード104に到達する順序を意味しない。それにもかかわらず、先行するトランザクション(祖先トランザクション又は「親」)を指す後続のトランザクション(子孫トランザクション又は「子」)は、親トランザクションが検証されない限り、検証されない。親の前にノード104に到着した子は孤児とみなされる。それは、ノードプロトコル及び/又はマイナーの行動に応じて、親を待つために特定の時間、破棄又はバッファリングされることがある。
先行するトランザクションTx0の1つ以上のアウトプット203のうちの1つは、本明細書でUTXO0とラベル付けされた特定のUTXOを含む。各UTXOは、UTXOによって表されるデジタルアセットの量を指定する値と、後続のトランザクションが検証されるために、従ってUTXOが正常に償還されるために、後続のトランザクションのインプット202の中のアンロックスクリプトによって満たされなければならない条件を定義するロックスクリプトとを含む。典型的には、ロックスクリプトは、特定のパーティ(それが含まれているトランザクションの受益者)に量をロックする。すなわち、ロックスクリプトは、標準的に以下のようなアンロック条件を定義する:後続のトランザクションのインプット内のアンロックスクリプトは、先行するトランザクションがロックされたパーティの暗号署名を含む。
ロックスクリプト(別名scriptPubKey)は、ノードプロトコルによって認識されるドメイン固有の言語で書かれたコードの一部である。そのような言語の特定の例は、「スクリプト」(Script,capital S)と呼ばれる。ロックスクリプトは、トランザクションアウトプット203を消費するために必要な情報、例えば、Aliceの署名の必要条件を指定する。トランザクションのアウトプットには、アンロックスクリプトが現れる。アンロックスクリプト(別名:scriptSig)は、ロックスクリプトの基準を満たすために必要な情報を提供するドメイン固有の言語で書かれたコードの一部である。例えば、Bobの署名を含んでもよい。アンロックスクリプトは、トランザクションのインプット202に現れる。
図示の例では、Tx0のアウトプット203のUTXO0は、ロックスクリプト[ChecksigPA]を含み、これは、UTXO0が償還されるために(厳密には、UTXO0を償還しようとする後続のトランザクションが有効であるために)、Aliceの署名SigPAを必要とする。[ChecksigPA]は、Aliceの公開鍵と秘密鍵のペアからの公開鍵PAを含む。Tx1のインプット202は、Tx1を指すポインタ(例えば、そのトランザクションID、実施形態ではトランザクションTx0全体のハッシュであるTxID0による)を含む。Tx1のインプット202は、Tx0の任意の他の可能なアウトプットの中でそれを識別するために、Tx0内のUTXO0を識別するインデックスを含む。Tx1のインプット202は、さらに、Aliceが鍵ペアからのAliceの秘密鍵をデータの所定の部分(暗号において「メッセージ」と呼ばれることもある)に適用することによって作成された、Aliceの暗号署名を含むアンロックスクリプト<SigPA>を含む。有効な署名を提供するためにAliceが署名する必要があるデータ(又は「メッセージ」)は、ロックスクリプトにより、又はノードプロトコルにより、又はこれらの組み合わせによって定義され得る。
新しいトランザクションTx1がノード104に到着すると、ノードはノードプロトコルを適用する。これは、ロックスクリプトとアンロックスクリプトを一緒に実行して、アンロックスクリプトがロックスクリプトで定義されている条件(この条件は1つ以上の基準を含むことができる)を満たしているかどうかをチェックすることを含む。実施形態では、これは、2つのスクリプトの連結を含む。
ここで、「||」は連結を表し、「<...>」はスタックにデータを配置することを意味し、「[...]」はアンロックスクリプトに含まれる機能である(本例では、スタックベースの言語)。同等に、スクリプトは。、スクリプトを連結するのではなく共通のスタックにより1つずつ実行されてよい。いずれの方法でも、一緒に実行する場合、スクリプトは、Tx0のアウトプット内のロックスクリプトに含まれるAliceの公開鍵PAを使用して、Tx1のインプット内のロックスクリプトが、データの期待部分に署名するAliceの署名を含むことを認証する。また、データの期待部分(「メッセージ」)も、この認証を実行するためにTx0に含まれる必要がある。実施形態において、署名されたデータは、Tx0の全体を含む(従って、別個の要素は、データの署名された部分がすでに本質的に存在するので、データの署名された部分の指定にクリアに含まれる必要がある)。
公開-秘密暗号法による認証の詳細は、当業者には周知であろう。基本的に、Aliceが彼女の秘密鍵によりメッセージを暗号化することによってメッセージに署名した場合、Aliceの公開鍵とそのメッセージが明らか(暗号化されていないメッセージ)ならば、ノード104のような別のエンティティは、そのメッセージの暗号化されたバージョンがAliceによって署名されていなければならないことを認証することができる。署名は、典型的には、メッセージをハッシュし、ハッシュに署名し、署名としてメッセージのクリアなバージョンにこれをタグ付けすることによって、公開鍵の所有者が署名を認証することを可能にする。従って、実施形態では、特定のデータ片又はトランザクションの部分等に署名するという言及は、データ片又はトランザクションの部分のハッシュに署名することを意味し得る。
Tx1内のアンロックスクリプトが、Tx0のロックスクリプトで指定された1つ以上の条件を満たす場合(示される例では、Aliceの署名がTx1内で提供され、認証されている場合)、ノード104は、Tx1が有効であるとみなす。それがマイニングノード104Mである場合、これは、proof-of-workを待つトランザクションのプール154にそれを追加することを意味する。それが転送ノード104Fである場合、それはトランザクションTx1をネットワーク106内の1つ以上の他のノード104に転送し、それによって、それがネットワーク全体に伝搬されることになる。一旦、Tx1が検証され、ブロックチェーン150に含まれると、これは、Tx0からのUTXO0を消費したものとして定義する。Tx1は、未使用トランザクションアウトプット203を使用する場合にのみ有効であることに留意されたい。別のトランザクション152によってすでに消費されたアウトプットを消費しようとする場合、Tx1は、たとえ他のすべての条件が満たされていても無効となる。従って、ノード104は、先行するトランザクションTx0において参照されたUTXOが既に使用されているかどうか(既に別の有効なトランザクションへの有効なインプットを形成しているかどうか)もチェックする必要がある。これが、ブロックチェーン150がトランザクション152に定義された順序を課すことが重要である理由の1つである。実際には、所与のノード104は、トランザクション152が消費されたUTXO203をマークする別個のデータベースを維持することができるが、最終的には、UTXOが消費されたかどうかを定義するのは、ブロックチェーン150内の別の有効なトランザクションへの有効なインプットを既に形成しているかどうかである。
所与のトランザクション152の全部のアウトプット203の中で指定された総量が全部のそのインプット202により指される総量より大きい場合、これは、殆どのトランザクションモデルにおいて無効の別の基礎である。従って、このようなトランザクションは、伝播されず、マイニングされてブロック151にされることもない。
UTXOベースのトランザクションモデルでは、所定のUTXOを全体として使用する必要があることに注意する。UTXOで定義されている量のうち、別の分量が消費されている一方で、分量を「残しておく」ことはできない。ただし、UTXOからの量は、次のトランザクションの複数のアウトプットに分割できる。例えば、Tx0のUTXO0で定義された量は、Tx1の複数のUTXOに分割できる。したがって、AliceがBobにUTXO0で定義された量のすべてを与えることを望まない場合、彼女は残りの量を使って、Tx1の第2のアウトプットの中で自分自身にお釣りを与えるか、又は別のパーティに支払うことができる。
実際には、Aliceは通常、勝ったマイナーのための手数料も含める必要がある。なぜなら、今日では、生成トランザクションの報酬だけでは、マイニングを動機付けるには通常十分ではないからである。Aliceがマイナーのための手数料を含まない場合、Tx0はマイナーのノード104Mによって拒否される可能性が高く、したがって、技術的には有効であるが、それは依然として伝搬されず、ブロックチェーン150に含まれない(マイナーのプロトコルは、マイナーが望まない場合には、マイナー104Mにトランザクション152を受け入れるよう強制しない)。一部のプロトコルでは、マイニング料金は、独自の別個のアウトプット203を必要としない(すなわち、別個のUTXOを必要としない)。代わりに、インプット202によって指される総量と、所与のトランザクション152のアウトプット203の中で指定される総量との間の差は、勝ったマイナー104に自動的に与えられる。例えば、UTXO0へのポインタがTx1への唯一のインプットであり、Tx1は1つのアウトプットUTXO1しか持っていないとする。UTXO0で指定されたデジタルアセットの量がUTXO1で指定された量より多い場合、その差は自動的に勝ったマイナー104Mへ行く。しかし、代替的又は追加的に、必ずしも、トランザクション152のUTXO203のうちの独自のものにおいて、マイナー手数料を明示的に指定できることは除外されない。
Alice及びBobのデジタルアセットは、ブロックチェーン150内の任意のトランザクション152の中で彼らにロックされた未使用UTXOで構成されている。従って、典型的には、所与のパーティ103のアセットは、ブロックチェーン150を通して、様々なトランザクション152のUTXO全体に分散される。ブロックチェーン150内のどこにも、所与のパーティ103の総残高を定義する1つの数値は記憶されていない。各パーティへのロックされた、別の将来の(onward)トランザクションに未だ消費されていない全ての様々なUTXOの値をまとめることは、クライアントアプリケーション105におけるウォレット機能の役割である。これは、記憶ノード104Sのいずれかに記憶されたブロックチェーン150のコピーを、例えば、各パーティのコンピュータ機器02に最も近いか、又は最も良好に接続されている記憶ノード104Sに問い合わせることによって行うことができる。
スクリプトコードは、概略的に表現されることが多い(すなわち、正確な言語ではない)ことに注意する。例えば、[Checksig PA]を[ChecksigPA]=OP_DUPOP_HASH160<H(PA)>OP_EQUALVERIFYOP_CHECKSIGを意味するように記述し得る。「OP_....」は、スクリプト言語の特定のオペコードを表す。OP_CHECKSIG(「Checksig」とも呼ばれる)は、2つのインプット(署名と公開鍵)を取り込み、楕円曲線デジタル署名アルゴリズム(Elliptic Curve Digital Signature Algorithm (ECDSA))を使用して署名の妥当性を検証するスクリプトオペコードである。ランタイムでは、署名(「sig」')の発生はスクリプトから削除されるが、ハッシュパズルなどの追加要件は、「sig」インプットによって検証されるトランザクションに残る。別の例として、OP_RETURNは、トランザクション内にメタデータを格納することができ、それによってメタデータをブロックチェーン150に不変に記録することができるトランザクションの使用不可能アウトプットを生成するためのスクリプト言語のオペコードである。例えば、メタデータは、ブロックチェーンに格納することが望ましいドキュメントを含むことができる。
署名PAは、デジタル署名である。実施形態において、これは楕円曲線secp256k1を使用するECDSAに基づく。デジタル署名は、特定のデータに署名する。実施形態では、所与のトランザクションについて、署名はトランザクションインプットの一部、及びトランザクションアウトプットの全部又は一部に署名する。署名するアウトプットの特定の部分はSIGHASHフラグに依存する。SIGHASHフラグは、署名の最後に含まれる4バイトのコードであり、どのアウトプットが署名されるかを選択する(従って、署名の時点で固定される)。
ロックスクリプトは、それぞれのトランザクションがロックされているパーティの公開鍵を含んでいることを表す「scriptPubKey」と呼ばれることがある。アンロックスクリプトは、対応する署名を提供することを表す「scriptSig」と呼ばれることがある。しかし、より一般的には、UTXOが償還される条件が署名を認証することを含むことは、ブロックチェーン150の全てのアプリケーションにおいて必須ではない。より一般的には、スクリプト言語は、1つ以上の条件を定義するために使用され得る。したがって、より一般的な用語「ロックスクリプト」及び「アンロックスクリプト」が好ましい。
<ノードソフトウェア>
図4は、UTXO又はアウトプットに基づくモデルの例における、P2Pネットワーク106の各ノード104で実行され得るノードソフトウェア450の例を示す。ノードソフトウェア450は、プロトコルエンジン451、スクリプトエンジン452、スタック453、アプリケーションレベルの決定エンジン454、及び1つ以上のブロックチェーン関連機能モジュールのセット455を含む。任意の所与のノード104で、これらは、(ノードの1つ以上の役割に依存して)マイニングモジュール455M、転送モジュール455F、及び格納モジュール455S、のうちの任意の1、2、又は3個全部を含んでよい。プロトコルエンジン401は、トランザクション152の異なるフィールドを認識し、それらをノードプロトコルに従い処理するよう構成される。トランザクション152j(Txj)が受信され、別の先行するトランザクション152i(Txi)のアウトプット(例えばUTXO)をポイントするインプットを有するとき、プロトコルエンジン451は、Txj内のアンロックスクリプトを識別し、それをスクリプトエンジン452に渡す。プロトコルエンジン451は、更に、Txjのインプットの中のポインタに基づき、Txiを識別し検索する。それは、Txiが未だブロックチェーン150にない場合、それぞれのノード自身の保留中トランザクションのプール154から、又はTxiが既にブロックチェーン150にある場合、それぞれのノード若しくは別のノード104に格納されたブロックチェーン150内のブロック151のコピーから、Txiを検索してよい。いずれの方法も、スクリプトエンジン451は、Txiのポイントされるアウトプットの中のロックスクリプトを識別し、これをスクリプトエンジン452に渡す。
図4は、UTXO又はアウトプットに基づくモデルの例における、P2Pネットワーク106の各ノード104で実行され得るノードソフトウェア450の例を示す。ノードソフトウェア450は、プロトコルエンジン451、スクリプトエンジン452、スタック453、アプリケーションレベルの決定エンジン454、及び1つ以上のブロックチェーン関連機能モジュールのセット455を含む。任意の所与のノード104で、これらは、(ノードの1つ以上の役割に依存して)マイニングモジュール455M、転送モジュール455F、及び格納モジュール455S、のうちの任意の1、2、又は3個全部を含んでよい。プロトコルエンジン401は、トランザクション152の異なるフィールドを認識し、それらをノードプロトコルに従い処理するよう構成される。トランザクション152j(Txj)が受信され、別の先行するトランザクション152i(Txi)のアウトプット(例えばUTXO)をポイントするインプットを有するとき、プロトコルエンジン451は、Txj内のアンロックスクリプトを識別し、それをスクリプトエンジン452に渡す。プロトコルエンジン451は、更に、Txjのインプットの中のポインタに基づき、Txiを識別し検索する。それは、Txiが未だブロックチェーン150にない場合、それぞれのノード自身の保留中トランザクションのプール154から、又はTxiが既にブロックチェーン150にある場合、それぞれのノード若しくは別のノード104に格納されたブロックチェーン150内のブロック151のコピーから、Txiを検索してよい。いずれの方法も、スクリプトエンジン451は、Txiのポイントされるアウトプットの中のロックスクリプトを識別し、これをスクリプトエンジン452に渡す。
スクリプトエンジン452は、従って、Txiのロックスクリプト、及びTxjの対応するインプットからのアンロックスクリプトを有する。例えば、Tx0及びTx1が図2に示されるが、同じことがトランザクションの任意のペアに適用され得る。スクリプトエンジン452は、前述のように2つのスクリプトを一緒に実行し、これらは、使用されているスタックに基づくスクリプト言語(例えばScript)に従い、スタック453にデータを置くことと、データを検索することとを含む。
スクリプトを一緒に実行することにより、スクリプトエンジン452は、アンロックスクリプトがロックスクリプトの中で定義された1つ以上の基準を満たすか否か、つまり、それがロックスクリプトが含まれるアウトプットを「アンロック」するか否かを決定する。スクリプトエンジン452は、この決定の結果をプロトコルエンジン451に返す。スクリプトエンジン452は、アンロックスクリプトは対応するロックスクリプトの中で指定された1つ以上の基準を満たすと決定した場合、結果「真」を返す。その他の場合、それは結果「偽」を返す。
アウトプットに基づくモデルでは、スクリプトエンジン452からの結果「真」は、トランザクションの有効性についての条件のうちの1つである。標準的に、同様に満たされなければならない、プロトコルエンジン451により評価される1つ以上の更なるプロトコルレベルの条件が更にあり、Txjのアウトプットの中で指定されたデジタルアセットの総量がそのインプットによりポイントされる総量を超えないこと、Txiのポイントされるアウトプットは別の有効なトランザクションにより未だ使用されていないこと、等である。プロトコルエンジン451は、1つ以上のプロトコルレベルの条件と一緒にスクリプトエンジン452からの結果を評価し、それら全部が真である場合、トランザクションTxjを検証する。プロトコルエンジン451は、トランザクションが有効であるかどうかの指示を、アプリケーションレベル決定エンジン454に出力する。Txjが実際に検証されたことのみを条件として、決定エンジン454は、マイニングモジュール455M及び転送モジュール455Fの一方又は両方を、それらのそれぞれのブロックチェーンに関連する機能をTxjに関して実行するよう制御することを選択してよい。これは、マイニングモジュール455Mがマイニングしてブロック151にするためにTxjをノードのそれぞれのプール154に追加すること、及び/又は、転送モジュール455FがTxjをP2Pネットワーク106内の別のノード104へ転送することを含んでよい。しかしながら、実施形態では、決定エンジン454は無効なトランザクションを転送し又はマイニングすることを選択しないが、逆に言えば、これは必ずしも、単に有効であるという理由で、有効なトランザクションのマイニング又は転送をトリガしなければならないことを意味するものではないことに留意する。任意的に、実施形態では、アプリケーションレベル決定エンジン454は、これらの機能のうちのいずれか又は両方をトリガする前に、1つ以上の追加条件を適用してよい。例えば、ノードがマイニングノード104Mである場合、決定エンジンは、トランザクションが有効であること、及び十分なマイニング手数料が残されることの両方を条件としてのみ、トランザクションをマイニングすることを選択してよい。
用語「真(true)」及び「偽(false)」は、本願明細書では、必ずしも単一の2進数字(ビット)のみの形式で表現される結果を返すことに限定しないが、それは勿論1つの可能な実装であることに留意する。より一般的には、「真」は、成功又は肯定的な結果を示す任意の状態を表すことができ、「偽」は、不成功又は非肯定的な結果を示す任意の状態を表すことができる。例えば、アカウントに基づくモデルでは(図4に示されない)、「真」の結果は、ノード104による署名の暗示的なプロトコルレベルの検証と、スマートコントラクトの追加の肯定的なアウトプットとの組合せにより示され得る(全体の結果は、両方の個々の結果が真である場合に、真を伝達すると考えられる)。
<第2言語のインライン実行>
ブロックチェーンに格納されているデータ量が増大しており、ブロックチェーンが提供するセキュリティ及び不変性を利用している。今後、これは、TXIDを参照するオブジェクトを採用するプログラミング言語、及び実行可能ファイルがオンチェーンに格納され公衆に利用可能になる可能性を含み得る。マイニングサービスが現れ始めると、例えば消費者が彼らの個人的装置に膨大な量の処理能力を有する必要を除去するために、マイナーに非集中化計算の手段を提供する方法を提供することが望ましい。この章では、Scriptコード内にnon-Scriptコードを包含することを通じてそのような又は同様のものをオフチェーンで評価可能にするが、それにより、インプット及びアウトプットがオンチェーンに不変に格納される方法が開示される。これは、アカウントに基づくモデルのような特定のソフトウェア上で利用可能な仮想マシンを並列化する。
ブロックチェーンに格納されているデータ量が増大しており、ブロックチェーンが提供するセキュリティ及び不変性を利用している。今後、これは、TXIDを参照するオブジェクトを採用するプログラミング言語、及び実行可能ファイルがオンチェーンに格納され公衆に利用可能になる可能性を含み得る。マイニングサービスが現れ始めると、例えば消費者が彼らの個人的装置に膨大な量の処理能力を有する必要を除去するために、マイナーに非集中化計算の手段を提供する方法を提供することが望ましい。この章では、Scriptコード内にnon-Scriptコードを包含することを通じてそのような又は同様のものをオフチェーンで評価可能にするが、それにより、インプット及びアウトプットがオンチェーンに不変に格納される方法が開示される。これは、アカウントに基づくモデルのような特定のソフトウェア上で利用可能な仮想マシンを並列化する。
注:本願明細書における実施形態は、Scriptスクリプト言語がロックスクリプト及びアンロックスクリプトで使用され、第2言語が非スクリプト(non-Script)言語であるという観点で例示される。しかしながら、より一般的には、他のブロックチェーン実装では、本願明細書のどこかで開示される技術は、任意の第1及び第2言語に拡張でき、第1言語は、ブロックチェーンネットワーク106に渡り利用される標準ノードプロトコルに従うブロックチェーンネットワーク106のノード104により認識されるロックスクリプト及びアンロックスクリプトで使用される任意の言語である。第2言語は、これ以外の任意の言語であってよい。実施形態は、以下に、及び本願明細書の他の場所では、第2言語がScriptであり、第2言語がnon-Script言語である例の観点で、説明される。しかしながら、これが限定ではないこと、本願明細書の他の場所におけるScript言語及びnon-Script言語の任意の言及は、より一般的には「第1言語」及び「第2言語」によりそれぞれ置き換えられ得る。用語「言語」は、本願明細書で参照されるとき、コンピュータ言語(つまり、プログラミング言語)を意味することにも留意する。これは、コンピュータ機器を動作させるためにルール、命令、又はステップのセットを実施するためにコンピュータ機器により認識可能な任意の形式のコード(ソフトウェア)であり得る。それは、スクリプト言語、コンパイルされるべき高級言語、インタープリットされるべき高級言語、アセンブリングされるべきアセンブリ言語、又は直接実行されるべき低級機械コード言語を表し得る。更に、用語「実行する」は、本願明細書で言及されるとき、一般的に、任意の種類の言語の任意のそのようなプログラムを実行する任意のそのような手段を表すことができ、例えば必ずしも狭義の実行機械コード命令を意味しない。
ソフトウェアのネイティブ拡張は、標準的に、あるプログラミング言語の何からのコードを、別のプログラミング言語のスクリプトに埋め込む(例えば、CコードをRubyスクリプトに含める)処理を記述する。更に一般的には、それは、あるソフトウェアを別のソフトウェアに接続する手段である。埋め込まれたスクリプトは、コンパイルされ、ローカルにリンクされてよい。従って、結果として生じる実行可能ファイルは、ネイティブ拡張の返される値に依存する条件を設定できる。この章では、スクリプト(小文字のscript)はコードに基づく命令のセットを表し、Script(大文字のScript)は、ブロックチェーンネットワーク106のノード104により認識される、ネットワーク106のノード104により認識されるノードプロトコルに従いトランザクション152を検証するためにロックスクリプト及びアンロックスクリプトで使用するプログラミング言語を表す。
本願明細書に開示される実施形態によると、スクリプトは、Scriptコードの中に埋め込まれた外部コードを使用すると定義できる。このスクリプトは、外部non-Scriptライブラリにリンクし、実行して例えば標準的なOPコードを用いて検証又は分析可能な値をScriptコード内に返す。この方法は、ブロックチェーン150又はユーザからのインプットを用いて値を分析し、並びに種々のトランザクションオプションを選択するために使用できる。処理の例示的な概要は、図3に示される。
図3は、non-Scriptコード301の実行の例示的な概要を示す。ウォレット又はノードソフトウェアは、外部non-Scriptライブラリ303によりnon-Scriptコードを評価する統合仮想マシンのようなプログラムランチャーを使用する。実施形態では、結果は、次に、スタック453にプッシュされ、Script OPコードを用いて評価できる。
non-Scriptコードの使用は、より複雑な制御データ及び検証ステップを、圧縮された実行可能ファイルに埋め込むことを可能にする。埋め込まれたスクリプトを実行可能な仮想マシンがウォレット又はノードソフトウェアに統合されるならば、ブロックチェーンのセキュリティ及びアイデンティティ検証は、ソフトウェアにも適用され得る。これは、例えば、ソフトウェアの再配信がブロックチェーンに基づくシナリオにおいて誰かの秘密鍵を開示することを要求するとき、ソフトウェア著作権侵害(piracy)の既存の問題を直接対象とするために使用できる。
スクリプト内で、制御データ及び/又は鍵検証は、条件文(例えば、if、else、while)のセットとして非スクリプトコード302に含まれ得る。スクリプトエンジン452のブランチに含まれるエクストラクタ(extractor)は、次に、OP_RETURN、OP_PUSHDATA、及び/又はOP_DROPに格納された圧縮された実行可能ファイルを読み出し、次に、統合仮想マシン上でコードを伸張し実行することができる。この処理は、トランザクションの外部のデータを、トランザクションスクリプトによりアクセス可能にして、ベースプロトコルを支持しながら、スクリプトの多様性を増大させる。
図5は、本願明細書に開示される実施形態による、ノードソフトウェア450に対する拡張を示す。スクリプトエンジン452は、エクストラクタ501を更に含み、ノードソフトウェア450は、non-Scriptコード302を実行するプログラムランチャー502を更に含む。ノードソフトウェア450は、1つ以上のnon-Scriptライブラリ303を更に含んでよい。エクストラクタは、トランザクション152からnon-Scriptコード302を抽出し、これを実行のためにプログラムランチャー502に渡すよう構成される。実施形態では、これは、non-Scriptコード302を実行するために、non-Scriptライブラリ303のうちの1つ以上を使用することを含んでよい。
記載される処理は、ノードソフトウェア450により、ブロックチェーンネットワークの少なくとも1つのノード104において実行される。一般的に、これは、トランザクション152を検証する任意のタイプのノード104、マイニングノード104M、記憶ノード104S、及び/又は転送ノード104Fであり得る。しかしながら、特に好適な実施形態では、処理は、マイニングノード104Mのうちの少なくとも1つ以上により実施される。このように、マイナーは、少なくとも固有のマイニング手数料により、及び支払人、例えばAlice103aにより明示的に残された更に追加のマイニング手数料により、non-Scriptソフトウェア302を実行するために支払われる。間もなく更に詳細に議論されるように、本開示は、関連するトランザクションを検証するために、non-Scriptコード302が実行されなければならないメカニズムを提供する。従って、マイナーは、手数料を得るためにnon-Scriptコード302を実行しなければならない。
スクリプトエンジン452は、ブロックチェーン150上のブロック151に既に記録された第1トランザクション152i(Txi)を受信するよう構成される。スクリプトエンジン452は、ブロックチェーン150上のトランザクション152の自身のノードのローカルレコードにアクセスすることにより、又は別のノード104(例えば、記憶ノード104S)上のレコードにアクセスすることにより、これを行う。第1トランザクションTxiは、ロックスクリプト、つまりScriptコード301を含む使用可能アウトプットを含む。
スクリプトエンジン452は、ブロックチェーン150上のブロック151に未だ記録されていない第2トランザクション152j(Txj)を受信するよう更に構成される。むしろ、第2トランザクションは、本開示のメカニズムに基づき伝播及び/又はマイニングのために検証されようとしている。第2トランザクションTxjは、エンドユーザのユーザ機器102から、例えばAliceの機器102bから、受信されてよい。代替として、第2トランザクションTxjは、転送ノード104Fとして動作する別のノード104から受信されてよい。別の可能性として、第2トランザクションTxjは、検証を実行するノード104において作成され得る。この場合、第2トランザクションTxjは、ローカルノード104の別の内部処理から受信される。どこから受信されても、第2トランザクションTxjは、第1トランザクションTxiのアウトプット203をポイントするインプット202を含む。第2トランザクションTxjのインプット202は、第1トランザクションTxiのアウトプットをアンロックするアンロックスクリプトも含み、それにより、伝播及び/又はマイニング(従って、最終的に、ブロックチェーン150上のブロック151への記録)のために第2トランザクションTxjを検証させる。アンロックスクリプトは、ロックスクリプトと同じスクリプト言語、つまり本例ではScriptで作成される。
エクストラクタ501は、第1トランザクションTxiからnon-Scriptコード302を自動的に抽出し、実行(execute、run)するためにnon-Scriptコード302をnon-Scriptプログラムランチャー502に渡すよう構成される。代替として、non-Scriptコードがブロックチェーン150条の別の既存のトランザクション152に含まれること、及びそれから抽出されることが排除されない。以下は、non-Scriptコード302が、第2トランザクションTxjを検証するために使用されているロックスクリプト301と同じトランザクションに埋め込まれているという観点で説明されるが、これが必ずしも全部の可能な実施形態を限定しないことが理解される。
non-Scriptコード302がロックスクリプト301と同じトランザクション、つまり第1トランザクションTxiに埋め込まれている場合、このための多数の選択肢がある。non-Scriptコード302の包含は非標準化要素なので、原則的には、エクストラクタ501がそれを探すべき場所又はトランザクションデータ構造の中でそれをどのように見付けるかが分かるように構成される限り、それは第1トランザクションTxiのどこにでも(それぞれのロックスクリプト301と同じ使用可能アウトプットに、又は使用不可能アウトプットのような別のアウトプットに、又はトランザクションに付加されるような他の場所に)包含できる。これは、non-Scriptコード302を、トランザクション152(本例ではTxi)の所定の位置又は所定のフィールドに包含することにより達成され得る。この場合、エクストラクタ501は、所定のフィールド又は位置からnon-Scriptコード302を抽出するよう予め構成される。代替として、トランザクションデータ構造の中のnon-Scriptコード302の位置は、コードマーカにより示され得る。例えば、幾つかの実施形態では、NSC_{…}のような非標準(non-Script)コードマーカが使用され得る。ここで、波括弧の間の部分は、非スクリプトコード302を含む。しかしながら、別の選択肢として、non-Scriptコード302は、ロックスクリプト301のスクリプト言語のオペコードを用いて、つまり本例ではScript OPコードを用いて、第1トランザクションTxiのアウトプット203のうちの1つに埋め込まれ得る(例えば、ロックスクリプト301自体に埋め込まれる)。
このために使用されるScript OPコードは、OP_RETURNであり得る。この場合、non-Scriptコード302は、ロックスクリプト301と別個のアウトプット203に含まれる。OP_RETURNは、ノード104のスクリプトエンジン452により実行されると、それが含まれる任意のアウトプット203のスクリプトを終了する効果を有する。従って、OP_RETURNは、それが使用不可能に含まれたアウトプットをレンダリングする。これは、任意のペイロードデータを運ぶ代わりに、問題のアウトプットを使用可能にする。
別の例として、OP_DROP又はOP_PUSHDATAのようなScript OPコードは、ロックスクリプト301自体に、同じアウトプット203に、non-Scriptコードを埋め込むために使用され得る。例えば、OP_DROPは、スクリプトエンジン452に、アンロックスクリプトの実行中に、OP_DROPの前に来るものは何でも無視するよう指示する。これは、ロックスクリプト301がスクリプトエンジン452により実行されるときエラーを生じることなく、non-Scriptコード302をロックスクリプト301に包含するために使用できる。OP_PUSHDATAは、スクリプトエンジン452に、次のNバイトをスタック453にプッシュするよう指示する。例えば、OP_PUSHDATA4は、次の4バイトをスタックにプッシュすることを示す。これは、non-Scriptコードをスタック453にプッシュするために使用で位、エクストラクタ501は、次にnon-Scriptコードをスタック453から読み出し得る。
どんな抽出手段が利用されても、エクストラクタ501は、抽出したnon-Scriptコード302をプログラムランチャー502に実行のために渡す。実施形態では、エクストラクタ501は、non-Scriptコード302(及び任意のnon-Scriptコードマーカ)を除去して、スクリプトエンジン452により実行されるべきアウトプット203内の標準Script301のみを含む標準トランザクションフォーマットのみを残してもよい。しかしながら、OP_RETURN、OP_DROP、又はOP_PUSHDATAを使用するような他の実施形態では、ロックScript301は、スクリプトエンジン452が遭遇したときにnon-Scriptコード302を無視するか又は無効になるようレンダリングするよう既に記述されているので、これは必須ではない。
プログラムランチャー502は、エクストラクタ501から受信したnon-Scriptコード302を実行するよう構成される。non-Scriptコード302は、任意の高級又は低級言語を含み得る。それは、例えば、任意のスクリプト言語、コンパイルを必要とする言語、リンキングを必要とする言語、アセンブリングを必要とする言語、及び/又はインタープリットされた言語を含んでよい。コードランチャー452によるnon-Scriptコード302の実行は、言語に依存して、コンパイル、リンキング、アセンブリング、及び/又はインタープリット、のうち任意の1つ以上を含んでよい。例えば、non-Scriptコード302は、C、C++、Python、Java script、BASIC、等、又は言語の組合せでもよい。実施形態では、non-Scriptコードランチャー502は、仮想マシンの形式をとってよい。それは、例えば1つ以上のライブラリ303にリンクすることにより、non-Scriptコード302を実行する1つ以上のライブラリ303を表してよい。
コードランチャー502により実行されると、non-Scriptコード302は、1つ以上の第1値を生じる1つ以上の演算を実行する。1つ以上の第1値は、標準スクリプトエンジン452により認識される第1言語により読み取り可能な記憶場所へと出力される。物理的に、この記憶場所は、任意の不揮発性メモリ、RAM、又は1つ以上のレジスタであり得る。第1言語がScriptのようなスタックに基づく言語である場合、記憶場所はスタック453である。しかしながら、他のブロックチェーン実装におけるスタックに基づかない第1言語の可能性は排除されない。例により、以下は、non-Scriptコード302により出力される値の宛先記憶位置がスタック453であり、それをスクリプトエンジン452により認識されるスタックに基づくスクリプト言語(例えば、Script)にアクセス可能にする、スタックに基づく実装の観点で説明されるが、これは必ずしも限定ではないことが理解される。
第1トランザクションTxiのロックスクリプト301は、「真(true)」を出力し、それにより検証を可能にするよう、non-Scriptコード302によりスタック453に書き込まれる値のうちの少なくとも1つに依存するよう構成される。従って、第2トランザクションTxjの検証は、強制的に、それぞれのノード104においてnon-Scriptコード302を実行することを条件とする。
この他に、non-Scriptコード302によりスタック453に書き込まれる値に対してロックスクリプト301により課される特定の条件は、実質的に、ユーザ又は開発者が望む何であってもよい。支払人がAliceである、つまり第1トランザクションTxiのアウトプット203がAliceに対してロックされる所与の例では、non-Scriptコード302は、Aliceが、彼女のために実行するために、例えばAlice自身の機器103aの代わりにネットワーク106上で何らかの計算分析又は機械学習タスクを実行するために、マイナーに支払うことを望む何らかのコードであってよい。non-Scriptコード301の期待される出力値は、例えば、所望の結果、又はnon-Scriptコード302が正しく実行されたことの証拠であり得る。
例えば、実施形態では、Bob103bはマイナーであってよい(従って、彼のコンピュータ機器102bは、単なるエンドユーザ機器ではなくマイニングノード104Mを含む)。第2トランザクションTxjのインプット202は、Aliceに対してロックされる、第1トランザクションTxiのアウトプット203をポイントし、第2トランザクションTxjは、マイナーBob又は別のパーティに対してロックされたアウトプット203を有する。従って、このシナリオでは、Aliceは、彼女の所望のソフトウェアを実行するために、少なくともマイニング手数料及び場合によっては明示的料金を、Bobに支払っている。non-Scriptコード302の出力は、Scriptコードで実行するスタック453にプッシュされることができ、OP_CODESを適用可能にする。返される値(「第1」値)は、他のスクリプトをアンロックする、又はローダが存在した同じスクリプトをアンロックし完了するために使用できる。Bobは、non-Scriptコード302を実行しなければならないか、又は、第2トランザクションTxjが検証されず、彼は彼の手数料を受け取らない。ロックスクリプト301を含むアウトプット302は、ダスト(無視できる)額のデジタルアセットを指定し得る。一方で、第1トランザクションTxiのインプット202は無視できない額であり、従って、事実上、マイナーだけが支払われる。代替として、別のパーティが、同様にアウトプット203(又は別のアウトプット)により支払われ得る。
non-Scriptコード302の出力値(「第1」値)に課される条件の例として、スクリプトエンジン452は、第2値を受信し、第2値を第1値(non-Scriptコード302により出力される値)と比較し、第1値と第2値とが一致することを条件として、真の結果を出力するよう構成されてよい。第2値は、第2トランザクションTxjのインプット202から、又はユーザ入力のような別のソースから(例えば、マイナーBobによる)受信され、又はnon-Scriptコード302を実行してるノード104にローカルに予め格納されていてよい。この文脈で「第1」及び「第2」は、ここでも単なる任意のラベルであり、値が生成される順序に関して必ずしも何も意味しないことが理解される。
例えば、第1トランザクションTxiのアウトプット203内のロックスクリプト301は、以下であり得る:
この場合、有効な第2トランザクションTxjを有するために、第2トランザクションTxjのインプット202内のアンロックスクリプトは、以下であり得る:
ここで、< >はスタックへのプッシュを表し、{ }はスタックへプッシュされたアウトプットにより外部で実行されるnon-Scriptコードを表す。期待される出力(Expected Output)は、第1値(non-Scriptコード302によりスタック453へ出力される値)であり、Non Script Code 1 Inputは、第2値であり、つまりnon-Scriptコード302のアウトプットと比較される。
本例では、第2トランザクションを検証するためには、第1値が第2値と同一である必要がある。しかしながら、より一般的には、一致は、同一の値を要求してよく、又は一致のための何らかの他の基準を許容してよい。例えば、値が数値である又は値の同義語が単語である等の場合には、第1値及び第2値は、誤差のマージンの範囲内である。
更なる例では、ロックスクリプト301は、non-Scriptコードにより出力されるべき1つより多くの値を条件とし得る。
例えば、第1トランザクションTxiのアウトプット203内のロックスクリプト301は、以下であり得る:
第2トランザクションTxjのインプット202内の対応するアンロックスクリプトは以下であり得る:s
上述の例示的なスクリプトの実行は、図6に示される。
本例では、non-Scriptコード302により出力される2つの第1値(期待値)の各々が、2つの対応する第2値(この場合、両方とも第2トランザクションTxjのインプット内で指定される)のうちのそれぞれ1つに等しい必要がある。他の例では、ロックスクリプト301は、例えば2つの値のうちのいずれか1つがそのそれぞれの第2値に一致する場合に(つまり、論理ORであり、両者の一致が必ずしも要求されない)、条件が満たされると指定し得る。別の例はXORであり得る。これらの概念は、2つより多くの第1値及びそれらの対応する第2値に拡張することもできる。
スクリプトの評価は、インプット及びアウトプットがオンチェーンで記録され、条件の検証がオンチェーンで実行されるが、複雑な条件はオフチェーンで評価される、ハイブリッドオンチェーン/オフチェーンメカニズムを用いて行われる。これは、マイナーがこれに特化することを選択する場合に、マイナーに、有料の非集中化計算を実行するための方法を提供する。
上述の例では、トランザクションを償還するために署名が要求されないので、トランザクションを使用しようとすることにより、誰でもインプットを提出でき、任意の検証条件が<Non-Script Code 1>に実装できる。しかしながら、代替として、(non-Scriptコード302に依存しない)検証のための1つ以上の更なる条件が、第1トランザクションTxiのロックスクリプト301により追加で課されることができる。これらは、第2トランザクションTxjのアンロックスクリプトに負生まれるBobの署名の認証、又は第2トランザクションのアンロックスクリプトが第1トランザクションTxiのロックスクリプト301内に設定されたハッシュパズルの解を提供すること、のような1つ以上の条件付き条件を含み得る。
上記の実施形態は、単なる例示として説明したものであることが理解されるであろう。
より一般的には、本願明細書に開示される1つの態様によると、ブロックチェーンネットワークのノードにより実行される、コンピュータにより実施される方法であって、ブロックチェーンのコピーが前記ブロックチェーンネットワークの前記ノードのうちの少なくとも幾つかに渡り維持され、前記ブロックチェーンはブロックのチェーンを含み、各ブロックは1つ以上のトランザクションを含み、各トランザクションは1つ以上のアウトプットを含み、各アウトプットは第1言語で作成されたロックスクリプトを含む、方法が提供される。前記方法は、
前記トランザクションのうちの第1トランザクションの少なくとも第1アウトプットからのロックスクリプトにアクセスするステップであって、前記第1アウトプットの前記ロックスクリプトは、前記第1言語で、前記第1アウトプットをアンロックするための1つ以上の条件を指定する、ステップと、
未だブロックチェーンに記録されていない第2トランザクションを受信するステップであって、前記第2トランザクションは、前記第1言語で作成されたアンロックスクリプトを含むインプットを含む、ステップと、
を含む。前記方法は、
前記第1トランザクション又は前記ブロックチェーン上の前記トランザクションのうちの別のトランザクションから、前記第1言語以外の第2言語で作成されたコードの部分を抽出するステップと、
前記第2言語で前記抽出したコードの部分を実行するステップであって、その結果として、前記コードが少なくとも1つの第1値を生成する、ステップと、
前記ロックスクリプトにより読み取り可能な記憶位置に、前記第1言語で前記第1値を書き込むステップと、
前記第2トランザクションからの前記アンロックスクリプトと一緒に、前記第1言語で、前記第1トランザクションの前記第1アウトプットからの前記ロックスクリプトを実行するステップであって、それにより、前記1つ以上の条件を評価する、ステップと、
を更に含み、
前記方法は、前記1つ以上の条件が満たされることを条件として、前記第2トランザクションを評価するステップを含む。前記アンロックスクリプトは、前記記憶位置から前記第1値を読み取るよう構成され、前記1つ以上の条件は、前記第1値に依存する条件を含む。
前記トランザクションのうちの第1トランザクションの少なくとも第1アウトプットからのロックスクリプトにアクセスするステップであって、前記第1アウトプットの前記ロックスクリプトは、前記第1言語で、前記第1アウトプットをアンロックするための1つ以上の条件を指定する、ステップと、
未だブロックチェーンに記録されていない第2トランザクションを受信するステップであって、前記第2トランザクションは、前記第1言語で作成されたアンロックスクリプトを含むインプットを含む、ステップと、
を含む。前記方法は、
前記第1トランザクション又は前記ブロックチェーン上の前記トランザクションのうちの別のトランザクションから、前記第1言語以外の第2言語で作成されたコードの部分を抽出するステップと、
前記第2言語で前記抽出したコードの部分を実行するステップであって、その結果として、前記コードが少なくとも1つの第1値を生成する、ステップと、
前記ロックスクリプトにより読み取り可能な記憶位置に、前記第1言語で前記第1値を書き込むステップと、
前記第2トランザクションからの前記アンロックスクリプトと一緒に、前記第1言語で、前記第1トランザクションの前記第1アウトプットからの前記ロックスクリプトを実行するステップであって、それにより、前記1つ以上の条件を評価する、ステップと、
を更に含み、
前記方法は、前記1つ以上の条件が満たされることを条件として、前記第2トランザクションを評価するステップを含む。前記アンロックスクリプトは、前記記憶位置から前記第1値を読み取るよう構成され、前記1つ以上の条件は、前記第1値に依存する条件を含む。
実施形態では、善意第1言語は、スタックに値を置き、前記スタックから値を読み出す、スタックに基づく言語であってよく、前記第2言語はスタックに基づかない言語であってよい。この場合、前記記憶場所は前記スタックであってよい。
実施形態では、前記第2言語は、チューリング完全であってよく、前記第1言語はチューリング完全でなくてよい。
実施形態では、前記第1言語はScriptであってよく、前記第2言語は非Script(non-Script)言語であってよい。
実施形態では、コードの前記部分は前記第1トランザクションから抽出されてよい。
幾つかのそのような実施形態では、コードの前記部分は、前記第1トランザクションの前記第1アウトプットに格納されてよく、抽出するステップは、前記第1アウトプットからコードの前記部分を抽出することを含んでよい。例えば、コードの前記部分は、前記第1アウトプットの前記ロックスクリプトに埋め込まれてよく、抽出するステップは、前記第1アウトプットの前記ロックスクリプトからコードの前記部分を抽出するステップを含む。
代替として、コードの前記部分は、前記第1トランザクションの第2使用不可能アウトプットに格納されてよく、抽出するステップは、前記第2アウトプットからコードの前記部分を抽出することを含んでよい。
実施形態では、前記アンロックスクリプトは、前記第1値を第2値と比較するよう構成されてよく、前記第1値に依存する前記条件は、前記第1値が前記第2値に一致するという条件を含んでよい。
実施形態において、前記第2値は、前記第2トランザクションに含まれてもよい。この場合、前記方法は、前記第2トランザクションから前記第2値を抽出するステップを含んでよく、前記比較するステップは、前記第1値を前記第2トランザクションから抽出された前記第2値と比較するステップを含んでよい。
実施形態では、前記第2値は、前記第2トランザクションのインプットに含まれてよく、前記第2値を抽出するステップは、前記第2トランザクションの前記インプットから前記第2値を抽出するステップを含む。例えば、前記第2値は、前記アンロックスクリプトに埋め込まれてよく、前記第2値を抽出するステップは、前記第2トランザクションの前記インプットから前記第2値を抽出するステップを含む。
代替の実施形態では、前記第2値は、ユーザ入力により決定されてよく、又は前記方法を実行するノードにおいて予め格納されてよい。
実施形態では、コードの抽出された部分を実行した結果として、前記コードは、複数の第1値を出力してよい。前記比較するステップは、前記第1値の各々を複数の第2値のうちのそれぞれ1つと比較するステップを含んでよく、前記第1値に依存する条件は、前記第1値のうちの少なくとも1つが前記それぞれの第2値に一致するという条件を含んでよい。
例えば、前記第1値に依存する条件は、前記第1値の各々が前記それぞれの第2値に一致するという条件を含んでよい。代替として、前記第1値に依存する条件は、前記第1値のいずれかが前記それぞれの第2値に一致するという条件を含む。
実施形態では、前記条件は、前記第2言語のコードの前記部分ではなく、前記アンロックスクリプトにのみ基づき評価される1つ以上の他の条件を更に含んでよい。例えば、前記1つ以上の他の条件は、前記ロックスクリプトが、実行されると、前記ロックスクリプトがロックされているパーティの署名であるとして前記アンロックスクリプト内の暗号署名を認証するという条件を含んでよい。
実施形態では、コードの前記部分は、前記第1トランザクションに圧縮形式で格納されてよく、この場合、コードの前記部分を実行するステップは、前記圧縮形式の前記コードを伸張するステップを含む。
実施形態では、前記方法を実行するノードは、マイニングノードであってよい。この場合、前記方法は、前記検証を条件としてトランザクションのプールに前記第2トランザクションを含むステップと、トランザクションの前記プールを前記ブロックチェーンの新しいブロックへとマイニングするよう競争するステップと、を含んでよい。
実施形態では、前記方法を実行するノードは、転送ノードであってよい。この場合、前記方法は、前記検証を条件として、前記ブロックチェーンネットワークのノードのうちの少なくとも1つの他のノードに、前記第2トランザクションを転送するステップを含んでよい。
実施形態では、前記方法を実行するノードは、記憶ノードであってよい。この場合、前記方法は、検証され及びそれにより新しいブロックへとマイニングされると、前記第2トランザクションを含む前記新しいブロックを含む前記ブロックチェーンの一部又は全部を格納するステップを含んでよい。
本願明細書に開示される別の態様によると、コンピュータ可読記憶装置上に具現化され、ブロックチェーンネットワークのノード上で実行されると本願明細書に開示されたいずれかの実施形態による方法を実行するよう構成される、コンピュータプログラムが提供される。
別の態様によると、ブロックチェーンネットワークのノードであって、
1つ以上のプロセッサを含む処理機器と、
1つ以上のメモリ装置を含むメモリと、
トランザクションを受信するネットワークインタフェースと、
を含み、前記メモリは、前記処理機器上で実行するよう構成されるソフトウェアを格納し、前記ソフトウェアは、実行されると、本願明細書に開示される任意の態様による方法を実行するよう構成され、前記第2トランザクションは前記ネットワークインタフェースを介して受信される、ノードが提供される。
1つ以上のプロセッサを含む処理機器と、
1つ以上のメモリ装置を含むメモリと、
トランザクションを受信するネットワークインタフェースと、
を含み、前記メモリは、前記処理機器上で実行するよう構成されるソフトウェアを格納し、前記ソフトウェアは、実行されると、本願明細書に開示される任意の態様による方法を実行するよう構成され、前記第2トランザクションは前記ネットワークインタフェースを介して受信される、ノードが提供される。
別の態様によると、ブロックチェーンに記録するためのトランザクションのセットであって、前記セットは、1つ以上のコンピュータ可読データ媒体上に具現化され、
少なくとも第1アウトプットを含む第1トランザクションであって、前記第1アウトプットは第1言語で作成されたロックスクリプトを含み、前記ロックスクリプトは、前記第1言語で、前記第1アウトプットをアンロックするための1つ以上の条件を指定する、第1トランザクションと、
インプットを含む第2トランザクションであて、前記インプットは、前記第1言語で作成されたアンロックスクリプトを含む、第2トランザクションと、
を含み、
前記第1トランザクションは、前記第1言語以外の第2言語で作成されたコードの埋め込まれた部分を含み、コードの前記部分は、ブロックチェーンネットワークのノード上で実行されると、少なくとも第1値を生成し、前記第1値を前記第1言語の前記ロックスクリプトにより読み取り可能な記憶位置に書き込むよう構成され、前記アンロックスクリプトは、前記記憶位置から前記第1値を読み取るよう構成され、前記ロックスクリプト内で指定される前記1つ以上の条件は、前記第1値に依存する条件を含む、セットが提供される。
少なくとも第1アウトプットを含む第1トランザクションであって、前記第1アウトプットは第1言語で作成されたロックスクリプトを含み、前記ロックスクリプトは、前記第1言語で、前記第1アウトプットをアンロックするための1つ以上の条件を指定する、第1トランザクションと、
インプットを含む第2トランザクションであて、前記インプットは、前記第1言語で作成されたアンロックスクリプトを含む、第2トランザクションと、
を含み、
前記第1トランザクションは、前記第1言語以外の第2言語で作成されたコードの埋め込まれた部分を含み、コードの前記部分は、ブロックチェーンネットワークのノード上で実行されると、少なくとも第1値を生成し、前記第1値を前記第1言語の前記ロックスクリプトにより読み取り可能な記憶位置に書き込むよう構成され、前記アンロックスクリプトは、前記記憶位置から前記第1値を読み取るよう構成され、前記ロックスクリプト内で指定される前記1つ以上の条件は、前記第1値に依存する条件を含む、セットが提供される。
本明細書に開示される別の態様によれば、方法であって、第1パーティ、第2パーティ、関連し得る任意の第3者、及び/又はノードのネットワークのうちの任意の1つ以上の動作を含む方法を提供することができる。
本明細書に開示される別の態様によれば、第1パーティのコンピュータ機器、第2パーティのコンピュータ機器、任意の第3者のコンピュータ機器、及び/又はノードのネットワークのうちの任意の1つ以上を備えるシステムを提供することができる。
開示された技術の他の変形例又は使用事例は、本明細書で開示されると、当業者に明らかになり得る。本開示の範囲は、記載された実施形態によって限定されるものではなく、添付の特許請求の範囲によってのみ限定される。
Claims (26)
- ブロックチェーンネットワークのノードにより実行される、コンピュータにより実施される方法であって、ブロックチェーンのコピーが前記ブロックチェーンネットワークの前記ノードのうちの少なくとも幾つかに渡り維持され、前記ブロックチェーンはブロックのチェーンを含み、各ブロックは1つ以上のトランザクションを含み、各トランザクションは1つ以上のアウトプットを含み、各アウトプットは第1言語で作成されたロックスクリプトを含み、前記方法は、
前記トランザクションのうちの第1トランザクションの少なくとも第1アウトプットから前記ロックスクリプトにアクセスするステップであって、前記第1アウトプットの前記ロックスクリプトは、前記第1言語で、前記第1アウトプットをアンロックするための1つ以上の条件を指定する、ステップと、
ブロックチェーンに未だ記録されていない第2トランザクションを受信するステップであって、前記第2トランザクションは前記第1言語で作成されたアンロックスクリプトを含む、ステップと、
前記第1トランザクション又は前記ブロックチェーン上の前記トランザクションのうちの別のトランザクションから、前記第1言語以外の第2言語で作成されたコードの部分を抽出するステップと、
前記第2言語で前記抽出したコードの部分を実行するステップであって、その結果として、前記コードが少なくとも1つの第1値を生成する、ステップと、
前記ロックスクリプトにより読み取り可能な記憶位置に、前記第1言語で前記第1値を書き込むステップと、
前記第2トランザクションからの前記アンロックスクリプトと一緒に、前記第1言語で、前記第1トランザクションの前記第1アウトプットからの前記ロックスクリプトを実行するステップであって、それにより、前記1つ以上の条件を評価する、ステップと、
を含み、
前記方法は、前記1つ以上の条件が満たされることを条件として、前記第2トランザクションを評価するステップを含み、
前記アンロックスクリプトは、前記記憶位置から前記第1値を読み取るよう構成され、前記1つ以上の条件は前記第1値に依存する条件を含む、方法。 - 前記第1言語は、スタックに値を配置し前記スタックから値を読み取る、スタックに基づく言語であり、前記第2言語はスタックに基づかず、前記記憶位置は前記スタックである、請求項1に記載の方法。
- 前記第2言語はチューリング完全であり、前記第1言語はそうではない、請求項1に記載の方法。
- 前記第1言語はScriptであり、前記第2言語はnon-Script言語である、請求項1に記載の方法。
- コードの前記部分は、前記第1トランザクションから抽出される、請求項1~4のいずれかに記載の方法。
- コードの前記部分は、前記第1トランザクションの前記第1アウトプットに格納され、抽出するステップは、前記第1アウトプットからコードの前記部分を抽出することを含む、請求項5に記載の方法。
- コードの前記部分は、前記第1アウトプットの前記ロックスクリプトに埋め込まれ、抽出するステップは、前記第1アウトプットの前記ロックスクリプトからコードの前記部分を抽出することを含む、請求項6に記載の方法。
- コードの前記部分は、前記第1トランザクションの第2使用不可能アウトプットに格納され、抽出するステップは、前記第2アウトプットからコードの前記部分を抽出することを含む、請求項5に記載の方法。
- 前記アンロックスクリプトは、前記第1値を第2値と比較するよう構成され、前記第1値に依存する前記条件は、前記第1値が前記第2値に一致するという条件を含む、請求項1~8のいずれかに記載の方法。
- 前記第2値は、前記第2トランザクションに含まれ、
前記方法は、前記第2トランザクションから前記第2値を抽出するステップを含み、前記比較するステップは、前記第1値を前記第2トランザクションから抽出された前記第2値と比較するステップを含む、請求項9に記載の方法。 - 前記第2値は、前記第2トランザクションのインプットに含まれ、前記第2値を抽出するステップは、前記第2トランザクションの前記インプットから前記第2値を抽出するステップを含む、請求項10に記載の方法。
- 前記第2値は、前記アンロックスクリプトに埋め込まれ、前記第2値を抽出するステップは、前記第2トランザクションの前記インプットから前記第2値を抽出するステップを埋、請求項11に記載の方法。
- 前記第2値はユーザ入力により決定される、請求項9に記載の方法。
- 前記第2値は前記方法を実行するノードに予め格納される、請求項9に記載の方法。
- コードの抽出した部分を実行した結果として、前記コードは複数の第1値を出力し、
前記比較するステップは、前記第1値の各々を、複数の第2値のうちのそれぞれ1つと比較するステップを含み、前記第1値に依存する条件は、前記第1値のうちの少なくとも1つが前記それぞれの第2値に一致するという条件を含む、請求項9~14のいずれかに記載の方法。 - 前記第1値に依存する条件は、前記第1値の各々が前記それぞれの第2値に一致するという条件を含む、請求項15に記載の方法。
- 前記第1値に依存する条件は、前記第1値のいずれかが前記それぞれの第2値に一致するという条件を含む、請求項15に記載の方法。
- 前記条件は、前記第2言語のコードの前記部分ではなく、前記アンロックスクリプトにのみ基づき評価される1つ以上の他の条件を更に含む、請求項1~17のいずれかに記載の方法。
- 前記1つ以上の他の条件は、前記ロックスクリプトが、実行されると、前記ロックスクリプトがロックされているパーティの署名であるとして前記アンロックスクリプト内の暗号署名を認証するという条件を含む、請求項18に記載の方法。
- コードの前記部分は、前記第1トランザクションに圧縮形式で格納され、コードの前記部分を実行するステップは、前記圧縮形式の前記コードを伸張するステップを含む、請求項1~19のいずれかに記載の方法。
- 前記方法を実行する前記ノードはマイニングノードであり、
前記方法は、
前記検証を条件としてトランザクションのプールに前記第2トランザクションを含むステップと、
トランザクションの前記プールを前記ブロックチェーンの新しいブロックへとマイニングするよう競争するステップと、
を含む請求項1~20のいずれかに記載の方法。 - 前記方法を実行する前記ノードは転送ノードであり、
前記方法は、前記検証を条件として、前記ブロックチェーンネットワークのノードのうちの少なくとも1つの他のノードに、前記第2トランザクションを転送するステップを含む請求項1~21のいずれかに記載の方法。 - 前記方法を実行する前記ノードは記憶ノードであり、
前記方法は、検証され及びそれにより新しいブロックへとマイニングされると、前記第2トランザクションを含む前記新しいブロックを含む前記ブロックチェーンの一部又は全部を格納するステップを含む請求項1~22のいずれかに記載の方法。 - コンピュータ可読記憶装置上に具現化され、ブロックチェーンネットワークのノード上で実行されると請求項1~23のいずれかに記載の方法を実行するよう構成される、コンピュータプログラム。
- ブロックチェーンネットワークのノードであって、
1つ以上のプロセッサを含む処理機器と、
1つ以上のメモリ装置を含むメモリと、
トランザクションを受信するネットワークインタフェースと、
を含み、前記メモリは、前記処理機器上で実行するよう構成されるソフトウェアを格納し、前記ソフトウェアは、実行されると、請求項1~23のいずれかに記載の方法を実行するよう構成され、前記第2トランザクションは前記ネットワークインタフェースを介して受信される、ノード。 - ブロックチェーンに記録するためのトランザクションのセットであって、前記セットは、1つ以上のコンピュータ可読データ媒体上に具現化され、
少なくとも第1アウトプットを含む第1トランザクションであって、前記第1アウトプットは第1言語で作成されたロックスクリプトを含み、前記ロックスクリプトは、前記第1言語で、前記第1アウトプットをアンロックするための1つ以上の条件を指定する、第1トランザクションと、
インプットを含む第2トランザクションであて、前記インプットは、前記第1言語で作成されたアンロックスクリプトを含む、第2トランザクションと、
を含み、
前記第1トランザクションは、前記第1言語以外の第2言語で作成されたコードの埋め込まれた部分を含み、コードの前記部分は、ブロックチェーンネットワークのノード上で実行されると、少なくとも第1値を生成し、前記第1値を前記第1言語の前記ロックスクリプトにより読み取り可能な記憶位置に書き込むよう構成され、前記アンロックスクリプトは、前記記憶位置から前記第1値を読み取るよう構成され、前記ロックスクリプト内で指定される前記1つ以上の条件は、前記第1値に依存する条件を含む、トランザクションのセット。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GB201913143A GB201913143D0 (en) | 2019-09-12 | 2019-09-12 | Running a program from a blockchain |
GB1913143.2 | 2019-09-12 | ||
PCT/IB2020/057796 WO2021048661A1 (en) | 2019-09-12 | 2020-08-19 | Blockchain transactions including portions of code in different languages for complex validation |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2022548553A true JP2022548553A (ja) | 2022-11-21 |
Family
ID=68315255
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2022515632A Pending JP2022548553A (ja) | 2019-09-12 | 2020-08-19 | ブロックチェーンからのプログラムの実行 |
Country Status (6)
Country | Link |
---|---|
US (1) | US20220337437A1 (ja) |
EP (1) | EP4028973A1 (ja) |
JP (1) | JP2022548553A (ja) |
CN (1) | CN114430830A (ja) |
GB (1) | GB201913143D0 (ja) |
WO (1) | WO2021048661A1 (ja) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2602010A (en) * | 2020-12-15 | 2022-06-22 | Nchain Holdings Ltd | Generating and validating blockchain transactions |
GB2618105A (en) * | 2022-04-27 | 2023-11-01 | Nchain Licensing Ag | Protocol for communicating compact scripts |
Family Cites Families (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8504427B2 (en) * | 2007-09-28 | 2013-08-06 | Ncr Corporation | Multi-lingual two-sided printing |
AU2017222468B2 (en) * | 2016-02-23 | 2023-01-12 | nChain Holdings Limited | Agent-based turing complete transactions integrating feedback within a blockchain system |
US11727391B2 (en) * | 2016-04-11 | 2023-08-15 | Nchain Licensing Ag | Computer-implemented methods and systems for validating tokens for blockchain-based cryptocurrencies |
WO2017187399A1 (en) * | 2016-04-29 | 2017-11-02 | nChain Holdings Limited | Implementing logic gate functionality using a blockchain |
US20190149337A1 (en) * | 2016-04-29 | 2019-05-16 | nChain Holdings Limited | Implementing logic gate functionality using a blockchain |
WO2018215947A1 (en) * | 2017-05-26 | 2018-11-29 | nChain Holdings Limited | Script-based blockchain interaction |
JP7220678B2 (ja) * | 2017-07-07 | 2023-02-10 | エヌチェーン ライセンシング アーゲー | ブロックチェーン上で高レベル演算を提供する方法及びシステム |
SG11202004147RA (en) * | 2017-11-09 | 2020-06-29 | Nchain Holdings Ltd | System for securing verification key from alteration and verifying validity of a proof of correctness |
KR20200080263A (ko) * | 2017-11-09 | 2020-07-06 | 엔체인 홀딩스 리미티드 | 중재자 컴퓨터 시스템을 이용하여 컴퓨터 프로그램의 정확한 실행을 보장하기 위한 시스템 및 방법 |
CN112041873B (zh) * | 2018-04-27 | 2024-04-19 | 区块链控股有限公司 | 区块链网络划分 |
US11682053B2 (en) * | 2018-06-22 | 2023-06-20 | Edatanetworks Inc. | Blockchain tracking and managing of a transaction incented by a merchant donation to a consumer affinity |
GB201820947D0 (en) * | 2018-12-21 | 2019-02-06 | Nchain Holdings Ltd | Computer-implemented system and method |
GB201907345D0 (en) * | 2019-05-24 | 2019-07-10 | Nchain Holdings Ltd | Protocol for validating blockchain transactions |
GB201907346D0 (en) * | 2019-05-24 | 2019-07-10 | Nchain Holdings Ltd | Using blockchain transactions to provide off-chain functionality |
-
2019
- 2019-09-12 GB GB201913143A patent/GB201913143D0/en not_active Ceased
-
2020
- 2020-08-19 WO PCT/IB2020/057796 patent/WO2021048661A1/en unknown
- 2020-08-19 CN CN202080063967.8A patent/CN114430830A/zh active Pending
- 2020-08-19 JP JP2022515632A patent/JP2022548553A/ja active Pending
- 2020-08-19 US US17/642,147 patent/US20220337437A1/en active Pending
- 2020-08-19 EP EP20760934.8A patent/EP4028973A1/en active Pending
Also Published As
Publication number | Publication date |
---|---|
GB201913143D0 (en) | 2019-10-30 |
CN114430830A (zh) | 2022-05-03 |
US20220337437A1 (en) | 2022-10-20 |
WO2021048661A1 (en) | 2021-03-18 |
EP4028973A1 (en) | 2022-07-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2022534047A (ja) | ブロックチェーントランザクションの中のインスクリプト関数 | |
JP7486528B2 (ja) | ブロックチェーン・トランザクションを検証するプロトコル | |
US20230342437A1 (en) | Blockchain-based system and method for publishing an operating system | |
JP2022548583A (ja) | ブロックチェーンのトランザクションを介するデータの共有 | |
JP2023508088A (ja) | ブロックチェーンオーバーレイネットワークへの鍵のマッピング | |
JP2022548553A (ja) | ブロックチェーンからのプログラムの実行 | |
JP2023524855A (ja) | ブロックチェーンを介したデータの効率的かつセキュアな処理、アクセス、および送信のためのコンピュータで実施されるシステムおよび方法 | |
JP2023554148A (ja) | 機密データのブロック | |
CN116830085A (zh) | 生成区块链事务以及核实区块链事务 | |
KR20240096559A (ko) | 분산된 블록체인 기능들을 위한 방법들 및 시스템들 | |
CN117136527A (zh) | 用于区块链实现的数据应用程序中的签名验证的改进方法和系统 | |
US20220309504A1 (en) | Multi-criteria blockchain protocol | |
US20240095692A1 (en) | Computer implemented method and system | |
US20240291678A1 (en) | Multi-level blockchain | |
KR20240100377A (ko) | 분산된 블록체인 기능들을 위한 방법들 및 시스템들 | |
US20220358189A1 (en) | Storing a program on a blockchain | |
Elrom et al. | Bitcoin wallets and transactions | |
KR20220143864A (ko) | 정렬된 데이터 로깅을 위한 방법, 데이터 구조, 및 시스템 | |
CN118355627A (zh) | 区块链脚本引擎 | |
TW202341044A (zh) | 有序且僅可附加之資料儲存技術 | |
TW202409862A (zh) | 用於緊密腳本交易之傳訊協定 | |
KR20240093714A (ko) | 분산된 블록체인 기능들을 위한 방법들 및 시스템들 | |
TW202344030A (zh) | 用於通訊緊密腳本之協定 | |
TW202329668A (zh) | 證明及驗證有序事件序列之技術 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20230720 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20240628 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20240730 |