(57)【要約】本発明は、コンセンサスベースブロックチェーンといった分散台帳技術に関する。本開示の方法およびシステムは、ロッキングスクリプトの中へシリアライズされたアンロッキングトランザクションのフィールド値セットを注入させるために提供される。本発明は、ブロックチェーンネットワーク、例えばビットコインブロックチェーンであり得る、を使用して実施される。ブロックチェーンネットワーク内のノードで、検証する第１トランザクションが受信される。第１トランザクションは、第１スクリプトを含んでおり、かつ、実行された結果として、ノードにフィールド値セットを獲得するようにさせる。第２トランザクションが獲得され、第２トランザクションは検証されてきている。第２トランザクションは、第２スクリプトを含んでおり、実行された結果として、ノードに、第１スクリプトの実行の結果として提供されるフィールド値セットに少なくとも部分的に基づいて、署名を作成するようにさせる。第１スクリプトおよび第２スクリプトを実行することによって、第１トランザクションが検証される。
2020521371.tif 000002
【特許請求の範囲】
【請求項１】
方法であって、
ブロックチェーンネットワーク内のノードで、検証する第１トランザクションを受信するステップであり、
前記第１トランザクションは、第１スクリプトを含んでおり、少なくとも、
前記第１トランザクションのフィールド値セットを含み、かつ、
実行された結果として、前記ノードに、前記フィールド値セットを獲得するようにさせる、
ステップと、
第２トランザクションを獲得するステップであり、
前記第２トランザクションは、検証されてきており、かつ、
第２スクリプトを含んでおり、実行された結果として、前記ノードに、前記第１スクリプトの実行の結果として提供される前記フィールド値セットに少なくとも部分的に基づいて、少なくとも、署名を作成するようにさせる、
ステップと、
前記第１スクリプトおよび前記第２スクリプトを実行することによって、前記第１トランザクションを検証するステップと、
を含む、方法。
【請求項２】
前記第１トランザクションを検証するステップは、前記第１トランザクションを作成したエンティティが秘密情報に対するアクセスを有することを検証することなく、成功裡に実行される
請求項１に記載の方法。
【請求項３】
前記第１スクリプトは、さらに、非対称鍵ペアの秘密暗号鍵を含み、
前記第２スクリプトは、さらに、ノードに、前記秘密暗号鍵およびマスク番号に少なくとも部分的に基づいて、前記署名を作成するようにさせ、かつ、
前記第１トランザクションを検証するステップは、さらに、前記署名が前記非対称鍵ペアの公開暗号鍵と関連付けられていることを検証するステップを含む、
請求項１または２に記載の方法。
【請求項４】
前記第１スクリプトは、さらに、署名ハッシュタイプを指定し、かつ、
前記フィールド値セットは、少なくとも部分的に、前記署名ハッシュタイプに基づいている、
請求項１乃至３いずれか一項に記載の方法。
【請求項５】
前記署名ハッシュタイプは、前記第１トランザクションの前記フィールド値セットのどのフィールド値が前記署名に含まれるべきかを示す値である、
請求項４に記載の方法。
【請求項６】
前記第２スクリプトは、前記第１トランザクションを検証するための条件セットを課すロッキングスクリプトであり、
前記ロッキングスクリプトの実行は、前記ノードに、前記条件セットが満たされたか否かを判断することによって、前記第１トランザクションを検証するようにさせる、
請求項１乃至５いずれか一項に記載の方法。
【請求項７】
前記第１スクリプトは、前記第２スクリプトの前記条件セットを満たすためのアンロッキングスクリプトである、
請求項１乃至６いずれか一項に記載の方法。
【請求項８】
前記第１トランザクションを検証するステップは、前記第２トランザクションの未使用トランザクション出力の移転を生じさせる、
請求項１乃至７いずれか一項に記載の方法。
【請求項９】
前記ノードは、前記ブロックチェーンネットワークにおける少なくとも１つの他のノードに通信可能に結合されているコンピューティングデバイスである、
請求項１至８いずれか一項に記載の方法。
【請求項１０】
前記ブロックチェーンネットワークは、ブロックチェーンプロトコルのインスタンスを実行する分散電子デバイスから構成されている、
請求項１乃至９いずれか一項に記載の方法。
【請求項１１】
前記第１スクリプトおよび前記第２スクリプトは、チューリング不完全命令セットを使用して書かれている、
を含む、請求項１乃至１０いずれか一項に記載の方法。
【請求項１２】
前記第１スクリプトおよび前記第２スクリプトは、チューリング完全命令セットを使用して書かれている、
請求項１乃至１１いずれか一項に記載の方法。
【請求項１３】
前記第１スクリプトは、フィールドセットを含むことにより、前記第１スクリプトの実行の結果として、前記ノードに、前記第２スクリプトに対する入力として利用可能な前記フィールドセットを作成するようにさせる、
請求項１乃至１２いずれか一項に記載の方法。
【請求項１４】
システムであって、
プロセッサと、
実行可能な命令を含んでいるメモリであり、
前記実行可能な命令は、前記プロセッサによる実行の結果、前記システムに、請求項１乃至１３いずれか一項に記載の方法を実行させる、
メモリと、
を含む、システム。
【請求項１５】
媒体上に実行可能命令が保管された非一時的コンピュータ読取可能記憶媒体であって、
コンピュータシステムのプロセッサによって実行された結果として、前記コンピュータシステムに、請求項１乃至１３いずれか一項に記載の方法を実行させる、
非一時的コンピュータ読取可能記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般的に、ブロックチェーントランザクションを含む、分散型台帳技術（distributed  ledger  technologies）に関する。そして、より特定的には、ブロックチェーントランザクションからアンロッキング（unlocking）トランザクションスクリプト（transaction  scripts）へのフィールドの注入（injection）を引き起こすことに関する。本発明は、ブロックチェーンネットワーク上で行われる電子振込み（electronic  transfer）に関連するセキュリティを強める（enforce）ために、暗号技術および数学技術を利用する。本発明は、これらに限定されるわけではないが、スマートコントラクト（smart  contracts）およびステートマシン（state  machines）における使用に特に適している。
【背景技術】
【０００２】
この書類において、用語「ブロックチェーン（”blockchain”）」は、全ての形態の電子的な、コンピュータベースな、分散型台帳を含むように使用されている。これらは、コンセンサスベース（consensus-based）ブロックチェーンおよびトランザクションチェーン（transaction-chain）技術、許可型（permissioned）および非許可型（un-permissioned）台帳、共有台帳（shared  ledger）、およびそれらの変形を含むものである。ブロックチェーン技術の最も広く知られているアプリケーションはビットコイン台帳（Bitcoin  ledger）であるが、他のブロックチェーン実装が提案され、そして、開発されてきている。「ビットコイン（”Bitcoin”）」は、便利および説明の目的のために、本開示において説明される技術の有用なアプリケーションとして参照され得るが、ビットコインは、本開示において説明される技術が適用され得る多くのアプリケーションのうちの１つに過ぎない。しかしながら、本発明は、ビットコインブロックチェーンを用いた使用に限定されるものではないことが留意されるべきである。非商業的なアプリケーションを含む、代替的なブロックチェーン実装およびプロトコルも、また、本発明の範囲内に含まれるものである。例えば、本技術は、暗号通貨（cryptocurrency）の交換が発生するか否かにかかわらず、トランザクション内で符号化（encoded）できる制約（constraints）に関してビットコインと同様な制限を有するブロックチェーン実装を利用することに対する利点を提供する。
【０００３】
ブロックチェーンは、ピアツーピア（peer-to-peer）の、電子台帳であり、ブロックから構成されるコンピュータベースの非集中的な（decentralised）分散システムとして実装されており、さらに、トランザクションおよびその他の情報から構成されている。いくつかの実施例において、「ブロックチェーントランザクション（”blockchain  transaction”）」は、データおよび条件セット
を含むフィールド値（field  values）の構造化されたコレクション（structured  collection）を符号化する入力メッセージを参照し、条件セットを満足することは、ブロックチェーンデータ構造に書き込まれるフィールドセット（set  ｏｆ  fields）の必須条件（prerequisite）である。例えば、ビットコインについて、各トランザクションは、ブロックチェーンシステムにおける参加者（participants）間でのデジタルアセット（digital  assets）のコントロールに係る移転を符号化するデータ構造であり、そして、少なくとも１つの入力および少なくとも１つの出力を含んでいる。いくつかの実装において、デジタルアセットのコントロールの移転は、デジタルアセットの少なくとも一部分を第１エンティティから第２エンティティに対して再結合すること（reassociating）によって実行することができる。各ブロックは、以前ブロック（previous  block）のハッシュ（hash）を含んでおり、そうして、ブロックは一緒にチェーン化され、ブロックチェーンの始まり（inception）以降に書き込まれてきた全てのトランザクションの永続的で、イミュータブル（immutable）なレコードを作成する。トランザクションは、トランザクションの入力および出力の中に埋め込まれた（embedded）スクリプト（script）として知られている小さなプログラムを含んでいる。そのトランザクションの出力がどのように、そして、誰によってアクセスできるかを特定するものである。ビットコインのプラットフォームにおいて、これらのスクリプトはスタックベース（stack-based）のスクリプト言語を使用して書かれている。
【０００４】
つまり、スタックベースのスクリプト言語は、スタックを利用することができる。スタックについて、値は、スタックのトップ（top）の上にプッシュされ、または、スタックのトップからポップされ得る。スタックに対して実行される様々なオペレーションは、スタックのトップへ、またはトップから、１つまたはそれ以上の値をプッシュすること（pushing）、またはポップすること（popping）を結果として生じ得る。例えば、OP_EQUALオペレーションは、スタックから上位２つのアイテムをポップし、それらを比較し、そして、結果（等しい場合は１、等しくない場合は０）をスタックのトップにプッシュする。スタックに対して実行される他のオペレーション、OP_PICKといったもの、は、スタックのトップ以外の位置からアイテムが選択されるようにし得る。本実施形態のいくつかによって使用されるいくつかのスクリプト言語においては、少なくとも２つのスタックが存在し得る。メインスタックと代替スタックである。スクリプト言語のいくつかのオペレーションは、あるスタックのトップから別のスタックのトップへアイテムを移動することができる。例えば、OP_TOALTSTACKは、メインスタックのトップから代替スタックのトップへ値を移動する。
【０００５】
トランザクションがブロックチェーンに書き込まれるためには、それが「検証済（”validated”）」であることを要する。ネットワークノード（マイナー（miner））は、各トランザクションが有効（valid）であることを保証するために作業を行い、無効（invalid）なトランザクションがネットワークからリジェクト（reject）される。１つのノードは、他のノードとは異なる有効性の標準を有することができる。ブロックチェーンにおける有効性はコンセンサスに基づいているので、トランザクションが有効であることに大多数のノードが同意する場合に、トランザクションは有効であるとみなされる。ノードにおいてインストールされているソフトウェアクライアントは、UTXOのロッキング（locking）およびアンロッキング（unlocking）スクリプトを実行することによって、未使用トランザクション（UTXO）を部分的に参照して、トランザクションについてこの検証作業（validation  work）を実行する。ロッキングスクリプトおよびアンロッキングスクリプトの実行がTRUEとして評価され、かつ、その他の検証条件が、適用可能であれば、満たされている場合に、トランザクションはノードによって有効である。検証されたトランザクションは、他のネットワークノードに伝搬され、そこで、マイナーノード（miner  node）は、トランザクションをブロックチェーンの中に含めるように選択することができる。従って、トランザクションがブロックチェーンに書き込まれるために、トランザクションは、ｉ）そのトランザクションを受け取った第１ノードによって検証されることを要する。トランザクションが検証された場合、ノードは、それをネットワークにおける他のノードへ中継する。そして、トランザクションは、ｉｉ）マイナーによって構築された新しいブロックへ追加されることを要し、かつ、ｉｉｉ）マイニングされる（mined）されること、すなわち、過去のトランザクションのパブリック台帳（public  ledger）に追加されることを要する。トランザクションを実質的に不可逆にするように、ブロックチェーンに対して十分な数のブロックが追加されたときに、トランザクションが確認された（confirmed）ものとみなされる。
【発明の概要】
【０００６】
本開示は、１つまたはそれ以上のブロックチェーンベースのコンピュータプログラムに係る技術的な態様を説明する。ブロックチェーンベースのコンピュータプログラムは、ブロックチェーントランザクションの中に記録されたマシン読取可能、かつ、実行可能なプログラムである。ブロックチェーンベースのコンピュータプログラムは、結果を作成するために入力を処理することができるルールを含み、次いで、それらの結果に応じてアクションが実行されるようにすることができる。ロッキングスクリプトが、アンロッキングおよび以前トランザクションの両方にアクセスできる場合に、ブロックチェーンを利用して、非常にフレキシブルかつ複雑なスマートコントラクトを可能にすることができる。現在の研究の１つの分野は、「スマートコントラクト（”smart  contracts”）」を実装するためのブロックチェーンベースのコンピュータプログラムの使用である。自然言語で書かれるであろう従来のコントラクトとは異なり、スマートコントラクトは、マシン読取可能なコントラクトまたは契約（agreement）の条件（terms  of）の実行を自動化するようにデザインされたコンピュータプログラムであり得る。
【０００７】
実施形態において、特定のエンティティとのインタラクション（interaction）は、スマートコントラクトにおける特定のステップで符号化することができるが、スマートコントラクトは、そうでなければ、自動的に実行され、自己執行的（self-enforced）であり得る。いくつかの実施例において、自動実行は、UTXOの転送を可能にするために成功裡に実行されるスマートコントラクトの実行を指す（refer  to）。そうした実施例において、UTXOの転送を生じさせることができる「エンティティ（”entity”）」は、いくらかの秘密の知識を証明するように要求されることなく、アンロッキングスクリプトを作成することができるエンティティを指すことに留意する。別の言葉で言えば、アンロッキングトランザクションは、データのソース（例えば、アンロッキングトランザクションを作成したエンティティ）が暗号的秘密（例えば、秘密非対称鍵（private  asymmetric  key）、対称鍵、等）に対するアクセスを有することを検証することなく、検証することができる。また、そうした実施例において、自己執行は、制約に従ってアンロッキングトランザクションを実施するようにされているブロックチェーンネットワークの検証ノードを指す。いくつかの実施例において、UTXOを「アンロッキング（”unlocking”）」すること（UTXOを「スペンディング（”spending”）」することとしても知られている）は、技術的な意味で使用されており、UTXOを参照し、そして、有効として実行するアンロッキングトランザクションを作成することを参照している。
【０００８】
ブロックチェーントランザクションの出力は、ロッキングスクリプト、および、ビットコインといったデジタルアセットのオーナーシップに関する情報を含んでいる。ロッキングスクリプトは、負担（encumbrance）としても参照され、UTXOを転送するために満たされる必要がある条件を指定することによって、デジタルアセットを「ロック（”locks”）」する。例えば、ロッキングスクリプトは、関連するデジタルアセットをアンロック（unlock）するために、所定のデータがアンロッキングスクリプト内に提供されることを要求することができるだろう。ロッキングスクリプトは、また、ビットコインにおける”scriptPubKey”としても知られている。デジタルアセットをアンロックするためのデータを提供するよう当事者（party）に要求する技術は、ロッキングスクリプトの中にデータのハッシュを埋め込むこと（embedding）を含んでいる。しかしながら、このことは、ロッキングスクリプトが作成された時点でデータが未決定（undetermined）な場合（例えば、知られていない、そして、一定でない）、問題を生じる。
【０００９】
従って、これらの態様の１つまたはそれ以上においてブロックチェーン技術を改善する改良された方法及びシステムを提供することが望ましい。従って、本発明に従って、添付の請求項において定義される方法および対応するシステムが提供される。
【００１０】
本発明は、検証（verification）方法／システム、及び／又は、ブロックチェーントランザクションの検証をコントロールするためのコントロール方法／システムとして説明され得る。いくつかの実施形態において、検証されたブロックチェーントランザクションは、ブロックチェーンにおけるトランザクションの登録（recordation）を結果として生じ、これは、いくつかのアプリケーションにおいて、ブロックチェーンを介したデジタルアセットの交換（exchange）または移転（transfer）を結果として生じ得るものである。デジタルアセットは、ブロックチェーンによって管理されるリソースの単位（unit）である。デジタルアセットは、いくつかの実施形態において、暗号通貨として使用され得るが、実施形態においては、デジタルアセットが、追加的または代替的に他のコンテクストにおいて使用可能であることが考慮されている。本発明は、デジタルアセットのコントロールについて適用可能であるが、本質的には技術的なものであり、そして、デジタルアセットの移転を必ずしも伴うことなく、ブロックチェーンのデータ構造を利用する他のコンテクストにおいて使用され得ることに留意する。以下に説明されるように、本発明は、また、ブロックチェーンネットワークまたはプラットフォームを介してオペレーションを実行する新しく、改良され、そして、有利な方法のためのセキュリティ方法／システムとして説明され得る。
【００１１】
より詳細に以下で説明されるように、一つの実施形態において、ロッキングスクリプトは、入力として、アンロッキングトランザクションのフィールド値セット（set  of  field  values）およびアンロッキングトランザクションのアンロッキングスクリプトから署名のハッシュ（signature  hash、SIGHASH）タイプを受信することにより、および、署名作成と検証オペレーションとを実行することにより、アンロッキングトランザクションの所定のフィールドに対するアクセスが与えられ得る。
【００１２】
より詳細に以下で説明されるように、一つの実施形態において、ロッキングスクリプトは、アンロッキングトランザクションの所定のフィールドから抽出された、トランザクション識別子（ID）を制約する（constraining）ことによって、シリアライズされた以前トランザクションが、アンロッキングトランザクションのアンロッキングスクリプトの中に含まれるように、以前トランザクションにおけるフィールドセットに対するアクセスが与えられ得る。本実施形態に従って、ブロックチェーントランザクションのロッキングスクリプトの中にシリアライズされた以前トランザクションを注入するために方法が提供され得る。第１トランザクションに対応するフィールド値の第１セットおよび別のトランザクションに対応するフィールド値の第２セットを、入力として、獲得すること、フィールド値の第１セットからトランザクション識別子を抽出すること、および、他のトランザクションがトランザクション識別子に対応することを、フィールド値の第２セットに基づいて、決定することによるものである。
【００１３】
より詳細に以下で説明されるように、一つの実施形態において、ロッキングスクリプトおよびアンロッキングスクリプトは、決定済（determined）または未決定（undetermined）ソースのどちらかからの未決定データのセキュア（secure）な提供を可能にするように構成され得る。未決定ソースからのデータを変更から守るために、データが、シリアライズされた以前トランザクションの中に埋め込まれ得る。データがシリアライズされた以前トランザクションの中に存在しても、なお、ロッキングスクリプトがそのデータを所定の値であるように制約していないという意味において、データは未決定とみなされることに留意する。決定済ソースからのデータを変更から守るために、決定済ソースからの公開鍵が、ロッキングスクリプトの中に含められてよい。そこで、データは、公開鍵を修正するために使用され、次いで、修正された秘密鍵を使用して、署名されたデータの署名を検証するために使用され得る。本実施形態に従って、未決定データおよび第２値を獲得する方法が提供され得る。そして、データおよびアンロッキングスクリプトにおいて提供される第２値に基づいて、未決定データがデータソースと関連付けられていることを検証する。
【００１４】
より詳細に以下で説明されるように、一つの実施形態においては、以前トランザクションから制約パラメータを抽出すること、および、アンロッキングトランザクションのフィールドに対して制約パラメータを適用することによって、パラメータ化されたスマートコントラクトが作成され得る。パラメータ化されたスマートコントラクトは、決定済または未決定ソースからのアンロッキングトランザクションのアンロッキングスクリプトにおいて提供されるセキュアな、未決定データによってパラメータ化された制約を有しているロッキングスクリプトを通じて具現化され得る。本実施形態に従って、未決定データを獲得するための方法が提供され得る。データから、デジタルアセットの再結合に対して適用される制約セットを決定することができ、そして、制約セットに従って、デジタルアセットを第２エンティティと再結合している。
【００１５】
より詳細に以下で説明されるように、一つの実施形態において、スマートコントラクトが、終了条件に到達するまで自己複製的（self-replicating）であるように作成される。本実施形態に従って、終了条件が満たされていることを検査（check）する方法が提供され得る。そして、終了条件が満たされていない場合には、以前トランザクションのロッキングスクリプトが、アンロッキングトランザクションのロッキングスクリプトと一致することを検査する。
【００１６】
より詳細に以下で説明されるように、一つの実施形態において、パラメータ化された、自己複製的スマートコントラクトは、トラストレスな、決定論的ステートマシンを作成するために使用され得る。本実施形態に従って、自己複製的ロッキングスクリプトを検証し、そして、決定済ソースからの入力およびトラストレス決定論的ステートマシンの現在の状態に少なくとも部分的に基づいて、トラストレスな決定論的ステートマシンの次の状態を決定するための方法が提供され得る。
【００１７】
本開示において説明され、そして、示唆される新規な技術は、ブロックチェーンデータ構造の中に保管されたデータの完全性（integrity）を保証するブロックチェーンの特性を崩壊させる（disrupting）ことなく、ブロックチェーンの機能性を拡張する。例えば、本技術は、計算の分野、特には、検証のための条件が記録の中に埋め込まれている定義されたスマートコントラクトである、デジタル記録検証の分野を改善する。デジタルアセットを再結合するための基準を設定し、そして、実施するために、ブロックチェーンネットワークを利用することによるものである。加えて、本開示において説明および示唆される技術は、ブロックチェーンネットワークの機能性を改善し得る。ブロックチェーントランザクションがステートマシンとして機能することを可能にすることによるものであり、コンピュータプログラムの機能性がそうしたステートマシン内に記録された状態に依存することを可能にする。
【００１８】
さらに、本開示において説明および示唆される技術は、セキュリティ上の理由で機能性を制限するように特別にデザインされてきたブロックチェーン技術（例えば、ビットコインのスクリプト）に特に起因する問題を克服するため、コンピュータ技術に必然的に根ざし得る。例えば、スクリプトは、複雑なフローコントロールの機能性、例えば、発生するループ、を元々サポートしていない。この制限の１つの利点は、プログラムが予測可能な実行時間を有していることである。スクリプトを線形（linear）またはツリー状の決定タスクに制限することの別の著しい利点は、このことが無限ループ（infinite  loops）を回避することであり、これはドス攻撃（denial  of  service、DoSまたはDDoS）といったエクスプロイト（exploits）を開始する手段として使用され得るものである。従って、ブロックチェーン転送／交換のセキュリティが、強化され、かつ、維持されているが、メカニズムは、言語自体によっては許可されていない、または、提供されていない機能性を実装するように見い出される必要がある。本発明は、この観点において進歩を提供し、自己複製および自己複製的ブロックチェーントランザクションのロッキングスクリプトの実装を用いて、少なくとも部分的に、ブロックチェーントランザクションの現在の制限に対処している。従って、本発明は、技術的な問題に対して技術的ソリューションを提供し、そして、セキュリティ、ブロックチェーンを介したデジタルアセットの交換／移転の改善されたコントロール、および現在のブロックチェーン関連の機能性の拡張に関して利点を提供する。
【００１９】
それゆえ、本発明に従って、添付の請求項において定義されるように、コンピュータ実装方法（および、対応するシステム）が提供され得る。コンピュータ実装方法は、ブロックチェーンデータ制約方法として説明され得る。コンピュータ実施方法は、ｉ）ブロックチェーンネットワーク内のノードにおいて、デジタルアセットのコントロールを移転するための第１トランザクションを受信するステップであり、第１トランザクションは、少なくとも、第１トランザクションのフィールド値セットを含む第１スクリプトを含み、そして、実行された結果、ノードに、フィールド値セットを獲得させる、ステップと、ｉｉ）第２トランザクションを獲得するステップであり、第２トランザクションは、デジタルアセットと関連付けられており、かつ、第２スクリプトを含んでおり、実行された結果、第１スクリプトの実行の結果として供給されるフィールド値セットに少なくとも部分的に基づいて、ノードに、少なくとも署名を作成させる、ステップと、ｉｉｉ）第１スクリプトおよび第２スクリプトを実行することによって、第１トランザクションを検証するステップ、を含み得る。
【００２０】
第１トランザクションを検証することは、第１トランザクションを作成したエンティティが秘密情報に対するアクセスを有することを検証することなく、成功裡に実行され得る。
【００２１】
第１スクリプトは、さらに、非対称鍵ペアの秘密暗号鍵（private  cryptographic  key）を含み得る。追加的または代替的に、第２スクリプトは、さらに、ノードに、少なくとも部分的に秘密暗号鍵およびマスク番号に基づく署名を作成させ得る。追加的または代替的に、第１トランザクションを検証することは、さらに、署名が非対称鍵ペアの公開暗号鍵と関連付けられていることを検証することを含み得る。
【００２２】
第１スクリプトは、さらに、署名ハッシュタイプ（signature  hash  type）を指定し得る。追加的または代替的に、フィールド値セットは、少なくとも部分的に、署名ハッシュタイプに基づいてよい。
【００２３】
署名ハッシュタイプは、第１トランザクションのフィールド値セットのどのフィールド値が署名に含まれるべきかを示す値であり得る。
【００２４】
第２スクリプトは、第１トランザクションを検証するための条件セットを課す（impose）ロッキングスクリプトであり得る。追加的または代替的に、ロッキングスクリプトの実行は、ノードに、条件セットが満たされたか否かを判断することによって、第１トランザクションを検証させ得る。
【００２５】
第１スクリプトは、第２スクリプトの条件セットを満たすためのアンロッキングスクリプトであり得る。
【００２６】
デジタルアセットは、ブロックチェーンネットワークにおける未使用トランザクション出力と関連付けられ得る。
【００２７】
ノードは、ブロックチェーンネットワークにおける少なくとも１つの他のノードに通信可能に結合されているコンピューティングデバイスであり得る。
【００２８】
ブロックチェーンネットワークは、ブロックチェーンプロトコルのインスタンスを実行する分散電子デバイスから構成され得る。
【００２９】
第１スクリプトおよび第２スクリプトは、チューリング不完全命令セット（Turing  incomplete  instruction  set）を使用して書かれ得る。
【００３０】
第１スクリプトおよび第２スクリプトは、チューリング完全命令セット（Turing  complete  instruction  set）を使用して書かれている。
【００３１】
第１スクリプトは、フィールドのセットを含むことにより、第１スクリプトの実行の結果として、ノードに、第２スクリプトに対する入力として利用可能なフィールドセットを作成させ得る。
【００３２】
また、プロセッサ、および、プロセッサによる実行の結果として、システムに、請求項に記載の方法のいずれかを実行させる、実行可能な命令を含んでいるメモリ、を含むシステムを提供することも望ましい。
【００３３】
また、コンピュータシステムのプロセッサによって実行される結果として、コンピュータシステムに、請求項に記載の方法のいずれかを少なくとも実行させる実行可能な命令をその上に保管している非一時的コンピュータ読取可能記憶媒体を提供することも望ましい。
【００３４】
それゆえ、本発明に従って、添付の請求項に定義されるようなコンピュータ実装方法（および対応するシステム）が提供され得る。コンピュータ実装方法は、ブロックチェーンデータ制約方法として記述され得る。コンピュータ実施方法は、ｉ）ブロックチェーンネットワーク内のノードにおいて、デジタルアセットのコントロールを移転するための第１トランザクションを受信するステップであり、実行された結果として、ノードに、少なくとも、第１トランザクションに対応するフィールド値の第１セットを獲得させ、かつ、特定のトランザクションに対応するフィールド値の第２セットを獲得させる、ステップと、ｉｉ）第２トランザクションを獲得するステップであり、第２トランザクションは、デジタルアセットと関連付けられており、かつ、第２スクリプトを含んでおり、実行された結果として、ノードに、少なくとも、第１スクリプトの実行の結果として供給される特定のトランザクションに係るフィール値の第１セットおよび第２セットを獲得させ、フィール値の第１セットからトランザクション識別子を抽出させ、そして、フィール値の第２セットに少なくとも部分的に基づいて、特定のトランザクションがトランザクション識別子に対応していることを検証させる、ステップと、ｉｉｉ）第１スクリプトおよび第２スクリプトを実行することによって、第１トランザクションを検証するステップ、を含み得る。
【００３５】
フィールド値の第２セットは、正規化フォーマット（canonicalized  format）であり得る。
【００３６】
ノードは、フィールド値の第２セットのハッシュを作成することによって、特定のトランザクションがトランザクション識別子に対応することを決定し得る。追加的または代替的に、ノードは、ハッシュがトランザクション識別子と一致することを検証することによって、特定のトランザクションがトランザクション識別子に対応することを決定し得る。
【００３７】
特定のトランザクションは、移転されるデジタルアセットのコントロールと関連付けられ得る。
【００３８】
特定のトランザクションは、移転されるデジタルアセットとは異なる第２デジタルアセットと関連付けられ得る。
【００３９】
第１トランザクションを検証することは、第１トランザクションを作成したエンティティが秘密情報に対するアクセスを有することを検証することなく、成功（succeed）し得る。
【００４０】
ノードは、ブロックチェーンネットワークの検証ノードであり得る。
【００４１】
第１トランザクションを検証することは、さらに、第１トランザクションの検証に成功した結果として、ブロックチェーンネットワークにおけるブロックチェーンに第１トランザクションを追加することを含み得る。
【００４２】
第２スクリプトは、第１トランザクションを検証するための条件セットを課すロッキングスクリプトであり得る。追加的または代替的に、ロッキングスクリプトの実行は、ノードに、条件セットが満たされたか否かを判断することによって、第１トランザクションを検証させ得る。
【００４３】
第１スクリプトは、第２スクリプトの条件セットを満たすためのアンロッキングスクリプトであり得る。
【００４４】
第１スクリプトは、署名ハッシュタイプを指定し得る。追加的または代替的に、第２スクリプトは、さらに実行された結果として、ノードに、第１スクリプトの実行の結果として供給される署名ハッシュタイプを獲得させ得る。
【００４５】
第２スクリプトは、さらに実行された結果として、ノードに、少なくとも部分的に署名ハッシュタイプに基づいて、特定のトランザクションが第１トランザクションと関連するトランザクションのセットのメンバー（member）であることを判断させ得る。
【００４６】
第２スクリプトは、さらに実行された結果として、ノードに、少なくとも部分的に署名ハッシュタイプに基づいて、特定のトランザクションが第２トランザクションに対応することを判断させ得る。
【００４７】
また、プロセッサ、および、プロセッサによる実行の結果として、システムに、請求項に記載の方法のいずれかを実行させる、実行可能な命令を含んでいるメモリ、を含むシステムを提供することも望ましい。
【００４８】
また、コンピュータシステムのプロセッサによって実行される結果として、コンピュータシステムに、請求項に記載の方法のいずれかを少なくとも実行させる実行可能な命令をその上に保管している非一時的コンピュータ読取可能記憶媒体を提供することも望ましい。
【００４９】
それゆえ、本発明に従って、添付の請求項に定義されるようなコンピュータ実装方法（および対応するシステム）が提供され得る。コンピュータ実装方法は、ブロックチェーンデータ制約方法として記述され得る。コンピュータ実施方法は、ｉ）ブロックチェーンネットワーク内のノードにおいて、デジタルアセットのコントロールを移転するための第１トランザクションを受信するステップであり、第１トランザクションは第１スクリプトを含んでおり、少なくとも、第１値であり、少なくとも一部分は第２スクリプトによって制約されないデータを含んでいる第１値、および、第２値を含む、ステップと、ｉｉ）第２トランザクションを獲得するステップであり、第２トランザクションは、デジタルアセットと関連付けられており、そして、実行された結果として、ノードに、少なくとも、第１スクリプトの実行の結果として第１値および第２値を獲得させ、かつ、第１値および第２値に少なくとも部分的に基づいて、データが特定のソースと関連付けられていることを検証させる、ステップと、ｉｉｉ）第１スクリプトおよび第２スクリプトを実行することによって、第１トランザクションを検証するステップ、を含み得る。
【００５０】
第２スクリプトは、第２トランザクションを検証するための条件セットを含むロッキングスクリプトであり得る。追加的または代替的に、第１スクリプトは、ロッキングスクリプトの条件セットを満たすためのアンロッキングスクリプトであり得る。
【００５１】
第１トランザクションを検証することは、第１トランザクションを作成したエンティティが秘密情報に対するアクセスを有することを検証することなく、実行され得る。
【００５２】
データがデータソースと関連付けられていることの検証の失敗は、第１トランザクションの検証の失敗を生じさせ得る。
【００５３】
特定なソースのアイデンティティは、第２スクリプトによって制約されなくてよい。
【００５４】
特定のトランザクションは、データの特定のソースであり得る。追加的または代替的に、第１値は、特定のトランザクションのフィールド値セットであり得る。追加的または代替的に、第２値は、特定のトランザクションと関連付けられたトランザクション識別子を含み得る。第２スクリプトは、特定のトランザクションがトランザクション識別子に対応することを検証することによって、データがデータソースと関連付けられていることを検証し得る。
【００５５】
第２スクリプトは、トランザクション識別子が特定のトランザクションのフィールドセットのハッシュと一致することを検証することによって、特定のトランザクションがトランザクション識別子に対応することを検証し得る。
【００５６】
第１スクリプトは、特定のトランザクションのフィールドセットを含むことによって、ノードに、第１スクリプトの実行の結果として、特定のトランザクションのフィールドセットを、第２スクリプトに対する入力として利用可能にさせ得る。
【００５７】
特定のトランザクションは、第２トランザクションであり得る。
【００５８】
データは、特定のトランザクションのフィールドにおいて符号化され得る。
【００５９】
第２スクリプトは、特定のソースのアイデンティティを制約し得る。
【００６０】
第２値は、署名であり得る。追加的または代替的に、第２スクリプトは、さらに、ノードに、データソースと関連付けられた公開鍵を獲得させ、そして、追加的または代替的に、少なくとも部分的に、公開鍵およびデータに基づいて、修正された公開鍵を作成させ得る。追加的または代替的に、第２スクリプトは、少なくとも部分的に修正された公開鍵に基づいて、データがデータソースと関連付けられていることを検証し得る。
【００６１】
修正された公開鍵は、データの値により公開鍵について楕円曲線点乗算（elliptic  curve  point  multiplication）を実行することによって作成され得る。
【００６２】
また、プロセッサ、および、プロセッサによる実行の結果として、システムに、請求項に記載の方法のいずれかを実行させる、実行可能な命令を含んでいるメモリ、を含むシステムを提供することも望ましい。
【００６３】
また、コンピュータシステムのプロセッサによって実行される結果として、コンピュータシステムに、請求項に記載の方法のいずれかを少なくとも実行させる実行可能な命令をその上に保管している非一時的コンピュータ読取可能記憶媒体を提供することも望ましい。それゆえ、本発明に従って、添付の請求項において定義されるように、コンピュータ実装方法（および、対応するシステム）が提供され得る。コンピュータ実装方法は、ブロックチェーンデータ制約方法として説明され得る。コンピュータ実施方法は、ｉ）ブロックチェーンネットワーク内のノードにおいて、デジタルアセットのコントロールを移転するための第１トランザクションを受信するステップであり、第１トランザクションは、第１スクリプトを含み、実行された結果として、ノードに、第１トランザクションのデータおよびフィールド値の第１セットを少なくとも獲得させる、ステップと、ｉｉ）第２トランザクションを獲得するステップであり、第２トランザクションは、第２スクリプトを含み、実行された結果として、ノードに、少なくとも、制約セットを、少なくとも部分的に第１スクリプトの実行の結果として提供されたデータに基づいて、決定させ、かつ、少なくとも部分的にフィールド値の第１セットに基づいて、第１トランザクションに対する制約セットを検証させる、ステップと、ｉｉｉ）第１スクリプトおよび第２スクリプトの実行の結果として、制約セットに従って、デジタルアセットのコントロールを移転するステップ、を含み得る。
【００６４】
デジタルアセットのコントロールを移転することは、第１トランザクションを作成したエンティティが秘密情報に対するアクセスを有することを検証することなく、実行され得る。
【００６５】
データのソースのアイデンティティは、第２スクリプトによって制約されなくてよい。
【００６６】
第２スクリプトは、データのソースのアイデンティティを制約し得る。
【００６７】
第２スクリプトは、データを検証するために使用可能な特定のデータソースの公開鍵を含み得る。
【００６８】
データを検証することは、少なくとも部分的に公開鍵およびデータに基づいて、修正された公開鍵を作成すること、および、追加的または代替的に、少なくとも部分的に修正された公開鍵に基づいて、データがデータソースと関連付けられていると判断することを含み得る。
【００６９】
制約セットは、少なくとも部分的に、データにおけるパラメータセットから導出され得る。
【００７０】
制約セットを満たすことは、デジタルアセットの少なくとも一部分を再結合するための条件であり得る。
【００７１】
デジタルアセットのコントロールを移転することは、第１エンティティから第２エンティティへデジタルアセットを再結合することを含み得る。
【００７２】
第２エンティティのアイデンティティは、少なくとも部分的に制約セットに基づいて判断され得る。
【００７３】
データのソースは、第２トランザクションであり得る。追加的または代替的に、データは、第２トランザクションのフィールド値の第２セットを含んでいる。追加的または代替的に、第２スクリプトの実行は、制約セットを、少なくとも部分的にフィールド値の第２セットから導出されるようにさせ得る。
【００７４】
第２エンティティのアイデンティティは、少なくとも部分的に制約セットに基づいて決定され得る。
【００７５】
制約セットは、さらに、デジタルアセットの少なくとも一部分を、第３エンティティと再び関連付けられる（reassociated  with）ようにし得る。
【００７６】
また、プロセッサ、および、プロセッサによる実行の結果として、システムに、請求項に記載の方法のいずれかを実行させる、実行可能な命令を含んでいるメモリ、を含むシステムを提供することも望ましい。
【００７７】
また、コンピュータシステムのプロセッサによって実行される結果として、コンピュータシステムに、請求項に記載の方法のいずれかを少なくとも実行させる実行可能な命令をその上に保管している非一時的コンピュータ読取可能記憶媒体を提供することも望ましい。
【００７８】
それゆえ、本発明に従って、添付の請求項に定義されるようなコンピュータ実装方法（および対応するシステム）が提供され得る。コンピュータ実装方法は、ブロックチェーンデータ制約方法として記述され得る。コンピュータ実施方法は、ｉ）ブロックチェーンネットワーク内のノードにおいて、デジタルアセットのコントロールを移転するための第１トランザクションを受信するステップであり、第１トランザクションは第１スクリプトを含み、実行された結果として、ノードに、少なくとも、第１トランザクションのフィールド値の第１セットを獲得させ、フィールド値の第１セットは第３スクリプトを含み、かつ、第２トランザクションのフィールド値の第２セットを獲得させ、フィールド値の第２セットは第２スクリプトのコピーを含む、ステップと、ｉｉ）第２トランザクションを獲得するステップであり、第２トランザクションは第２スクリプトを含み、実行された結果として、ノードに、終了条件が満たされていないことを判断した結果として、少なくとも、フィールド値の第１セット第３スクリプトを獲得させ、かつ、第２スクリプトのコピーが第３スクリプトと一致することを判断させる、ステップと、ｉｉｉ）第１スクリプトおよび第２スクリプトの実行の結果として、デジタルアセットのコントロールを移転するステップ、を含み得る。
【００７９】
第２トランザクションは、デジタルアセットと関連付けられたトランザクションであり得る。追加的または代替的に、第１トランザクションは、第１エンティティから第２エンティティへデジタルアセットの少なくとも一部分を再結合するトランザクションであり得る。
【００８０】
第１スクリプトは、第２スクリプトの条件セットを満たすためのアンロッキングスクリプトであり得る。
【００８１】
第２スクリプトは、第１トランザクションを検証するための条件セットを課すロッキングスクリプトであり得る。
【００８２】
第３スクリプトは、将来トランザクション（future  transaction）の検証のための条件セットを課すロッキングスクリプトであり得る。
【００８３】
デジタルアセットのコントロールを移転することは、デジタルアセットを第１エンティティから第２エンティティへ再結合することを含み得る。
【００８４】
終了条件が満たされていないと判断することは、第２トランザクションと関連付けられたデジタルアセットの量が、デジタルアセットの少なくとも一部分を再結合するのに十分であると判断することを含み得る。
【００８５】
第３スクリプトは、フィールド値の第１セットのフィールド値に埋め込まれ得る。
【００８６】
ブロックチェーンネットワークは、ブロックチェーンプロトコルのインスタンスを実行する分散電子デバイスから構成され得る。
【００８７】
デジタルアセットのコントロールを移転することは、第１トランザクションを作成したエンティティが秘密情報に対するアクセスを有することを検証することなく、実行され得る。
【００８８】
第２スクリプトは、さらに、ノードに、デジタルアセットのコントロールを移転するためのさらなる条件として、第１トランザクションが追加の制約を満たすことを検証させ得る。
【００８９】
第１トランザクションおよび第２トランザクションは、デジタルアセットと関連付けられた反復スマートコントラクト（repeating  smart  contracts）のセットのメンバーであり得る。
【００９０】
反復スマートコントラクトのセットは、終了条件によって終了され得る。
【００９１】
また、プロセッサ、および、プロセッサによる実行の結果として、システムに、請求項に記載の方法のいずれかを実行させる、実行可能な命令を含んでいるメモリ、を含むシステムを提供することも望ましい。
【００９２】
また、コンピュータシステムのプロセッサによって実行される結果として、コンピュータシステムに、請求項に記載の方法のいずれかを少なくとも実行させる実行可能な命令をその上に保管している非一時的コンピュータ読取可能記憶媒体を提供することも望ましい。
【００９３】
それゆえ、本発明に従って、添付の請求項に定義されるようなコンピュータ実装方法（および対応するシステム）が提供され得る。コンピュータ実装方法は、ブロックチェーンデータ制約方法として記述され得る。コンピュータ実施方法は、ｉ）ブロックチェーンネットワーク内のノードにおいて、デジタルアセットのコントロールを移転するための第１トランザクションを受信するステップであり、第１トランザクションは第１スクリプトを含み、実行された結果として、ノードに、第１トランザクションのフィールド値の第１セット、第２トランザクションのフィールド値の第２セット、および入力を少なくとも獲得させる、ステップと、ｉｉ）第２トランザクションを獲得するステップであり、第２トランザクションは規則セット（set  of  rules）を含む第２スクリプトを含み、第２スクリプトは、実行された結果として、ノードに、少なくとも、第２スクリプトがフィールド値の第１セットに埋め込まれた第３スクリプトと一致することを検証させ、フィールド値の第２セットに少なくとも部分的に基づいて、現在の状態を決定させ、かつ、少なくとも部分的に現在の状態、入力、および規則セットに基づいて、次の状態を決定させ、次の状態がフィールド値の第１セットに含まれることを検証させる、ステップと、ｉｉｉ）第１スクリプトおよび第２スクリプトの実行の結果としてのデジタルアセットのコントロールを移転するステップ、を含み得る。
【００９４】
第２スクリプトは、入力ソースのアイデンティティを制約し得る。
【００９５】
請求される方法のいずれかは、さらに、入力ソースの暗号的秘密を検証するステップを含み得る。
【００９６】
規則セットは、状態遷移行列であり得る。
【００９７】
第３スクリプトは、将来トランザクションの検証のための条件セットを課すロッキングスクリプトであり得る。
【００９８】
第２スクリプトは、さらに、ノードに、終了条件が満たされていないことを判断させ得る。
【００９９】
入力は、フィールド値の第２セットに埋め込まれ得る。
【０１００】
終了条件は、第２トランザクションと関連付けられたデジタルアセットが、移転されるのに不十分なサイズであること、であり得る。
【０１０１】
現在の状態は、第２トランザクションの状態を示し得る。
【０１０２】
次の状態は、検証において第１トランザクションの状態を示し得る。
【０１０３】
請求項に記載の方法のいずれも、さらに、第３トランザクションを受信するステップを含み得る。追加的または代替的に、請求項に記載の方法のいずれも、さらに、第１トランザクションから第４スクリプトを獲得するステップを含み、第４スクリプトは、実行された結果として、ノードに、少なくとも部分的に次の状態、第２入力、および規則セットに基づいて、次の状態および現在の状態とは異なる別の状態を決定するようにさせ得る。
【０１０４】
現在の状態および次の状態は、第１トランザクションおよび第２トランザクションについて可能な状態セットのメンバーであり得る。
【０１０５】
デジタルアセットのコントロールを移転することは、デジタルアセットを第１エンティティから第２エンティティへ再結合することを含み得る。
【０１０６】
また、プロセッサ、および、プロセッサによる実行の結果として、システムに、請求項に記載の方法のいずれかを実行させる、実行可能な命令を含んでいるメモリ、を含むシステムを提供することも望ましい。
【０１０７】
また、コンピュータシステムのプロセッサによって実行される結果として、コンピュータシステムに、請求項に記載の方法のいずれかを少なくとも実行させる実行可能な命令をその上に保管している非一時的コンピュータ読取可能記憶媒体を提供することも望ましい。
【０１０８】
それゆえ、本発明に従って、添付の請求項に定義されるようなコンピュータ実装方法（および対応するシステム）が提供され得る。コンピュータ実装方法は、ブロックチェーンデータ制約方法として記述され得る。コンピュータ実施方法は、ｉ）ブロックチェーンネットワーク内のノードにおいて、少なくとも、検証する第１トランザクションを受信するステップであり、第１トランザクションは、少なくとも、第１トランザクションのフィールド値セットを含み、そして、実行された結果として、ノードに、フィールド値セットを獲得させる、第１スクリプトを含む、ステップと、ｉｉ）第２トランザクションを獲得するステップであり、第２トランザクションは、検証されており、かつ、実行された結果として、ノードに、第１スクリプトの実行の結果として供給されるフィールド値セットに少なくとも部分的に基づいて、署名を少なくとも作成させる、第２スクリプトを含む、ステップと、ｉｉｉ）第１スクリプトおよび第２スクリプトを実行することによって、第１トランザクションを検証するステップ、を含み得る。
【０１０９】
第１トランザクションを検証することは、第１トランザクションを作成したエンティティが秘密情報に対するアクセスを有することを検証することなく、成功裡に実行され得る。
【０１１０】
第１スクリプトは、さらに、非対称鍵ペアの秘密暗号鍵を含み得る。追加的または代替的に、第２スクリプトは、さらに、ノードに、秘密暗号鍵およびマスク番号に少なくとも部分的に基づいて、署名を作成させ得る。追加的または代替的に、第１トランザクションを検証することは、さらに、署名が非対称鍵ペアの公開暗号鍵と関連付けられているのを検証することを含み得る。
【０１１１】
第１スクリプトは、さらに、署名ハッシュタイプを指定し得る。追加的または代替的に、フィールド値セットは、署名ハッシュタイプに少なくとも部分的に基づき得る。
【０１１２】
署名ハッシュタイプは、第１トランザクションのフィールド値セットのうちどのフィールド値が署名に含まれるべきかを示す値であり得る。
【０１１３】
第２スクリプトは、第１トランザクションを検証するための条件セットを課すロッキングスクリプトであり得る。追加的または代替的に、ロッキングスクリプトの実行は、ノードに、条件セットが満たされているか否かを判断することによって第１トランザクションを検証させ得る。
【０１１４】
第１スクリプトは、第２スクリプトの条件セットを満たすためのアンロッキングスクリプトであり得る。
【０１１５】
第１トランザクションを検証することは、未使用のトランザクション出力の転送を生じさせ得る。
【０１１６】
ノードは、ブロックチェーンネットワーク内の少なくとも１つの他のノードに通信可能に結合されているコンピューティングデバイスであり得る。
【０１１７】
ブロックチェーンネットワークは、ブロックチェーンプロトコルのインスタンスを実行する分散電子デバイスから構成され得る。
【０１１８】
第１スクリプトおよび第２スクリプトは、チューリング不完全命令セットを使用して書かれ得る。
【０１１９】
第１スクリプトおよび第２スクリプトは、チューリング完全命令セットを使用して書かれている。
【０１２０】
第１スクリプトは、フィールドのセットを含むことにより、第１スクリプトの実行の結果として、ノードに、第２スクリプトに対する入力として利用可能なフィールドセットを作成させ得る。
【０１２１】
また、プロセッサ、および、プロセッサによる実行の結果として、システムに、請求項に記載の方法のいずれかを実行させる、実行可能な命令を含んでいるメモリ、を含むシステムを提供することも望ましい。
【０１２２】
また、コンピュータシステムのプロセッサによって実行される結果として、コンピュータシステムに、請求項に記載の方法のいずれかを少なくとも実行させる実行可能な命令をその上に保管している非一時的コンピュータ読取可能記憶媒体を提供することも望ましい。
【０１２３】
それゆえ、本発明に従って、添付の請求項に定義されるようなコンピュータ実装方法（および対応するシステム）が提供され得る。コンピュータ実装方法は、ブロックチェーンデータ制約方法として記述され得る。本方法は、ｉ）ブロックチェーンネットワーク内のノードにおいて、第１トランザクションを受信するステップであり、第１トランザクションは第１スクリプトを含み、実行された結果として、ノードに、少なくとも、第１トランザクションに対応するフィールド値の第１セットを獲得させ、かつ、特定のトランザクションに対応するフィールド値の第２セットを獲得させる、ステップと、ｉｉ）第２トランザクションを獲得するステップであり、第２トランザクションは、検証されており、かつ、実行された結果として、ノードに、少なくとも、第１スクリプトの実行の結果として供給される特定のトランザクションに係るフィールド値の第１セットおよびフィールド値の第２セットを獲得させ、フィールド値の第１セットからトランザクション識別子を抽出させ、かつ、フィールド値の第２セットに少なくとも部分的に基づいて、特定のトランザクションがトランザクション識別子に対応することを判断させる、ステップと、ｉｉｉ）第１スクリプトおよび第２スクリプトを実行することによって、第１トランザクションを検証するステップ、を含み得る。
【０１２４】
フィールド値の第２セットは正規化フォーマットであり得る。
【０１２５】
ノードは、フィールド値の第２セットのハッシュを作成することによって、特定のトランザクションがトランザクション識別子に対応することを決定し得る。追加的または代替的に、ノードは、ハッシュがトランザクション識別子と一致することを検証することによって、特定のトランザクションがトランザクション識別子に対応することを決定し得る。
【０１２６】
特定のトランザクションは、第１トランザクションを検証した結果として移転されたデジタルアセットのコントロールと関連付けられ得る。
【０１２７】
特定のトランザクションは、第１トランザクションの検証の結果として移転されたデジタルアセットとは異なる第２デジタルアセットと関連付けられ得る。
【０１２８】
第１トランザクションを検証することは、第１トランザクションを作成したエンティティが秘密情報に対するアクセスを有することを検証することなく、成功し得る。
【０１２９】
ノードは、ブロックチェーンネットワークの検証ノードであり得る。
【０１３０】
第１トランザクションを検証することは、さらに、第１トランザクションの検証に成功した結果として、ブロックチェーンネットワークのブロックチェーンに第１トランザクションを追加することを含み得る。
【０１３１】
第２スクリプトは、第１トランザクションを検証するための条件セットを課すロッキングスクリプトであり得る。追加的または代替的に、ロッキングスクリプトの実行は、ノードに、条件セットが満たされたか否かを判断することによって、第１トランザクションを検証させ得る。
【０１３２】
第１スクリプトは、第２スクリプトの条件セットを満たすためのアンロッキングスクリプトであり得る。
【０１３３】
第１スクリプトは、署名ハッシュタイプを指定し得る。追加的または代替的に、第２スクリプトは、さらに実行された結果として、ノードに、第１スクリプトの実行の結果として供給される署名ハッシュタイプを獲得させ得る。
【０１３４】
第２スクリプトは、さらに実行された結果として、ノードに、少なくとも部分的に署名ハッシュタイプに基づいて、特定のトランザクションが第１トランザクションと関連するトランザクションのセットのメンバーであることを判断させ得る。
【０１３５】
第２スクリプトは、さらに実行された結果として、ノードに、少なくとも部分的に署名ハッシュタイプに基づいて、特定のトランザクションが第２トランザクションに対応することを判断させ得る。
【０１３６】
また、プロセッサ、および、プロセッサによる実行の結果として、システムに、請求項に記載の方法のいずれかを実行させる、実行可能な命令を含んでいるメモリ、を含むシステムを提供することも望ましい。
【０１３７】
また、コンピュータシステムのプロセッサによって実行される結果として、コンピュータシステムに、請求項に記載の方法のいずれかを少なくとも実行させる実行可能な命令をその上に保管している非一時的コンピュータ読取可能記憶媒体を提供することも望ましい。
【０１３８】
それゆえ、本発明に従って、添付の請求項に定義されるような方法（および対応するシステム）が提供され得る。本方法は、ブロックチェーンデータ制約方法として記述され得る。本方法は、ｉ）ブロックチェーンネットワーク内のノードにおいて、デジタルアセットのコントロールを移転するための第１トランザクションを受信するステップであり、第１トランザクションは第１スクリプトを含んでおり、少なくとも、第１値であり、少なくとも一部分は第２スクリプトによって制約されないデータを含んでいる第１値、および、第２値を含む、ステップと、ｉｉ）第２トランザクションを獲得するステップであり、第２トランザクションは、検証されており、そして、実行された結果として、ノードに、少なくとも、第１スクリプトの実行の結果として第１値および第２値を獲得させ、かつ、第１値および第２値に少なくとも部分的に基づいて、データが特定のソースと関連付けられていることを検証させる、ステップと、ｉｉｉ）第１スクリプトおよび第２スクリプトを実行することによって、第１トランザクションを検証するステップ、を含み得る。
【０１３９】
第２スクリプトは、第２トランザクションを検証するための条件セットを含むロッキングスクリプトであり得る。追加的または代替的に、第１スクリプトは、ロッキングスクリプトの条件セットを満たすためのアンロッキングスクリプトであり得る。
【０１４０】
第１トランザクションを検証することは、第１トランザクションを作成したエンティティが秘密情報に対するアクセスを有することを検証することなく、実行され得る。
【０１４１】
データがデータソースと関連付けられていることの検証の失敗は、第１トランザクションの検証の失敗を生じさせ得る。
【０１４２】
特定なソースのアイデンティティは、第２スクリプトによって制約されなくてよい。
【０１４３】
特定のトランザクションは、データの特定のソースであり得る。追加的または代替的に、第１値は、特定のトランザクションのフィールド値セットであり得る。追加的または代替的に、第２値は、特定のトランザクションと関連付けられたトランザクション識別子を含み得る。第２スクリプトは、特定のトランザクションがトランザクション識別子に対応することを検証することによって、データがデータソースと関連付けられていることを検証し得る。
【０１４４】
第２スクリプトは、実行された結果として、トランザクション識別子が特定のトランザクションのフィールドセットのハッシュと一致することを検証することによって、特定のトランザクションがトランザクション識別子に対応することを検証し得る。
【０１４５】
第１スクリプトは、特定のトランザクションのフィールドセットを含むことによって、ノードに、第１スクリプトの実行の結果として、特定のトランザクションのフィールドセットを、第２スクリプトに対する入力として利用可能にさせ得る。
【０１４６】
特定のトランザクションは、第２トランザクションであり得る。
【０１４７】
データは、特定のトランザクションのフィールドにおいて符号化され得る。
【０１４８】
第２スクリプトは、特定のソースのアイデンティティを制約し得る。
【０１４９】
第２値は、署名であり得る。追加的または代替的に、第２スクリプトは、さらに、ノードに、データソースと関連付けられた公開鍵を獲得させ、そして、追加的または代替的に、少なくとも部分的に、公開鍵およびデータに基づいて、修正された公開鍵を作成させ得る。追加的または代替的に、第２スクリプトは、実行された結果として、少なくとも部分的に修正された公開鍵に基づいて、データがデータソースと関連付けられていることを検証し得る。
【０１５０】
修正された公開鍵は、データの値により公開鍵について楕円曲線点乗算を実行することによって作成され得る。
【０１５１】
また、プロセッサ、および、プロセッサによる実行の結果として、システムに、請求項に記載の方法のいずれかを実行させる、実行可能な命令を含んでいるメモリ、を含むシステムを提供することも望ましい。
【０１５２】
また、コンピュータシステムのプロセッサによって実行される結果として、コンピュータシステムに、請求項に記載の方法のいずれかを少なくとも実行させる実行可能な命令をその上に保管している非一時的コンピュータ読取可能記憶媒体を提供することも望ましい。
【０１５３】
それゆえ、本発明に従って、添付の請求項において定義されるような方法（および、対応するシステム）が提供され得る。本方法は、ブロックチェーンデータ制約方法として説明され得る。本方法は、ｉ）ブロックチェーンネットワーク内のノードにおいて、検証する第１トランザクションを受信するステップであり、第１トランザクションは、第１スクリプトを含み、実行された結果として、ノードに、第１トランザクションのデータおよびフィールド値の第１セットを少なくとも獲得させる、ステップと、ｉｉ）第２トランザクションを獲得するステップであり、第２トランザクションは、第２スクリプトを含み、実行された結果として、ノードに、少なくとも、制約セットを、少なくとも部分的に第１スクリプトの実行の結果として提供されたデータに基づいて、決定させ、かつ、少なくとも部分的にフィールド値の第１セットに基づいて、第１トランザクションに対する制約セットを検証させる、ステップと、ｉｉｉ）第１スクリプトおよび第２スクリプトの実行の結果として、制約セットに従って、デジタルアセットのコントロールを移転するステップ、を含み得る。
【０１５４】
第１トランザクションを検証することは、第１トランザクションを作成したエンティティが秘密情報に対するアクセスを有することを検証することなく、実行され得る。
【０１５５】
データのソースのアイデンティティは、第２スクリプトによって制約されなくてよい。
【０１５６】
第２スクリプトは、データのソースのアイデンティティを制約し得る。
【０１５７】
第２スクリプトは、データを検証するために使用可能な特定のデータソースの公開鍵を含み得る。
【０１５８】
データを検証することは、少なくとも部分的に公開鍵およびデータに基づいて、修正された公開鍵を作成すること、および、追加的または代替的に、少なくとも部分的に修正された公開鍵に基づいて、データがデータソースと関連付けられていると判断することを含み得る。
【０１５９】
制約セットは、少なくとも部分的に、データにおけるパラメータのセットから導出され得る。
【０１６０】
制約セットを満たすことは、デジタルアセットの少なくとも一部分を再結合するための条件であり得る。
【０１６１】
第１トランザクションを検証することは、デジタルアセットを第１エンティティから第２エンティティへ再び関連付けることを含み得る。
【０１６２】
制約セットは、さらに、デジタルアセットの少なくとも一部分を、第３エンティティと再び関連付けられるようにし得る。
【０１６３】
第２エンティティのアイデンティティは、少なくとも部分的に制約セットに基づいて決定され得る。
【０１６４】
データのソースは、第２トランザクションであり得る。追加的または代替的に、データは、第２トランザクションのフィールド値の第２セットを含んでいる。追加的または代替的に、第２スクリプトの実行は、制約セットを、少なくとも部分的にフィールド値の第２セットから導出されるようにさせ得る。
【０１６５】
第２エンティティのアイデンティティは、少なくとも部分的に制約セットに基づいて決定され得る。
【０１６６】
制約セットは、さらに、デジタルアセットの少なくとも一部分を、第３エンティティと再び関連付けられるようにし得る。
【０１６７】
また、プロセッサ、および、プロセッサによる実行の結果として、システムに、請求項に記載の方法のいずれかを実行させる、実行可能な命令を含んでいるメモリ、を含むシステムを提供することも望ましい。
【０１６８】
また、コンピュータシステムのプロセッサによって実行される結果として、コンピュータシステムに、請求項に記載の方法のいずれかを少なくとも実行させる実行可能な命令をその上に保管している非一時的コンピュータ読取可能記憶媒体を提供することも望ましい。
【０１６９】
それゆえ、本発明に従って、添付の請求項に定義されるような方法（および対応するシステム）が提供され得る。本方法は、ブロックチェーンデータ制約方法として記述され得る。本方法は、ｉ）ブロックチェーンネットワーク内のノードにおいて、検証する第１トランザクションを受信するステップであり、第１トランザクションは第１スクリプトを含み、実行された結果として、ノードに、少なくとも、第１トランザクションのフィールド値の第１セットを獲得させ、フィールド値の第１セットは第３スクリプトを含み、かつ、第２トランザクションのフィールド値の第２セットを獲得させ、フィールド値の第２セットは第２スクリプトのコピーを含む、ステップと、ｉｉ）第２トランザクションを獲得するステップであり、第２トランザクションは第２スクリプトを含み、実行された結果として、ノードに、終了条件が満たされていないことを判断した結果として、少なくとも、フィールド値の第１セット第３スクリプトを獲得させ、かつ、第２スクリプトのコピーが第３スクリプトと一致することを判断させる、ステップと、ｉｉｉ）第１スクリプトおよび第２スクリプトの実行の結果として、第１トランザクションを検証するステップ、を含み得る。
【０１７０】
第１スクリプトは、第２スクリプトの条件セットを満たすためのアンロッキングスクリプトであり得る。
【０１７１】
第２スクリプトは、第１トランザクションを検証するための条件セットを課すロッキングスクリプトであり得る。
【０１７２】
第３スクリプトは、将来トランザクションの検証のための条件セットを課すロッキングスクリプトであり得る。
【０１７３】
第２トランザクションは、デジタルアセットと関連付けられたトランザクションであり得る。追加的または代替的に、第１トランザクションは、第１エンティティから第２エンティティへデジタルアセットの少なくとも一部分を再結合するトランザクションであり得る。
【０１７４】
第１トランザクションを検証することは、デジタルアセットを第１エンティティから第２エンティティに再び関連付けることを含み得る。
【０１７５】
終了条件が満たされていないことを判断することは、第２トランザクションと関連付けられたデジタルアセットの量がデジタルアセットの少なくとも一部分を再結合するのに十分であると決定することを含み得る。
【０１７６】
第３スクリプトは、フィールド値の第１セットに係るフィールド値に埋め込まれ得る。
【０１７７】
ブロックチェーンネットワークは、ブロックチェーンプロトコルのインスタンスを実行する分散電子デバイスから構成され得る。
【０１７８】
第１トランザクションを検証することは、第１トランザクションを作成したエンティティが秘密情報に対するアクセスを有することを検証することなく、実行され得る。
【０１７９】
第２スクリプトは、さらに、ノードに、第１トランザクションを検証するためのさらなる条件として、第１トランザクションが追加の制約を満たすことを検証させ得る。
【０１８０】
第１トランザクションおよび第２トランザクションは、デジタルアセットと関連付けられた反復スマートコントラクトのセットのメンバーであり得る。
【０１８１】
反復スマートコントラクトのセットは、終了条件によって終了され得る。
【０１８２】
また、プロセッサ、および、プロセッサによる実行の結果として、システムに、請求項に記載の方法のいずれかを実行させる、実行可能な命令を含んでいるメモリ、を含むシステムを提供することも望ましい。
【０１８３】
また、コンピュータシステムのプロセッサによって実行される結果として、コンピュータシステムに、請求項に記載の方法のいずれかを少なくとも実行させる実行可能な命令をその上に保管している非一時的コンピュータ読取可能記憶媒体を提供することも望ましい。
【０１８４】
それゆえ、本発明に従って、添付の請求項に定義されるような方法（および対応するシステム）が提供され得る。本方法は、ブロックチェーンデータ制約方法として記述され得る。本方法は、ｉ）ブロックチェーンネットワーク内のノードにおいて、検証する第１トランザクションを受信するステップであり、第１トランザクションは第１スクリプトを含み、実行された結果として、ノードに、第１トランザクションのフィールド値の第１セット、第２トランザクションのフィールド値の第２セット、および入力を少なくとも獲得させる、ステップと、ｉｉ）第２トランザクションを獲得するステップであり、第２トランザクションは規則セットを含む第２スクリプトを含み、第２スクリプトは、実行された結果として、ノードに、少なくとも、第２スクリプトがフィールド値の第１セットに埋め込まれた第３スクリプトと一致することを検証させ、フィールド値の第２セットに少なくとも部分的に基づいて、現在の状態を決定させ、かつ、少なくとも部分的に現在の状態、入力、および規則セットに基づいて、次の状態を決定させ、次の状態がフィールド値の第１セットに含まれることを検証させる、ステップと、ｉｉｉ）第１スクリプトおよび第２スクリプトの実行の結果として、第１トランザクションを検証するステップ、を含み得る。
【０１８５】
第２スクリプトは、入力ソースのアイデンティティを制約し得る。
【０１８６】
請求される方法のいずれかは、さらに、入力ソースの暗号的秘密を検証するステップを含み得る。
【０１８７】
規則セットは、状態遷移行列であり得る。
【０１８８】
第３スクリプトは、将来トランザクションの検証のための条件セットを課すロッキングスクリプトであり得る。
【０１８９】
第２スクリプトは、さらに、ノードに、終了条件が満たされていないことを判断させ得る。
【０１９０】
入力は、フィールド値の第２セットに埋め込まれ得る。
【０１９１】
終了条件は、第２トランザクションと関連付けられたデジタルアセットが、移転されるのに不十分なサイズであること、であり得る。
【０１９２】
第１トランザクションを検証することは、デジタルアセットを第１エンティティから第２エンティティへ再び関連付けすることを含み得る。
【０１９３】
現在の状態は、第２トランザクションの状態を示し得る。
【０１９４】
次の状態は、検証において第１トランザクションの状態を示し得る。
【０１９５】
請求項に記載の方法のいずれも、さらに、第３トランザクションを受信するステップを含み得る。追加的または代替的に、請求項に記載の方法のいずれも、さらに、第１トランザクションから第４スクリプトを獲得するステップを含み、第４スクリプトは、実行された結果として、ノードに、少なくとも部分的に次の状態、第２入力、および規則セットに基づいて、次の状態および現在の状態とは異なる別の状態を決定するようにさせ得る。
【０１９６】
現在の状態および次の状態は、第１トランザクションおよび第２トランザクションについて可能な状態セットのメンバーであり得る。
【０１９７】
また、プロセッサ、および、プロセッサによる実行の結果として、システムに、請求項に記載の方法のいずれかを実行させる、実行可能な命令を含んでいるメモリ、を含むシステムを提供することも望ましい。
【０１９８】
また、コンピュータシステムのプロセッサによって実行される結果として、コンピュータシステムに、請求項に記載の方法のいずれかを少なくとも実行させる実行可能な命令をその上に保管している非一時的コンピュータ読取可能記憶媒体を提供することも望ましい。
【図面の簡単な説明】
【０１９９】
本発明に係るこれら及び他の態様は、ここにおいて説明される実施形態を参照して、明らかになり、そして、解明されるだろう。本発明の実施形態が、単なる例示として、これから説明される。そして、添付の図面が参照される。
【図１】図1は、様々な実施形態を実装可能なブロックチェーン環境を示している。
【図２】図2は、一つの実施形態に従った、トラストレス（trustless）、決定論的ステートマシン（state  machine）の一つの例を示している。
【図３】図3は、一つの実施形態によって解決される、ロッキングスクリプトに関連する問題の一つの例を示している。
【図４】図4は、一つの実施形態に従った、アンロッキングスクリプトにアクセス可能なデータの一つの例を示している。
【図５】図5は、一つの実施形態に従った、シリアライズされた（serialized）トランザクションフィールドのセットから署名（signature）を作成する一つの例を示している。
【図６】図6は、一つの実施形態に従った、シリアライズされたアンロッキングトランザクションフィールドのセットの注入（injection）を生じさせる一つの例を説明するフローチャートである。
【図７】図7は、一つの実施形態によって解決されるロッキングスクリプトに関連する問題の別の例を示している。
【図８】図8は、一つの実施形態に従った、シリアライズされた以前トランザクションの注入を生じさせる一つの例を示している。
【図９】図9は、一つの実施形態に従った、署名のハッシュタイプに応じて利用可能なフィールドセットの一つの例を示している。
【図１０】図10は、一つの実施形態に従った、シリアライズされたトランザクションからトランザクション識別子（identifier）を抽出する一つの例を示している。
【図１１】図11は、一つの実施形態に従った、シリアライズされた以前トランザクションの注入を生じさせる一つの例のフローチャートである。
【図１２】図12は、一つの実施形態に従った、未決定（undetermined）ソースからの未決定データのアンセキュアな提供（unsecure  provision）に係る一つの例を示している。
【図１３】図13は、一つの実施形態に従った、決定済（determined）ソースからの未決定データのセキュアな提供に係る一つの例を示している。
【図１４】図14は、一つの実施形態に従った、未決定ソースからロッキングスクリプトの中への未決定データのセキュアな提供（secure  provision）に係る一つの例を示している。
【図１５】図15は、一つの実施形態に従った、ロッキングスクリプトの中への未決定データのセキュアな提供に係る一つの例を示すフローチャートである。
【図１６】図16は、一つの実施形態に従った、パラメータ化（parameterized）されたスマートコントラクトの一つの例を示している。
【図１７】図17は、一つの実施形態に従った、パラメータ化されたスマートコントラクトの実行に係る一つの例を示すフローチャートである。
【図１８】図18は、一つの実施形態によって解決されるスマートコントラクトの複製（duplication）の問題に係る一つの例を示している。
【図１９】図19は、一つの実施形態に従った、スマートコントラクトの複製の問題に対する解決策に係る一つの例を示している。
【図２０】図20は、一つの実施形態に従って解決される、スマートコントラクトの複製の問題に係る別の例を示している。
【図２１】図21は、一つの実施形態に従った、自己複製（self-replicating）スマートコントラクトの一つの例を示している。
【図２２】図22は、一つの実施形態に従った、終了条件を伴う自己複製スマートコントラクトの一つの例を示すフローチャートである。
【図２３】図23は、一つの実施形態によって解決される、次の状態決定（next  state  determination）を伴う問題の一つの例を示している。
【図２４】図24は、一つの実施形態に従った、トラストレスな、決定論的ステートマシンの一つの例を示している。
【図２５】図25は、一つの実施形態に従った、トラストレスな、決定論的ステートマシンの一つの例を示すフローチャートである。
【図２６】図26は、様々な実施形態が実装可能であるコンピューティング環境を示している。
【発明を実施するための形態】
【０２００】
図１を最初に参照すると、本開示の一つの実施形態に従った、ブロックチェーンと関連するブロックチェーンネットワーク100の一つの例が示されている。本実施形態においては、例示的なブロックチェーンネットワーク100が、ブロックチェーンプロトコルのインスタンスを実行するピアツーピア分散型電子デバイスで構成されている。いくつかの実施例において、分散型電子デバイスは、ノード102として参照されている。ブロックチェーンプロトコルの一つの実施例は、ビットコイン（Bitcoin）プロトコルである。
【０２０１】
ノード102は、任意の適切なコンピューティングデバイスで構成されてよい（例えば、データセンターにおけるサーバにより、クライアントコンピューティングデバイス（例えば、デスクトップコンピュータ、ラップトップコンピュータブレットコンピュータ、スマートフォン、等）により、コンピューティンリソースサービスプロバイダの分散システムにおける複数のコンピューティングデバイスにより、または、図26のコンピューティングデバイス2600といった任意の適切な電子クライアントデバイスによる）。
【０２０２】
一つの実施形態において、１つまたはそれ以上のノード102は、他の１つまたはそれ以上のノード102に対して通信的に結合されている。そうした通信カップリング（communicative  coupling）は、有線または無線通信のうち１つまたはそれ以上を含み得る。実施形態において、ノード102は、それぞれ、ブロックチェーン内の全てのトランザクションの「台帳（”ledger”）」の少なくとも一部分を維持している。このように、台帳は分散型台帳（distributed  ledger）である。台帳に影響する、ノードによって処理されるトランザクションは、台帳の完全性（integrity）が維持されるように、１つまたはそれ以上の他のノードによって検証可能である。
【０２０３】
一つの実施形態において、ノード102の少なくともいくつかは、暗号学的問題を解くといった、複雑な計算を実行するマイナーノード（miner  node）である。暗号問題を解くマイナーノードは、ブロックチェーンのための新しいブロックを作成し、そして、他のノード102に対して新しいブロックをブロードキャスト（broadcast）する。他のノード102は、マイナーノードの作業を検証し、そして、検証されると（upon  verification）、ブロックチェーンの中にブロックを受け入れる（例えば、ブロックチェーンの分散型台帳にブロックを追加することによる）。いくつかの実施例において、ブロックは、トランザクションのグループであり、しばしば、タイムスタンプおよび以前ブロックの「フィンガープリント（”fingerprint”）」（例えばハッシュ）を用いてマークされる。このようにして、各ブロックは、以前ブロックにリンクされるようになり、それによって、ブロックチェーンの中でブロックをリンクする「チェーン（”chain”）」を作成している。実施形態においては、有効なブロックが、ノード102のコンセンサスによってブロックチェーンに対して追加されている。いくつかの実施例において、ブロックチェーンは、また、検証されたブロックのリストも含んでいる。
【０２０４】
一つの実施形態において、ノード102の少なくともいくつかは、本開示において説明されるように、トランザクションを検証する検証ノード（validating  node）として動作する。いくつかの実施例において、トランザクションは、デジタルアセット（例えば、ビットコインの数）のオーナーシップ（ownership）の証明（proof）、および、デジタルアセットのオーナーシップ／コントロール（control）の受入または移転の条件を提供するデータを含んでいる。いくつかの実施例において、「アンロッキングトランザクション（”unlocking  transaction”）」は、デジタルアセットの少なくとも一部分、以前トランザクションの未使用トランザクション出力（unspent  transaction  output、UTXO）によって示されるもの、をブロックチェーンアドレスに関連するエンティティに対して再び関連付ける（例えば、オーナーシップまたはコントロールを移転する）トランザクションを参照する。いくつかの実施例において、「以前トランザクション（”previous  transaction”）」は、アンロッキングトランザクションによって参照されているUTXOを含むトランザクションを参照する。いくつかの実施形態において、トランザクションは、オーナーシップ／コントロールが移転され得る（「アンロック（”unlocked”）」）前に満たされなければならない条件を用いてトランザクションを担保（encumbers）する「ロッキングスクリプト（”locking  script”）」を含んでいる。いくつかの実施形態において、ブロックチェーンアドレスは、デジタルアセットの少なくとも一部分のコントロールが移転され／再び関連付けられるエンティティに関連する英数字の文字列である。いくつかの実施形態において実装されるいくつかのブロックチェーンプロトコルにおいては、エンティティと関連付けられた公開鍵（public  key）とブロックチェーンアドレスとの間に一対一の対応が存在している。トランザクションの検証は、ロッキングスクリプト及び／又はアンロッキングスクリプトにおいて指定された１つまたはそれ以上の条件の検証を含み得る。トランザクション104の検証が成功すると、検証ノードは、トランザクション104をブロックチェーンに追加し、そして、それをノード102に対して配布する。
【０２０５】
図2は、本開示に係る例示的な実施形態200を示している。具体的に、図2は、第１状態206を符号化する、以前（previous）ブロックチェーントランザクション202、および、第２状態208を符号化するアンロッキングブロックチェーントランザクション204を示している。例示的な実施形態200においては、第１時間における第１状態206が、以前ブロックチェーントランザクション202の中に埋め込まれたパラメータとして表されている。パラメータ化（parameterizing）の制約に関するさらなる詳細は、図16の説明において見られる。アンロッキングブロックチェーントランザクション204は、第２状態208を表すパラメータを含んでいる。
【０２０６】
例示的な実施形態200において、トランザクション202および204は、１つまたはそれ以上の入力および１つまたはそれ以上の出力を含むフィールド値セットである。いくつかの実施形態において、入力および出力は、デジタルアセットの少なくとも一部分を、少なくとも１つのエンティティ（entity）から少なくとも別のエンティティへ再結合する意図を反映している。例示的な実施形態200において、以前ブロックチェーントランザクション202は、最新の（the  most  current）、ブロックチェーンに含まれている確認されたトランザクションである。例示的な実施形態200において、アンロッキングブロックチェーントランザクション204は、直近の将来の、まだ確認されておらず、かつ、まだブロックチェーンに含まれていないトランザクションである。アンロッキングブロックチェーントランザクション204の入力それぞれは、以前ブロックチェーントランザクション202の出力を受信する。
【０２０７】
ビットコインといった、いくつかのブロックチェーン技術は、デジタル署名のための数学的スキームとして楕円曲線デジタル署名アルゴリズム（elliptic  curve  digital  signature  algorithm、ECDSA）を使用する。実施形態において、ECDSAは、承認されていないエンティティによって獲得されることからUTXOを守るために使用される暗号化デジタル署名である。ビットコインにおける楕円曲線デジタル署名（ECDSA）は、典型的に、末尾（end）に付加された署名ハッシュフラグ（SIGHASHタイプ）と共に現れる。しかしながら、本開示の技術は、SIGHASHタイプを実装しないブロックチェーン技術を用いて使用可能であることが考慮されている。そうしたブロックチェーン技術において、ECDSは、特定のブロックチェーン技術の署名作成原則（principle）に準拠するように考慮されている。
【０２０８】
実施形態において、SIGHASHタイプは、シリアライズ（例えば、正規化）およびハッシュ化される前にトランザクションから抽出されるフィールドのセットを参照する。例えば、SIGHASHタイプは、署名の中にトランザクションのどのフィールドが含まれるかに影響を与え得る。いくつかの実施例において、SIGHASHタイプは、SIGHASH_ALL、SIGHASH_NONE、SIGHASH_SINGLE、またはSIGHASH_ANYONECANPAYのうち１つまたはそれ以上であり得る。一つの実施形態において、タイプSIGHASH_ALLは、入力スクリプトを除いて、トランザクション内の全てのフィールドがハッシュされ、かつ、署名されることを示している。一つの実施形態において、タイプSIGHASH_NONEは、出力が署名される必要がないことを示しており、これで他人（others）がトランザクションを更新することができる。一つの実施形態において、タイプSIGHASH_SINGLEは、入力は署名されるが、シーケンス番号はブランク（blank）であることを示しており、そうして、他人はトランザクションの新たなバージョンを作成することができるが、署名された出力だけが入力と同じ位置にあるものである。一つの実施形態において、タイプSIGHASH_ANYONECANPAYは、他のタイプと組み合わされ、そして、SIGHASH_ANYONECANPAYを含む入力は署名されるが、他の入力は署名される必要がないことを示している。SIGHASHタイプは、SIGHASHタイプを示す値によって表わすことができる。例えば、いくつかの実装において、SIGHASH_ALLは値が１のバイトによって表され、SIGHASH_NONEは値が２のバイトで表され、SIGHASH_SINGLEは値が３のバイトで表され、そして、SIGHASH_ANYONECANPAYは値が８０のバイトで表される。いくつかの実装においては、バイトの値を一緒に加算することによって、SIGHASHタイプの組合せが実行される。
【０２０９】
いくつかの実施例において、SIGHASHタイプによって決定済トランザクションフィールドのセットは、SIGHASHタイプによって決定済なように、バイト単位で（in  bytes）符号化された対応するトランザクションのサブセットを参照する。例えば、SIGHASHタイプがSIGHASH_ANYONECANPAYについては、唯一のトランザクション入力が署名の中に含まれている。
【０２１０】
一つの実施形態において、ECDSは、識別符号化規則（distinguished  encoding  rules、DER）フォーマットで符号化された２５６ビットの数字ペア（ｒ、ｓ）によって表される。しかしながら、本開示の技術は、基本符号化規則（basic  encoding  rules、BER）または正規符号化規則（canonical  encoding  rules、CER）といった、他の符号化フォーマットを用いて使用可能であることに留意する。ECDSAにおいて使用されるパラメータは、Ｋ（楕円曲線点が座標（ｘ、ｙ）である）、ｋ（２５６ビットの数字であり、秘密鍵（private  key）を保護するために通常はランダムである）、Ｇ（ｎ次の（with  order  ｎ）楕円曲線上の基点、ｎ×Ｇ＝０であり、ここで０はアイデンティティ楕円曲線点（identity  elliptic  curve  point）を表しており、ｎは楕円曲線有限体（elliptic  curve  finite  field）においてパラメータとして使用される大きな素数である）、ｒ（ECDSにおける２５６ビットの数字のうち１つ）、ｓ（署名における２５６ビットの数字のうち他のもの）、ｋ−１（ｋのモジュラ逆数（modular  multiplicative  inverse）、つまり、ｋ−１ｋ≡１  ｍｏｄ  ｎ）、ｍ（署名されているメッセージ／データ、実施形態においてハッシュ関数によって２５６ビットへサイズ変更（resized）されている）、ａ（秘密鍵、例えば、２５６ビットの数字）を含んでいる。本実施形態において、ECDSは、以下のように作成される。
【０２１１】
最初に、作成器（generator）を用いてｋを乗算することによって、楕円曲線点Ｋが決定される。
Ｋ＝ｋ×Ｇ
【０２１２】
次に、Ｋから点ｘが決定され、そして、ECDSにおける２５６ビットの数字のうち最初であるｒが、次式に従って決定される。
ｒ＝ｘ  ｍｏｄｅ  ｎ
【０２１３】
次に、ECDSにおける２５６ビットの数字のうち２番目が、次式に従って決定される。
ｓ＝ｋ−１（ｍ＋ｒ×ａ）ｍｏｄ  ｎ
【０２１４】
最後に、（ｒ、ｓ）がDERフォーマットで符号化される。署名（ｒ、ｓ）、メッセージ／データｍ、および、秘密鍵ａに対応する公開鍵Ａが与えられるとすれば、署名は検証可能である。署名を検証するために、ν＝ｓ−１×（ｍ×Ｇ＋ｒ×ｙ）が計算される。
ν＝ｒである場合に、署名は有効である。
【０２１５】
ビットコインは「スクリプト（”Script”）」と呼ばれるスクリプトシステムを使用している。本開示においては、様々なオペレーションを実行するために、様々なスクリプトオペレーションコードおよびキーワードが参照されている。しかしながら、他のブロックチェーン技術は異なる命令セットを実装できるであろうことが考慮されており、そして、従って、本開示において説明されるオペレーションコードは、スクリプトにおける特定のオペレーションコードではなく、むしろオペレーションコードによって実行されるオペレーションを例示するものと考えられる。いくつかの実施形態において、スクリプトシステムは、チューリング不完全命令セット（Turing  incomplete  instruction  set）である（例えば、ループ、再帰（recursion）、ゴーツー（goto）ステートメント、等に対するサポートを欠いている）。他の実施形態において、スクリプトシステムはチューリング完全命令セット（Turing  complete  instruction  set）である。
【０２１６】
本開示の特定の実施形態は、記述された命令セットを実施するためのスクリプトシステムまたは他のシステムが、単一のスクリプトにおいて２００を超える命令（例えば、オペレーションコード）を許可しているという仮定の下で動作する。同様に、本開示の特定の実施形態は、さらに、以下を仮定している。
・本開示において言及されているオペレーションコードによって提供される機能性が、オペレーションコードスクリプト／命令セットを実行するシステムにおいて存在し、かつ、使用可能とされていること。及び／又は、
・要求される機能性が、所望の振る舞い（behavior）を提供するように記載されているカスタマイズされたファンクション（function）の作成によって実現され得ること。これらのカスタマイズされたファンクションは、言語の中に存在するが無効にされているop_codesの機能性を実装するために記載されているか、または、スクリプト言語自体においては本来提供されていない特定の機能性を提供する「新たな（”new”）」op_codesであってよい。
【０２１７】
本開示において参照されるオペレーションコードの例は、以下を含んでいる。
・OP_ECPX、楕円曲線点のｘ座標を返す
・OP_ADD、スタックに上位２つのアイテムを追加する
・OP_BIGMOD、スタックの上位２つのアイテムを除した後の余り（remainder）を返す
・OP_BIGMODADD、スタックモジュラス（stack  modulus）の上位２つのアイテムのモジュラス加算をスタックの第３アイテムに実行する
・OP_BIGMODINVERSE、モジュラス負の指数演算（modulus  negative  exponent  operation）を実行する
・OP_BIGMODMUL、スタックモジュラスの上位２つのアイテムのモジュラス乗算をスタックの第３アイテムに実行する
・OP_CAT、スタックの上位２つのアイテムを連結（concatenate）する
・OP_CHECKSIG、スタックから公開鍵および署名がポップされ、そして、SIGHASHタイプに従ってトランザクションフィールドの署名に対して検証される。署名が有効である場合は１、そうでない場合は０を返す
・OP_CHECKSIGVERIFY、OP_CHECKSIGと同様に機能するが、その後でOP_VERIFYが実行される
・OP_DERENCODE、スタックの上位２つのアイテムをDERフォーマットで符号化する
・OP_DUP、スタックのトップアイテムを複製する
・OP_ECPMULT、スタックの上位２つのアイテムについて楕円曲線点乗算（楕円曲線スカラ乗算（elliptic  curve  scalar  multiplication）としても参照されるもの）を実行する
・OP_ELSE、先行するOP_IF、OP_NOTIF、またはOP_ELSEが実行されなかった場合に、これらのステートメントが実行され、そうでなければ、先行するOP_IF、OP_NOTIF、またはOP_ELSEが実行された場合に、これらのステートメントは実行されない
・OP_ENDIF、if／elseブロックを終了する
・OP_EQUAL、入力が正確に等しい場合には１、そうでなければ０を返す
・OP_EQUALVERIFY 、OP_EQUALと同様であるが、その後でOP_VERIFYを実行する
・OP_FROMALTSTACK、入力をメインスタックのトップの上に置き、そして、それを代替スタックから削除する
・OP_HASH256、入力が２回ハッシュされる、最初はSHA-256を用い、そして、次いで、RIPEMD-160を用いる
・OP_IF、スタックのトップの値（top  stack  value）が誤り（False）でない場合に、ステートメントが実行され、そして、スタックのトップの値が削除される
・OP_MUL、スタックの上位２つのアイテムを乗算する
・OP_NOTIF、スタックのトップの値が誤りである場合に、ステートメントが実行され、そして、スタックのトップの値が削除される
・OP_ROLL、スタックにおける深さがｎ個アイテムであるアイテムがトップに移動される
・OP_SUBSTR、文字列のセクションを返す
・OP_SWAP、スタックの上位２つのアイテムが交換される
・OP_TOALTSTACK、入力を代替スタックのトップの上に置き、そして、それをメインスタックから削除する
・OP_VERIFY、スタックのトップの値が真（true）でない場合に、無効なものとしてトランザクションをマークする
【０２１８】
一つの実施形態において、ECDS作成スクリプトは、オペレーションコードを使用して作成することができる。これは、SIGHASHバイトを終端に追加することによって、署名作成スクリプトOP_GENSIGを作成するように拡張され得る。
【表１】
2020521371.tif 000003
【０２１９】
上記スクリプトにおいては、<SIGHASH  Byte>、メッセージ<m>、秘密鍵<a>、および数<k>が、上記の順序でメインスタック（後入れ先出し（last-in  first-out））の中へ入力される。スクリプト演算"OP_DUP  OP_TOALTSTACK<PubK  G>OP_ECPMULT"を実行すると、数<k>が代替スタックにコピーされ、そして、<k>が楕円曲線作成器<PubK  G>に対して乗算されて、メインスタックのトップに楕円曲線点Ｋが作成される。スクリプト演算"OP_ECPX<N>OP_BIGMOD  OP_DUP  OP_TOALTSTACK"を実行すると、Ｋモジュラスｎ（K  modulus  n）のｘ−座標からｒが計算される。ｒのコピーは、代替スタックにプッシュされる。スクリプト演算の"<N>OP_BIGMODMUL<N>OP_BIGMODADD  OP_FROMALTSTACK  OP_SWAP  OP_FROMALTSTACK<N>OP_BIGMODINVERSE<N>OP_BIGMODMUL"の実行は、ｋ−１（ｍ＋ｒ×ａ）ｍｏｄ  ｎからｓを計算する。最終的に、スクリプト演算"OP_DERENCODE  OP_SWAP  OP_CAT"の実行は、DERフォーマットで符号化され、かつ、<SIGHASH  Byte>に連結された、ｒおよびｓを生じる。本開示において、このスクリプトは、OP_GENSIGとして参照される。従って、本開示の実施形態におけるOP_GENSIGへの参照は、上記スクリプトで実行されるオペレーションの簡略（shorthand）としてみなされるべきである。
【０２２０】
図3は、本開示の一つの実施形態によって解決されるブロックチェーントランザクションに関連する問題を示している実施例300である。すなわち、図3に示される実施形態である実施例300において、以前トランザクション302におけるロッキングスクリプト306は、アンロッキングトランザクション304のフィールドを直接的に読取ることができない。注記したように、いくつかの実施態様において、以前トランザクション302は、ブロックチェーンに含まれる最新の、確認されたトランザクションである。同様に、いくつかの実施形態において、アンロッキングトランザクション304は、先物トランザクション（future  transaction）であり、未だ確認されておらず、そして、未だブロックチェーンに含まれていない。これは、以前トランザクション302によってコントロールされるデジタルアセットの少なくとも一部分を再び関連付けする試みを表している。
【０２２１】
上述のように、いくつかの実施形態において、ロッキングスクリプト306は、出力を転送するために満たす必要がある条件を指定することによってトランザクションを担保するスクリプトである。より特定的に、ロッキングスクリプト306を実行することは、ブロックチェーンシステムの検証ノードによる実行の結果として、実行されたアンロッキングスクリプトからデータを受け入れて、データに基づいて所定のオペレーションを実行し、そして、アンロッキングスクリプトの実行がロッキングスクリプトを成功裡に（successfully）「アンロック（”unlocked”）」した（すなわち、内部に設定された条件セットを満たした）か否かを示す結果を返すように構成されている。いくつかの実施形態において、ロッキングスクリプト306は、トランザクションの検証が成功するために（例えば、アンロッキングスクリプトを介して提供されるデータによって）満たされることを要する１つまたはそれ以上のデータ制約（data  constraints）を定義する。例えば、ロッキングスクリプト306は、以前トランザクション302の関連するデジタルアセットをアンロックするために、アンロッキングスクリプト内に提供される所定のデータを要求することができる。
【０２２２】
図4は、本開示のアンロッキングスクリプト408が、以前トランザクション402のロッキングスクリプト406とは異なり、一つの実施形態におけるアンロッキングトランザクション404のフィールド（例えば、SIGHASHタイプに応じて決定済（determined）アンロッキングトランザクションフィールドのセット）に対するアクセスを有することを説明する実施例400を表している。いくつかの実施態様において、以前トランザクション402は、図3の以前トランザクション302と同様である。いくつかの実施態様において、アンロッキングトランザクション404は、アンロッキングトランザクション304と同様である。いくつかの実施態様において、ロッキングスクリプト406は、図3のロッキングスクリプト306と同様な特徴を有している。
【０２２３】
いくつかの実施態様において、アンロッキングスクリプト408は、ロッキングスクリプトによってトランザクションの出力に置かれた条件のセットを満足しようと試みるトランザクションの入力に置かれた実行可能スクリプトである。アンロッキングスクリプトは、また”scriptSig”としても知られている。上述のように、アンロッキングスクリプト408は、アンロッキングスクリプトに対する入力として、SIGHASHタイプに応じて決定済アンロッキングトランザクションフィールドのセットを提供するように設計されてきており、それによって、アンロッキングトランザクションのフィールドに対するアクセスをアンロッキングスクリプトに提供している。シリアライズされたトランザクションの内容および構成に関するさらなる詳細は、以下の図5の説明において見いだされる。実施形態において、トランザクション402および404は、追加のフィールドを含むことに留意する。例えば、いくつかの実施形態において、”nVersion”はブロックチェーンプロトコルのバージョンを参照し、”#vin”はトランザクションの入力の数のカウントを参照し、”hash”はデジタルアセットが再結合されているエンティティのpay-to-public-key-hashを指し、”#vout”はトランザクションの出力の数のカウントを参照し、”nValue”は残っている未使用デジタルアセットの量を参照し、そして、”nLockTime”はトランザクションが最終になる時のタイムスタンプを参照するものである。
【０２２４】
図5は、トランザクションフィールドのシリアライズされたセットがどのように形成されるかに係る一つの実施例500を示している。図5に示されるように、シリアライズされたトランザクション510（すなわち、特定フォーマットの一連のバイトで表されるトランザクション）は、トランザクションのフィールド値セットを含んでいる。署名者（signer）は、512において、SIGHASHタイプおよび数ｋを選択する。この数ｋは、典型的には、秘密鍵をマスク／プロテクトするために乱数（random）または擬似乱数であり、そして、従って、本開示において、時には、「マスク番号（”mask  number”）」として参照されている。トランザクション514の修正された（modified）コピーは、指定されたSIGHASHタイプに従って選択されるシリアライズされたトランザクション510のフィールドのセットの一つの例である（例えば、実施例500において、SIGHASH_NONE+ANYONECANPAYである）。署名者は、トランザクション514の修正されたコピーをハッシュ化し（例えば、double  SHA-256  hash）、結果として、メッセージｍ516が生じる。署名者は、次いで、SIGHASHタイプ、メッセージｍ、署名者の秘密鍵、および、数ｋを、図2に関連して上述した方法といったように使用して、署名を作成する。
【０２２５】
以下の表は、典型的なアンロッキングスクリプトおよびロッキングスクリプトの一つの実施例を示しており、それによって、アンロッキングスクリプトにおいて指定されたエンティティＡの想定される署名が、OP_CHECKSIGオペレーションコードを使用してエンティティＡの公開鍵に対して検査される。
【表２】
2020521371.tif 000004
【０２２６】
このように、図5の署名作成を理解して、以下の表は、実施例500に示されたプロシージャ一部分がアンロッキングスクリプトの中に移動された場合の、アンロッキングスクリプトおよびロッキングスクリプトの実施例を示している。
【表３】
2020521371.tif 000005
【０２２７】
アンロッキングスクリプトは、さらに、アンロッキングスクリプトの中でメッセージｍを計算するステップを含むように修正され得る。
【表４】
2020521371.tif 000006
【０２２８】
しかしながら、SIGHASHタイプ、およびSIGHASHタイプに応じて決定済アンロッキングトランザクションフィールドのセットを除いて、プロシージャの他のオペレーションはロッキングスクリプトに移動し得ることに留意する。
【表５】
2020521371.tif 000007
【０２２９】
従って、ロッキングスクリプトの中の"OP_HASH256<a><k>OP_GENSIG"のオペレーションを移動することによって、アンロッキングスクリプトは、有効となるように、SIGHASHタイプ、およびSIGHASHタイプに応じて決定済アンロッキングトランザクションフィールドのセットを含むことになる。
【０２３０】
このようにして、シリアライズされた以前トランザクションは、ロッキングスクリプトの中へ注入される。以下の表は、ロッキングおよびアンロッキングスクリプトが、実施例500の各ステップのプロシージャをどのように実行し、かつ、トランザクションを検証するかを示している。
【表６】
2020521371.tif 000008
【０２３１】
本開示において、上記のスクリプトは、OP_UNLOCKINGTXINJECTIONとして参照され得る。従って、本開示の実施形態におけるOP_UNLOCKINGTXINJECTIONへの参照は、上記スクリプトで実行されるオペレーションの簡略としてみなされるべきである。しかしながら、SIGHASHタイプ、およびSIGHASHタイプに応じて決定済アンロッキングトランザクションフィールドのセットを提供する任意のエンティティが、トランザクション出力を受信することができることに留意する。しかしながら、このことは、以下でさらに詳細に説明されるように、有用な特徴になる。上述のように、いくつかの実施例において、トランザクション出力の受信は、トランザクション出力を参照し、そして、有効であると評価するアンロッキングトランザクションを作成することを参照しており、それによって、トランザクション出力が受信されるようにする。
【０２３２】
図6は、様々な実施形態に応じて一つの実施形態に従った、SIGHASHタイプに応じて決定済、アンロッキングトランザクションフィールドのセットの注入を生じさせるプロセス600の一つの実施例を示すフローチャートである。プロセス600のいくつか又は全て（または、あらゆる他の説明されるプロセス、または、これらのプロセスの変形及び／又は組合せ）は、実行可能な命令及び／又は他のデータを用いて構成された１つまたはそれ以上のコンピュータシステムのコントロールの下で実行され得る。そして、１つまたはそれ以上のプロセッサ上でまとめて（collectively）実行される実行可能命令として実装され得る。実行可能命令及び／又は他のデータは、非一時的コンピュータ読取可能記憶媒体において保管され得る（例えば、コンピュータプログラムは、磁気媒体、光学媒体、またはフラッシュ媒体において永続的に保管される）。
【０２３３】
例えば、プロセス600のいくつか又は全ては、図1の例示的なブロックチェーンネットワーク100といった、ブロックチェーンネットワーク内の検証ノードによって実行され得る。そうした検証ノードは、任意の適切なコンピューティングデバイスから構成され得る（例えば、データセンター内のサーバ、クライアントコンピューティングデバイス、計算リソースサービスプロバイダの分散システムにおける複数のコンピューティングデバイス、または、図26のコンピューティングデバイス2600といった、任意の適切な電子クライアントデバイスによる）。プロセス600は、一連のオペレーションを含んでおり、そこで、プロセス600を実行するシステムは、図5で説明される方法で、未検証トランザクションのロッキングスクリプトおよびアンロッキングスクリプトを一緒に実行し、そして、その結果として、SIGHASHタイプおよびトランザクションフィールド値セットを獲得し、署名を作成して、署名を検証する。
【０２３４】
602において、システムは、デジタルアセットの少なくとも一部分を再結合しようとしているエンティティから未検証トランザクションを獲得する。未検証トランザクションは、ロッキングスクリプトおよびアンロッキングスクリプトを含んでいる。アンロッキングスクリプトは、ロッキングスクリプトを実行する以前にシステムによって実行される。アンロッキングスクリプトは、上記の表5および表6において示されるアンロッキングスクリプトと類似してよく、そして、SIGHASHタイプを指定し、そして、未検証トランザクションのフィールドのシリアライズされたセットを含んでいる。その結果、604および606において、プロセス600を実行するシステムは、アンロッキングスクリプトからSIGHASHタイプおよび未検証トランザクションのトランザクションフィールド値のシリアライズされたセットを獲得し、そして、メインスタックの中にそれらを配置する。一旦アンロッキングスクリプトの実行が成功裡に完了すると、システムは、アンロッキングスクリプトの実行の完了時に、メインスタックの状態（および、いくつかの実装においては、代替スタックの状態）を使用してロッキングスクリプトの実行を開始する。ロッキングスクリプトは、上記の表5および表6に示されるロッキングスクリプトと類似してよい。
【０２３５】
608では、ロッキングスクリプトに従って、システムは、少なくともSIGHASHタイプと、アンロッキングスクリプトの実行の結果としてメインスタック上に配置されたトランザクションフィールド値セット、および、公開鍵のペアと関連付けられた秘密鍵を使用して、署名を作成する。610では、ロッキングスクリプトに従って、システムは、鍵ペアの公開鍵に対して署名を成功裡に検証する。このようにして、トランザクションフィールドのセットは、アンロッキングスクリプトによってロッキングスクリプトの中へ注入される。オペレーション602-610は、実装応じて、様々な順序および組合せにおいて実行され得ること、および、オペレーションのいくつかは、プロセス600の他のオペレーションと並行して実行され得ることに留意する。
【０２３６】
図7は、本開示の一つの実施形態によって解決されるブロックチェーントランザクションに関連する問題を示している実施例700である。すなわち、図7で示される実施例700において、ロッキングスクリプト706は、それが埋め込まれているトランザクションの入力を読取ることができず、そして、その結果、以前トランザクションのフィールドを直接的に読取ることができない。いくつかの実施形態において、トランザクション704は、図3のアンロッキングトランザクション304と類似しており、これは、以前トランザクションによってコントロールされるデジタルアセットの少なくとも一部分を再結合する試みを表している。上述のように、いくつかの実施形態において、ロッキングスクリプト706は、図3のロッキングスクリプト306と同様に、出力を転送するために満たされる必要がある条件を指定することによってトランザクションを担保するスクリプトである。
【０２３７】
図8は、トランザクションIDを抽出し、かつ、制約（constraint）検査を実行することによって、アンロッキングスクリプト808がシリアライズされた以前トランザクションを含むようにさせる実施例800を示している。具体的に、図8は、以前トランザクション802A-02Bからの出力を利用しているアンロッキングスクリプト808を有するアンロッキングトランザクション804を示している。見て分かるように、アンロッキングスクリプト808は、シリアライズされた以前トランザクションが検索される（retrieved）ようにさせる。いくつかの実施例において、シリアライズされた以前トランザクションは、以前トランザクションのフィールド値セットの修正されていないバージョンを参照する。
【０２３８】
図8に示される実施形態は、トランザクションIDがシリアライズされたトランザクションのダブル（double）SHA-256であること、および、トランザクションIDがトランザクションに対して一対一（one-to-one）のマッピングを有することを観察することによって理解することができる。従って、以下の表7に示される制約を適用することによって、トランザクションがアンロッキングスクリプトの中へ注入され得る。
【表７】
2020521371.tif 000009
【０２３９】
本開示の実施形態は、任意のシリアライズされたトランザクションの注入を生じさせることによるだけでなく、アンロッキングトランザクション804の入力において参照される１つまたはそれ以上のシリアライズされた以前トランザクション（例えば、以前トランザクション802A-802B）の注入を生じさせることによって、さらに、この注入を改善する。図7を参照して上述のように、SIGHASHタイプに応じて決定済アンロッキングトランザクションフィールドのセットは、アンロッキングスクリプト806を介してロッキングスクリプトの中へ注入され得る。そして、図9は、指定されたSIGHASHタイプに応じて、シリアライズされたトランザクションにどのフィールドが含まれているかを示している。
【０２４０】
図9は、指定されたSIGHASHタイプに応じて、シリアライズされたトランザクションにおいて利用可能であるフィールドのセットの実施例900を示している。しかしながら、図9は、例示的であるように意図されたものであり、かつ、様々な実施形態においては、図9に示されているよりも多くのSIGHASHタイプが存在することに留意する。図9に示されるように、異なるSIGHASHタイプについて、異なるセットの以前トランザクションIDが、SIGHASHタイプに応じて決定されるアンロッキングトランザクションフィールドのセットの中に含まれている（「ハッシュ（”hash”）」フィールドがビッグエンディアン（big  endian）フォーマットでトランザクションIDを表していることに留意する）。いくつかの実施形態において、ロッキングスクリプトを埋め込んでいる以前トランザクションのトランザクションIDは、どのSIGHASHタイプが指定されているかにかかわらず、常に利用可能である。
【０２４１】
従って、以下の方法において、所定のフィールドが、SIGHASHタイプを制約することによって決定済アンロッキングトランザクションフィールドのセットの中に、存在するようにできる。最初に、SIGHASHタイプを複製する。次いで、SIGHASHタイプをスタックの上にプッシュする（例えば、SIGHASH_ALL）。最後に、OP_EQUALVERIFYを呼び出す（call）。図9を見て分かるように、SIGHASH_ALLは（アンロッキングトランザクション904Aで示されるように）、ハッシュを含み、上述のように、以前トランザクションｙおよびｚのトランザクションIDを表すものである。対照的に、SIGHASH_ALL+ANYONECANPAYは（アンロッキングトランザクション904Bで示されるように）、直前のトランザクションyのハッシュだけを含んでいる。いくつかの実施形態において、アンロッキングトランザクション904A−904Bは、以前トランザクション（例えば、トランザクションｙ及び／又はｘ）によってコントロールされるデジタルアセットの少なくとも一部分を再結合する試みを表す、図3のアンロッキングブロックチェーントランザクション204と類似している。トランザクションIDの抽出は、図10に示されるように、所望のフィールドに到達するまで、サブストリング（substring）オペレーションコードを使用してシリアライズされたトランザクションを解析することによって達成され得る。
【０２４２】
図10は、本開示の一つの実施形態におけるトランザクションIDの抽出の実施例1000を示している。具体的に、図10は、ビッグエンディアンフォーマットでのトランザクションIDから構成されている、ハッシュ1020が、スクリプトの中でサブストリングオペレーションコードを使用することによって抽出され得る、シリアライズされたトランザクション1010のサブストリングであることを示している。いくつかの実施形態においては、いくつかのフィールド（例えば、#vin、scriptSigLen、scriptSig、scriptPubKeyLen、およびscriptPubKey）が可変バイト長であるため、トランザクションIDが抽出される前に、シリアライズされたトランザクション1010が、ハッシュ1020の位置を特定するために最初に構文解析（parsed）される。しかしながら、フィールドが固定長を有する実装においては、構文解析が必要とされないこともあると考えられている。
【０２４３】
従って、いくつかの実施形態においては、図6を参照して説明された方法で、アンロッキングトランザクションにおいて参照される特定のシリアライズされた以前トランザクションの注入を引き起こすロッキングスクリプトを構築することによって、以前トランザクションIDがアクセス可能にされ得る。例えば、最初にSIGHASHタイプ制約が決定され、トランザクションIDが抽出され、そして、シリアライズされた以前トランザクションが複製されて、アンロッキングトランザクションのシリアライズされたフィールドセットから（SIGHASHタイプに従って）抽出されたトランザクションIDに対して検査される。このプロセスは、複数の異なるシリアライズされた以前トランザクションの注入を生じさせるように実行され得ることに留意する。一つの例として、表8は、アンロッキングトランザクションの入力Xに対応する以前トランザクションの注入を生じさせるスクリプトを表している。
【表８】
2020521371.tif 000010
【０２４４】
上記のスクリプトにおいて、OP_EXTRACTXIDは、トランザクションIDおよびトランザクションIDの位置を含むデータを、抽出されたトランザクションIDの入力および出力として捉えるオペレーションコード／スクリプトである。本開示において、上記のスクリプトは、OP_PREVTXINJECTIONとして参照され得る。従って、本開示の実施形態におけるOP_PREVTXINJECTIONへの参照は、上記のスクリプトにおいて実行されるオペレーションの簡略としてみなされるべきである。
【０２４５】
しかしながら、SIGHASHタイプ、SIGHASHタイプに応じて決定済アンロッキングトランザクションフィールドのセット、およびシリアライズされた以前トランザクションを提供する任意のエンティティは、トランザクション出力を獲得できることに留意する。しかしながら、このことは、以下でさらに詳細に説明されるように、有用な特徴となる。
【０２４６】
別の実施例として、表9は、署名されている入力に対応する以前トランザクションの注入を生じさせるスクリプトを示している。
【表９】
2020521371.tif 000011
【０２４７】
本開示において、表8のスクリプトと同様に、表8における上記スクリプトは、また、OP_SELFTXINJECTIONとしても参照され得る。従って、本開示の実施形態におけるOP_SELFTXINJECTIONへの参照は、上記のスクリプトにおいて実行されるオペレーションの簡略とみなされるべきである。
【０２４８】
SIGHASHタイプ、SIGHASHタイプに応じて決定済アンロッキングトランザクションフィールドのセット、およびシリアライズされた以前トランザクションを提供する任意のエンティティは、トランザクション出力を獲得することができることにも、また留意する。しかしながら、このことは、以下でさらに詳細に説明するように、有用な特徴となる。上述のように、いくつかの実施例において、トランザクション出力を獲得することは、トランザクション出力を参照するアンロッキングトランザクションを作成すること、および、アンロッキングトランザクションを成功裡に検証することを意味する。
【０２４９】
図11は、様々な実施形態に従って、シリアライズされた以前トランザクションの注入を生じさせるためのプロセス1100の一つの実施例を示すフローチャートである。プロセス1100のいくつか又は全て（または、あらゆる他の説明されるプロセス、または、これらのプロセスの変形及び／又は組合せ）は、実行可能な命令及び／又は他のデータを用いて構成された１つまたはそれ以上のコンピュータシステムのコントロールの下で実行され得る。そして、１つまたはそれ以上のプロセッサ上でまとめて実行される実行可能命令として実装され得る。実行可能命令及び／又は他のデータは、非一時的コンピュータ読取可能記憶媒体において保管され得る（例えば、コンピュータプログラムは、磁気媒体、光学媒体、またはフラッシュ媒体において永続的に保管される）。
【０２５０】
例えば、プロセス1100のいくつか又は全ては、図1の例示的なブロックチェーンネットワーク100といった、ブロックチェーンネットワーク内の検証ノードによって実行され得る。そうした検証ノードは、任意の適切なコンピューティングデバイスから構成され得る（例えば、データセンター内のサーバ、クライアントコンピューティングデバイス、計算リソースサービスプロバイダの分散システムにおける複数のコンピューティングデバイス、または、図26のコンピューティングデバイス2600といった、任意の適切な電子クライアントデバイスによる）。プロセス1100は、一連のオペレーションを含んでおり、そこで、プロセス1100を実行するシステムは、未検証トランザクションのロッキングスクリプトおよびロッキングスクリプトを一緒に実行し、そして、その結果として、未検証トランザクションから抽出されたトランザクションIDに対応するシリアライズされた以前トランザクションを獲得する。
【０２５１】
1102において、システムは、デジタルアセットの少なくとも一部分を再結合しようとしているエンティティから未検証トランザクションを獲得する。未検証トランザクションは、ロッキングスクリプトおよびアンロッキングスクリプトを含んでいる。ロッキングスクリプトおよびアンロッキングスクリプトは、上記の表８および表９において示されるロッキングスクリプトおよびアンロッキングスクリプトと類似してよい。すなわち、ロッキングスクリプトは、アンロッキングスクリプトによるといったもので、メインスタックおよび代替スタックの中に保管された値を入力として捉える命令のセットを含んでいる。命令セットの実行は、真（TRUE）に評価される場合に、未検証トランザクションを成功裡に検証する。従って、アンロッキングスクリプトがロッキングスクリプトの前に実行され、ロッキングスクリプトによって使用されるメインスタックおよび代替スタックにおける値を設定している。図11の実施形態における未検証トランザクションのアンロッキングスクリプトは、シリアライズされた以前トランザクション、SIGHASHタイプ、およびアンロッキングトランザクションのシリアライズされたセットを含んでいる。
【０２５２】
アンロッキングスクリプトに続くロッキングスクリプトの実行の結果として、1104において、システムは、シリアライズされた以前トランザクション、SIGHASHタイプ、および、アンロッキングスクリプトに含まれるアンロッキングトランザクションフィールドのシリアライズされたセットを獲得する。1106において、システムは、SIGHASHに基づいて、未検証トランザクションのフィールド値のシリアライズされたセットに基づく署名を作成する。SIGHASHタイプは、署名作成においてどのフィールドが使用されるかに影響し、そして、所望のSIGHASHは、求められる（sought）特定の以前トランザクションに依存し得ることに留意する。例えば、表8は、以前トランザクションを抽出するためのロッキングスクリプトおよびアンロッキングスクリプトを示しているが、同じロッキングスクリプトを含む以前トランザクションを必ずしも示さず、SIGHASH_ALLのSIGHASHタイプを利用している。図9に示されるように、SIGHASH_ALLタイプは、アンロッキングトランザクションの他の以前トランザクションの入力の検索を可能にする。対照的に、表9は、同じロッキングスクリプト（すなわち、署名されている入力に対応する以前トランザクション）を有する以前トランザクションを抽出するためのロッキングスクリプトおよびアンロッキングスクリプトを示しており、SIGHASH_ALL|ANYONECANPAYのSIGHASHタイプを使用している。図9に示されるように、SIGHASH_ALL|ANYONECANPAYのSIGHASHタイプは、署名された入力を持つ以前トランザクション以外の他の以前トランザクションの入力を除去する。
【０２５３】
1108において、システムは、以前に作成された署名を検証し、そして、次に、1110においては、獲得したシリアライズされた以前トランザクションのダブル（double）SHA-256を実行することによって、アンロッキングトランザクションのトランザクションID（すなわち、フィールド値のシリアライズされたセット）と一致する値を作成する。サブストリングオペレーションコードを使用して、1112において、システムは、フィールド値のシリアライズされたセットのトランザクションIDを抽出し、そして、1114において、システムは、シリアライズされた以前トランザクションのダブルSHA-256によって作成されたトランザクションIDが、フィールド値のシリアライズされたセットのトランザクションIDと一致するか否かを判断する。様々な実施形態において、一致（match）は必ずしも等価性（equality）を必要としないことに留意する。例えば、２つの値は、等しくなくても、数学的に等価である場合には一致し得る。別の実施例として、２つの値は、それらが共通のオブジェクト（例えば、値）に対応するか、または、いくつかの既定の方法において補足的（complementary）であるか、かつ／あるいは、それらが１つまたはそれ以上の一致基準（criteria）を満たす場合には、一致し得る。一般的に、一致が存在するか否かを決定する任意の方法が、使用され得る。また、1102-1114において実行されるオペレーションのうち１つまたはそれ以上は、並列を含み、様々な順序および組合せにおいて実行され得ることにも留意する。
【０２５４】
図12は、本開示の一つの実施形態によって解決されるロッキングスクリプトに関連する問題を説明する実施例1200を示している。すなわち、図12に示される実施例1200は、未決定データをロッキングスクリプトに提供することによって提示される問題を説明している。いくつかの実施例において、用語「未決定データ（”undetermined  data”）」は、ロッキングスクリプトをアンロックするアンロッキングスクリプトを介して提供される、データを参照し、そのうちロッキングスクリプトを実行しているノードは、事前の指示（prior  indication）を有していない。
【０２５５】
いくつかの実施形態において、以前トランザクション1202は、図3の以前トランザクション302と同様である。同様に、いくつかの実施形態において、アンロッキングトランザクション1204は、304と同様である。いくつかの実施形態において、ブロックチェーン1224は、ピアツーピアの、電子台帳内のトランザクションに係るブロックのセットから構成されている。実施形態において、ブロックチェーン1224の各ブロックは、ブロックが一緒にリンク（すなわち、「チェーン（”chained”）」）されるように、事前ブロック（prior  block）のハッシュを含んでおり、ブロックチェーン内の全ての検証されたトランザクションの永続的で、不変的な記録を作成する。
【０２５６】
いくつかの実施形態において、未決定ソース（undetermined  source）1222Aは、以前トランザクション1202のUTXOを獲得しようとするエンティティであってよい。未決定ソース1222Bは、未決定ソース1222Aと同じであってよく、または、未決定ソース1222Aとは異なるエンティティであってよい。いずれの場合でも、ロッキングスクリプトを実行するノードは、ロッキングスクリプトを実行する以前に、未決定ソース1222A−12Bに関する事前知識（prior  knowledge）を有していない。
【０２５７】
実施例1200において、ロッキングスクリプト1206はブランクであり、それにより、データのソースまたはデータが何であるかについての事前知識なしにデータを受け入れることができる。データ（”<d>”）は、アンロッキングトランザクション1204が（例えば、未決定ソース1222Aによって）作成される時点で決定される。しかしながら、アンロッキングトランザクション1204は、それがブロックチェーン1224において確認される（その時点でアンロッキングトランザクション1204は不変（immutable）となる）以前の未決定ソース1222Bなどによる、変更の影響を受けやすい（別の言葉で言えば、可変（mutable）である）ので、そうしたロッキングスクリプトは、セキュリティ上の懸念（concerns）を提示している。
【０２５８】
図13は、本開示の一つの実施形態において、決定済（determined）ソースからの未決定（undetermined）データがロッキングスクリプト1306の中へどのようにしてセキュアに供給され得るのかを説明している実施例1300を示している。すなわち、図13に示された実施例1300は、ロッキングスクリプト1306を実行するノードがソース（例えば、決定済ソース1326）の事前知識を有する状況において提示される問題を示している。事前知識は、データを提供するが、データがどうなるか（what  the  data  will  be）についての事前知識は無い。いくつかの実施形態において、以前トランザクション1302は、図3の以前トランザクション302と同様である。同様に、いくつかの実施形態において、アンロッキングトランザクション1304は、304と同様である。いくつかの実施形態において、ブロックチェーン1324は、図12のブロックチェーン1224と同様である。
【０２５９】
実施例1300において、ロッキングスクリプト1306は、ロッキングスクリプト1306を実行する検証ノードに、アンロッキングスクリプト1308内に提供されたデータが決定済データソースによって提供されたものか否かを検査させるように構成されている。すなわち、秘密鍵は、データ（ｄ）に基づいて修正することができ、以下の方法でデータによる乗算を実行することによって、修正された（modified）秘密鍵（ａ’）を作成する。
ａ’＝ａ×ｄ
【０２６０】
修正されていない（unmodified）秘密鍵のカウンターパート（counterpart）である公開鍵（Ａ）は、楕円曲線点乗算を実行することによって、同様に修正することができ、以下の方法で修正された公開鍵（Ａ’）を作成する。
Ａ’＝ｄ×Ａ
【０２６１】
その結果、ロッキングスクリプト1306は、検証ノードに、署名を評価させるように構成され得る。署名は、データソースのための公開鍵（Ａ）を使用して、データに基づいて修正された秘密鍵を使用して、署名されたものである。より特定的には、署名検査オペレーションコードが、ロッキングスクリプト1306の中に含まれてよい。これは、修正された秘密鍵を使用して署名された署名（Ｓｉｇ  Ａ’）が修正された公開鍵に対応しているか否か、そして、従って、有効な署名であるか否かを検査するものである。検査は、例えば、OP_CHECKSIGオペレーションコードを使用して実行され得る。
【０２６２】
実施例1300を見て分かるように、ロッキングスクリプト1306の実行は、ノードに、公開鍵をスタック上に置かせ、そして、公開鍵と、ロッキングスクリプト1308の事前実行によってスタック内に置かれたデータとの間で楕円曲線点乗算演算（OP_ECMULT）を実行する。次いで、ロッキングスクリプトにおいて指定されたソース（例えば、決定済ソース1326）によって、アンロッキングトランザクションが作成される時点で、データが決定され得る。従って、ロッキングスクリプトは、データを提供するソースについての知識を有しているが、データがどうなるかについての知識は無い。ロッキングスクリプト1306のさらなる実行は、修正された秘密鍵を使用して署名されたデータの署名に対する検証結果を生じさせる（例えば、OP_CHECKSIGは、値が一致した場合にTRUEを返す）。このアプローチは、アンロッキングトランザクション1304に対する変更がそれを無効にするので、セキュアである。しかしながら、データのソース（決定済ソース1326）が指定される必要がある。ECDSAにおける署名検証アルゴリズムは、署名、公開鍵、およびメッセージが、特定の数学的な関係性を有するか否かを検査することを含んでいる。メッセージは、あらゆるデータであってよい。ビットコインにおいて、検証オペレーションコード、OP_CHECKSIG、は、メッセージをシリアライズされたトランザクションであるものに制限することによって、あらゆる任意のデータがメッセージであることを妨げており、一方で、メッセージが特定のソースからのものであることを検証できるようにしている。本開示の実施形態は、この制限に対する代替の解決策を提供する。
【０２６３】
いくつかの実施形態において、未決定ソース1322は、データを変更することができないエンティティである。いくつかの実施形態において、決定済ソース1326は、ロッキングスクリプト1306が作成された時点で既知のエンティティであり、そうして、ロッキングスクリプト1306は、決定済ソース1326の公開鍵を含んでいる。
【０２６４】
図14は、未決定データが、どのように未決定ソースからロッキングスクリプト1406の中へセキュアに供給され得るかを説明する実施例1400を示している。具体的に、図14は、図11のプロセス1100と併せて説明されたロッキングスクリプトに基づいて、ロッキングスクリプトを実行するアンロッキングトランザクション1404を示している。いくつかの実施形態において、以前トランザクション1402は、図3の以前トランザクション302と同様である。同様に、いくつかの実施形態において、アンロッキングトランザクション1404は、304と同様である。いくつかの実施形態において、ブロックチェーン1424は、図12のブロックチェーン1224と同様である。
【０２６５】
実施例1400は、ロッキングスクリプト1406が作成される時点で実施例1400におけるデータが未決定（undetermined）であり得るという点で、図13の実施例1300とは異なっている。問題のデータは、以前トランザクション1402のどこかに埋め込まれ、そして、従って、上記の図8−図11に関連して上述のように、シリアライズされた以前トランザクションを解析すること（parsing）によって抽出することができる。
【０２６６】
このようにして、ロッキングスクリプト1406を実行するノードは、シリアライズされた以前トランザクションを提供しているエンティティについて事前知識を有する必要がなく、そしてまた、ノードも以前トランザクション1402について事前知識を有する必要がない。さらに、以前トランザクション1402、ブロックチェーン1424にコミットされるもの、は、アンロッキングトランザクション1404が作成される時点で既に不変であり、そして、それによって、アンロッキングトランザクション1404が無効になることを生じることなく、変更から保護されている。しかしながら、ロッキングスクリプト1406を実行するノードは、データについて事前知識を有していないが、データは、以前トランザクション1402が作成される時点で決定されている。
【０２６７】
いくつかの実施態様において、ロッキングスクリプト1406は、図11のプロセス1100に関して説明されるスクリプトに従ったスクリプトである。いくつかの実施態様において、アンロッキングスクリプト1408は、図8−図11と関連して説明されるアンロッキングスクリプトと同様である。例えば、実施例1400を見て分かるように、アンロッキングスクリプト1408は、少なくとも１つのシリアライズされた以前トランザクション、SIGHASHタイプ、およびアンロッキングトランザクション1404のアンロッキングトランザクションフィールドのシリアライズされたセットを含んでいる。
【０２６８】
未決定ソース1422Aは、シリアライズされた以前トランザクションにおいて符号化されたデータを供給するエンティティである。未決定ソース1422Bは、アンロッキングトランザクション1404をインターセプト（intercept）し、そして、変更しようと試みるエンティティである。いくつかの実施形態において、未決定ソース1422A−1422Bは、同一または異なるエンティティであってよい。実施例1400を見て分かるように、未決定ソース1422Aのアイデンティティ（identity）は、ロッキングスクリプト1406が作成される時点で知られる必要がない。さらに、データも、また、ロッキングスクリプト1406が作成される時点で知られる必要がない。それでも、未決定ソース1422Bは、依然として、データの変更から防がれている。
【０２６９】
実施形態においては、以前トランザクション1402の様々なフィールド、アンロッキングトランザクション1404によって実行されるロッキングスクリプト以外のものは、以前トランザクション1402の出力におけるデジタルアセットの量、または、以前トランザクション1402の別の出力のロッキングスクリプトにおいて符号化されたメタデータを含む、セキュアで未決定なデータを保管するために使用することができる。従って、実施例1400の実施形態により、実質的（virtually）に任意のエンティティは、以前トランザクションの中にデータを埋め込み、ロッキングスクリプト1406のいくつかの変形に対して支払い（pay）、そして、他のどのエンティティもデータを変更できないことを保証することができる。この特徴は、以下に記載されるさらなる実施形態において有用である。
【０２７０】
図15は、様々な実施形態に従って、未決定データをセキュアに供給するためのプロセス1500に係る一つの実施例を示すフローチャートである。プロセス1500のいくつか又は全て（または、あらゆる他の説明されるプロセス、または、これらのプロセスの変形及び／又は組合せ）は、実行可能な命令及び／又は他のデータを用いて構成された１つまたはそれ以上のコンピュータシステムのコントロールの下で実行され得る。そして、１つまたはそれ以上のプロセッサ上でまとめて実行される実行可能命令として実装され得る。実行可能命令及び／又は他のデータは、非一時的コンピュータ読取可能記憶媒体において保管され得る（例えば、磁気媒体、光学媒体、またはフラッシュ媒体において永続的に保管されるコンピュータプログラム）。
【０２７１】
例えば、プロセス1500のいくつか又は全ては、図1の例示的なブロックチェーンネットワーク100といった、ブロックチェーンネットワークにおける検証ノードによって実行され得る。そうした検証ノードは、任意の適切なコンピューティングデバイスから構成され得る（例えば、データセンターにおけるサーバ、クライアントコンピューティングデバイス、計算リソースサービスプロバイダの分散システムにおける複数のコンピューティングデバイス、または、図26のコンピューティングデバイス2600といった、任意の適切な電子クライアントデバイスによる）。プロセス1500は、一連のオペレーションを含んでおり、そこでは、未検証（unvalidated）トランザクションが受信され、未決定データ、およびアンロッキングスクリプトの実行の結果として第２値（second  value）が獲得され、そして、未決定データが信頼されるデータソースに関連するものとして検証される。
【０２７２】
1502において、システムは、デジタルアセットの少なくとも一部分を再結合しようとするエンティティから未検証トランザクションを獲得する。未検証トランザクションは、ロッキングスクリプトおよびアンロッキングスクリプトを含んでいる。ロッキングスクリプトおよびアンロッキングスクリプトは、図13および図14に示されるロッキングスクリプトおよびアンロッキングスクリプトと同様であってよい。命令セットの実行は、TRUEに評価される場合に、未検証トランザクションを成功裡に検証する。従って、アンロッキングスクリプトは、ロッキングスクリプトの以前に実行され、ロッキングスクリプトによって使用されるメインスタックおよび代替スタックの値を設定する。
【０２７３】
図13の実施形態における未検証トランザクションのアンロッキングスクリプトは、未決定データ（”<d>”）、および、修正された秘密鍵を使用して署名された未決定データの署名（”<SigA’>”）を含んでいる。修正された秘密鍵は、決定済データソース（例えば、「ボブ（”Bob”）」）の秘密鍵に、楕円曲線点乗算を使用して、未決定データの値を乗じることによって修正されたものである。従って、秘密鍵は、楕円曲線上の点であろう。上述のように、このコンテクストにおける用語「未決定（”undetermined”）」は、データが指定されていないこと、または、そうでなければ、ロッキングスクリプト自体によって制約されていないことを意味する。同様に、「未決定データソース（”undetermined  data  source”）」は、そのアイデンティティが指定されていないか、または、ロッキングスクリプトによって制約されていないデータソースであり、一方で、「決定済データソース（”determined  data  source”）」は、（例えば、データソースの公開鍵を含むことによって）そのアイデンティティをロッキングスクリプト内の特定のデータソースであるように制約している。図14の実施形態における未検証トランザクションのアンロッキングスクリプトは、シリアライズされた以前トランザクションの未決定データ、SIGHASHタイプ、およびアンロッキングトランザクションフィールドのシリアライズされたセットを含む。このようにして、データソースがシリアライズされた以前トランザクションであるので、データソースは、指定され、または、ロッキングスクリプト自体によって制約される必要がない。
【０２７４】
アンロッキングスクリプトに続いてロッキングスクリプトの実行の結果として、1504において、システムは、未決定データ、および、データ（例えば、修正された秘密鍵を用いて署名された署名、または、そこからトランザクション識別子を抽出できるアンロッキングトランザクションフィールドのシリアライズされたセット）に関連する決定済または未決定ソースを用いてデータを検証するために使用可能な値を獲得する。
【０２７５】
1506において、システムはデータを検証する。例えば、図13の実施形態において、システムは、（上述のように）楕円曲線点乗算を使用して、データを用いて公開鍵を修正することによって、データが、ロッキングスクリプトに含まれる公開鍵と関連することを検証し、そして、修正された公開鍵が、楕円曲線点乗算を使用してそれ自体が修正された対応する秘密鍵を使用して作成された署名と関連することを検証している。別の実施例として、図14の実施形態において、システムは、データが特定の以前トランザクションに対応することを、シリアライズされた以前トランザクションのハッシュが、図11のプロセス1100の方法で、アンロッキングトランザクションフィールドのシリアライズされたセットから抽出されたトランザクションIDと一致するか否かを決定することによって、検証する。1502-1506において実行される１つまたはそれ以上のオペレーションは、並列を含み、様々な順序および組合せにおいて実行され得ることに留意する。
【０２７６】
図16は、本開示の一つの実施形態に係るパラメータ化可能な（parameterizable）スマートコントラクト1600の実施例を示している。具体的に、図16は、アンロッキングトランザクション1604のアンロッキングスクリプト1608に制約を課すロッキングスクリプト1606を有する以前トランザクション1602を示している。図16に示される実施形態は、本開示が、図3−6の説明において、SIGHASHタイプに応じて決定されたアンロッキングトランザクションフィールドのセットが、どのようにしてロッキングスクリプト1606の中へ注入されるようにできるかを説明してきたこと、を思い出すことによって理解することができる。さらに、図７−11の記載で、本開示は、SIGHASHタイプに応じて決定されたアンロッキングトランザクションフィールドのセットが、シリアライズされた以前トランザクションがロッキングスクリプト1606の中へ注入されるように制約を適用する以前に、トランザクションIDを抽出するためのサブストリングオペレーションコードを使用して、どのように構文解析され得るかを説明したことを思い出してみよ。このプロセスは、アンロッキングトランザクションフィールドのセットにおける任意のフィールドに作用（work）するように拡張され得る。
【０２７７】
図6および図11のコンテクストにおいて説明したロッキングスクリプトは、アンロッキングトランザクションを作成する特定のエンティティに制限を課さないことに留意する。例えば、ロッキングスクリプトは、特定のエンティティが秘密（secret）（例えば、秘密鍵、特定のハッシュを作成する値、等）へのアクセス権を持つことの証明（proof）を必要としない。図16の実施形態は、この概念をアンロッキングトランザクションを作成する特定のエンティティに関して非差別的（undiscriminating）であるように適用するが、どのようにUTXOが請求（claimed）され得るかについて所定の制約を課す。このようにして、図16の実施形態は、自動的に実行され、自己実施的である。別の言葉で言えば、スマートコントラクトの条件が満たされない場合に（すなわち、指定された制約に従わない）、検証が失敗するので、契約は実行されない。
【０２７８】
いくつかの実施形態において、ロッキングスクリプト内のスマートコントラクトは、アンロッキングトランザクション1604の入力に制約（例えば、パラメータ）を課す（例えば、「アリス（”Alice”）」からの入力を要求する）ことによって、インタラクティブ（interactive）にすることができる。アンロッキングスクリプト1608は、アンロッキングスクリプト1606に対する入力ソースであるため、実施形態において、ロッキングスクリプト1606内のスマートコントラクトは、アンロッキングスクリプト1608内のセキュアな、未決定データを使用して、パラメータ化され得る。実施形態において、パラメータ化されたデータは、スマートコントラクトを変更から保護するために、図13−図15に関連して説明された方法における、未決定かつセキュアなパラメータ化されたデータは、スマートコントラクトを変更から保護する。実施形態において、パラメータ化されたデータは未決定（undetermined）である。
【０２７９】
本開示は、ロッキングスクリプト（例えば、スマートコントラクト）に対してセキュアな、未決定データを提供するための２つの方法を説明した。第１方法は、図13および図15のコンテクストにおいて説明されたように、決定済ソースから、セキュアな、未決定データを獲得できるというものである。第２方法は、図14−図15のコンテクストにおいて説明されたように、未決定ソース（例えば、以前トランザクション）からセキュアな、未決定データを獲得できるというものである。第１方法を使用する実施形態において、パラメータは、アンロッキングトランザクションを作成するエンティティによって決定され、そして、アンロッキングトランザクションが作成される時に（例えば、アンロッキングスクリプト1608において）設定されるだろう。第２方法を使用する実施形態において、パラメータは、以前トランザクションを作成したエンティティによって決定され、そして、以前トランザクションの作成時に設定される（すなわち、シリアライズされた以前トランザクションに埋め込まれる）だろう。また、実施形態において、第１および第２方法は、１つまたはそれ以上のパラメータが以前トランザクションに埋め込まれ、そして、１つまたはそれ以上の他のパラメータがアンロッキングトランザクションのアンロッキングスクリプトに埋め込まれ得るように、組合せられ得ることに留意する。
【０２８０】
次の実施例は、これらの方法を使用して、どのようにスマートコントラクトが作成され得るかを説明するために示されている。この実施例において、スマートコントラクトは、アリスのため又はアリスによって、彼女の所得の７０％を貯蓄へ、そして、彼女の所得の３０％を彼女の投資マネジャーであるボブ（Bob）へ移転するため作成されている。彼女の預金口座（saving  account）は暗号の公開鍵Ａ（PubK  A）と関連付けられており、そして、ボブとの彼女の口座は暗号の公開鍵Ｂ（PubK  B）と関連付けられている。アリスの雇用主は、このスマートコントラクトを実行し、支払日に、アリスの所得が上記の方法で分配されるようにする。従って、アリスの所得は、自動的に彼女が望むように分離される。
【０２８１】
この実施例において、パラメータは、スマートコントラクトの実行の結果として移転されるデジタルアセットの量である。スマートコントラクトの実行は、上記の基準（criteria）に従って、アンロッキングトランザクション1604の出力に対する制約を決定する前に、以前トランザクション1602からパラメータを抽出させるようにする。表10は、上記の実施例を実装するためのアンロッキングスクリプトおよびロッキングスクリプトの一つの例を示している。
【表１０−１】
2020521371.tif 000012
【表１０−２】
2020521371.tif 000013
【０２８２】
図17は、様々な実施形態に従った、パラメータ化されたスマートコントラクトを実施するためのプロセス1700に係る一つの実施例を示すフローチャートである。プロセス1700のいくつか又は全て（または、あらゆる他の説明されるプロセス、または、これらのプロセスの変形及び／又は組合せ）は、実行可能な命令及び／又は他のデータを用いて構成された１つまたはそれ以上のコンピュータシステムのコントロールの下で実行され得る。そして、１つまたはそれ以上のプロセッサ上でまとめて実行される実行可能命令として実装され得る。実行可能命令及び／又は他のデータは、非一時的コンピュータ読取可能記憶媒体において保管され得る（例えば、コンピュータプログラムは、磁気媒体、光学媒体、またはフラッシュ媒体において永続的に保管される）。
【０２８３】
例えば、プロセス1700のいくつか又は全ては、図1の例示的なブロックチェーンネットワーク100といった、ブロックチェーンネットワーク内の検証ノードによって実行され得る。そうした検証ノードは、任意の適切なコンピューティングデバイスから構成され得る（例えば、データセンター内のサーバ、クライアントコンピューティングデバイス、計算リソースサービスプロバイダの分散システムにおける複数のコンピューティングデバイス、または、図26のコンピューティングデバイス2600といった、任意の適切な電子クライアントデバイスによる）。プロセス1700は、一連のオペレーションを含んでおり、そこでは、セキュアな、未決定データに埋め込まれたパラメータから制約が抽出される。
【０２８４】
1702において、システムは、シリアライズされた以前トランザクション（例えば、図16の以前トランザクション1602のシリアライズされたフィールド値）、SIGHASHタイプ、および、SIGHASHタイプに応じて決定されたアンロッキングトランザクションフィールドのセット（例えば、アンロッキングトランザクション1604のフィールド値）の注入を生じさせるスクリプトを実行する。スクリプトは、表8または表9からのスクリプトの変形であってよい。図11のプロセス1100は、未決定ソースからのパラメータが必要とされない場合には、シリアライズされた以前トランザクションが必要とされないことがあるので、図16および17のパラメータ化可能なスマートコントラクトに対して全体として（in  its  entirety）必要とされないことがあることに留意する。
【０２８５】
1704において、システムは、パラメータのソースが未決定ソースであるか又は決定済みソースであるかに依存する方法においてパラメータを抽出する。例えば、決定済ソースのデータからパラメータを抽出することは、図13に関連して説明された方法において、アンロッキングスクリプト1608からパラメータを抽出することによって実行され得る。別の例として、未決定ソースのデータからパラメータを抽出することは、図14に関連して説明された方法において、シリアライズされた以前トランザクションからパラメータを抽出することによって実行され得る。さらに別の例として、いくつかのパラメータが未決定ソースのデータに埋め込まれており、かつ、いくつかのパラメータが決定済ソースから受信される場合に、スクリプトは、未決定ソースおよび決定済ソースの両方から来るデータからパラメータを抽出するために、図13および14のオペレーションを組合せるように書くことができる。
【０２８６】
1706では、システムはパラメータから制約を抽出する（derive）。例えば、表10の実施例のスクリプトにおいて、パラメータはスマートコントラクトに対して支払われる金額（amount）であり、そして、制約を抽出することは、アリスおよびボブのペイツーパブリックキー（pay-to-public-key、P2PK）アドレスに対して移転する支払い金額（例えば、７０％および３０％）を決定することを含む。しかしながら、パラメータから抽出され得るパラメータおよび制約は、上記の実施例を超えて、数多く、かつ、様々であり得ることが考慮されている。
【０２８７】
1708において、システムは、SIGHASHタイプに応じて決定されたアンロッキングトランザクションフィールド値セットに対して、制約を検証する。つまり、システムは、アンロッキングトランザクションの関連するサブセットが制約条件を満たしていることを検証する。アンロッキングトランザクションの関連するサブセットが制約を満たす場合には、アンロッキングトランザクションは有効なものとして確認される。そうでなければ、アンロッキングトランザクションの関連するサブセットが制約を満たさない場合に、アンロッキングトランザクションは無効であるとみなされる。1702-1708において実行されるオペレーションの１つまたはそれ以上は、並列を含み、様々な順序および組合せで実行され得ることに留意する。
【０２８８】
図18は、本開示の実施形態によって解決される、スマートコントラクトを繰り返すことに関連する問題に係る実施例1800を示す。すなわち、既知の回数（例えば、５回）を繰り返すトランザクションを作成するために、既知の回数のアンロッキングトランザクションを事前に作成することができるだろう。このことは、少数のトランザクションについては管理可能であろうが、多くの繰り返されるトランザクションを伴うコントラクトについては、アンロッキングトランザクション1804A-1804Nの全てを事前に作成することが煩わしいことになり、そして、スクリプト1806A-1806Nが非常に大きくなり得るだろう。例えば、アリスは、物品またはサービスと交換できる価値を有するデジタルアセット（例えば、ビットコイン）の金額を持っている。アリスは、学校のランチについて毎日支払うために息子のボブによって使用されるように、この金額を割り当てた。図18の実施例1800は、アリスが、ボブの個々のランチのトランザクションそれぞれについて、事前にアンロッキングトランザクション1804A-1804Nを作成できることを示している。しかしながら、図19に示されるように、本開示は、アリスのための代替的な解決策を考慮している。
【０２８９】
図19は、本開示の実施形態の自己複製（self-replicating）スマートコントラクトに係る一つの実施例1900を示している。図19に示されるように、反復コントラクト（repeating  contract）を達成するために事前決定された所定の数のアンロッキングトランザクションを作成するより、むしろ、図16−図17に関連して説明されたパラメータ化可能なスマートコントラクトに基づいて、終了条件（termination  condition）を伴う自己複製スマートコントラクト1904を作成することができる。このようにして、上記の実施例において、アリスは、以前トランザクション1902におけるデジタルアセットの初期の金額から使い尽くすように、１つのアンロッキングトランザクションを作成する必要があるだけである。アンロッキングトランザクション1904Aは、アンロッキングトランザクション1904Aが次のアンロッキングトランザクションの中へ自身を複製させるスクリプトを含んでいる。スクリプトは、終了条件が満たされた後で（例えば、ｎ回発生の後）、アンロッキングトランザクション1904Nに複製を停止させる終了条件を含んでいる。
【０２９０】
一つの可能な実装において、コントラクトのためのトランザクションのチェーンを作成するように、将来トランザクション（future  transaction）が事前に作成され、そして、図20に示されるように、各トランザクションのロッキングスクリプトは、継続的な（successive）トランザクションのロッキングスクリプトを埋め込む。しかしながら、自己複製するアンロッキングトランザクションについて、アンロッキングトランザクションの制約が変更されていないことを検証するためには、各以前トランザクションのロッキングスクリプト（例えば、スマートコントラクト）が、アンロッキングトランザクションのロッキングスクリプトと一致することをセキュアに検証する必要があるだろう。
【０２９１】
図20は、本開示の実施形態によって解決される反復トランザクションを伴う問題の一つの例2000を示している。すなわち、以前トランザクション2002のロッキングスクリプト（ロッキングスクリプト0）は、第１アンロッキングトランザクション2004Aのロッキングスクリプト（ロッキングスクリプト1）を組み込んでおり、第１アンロッキングトランザクションそれ自体は第２アンロッキングトランザクション2004Bのロッキングスクリプト（ロッキングスクリプト2）を組み込んでおり、そして、最後のアンロッキングトランザクション2004Nまで同様である。完全に展開された場合には、ロッキングスクリプト0はロッキングスクリプト1と同一ではなく、ロッキングスクリプト1はロッキングスクリプト2と同じではないこと、等が明らかになる。従って、実施例2000は、ロッキングスクリプトが同一ではないので、自己複製であると言うことはできない。この問題は、自己参照（self-referencing）に由来するものとして理解することができる。つまり、ロッキングスクリプトは、それ自体のコピーを埋め込む必要があり、絶え間ない（unending）そして、解明可能な（unravelable）ループになっているだろう。従って、ロッキングスクリプトは決定不可能（undeterminable）であろう。実施例2000は、n番目のロッキングスクリプトに値を割り当てる前にループが解明できる回数（n）を固定する。それにより、n-1ロッキングスクリプトはnロッキングスクリプトを埋め込むことができ、n-2ロッキングスクリプトはn-1ロッキングスクリプトを埋め込むことができる、等である。しかしながら、このことは、n個の異なるロッキングスクリプトを結果として生じる。
【０２９２】
図21は、自己複製トランザクションのナイーブ実装（naive  implementation）に伴う問題に対する解決策の一つの例2100を示している。具体的に、図21は、毎回１単位だけ、自分自身に送られるデジタルアセット量を減らし、そして、また、アリスに対して１単位のデジタルアセットも支払う、スマートコントラクトの複製（duplicating）を示している。すなわち、以前トランザクション2102は、初期量Xを保持している。第１アンロッキングトランザクション2104Aは、アリスに属しているペイツーパブリックキーハッシュ（pay-to-public-key-hash、P2PKH）アドレスに１単位のデジタルアセットを支払い、新しい合計（X'=X-1）を出力し、そして、第２アンロッキングトランザクション2104Bに対して自分自身を複製する。いくつかの実施例においては、P2PKまたはP2PKHを、それぞれの公開鍵に関連するエンティティへのデジタルアセットの移転を指示するアドレスとして使用することができる。第２アンロッキングトランザクション2104Bは、再び、1単位のデジタルアセットをアリスへ支払い、新しい合計（X"=X'-1）を出力し、そして、再び自分自身を複製する。
【０２９３】
従って、初期量Xに関係なくプロセスが継続すると、デジタルアセットの償還不可能な（unredeemable）量（例えば、ゼロ）を出力するために、アンロッキングトランザクションが最終的に作成されることが理解できる。このことは、様々なブロックチェーンプロトコルにおいて差し引かれた最低トランザクション料（minimum  transaction  fee）を差し引くことが無くてさえも、それぞれ後続のアンロッキングトランザクションが、以前トランザクションよりも小さい量のデジタルアセットを有することを観察することによって、直感的に理解できる。その結果、出力の量はゼロに向かって収束し、その点において、トランザクションの処理は無意味（pointless）になる。しかしながら、本開示の実施形態は、そうした償還不可能なアンロッキングトランザクションを回避するための終了条件を実施することによる、この問題に対する解決策を含んでいる。
【０２９４】
さらに、実施形態において、図20に示される問題に対する解決策は、ロッキングスクリプト1に、第１データ（例えば、アンロッキングトランザクションデータ）および第２データ（例えば、以前トランザクションデータ）、両方ともロッキングスクリプトを埋め込んだもの、を受信させることである。これらの実施形態において、ロッキングスクリプト1は、第１データおよび第２データからのロッキングスクリプトが一致することを検証する。次いで、第２データ（以前トランザクションデータ）がロッキングスクリプト1を埋め込んでいることをロッキングスクリプト1が検証した場合には、第１データも、また、ロッキングスクリプト1を埋め込んでいることが検証される。
【０２９５】
そうしたスクリプトの基本的なアウトラインが、以下の表11に示されている。
【表１１】
2020521371.tif 000014
【０２９６】
上記のスクリプトを見て分かるように、以前トランザクション2102のロッキングスクリプト、UTXOをアンロックする現在実行中のロッキングスクリプト、は、第１アンロッキングトランザクション2104Aのロッキングスクリプトに対して検証される。第１アンロッキングトランザクションは、現在のアンロッキングトランザクションが別のアンロッキングトランザクション（例えば、第２アンロッキングトランザクション2104B）に対する以前トランザクションである場合に、将来償還される（redeemed）ものである。従って、図18および図20に示されるように、各トランザクションに対して異なるアンロッキングトランザクションを作成するより、むしろ、スクリプトは、代わりに、各ロッキングスクリプトが同一でなければならないことを強制する。以前トランザクション2102のロッキングスクリプトが、第２アンロッキングトランザクション2104Bがアンロックしようと試みるロッキングスクリプトと同一である場合（例えば、第１アンロッキングトランザクション2104A）、ロッキングスクリプトは、真正（genuine）であることが保証される。
【０２９７】
実施形態において、終了条件は、以前トランザクションが不十分なファンド（fund）を有しているが、ロッキングスクリプトは未だに検証する状況、すなわち、償還不可能なトランザクション（unredeemable  transaction）を回避する。例えば、終了条件は、次のトランザクションを実行するために十分なデジタルアセットが存在することを検証するように実装することができ、そうでなければ、検証を終了する。より具体的な例として、第１プール（pool）が３６５単位のデジタルアセットと、プラスして各トランザクション料に要求される量（例えば、１年について１日に１つのトランザクションについて十分な金額）を含む場合に、終了条件は、残っている単位の数がトランザクションを完了するために必要とされる数より多いことを検証することができる。例えば、十分なファンドが存在する限り、終了条件は、トランザクションの検証を継続する。そうでなければ、不十分なファンドが存在する場合には、終了条件が満たされ、そして、検証が中断される。従って、３６６日目に不十分なファンドが存在する場合、３６６番目のアンロッキングトランザクションのロッキングスクリプトを検証することは不要であり、そして、終了条件は、ロッキングスクリプトの自己複製を終了することを確保する。
【０２９８】
図22は、様々な実施形態に従った、終了条件を伴う自己複製スマートコントラクトのためのプロセス2200に係る一つの例を示すフローチャートである。プロセス2200のいくつか又は全て（または、あらゆる他の説明されたプロセス、もしくは、それらのプロセスの変形及び／又は組合せ）は、実行可能な命令及び／又は他のデータを用いて構成された１つまたはそれ以上のコンピュータシステムのコントロールの下で実行され、そして、１つまたはそれ以上のプロセッサ上でまとめて実行される実行可能な命令として実装され得る。実行可能な命令及び／又は他のデータは、非一時的コンピュータ読取可能記憶媒体において保管することができる（例えば、磁気、光学、またはフラッシュ媒体において永続的に保管されるコンピュータプログラム）。
【０２９９】
例えば、プロセス2200のいくつか又は全ては、図1の例示的なブロックチェーンネットワーク100といった、ブロックチェーンネットワークにおける検証ノードによって実行され得る。そうした検証ノードは、任意の適切なコンピューティングデバイスから構成され得る（例えば、データセンター内のサーバ、クライアントコンピューティングデバイス、計算リソースサービスプロバイダの分散システムにおける複数のコンピューティングデバイス、または、図26のコンピューティングデバイス2600といった任意の適切な電子クライアントデバイスによる）。プロセス2200は、一連のオペレーションを含んでおり、そこでは、終了条件が満たされない場合に、アンロッキングトランザクションおよび以前トランザクションのロッキングスクリプトが同一であることが検証され、そして、他の制約が検証される。
【０３００】
2202において、システムは、未検証トランザクションを受信する。システムは、未検証トランザクションのアンロッキングスクリプトを実行することによって開始され、そして、次いで、未検証トランザクションによって参照されるデジタルアセットと関連付けられた以前（検証済）トランザクションのロッキングスクリプトの実行を開始する。プロセス2200は、表11の例示的なスクリプトの変形を実行するものとして示されている。例えば、2204において、プロセス2200を実行しているシステムは、終了条件が満たされているか否かを判断する。上述のように、一つの実装において、トランザクションを完了するために不十分な量のデジタルアセットが存在する場合に、終了条件が満たされ得る。しかしながら、他の終了条件が可能であることが考慮されている。例えば、終了条件は、時間ベース（time-based）であり得る。特定の日付以前に未検証トランザクションが検証されない場合には、終了条件が満たされ得る。
【０３０１】
一旦終了条件が満たされると、2206において、プロセス2200は終了し、そして、検証が終了する。そうでなければ、2208において、システムは、未検証トランザクションから第１ロッキングスクリプトを抽出する。第１ロッキングスクリプトは、別の未検証トランザクションが現在のトランザクションのUTXOを転送しようと試みるといった時点で、現在の未検証トランザクションが検証された後で実行されるロッキングスクリプトであることに留意する。
【０３０２】
2210において、システムは、シリアライズされた以前トランザクションから第２ロッキングスクリプトを抽出する。この実施形態において、第２ロッキングスクリプトは、現在実行されているロッキングスクリプトのコピーである。2212では、プロセス2200を実行しているシステムは、第１ロッキングスクリプトが第２ロッキングスクリプトと一致するか否か（例えば、２つのロッキングスクリプトが同一であるか否か）を判断する。ロッキングスクリプトが一致しない場合、2214において、システムは、未検証トランザクションが検証に失敗し、そして、未検証のままであると判断する。
【０３０３】
そうでなければ、2216において、システムは、スクリプトにおける任意の残りの制約を検証する（例えば、以前トランザクションのデジタル署名または他の要求（requirement）を検証する）。残りの制約が存在しない場合、または、全ての残りの制約が成功裡に検証された場合には、次いで、トランザクションが成功裡に検証される。検証が成功した後で、トランザクションは、ブロックチェーンに追加され得る。2202-2216で実行されるオペレーションの１つまたはそれ以上は、並列を含み、様々な順序および組合せにおいて実行され得ることに留意する。
【０３０４】
図23は、本開示の一つの実施形態によって解決される問題の実施例2300を示している。具体的に、図23は、ブロックチェーントランザクションを使用して、第１状態から第２状態へ遷移する（transitioning）ステートマシンを示している。いくつかの実施例において、ステートマシンの状態遷移は、現在の状態が与えられると、１つまたはそれ以上の入力2326、および、次の状態を決定する、状態規則（state  rules）セット2306として説明される。図23の実施例2300は、状態規則セット2306、および、パラメータに埋め込まれた第１状態2328Aを有する以前トランザクション2302を示している。いくつかの実施態様において、アンロッキングトランザクション2304は、決定済ソースからの入力2326を受け入れるように作成されている。入力2326は、第１状態2328Aと組み合わされて、状態規則セット2306を参照して、アンロッキングトランザクション2304のパラメータに埋め込まれた第２状態2328Bを決定するために使用可能である。
【０３０５】
実施形態において、状態規則セットは、状態遷移行列（state-transition  matrix）であり、図16および図17に関連して説明されたような方法で、アンロッキングトランザクション2304における制約によって表すことができる。そのような実施形態において、制約は、現在の状態、および、次の状態がそこから決定される入力によってパラメータ化されている。制約は、アンロッキングトランザクション2304が次の状態値を特定のフィールドに含んでいることを保証するための検査（checks）を含む。
【０３０６】
実施形態において、現在の状態は、トランザクションに埋め込まれたパラメータとして表されており、そして、アンロッキングトランザクション2304は、アンロッキングトランザクション2304にも埋め込まれている次の状態値を有する。次の状態値は、アンロッキングトランザクション2304のフィールド値セットの中でスマートコントラクトに対する現在の状態であり、上述のように、アンロッキングトランザクション2304が作成されるときにアクセス可能なものである。いくつかの実施形態においては、少なくとも１つの入力が、アンロッキングトランザクション2304が作成される時点で決定されるパラメータにおいて外部データとして提供される。セキュアであるために、そうしたパラメータは、決定済ソースに由来している。このことは、決定論的な（deterministic）状態遷移を提供する。最終的に、図18−図22に関連して上述した自己複製スマートコントラクトのスクリプトを使用することによって、トラストレスな、決定論的ステートマシンの一つの実施形態が作成される。いくつかの実施例において、「トラストレス（”trustless”）」は、制約が満たされている限り、あらゆるエンティティが有効なアンロッキングトランザクションを作成することができるという特性を参照する。しかしながら、いくつかの事例において、エンティティは、必要とされる入力を獲得するために、決定済ソースとインタラクトする必要があり得る。図23−図25に関連して説明された様々な実施形態は、決定済ソースから入力を獲得することを参照するが、いくつかの実施形態においては、シリアライズされた以前トランザクションからといった、未決定ソースから１つまたはそれ以上の入力を獲得することができることが考慮されることに留意する。
【０３０７】
図24は、本開示の一つの実施形態に係るトラストレス決定論的ステートマシンの実施例2400を示している。図24に示されるように、例2400は、状態規則セット2406において第１状態2428A（「S1」）での以前トランザクション2402を含み得る。実施例2400において、状態規則セット2406は、次の状態に対して２つの可能な状態2430A（「S2」または「S3」）を提供する。実施例2400を見て分かるように、アンロッキングトランザクション2404は、入力として、そのアンロッキングスクリプトにおける入力2426および以前トランザクション2402のフィールド値セットに埋め込まれている第１状態2428A（「S1」）を捉えて、状態規則セット2406から適切な第２状態2428B（「S2」）を決定する。実施例2400を見てさらに分かるように、状態遷移行列が、今や、第２状態2428Bからの次の状態遷移のために可能な新しい状態2430B（「S4」または「S5」）を提供する。状態規則セット2406は、現在の状態および１つまたはそれ以上の入力によってパラメータ化されたスイッチ文（switch  statement）、または、他の条件文（例えば、”if-then-else”）として符号化され得ることに留意する。
【０３０８】
実施形態において、各可能な状態は、自己複製ロッキングスクリプトにおいて、状態遷移行列といった、状態変化のための規則セットで表現され、そして、特定のトランザクションは、特定の状態におけるステートマシンを表している。そうした実施形態において、トランザクションのロッキングスクリプトは、デジタルアセットのコントロールが、現在のトランザクションにリンクされる必要がある、次のトランザクションに移転しようと試みる全ての（every）アンロッキングトランザクションに対して複製される。このプロセスは、終了条件が満足されるまで反復される。入力が固定されておらず、かつ、未決定データであり得るので、ステートマシンの状態は、特定の外部入力に基づいて変化するように作成することができる。従って、未決定データは、次の状態に影響し得る入力を提供する。
【０３０９】
一つの説明的な例として、アリスはいくらかの金をBobに貸し、そして、ボブはアリスに返済することに同意している。本開示において説明されるように、トラストレスな、確率論的ステートマシンは、ボブがアリスに対して行う送金（transfer）を表現するスマートコントラクトとして実装され得る。例えば、スマートコントラクトは、今後３ヶ月についてボブが毎月アリスに対する支払いを行い、そして、支払いがされない場合に、ボブの負債（debt）が債権回収段階に入るように構築することができる。従って、ボブが月毎に送金を行う限り、現在状態は、返済（repayment）状態のままである。しかしながら、ボブが送金しなかったことを示す入力を外部エンティティが提供すると、次いで、状態は、ミス送金状態（missed  transfer  state）に分岐する。ミス送金状態において、アリスは、トランザクションをリリース（release）し、そして、債権回収者に引き渡すことができる。そうすると、トラストレス決定論的ステートマシンは、債権回収状態に切り替わる。債権回収状態において、債権回収者は、ボブから債権を回収する。そうしたスマートコントラクトは、図23−図25に示される実施形態のスクリプトにおける変形を使用して、作成することができる。
【０３１０】
別の実施例においては、アリスは非常に慈善的な人物であり、毎月１単位のデジタルアセットを寄付している。彼女の規則は、誰でもデジタルアセットを請求できるが、月毎に１単位だけ請求することができるというものである。アリスは、本開示において説明される方法でスマートコントラクトを作成し、そして、３単位のデジタルアセットの初期プール（initial  pool）と共にシード（seed）する。アリスは、任意のエンティティが月毎に１単位のデジタルアセットを獲得できるようにするスクリプトを構築することができる。デジタルアセットの残りの部分は、後続のスマートコントラクトに対して複製される。以下の表は、本開示のトラストレス決定論的ステートマシンを実装するアンロッキングスクリプトおよびロッキングスクリプトの一つの実施例を示している。
【表１２−１】
2020521371.tif 000015
【表１２−２】
2020521371.tif 000016
【０３１１】
図25は、様々な実施形態に従った、トラストレスな、決定論的ステートマシンのためのプロセス2500に係る一つの実施例を示すフローチャートである。プロセス2500のいくつか又は全て（または、あらゆる他の説明されるプロセス、または、これらのプロセスの変形及び／又は組合せ）は、実行可能な命令及び／又は他のデータを用いて構成された１つまたはそれ以上のコンピュータシステムのコントロールの下で実行され得る。そして、１つまたはそれ以上のプロセッサ上でまとめて実行される実行可能命令として実装され得る。実行可能命令及び／又は他のデータは、非一時的コンピュータ読取可能記憶媒体において保管され得る（例えば、コンピュータプログラムは、磁気媒体、光学媒体、またはフラッシュ媒体において永続的に保管される）。
【０３１２】
例えば、プロセス2500のいくつか又は全ては、図1の例示的なブロックチェーンネットワーク100といった、ブロックチェーンネットワーク内の検証ノードによって実行され得る。そうした検証ノードは、任意の適切なコンピューティングデバイスから構成され得る（例えば、データセンター内のサーバ、クライアントコンピューティングデバイス、計算リソースサービスプロバイダの分散システムにおける複数のコンピューティングデバイス、または、図26のコンピューティングデバイス2600といった、任意の適切な電子クライアントデバイスによる）。プロセス2500は、一連のオペレーションを含んでおり、そこで、自己複製スマートコントラクトのロッキングスクリプトが検証され、シリアライズされた以前トランザクションから現在の状態が得られ、アンロッキングスクリプトから入力が得られ、そして、状態規則セットに少なくとも部分的に基づいて次の状態が決定される。プロセス2500は、表12に見られる例示的なスクリプトの変形を反映している。
【０３１３】
2502において、システムはアンロッキングトランザクションを受信する。システムは、アンロッキングトランザクションのアンロッキングスクリプトを実行することによって開始する。それは、シリアライズされた以前トランザクションおよびロッキングスクリプトの中に埋め込まれた入力がスタックに置かれるようにさせる。これらの入力は、2512において取出される（retrieved）。2504では、プロセス2500を実行しているシステムが、終了条件が満たされているか否かを判断する。終了条件は、図19−22に関連して説明したような終了条件であってよい。実施形態において、終了条件は、満たされたときに、ステートマシンの遷移を終了させるものである。終了条件が満たされた場合、プロセス2500を実行しているシステムは、2506へ進み、そうすると、トラストレスな、決定論的ステートマシンは、自己複製を停止する。
【０３１４】
2508において、システムは、図22の2212で説明された方法で、以前トランザクションのロッキングスクリプトが、アンロッキングトランザクションのロッキングスクリプトと一致することを検証する。ロッキングスクリプトが一致しない場合に、検証は失敗し、そして、アンロッキングトランザクションは有効にされない。さもなければ、ロッキングスクリプトが一致する場合に、2510において、システムはシリアライズされた以前トランザクションから可能な状態セット（a  set  of  possible  states）の現在の状態を抽出する。2512において、システムは、ロッキングスクリプトの実行の結果として、スタック上に置かれた入力（input  or  inputs）を獲得する。次に、2514において、システムは、現在の状態および入力に基づいて、トラストレスな、決定論的ステートマシンについて可能な状態セットの次の状態を決定するために、状態規則セットを適用する。2516において、システムは、次の状態（例えば、適用可能である場合に、状態変数および他の状態関連データ）がアンロッキングトランザクションに埋め込まれていることを検証する。システムは、また、ロッキングスクリプトにおいて指定されるように、あらゆる残りの制約も適用し得る。2502-16のオペレーションが成功裡に完了した後、プロセスは2500で終了し、そうすると、アンロッキングトランザクションは、プロセスを実行しているシステムによって、有効であるとみなすことができる。2502-18において実行されるオペレーションの１つまたはそれ以上は、並列を含み、様々な順序および組合せにおいて実行され得ることに留意する。
【０３１５】
開示された実施形態を説明するコンテクストにおいては、別段の規定がない限り、「命令」が通常は単独では実行しないオペレーション（例えば、データの送信、計算、等）を実行する、実行可能な命令（コード、アプリケーション、エージェント、等としても参照されるもの）に関する表現の使用は、命令がマシンによって実行されていることを意味しており、それによって、指定されたオペレーションをマシンに実行させている、ことに留意する。
【０３１６】
図26は、本開示の少なくとも１つの実施形態を実施するために使用され得る、コンピューティングデバイス2600の例示的な単純化されたブロック図である。様々な実施形態において、コンピューティングデバイス2600は、上記に例示され、説明されたシステムのいずれかを実装するために使用され得る。例えば、コンピューティングデバイス2600は、データサーバ、ウェブサーバ、ポータブルコンピューティングデバイス、パーソナルコンピュータ、または任意の電子コンピューティングデバイスとしての使用のために構成され得る。図26に示されるように、コンピューティングデバイス2600は、バスサブシステム2604を介して多数のペリフェラルサブシステムと通信し、そして、動作可能に結合されるように構成され得る、１つまたはそれ以上のプロセッサ2602を含んでよい。プロセッサ2602は、本開示の実施形態における監視モデル（supervised  model）のランダムフォレスト（random  forest）における決定木（decision  tree）のトラバーサル（traversal）のために利用され得る（例えば、様々な検索語の逆文書頻度（inverse  document  frequency）の評価を生じさせる）。これらのペリフェラルサブシステムは、ストレージサブシステム2606を含んでよく、メモリサブシステム2608およびファイル／ディスクストレージサブシステム2610、１つまたはそれ以上のユーザインターフェイス入力装置2612、１つまたはそれ以上のユーザインターフェイス出力装置2614、およびネットワークインターフェイスサブシステム2616を備えている。そうしたストレージサブシステム2606は、本開示において説明されるトランザクションに関連する詳細、本開示において説明される履歴レコードのデータベース、および本開示における監視モデルの決定ルール（decision  rule）の保管といった、情報の一時的または長期間の保管のために使用されてよい。
【０３１７】
バスサブシステム2604は、コンピューティングデバイス2600の様々なコンポーネントおよびサブシステムが、意図されるように相互に通信することを可能にするメカニズムを提供することができる。バスサブシステム2604は、単一のバスとして模式的に示されているが、バスサブシステムの代替的な実施形態は、複数のバスを利用し得る。ネットワークインターフェイスサブシステム2616は、他のコンピューティングデバイスおよびネットワークへのインターフェイスを提供し得る。ネットワークインターフェイスサブシステム2616は、他のシステムからデータを受信し、そして、コンピューティングデバイス2600から他のシステムへデータを送信するためのインターフェイスとして機能し得る。例えば、ネットワークインターフェイスサブシステム2616は、データ技術者が、ユーザデータセンターといった、遠隔地に居る間にデータを送信および受信できるように、データ技術者がデバイスを無線ネットワークに接続することを可能にし得る。バスサブシステム2604は、詳細、検索語、等といったデータを、本開示の監視モデルに通信するために利用されてよく、そして、監視モデルの出力を、１つまたはそれ以上のプロセッサ2602に対して、かつ、ネットワークインターフェイスサブシステム2616を介して商人（merchant）及び／又は債権者（creditor）に対して通信するために利用されてよい。
【０３１８】
ユーザインターフェイス入力装置2612は、１つまたはそれ以上のユーザ入力装置を含んでよい。キーボードや、統合マウス、トラックボール、タッチパッド、またはグラフィックスタブレットといったポインティングデバイスや、スキャナや、バーコードスキャナや、ディスプレイの中に組み込まれたタッチスクリーンや、音声認識システム、マイクロフォンといった音声入力装置や、他のタイプの入力装置といったものである。一般的に、用語「入力装置（”input  device”）」の使用は、コンピューティングデバイス2600に対して情報を入力するためのあらゆる可能なタイプの装置およびメカニズムを含むように意図されている。１つまたはそれ以上のユーザインターフェイス出力装置2614は、ディスプレイサブシステム、プリンタ、またはオーディオ出力装置といった非視覚的ディスプレイ、等を含んでよい。ディスプレイサブシステムは、ブラウン管（CRT）や、液晶ディスプレイ（LCD）、発光ダイオード（LED）ディスプレイといったフラットパネル装置や、またはプロジェクションもしくは他のディスプレイ装置であってよい。一般的に、用語「出力装置」の使用は、コンピューティングデバイス2600から情報を出力するためのあらゆる可能なタイプの装置およびメカニズムを含むように意図されている。１つまたはそれ以上のユーザインターフェイス出力装置2614は、例えば、ユーザインターフェイスを提示するために使用されてよく、ここにおいて説明されたプロセスおよび変形を実行しているアプリケーションとのユーザ対話（interaction）を、そうした対話が適切であり得る場合に、促進する。
【０３１９】
ストレージサブシステム2606は、本開示の少なくとも１つの実施形態の機能性を提供し得る基本プログラミングおよびデータ構造を保管するためのコンピュータ読取可能記憶媒体を提供し得る。アプリケーション（プログラム、コードモジュール、命令）は、１つまたはそれ以上のプロセッサによって実行されるとき、本開示の１つまたはそれ以上の実施形態に係る機能性を提供することができ、そして、ストレージサブシステム2606において保管され得る。これらのアプリケーションモジュールまたは命令は、１つまたはそれ以上のプロセッサ2602によって実行され得る。ストレージサブシステム2606は、本開示に従って使用されるデータを保管するためのリポジトリ（repository）を追加的に提供し得る。ストレージサブシステム2606は、メモリサブシステム2608およびファイル／ディスクストレージサブシステム2610を含み得る。
【０３２０】
メモリサブシステム2608は、プログラム実行の最中に命令およびデータを保管するためのメインランダムアクセスメモリ（RAM）2618および固定された命令が保管され得るリードオンリーメモリ（ROM）2620を含み、多数のメモリを有し得る。ファイル／ディスクストレージサブシステム2610は、プログラムファイルおよびデータファイルのための非一時的な永続性の（不揮発性）ストレージを備えてよく、そして、ハードディスクドライブ、関連するリムーバブル媒体と一緒にフロッピー（登録商標）ディスクドライブ、コンパクトディスクリードオンリーメモリドライブ（CD-ROM）、光学式ドライブ、リムーバブル媒体カートリッジ、および、他の同様の記憶媒体を含み得る。
【０３２１】
コンピューティングデバイス2600は、少なくとも１つのローカルクロック2624を含み得る。ローカルクロック2624は、特定の開始日から発生した時間（numbers  of  ticks）を表すカウンタであり、そして、コンピューティングデバイス2600の中に一体的に配置され得る。
【０３２２】
ローカルクロック2624は、特定のクロックパルスにおいて、コンピューティングデバイス2600のためのプロセッサ及びそこに含まれる全てのサブシステムにおけるデータ転送を同期させるために使用され、そして、コンピューティングデバイス2600とデータセンター内の他のシステムとの間の同期オペレーションを調整するために使用され得る。一つの実施形態において、ローカルクロック2624は、原子時計（atomic  clock）である。別の実施形態において、ローカルクロックは、プログラム可能なインターバルタイマである。
【０３２３】
コンピューティングデバイス2600は、ポータブルコンピューティングデバイス、タブレットコンピュータ、ワークステーション、または、以下に記載されるあらゆる他の装置を含む、様々なタイプのものであってよい。追加的に、コンピューティングデバイス2600は、１つまたはそれ以上のポート（例えば、USB、ヘッドフォンジャック、ライティングコネクタ（Lightning  connector）、等）を介してコンピューティングデバイス2600に接続され得る別の装置を含んでよい。コンピューティングデバイス2600に接続され得る装置は、光ファイバコネクタを受け入れるように構成された複数のポートを含んでよい。従って、この装置は、光信号を、装置を接続しているポートを介してコンピューティングデバイス2600へ処理のために送信され得る電気信号に変換するように構成されてよい。コンピュータおよびネットワークの絶えず変化する性質のため、図26に示されるコンピューティングデバイス2600の説明は、装置の好ましい実施形態を説明する目的のための特定の例としてだけ意図されたものである。図26に示されるシステムより多くの又は少ないコンポーネントを有する他の多くの構成が可能である。
【０３２４】
本明細書および図面は、従って、限定的な意味ではなく、むしろ、例示的な意味に考えられるべきである。しかしながら、請求項に記載される本発明の範囲から逸脱することなく、様々な修正および変更が成され得ることが明らかであろう。同様に、他の変形は本開示の範囲内のものである。従って、開示された技術は、様々な修正および代替的な構成を受けやすいが、それらの所定の例示された実施形態が、図面に示され、そして、上記で詳細に説明されてきた。しかしながら、本発明を開示された特定の形式に限定する意図は存在せず、逆に、添付の請求項において定義されているような、本発明の範囲内にある全ての変更、代替的な構成、および均等物をカバーする意図であることが理解されるべきである。
【０３２５】
用語「一つの（"a"と"an"）」および「その（"the"）」、ならびに、開示された実施形態を説明するコンテクスト（特に、以降の請求項のコンテクスト）における類似の参照の使用は、別段の指示がない限り、またはコンテクストにより明らかに矛盾しない限り、単数および複数の両方をカバーするものと解釈される。用語「含む（”comprising”、”having”、および”containing”）」は、別段の記載がない限り、オープンエンド（open-end）な用語（すなわち、「含むが、限定されない（”including,  but  not  limited  to”）」を意味する）として解釈される。用語「接続された（”connected”）」は、変更されず、かつ、物理的接続を指す場合には、たとえ何らかの介在するものが存在しても、部分的または全体的に、内部に含まれ、取り付けされ、または、一緒に結合されているものと解釈される。本開示における値の範囲の引用は、別段の指示がない限り、範囲内に入るそれぞれ別個の値を個々に参照する簡略された方法として機能するように単に意図されたものであり、そして、それぞれ別個の値はあたかも個々に引用されているかのように明細書の中に組み込まれている。用語「セット（”set”）」（例えば、「アイテムセット（”a  set  of  items”）」または「サブセット（”subset”）」の使用は、コンテクストによる別段の注記または矛盾がない限り、１つまたはそれ以上のメンバーを含む空でない（nonempty）収集として解釈されるべきである。さらに、コンテクストによる別段の注記または矛盾がない限り、対応するセットに係る用語「サブセット」は、必ずしも対応するセットの適切なサブセットを示すものではないが、サブセットおよび対応するセットは同等であってよい。
【０３２６】
「A、B、およびCのうち少なくとも１つ（”at  least  one  of  A,B,and  C”または”at  least  one  of  A,B  andC”）」の形式のフレーズといった結合的な言語は、特に別段の記載がない限り、または、コンテクストによって明らかに矛盾しない限り、一般的に使用されるコンテクストとして理解され、アイテム、用語、等が、AまたはBまたはCのいずれか、もしくは、AおよびBおよびCのセットのうち任意の空でないサブセットであり得ることを示す。例えば、３つのメンバーを有するセットの例示的な例において、結合的な言語「A、B、およびCのうち少なくとも１つ」は、以下の集合（set）のうちいずれかを指す。｛A｝、｛B｝、｛C｝、｛A,B｝、｛A,C｝、｛A,B,C｝。従って、そうした結合的な言語は、一般的に、所定の実施形態が、少なくとも１つのA、少なくとも１つのB、および、少なくとも１つのCがそれぞれ存在するように要求することを意味するようには意図されていない。
【０３２７】
説明されたプロセスのオペレーションは、別段の指示がない限り、またはコンテクストにより明らかに矛盾しない限り、任意の適切な順序で実行することができる。説明されるプロセス（または、その変形及び／又は組合せ）は、実行可能な命令を伴って構成される１つまたはそれ以上のコンピュータシステムのコントロールの下で実行され、そして、ハードウェアまたはそれらの組合せによって、１つまたはそれ以上のプロセッサ上でまとまって実行されるコード（例えば、実行可能な命令、１つまたはそれ以上のコンピュータプログラム、または１つまたはそれ以上のアプリケーション）として実装され得る。コードは、例えば、１つまたはそれ以上のプロセッサによって実行可能な複数の命令を含むコンピュータプログラムの形式で、コンピュータ読取可能記憶媒体上に保管され得る。コンピュータ読取可能記憶媒体は、非一時的なものであり得る。
【０３２８】
提供されるあらゆる全ての実施例、または、例示的な言語（例えば、「といった（”such  as”）」）の使用は、本発明の実施形態をより良く明確にするようにだけ意図されたものであり、そして、他に請求されない限り、本発明の範囲を限定するものではない。明細書における言語は、任意の請求されていない要素を本発明の実施に不可欠なものとして示しているものと解釈されてはならない。
【０３２９】
本発明を実施するために発明者に知られているベストモードを含めて、本開示の実施形態が説明されている。これらの実施形態の変形は、前述の説明を読めば、当業者にとって明らかになり得る。発明者は、そうした変形を当業者が適宜採用することを期待しており、そして、発明者は、本開示の実施形態が、特定的に説明された以外のもので実施されるように意図している。従って、本開示の範囲は、適用可能な法律によって許容されるように、添付される請求項に記載された技術的事項（subject  matter）の全ての変更および均等物を含んでいる。さらに、上述のエレメントのあらゆる可能な変形における任意の組合せは、別段の指示がない限り、またはコンテクストにより明らかに矛盾しない限り、本開示の範囲に包含されるものである。
【０３３０】
刊行物、特許出願、および特許を含む、引用された全ての参考文献は、まるで各参考文献が個別にかつ特定的に参照により包含され、そして、その全体が明らかであるかのように、同じ程度に、参考として本明細書に組み込まれている。
【０３３１】
上述の実施形態は、本発明を限定するものではなく、むしろ本発明を例示するものであること、および、当業者は、添付の請求項によって定義されるように、本発明の範囲から逸脱することなく、多くの代替的な実施形態を設計することができることに留意すべきである。請求項においては、括弧内に置かれたあらゆる参照符号は、クレームを限定するものとして解釈されてはならない。用語「含む（”comprising”、”comprises”）」、等は、あらゆる請求項または明細書全体において列挙されたもの以外の要素またはステップの存在を排除するものではない。本明細書において、「含む（”comprises”）」とは、「含む、または、から構成される」ことを意味し、そして、「含む（”comprising”）」とは、「含んでいる、または、から構成されている」ことを意味する。要素の単数形の参照は、そうした要素の複数形の参照を排除するものではなく、そして、その逆もまた同様である。本発明は、いくつかの別個の要素を含むハードウェアによって、および、適切にプログラムされたコンピュータによって実施することができる。いくつかの手段を列挙している装置クレームにおいて、これらの手段のいくらかは、１つおよび同じハードウェアのアイテムによって具体化され得る。所定の手段が相互に異なる従属請求項に記載されているという単なる事実は、これらの手段の組合せが有利に利用され得ないことを示すものではない。
【図１】
2020521371.tif 000017
【図２】
2020521371.tif 000018
【図３】
2020521371.tif 000019
【図４】
2020521371.tif 000020
【図５】
2020521371.tif 000021
【図６】
2020521371.tif 000022
【図７】
2020521371.tif 000023
【図８】
2020521371.tif 000024
【図９】
2020521371.tif 000025
【図１０】
2020521371.tif 000026
【図１１】
2020521371.tif 000027
【図１２】
2020521371.tif 000028
【図１３】
2020521371.tif 000029
【図１４】
2020521371.tif 000030
【図１５】
2020521371.tif 000031
【図１６】
2020521371.tif 000032
【図１７】
2020521371.tif 000033
【図１８】
2020521371.tif 000034
【図１９】
2020521371.tif 000035
【図２０】
2020521371.tif 000036
【図２１】
2020521371.tif 000037
【図２２】
2020521371.tif 000038
【図２３】
2020521371.tif 000039
【図２４】
2020521371.tif 000040
【図２５】
2020521371.tif 000041
【図２６】
2020521371.tif 000042
【国際調査報告】
2020521371.tif 000043
2020521371.tif 000044