本明細書では、用語「ブロックチェーン」は、電子的な、コンピュータに基づく、分散型台帳の幾つかの種類のうちの任意のものを表す。これらは、総意に基づくブロックチェーン及びトランザクションチェーン技術、許可及び未許可台帳、共有台帳、並びにこれらの変形を含む。他のブロックチェーン実装が提案され開発されているが、ブロックチェーン技術の最も広く知られているアプリケーションは、Bitcoinブロックチェーンである。Bitcoinの例は、ここでは、本開示において便宜上及び説明の目的で参照されることがあるが、本発明はBitcoinブロックチェーンと共に使用することに限定されず、代替のブロックチェーン実装及びプロトコルが本発明の範囲に包含されることに留意すべきである。例えば、本発明は、どんな制約がトランザクション内に符号化できるかに関してBitcoinと同様の制限を有する他のブロックチェーン実装において有用であってよい。用語「Bitcoin」は、ここでは、Bitcoinプロトコルの任意の変形を含むために使用される。
ブロックチェーンは、コンピュータに基づく非集中型の分散システムとして実装されるピアツーピア電子台帳である。この台帳は、ブロックで構成され、ブロックは、トランザクション及び他の情報で構成されてよい。ブロックチェーンシステムまたはブロックチェーンネットワークは、複数のブロックチェーンノード及び動作セットを有する。ブロックチェーンノードは、動作セットの中の動作の一部又は全部を実行するよう構成されてよい。種々のブロックチェーンノードは、コンピュータハードウェア、コンピュータソフトウェア、又は両者の組み合わせとして実装され、ノードオペレータにより操作されてよい。ここで、ノードオペレータは、他のノードオペレータと独立であり無関係であり得る。ブロックチェーンノードは、それぞれ、ブロックチェーン台帳またはその何らかの部分のコピーを維持してよい。動作セットは、トランザクションを生成すること、トランザクションを伝搬すること、ブロックチェーン台帳を読み出すこと、ブロックチェーン台帳を評価すること、ブロックチェーン台帳への提案される追加のために新しいブロックを生成すること(マイニング)、他のブロックチェーンノードと通信すること、ブロックチェーンアセットを管理するためにユーザにウォレット機能を提供すること、を含んでよい。
ブロックチェーン台帳は、台帳が変更されるときを決定する単一のブロックチェーンノード又はエンティティが存在しないという点で、非集中型である。代わりに、ブロックチェーンノードは、ブロックチェーン台帳を検証し、他のブロックチェーンノードにより行われた動作がそれらの結果と一貫していることを検証するために、ブロックチェーンプロトコルのルールの知識によりプログラミングされる。用語「ブロックチェーン」は、ブロックチェーン台帳が繋げられたブロックのシリーズを含み、各ブロックがコンピュータメモリ内のデータ構造として表現可能であり、コンピュータプロセスにより読み取り可能であり、データ送信として送信可能であるという事実を表してよい。ブロックは、1つ以上のトランザクションを含み、トランザクションもコンピュータメモリ内のデータ構造として表現可能であり、コンピュータプロセスにより読み取り可能であり、データ送信として送信可能である。ブロックは繋げられ(chained)、ブロックチェーンに公式に追加された各々の新しいブロックが直前のブロックへの不変の参照を含み、直前のブロックはその直前のブロックへの不変の参照を含み、以下同様である。
ブロックチェーンプロトコルのルールのうちの1つは、ブロックがブロックチェーンに一旦追加されると、それは変更できない、つまり不変であり、ブロックチェーン台帳の唯一の変更可能性は新しいブロックの追加である。ブロックチェーンノードは、ルールとして、該ノードが該ノードのブロックチェーン台帳のコピーの中にあるブロックを変更してはならず、ブロックを追加するだけであり、したがって、ブロックチェーンプロトコルに従うことを保証するために、提案されたブロックに対して検証処理を実行した後にブロックを追加するだけであることをプログラミングされる。ブロックは一旦台帳に追加されると不変であるので、ブロック内のトランザクションも不変である。
ブロックチェーンネットワークのノードの幾つかは、トランザクションを生成するよう動作する。トランザクションの生成は、電子ウォレットノード、エージェントノード、又はブロックチェーンネットワークの何らかの他のノードに関連する動作を含み得ると考えられる。ブロックチェーンノードは、トランザクションを生成するとき、トランザクションの詳細を含むデータオブジェクトを生成し、該データオブジェクトを、ブロックチェーンネットワークを介して標準的にはピアツーピア方式で接続できる他のブロックチェーンノードへ送信し又はブロードキャストする。幾つかのブロックチェーンノードは、「マイナー」として動作し、1つ以上のトランザクションを集めて、ブロックに対応するデータ構造を形成し、該ブロックに入れられるトランザクションを検証するために何からの計算を実行し、パズルを解き、該パズルの解をデータ構造に入れ、該ブロックを他のブロックチェーンノードへ伝搬しようと試みる。パズルは、トランザクションのデータ及びブロックチェーン台帳の現在状態に固有の重要な計算の形式であり、台帳の中のブロック数及び最後に追加されたブロックからのデータのようなものであってよい。
パズルをトランザクションに依存させることにより、悪者のブロックチェーンノードは、定刻前に作り上げたブロックを伝搬できない。重労働(nontrivial)なパズルを解かせることにより、悪者のブロックチェーンノードは、ブロックチェーンネットワークにブロックを単に注入することができず、ブロックチェーンノードが努力したことを証明するために何からの有意な計算タスクを行うことを要求する(要するに、困難な問題に対する解を示すことが「proof−of−work」である)。望ましくは、ブロックチェーンプロトコルでは、proof−of−workは重労働(nontrivial)であるが、パズルが解かれたこと及び作業が行われたことの検証は容易である。これは、他のブロックチェーンノードが、新しいブロックを台帳に追加することを提案しているブロックチェーンノードを必ずしも信頼する必要がないことを意味する。別のブロックチェーンノードにより検証された場合、ブロックチェーンノードは、新しいブロックをブロックチェーン台帳の自身のコピーの末尾に追加し、新しいブロックを他のブロックチェーンノードへ伝搬するだろう。他のブロックチェーンノードが同じ検証を実行するので、彼らも、ブロックが有効であり、ブロックチェーン台帳に追加されるべきであると結論づける。したがって、彼らは、ブロックを彼らのブロックチェーン台帳のコピーに追加する。ブロックチェーンノードが、提案された新しいブロックが有効ではないと決定した場合、該ノードは、該ブロックをブロックチェーン台帳の自身のコピーに追加せず、該ブロックを伝搬しないだろう。ブロックチェーンにおける有効性は総意に基づくので、トランザクションは、トランザクションが有効であることにノードの大多数が合意した場合に、有効であると考えられる。
ブロックチェーンシステムは、標準的には、ノード所有者及びオペレータが他のノード所有者及びオペレータを必ずしも信頼しないように動作する。代わりに、プロトコルは、前のブロックを変更すること、新しいブロックを対応するproof−of−workが無いのに伝搬すること、又は無効なトランザクションを含めること、のようなプロトコルにより許可されない特定の動作を実行することうを計算上不可能にする。他のノードに気付かれない方法でブロックチェーンプロトコルにより許可されない動作を実行することが計算上不可能であるとき、特定の信頼は必要ない。
トランザクションがブロックチェーンに書き込まれるブロックに含まれるためには、(1)マイニングブロックチェーンノード(又は検証ノード)がトランザクションを検証し、(2)マイニングブロックチェーンノードが該トランザクションを含んだブロックを伝搬しようと試み、及び(3)他のノードが、ブロックの有効性及び該ブロック内のトランザクションの有効性を検証する。マイニングブロックチェーンノードがこれらのルールによりプログラミングされる又は構成されることに留意すると、マイニングブロックチェーンノードは、他のノードにより受け入れられずマイニングノードが利益を得ないブロックのような、検証に失敗したトランザクションをブロックに含める可能性が低い。幾つかのブロックチェーンシステムに対するマイニングのこのような利益の1つは、ブロックが受け入れられた場合、該ブロックが「報酬(reward)」トランザクションを含むことを許可され、何らかの他のエンティティから価値の対応する減額を必要とせずに、特定量の価値が該ノードのオペレータに割り当てられることである。この方法では、成功したマイナーは、ブロックにより生成された価値により補償される。さらに、以下に説明するように、トランザクションは、トランザクション手数料を含み得る。トランザクション手数料も、マイニングブロックチェーンノードを制御するマイナーに行き、マイナーが何らかの補償を理解するために、トランザクションが有効として検証可能であることを必要とする。
ブロックチェーンネットワーク内のトランザクションは、トランザクション価値及び他のデータ要素を含む種々のデータ要素を含む。非集中型の分散型台帳システムでは、台帳は公開され、したがって、誰でも台帳を閲覧しトランザクションを見ることができる。ブロックチェーン台帳には、ブロックチェーンを開始し及びジェネシストランザクションに何らかの価値単位を帰するジェネシス(genesis)トランザクションが存在する。ここで、例では、説明目的で、価値単位は暗号通貨であるが、他のデジタルアセットを利用する他の変形が可能である。
ジェネシストランザクション及び報酬トランザクション以外のトランザクションは、ブロックチェーン台帳上の1つ以上の既存のトランザクションの価値の「支払い、使用(spending)」を含み、このようなトランザクションがブロックチェーン台帳に追加されると、これもまた使用可能である。各々の未使用(unspent)トランザクションは、公開的方法で、該トランザクションの価値を支払うために必要な要件を指定する。単純な要件は、「あなたは、先ず、あなたがAliceであることを証明しなければならない、次にあなたはこれを使用できる」であってよい。Aliceは、次に、該トランザクションの価値を「使用する(spends)」新しいトランザクションを生成する。ここで、Aliceの新しいトランザクションは、それがAliceから生じ及びその前のトランザクションへのポインタを有することを証明する。報酬トランザクションでは、トランザクション価値が存在するが、報酬トランザクションは、前のトランザクションを「使用」しない。勿論、Aliceのトランザクションがブロックチェーンネットワークにより受け入れられるために、該トランザクションは、既に使用されたトランザクションを参照することができず、Aliceが該トランザクションを生成したことを実際に証明しなければならない。
ブロックチェーンプロトコルにより、したがって、ブロックチェーンノードの合意により、トランザクションが既に使用された(支払われた)前のトランザクションアウトプットを指す場合、該トランザクションは有効ではない。つまり、既に使用された(支払われた)前のトランザクションアウトプットについて、台帳は前のトランザクションアウトプットを指す有効な既存のトランザクションインプットを含む。任意の侵入者が、前の未使用トランザクションアウトプットにより表される価値を「使用する」新しいトランザクションインプットを生成することを防ぐために、各トランザクションアウトプットは、そのようなトランザクションを生成し得る任意の要求者に課される要件を表すデータを含み、未使用トランザクションアウトプットが不変なので、該データは変更できない。勿論、使用されたトランザクションも不変である。
上述の例では、Aliceは、支払いトランザクションを生成してよい。その結果、彼女だけがアンロックする能力を有する前のトランザクション内の価値は、Bobへと移転され得る。つまり、その結果、Bobのみがアンロックしそれにより使用できる能力を有する新しい未使用トランザクションができる。Aliceの生成した支払いトランザクションは、以下の要件に対応するデータを含み得る。「Bobの秘密鍵を知っていることを証明するための十分な情報を提供できる場合、誰でもこのトランザクションを指すことができ、それによりその価値の全部を使用できる。」Bobが注意深いとすると、Bobは、該トランザクションを使用する有効なトランザクションを生成できる唯一の人物である。実際に、Bobは、その価値を所有し、その価値を使用できる唯一の人物である。これは、Bobがブロックチェーンノードのオペレータの誰かを信頼すること、又はトランザクションを生成する能力を有する任意の他のパーティを信頼することを必要としない。Bobは、悪者パーティがブロックチェーンノードの大多数を完全に乗っ取ることができないことを信頼するだけでよい。
特定の場合には、1つのトランザクションは正確に1つの前の未使用トランザクションを完全に使用し、その1つのトランザクションは後のトランザクションにより完全に使用され又は全く使用されない。一般的な場合には、トランザクションは、1つ以上のトランザクションインプット及び1つ以上のトランザクションアウトプットを有する。ここで、各トランザクションインプットは、前のトランザクションのトランザクションアウトプットを参照し(及び該トランザクションアウトプットは使用可能な価値を有する)、各トランザクションアウトプットは、(将来のトランザクションのトランザクションインプットにより使用され/参照されるまで未使用のままである)使用可能な価値を有する。トランザクションのトランザクションアウトプットは、完全に使用される又は全く使用されないという点で、トランザクションの使用可能な単位を指定する。ここで説明する幾つかの例では、トランザクションは、「使用される」と表され、トランザクションが複数のトランザクションアウトプットを有する場合には、説明は、トランザクションのアウトプットの全部より少数が使用される場合を包含し得ることが理解されるべきである。
トランザクションが複数のトランザクションアウトプットを有することができる場合、該トランザクションの異なるトランザクションアウトプットは異なる時間に使用可能である。トランザクションが生成されるとき、そのトランザクションアウトプットは未使用であると考えられる。各トランザクションアウトプットは、後のトランザクションのトランザクションインプットにより使用できる、又は未使用のままである。トランザクションが、前のトランザクションのトランザクションアウトプットが既に使用された後に、該前のトランザクションのトランザクションアウトプットを使用しようとするトランザクションインプットを有する場合、ブロックチェーンノードは、無効なトランザクションであるとして、それを拒否する。
パーティAliceがXの価値のある未使用トランザクションアウトプットを制御し、該トランザクションアウトプットの一部Yのみを使用したいと望む場合には、Aliceは、複数のトランザクションアウトプット、つまり1つはBobによってのみ使用可能な価値Yを有するトランザクションアウトプット、及び1つはAliceによってのみ使用可能な価値X−Yを有するトランザクションアウトプット、を有する新しいトランザクションを指定できる。実際に、元のトランザクションアウトプットは、完全に使用されるが、Aliceに属する「釣り銭を出す」新しいトランザクションアウトプットが存在する。
トランザクションのトランザクションインプットの数、及び該トランザクションのトランザクションアウトプットの数は、同じ必要はない。しかしながら、有効なトランザクションであるためには、トランザクションのトランザクションアウトプットの中で指定された価値の和が、トランザクションのトランザクションインプットにより使用される前のトランザクションアウトプットの価値の和を超えてはならない、幾つかの場合には少なく、幾つかの例外を有する。ジェネシストランザクション及び報酬トランザクションでは、トランザクションアウトプットの価値の和は、トランザクションインプットの価値の和より大きくなり得る。又は、インプットが全く存在する必要がない。しかし、通常のトランザクションでは、トランザクションは、そのトランザクションアウトプットの価値の和が、そのトランザクションインプットの価値の和を超える場合、無効であってよい。幾つかのトランザクションでは、そのトランザクションアウトプットの価値の和は、そのトランザクションインプットの価値の和より少なくなり得る。この場合、成功したマイナーは、差分のためのトランザクション手数料トランザクションを追加し、したがって、トランザクションを処理するためにマイナーにインセンティブを補償し生成する。Bitcoinプロトコルでは、これは、ブロックに追加されるコイン(Coin)に基づくトランザクションであり、Bitcoinブロックに含まれる他のトランザクションの全部のトランザクション手数料の和(つまり、全ての含まれるトランザクションの全てのインプットとアウトプットとの差分の和)及び新しいブロックを生成するための報酬との和に等しい使用可能なアウトプットを有する。
トランザクションの各トランザクションアウトプットは、該アウトプットの価値を使用するために満たされなければならない制約を含む。幾つかのブロックチェーンプロトコルでは、制約は、これらの制約が何であるかを定める、データ及びスクリプトコマンドを指定する「ロックスクリプト」に埋め込まれる。ロックスクリプトは、別のアクターがトランザクションアウトプットのロックスクリプトを「解除(アンロック)」できない限り、彼らがトランザクションアウトプット内に提示された価値を「使用」できないという点で、トランザクションアウトプット内に提示される価値に対して障害(encumbrance)として動作する。
支払いトランザクションへの各トランザクションインプットは、前のトランザクションのトランザクションアウトプットを使用する。支払いトランザクションインプットの「アンロックスクリプト」は、前のトランザクションアウトプットのロックスクリプトにより指定された制約を満たすデータ及びスクリプトコマンドを指定する。これらの制約を満たすことによってのみ、支払いトランザクションは、前のトランザクションのトランザクションアウトプットを使用できる。したがって、有効なトランザクションは、少なくとも1つのインプットを指定し、有効な支払いトランザクションの各インプットは、(使用される)前のトランザクションアウトプットへのポインタ、及び前のトランザクションアウトプットのロックスクリプトを「解除」するアンロックスクリプトを含む。対応するブロックチェーンプロトコルに従い動作するブロックチェーンノードは、ロックスクリプト及びアンロックスクリプトを一緒に実行して、トランザクションインプットを検証する。特定のシステムでは、スクリプトは、スタックに基づき、検証ブロックチェーンノードは、空のスタックから開始して、アンロックスクリプトを実行し、該アンロックスクリプトはデータオブジェクトをスタックに残し、次に、ロックスクリプトを実行し、該ロックスクリプトはスタックにあるデータオブジェクト使用してよい。
検証ブロックチェーンノードがロックスクリプト及びアンロックスクリプトを結合し、該結合を実行するとき、実行後の結果は「真(TRUE)」又は「偽(FALSE)」である。幾つかの場合には、スクリプトの実行は、スクリプトが完全に実行される前に、偽の結果で終了する。例えば、所与のスクリプト実行について、スクリプト内で何が起こるかに関係なく、有効なスクリプト実行において常に等しい2つの値が存在する場合がある。このスクリプトの実行の途中で、これら2つの値の間で比較が行われ、それらが等しくない場合、スクリプトの実行は該比較の直後に停止し、偽の結果を返すことができる。スクリプトの残りの部分は実行される必要がない。
検証ブロックチェーンノードがロックスクリプト及びアンロックスクリプトを結合し、該結合を実行し、結果が真である場合(つまり、アンロックスクリプトがトランザクションアウトプットを解除するために必要な全てを含んでいる)、検証ブロックチェーンノードは、トランザクションが有効であると実証する(適正なタイムスタンプ、適正なフォーマット、既に使用されたトランザクションアウトプットへのポインタがない、等のような他の要件が満たされるとする)。検証ブロックチェーンノードは、トランザクションが有効であると実証した場合、該トランザクションをマイニングのために伝搬させる。他のブロックチェーンノードは、同じ計算を行い、トランザクションが有効であると結論づける。このように、未使用トランザクションのみを指すインプットと、該未使用トランザクションアウトプットを解除するアンロックスクリプトと、を有する有効なトランザクションは、伝搬し、最終的には、最終的に台帳の部分になるブロックの部分になる。
他方で、悪者ノードが無効なトランザクションを伝搬させようとする場合、他のノードは、それが無効であることを発見し、それを伝搬させない。
トランザクションが有効であり、ブロックチェーン内に受け入れられると、その内容は変更できない。これは、トランザクションの生成時にロックスクリプトが確定することを意味する。アンロックスクリプトは、しかしながら、その時に必ずしも確定しない。これは、アンロックスクリプトが後の支払いトランザクション内に含まれ、後の支払いトランザクションが生成されるまで生成される必要がないからである。
標準的な場合には、アンロックスクリプトは、誰でも生成できるのではなく、前のトランザクションアウトプットを使用することを認可されたパーティによってのみ生成できる。上述の例におけるように、ロックスクリプトは、「Bobの秘密鍵を知っていることを証明するための十分な情報を提供できる場合、誰でもこのトランザクションを指すことができ、それによりその価値の全部を使用できる」であってよく、アンロックスクリプトは、「Bobが彼の秘密鍵でトランザクションに署名し、結果が<sig_Bob>である」という形式であってよい。次に、検証ブロックチェーンノードは、これら2つの文を処理し、真又は偽の結論に達する。この処理は、<sig_Bob>がBobの有効な署名であると容易に検証され、Bob(又はBobの秘密鍵の知識を有する誰か)がこのような署名を容易に生成し、且つ他の誰かにとってはBobの秘密鍵を知らずに有効な署名を生成することが非常に困難であるとき、良好に動作する。結果として、価値は信頼不要なシステム内で移転できる。Bobが使用しようとするトランザクションの生成者は、システム又はBobを信頼する必要がない。これは、最初にBobの秘密鍵を知ることなくブロックチェーンノードの総意により受け入れられ得る有効且つ証明可能な結果を形成することが暗号学的に困難であるからである。
ブロックチェーンノードは、Bobがトランザクションに署名したことし、及び署名がロックスクリプトの唯一の要件であることを容易に検証できる。もちろん、他のノードが証明した場合に証明せず、他のノードが証明しなかった場合に証明する悪者ノードが存在する可能性がある。しかし、悪者ノードがブロックチェーンネットワーク上の良心的ノードを圧倒できない限り、悪者ノードは、無効なトランザクションを押し通すこと又は有効なトランザクションが伝搬し若しくはマイニングされるのを止めることができない。
支払いトランザクションを有効にするとき、ノードは、1つ以上のトランザクションインプットのアンロックスクリプト、及び1つ以上の前のトランザクションアウトプットの対応するロックスクリプトを実行する。このようなスクリプトの実行が真と評価され、適切な場合には他の検証条件が満たされると、該ノードに関する限り、トランザクションは有効である。該ノードは次に、確認したトランザクションを他のネットワークノードへと伝搬させ、そうすると、マイナーは、ブロックにトランザクションを含むことを選択できる。したがって、トランザクションがブロックチェーンに書き込まれるためには、(1)トランザクションを受信したノードにより確認されること、(2)ネットワーク内の他のノードへ中継されること(ただし、トランザクションが確認された場合のみ)、(3)マイナーにより構築された新しいブロックに追加されること、(4)提案されたブロックの部分として伝搬されること、(5)ノードの総意により、過去のトランザクションの公開台帳への追加として提案されたブロックが受け入れられると、が必要である。
トランザクションは、実際に取り消し不可能なトランザクションを作成するために十分な数のブロックがブロックチェーンに追加されると、承認されたと考えられる。トランザクションは変更できないので、ブロックチェーンプロトコルはトランザクションの一方的な逆戻りを阻止できる。もちろん、Aliceが価値XをBobへと移転し、Aliceがその価値Xを取り戻したい場合、Bobが合意すれば彼女はそれを得ることができる。この場合、Alice−to−Bob−for−Xトランザクションは逆戻り又は取り消されないが、Bobが開始する新しいトランザクションであるBob−to−Alice−for−Xトランザクションが存在する。
トランザクションがブロックに含まれると、トランザクションは不変であると考えられ、ブロックがブロックチェーンにコミットされると、ブロックは不変であると考えられる。ブロックチェーン内に分岐が存在し、ブロックチェーンをロールバック(roll back)する何らかの能力が存在するところには短い時間期間があることがあるが、一般に、時間が経つほど、ロールバックできる可能性が低い。ここで、特に断わりのない限り、トランザクション及びブロックは、ブロックチェーンに完全にコミットされた後に不変であるとする。
不変性を保証する1つの方法は、暗号技術の使用を通じる。例えば、何からのデータシーケンスを入力として取り入れ該入力されたデータシーケンスに対応する何からの出力データシーケンスを提供するハッシュ及びデジタル署名のような暗号演算がある。このような演算は、所与の暗号入力(例えば、トランザクション又はブロック)から生成された所与の暗号出力(例えば、ハッシュ又はデジタル署名)について、同じ暗号出力をもたらす異なる暗号入力を見付けることが、計算上実現できない、又は利用可能な計算リソースを用いては不可能であるものである。したがって、検証者は、暗号入力が暗号出力と一貫している場合に、暗号出力を生成するために使用されたものが暗号入力であり、何らかの他の変更された暗号入力ではないと想定できる。
ブロックチェーンネットワークでは、各ノードが各々の他のノードを信頼することを要求されず、したがって、トランザクションが検証され、ブロックが検証され、検証できないトランザクション及びブロックは無視され使用されない。トランザクション及びブロックは、事実上不変であると考えられ、これは、ハッシュ又はデジタル署名がトランザクション又はブロックに正しく対応する場合に、トランザクション又はブロックがそのオリジナルから変更されていないという想定の結果であってよい。
幾つかのブロックチェーンノードは、完全な台帳を格納し、一方で、他のノードは未使用トランザクションアウトプット(Bitcoin台帳ではUTXO)のみを格納してよい。未使用トランザクションアウトプットは、使用可能な価値に対応し、望ましくは、各未使用トランザクションアウトプットは、検証可能なアンロックスクリプトが価値の「所有者」以外の誰かによって容易に生成できないロックスクリプトを有する。もちろん、これは要件ではないが、検証可能なアンロックスクリプトが誰かにより容易に生成できる任意のトランザクションアウトプットは、最初にそのことに気付いた人物によってのみ使用可能な、価値を別のトランザクションアウトプットへと移転するトランザクションの中で素早く使用されてしまうだろう。結果として、ブロックチェーンは、暗号通貨価値、より一般的にはデジタルアセットの制御を、ブロックチェーンシステム内のある参加者からブロックチェーンシステム内の別の参加者へと移転するために使用でき、使用済みトランザクションアウトプット及び未使用トランザクションアウトプットを有するトランザクションの記録は、公開の不変の台帳に記録され、デジタルアセットのフローを検証し、これらのデジタルアセットの二重使用を防ぐことを容易にする。
本願明細書で使用されるとき、「デジタルアセット」は、1つ以上のデジタルアセットを表してよい。制御の移転されるデジタルアセットは、本例では、複数のデジタルアセットの集合であってよく、この集合自体がデジタルアセットである。一実施形態では、暗号通貨は、トークンに基づく暗号通貨であり、各トークンは、アセットのシェア(例えば、会社の株)を表し、単一のトランザクションは複数種類のトークンを含む(例えば、1つ以上の異なる会社の中の株を含む)。
トランザクションは、計算オブジェクトを形成し得るロックスクリプト及びアンロックスクリプトを含む。ブロックチェーンにコミットされると、トランザクションは不変になる。この特徴は、暗号通貨の形式のデジタルアセットに対する制御の不変な移転以外の用途がある。価値の移転に加えて、不変なトランザクションは、他の演算を実施するために使用できる。例えば、公証人によるイベントの記録、スマートコントラクトの実装、である。ここで、パーティの権利及び義務は、トランザクション内に符号化され、ブロックチェーンプロトコルに従うスマートコントラクトの条項に従い価値を移転する。
Bitcoinプラットフォームでは、スクリプトはスタックに基づくスクリプト言語を用いて記述されるが、他のアプローチが代わりに使用され得る。スタックに基づくスクリプト言語の命令を実行するとき、プロセッサ(例えば、ブロックチェーンノードの一部)は、スタックと呼ばれる先入れ後出しデータ構造にデータを格納する。プロセッサは、値をスタックの一番上にプッシュし、又はスタックの一番上から値をポップし、又はスタックに格納された他の値への可能なアクセス(読み出し/書き込み)を行う。スタックに対して実行される種々の演算は、スタックにある値のうちの1つ以上のプッシュ又はポップ又はアクセス、それに対する演算の実行、スタックにある要素の順序の変更(これは、最初のプッシュが最初にポップされた要素である、2つのポップ動作及び2つのプッシュと等価であり得る)を生じ得る。例えば、OP_EQUAL演算は、上位2個のアイテムをスタックからポップし、それらを比較し、結果(例えば、等しい場合に1、等しくない場合に0)をスタックの一番上にプッシュし得る。本発明の実施形態のうちの幾つかにより利用される幾つかのスクリプト言語では、少なくとも2つのスタック、つまりメインスタックとオルト(alternate)スタックが存在してよい。スクリプト言語の幾つかの演算は、一方のスタックからもう一方のスタックへとアイテムを移動できる。例えば、OP_TOALTSTACK演算の実行は、プロセッサに、メインスタックの一番上からオルトスタックの一番上へと値を移動させる。
トランザクションに含まれるスクリプトにより、スマートコントラクトが実装できる。ここで、コントラクトの条項がスクリプト内に符号化される。一例は、「BobがCarolにXを支払い、Daveがトランザクションの許可を与えた場合、AliceはBobにXの半分を支払う」という形式であってよい。これは、(条件の中でも特に)BobがCarolに支払った前のトランザクションと、Daveが彼の許可を符号化した前のトランザクションと、が存在する場合にのみ真と評価されるロックスクリプトの一部として符号化できる。本願明細書で使用されるとき、「前のトランザクション」は、ブロックチェーンに既に追加された任意のトランザクションを表してよく、必ずしも支払いトランザクションの使用するアウトプットを有する前のトランザクションではない。事実上、スマートコントラクトは、結果を生成するためにインプットを定義するルールを含む機械実行可能プログラムを表すことができ、これは次に該結果に依存して動作を実行させることができる。
価値の移転に加えて、トランザクションは、価値の他のオブジェクト又は単純占有権も移転し得る。例えば、トランザクションは、何からの公称暗号通貨価値を移転してよいが、「このトランザクションを使用できる者は誰でも、Marley Circle 123にある家及び土地の正当な所有者でもある」という主張に対応するデータも含む。単純占有権は、同じ趣旨で、公開記録の中で隠されてよい。例えば、トランザクションは、「このトランザクションを使用できる者は誰でも、Central Bank of Trustに保有される信託番号12345の下で信託に入っている特定の財産の正当な所有者でもある」という主張に対応するデータも含んでよい。ここで、これは、トークンとして参照される。トークンは、ブロックチェーンを介して、現実世界のエンティティの移転を表し実施する。潜在的に極秘の又は秘密のアイテムは、認識可能な意味又は値を有しないトークンにより表すことができる。したがって、トークンは、現実世界のアイテムがブロックチェーンから参照されることを可能にする識別子として機能する。
本願明細書で説明されるとき、スマートコントラクトは、生成者又は何らかの他の特定のエンティティがスマートコントラクトの施行及び/又は実行に当たらないという意味で、「スマート」である。代わりに、特定のエンティティとの相互作用がスマートコントラクト内の特定のステップで符号化され得るが、その他の場合に、スマートコントラクトは、自動的に及び自己実行され得る。幾つかの例では、自動実行は、任意のエンティティが彼らの利益のために未使用トランザクションアウトプットを使用可能であることを表す。このような例では、未使用トランザクションアウトプットを使用できる「任意のエンティティ」は、何らかのシークレットの知識の提供を要求さることなく、アンロックスクリプトを生成できるエンティティを表すことに留意する。言い換えると、支払いトランザクションは、データのソースが暗号シークレット(例えば、秘密非対称鍵、対称鍵、等)へのアクセスを有することを検証することなく、検証可能である。また、このような例では、自己実行は、スマートコントラクトの制約に従い支払いトランザクションを検証するブロックチェーンネットワークの検証ノードの総意として生じる。幾つかの例では、未使用トランザクションアウトプットを「使用すること」は、未使用トランザクションアウトプットを参照し及び有効として実行する支払いトランザクションアウトプットを生成することを表す。このようなトランザクションアウトプットを使用することの副作用は、ブロックチェーンネットワークが、ロックスクリプト及びアンロックスクリプトを処理して、新しいトランザクションである支払いトランザクションを検証することである。有効ならば、前のトランザクションアウトプットが使用されたと考えられる。トランザクションアウトプットに特定の値を含め、誰かが該アウトプットを使用できるようにすることにより、このような支払いトランザクションを生成する動機をパーティに与える。そして、したがって、スマートコントラクトの参加者によってではなく、ブロックチェーンノードを運用する他者により、スマートコントラクトのステップが実行される可能性がある。
トランザクションの部分として記録されるロックスクリプト及びアンロックスクリプトを形成するスクリプトは、不変である。したがって、ロックスクリプトは、通常、変更できず、又は該トランザクションが確定されるときに未知である将来のトランザクションの部分を参照できない。トランザクションインプットのアンロックスクリプトは、該トランザクションインプットにより指された前のトランザクションアウトプットの部分又は前のトランザクション以外のブロックチェーン内の前のトランザクションを参照できる。これは、トランザクションがどのように使用できるかを制限し得る。
上述の態様のうちの1つ以上において、ブロックチェーン技術を使用する、追加機能及び改良された方法及びシステムを提供することが望ましい。したがって、本発明によると、添付の請求項において定められるシステム及び/又は方法が提供される。
先ず図1Aを参照すると、図1Aは、本開示の一実施形態による、ブロックチェーンに関連付けられた例示的なブロックチェーンネットワーク100を示す。本実施形態では、ブロックチェーンネットワーク100は、ブロックチェーンノードを含む。ブロックチェーンノードは、ピアツーピア分散型電子装置として実装されてよく、それぞれが、ブロックチェーンプロトコルに従う、つまり全体的に又は部分的にブロックチェーンノードのオペレータの間で合意された、動作を実行するソフトウェア及び/又はハードウェアのインスタンスを実行する。幾つかの例では、これらの分散型電子装置は、図1Aのノード102のような「ノード」として単に参照される。ブロックチェーンプロトコルの一例はBitcoinプロトコルである。
ノード102は、任意の適切なコンピューティング装置(例えば、データセンタのサーバ、デスクトップコンピュータ、ラップトップコンピュータ、タブレットコンピュータ、スマートフォン、等のようなクライアントコンピューティング装置)を含み、コンピューティングリソースサービスプロバイダの分散型システムの中の複数のコンピューティング装置による、又は図12のコンピューティング装置2600のような任意の適切なクライアント装置によってよい。ノード102は、提案されたトランザクション、例えばトランザクション104を表すデータメッセージ又はオブジェクトを受信するための入力を有し得る。ノード102は、トランザクションの状態の彼らの理解のような、彼らの維持する情報をクエリ可能であってよい。
図1Aに示すように、幾つかのノード102は、ノード102のうちの他の1つ以上と通信可能に結合される。どのノード102が他のどのノードと通信できるかについては、詳細は中央集中的に決定される必要がない。ブロックチェーンネットワーク100内のアクティブノードが、1つ以上の他のノード102と通信できれば十分である。その結果、メッセージが転送されるべきであるとブロックチェーンプロトコルが示す場合に、あるノード102から別のノード102へと渡されるメッセージは、例示的なブロックチェーンネットワーク100(又はその何らかの意味のある部分)を通じて伝搬できる。1つのこのようなメッセージは、ノード102Aのうちの1つにより提案されたトランザクションの発行であってよい。該トランザクションは、次に、パス106のようなパスに沿って伝搬してよい。別のこのようなメッセージは、ブロックチェーンに包含されるために提案された新しいブロックの発行であってよい。
ノード102は、ブロックチェーン内のブロックに対応するデータを含むブロックチェーン台帳を維持できる。ブロックは、後のブロックが、不変になったあるブロックについて計算された値に依存するという点で、暗号学的に不変であり、不変ブロックに対する任意の変更は、他のブロックチェーンノードにより無効ブロックとして容易に認識できる。ブロックチェーン台帳は、場合によっては変更可能であり且つ未だブロックチェーンにコミットされていないトランザクションに対応するデータも含み得る。ブロックチェーン台帳は、ブロックチェーンネットワークのブロックチェーン台帳の完全なコピー又はその部分であってよい。幾つかのノードは、未使用トランザクションのみを維持してよく、一方で、他のノードは台帳全体を維持してよい。このように、各ノードがそれ自身のコピーを有し得るので、台帳は分散型台帳である。ノードは、望ましくは、プロトコルのルールに従い自信のコピーを変更するだけであり、これらのルールに従う全てのノードについて、彼らのコピーは、時には他のノードと同じであり、ブロック及びトランザクションの何らかの伝搬時間を節約するべきである。ノード102は、それが受信したブロック及び該ブロックの中のトランザクションを検証する能力を含むべきである。ブロックチェーンプロトコルのルールは、ノードがブロック又はトランザクションが無効であると決定した場合に、該ノードがブロック又はトランザクションを他のノードに伝搬しないことであってよい。このルールにより、有効である及び有効であると確認されたブロック及びトランザクションは、ブロックチェーンネットワークを伝搬するが、無効なものは伝搬しない。
ブロックチェーンネットワークの中のノード102の幾つかは、トランザクションを収集し及びトランザクションのブロックを生成する動作を実行するマイナーノードである。その結果、新しいブロックがブロックチェーンにコミットされ得る。マイナーノードは、(悪者ノードが不正なブロックを容易に作成することを回避するために)複雑であり且つ含まれるトランザクションのデータに依存する何らかの動作を実行することが期待されてよい(その結果、悪者ノードは複雑な動作を予め実行できない)。ここで、これらのタスクの実行は、他のノードにより容易に検証される。これらの他のノードがマイナーノードの作業を検証し、検証されると、彼らは彼らのブロックチェーンのコピーの中にブロックを受け入れ、それを伝搬させる。これは、新しいブロックを、ブロックチェーンの分散型台帳にコミットする。幾つかの例では、ブロックは、トランザクションのグループであり、タイムスタンプ及び前のブロックの「指紋」(例えばハッシュ)によりマークされることがある。この方法では、各ブロックは、前のブロックにリンクされるようになり、それにより、ブロックチェーン内のブロックをリンクする「チェーン」を生成する。実施形態では、有効なブロックは、ブロックチェーンネットワーク内のノードの総意によりブロックチェーンに追加される。また、幾つかの例では、ブロックチェーンは、検証されたブロックのリストを含む。
一実施形態では、ノードのうちの少なくとも幾つかは、本開示に記載のようにトランザクションを検証する検証ノードとして動作する。幾つかの例では、ブロックチェーンは、デジタルアセットの形式の価値を証明し、一緒に、ブロックチェーンのトランザクションは、(ブロックチェーンを開始した)ジェネシストランザクション以来の、又はマイナーノードのオペレータに対するインセンティブとして新しくマイニングされるデジタルアセットを生成する報酬トランザクションからのチェーンを、後続のトランザクションに提供する。チェーンの一部の末尾は、未使用トランザクション、又はその部分であり、ブロックチェーン上の各トランザクションは、1つ以上のアウトプットを指定し、該アウトプットのうちの幾つかは使用され幾つかは未使用であってよい。ここで、アウトプットは、チェーンの該部分を拡張する有効なトランザクション(つまり、少なくとも指定された要件を満たすトランザクション)を挿入することにより、該アウトプットの値の指定、及び誰かが該アウトプットを「使用する」ために必要な要件を含む。本願明細書で使用されるとき、未使用トランザクションアウトプットは、UTXOとして参照されてよい。
誰かがUTXOを使用するために必要な要件は、UTXOのロックスクリプトの中で指定される。有効な支払いトランザクションは、(i)1つ以上のUTXOをトランザクションのインプットとして指定し、この指定はUTXOへのポインタによってよく、(ii)該UTXOの各々のロックスクリプトの要件を満たし、(iii)インプットを有し、該インプットにより指されるUTXOの全部の価値の和がトランザクションのアウトプットの全部の価値の和より少ない又は等しい、トランザクションであってよい。ロックスクリプトの要件の充足を表すデータは、アンロックスクリプトにより提供できる。検証ノードは、アンロックスクリプトを処理でき、その後に、ロックスクリプトが続き、該処理のアウトプットは、無効な結果、又は支払いトランザクションの検証である。
処理は、状態のないプロセスであり得るので、あるノードがそのアンロックスクリプト及びそのロックスクリプトを実行した場合、結果は他のノードの成果となり得る検証である。したがって、未だ使用されていない既にブロックチェーン上にある前のトランザクションのアウトプットのロックスクリプトを満たす支払いトランザクションは、伝搬し、最終的にブロックチェーンにコミットされる。コミットされた支払いトランザクションを生成したノードは、一方で、自身のロックスクリプトの中で、その新しいトランザクションのアウトプットの価値を使用するために任意の者が要求される要件を指定し得る。処理は、幾つかの小さな例外があるが、スクリプトがスクリプトの外部の参照を参照する必要がなく、該スクリプトの外部の変数又は他の状態に依存しないという点で、ステートレスである。結果として、アンロックスクリプト及びロックスクリプトは、独立して評価できる。
他の変形では、ブロックチェーンシステムは、外部データがスクリプト評価プロセスに含まれることを可能にする機能を含み得る。このような場合には、外部データは、アンロックスクリプト及びロックスクリプトが外部データを用いて評価され、該評価が該評価を実行するノードに渡り一貫している方法で、制御され及び/又は保証され得る。
図1Bは、図1Aのブロックチェーンノード102により使用されるブロックチェーン台帳に格納され得るようなトランザクション150の一例を示す。同様の機能を有する他の変形が可能である。トランザクションのデータ要素又はフィールドは、図1Bに示されるようであってよく、本開示に記載されたもの以外の追加フィールドを含んでよい。図示のように、トランザクション150のブロックチェーンプロトコルバージョンを示す値を有するブロックチェーンバージョン(blockchain version)フィールド152がある。#vinフィールド154は、トランザクション150の中の何個のトランザクションインプット(後述する)が存在するかを示す。他のフィールドが存在し又は図示されないことがあるが、各トランザクションインプット(ここでは例示的にVin[y]160として示す)について、前のトランザクションのトランザクションID(TxID)161、該前のトランザクション(トランザクションインプット160に適合するトランザクションアウトプットを提供するトランザクション)のトランザクションアウトプットのうちの1つへのインデックス162と、を含むフィールドのセットがある。ここで、TxID161及びインデックス162は、一緒に、前のトランザクションのトランザクションアウトプットを参照するポインタ163を形成する。本願明細書で使用されるとき、用語「前のトランザクション」は、現在又は存在するトランザクションに関連する文脈で使用されるとき、現在又は存在するトランザクションにより参照される(及び「使用される」)トランザクションアウトプットを有する特定の以前のトランザクション(又は複数のトランザクション)を表す。例では、現在又は存在するトランザクションは、「支払いトランザクション」として参照されてよい。
幾つかのブロックチェーン実装では、ユニークなTxID値を割り当てるための中央集中的メカニズムが存在せず、代わりに、例えばトランザクション自体の内容のハッシュを生成することによりトランザクションのためにユニークなTxIDを生成する分散型メカニズムが存在する。有効なトランザクションは別の有効なトランザクションと正確に同一の内容の全部を有することができないので、各々の有効なトランザクションは、それ自体のTxIDのユニークなハッシュを有する(ハッシュ衝突の天文学的に低い可能性とは別に)。しかしながら、実装されると、本願明細書では、各トランザクションはユニークなIDを有すると仮定する。ハッシングの特性により、トランザクションの内容からTxIDが生成されると、該内容は変更できず、該トランザクションについてTxIDは有効なままである。
図1Bに示すように、トランザクションインプットVin[y]160のフィールドのセットも、続くアンロックスクリプトの長さを示すUnlocking_Script_Lengthフィールド164と、ポインタ163により指されるトランザクションアウトプットの対応するロックスクリプトを「解除する」Vin[y]160のアンロックスクリプトを含むUnlocking_Scriptフィールド165(Bitcoinプロトコルでは一般に「scriptSig」と呼ばれる)と、トランザクション150を制約するために使用され得るシーケンス(Sequnce)#フィールド166と、を含む。
図1Bは1つのトランザクションインプット及び1つのトランザクションアウトプットのみを明示的に示すが、それぞれ1つより多くが可能である。トランザクションインプットに続き、何個のトランザクションアウトプット(後述する)がトランザクション150の中に存在するかを示す#voutフィールド170がある。各トランザクションアウトプット(ここでは例示的にVout[x]180として示される)について、このトランザクションアウトプットVout[x]180により提供されるトランザクション価値を示すアウトプット値(output value)フィールド181と、続くロックスクリプトの長さを示すLocking_Script_Lengthフィールド182と、このトランザクションアウトプットVout[x]180のロックスクリプトを含むLocking_Scriptフィールド183(Bitcoinプロトコルでは一般に「scriptPubKey」と呼ばれる)と、を含むフィールドのセットがある。説明したように、このトランザクションアウトプットのトランザクション価値は、ブロックチェーンノードがそのアンロックスクリプト及びそのロックスクリプトを用いて検証を実行するとき真として検証するアンロックスクリプトを有するトランザクションインプットを有する支払いトランザクションを生成できる任意の者により「使用」できる。他のフィールドが、トランザクションアウトプットフィールドに続いてよい。例えば、指定した将来の時間より前に又は指定した将来のブロックより前にアクティブにならないようにトランザクション150を制約できるロックタイム(lock time)フィールド190である。支払いトランザクションポイントの各トランザクションインプットが、前のトランザクションアウトプットの対応するトランザクションアウトプットを指し、前のトランザクションアウトプットがトランザクション価値を含む場合、トランザクションインプットは、該トランザクション価値を示すフィールドを含む必要がない。
本開示では、種々のスクリプト演算コード(又はオペコード又はop_code)及びキーワードが、種々の演算を実行するために参照される。Bitcoinプロトコルは、種々の演算を実行するために「スクリプト(Script)」と呼ばれるスクリプトシステムを使用する。しかしながら、他のブロックチェーン技術は、異なる命令セットを実装することができ、したがって、本開示に記載される演算コードはスクリプトにおける特定の演算コードではなく演算コードにより実行される演算を説明すると考えられる。幾つかの実施形態では、スクリプトシステムは、チューリング(Turing)不完全命令セット(例えば、loop、recursion、goto文、等をサポートしない)である。他の実施形態では、スクリプトシステムは、チューリング完全命令セットであり得る。
本開示の特定の実施形態は、記載の命令セットを実装するスクリプトシステム又は他のシステムが単一のスクリプトの中で200個より多くの命令(例えば、演算コード又はop_code)を許容するという仮定の下で動作できる。同様に、本開示の特定の実施形態は、以下を更に仮定する:
・特定の低レベル演算コード(又は低レベルバイトコード演算)により提供される機能が、演算コードスクリプト/命令セットを実行するシステムの中に存在し有効にされる;及び/又は、
・特定の高レベル演算コード(又は高レベルバイトコード演算)により提供される機能が、所望の動作を提供するために記述されたカスタマイズされた機能の生成により実装できる。これらのカスタマイズされた機能は、言語の中に存在するが向こうにされているop_codeの機能を実装するために記述されてよく、又はスクリプト言語の中で本来提供されていない特定の機能を提供する「新しい」op_codeであってよい。
スクリプトシステムによりサポート可能な低レベル演算コードの例は、以下を含む:
・OP_1SUB:値「1」が一番上のスタックアイテムから減算される。
・OP_2DUP:上位2個のスタックアイテムを複製する。
・OP_ADD:スタックにある上位2個のアイテムを加算する。
・OP_CAT:スタックにある上位2個のアイテムを連結する。
・OP_CHECKSIG:公開鍵及び署名が、スタックからポップされ、SIGHASHタイプに従いトランザクションフィールドの署名に対して検証される。署名が有効な場合、1が返され、その他の場合に0が返される。
・OP_CHECKSIGVERIFY:OP_CHECKSIGと同様に機能するが、OP_VERIFYが後に実行される。
・OP_DROP:スタックの一番上のアイテムを除去又はポップする。
・OP_DUP:一番上のスタックアイテムを複製する。
・OP_ELSE:先行するOP_IF又はOP_NOTIF又はOP_ELSEが実行されなかった場合に、これらのステートメントが実行され、その他の場合に、先行するOP_IF又はOP_NOTIF又はOP_ELSEが実行された場合に、これらのステートメントが実行されない。
・OP_ENDIF:if/elseブロックを終了する。
・OP_EQUAL:インプットが正確に等しい場合に1を返し、その他の場合に0を返す。
・OP_EQUALVERIFY:OP_EQUALと同じだが、後にOP_VERIFYを返す。
・OP_FROMALTSTACK:インプットをメインスタックの一番上に置き、それをオルトスタックから除去する。
・OP_HASH256:インプットが2回ハッシュされる。最初はSHA−256により、次にRIPEMD−160による。
・OP_IF:一番上のスタック値がFalseではない場合、ステートメントが実行され、一番上のスタック値が除去される。
・OP_LEFT:ストリングの中で指定されたポイントの左の文字のみを保持する。
・OP_MUL:スタックにある上位2個のアイテムを乗算する。
・OP_NOTIF:一番上のスタック値がFalseである場合、ステートメントが実行され、一番上のスタック値が除去される。
・OP_RIGHT:ストリングの中で指定されたポイントの右の文字のみを保持する。
・OP_ROLL:スタックのn個のアイテムの深さにあるアイテムが一番上に移動される。
・OP_ROT:スタックの上位3個のアイテムを左に回転する。
・OP_SIZE:スタックの一番上の要素のストリング長を(ポップしないで)プッシュする。
・OP_SUBSTR:ストリングのセクションを返す。
・OP_SWAP:スタックの上位2個のアイテムがスワップされる。
・OP_TOALTSTACK:インプットをオルトスタックの一番上に置き、それをメインスタックから除去する。
・OP_TUCK:スタックの一番上のアイテムがコピーされ、上から2番目のアイテムの前に挿入される。
・OP_VERIFY:一番上のスタック値がTRUEでない場合、トランザクションを無効としてマークする。
これらの低レベル演算コードは、Bitcoinプロトコルのスクリプトシステムにより現在サポートされている。
本開示の方法及びシステムによりサポート可能な高レベル演算コードの例は、以下を含む:
・OP_ECPX:楕円曲線点のX座標を返す。
・OP_BIGMOD:スタックの上位2個のアイテムを除算した後の余りを返す。
・OP_BIGMODADD:スタックの3番目のアイテムを法とする(modulus)スタックの上位2個のアイテムのモジュロ加算を実行する。
・OP_BIGMODINVERSE:モジュロの負の指数演算を実行する。
・OP_BIGMODMUL:スタックの3番目のアイテムを法とする(modulus)スタックの上位2個のアイテムのモジュロ乗算を実行する。
・OP_DERENCODE:DERフォーマットでスタックの上位2個のアイテムを符号化する。
・OP_ECPMULT:スタックの上位2個のアイテムの楕円曲線点乗算(楕円曲線スカラ乗算とも呼ばれる)を実行する。
これらの高レベル演算コードはBitcoinプロトコルの、スクリプトシステムにおいて本来提供されない。
支払いトランザクションの検証は、支払いトランザクションのトランザクションインプットVin[x]160により指される前のトランザクションの未使用アウトプットのロックスクリプト(scriptPubKey)の、支払いトランザクションの同じトランザクションインプットVin[x]160のアンロックスクリプト(scriptSig)165に対する検証を含み得る。より一般的な場合には、各トランザクションは、複数のインプット及び/又は複数のアウトプットを有することができる。この場合、ロックスクリプトは、前のトランザクションの複数のトランザクションアウトプットのうちの1つのロックスクリプトであってよく、アンロックスクリプトは、支払いトランザクションの複数のトランザクションインプットのうちの1つのアンロックスクリプトであってよい。このような検証は、その入力が有効か否かに依存して真又は偽の結果を出力するスタックに基づくトランザクション検証器により実行できる。他の変形では、トランザクション検証器は、外部の信頼されるデータ又は状態を参照できる。本願明細書の教示は、スタックに基づくトランザクション検証器を使用しないブロックチェーンシステムにも適用されてよい。
スタックに基づくトランザクション検証器により、幾つかの少数の例外があるが、ロックスクリプト及びアンロックスクリプトは、独立して処理され、これらのスクリプトの外部の変数又は他の状態に依存しない。結果として、ロックスクリプトは、ロックスクリプト自体の外部の前のトランザクションのフィールドを参照しない。支払いトランザクションは前のトランザクション及び従ってロックスクリプトが生成された及び不変にされたときに存在しなかったので、ロックスクリプトは、支払いトランザクションのフィールドも参照できない。さらに、アンロックスクリプトは、支払いトランザクションのフィールドに対して直接作用できない。これらの制限は、同じロックスクリプト及び同じアンロックスクリプトが与えられれば、任意の適正にプログラムされたブロックチェーンノードが同じ結果を生じることを保証するという点で、有用である。これに関し1つの例外は、スクリプトが、スクリプトのうちの1つの中の署名を、全体としてトランザクションから生成された署名に対してチェックする能力を有し得ることである。一実施形態では、スクリプトは、この目的のためにOP_CHECKSIG op_codeを使用できる。
スタックに基づく演算では、一方で、トランザクション検証器は、スクリプトの中の各op_codeを処理することにより、アンロックスクリプトを実行する。幾つかのop_codeは、処理中、スタック上でアクセスされるデータに何らかの結果、又は何らかの組み合わせをもたらす。アンロックスクリプトの実行が完了すると、スタックにデータが残されてよい。アンロックスクリプトの実行が、スクリプトエラー又は実行を終了するop_codeを有しない場合、トランザクション検証器は、スタックに存在するデータを使用できるロックスクリプトを実行する。ロックスクリプト及びアンロックスクリプトが同じop_codeセットを使用して記述される場合、これは、ロックスクリプトが後に続くアンロックスクリプトの連結を有する単一のスクリプトを実行することと事実上同様である。しかしながら、アンロックスクリプトのop_codeの実行の終了時に、及びロックスクリプトのop_codeの実行前に、スクリプトエラーをチェックすることは、不完全な形式の(malformed)アンロックスクリプトにより引き起こされる問題を防ぐことができる。スクリプトの実行が完了すると、スタックの一番上に残された結果が、検証の結果である。真がスタックの一番上にある場合、これは、アンロックスクリプトが実際にロックスクリプトを解除することの証明であると考えられる。これに関して、アンロックスクリプトは、ロックスクリプトの要件の全部を満たす。
ブロックチェーントランザクションのロックスクリプトは、署名及び他の暗号技術により、ブロックチェーントランザクションの対応するアンロックスクリプトの中に何が存在しなければならないかに関する制約を課すことができることに留意する。このような制約の1つは、アンロックスクリプトが何らかの任意のデータを含まなければならないことである。幾つかの制約は、「弱い制約」又はより一般的な制約であってよい。例えば、アンロックスクリプトが4バイト又は任意の特定の値にバイトを制約することなく何らかの特定バイト数の長さを有する何からのデータを含まなければならないという制約である。より強力な又はより特定の制約は、データがハッシュされるとき、データが特定のハッシュ値を生成しなければならないことである。この後者の制約は、同じハッシュを生じる異なる値を決定することが誰にとってもほぼ不可能であるので、標準的に、データが特定長であり且つ特定値のデータであることを要求する。制約は、該データをスタックにプッシュすること、又は該データのハッシュをスタックにプッシュすることにより、アンロックスクリプトによりスクリプト内に実装されてよく、ロックスクリプトに、必要なハッシュをスタックにプッシュさせ、次にOP_EQUAL op_code、及び次にOP_VERIFY op_codeを実行させる。これらのop_codeは、これら2つのプッシュされたアイテムが一致した場合に真を返し、一致しなかった場合に偽を返す。より一般的な場合には、特定のデータが存在すること又は特定の特性を有するデータが存在すること、を要求する制約を課すことができる。
弱い制約の一例は、ロックスクリプトが、支払いトランザクションフィールドの連続セット(serialized set)を含み得る特定のデータを含まなければならないことであるが、必ずしもこれらのフィールドが任意の特定の値であることを必要としない。このように、ロックスクリプトは、該ロックスクリプトのアウトプットを解除するアンロックスクリプトのスクリプトを、該アンロックスクリプトの由来する支払いトランザクションのフィールドを含むよう、制約できる。これは、アンロックスクリプトがスタックに残した支払いトランザクションのフィールドに対して、ロックスクリプトが演算を実行することを事実上可能にする。弱い制約の別の例は、アンロックスクリプトが、特定のデータを含まなければならないことである。該特定のデータは、場合によっては指定された場所から取得されるが、データの値に関する制約はない。これは、ロックスクリプトが不変になった後にもデータの値が決定されない場合でも、幾つかの弱い制約を課すことを可能にする。
ブロックチェーントランザクションのロックスクリプト及びアンロックスクリプトの動作は、特定の制約及び該制約の含み得るデータを指定することを含み、「スマートコントラクト」を実施するために使用できる。スマートコントラクトは、誰が何を行うことができる、彼らがいつそれを行うことができるか、及び誰が何をいつ支払われるか、を含む契約(コントラクト)の条項及び条件を定義できる。条項及び条件は、アンロックスクリプト又は支払いトランザクションの他の部分に対する弱い又は強い制約として表すことができ、スマートコントラクトのこれらの条項及び条件は、ブロックチェーンプロトコルにより施行され得る。
説明のための例では、AliceはBobに幾らかの金銭を貸し、BobはAliceに返済することに合意する。ブロックチェーントランザクションのシーケンスのロックスクリプト及びアンロックスクリプトは、スマートコントラクトとして実装でき、BobがAlice行う支払いを表す。例えば、スマートコントラクトは、BobがAliceに向こう3ヶ月間、毎月支払い、支払いが無かった場合には、Bobの債務が借金取り立て段階に入る、というように構成され得る。借金取り立て段階では、Aliceは、トランザクションを解除し(release)、該トランザクションを、Bobから借金を回収する借金取り立て者に引き渡すことができる。このようなスマートコントラクトは、本願明細書に記載のロックスクリプト及びアンロックスクリプトに対する変形を用いて生成できる。
別の例では、Aliceは、毎月1単位のデジタルアセットを配っている非常に慈善的人物である。彼女のルールは、誰でもデジタルアセットを請求できるが、毎月1単位だけが請求できる、というものである。Aliceは、本開示に記載の方法でスマートコントラクトを生成し、3単位のデジタルアセットの初期プールにより種をまく(seed)。Aliceは、任意のエンティティが毎月1単位のデジタルアセットを取ることを許可するスクリプトを構成できる。このスクリプトは、デジタルアセットの残りの部分が、各月のブロックチェーントランザクションのシーケンスに渡り請求されることを可能にするために、複製される。
ブロックチェーントランザクションのシーケンスのアンロックスクリプト及びロックスクリプトは、時間にわたりスマートコントラクトの状態を表す信頼不要の決定論的有限状態機械を実装するバイトコードシーケンスを具現化できる。より具体的には、バイトコードシーケンスは、状態ルールセット及び良好に定義された状態セットを有する状態機械を具現化するコンピュータプログラムとして考えられる。それにより、バイトコードシーケンス(コンピュータプログラム)のバイトコードの実行は、状態機械の状態間の遷移をもたらす。状態ルールのうちの幾つかは、非常に複雑であり、複数のパスを有し得る。このような場合、バイトコードシーケンスが実行する計算又は動作のうちの幾つかは、他のコンピュータプログラム若しくは演算に関して同時に又は非同期に行うことができる。
ロックスクリプトは、アンロックスクリプトに課される制約を含むことができ、したがって、支払いトランザクションインプットのアンロックスクリプトへの特定のデータの挿入を要求できる。特定のデータは、例えば、支払いトランザクション自体の連続フィールド、実行中のロックスクリプトを含む前のトランザクションの連続フィールド、現在の状態値、決定されたソースからのインプット(任意)、及び現在状態から次の状態を計算するために必要な状態機械の条件及び動作を指定する実行データ、及び他のインプットである。
ロックスクリプトは、インタープリタコード及びバイトコードシーケンスを含むことができる。インタープリタコードは、増加的に及び順次、インタープリットされ、バイトコードシーケンスを実行するよう構成できる。バイトコードシーケンスの実行は、伝統的なプログラムと同様に、実行スレッドを形成することとして理解できる。伝統的なソフトウェアプログラムでは、新しい実行スレッドが生成でき、後にFork−Join Modelを用いて一緒に結合できる。これは、含むプログラムが終了する、スレッドが停止するよう要求される、又は自然に実行を終了するまで、新しいスレッドが実行し続けることを可能にできる。実行プログラムは、スレッドが終了するのを待ち、Join演算を用いて実行を続けることができる。本開示は、スマートコントラクトの状況で、ブロックチェーントランザクションの中で使用するために、この実行モデルを採用する。この振る舞いを可能にするために、インタープリットされているロックスクリプトは、インタープリタコードが異なる機能(分岐(fork)、結合(join)、及びバリア(barrier)構成を含む)の要求されるときを決定することを可能にする特定のマーカ又は構成を利用する。これらの構成は、他の計算又は演算に関して同時に又は非同期に演算又は計算を実行する状態機械をサポートする。分岐構成は、1つの状態又は実行パス(又は「実行のスレッド」又は「実行スレッド」又は「実行スレッドインスタンス」)から、複数の異なる実行パス(又は「実行のスレッド」又は「実行スレッド」又は「実行スレッドインスタンス」)を生成する。分岐構成から生成された実行スレッドは、子実行スレッドと呼ぶことができる。子実行スレッドを生成する1つの実行スレッドは、親実行スレッドと呼ぶことができる。分岐構成は、互いに並列な計算又は演算を実行するため(例えば、共通map/reduceワークフローにおいて)、又は新しいコントラクトを生成するために使用できる。結合構成は、複数の異なる実行パス(又は「実行のスレッド」又は「実行スレッド」又は「実行スレッドインスタンス」)を、1つの状態又は実行パス(又は「実行のスレッド」又は「実行スレッド」又は「実行スレッドインスタンス」)に一緒に結合する。結合構成により生成された1つの実行スレッドは、子実行スレッドと呼ぶことができる。子実行スレッドを形性するために結合される複数の実行スレッドは、親実行スレッドと呼ぶことができる。結合構成は、スマートコントラクトの複数の実行スレッドを一緒に融合するため、又は複数のスマートコントラクトの結果から別のスマートコントラクトを構成するために使用できる。バリア構成は、複数の異なる実行パス(又は「実行のスレッド」又は「実行スレッド」又は「実行スレッドインスタンス」)の間の通信及び協働を管理し及び制御するために使用される。
図2は、ブロックチェーントランザクション(TX1, TX2, TX3, TX4, TX5, TX6)のシーケンスの例示的な実施形態を示す。ここで、ブロックチェーントランザクションのシーケンスは、i)実行スレッドの実行を分岐して、分岐構成の制御下で複数の実行スレッドを生成し、ii)バリア構成の制御下で、複数の実行スレッド間のスレッド間通信と協働を利用し、iii)結合構成の制御下で、複数の実行スレッドを融合する。実行スレッドは、スマートコントラクトの部分又は異なるスマートコントラクトの部分であり得る1つ以上の状態機械の実行パスである。
ブロックチェーントランザクションTX3及びTX4は、ブロックチェーンにコミットされると、ブロックチェーントランザクションのシーケンスにより表される複数の実行スレッド(例えば、TX3のスレッドAロックスクリプト、TX4のスレッドBロックスクリプト)の同時又は非同期実行を表すことができることに留意する。これは、スマートコントラクトが複数の同時又は非同期ステップで実行される必要のある場合に有用であり得る。具体的に、コントラクトの過程に渡り、タスクは、コントラクトの過程で時に同時に又は非同期に実行され得る。例えば、家を建てるコントラクトは、並列に実行可能であり得る、タイル貼り作業の完成の種々の段階、及び外構の完成のための種々の段階、を有し得る。スマートコントラクトが、互いに関して同時に又は非同期に実行されるブロックチェーントランザクションを利用できるようにすることにより、コントラクトの異なるフラグメントが互いに独立に、非同期な方法で実行できる。
分岐構成は、ブロックチェーントランザクションTX1のロックスクリプトの部分として符号化される。分岐構成は、支払いブロックチェーントランザクションTX2のロックスクリプトに対する制約の使用を通じて、ブロックチェーントランザクションTX1の実行スレッド(又は実行スレッドインスタンス)を分岐し又はそのクローンを作る。トランザクションレベルで、分岐構成は、所与のロックスクリプトについて、支払いブロックチェーントランザクションの中に少なくとも2つ以上のロックスクリプトが存在する必要があることを要求する。図示の例では、ブロックチェーントランザクションTX1のロックスクリプトの分岐構成は、ブロックチェーントランザクションTX2の2つのトランザクションアウトプットの対応するスレッドAロックスクリプト及びスレッドBロックスクリプトを通じて複数の実行スレッドの生成をサポートする。
バリア構成は、ブロックチェーントランザクションTX3のスレッドAロックスクリプト及び/又はブロックチェーントランザクションTX4のスレッドBロックスクリプトの部分として符号化される。バリア構成は、スレッドAロックスクリプトとスレッドBロックスクリプトとの間のスレッド間通信及び協働に対する制御を提供する。このような制御は、特定の実行ポイントにおいて実行スレッドを制約すること、又は一方の実行スレッド(例えば、スレッドBロックスクリプト)の実行を他方の実行スレッド(例えば、スレッドAロックスクリプト)により解放されるまでストール(stalling、待機)又はスリープすること、又は他のスレッド同期化条件を含み得る。このような制御は、複数の実行スレッドがそれらのタスクを達成するために互いに競う競争状態を回避するために使用できる。トランザクションレベルでは、バリア構成は、スレッド固有ロックスクリプトのうちの各々が管理され又は制御されることを要求し、スレッド固有ロックスクリプトへのポインタ及び対応するスレッド固有ロックスクリプトが、支払いブロックチェーントランザクションの中に存在する必要がある。
結合構成は、スレッドAロックスクリプト及び/又はスレッドBロックスクリプトの部分として符号化され、ブロックチェーントランザクションTX6を生成するために使用される。結合構成は、スレッドAロックスクリプト及びスレッドBロックスクリプトが終了したことを保証でき、スレッドAロックスクリプト及びスレッドBロックスクリプトの結果として生じた実行状態を単一の実行のスレッド(例えば、スレッドCロックスクリプト)へと結合し又は融合できる。これは、スマートコントラクトが複数の実行スレッドにより生成された結果データを処理する必要のある場合に有用であり得る。トランザクションレベルでは、結合構成は、スレッド固有ロックスクリプトのうちの各々が結合されることを要求し、対応するロックスクリプトが、支払いブロックチェーントランザクションの中に存在する必要がある。
図3Aは、図2のブロックチェーントランザクションTX2の生成、検証、及びマイニングを示す。ここで、前のブロックチェーントランザクションTX1のロックスクリプトは、分岐構成を符号化する。この例示的な分岐構成は、前のブロックチェーントランザクションTX1のスレッドAロックスクリプトの実行を分岐して、2つの実行スレッド(又は実行スレッドインスタンス)を、ブロックチェーントランザクションTX2の2つのトランザクションアウトプットA、Bのロックスクリプトとして生成する(例えば、トランザクションアウトプットAは、前のブロックチェーントランザクションTX1のスレッドAロックスクリプトの連続を含み、トランザクションアウトプットBは新しいスレッドBロックスクリプトを含む)。この場合、ブロックチェーントランザクションTX2は、図示のように生成される。これは、単一のトランザクションインプットと、スレッドAロックスクリプト及び新しいスレッドBロックスクリプトの連続のための2つのトランザクションアウトプットと、を含む。単一のトランザクションインプットは、前のブロックチェーントランザクションTX1のスレッドAロックスクリプトのアンロックスクリプトを含む。スレッドAロックスクリプトの連続(又はその部分)のためのトランザクションアウトプットAは、前のブロックチェーントランザクションTX1のトランザクションアウトプットから複製される。新しいスレッドBロックスクリプトのためのトランザクションアウトプットBは、分岐構成の実行から決定される。以下に更に詳細に記載されるように、新しいスレッドBロックスクリプトについて異なるシナリオが存在すると考えられる。一旦生成されると、ブロックチェーントランザクションTX2は、検証のためにブロックチェーンネットワークへと送信され又はブロードキャストされる。検証が成功すると、ブロックチェーントランザクションTX2は、図示のようにブロックチェーン208に記憶するために、ブロックチェーンネットワークのマイニングノードによりマイニングできる。
1つのシナリオ(「複製されたスレッドによる分岐」と呼ばれる)では、トランザクションアウトプットBの新しいスレッドBロックスクリプトの演算は、スレッドAロックスクリプトの演算から複製される。この場合、同じ演算を共有する2つの異なる実行スレッドが、異なるインプットデータにより実行してよい。これは、一般的なMapReduce型の状況で有用な変形である。この「複製されたスレッドによる分岐」シナリオでは、ブロックチェーントランザクションTX2の生成及び/又は検証は、ブロックチェーントランザクションTX2の各トランザクションアウトプットを処理して、ブロックチェーントランザクションTX2のトランザクションアウトプットのロックスクリプトが前のブロックチェーントランザクションTX1の単一のトランザクションアウトプットのロックスクリプトと一致することをチェックすることを含み得る。このチェックが、ブロックチェーントランザクションTX2のトランザクションアウトプットのうちの任意の1つについて失敗した場合、失敗状態が上げられ、ブロックチェーントランザクションTX2は無効であると考えられる。このチェックが合格すると、分岐構成は継続できる。ここで、ブロックチェーントランザクションTX2のトランザクションアウトプットのロックスクリプトの実行状態は、指定された実行状態に対応することを保証するためにチェックできる。この指定された実行状態は、ブロックチェーントランザクションTX2のトランザクションアウトプットのロックスクリプトについて同じ又は異なり得る。この更なるチェックが、ブロックチェーントランザクションTX2のトランザクションアウトプットのうちの任意の1つについて失敗した場合、失敗状態が上げられ、ブロックチェーントランザクションTX2は無効であると考えられる。この更なるチェックが、ブロックチェーントランザクションTX2の全部のトランザクションアウトプットについて合格し、任意の追加チェックが満たされた場合、ブロックチェーントランザクションTX2は有効であると考えられる。
別のシナリオ(「異なるスレッドをサポートする分岐」と呼ばれる)では、アウトプットBの新しいスレッドBロックスクリプトの演算は、スレッドAロックスクリプトの演算と同じ又は異なり(又は区別され)得る。この場合、有効なロックスクリプトに対応する有効なハッシュ値の集合は、(例えば、ロックスクリプトのインタープリタコードの部分として)静的に格納でき、又は(例えば、ロックスクリプトの部分としてインタープリットされているバイトコードシーケンスに)動的に格納できる。ブロックチェーントランザクションTX2の生成及び/又は検証は、ブロックチェーントランザクションTX2のトランザクションインプットにより指される前のブロックチェーントランザクションのロックスクリプトのハッシュ値を決定すること、及び必要な場合にはこのハッシュ値をハッシュ値の集合に追加すること、を含み得る。ブロックチェーントランザクションTX2の各トランザクションアウトプットは、ブロックチェーントランザクションTX2のトランザクションアウトプットのロックスクリプトをハッシングすることが集合の有効なハッシュ値のうちの1つと一致するハッシュ値を生成することをチェックするために処理される。このチェックが、ブロックチェーントランザクションTX2のトランザクションアウトプットのうちの任意の1つについて失敗した場合、失敗状態が上げられ、ブロックチェーントランザクションTX2は無効であると考えられる。このチェックが合格すると、分岐構成は継続できる。ここで、ブロックチェーントランザクションTX2のトランザクションアウトプットのロックスクリプトの実行状態は、指定された実行状態に対応することを保証するためにチェックできる。この指定された実行状態は、ブロックチェーントランザクションTX2のトランザクションアウトプットのロックスクリプトについて同じ又は異なり得る。この更なるチェックが、ブロックチェーントランザクションTX2のトランザクションアウトプットのうちの任意の1つについて失敗した場合、失敗状態が上げられ、ブロックチェーントランザクションTX2は無効であると考えられる。この更なるチェックが、ブロックチェーントランザクションTX2の全部のトランザクションアウトプットについて合格し、任意の追加チェックが満たされた場合、ブロックチェーントランザクションTX2は有効であると考えられる。
図3Bは、図2のブロックチェーントランザクションTX3の生成、検証、及びマイニングを示す。ここで、前のブロックチェーントランザクションTX2のスレッドAロックスクリプトの実行が続けられる。この場合、ブロックチェーントランザクションTX3は、図示のように生成される。これは、単一のトランザクションインプットと、スレッドAロックスクリプトの連続を含む単一のトランザクションアウトプットと、を含む。トランザクションインプットは、前のブロックチェーントランザクションTX2のスレッドAロックスクリプトのアンロックスクリプトを含む。スレッドAロックスクリプトの連続(又はその部分)のためのトランザクションアウトプットは、スレッドAロックスクリプトのために前のブロックチェーントランザクションTX2のトランザクションアウトプットから複製される。一旦生成されると、ブロックチェーントランザクションTX3は、検証のためにブロックチェーンネットワークへと送信され又はブロードキャストされる。検証が成功すると、ブロックチェーントランザクションTX3は、ブロックチェーン208に記憶するために、ブロックチェーンネットワークのマイニングノードによりマイニングできる。
実施形態では、ブロックチェーントランザクションTX3の生成及び/又は検証は、ブロックチェーントランザクションTX3のトランザクションアウトプットを処理して、ブロックチェーントランザクションTX3のトランザクションアウトプットのロックスクリプトが、スレッドAロックスクリプトのための前のブロックチェーントランザクションTX2のトランザクションアウトプットのロックスクリプトと一致することをチェックすることを含み得る。このチェックが、ブロックチェーントランザクションTX3のトランザクションアウトプットについて失敗した場合、失敗状態が上げられ、ブロックチェーントランザクションTX3は無効であると考えられる。ブロックチェーントランザクションTX3のトランザクションアウトプットについてのチェックが合格した場合、ブロックチェーントランザクションTX3のトランザクションアウトプットのロックスクリプトの実行状態は、それが指定された実行状態に対応することを保証するためにチェックされ得る。この更なるチェックが失敗した場合、ブロックチェーントランザクションTX3は無効であると考えられる。この更なるチェックが合格し、任意の追加チェックが満たされた場合、ブロックチェーントランザクションTX3は有効であると考えられる。
図3Bは、図2のブロックチェーントランザクションTX4の生成、検証、及びマイニングを示す。ここで、前のブロックチェーントランザクションTX2のスレッドBロックスクリプトの実行が続く。この場合、ブロックチェーントランザクションTX4は、図示のように生成される。これは、単一のトランザクションインプットと、スレッドBロックスクリプトの連続を含む単一のトランザクションアウトプットと、を含む。トランザクションインプットは、前のブロックチェーントランザクションTX2のスレッドBロックスクリプトのアンロックスクリプトを含む。スレッドBロックスクリプトの連続(又はその部分)のためのトランザクションアウトプットは、スレッドBロックスクリプトのために前のブロックチェーントランザクションTX2のトランザクションアウトプットから複製される。一旦生成されると、ブロックチェーントランザクションTX4は、検証のためにブロックチェーンネットワークへと送信され又はブロードキャストされる。検証が成功すると、ブロックチェーントランザクションTX4は、ブロックチェーン208に記憶するために、ブロックチェーンネットワークのマイニングノードによりマイニングできる。
実施形態では、ブロックチェーントランザクションTX4の生成及び/又は検証は、ブロックチェーントランザクションTX4のトランザクションアウトプットを処理して、ブロックチェーントランザクションTX4のトランザクションアウトプットのロックスクリプトが、スレッドBロックスクリプトのための前のブロックチェーントランザクションTX2のトランザクションアウトプットのロックスクリプトと一致することをチェックすることを含み得る。このチェックが、ブロックチェーントランザクションTX4のトランザクションアウトプットについて失敗した場合、失敗状態が上げられ、ブロックチェーントランザクションTX4は無効であると考えられる。ブロックチェーントランザクションTX4のトランザクションアウトプットについてのチェックが合格した場合、ブロックチェーントランザクションTX4のトランザクションアウトプットのロックスクリプトの実行状態は、それが指定された実行状態に対応することを保証するためにチェックされ得る。この更なるチェックが失敗した場合、失敗状態が上げられ、ブロックチェーントランザクションTX4は無効であると考えられる。この更なるチェックが合格し、任意の追加チェックが満たされた場合、ブロックチェーントランザクションTX4は有効であると考えられる。
図3Cは、図2のブロックチェーントランザクションTX5の生成、検証、及びマイニングを示す。ここで、バリア構成の制御下での、前のブロックチェーントランザクションTX3のスレッドAロックスクリプトの実行と、前のブロックチェーントランザクションTX4のスレッドBロックスクリプトの実行と、を含む。この場合、ブロックチェーントランザクションTX5は図示のように生成される。これは、2つのトランザクションインプット(1つは前のブロックチェーントランザクションTX3のスレッドAロックスクリプトのアンロックスクリプトを含み、もう1つは前のブロックチェーントランザクションTX4のスレッドBロックスクリプトのアンロックスクリプトを含む)と、スレッドAロックスクリプト及びスレッドBロックスクリプトの2つのトランザクションアウトプットと、を含む。スレッドAロックスクリプト(又はその部分)のためのトランザクションアウトプットAは、前のブロックチェーントランザクションTX3のトランザクションアウトプットから複製される。スレッドBロックスクリプト(又はその部分)のためのトランザクションアウトプットBは、前のブロックチェーントランザクションTX4のトランザクションアウトプットから複製される。一旦生成されると、ブロックチェーントランザクションTX5は、検証のためにブロックチェーンネットワークへと送信され又はブロードキャストされる。検証が成功すると、ブロックチェーントランザクションTX5は、ブロックチェーン208に記憶するために、ブロックチェーンネットワークのマイニングノードによりマイニングできる。
実施形態では、ブロックチェーントランザクションTX5の生成又は検証は、ブロックチェーントランザクションTX5の各トランザクションアウトプットを処理して、ブロックチェーントランザクションTX5のトランザクションアウトプットのロックスクリプトが、前のブロックチェーントランザクション(例えば、本例ではTX3又はTX4)の対応するトランザクションアウトプットのロックスクリプトと一致することをチェックすることを含み得る。このチェックが、ブロックチェーントランザクションTX5のトランザクションアウトプットのうちの任意の1つについて失敗した場合、失敗状態が上げられ、ブロックチェーントランザクションTX5は無効であると考えられる。このチェックが合格した場合、バリア構成は継続でき、ここで、ブロックチェーントランザクションTX5のトランザクションアウトプットのロックスクリプトの実行状態は、それが指定された実行状態に対応することを保証するためにチェックされ得る。結果として生じた実行状態は、バリア構成の1つ以上のパラメータにより記述できる。このようなパラメータは、特定の実行ポイントにおいて実行のためのスレッドを制約すること、又は一方の実行のスレッド(例えば、スレッドBロックスクリプト)の実行を、他方の実行のスレッド(例えば、スレッドAロックスクリプト)により解放されるまでストール(stalling、待機)又はスリープすること、又は他のスレッド同期化条件を含み得る。このような制御は、複数の実行のスレッドがそれらのタスクを達成するために互いに競う競争状態を回避するために使用できる。この更なるチェックが、ブロックチェーントランザクションTX5のトランザクションアウトプットのうちの任意の1つについて失敗した場合、失敗状態が上げられ、ブロックチェーントランザクションTX5は無効であると考えられる。この更なるチェックが、ブロックチェーントランザクションTX5の全部のトランザクションアウトプットについて合格し、任意の追加チェックが満たされた場合、ブロックチェーントランザクションTX5は有効であると考えられる。
図3Dは、図2のブロックチェーントランザクションTX6の生成、検証、及びマイニングを示す。ここで、結合構成の制御下での、前のブロックチェーントランザクションTX5の複数の実行スレッド(スレッドAロックスクリプト及びスレッドBロックスクリプト)が、ブロックチェーントランザクションTX6の単一の実行スレッド(スレッドCロックスクリプト)に結合される。この場合、ブロックチェーントランザクションTX6は図示のように生成される。これは、2つのトランザクションインプット(1つは前のブロックチェーントランザクションTX5のスレッドAロックスクリプトのアンロックスクリプトを含み、もう1つは前のブロックチェーントランザクションTX5のスレッドBロックスクリプトのアンロックスクリプトを含む)と、新しいスレッドCロックスクリプトの1つのトランザクションアウトプットと、を含む。スレッドCロックスクリプトのためのトランザクションアウトプットは、結合構成の実行から決定できる。以下に更に詳細に記載されるように、スレッドCロックスクリプトについて異なるシナリオが存在すると考えられる。一旦生成されると、ブロックチェーントランザクションTX6は、検証のためにブロックチェーンネットワークへと送信され又はブロードキャストされる。検証が成功すると、ブロックチェーントランザクションTX6は、ブロックチェーン208に記憶するために、ブロックチェーンネットワークのマイニングノードによりマイニングできる。
1つのシナリオ(「複製されたスレッドによる結合」と呼ばれる)では、新しいスレッドCロックスクリプトの演算は、スレッドAロックスクリプト及びスレッドBロックスクリプトの共通の演算から複製される。このシナリオでは、ブロックチェーントランザクションTX2の生成及び/又は検証は、ブロックチェーントランザクションTX6の単一のトランザクションアウトプットを処理して、トランザクションアウトプットのロックスクリプトが前のブロックチェーントランザクションTX5の2つのトランザクションアウトプットのうちのそれぞれの1つのロックスクリプト(スレッドAロックスクリプト及びスレッドBロックスクリプト)と一致することをチェックすることを含み得る。このチェックが、親ロックスクリプトのうちの任意の1つについて失敗した場合、失敗状態が上げられ、ブロックチェーントランザクションTX6は無効であると考えられる。このチェックが合格した場合、結合構成は継続する。ここで、スレッドAロックスクリプト及びスレッドBロックスクリプトは、何らかの静的に定義された又は動的に推定された特定の位置へと実行され、次に結果として生じた実行状態は、結合され又は融合されて、何らかの定義された位置へのスレッドCロックスクリプトの実行のための初期実行状態を導出する。この更なるチェックが失敗した場合、失敗状態が上げられ、ブロックチェーントランザクションTX6は無効であると考えられる。この更なるチェックが合格し、任意の追加チェックが満たされた場合、ブロックチェーントランザクションTX6は有効であると考えられる。
別のシナリオ(「異なるスレッドをサポートする結合」と呼ばれる)では、新しいスレッドCロックスクリプトの演算は、スレッドAロックスクリプト及びスレッドBロックスクリプトの演算と同じ又は異なり(又は区別され)得る。この場合、有効なロックスクリプトに対応する有効なハッシュ値の集合は、(例えば、ロックスクリプトのインタープリタコードの部分として)静的に格納でき、又は(例えば、ロックスクリプトの部分としてインタープリットされているバイトコードシーケンスに)動的に格納できる。ブロックチェーントランザクションTX6の生成及び/又は検証は、ブロックチェーントランザクションTX6のトランザクションインプットにより指される前のブロックチェーントランザクションTX5のスレッドAロックスクリプト及びスレッドBロックスクリプトのハッシュ値を決定すること、及び必要な場合にはこれらのハッシュ値をハッシュ値の集合に追加すること、を含み得る。ブロックチェーントランザクションTX6のトランザクションアウトプットは、ブロックチェーントランザクションTX6のトランザクションアウトプットのロックスクリプトをハッシングすることが集合の有効なハッシュ値のうちの1つと一致するハッシュ値を生成することをチェックするために処理される。このチェックが失敗した場合、失敗状態が上げられ、ブロックチェーントランザクションTX6は無効であると考えられる。このチェックが合格した場合、結合構成は継続する。ここで、スレッドAロックスクリプト及びスレッドBロックスクリプトは、何らかの静的に定義された又は動的に推定された特定の位置へと実行され、次に結果として生じた実行状態は、結合され又は融合されて、何らかの定義された位置へのスレッドCロックスクリプトの実行のための初期実行状態を導出する。この更なるチェックが失敗した場合、失敗状態が上げられ、ブロックチェーントランザクションTX6は無効であると考えられる。この更なるチェックが合格し、任意の追加チェックが満たされた場合、ブロックチェーントランザクションTX6は有効であると考えられる。
結合構成のこれらのシナリオの全てにおいて、トランザクションTX6の指定された実行状態は、スレッドAロックスクリプト及び/又はスレッドBロックスクリプトが実行を終了したことを保証でき、スレッドAロックスクリプト及びスレッドBロックスクリプトの結果として生じる実行状態を結合し又は融合することを含み得る。これは、スマートコントラクトが複数の実行のスレッドにより生成された結果データを処理する必要のある場合に有用であり得る。
図4は、異なるスマートコントラクトのブロックチェーントランザクションの別のシーケンスを示す。ここで、ブロックチェーントランザクションのシーケンスは、i)実行スレッドの実行を分岐して、分岐構成又は動作の制御下で複数の実行スレッドを生成し、ii)結合構成又は動作の制御下で複数の実行スレッドを融合する。このブロックチェーントランザクションのシーケンスは、バリア構成又は動作の制御下で、スレッド間通信及び複数の実行スレッド間の協働を回避する。
図4のブロックチェーントランザクションTX2、TX3、及びTX4は、図3A〜3Bに関して上述したように、生成され、検証され、及びマイニングできる。ブロックチェーントランザクションTX3及びTX4は、ブロックチェーンにコミットされると、ブロックチェーントランザクションのシーケンスにより表される複数の実行のスレッド(例えば、ブロックチェーントランザクションTX3のスレッドAロックスクリプト、及びブロックチェーントランザクションTX4のスレッドBロックスクリプト)の同時又は非同期実行を表すことができることに留意する。
図5は、図4のブロックチェーントランザクションTX6の生成、検証、及びマイニングを示す。ここで、結合構成の制御下での、前のブロックチェーントランザクションTX3のスレッドAロックスクリプトの実行スレッド、及び前のブロックチェーントランザクションTX4のスレッドBロックスクリプトの実行スレッドが、ブロックチェーントランザクションTX6’の単一の実行スレッド(スレッドCロックスクリプト)に結合される。この場合、ブロックチェーントランザクションTX6’は図示のように生成される。これは、2つのトランザクションインプット(1つは前のブロックチェーントランザクションTX3のスレッドAロックスクリプトのアンロックスクリプトを含み、もう1つは前のブロックチェーントランザクションTX4のスレッドBロックスクリプトのアンロックスクリプトを含む)と、新しいスレッドCロックスクリプトの1つのトランザクションアウトプットと、を含む。スレッドCロックスクリプトのためのトランザクションアウトプットは、結合構成の実行から決定できる。以下に更に詳細に記載されるように、スレッドCロックスクリプトについて異なるシナリオが存在すると考えられる。一旦生成されると、ブロックチェーントランザクションTX6’は、検証のためにブロックチェーンネットワークへと送信され又はブロードキャストされる。検証が成功すると、ブロックチェーントランザクションTX6’は、ブロックチェーン208に記憶するために、ブロックチェーンネットワークのマイニングノードによりマイニングできる。
「複製されたスレッドによる結合」シナリオでは、スレッドCロックスクリプトの演算は、スレッドAロックスクリプト及びスレッドBロックスクリプトの共通の演算から複製される。このシナリオでは、ブロックチェーントランザクションTX6の検証は、ブロックチェーントランザクションTX6の単一のトランザクションアウトプットを処理して、トランザクションアウトプットのロックスクリプトが前のブロックチェーントランザクションTX3のトランザクションアウトプットのスレッドAロックスクリプト及び前のブロックチェーントランザクションTX4のトランザクションアウトプットのスレッドBロックスクリプトと一致することをチェックすることを含み得る。このチェックが、親スレッドロックスクリプトのうちの任意の1つについて失敗した場合、失敗状態が上げられ、ブロックチェーントランザクションTX6’は無効であると考えられる。このチェックが合格すると、結合構成は継続できる。ここで、ブロックチェーントランザクションTX6’のトランザクションアウトプットのロックスクリプトの実行状態は、指定された実行状態及び前のブロックチェーントランザクションTX3のスレッドAロックスクリプト及び前のブロックチェーントランザクションTX4のスレッドBロックスクリプトの親スレッドの実行状態に対応することを保証するためにチェックできる。この更なるチェックが失敗した場合、失敗状態が上げられ、ブロックチェーントランザクションTX6’は無効であると考えられる。この更なるチェックが合格し、任意の追加チェックが満たされた場合、ブロックチェーントランザクションTX6’は有効であると考えられる。
「異なるスレッドをサポートする結合」シナリオでは、新しいスレッドCロックスクリプトの演算は、スレッドAロックスクリプト及びスレッドBロックスクリプトの演算と同じ又は異なり(又は区別され)得る。この場合、有効なロックスクリプトに対応する有効なハッシュ値の集合は、(例えば、ロックスクリプトのインタープリタコードの部分として)静的に格納でき、又は(例えば、ロックスクリプトの部分としてインタープリットされているバイトコードシーケンスに)動的に格納できる。ブロックチェーントランザクションTX6’の生成及び/又は検証は、ブロックチェーントランザクションTX6’のトランザクションインプットにより指される前のブロックチェーントランザクションTX3のスレッドAロックスクリプト及び前のブロックチェーントランザクションTX4のスレッドBロックスクリプトのハッシュ値を決定すること、及び必要な場合にはこれらのハッシュ値をハッシュ値の集合に追加すること、を含み得る。ブロックチェーントランザクションTX6’のトランザクションアウトプットは、ブロックチェーントランザクションTX6’のトランザクションアウトプットのロックスクリプトをハッシングすることが集合の有効なハッシュ値のうちの1つと一致するハッシュ値を生成することをチェックするために処理される。このチェックが失敗した場合、失敗状態が上げられ、ブロックチェーントランザクションTX6’は無効であると考えられる。このチェックが合格すると、結合構成は継続できる。ここで、ブロックチェーントランザクションTX6’のトランザクションアウトプットのロックスクリプトの実行状態は、指定された実行状態及び前のブロックチェーントランザクションTX3のスレッドAロックスクリプト及び前のブロックチェーントランザクションTX4のスレッドBロックスクリプトの親スレッドの実行状態に対応することを保証するためにチェックできる。この更なるチェックが失敗した場合、失敗状態が上げられ、ブロックチェーントランザクションTX6’は無効であると考えられる。この更なるチェックが合格し、任意の追加チェックが満たされた場合、ブロックチェーントランザクションTX6’は有効であると考えられる。
結合構成のこれらのシナリオの全てにおいて、トランザクションTX6’の指定された実行状態は、スレッドAロックスクリプト及び/又はスレッドBロックスクリプトが実行を終了したことを保証でき、スレッドAロックスクリプト及びスレッドBロックスクリプトの結果として生じる実行状態を結合し又は融合することを含み得る。これは、スマートコントラクトが複数の実行のスレッドにより生成された結果データを処理する必要のある場合に有用であり得る。
図6は、図2のブロックチェーントランザクションTX2の例示的な詳細を示す。ここで、前のブロックチェーントランザクションTX1のロックスクリプトの実行は分岐構成の実行を含む。分岐構成は、前のブロックチェーントランザクションTX1のロックスクリプトとして実行される実行スレッド(つまり、スレッドAロックスクリプト)の実行を分岐して、複数の実行スレッド(つまり、スレッドAロックスクリプト及び新しいスレッドBロックスクリプトの連続)を生成する。
概略的に図示されるように、前のブロックチェーントランザクションTX1は、アンロックスクリプト(「scriptSig」とラベル付けされる)を含む単一のトランザクションインプットVin[x]を有する。前のブロックチェーントランザクションTX1は、バイトコードシーケンス及びインタープリタコードを含むスレッドAロックスクリプト(「scriptPubKey」とラベル付けされる)を表すトランザクションアウトプットVout[x]も有する。バイトコードシーケンスは、状態ルールセット及び明確に定義された状態セットを有する状態ルールセットを具現化する状態機械として考えられるコンピュータプログラムである。それにより、バイトコードシーケンス(コンピュータプログラム)のバイトコードの実行は、状態機械の状態間の遷移をもたらす。インタープリタコードは、スレッドAロックスクリプトのバイトコードシーケンスのインタープリットをサポートする。スレッドAロックスクリプトは、現在状態実行ポインタ(又は「現在実行ポインタ」)、及びスレッドAロックスクリプトのバイトコードシーケンスにより表される状態機械の状態の中で現在状態を一緒に表す連続状態データ(「仮想メモリ」とラベル付けされる)、も含む。スレッドAロックスクリプトの部分として含まれる現在実行ポインタは、現在状態に対応するバイトコードシーケンスの実行ポイントを参照する。スレッドAロックスクリプトの部分として含まれる連続状態データは、スレッドAロックスクリプトに含まれる現在実行ポインタにより参照される実行ポイントにおけるバイトコードシーケンスにより表される状態機械の状態を表す。
図6の例で分かるように、支払いブロックチェーントランザクションTX2は、単一のトランザクションインプットVin[x]と、2つの別個のトランザクションアウトプット、つまり、スレッドAロックスクリプトを表す1つのVout[x]と、スレッドBロックスクリプトを表す他のVout[y]と、を有する。支払いブロックチェーントランザクションTX2の単一のトランザクションインプットVin[x]は、前のブロックチェーントランザクションTX1のトランザクションアウトプットVout[x]へのポインタと、前のブロックチェーントランザクションTX1のトランザクションアウトプットVout[x]のスレッドAロックスクリプトのためのアンロックスクリプト(「scriptSig」)と、を含む。両方のトランザクションアウトプットVout[x]及びVout[y]は、バイトコードシーケンス及びインタープリタコードを含む。支払いブロックチェーントランザクションTX2のスレッドAロックスクリプトのバイトコードシーケンス及びインタープリタコードは、前のブロックチェーントランザクションTX1のVout[x]のスレッドAロックスクリプトのバイトコードシーケンス及びインタープリタコードから複製できる。
支払いブロックチェーントランザクションTX2のトランザクションアウトプットVout[x]のスレッドAロックスクリプトは、次の状態実行ポインタ(又は「次の実行ポインタ」)、及びスレッドAロックスクリプトのバイトコードシーケンスにより表される状態機械の状態の中で次の状態を一緒に表す連続状態データ(「仮想メモリ」とラベル付けされる)、も含む。スレッドAロックスクリプトの部分として含まれる次の実行ポインタは、次の状態に対応するスレッドAロックスクリプトのバイトコードシーケンスの実行ポイントを参照する。スレッドAロックスクリプトの部分として含まれる連続状態データは、スレッドAロックスクリプトに含まれる次の実行ポインタにより参照される実行ポイントにおけるバイトコードシーケンスにより表される状態機械の状態を表す。
支払いブロックチェーントランザクションTX2のスレッドAロックスクリプトに含まれる連続状態データは、支払いブロックチェーントランザクションTX2を生成するときに、支払いブロックチェーントランザクションTX2のスレッドAロックスクリプトに含まれる次の実行ポインタを生成し又はアクセスし、前のブロックチェーントランザクションTX1のスレッドAロックスクリプトの連続状態データを用いてスレッドAロックスクリプトのバイトコードシーケンスの実行の現在状態を復元し、次にスレッドAロックスクリプトのバイトコードシーケンスを実行することにより、決定できることに留意する。このような実行は、前のブロックチェーントランザクションTX1に含まれるスレッドAロックスクリプトの現在実行ポインタに対応するポイント(又は演算)において開始し、スレッドAロックスクリプトの次の実行ポインタに対応するポイント(又は演算)において終了する。このような実行は、支払いブロックチェーントランザクションTX2のVin[x]のアンロックスクリプト(「scriptSig」)の実行により決定されたインプットも使用できる。
支払いブロックチェーントランザクションTX2を生成し及び検証するときに実行される支払いブロックチェーントランザクションTX2のスレッドAロックスクリプトのバイトコード演算の数は、前のブロックチェーントランザクションTX1に含まれるスレッドAロックスクリプトの現在実行ポインタと支払いブロックチェーントランザクションTX2のスレッドAロックスクリプトの次の実行ポインタとの間の差により記述されることに留意する。実行ポインタのこの差分は、支払いブロックチェーントランザクションTX2のスレッドAロックスクリプトの次の実行ポインタを選択し又は変化させることにより、設計により変更できる。このように、支払いブロックチェーントランザクションTX2を生成し及び検証するときに実行される支払いブロックチェーントランザクションTX2のスレッドAロックスクリプトのバイトコード演算の数は、支払いトランザクションに対する制約をパラメータ化する際に制約され又は使用され得る。このパラメータ化された制約は、トランザクション間で実行されるバイトコード演算の数を制限するために(例えば、スマートコントラクトのバイトコードシーケンスの非効率な演算を回避するために)、スマートコントラクトのバイトコードシーケンスを支払いトランザクションのシーケンスに渡り実行される異なるセグメントに論理的に区分するために、パラメータ化された制約に基づき新しいトランザクションを生成するエンティティのための報酬を計算するために、又は他の可能な使用のために、使用できる。
新しいスレッドBロックスクリプトのための支払いブロックチェーントランザクションTX2のトランザクションアウトプットVout[y]は、分岐構成の実行から決定される。以下に更に詳細に記載されるように、新しいスレッドBロックスクリプトについて異なるシナリオが存在すると考えられる。
「複製されたスレッドによる分岐」シナリオでは、新しいスレッドBロックスクリプトのバイトコードシーケンス及びインタープリタコードは、前のブロックチェーントランザクションTX1のVout[x]のスレッドAロックスクリプトのバイトコードシーケンス及びインタープリタコードから複製できる。この場合には、同じ演算を共有する2つの異なる実行スレッド(支払いブロックチェーントランザクションTX2のVout[x]のスレッドAロックスクリプト、及び支払いブロックチェーントランザクションTX2のVout[y]のスレッドBロックスクリプト)が、異なるインプットデータにより実行してよい。これは、一般的なMapReduce型の状況で有用な変形である。支払いブロックチェーントランザクションTX2のトランザクションアウトプットVout[y]のスレッドBロックスクリプトは、次の状態実行ポインタ(又は「次の実行ポインタ」)、及びスレッドBロックスクリプトのバイトコードシーケンスにより表される状態機械の状態の中で次の状態を一緒に表す連続状態データ(「仮想メモリ」とラベル付けされる)、も含む。スレッドBロックスクリプトの部分として含まれる次の実行ポインタは、この次の状態に対応するスレッドBロックスクリプトのバイトコードシーケンスの実行ポイントを参照する。スレッドBロックスクリプトの部分として含まれる連続状態データは、スレッドBロックスクリプトに含まれる次の実行ポインタにより参照される実行ポイントにおけるバイトコードシーケンスにより表される状態機械の状態を表す。
支払いブロックチェーントランザクションTX2のスレッドBロックスクリプトに含まれる連続状態データは、支払いブロックチェーントランザクションTX2を生成するときに、支払いブロックチェーントランザクションTX2のスレッドBロックスクリプトに含まれる次の実行ポインタを生成し又はアクセスし、前のブロックチェーントランザクションTX1のスレッドAロックスクリプトの連続状態データを用いてスレッドBロックスクリプトのバイトコードシーケンスの実行の現在状態を復元し、次にスレッドBロックスクリプトのバイトコードシーケンスを実行することにより、決定できることに留意する。このような実行は、前のブロックチェーントランザクションTX1に含まれるスレッドAロックスクリプトの現在実行ポインタに対応するポイント(又は演算)において開始し、スレッドBロックスクリプトの次の実行ポインタに対応するポイント(又は演算)において終了する。このような実行は、支払いブロックチェーントランザクションTX2のVin[x]のアンロックスクリプト(「scriptSig」)の実行により決定されたインプットも使用できる。
「複製されたスレッドによる分岐」シナリオでは、支払いブロックチェーントランザクションTX2を生成し及び検証するときに実行される支払いブロックチェーントランザクションTX2のスレッドBロックスクリプトのバイトコード演算の数は、前のブロックチェーントランザクションTX1に含まれるスレッドAロックスクリプトの現在実行ポインタと支払いブロックチェーントランザクションTX2のスレッドBロックスクリプトの次の実行ポインタとの間の差により記述できる。実行ポインタのこの差分は、支払いブロックチェーントランザクションTX2のスレッドBロックスクリプトの次の実行ポインタの実行ポインタを選択し又は変化させることにより、設計により変更できる。このように、支払いブロックチェーントランザクションTX2を生成し及び検証するときに実行される支払いブロックチェーントランザクションTX2のスレッドBロックスクリプトのバイトコード演算の数は、支払いトランザクションに対する制約をパラメータ化する際に制約され又は使用され得る。このパラメータ化された制約は、トランザクション間で実行されるバイトコード演算の数を制限するために(例えば、スマートコントラクトのバイトコードシーケンスの非効率な演算を回避するために)、スマートコントラクトのバイトコードシーケンスを支払いトランザクションのシーケンスに渡り実行される異なるセグメントに論理的に区分するために、パラメータ化された制約に基づき新しいトランザクションを生成するエンティティのための報酬を計算するために、又は他の可能な使用のために、使用できる。
「複製されたスレッドによる分岐」シナリオでは、ブロックチェーントランザクションTX2の生成及び/又は検証は、支払いブロックチェーントランザクションTX2の各トランザクションアウトプットを処理して、所与のトランザクションアウトプットのロックスクリプトのバイトコードシーケンス及びインタープリタコード(又はこのようなデータの結合のハッシュ値)が、前のブロックチェーントランザクションTX1の単一のトランザクションアウトプットVout[x]のスレッドAロックスクリプトのバイトコードシーケンス及びインタープリタコード(又はこのようなデータの結合のハッシュ値)と一致することをチェックすることを含み得る。このチェックが、トランザクションアウトプットのうちの任意の1つについて失敗した場合、失敗状態が上げられ、ブロックチェーントランザクションTX2は無効であると考えられる。このチェックが合格すると、分岐構成は継続できる。ここで、ブロックチェーントランザクションTX2のトランザクションアウトプットのロックスクリプトのバイトコードシーケンスの実行状態は、指定された実行状態に対応することを保証するためにチェックできる。この指定された実行状態は、支払いブロックチェーントランザクションTX2のトランザクションアウトプットの2つのロックスクリプトについて同じ又は異なり得る。この更なるチェックが、トランザクションアウトプットのうちの任意の1つについて失敗した場合、失敗状態が上げられ、ブロックチェーントランザクションTX2は無効であると考えられる。この更なるチェックが、支払いブロックチェーントランザクションTX2の全部のトランザクションアウトプットについて合格し、任意の追加チェックが満たされた場合、支払いブロックチェーントランザクションTX2は有効であると考えられる。
他の実施形態では、支払いブロックチェーントランザクションは、前のブロックチェーントランザクションのロックスクリプトの親実行スレッドから分岐した2つ以上の子実行スレッドを表す2つ以上のトランザクションアウトプットを含むことができる。「複製されたスレッドによる分岐」シナリオでは、支払いブロックチェーントランザクションのトランザクションアウトプットのロックスクリプトは、前のブロックチェーントランザクションのロックスクリプトからそれぞれ複製された複数の実行スレッドを表す。実施形態では、各トランザクションアウトプットのロックスクリプトは、以下を含む多数の要素を含むことができる:
・実行されるべき子スレッドバイトコードシーケンス;
・インタープリットし、子スレッドバイトコードシーケンスを実行するインタープリタコード;
・子スレッドバイトコードシーケンスの中の実行位置を表す次の実行ポインタ;
・次の実行ポインタにおける子スレッドバイトコードシーケンスの実行状態を表す仮想メモリのコピー又はスナップショット。
他の実施形態では、各トランザクションアウトプットのロックスクリプトは、追加の又は他のデータ要素を含むことができる。さらに、支払いブロックチェーントランザクションのトランザクションインプットのアンロックスクリプト(「scriptSig」)(これは、分岐構成により分岐された前のブロックチェーントランザクションのロックスクリプトの親実行スレッドを指す)は、以下:i)支払いブロックチェーントランザクション自体の部分のコピー、及びii)トランザクションインプットを指す前のブロックチェーントランザクションのコピー、を含むことができる。支払いブロックチェーントランザクションを検証するとき、アンロックスクリプトは、最初に仮想メモリ(スタック)に置かれるので、対応するロックスクリプトの特定のインタープリタ仮想バイトコードによる後の使用のためにアクセス可能であることに留意する。これら2つのアイテムを、支払いブロックチェーントランザクションのトランザクションインプットのアンロックスクリプト(「scriptSig」)の部分として含むことにより、支払いブロックチェーントランザクション及び分岐構成の検証を行うことができる。
以下の表Aは、本願明細書に記載の「複製されたスレッドによる分岐」シナリオに従う、分岐構成の仮想バイトコード(VOP_FORK_DUP)を記述する擬似コードを提供する。仮想バイトコードVOP_FORK_DUPは、ロックスクリプトのバイトコードシーケンスに含まれ、ロックスクリプトに含まれるインタープリタコードを用いてインタープリットでき、表Aの演算を実行する。仮想バイトコードVOP_FORK_DUPは、本願明細書に記載のように支払いブロックチェーントランザクションを生成し及び/又は検証するとき、インタープリットできる。この場合、演算は、支払いブロックチェーントランザクションのトランザクションインプットのアンロックスクリプトに格納されトランザクションインプットにより指された前のブロックチェーントランザクションのロックスクリプトを抽出する。演算は、(例えば、ロックスクリプトのインタープリタコードの部分として)静的に格納でき、又は(例えば、ロックスクリプトの部分としてインタープリットされているバイトコードシーケンスに)動的に格納できるパラメータにより表すことのできる支払いブロックチェーントランザクションのトランザクションアウトプットのセットを通じてループする。トランザクションアウトプット毎に、トランザクションアウトプットに含まれるロックスクリプトのバイトコードシーケンス及びインタープリタコード(又はこのようなデータの結合のハッシュ値)が、支払いブロックチェーントランザクションのトランザクションインプットのアンロックスクリプトに格納された前のブロックチェーントランザクションのロックスクリプトのバイトコードシーケンス及びインタープリタコード(又はこのようなデータの結合のハッシュ値)と一致することをチェックする。このチェックが、トランザクションアウトプットのうちの任意の1つについて失敗した場合、失敗状態が上げられ、ブロックチェーントランザクションは無効であると考えられる。このチェックが合格した場合、結合構成のインタープリットは継続できる。ここで、トランザクションアウトプットのロックスクリプトのバイトコードシーケンスの次の実行ポインタ、特定の位置にあることがチェックされる。トランザクションアウトプットのロックスクリプトのバイトコードシーケンスの次の実行ポインタは、同じ又は異なり得る。この更なるチェックが、トランザクションアウトプットのうちの任意の1つについて失敗した場合、失敗状態が上げられ、ブロックチェーントランザクションは無効であると考えられる。この更なるチェックが、全部のトランザクションアウトプットについて合格し、任意の追加チェックが満たされた場合、ブロックチェーントランザクションは有効であると考えられる。VOP_FORK_DUP仮想バイトコードの検証が成功した場合、支払いブロックチェーントランザクションの子スレッドロックスクリプトの1つ以上のバイトコードの実行は、継続し、支払いブロックチェーントランザクションの検証のために、次の実行ポインタにおける子スレッドバイトコードシーケンスの実行状態を表す仮想メモリのスナップショットと一致することを保証するためにチェックされる。
表A
別のシナリオ(「異なるスレッドをサポートする分岐」では、新しいスレッドBロックスクリプトのバイトコードシーケンス及び/又はインタープリタコードは、前のブロックチェーントランザクションT1のスレッドAロックスクリプトのバイトコードシーケンス及びインタープリタコードに関して、同じ又は異なり(又は区別され)得る。このシナリオでは、有効なバイトコードシーケンス及びインタープリタコードに対応する有効なハッシュ値の集合は、(例えば、ロックスクリプトのインタープリタコードの部分として)静的に格納でき、又は(例えば、ロックスクリプトの部分としてインタープリットされているバイトコードシーケンスに)動的に格納できる。支払いブロックチェーントランザクションTX2のトランザクションアウトプットVout[y]のスレッドBロックスクリプトは、次の状態実行ポインタ(又は「次の実行ポインタ」)、及びスレッドBロックスクリプトのバイトコードシーケンスにより表される状態機械の状態の中で次の状態を一緒に表す連続状態データ(「仮想メモリ」とラベル付けされる)、も含む。スレッドBロックスクリプトの部分として含まれる次の実行ポインタは、この次の状態に対応するスレッドBロックスクリプトのバイトコードシーケンスの実行ポイントを参照する。スレッドBロックスクリプトの部分として含まれる連続状態データは、スレッドBロックスクリプトに含まれる次の実行ポインタにより参照される実行ポイントにおけるバイトコードシーケンスにより表される状態機械の状態を表す。
この「異なるスレッドをサポートする分岐」シナリオでは、支払いブロックチェーントランザクションTX2のスレッドBロックスクリプトに含まれる連続状態データは、支払いブロックチェーントランザクションTX2を生成するときに、支払いブロックチェーントランザクションTX2のスレッドBロックスクリプトに含まれる次の実行ポインタを生成し又はアクセスし、スレッドBロックスクリプトのバイトコードシーケンスの実行の現在状態を初期化し、次にスレッドBロックスクリプトのバイトコードシーケンスを実行することにより、決定できる。このような実行は、スレッドBロックスクリプトの次の実行ポインタに対応するポイント(又は演算)において終了する。このような実行は、支払いブロックチェーントランザクションTX2のVin[x]のアンロックスクリプト(「scriptSig」)の実行により決定されたインプットも使用できる。
「異なるスレッドをサポートする分岐」シナリオでは、支払いブロックチェーントランザクションTX2を生成し及び検証するときに実行される支払いブロックチェーントランザクションTX2のスレッドBロックスクリプトのバイトコード演算の数は、スレッドBロックスクリプトのバイトコードシーケンスの初期実行ポインタと支払いブロックチェーントランザクションTX2のスレッドBロックスクリプトの次の実行ポインタとの間の差により記述できる。実行ポインタのこの差分は、支払いブロックチェーントランザクションTX2のスレッドBロックスクリプトの次の実行ポインタを選択し又は変化させることにより、設計により変更できる。このように、支払いブロックチェーントランザクションTX2を生成し及び検証するときに実行される支払いブロックチェーントランザクションTX2のスレッドBロックスクリプトのバイトコード演算の数は、支払いトランザクションに対する制約をパラメータ化する際に制約され又は使用され得る。このパラメータ化された制約は、トランザクション間で実行されるバイトコード演算の数を制限するために(例えば、スマートコントラクトのバイトコードシーケンスの非効率な演算を回避するために)、スマートコントラクトのバイトコードシーケンスを支払いトランザクションのシーケンスに渡り実行される異なるセグメントに論理的に区分するために、パラメータ化された制約に基づき新しいトランザクションを生成するエンティティのための報酬を計算するために、又は他の可能な使用のために、使用できる。
「異なるスレッドをサポートする分岐」シナリオでは、支払いブロックチェーントランザクションTX2の生成及び検証は、前のブロックチェーントランザクションTX1のスレッドAロックスクリプトのバイトコードシーケンス及びインタープリタコードの結合のハッシュ値を決定することと、必要な場合に、このハッシュ値を設定された集合に追加することと、を含み得る。処理は、次に、支払いブロックチェーントランザクションTX2のトランザクションアウトプット(Vout[x]及びVout[y])を通じてループする。ここで、ループの各反復は、特定のトランザクションアウトプットのロックスクリプトのバイトコードシーケンス及びインタープリタコードの結合のハッシングが、集合の有効なハッシュ値のうちの1つと一致することをチェックする。このチェックが、トランザクションアウトプットのうちの任意の1つについて失敗した場合、失敗状態が上げられ、ブロックチェーントランザクションは無効であると考えられる。このチェックが合格した場合、分岐構成は継続でき、ここで、トランザクションアウトプットのロックスクリプトのバイトコードシーケンスの実行状態は、それが指定された実行状態に対応することを保証するためにチェックされ得る。トランザクションアウトプットのロックスクリプトのバイトコードシーケンスの指定された実行状態は、同じ又は異なり得る。この更なるチェックが、トランザクションアウトプットのうちの任意の1つについて失敗した場合、失敗状態が上げられ、支払いブロックチェーントランザクションTX2は無効であると考えられる。これらの更なるチェックが合格し、任意の追加チェックが満たされた場合、支払いブロックチェーントランザクションTX2は有効であると考えられる。
他の実施形態では、分岐構成を含む支払いブロックチェーントランザクションは、前のブロックチェーントランザクションのロックスクリプトの親実行スレッドから分岐した2つ以上の子実行スレッドを表す2つ以上のトランザクションアウトプットを含むことができる。「異なるスレッドをサポートする分岐」シナリオでは、支払いブロックチェーントランザクションのトランザクションアウトプットのロックスクリプトは、支払いブロックチェーントランザクションの異なる実行スレッドを表す。実施形態では、各トランザクションアウトプットのロックスクリプトは、以下を含む多数の要素を含むことができる:
・実行されるべき子スレッドバイトコードシーケンス;
・インタープリットし、子スレッドバイトコードシーケンスを実行するインタープリタコード;
・子スレッドバイトコードシーケンスの中の実行位置を表す次の実行ポインタ;
・次の実行ポインタにおける子スレッドバイトコードシーケンスの実行状態を表す仮想メモリのコピー又はスナップショット。
他の実施形態では、各トランザクションアウトプットのロックスクリプトは、追加の又は他のデータ要素を含むことができる。さらに、支払いブロックチェーントランザクションのトランザクションインプットのアンロックスクリプト(「scriptSig」)(これは、分岐構成により分岐された前のブロックチェーントランザクションのロックスクリプトの親実行スレッドを指す)は、以下:i)支払いブロックチェーントランザクション自体の部分のコピー、及びii)トランザクションインプットを指す前のブロックチェーントランザクションのコピー、を含むことができる。支払いブロックチェーントランザクションを検証するとき、アンロックスクリプトは、最初に仮想メモリ(スタック)に置かれるので、対応するロックスクリプトの特定のインタープリタ仮想バイトコードによる後の使用のためにアクセス可能であることに留意する。これら2つのアイテムを、支払いブロックチェーントランザクションのトランザクションインプットのアンロックスクリプト(「scriptSig」)の部分として含むことにより、支払いブロックチェーントランザクション及び分岐構成の検証を行うことができる。
以下の表Bは、本願明細書に記載の「異なるスレッドをサポートする分岐」シナリオに従う、分岐構成の仮想バイトコード(VOP_FORK_DISTINCT)を記述する擬似コードを提供する。仮想バイトコードVOP_FORK_DISTINCTは、ロックスクリプトのバイトコードシーケンスに含まれ、ロックスクリプトに含まれるインタープリタコードを用いてインタープリットされて、表Bの演算を実行できる。仮想バイトコードVOP_FORK_DISTINCTは、本願明細書に記載のように支払いブロックチェーントランザクションを生成し及び/又は検証するとき、インタープリットできる。演算は、支払いトランザクションのトランザクションインプットのアンロックスクリプトに格納された前のブロックチェーントランザクションのロックスクリプトを抽出する。演算は、(例えば、ロックスクリプトのインタープリタコードの部分として)静的に格納でき、又は(例えば、ロックスクリプトの部分としてインタープリットされているバイトコードシーケンスに)動的に格納できるパラメータにより表すことのできる支払いブロックチェーントランザクションの(トランザクションアウトプットのセットに対応する)子スレッドロックスクリプトのセットを通じてループする。演算は、各々の子スレッドロックスクリプト(又はトランザクションアウトプット)のバイトコードシーケンス及びインタープリタコードの結合に対応するハッシュ値を読み出す。実施形態では、これらのハッシュ値は、(例えば、ロックスクリプトのインタープリタコードの部分として)静的に格納でき、又は(例えば、ロックスクリプトの部分としてインタープリットされているバイトコードシーケンスに)動的に格納できる。例えば、VOP_FORK_DISTINCT仮想バイトコードと関連して、仮想バイトコードに続く何バイトかのデータは、子スレッドロックスクリプトのセット(及びしたがって、バイトコードシーケンス/インタープリタコードハッシュ値及び対応するトランザクションアウトプットのセット)を、子スレッドロックスクリプトのセットのバイトコードシーケンス/インタープリタコードハッシュ値の結合を決定するために使用される文字区切り文字と一緒に、指定できる。演算は、有効なバイトコードシーケンス及びインタープリタコードの結合に対応するハッシュ値の集合を初期化する。ハッシュ値のこの集合は、(例えば、ロックスクリプトのインタープリタコードの部分として)静的に格納でき、又は(例えば、ロックスクリプトの部分としてインタープリットされているバイトコードシーケンスに)動的に格納できるデータにより表すことができる。次に、前のブロックチェーントランザクションのロックスクリプトのバイトコードシーケンス及びインタープリタコードの結合のハッシュ値が計算され、集合に追加される。演算は、次に、支払いブロックチェーントランザクションのトランザクションアウトプットのセットを通じてループする。各トランザクションアウトプットについて、演算は、支払いブロックチェーントランザクションの対応するアウトプットからロックスクリプトを抽出し、抽出したロックスクリプトのバイトコードシーケンス及びインタープリタコードの結合のハッシュ値を計算し、計算したハッシュ値がハッシュ値の集合の中に存在することをチェックする。このチェックが、トランザクションアウトプットのうちの任意の1つについて失敗した場合、失敗状態が上げられ、支払いブロックチェーントランザクションは無効であると考えられる。このチェックが合格すると、分岐構成は継続できる。ここで、支払いブロックチェーントランザクションのトランザクションアウトプットのロックスクリプトの実行状態は、指定された実行状態に対応することを保証するためにチェックできる。この指定された実行状態は、支払いブロックチェーントランザクションのトランザクションアウトプットのロックスクリプトについて同じ又は異なり得る。この更なるチェックが、トランザクションアウトプットのうちの任意の1つについて失敗した場合、失敗状態が上げられ、ブロックチェーントランザクションは無効であると考えられる。この更なるチェックが、全部のトランザクションアウトプットについて合格し、任意の追加チェックが満たされた場合、支払いブロックチェーントランザクションは有効であると考えられる。VOP_FORK_DISTINCT仮想バイトコードの検証が成功した場合、支払いブロックチェーントランザクションの子スレッドロックスクリプトの1つ以上のバイトコードの実行は、継続し、支払いブロックチェーントランザクションの検証のために、次の実行ポインタにおける子スレッドバイトコードシーケンスの実行状態を表す仮想メモリのスナップショットと一致することを保証するためにチェックされる。
更に、前のブロックチェーントランザクションの親スレッドバイトコードシーケンスに含まれる支払いブロックチェーントランザクションのアウトプットの子スレッドバイトコードシーケンスを有することも可能である。この場合、次に、子スレッドバイトコードシーケンスが、親スレッドバイトコードシーケンスの中に存在することを単にチェックし、次に、子スレッド演算を含んでいる特定の位置からバイトコードシーケンスを実行し続けることが可能である。
表B
図7は、図2のブロックチェーントランザクションTX3の例示的な詳細を示す。ここで、前のブロックチェーントランザクションTX2のスレッドAロックスクリプトの実行を続ける。概略的に図示するように、前のブロックチェーントランザクションTX2は、単一のトランザクションインプットVin[x]と、2つの別個のトランザクションアウトプット、つまり、スレッドAロックスクリプトを表す1つのトランザクションアウトプットVout[x]と、スレッドBロックスクリプトを表す他のVout[y]と、を有する。両方のトランザクションアウトプットは、バイトコードシーケンス及びインタープリタコードを含む。前のブロックチェーントランザクションTX2のトランザクションインプットVin[x]は、前のブロックチェーントランザクションTX1のトランザクションアウトプットVout[x]へのポインタと、アンロックスクリプト(「scriptSig」)と、を含む。
前のブロックチェーントランザクションTX2のトランザクションアウトプットVout[x]のスレッドAロックスクリプトは、現在状態実行ポインタ(又は「現在実行ポインタ」)、及びスレッドAロックスクリプトのバイトコードシーケンスにより表される状態機械の状態の中で現在の状態を一緒に表す連続状態データ(「仮想メモリ」とラベル付けされる)、を含む。スレッドAロックスクリプトの部分として含まれる現在実行ポインタは、この現在状態に対応するスレッドAロックスクリプトのバイトコードシーケンスの実行ポイントを参照する。スレッドAロックスクリプトの部分として含まれる連続状態データは、スレッドAロックスクリプトに含まれる現在実行ポインタにより参照される実行ポイントにおけるバイトコードシーケンスにより表される状態機械の状態を表す。
図7の例で分かるように、支払いブロックチェーントランザクションTX3は、単一のトランザクションインプットVin[x]と、単一のトランザクションアウトプットVout[x]と、を有する。トランザクションインプットVin[x]は、前のブロックチェーントランザクションTX2のトランザクションアウトプットVout[x]へのポインタと、前のブロックチェーントランザクションTX2のトランザクションアウトプットVout[x]のスレッドAロックスクリプトのためのアンロックスクリプト(「scriptSig」とラベル付けされる)と、を含む。トランザクションアウトプットVout[x]は、バイトコードシーケンス及びインタープリタコードを含むスレッドAロックスクリプト(「scriptPubKey」とラベル付けされる)を表す。インタープリタコードは、スレッドAロックスクリプトのバイトコードシーケンスのインタープリットをサポートする。支払いブロックチェーントランザクションTX3のスレッドAロックスクリプトのバイトコードシーケンス及びインタープリタコードは、前のブロックチェーントランザクションTX2のVout[x]のスレッドAロックスクリプトのバイトコードシーケンス及びインタープリタコードから複製できる。
支払いブロックチェーントランザクションTX3のスレッドAロックスクリプトは、次の状態実行ポインタ(又は「次の実行ポインタ」)、及びスレッドAロックスクリプトのバイトコードシーケンスにより表される状態機械の状態の中で次の状態を一緒に表す連続状態データ(「仮想メモリ」とラベル付けされる)、も含む。スレッドAロックスクリプトの部分として含まれる次の実行ポインタは、次の状態に対応するスレッドAロックスクリプトのバイトコードシーケンスの実行ポイントを参照する。スレッドAロックスクリプトの部分として含まれる連続状態データは、スレッドAロックスクリプトに含まれる次の実行ポインタにより参照される実行ポイントにおけるバイトコードシーケンスにより表される状態機械の状態を表す。
支払いブロックチェーントランザクションTX3のスレッドAロックスクリプトに含まれる連続状態データは、支払いブロックチェーントランザクションTX3を生成するときに、支払いブロックチェーントランザクションTX3のスレッドAロックスクリプトに含まれる次の実行ポインタを生成し又はアクセスし、前のブロックチェーントランザクションTX2のスレッドAロックスクリプトの連続状態データを用いてスレッドAロックスクリプトのバイトコードシーケンスの実行の現在状態を復元し、次にスレッドAロックスクリプトのバイトコードシーケンスを実行することにより、決定できる。このような実行は、前のブロックチェーントランザクションTX2に含まれるスレッドAロックスクリプトの現在実行ポインタに対応するポイント(又は演算)において開始し、スレッドAロックスクリプトの次の実行ポインタに対応するポイント(又は演算)において終了する。このような実行は、支払いブロックチェーントランザクションTX3のVin[x]のアンロックスクリプト(「scriptSig」)の実行により決定されたインプットも使用できる。
支払いブロックチェーントランザクションTX3を生成し及び検証するときに実行される支払いブロックチェーントランザクションTX3のスレッドAロックスクリプトのバイトコード演算の数は、前のブロックチェーントランザクションTX2に含まれるスレッドAロックスクリプトの現在実行ポインタと支払いブロックチェーントランザクションTX3のスレッドAロックスクリプトの次の実行ポインタとの間の差により記述されることに留意する。実行ポインタのこの差分は、支払いブロックチェーントランザクションTX3のスレッドAロックスクリプトの次の実行ポインタを選択し又は変化させることにより、設計により変更できる。このように、支払いブロックチェーントランザクションTX3を生成し及び検証するときに実行される支払いブロックチェーントランザクションTX3のスレッドAロックスクリプトのバイトコード演算の数は、支払いトランザクションに対する制約をパラメータ化する際に制約され又は使用され得る。このパラメータ化された制約は、トランザクション間で実行されるバイトコード演算の数を制限するために(例えば、スマートコントラクトのバイトコードシーケンスの非効率な演算を回避するために)、スマートコントラクトのバイトコードシーケンスを支払いトランザクションのシーケンスに渡り実行される異なるセグメントに論理的に区分するために、パラメータ化された制約に基づき新しいトランザクションを生成するエンティティのための報酬を計算するために、又は他の可能な使用のために、使用できる。
支払いブロックチェーントランザクションTX3の生成及び/又は検証は、支払いブロックチェーントランザクションTX3のトランザクションアウトプットVout[x]を処理して、トランザクションアウトプットVout[x]のスレッドAロックスクリプトのバイトコードシーケンス及びインタープリタコード(又はこのようなデータの結合のハッシュ値)が、前のブロックチェーントランザクションTX2のトランザクションアウトプットVout[x]のスレッドAロックスクリプトのバイトコードシーケンス及びインタープリタコード(又はこのようなデータの結合のハッシュ値)と一致することをチェックすることを含み得る。このチェックが失敗した場合、失敗状態が上げられ、ブロックチェーントランザクションは無効であると考えられる。このチェックが合格した場合、演算は継続でき、ここで、支払いブロックチェーントランザクションTX3のスレッドAロックスクリプトの実行状態は、それが指定された実行状態に対応することを保証するためにチェックされ得る。この更なるチェックが失敗した場合、失敗状態が上げられ、ブロックチェーントランザクション’は無効であると考えられる。この更なるチェックが合格し、任意の追加チェックが満たされた場合、ブロックチェーントランザクションは有効であると考えられる。
図8は、図2のブロックチェーントランザクションTX4の例示的な詳細を示す。ここで、前のブロックチェーントランザクションTX2のスレッドBロックスクリプトの実行を続ける。概略的に図示するように、前のブロックチェーントランザクションTX2は、単一のトランザクションインプットVin[x]と、2つの別個のトランザクションアウトプット、つまり、スレッドAロックスクリプトを表す1つのトランザクションアウトプットVout[x]と、スレッドBロックスクリプトを表す他のVout[y]と、を有する。両方のトランザクションアウトプットは、バイトコードシーケンス及びインタープリタコードを含む。前のブロックチェーントランザクションTX2の単一のトランザクションインプットVin[x]は、前のブロックチェーントランザクションTX1のトランザクションアウトプットVout[x]へのポインタと、アンロックスクリプト(「scriptSig」)と、を含む。
前のブロックチェーントランザクションTX2のトランザクションアウトプットVout[y]のスレッドBロックスクリプトは、現在状態実行ポインタ(又は「現在実行ポインタ」)、及びスレッドBロックスクリプトのバイトコードシーケンスにより表される状態機械の状態の中で現在の状態を一緒に表す連続状態データ(「仮想メモリ」とラベル付けされる)、を含む。スレッドBロックスクリプトの部分として含まれる現在実行ポインタは、この現在状態に対応するスレッドBロックスクリプトのバイトコードシーケンスの実行ポイントを参照する。スレッドBロックスクリプトの部分として含まれる連続状態データは、スレッドBロックスクリプトに含まれる現在実行ポインタにより参照される実行ポイントにおけるバイトコードシーケンスにより表される状態機械の状態を表す。
図8の例で分かるように、支払いブロックチェーントランザクションTX4は、単一のトランザクションインプットVin[x]と、単一のトランザクションアウトプットVout[x]と、を有する。トランザクションインプットVin[x]は、前のブロックチェーントランザクションTX2のスレッドBロックスクリプトのトランザクションアウトプットVout[y]へのポインタと、前のブロックチェーントランザクションTX2のスレッドBロックスクリプトのためのアンロックスクリプト(「scriptSig」とラベル付けされる)と、を含む。トランザクションアウトプットVout[x]は、バイトコードシーケンス及びインタープリタコードを含むスレッドBロックスクリプト(「scriptPubKey」とラベル付けされる)を表す。インタープリタコードは、スレッドBロックスクリプトのバイトコードシーケンスのインタープリットをサポートする。支払いブロックチェーントランザクションTX4のスレッドBロックスクリプトのバイトコードシーケンス及びインタープリタコードは、前のブロックチェーントランザクションTX2のVout[y]のスレッドBロックスクリプトのバイトコードシーケンス及びインタープリタコードから複製できる。
支払いブロックチェーントランザクションTX4のVout[x]のスレッドBロックスクリプトは、次の状態実行ポインタ(又は「次の実行ポインタ」)、及びスレッドBロックスクリプトのバイトコードシーケンスにより表される状態機械の状態の中で次の状態を一緒に表す連続状態データ(「仮想メモリ」とラベル付けされる)、も含む。スレッドBロックスクリプトの部分として含まれる次の実行ポインタは、次の状態に対応するスレッドBロックスクリプトのバイトコードシーケンスの実行ポイントを参照する。スレッドBロックスクリプトの部分として含まれる連続状態データは、スレッドBロックスクリプトに含まれる次の実行ポインタにより参照される実行ポイントにおけるバイトコードシーケンスにより表される状態機械の状態を表す。
支払いブロックチェーントランザクションTX4のスレッドBロックスクリプトに含まれる連続状態データは、支払いブロックチェーントランザクションTX4を生成するときに、支払いブロックチェーントランザクションTX4のスレッドBロックスクリプトに含まれる次の実行ポインタを生成し又はアクセスし、前のブロックチェーントランザクションTX2のスレッドBロックスクリプトの連続状態データを用いてスレッドBロックスクリプトのバイトコードシーケンスの実行の現在状態を復元し、次にスレッドBロックスクリプトのバイトコードシーケンスを実行することにより、決定できる。このような実行は、前のブロックチェーントランザクションTX2に含まれるスレッドBロックスクリプトの現在実行ポインタに対応するポイント(又は演算)において開始し、スレッドBロックスクリプトの次の実行ポインタに対応するポイント(又は演算)において終了する。このような実行は、支払いブロックチェーントランザクションTX4のVin[x]のアンロックスクリプト(「scriptSig」)の実行により決定されたインプットも使用できる。
支払いブロックチェーントランザクションTX4を生成し及び検証するときに実行される支払いブロックチェーントランザクションTX4のスレッドBロックスクリプトのバイトコード演算の数は、前のブロックチェーントランザクションTX2に含まれるスレッドBロックスクリプトの現在実行ポインタと支払いブロックチェーントランザクションTX4のスレッドBロックスクリプトの次の実行ポインタとの間の差により記述されることに留意する。実行ポインタのこの差分は、支払いブロックチェーントランザクションTX4のスレッドBロックスクリプトの次の実行ポインタを選択し又は変化させることにより、設計により変更できる。このように、支払いブロックチェーントランザクションTX4を生成し及び検証するときに実行される支払いブロックチェーントランザクションTX4のスレッドBロックスクリプトのバイトコード演算の数は、支払いトランザクションに対する制約をパラメータ化する際に制約され又は使用され得る。このパラメータ化された制約は、トランザクション間で実行されるバイトコード演算の数を制限するために(例えば、スマートコントラクトのバイトコードシーケンスの非効率な演算を回避するために)、スマートコントラクトのバイトコードシーケンスを支払いトランザクションのシーケンスに渡り実行される異なるセグメントに論理的に区分するために、パラメータ化された制約に基づき新しいトランザクションを生成するエンティティのための報酬を計算するために、又は他の可能な使用のために、使用できる。
支払いブロックチェーントランザクションTX4の生成及び/又は検証は、支払いブロックチェーントランザクションTX4のトランザクションアウトプットVout[x]を処理して、トランザクションアウトプットVout[x]のスレッドBロックスクリプトのバイトコードシーケンス及びインタープリタコード(又はこのようなデータの結合のハッシュ値)が、前のブロックチェーントランザクションTX2のトランザクションアウトプットVout[y]のスレッドBロックスクリプトのバイトコードシーケンス及びインタープリタコード(又はこのようなデータの結合のハッシュ値)と一致することをチェックすることを含み得る。このチェックが失敗した場合、失敗状態が上げられ、ブロックチェーントランザクションは無効であると考えられる。このチェックが合格した場合、演算は継続でき、ここで、支払いブロックチェーントランザクションTX4のスレッドBロックスクリプトの実行状態は、それが指定された実行状態に対応することを保証するためにチェックされ得る。この更なるチェックが失敗した場合、失敗状態が上げられ、ブロックチェーントランザクション’は無効であると考えられる。この更なるチェックが合格し、任意の追加チェックが満たされた場合、ブロックチェーントランザクションは有効であると考えられる。
図9は、図2のブロックチェーントランザクションTX5の例示的な詳細を示す。ここで、バリア構成の制御下での、前のブロックチェーントランザクションTX3のスレッドAロックスクリプトの実行と、前のブロックチェーントランザクションTX4のスレッドBロックスクリプトの実行と、を継続する。
概略的に図示されるように、前のブロックチェーントランザクションTX3は、アンロックスクリプト(「scriptSig」とラベル付けされる)を含む単一のトランザクションインプットVin[x]を有する。前のブロックチェーントランザクションTX3は、バイトコードシーケンス及びインタープリタコードを含むスレッドAロックスクリプト(「scriptPubKey」とラベル付けされる)を表すトランザクションアウトプットVout[x]も有する。インタープリタコードは、スレッドAロックスクリプトのバイトコードシーケンスのインタープリットをサポートする。スレッドAロックスクリプトは、現在状態実行ポインタ(又は「現在実行ポインタ」)、及びスレッドAロックスクリプトのバイトコードシーケンスにより表される状態機械の状態の中で現在状態を一緒に表す連続状態データ(「仮想メモリ」とラベル付けされる)、も含む。スレッドAロックスクリプトの部分として含まれる現在実行ポインタは、現在状態に対応するバイトコードシーケンスの実行ポイントを参照する。スレッドAロックスクリプトの部分として含まれる連続状態データは、スレッドAロックスクリプトに含まれる現在実行ポインタにより参照される実行ポイントにおけるバイトコードシーケンスにより表される状態機械の状態を表す。
概略的に図示されるように、前のブロックチェーントランザクションTX4は、アンロックスクリプト(「scriptSig」とラベル付けされる)を含む単一のトランザクションインプットVin[x]を有する。前のブロックチェーントランザクションTX4は、バイトコードシーケンス及びインタープリタコードを含むスレッドBロックスクリプト(「scriptPubKey」とラベル付けされる)を表すトランザクションアウトプットVout[x]も有する。インタープリタコードは、スレッドBロックスクリプトのバイトコードシーケンスのインタープリットをサポートする。スレッドBロックスクリプトは、現在状態実行ポインタ(又は「現在実行ポインタ」)、及びスレッドBロックスクリプトのバイトコードシーケンスにより表される状態機械の状態の中で現在状態を一緒に表す連続状態データ(「仮想メモリ」とラベル付けされる)、も含む。スレッドBロックスクリプトの部分として含まれる現在実行ポインタは、現在状態に対応するバイトコードシーケンスの実行ポイントを参照する。スレッドBロックスクリプトの部分として含まれる連続状態データは、スレッドBロックスクリプトに含まれる現在実行ポインタにより参照される実行ポイントにおけるバイトコードシーケンスにより表される状態機械の状態を表す。
図9の例で分かるように、支払いブロックチェーントランザクションTX5は、2つの別個のトランザクションインプットVin[x]、Vin[y]と、2つの別個のトランザクションアウトプットVout[x]、Vout[y]と、を有する。支払いブロックチェーントランザクションTX5のトランザクションインプットVin[x]は、前のブロックチェーントランザクションTX3のスレッドAロックスクリプトのトランザクションアウトプットVout[x]へのポインタと、前のブロックチェーントランザクションTX3のVout[x]のスレッドAロックスクリプトのためのアンロックスクリプト(「scriptSig」)と、を含む。支払いブロックチェーントランザクションTX5のトランザクションインプットVin[y]は、前のブロックチェーントランザクションTX4のスレッドBロックスクリプトのトランザクションアウトプットVout[x]へのポインタと、前のブロックチェーントランザクションTX3のVout[x]のスレッドBロックスクリプトのためのアンロックスクリプト(「scriptSig」)と、を含む。トランザクションアウトプットVout[x]は、スレッドAロックスクリプトを表す。トランザクションアウトプットVout[y]は、スレッドBロックスクリプトを表す。両方のトランザクションアウトプットは、バイトコードシーケンス及びインタープリタコードを含む。インタープリタコードは、所与のトランザクションアウトプットのバイトコードシーケンスのインタープリットをサポートする。
支払いブロックチェーントランザクションTX5のVout[x]のスレッドAロックスクリプトのバイトコードシーケンス及びインタープリタコードは、前のブロックチェーントランザクションTX3のVout[x]のスレッドAロックスクリプトのバイトコードシーケンス及びインタープリタコードから複製できる。支払いブロックチェーントランザクションTX5のVout[x]のスレッドAロックスクリプトは、次の状態実行ポインタ(又は「次の実行ポインタ」)、及びスレッドAロックスクリプトのバイトコードシーケンスにより表される状態機械の状態の中で次の状態を一緒に表す連続状態データ(「仮想メモリ」とラベル付けされる)、も含む。スレッドAロックスクリプトの部分として含まれる次の実行ポインタは、次の状態に対応するスレッドAロックスクリプトのバイトコードシーケンスの実行ポイントを参照する。スレッドAロックスクリプトの部分として含まれる連続状態データは、スレッドAロックスクリプトに含まれる次の実行ポインタにより参照される実行ポイントにおけるバイトコードシーケンスにより表される状態機械の状態を表す。
支払いブロックチェーントランザクションTX5のスレッドAロックスクリプトに含まれる連続状態データは、支払いブロックチェーントランザクションTX5を生成するときに、支払いブロックチェーントランザクションTX5のスレッドAロックスクリプトに含まれる次の実行ポインタを生成し又はアクセスし、前のブロックチェーントランザクションTX3のスレッドAロックスクリプトの連続状態データを用いてスレッドAロックスクリプトのバイトコードシーケンスの実行の現在状態を復元し、次にスレッドAロックスクリプトのバイトコードシーケンスを実行することにより、決定できることに留意する。このような実行は、前のブロックチェーントランザクションTX3に含まれるスレッドAロックスクリプトの現在実行ポインタに対応するポイント(又は演算)において開始し、スレッドAロックスクリプトの次の実行ポインタに対応するポイント(又は演算)において終了する。このような実行は、支払いブロックチェーントランザクションTX5のVin[x]のアンロックスクリプト(「scriptSig」)の実行により決定されたインプットも使用できる。
支払いブロックチェーントランザクションTX5を生成し及び検証するときに実行される支払いブロックチェーントランザクションTX5のスレッドAロックスクリプトのバイトコード演算の数は、前のブロックチェーントランザクションTX3に含まれるスレッドAロックスクリプトの現在実行ポインタと支払いブロックチェーントランザクションTX5のスレッドAロックスクリプトの次の実行ポインタとの間の差により記述されることに留意する。実行ポインタのこの差分は、支払いブロックチェーントランザクションTX5のスレッドAロックスクリプトの次の実行ポインタを選択し又は変化させることにより、設計により変更できる。このように、支払いブロックチェーントランザクションTX5を生成し及び検証するときに実行される支払いブロックチェーントランザクションTX5のスレッドAロックスクリプトのバイトコード演算の数は、支払いトランザクションに対する制約をパラメータ化する際に制約され又は使用され得る。このパラメータ化された制約は、トランザクション間で実行されるバイトコード演算の数を制限するために(例えば、スマートコントラクトのバイトコードシーケンスの非効率な演算を回避するために)、スマートコントラクトのバイトコードシーケンスを支払いトランザクションのシーケンスに渡り実行される異なるセグメントに論理的に区分するために、パラメータ化された制約に基づき新しいトランザクションを生成するエンティティのための報酬を計算するために、又は他の可能な使用のために、使用できる。
支払いブロックチェーントランザクションTX5のVout[y]のスレッドBロックスクリプトのバイトコードシーケンス及びインタープリタコードは、前のブロックチェーントランザクションTX4のVout[x]のスレッドBロックスクリプトのバイトコードシーケンス及びインタープリタコードから複製できる。
支払いブロックチェーントランザクションTX5のVout[y]のスレッドBロックスクリプトは、次の状態実行ポインタ(又は「次の実行ポインタ」)、及びスレッドBロックスクリプトのバイトコードシーケンスにより表される状態機械の状態の中で次の状態を一緒に表す連続状態データ(「仮想メモリ」とラベル付けされる)、も含む。スレッドBロックスクリプトの部分として含まれる次の実行ポインタは、次の状態に対応するスレッドBロックスクリプトのバイトコードシーケンスの実行ポイントを参照する。スレッドBロックスクリプトの部分として含まれる連続状態データは、スレッドBロックスクリプトに含まれる次の実行ポインタにより参照される実行ポイントにおけるバイトコードシーケンスにより表される状態機械の状態を表す。
支払いブロックチェーントランザクションTX5のスレッドBロックスクリプトに含まれる連続状態データは、支払いブロックチェーントランザクションTX5を生成するときに、支払いブロックチェーントランザクションTX5のスレッドBロックスクリプトに含まれる次の実行ポインタを生成し又はアクセスし、前のブロックチェーントランザクションTX4のスレッドBロックスクリプトの連続状態データを用いてスレッドBロックスクリプトのバイトコードシーケンスの実行の現在状態を復元し、次にスレッドBロックスクリプトのバイトコードシーケンスを実行することにより、決定できることに留意する。このような実行は、前のブロックチェーントランザクションTX4に含まれるスレッドBロックスクリプトの現在実行ポインタに対応するポイント(又は演算)において開始し、スレッドBロックスクリプトの次の実行ポインタに対応するポイント(又は演算)において終了する。このような実行は、支払いブロックチェーントランザクションTX5のVin[y]のアンロックスクリプト(「scriptSig」)の実行により決定されたインプットも使用できる。
支払いブロックチェーントランザクションTX5を生成し及び検証するときに実行される支払いブロックチェーントランザクションTX5のスレッドBロックスクリプトのバイトコード演算の数は、前のブロックチェーントランザクションTX4に含まれるスレッドBロックスクリプトの現在実行ポインタと支払いブロックチェーントランザクションTX5のスレッドBロックスクリプトの次の実行ポインタとの間の差により記述されることに留意する。実行ポインタのこの差分は、支払いブロックチェーントランザクションTX5のスレッドBロックスクリプトの次の実行ポインタを選択し又は変化させることにより、設計により変更できる。このように、支払いブロックチェーントランザクションTX5を生成し及び検証するときに実行される支払いブロックチェーントランザクションTX5のスレッドBロックスクリプトのバイトコード演算の数は、支払いトランザクションに対する制約をパラメータ化する際に制約され又は使用され得る。このパラメータ化された制約は、トランザクション間で実行されるバイトコード演算の数を制限するために(例えば、スマートコントラクトのバイトコードシーケンスの非効率な演算を回避するために)、スマートコントラクトのバイトコードシーケンスを支払いトランザクションのシーケンスに渡り実行される異なるセグメントに論理的に区分するために、パラメータ化された制約に基づき新しいトランザクションを生成するエンティティのための報酬を計算するために、又は他の可能な使用のために、使用できる。
支払いブロックチェーントランザクションTX5の生成及び実行の間に、スレッドAロックスクリプト及びスレッドBロックスクリプトの実行から生じる、スレッドAロックスクリプトの実行状態及び/又はスレッドBロックスクリプトの実行状態は、バリア構成又は演算の1つ以上のパラメータにより記述できる。このようなパラメータは、特定の実行ポイントにおいて実行のためのスレッドを制約すること、又は一方の実行のスレッド(例えば、スレッドBロックスクリプト)の実行を、他方の実行のスレッド(例えば、スレッドAロックスクリプト)により解放されるまでストール(stalling、待機)又はスリープすること、又は他のスレッド同期化条件を含み得る。このような制御は、複数の実行のスレッドがそれらのタスクを達成するために互いに競う競争状態を回避するために使用できる。
ブロックチェーントランザクションTX5の生成及び/又は検証は、ブロックチェーントランザクションTX5のトランザクションアウトプットVout[x]を処理して、トランザクションアウトプットVout[x]のロックスクリプトが、スレッドAロックスクリプトについて前のブロックチェーントランザクションTX3の対応するトランザクションアウトプットVout[x]のロックスクリプトと一致することをチェックすることと、ブロックチェーントランザクションTX5のトランザクションアウトプットVout[y]を処理して、トランザクションアウトプットVout[y]のロックスクリプトが、スレッドBロックスクリプトについて前のブロックチェーントランザクションTX4の対応するトランザクションアウトプットVout[x]のロックスクリプトと一致することをチェックすることと、を含み得る。このチェックが、ブロックチェーントランザクションTX5のトランザクションアウトプットのうちの任意の1つについて失敗した場合、失敗状態が上げられ、ブロックチェーントランザクションTX5は無効であると考えられる。このチェックが合格した場合、バリア構成は継続でき、ここで、ブロックチェーントランザクションTX5のトランザクションアウトプットのスレッドAロックスクリプト及びスレッドBロックスクリプトの実行状態は、それらが指定された実行状態に対応することを保証するためにチェックされ得る。結果として生じるスレッドAロックスクリプトの実行状態及びスレッドBロックスクリプトの実行状態は、バリア構成又は演算の1つ以上のパラメータにより記述できる。このようなパラメータは、特定の実行ポイントにおいて実行のためのスレッドを制約すること、又は一方の実行のスレッド(例えば、スレッドBロックスクリプト)の実行を、他方の実行のスレッド(例えば、スレッドAロックスクリプト)により解放されるまでストール(stalling、待機)又はスリープすること、又は他のスレッド同期化条件を含み得る。このような制御は、複数の実行のスレッドがそれらのタスクを達成するために互いに競う競争状態を回避するために使用できる。この更なるチェックが失敗した場合、失敗状態が上げられ、支払いブロックチェーントランザクションTX5は無効であると考えられる。この更なるチェックが合格し、任意の追加チェックが満たされた場合、ブロックチェーントランザクションTX5は有効であると考えられる。
他の実施形態では、バリア構成を含む支払いブロックチェーントランザクションは、2つより多くのトランザクションインプット、及び管理または制御される2つより多くの実行スレッドを表す対応するトランザクションアウトプットを含むことができる。バリア構成を含む支払いブロックチェーントランザクションでは、支払いブロックチェーントランザクションのトランザクションアウトプットのロックスクリプトは、結果として生じる実行スレッドを表す。実施形態では、各トランザクションアウトプットのロックスクリプトは、以下を含む多数の要素を含むことができる:
・実行されるべきスレッドバイトコードシーケンス;
・インタープリットし、スレッドバイトコードシーケンスを実行するインタープリタコード;
・スレッドバイトコードシーケンスの中の実行位置を表す次の実行ポインタ;
・次の実行ポインタにおけるスレッドバイトコードシーケンスの実行状態を表す仮想メモリのコピー又はスナップショット。
他の実施形態では、各トランザクションアウトプットのロックスクリプトは、追加の又は他のデータ要素を含むことができる。さらに、支払いブロックチェーントランザクションのトランザクションインプットのアンロックスクリプト(「scriptSig」)(これは、バリア構成の対象である前のブロックチェーントランザクションのロックスクリプトの複数の実行スレッドを指す)は、それぞれ、以下:i)支払いブロックチェーントランザクション自体の部分のコピー、及びii)それぞれのトランザクションインプットを指す前のブロックチェーントランザクションのコピー、を含む。支払いブロックチェーントランザクションを検証するとき、アンロックスクリプトは、最初に仮想メモリ(スタック)に置かれるので、対応するロックスクリプトの特定のインタープリタ仮想バイトコードによる後の使用のためにアクセス可能であることに留意する。これら2つのアイテムを、支払いブロックチェーントランザクションのトランザクションインプットのアンロックスクリプト(「scriptSig」)の部分として含むことにより、支払いブロックチェーントランザクション及びバリア構成の検証を行うことができる。
表Cは、本願明細書に記載のバリア構成の仮想バイトコード(VOP_BARRIER)を記述する疑似コードを提供する。仮想バイトコードVOP_BARRIERは、ロックスクリプトのバイトコードシーケンスに含まれ、ロックスクリプトに含まれるインタープリタコードを用いてインタープリットされ、表Cの演算を実行できる。仮想バイトコードVOP_BARRIERは、本願明細書に記載のように支払いブロックチェーントランザクションを生成し及び/又は検証するとき、インタープリットできる。バリア構成は、別のスレッドを特定のポイントに制約し、又は、該スレッドの実行のためにその実行の更に先に制約できる。VOP_BARRIER仮想バイトコードの検証が成功した場合、支払いブロックチェーントランザクションのそれぞれのトランザクションアウトプットの子スレッドロックスクリプトの1つ以上のバイトコードの実行は、継続し、支払いブロックチェーントランザクションの検証のために、次の実行ポインタにおける子スレッドバイトコードシーケンスの実行状態を表す仮想メモリのスナップショットと一致することを保証するためにチェックされる。
表C
図10は、図5のブロックチェーントランザクションTX6’の例示的な詳細を示す。ここで、結合構成の制御下で、前のブロックチェーントランザクションTX3のスレッドAロックスクリプトの実行と、前のブロックチェーントランザクションTX4のスレッドBロックスクリプトの実行と、を結合する。
概略的に図示されるように、前のブロックチェーントランザクションTX3は、アンロックスクリプト(「scriptSig」とラベル付けされる)を含む単一のトランザクションインプットVin[x]を有する。前のブロックチェーントランザクションTX3は、バイトコードシーケンス及びインタープリタコードを含むスレッドAロックスクリプト(「scriptPubKey」とラベル付けされる)を表すトランザクションアウトプットVout[x]も有する。インタープリタコードは、スレッドAロックスクリプトのバイトコードシーケンスのインタープリットをサポートする。スレッドAロックスクリプトは、現在状態実行ポインタ(又は「現在実行ポインタ」)、及びスレッドAロックスクリプトのバイトコードシーケンスにより表される状態機械の状態の中で現在状態を一緒に表す連続状態データ(「仮想メモリ」とラベル付けされる)、も含む。スレッドAロックスクリプトの部分として含まれる現在実行ポインタは、現在状態に対応するバイトコードシーケンスの実行ポイントを参照する。スレッドAロックスクリプトの部分として含まれる連続状態データは、スレッドAロックスクリプトに含まれる現在実行ポインタにより参照される実行ポイントにおけるバイトコードシーケンスにより表される状態機械の状態を表す。
概略的に図示されるように、前のブロックチェーントランザクションTX4は、アンロックスクリプト(「scriptSig」とラベル付けされる)を含む単一のトランザクションインプットVin[x]を有する。前のブロックチェーントランザクションTX4は、バイトコードシーケンス及びインタープリタコードを含むスレッドBロックスクリプト(「scriptPubKey」とラベル付けされる)を表すトランザクションアウトプットVout[x]も有する。インタープリタコードは、スレッドBロックスクリプトのバイトコードシーケンスのインタープリットをサポートする。スレッドBロックスクリプトは、現在状態実行ポインタ(又は「現在実行ポインタ」)、及びスレッドBロックスクリプトのバイトコードシーケンスにより表される状態機械の状態の中で現在状態を一緒に表す連続状態データ(「仮想メモリ」とラベル付けされる)、も含む。スレッドBロックスクリプトの部分として含まれる現在実行ポインタは、現在状態に対応するバイトコードシーケンスの実行ポイントを参照する。スレッドBロックスクリプトの部分として含まれる連続状態データは、スレッドBロックスクリプトに含まれる現在実行ポインタにより参照される実行ポイントにおけるバイトコードシーケンスにより表される状態機械の状態を表す。
図10の例で分かるように、支払いブロックチェーントランザクションTX6’は、結合されるべき2つのスレッドの2つの別個のトランザクションインプットVin[x]、Vin[y]と、スレッドCロックスクリプトを表す1つのトランザクションアウトプットVout[x]と、を有する。支払いブロックチェーントランザクションTX6’のトランザクションインプットVin[x]は、前のブロックチェーントランザクションTX3のスレッドAロックスクリプトのトランザクションアウトプットVout[x]へのポインタと、前のブロックチェーントランザクションTX3のVout[x]のスレッドAロックスクリプトのためのアンロックスクリプト(「scriptSig」)と、を含む。支払いブロックチェーントランザクションTX6’のトランザクションインプットVin[y]は、前のブロックチェーントランザクションTX4のVout[x]のスレッドBロックスクリプトのトランザクションアウトプットVout[x]へのポインタと、前のブロックチェーントランザクションTX4のVout[x]のスレッドBロックスクリプトのためのアンロックスクリプト(「scriptSig」)と、を含む。
支払いブロックチェーントランザクションTX6’のトランザクションアウトプットVout[x]は、バイトコードシーケンス及びインタープリタコードを含む。インタープリタコードは、トランザクションアウトプットVout[x]のスレッドCロックスクリプトのバイトコードシーケンスのインタープリットをサポートする。支払いブロックチェーントランザクションTX6’のVout[y]のスレッドCロックスクリプトは、次の状態実行ポインタ(又は「現在実行ポインタ」)、及びスレッドCロックスクリプトのバイトコードシーケンスにより表される状態機械の状態の中で次の状態を一緒に表す連続状態データ(「仮想メモリ」とラベル付けされる)、も含む。スレッドCロックスクリプトの部分として含まれる次の実行ポインタは、次の状態に対応するスレッドCロックスクリプトのバイトコードシーケンスの実行ポイントを参照する。スレッドCロックスクリプトの部分として含まれる連続状態データは、スレッドCロックスクリプトに含まれる次の実行ポインタにより参照される実行ポイントにおけるバイトコードシーケンスにより表される状態機械の状態を表す。新しいスレッドCロックスクリプトのための支払いブロックチェーントランザクションTX6’のトランザクションアウトプットVout[x]は、結合構成の実行から決定される。以下に更に詳細に記載されるように、新しいスレッドCロックスクリプトについて異なるシナリオが存在すると考えられる。
「複製されたスレッドによる結合」シナリオでは、新しいスレッドCロックスクリプトのバイトコードシーケンス及びインタープリタコードは、前のブロックチェーントランザクションTX3のVout[x]のスレッドAロックスクリプトのバイトコードシーケンス及びインタープリタコードから、又は前のブロックチェーントランザクションTX4のVout[y]のスレッドBロックスクリプトのバイトコードシーケンス及びインタープリタコードから、複製できる。
この「複製されたスレッドによる結合」シナリオでは、支払いブロックチェーントランザクションTX6’のスレッドCロックスクリプトに含まれる連続状態データは、支払いブロックチェーントランザクションTX6’を生成するときに、何からの静的に定義された又は動的に推定された特定の位置へとスレッドAロックスクリプト及びスレッドBロックスクリプトを実行し、次に結果として生じた実行状態を結合し又は融合して、スレッドCロックスクリプトのバイトコードシーケンスの初期実行状態を導出し、次にスレッドCロックスクリプトのバイトコードシーケンスを実行することにより、決定できる。このような実行は、スレッドCロックスクリプトの次の実行ポインタに対応するポイント(又は演算)において終了する。このような実行は、支払いブロックチェーントランザクションTX6’のVin[x]のアンロックスクリプト(「scriptSig」)及び/又はVin[y]のアンロックスクリプト(「scriptSig」)の実行により決定されたインプットも使用できる。
「複製されたスレッドによる結合」シナリオでは、支払いブロックチェーントランザクションTX6’を生成し及び検証するときに実行される支払いブロックチェーントランザクションTX6’のスレッドCロックスクリプトのバイトコード演算の数は、前のブロックチェーントランザクションTX3に含まれるスレッドAロックスクリプトの現在実行ポインタ(又は前のブロックチェーントランザクションTX4に含まれるスレッドBロックスクリプトの現在実行ポインタ)と、支払いブロックチェーントランザクションTX6’のスレッドCロックスクリプトの次の実行ポインタと、の間の差により記述できる。実行ポインタのこの差分は、支払いブロックチェーントランザクションTX6’のスレッドCロックスクリプトの次の実行ポインタを選択し又は変化させることにより、設計により変更できる。このように、支払いブロックチェーントランザクションTX6’を生成し及び検証するときに実行される支払いブロックチェーントランザクションTX6’のスレッドCロックスクリプトのバイトコード演算の数は、支払いトランザクションに対する制約をパラメータ化する際に制約され又は使用され得る。このパラメータ化された制約は、トランザクション間で実行されるバイトコード演算の数を制限するために(例えば、スマートコントラクトのバイトコードシーケンスの非効率な演算を回避するために)、スマートコントラクトのバイトコードシーケンスを支払いトランザクションのシーケンスに渡り実行される異なるセグメントに論理的に区分するために、パラメータ化された制約に基づき新しいトランザクションを生成するエンティティのための報酬を計算するために、又は他の可能な使用のために、使用できる。
「複製されたスレッドによる結合」シナリオでは、支払いブロックチェーントランザクションTX6’の生成及び/又は検証は、ブロックチェーントランザクションTX6’のトランザクションアウトプットVout[x]を処理して、トランザクションアウトプットVout[x]のスレッドCロックスクリプトのバイトコードシーケンス及びインタープリタコード(又はこのようなデータの結合のハッシュ)が、前のブロックチェーントランザクションTX3のトランザクションアウトプットVout[x]のスレッドAロックスクリプトのバイトコードシーケンス及びインタープリタコード(又はこのようなデータの結合のハッシュ)と一致すること、及び/又は、前のブロックチェーントランザクションTX4の単一のトランザクションアウトプットVout[x]のスレッドBロックスクリプトのバイトコードシーケンス及びインタープリタコード(又はこのようなデータの結合のハッシュ)と一致すること、をチェックすることを含み得る。このチェックが失敗した場合、失敗状態が上げられ、ブロックチェーントランザクションは無効であると考えられる。このチェックが合格した場合、結合構成は継続でき、ここで、ブロックチェーントランザクションのトランザクションインプットのロックスクリプトの実行状態は、それらが指定された実行状態に対応することを保証するためにチェックされ、次にこのような実行状態が一緒に結合され又は融合され得る。この更なるチェックが失敗した場合、失敗状態が上げられ、支払いブロックチェーントランザクションTX6’は無効であると考えられる。この更なるチェックが合格し、任意の追加チェックが満たされた場合、ブロックチェーントランザクションTX6’は有効であると考えられる。
他の実施形態では、結合構成を含む支払いブロックチェーントランザクションは、支払いブロックチェーントランザクションのロックスクリプトの子実行スレッドを形成するために一緒に融合された2つより多くの親実行スレッドを表す2つより多くのトランザクションインプットを含むことができる。「複製されたスレッドによる結合」シナリオでは、前のブロックチェーントランザクションのロックスクリプトの複数の実行スレッドを結合する支払いブロックチェーントランザクションのロックスクリプトは、以下の多数の要素を含むことができる:
・実行されるべき子スレッドバイトコードシーケンス;
・インタープリットし、子スレッドバイトコードシーケンスを実行するインタープリタコード;
・子スレッドバイトコードシーケンスの中の実行位置を表す次の実行ポインタ;
・次の実行ポインタにおける子スレッドバイトコードシーケンスの実行状態を表す仮想メモリのコピー又はスナップショット。
他の実施形態では、前のブロックチェーントランザクションのロックスクリプトの複数の実行スレッドを結合する支払いブロックチェーントランザクションのロックスクリプトは、追加の又は他のデータ要素を含むことができる。さらに、支払いブロックチェーントランザクションのトランザクションインプットのアンロックスクリプト(「scriptSig」)(これは、結合構成により結合されるべき前のブロックチェーントランザクションのロックスクリプトの複数の実行スレッドを指す)は、それぞれ、以下:i)支払いブロックチェーントランザクション自体の部分のコピー、及びii)それぞれのトランザクションインプットを指す前のブロックチェーントランザクションのコピー、を含む。支払いブロックチェーントランザクションを検証するとき、アンロックスクリプトは、最初に仮想メモリ(スタック)に置かれるので、対応するロックスクリプトの特定のインタープリタ仮想バイトコードによる後の使用のためにアクセス可能であることに留意する。これら2つのアイテムを、支払いブロックチェーントランザクションのトランザクションインプットのアンロックスクリプト(「scriptSig」)の部分として含むことにより、支払いブロックチェーントランザクション及び結合構成の検証を行うことができる。
以下の表Dは、「複製されたスレッドによる結合」シナリオに従う、結合構成の制御下で、複数の前のブロックチェーントランザクションのロックスクリプトの実行スレッドを結合するための仮想バイトコード(VOP_JOIN_DUP)を記述する擬似コードを提供する。仮想バイトコードVOP_JOIN_DUPは、ロックスクリプトのバイトコードシーケンスに含まれ、ロックスクリプトに含まれるインタープリタコードを用いてインタープリットされ、表Dの演算を実行できる。仮想バイトコードVOP_JOIN_DUPは、本願明細書に記載のように支払いブロックチェーントランザクションを生成し及び/又は検証するとき、インタープリットできる。演算は、トランザクションインプットのアンロックスクリプトに格納された支払いブロックチェーントランザクションのロックスクリプトを抽出する。演算は、支払いブロックチェーントランザクションのトランザクションインプットのセットを通じてループする。各トランザクションインプットについて、演算は、対応するトランザクションインプットのアンロックスクリプトに格納されトランザクションインプットであるとして指された前のブロックチェーントランザクションのロックスクリプトを抽出し、支払いブロックチェーントランザクションのロックスクリプトのバイトコードシーケンス及びインタープリタコード(又はこのようなデータの結合のハッシュ値)が、対応するトランザクションインプットのアンロックスクリプトに格納された前のブロックチェーントランザクションのロックスクリプトに含まれるものと一致することをチェックする。このチェックが、トランザクションインプットのうちの任意の1つについて失敗した場合、失敗状態が上げられ、ブロックチェーントランザクションは無効であると考えられる。このチェックが合格した場合、結合構成の演算は継続できる。ここで、支払いブロックチェーントランザクションのロックスクリプトの次の実行ポインタが、何らかの静的に定義された又は動的に推定された特定の位置に対してチェックされる。次の実行ポインタが正しい場合、前のブロックチェーントランザクションのロックスクリプトの実行状態が抽出され、仮想メモリインスタンスが一緒に融合され、結果として生じた実行のスレッドの単一の仮想メモリ状態を形成する。次の実行ポインタが正しくない場合、失敗状態が上げられ、支払いブロックチェーントランザクションは無効であると考えられる。VOP_JOIN_DUP仮想バイトコードの検証が成功した場合、支払いブロックチェーントランザクションの子スレッドロックスクリプトの1つ以上のバイトコードの実行は、継続し、支払いブロックチェーントランザクションの検証のために、次の実行ポインタにおける子スレッドバイトコードシーケンスの実行状態を表す仮想メモリのスナップショットと一致することを保証するためにチェックされる。
表D
「異なるスレッドをサポートする結合」シナリオでは、新しいスレッドCロックスクリプトのバイトコードシーケンス及び/又はインタープリタコードは、前のブロックチェーントランザクションT3のスレッドAロックスクリプトのバイトコードシーケンス及び/又はインタープリタコード、又は前のブロックチェーントランザクションT4のスレッドBロックスクリプトのバイトコードシーケンスと同じ又は異なり(又は区別され)得る。このシナリオでは、新しいスレッドCロックスクリプトのバイトコードシーケンス及びインタープリタコードは、ロックスクリプトの中で使用される有効なバイトコードシーケンス及びインタープリタコードの集合からコピーできる。
この「異なるスレッドをサポートする結合」シナリオでは、支払いブロックチェーントランザクションTX6’のスレッドCロックスクリプトに含まれる連続状態データは、支払いブロックチェーントランザクションTX6’を生成するときに、何からの静的に定義された又は動的に推定された特定の位置へとスレッドAロックスクリプト及びスレッドBロックスクリプトを実行し、次に結果として生じた実行状態を結合し又は融合して、スレッドCロックスクリプトのバイトコードシーケンスの初期実行状態を導出し、次にスレッドCロックスクリプトのバイトコードシーケンスを実行することにより、決定できる。このような実行は、スレッドCロックスクリプトの次の実行ポインタに対応するポイント(又は演算)において終了する。このような実行は、支払いブロックチェーントランザクションTX6’のVin[x]のアンロックスクリプト(「scriptSig」)及び/又はVin[y]のアンロックスクリプト(「scriptSig」)の実行により決定されたインプットも使用できる。
「異なるスレッドをサポートする結合」シナリオでは、支払いブロックチェーントランザクションTX6’を生成し及び検証するときに実行される支払いブロックチェーントランザクションTX6’のスレッドCロックスクリプトのバイトコード演算の数は、支払いブロックチェーントランザクションTX6’のスレッドCロックスクリプトの次の実行ポインタにより記述できる。このように、支払いブロックチェーントランザクションTX6’を生成し及び検証するときに実行される支払いブロックチェーントランザクションTX6’のスレッドCロックスクリプトのバイトコード演算の数は、支払いトランザクションに対する制約をパラメータ化する際に制約され又は使用され得る。このパラメータ化された制約は、トランザクション間で実行されるバイトコード演算の数を制限するために(例えば、スマートコントラクトのバイトコードシーケンスの非効率な演算を回避するために)、スマートコントラクトのバイトコードシーケンスを支払いトランザクションのシーケンスに渡り実行される異なるセグメントに論理的に区分するために、パラメータ化された制約に基づき新しいトランザクションを生成するエンティティのための報酬を計算するために、又は他の可能な使用のために、使用できる。
「異なるスレッドをサポートする結合」シナリオでは、有効なロックスクリプトに耐お酢売る有効なハッシュ値の集合がアクセスされ維持できる。支払いブロックチェーントランザクションTX6’の生成及び/又は検証は、支払いブロックチェーントランザクションTX6’のトランザクションアウトプットVout[x]を処理して、トランザクションアウトプットVout[x]のスレッドCロックスクリプトが、集合の有効なハッシュ値のうちの1つと一致するハッシュ値を生成することをチェックすることを含み得る。このチェックが失敗した場合、失敗状態が上げられ、ブロックチェーントランザクションTX6’は無効であると考えられる。このチェックが合格した場合、結合構成の演算は継続できる。ここで、結合されるべき新しい実行のスレッドの次の実行ポインタが、何らかの静的に定義された又は動的に推定された特定の位置に対してチェックされる。次の実行ポインタが正しい場合、前のブロックチェーントランザクションのロックスクリプトの実行のスレッドの実行状態は、抽出され、一緒に融合される。次の実行ポインタが正しくない場合、失敗状態が上げられ、ブロックチェーントランザクションは無効であると考えられる。
これらのシナリオの全てにおいて、結合構成は、スレッドAロックスクリプト及び/又はスレッドBロックスクリプトが実行を終了したことを保証でき、スレッドAロックスクリプト及びスレッドBロックスクリプトの結果として生じる実行状態を結合し又は融合することを含み得る。これは、スマートコントラクトが複数の実行のスレッドにより生成された結果データを処理する必要のある場合に有用であり得る。
他の実施形態では、結合構成を含む支払いブロックチェーントランザクションは、支払いブロックチェーントランザクションのロックスクリプトの子実行スレッドを形成するために一緒に融合された2つより多くの親実行スレッドを表す2つより多くのトランザクションインプットを含むことができることに留意する。「異なるスレッドによる結合」シナリオでは、前のブロックチェーントランザクションのロックスクリプトの複数の実行スレッドを結合する支払いブロックチェーントランザクションのロックスクリプトは、以下の多数の要素を含むことができる:
・実行されるべき子スレッドバイトコードシーケンス;
・インタープリットし、子スレッドバイトコードシーケンスを実行するインタープリタコード;
・子スレッドバイトコードシーケンスの中の実行位置を表す次の実行ポインタ;
・次の実行ポインタにおける子スレッドバイトコードシーケンスの実行状態を表す仮想メモリのコピー又はスナップショット。
他の実施形態では、前のブロックチェーントランザクションのロックスクリプトの複数の実行スレッドを結合する支払いブロックチェーントランザクションのロックスクリプトは、追加の又は他のデータ要素を含むことができる。さらに、支払いブロックチェーントランザクションのトランザクションインプットのアンロックスクリプト(「scriptSig」)(これは、結合構成により結合されるべき前のブロックチェーントランザクションのロックスクリプトの複数の実行スレッドを指す)は、それぞれ、以下:i)支払いブロックチェーントランザクション自体の部分のコピー、及びii)それぞれのトランザクションインプットを指す前のブロックチェーントランザクションのコピー、を含む。支払いブロックチェーントランザクションを検証するとき、アンロックスクリプトは、最初に仮想メモリ(スタック)に置かれるので、対応するロックスクリプトの特定のインタープリタ仮想バイトコードによる後の使用のためにアクセス可能であることに留意する。これら2つのアイテムを、支払いブロックチェーントランザクションのトランザクションインプットのアンロックスクリプト(「scriptSig」)の部分として含むことにより、支払いブロックチェーントランザクション及び結合構成の検証を行うことができる。
以下の表Eは、「異なるスレッドをサポートする結合」シナリオに従う、結合構成の制御下で、複数の前のブロックチェーントランザクションのロックスクリプトの実行スレッドを結合するための仮想バイトコード(VOP_JOIN_DISTINCT)を記述する擬似コードを提供する。仮想バイトコードVOP_JOIN_DISTINCTは、ロックスクリプトのバイトコードシーケンスに含まれ、ロックスクリプトに含まれるインタープリタコードを用いてインタープリットされ、表Eの演算を実行できる。仮想バイトコードVOP_JOIN_DISTINCTは、本願明細書に記載のように支払いブロックチェーントランザクションを生成し及び/又は検証するとき、インタープリットできる。演算は、(例えば、ロックスクリプトのインタープリタコードの部分として)静的に格納でき、又は(例えば、ロックスクリプトの部分としてインタープリットされているバイトコードシーケンスに)動的に格納できるパラメータにより表すことのできる支払いブロックチェーントランザクションの(トランザクションインプットの数に対応する)親スレッドロックスクリプトの数を通じてループする。演算は、各々の親スレッドロックスクリプトのバイトコードシーケンス及びインタープリタコードの結合に対応するハッシュ値を読み出す。実施形態では、これらのハッシュ値は、(例えば、ロックスクリプトのインタープリタコードの部分として)静的に格納でき、又は(例えば、ロックスクリプトの部分としてインタープリットされているバイトコードシーケンスに)動的に格納できる。例えばVOP_JOIN_DISTINCT仮想バイトコードと関連して、仮想バイトコードに続く何バイトかのデータは、親スレッドロックスクリプトの数(及びしたがって、バイトコードシーケンス/インタープリタコードハッシュ値及び対応するトランザクションインプットの数)を、親スレッドロックスクリプトの数の数のバイトコードシーケンス/インタープリタコードハッシュ値の結合を決定するために使用される文字区切り文字と一緒に、指定できる。演算は、有効なバイトコードシーケンス及びインタープリタコードの結合に対応するハッシュ値の集合を初期化する。ハッシュ値のこの集合は、(例えば、ロックスクリプトのインタープリタコードの部分として)静的に格納でき、又は(例えば、ロックスクリプトの部分としてインタープリットされているバイトコードシーケンスに)動的に格納できるデータにより表すことができる。次に、前のブロックチェーントランザクションの親スレッドロックスクリプトのバイトコードシーケンス及びインタープリタコードの結合のハッシュ値が計算され、集合に追加される。演算は、次に、支払いブロックチェーントランザクションのトランザクションインプットのセットを通じてループする。各トランザクションインプットについて、演算は、対応するトランザクションインプットのアンロックスクリプトに格納された支払いブロックチェーントランザクションのロックスクリプトを抽出し、支払いブロックチェーントランザクションの対応するトランザクションインプットのアンロックスクリプトに格納された前のブロックチェーントランザクションのロックスクリプトを抽出し、支払いブロックチェーントランザクションのロックスクリプトのバイトコードシーケンス及びインタープリタコードの結合のハッシュ値が、ハッシュ値の集合の中に存在すること、及び前のブロックチェーントランザクションのロックスクリプトのバイトコードシーケンス及びインタープリタコードの結合のハッシュ値(これはトランザクションインプットに対応する)がハッシュ値の集合の中に存在することをチェックする。このチェックが、トランザクションインプットのうちの任意の1つについて失敗した場合、失敗状態が上げられ、ブロックチェーントランザクションは無効であると考えられる。このチェックが合格した場合、結合構成の演算は継続できる。ここで、支払いブロックチェーントランザクションのロックスクリプトの次の実行ポインタが、何らかの静的に定義された又は動的に推定された特定の位置に対してチェックされる。次の実行ポインタが正しい場合、前のブロックチェーントランザクションの親スレッドロックスクリプトの実行状態が抽出され、仮想メモリインスタンスが一緒に融合され、実行の子スレッドの単一の仮想メモリ状態を形成する。次の実行ポインタが正しくない場合、失敗状態が上げられ、支払いブロックチェーントランザクションは無効であると考えられる。VOP_JOIN_DISTINCT仮想バイトコードの検証が成功した場合、支払いブロックチェーントランザクションの子スレッドロックスクリプトの1つ以上のバイトコードの実行は、継続し、支払いブロックチェーントランザクションの検証のために、次の実行ポインタにおける子スレッドバイトコードシーケンスの実行状態を表す仮想メモリのスナップショットと一致することを保証するためにチェックされる。
表E
「複製されたスレッドによる結合」シナリオの例示的な場合には、私たちは、1つ以上の前のブロックチェーントランザクションが同じバイトコードからのスレッドの集合の実行を表すロックスクリプトを有すると仮定できる。両方のスレッドは、次の状態へと続くために、それらが融合される必要のある状態にある。新しい支払いトランザクションが生成される。この例は、図7に示される。新しい支払いトランザクションは、ロックスクリプトを含む単一のトランザクションアウトプットを含む。該ロックスクリプトは以下を含む:
・実行の他の2つの親スレッドと同じバイトコードシーケンス、これは、ブロックチェーン上で実行されているプログラム全体のカプセル化である;
・インタープリットし、バイトコードシーケンスを実行するために使用されるインタープリタコード;
・バイトコードシーケンスの中の実行位置を表す次の実行ポインタ;
・次の実行ポインタにおけるスレッドバイトコードシーケンスの実行状態を表す仮想メモリのコピー又はスナップショット。
この支払いブロックチェーントランザクションは、前のブロックチェーントランザクションのロックスクリプトにより表される2つの実行のスレッドを融合し、したがって、1つが融合される各々の実行のスレッドを指す複数のトランザクションインプットを含む。
実施形態では、本願明細書に記載されたブロックチェーントランザクションのスレッド固有ロックスクリプトのバイトコードシーケンスは、それぞれのブロックチェーントランザクションに含まれるインタープリタコードの実行によるインタープリットのために設計されたコンピュータ命令である。インタープリタコードの実行は、スレッド固有ロックスクリプトのバイトコードシーケンスのバイトコードを、検証ノードの実行時システム(例えばブロックチェーンクライアント)のソフトウェアインタープリタによりサポートされるオペコード又はコマンドに変換する。この検証ノードは、このようなオペコード又はコマンドを、図11に示すような検証ノードのCPUハードウェアで実行される機械コードに変換する。インタープリタコードの実行は、検証ノードの実行時システムのソフトウェアインタープリタによりサポートされる低レベルバイトコード演算を拡張し又は補強する高レベルバイトコード又はコマンドの変換をサポートできる。例えば、インタープリタコードは、分岐構成(例えば、上述のようなVOP_FORK_DUP又はVOP_FORK_DISTINCT仮想バイトコードの変形)、バリア構成(例えば、上述のようなVOP_BARRIER仮想バイトコード)、及び/又は結合構成(例えば、上述のVOP_JOIN_DUP又はVOP_JOIN_DISTINCT仮想バイトコード)を表す仮想バイトコードの、検証ノードの実行時システムのソフトウェアインタープリタによりサポートされるバイトコード演算の結合への変換をサポートできる。この場合、インタープリタコードは、このような仮想バイトコード演算の、Bitcoinスクリプト言語に属し且つ検証ノードの実行時システムのソフトウェアインタープリタによりサポートされるオペコード又はコマンドへの変換をサポートできる。別の例では、インタープリタコードは、検証ノードの実行時システムのソフトウェアインタープリタによるインタープリットのための高レベルプログラミング言語で記述されたスクリプトバイトコード演算の変換をサポートできる。この場合、インタープリタコードは、高レベルプログラミング言語で記述されたスクリプト仮想バイトコード演算の、Bitcoinスクリプト言語に属し且つ検証ノードの実行時システムのソフトウェアインタープリタによりサポートされるオペコード又はコマンドへの変換をサポートできる。ソフトウェアインタープリタの実行は、オペコード又はコマンドを、一度に1バイトコードを順次、機械コードに変換し(例えば、単純なインタープリット)、又は場合によっては、バイトコードシーケンスセグメント(又はその部分)が実行時に必要に応じて機械コードにコンパイルされて、次に結果として生じた機械コードが実行されるジャストインタイムコンパイル方法を利用できる。結果として生じる機械コードは、場合によっては、キャッシュされ、再コンパイルされる必要を伴わず後に再利用できる。
本願明細書に記載のブロックチェーントランザクションのロックスクリプトは、時には、実行中に更新される状態を含むことができることに留意する。スマートコントラクトの状況では、この状態は、2つの種類に分解できる。つまり、スマートコントラクトのスレッド固有ロックスクリプトに渡り使用される「グローバル共有状態」、又はスマートコントラクトの1つのスレッド固有ロックスクリプトにより内部で使用される「プライベート状態」である。実行のスレッドの分岐及び結合をサポートするために、「グローバル共有状態」及び「プライベート状態」の両方おサポートするために適切な方針が使用できる。これらの方針は、以下のいずれかであり得る:
・静的:状態に対して取られるべき適切な動作は、単一の静的方式でインタープリタにより扱われる。これは、スマートコントラクトのブロックチェーントランザクションのスレッド固有ロックスクリプトの実行中に各分岐又は結合について同じ方法で適用される。
・動的:適切な動作は、ケースバイケースに基づき行われる。状態が分岐において新しいスレッドとどのように共有されるか、及びスレッドの結合の間に使用されるかは、インタープリタにより実行されているバイトコードシーケンスの中で明示的に定義される。
したがって、本発明の実施形態は、コンピュータにより実施される方法であって、支払いブロックチェーントランザクションを生成し及び/又は検証するステップであって、支払いブロックチェーントランザクションは、i)各ロックスクリプトが実行スレッドのインスタンスを表す複数のロックスクリプトであって、(該実行スレッドは、前のブロックチェーントランザクションのロックスクリプトにより表される実行スレッドから分岐した実行スレッド、及び/又はスレッド間通信及び制御のために管理及び/又は制御される少なくとも1つの前のブロックチェーントランザクションの実行スレッドであり得る)複数のロックスクリプト、又はii)少なくとも1つの前のブロックチェーントランザクションにより表される複数の実行スレッドインスタンスから結合された実行スレッドのインスタンスを表すロックスクリプト、を含む、ステップと、
ブロックチェーンに記憶するために、ブロックチェーンネットワーク上に支払いブロックチェーントランザクションを通信するステップと、を含む方法を提供してよい。
支払いブロックチェーントランザクションは、ブロックチェーンネットワークのノードにより生成でき、及び/又は、支払いブロックチェーントランザクションは、実行スレッドを表す前のブロックチェーントランザクションのロックスクリプトを指すことができる。追加又は代替として、支払いブロックチェーントランザクションは、複数のロックスクリプトを含む。各ロックスクリプトは、前のブロックチェーントランザクションのロックスクリプトにより表される実行スレッドから分岐した実行スレッドのインスタンスを表す。追加又は代替として、ノードは、支払いブロックチェーントランザクションを、ブロックチェーンの中で検証し及び記憶するために、ブロックチェーンネットワークの他のノードへ送信する。
前のブロックチェーントランザクションのロックスクリプトにより表される実行スレッドは、バイトコードシーケンスを含む。支払いブロックチェーントランザクションの複数のロックスクリプトにより表される少なくとも1つの実行スレッドインスタンスは、前のブロックチェーントランザクションのロックスクリプトのバイトコードシーケンスを複製することにより、生成される。
代替として、前のブロックチェーントランザクションのロックスクリプトにより表される実行スレッドは、バイトコードシーケンス及びインタープリタコードを含む。支払いブロックチェーントランザクションの複数のロックスクリプトにより表される少なくとも1つの実行スレッドインスタンスは、前のブロックチェーントランザクションのロックスクリプトのバイトコードシーケンス及びインタープリタコードを複製することにより、生成される。代替として、ノードは、有効なバイトコードシーケンスの集合を格納し又はアクセスする。支払いブロックチェーントランザクションの複数のロックスクリプトにより表される少なくとも1つの実行スレッドインスタンスは、該集合の有効なバイトコードシーケンスを複製することにより、生成される。また別の代替として、ノードは、有効なバイトコードシーケンス及び有効なインタープリタコードの集合を格納し又はアクセスする。支払いブロックチェーントランザクションの複数のロックスクリプトにより表される少なくとも1つの実行スレッドインスタンスは、該集合の有効なバイトコードシーケンス及び有効なインタープリタコードを複製することにより、生成される。
追加又は代替として、支払いブロックチェーントランザクションの生成は、実行スレッドインスタンスを表す支払いブロックチェーントランザクションの複数のロックスクリプトの実行状態情報(例えば、次の実行ポインタ)を生成することと、該実行状態情報(例えば、次の実行ポインタ)を支払いブロックチェーントランザクションの複数ロックスクリプトに含めることと、を含む。
支払いブロックチェーントランザクションは、ブロックチェーンネットワークのノードにより受信できる。追加又は代替として、支払いブロックチェーントランザクションは、実行スレッドを表す前のブロックチェーントランザクションのロックスクリプトを指す。追加又は代替として、支払いブロックチェーントランザクションは、複数のロックスクリプトを含む。各ロックスクリプトは、前のブロックチェーントランザクションのロックスクリプトにより表される実行スレッドから分岐した実行スレッドのインスタンスを表す。追加又は代替として、ノードは、支払いブロックチェーントランザクションのロックスクリプトを1つ以上の条件に対して検証することにより、支払いブロックチェーントランザクションを検証する。
幾つかの実施形態では、検証は、支払いブロックチェーントランザクションの複数のロックスクリプトのうちの少なくとも1つを、前のブロックチェーントランザクションのロックスクリプトと照合することを含む。追加又は代替として、検証は、支払いブロックチェーントランザクションの複数のロックスクリプトにより表す実行スレッドインスタンスの実行状態情報(例えば、次の実行ポインタ)をチェックすることを含む。追加又は代替として、前のブロックチェーントランザクションのロックスクリプトにより表される実行スレッドは、バイトコードシーケンス及び場合によってはインタープリタコードを含む。支払いブロックチェーントランザクションの複数のロックスクリプトは、それぞれ、支払いブロックチェーントランザクションの検証が成功するために、同じバイトコードシーケンス及び場合によっては同じインタープリタコードを含むことが要求され得る。追加又は代替として、検証することは、支払いブロックチェーントランザクションの複数のロックスクリプトのうちの各々のバイトコードシーケンス及び場合によってはインタープリタコードを、前のブロックチェーントランザクションのロックスクリプトのバイトコードシーケンス及び場合によってはインタープリタコードに対して照合することを含む。それにより、支払いブロックチェーントランザクションの検証は、このような照合の結果に基づき決定される。前のブロックチェーントランザクションのロックスクリプトにより表される実行スレッドは、バイトコードシーケンス及び場合によってはインタープリタコードを含む。支払いブロックチェーントランザクションの複数のロックスクリプトは、i)前のブロックチェーントランザクションのロックスクリプトの同じバイトコードシーケンス及び場合によっては同じインタープリタコード、又はii)支払いブロックチェーントランザクションの検証が成功するために有効なロックスクリプトの集合に属する異なるバイトコードシーケンス及び場合によってはインタープリタコードであり得る。
追加又は代替として、検証することは、前のブロックチェーントランザクションのロックスクリプトに対応するハッシュデータ値を生成することと、ハッシュデータ値を、有効なロックスクリプトの集合に対応するハッシュデータ値の集合に追加することと、支払いトランザクションの各ロックスクリプトについて生成されたハッシュデータ値を、ハッシュデータ値の集合と比較することと、を含む。これにより、支払いブロックチェーントランザクションの検証は、このようなハッシュデータ値の比較の結果に基づき決定される。
支払いブロックチェーントランザクションは、ブロックチェーンネットワークのノードにより生成でき、及び/又は、支払いブロックチェーントランザクションは1つ以上の前のブロックチェーントランザクションの複数のロックスクリプトを指し、ここで複数のロックスクリプトの各々は実行スレッドのインスタンスを表し、及び/又は、支払いブロックチェーントランザクションは、支払いブロックチェーントランザクションにより指された実行スレッドインスタンスから結合された実行スレッドを表すロックスクリプトを含み、及び/又は、支払いブロックチェーントランザクションは、ブロックチェーンの中で検証し及び記憶するために、ノードにより、ブロックチェーンネットワークの他のノードへ送信される。
支払いブロックチェーントランザクションにより指された実行スレッドインスタンスから結合された実行スレッドを表すロックスクリプトは、1つ以上の前のブロックチェーントランザクションの複数のロックスクリプトのバイトコードシーケンスを複製することにより生成できる。或いは、支払いブロックチェーントランザクションにより指された実行スレッドインスタンスから結合された実行スレッドを表すロックスクリプトは、1つ以上の前のブロックチェーントランザクションの複数のロックスクリプトのバイトコードシーケンス及びインタープリタコードを複製することにより生成される。或いは、ノードは有効なバイトコードシーケンスの集合を格納し又はアクセスし、支払いブロックチェーントランザクションにより指された実行スレッドインスタンスから結合された実行スレッドを表すロックスクリプトは、集合の有効なバイトコードシーケンスを複製することにより生成される。或いは、ノードは有効なバイトコードシーケンス及び有効なインタープリタコードの集合を格納し又はアクセスし、支払いブロックチェーントランザクションにより指された実行スレッドインスタンスから結合された実行スレッドを表すロックスクリプトは、集合の有効なバイトコードシーケンス及び有効なインタープリタコードを複製することにより生成される。
追加又は代替として、支払いブロックチェーントランザクションの生成は、支払いブロックチェーントランザクションにより指される実行スレッドインスタンスから結合された実行スレッドの実行状態情報(例えば、次の実行ポインタ)を生成することと、該実行状態情報(例えば、次の実行ポインタ)を支払いブロックチェーントランザクションのロックスクリプトに含めることと、を含む。
支払いブロックチェーントランザクションは、ブロックチェーンネットワークのノードにより受信でき、及び/又は、支払いブロックチェーントランザクションは1つ以上の前のブロックチェーントランザクションの複数のロックスクリプトを指し、ここで複数のロックスクリプトの各々は実行スレッドのインスタンスを表し、及び/又は、支払いブロックチェーントランザクションは、支払いブロックチェーントランザクションにより指された実行スレッドインスタンスから結合された実行スレッドを表すロックスクリプトを含み、及び/又は、ノードは、支払いブロックチェーントランザクションのロックスクリプトを1つ以上の条件に対して検証することにより、支払いブロックチェーントランザクションを検証する。
1つ以上の実施形態では、検証することは、支払いブロックチェーントランザクションのロックスクリプトを1つ以上の前のブロックチェーントランザクションの複数のロックスクリプトと照合することを含み、及び/又は、検証することは、1つ以上の前のブロックチェーントランザクションの複数のロックスクリプトの実行状態情報(例えば次の実行ポインタ)をチェックし、次にこのような実行状態情報を融合し又は結合することを含み、及び/又は、少なくとも1つの前のブロックチェーントランザクションの複数のロックスクリプトは、共通のバイトコードシーケンス及び場合によってはインタープリタコードを含み、支払いブロックチェーントランザクションのロックスクリプトは、支払いブロックチェーントランザクションの検証が成功するために、該共通のバイトコードシーケンス及び場合によっては同じインタープリタコードを含むことが要求され、及び/又は、検証することは、支払いブロックチェーントランザクションのロックスクリプトのバイトコードシーケンス及び場合によってはインタープリタコードを、前のブロックチェーントランザクションの複数のロックスクリプトのうちの各々のバイトコードシーケンス及び場合によってはインタープリタコードと照合することを含み、それにより、支払いブロックチェーンの検証は、このような照合の結果に基づき決定され、及び/又は、支払いブロックチェーントランザクションのロックスクリプトは、1つ以上の前のブロックチェーントランザクションの同じバイトコードシーケンス及び場合によっては同じインタープリタコードであり得る、又は有効なロックスクリプトの集合に対応する異なるバイトコードシーケンス及び場合によってはインタープリタコードであり得る、及び/又は、検証することは、前のブロックチェーントランザクションのロックスクリプトに対応するハッシュデータ値を生成することと、該ハッシュデータ値を、有効なロックスクリプトの集合に対応するハッシュデータ値の集合に追加することとであって、ハッシュデータ値を生成することは、支払いブロックチェーントランザクションの各ロックスクリプトについて生成される、ことと、ハッシュデータ値の集合と比較することと、を含むことができ、それにより、支払いブロックチェーントランザクションの検証は、このようなハッシュデータ値の比較の結果に基づき決定される。
支払いブロックチェーントランザクションは、ブロックチェーンネットワークのノードにより生成でき、及び/又は、支払いブロックチェーントランザクションは1つ以上の前のブロックチェーントランザクションの複数のロックスクリプトを指し、ここで複数のロックスクリプトの各々は実行スレッドのインスタンスを表し、及び/又は、支払いブロックチェーントランザクションは、複数のロックスクリプトであって、該ロックスクリプトの実行が、支払いブロックチェーントランザクションにより指された実行スレッドインスタンスの間のスレッド間通信又は制御を含む、複数のロックスクリプトを含み、及び/又は、支払いブロックチェーントランザクションは、ブロックチェーンの中で検証し及び記憶するために、ノードにより、ブロックチェーンネットワークの他のノードへ送信される。
支払いブロックチェーントランザクションの複数のロックスクリプトは、1つ以上の前のブロックチェーントランザクションの複数のロックスクリプトのバイトコードシーケンスを複製することにより生成できる。或いは、支払いブロックチェーントランザクションの複数のロックスクリプトは、1つ以上の前のブロックチェーントランザクションの複数のロックスクリプトのバイトコードシーケンス及びインタープリタコードを複製することにより生成できる。及び/又は、支払いブロックチェーントランザクションの生成は、支払いブロックチェーントランザクションのロックスクリプトの実行スレッドインスタンスの実行状態情報(例えば、次の実行ポインタ)を生成することと、該実行状態情報(例えば、次の実行ポインタ)を支払いブロックチェーントランザクションの複数のロックスクリプトに含めることと、を含む。
追加又は代替として、本発明は、コンピュータにより実施される方法を含み、該方法は、支払いブロックチェーントランザクションは、ブロックチェーンネットワークのノードにより受信されることと、及び/又は、支払いブロックチェーントランザクションは1つ以上の前のブロックチェーントランザクションの複数のロックスクリプトを指し、ここで複数のロックスクリプトの各々は実行スレッドのインスタンスを表すことと、及び/又は、支払いブロックチェーントランザクションは、対応する複数のロックスクリプトを含み、該ロックスクリプトの実行が支払いブロックチェーントランザクションにより指された実行スレッドインスタンスの間のスレッド間通信又は制御を含むことと、及び、ノードは、支払いブロックチェーントランザクションの複数のロックスクリプトを1つ以上の条件に対して検証することにより、支払いブロックチェーントランザクションを検証することと、を含む。
検証することは、支払いブロックチェーントランザクションの複数のロックスクリプトを1つ以上の前のブロックチェーントランザクションの複数のロックスクリプトと照合することを含む。及び/又は、支払いブロックチェーントランザクションにより指される実行スレッドインスタンスの間のスレッド間通信又は制御を提供するために、1つ以上の前のブロックチェーントランザクションの複数のロックスクリプトの実行状態情報(例えば、次の実行ポインタ)をチェックすることを含む。及び/又は、少なくとも1つの前のブロックチェーントランザクションの複数のロックスクリプトは、バイトコードシーケンス及び場合によってはインタープリタコードを含み、支払いブロックチェーントランザクションの複数のロックスクリプトは、支払いブロックチェーントランザクションの検証が成功するために、1つ以上の前のブロックチェーントランザクションの複数のロックスクリプトのバイトコードシーケンス及びインタープリタコードを含むことが要求される。及び/又は、検証することは、支払いブロックチェーントランザクションの各ロックスクリプトのバイトコードシーケンス及び場合によってはインタープリタコードを、1つ以上の前のブロックチェーントランザクションの対応するロックスクリプトのバイトコードシーケンス及び場合によってはインタープリタコードと照合することを含み、それにより、支払いブロックチェーンの検証が、このような照合の結果に基づき決定される。
ここで、図12を参照する。図12は、本開示の少なくとも一実施形態を実施するために使用されてよいコンピューティング装置2600の簡略ブロック図を示す。種々の実施形態で、コンピューティング装置2600は、上述の図示のシステムのうちのいずれかを実装するために使用されてよい。例えば、コンピューティング装置2600は、データサーバ、ウェブサーバ、ポータブルコンピューティング装置、パーソナルコンピュータ、又は任意の電子コンピューティング装置として使用するために構成されてよい。図12に示すように、コンピューティング装置2600は、バスサブシステム2604を介して多数の周辺サブシステムと通信するよう構成され及び動作可能に結合される1つ以上のプロセッサ2602を含み得る。プロセッサ2602は、本願明細書に記載の支払いトランザクションを検証することの部分として、アンロックスクリプト及びロックスクリプトの処理のために利用されてよい。これらの周辺サブシステムは、メモリサブシステム2608及びファイル/ディスク記憶サブシステム2610を含む記憶サブシステム2606、1つ以上のユーザインタフェース入力装置2612、1つ以上のユーザインタフェース出力装置2614、及びネットワークインタフェースサブシステム2616を含んでよい。このような記憶サブシステム2606は、本開示に記載されたトランザクションに関連する詳細事項のような情報の一時的又は長期記憶のために使用されてよい。
バスサブシステム2604は、コンピューティング装置2600の種々のコンポーネント及びサブシステムが意図した通りに互いに通信できるようにするメカニズムを提供してよい。バスサブシステム2604は、単一のバスとして概略的に示されるが、バスサブシステムの代替の実施形態は、複数のバスを利用してよい。ネットワークインタフェースサブシステム2616は、他のコンピューティング装置及びネットワークへのインタフェースを提供してよい。ネットワークインタフェースサブシステム2616は、幾つかの実施形態では、コンピューティング装置2600の他のシステムからデータを受信し及びそれへデータを送信するインタフェースとして機能してよい。例えば、ネットワークインタフェースサブシステム2616は、データ技術者が、装置を無線ネットワークに接続することを可能にする。その結果、データ技術者は、ユーザのデータセンタのような遠隔地にいがなら、データを送信及び受信できる。バスサブシステム2604は、詳細事項、検索語、等のようなデータを本開示の管理されたモデルへ通信するために利用されてよく、及び管理されたモデルの出力を1つ以上のプロセッサ2602に、及びネットワークインタフェースサブシステム2616を介してマーチャント及び/又は貸し方へ通信するために利用されてよい。
ユーザインタフェース入力装置2612は、キーボード、統合型マウス、トラックボール、タッチパッド、又はグラフィックタブレットのような指示装置、スキャナ、バーコードスキャナ、ディスプレイに組み込まれたタッチスクリーン、音声認識システム、マイクロフォンのようなオーディオ入力装置、及び他の種類の入力装置のような、1つ以上のユーザ入力装置を含んでよい。通常、用語「入力装置」の使用は、コンピューティング装置2600に情報を入力する全ての可能な種類の装置及びメカニズムを含むことを意図する。1つ以上のユーザインタフェース出力装置2614は、ディスプレイサブシステム、プリンタ、又は音声出力装置のような非視覚的ディスプレイ、等を含んでよい。ディスプレイサブシステムは、陰極線管(CRT)、液晶ディスプレイ(LCD)、発光ダイオード(LED)ディスプレイ、又はプロジェクションのような平面装置、又は他のディスプレイ装置を含んでよい。通常、用語「出力装置」の使用は、コンピューティング装置2600から情報を出力する全ての可能な種類の装置及びメカニズムを含むことを意図する。1つ以上のユーザインタフェース出力装置2614は、例えば、ユーザインタフェースを提示して、ここに記載したプロセス及び変形を実行するアプリケーションとのユーザ相互作用が適切であるとき、そのような相互作用を実現するために使用されてよい。
記憶サブシステム2606は、本開示の少なくとも1つの実施形態の機能を提供する基本プログラミング及びデータ構造を記憶するコンピュータ可読記憶媒体を提供してよい。アプリケーション(例えば、プログラム、コードモジュール、命令)は、1つ以上のプロセッサにより実行されると、本開示の1つ以上の実施形態の機能を提供し、記憶サブシステム2606に格納されてよい。これらのアプリケーションモジュール又は命令は、1つ以上のプロセッサ2602により実行されてよい。記憶サブシステム2606は、更に、本開示に従い使用されるデータを格納するレポジトリを提供する。記憶サブシステム2606は、メモリサブシステム2608及びファイル/ディスク記憶サブシステム2610を含んでよい。
メモリサブシステム2608は、プログラム実行中に命令及びデータを記憶するための主ランダムアクセスメモリ(RAM)2618及び固定命令が格納され得る読み出し専用メモリ(ROM)2620を含む多数のメモリを含んでよい。ファイル/ディスク記憶サブシステム2610は、プログラム及びデータファイルのための非一時的持続性(不揮発性)記憶を提供してよく、ハードディスクドライブ、関連する取り外し可能媒体と一緒のフロッピディスクドライブ、コンパクトディスク読み出し専用メモリ(CD−ROM)ドライブ、光ドライブ、取り外し可能媒体カートリッジ、及び他の同様の記憶媒体を含み得る。
コンピューティング装置2600は、少なくとも1つのローカルクロック2624を含んでよい。ローカルクロック2624は、特定の開始日から刻んだ時の数を表すカウンタであってよく、コンピューティング装置2600の内部に配置されてよい。ローカルクロック2624は、コンピューティング装置2600及びそれに含まれる全てのサブシステムのためのプロセッサ内のデータ転送を特定のクロックバルスで同期化するために使用され、コンピューティング装置2600とデータセンタ内の他のシステムとの間の動機動作を調整するために使用してよい。一実施形態では、ローカルクロック2624は、原子クロックである。別の実施形態では、ローカルクロックは、プログラム可能な内部タイマである。
コンピューティング装置2600は、ポータブルコンピュータ装置、タブレットコンピュータ、ワークステーション、又は後述する任意の他の装置を含む種々のタイプのものであってよい。さらに、コンピューティング装置2600は、1つ以上のポート(例えば、USB、ヘッドフォンジャック、光コネクタ、等)を通じてコンピューティング装置2600に接続可能な別の装置を含み得る。コンピューティング装置2600に接続され得る装置は、光ファイバコネクタを受けるよう構成される複数のポートを含んでよい。したがって、この装置は、光信号を、処理のために装置を接続するポートを通じてコンピューティング装置2600に送信される電気信号に変換するよう構成されてよい。コンピュータ及びネットワークの絶えず変化する特性により、図12に示したコンピューティング装置2600の説明は、装置の好適な実施形態を説明する目的の特定の例としてのみ意図される。図12に示したシステムより多くの又は少ないコンポーネントを有する多くの他の構成が可能である。
明細書及び図面は、したがって、限定的意味ではなく説明的であると考えられるべきである。しかしながら、これらへの種々の変更及び変化が、特許請求の範囲に記載された発明の範囲から逸脱することなく行われてよいことが明らかである。同様に、他の変形は、本開示の範囲内にある。したがって、開示の技術は種々の変更及び代替構成を受けるが、その特定の図示の実施形態が図示され、詳細に上述された。しかしながら、本発明を開示の1又は複数の特定の形式に限定する意図はなく、反対に、添付の特許請求の範囲に定められるように、本発明の範囲に包含される全ての変更、代替構成、均等物をカバーすることを意図する。
開示の実施形態を記載する文脈における用語「a」及び「an」、「the」及び同様の参照は(特に以下の特許請求の範囲の文脈では)、文脈上特に示され又は明確に否定されない限り、単数及び複数の両方をカバーすることを意図する。用語「有する」、「含む」(comprising、having、including、containing)等は、特に断りのない限り、制限のない用語(つまり、「含むがそれに限定されない」を意味する)と考えられるべきである。用語「接続される(connected)」は、未修飾であり物理的接続を参照するとき、仲介物がない場合でも、部分的または全体的に含まれる、付加される、又は一緒に結合されると考えられるべきである。本開示における値の範囲の記載は、特に断りのない限り、単に、その範囲に含まれる各々の個別の値を個々に参照することの簡略表記法として機能し、各別個の値は個々に記載されたように本明細書に組み込まれると考えられるべきである。用語「セット又は集合」(例えば、「アイテムのセット」)又は「サブセット又は部分集合」の使用は、特に断りのない限り又は文脈上否定されない限り、1つ以上の構成要素を含む空ではない集合であると考えられるべきである。さらに、特に断りのない限り又は文脈上否定されない限り、対応するセットの用語「サブセット」は、必ずしも、対応するセットの真部分集合を示さず、サブセット及び対応するセットは等しくてもよい。
結合的言語、例えば「A、B、及びCのうちの少なくとも1つ」又は「A、B又はCのうちの少なくとも1つ」は、特に断りのない限り又は文脈上特に明確に否定されない限り、通常、アイテム、用語、等が、A又はB又はCのいずれか、又はA及びB及びCのセットのうちの空でない任意のサブセットであり得ることを表すために使用されると文脈上理解される。例えば、3人のメンバを有するセットの説明のための例では、結合的フレーズ「A、B、及びCのうちの少なくとも1つ」又は「A、B又はCのうちの少なくとも1つ」は、以下のセット{A}、{B}、{C}、{A,B}、{A,C}、{B,C}、{A,B,C}のいずれかを表す。したがって、このような結合的言語は、通常、特定の実施形態が少なくとも1つのA、少なくとも1つのB、及び少なくとも1つのCがそれぞれ存在することを必要とすることを意味することを意図しない。
記載のプロセスの動作は、特に断りのない限り又は文脈上明確に否定されない限り、任意の適切な順序で実行できる。記載のプロセス(又は変形及び/又はそれらの結合)は、実行可能命令により構成された1つ以上のコンピュータシステムの制御下で実行されてよく、ハードウェア又はその組み合わせにより1つ以上のプロセッサ上で連携して実行するコード(例えば、実行可能命令、1つ以上のコンピュータプログラム又は1つ以上のアプリケーション)として実装されてよいコードは、コンピュータ可読記憶媒体に、例えば1つ以上のプロセッサにより実行可能な複数の命令を有するコンピュータプログラムの形式で格納されてよい。コンピュータ可読記憶媒体は非一時的であってよい。
任意の及び全ての例の使用、又は提供された例示的な言語(例えば「のような(such as)」)は、単に、本発明の実施形態をより良好に解明することを意図しており、特に断りのない限り本発明の範囲に限定を課すものではない。明細書中のいかなる言語も、任意の請求されない要素を本発明の実施に必須であることを示すと考えられるべきではない。
本発明を実施するために発明者に知られたベストモードを含む本開示の実施形態が記載された。種々のこれらの実施形態は、前述の説明を読むことにより、当業者に明らかになり得る。発明者は、当業者がこのような変形を適切に利用することを期待し、発明者は、本開示の実施形態が特に記載されたものと異なる方法で実施されることを意図する。したがって、本開示の範囲は、適用される法により許容されるように、添付の特許請求の範囲に記載された主題の全ての変更及び均等物を含む。さらに、それらの全ての可能な変形における上述の要素の任意の組み合わせは、特に断りのない限り又は文脈上特に明確に否定されない限り、本開示の範囲により包含される。
刊行物、特許出願、及び特許を含む全ての引用された文献は、参照により、各文献が個々に及び具体的に示されたように、及びその全体が記載されたように、ここに組み込まれる。
上述の実施形態は、本発明を限定するのではなく、説明すること、及び当業者は添付の特許請求の範囲により定められる本発明の範囲から逸脱することなく多くの代替的実施形態を考案できることに留意すべきである。特許請求の範囲において、括弧内の任意の参照符号は、請求項を限定することを意図しない。用語「有する」及び「含む」(comprising、comprises)等は、任意の請求項又は明細書全体に列挙されたもの以外の要素またはステップの存在を排除しない。本願明細書では、「有する」は「有する又は構成される」を意味し、「含む」は「含む又は構成される」を意味する。要素の単数の参照は、該要素の複数の参照を排除しない。逆も同様である。特に断りのない限り、又は文脈から明らかでない限り、アイテムのリストの中の用語「及び/又は」は、リストの任意のアイテムが存在することを排除し又は要求することなく、リストの中の少なくとも1つのアイテムの存在を示す。本開示の実施形態は、幾つかの別個の要素を含むハードウェアにより、及び適切にプログラムされたコンピュータにより、実装できる。幾つかの手段を列挙する装置クレームでは、これらの手段のうちの幾つかは、1つの同じハードウェアアイテムにより具現化されてよい。単に特定の手段が相互に異なる従属請求項に記載されるという事実は、これらの手段の組み合わせが有利に使用されないことを示さない。