(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-03-07
(45)【発行日】2024-03-15
(54)【発明の名称】アンロッキングトランザクションバイトコードの制約注入
(51)【国際特許分類】
H04L 9/32 20060101AFI20240308BHJP
H04L 9/16 20060101ALI20240308BHJP
H04L 9/08 20060101ALI20240308BHJP
【FI】
H04L9/32 200Z
H04L9/16
H04L9/08 F
【外国語出願】
(21)【出願番号】P 2022133007
(22)【出願日】2022-08-24
(62)【分割の表示】P 2019563172の分割
【原出願日】2018-05-14
【審査請求日】2022-08-24
(32)【優先日】2017-05-22
(33)【優先権主張国・地域又は機関】GB
(32)【優先日】2017-05-22
(33)【優先権主張国・地域又は機関】GB
(32)【優先日】2017-05-22
(33)【優先権主張国・地域又は機関】GB
(32)【優先日】2017-05-22
(33)【優先権主張国・地域又は機関】GB
(32)【優先日】2017-05-22
(33)【優先権主張国・地域又は機関】GB
(32)【優先日】2017-05-22
(33)【優先権主張国・地域又は機関】GB
(73)【特許権者】
【識別番号】318001991
【氏名又は名称】エヌチェーン ライセンシング アーゲー
(74)【代理人】
【識別番号】100107766
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【氏名又は名称】伊東 忠彦
(74)【代理人】
【識別番号】100135079
【氏名又は名称】宮崎 修
(72)【発明者】
【氏名】チャン,イーン
(72)【発明者】
【氏名】クレイマー,ディーン
【審査官】行田 悦資
(56)【参考文献】
【文献】特表2018-530175(JP,A)
【文献】特開2016-174426(JP,A)
【文献】米国特許出願公開第2016/0080156(US,A1)
【文献】ANTONOPOULOS, A. M.,ビットコインとブロックチェーン,第1版,日本,NTT出版株式会社 長谷部 敏治,2016年07月21日,pp.117-145
(58)【調査した分野】(Int.Cl.,DB名)
H04L 9/32
H04L 9/16
H04L 9/08
(57)【特許請求の範囲】
【請求項1】
方法であって、
ブロックチェーンネットワーク内のノードで、検証する第1トランザクションを受信するステップであり、
前記第1トランザクションは、第1スクリプトを含んでおり、少なくとも、
前記第1トランザクションのフィールド値セットを含み、かつ、
実行された結果として、前記ノードに、前記フィールド値セットを獲得するようにさせる、
ステップと、
第2トランザクションを獲得するステップであり、
前記第2トランザクションは、検証されてきており、かつ、
第2スクリプトを含んでおり、実行された結果として、前記ノードに、データソースと関連付けられた公開鍵を獲得し、かつ、前記公開鍵に少なくとも部分的に基づいて、修正された公開鍵を作成する、ようにさせる、
ステップと、
前記第1スクリプトおよび前記第2スクリプトを実行することによって、前記第1トランザクションを検証するステップと、
を含
み、
前記第2スクリプトは、前記第1トランザクションを検証するための条件セットを課すロッキングスクリプトであり、
前記ロッキングスクリプトの実行は、前記ノードに、前記条件セットが満たされたか否かを判断することによって、前記第1トランザクションを検証するようにさせる、
方法。
【請求項2】
前記ノードは、前記第2スクリプトを使用して、データが、前記修正された公開鍵に少なくとも部分的に基づいて、前記データソースと関連付けられていることを検証する、
請求項1に記載の方法。
【請求項3】
前記修正された公開鍵は、前記公開鍵について楕円曲線点乗算を行うことによって作成される、
請求項1に記載の方法。
【請求項4】
前記第1トランザクションを検証するステップは、前記第1トランザクションを作成したエンティティが秘密情報に対するアクセスを有することを検証することなく、成功裡に実行される
請求項1に記載の方法。
【請求項5】
前記第1スクリプトは、さらに、非対称鍵ペアの秘密暗号鍵を含み、
前記第2スクリプトは、さらに、ノードに、前記秘密暗号鍵およびマスク番号に少なくとも部分的に基づいて、署名を作成するようにさせ、かつ、
前記第1トランザクションを検証するステップは、さらに、前記署名が前記非対称鍵ペアの公開暗号鍵と関連付けられていることを検証するステップを含む、
請求項1乃至4いずれか一項に記載の方法。
【請求項6】
前記第1スクリプトは、さらに、署名ハッシュタイプを指定し、かつ、
前記フィールド値セットは、少なくとも部分的に、前記署名ハッシュタイプに基づいている、
請求項1乃至5いずれか一項に記載の方法。
【請求項7】
前記署名ハッシュタイプは、前記第1トランザクションの前記フィールド値セットのどのフィールド値が署名に含まれるべきかを示す値である、
請求項6に記載の方法。
【請求項8】
前記第1スクリプトは、前記第2スクリプトの条件セットを満たすためのアンロッキングスクリプトである、
請求項1乃至
7いずれか一項に記載の方法。
【請求項9】
前記第1トランザクションを検証するステップは、前記第2トランザクションの未使用トランザクション出力の移転を生じさせる、
請求項1乃至
8いずれか一項に記載の方法。
【請求項10】
前記ノードは、前記ブロックチェーンネットワークにおける少なくとも1つの他のノードに通信可能に結合されているコンピューティングデバイスである、
請求項1至
9いずれか一項に記載の方法。
【請求項11】
前記ブロックチェーンネットワークは、ブロックチェーンプロトコルのインスタンスを実行する分散電子デバイスから構成されている、
請求項1乃至
10いずれか一項に記載の方法。
【請求項12】
前記第1スクリプトは、フィールドセットを含むことにより、前記第1スクリプトの実行の結果として、前記ノードに、前記第2スクリプトに対する入力として利用可能な前記フィールドセットを作成するようにさせる、
請求項1乃至
11いずれか一項に記載の方法。
【請求項13】
システムであって、
プロセッサと、
実行可能な命令を含んでいるメモリであり、
前記実行可能な命令は、前記プロセッサによる実行の結果、前記システムに、請求項1乃至
12いずれか一項に記載の方法を実行させる、
メモリと、
を含む、システム。
【請求項14】
媒体上に実行可能命令が保管された非一時的コンピュータ読取可能記憶媒体であって、
コンピュータシステムのプロセッサによって実行された結果として、前記コンピュータシステムに、請求項1乃至
12いずれか一項に記載の方法を実行させる、
非一時的コンピュータ読取可能記憶媒体。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、一般的に、ブロックチェーントランザクションを含む、分散型台帳技術(distributed ledger technologies)に関する。そして、より特定的には、ブロックチェーントランザクションからアンロッキング(unlocking)トランザクションスクリプト(transaction scripts)へのフィールドの注入(injection)を引き起こすことに関する。本発明は、ブロックチェーンネットワーク上で行われる電子振込み(electronic transfer)に関連するセキュリティを強める(enforce)ために、暗号技術および数学技術を利用する。本発明は、これらに限定されるわけではないが、スマートコントラクト(smart contracts)およびステートマシン(state machines)における使用に特に適している。
【背景技術】
【0002】
この書類において、用語「ブロックチェーン(”blockchain”)」は、全ての形態の電子的な、コンピュータベースな、分散型台帳を含むように使用されている。これらは、コンセンサスベース(consensus-based)ブロックチェーンおよびトランザクションチェーン(transaction-chain)技術、許可型(permissioned)および非許可型(un-permissioned)台帳、共有台帳(shared ledger)、およびそれらの変形を含むものである。ブロックチェーン技術の最も広く知られているアプリケーションはビットコイン台帳(Bitcoin ledger)であるが、他のブロックチェーン実装が提案され、そして、開発されてきている。「ビットコイン(”Bitcoin”)」は、便利および説明の目的のために、本開示において説明される技術の有用なアプリケーションとして参照され得るが、ビットコインは、本開示において説明される技術が適用され得る多くのアプリケーションのうちの1つに過ぎない。しかしながら、本発明は、ビットコインブロックチェーンを用いた使用に限定されるものではないことが留意されるべきである。非商業的なアプリケーションを含む、代替的なブロックチェーン実装およびプロトコルも、また、本発明の範囲内に含まれるものである。例えば、本技術は、暗号通貨(cryptocurrency)の交換が発生するか否かにかかわらず、トランザクション内で符号化(encoded)できる制約(constraints)に関してビットコインと同様な制限を有するブロックチェーン実装を利用することに対する利点を提供する。
【0003】
ブロックチェーンは、ピアツーピア(peer-to-peer)の、電子台帳であり、ブロックから構成されるコンピュータベースの非集中的な(decentralised)分散システムとして実装されており、さらに、トランザクションおよびその他の情報から構成されている。いくつかの実施例において、「ブロックチェーントランザクション(”blockchain transaction”)」は、データおよび条件セット
を含むフィールド値(field values)の構造化されたコレクション(structured collection)を符号化する入力メッセージを参照し、条件セットを満足することは、ブロックチェーンデータ構造に書き込まれるフィールドセット(set of fields)の必須条件(prerequisite)である。例えば、ビットコインについて、各トランザクションは、ブロックチェーンシステムにおける参加者(participants)間でのデジタルアセット(digital assets)のコントロールに係る移転を符号化するデータ構造であり、そして、少なくとも1つの入力および少なくとも1つの出力を含んでいる。いくつかの実装において、デジタルアセットのコントロールの移転は、デジタルアセットの少なくとも一部分を第1エンティティから第2エンティティに対して再結合すること(reassociating)によって実行することができる。各ブロックは、以前ブロック(previous block)のハッシュ(hash)を含んでおり、そうして、ブロックは一緒にチェーン化され、ブロックチェーンの始まり(inception)以降に書き込まれてきた全てのトランザクションの永続的で、イミュータブル(immutable)なレコードを作成する。トランザクションは、トランザクションの入力および出力の中に埋め込まれた(embedded)スクリプト(script)として知られている小さなプログラムを含んでいる。そのトランザクションの出力がどのように、そして、誰によってアクセスできるかを特定するものである。ビットコインのプラットフォームにおいて、これらのスクリプトはスタックベース(stack-based)のスクリプト言語を使用して書かれている。
【0004】
つまり、スタックベースのスクリプト言語は、スタックを利用することができる。スタックについて、値は、スタックのトップ(top)の上にプッシュされ、または、スタックのトップからポップされ得る。スタックに対して実行される様々なオペレーションは、スタックのトップへ、またはトップから、1つまたはそれ以上の値をプッシュすること(pushing)、またはポップすること(popping)を結果として生じ得る。例えば、OP_EQUALオペレーションは、スタックから上位2つのアイテムをポップし、それらを比較し、そして、結果(等しい場合は1、等しくない場合は0)をスタックのトップにプッシュする。スタックに対して実行される他のオペレーション、OP_PICKといったもの、は、スタックのトップ以外の位置からアイテムが選択されるようにし得る。本実施形態のいくつかによって使用されるいくつかのスクリプト言語においては、少なくとも2つのスタックが存在し得る。メインスタックと代替スタックである。スクリプト言語のいくつかのオペレーションは、あるスタックのトップから別のスタックのトップへアイテムを移動することができる。例えば、OP_TOALTSTACKは、メインスタックのトップから代替スタックのトップへ値を移動する。
【0005】
トランザクションがブロックチェーンに書き込まれるためには、それが「検証済(”validated”)」であることを要する。ネットワークノード(マイナー(miner))は、各トランザクションが有効(valid)であることを保証するために作業を行い、無効(invalid)なトランザクションがネットワークからリジェクト(reject)される。1つのノードは、他のノードとは異なる有効性の標準を有することができる。ブロックチェーンにおける有効性はコンセンサスに基づいているので、トランザクションが有効であることに大多数のノードが同意する場合に、トランザクションは有効であるとみなされる。ノードにおいてインストールされているソフトウェアクライアントは、UTXOのロッキング(locking)およびアンロッキング(unlocking)スクリプトを実行することによって、未使用トランザクション(UTXO)を部分的に参照して、トランザクションについてこの検証作業(validation work)を実行する。ロッキングスクリプトおよびアンロッキングスクリプトの実行がTRUEとして評価され、かつ、その他の検証条件が、適用可能であれば、満たされている場合に、トランザクションはノードによって有効である。検証されたトランザクションは、他のネットワークノードに伝搬され、そこで、マイナーノード(miner node)は、トランザクションをブロックチェーンの中に含めるように選択することができる。従って、トランザクションがブロックチェーンに書き込まれるために、トランザクションは、i)そのトランザクションを受け取った第1ノードによって検証されることを要する。トランザクションが検証された場合、ノードは、それをネットワークにおける他のノードへ中継する。そして、トランザクションは、ii)マイナーによって構築された新しいブロックへ追加されることを要し、かつ、iii)マイニングされる(mined)されること、すなわち、過去のトランザクションのパブリック台帳(public ledger)に追加されることを要する。トランザクションを実質的に不可逆にするように、ブロックチェーンに対して十分な数のブロックが追加されたときに、トランザクションが確認された(confirmed)ものとみなされる。
【発明の概要】
【0006】
本開示は、1つまたはそれ以上のブロックチェーンベースのコンピュータプログラムに係る技術的な態様を説明する。ブロックチェーンベースのコンピュータプログラムは、ブロックチェーントランザクションの中に記録されたマシン読取可能、かつ、実行可能なプログラムである。ブロックチェーンベースのコンピュータプログラムは、結果を作成するために入力を処理することができるルールを含み、次いで、それらの結果に応じてアクションが実行されるようにすることができる。ロッキングスクリプトが、アンロッキングおよび以前トランザクションの両方にアクセスできる場合に、ブロックチェーンを利用して、非常にフレキシブルかつ複雑なスマートコントラクトを可能にすることができる。現在の研究の1つの分野は、「スマートコントラクト(”smart contracts”)」を実装するためのブロックチェーンベースのコンピュータプログラムの使用である。自然言語で書かれるであろう従来のコントラクトとは異なり、スマートコントラクトは、マシン読取可能なコントラクトまたは契約(agreement)の条件(terms of)の実行を自動化するようにデザインされたコンピュータプログラムであり得る。
【0007】
実施形態において、特定のエンティティとのインタラクション(interaction)は、スマートコントラクトにおける特定のステップで符号化することができるが、スマートコントラクトは、そうでなければ、自動的に実行され、自己執行的(self-enforced)であり得る。いくつかの実施例において、自動実行は、UTXOの転送を可能にするために成功裡に実行されるスマートコントラクトの実行を指す(refer to)。そうした実施例において、UTXOの転送を生じさせることができる「エンティティ(”entity”)」は、いくらかの秘密の知識を証明するように要求されることなく、アンロッキングスクリプトを作成することができるエンティティを指すことに留意する。別の言葉で言えば、アンロッキングトランザクションは、データのソース(例えば、アンロッキングトランザクションを作成したエンティティ)が暗号的秘密(例えば、秘密非対称鍵(private asymmetric key)、対称鍵、等)に対するアクセスを有することを検証することなく、検証することができる。また、そうした実施例において、自己執行は、制約に従ってアンロッキングトランザクションを実施するようにされているブロックチェーンネットワークの検証ノードを指す。いくつかの実施例において、UTXOを「アンロッキング(”unlocking”)」すること(UTXOを「スペンディング(”spending”)」することとしても知られている)は、技術的な意味で使用されており、UTXOを参照し、そして、有効として実行するアンロッキングトランザクションを作成することを参照している。
【0008】
ブロックチェーントランザクションの出力は、ロッキングスクリプト、および、ビットコインといったデジタルアセットのオーナーシップに関する情報を含んでいる。ロッキングスクリプトは、負担(encumbrance)としても参照され、UTXOを転送するために満たされる必要がある条件を指定することによって、デジタルアセットを「ロック(”locks”)」する。例えば、ロッキングスクリプトは、関連するデジタルアセットをアンロック(unlock)するために、所定のデータがアンロッキングスクリプト内に提供されることを要求することができるだろう。ロッキングスクリプトは、また、ビットコインにおける”scriptPubKey”としても知られている。デジタルアセットをアンロックするためのデータを提供するよう当事者(party)に要求する技術は、ロッキングスクリプトの中にデータのハッシュを埋め込むこと(embedding)を含んでいる。しかしながら、このことは、ロッキングスクリプトが作成された時点でデータが未決定(undetermined)な場合(例えば、知られていない、そして、一定でない)、問題を生じる。
【0009】
従って、これらの態様の1つまたはそれ以上においてブロックチェーン技術を改善する改良された方法及びシステムを提供することが望ましい。従って、本発明に従って、添付の請求項において定義される方法および対応するシステムが提供される。
【0010】
本発明は、検証(verification)方法/システム、及び/又は、ブロックチェーントランザクションの検証をコントロールするためのコントロール方法/システムとして説明され得る。いくつかの実施形態において、検証されたブロックチェーントランザクションは、ブロックチェーンにおけるトランザクションの登録(recordation)を結果として生じ、これは、いくつかのアプリケーションにおいて、ブロックチェーンを介したデジタルアセットの交換(exchange)または移転(transfer)を結果として生じ得るものである。デジタルアセットは、ブロックチェーンによって管理されるリソースの単位(unit)である。デジタルアセットは、いくつかの実施形態において、暗号通貨として使用され得るが、実施形態においては、デジタルアセットが、追加的または代替的に他のコンテクストにおいて使用可能であることが考慮されている。本発明は、デジタルアセットのコントロールについて適用可能であるが、本質的には技術的なものであり、そして、デジタルアセットの移転を必ずしも伴うことなく、ブロックチェーンのデータ構造を利用する他のコンテクストにおいて使用され得ることに留意する。以下に説明されるように、本発明は、また、ブロックチェーンネットワークまたはプラットフォームを介してオペレーションを実行する新しく、改良され、そして、有利な方法のためのセキュリティ方法/システムとして説明され得る。
【0011】
より詳細に以下で説明されるように、一つの実施形態において、ロッキングスクリプトは、入力として、アンロッキングトランザクションのフィールド値セット(set of field values)およびアンロッキングトランザクションのアンロッキングスクリプトから署名のハッシュ(signature hash、SIGHASH)タイプを受信することにより、および、署名作成と検証オペレーションとを実行することにより、アンロッキングトランザクションの所定のフィールドに対するアクセスが与えられ得る。
【0012】
より詳細に以下で説明されるように、一つの実施形態において、ロッキングスクリプトは、アンロッキングトランザクションの所定のフィールドから抽出された、トランザクション識別子(ID)を制約する(constraining)ことによって、シリアライズされた以前トランザクションが、アンロッキングトランザクションのアンロッキングスクリプトの中に含まれるように、以前トランザクションにおけるフィールドセットに対するアクセスが与えられ得る。本実施形態に従って、ブロックチェーントランザクションのロッキングスクリプトの中にシリアライズされた以前トランザクションを注入するために方法が提供され得る。第1トランザクションに対応するフィールド値の第1セットおよび別のトランザクションに対応するフィールド値の第2セットを、入力として、獲得すること、フィールド値の第1セットからトランザクション識別子を抽出すること、および、他のトランザクションがトランザクション識別子に対応することを、フィールド値の第2セットに基づいて、決定することによるものである。
【0013】
より詳細に以下で説明されるように、一つの実施形態において、ロッキングスクリプトおよびアンロッキングスクリプトは、決定済(determined)または未決定(undetermined)ソースのどちらかからの未決定データのセキュア(secure)な提供を可能にするように構成され得る。未決定ソースからのデータを変更から守るために、データが、シリアライズされた以前トランザクションの中に埋め込まれ得る。データがシリアライズされた以前トランザクションの中に存在しても、なお、ロッキングスクリプトがそのデータを所定の値であるように制約していないという意味において、データは未決定とみなされることに留意する。決定済ソースからのデータを変更から守るために、決定済ソースからの公開鍵が、ロッキングスクリプトの中に含められてよい。そこで、データは、公開鍵を修正するために使用され、次いで、修正された秘密鍵を使用して、署名されたデータの署名を検証するために使用され得る。本実施形態に従って、未決定データおよび第2値を獲得する方法が提供され得る。そして、データおよびアンロッキングスクリプトにおいて提供される第2値に基づいて、未決定データがデータソースと関連付けられていることを検証する。
【0014】
より詳細に以下で説明されるように、一つの実施形態においては、以前トランザクションから制約パラメータを抽出すること、および、アンロッキングトランザクションのフィールドに対して制約パラメータを適用することによって、パラメータ化されたスマートコントラクトが作成され得る。パラメータ化されたスマートコントラクトは、決定済または未決定ソースからのアンロッキングトランザクションのアンロッキングスクリプトにおいて提供されるセキュアな、未決定データによってパラメータ化された制約を有しているロッキングスクリプトを通じて具現化され得る。本実施形態に従って、未決定データを獲得するための方法が提供され得る。データから、デジタルアセットの再結合に対して適用される制約セットを決定することができ、そして、制約セットに従って、デジタルアセットを第2エンティティと再結合している。
【0015】
より詳細に以下で説明されるように、一つの実施形態において、スマートコントラクトが、終了条件に到達するまで自己複製的(self-replicating)であるように作成される。本実施形態に従って、終了条件が満たされていることを検査(check)する方法が提供され得る。そして、終了条件が満たされていない場合には、以前トランザクションのロッキングスクリプトが、アンロッキングトランザクションのロッキングスクリプトと一致することを検査する。
【0016】
より詳細に以下で説明されるように、一つの実施形態において、パラメータ化された、自己複製的スマートコントラクトは、トラストレスな、決定論的ステートマシンを作成するために使用され得る。本実施形態に従って、自己複製的ロッキングスクリプトを検証し、そして、決定済ソースからの入力およびトラストレス決定論的ステートマシンの現在の状態に少なくとも部分的に基づいて、トラストレスな決定論的ステートマシンの次の状態を決定するための方法が提供され得る。
【0017】
本開示において説明され、そして、示唆される新規な技術は、ブロックチェーンデータ構造の中に保管されたデータの完全性(integrity)を保証するブロックチェーンの特性を崩壊させる(disrupting)ことなく、ブロックチェーンの機能性を拡張する。例えば、本技術は、計算の分野、特には、検証のための条件が記録の中に埋め込まれている定義されたスマートコントラクトである、デジタル記録検証の分野を改善する。デジタルアセットを再結合するための基準を設定し、そして、実施するために、ブロックチェーンネットワークを利用することによるものである。加えて、本開示において説明および示唆される技術は、ブロックチェーンネットワークの機能性を改善し得る。ブロックチェーントランザクションがステートマシンとして機能することを可能にすることによるものであり、コンピュータプログラムの機能性がそうしたステートマシン内に記録された状態に依存することを可能にする。
【0018】
さらに、本開示において説明および示唆される技術は、セキュリティ上の理由で機能性を制限するように特別にデザインされてきたブロックチェーン技術(例えば、ビットコインのスクリプト)に特に起因する問題を克服するため、コンピュータ技術に必然的に根ざし得る。例えば、スクリプトは、複雑なフローコントロールの機能性、例えば、発生するループ、を元々サポートしていない。この制限の1つの利点は、プログラムが予測可能な実行時間を有していることである。スクリプトを線形(linear)またはツリー状の決定タスクに制限することの別の著しい利点は、このことが無限ループ(infinite loops)を回避することであり、これはドス攻撃(denial of service、DoSまたはDDoS)といったエクスプロイト(exploits)を開始する手段として使用され得るものである。従って、ブロックチェーン転送/交換のセキュリティが、強化され、かつ、維持されているが、メカニズムは、言語自体によっては許可されていない、または、提供されていない機能性を実装するように見い出される必要がある。本発明は、この観点において進歩を提供し、自己複製および自己複製的ブロックチェーントランザクションのロッキングスクリプトの実装を用いて、少なくとも部分的に、ブロックチェーントランザクションの現在の制限に対処している。従って、本発明は、技術的な問題に対して技術的ソリューションを提供し、そして、セキュリティ、ブロックチェーンを介したデジタルアセットの交換/移転の改善されたコントロール、および現在のブロックチェーン関連の機能性の拡張に関して利点を提供する。
【0019】
それゆえ、本発明に従って、添付の請求項において定義されるように、コンピュータ実装方法(および、対応するシステム)が提供され得る。コンピュータ実装方法は、ブロックチェーンデータ制約方法として説明され得る。コンピュータ実施方法は、i)ブロックチェーンネットワーク内のノードにおいて、デジタルアセットのコントロールを移転するための第1トランザクションを受信するステップであり、第1トランザクションは、少なくとも、第1トランザクションのフィールド値セットを含む第1スクリプトを含み、そして、実行された結果、ノードに、フィールド値セットを獲得させる、ステップと、ii)第2トランザクションを獲得するステップであり、第2トランザクションは、デジタルアセットと関連付けられており、かつ、第2スクリプトを含んでおり、実行された結果、第1スクリプトの実行の結果として供給されるフィールド値セットに少なくとも部分的に基づいて、ノードに、少なくとも署名を作成させる、ステップと、iii)第1スクリプトおよび第2スクリプトを実行することによって、第1トランザクションを検証するステップ、を含み得る。
【0020】
第1トランザクションを検証することは、第1トランザクションを作成したエンティティが秘密情報に対するアクセスを有することを検証することなく、成功裡に実行され得る。
【0021】
第1スクリプトは、さらに、非対称鍵ペアの秘密暗号鍵(private cryptographic key)を含み得る。追加的または代替的に、第2スクリプトは、さらに、ノードに、少なくとも部分的に秘密暗号鍵およびマスク番号に基づく署名を作成させ得る。追加的または代替的に、第1トランザクションを検証することは、さらに、署名が非対称鍵ペアの公開暗号鍵と関連付けられていることを検証することを含み得る。
【0022】
第1スクリプトは、さらに、署名ハッシュタイプ(signature hash type)を指定し得る。追加的または代替的に、フィールド値セットは、少なくとも部分的に、署名ハッシュタイプに基づいてよい。
【0023】
署名ハッシュタイプは、第1トランザクションのフィールド値セットのどのフィールド値が署名に含まれるべきかを示す値であり得る。
【0024】
第2スクリプトは、第1トランザクションを検証するための条件セットを課す(impose)ロッキングスクリプトであり得る。追加的または代替的に、ロッキングスクリプトの実行は、ノードに、条件セットが満たされたか否かを判断することによって、第1トランザクションを検証させ得る。
【0025】
第1スクリプトは、第2スクリプトの条件セットを満たすためのアンロッキングスクリプトであり得る。
【0026】
デジタルアセットは、ブロックチェーンネットワークにおける未使用トランザクション出力と関連付けられ得る。
【0027】
ノードは、ブロックチェーンネットワークにおける少なくとも1つの他のノードに通信可能に結合されているコンピューティングデバイスであり得る。
【0028】
ブロックチェーンネットワークは、ブロックチェーンプロトコルのインスタンスを実行する分散電子デバイスから構成され得る。
【0029】
第1スクリプトおよび第2スクリプトは、チューリング不完全命令セット(Turing incomplete instruction set)を使用して書かれ得る。
【0030】
第1スクリプトおよび第2スクリプトは、チューリング完全命令セット(Turing complete instruction set)を使用して書かれている。
【0031】
第1スクリプトは、フィールドのセットを含むことにより、第1スクリプトの実行の結果として、ノードに、第2スクリプトに対する入力として利用可能なフィールドセットを作成させ得る。
【0032】
また、プロセッサ、および、プロセッサによる実行の結果として、システムに、請求項に記載の方法のいずれかを実行させる、実行可能な命令を含んでいるメモリ、を含むシステムを提供することも望ましい。
【0033】
また、コンピュータシステムのプロセッサによって実行される結果として、コンピュータシステムに、請求項に記載の方法のいずれかを少なくとも実行させる実行可能な命令をその上に保管している非一時的コンピュータ読取可能記憶媒体を提供することも望ましい。
【0034】
それゆえ、本発明に従って、添付の請求項に定義されるようなコンピュータ実装方法(および対応するシステム)が提供され得る。コンピュータ実装方法は、ブロックチェーンデータ制約方法として記述され得る。コンピュータ実施方法は、i)ブロックチェーンネットワーク内のノードにおいて、デジタルアセットのコントロールを移転するための第1トランザクションを受信するステップであり、実行された結果として、ノードに、少なくとも、第1トランザクションに対応するフィールド値の第1セットを獲得させ、かつ、特定のトランザクションに対応するフィールド値の第2セットを獲得させる、ステップと、ii)第2トランザクションを獲得するステップであり、第2トランザクションは、デジタルアセットと関連付けられており、かつ、第2スクリプトを含んでおり、実行された結果として、ノードに、少なくとも、第1スクリプトの実行の結果として供給される特定のトランザクションに係るフィール値の第1セットおよび第2セットを獲得させ、フィール値の第1セットからトランザクション識別子を抽出させ、そして、フィール値の第2セットに少なくとも部分的に基づいて、特定のトランザクションがトランザクション識別子に対応していることを検証させる、ステップと、iii)第1スクリプトおよび第2スクリプトを実行することによって、第1トランザクションを検証するステップ、を含み得る。
【0035】
フィールド値の第2セットは、正規化フォーマット(canonicalized format)であり得る。
【0036】
ノードは、フィールド値の第2セットのハッシュを作成することによって、特定のトランザクションがトランザクション識別子に対応することを決定し得る。追加的または代替的に、ノードは、ハッシュがトランザクション識別子と一致することを検証することによって、特定のトランザクションがトランザクション識別子に対応することを決定し得る。
【0037】
特定のトランザクションは、移転されるデジタルアセットのコントロールと関連付けられ得る。
【0038】
特定のトランザクションは、移転されるデジタルアセットとは異なる第2デジタルアセットと関連付けられ得る。
【0039】
第1トランザクションを検証することは、第1トランザクションを作成したエンティティが秘密情報に対するアクセスを有することを検証することなく、成功(succeed)し得る。
【0040】
ノードは、ブロックチェーンネットワークの検証ノードであり得る。
【0041】
第1トランザクションを検証することは、さらに、第1トランザクションの検証に成功した結果として、ブロックチェーンネットワークにおけるブロックチェーンに第1トランザクションを追加することを含み得る。
【0042】
第2スクリプトは、第1トランザクションを検証するための条件セットを課すロッキングスクリプトであり得る。追加的または代替的に、ロッキングスクリプトの実行は、ノードに、条件セットが満たされたか否かを判断することによって、第1トランザクションを検証させ得る。
【0043】
第1スクリプトは、第2スクリプトの条件セットを満たすためのアンロッキングスクリプトであり得る。
【0044】
第1スクリプトは、署名ハッシュタイプを指定し得る。追加的または代替的に、第2スクリプトは、さらに実行された結果として、ノードに、第1スクリプトの実行の結果として供給される署名ハッシュタイプを獲得させ得る。
【0045】
第2スクリプトは、さらに実行された結果として、ノードに、少なくとも部分的に署名ハッシュタイプに基づいて、特定のトランザクションが第1トランザクションと関連するトランザクションのセットのメンバー(member)であることを判断させ得る。
【0046】
第2スクリプトは、さらに実行された結果として、ノードに、少なくとも部分的に署名ハッシュタイプに基づいて、特定のトランザクションが第2トランザクションに対応することを判断させ得る。
【0047】
また、プロセッサ、および、プロセッサによる実行の結果として、システムに、請求項に記載の方法のいずれかを実行させる、実行可能な命令を含んでいるメモリ、を含むシステムを提供することも望ましい。
【0048】
また、コンピュータシステムのプロセッサによって実行される結果として、コンピュータシステムに、請求項に記載の方法のいずれかを少なくとも実行させる実行可能な命令をその上に保管している非一時的コンピュータ読取可能記憶媒体を提供することも望ましい。
【0049】
それゆえ、本発明に従って、添付の請求項に定義されるようなコンピュータ実装方法(および対応するシステム)が提供され得る。コンピュータ実装方法は、ブロックチェーンデータ制約方法として記述され得る。コンピュータ実施方法は、i)ブロックチェーンネットワーク内のノードにおいて、デジタルアセットのコントロールを移転するための第1トランザクションを受信するステップであり、第1トランザクションは第1スクリプトを含んでおり、少なくとも、第1値であり、少なくとも一部分は第2スクリプトによって制約されないデータを含んでいる第1値、および、第2値を含む、ステップと、ii)第2トランザクションを獲得するステップであり、第2トランザクションは、デジタルアセットと関連付けられており、そして、実行された結果として、ノードに、少なくとも、第1スクリプトの実行の結果として第1値および第2値を獲得させ、かつ、第1値および第2値に少なくとも部分的に基づいて、データが特定のソースと関連付けられていることを検証させる、ステップと、iii)第1スクリプトおよび第2スクリプトを実行することによって、第1トランザクションを検証するステップ、を含み得る。
【0050】
第2スクリプトは、第2トランザクションを検証するための条件セットを含むロッキングスクリプトであり得る。追加的または代替的に、第1スクリプトは、ロッキングスクリプトの条件セットを満たすためのアンロッキングスクリプトであり得る。
【0051】
第1トランザクションを検証することは、第1トランザクションを作成したエンティティが秘密情報に対するアクセスを有することを検証することなく、実行され得る。
【0052】
データがデータソースと関連付けられていることの検証の失敗は、第1トランザクションの検証の失敗を生じさせ得る。
【0053】
特定なソースのアイデンティティは、第2スクリプトによって制約されなくてよい。
【0054】
特定のトランザクションは、データの特定のソースであり得る。追加的または代替的に、第1値は、特定のトランザクションのフィールド値セットであり得る。追加的または代替的に、第2値は、特定のトランザクションと関連付けられたトランザクション識別子を含み得る。第2スクリプトは、特定のトランザクションがトランザクション識別子に対応することを検証することによって、データがデータソースと関連付けられていることを検証し得る。
【0055】
第2スクリプトは、トランザクション識別子が特定のトランザクションのフィールドセットのハッシュと一致することを検証することによって、特定のトランザクションがトランザクション識別子に対応することを検証し得る。
【0056】
第1スクリプトは、特定のトランザクションのフィールドセットを含むことによって、ノードに、第1スクリプトの実行の結果として、特定のトランザクションのフィールドセットを、第2スクリプトに対する入力として利用可能にさせ得る。
【0057】
特定のトランザクションは、第2トランザクションであり得る。
【0058】
データは、特定のトランザクションのフィールドにおいて符号化され得る。
【0059】
第2スクリプトは、特定のソースのアイデンティティを制約し得る。
【0060】
第2値は、署名であり得る。追加的または代替的に、第2スクリプトは、さらに、ノードに、データソースと関連付けられた公開鍵を獲得させ、そして、追加的または代替的に、少なくとも部分的に、公開鍵およびデータに基づいて、修正された公開鍵を作成させ得る。追加的または代替的に、第2スクリプトは、少なくとも部分的に修正された公開鍵に基づいて、データがデータソースと関連付けられていることを検証し得る。
【0061】
修正された公開鍵は、データの値により公開鍵について楕円曲線点乗算(elliptic curve point multiplication)を実行することによって作成され得る。
【0062】
また、プロセッサ、および、プロセッサによる実行の結果として、システムに、請求項に記載の方法のいずれかを実行させる、実行可能な命令を含んでいるメモリ、を含むシステムを提供することも望ましい。
【0063】
また、コンピュータシステムのプロセッサによって実行される結果として、コンピュータシステムに、請求項に記載の方法のいずれかを少なくとも実行させる実行可能な命令をその上に保管している非一時的コンピュータ読取可能記憶媒体を提供することも望ましい。それゆえ、本発明に従って、添付の請求項において定義されるように、コンピュータ実装方法(および、対応するシステム)が提供され得る。コンピュータ実装方法は、ブロックチェーンデータ制約方法として説明され得る。コンピュータ実施方法は、i)ブロックチェーンネットワーク内のノードにおいて、デジタルアセットのコントロールを移転するための第1トランザクションを受信するステップであり、第1トランザクションは、第1スクリプトを含み、実行された結果として、ノードに、第1トランザクションのデータおよびフィールド値の第1セットを少なくとも獲得させる、ステップと、ii)第2トランザクションを獲得するステップであり、第2トランザクションは、第2スクリプトを含み、実行された結果として、ノードに、少なくとも、制約セットを、少なくとも部分的に第1スクリプトの実行の結果として提供されたデータに基づいて、決定させ、かつ、少なくとも部分的にフィールド値の第1セットに基づいて、第1トランザクションに対する制約セットを検証させる、ステップと、iii)第1スクリプトおよび第2スクリプトの実行の結果として、制約セットに従って、デジタルアセットのコントロールを移転するステップ、を含み得る。
【0064】
デジタルアセットのコントロールを移転することは、第1トランザクションを作成したエンティティが秘密情報に対するアクセスを有することを検証することなく、実行され得る。
【0065】
データのソースのアイデンティティは、第2スクリプトによって制約されなくてよい。
【0066】
第2スクリプトは、データのソースのアイデンティティを制約し得る。
【0067】
第2スクリプトは、データを検証するために使用可能な特定のデータソースの公開鍵を含み得る。
【0068】
データを検証することは、少なくとも部分的に公開鍵およびデータに基づいて、修正された公開鍵を作成すること、および、追加的または代替的に、少なくとも部分的に修正された公開鍵に基づいて、データがデータソースと関連付けられていると判断することを含み得る。
【0069】
制約セットは、少なくとも部分的に、データにおけるパラメータセットから導出され得る。
【0070】
制約セットを満たすことは、デジタルアセットの少なくとも一部分を再結合するための条件であり得る。
【0071】
デジタルアセットのコントロールを移転することは、第1エンティティから第2エンティティへデジタルアセットを再結合することを含み得る。
【0072】
第2エンティティのアイデンティティは、少なくとも部分的に制約セットに基づいて判断され得る。
【0073】
データのソースは、第2トランザクションであり得る。追加的または代替的に、データは、第2トランザクションのフィールド値の第2セットを含んでいる。追加的または代替的に、第2スクリプトの実行は、制約セットを、少なくとも部分的にフィールド値の第2セットから導出されるようにさせ得る。
【0074】
第2エンティティのアイデンティティは、少なくとも部分的に制約セットに基づいて決定され得る。
【0075】
制約セットは、さらに、デジタルアセットの少なくとも一部分を、第3エンティティと再び関連付けられる(reassociated with)ようにし得る。
【0076】
また、プロセッサ、および、プロセッサによる実行の結果として、システムに、請求項に記載の方法のいずれかを実行させる、実行可能な命令を含んでいるメモリ、を含むシステムを提供することも望ましい。
【0077】
また、コンピュータシステムのプロセッサによって実行される結果として、コンピュータシステムに、請求項に記載の方法のいずれかを少なくとも実行させる実行可能な命令をその上に保管している非一時的コンピュータ読取可能記憶媒体を提供することも望ましい。
【0078】
それゆえ、本発明に従って、添付の請求項に定義されるようなコンピュータ実装方法(および対応するシステム)が提供され得る。コンピュータ実装方法は、ブロックチェーンデータ制約方法として記述され得る。コンピュータ実施方法は、i)ブロックチェーンネットワーク内のノードにおいて、デジタルアセットのコントロールを移転するための第1トランザクションを受信するステップであり、第1トランザクションは第1スクリプトを含み、実行された結果として、ノードに、少なくとも、第1トランザクションのフィールド値の第1セットを獲得させ、フィールド値の第1セットは第3スクリプトを含み、かつ、第2トランザクションのフィールド値の第2セットを獲得させ、フィールド値の第2セットは第2スクリプトのコピーを含む、ステップと、ii)第2トランザクションを獲得するステップであり、第2トランザクションは第2スクリプトを含み、実行された結果として、ノードに、終了条件が満たされていないことを判断した結果として、少なくとも、フィールド値の第1セット第3スクリプトを獲得させ、かつ、第2スクリプトのコピーが第3スクリプトと一致することを判断させる、ステップと、iii)第1スクリプトおよび第2スクリプトの実行の結果として、デジタルアセットのコントロールを移転するステップ、を含み得る。
【0079】
第2トランザクションは、デジタルアセットと関連付けられたトランザクションであり得る。追加的または代替的に、第1トランザクションは、第1エンティティから第2エンティティへデジタルアセットの少なくとも一部分を再結合するトランザクションであり得る。
【0080】
第1スクリプトは、第2スクリプトの条件セットを満たすためのアンロッキングスクリプトであり得る。
【0081】
第2スクリプトは、第1トランザクションを検証するための条件セットを課すロッキングスクリプトであり得る。
【0082】
第3スクリプトは、将来トランザクション(future transaction)の検証のための条件セットを課すロッキングスクリプトであり得る。
【0083】
デジタルアセットのコントロールを移転することは、デジタルアセットを第1エンティティから第2エンティティへ再結合することを含み得る。
【0084】
終了条件が満たされていないと判断することは、第2トランザクションと関連付けられたデジタルアセットの量が、デジタルアセットの少なくとも一部分を再結合するのに十分であると判断することを含み得る。
【0085】
第3スクリプトは、フィールド値の第1セットのフィールド値に埋め込まれ得る。
【0086】
ブロックチェーンネットワークは、ブロックチェーンプロトコルのインスタンスを実行する分散電子デバイスから構成され得る。
【0087】
デジタルアセットのコントロールを移転することは、第1トランザクションを作成したエンティティが秘密情報に対するアクセスを有することを検証することなく、実行され得る。
【0088】
第2スクリプトは、さらに、ノードに、デジタルアセットのコントロールを移転するためのさらなる条件として、第1トランザクションが追加の制約を満たすことを検証させ得る。
【0089】
第1トランザクションおよび第2トランザクションは、デジタルアセットと関連付けられた反復スマートコントラクト(repeating smart contracts)のセットのメンバーであり得る。
【0090】
反復スマートコントラクトのセットは、終了条件によって終了され得る。
【0091】
また、プロセッサ、および、プロセッサによる実行の結果として、システムに、請求項に記載の方法のいずれかを実行させる、実行可能な命令を含んでいるメモリ、を含むシステムを提供することも望ましい。
【0092】
また、コンピュータシステムのプロセッサによって実行される結果として、コンピュータシステムに、請求項に記載の方法のいずれかを少なくとも実行させる実行可能な命令をその上に保管している非一時的コンピュータ読取可能記憶媒体を提供することも望ましい。
【0093】
それゆえ、本発明に従って、添付の請求項に定義されるようなコンピュータ実装方法(および対応するシステム)が提供され得る。コンピュータ実装方法は、ブロックチェーンデータ制約方法として記述され得る。コンピュータ実施方法は、i)ブロックチェーンネットワーク内のノードにおいて、デジタルアセットのコントロールを移転するための第1トランザクションを受信するステップであり、第1トランザクションは第1スクリプトを含み、実行された結果として、ノードに、第1トランザクションのフィールド値の第1セット、第2トランザクションのフィールド値の第2セット、および入力を少なくとも獲得させる、ステップと、ii)第2トランザクションを獲得するステップであり、第2トランザクションは規則セット(set of rules)を含む第2スクリプトを含み、第2スクリプトは、実行された結果として、ノードに、少なくとも、第2スクリプトがフィールド値の第1セットに埋め込まれた第3スクリプトと一致することを検証させ、フィールド値の第2セットに少なくとも部分的に基づいて、現在の状態を決定させ、かつ、少なくとも部分的に現在の状態、入力、および規則セットに基づいて、次の状態を決定させ、次の状態がフィールド値の第1セットに含まれることを検証させる、ステップと、iii)第1スクリプトおよび第2スクリプトの実行の結果としてのデジタルアセットのコントロールを移転するステップ、を含み得る。
【0094】
第2スクリプトは、入力ソースのアイデンティティを制約し得る。
【0095】
請求される方法のいずれかは、さらに、入力ソースの暗号的秘密を検証するステップを含み得る。
【0096】
規則セットは、状態遷移行列であり得る。
【0097】
第3スクリプトは、将来トランザクションの検証のための条件セットを課すロッキングスクリプトであり得る。
【0098】
第2スクリプトは、さらに、ノードに、終了条件が満たされていないことを判断させ得る。
【0099】
入力は、フィールド値の第2セットに埋め込まれ得る。
【0100】
終了条件は、第2トランザクションと関連付けられたデジタルアセットが、移転されるのに不十分なサイズであること、であり得る。
【0101】
現在の状態は、第2トランザクションの状態を示し得る。
【0102】
次の状態は、検証において第1トランザクションの状態を示し得る。
【0103】
請求項に記載の方法のいずれも、さらに、第3トランザクションを受信するステップを含み得る。追加的または代替的に、請求項に記載の方法のいずれも、さらに、第1トランザクションから第4スクリプトを獲得するステップを含み、第4スクリプトは、実行された結果として、ノードに、少なくとも部分的に次の状態、第2入力、および規則セットに基づいて、次の状態および現在の状態とは異なる別の状態を決定するようにさせ得る。
【0104】
現在の状態および次の状態は、第1トランザクションおよび第2トランザクションについて可能な状態セットのメンバーであり得る。
【0105】
デジタルアセットのコントロールを移転することは、デジタルアセットを第1エンティティから第2エンティティへ再結合することを含み得る。
【0106】
また、プロセッサ、および、プロセッサによる実行の結果として、システムに、請求項に記載の方法のいずれかを実行させる、実行可能な命令を含んでいるメモリ、を含むシステムを提供することも望ましい。
【0107】
また、コンピュータシステムのプロセッサによって実行される結果として、コンピュータシステムに、請求項に記載の方法のいずれかを少なくとも実行させる実行可能な命令をその上に保管している非一時的コンピュータ読取可能記憶媒体を提供することも望ましい。
【0108】
それゆえ、本発明に従って、添付の請求項に定義されるようなコンピュータ実装方法(および対応するシステム)が提供され得る。コンピュータ実装方法は、ブロックチェーンデータ制約方法として記述され得る。コンピュータ実施方法は、i)ブロックチェーンネットワーク内のノードにおいて、少なくとも、検証する第1トランザクションを受信するステップであり、第1トランザクションは、少なくとも、第1トランザクションのフィールド値セットを含み、そして、実行された結果として、ノードに、フィールド値セットを獲得させる、第1スクリプトを含む、ステップと、ii)第2トランザクションを獲得するステップであり、第2トランザクションは、検証されており、かつ、実行された結果として、ノードに、第1スクリプトの実行の結果として供給されるフィールド値セットに少なくとも部分的に基づいて、署名を少なくとも作成させる、第2スクリプトを含む、ステップと、iii)第1スクリプトおよび第2スクリプトを実行することによって、第1トランザクションを検証するステップ、を含み得る。
【0109】
第1トランザクションを検証することは、第1トランザクションを作成したエンティティが秘密情報に対するアクセスを有することを検証することなく、成功裡に実行され得る。
【0110】
第1スクリプトは、さらに、非対称鍵ペアの秘密暗号鍵を含み得る。追加的または代替的に、第2スクリプトは、さらに、ノードに、秘密暗号鍵およびマスク番号に少なくとも部分的に基づいて、署名を作成させ得る。追加的または代替的に、第1トランザクションを検証することは、さらに、署名が非対称鍵ペアの公開暗号鍵と関連付けられているのを検証することを含み得る。
【0111】
第1スクリプトは、さらに、署名ハッシュタイプを指定し得る。追加的または代替的に、フィールド値セットは、署名ハッシュタイプに少なくとも部分的に基づき得る。
【0112】
署名ハッシュタイプは、第1トランザクションのフィールド値セットのうちどのフィールド値が署名に含まれるべきかを示す値であり得る。
【0113】
第2スクリプトは、第1トランザクションを検証するための条件セットを課すロッキングスクリプトであり得る。追加的または代替的に、ロッキングスクリプトの実行は、ノードに、条件セットが満たされているか否かを判断することによって第1トランザクションを検証させ得る。
【0114】
第1スクリプトは、第2スクリプトの条件セットを満たすためのアンロッキングスクリプトであり得る。
【0115】
第1トランザクションを検証することは、未使用のトランザクション出力の転送を生じさせ得る。
【0116】
ノードは、ブロックチェーンネットワーク内の少なくとも1つの他のノードに通信可能に結合されているコンピューティングデバイスであり得る。
【0117】
ブロックチェーンネットワークは、ブロックチェーンプロトコルのインスタンスを実行する分散電子デバイスから構成され得る。
【0118】
第1スクリプトおよび第2スクリプトは、チューリング不完全命令セットを使用して書かれ得る。
【0119】
第1スクリプトおよび第2スクリプトは、チューリング完全命令セットを使用して書かれている。
【0120】
第1スクリプトは、フィールドのセットを含むことにより、第1スクリプトの実行の結果として、ノードに、第2スクリプトに対する入力として利用可能なフィールドセットを作成させ得る。
【0121】
また、プロセッサ、および、プロセッサによる実行の結果として、システムに、請求項に記載の方法のいずれかを実行させる、実行可能な命令を含んでいるメモリ、を含むシステムを提供することも望ましい。
【0122】
また、コンピュータシステムのプロセッサによって実行される結果として、コンピュータシステムに、請求項に記載の方法のいずれかを少なくとも実行させる実行可能な命令をその上に保管している非一時的コンピュータ読取可能記憶媒体を提供することも望ましい。
【0123】
それゆえ、本発明に従って、添付の請求項に定義されるようなコンピュータ実装方法(および対応するシステム)が提供され得る。コンピュータ実装方法は、ブロックチェーンデータ制約方法として記述され得る。本方法は、i)ブロックチェーンネットワーク内のノードにおいて、第1トランザクションを受信するステップであり、第1トランザクションは第1スクリプトを含み、実行された結果として、ノードに、少なくとも、第1トランザクションに対応するフィールド値の第1セットを獲得させ、かつ、特定のトランザクションに対応するフィールド値の第2セットを獲得させる、ステップと、ii)第2トランザクションを獲得するステップであり、第2トランザクションは、検証されており、かつ、実行された結果として、ノードに、少なくとも、第1スクリプトの実行の結果として供給される特定のトランザクションに係るフィールド値の第1セットおよびフィールド値の第2セットを獲得させ、フィールド値の第1セットからトランザクション識別子を抽出させ、かつ、フィールド値の第2セットに少なくとも部分的に基づいて、特定のトランザクションがトランザクション識別子に対応することを判断させる、ステップと、iii)第1スクリプトおよび第2スクリプトを実行することによって、第1トランザクションを検証するステップ、を含み得る。
【0124】
フィールド値の第2セットは正規化フォーマットであり得る。
【0125】
ノードは、フィールド値の第2セットのハッシュを作成することによって、特定のトランザクションがトランザクション識別子に対応することを決定し得る。追加的または代替的に、ノードは、ハッシュがトランザクション識別子と一致することを検証することによって、特定のトランザクションがトランザクション識別子に対応することを決定し得る。
【0126】
特定のトランザクションは、第1トランザクションを検証した結果として移転されたデジタルアセットのコントロールと関連付けられ得る。
【0127】
特定のトランザクションは、第1トランザクションの検証の結果として移転されたデジタルアセットとは異なる第2デジタルアセットと関連付けられ得る。
【0128】
第1トランザクションを検証することは、第1トランザクションを作成したエンティティが秘密情報に対するアクセスを有することを検証することなく、成功し得る。
【0129】
ノードは、ブロックチェーンネットワークの検証ノードであり得る。
【0130】
第1トランザクションを検証することは、さらに、第1トランザクションの検証に成功した結果として、ブロックチェーンネットワークのブロックチェーンに第1トランザクションを追加することを含み得る。
【0131】
第2スクリプトは、第1トランザクションを検証するための条件セットを課すロッキングスクリプトであり得る。追加的または代替的に、ロッキングスクリプトの実行は、ノードに、条件セットが満たされたか否かを判断することによって、第1トランザクションを検証させ得る。
【0132】
第1スクリプトは、第2スクリプトの条件セットを満たすためのアンロッキングスクリプトであり得る。
【0133】
第1スクリプトは、署名ハッシュタイプを指定し得る。追加的または代替的に、第2スクリプトは、さらに実行された結果として、ノードに、第1スクリプトの実行の結果として供給される署名ハッシュタイプを獲得させ得る。
【0134】
第2スクリプトは、さらに実行された結果として、ノードに、少なくとも部分的に署名ハッシュタイプに基づいて、特定のトランザクションが第1トランザクションと関連するトランザクションのセットのメンバーであることを判断させ得る。
【0135】
第2スクリプトは、さらに実行された結果として、ノードに、少なくとも部分的に署名ハッシュタイプに基づいて、特定のトランザクションが第2トランザクションに対応することを判断させ得る。
【0136】
また、プロセッサ、および、プロセッサによる実行の結果として、システムに、請求項に記載の方法のいずれかを実行させる、実行可能な命令を含んでいるメモリ、を含むシステムを提供することも望ましい。
【0137】
また、コンピュータシステムのプロセッサによって実行される結果として、コンピュータシステムに、請求項に記載の方法のいずれかを少なくとも実行させる実行可能な命令をその上に保管している非一時的コンピュータ読取可能記憶媒体を提供することも望ましい。
【0138】
それゆえ、本発明に従って、添付の請求項に定義されるような方法(および対応するシステム)が提供され得る。本方法は、ブロックチェーンデータ制約方法として記述され得る。本方法は、i)ブロックチェーンネットワーク内のノードにおいて、デジタルアセットのコントロールを移転するための第1トランザクションを受信するステップであり、第1トランザクションは第1スクリプトを含んでおり、少なくとも、第1値であり、少なくとも一部分は第2スクリプトによって制約されないデータを含んでいる第1値、および、第2値を含む、ステップと、ii)第2トランザクションを獲得するステップであり、第2トランザクションは、検証されており、そして、実行された結果として、ノードに、少なくとも、第1スクリプトの実行の結果として第1値および第2値を獲得させ、かつ、第1値および第2値に少なくとも部分的に基づいて、データが特定のソースと関連付けられていることを検証させる、ステップと、iii)第1スクリプトおよび第2スクリプトを実行することによって、第1トランザクションを検証するステップ、を含み得る。
【0139】
第2スクリプトは、第2トランザクションを検証するための条件セットを含むロッキングスクリプトであり得る。追加的または代替的に、第1スクリプトは、ロッキングスクリプトの条件セットを満たすためのアンロッキングスクリプトであり得る。
【0140】
第1トランザクションを検証することは、第1トランザクションを作成したエンティティが秘密情報に対するアクセスを有することを検証することなく、実行され得る。
【0141】
データがデータソースと関連付けられていることの検証の失敗は、第1トランザクションの検証の失敗を生じさせ得る。
【0142】
特定なソースのアイデンティティは、第2スクリプトによって制約されなくてよい。
【0143】
特定のトランザクションは、データの特定のソースであり得る。追加的または代替的に、第1値は、特定のトランザクションのフィールド値セットであり得る。追加的または代替的に、第2値は、特定のトランザクションと関連付けられたトランザクション識別子を含み得る。第2スクリプトは、特定のトランザクションがトランザクション識別子に対応することを検証することによって、データがデータソースと関連付けられていることを検証し得る。
【0144】
第2スクリプトは、実行された結果として、トランザクション識別子が特定のトランザクションのフィールドセットのハッシュと一致することを検証することによって、特定のトランザクションがトランザクション識別子に対応することを検証し得る。
【0145】
第1スクリプトは、特定のトランザクションのフィールドセットを含むことによって、ノードに、第1スクリプトの実行の結果として、特定のトランザクションのフィールドセットを、第2スクリプトに対する入力として利用可能にさせ得る。
【0146】
特定のトランザクションは、第2トランザクションであり得る。
【0147】
データは、特定のトランザクションのフィールドにおいて符号化され得る。
【0148】
第2スクリプトは、特定のソースのアイデンティティを制約し得る。
【0149】
第2値は、署名であり得る。追加的または代替的に、第2スクリプトは、さらに、ノードに、データソースと関連付けられた公開鍵を獲得させ、そして、追加的または代替的に、少なくとも部分的に、公開鍵およびデータに基づいて、修正された公開鍵を作成させ得る。追加的または代替的に、第2スクリプトは、実行された結果として、少なくとも部分的に修正された公開鍵に基づいて、データがデータソースと関連付けられていることを検証し得る。
【0150】
修正された公開鍵は、データの値により公開鍵について楕円曲線点乗算を実行することによって作成され得る。
【0151】
また、プロセッサ、および、プロセッサによる実行の結果として、システムに、請求項に記載の方法のいずれかを実行させる、実行可能な命令を含んでいるメモリ、を含むシステムを提供することも望ましい。
【0152】
また、コンピュータシステムのプロセッサによって実行される結果として、コンピュータシステムに、請求項に記載の方法のいずれかを少なくとも実行させる実行可能な命令をその上に保管している非一時的コンピュータ読取可能記憶媒体を提供することも望ましい。
【0153】
それゆえ、本発明に従って、添付の請求項において定義されるような方法(および、対応するシステム)が提供され得る。本方法は、ブロックチェーンデータ制約方法として説明され得る。本方法は、i)ブロックチェーンネットワーク内のノードにおいて、検証する第1トランザクションを受信するステップであり、第1トランザクションは、第1スクリプトを含み、実行された結果として、ノードに、第1トランザクションのデータおよびフィールド値の第1セットを少なくとも獲得させる、ステップと、ii)第2トランザクションを獲得するステップであり、第2トランザクションは、第2スクリプトを含み、実行された結果として、ノードに、少なくとも、制約セットを、少なくとも部分的に第1スクリプトの実行の結果として提供されたデータに基づいて、決定させ、かつ、少なくとも部分的にフィールド値の第1セットに基づいて、第1トランザクションに対する制約セットを検証させる、ステップと、iii)第1スクリプトおよび第2スクリプトの実行の結果として、制約セットに従って、デジタルアセットのコントロールを移転するステップ、を含み得る。
【0154】
第1トランザクションを検証することは、第1トランザクションを作成したエンティティが秘密情報に対するアクセスを有することを検証することなく、実行され得る。
【0155】
データのソースのアイデンティティは、第2スクリプトによって制約されなくてよい。
【0156】
第2スクリプトは、データのソースのアイデンティティを制約し得る。
【0157】
第2スクリプトは、データを検証するために使用可能な特定のデータソースの公開鍵を含み得る。
【0158】
データを検証することは、少なくとも部分的に公開鍵およびデータに基づいて、修正された公開鍵を作成すること、および、追加的または代替的に、少なくとも部分的に修正された公開鍵に基づいて、データがデータソースと関連付けられていると判断することを含み得る。
【0159】
制約セットは、少なくとも部分的に、データにおけるパラメータのセットから導出され得る。
【0160】
制約セットを満たすことは、デジタルアセットの少なくとも一部分を再結合するための条件であり得る。
【0161】
第1トランザクションを検証することは、デジタルアセットを第1エンティティから第2エンティティへ再び関連付けることを含み得る。
【0162】
制約セットは、さらに、デジタルアセットの少なくとも一部分を、第3エンティティと再び関連付けられるようにし得る。
【0163】
第2エンティティのアイデンティティは、少なくとも部分的に制約セットに基づいて決定され得る。
【0164】
データのソースは、第2トランザクションであり得る。追加的または代替的に、データは、第2トランザクションのフィールド値の第2セットを含んでいる。追加的または代替的に、第2スクリプトの実行は、制約セットを、少なくとも部分的にフィールド値の第2セットから導出されるようにさせ得る。
【0165】
第2エンティティのアイデンティティは、少なくとも部分的に制約セットに基づいて決定され得る。
【0166】
制約セットは、さらに、デジタルアセットの少なくとも一部分を、第3エンティティと再び関連付けられるようにし得る。
【0167】
また、プロセッサ、および、プロセッサによる実行の結果として、システムに、請求項に記載の方法のいずれかを実行させる、実行可能な命令を含んでいるメモリ、を含むシステムを提供することも望ましい。
【0168】
また、コンピュータシステムのプロセッサによって実行される結果として、コンピュータシステムに、請求項に記載の方法のいずれかを少なくとも実行させる実行可能な命令をその上に保管している非一時的コンピュータ読取可能記憶媒体を提供することも望ましい。
【0169】
それゆえ、本発明に従って、添付の請求項に定義されるような方法(および対応するシステム)が提供され得る。本方法は、ブロックチェーンデータ制約方法として記述され得る。本方法は、i)ブロックチェーンネットワーク内のノードにおいて、検証する第1トランザクションを受信するステップであり、第1トランザクションは第1スクリプトを含み、実行された結果として、ノードに、少なくとも、第1トランザクションのフィールド値の第1セットを獲得させ、フィールド値の第1セットは第3スクリプトを含み、かつ、第2トランザクションのフィールド値の第2セットを獲得させ、フィールド値の第2セットは第2スクリプトのコピーを含む、ステップと、ii)第2トランザクションを獲得するステップであり、第2トランザクションは第2スクリプトを含み、実行された結果として、ノードに、終了条件が満たされていないことを判断した結果として、少なくとも、フィールド値の第1セット第3スクリプトを獲得させ、かつ、第2スクリプトのコピーが第3スクリプトと一致することを判断させる、ステップと、iii)第1スクリプトおよび第2スクリプトの実行の結果として、第1トランザクションを検証するステップ、を含み得る。
【0170】
第1スクリプトは、第2スクリプトの条件セットを満たすためのアンロッキングスクリプトであり得る。
【0171】
第2スクリプトは、第1トランザクションを検証するための条件セットを課すロッキングスクリプトであり得る。
【0172】
第3スクリプトは、将来トランザクションの検証のための条件セットを課すロッキングスクリプトであり得る。
【0173】
第2トランザクションは、デジタルアセットと関連付けられたトランザクションであり得る。追加的または代替的に、第1トランザクションは、第1エンティティから第2エンティティへデジタルアセットの少なくとも一部分を再結合するトランザクションであり得る。
【0174】
第1トランザクションを検証することは、デジタルアセットを第1エンティティから第2エンティティに再び関連付けることを含み得る。
【0175】
終了条件が満たされていないことを判断することは、第2トランザクションと関連付けられたデジタルアセットの量がデジタルアセットの少なくとも一部分を再結合するのに十分であると決定することを含み得る。
【0176】
第3スクリプトは、フィールド値の第1セットに係るフィールド値に埋め込まれ得る。
【0177】
ブロックチェーンネットワークは、ブロックチェーンプロトコルのインスタンスを実行する分散電子デバイスから構成され得る。
【0178】
第1トランザクションを検証することは、第1トランザクションを作成したエンティティが秘密情報に対するアクセスを有することを検証することなく、実行され得る。
【0179】
第2スクリプトは、さらに、ノードに、第1トランザクションを検証するためのさらなる条件として、第1トランザクションが追加の制約を満たすことを検証させ得る。
【0180】
第1トランザクションおよび第2トランザクションは、デジタルアセットと関連付けられた反復スマートコントラクトのセットのメンバーであり得る。
【0181】
反復スマートコントラクトのセットは、終了条件によって終了され得る。
【0182】
また、プロセッサ、および、プロセッサによる実行の結果として、システムに、請求項に記載の方法のいずれかを実行させる、実行可能な命令を含んでいるメモリ、を含むシステムを提供することも望ましい。
【0183】
また、コンピュータシステムのプロセッサによって実行される結果として、コンピュータシステムに、請求項に記載の方法のいずれかを少なくとも実行させる実行可能な命令をその上に保管している非一時的コンピュータ読取可能記憶媒体を提供することも望ましい。
【0184】
それゆえ、本発明に従って、添付の請求項に定義されるような方法(および対応するシステム)が提供され得る。本方法は、ブロックチェーンデータ制約方法として記述され得る。本方法は、i)ブロックチェーンネットワーク内のノードにおいて、検証する第1トランザクションを受信するステップであり、第1トランザクションは第1スクリプトを含み、実行された結果として、ノードに、第1トランザクションのフィールド値の第1セット、第2トランザクションのフィールド値の第2セット、および入力を少なくとも獲得させる、ステップと、ii)第2トランザクションを獲得するステップであり、第2トランザクションは規則セットを含む第2スクリプトを含み、第2スクリプトは、実行された結果として、ノードに、少なくとも、第2スクリプトがフィールド値の第1セットに埋め込まれた第3スクリプトと一致することを検証させ、フィールド値の第2セットに少なくとも部分的に基づいて、現在の状態を決定させ、かつ、少なくとも部分的に現在の状態、入力、および規則セットに基づいて、次の状態を決定させ、次の状態がフィールド値の第1セットに含まれることを検証させる、ステップと、iii)第1スクリプトおよび第2スクリプトの実行の結果として、第1トランザクションを検証するステップ、を含み得る。
【0185】
第2スクリプトは、入力ソースのアイデンティティを制約し得る。
【0186】
請求される方法のいずれかは、さらに、入力ソースの暗号的秘密を検証するステップを含み得る。
【0187】
規則セットは、状態遷移行列であり得る。
【0188】
第3スクリプトは、将来トランザクションの検証のための条件セットを課すロッキングスクリプトであり得る。
【0189】
第2スクリプトは、さらに、ノードに、終了条件が満たされていないことを判断させ得る。
【0190】
入力は、フィールド値の第2セットに埋め込まれ得る。
【0191】
終了条件は、第2トランザクションと関連付けられたデジタルアセットが、移転されるのに不十分なサイズであること、であり得る。
【0192】
第1トランザクションを検証することは、デジタルアセットを第1エンティティから第2エンティティへ再び関連付けすることを含み得る。
【0193】
現在の状態は、第2トランザクションの状態を示し得る。
【0194】
次の状態は、検証において第1トランザクションの状態を示し得る。
【0195】
請求項に記載の方法のいずれも、さらに、第3トランザクションを受信するステップを含み得る。追加的または代替的に、請求項に記載の方法のいずれも、さらに、第1トランザクションから第4スクリプトを獲得するステップを含み、第4スクリプトは、実行された結果として、ノードに、少なくとも部分的に次の状態、第2入力、および規則セットに基づいて、次の状態および現在の状態とは異なる別の状態を決定するようにさせ得る。
【0196】
現在の状態および次の状態は、第1トランザクションおよび第2トランザクションについて可能な状態セットのメンバーであり得る。
【0197】
また、プロセッサ、および、プロセッサによる実行の結果として、システムに、請求項に記載の方法のいずれかを実行させる、実行可能な命令を含んでいるメモリ、を含むシステムを提供することも望ましい。
【0198】
また、コンピュータシステムのプロセッサによって実行される結果として、コンピュータシステムに、請求項に記載の方法のいずれかを少なくとも実行させる実行可能な命令をその上に保管している非一時的コンピュータ読取可能記憶媒体を提供することも望ましい。
【図面の簡単な説明】
【0199】
本発明に係るこれら及び他の態様は、ここにおいて説明される実施形態を参照して、明らかになり、そして、解明されるだろう。本発明の実施形態が、単なる例示として、これから説明される。そして、添付の図面が参照される。
【
図1】
図1は、様々な実施形態を実装可能なブロックチェーン環境を示している。
【
図2】
図2は、一つの実施形態に従った、トラストレス(trustless)、決定論的ステートマシン(state machine)の一つの例を示している。
【
図3】
図3は、一つの実施形態によって解決される、ロッキングスクリプトに関連する問題の一つの例を示している。
【
図4】
図4は、一つの実施形態に従った、アンロッキングスクリプトにアクセス可能なデータの一つの例を示している。
【
図5】
図5は、一つの実施形態に従った、シリアライズされた(serialized)トランザクションフィールドのセットから署名(signature)を作成する一つの例を示している。
【
図6】
図6は、一つの実施形態に従った、シリアライズされたアンロッキングトランザクションフィールドのセットの注入(injection)を生じさせる一つの例を説明するフローチャートである。
【
図7】
図7は、一つの実施形態によって解決されるロッキングスクリプトに関連する問題の別の例を示している。
【
図8】
図8は、一つの実施形態に従った、シリアライズされた以前トランザクションの注入を生じさせる一つの例を示している。
【
図9】
図9は、一つの実施形態に従った、署名のハッシュタイプに応じて利用可能なフィールドセットの一つの例を示している。
【
図10】
図10は、一つの実施形態に従った、シリアライズされたトランザクションからトランザクション識別子(identifier)を抽出する一つの例を示している。
【
図11】
図11は、一つの実施形態に従った、シリアライズされた以前トランザクションの注入を生じさせる一つの例のフローチャートである。
【
図12】
図12は、一つの実施形態に従った、未決定(undetermined)ソースからの未決定データのアンセキュアな提供(unsecure provision)に係る一つの例を示している。
【
図13】
図13は、一つの実施形態に従った、決定済(determined)ソースからの未決定データのセキュアな提供に係る一つの例を示している。
【
図14】
図14は、一つの実施形態に従った、未決定ソースからロッキングスクリプトの中への未決定データのセキュアな提供(secure provision)に係る一つの例を示している。
【
図15】
図15は、一つの実施形態に従った、ロッキングスクリプトの中への未決定データのセキュアな提供に係る一つの例を示すフローチャートである。
【
図16】
図16は、一つの実施形態に従った、パラメータ化(parameterized)されたスマートコントラクトの一つの例を示している。
【
図17】
図17は、一つの実施形態に従った、パラメータ化されたスマートコントラクトの実行に係る一つの例を示すフローチャートである。
【
図18】
図18は、一つの実施形態によって解決されるスマートコントラクトの複製(duplication)の問題に係る一つの例を示している。
【
図19】
図19は、一つの実施形態に従った、スマートコントラクトの複製の問題に対する解決策に係る一つの例を示している。
【
図20】
図20は、一つの実施形態に従って解決される、スマートコントラクトの複製の問題に係る別の例を示している。
【
図21】
図21は、一つの実施形態に従った、自己複製(self-replicating)スマートコントラクトの一つの例を示している。
【
図22】
図22は、一つの実施形態に従った、終了条件を伴う自己複製スマートコントラクトの一つの例を示すフローチャートである。
【
図23】
図23は、一つの実施形態によって解決される、次の状態決定(next state determination)を伴う問題の一つの例を示している。
【
図24】
図24は、一つの実施形態に従った、トラストレスな、決定論的ステートマシンの一つの例を示している。
【
図25】
図25は、一つの実施形態に従った、トラストレスな、決定論的ステートマシンの一つの例を示すフローチャートである。
【
図26】
図26は、様々な実施形態が実装可能であるコンピューティング環境を示している。
【発明を実施するための形態】
【0200】
図1を最初に参照すると、本開示の一つの実施形態に従った、ブロックチェーンと関連するブロックチェーンネットワーク100の一つの例が示されている。本実施形態においては、例示的なブロックチェーンネットワーク100が、ブロックチェーンプロトコルのインスタンスを実行するピアツーピア分散型電子デバイスで構成されている。いくつかの実施例において、分散型電子デバイスは、ノード102として参照されている。ブロックチェーンプロトコルの一つの実施例は、ビットコイン(Bitcoin)プロトコルである。
【0201】
ノード102は、任意の適切なコンピューティングデバイスで構成されてよい(例えば、データセンターにおけるサーバにより、クライアントコンピューティングデバイス(例えば、デスクトップコンピュータ、ラップトップコンピュータブレットコンピュータ、スマートフォン、等)により、コンピューティンリソースサービスプロバイダの分散システムにおける複数のコンピューティングデバイスにより、または、
図26のコンピューティングデバイス2600といった任意の適切な電子クライアントデバイスによる)。
【0202】
一つの実施形態において、1つまたはそれ以上のノード102は、他の1つまたはそれ以上のノード102に対して通信的に結合されている。そうした通信カップリング(communicative coupling)は、有線または無線通信のうち1つまたはそれ以上を含み得る。実施形態において、ノード102は、それぞれ、ブロックチェーン内の全てのトランザクションの「台帳(”ledger”)」の少なくとも一部分を維持している。このように、台帳は分散型台帳(distributed ledger)である。台帳に影響する、ノードによって処理されるトランザクションは、台帳の完全性(integrity)が維持されるように、1つまたはそれ以上の他のノードによって検証可能である。
【0203】
一つの実施形態において、ノード102の少なくともいくつかは、暗号学的問題を解くといった、複雑な計算を実行するマイナーノード(miner node)である。暗号問題を解くマイナーノードは、ブロックチェーンのための新しいブロックを作成し、そして、他のノード102に対して新しいブロックをブロードキャスト(broadcast)する。他のノード102は、マイナーノードの作業を検証し、そして、検証されると(upon verification)、ブロックチェーンの中にブロックを受け入れる(例えば、ブロックチェーンの分散型台帳にブロックを追加することによる)。いくつかの実施例において、ブロックは、トランザクションのグループであり、しばしば、タイムスタンプおよび以前ブロックの「フィンガープリント(”fingerprint”)」(例えばハッシュ)を用いてマークされる。このようにして、各ブロックは、以前ブロックにリンクされるようになり、それによって、ブロックチェーンの中でブロックをリンクする「チェーン(”chain”)」を作成している。実施形態においては、有効なブロックが、ノード102のコンセンサスによってブロックチェーンに対して追加されている。いくつかの実施例において、ブロックチェーンは、また、検証されたブロックのリストも含んでいる。
【0204】
一つの実施形態において、ノード102の少なくともいくつかは、本開示において説明されるように、トランザクションを検証する検証ノード(validating node)として動作する。いくつかの実施例において、トランザクションは、デジタルアセット(例えば、ビットコインの数)のオーナーシップ(ownership)の証明(proof)、および、デジタルアセットのオーナーシップ/コントロール(control)の受入または移転の条件を提供するデータを含んでいる。いくつかの実施例において、「アンロッキングトランザクション(”unlocking transaction”)」は、デジタルアセットの少なくとも一部分、以前トランザクションの未使用トランザクション出力(unspent transaction output、UTXO)によって示されるもの、をブロックチェーンアドレスに関連するエンティティに対して再び関連付ける(例えば、オーナーシップまたはコントロールを移転する)トランザクションを参照する。いくつかの実施例において、「以前トランザクション(”previous transaction”)」は、アンロッキングトランザクションによって参照されているUTXOを含むトランザクションを参照する。いくつかの実施形態において、トランザクションは、オーナーシップ/コントロールが移転され得る(「アンロック(”unlocked”)」)前に満たされなければならない条件を用いてトランザクションを担保(encumbers)する「ロッキングスクリプト(”locking script”)」を含んでいる。いくつかの実施形態において、ブロックチェーンアドレスは、デジタルアセットの少なくとも一部分のコントロールが移転され/再び関連付けられるエンティティに関連する英数字の文字列である。いくつかの実施形態において実装されるいくつかのブロックチェーンプロトコルにおいては、エンティティと関連付けられた公開鍵(public key)とブロックチェーンアドレスとの間に一対一の対応が存在している。トランザクションの検証は、ロッキングスクリプト及び/又はアンロッキングスクリプトにおいて指定された1つまたはそれ以上の条件の検証を含み得る。トランザクション104の検証が成功すると、検証ノードは、トランザクション104をブロックチェーンに追加し、そして、それをノード102に対して配布する。
【0205】
図2は、本開示に係る例示的な実施形態200を示している。具体的に、
図2は、第1状態206を符号化する、以前(previous)ブロックチェーントランザクション202、および、第2状態208を符号化するアンロッキングブロックチェーントランザクション204を示している。例示的な実施形態200においては、第1時間における第1状態206が、以前ブロックチェーントランザクション202の中に埋め込まれたパラメータとして表されている。パラメータ化(parameterizing)の制約に関するさらなる詳細は、
図16の説明において見られる。アンロッキングブロックチェーントランザクション204は、第2状態208を表すパラメータを含んでいる。
【0206】
例示的な実施形態200において、トランザクション202および204は、1つまたはそれ以上の入力および1つまたはそれ以上の出力を含むフィールド値セットである。いくつかの実施形態において、入力および出力は、デジタルアセットの少なくとも一部分を、少なくとも1つのエンティティ(entity)から少なくとも別のエンティティへ再結合する意図を反映している。例示的な実施形態200において、以前ブロックチェーントランザクション202は、最新の(the most current)、ブロックチェーンに含まれている確認されたトランザクションである。例示的な実施形態200において、アンロッキングブロックチェーントランザクション204は、直近の将来の、まだ確認されておらず、かつ、まだブロックチェーンに含まれていないトランザクションである。アンロッキングブロックチェーントランザクション204の入力それぞれは、以前ブロックチェーントランザクション202の出力を受信する。
【0207】
ビットコインといった、いくつかのブロックチェーン技術は、デジタル署名のための数学的スキームとして楕円曲線デジタル署名アルゴリズム(elliptic curve digital signature algorithm、ECDSA)を使用する。実施形態において、ECDSAは、承認されていないエンティティによって獲得されることからUTXOを守るために使用される暗号化デジタル署名である。ビットコインにおける楕円曲線デジタル署名(ECDSA)は、典型的に、末尾(end)に付加された署名ハッシュフラグ(SIGHASHタイプ)と共に現れる。しかしながら、本開示の技術は、SIGHASHタイプを実装しないブロックチェーン技術を用いて使用可能であることが考慮されている。そうしたブロックチェーン技術において、ECDSは、特定のブロックチェーン技術の署名作成原則(principle)に準拠するように考慮されている。
【0208】
実施形態において、SIGHASHタイプは、シリアライズ(例えば、正規化)およびハッシュ化される前にトランザクションから抽出されるフィールドのセットを参照する。例えば、SIGHASHタイプは、署名の中にトランザクションのどのフィールドが含まれるかに影響を与え得る。いくつかの実施例において、SIGHASHタイプは、SIGHASH_ALL、SIGHASH_NONE、SIGHASH_SINGLE、またはSIGHASH_ANYONECANPAYのうち1つまたはそれ以上であり得る。一つの実施形態において、タイプSIGHASH_ALLは、入力スクリプトを除いて、トランザクション内の全てのフィールドがハッシュされ、かつ、署名されることを示している。一つの実施形態において、タイプSIGHASH_NONEは、出力が署名される必要がないことを示しており、これで他人(others)がトランザクションを更新することができる。一つの実施形態において、タイプSIGHASH_SINGLEは、入力は署名されるが、シーケンス番号はブランク(blank)であることを示しており、そうして、他人はトランザクションの新たなバージョンを作成することができるが、署名された出力だけが入力と同じ位置にあるものである。一つの実施形態において、タイプSIGHASH_ANYONECANPAYは、他のタイプと組み合わされ、そして、SIGHASH_ANYONECANPAYを含む入力は署名されるが、他の入力は署名される必要がないことを示している。SIGHASHタイプは、SIGHASHタイプを示す値によって表わすことができる。例えば、いくつかの実装において、SIGHASH_ALLは値が1のバイトによって表され、SIGHASH_NONEは値が2のバイトで表され、SIGHASH_SINGLEは値が3のバイトで表され、そして、SIGHASH_ANYONECANPAYは値が80のバイトで表される。いくつかの実装においては、バイトの値を一緒に加算することによって、SIGHASHタイプの組合せが実行される。
【0209】
いくつかの実施例において、SIGHASHタイプによって決定済トランザクションフィールドのセットは、SIGHASHタイプによって決定済なように、バイト単位で(in bytes)符号化された対応するトランザクションのサブセットを参照する。例えば、SIGHASHタイプがSIGHASH_ANYONECANPAYについては、唯一のトランザクション入力が署名の中に含まれている。
【0210】
一つの実施形態において、ECDSは、識別符号化規則(distinguished encoding rules、DER)フォーマットで符号化された256ビットの数字ペア(r、s)によって表される。しかしながら、本開示の技術は、基本符号化規則(basic encoding rules、BER)または正規符号化規則(canonical encoding rules、CER)といった、他の符号化フォーマットを用いて使用可能であることに留意する。ECDSAにおいて使用されるパラメータは、K(楕円曲線点が座標(x、y)である)、k(256ビットの数字であり、秘密鍵(private key)を保護するために通常はランダムである)、G(n次の(with order n)楕円曲線上の基点、n×G=0であり、ここで0はアイデンティティ楕円曲線点(identity elliptic curve point)を表しており、nは楕円曲線有限体(elliptic curve finite field)においてパラメータとして使用される大きな素数である)、r(ECDSにおける256ビットの数字のうち1つ)、s(署名における256ビットの数字のうち他のもの)、k-1(kのモジュラ逆数(modular multiplicative inverse)、つまり、k-1k≡1 mod n)、m(署名されているメッセージ/データ、実施形態においてハッシュ関数によって256ビットへサイズ変更(resized)されている)、a(秘密鍵、例えば、256ビットの数字)を含んでいる。本実施形態において、ECDSは、以下のように作成される。
【0211】
最初に、作成器(generator)を用いてkを乗算することによって、楕円曲線点Kが決定される。
K=k×G
【0212】
次に、Kから点xが決定され、そして、ECDSにおける256ビットの数字のうち最初であるrが、次式に従って決定される。
r=x mode n
【0213】
次に、ECDSにおける256ビットの数字のうち2番目が、次式に従って決定される。
s=k-1(m+r×a)mod n
【0214】
最後に、(r、s)がDERフォーマットで符号化される。署名(r、s)、メッセージ/データm、および、秘密鍵aに対応する公開鍵Aが与えられるとすれば、署名は検証可能である。署名を検証するために、ν=s-1×(m×G+r×y)が計算される。
ν=rである場合に、署名は有効である。
【0215】
ビットコインは「スクリプト(”Script”)」と呼ばれるスクリプトシステムを使用している。本開示においては、様々なオペレーションを実行するために、様々なスクリプトオペレーションコードおよびキーワードが参照されている。しかしながら、他のブロックチェーン技術は異なる命令セットを実装できるであろうことが考慮されており、そして、従って、本開示において説明されるオペレーションコードは、スクリプトにおける特定のオペレーションコードではなく、むしろオペレーションコードによって実行されるオペレーションを例示するものと考えられる。いくつかの実施形態において、スクリプトシステムは、チューリング不完全命令セット(Turing incomplete instruction set)である(例えば、ループ、再帰(recursion)、ゴーツー(goto)ステートメント、等に対するサポートを欠いている)。他の実施形態において、スクリプトシステムはチューリング完全命令セット(Turing complete instruction set)である。
【0216】
本開示の特定の実施形態は、記述された命令セットを実施するためのスクリプトシステムまたは他のシステムが、単一のスクリプトにおいて200を超える命令(例えば、オペレーションコード)を許可しているという仮定の下で動作する。同様に、本開示の特定の実施形態は、さらに、以下を仮定している。
・本開示において言及されているオペレーションコードによって提供される機能性が、オペレーションコードスクリプト/命令セットを実行するシステムにおいて存在し、かつ、使用可能とされていること。及び/又は、
・要求される機能性が、所望の振る舞い(behavior)を提供するように記載されているカスタマイズされたファンクション(function)の作成によって実現され得ること。これらのカスタマイズされたファンクションは、言語の中に存在するが無効にされているop_codesの機能性を実装するために記載されているか、または、スクリプト言語自体においては本来提供されていない特定の機能性を提供する「新たな(”new”)」op_codesであってよい。
【0217】
本開示において参照されるオペレーションコードの例は、以下を含んでいる。
・OP_ECPX、楕円曲線点のx座標を返す
・OP_ADD、スタックに上位2つのアイテムを追加する
・OP_BIGMOD、スタックの上位2つのアイテムを除した後の余り(remainder)を返す
・OP_BIGMODADD、スタックモジュラス(stack modulus)の上位2つのアイテムのモジュラス加算をスタックの第3アイテムに実行する
・OP_BIGMODINVERSE、モジュラス負の指数演算(modulus negative exponent operation)を実行する
・OP_BIGMODMUL、スタックモジュラスの上位2つのアイテムのモジュラス乗算をスタックの第3アイテムに実行する
・OP_CAT、スタックの上位2つのアイテムを連結(concatenate)する
・OP_CHECKSIG、スタックから公開鍵および署名がポップされ、そして、SIGHASHタイプに従ってトランザクションフィールドの署名に対して検証される。署名が有効である場合は1、そうでない場合は0を返す
・OP_CHECKSIGVERIFY、OP_CHECKSIGと同様に機能するが、その後でOP_VERIFYが実行される
・OP_DERENCODE、スタックの上位2つのアイテムをDERフォーマットで符号化する
・OP_DUP、スタックのトップアイテムを複製する
・OP_ECPMULT、スタックの上位2つのアイテムについて楕円曲線点乗算(楕円曲線スカラ乗算(elliptic curve scalar multiplication)としても参照されるもの)を実行する
・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、スタックのトップの値(top stack value)が誤り(False)でない場合に、ステートメントが実行され、そして、スタックのトップの値が削除される
・OP_MUL、スタックの上位2つのアイテムを乗算する
・OP_NOTIF、スタックのトップの値が誤りである場合に、ステートメントが実行され、そして、スタックのトップの値が削除される
・OP_ROLL、スタックにおける深さがn個アイテムであるアイテムがトップに移動される
・OP_SUBSTR、文字列のセクションを返す
・OP_SWAP、スタックの上位2つのアイテムが交換される
・OP_TOALTSTACK、入力を代替スタックのトップの上に置き、そして、それをメインスタックから削除する
・OP_VERIFY、スタックのトップの値が真(true)でない場合に、無効なものとしてトランザクションをマークする
【0218】
一つの実施形態において、ECDS作成スクリプトは、オペレーションコードを使用して作成することができる。これは、SIGHASHバイトを終端に追加することによって、署名作成スクリプトOP_GENSIGを作成するように拡張され得る。
【表1】
【0219】
上記スクリプトにおいては、<SIGHASH Byte>、メッセージ<m>、秘密鍵<a>、および数<k>が、上記の順序でメインスタック(後入れ先出し(last-in first-out))の中へ入力される。スクリプト演算"OP_DUP OP_TOALTSTACK<PubK G>OP_ECPMULT"を実行すると、数<k>が代替スタックにコピーされ、そして、<k>が楕円曲線作成器<PubK G>に対して乗算されて、メインスタックのトップに楕円曲線点Kが作成される。スクリプト演算"OP_ECPX<N>OP_BIGMOD OP_DUP OP_TOALTSTACK"を実行すると、Kモジュラスn(K modulus n)のx-座標からrが計算される。rのコピーは、代替スタックにプッシュされる。スクリプト演算の"<N>OP_BIGMODMUL<N>OP_BIGMODADD OP_FROMALTSTACK OP_SWAP OP_FROMALTSTACK<N>OP_BIGMODINVERSE<N>OP_BIGMODMUL"の実行は、k-1(m+r×a)mod nからsを計算する。最終的に、スクリプト演算"OP_DERENCODE OP_SWAP OP_CAT"の実行は、DERフォーマットで符号化され、かつ、<SIGHASH Byte>に連結された、rおよびsを生じる。本開示において、このスクリプトは、OP_GENSIGとして参照される。従って、本開示の実施形態におけるOP_GENSIGへの参照は、上記スクリプトで実行されるオペレーションの簡略(shorthand)としてみなされるべきである。
【0220】
図3は、本開示の一つの実施形態によって解決されるブロックチェーントランザクションに関連する問題を示している実施例300である。すなわち、
図3に示される実施形態である実施例300において、以前トランザクション302におけるロッキングスクリプト306は、アンロッキングトランザクション304のフィールドを直接的に読取ることができない。注記したように、いくつかの実施態様において、以前トランザクション302は、ブロックチェーンに含まれる最新の、確認されたトランザクションである。同様に、いくつかの実施形態において、アンロッキングトランザクション304は、先物トランザクション(future transaction)であり、未だ確認されておらず、そして、未だブロックチェーンに含まれていない。これは、以前トランザクション302によってコントロールされるデジタルアセットの少なくとも一部分を再び関連付けする試みを表している。
【0221】
上述のように、いくつかの実施形態において、ロッキングスクリプト306は、出力を転送するために満たす必要がある条件を指定することによってトランザクションを担保するスクリプトである。より特定的に、ロッキングスクリプト306を実行することは、ブロックチェーンシステムの検証ノードによる実行の結果として、実行されたアンロッキングスクリプトからデータを受け入れて、データに基づいて所定のオペレーションを実行し、そして、アンロッキングスクリプトの実行がロッキングスクリプトを成功裡に(successfully)「アンロック(”unlocked”)」した(すなわち、内部に設定された条件セットを満たした)か否かを示す結果を返すように構成されている。いくつかの実施形態において、ロッキングスクリプト306は、トランザクションの検証が成功するために(例えば、アンロッキングスクリプトを介して提供されるデータによって)満たされることを要する1つまたはそれ以上のデータ制約(data constraints)を定義する。例えば、ロッキングスクリプト306は、以前トランザクション302の関連するデジタルアセットをアンロックするために、アンロッキングスクリプト内に提供される所定のデータを要求することができる。
【0222】
図4は、本開示のアンロッキングスクリプト408が、以前トランザクション402のロッキングスクリプト406とは異なり、一つの実施形態におけるアンロッキングトランザクション404のフィールド(例えば、SIGHASHタイプに応じて決定済(determined)アンロッキングトランザクションフィールドのセット)に対するアクセスを有することを説明する実施例400を表している。いくつかの実施態様において、以前トランザクション402は、
図3の以前トランザクション302と同様である。いくつかの実施態様において、アンロッキングトランザクション404は、アンロッキングトランザクション304と同様である。いくつかの実施態様において、ロッキングスクリプト406は、
図3のロッキングスクリプト306と同様な特徴を有している。
【0223】
いくつかの実施態様において、アンロッキングスクリプト408は、ロッキングスクリプトによってトランザクションの出力に置かれた条件のセットを満足しようと試みるトランザクションの入力に置かれた実行可能スクリプトである。アンロッキングスクリプトは、また”scriptSig”としても知られている。上述のように、アンロッキングスクリプト408は、アンロッキングスクリプトに対する入力として、SIGHASHタイプに応じて決定済アンロッキングトランザクションフィールドのセットを提供するように設計されてきており、それによって、アンロッキングトランザクションのフィールドに対するアクセスをアンロッキングスクリプトに提供している。シリアライズされたトランザクションの内容および構成に関するさらなる詳細は、以下の
図5の説明において見いだされる。実施形態において、トランザクション402および404は、追加のフィールドを含むことに留意する。例えば、いくつかの実施形態において、”nVersion”はブロックチェーンプロトコルのバージョンを参照し、”#vin”はトランザクションの入力の数のカウントを参照し、”hash”はデジタルアセットが再結合されているエンティティのpay-to-public-key-hashを指し、”#vout”はトランザクションの出力の数のカウントを参照し、”nValue”は残っている未使用デジタルアセットの量を参照し、そして、”nLockTime”はトランザクションが最終になる時のタイムスタンプを参照するものである。
【0224】
図5は、トランザクションフィールドのシリアライズされたセットがどのように形成されるかに係る一つの実施例500を示している。
図5に示されるように、シリアライズされたトランザクション510(すなわち、特定フォーマットの一連のバイトで表されるトランザクション)は、トランザクションのフィールド値セットを含んでいる。署名者(signer)は、512において、SIGHASHタイプおよび数kを選択する。この数kは、典型的には、秘密鍵をマスク/プロテクトするために乱数(random)または擬似乱数であり、そして、従って、本開示において、時には、「マスク番号(”mask number”)」として参照されている。トランザクション514の修正された(modified)コピーは、指定されたSIGHASHタイプに従って選択されるシリアライズされたトランザクション510のフィールドのセットの一つの例である(例えば、実施例500において、SIGHASH_NONE+ANYONECANPAYである)。署名者は、トランザクション514の修正されたコピーをハッシュ化し(例えば、double SHA-256 hash)、結果として、メッセージm516が生じる。署名者は、次いで、SIGHASHタイプ、メッセージm、署名者の秘密鍵、および、数kを、
図2に関連して上述した方法といったように使用して、署名を作成する。
【0225】
以下の表は、典型的なアンロッキングスクリプトおよびロッキングスクリプトの一つの実施例を示しており、それによって、アンロッキングスクリプトにおいて指定されたエンティティAの想定される署名が、OP_CHECKSIGオペレーションコードを使用してエンティティAの公開鍵に対して検査される。
【表2】
【0226】
このように、
図5の署名作成を理解して、以下の表は、実施例500に示されたプロシージャ一部分がアンロッキングスクリプトの中に移動された場合の、アンロッキングスクリプトおよびロッキングスクリプトの実施例を示している。
【表3】
【0227】
アンロッキングスクリプトは、さらに、アンロッキングスクリプトの中でメッセージmを計算するステップを含むように修正され得る。
【表4】
【0228】
しかしながら、SIGHASHタイプ、およびSIGHASHタイプに応じて決定済アンロッキングトランザクションフィールドのセットを除いて、プロシージャの他のオペレーションはロッキングスクリプトに移動し得ることに留意する。
【表5】
【0229】
従って、ロッキングスクリプトの中の"OP_HASH256<a><k>OP_GENSIG"のオペレーションを移動することによって、アンロッキングスクリプトは、有効となるように、SIGHASHタイプ、およびSIGHASHタイプに応じて決定済アンロッキングトランザクションフィールドのセットを含むことになる。
【0230】
このようにして、シリアライズされた以前トランザクションは、ロッキングスクリプトの中へ注入される。以下の表は、ロッキングおよびアンロッキングスクリプトが、実施例500の各ステップのプロシージャをどのように実行し、かつ、トランザクションを検証するかを示している。
【表6】
【0231】
本開示において、上記のスクリプトは、OP_UNLOCKINGTXINJECTIONとして参照され得る。従って、本開示の実施形態におけるOP_UNLOCKINGTXINJECTIONへの参照は、上記スクリプトで実行されるオペレーションの簡略としてみなされるべきである。しかしながら、SIGHASHタイプ、およびSIGHASHタイプに応じて決定済アンロッキングトランザクションフィールドのセットを提供する任意のエンティティが、トランザクション出力を受信することができることに留意する。しかしながら、このことは、以下でさらに詳細に説明されるように、有用な特徴になる。上述のように、いくつかの実施例において、トランザクション出力の受信は、トランザクション出力を参照し、そして、有効であると評価するアンロッキングトランザクションを作成することを参照しており、それによって、トランザクション出力が受信されるようにする。
【0232】
図6は、様々な実施形態に応じて一つの実施形態に従った、SIGHASHタイプに応じて決定済、アンロッキングトランザクションフィールドのセットの注入を生じさせるプロセス600の一つの実施例を示すフローチャートである。プロセス600のいくつか又は全て(または、あらゆる他の説明されるプロセス、または、これらのプロセスの変形及び/又は組合せ)は、実行可能な命令及び/又は他のデータを用いて構成された1つまたはそれ以上のコンピュータシステムのコントロールの下で実行され得る。そして、1つまたはそれ以上のプロセッサ上でまとめて(collectively)実行される実行可能命令として実装され得る。実行可能命令及び/又は他のデータは、非一時的コンピュータ読取可能記憶媒体において保管され得る(例えば、コンピュータプログラムは、磁気媒体、光学媒体、またはフラッシュ媒体において永続的に保管される)。
【0233】
例えば、プロセス600のいくつか又は全ては、
図1の例示的なブロックチェーンネットワーク100といった、ブロックチェーンネットワーク内の検証ノードによって実行され得る。そうした検証ノードは、任意の適切なコンピューティングデバイスから構成され得る(例えば、データセンター内のサーバ、クライアントコンピューティングデバイス、計算リソースサービスプロバイダの分散システムにおける複数のコンピューティングデバイス、または、
図26のコンピューティングデバイス2600といった、任意の適切な電子クライアントデバイスによる)。プロセス600は、一連のオペレーションを含んでおり、そこで、プロセス600を実行するシステムは、
図5で説明される方法で、未検証トランザクションのロッキングスクリプトおよびアンロッキングスクリプトを一緒に実行し、そして、その結果として、SIGHASHタイプおよびトランザクションフィールド値セットを獲得し、署名を作成して、署名を検証する。
【0234】
602において、システムは、デジタルアセットの少なくとも一部分を再結合しようとしているエンティティから未検証トランザクションを獲得する。未検証トランザクションは、ロッキングスクリプトおよびアンロッキングスクリプトを含んでいる。アンロッキングスクリプトは、ロッキングスクリプトを実行する以前にシステムによって実行される。アンロッキングスクリプトは、上記の表5および表6において示されるアンロッキングスクリプトと類似してよく、そして、SIGHASHタイプを指定し、そして、未検証トランザクションのフィールドのシリアライズされたセットを含んでいる。その結果、604および606において、プロセス600を実行するシステムは、アンロッキングスクリプトからSIGHASHタイプおよび未検証トランザクションのトランザクションフィールド値のシリアライズされたセットを獲得し、そして、メインスタックの中にそれらを配置する。一旦アンロッキングスクリプトの実行が成功裡に完了すると、システムは、アンロッキングスクリプトの実行の完了時に、メインスタックの状態(および、いくつかの実装においては、代替スタックの状態)を使用してロッキングスクリプトの実行を開始する。ロッキングスクリプトは、上記の表5および表6に示されるロッキングスクリプトと類似してよい。
【0235】
608では、ロッキングスクリプトに従って、システムは、少なくともSIGHASHタイプと、アンロッキングスクリプトの実行の結果としてメインスタック上に配置されたトランザクションフィールド値セット、および、公開鍵のペアと関連付けられた秘密鍵を使用して、署名を作成する。610では、ロッキングスクリプトに従って、システムは、鍵ペアの公開鍵に対して署名を成功裡に検証する。このようにして、トランザクションフィールドのセットは、アンロッキングスクリプトによってロッキングスクリプトの中へ注入される。オペレーション602-610は、実装応じて、様々な順序および組合せにおいて実行され得ること、および、オペレーションのいくつかは、プロセス600の他のオペレーションと並行して実行され得ることに留意する。
【0236】
図7は、本開示の一つの実施形態によって解決されるブロックチェーントランザクションに関連する問題を示している実施例700である。すなわち、
図7で示される実施例700において、ロッキングスクリプト706は、それが埋め込まれているトランザクションの入力を読取ることができず、そして、その結果、以前トランザクションのフィールドを直接的に読取ることができない。いくつかの実施形態において、トランザクション704は、
図3のアンロッキングトランザクション304と類似しており、これは、以前トランザクションによってコントロールされるデジタルアセットの少なくとも一部分を再結合する試みを表している。上述のように、いくつかの実施形態において、ロッキングスクリプト706は、
図3のロッキングスクリプト306と同様に、出力を転送するために満たされる必要がある条件を指定することによってトランザクションを担保するスクリプトである。
【0237】
図8は、トランザクションIDを抽出し、かつ、制約(constraint)検査を実行することによって、アンロッキングスクリプト808がシリアライズされた以前トランザクションを含むようにさせる実施例800を示している。具体的に、
図8は、以前トランザクション802A-02Bからの出力を利用しているアンロッキングスクリプト808を有するアンロッキングトランザクション804を示している。見て分かるように、アンロッキングスクリプト808は、シリアライズされた以前トランザクションが検索される(retrieved)ようにさせる。いくつかの実施例において、シリアライズされた以前トランザクションは、以前トランザクションのフィールド値セットの修正されていないバージョンを参照する。
【0238】
図8に示される実施形態は、トランザクションIDがシリアライズされたトランザクションのダブル(double)SHA-256であること、および、トランザクションIDがトランザクションに対して一対一(one-to-one)のマッピングを有することを観察することによって理解することができる。従って、以下の表7に示される制約を適用することによって、トランザクションがアンロッキングスクリプトの中へ注入され得る。
【表7】
【0239】
本開示の実施形態は、任意のシリアライズされたトランザクションの注入を生じさせることによるだけでなく、アンロッキングトランザクション804の入力において参照される1つまたはそれ以上のシリアライズされた以前トランザクション(例えば、以前トランザクション802A-802B)の注入を生じさせることによって、さらに、この注入を改善する。
図7を参照して上述のように、SIGHASHタイプに応じて決定済アンロッキングトランザクションフィールドのセットは、アンロッキングスクリプト806を介してロッキングスクリプトの中へ注入され得る。そして、
図9は、指定されたSIGHASHタイプに応じて、シリアライズされたトランザクションにどのフィールドが含まれているかを示している。
【0240】
図9は、指定されたSIGHASHタイプに応じて、シリアライズされたトランザクションにおいて利用可能であるフィールドのセットの実施例900を示している。しかしながら、
図9は、例示的であるように意図されたものであり、かつ、様々な実施形態においては、
図9に示されているよりも多くのSIGHASHタイプが存在することに留意する。
図9に示されるように、異なるSIGHASHタイプについて、異なるセットの以前トランザクションIDが、SIGHASHタイプに応じて決定されるアンロッキングトランザクションフィールドのセットの中に含まれている(「ハッシュ(”hash”)」フィールドがビッグエンディアン(big endian)フォーマットでトランザクションIDを表していることに留意する)。いくつかの実施形態において、ロッキングスクリプトを埋め込んでいる以前トランザクションのトランザクションIDは、どのSIGHASHタイプが指定されているかにかかわらず、常に利用可能である。
【0241】
従って、以下の方法において、所定のフィールドが、SIGHASHタイプを制約することによって決定済アンロッキングトランザクションフィールドのセットの中に、存在するようにできる。最初に、SIGHASHタイプを複製する。次いで、SIGHASHタイプをスタックの上にプッシュする(例えば、SIGHASH_ALL)。最後に、OP_EQUALVERIFYを呼び出す(call)。
図9を見て分かるように、SIGHASH_ALLは(アンロッキングトランザクション904Aで示されるように)、ハッシュを含み、上述のように、以前トランザクションyおよびzのトランザクションIDを表すものである。対照的に、SIGHASH_ALL+ANYONECANPAYは(アンロッキングトランザクション904Bで示されるように)、直前のトランザクションyのハッシュだけを含んでいる。いくつかの実施形態において、アンロッキングトランザクション904A-904Bは、以前トランザクション(例えば、トランザクションy及び/又はx)によってコントロールされるデジタルアセットの少なくとも一部分を再結合する試みを表す、
図3のアンロッキングブロックチェーントランザクション204と類似している。トランザクションIDの抽出は、
図10に示されるように、所望のフィールドに到達するまで、サブストリング(substring)オペレーションコードを使用してシリアライズされたトランザクションを解析することによって達成され得る。
【0242】
図10は、本開示の一つの実施形態におけるトランザクションIDの抽出の実施例1000を示している。具体的に、
図10は、ビッグエンディアンフォーマットでのトランザクションIDから構成されている、ハッシュ1020が、スクリプトの中でサブストリングオペレーションコードを使用することによって抽出され得る、シリアライズされたトランザクション1010のサブストリングであることを示している。いくつかの実施形態においては、いくつかのフィールド(例えば、#vin、scriptSigLen、scriptSig、scriptPubKeyLen、およびscriptPubKey)が可変バイト長であるため、トランザクションIDが抽出される前に、シリアライズされたトランザクション1010が、ハッシュ1020の位置を特定するために最初に構文解析(parsed)される。しかしながら、フィールドが固定長を有する実装においては、構文解析が必要とされないこともあると考えられている。
【0243】
従って、いくつかの実施形態においては、
図6を参照して説明された方法で、アンロッキングトランザクションにおいて参照される特定のシリアライズされた以前トランザクションの注入を引き起こすロッキングスクリプトを構築することによって、以前トランザクションIDがアクセス可能にされ得る。例えば、最初にSIGHASHタイプ制約が決定され、トランザクションIDが抽出され、そして、シリアライズされた以前トランザクションが複製されて、アンロッキングトランザクションのシリアライズされたフィールドセットから(SIGHASHタイプに従って)抽出されたトランザクションIDに対して検査される。このプロセスは、複数の異なるシリアライズされた以前トランザクションの注入を生じさせるように実行され得ることに留意する。一つの例として、表8は、アンロッキングトランザクションの入力Xに対応する以前トランザクションの注入を生じさせるスクリプトを表している。
【表8】
【0244】
上記のスクリプトにおいて、OP_EXTRACTXIDは、トランザクションIDおよびトランザクションIDの位置を含むデータを、抽出されたトランザクションIDの入力および出力として捉えるオペレーションコード/スクリプトである。本開示において、上記のスクリプトは、OP_PREVTXINJECTIONとして参照され得る。従って、本開示の実施形態におけるOP_PREVTXINJECTIONへの参照は、上記のスクリプトにおいて実行されるオペレーションの簡略としてみなされるべきである。
【0245】
しかしながら、SIGHASHタイプ、SIGHASHタイプに応じて決定済アンロッキングトランザクションフィールドのセット、およびシリアライズされた以前トランザクションを提供する任意のエンティティは、トランザクション出力を獲得できることに留意する。しかしながら、このことは、以下でさらに詳細に説明されるように、有用な特徴となる。
【0246】
別の実施例として、表9は、署名されている入力に対応する以前トランザクションの注入を生じさせるスクリプトを示している。
【表9】
【0247】
本開示において、表8のスクリプトと同様に、表8における上記スクリプトは、また、OP_SELFTXINJECTIONとしても参照され得る。従って、本開示の実施形態におけるOP_SELFTXINJECTIONへの参照は、上記のスクリプトにおいて実行されるオペレーションの簡略とみなされるべきである。
【0248】
SIGHASHタイプ、SIGHASHタイプに応じて決定済アンロッキングトランザクションフィールドのセット、およびシリアライズされた以前トランザクションを提供する任意のエンティティは、トランザクション出力を獲得することができることにも、また留意する。しかしながら、このことは、以下でさらに詳細に説明するように、有用な特徴となる。上述のように、いくつかの実施例において、トランザクション出力を獲得することは、トランザクション出力を参照するアンロッキングトランザクションを作成すること、および、アンロッキングトランザクションを成功裡に検証することを意味する。
【0249】
図11は、様々な実施形態に従って、シリアライズされた以前トランザクションの注入を生じさせるためのプロセス1100の一つの実施例を示すフローチャートである。プロセス1100のいくつか又は全て(または、あらゆる他の説明されるプロセス、または、これらのプロセスの変形及び/又は組合せ)は、実行可能な命令及び/又は他のデータを用いて構成された1つまたはそれ以上のコンピュータシステムのコントロールの下で実行され得る。そして、1つまたはそれ以上のプロセッサ上でまとめて実行される実行可能命令として実装され得る。実行可能命令及び/又は他のデータは、非一時的コンピュータ読取可能記憶媒体において保管され得る(例えば、コンピュータプログラムは、磁気媒体、光学媒体、またはフラッシュ媒体において永続的に保管される)。
【0250】
例えば、プロセス1100のいくつか又は全ては、
図1の例示的なブロックチェーンネットワーク100といった、ブロックチェーンネットワーク内の検証ノードによって実行され得る。そうした検証ノードは、任意の適切なコンピューティングデバイスから構成され得る(例えば、データセンター内のサーバ、クライアントコンピューティングデバイス、計算リソースサービスプロバイダの分散システムにおける複数のコンピューティングデバイス、または、
図26のコンピューティングデバイス2600といった、任意の適切な電子クライアントデバイスによる)。プロセス1100は、一連のオペレーションを含んでおり、そこで、プロセス1100を実行するシステムは、未検証トランザクションのロッキングスクリプトおよびロッキングスクリプトを一緒に実行し、そして、その結果として、未検証トランザクションから抽出されたトランザクションIDに対応するシリアライズされた以前トランザクションを獲得する。
【0251】
1102において、システムは、デジタルアセットの少なくとも一部分を再結合しようとしているエンティティから未検証トランザクションを獲得する。未検証トランザクションは、ロッキングスクリプトおよびアンロッキングスクリプトを含んでいる。ロッキングスクリプトおよびアンロッキングスクリプトは、上記の表8および表9において示されるロッキングスクリプトおよびアンロッキングスクリプトと類似してよい。すなわち、ロッキングスクリプトは、アンロッキングスクリプトによるといったもので、メインスタックおよび代替スタックの中に保管された値を入力として捉える命令のセットを含んでいる。命令セットの実行は、真(TRUE)に評価される場合に、未検証トランザクションを成功裡に検証する。従って、アンロッキングスクリプトがロッキングスクリプトの前に実行され、ロッキングスクリプトによって使用されるメインスタックおよび代替スタックにおける値を設定している。
図11の実施形態における未検証トランザクションのアンロッキングスクリプトは、シリアライズされた以前トランザクション、SIGHASHタイプ、およびアンロッキングトランザクションのシリアライズされたセットを含んでいる。
【0252】
アンロッキングスクリプトに続くロッキングスクリプトの実行の結果として、1104において、システムは、シリアライズされた以前トランザクション、SIGHASHタイプ、および、アンロッキングスクリプトに含まれるアンロッキングトランザクションフィールドのシリアライズされたセットを獲得する。1106において、システムは、SIGHASHに基づいて、未検証トランザクションのフィールド値のシリアライズされたセットに基づく署名を作成する。SIGHASHタイプは、署名作成においてどのフィールドが使用されるかに影響し、そして、所望のSIGHASHは、求められる(sought)特定の以前トランザクションに依存し得ることに留意する。例えば、表8は、以前トランザクションを抽出するためのロッキングスクリプトおよびアンロッキングスクリプトを示しているが、同じロッキングスクリプトを含む以前トランザクションを必ずしも示さず、SIGHASH_ALLのSIGHASHタイプを利用している。
図9に示されるように、SIGHASH_ALLタイプは、アンロッキングトランザクションの他の以前トランザクションの入力の検索を可能にする。対照的に、表9は、同じロッキングスクリプト(すなわち、署名されている入力に対応する以前トランザクション)を有する以前トランザクションを抽出するためのロッキングスクリプトおよびアンロッキングスクリプトを示しており、SIGHASH_ALL|ANYONECANPAYのSIGHASHタイプを使用している。
図9に示されるように、SIGHASH_ALL|ANYONECANPAYのSIGHASHタイプは、署名された入力を持つ以前トランザクション以外の他の以前トランザクションの入力を除去する。
【0253】
1108において、システムは、以前に作成された署名を検証し、そして、次に、1110においては、獲得したシリアライズされた以前トランザクションのダブル(double)SHA-256を実行することによって、アンロッキングトランザクションのトランザクションID(すなわち、フィールド値のシリアライズされたセット)と一致する値を作成する。サブストリングオペレーションコードを使用して、1112において、システムは、フィールド値のシリアライズされたセットのトランザクションIDを抽出し、そして、1114において、システムは、シリアライズされた以前トランザクションのダブルSHA-256によって作成されたトランザクションIDが、フィールド値のシリアライズされたセットのトランザクションIDと一致するか否かを判断する。様々な実施形態において、一致(match)は必ずしも等価性(equality)を必要としないことに留意する。例えば、2つの値は、等しくなくても、数学的に等価である場合には一致し得る。別の実施例として、2つの値は、それらが共通のオブジェクト(例えば、値)に対応するか、または、いくつかの既定の方法において補足的(complementary)であるか、かつ/あるいは、それらが1つまたはそれ以上の一致基準(criteria)を満たす場合には、一致し得る。一般的に、一致が存在するか否かを決定する任意の方法が、使用され得る。また、1102-1114において実行されるオペレーションのうち1つまたはそれ以上は、並列を含み、様々な順序および組合せにおいて実行され得ることにも留意する。
【0254】
図12は、本開示の一つの実施形態によって解決されるロッキングスクリプトに関連する問題を説明する実施例1200を示している。すなわち、
図12に示される実施例1200は、未決定データをロッキングスクリプトに提供することによって提示される問題を説明している。いくつかの実施例において、用語「未決定データ(”undetermined data”)」は、ロッキングスクリプトをアンロックするアンロッキングスクリプトを介して提供される、データを参照し、そのうちロッキングスクリプトを実行しているノードは、事前の指示(prior indication)を有していない。
【0255】
いくつかの実施形態において、以前トランザクション1202は、
図3の以前トランザクション302と同様である。同様に、いくつかの実施形態において、アンロッキングトランザクション1204は、304と同様である。いくつかの実施形態において、ブロックチェーン1224は、ピアツーピアの、電子台帳内のトランザクションに係るブロックのセットから構成されている。実施形態において、ブロックチェーン1224の各ブロックは、ブロックが一緒にリンク(すなわち、「チェーン(”chained”)」)されるように、事前ブロック(prior block)のハッシュを含んでおり、ブロックチェーン内の全ての検証されたトランザクションの永続的で、不変的な記録を作成する。
【0256】
いくつかの実施形態において、未決定ソース(undetermined source)1222Aは、以前トランザクション1202のUTXOを獲得しようとするエンティティであってよい。未決定ソース1222Bは、未決定ソース1222Aと同じであってよく、または、未決定ソース1222Aとは異なるエンティティであってよい。いずれの場合でも、ロッキングスクリプトを実行するノードは、ロッキングスクリプトを実行する以前に、未決定ソース1222A-12Bに関する事前知識(prior knowledge)を有していない。
【0257】
実施例1200において、ロッキングスクリプト1206はブランクであり、それにより、データのソースまたはデータが何であるかについての事前知識なしにデータを受け入れることができる。データ(”<d>”)は、アンロッキングトランザクション1204が(例えば、未決定ソース1222Aによって)作成される時点で決定される。しかしながら、アンロッキングトランザクション1204は、それがブロックチェーン1224において確認される(その時点でアンロッキングトランザクション1204は不変(immutable)となる)以前の未決定ソース1222Bなどによる、変更の影響を受けやすい(別の言葉で言えば、可変(mutable)である)ので、そうしたロッキングスクリプトは、セキュリティ上の懸念(concerns)を提示している。
【0258】
図13は、本開示の一つの実施形態において、決定済(determined)ソースからの未決定(undetermined)データがロッキングスクリプト1306の中へどのようにしてセキュアに供給され得るのかを説明している実施例1300を示している。すなわち、
図13に示された実施例1300は、ロッキングスクリプト1306を実行するノードがソース(例えば、決定済ソース1326)の事前知識を有する状況において提示される問題を示している。事前知識は、データを提供するが、データがどうなるか(what the data will be)についての事前知識は無い。いくつかの実施形態において、以前トランザクション1302は、
図3の以前トランザクション302と同様である。同様に、いくつかの実施形態において、アンロッキングトランザクション1304は、304と同様である。いくつかの実施形態において、ブロックチェーン1324は、
図12のブロックチェーン1224と同様である。
【0259】
実施例1300において、ロッキングスクリプト1306は、ロッキングスクリプト1306を実行する検証ノードに、アンロッキングスクリプト1308内に提供されたデータが決定済データソースによって提供されたものか否かを検査させるように構成されている。すなわち、秘密鍵は、データ(d)に基づいて修正することができ、以下の方法でデータによる乗算を実行することによって、修正された(modified)秘密鍵(a’)を作成する。
a’=a×d
【0260】
修正されていない(unmodified)秘密鍵のカウンターパート(counterpart)である公開鍵(A)は、楕円曲線点乗算を実行することによって、同様に修正することができ、以下の方法で修正された公開鍵(A’)を作成する。
A’=d×A
【0261】
その結果、ロッキングスクリプト1306は、検証ノードに、署名を評価させるように構成され得る。署名は、データソースのための公開鍵(A)を使用して、データに基づいて修正された秘密鍵を使用して、署名されたものである。より特定的には、署名検査オペレーションコードが、ロッキングスクリプト1306の中に含まれてよい。これは、修正された秘密鍵を使用して署名された署名(Sig A’)が修正された公開鍵に対応しているか否か、そして、従って、有効な署名であるか否かを検査するものである。検査は、例えば、OP_CHECKSIGオペレーションコードを使用して実行され得る。
【0262】
実施例1300を見て分かるように、ロッキングスクリプト1306の実行は、ノードに、公開鍵をスタック上に置かせ、そして、公開鍵と、ロッキングスクリプト1308の事前実行によってスタック内に置かれたデータとの間で楕円曲線点乗算演算(OP_ECMULT)を実行する。次いで、ロッキングスクリプトにおいて指定されたソース(例えば、決定済ソース1326)によって、アンロッキングトランザクションが作成される時点で、データが決定され得る。従って、ロッキングスクリプトは、データを提供するソースについての知識を有しているが、データがどうなるかについての知識は無い。ロッキングスクリプト1306のさらなる実行は、修正された秘密鍵を使用して署名されたデータの署名に対する検証結果を生じさせる(例えば、OP_CHECKSIGは、値が一致した場合にTRUEを返す)。このアプローチは、アンロッキングトランザクション1304に対する変更がそれを無効にするので、セキュアである。しかしながら、データのソース(決定済ソース1326)が指定される必要がある。ECDSAにおける署名検証アルゴリズムは、署名、公開鍵、およびメッセージが、特定の数学的な関係性を有するか否かを検査することを含んでいる。メッセージは、あらゆるデータであってよい。ビットコインにおいて、検証オペレーションコード、OP_CHECKSIG、は、メッセージをシリアライズされたトランザクションであるものに制限することによって、あらゆる任意のデータがメッセージであることを妨げており、一方で、メッセージが特定のソースからのものであることを検証できるようにしている。本開示の実施形態は、この制限に対する代替の解決策を提供する。
【0263】
いくつかの実施形態において、未決定ソース1322は、データを変更することができないエンティティである。いくつかの実施形態において、決定済ソース1326は、ロッキングスクリプト1306が作成された時点で既知のエンティティであり、そうして、ロッキングスクリプト1306は、決定済ソース1326の公開鍵を含んでいる。
【0264】
図14は、未決定データが、どのように未決定ソースからロッキングスクリプト1406の中へセキュアに供給され得るかを説明する実施例1400を示している。具体的に、
図14は、
図11のプロセス1100と併せて説明されたロッキングスクリプトに基づいて、ロッキングスクリプトを実行するアンロッキングトランザクション1404を示している。いくつかの実施形態において、以前トランザクション1402は、
図3の以前トランザクション302と同様である。同様に、いくつかの実施形態において、アンロッキングトランザクション1404は、304と同様である。いくつかの実施形態において、ブロックチェーン1424は、
図12のブロックチェーン1224と同様である。
【0265】
実施例1400は、ロッキングスクリプト1406が作成される時点で実施例1400におけるデータが未決定(undetermined)であり得るという点で、
図13の実施例1300とは異なっている。問題のデータは、以前トランザクション1402のどこかに埋め込まれ、そして、従って、上記の
図8-
図11に関連して上述のように、シリアライズされた以前トランザクションを解析すること(parsing)によって抽出することができる。
【0266】
このようにして、ロッキングスクリプト1406を実行するノードは、シリアライズされた以前トランザクションを提供しているエンティティについて事前知識を有する必要がなく、そしてまた、ノードも以前トランザクション1402について事前知識を有する必要がない。さらに、以前トランザクション1402、ブロックチェーン1424にコミットされるもの、は、アンロッキングトランザクション1404が作成される時点で既に不変であり、そして、それによって、アンロッキングトランザクション1404が無効になることを生じることなく、変更から保護されている。しかしながら、ロッキングスクリプト1406を実行するノードは、データについて事前知識を有していないが、データは、以前トランザクション1402が作成される時点で決定されている。
【0267】
いくつかの実施態様において、ロッキングスクリプト1406は、
図11のプロセス1100に関して説明されるスクリプトに従ったスクリプトである。いくつかの実施態様において、アンロッキングスクリプト1408は、
図8-
図11と関連して説明されるアンロッキングスクリプトと同様である。例えば、実施例1400を見て分かるように、アンロッキングスクリプト1408は、少なくとも1つのシリアライズされた以前トランザクション、SIGHASHタイプ、およびアンロッキングトランザクション1404のアンロッキングトランザクションフィールドのシリアライズされたセットを含んでいる。
【0268】
未決定ソース1422Aは、シリアライズされた以前トランザクションにおいて符号化されたデータを供給するエンティティである。未決定ソース1422Bは、アンロッキングトランザクション1404をインターセプト(intercept)し、そして、変更しようと試みるエンティティである。いくつかの実施形態において、未決定ソース1422A-1422Bは、同一または異なるエンティティであってよい。実施例1400を見て分かるように、未決定ソース1422Aのアイデンティティ(identity)は、ロッキングスクリプト1406が作成される時点で知られる必要がない。さらに、データも、また、ロッキングスクリプト1406が作成される時点で知られる必要がない。それでも、未決定ソース1422Bは、依然として、データの変更から防がれている。
【0269】
実施形態においては、以前トランザクション1402の様々なフィールド、アンロッキングトランザクション1404によって実行されるロッキングスクリプト以外のものは、以前トランザクション1402の出力におけるデジタルアセットの量、または、以前トランザクション1402の別の出力のロッキングスクリプトにおいて符号化されたメタデータを含む、セキュアで未決定なデータを保管するために使用することができる。従って、実施例1400の実施形態により、実質的(virtually)に任意のエンティティは、以前トランザクションの中にデータを埋め込み、ロッキングスクリプト1406のいくつかの変形に対して支払い(pay)、そして、他のどのエンティティもデータを変更できないことを保証することができる。この特徴は、以下に記載されるさらなる実施形態において有用である。
【0270】
図15は、様々な実施形態に従って、未決定データをセキュアに供給するためのプロセス1500に係る一つの実施例を示すフローチャートである。プロセス1500のいくつか又は全て(または、あらゆる他の説明されるプロセス、または、これらのプロセスの変形及び/又は組合せ)は、実行可能な命令及び/又は他のデータを用いて構成された1つまたはそれ以上のコンピュータシステムのコントロールの下で実行され得る。そして、1つまたはそれ以上のプロセッサ上でまとめて実行される実行可能命令として実装され得る。実行可能命令及び/又は他のデータは、非一時的コンピュータ読取可能記憶媒体において保管され得る(例えば、磁気媒体、光学媒体、またはフラッシュ媒体において永続的に保管されるコンピュータプログラム)。
【0271】
例えば、プロセス1500のいくつか又は全ては、
図1の例示的なブロックチェーンネットワーク100といった、ブロックチェーンネットワークにおける検証ノードによって実行され得る。そうした検証ノードは、任意の適切なコンピューティングデバイスから構成され得る(例えば、データセンターにおけるサーバ、クライアントコンピューティングデバイス、計算リソースサービスプロバイダの分散システムにおける複数のコンピューティングデバイス、または、
図26のコンピューティングデバイス2600といった、任意の適切な電子クライアントデバイスによる)。プロセス1500は、一連のオペレーションを含んでおり、そこでは、未検証(unvalidated)トランザクションが受信され、未決定データ、およびアンロッキングスクリプトの実行の結果として第2値(second value)が獲得され、そして、未決定データが信頼されるデータソースに関連するものとして検証される。
【0272】
1502において、システムは、デジタルアセットの少なくとも一部分を再結合しようとするエンティティから未検証トランザクションを獲得する。未検証トランザクションは、ロッキングスクリプトおよびアンロッキングスクリプトを含んでいる。ロッキングスクリプトおよびアンロッキングスクリプトは、
図13および
図14に示されるロッキングスクリプトおよびアンロッキングスクリプトと同様であってよい。命令セットの実行は、TRUEに評価される場合に、未検証トランザクションを成功裡に検証する。従って、アンロッキングスクリプトは、ロッキングスクリプトの以前に実行され、ロッキングスクリプトによって使用されるメインスタックおよび代替スタックの値を設定する。
【0273】
図13の実施形態における未検証トランザクションのアンロッキングスクリプトは、未決定データ(”<d>”)、および、修正された秘密鍵を使用して署名された未決定データの署名(”<SigA’>”)を含んでいる。修正された秘密鍵は、決定済データソース(例えば、「ボブ(”Bob”)」)の秘密鍵に、楕円曲線点乗算を使用して、未決定データの値を乗じることによって修正されたものである。従って、秘密鍵は、楕円曲線上の点であろう。上述のように、このコンテクストにおける用語「未決定(”undetermined”)」は、データが指定されていないこと、または、そうでなければ、ロッキングスクリプト自体によって制約されていないことを意味する。同様に、「未決定データソース(”undetermined data source”)」は、そのアイデンティティが指定されていないか、または、ロッキングスクリプトによって制約されていないデータソースであり、一方で、「決定済データソース(”determined data source”)」は、(例えば、データソースの公開鍵を含むことによって)そのアイデンティティをロッキングスクリプト内の特定のデータソースであるように制約している。
図14の実施形態における未検証トランザクションのアンロッキングスクリプトは、シリアライズされた以前トランザクションの未決定データ、SIGHASHタイプ、およびアンロッキングトランザクションフィールドのシリアライズされたセットを含む。このようにして、データソースがシリアライズされた以前トランザクションであるので、データソースは、指定され、または、ロッキングスクリプト自体によって制約される必要がない。
【0274】
アンロッキングスクリプトに続いてロッキングスクリプトの実行の結果として、1504において、システムは、未決定データ、および、データ(例えば、修正された秘密鍵を用いて署名された署名、または、そこからトランザクション識別子を抽出できるアンロッキングトランザクションフィールドのシリアライズされたセット)に関連する決定済または未決定ソースを用いてデータを検証するために使用可能な値を獲得する。
【0275】
1506において、システムはデータを検証する。例えば、
図13の実施形態において、システムは、(上述のように)楕円曲線点乗算を使用して、データを用いて公開鍵を修正することによって、データが、ロッキングスクリプトに含まれる公開鍵と関連することを検証し、そして、修正された公開鍵が、楕円曲線点乗算を使用してそれ自体が修正された対応する秘密鍵を使用して作成された署名と関連することを検証している。別の実施例として、
図14の実施形態において、システムは、データが特定の以前トランザクションに対応することを、シリアライズされた以前トランザクションのハッシュが、
図11のプロセス1100の方法で、アンロッキングトランザクションフィールドのシリアライズされたセットから抽出されたトランザクションIDと一致するか否かを決定することによって、検証する。1502-1506において実行される1つまたはそれ以上のオペレーションは、並列を含み、様々な順序および組合せにおいて実行され得ることに留意する。
【0276】
図16は、本開示の一つの実施形態に係るパラメータ化可能な(parameterizable)スマートコントラクト1600の実施例を示している。具体的に、
図16は、アンロッキングトランザクション1604のアンロッキングスクリプト1608に制約を課すロッキングスクリプト1606を有する以前トランザクション1602を示している。
図16に示される実施形態は、本開示が、
図3-6の説明において、SIGHASHタイプに応じて決定されたアンロッキングトランザクションフィールドのセットが、どのようにしてロッキングスクリプト1606の中へ注入されるようにできるかを説明してきたこと、を思い出すことによって理解することができる。さらに、
図7-11の記載で、本開示は、SIGHASHタイプに応じて決定されたアンロッキングトランザクションフィールドのセットが、シリアライズされた以前トランザクションがロッキングスクリプト1606の中へ注入されるように制約を適用する以前に、トランザクションIDを抽出するためのサブストリングオペレーションコードを使用して、どのように構文解析され得るかを説明したことを思い出してみよ。このプロセスは、アンロッキングトランザクションフィールドのセットにおける任意のフィールドに作用(work)するように拡張され得る。
【0277】
図6および
図11のコンテクストにおいて説明したロッキングスクリプトは、アンロッキングトランザクションを作成する特定のエンティティに制限を課さないことに留意する。例えば、ロッキングスクリプトは、特定のエンティティが秘密(secret)(例えば、秘密鍵、特定のハッシュを作成する値、等)へのアクセス権を持つことの証明(proof)を必要としない。
図16の実施形態は、この概念をアンロッキングトランザクションを作成する特定のエンティティに関して非差別的(undiscriminating)であるように適用するが、どのようにUTXOが請求(claimed)され得るかについて所定の制約を課す。このようにして、
図16の実施形態は、自動的に実行され、自己実施的である。別の言葉で言えば、スマートコントラクトの条件が満たされない場合に(すなわち、指定された制約に従わない)、検証が失敗するので、契約は実行されない。
【0278】
いくつかの実施形態において、ロッキングスクリプト内のスマートコントラクトは、アンロッキングトランザクション1604の入力に制約(例えば、パラメータ)を課す(例えば、「アリス(”Alice”)」からの入力を要求する)ことによって、インタラクティブ(interactive)にすることができる。アンロッキングスクリプト1608は、アンロッキングスクリプト1606に対する入力ソースであるため、実施形態において、ロッキングスクリプト1606内のスマートコントラクトは、アンロッキングスクリプト1608内のセキュアな、未決定データを使用して、パラメータ化され得る。実施形態において、パラメータ化されたデータは、スマートコントラクトを変更から保護するために、
図13-
図15に関連して説明された方法における、未決定かつセキュアなパラメータ化されたデータは、スマートコントラクトを変更から保護する。実施形態において、パラメータ化されたデータは未決定(undetermined)である。
【0279】
本開示は、ロッキングスクリプト(例えば、スマートコントラクト)に対してセキュアな、未決定データを提供するための2つの方法を説明した。第1方法は、
図13および
図15のコンテクストにおいて説明されたように、決定済ソースから、セキュアな、未決定データを獲得できるというものである。第2方法は、
図14-
図15のコンテクストにおいて説明されたように、未決定ソース(例えば、以前トランザクション)からセキュアな、未決定データを獲得できるというものである。第1方法を使用する実施形態において、パラメータは、アンロッキングトランザクションを作成するエンティティによって決定され、そして、アンロッキングトランザクションが作成される時に(例えば、アンロッキングスクリプト1608において)設定されるだろう。第2方法を使用する実施形態において、パラメータは、以前トランザクションを作成したエンティティによって決定され、そして、以前トランザクションの作成時に設定される(すなわち、シリアライズされた以前トランザクションに埋め込まれる)だろう。また、実施形態において、第1および第2方法は、1つまたはそれ以上のパラメータが以前トランザクションに埋め込まれ、そして、1つまたはそれ以上の他のパラメータがアンロッキングトランザクションのアンロッキングスクリプトに埋め込まれ得るように、組合せられ得ることに留意する。
【0280】
次の実施例は、これらの方法を使用して、どのようにスマートコントラクトが作成され得るかを説明するために示されている。この実施例において、スマートコントラクトは、アリスのため又はアリスによって、彼女の所得の70%を貯蓄へ、そして、彼女の所得の30%を彼女の投資マネジャーであるボブ(Bob)へ移転するため作成されている。彼女の預金口座(saving account)は暗号の公開鍵A(PubK A)と関連付けられており、そして、ボブとの彼女の口座は暗号の公開鍵B(PubK B)と関連付けられている。アリスの雇用主は、このスマートコントラクトを実行し、支払日に、アリスの所得が上記の方法で分配されるようにする。従って、アリスの所得は、自動的に彼女が望むように分離される。
【0281】
この実施例において、パラメータは、スマートコントラクトの実行の結果として移転されるデジタルアセットの量である。スマートコントラクトの実行は、上記の基準(criteria)に従って、アンロッキングトランザクション1604の出力に対する制約を決定する前に、以前トランザクション1602からパラメータを抽出させるようにする。表10は、上記の実施例を実装するためのアンロッキングスクリプトおよびロッキングスクリプトの一つの例を示している。
【表10-1】
【表10-2】
【0282】
図17は、様々な実施形態に従った、パラメータ化されたスマートコントラクトを実施するためのプロセス1700に係る一つの実施例を示すフローチャートである。プロセス1700のいくつか又は全て(または、あらゆる他の説明されるプロセス、または、これらのプロセスの変形及び/又は組合せ)は、実行可能な命令及び/又は他のデータを用いて構成された1つまたはそれ以上のコンピュータシステムのコントロールの下で実行され得る。そして、1つまたはそれ以上のプロセッサ上でまとめて実行される実行可能命令として実装され得る。実行可能命令及び/又は他のデータは、非一時的コンピュータ読取可能記憶媒体において保管され得る(例えば、コンピュータプログラムは、磁気媒体、光学媒体、またはフラッシュ媒体において永続的に保管される)。
【0283】
例えば、プロセス1700のいくつか又は全ては、
図1の例示的なブロックチェーンネットワーク100といった、ブロックチェーンネットワーク内の検証ノードによって実行され得る。そうした検証ノードは、任意の適切なコンピューティングデバイスから構成され得る(例えば、データセンター内のサーバ、クライアントコンピューティングデバイス、計算リソースサービスプロバイダの分散システムにおける複数のコンピューティングデバイス、または、
図26のコンピューティングデバイス2600といった、任意の適切な電子クライアントデバイスによる)。プロセス1700は、一連のオペレーションを含んでおり、そこでは、セキュアな、未決定データに埋め込まれたパラメータから制約が抽出される。
【0284】
1702において、システムは、シリアライズされた以前トランザクション(例えば、
図16の以前トランザクション1602のシリアライズされたフィールド値)、SIGHASHタイプ、および、SIGHASHタイプに応じて決定されたアンロッキングトランザクションフィールドのセット(例えば、アンロッキングトランザクション1604のフィールド値)の注入を生じさせるスクリプトを実行する。スクリプトは、表8または表9からのスクリプトの変形であってよい。
図11のプロセス1100は、未決定ソースからのパラメータが必要とされない場合には、シリアライズされた以前トランザクションが必要とされないことがあるので、
図16および17のパラメータ化可能なスマートコントラクトに対して全体として(in its entirety)必要とされないことがあることに留意する。
【0285】
1704において、システムは、パラメータのソースが未決定ソースであるか又は決定済みソースであるかに依存する方法においてパラメータを抽出する。例えば、決定済ソースのデータからパラメータを抽出することは、
図13に関連して説明された方法において、アンロッキングスクリプト1608からパラメータを抽出することによって実行され得る。別の例として、未決定ソースのデータからパラメータを抽出することは、
図14に関連して説明された方法において、シリアライズされた以前トランザクションからパラメータを抽出することによって実行され得る。さらに別の例として、いくつかのパラメータが未決定ソースのデータに埋め込まれており、かつ、いくつかのパラメータが決定済ソースから受信される場合に、スクリプトは、未決定ソースおよび決定済ソースの両方から来るデータからパラメータを抽出するために、
図13および14のオペレーションを組合せるように書くことができる。
【0286】
1706では、システムはパラメータから制約を抽出する(derive)。例えば、表10の実施例のスクリプトにおいて、パラメータはスマートコントラクトに対して支払われる金額(amount)であり、そして、制約を抽出することは、アリスおよびボブのペイツーパブリックキー(pay-to-public-key、P2PK)アドレスに対して移転する支払い金額(例えば、70%および30%)を決定することを含む。しかしながら、パラメータから抽出され得るパラメータおよび制約は、上記の実施例を超えて、数多く、かつ、様々であり得ることが考慮されている。
【0287】
1708において、システムは、SIGHASHタイプに応じて決定されたアンロッキングトランザクションフィールド値セットに対して、制約を検証する。つまり、システムは、アンロッキングトランザクションの関連するサブセットが制約条件を満たしていることを検証する。アンロッキングトランザクションの関連するサブセットが制約を満たす場合には、アンロッキングトランザクションは有効なものとして確認される。そうでなければ、アンロッキングトランザクションの関連するサブセットが制約を満たさない場合に、アンロッキングトランザクションは無効であるとみなされる。1702-1708において実行されるオペレーションの1つまたはそれ以上は、並列を含み、様々な順序および組合せで実行され得ることに留意する。
【0288】
図18は、本開示の実施形態によって解決される、スマートコントラクトを繰り返すことに関連する問題に係る実施例1800を示す。すなわち、既知の回数(例えば、5回)を繰り返すトランザクションを作成するために、既知の回数のアンロッキングトランザクションを事前に作成することができるだろう。このことは、少数のトランザクションについては管理可能であろうが、多くの繰り返されるトランザクションを伴うコントラクトについては、アンロッキングトランザクション1804A-1804Nの全てを事前に作成することが煩わしいことになり、そして、スクリプト1806A-1806Nが非常に大きくなり得るだろう。例えば、アリスは、物品またはサービスと交換できる価値を有するデジタルアセット(例えば、ビットコイン)の金額を持っている。アリスは、学校のランチについて毎日支払うために息子のボブによって使用されるように、この金額を割り当てた。
図18の実施例1800は、アリスが、ボブの個々のランチのトランザクションそれぞれについて、事前にアンロッキングトランザクション1804A-1804Nを作成できることを示している。しかしながら、
図19に示されるように、本開示は、アリスのための代替的な解決策を考慮している。
【0289】
図19は、本開示の実施形態の自己複製(self-replicating)スマートコントラクトに係る一つの実施例1900を示している。
図19に示されるように、反復コントラクト(repeating contract)を達成するために事前決定された所定の数のアンロッキングトランザクションを作成するより、むしろ、
図16-
図17に関連して説明されたパラメータ化可能なスマートコントラクトに基づいて、終了条件(termination condition)を伴う自己複製スマートコントラクト1904を作成することができる。このようにして、上記の実施例において、アリスは、以前トランザクション1902におけるデジタルアセットの初期の金額から使い尽くすように、1つのアンロッキングトランザクションを作成する必要があるだけである。アンロッキングトランザクション1904Aは、アンロッキングトランザクション1904Aが次のアンロッキングトランザクションの中へ自身を複製させるスクリプトを含んでいる。スクリプトは、終了条件が満たされた後で(例えば、n回発生の後)、アンロッキングトランザクション1904Nに複製を停止させる終了条件を含んでいる。
【0290】
一つの可能な実装において、コントラクトのためのトランザクションのチェーンを作成するように、将来トランザクション(future transaction)が事前に作成され、そして、
図20に示されるように、各トランザクションのロッキングスクリプトは、継続的な(successive)トランザクションのロッキングスクリプトを埋め込む。しかしながら、自己複製するアンロッキングトランザクションについて、アンロッキングトランザクションの制約が変更されていないことを検証するためには、各以前トランザクションのロッキングスクリプト(例えば、スマートコントラクト)が、アンロッキングトランザクションのロッキングスクリプトと一致することをセキュアに検証する必要があるだろう。
【0291】
図20は、本開示の実施形態によって解決される反復トランザクションを伴う問題の一つの例2000を示している。すなわち、以前トランザクション2002のロッキングスクリプト(ロッキングスクリプト0)は、第1アンロッキングトランザクション2004Aのロッキングスクリプト(ロッキングスクリプト1)を組み込んでおり、第1アンロッキングトランザクションそれ自体は第2アンロッキングトランザクション2004Bのロッキングスクリプト(ロッキングスクリプト2)を組み込んでおり、そして、最後のアンロッキングトランザクション2004Nまで同様である。完全に展開された場合には、ロッキングスクリプト0はロッキングスクリプト1と同一ではなく、ロッキングスクリプト1はロッキングスクリプト2と同じではないこと、等が明らかになる。従って、実施例2000は、ロッキングスクリプトが同一ではないので、自己複製であると言うことはできない。この問題は、自己参照(self-referencing)に由来するものとして理解することができる。つまり、ロッキングスクリプトは、それ自体のコピーを埋め込む必要があり、絶え間ない(unending)そして、解明可能な(unravelable)ループになっているだろう。従って、ロッキングスクリプトは決定不可能(undeterminable)であろう。実施例2000は、n番目のロッキングスクリプトに値を割り当てる前にループが解明できる回数(n)を固定する。それにより、n-1ロッキングスクリプトはnロッキングスクリプトを埋め込むことができ、n-2ロッキングスクリプトはn-1ロッキングスクリプトを埋め込むことができる、等である。しかしながら、このことは、n個の異なるロッキングスクリプトを結果として生じる。
【0292】
図21は、自己複製トランザクションのナイーブ実装(naive implementation)に伴う問題に対する解決策の一つの例2100を示している。具体的に、
図21は、毎回1単位だけ、自分自身に送られるデジタルアセット量を減らし、そして、また、アリスに対して1単位のデジタルアセットも支払う、スマートコントラクトの複製(duplicating)を示している。すなわち、以前トランザクション2102は、初期量Xを保持している。第1アンロッキングトランザクション2104Aは、アリスに属しているペイツーパブリックキーハッシュ(pay-to-public-key-hash、P2PKH)アドレスに1単位のデジタルアセットを支払い、新しい合計(X'=X-1)を出力し、そして、第2アンロッキングトランザクション2104Bに対して自分自身を複製する。いくつかの実施例においては、P2PKまたはP2PKHを、それぞれの公開鍵に関連するエンティティへのデジタルアセットの移転を指示するアドレスとして使用することができる。第2アンロッキングトランザクション2104Bは、再び、1単位のデジタルアセットをアリスへ支払い、新しい合計(X"=X'-1)を出力し、そして、再び自分自身を複製する。
【0293】
従って、初期量Xに関係なくプロセスが継続すると、デジタルアセットの償還不可能な(unredeemable)量(例えば、ゼロ)を出力するために、アンロッキングトランザクションが最終的に作成されることが理解できる。このことは、様々なブロックチェーンプロトコルにおいて差し引かれた最低トランザクション料(minimum transaction fee)を差し引くことが無くてさえも、それぞれ後続のアンロッキングトランザクションが、以前トランザクションよりも小さい量のデジタルアセットを有することを観察することによって、直感的に理解できる。その結果、出力の量はゼロに向かって収束し、その点において、トランザクションの処理は無意味(pointless)になる。しかしながら、本開示の実施形態は、そうした償還不可能なアンロッキングトランザクションを回避するための終了条件を実施することによる、この問題に対する解決策を含んでいる。
【0294】
さらに、実施形態において、
図20に示される問題に対する解決策は、ロッキングスクリプト1に、第1データ(例えば、アンロッキングトランザクションデータ)および第2データ(例えば、以前トランザクションデータ)、両方ともロッキングスクリプトを埋め込んだもの、を受信させることである。これらの実施形態において、ロッキングスクリプト1は、第1データおよび第2データからのロッキングスクリプトが一致することを検証する。次いで、第2データ(以前トランザクションデータ)がロッキングスクリプト1を埋め込んでいることをロッキングスクリプト1が検証した場合には、第1データも、また、ロッキングスクリプト1を埋め込んでいることが検証される。
【0295】
そうしたスクリプトの基本的なアウトラインが、以下の表11に示されている。
【表11】
【0296】
上記のスクリプトを見て分かるように、以前トランザクション2102のロッキングスクリプト、UTXOをアンロックする現在実行中のロッキングスクリプト、は、第1アンロッキングトランザクション2104Aのロッキングスクリプトに対して検証される。第1アンロッキングトランザクションは、現在のアンロッキングトランザクションが別のアンロッキングトランザクション(例えば、第2アンロッキングトランザクション2104B)に対する以前トランザクションである場合に、将来償還される(redeemed)ものである。従って、
図18および
図20に示されるように、各トランザクションに対して異なるアンロッキングトランザクションを作成するより、むしろ、スクリプトは、代わりに、各ロッキングスクリプトが同一でなければならないことを強制する。以前トランザクション2102のロッキングスクリプトが、第2アンロッキングトランザクション2104Bがアンロックしようと試みるロッキングスクリプトと同一である場合(例えば、第1アンロッキングトランザクション2104A)、ロッキングスクリプトは、真正(genuine)であることが保証される。
【0297】
実施形態において、終了条件は、以前トランザクションが不十分なファンド(fund)を有しているが、ロッキングスクリプトは未だに検証する状況、すなわち、償還不可能なトランザクション(unredeemable transaction)を回避する。例えば、終了条件は、次のトランザクションを実行するために十分なデジタルアセットが存在することを検証するように実装することができ、そうでなければ、検証を終了する。より具体的な例として、第1プール(pool)が365単位のデジタルアセットと、プラスして各トランザクション料に要求される量(例えば、1年について1日に1つのトランザクションについて十分な金額)を含む場合に、終了条件は、残っている単位の数がトランザクションを完了するために必要とされる数より多いことを検証することができる。例えば、十分なファンドが存在する限り、終了条件は、トランザクションの検証を継続する。そうでなければ、不十分なファンドが存在する場合には、終了条件が満たされ、そして、検証が中断される。従って、366日目に不十分なファンドが存在する場合、366番目のアンロッキングトランザクションのロッキングスクリプトを検証することは不要であり、そして、終了条件は、ロッキングスクリプトの自己複製を終了することを確保する。
【0298】
図22は、様々な実施形態に従った、終了条件を伴う自己複製スマートコントラクトのためのプロセス2200に係る一つの例を示すフローチャートである。プロセス2200のいくつか又は全て(または、あらゆる他の説明されたプロセス、もしくは、それらのプロセスの変形及び/又は組合せ)は、実行可能な命令及び/又は他のデータを用いて構成された1つまたはそれ以上のコンピュータシステムのコントロールの下で実行され、そして、1つまたはそれ以上のプロセッサ上でまとめて実行される実行可能な命令として実装され得る。実行可能な命令及び/又は他のデータは、非一時的コンピュータ読取可能記憶媒体において保管することができる(例えば、磁気、光学、またはフラッシュ媒体において永続的に保管されるコンピュータプログラム)。
【0299】
例えば、プロセス2200のいくつか又は全ては、
図1の例示的なブロックチェーンネットワーク100といった、ブロックチェーンネットワークにおける検証ノードによって実行され得る。そうした検証ノードは、任意の適切なコンピューティングデバイスから構成され得る(例えば、データセンター内のサーバ、クライアントコンピューティングデバイス、計算リソースサービスプロバイダの分散システムにおける複数のコンピューティングデバイス、または、
図26のコンピューティングデバイス2600といった任意の適切な電子クライアントデバイスによる)。プロセス2200は、一連のオペレーションを含んでおり、そこでは、終了条件が満たされない場合に、アンロッキングトランザクションおよび以前トランザクションのロッキングスクリプトが同一であることが検証され、そして、他の制約が検証される。
【0300】
2202において、システムは、未検証トランザクションを受信する。システムは、未検証トランザクションのアンロッキングスクリプトを実行することによって開始され、そして、次いで、未検証トランザクションによって参照されるデジタルアセットと関連付けられた以前(検証済)トランザクションのロッキングスクリプトの実行を開始する。プロセス2200は、表11の例示的なスクリプトの変形を実行するものとして示されている。例えば、2204において、プロセス2200を実行しているシステムは、終了条件が満たされているか否かを判断する。上述のように、一つの実装において、トランザクションを完了するために不十分な量のデジタルアセットが存在する場合に、終了条件が満たされ得る。しかしながら、他の終了条件が可能であることが考慮されている。例えば、終了条件は、時間ベース(time-based)であり得る。特定の日付以前に未検証トランザクションが検証されない場合には、終了条件が満たされ得る。
【0301】
一旦終了条件が満たされると、2206において、プロセス2200は終了し、そして、検証が終了する。そうでなければ、2208において、システムは、未検証トランザクションから第1ロッキングスクリプトを抽出する。第1ロッキングスクリプトは、別の未検証トランザクションが現在のトランザクションのUTXOを転送しようと試みるといった時点で、現在の未検証トランザクションが検証された後で実行されるロッキングスクリプトであることに留意する。
【0302】
2210において、システムは、シリアライズされた以前トランザクションから第2ロッキングスクリプトを抽出する。この実施形態において、第2ロッキングスクリプトは、現在実行されているロッキングスクリプトのコピーである。2212では、プロセス2200を実行しているシステムは、第1ロッキングスクリプトが第2ロッキングスクリプトと一致するか否か(例えば、2つのロッキングスクリプトが同一であるか否か)を判断する。ロッキングスクリプトが一致しない場合、2214において、システムは、未検証トランザクションが検証に失敗し、そして、未検証のままであると判断する。
【0303】
そうでなければ、2216において、システムは、スクリプトにおける任意の残りの制約を検証する(例えば、以前トランザクションのデジタル署名または他の要求(requirement)を検証する)。残りの制約が存在しない場合、または、全ての残りの制約が成功裡に検証された場合には、次いで、トランザクションが成功裡に検証される。検証が成功した後で、トランザクションは、ブロックチェーンに追加され得る。2202-2216で実行されるオペレーションの1つまたはそれ以上は、並列を含み、様々な順序および組合せにおいて実行され得ることに留意する。
【0304】
図23は、本開示の一つの実施形態によって解決される問題の実施例2300を示している。具体的に、
図23は、ブロックチェーントランザクションを使用して、第1状態から第2状態へ遷移する(transitioning)ステートマシンを示している。いくつかの実施例において、ステートマシンの状態遷移は、現在の状態が与えられると、1つまたはそれ以上の入力2326、および、次の状態を決定する、状態規則(state rules)セット2306として説明される。
図23の実施例2300は、状態規則セット2306、および、パラメータに埋め込まれた第1状態2328Aを有する以前トランザクション2302を示している。いくつかの実施態様において、アンロッキングトランザクション2304は、決定済ソースからの入力2326を受け入れるように作成されている。入力2326は、第1状態2328Aと組み合わされて、状態規則セット2306を参照して、アンロッキングトランザクション2304のパラメータに埋め込まれた第2状態2328Bを決定するために使用可能である。
【0305】
実施形態において、状態規則セットは、状態遷移行列(state-transition matrix)であり、
図16および
図17に関連して説明されたような方法で、アンロッキングトランザクション2304における制約によって表すことができる。そのような実施形態において、制約は、現在の状態、および、次の状態がそこから決定される入力によってパラメータ化されている。制約は、アンロッキングトランザクション2304が次の状態値を特定のフィールドに含んでいることを保証するための検査(checks)を含む。
【0306】
実施形態において、現在の状態は、トランザクションに埋め込まれたパラメータとして表されており、そして、アンロッキングトランザクション2304は、アンロッキングトランザクション2304にも埋め込まれている次の状態値を有する。次の状態値は、アンロッキングトランザクション2304のフィールド値セットの中でスマートコントラクトに対する現在の状態であり、上述のように、アンロッキングトランザクション2304が作成されるときにアクセス可能なものである。いくつかの実施形態においては、少なくとも1つの入力が、アンロッキングトランザクション2304が作成される時点で決定されるパラメータにおいて外部データとして提供される。セキュアであるために、そうしたパラメータは、決定済ソースに由来している。このことは、決定論的な(deterministic)状態遷移を提供する。最終的に、
図18-
図22に関連して上述した自己複製スマートコントラクトのスクリプトを使用することによって、トラストレスな、決定論的ステートマシンの一つの実施形態が作成される。いくつかの実施例において、「トラストレス(”trustless”)」は、制約が満たされている限り、あらゆるエンティティが有効なアンロッキングトランザクションを作成することができるという特性を参照する。しかしながら、いくつかの事例において、エンティティは、必要とされる入力を獲得するために、決定済ソースとインタラクトする必要があり得る。
図23-
図25に関連して説明された様々な実施形態は、決定済ソースから入力を獲得することを参照するが、いくつかの実施形態においては、シリアライズされた以前トランザクションからといった、未決定ソースから1つまたはそれ以上の入力を獲得することができることが考慮されることに留意する。
【0307】
図24は、本開示の一つの実施形態に係るトラストレス決定論的ステートマシンの実施例2400を示している。
図24に示されるように、例2400は、状態規則セット2406において第1状態2428A(「S1」)での以前トランザクション2402を含み得る。実施例2400において、状態規則セット2406は、次の状態に対して2つの可能な状態2430A(「S2」または「S3」)を提供する。実施例2400を見て分かるように、アンロッキングトランザクション2404は、入力として、そのアンロッキングスクリプトにおける入力2426および以前トランザクション2402のフィールド値セットに埋め込まれている第1状態2428A(「S1」)を捉えて、状態規則セット2406から適切な第2状態2428B(「S2」)を決定する。実施例2400を見てさらに分かるように、状態遷移行列が、今や、第2状態2428Bからの次の状態遷移のために可能な新しい状態2430B(「S4」または「S5」)を提供する。状態規則セット2406は、現在の状態および1つまたはそれ以上の入力によってパラメータ化されたスイッチ文(switch statement)、または、他の条件文(例えば、”if-then-else”)として符号化され得ることに留意する。
【0308】
実施形態において、各可能な状態は、自己複製ロッキングスクリプトにおいて、状態遷移行列といった、状態変化のための規則セットで表現され、そして、特定のトランザクションは、特定の状態におけるステートマシンを表している。そうした実施形態において、トランザクションのロッキングスクリプトは、デジタルアセットのコントロールが、現在のトランザクションにリンクされる必要がある、次のトランザクションに移転しようと試みる全ての(every)アンロッキングトランザクションに対して複製される。このプロセスは、終了条件が満足されるまで反復される。入力が固定されておらず、かつ、未決定データであり得るので、ステートマシンの状態は、特定の外部入力に基づいて変化するように作成することができる。従って、未決定データは、次の状態に影響し得る入力を提供する。
【0309】
一つの説明的な例として、アリスはいくらかの金をBobに貸し、そして、ボブはアリスに返済することに同意している。本開示において説明されるように、トラストレスな、確率論的ステートマシンは、ボブがアリスに対して行う送金(transfer)を表現するスマートコントラクトとして実装され得る。例えば、スマートコントラクトは、今後3ヶ月についてボブが毎月アリスに対する支払いを行い、そして、支払いがされない場合に、ボブの負債(debt)が債権回収段階に入るように構築することができる。従って、ボブが月毎に送金を行う限り、現在状態は、返済(repayment)状態のままである。しかしながら、ボブが送金しなかったことを示す入力を外部エンティティが提供すると、次いで、状態は、ミス送金状態(missed transfer state)に分岐する。ミス送金状態において、アリスは、トランザクションをリリース(release)し、そして、債権回収者に引き渡すことができる。そうすると、トラストレス決定論的ステートマシンは、債権回収状態に切り替わる。債権回収状態において、債権回収者は、ボブから債権を回収する。そうしたスマートコントラクトは、
図23-
図25に示される実施形態のスクリプトにおける変形を使用して、作成することができる。
【0310】
別の実施例においては、アリスは非常に慈善的な人物であり、毎月1単位のデジタルアセットを寄付している。彼女の規則は、誰でもデジタルアセットを請求できるが、月毎に1単位だけ請求することができるというものである。アリスは、本開示において説明される方法でスマートコントラクトを作成し、そして、3単位のデジタルアセットの初期プール(initial pool)と共にシード(seed)する。アリスは、任意のエンティティが月毎に1単位のデジタルアセットを獲得できるようにするスクリプトを構築することができる。デジタルアセットの残りの部分は、後続のスマートコントラクトに対して複製される。以下の表は、本開示のトラストレス決定論的ステートマシンを実装するアンロッキングスクリプトおよびロッキングスクリプトの一つの実施例を示している。
【表12-1】
【表12-2】
【0311】
図25は、様々な実施形態に従った、トラストレスな、決定論的ステートマシンのためのプロセス2500に係る一つの実施例を示すフローチャートである。プロセス2500のいくつか又は全て(または、あらゆる他の説明されるプロセス、または、これらのプロセスの変形及び/又は組合せ)は、実行可能な命令及び/又は他のデータを用いて構成された1つまたはそれ以上のコンピュータシステムのコントロールの下で実行され得る。そして、1つまたはそれ以上のプロセッサ上でまとめて実行される実行可能命令として実装され得る。実行可能命令及び/又は他のデータは、非一時的コンピュータ読取可能記憶媒体において保管され得る(例えば、コンピュータプログラムは、磁気媒体、光学媒体、またはフラッシュ媒体において永続的に保管される)。
【0312】
例えば、プロセス2500のいくつか又は全ては、
図1の例示的なブロックチェーンネットワーク100といった、ブロックチェーンネットワーク内の検証ノードによって実行され得る。そうした検証ノードは、任意の適切なコンピューティングデバイスから構成され得る(例えば、データセンター内のサーバ、クライアントコンピューティングデバイス、計算リソースサービスプロバイダの分散システムにおける複数のコンピューティングデバイス、または、
図26のコンピューティングデバイス2600といった、任意の適切な電子クライアントデバイスによる)。プロセス2500は、一連のオペレーションを含んでおり、そこで、自己複製スマートコントラクトのロッキングスクリプトが検証され、シリアライズされた以前トランザクションから現在の状態が得られ、アンロッキングスクリプトから入力が得られ、そして、状態規則セットに少なくとも部分的に基づいて次の状態が決定される。プロセス2500は、表12に見られる例示的なスクリプトの変形を反映している。
【0313】
2502において、システムはアンロッキングトランザクションを受信する。システムは、アンロッキングトランザクションのアンロッキングスクリプトを実行することによって開始する。それは、シリアライズされた以前トランザクションおよびロッキングスクリプトの中に埋め込まれた入力がスタックに置かれるようにさせる。これらの入力は、2512において取出される(retrieved)。2504では、プロセス2500を実行しているシステムが、終了条件が満たされているか否かを判断する。終了条件は、
図19-22に関連して説明したような終了条件であってよい。実施形態において、終了条件は、満たされたときに、ステートマシンの遷移を終了させるものである。終了条件が満たされた場合、プロセス2500を実行しているシステムは、2506へ進み、そうすると、トラストレスな、決定論的ステートマシンは、自己複製を停止する。
【0314】
2508において、システムは、
図22の2212で説明された方法で、以前トランザクションのロッキングスクリプトが、アンロッキングトランザクションのロッキングスクリプトと一致することを検証する。ロッキングスクリプトが一致しない場合に、検証は失敗し、そして、アンロッキングトランザクションは有効にされない。さもなければ、ロッキングスクリプトが一致する場合に、2510において、システムはシリアライズされた以前トランザクションから可能な状態セット(a set of possible states)の現在の状態を抽出する。2512において、システムは、ロッキングスクリプトの実行の結果として、スタック上に置かれた入力(input or inputs)を獲得する。次に、2514において、システムは、現在の状態および入力に基づいて、トラストレスな、決定論的ステートマシンについて可能な状態セットの次の状態を決定するために、状態規則セットを適用する。2516において、システムは、次の状態(例えば、適用可能である場合に、状態変数および他の状態関連データ)がアンロッキングトランザクションに埋め込まれていることを検証する。システムは、また、ロッキングスクリプトにおいて指定されるように、あらゆる残りの制約も適用し得る。2502-16のオペレーションが成功裡に完了した後、プロセスは2500で終了し、そうすると、アンロッキングトランザクションは、プロセスを実行しているシステムによって、有効であるとみなすことができる。2502-18において実行されるオペレーションの1つまたはそれ以上は、並列を含み、様々な順序および組合せにおいて実行され得ることに留意する。
【0315】
開示された実施形態を説明するコンテクストにおいては、別段の規定がない限り、「命令」が通常は単独では実行しないオペレーション(例えば、データの送信、計算、等)を実行する、実行可能な命令(コード、アプリケーション、エージェント、等としても参照されるもの)に関する表現の使用は、命令がマシンによって実行されていることを意味しており、それによって、指定されたオペレーションをマシンに実行させている、ことに留意する。
【0316】
図26は、本開示の少なくとも1つの実施形態を実施するために使用され得る、コンピューティングデバイス2600の例示的な単純化されたブロック図である。様々な実施形態において、コンピューティングデバイス2600は、上記に例示され、説明されたシステムのいずれかを実装するために使用され得る。例えば、コンピューティングデバイス2600は、データサーバ、ウェブサーバ、ポータブルコンピューティングデバイス、パーソナルコンピュータ、または任意の電子コンピューティングデバイスとしての使用のために構成され得る。
図26に示されるように、コンピューティングデバイス2600は、バスサブシステム2604を介して多数のペリフェラルサブシステムと通信し、そして、動作可能に結合されるように構成され得る、1つまたはそれ以上のプロセッサ2602を含んでよい。プロセッサ2602は、本開示の実施形態における監視モデル(supervised model)のランダムフォレスト(random forest)における決定木(decision tree)のトラバーサル(traversal)のために利用され得る(例えば、様々な検索語の逆文書頻度(inverse document frequency)の評価を生じさせる)。これらのペリフェラルサブシステムは、ストレージサブシステム2606を含んでよく、メモリサブシステム2608およびファイル/ディスクストレージサブシステム2610、1つまたはそれ以上のユーザインターフェイス入力装置2612、1つまたはそれ以上のユーザインターフェイス出力装置2614、およびネットワークインターフェイスサブシステム2616を備えている。そうしたストレージサブシステム2606は、本開示において説明されるトランザクションに関連する詳細、本開示において説明される履歴レコードのデータベース、および本開示における監視モデルの決定ルール(decision rule)の保管といった、情報の一時的または長期間の保管のために使用されてよい。
【0317】
バスサブシステム2604は、コンピューティングデバイス2600の様々なコンポーネントおよびサブシステムが、意図されるように相互に通信することを可能にするメカニズムを提供することができる。バスサブシステム2604は、単一のバスとして模式的に示されているが、バスサブシステムの代替的な実施形態は、複数のバスを利用し得る。ネットワークインターフェイスサブシステム2616は、他のコンピューティングデバイスおよびネットワークへのインターフェイスを提供し得る。ネットワークインターフェイスサブシステム2616は、他のシステムからデータを受信し、そして、コンピューティングデバイス2600から他のシステムへデータを送信するためのインターフェイスとして機能し得る。例えば、ネットワークインターフェイスサブシステム2616は、データ技術者が、ユーザデータセンターといった、遠隔地に居る間にデータを送信および受信できるように、データ技術者がデバイスを無線ネットワークに接続することを可能にし得る。バスサブシステム2604は、詳細、検索語、等といったデータを、本開示の監視モデルに通信するために利用されてよく、そして、監視モデルの出力を、1つまたはそれ以上のプロセッサ2602に対して、かつ、ネットワークインターフェイスサブシステム2616を介して商人(merchant)及び/又は債権者(creditor)に対して通信するために利用されてよい。
【0318】
ユーザインターフェイス入力装置2612は、1つまたはそれ以上のユーザ入力装置を含んでよい。キーボードや、統合マウス、トラックボール、タッチパッド、またはグラフィックスタブレットといったポインティングデバイスや、スキャナや、バーコードスキャナや、ディスプレイの中に組み込まれたタッチスクリーンや、音声認識システム、マイクロフォンといった音声入力装置や、他のタイプの入力装置といったものである。一般的に、用語「入力装置(”input device”)」の使用は、コンピューティングデバイス2600に対して情報を入力するためのあらゆる可能なタイプの装置およびメカニズムを含むように意図されている。1つまたはそれ以上のユーザインターフェイス出力装置2614は、ディスプレイサブシステム、プリンタ、またはオーディオ出力装置といった非視覚的ディスプレイ、等を含んでよい。ディスプレイサブシステムは、ブラウン管(CRT)や、液晶ディスプレイ(LCD)、発光ダイオード(LED)ディスプレイといったフラットパネル装置や、またはプロジェクションもしくは他のディスプレイ装置であってよい。一般的に、用語「出力装置」の使用は、コンピューティングデバイス2600から情報を出力するためのあらゆる可能なタイプの装置およびメカニズムを含むように意図されている。1つまたはそれ以上のユーザインターフェイス出力装置2614は、例えば、ユーザインターフェイスを提示するために使用されてよく、ここにおいて説明されたプロセスおよび変形を実行しているアプリケーションとのユーザ対話(interaction)を、そうした対話が適切であり得る場合に、促進する。
【0319】
ストレージサブシステム2606は、本開示の少なくとも1つの実施形態の機能性を提供し得る基本プログラミングおよびデータ構造を保管するためのコンピュータ読取可能記憶媒体を提供し得る。アプリケーション(プログラム、コードモジュール、命令)は、1つまたはそれ以上のプロセッサによって実行されるとき、本開示の1つまたはそれ以上の実施形態に係る機能性を提供することができ、そして、ストレージサブシステム2606において保管され得る。これらのアプリケーションモジュールまたは命令は、1つまたはそれ以上のプロセッサ2602によって実行され得る。ストレージサブシステム2606は、本開示に従って使用されるデータを保管するためのリポジトリ(repository)を追加的に提供し得る。ストレージサブシステム2606は、メモリサブシステム2608およびファイル/ディスクストレージサブシステム2610を含み得る。
【0320】
メモリサブシステム2608は、プログラム実行の最中に命令およびデータを保管するためのメインランダムアクセスメモリ(RAM)2618および固定された命令が保管され得るリードオンリーメモリ(ROM)2620を含み、多数のメモリを有し得る。ファイル/ディスクストレージサブシステム2610は、プログラムファイルおよびデータファイルのための非一時的な永続性の(不揮発性)ストレージを備えてよく、そして、ハードディスクドライブ、関連するリムーバブル媒体と一緒にフロッピー(登録商標)ディスクドライブ、コンパクトディスクリードオンリーメモリドライブ(CD-ROM)、光学式ドライブ、リムーバブル媒体カートリッジ、および、他の同様の記憶媒体を含み得る。
【0321】
コンピューティングデバイス2600は、少なくとも1つのローカルクロック2624を含み得る。ローカルクロック2624は、特定の開始日から発生した時間(numbers of ticks)を表すカウンタであり、そして、コンピューティングデバイス2600の中に一体的に配置され得る。
【0322】
ローカルクロック2624は、特定のクロックパルスにおいて、コンピューティングデバイス2600のためのプロセッサ及びそこに含まれる全てのサブシステムにおけるデータ転送を同期させるために使用され、そして、コンピューティングデバイス2600とデータセンター内の他のシステムとの間の同期オペレーションを調整するために使用され得る。一つの実施形態において、ローカルクロック2624は、原子時計(atomic clock)である。別の実施形態において、ローカルクロックは、プログラム可能なインターバルタイマである。
【0323】
コンピューティングデバイス2600は、ポータブルコンピューティングデバイス、タブレットコンピュータ、ワークステーション、または、以下に記載されるあらゆる他の装置を含む、様々なタイプのものであってよい。追加的に、コンピューティングデバイス2600は、1つまたはそれ以上のポート(例えば、USB、ヘッドフォンジャック、ライティングコネクタ(Lightning connector)、等)を介してコンピューティングデバイス2600に接続され得る別の装置を含んでよい。コンピューティングデバイス2600に接続され得る装置は、光ファイバコネクタを受け入れるように構成された複数のポートを含んでよい。従って、この装置は、光信号を、装置を接続しているポートを介してコンピューティングデバイス2600へ処理のために送信され得る電気信号に変換するように構成されてよい。コンピュータおよびネットワークの絶えず変化する性質のため、
図26に示されるコンピューティングデバイス2600の説明は、装置の好ましい実施形態を説明する目的のための特定の例としてだけ意図されたものである。
図26に示されるシステムより多くの又は少ないコンポーネントを有する他の多くの構成が可能である。
【0324】
本明細書および図面は、従って、限定的な意味ではなく、むしろ、例示的な意味に考えられるべきである。しかしながら、請求項に記載される本発明の範囲から逸脱することなく、様々な修正および変更が成され得ることが明らかであろう。同様に、他の変形は本開示の範囲内のものである。従って、開示された技術は、様々な修正および代替的な構成を受けやすいが、それらの所定の例示された実施形態が、図面に示され、そして、上記で詳細に説明されてきた。しかしながら、本発明を開示された特定の形式に限定する意図は存在せず、逆に、添付の請求項において定義されているような、本発明の範囲内にある全ての変更、代替的な構成、および均等物をカバーする意図であることが理解されるべきである。
【0325】
用語「一つの("a"と"an")」および「その("the")」、ならびに、開示された実施形態を説明するコンテクスト(特に、以降の請求項のコンテクスト)における類似の参照の使用は、別段の指示がない限り、またはコンテクストにより明らかに矛盾しない限り、単数および複数の両方をカバーするものと解釈される。用語「含む(”comprising”、”having”、および”containing”)」は、別段の記載がない限り、オープンエンド(open-end)な用語(すなわち、「含むが、限定されない(”including, but not limited to”)」を意味する)として解釈される。用語「接続された(”connected”)」は、変更されず、かつ、物理的接続を指す場合には、たとえ何らかの介在するものが存在しても、部分的または全体的に、内部に含まれ、取り付けされ、または、一緒に結合されているものと解釈される。本開示における値の範囲の引用は、別段の指示がない限り、範囲内に入るそれぞれ別個の値を個々に参照する簡略された方法として機能するように単に意図されたものであり、そして、それぞれ別個の値はあたかも個々に引用されているかのように明細書の中に組み込まれている。用語「セット(”set”)」(例えば、「アイテムセット(”a set of items”)」または「サブセット(”subset”)」の使用は、コンテクストによる別段の注記または矛盾がない限り、1つまたはそれ以上のメンバーを含む空でない(nonempty)収集として解釈されるべきである。さらに、コンテクストによる別段の注記または矛盾がない限り、対応するセットに係る用語「サブセット」は、必ずしも対応するセットの適切なサブセットを示すものではないが、サブセットおよび対応するセットは同等であってよい。
【0326】
「A、B、およびCのうち少なくとも1つ(”at least one of A,B,and C”または”at least one of A,B andC”)」の形式のフレーズといった結合的な言語は、特に別段の記載がない限り、または、コンテクストによって明らかに矛盾しない限り、一般的に使用されるコンテクストとして理解され、アイテム、用語、等が、AまたはBまたはCのいずれか、もしくは、AおよびBおよびCのセットのうち任意の空でないサブセットであり得ることを示す。例えば、3つのメンバーを有するセットの例示的な例において、結合的な言語「A、B、およびCのうち少なくとも1つ」は、以下の集合(set)のうちいずれかを指す。{A}、{B}、{C}、{A,B}、{A,C}、{A,B,C}。従って、そうした結合的な言語は、一般的に、所定の実施形態が、少なくとも1つのA、少なくとも1つのB、および、少なくとも1つのCがそれぞれ存在するように要求することを意味するようには意図されていない。
【0327】
説明されたプロセスのオペレーションは、別段の指示がない限り、またはコンテクストにより明らかに矛盾しない限り、任意の適切な順序で実行することができる。説明されるプロセス(または、その変形及び/又は組合せ)は、実行可能な命令を伴って構成される1つまたはそれ以上のコンピュータシステムのコントロールの下で実行され、そして、ハードウェアまたはそれらの組合せによって、1つまたはそれ以上のプロセッサ上でまとまって実行されるコード(例えば、実行可能な命令、1つまたはそれ以上のコンピュータプログラム、または1つまたはそれ以上のアプリケーション)として実装され得る。コードは、例えば、1つまたはそれ以上のプロセッサによって実行可能な複数の命令を含むコンピュータプログラムの形式で、コンピュータ読取可能記憶媒体上に保管され得る。コンピュータ読取可能記憶媒体は、非一時的なものであり得る。
【0328】
提供されるあらゆる全ての実施例、または、例示的な言語(例えば、「といった(”such as”)」)の使用は、本発明の実施形態をより良く明確にするようにだけ意図されたものであり、そして、他に請求されない限り、本発明の範囲を限定するものではない。明細書における言語は、任意の請求されていない要素を本発明の実施に不可欠なものとして示しているものと解釈されてはならない。
【0329】
本発明を実施するために発明者に知られているベストモードを含めて、本開示の実施形態が説明されている。これらの実施形態の変形は、前述の説明を読めば、当業者にとって明らかになり得る。発明者は、そうした変形を当業者が適宜採用することを期待しており、そして、発明者は、本開示の実施形態が、特定的に説明された以外のもので実施されるように意図している。従って、本開示の範囲は、適用可能な法律によって許容されるように、添付される請求項に記載された技術的事項(subject matter)の全ての変更および均等物を含んでいる。さらに、上述のエレメントのあらゆる可能な変形における任意の組合せは、別段の指示がない限り、またはコンテクストにより明らかに矛盾しない限り、本開示の範囲に包含されるものである。
【0330】
刊行物、特許出願、および特許を含む、引用された全ての参考文献は、まるで各参考文献が個別にかつ特定的に参照により包含され、そして、その全体が明らかであるかのように、同じ程度に、参考として本明細書に組み込まれている。
【0331】
上述の実施形態は、本発明を限定するものではなく、むしろ本発明を例示するものであること、および、当業者は、添付の請求項によって定義されるように、本発明の範囲から逸脱することなく、多くの代替的な実施形態を設計することができることに留意すべきである。請求項においては、括弧内に置かれたあらゆる参照符号は、クレームを限定するものとして解釈されてはならない。用語「含む(”comprising”、”comprises”)」、等は、あらゆる請求項または明細書全体において列挙されたもの以外の要素またはステップの存在を排除するものではない。本明細書において、「含む(”comprises”)」とは、「含む、または、から構成される」ことを意味し、そして、「含む(”comprising”)」とは、「含んでいる、または、から構成されている」ことを意味する。要素の単数形の参照は、そうした要素の複数形の参照を排除するものではなく、そして、その逆もまた同様である。本発明は、いくつかの別個の要素を含むハードウェアによって、および、適切にプログラムされたコンピュータによって実施することができる。いくつかの手段を列挙している装置クレームにおいて、これらの手段のいくらかは、1つおよび同じハードウェアのアイテムによって具体化され得る。所定の手段が相互に異なる従属請求項に記載されているという単なる事実は、これらの手段の組合せが有利に利用され得ないことを示すものではない。