図1は、ブロックチェーン150を一般的に実装するための例示的なシステム100を示す。システム100は、典型的にはインターネットのような広域インターネットワークであるパケット交換ネットワーク101を含む。パケット交換ネットワーク101は、パケット交換ネットワーク101内にピアツーピア(P2P)オーバーレイ・ネットワーク106を形成するように構成された複数のノード104を含む。各ノード104はピアのコンピュータ設備を含み、異なるノード104は異なるピアに属する。各ノード104は、一つまたは複数のプロセッサ、たとえば、一つまたは複数の中央処理装置(CPU)、アクセラレータ・プロセッサ、特定用途向けプロセッサ、および/またはフィールド・プログラマブル・ゲート・アレイ(ASIC)を含む処理装置を含む。各ノードはまた、メモリ、すなわち、非一時的なコンピュータ読み取り可能媒体またはメディアの形のコンピュータ読み取り可能記憶をも有する。メモリは、一つまたは複数のメモリ媒体、たとえば、ハードディスクなどの磁気媒体、固体ドライブ(SSD)、フラッシュメモリまたはEEPROMなどの電子媒体、および/または光ディスク・ドライブなどの光媒体を使用する一つまたは複数のメモリユニットを含んでいてもよい。
ブロックチェーン150は、データ151のブロックのチェーンを含み、ブロックチェーン150のそれぞれのコピーは、P2Pネットワーク160内の複数のノードのそれぞれに維持される。チェーン内の各ブロック151は、一つまたは複数のトランザクション152を含み、ここで、この文脈におけるトランザクションは、一種のデータ構造をいう。データ構造の性質は、トランザクション・モデルまたはスキームの一部として使用されるトランザクション・プロトコルのタイプに依存する。所与のブロックチェーンは、典型的には、全体を通して、1つの特定のトランザクション・プロトコルを使用する。1つの一般的なタイプのトランザクション・プロトコルでは、各トランザクション152のデータ構造は、少なくとも1つの入力および少なくとも1つの出力を含む。各出力は、ユーザー103に属するある量のデジタル資産を表す量〔額〕を指定し、該出力は暗号学的にそのユーザーにロックされている(ロック解除され、それにより償還または使用されるためには、そのユーザーの署名を必要とする)。各入力は、先行するトランザクション152の出力に遡って参照し、それによりトランザクションをリンクする。
ノード104の少なくともいくつかは、トランザクション152を転送し、それにより伝搬させる転送ノード104Fの役割を担う。ノード104の少なくともいくつかは、ブロック151を採掘するマイナー104Mの役割を担う。ノード104の少なくともいくつかは、記憶ノード104S(時に「完全コピー」ノードとも呼ばれる)の役割を担い、各記憶ノードは、それぞれのメモリに同じブロックチェーン150のそれぞれのコピーを記憶する。各マイナー・ノード104Mはまた、ブロック151中にマイニングされるのを待つトランザクション152のプール154を維持する。所与のノード104は、転送ノード104、マイナー104M、記憶ノード104S、またはこれらの2つもしくは全部の任意の組み合わせでありうる。
所与の現在のトランザクション152jにおいて、入力(または各入力)は、トランザクションのシーケンスにおける先行するトランザクション152iの出力を参照するポインタを含み、それが、この出力が現在のトランザクション152jにおいて償還または「消費」されることを指定する。一般に、先行するトランザクションは、プール154または任意のブロック151における任意のトランザクションでありうる。先行するトランザクション152iは、現在のトランザクション152jが作成され、または、ネットワーク106に送信される時点では必ずしも存在する必要はないが、現在のトランザクションが有効であるためには、先行するトランザクション152iが存在し、かつ、有効確認される必要がある。よって、本明細書において、「先行」とは、必ずしも時間的なシーケンスにおける生成または送信の時ではなく、ポインタによってリンクされる論理的なシーケンスにおける先行者を意味し、よって、トランザクション152i、152jが順序外で生成または送信されることを必ずしも排除しない(オーファン・トランザクションに関する後述の議論を参照)。先行するトランザクション152iは、等価に、先立つトランザクションまたは先行者トランザクションと呼ばれることができる。
現在のトランザクション152jの入力は、先行するトランザクション152iの出力がロックされているユーザー103aの署名も含む。そして、現在のトランザクション152jの出力は、新しいユーザー103bに暗号的にロックされることができる。よって、現在のトランザクション152jは、先行するトランザクション152iの入力において定義された量を、現在のトランザクション152jの出力において定義された新しいユーザー103bに移転することができる。いくつかの場合には、トランザクション152は、複数のユーザー間で入力量を分割するために複数の出力を有してもよい(おつりを与えるために、該複数のユーザーのうちの一はもとのユーザー103aであってもよい)。場合によっては、トランザクションが複数の入力をもち、一つまたは複数の先行トランザクションの複数の出力からの額を一緒に集め、現在のトランザクションの一つまたは複数の出力に再分配することもできる。
上記は、「出力ベース」トランザクション・プロトコルと呼ばれることがあり、時には未使用トランザクション出力(unspent transaction output、UTXO)タイプのプロトコルとも呼ばれることもある。ユーザーの合計残高は、ブロックチェーンに格納されるどの1つの数字においても定義されず、その代わり、ユーザーは、ブロックチェーン151内の多くの異なるトランザクション152に散在する、そのユーザーのすべてのUTXOの値を照合するために、特別な「ウォレット」アプリケーション105を必要とする。
代替的なタイプのトランザクション・プロトコルは、アカウント〔口座〕ベースのトランザクション・モデルの一部として、「アカウント・ベースの」プロトコルと呼ばれることがある。アカウント・ベースの場合、各トランザクションは、過去のトランザクションのシーケンスにおける先行するトランザクションのUTXOを遡って参照することによってではなく、絶対的なアカウント残高を参照することによって、移転される金額を定義する。すべてのアカウントの現在の状態は、ブロックチェーンとは別個にマイナーによって記憶され、常時更新される。本開示は、アカウント・ベースではなく、出力ベースのモデルに関する。
いずれのタイプのトランザクション・プロトコルでも、ユーザー103が新しいトランザクション152jを制定することを望む場合、ユーザーは、自分のコンピュータ端末102からP2Pネットワーク106のノード104の1つ(今日では、これは典型的にはサーバーまたはデータ・センターであるが、原理的には他のユーザー端末でもよい)に新しいトランザクションを送信する。このノード104は、各ノード104で適用されるノード・プロトコルに従って、そのトランザクションが有効であるかどうかをチェックする。ノード・プロトコルの詳細は、問題のブロックチェーン150において使用されているトランザクション・プロトコルのタイプに対応し、それらが一緒になって全体的なトランザクション・モデルをなす。ノード・プロトコルは、典型的には、新規トランザクション152jにおける暗号署名が、トランザクション152の順序付けされたシーケンスにおける先行するトランザクション152iに依存する期待される署名と一致することをチェックするために、ノード104を必要とする。出力ベースの場合、これは、新しいトランザクション152jの入力に含まれるユーザーの暗号署名が、新しいトランザクションが費やす先行トランザクション152iの出力において定義された条件にマッチすることをチェックすることを含んでいてもよく、この条件は、典型的には、新しいトランザクション152jの入力における暗号署名が、新しいトランザクションの入力がポイントする先行トランザクション152iの出力をロック解除することを少なくともチェックすることを含む。いくつかのトランザクション・プロトコルでは、条件は、少なくとも部分的には、入力および/または出力に含まれるカスタム・スクリプトによって定義されてもよい。あるいはまた、条件は、単にノード・プロトコルだけによって固定されてもよく、あるいは、これらの組み合わせによることもある。いずれにせよ、新しいトランザクション152jが有効であれば、現在のノードは、それをP2Pネットワーク106内のノード104のうちの一つまたは複数の他のノードに転送する。これらのノード104の少なくともいくつかは、転送ノード104Fとしても機能し、同じノード・プロトコルに従って同じテストを適用して、新しいトランザクション152jを一つまたは複数のさらなるノード104に転送する。このようにして、新しいトランザクションは、ノード104のネットワーク全体に伝搬させられる。
出力ベースのモデルでは、所与の出力(たとえば、UTXO)が消費されるかどうかの定義は、それがノード・プロトコルに従った別の、前進(onward)トランザクション152jの入力によってすでに有効に償還されているかどうかである。トランザクションが有効であるための別の条件は、それが消費または償還しようとする先行トランザクション152iの出力が、別の有効なトランザクションによってすでに使用/償還されていないことである。ここでもまた、有効でない場合、トランザクション152jは、ブロックチェーンにおいて伝搬または記録されない。これは、使用者が同じトランザクションの出力を複数回使おうとする二重使用に対する防護となる。
有効確認に加えて、ノード104Mの少なくとも一部は、「作業証明」によって裏付けられる、マイニングとして知られるプロセスにおいて、トランザクションのブロックを最初に生成するために競争する。マイニング・ノード104Mでは、まだブロックに現れていない有効なトランザクションのプールに新規トランザクションが追加される。次いで、マイナーは、暗号学的パズルを解こうと試みることによって、トランザクションのプール154からトランザクション152の新しい有効なブロック151を組み立てるために競争する。典型的には、これは、ナンスがトランザクションのプール154と連結され、ハッシュされるときに、ハッシュの出力が所定の条件を満たすように、「ナンス」値を探すことを含む。たとえば、所定の条件は、ハッシュの出力が、あるあらかじめ定義された数の先頭ゼロを有するというものであってもよい。ハッシュ関数の特性は、入力に関して予測不可能な出力をもつことである。よって、この探索は、力づくによってのみ実行でき、よって、パズルを解こうとしている各ノード104Mにおいて相当な量の処理資源を消費する。
パズルを解いた最初のマイナー・ノード104Mは、これをネットワーク106に告知し、その解を証明として提供する。証明は、ネットワーク内の他のノード104によって容易にチェックすることができる(ひとたびハッシュに対する解が与えられたら、それによりハッシュの出力が条件に合致することをチェックすることは簡単である)。勝者がパズルを解いたトランザクションのプール154は、次いで、記憶ノード104Sとして機能するノード104の少なくとも一部によって、そのような各ノードにおいて勝者が発表した解をチェックしたことに基づいて、ブロックチェーン150内の新しいブロック151として記録される。チェーン内の先に生成されたブロック151n-1を遡ってポイントするブロック・ポインタ155も、新しいブロック151nに割り当てられる。作業証明は、二重使用のリスクを低減するのに役立つ。新しいブロック151を作成するためには多大な努力を要し、二重使用を含むブロックは他のノード104によって拒否される可能性が高いので、マイニング・ノード104Mにとって、自分のブロックに二重使用が含まれることを許容する動機がないのである。ひとたび生成されると、ブロック151は、P2Pネットワーク106内の記憶ノード104Sのそれぞれにおいて、同じプロトコルに従って認識され、維持されるので、修正できない。ブロック・ポインタ155はまた、ブロック151に逐次的な順序を課す。トランザクション152は、P2Pネットワーク106内の各記憶ノード104Sにおいて順序付けられたブロックに記録されるので、これは、トランザクションの変更不能な公開台帳を提供する。
任意の所与の時点においてパズルを解くために競争する異なるマイナー104Mが、いつ解を探し始めたかに応じて、任意の所与の時点における、マイニングされていないトランザクション・プール154の異なるスナップショットに基づいて、そうすることがありうることに留意されたい。誰であれ最初にそれぞれのパズルを解いた者が、どのトランザクション152が次の新しいブロック151nに含まれるかを定義し、マイニングされていないトランザクションの現在のプール154が更新される。マイナー104Mは、次いで、新たに定義された未決のプール154からブロックを生成するために競争を続ける。生じ得る「フォーク」を解決するためのプロトコルも存在する。フォークとは、2人のマイナー104Mが互いの非常に短い時間以内にパズルを解き、ブロックチェーンの矛盾したビューが伝播するというものである。要するに、フォークのどちらの支流が伸びても、最も長いほうが確定的なブロックチェーン150となる。
ほとんどのブロックチェーンでは、勝ったマイナー104Mは、自動的に、(あるユーザーから別のユーザーにある量のデジタル資産を移転する通常のトランザクションとは対照的に)新しい量のデジタル資産を無から創出する特別な種類の新しいトランザクションを用いて報酬を受ける。よって、勝ったノードは、ある量のデジタル資産を「採掘」したと言われる。この特殊なタイプのトランザクションは、「生成」トランザクションと呼ばれることもある。それは自動的に新しいブロック151nの一部を形成する。この報酬は、マイナー〔採掘者〕104Mが作業証明競争に参加するインセンティブを与える。通常の(非生成)トランザクション152は、しばしば、その出力の1つにおいて追加のトランザクション料をも指定し、そのトランザクションが含められたブロック151nを生成した勝ったマイナー104Mにさらに報酬を与える。
マイニング〔採掘〕に関わる計算資源のため、典型的には、少なくともマイナー・ノード104Mのそれぞれは、一つまたは複数の物理的サーバー・ユニットを含むサーバー、またはさらにはデータ・センター全体の形をとる。各転送ノード104Mおよび/または記憶ノード104Sも、サーバーまたはデータ・センターの形をとることができる。しかしながら、原則として、任意の所与のノード104は、ユーザー端末または互いにネットワーク接続されたユーザー端末のグループの形をとることができる。
各ノード104のメモリは、それぞれの役割(単数または複数)を実行し、ノード・プロトコルに従ってトランザクション152を処理するために、ノード104の処理装置上で動作するように構成されたソフトウェアを記憶する。本明細書においてノード104に帰されるいずれの動作も、それぞれのコンピュータ装置の処理装置上で実行されるソフトウェアによって実行されうることが理解されよう。また、本明細書で使用される用語「ブロックチェーン」は、当該種類の技術一般を指す一般的な用語であり、いかなる特定の固有のブロックチェーン、プロトコルまたはサービスにも限定しない。
ネットワーク101には、消費ユーザーの役割の複数の当事者103の各当事者のコンピュータ設備102も接続されている。これらは、トランザクションにおける支払人および払受人として行動するが、必ずしも他の当事者のための採掘または伝播トランザクションには参加しない。必ずしもマイニング・プロトコルを実行しない。2の当事者103およびそれぞれの設備102が例解目的のために示されている:第1の当事者103aおよびそのそれぞれのコンピュータ設備102a、ならびに第2の当事者103bおよびそのそれぞれのコンピュータ設備102bである。より多くのそのような当事者103およびそれらのそれぞれのコンピュータ設備102がシステムに存在し、参加することがありうるが、便宜上、それらは図示されていないことが理解されよう。各当事者103は、個人または組織でありうる。純粋に例示として、第1の当事者103aは、本明細書においてアリスと称され、第2の当事者103bは、ボブと称されるが、これは限定するものではなく、本明細書におけるアリスまたはボブという言及は、それぞれ「第1の当事者」および「第2の当事者」と置き換えることができることは理解されるであろう。
各当事者103のコンピュータ設備102は、一つまたは複数のプロセッサ、たとえば、一つまたは複数のCPU、GPU、他のアクセラレータ・プロセッサ、特定用途向けプロセッサ、および/またはFPGAを含むそれぞれの処理装置を備える。各当事者103のコンピュータ設備102は、さらに、メモリ、すなわち、非一時的なコンピュータ読み取り可能媒体またはメディアの形のコンピュータ読み取り可能記憶を備える。このメモリは、一つまたは複数のメモリ媒体、たとえばハードディスクなどの磁気媒体、SSD、フラッシュメモリまたはEEPROMなどの電子媒体、および/または光ディスク・ドライブなどの光媒体を使用する一つまたは複数のメモリユニットを含んでいてもよい。各当事者103のコンピュータ設備102上のメモリは、処理装置上で動作するように構成された少なくとも1つのクライアント・アプリケーション105のそれぞれのインスタンスを含むソフトウェアを記憶する。本明細書で所与の当事者103に帰されるいずれのアクションも、それぞれのコンピュータ設備102の処理装置上で実行されるソフトウェアを使用して実行されうることが理解されよう。各当事者103のコンピュータ設備102は、少なくとも1つのユーザー端末、たとえばデスクトップまたはラップトップコンピュータ、タブレット、スマートフォン、またはスマートウォッチのようなウェアラブルデバイスを含む。所与の当事者103のコンピュータ設備102は、ユーザー端末を介してアクセスされるクラウドコンピューティング資源のような、一つまたは複数の他のネットワーク化された資源を含んでいてもよい。
クライアント・アプリケーションまたはソフトウェア105は、最初に、好適なコンピュータ読み取り可能な記憶媒体またはメディア上で任意の所与の当事者103のコンピュータ設備102に提供されてもよく、たとえばサーバーからダウンロードされ、あるいはリムーバブルSSD、フラッシュメモリ・キー、リムーバブルEEPROM、リムーバブル磁気ディスク・ドライブ、磁気フロッピー・ディスクまたはテープ、光ディスク、たとえばCDまたはDVD ROM、またはリムーバブル光学ドライブなどのリムーバブル記憶装置上で提供されてもよい。
クライアント・アプリケーション105は、少なくとも「ウォレット」機能を備える。これには主に2つの機能をもつ。これらのうちの一方は、それぞれのユーザー当事者103が、ノード104のネットワーク全体にわたって伝搬され、それによってブロックチェーン150に含まれるトランザクション152を作成し、署名し、送信することを可能にすることである。他方は、それぞれの当事者に、現在所有しているデジタル資産の量を報告することである。出力ベースのシステムでは、この第2の機能は、ブロックチェーン150全体に散在する、当該当事者に属するさまざまな152トランザクションの出力において定義される量を照合することを含む。
各コンピュータ設備102上のクライアント・アプリケーション105のインスタンスは、P2Pネットワーク106の転送ノード104Fの少なくとも1つに動作上結合される。これは、クライアント105のウォレット機能が、トランザクション152をネットワーク106に送信することを可能にする。クライアント105は、それぞれの当事者103が受領者である任意のトランザクションについてブロックチェーン150に照会するために(あるいは実は、諸実施形態においてブロックチェーン150は、部分的にはそれが公に見えることを通じてトランザクションの信用を提供する公共施設であるため、ブロックチェーン150内の他の当事者のトランザクションを検査するために)、記憶ノード104のうちの1つ、一部、または全部にコンタクトすることもできる。各コンピュータ設備102上のウォレット機能は、トランザクション・プロトコルに従ってトランザクション152を定式化し、送信するように構成される。各ノード104は、ノード・プロトコルに従ってトランザクション152を有効確認し、転送ノード104Fの場合は、ネットワーク106全体に伝播させるためにトランザクション152を転送するように構成されたソフトウェアを実行する。トランザクション・プロトコルとノード・プロトコルは互いに対応し、所与のトランザクション・プロトコルは所与のノード・プロトコルとともに、所与のトランザクション・モデルを実装する。同じトランザクション・プロトコルが、ブロックチェーン150内のすべてのトランザクション152について使用される(ただし、トランザクション・プロトコルは、その中でトランザクションの異なるサブタイプを許容してもよい)。同じノード・プロトコルが、ネットワーク106内のすべてのノード104によって使用される(ただし、トランザクションの異なるサブタイプを、そのサブタイプについて定義された規則に従って異なる仕方で扱ってもよく、また、異なるノードは異なる役割を担い、よって、プロトコルの異なる対応する側面を実装してもよい)。
上述したように、ブロックチェーン150はブロック151のチェーンを含み、各ブロック151は、上述したように、作業証明プロセスによって作成された一つまたは複数のトランザクション152の集合を含む。各ブロック151は、また、ブロック151への逐次的順序を規定するように、チェーン内の先に生成されたブロック151を遡ってポイントするブロック・ポインタ155を含む。ブロックチェーン150はまた、作業証明プロセスによって新しいブロックに含まれることを待つ有効なトランザクション154のプールを含む。各トランザクション152は、トランザクションの諸シーケンスに対する順序を定義するよう、前のトランザクションを遡ってポイントするポインタを含む(トランザクション152の諸シーケンスは、分岐することが許容される)。ブロック151のチェーンは、チェーン内の最初のブロックであった生成ブロック(Gb)153まで遡る。チェーン150内の早期の一つまたは複数のオリジナル・トランザクション152は、先行トランザクションではなく創生ブロック(genesis block)153をポイントした。
所与の当事者103、たとえばアリスが、ブロックチェーン150に含められるよう、新しいトランザクション152jを送信することを望む場合、アリスは、関連するトランザクション・プロトコルに従って(アリスのクライアント・アプリケーション105においてウォレット機能を使用して)新しいトランザクションを定式化する。アリスは次いで、トランザクション152を、クライアント・アプリケーション105から、自分が接続されている一つまたは複数の転送ノード104Fの1つに送信する。たとえば、これは、アリスのコンピュータ102に最も近いか、または最も良好に接続されている転送ノード104Fでありうる。任意の所与のノード104は、新しいトランザクション152jを受信すると、それをノード・プロトコルおよびそのそれぞれの役割に従って処理する。これは、まず、新たに受信されたトランザクション152jが「有効」であるためのある種の条件を満たすかどうかをチェックすることを含む。その例については、手短に、より詳細に論じる。いくつかのトランザクション・プロトコルでは、有効確認のための条件は、トランザクション152に含まれるスクリプトによってトランザクションごとに構成設定可能でありうる。あるいはまた、条件は単に、ノード・プロトコルの組み込み特徴であってもよく、あるいはスクリプトとノード・プロトコルの組み合わせによって定義されてもよい。
新たに受信されたトランザクション152jが、有効であるとみなされるテストを通過するという条件で(すなわち、「有効確認される」という条件で)、トランザクション152jを受信する任意の記憶ノード104Sは、そのノード104Sにおいて維持されているブロックチェーン150のコピー内のプール154に、新たに有効確認されたトランザクション152を追加する。さらに、トランザクション152jを受信する任意の転送ノード104Fは、有効確認されたトランザクション152をP2Pネットワーク106内の一つまたは複数の他のノード104にさらに伝搬させる。各転送ノード104Fは同じプロトコルを適用するので、トランザクション152jが有効であると想定すると、これは、そのトランザクションがまもなくP2Pネットワーク106全体に伝搬させられることを意味する。
ひとたび一つまたは複数の記憶ノード104で維持されるブロックチェーン150のコピー内のプール154に受け入れられたら、マイナー・ノード104Mは、新しいトランザクション152を含むプール154の最新バージョンに関する作業証明パズルを解くために競争を開始する(他のマイナー104Mが依然としてプール154の古いビューに基づいてパズルを解こうとしていることがありうるが、誰であれ先に到達した者が、どこで次の新しいブロック151が終了し、新しいプール154が始まるかを定義し、最終的には、誰かが、アリスのトランザクション152jを含むプール154の一部についてのパズルを解くであろう)。ひとたび新しいトランザクション152jを含むプール154について作業証明が行われると、それは、変更不能な形で、ブロックチェーン150内のブロック151のうちの1つのブロックの一部となる。各トランザクション152は、以前のトランザクションへのポインタを含むので、トランザクションの順序も、変更不能な形で記録される。
異なるノード104は所与のトランザクションの異なるインスタンスを最初に受信し、よって、1つのインスタンスがブロック150中にマイニングされるまでは、どのインスタンスが「有効」かの対立する見解をもつことがある。マイニングされた時点で、すべてのノード104は、マイニングされたインスタンスが唯一の有効なインスタンスであると合意する。ノード104があるインスタンスを有効であると受け入れ、その後第2のインスタンスがブロックチェーン150に記録されていることを発見する場合は、そのノード104はこのことを受け入れなければならず、当初受け入れた、マイニングされていないインスタンスを破棄する(無効として扱う)ことになる。
図2は、例示的なトランザクション・プロトコルを示す。これは、UTXOベースのプロトコルの例である。トランザクション152(「Tx」と略す)は、ブロックチェーン150の基本的なデータ構造である(各ブロック151は一つまたは複数のトランザクション152を含む)。以下は、出力ベースまたは「UTXO」ベースのプロトコルを参照して説明される。しかしながら、これは、すべての可能な実施形態に対して限定するものではない。
UTXOベースのモデルでは、各トランザクション(「Tx」)152は、一つまたは複数の入力202および一つまたは複数の出力203を含むデータ構造を含む。各出力203は、未使用のトランザクション出力(UTXO)を含んでいてもよく、これは、別の新しいトランザクションの入力202のためのソースとして使用できる(UTXOがまだ償還されていない場合)。UTXOは、デジタル資産(価値のストア)の量を指定する。UTXOは、他の情報の中でも、それが由来するところのトランザクションのトランザクションIDをも含んでいてもよい。トランザクション・データ構造はまた、入力フィールド(単数または複数)202および出力フィールド(単数または複数)203のサイズのインジケータを含んでいてもよいヘッダ201を含んでいてもよい。ヘッダ201はまた、トランザクションのIDを含んでいてもよい。諸実施形態において、トランザクションIDは、トランザクション・データ(トランザクションID自体を除く)のハッシュであり、マイナー104Mに提出された生のトランザクション152のヘッダ201に格納される。
アリス103aは、問題のデジタル資産の量をボブ103bに移転するトランザクション152jを作成したいとする。図2において、アリスの新しいトランザクション152jは、「Tx1」とラベル付けされている。これは、シーケンスにおいて先行するトランザクション152iの出力203においてアリスにロックされているデジタル資産のうちのある量を取り、その少なくとも一部をボブに移転する。先行するトランザクション152iは、図2において「Tx0」とラベル付けされている。Tx0およびTx1は、単に任意のラベルである。これらは、必ずしも、Tx0がブロックチェーン151における最初のトランザクションであること、または、Tx1がプール154におけるすぐ次のトランザクションであることを意味しない。Tx1は、アリスにロックされた未使用出力203を依然として有する、任意の先行する(すなわち先立つ)トランザクションを遡ってポイントすることができる。
先行するトランザクションTx0は、アリスがその新しいトランザクションTx1を作成する時点において、または少なくともアリスがそれをネットワーク106に送信する時点までに、すでに検証され、ブロックチェーン150に含められてもよい。それは、その時点ですでにブロック151のうちの1つに含まれてもよく、あるいは、プール154内でまだ待機していてもよく、その場合、まもなく新しいブロック151に含まれることになる。あるいはまた、Tx0およびTx1が一緒に生成されてネットワーク102に送信されることができ、あるいはさらには、ノード・プロトコルが「オーファン」トランザクションをバッファリングすることを許容する場合にはTx0がTx1の後に送信されることもできる。本明細書においてトランザクションのシーケンスの文脈で使用される「先行」および「後続」という用語は、トランザクション中に指定されたトランザクション・ポインタ(どのトランザクションがどの他のトランザクションをポイントするかなど)によって定義されるシーケンスにおけるトランザクションの順序のことをいう。それらの用語は、「先行者」および「後継者」または「先立つ」および「子孫」、「親」および「子」などに等しく置き換えることができる。これは、必ずしもそれらが作成される、ネットワーク106に送られる、または任意の所与のノード104に到達する順序を意味するわけではない。にもかかわらず、先行トランザクション(先立つトランザクションまたは「親」)をポイントする後続トランザクション(子孫トランザクションまたは「子」)は、親トランザクションが有効確認されない限り、有効確認されない。親より先にノード104に到着する子は、オーファンとみなされる。オーファンは、ノード・プロトコルおよび/またはマイナー挙動に依存して、破棄されてもよく、あるいは親を待つために、ある時間にわたってバッファリングされてもよい。
先行するトランザクションTx0の一つまたは複数の出力203のうちの1つは、本明細書でUTXO0とラベル付けされる特定のUTXOを含む。各UTXOは、UTXOによって表されるデジタル資産の量を指定する値と、ロック・スクリプトとを含む。ロック・スクリプトは、後続のトランザクションが有効確認されるため、よってUTXOが正常に償還されるために、後続のトランザクションの入力202においてロック解除スクリプトによって満たされなければならない条件を定義する。典型的には、ロック・スクリプトは、前記量を特定の当事者(それが含まれているトランザクションの受益者)にロックする。すなわち、ロック・スクリプトは、ロック解除条件を定義し、典型的には、後続のトランザクションの入力におけるロック解除スクリプトが、先行するトランザクションがロックされている当事者の暗号署名を含むという条件を含む。
ロック・スクリプト(別名scriptPubKey)は、ノード・プロトコルによって認識されるドメイン固有の言語で書かれたコードである。そのような言語の特定の例は、「Script」(大文字のS)と呼ばれる。ロック・スクリプトは、トランザクション出力203を使用するためにどんな情報が必要とされるか、たとえば、アリスの署名を要求することを指定する。トランザクションの出力には、ロック解除スクリプトが現れる。ロック解除スクリプト(別名scriptSig)は、ロック・スクリプト基準を満たすために必要とされる情報を提供する、ドメイン固有の言語で書かれたコードである。たとえば、ボブの署名を含んでいてもよい。ロック解除スクリプトは、トランザクションの入力202に現れる。
図示した例では、Tx0の出力203におけるUTXO0は、ロック・スクリプト[Checksig PA]を含み、これは、UTXO0が償還されるために(厳密には、UTXO0を償還しようとする後続のトランザクションが有効であるために)、アリスの署名Sig PAを要求する。[Checksig PA]は、アリスの公開鍵・秘密鍵のペアからの公開鍵PAを含む。Tx1の入力202は、Tx1を指す(たとえば、諸実施形態ではトランザクションTx0全体のハッシュであるそのトランザクションID、TxID0によって)ポインタを含む。Tx1の入力202は、Tx0の任意の他の可能な出力の中でそれを識別するために、Tx0内のUTXO0を識別するインデックスを含む。Tx1の入力202は、さらに、鍵ペアからのアリスの秘密鍵をデータの所定の部分(暗号学において時に「メッセージ」と呼ばれる)に適用することによって作成された、アリスの暗号署名を含むロック解除スクリプト<Sig PA>を含む。有効な署名を提供するためにアリスによって署名される必要があるデータ(または「メッセージ」)は、ロック・スクリプトによって、またはノード・プロトコルによって、またはこれらの組み合わせによって定義されうる。
新しいトランザクションTx1がノード104に到着すると、ノードはノード・プロトコルを適用する。これは、ロック解除スクリプトがロック・スクリプトにおいて定義されている条件を満たしているかどうかをチェックするために、ロック・スクリプトとロック解除スクリプトを一緒に実行する(この条件は一つまたは複数の基準を含みうる)。諸実施形態において、これは、2つのスクリプトを連結することを含む:
<Sig PA><PA>||[Checksig PA]
ここで、「||」は連結を表し、「<…>」は、データをスタック上に置くことを意味し、「[…]」はロック解除スクリプト(この例ではスタックベースの言語)に含まれる関数である。一緒に実行されたとき、それらのスクリプトは、Tx0の出力におけるロック・スクリプトに含まれるアリスの公開鍵PAを使用して、Tx1の入力におけるロック・スクリプトが、データの期待される部分に署名するアリスの署名を含むことを認証する。この認証を実行するためには、データの期待される部分自体(「メッセージ」)もTx0に含める必要がある。諸実施形態において、署名されたデータは、Tx0の全体を含む(よって、データの署名された部分がすでに内在的に存在するので、データの署名された部分を平文で指定する別個の要素が含まれる必要はない)。
公開‐秘密暗号による認証の詳細は、当業者にはおなじみであろう。基本的には、アリスが自分の秘密鍵を用いてメッセージを暗号化することによってメッセージに署名した場合、アリスの公開鍵と平文でのそのメッセージ(暗号化されていないメッセージ)を与えられると、ノード104のような別のエンティティは、そのメッセージの暗号化されたバージョンがアリスによって署名されたものであるはずであると認証することができる。署名することは、典型的には、メッセージをハッシュし、ハッシュに署名し、それを署名としてメッセージの平文バージョンにタグ付けし、それにより、公開鍵の任意の保持者が署名を認証することを可能にする。よって、本稿における、ある特定のデータまたはトランザクションの一部に署名することなどへの任意の言及は、諸実施形態においては、そのデータまたはトランザクションの一部のハッシュに署名することを意味することができる。
Tx1のロック解除スクリプトが、Tx0のロック・スクリプトにおいて指定された一つまたは複数の条件を満たす場合(示した例では、アリスの署名がTx1において提供され、認証された場合)、ノード104は、Tx1が有効であるとみなす。それが記憶ノード104Sである場合、このことは、それが作業証明を待つトランザクションのプール154にそれを追加することを意味する。それが転送ノード104Fである場合、それは、ネットワーク全体に伝搬されるよう、トランザクションTx1をネットワーク106内の一つまたは複数の他のノード104に転送する。ひとたびTx1が有効確認され、ブロックチェーン150に含められると、これは、Tx0からのUTXO0を使用済みとして定義する。Tx1は、未使用のトランザクション出力203を使用する場合にのみ有効でありうることに留意されたい。別のトランザクション152によってすでに使用された出力を使用しようとする場合、たとえ他のすべての条件が満たされていても、Tx1は無効となる。よって、ノード104は、先行するトランザクションTx0における参照されたUTXOがすでに使用されているかどうか(すでに別の有効なトランザクションへの有効な入力を形成しているかどうか)もチェックする必要がある。これが、ブロックチェーン150がトランザクション152に関する定義された順序を課すことが重要である理由の1つである。実際上は、所与のノード104は、トランザクション152が使用されたUTXO 203をマークする別個のデータベースを維持してもよいが、最終的には、UTXOが使用されたかどうかを定義するのは、ブロックチェーン150内の別の有効なトランザクションへの有効な入力をすでに形成しているかどうかである。
所与のトランザクション152のすべての出力203において指定された総量が、そのすべての入力202によってポイントされた総量よりも大きい場合、これは、ほとんどのトランザクション・モデルにおいて無効性の別の根拠である。したがって、そのようなトランザクションは、伝搬されたり、ブロック151中にマイニングされたりすることはない。
UTXOベースのトランザクション・モデルでは、所定のUTXOが全体として使用される必要があることに注意されたい。使用されるUTXOにおいて定義されている量のうち、別の量が使用される一方で一部を「残しておく」ことはできない。ただし、UTXOからの前記量は、次のトランザクションの複数の出力のあいだで分割できる。たとえば、Tx0におけるUTXO0において定義された量は、Tx1における複数のUTXOの間で分割できる。よって、アリスがボブにUTXO0で定義された量のすべてを与えることを望まない場合、残りを使って、Tx1の第2の出力において自分自身におつりを与えたり、あるいは別の当事者に支払ったりすることができる。
実際上は、アリスは通例、勝ったマイナーのための料金を含める必要もある。なぜなら、今日では、生成トランザクションの報酬だけでは、典型的には、採掘を動機づけるには十分ではないからである。アリスがマイナーのための手数料を含めない場合、Tx0は諸マイナー・ノード104Mによって拒否される可能性が高く、よって、技術的には有効であるが、それはまだ伝播され、ブロックチェーン150に含められることはない(マイナー・プロトコルは、マイナー104Mに望まない場合には、トランザクション152を受け入れるようマイナー104Mに強制しない)。いくつかのプロトコルでは、採掘料金は、独自の別個の出力203を必要としない(すなわち、別個のUTXOを必要としない)。その代わりに、所与のトランザクション152の入力(単数または複数)202によってポイントされる総量と出力(単数または複数)203において指定される総量との間の任意の差は、勝ったマイナー104に自動的に与えられる。たとえば、UTXO0へのポインタがTx1への唯一の入力であり、Tx1は1つの出力UTXO1しかもたないとする。UTXO0において指定されたデジタル資産の量がUTXO1において指定された量より多い場合、その差は自動的に勝ったマイナー104Mのものとなる。しかしながら、代替的または追加的に、トランザクション152のUTXO 203のうちの独自のものにおいてマイナー手数料が明示的に指定できることは必ずしも除外されない。
アリスおよびボブのデジタル資産は、ブロックチェーン150内の任意のところで任意のトランザクション152において、両者にロックされた未使用UTXOからなる。よって、典型的には、所与の当事者103の資産は、ブロックチェーン150を通じて、さまざまなトランザクション152のUTXO全体に分散される。ブロックチェーン150内のどこにも、所与の当事者103の総残高を定義する1つの数は記憶されていない。それぞれの当事者にロックされ、別の前進(onward)トランザクションにまだ使用されていないすべてのさまざまなUTXOの値を一緒に照合することは、クライアント・アプリケーション105におけるウォレット機能の役割である。これは、記憶ノード104Sのいずれか、たとえばそれぞれの当事者のコンピュータ設備102に最も近いか、または最も良好に接続されている記憶ノード104Sに記憶されているブロックチェーン150のコピーを問い合わせることによってできる。
スクリプト・コードは、概略的に表現されることが多い(すなわち、正確な言語ではない)ことに注意されたい。たとえば、[Checksig PA]と書いて、[Checksig PA]=OP_DUP OP_HASH160<H(PA)>OP_EQUALVERIFY OP_CHECKSIGを意味することができる。「OP_....」は、Script言語の特定のオペコードを指す。OP_CHECKSIG(「Checksig」とも呼ばれる)は、2つの入力(署名および公開鍵)を取り、楕円曲線デジタル署名アルゴリズム(ECDSA)を使用して署名の有効性を検証するScriptオペコードである。ランタイムでは、署名('sig')の発生はすべてスクリプトから除去されるが、ハッシュ・パズルなどの追加要件が、'sig'入力によって検証されるトランザクションに残る。別の例として、OP_RETURNは、トランザクション内にメタデータを格納し、それによりブロックチェーン150において変更不能な形でメタデータを記録することができるトランザクションの使用不能な(unspendable)出力を生成するためのScript言語のオペコードである。たとえば、メタデータは、ブロックチェーンに格納することが望まれる文書を含むことができる。
署名PAは、デジタル署名である。諸実施形態において、これは楕円曲線secp256k1を使用するECDSAに基づく。デジタル署名は、特定のデータに署名する。諸実施形態において、所与のトランザクションについて、署名は、トランザクション入力の一部、およびトランザクション出力の全部または一部に署名する。署名される出力の特定の部分はSIGHASHフラグに依存する。SIGHASHフラグは、署名の末尾に含まれる4バイトのコードであり、どの出力が署名されるか(よって、署名の時点において固定されるか)を選択する。
ロック・スクリプトは、それぞれのトランザクションがロックされる当事者の公開鍵を含んでいるという事実を指して、「scriptPubKey」と呼ばれることがある。ロック解除スクリプトは、対応する署名を供給するという事実を指して「scriptSig」と呼ばれることがある。しかしながら、より一般には、UTXOが償還されるための条件が署名を認証することを含むことは、ブロックチェーン150のすべてのアプリケーションにおいて必須ではない。より一般的には、スクリプト言語を使用して、一つまたは複数の条件を定義することができる。よって、より一般的な用語である「ロック・スクリプト」および「ロック解除スクリプト」が好まれることがある。
図3は、ブロックチェーン150を実装するためのシステム100を示す。システム100は、追加の通信機能が含まれることを除いて、図1に関連して説明したものと実質的に同じである。アリスおよびボブのコンピュータ設備102a、120bのそれぞれのクライアント・アプリケーションは、それぞれ付加的な通信機能を有する。すなわち、それにより、アリス103aは、(いずれかの当事者または第三者のはたらきかけで)ボブ103bと、別個のサイドチャネル301を確立することができる。サイドチャネル301は、前記P2Pネットワークとは別個にデータの交換を可能にする。そのような通信は、「オフチェーン」と呼ばれることがある。たとえば、これは、当事者の一方がトランザクションをネットワーク106にブロードキャストすることを選択するまで、トランザクションがネットワークP2P 106上に(まだ)公開されたり、チェーン150上に進んだりすることなく、アリスとボブの間のトランザクション152を交換するために使用されてもよい。
サイドチャネル301は、P2Pオーバーレイ・ネットワーク106と同じパケット交換ネットワーク101を介して確立されてもよい。代替的または追加的に、サイドチャネル301は、モバイル・セルラー・ネットワークのような異なるネットワーク、またはローカル無線ネットワークのようなローカルエリアネットワーク、またはアリスとボブの装置1021、102bとの間の直接的な有線または無線リンクを介して確立されてもよい。一般に、本明細書のいずれかの箇所で言及されるサイドチャネル301は、データを「オフチェーン」で、すなわち、P2Pオーバーレイ・ネットワーク106とは別個に、交換するための一つまたは複数のネットワーク技術または通信媒体を介する任意の一つまたは複数のリンクを含んでいてもよい。2つ以上のリンクが使用される場合、全体としてのオフチェーン・リンクの束または集まりがサイドチャネル301と称されてもよい。よって、アリスとボブがサイドチャネル301を通じてある種の情報またはデータなどを交換すると言われる場合、これは必ずしもこれらすべてのデータが正確に同じリンクまたは同じタイプのネットワークを通じて送信されなければならないことを意味するのではないことに注意されたい。
図3Aは、図3に示される構成の変形を示している。この変形では、ボブ103bはマイナーでもある。ここで104Mbとラベル付けされたボブのコンピュータ設備は、ユーザー装置102bおよびマイナー・ノード104Mの両方に関連して記載されるように動作するように構成されてもよい。ウォレット・アプリケーションを含むクライアント・アプリケーション105bを実行し、また、マイナー・ソフトウェアをも実行するように構成される。ウォレットおよびマイナー・ソフトウェアは、同じアプリケーションに統合されることができ、または2つ以上のアプリケーションにまたがって実装されることができる。ボブの設備は、ユーザー装置102bまたはマイナー設備104Mに関連して前述した形のいずれかをとることができる。そのような構成は、アリスが、自分の代わりにボブがトランザクション152をブロック151中にマイニングするための特定の手数料を指定することを希望する用途を有することができる。これについては、例としてまもなく詳細に論じられる。実際、典型的には、マイニング・ノード104Mの大部分または全部が、実のところ、その運用者がマイニング手数料を受け取り、使用できるようにするためにそれらの運用者によって実行されるウォレット・アプリケーション105に関連付けられることに注意されたい。簡単のため、これらのマイナーは、以下の例示的な使用事例におけるトランザクションに対して特定の同定された当事者としては関与していない(いくつかの場合にトランザクションの一つをブロック151中にマイニングするマイナーである可能性があるほかは、特に関与していない)ので、図には示されていない。
例示的な定義
以下は、いくつかの実装で採用されうるいくつかの例示的な定義である。これらはすべての可能な実装に対して限定するものではなく、後述の例示的な使用事例のいくつかの可能な実装で使用されうるような、ある種の可能な実装の理解を助けるためにのみ提供されることに留意されたい。
定義1:トランザクション。トランザクションは、入力および出力を含むメッセージである。それはまた、プロトコル・バージョン番号および/またはロック時間を含んでいてもよい。バージョンはトランザクション・プロトコルのバージョンを示す。ロック時間については後ほど別途説明する。
定義2:入力。トランザクションの入力は、順序付けられたリストを形成する。リスト内の各エントリーは、アウトポイント(未使用トランザクション出力についての識別子)とscriptSig(ロック解除スクリプト)を含む。それはまた、シーケンス番号を含んでいてもよい。
定義3:出力。トランザクションの出力は、順序付けられたリストを形成する。リスト内の各エントリーは、値(デジタル資産の、基本単位での量)とscriptPubKey(ロック・スクリプト)を含む。
定義4:アウトポイント。アウトポイントは、トランザクションID TxIDとインデックス番号iによって一意的に定義される。これは、トランザクションTxIDの出力におけるi番目のエントリーを指し、未使用トランザクション出力(UTXO)の一意的な位置を与える。ここでの「未使用」という用語は、アウトポイントがいかなる有効なその後のトランザクションに決して現れていないことを意味する。
定義5:scriptSig。これは、所与のアウトポイントに対応するUTXOをロック解除する、または使用するために必要とされる情報である。標準的なトランザクションでは、この情報は通零、ECDSA署名である。したがって、このスクリプトは「scriptSig」と呼ばれる。ただし、アウトポイントをロック解除するための必要とされる情報は、UTXOのロック条件を満たす任意のデータでありうる。
定義6:scriptPubKey。これは、特定のUTXOに関連付けられた資金をロックするスクリプトである。資金は、scriptPubKeyにscriptSigがアペンドされ、組み合わされたスクリプトの実行が真(TRUE)を与える場合にかつその場合にのみ、ロック解除され、使用されることができる。そうでない場合、トランザクションは無効であり、拒否される。これが「scriptPubKey」と呼ばれるのは、一般に、標準的なトランザクションのためのECDSA公開鍵のハッシュ値を含むからである。入力(単数または複数)に署名することに関する次の定義では、これは、scriptSig部分を除く入力(単数または複数)(定義2参照)に署名することを意味する。
定義7:SIGHASHフラグ。ECDSA署名を提供するとき、以下のSIGHASHフラグのうちの1つをアペンドする必要もある。
可鍛性を機能として語るとき、ECDSA署名によって署名されていない、トランザクションの情報を探す。署名されるメッセージから除外されることができる入力および出力のほかに、scriptSigの内容は常に除外される。これは、scriptSigが署名のためのプレースホルダーになるように設計されているためである。
定義8:ブロックチェーンのタイムロック。一般に、トランザクションにおいて使用できるタイムロックには、絶対タイムロックと相対タイムロックの2つのタイプがある。絶対タイムロックは、それ以降何かが「有効」と見なされることができる特定の時点を指定し、相対タイムロックは何かが有効と見なされることができるようになるまでに経過しなければならない期間を指定する。どちらの場合も、ブロックチェーン・タイムロックを使用する場合、時間の代理としてブロックの高さ(マイニングされるブロックの数)または経過時間(UNIX(登録商標)時間など)のいずれかを使用できる。
ブロックチェーン・タイムロックのもう一つの特性は、それらがどこに現れ、トランザクションのどの側面(単数または複数)に適用されるかである。この意味でも、諸トランザクション全体をロックするトランザクション・レベルと、特定の諸出力をロックするスクリプト・レベルという2つの分類がある。これらのタイムロック・レベルの両方とも、絶対タイムロックまたは相対タイムロックを実装するために使用できる。下記の表は、これらの特性に基づいて作成できるタイムロックを実装するための4つの可能な機構をまとめたものである。
定義9:nLocktime。ロック時間(nLocktime)は、ブロックの高さまたはユニックス時間での特定の時間を表す負でない整数である。これは、指定されたブロックまたは指定された時間の後でのみトランザクションがブロックチェーンに追加できるという意味で、トランザクション・レベルのタイムロックである。nLocktimeが500,000,000未満に設定されている場合は、ブロック高さと見なされる。500,000,000以上に設定されている場合は、ユニックス時間の表現とみなされる。これは、1970年1月1日00:00:00以降の秒数である。
たとえば、現在の最高のブロックが高さ3,000,000であり、ロック時間が4,000,000に設定されている場合、400万番目のブロックがマイニングされるまで、トランザクションはマイナーによって考慮されない。
定義10:nSequence。シーケンス番号(nSequence)はメッセージとしてトランザクションのバージョンを示す。トランザクションに対するいかなる修正も、シーケンス番号をより大きなものにインクリメントする。nSequenceの最大値は232-1であり、一般に、シーケンス番号は、トランザクションが最終化されたことを示すためにデフォルトでこの最大値に設定される。nSequence値は、トランザクションの各入力について定義され、その入力によって参照されたUTXOがブロックに含められた後で、有効な入力として使用されることができる前の時間期間を指定する。マイナーが同じ入力をもつ2つのトランザクションを見る場合、マイナーは、より大きなシーケンス番号をもつトランザクションを選択する。しかしながら、この機能は普通は無効にされている。
定義11:CheckLockTimeVerify(OP_CLTV)。オペコードOP_CHECKLOCKTIMEVERIFY(OP_CLTV)は、トランザクションの特定の出力を将来の何らかの特定の時間またはブロック高さにロックするために使用できる絶対的なスクリプト・レベルのタイムロックである。トランザクションにおいてUTXOが参照される現在のユニックス時間またはブロック高さを、UTXOが作成されたユニックス時間またはブロック高さに、OP_CLTVオペコードの前に指定されたパラメータを加えた値が超えた場合、使用トランザクションのためのスクリプト実行は失敗する。
定義12:CheckSequenceVerify(OP_CSV)。オペコードOP_CHECKSEQUENCEVERIFY(OP_CSV)は、将来の特定の時間期間またはブロック数にわたってトランザクションの特定の出力をロックするために使用できる相対的なスクリプト・レベルのタイムロックである。これはOP_CLTVと同様に動作するが、違いは、OP_CSVに提供されるパラメータが相対時間を表すという点である。UTXOがトランザクションにおいて参照される現在のユニックス時間またはブロック高さを、OP_CSVオペレーションの前に指定されたパラメータが超えた場合、使用トランザクションのためのスクリプト実行は失敗する。
定義13:可鍛性(Malleability)。一般に、ブロックチェーン・トランザクションにおいて可能な可鍛性には、2つの大まかなタイプがあり、どちらも入力において提供された署名を無効にすることなく、トランザクションの内容を修正することができる。
両方の場合を説明するために、1つの入力と、その入力における1つの署名と、1つの出力とをもつ初期トランザクションを考える。
タイプ1:スクリプト・レベルの可鍛性。このタイプの可鍛性は、スクリプト・オペコードOP_CHECKSIGを用いてチェックされる署名がトランザクションにおけるどの入力のスクリプト・フィールドにも署名しないという事実を利用する。この事実のため、トランザクションTxに対する署名を生成し、トランザクションTx'がトランザクションTxと同一ではないように入力スクリプトを修正し、それでもTxとTx'の両方がブロックチェーン・コンセンサス規則の下で同じ署名によって署名された有効なトランザクション・メッセージであると見なされるようにすることができる。
タイプ2:入力および出力レベルの可鍛性。このタイプの可鍛性は、トランザクションにおいてSIGHASH ALL以外のSIGHASHフラグが使用されることに依拠する。トランザクションTxが、他の5つのSIGHASHフラグの組み合わせのいずれかを使用する入力署名を有する場合、入力(単数または複数)または出力(単数または複数)のいずれかが追加されて、同一でないトランザクションTx'を生成して、署名を変更する必要なく、両方とも、コンセンサスに従って有効なトランザクション・メッセージと見なされるようにすることができる。
交渉チャネル
図4は、現在開示されている方式の実施形態を実装するためのクライアント・アプリケーション105の例示的な実装を示す。クライアント・アプリケーション105は、トランザクション・エンジン401およびユーザー・インターフェース(UI)層402を含む。トランザクション・エンジン401は、クライアント105の基礎となるトランザクション関連機能を実行するように構成される。たとえば、上述した、またまもなくさらに詳細に論じる方式に従って、トランザクション152を定式化する、トランザクションおよび/または他のデータをサイドチャネル301を通じて受信および/または送信する、および/またはP2Pネットワーク106を通じて伝搬されるようトランザクションを送信する機能である。本明細書に開示される諸実施形態によれば、各クライアント105のトランザクション・エンジン401は、選択機能の形のアプリケーション機能403を含み、これは、アリスとボブとの間のサイドチャネル301を通じた交渉において、第1のトランザクションの2つ以上の異なるインスタンス(Tx1-template、Tx1、Tx1'など)のどれがオファーされる、または受け入れられるかについての選択を可能にする。選択機能403は、選択機能403を通じてトランザクションのインスタンスを受け入れると、そのインスタンスがネットワーク106にブロードキャストする、すなわち、有効確認のためにP2Pネットワーク106を通じて伝搬され、ブロックチェーン150に記録されるようにそれぞれのコンピュータ設備102から送信されるように構成されうる(伝搬および記録自身は、前述した機構による)。ここでもまた、この送信は、ターゲット・トランザクションをそれぞれのコンピュータ設備102からネットワーク106の転送ノード104Fの1つに直接送信すること、または、ターゲット・トランザクションを他方の当事者の設備102に送信すること、もしくは第三者の設備に送信してそこからネットワーク106のノード104Fの1つに転送されるようにすることを含むことができることに留意されたい。
UI層402は、それぞれのユーザーのコンピュータ設備102のユーザー入力/出力(I/O)手段を介してユーザー・インターフェースを描画するように構成される。これは、設備102のユーザー出力手段を介してそれぞれのユーザー103に対して情報を出力すること、および設備102のユーザー入力手段を介してそれぞれのユーザー103から入力を受け取ることを含む。たとえば、ユーザー出力手段は、視覚的出力を提供するための一つまたは複数の表示画面(タッチスクリーンまたは非タッチスクリーン)、オーディオ出力を提供するための一つまたは複数のスピーカー、および/または触覚出力を提供するための一つまたは複数の触覚出力装置などを含むことができる。ユーザー入力手段は、たとえば、一つまたは複数のタッチスクリーンの入力アレイ(出力手段に使用されるものと同じまたは異なる);マウス、トラックパッドまたはトラックボールなどの一つまたは複数のカーソルベースの装置;発話または声の入力を受け取るための一つまたは複数のマイクロフォンおよび音声認識アルゴリズム;手によるまたは身体のジェスチャーの形の入力を受け取るための一つまたは複数のジェスチャーベースの入力装置;または一つまたは複数の機械的ボタン、スイッチまたはジョイスティックなどを含むことができる。
注:本明細書におけるさまざまな機能は、同じクライアント・アプリケーション105に統合されているものとして記述されることがあるが、これは必ずしも限定するものではなく、代わりに、2つ以上の別個のアプリケーションのスイートで実装することができる。たとえば、一方が他方へのプラグインであるか、またはAPI(アプリケーションプログラミングインターフェース)を介してインターフェースする。たとえば、トランザクション・エンジン401の機能は、UI層402とは別個のアプリケーションにおいて実装されてもよく、または、トランザクション・エンジン401のような所与のモジュールの機能は、複数のアプリケーションの間で分割されてもよい。また、記述される機能の一部または全部が、たとえばオペレーティング・システム層で実装されうることも除外されない。本明細書のどこかで単一のまたは所与のアプリケーション105などが言及される場合、これは単に例であり、より一般には、記載される機能は、任意の形のソフトウェアで実装されうることができることが理解されるであろう。
図5は、アリスの設備102a上のクライアント・アプリケーション105aのUI層402によってレンダリングされうるユーザー・インターフェース(UI)500の一例のモックアップを与えている。同様のUIが、クライアント105bによってボブの設備102bで、または任意の他の当事者の設備でレンダリングされてもよいことが理解されるであろう。
例として、図5は、交渉手順の3つの異なる段階a)、b)、c)における、アリスの視点からのUI 500を示している。この手順の過程において、ユーザー・インターフェース500は、複数のユーザー選択可能なオプション、たとえば、501、502、503、504をレンダリングしてもよく、これらは、たとえば、異なる画面上ボタン、またはメニュー内の異なるオプションなど、ユーザー出力手段を介して、別個のUI要素としてレンダリングされてもよい。ユーザー入力手段は、ユーザー103(この場合、アリス103a)が、画面上のUI要素をクリックまたはタッチすること、または所望のオプションの名前を話すことなどによってオプションの1つを選択することを可能にするように構成される(注:本稿で使用されるところの用語「手動」は、自動と対照することを意図されているだけであり、必ずしも手(単数または複数)の使用に限定されない)。これらのオプションは、ユーザー(アリス)が、サイドチャネル301を介してトランザクションを提案し、受け入れるように選択することを可能にする。これについては、まもなくより詳細に説明する。ユーザー・インターフェース500はまた、一つまたは複数のデータ入力フィールド、たとえば、一つまたは複数の段階で提示される505、507を含んでいてもよく、これを通じて、ユーザーは、交渉を開始する相手(ボブ)を識別する詳細を入力することができ、および/または、一つまたは複数の提案されたトランザクションのパラメータ(たとえば量〔額〕またはロック時間)を入力することができる。これらのデータ入力フィールドは、ユーザー出力手段を介して、たとえば画面上にレンダリングされ、データは、ユーザー入力手段、たとえば、キーボードまたはタッチスクリーンを介してこれらのフィールドに入力されることができる。あるいはまた、データは、たとえば、発話認識に基づいて口頭で受領されてもよい。UI 500はまた、手順の一つまたは複数の段階において、ユーザー出力手段を通じて呈示される一つまたは複数の通知506をレンダリングしてもよい。たとえば、これ(単数または複数)は、画面上に、または可聴でレンダリングされることができる。
さまざまなUI要素をレンダリングし、オプションを選択し、データを入力する具体的な手段は重要ではないことが理解されるであろう。これらのUI要素の機能については、まもなく詳細に説明する。また、図5に示されるUI 500は、単に概略化されたモックアップであり、実際には、簡潔のため図示されていない一つまたは複数のさらなるUI要素を含んでいてもよいことが理解されるであろう。
図6は、本明細書に開示される実施形態に従って使用するためのトランザクション152の集合を示している。集合は、第零のトランザクションTx0、第1のトランザクションTx1、および第2のトランザクションTxpを含む。これらの名前は単に便宜上のラベルであることに注意されたい。必ずしも、これらのトランザクションがブロック151またはブロックチェーン150において順次続けて配置されること、または第零トランザクションがブロック151またはブロックチェーン150における初期トランザクションであることを意味するものではない。また、これらのラベルは、必ずしも、それらのトランザクションがネットワーク106に送信される順序について何かを含意するものではない。これらは、1つのトランザクションの出力が次のトランザクションの入力によってポイントされるという論理的な系列に関するのみである。システムによっては、親をその子よりも後にネットワーク106に送ることが可能でありうることを想起されたい(その場合、「オーファン」である子は、親が到着するのを待っている間、一つまたは複数のノード104においてある期間にわたってバッファリングされる)。
実施形態は、任意的に、第2のトランザクションTxpの異なる代替的なバージョンが使用されることを可能にしてもよい。これらは、両方が第1のトランザクションの同じ出力(たとえば、同じUTXO)を参照する入力を含んでいる場合、(実質的に)同じトランザクションのバージョンであるといえる。それら異なるバージョンは、その出力の異なるロック解除条件を満たすことによって、異なる機能を提供することができる。まもなく論じられる交渉手順は、第1のトランザクションの2つ以上の異なるインスタンスTx1-template、Tx1、Tx1'、Tx1"などにも関わる。ここで、2つ(以上)のトランザクションは、両方が同じソース・トランザクション(または「第零」トランザクション)Tx0の同じ出力(たとえばUTXO)を参照する入力を含む場合、(実質的に)同じ第1のトランザクションのインスタンスであるといえる。それらは、同じロック解除条件を満たすことに基づいて、その入力を償還してもよい。それら異なるインスタンスは、実質的に同じ機能を果たしうるが、一つまたは複数のトランザクション・パラメータ(たとえば、デジタル資産の量および/またはロック時間)の、異なる提案されたおよび反対提案された値を指定することができる。これは、図7および図8を参照して、後でより詳細に議論される。
第零トランザクションTx0は、アリス103aにロックされるデジタル資産の量のソースとして作用するという点で、本目的のためのソース・トランザクションと呼ばれることもある。第1のトランザクションTx1は、ソース・トランザクションTx0からデジタル資産の前記量を条件付きで移転するための媒介として作用するという点で、本目的のための、中間トランザクションまたは条件付きトランザクションと呼ばれることもある。第2のトランザクションTxpは、条件の1つをロック解除し、ボブ(または、潜在的にはボブが代行している受益者)に対する支払いを引き渡すトランザクションであるので、ターゲット・トランザクションまたは支払いトランザクション(よって、下付きの「P」)と呼ばれることもある。いくつかの実施形態では、第2のまたはターゲット・トランザクションTxpの2つの代替的なバージョンが可能であり、1つは、Txpの入力において指定されたデータ・ペイロードを含むなどの条件を満たした場合に、ボブがTx1の出力からある量を移転することを可能にするものであり、もう1つは、Tx1の出力におけるタイムロックによって定義された期間後にボブがまだそれを請求しなかった場合に、アリスがTx1の出力からある量を取り戻すことを可能にするものである。
図6に示されるように、第零またはソース・トランザクションTx0は、デジタル資産の量を指定する少なくとも1つの出力2030(たとえば、Tx0の出力0)を含み、該出力はさらに、この出力をアリス103aにロックするロック・スクリプトを含む。これは、ソース・トランザクションTx0のロック・スクリプトが、少なくとも1つの条件が満たされることを要求することを意味する。すなわち、出力をロック解除しようとする(したがって、デジタル資産の前記量を償還しようとする)いかなるトランザクションの入力も、そのロック解除スクリプトにおいてアリスの暗号学的署名(すなわち、アリスの公開鍵を使用)を含まなければならないという条件である。この意味で、Tx0の出力で定義された量は、アリスによって所有されていると言える。出力は、UTXOと呼ばれてもよい。Tx0の入力が遡ってポイントするのがどの先行トランザクションのどの出力かは、現在の目的のためには特に重要ではない(入力がTx0の総出力(単数または複数)をカバーするのに十分である限り)。
今の場合、ソース・トランザクションTx0の出力をロック解除するトランザクションは、第1の、つまり中間のトランザクションTx1のインスタンスである。したがって、Tx1の最終化されたインスタンスは、少なくとも1つの入力2021(たとえば、Tx1の入力0)を有し、この入力2021は、Tx0の関連する出力(示される例では、Tx0の出力0)へのポインタを含み、さらに、少なくともアリスの署名を必要とする、その出力のロック・スクリプトで定義された条件に従って、Tx0のポイントされた出力をロック解除するように構成されたロック解除スクリプトを含む。Tx0のロック・スクリプトによってアリスに要求される署名は、Tx1の一部に署名するために要求される。いくつかのプロトコルでは、署名される必要のあるTx1の部分は、Tx1のロック解除スクリプトで定義された設定であることがある。たとえば、これは署名にアペンドされる1バイトであるSIGHASHフラグによって設定されてもよく、よって、データに関しては、ロック解除スクリプトは、<Sig PA><sighashflag><PA>のように見える。あるいはまた、署名される必要のある部分は、単にTx1の固定部分であることができる。いずれにせよ、署名される部分は典型的には、ロック解除スクリプト自体を除外し、Tx1の入力の一部または全部を除外することがある。これは、Tx1の入力が鍛成可能(malleable)であることを意味する。
第1のまたは中間のトランザクションTx1は、少なくとも1つの出力2031(たとえば、Tx1の出力0;ここでもまた、出力はUTXOと呼ばれてもよい)を有する。任意的に、諸実施形態において、中間トランザクションTx1の出力は、どの一の当事者に対しても無条件にはロックされない。Tx0と同様に、Tx1は少なくとも1つの出力(たとえば、Tx1の出力0)をもち、これは、前方に移転されるべきデジタル資産の量を指定し、さらに、その出力のロックを解除し、よってこの量を償還するために必要とされるものを定義するロック・スクリプトを含む。しかしながら、いくつかの実施形態では、このロック・スクリプトは、少なくとも:i)第1の条件(「条件1」)およびii)第2の条件(「条件2」)を含む、複数の異なる可能な条件のうちの任意の1つに基づいて、その出力がロック解除されることを許容する。
第2のターゲット・トランザクションTxpは、少なくとも1つの入力202p(たとえば、Txpの入力0)を有し、これは、Tx1の上述の出力(示されている例では、Tx1の出力0)へのポインタを含み、また、Tx1のロック・スクリプトで定義された前記一つまたは複数の条件のうちの1つを満たすことに基づいて、Tx1の前記出力をロック解除するように構成されたロック解除スクリプトを含む。ターゲット・トランザクションTxpの第1のバージョンでは、ロック解除スクリプトは、第1の条件、条件1を満たすように構成される。あるいはまた、ターゲット・トランザクションの第2バージョンでは、ロック解除スクリプトは、第2の条件、条件2を満たすように構成されてもよい。
第2のターゲット・トランザクションTxpは、少なくとも1つの出力203p(たとえば、Txpの出力0)を有し、これは、第1のバージョンにおいてボブに移転するデジタル資産の量を指定する、または第2のバージョンにおいてアリスに移転する量を指定する。出力203pはまた、これをそれぞれボブまたはアリスにロックするロック・スクリプトを含む(すなわち、使用するためにロック解除スクリプトにおいてそれぞれボブまたはアリスの署名を含む、さらなる前向きのトランザクションが必要となる)。この意味で、ターゲット・トランザクションTxpの出力は、第1のバージョンまたは第2のバージョンのどちらが使われるかに依存して、ボブまたはアリスによって所有されていると言える。この出力は、やはりUTXOと呼ばれることがある。
諸実施形態において、第1の条件は、どのトランザクションのロック解除スクリプトであれTx1のロック解除を試みているもの(この場合、ターゲット・トランザクションTxpの第1のバージョン)が、そのロック解除スクリプトにおいて、ボブの暗号署名、および/またはボブが提供するまたは含める必要があるであろうボブのデータでありうるデータ・ペイロードを含むことを要求する。データ・ペイロードを含める要件は、Tx1のロック・スクリプトに含まれるハッシュ・チャレンジによって課されることができる。チャレンジは、データのハッシュ(データ自体ではなく)と、対応するロック解除スクリプトにおいて提供されるデータのハッシュがロック・スクリプトにおいて提供されるハッシュ値と等しいかどうかを(ロック解除スクリプトと一緒にノード104で実行された場合に)テストするために構成されたスクリプト片とを含む。署名のための要件は、たとえば、前に議論したCheckSigによって課されることができる。諸実施形態において、第1の条件は、Txpのロック解除スクリプトにアリスの署名が含まれることは要求しない。ボブによって署名される必要のあるTxpの部分は、Txpのロック解除スクリプトの設定(たとえば、SIGHASHフラグによって指定される)であってもよく、あるいは固定されることができる。いずれにせよ、少なくともロック解除スクリプトは除外される。
諸実施形態において、第2の条件、ii)条件2は、どのトランザクションのロック解除スクリプトであれTx1のロック解除を試みているもの(この場合、ターゲット・トランザクションTxpの第2のバージョン)が、そのロック解除スクリプトにおいてアリスの暗号学的署名を含むことを要求する(ただし、諸実施形態において、ボブの署名は要求されない)。また、ロック時間が満了していることが要求される。これにより、ボブが第1条件、i)条件1に基づいて請求しない場合、アリスはTx1の出力からの自分の支払い(実際には、マイニング手数料を差し引いたもの)を取り戻すことができる。たとえば、これは、ボブがプロセスに全く従事しないため、またはボブがTxpの第1のバージョンをロック時間によって指定された期間内にブロック151注にマイニングしなかったために生起する可能性がある。このロック時間は、絶対的な時点、または経過する時間期間として定義されうる。これは、人間の時間(たとえば、秒、分、時間、または日)で、あるいはマイニングされるブロックの数で指定され、測られることができる。
第零(すなわち、ソース)トランザクションTx0は、アリス、ボブ、または第三者によって生成されてもよい。これは、典型的には、アリスがTx0の入力で定義された量を取得した先行当事者の署名を必要とする。それは、アリス、ボブ、先行当事者、または他の第三者によってマイニングされるようネットワーク106に送られてもよい。別の代替では、ボブがマイナー104Mbである場合、ソース・トランザクションTx0はネットワーク106にブロードキャストされる必要はなく、代わりにボブはそれを自身でマイニングすることができる。
第1の(すなわち、中間、条件付き)トランザクションTx1のインスタンスは、アリス、ボブ、または第三者によって生成されてもよい。諸実施形態において、それはアリスの署名を必要とするので、それはアリスによって生成されてもよい。あるいはまた、それは、ボブまたは第三者によってテンプレートとして生成され、次いで署名するためにアリスに送信されてもよく、たとえばサイドチャネル301を通じて送信されてもよい。次いで、アリスは、署名されたトランザクションをネットワーク106に自身で送るか、あるいはボブまたは第三者に送ってネットワーク106に転送するしてもらうか、あるいは単に自分の署名を送ってボブまたは第三者にTx1の署名され最終化されたインスタンス中にまとめてネットワーク106に転送してもらうことができる。ここでもまた、Tx1の最終化されたインスタンスをネットワーク106に送信する前のオフチェーン交換があればそれも、サイドチャネル301を通じて実行されてもよい。別の代替では、ボブがマイナー104Mbである場合、第1のトランザクションTx1は、ネットワーク106にブロードキャストされる必要はなく、代わりに、ボブは、自身でそれをマイニングすることができる。
第2のトランザクション(すなわち、ターゲット・トランザクションまたは支払いトランザクション)Txpのいずれかのバージョンは、アリス、ボブまたは第三者によって生成されうる。第1のバージョンはボブの署名および/またはデータを必要とするため、ボブによって生成されてもよい。あるいはまた、アリスまたは第三者によってテンプレートとして生成され、署名してデータを加えるためにボブに送られてもよく、たとえばサイドチャネル301を通じてボブに送信されてもよい。諸実施形態において、ボブは、第2のトランザクションTxp(アリスのデータ・ペイロードを含む)をブロック151中にマイニングするためにアリスによって支払われるマイナー104Mbである。この場合、第2のトランザクションTxpは、ネットワーク106にブロードキャストされる必要はなく、代わりにボブは、自身でそれをマイニングすることができる。しかしながら、代替的に、Txpが何らかの他のサービスに対してボブに支払いをするものである場合、ボブ自身によってマイニングされることも(ボブがマイナーである場合)、あるいは他の何らかの当事者によるマイニングのためにネットワーク106にブロードキャストされることも(ボブがマイナーであってもなくても)どちらも可能である。後者の場合、ボブは、署名されたトランザクションを自身でネットワーク106に送るか、あるいはアリスまたは第三者に送ってネットワーク106に転送してもらうか、または単に自分の署名およびデータを送ってアリスまたは第三者に署名されたTxp中にまとめてネットワーク106に転送してもらうことができる。諸実施形態において、第2のバージョンは、アリスの署名を必要とする。よって、アリスによって生成されてもよく、またはボブによってテンプレートとして生成され、テンプレートとしてアリスに送られその部分を追加されてもよく、たとえばここでもまた、サイドチャネル301を通じて送信されてもよい。あるいはまた、第三者によってテンプレートとして生成され、次いでアリスに送られることができ、そこでアリスが自分の署名を追加し、ボブまたは第三者に転送して、ネットワーク106に転送してもらってもよい。ここでもまた、ネットワーク106にTxpを送信する前のオフチェーン交換があればそれは、サイドチャネル301を通じて実行されてもよい。
トランザクションの種々の要素が生成され、まとめられることができるさまざまな位置があり、トランザクションがP2Pネットワーク106の最終的な宛先に直接的または代理的に送られるためのさまざまな方法があることが理解されるであろう。開示された技法の実装の範囲は、これらの点のいずれにおいても限定されない。
また、本明細書において、「アリスによって」、「ボブによって」および「第三者によって」などの句は、それぞれ「アリス103aのコンピュータ設備102aによって」、「ボブ103bのコンピュータ設備102bによって」および「第三者のコンピュータ設備によって」の略として使用されうることが理解されるであろう。また、所与の当事者の設備は、その当事者によって使用される一つまたは複数のユーザー装置、またはそのパ当事者によって用いられるクラウド資源などのサーバー資源、またはこれらの組み合わせを含む可能性があることにも注意されたい。これは、必ずしも、アクションが単一のユーザー装置または単一の物理的な位置で実行されることに限定するものではない。
本明細書に開示される実施形態によれば、アリスは、ボブがブロックチェーン150内にデータの一部の(潜在的には大きな)項目を格納するトランザクション(Txp)をマイニングするために、事前にボブと手数料を交渉する。たとえば、このデータは、テキストを含む文書、または静止画像、またはオーディオもしくはビデオクリップを含むことができる。事前に手数料を交渉することはネットワーク輻輳を節約する。そうしなければ、最善のトランザクションを得るために、アリスは、小さなマイニング手数料をオファーして第1のトランザクションTx1のあるインスタンスをネットワーク106を通じて一般に公開することから始め、「食いつく」マイナー104Mがいるかどうかを見て、いなければ、アリスは、手数料を少し増やし、再度試みる、などとする必要があるからである(あるいは、そうでなければ、アリスは、最初から高すぎるオファーをするはめになりうる)。これは、アリス106によってP2Pネットワーク上で多数の効果的でないトランザクションが公開されることにつながる可能性がある。一方、トランザクションのパラメータ(たとえば、データ、量およびロック時間)が、特定のマイナー、ボブ103bと事前に合意される場合には、第1のトランザクションTx1の合意されたインスタンスのみが、ネットワーク106に公開される必要がある(当然のことながら、Tx0およびTxpも)。
本開示は、P2Pネットワーク106によって認識されるのと同じトランザクション・プロトコルを使用して、第1のトランザクションの一連のテンプレートまたは提案されるインスタンスTx1-template、Tx1、Tx1'、Tx1"、…を、サイドチャネル301を通じて交換することによって、ネットワーク輻輳に対するこの節約が達成される方式を提供する。提案および反対提案は、トランザクションの提案されたパラメータを含む実際のトランザクションの形でサイドチャネル301を通じて交換されるので、これにより、アリスおよびボブのクライアント105a、105bが同じタイプのものであるかどうかにかかわらず、すなわち、アリスとボブがサイドチャネル301を通じて提案および反対提案をするための共通の特注のメッセージング・プロトコルを共有する必要なく、アリスおよびボブは交換を実施することができる。これにより、ネットワーク輻輳に対する節約が可能になるとともに、普通なら生じうる潜在的な相互運用性の問題を回避することができる。アリスとボブは、たまたま同じタイプのクライアント105を実行する場合もあれば、実行しない場合もあるが、いずれにせよ、そうすることを事前に調整したり保証したりする必要はない。諸実施形態において、第1のトランザクションTx1の提案されたインスタンスは、交渉の一部としてサイドチャネル301上でアリスとボブの間で交換される唯一のメッセージでありうる。あるいはまた、サイドチャネル301を通じて、この上にいくつかの本質的でない信号伝達が重ねられていること、または、たとえば何らかの他の標準化された機構を介して、何らかの支援通信があることは除外されない。
ここで、この手順の一例が図5に関してより詳細に記述される。いくつかの対応する例示的なトランザクション・フォーマットが図7に示される。この手順は、選択機能403を通じて実装され、それぞれのクライアント・アプリケーション105のユーザー・インターフェース500を通じてアリスおよびボブに対して現れてもよい。
手順の第1の段階a)で、アリスは、クライアント・アプリケーション105aの一つまたは複数のデータ入力フィールド505に、第1のトランザクションTx1のための一つまたは複数のパラメータの提案される値を入力する。これは、少なくとも、データ項目(データ・ペイロード)を、ブロックチェーン150にそれを記録するために、ブロック151中にマイニングするためにアリスが初期にボブにオファーしたいと望むデジタル資産の量を含むであろう。任意的に、アリスはまた、ロック時間のような第1のトランザクションTx1に含めるために提案される一つまたは複数の他のパラメータの一つまたは複数の他の値をも入力してもよい。「ロック時間」という用語は、いくつかの例示的なトランザクション・プロトコルまたはスクリプト言語において特定の定義を有することがありうるが、それでも、本明細書で言及するところでは、ロック時間という用語は、より一般的に、Tx1のロック解除スクリプトの特定の条件がロック解除される前に経過しなければならない期間を指定するための任意のパラメータを指しうることに注意されたい。それは、人間の時間(秒、分、時間、および/または日など)で、または、他の何らかの条件で、たとえばある定義された時点後にマイニングされるトランザクションまたはブロックの数(たとえば、Tx1の最終化されたインスタンスがブロック151中にマイニングされる時点から続く)で測ることができる。さらにより一般には、ロック・スクリプトによって、一つまたは複数の他の、代替的な、または追加的なパラメータが、所与のロック解除条件の基準として課されることができる。スクリプト言語は、ユーザー定義の基準がロック解除条件の一部として指定されるためのほとんど無際限の可能性を可能にしうる。条件は、一つまたは複数のパラメータによってパラメータ化されてもよく、任意の一つまたは複数のそのようなパラメータの値は、ボブへの提案の一部を形成することができる。
アリスはまた、たとえばテキストファイル、ワードプロセッシング文書ファイル、データベースファイル、スプレッドシートファイル、オーディオファイルまたはビデオファイルのようなファイルを選択することによって、自分が記録したいデータ項目の指示を、データ入力フィールド505の1つに入力する。さらに、アリスは、データ入力フィールド105の1つに、提案をすることを希望するユーザー、この場合はボブの指示をも入力する。たとえば、これは、使用されているトランザクション・プロトコル内でのボブのアドレス、またはアリスのクライアント105aがアドレスに変換するボブのユーザー名を含むことができる。より一般には、ボブの指示は、ボブを一意的に示す、またはサイドチャネル301を通じてボブに連絡するための任意の手段を含んでいてもよい。サイドチャネル301は、この時点ですでに確立されていてもよく、あるいはこれがチャネル301を確立する手段であってもよい。
アリスのクライアント105aは自動的に、アリスによって提供された情報をテンプレート・トランザクションに合成し、それが、第1のトランザクションの第1のインスタンスTx1-templateとなる。一例が図7に示される。
データを入力した後、アリスは、自分のクライアント105aのUI 500において「トランザクションを提案」オプション501を作動させる。応答して、クライアント105aは、テンプレート・トランザクションTx1-templateをサイドチャネル301(本明細書では「交渉チャネル」とも呼ばれる)を通じてボブのクライアント105bに送信する。諸実施形態では、クライアント105aは、アリスが「トランザクションを提案」オプション501を作動させることに応答して、テンプレート・トランザクションTx1-templateを定式化し、次いでそれをボブに送信する。あるいはまた、クライアント105aは、アリスが提案されるパラメータ値を入力した後、アリスが「トランザクションを提案」オプション501を作動させることを予想して、それを定式化することができ、あるいはアリスがそれぞれのパラメータを入力するときに、それとともに区分ごとに定式化することさえできる。
図7に示されるように、この段階a)では、アリスのクライアント105aによって定式化されたテンプレート・トランザクションTx1-templateは、入力を含まなくてもよい。しかしながら、これは、提案されたパラメータを含む出力2031-templateを含む。この出力2031-templateは、提案される量xと、この量を償還するための少なくとも1つの条件を定義するロック・スクリプトを含む。
アリスが最初から有効な署名を含む入力を提供した場合、この初期テンプレートTx1-templateは有効なトランザクションであり、マイニングされることができる。これは、ボブがまったく交渉せずにマイニングできることを意味するので、アリスはこの段階では入力を含めないことが望ましいかもしれない。入力を含めるとすれば、アリスは上記の効果を避けるために、トランザクションがまだ全体的には無効であることを保証することができる。たとえば、出力をカバーするには値が小さすぎる入力を含める(たとえば、出力値の半分を支払いに対する「先払い」コミットメントとして含める)ことによってできるが、これは入力を含めないことよりも単に複雑であり、必ずしも実際の恩恵を提供するとは限らない。あるいはまた、アリスがボブが最初の提案をマイニングするオプションをもつので構わなければ、アリスは入力を含めて、Tx1-templateを最初から有効にすることができる。
諸実施形態において、Tx1の各インスタンスのロック解除スクリプトは、出力を償還するための2つの代替的な条件を定義する:i)ボブがTxpの入力のロック解除スクリプトに自分の署名およびデータ・ペイロードを含めることを要求する第1の条件(これはTxpの第1の可能なバージョンである);ii)ロック時間tが満了していることを要求し、アリスがTxpの入力のロック解除スクリプトに自分の署名を含めることを要求する第2の代替条件(これはTxpの第2の可能なバージョンである)。前述のように、第1の条件は、ロック・スクリプト内にデータ・ペイロードのハッシュを含むハッシュ・チャレンジを含めることによって課すことができる。第2の条件は、ボブがロック時間tが満了する時までに第2のトランザクションTxpの第1のバージョンをブロック151中にマイニングしない場合、アリスがxを取り戻すことを可能にする。ロック時間tは、交渉されるトランザクションの1つのまたは全パラメータでありうる。
この段階では、第1のトランザクションのテンプレート・インスタンスTx1-templateは、完全なトランザクションではないことに注意されたい。なぜなら、その出力の合計は、その入力の合計よりも多くの量のデジタル資産を指定しているからであり、また、Tx0の出力をポイントしアリスの署名を含む入力をもたないからでもある。よって、第1のトランザクションのこのインスタンスTx1-templateは、この形でネットワーク106にブロードキャストされた場合、無効とみなされるであろう。それにもかかわらず、第1のトランザクションのテンプレート・インスタンスTx1-templateは、完全であるところまでにおいて完全な部分がプロトコルに準拠するという点で、ノード104によって適用されるトランザクション・プロトコルに従って定式化されていると本明細書では言うことがある。
アリスの最初の一手が無効なテンプレート・トランザクションであることの利点は、アリスのトランザクションがボブに与えられる時点では無効なテンプレートであるため、ボブはそれ以上の交渉なしにアリスの開始の一手を単純に一方的に受け入れることはできないということである(一方、アリスが完全なトランザクションを送信したとしたら、ボブはアリスからの確認を必要とせずにそれを受け入れることができる)。これは、アリスとボブがトランザクションにおける複数のパラメータの間のトレードオフをすることが可能であり、よってボブがアリスに有利なカウンターオファーを与えることができうるため、有益でありうる。たとえば、アリスの開始の一手が「6日以内にマイニングすれば10BSVを支払う用意がある」と言う場合、ボブは6日の要求を満たすことができると自信を持って言うするには十分なハッシュパワーをもたず、「3BSVの大幅に割引された価格で10日以内にマイニングする用意がある」と答えるかもしれない。よって、アリスは異なる理由のために好ましいのでボブのカウンターオファーを受け入れる気になるかもしれない。すなわち、カウンターオファーを受け取ると、アリスは、時間と価格の2つのパラメータを比較考量し、その価格のためにさらに3日間待っても構わないと結論づけることができる。複数のパラメータをもつということは、アリスとボブは常に、自分の当初の選好と同じではないカウンターオファーのほうがいいと思う可能性があることを意味する。
しかしながら、代替的な諸実施形態では、アリスは単に、自分の署名とTx0へのポインタを含めることによって、第1のトランザクションの第1のインスタンスTx1-templateに完全な入力を含めることができる。これにより、アリスの条件が受け入れ可能であれば、ボブは、Tx1-templateを、ネットワーク106を通じて伝搬され、それによりブロックチェーン150に記録されるように送信して、また、自分の署名およびデータをTxpに追加し、これを、ネットワーク106を通じて伝搬されてチェーン150に記録されるようにすることによって、単純にそのまま受け入れることができる。
いずれにせよ、いくつかの実施形態では、Tx1-templateの入力は、テンプレート・トランザクションTx1-templateのボディ内で、サイドチャネルを通じてデータ・ペイロードをボブに伝達するための媒体またはキャリアとして使用されてもよい。この技法は、可鍛性の原理に基づいている。この入力は、図7には示されていないが、後により詳細に議論される。それは、Tx0の出力をポイントし、アリスの署名を含む同じ入力、またはヌルもしくは冗長入力のような別の入力であることができる。しかしながら、この機能は必須ではない。あるいはまた、データ・ペイロードは、単に、ボブがすでに自分の側でもっているデータ、またはアリスが、電子メール、FTP(ファイル転送プロトコル)、MMS(マルチメディア・メッセージング・サービス)などの何らかの他の相互に認識される媒体を介して別個に通信するデータであってもよい。
プロセスは、第2段階b)に進むことができる。ここでボブは、アリスのテンプレートを受け入れるか否かを選択し、受け入れない場合は、アリスはボブから反対提案を受け取る。
アリスが、Tx1-templateが実際に有効なトランザクションであるような完全な入力を含めた場合、ボブが受け入れることを望むならば、単にTx1-templateとTxpを公開されるようネットワーク106に送り出すことによって、そうすることができる。しかしながら、アリスがこれをしなかったとすると、Tx1-templateは完全で有効なトランザクションではない。それが成り立つ、および/またはボブが受け入れることを望まないとすると、ボブは、第1のトランザクションの別の更新されたインスタンスTx1を、サイドチャネル301を通じてアリスに送り返す。ボブは、これを、アリスによって提供されるテンプレートTx1-templateに基づいて行う。
諸実施形態において、ボブは、第1のトランザクションTx1のインスタンスに署名し、自分の署名をTx1の入力202a-Bobに含めることを要求される。これは「ゼロ値」入力であることができる(実際には、これは現実的には、無視できるほど小さい値である)。Bobの「0ユニット」入力は、アリスの入力202a-Alice(まもなく述べる)がアリスが所有するソースUTXOをポイントするのと同じように、ボブが所有する何らかのソースUTXOをポイントする。
そのようなゼロ値入力をボブが加えることに関する意図は、ネットワーク上のマイニング・ノードによって有効確認される交渉トランザクション(Tx1)の出力へのボブの同意を示すために署名するすべをボブに与えることである。ここでのパラダイムは、テンプレート・トランザクションTx1-templateの出力がボブのサービスに対する顧客のオファーとして機能し、ボブがこれらの選好に署名することは、ボブがそれらの条件の下でサービスを提供することに同意することとして解釈できるということである。しかしながら、ボブがこのような小さな値の入力を加える必要は必須ではない。代わりに、たとえば、ボブはテンプレート・トランザクション(Tx1-template)にメッセージとして署名し、それをアリスに送ることができる。アリスは、その署名をTx1'(後述)における自分の支払い入力に含めることができ、あるいは別の代替として、ボブは単に署名することを全く要求されなくてもよい。
(図7に示されているように)ボブが実際にTx1への入力を含めることの任意的な利点は、ボブの署名が有効で、マイナーらによってチェックされなければならないということである。これは、ある意味では、アリスの選好に対するボブの同意の、より強力な表現である。これは、ネットワークによって「保護された」オンチェーン契約に少し似ている。
ボブがアリスのオファーを受け入れることを望む場合、ボブは単にTx1-templateに署名することによってTx1を形成する。ボブが署名する部分は、図7の段階b)において黒で示されている。アリスがもともと自分の入力を含めなかったとすると、ボブはサイドチャネル301を介してそれをアリスに返し、その後、アリスはTx1に署名してTx1'を形成することによってトランザクション(および交渉)を最終化する。次いで、アリスは、これをネットワーク106に(直接または第三者を介して)公開するか、または、マイニングまたは公開したもらうためにボブに返送する。
ボブがその代わりに反対提案をすることを望む場合、ボブはまた、署名する前に、トランザクション・パラメータのうちの少なくとも1つを修正する。これは、たとえば、指定されたデジタル資産の量xを修正すること、またはロック時間t(事実上、ブロック151中にデータをマイニングするためにボブに与えられる時間)を修正すること、またはその両方を含むことができる。いずれの方法でも、ボブは、第1のトランザクションのこの修正されたインスタンスTx1(テンプレートに対して修正されている)を、サイドチャネル301を通じてアリスに送り返す。ボブがパラメータの一つまたは複数を修正した場合、これはアリスに対する反対提案のはたらきをする。
ボブのカウンターオファーは、アリスのクライアント・アプリケーション105aの通知506においてアリスに対してレンダリングされうる。アリスが反対提案を受け入れることを望む場合、段階c)において、アリスは単に自分の署名とTx0の出力へのポインタを含む入力2021-AliceをTx1に追加することができ、(アリスからのさらなる反対提案とすることなく)第1のトランザクションのさらなる更新されたインスタンスTx1'を作成することができる。アリスによって署名される部分は、図7の段階c)において黒で示されている。ある実施形態では、次いでアリスは、Tx1'をボブに返し、次いでボブは、Tx1"およびTxpの両方を、ネットワーク106を通じて伝播され、ブロックチェーン150に記録されるように送信する。ある代替的な実施形態では、ボブは、TxpをTx1'とともにアリスに送信することができ、次いでアリスは、Tx1"およびTxpを、ネットワーク106を通じて伝播され、チェーン150に記録されるように送信する。別の代替では、アリスは、ネットワーク106を通じて伝搬されるようTx1'を送り、ボブには何らかの他の機構を介して受け入れを信号伝達し、ボブは伝搬されるようTxpを送る。どの実施形態が用いられようと、クライアント105aは、アリスがクライアント105aのUI内の「反対提案を受け入れ」コントロール502を作動させることに応答して、関連するアクションをトリガーするように構成されてもよい。
ボブがTx1の入力202a-Bobに自分の署名を含めず、代わりにそれを別個にアリスに送信する実施形態では、アリスは、たとえば以下のように、その署名をTx1'における自分の支払い入力2021-Aliceに含めることができる:
<Sig(PA,Tx1')>
SIGHASH_ALL
<PA>
<Sig(PB,Tx1-template)> <--これは、ボブが今やTx1ではなくTx1-templateに署名しているため
OP_DROP <--アリスの入力スクリプトに含まるが、マイナーによって有効確認されないようにする
一方、アリスがボブのカウンターオファーを受け入れることを望まないが、交渉を継続することを望む場合、アリスは代わりに、クライアント・アプリケーション105aのUI 500内の「さらなるカウンターオファーを行う」オプション503を作動させる。
ここで、アリスのクライアント105a内のUI 500は、クライアント105a内のUI 500を通じてレンダリングされるデータ入力フィールド507を通じて、前記一つまたは複数のトランザクション・パラメータのうちの少なくとも1つのトランザクション・パラメータのさらなる修正値を入力する機会をもってアリスに促す。これは、やはり、たとえば、量xおよび/またはロック時間tの修正値を含むことができる。いったんこれを行うと、アリスは「トランザクションを提案」コントロール504の別のインスタンスを作動させる。応答して、アリスのクライアント105aは、アリスがデータ入力フィールド507に入力したものに応じて前記修正されたパラメータ値(単数または複数)を更新し、アリスの署名を含み、ソース・トランザクションTx0の出力をポイントする入力2021-Aliceを追加することによって、第1のトランザクションのさらなる修正されたインスタンスを作成する。Tx1およびTx1'の両方がボブによって署名されているので、アリスがカウンターオファーをする行為は、実際には、Tx1-templateの新しいインスタンスを提案するのと同じであることに注意されたい。それをTx1-template'と呼ぶことにする。次いで、クライアントは、サイドチャネル301を通じて、このさらに修正されたインスタンスTx1-template'をボブに送信する。あるいはまた、クライアント105aは、アリスが「トランザクションを提案」コントロール507を作動させる前に、すでにTx1'の定式化を開始することができ、次いで、このコントロール507の作動によってトリガーされてそれをボブに送信する。その後、プロセスは段階a)から繰り返される。プロセスは、1回以上繰り返されてもよく、毎回、テンプレート・トランザクションの最新に提案されたインスタンスを用いて段階a)で始まる。
いったん第1のトランザクションTx1'の完全で有効かつ受け入れ可能なインスタンスが合意されると、ボブまたはアリスは、これを、伝搬され、ブロックチェーン150に記録されるよう送信する。あるいはまた、ボブは、自分でTx1'をブロック151中にマイニングする。いずれにせよ、ボブはまた、第2のトランザクションTxpの第1のバージョンをブロック151中にマイニングし、その結果、データ・ペイロードがブロックチェーン150に記録される。
任意的に、ボブはアリスに自分の受け入れを信号伝達してもよい。たとえば、これは、サイドチャネル301を通じてアリスにTx1'の同じインスタンスを送り返すことによってできる。アリスが提案したバージョンと同一であるため、アリスのクライアント105aはこれを受け入れと解釈し、これをクライアント105aのUI 500を通じてアリスに通知する。あるいはまた、ボブが、トランザクションとして定式化されていない、サイドチャネル301を通じて別個の受け入れ信号をアリスに送ることができることは除外されない。これはトランザクション専用の信号伝達を破るが、この信号は必須ではないので、これは受け入れられると考えられる。別の変形では、ボブはTx1'をサイドチャネルを通じてアリスに送り返し、アリスはこれを、ネットワーク106を通じて伝搬され、ブロックチェーン150に記録されるよう送信する。
ボブが受け取り確認する機構がない場合、アリスは、ボブからのさらなる反対提案がないことを暗黙的な受け入れとみなすことができ、または、単に、第1のトランザクションTx1'の最新のインスタンスをポイントするトランザクションTxpにおいて自分のデータがブロックチェーン150に含まれていることを観察するのを待つことができる。さらに別の可能性として、アリスが、所与のマイナー104Mに、トランザクションが採掘される前に、トランザクションをメムプール(mempool)154の自分のローカルコピーに「受け入れ」したかどうかを確認するために照会することが可能でありうる。マイナーに照会するAPIはまだ実装されていないが、可能である。よって、アリスが、オンチェーンで見る前に受け取り確認を得られることが考えられる。
諸実施形態において、アリスは、a)を実行し、よって提案されるトランザクションTx1-templateをボブに送信することによって、交渉を開始する者であってもよい。あるいはまた、ボブが交渉を開始する者であることもできる。この場合、第1段階a)の前に、予備段階A)において、ボブは、サイドチャネル301を通じてアリスに広告トランザクションを送信するか、またはアリスが広告トランザクションを検索する公共サービスレジストリにおいて広告トランザクションを利用可能にする。
一例が図8Aに示される。広告トランザクションは、第1のトランザクションのためのいくつかの提案されたパラメータとともに、提案されるスクリプトを含む。提案されるスクリプトは、示される例のオペコードOP_Returnによって指定されているように、使用不能な出力2032-unspendableに含まれる。これは、広告された条件を受け入れるか、ボブに対して提案をするかようにとのアリスに対する勧誘として作用する。もしアリスが望むなら、アリスは単に、提案されたスクリプトとパラメータ値で第1のトランザクションのインスタンスを定式化することによって、広告された条件を受け入れることができる。この一例が図8Bに示される。しかしながら、アリスが受け入れず、ボブとの交渉にはいることを望む場合には、アリスは、図5および図7に関連して議論したように、第1段階a)からプロセスを継続する。段階a)でアリスが入力したパラメータの一つまたは複数は、予備段階A)において広告トランザクション内でボブが最初に提案したものとは異なっていてもよい。
このように、アリス(ユーザー)とボブ(マイナーおよびサービス提供者)が、ボブがオファーするマイニング・サービスを使用して、有料アップロード動作の条件を交渉することを許容するために、テンプレート・トランザクションを使用する機構が開示されている。
ボブが、Tx1-templateに署名してTx1を形成することによって、アリスのオファーを受け入れる。その後、アリスは、Tx1'に署名してTx1'を形成することによって、トランザクション(および交渉)を最終化する。
アリスが開始する場合、トランザクションは以下を表すとみなされうる:
a)Tx1-template=アリスがオファーをテーブルに載せる、
b)Tx1=ボブが署名してそのオファーに合意する、
c)Tx1'=アリスが署名して、(双方向の)合意を完了する。
アリスが開始する場合、トランザクションは基本的に以下を表す:
a)Tx1-template=アリスがオファーをテーブルに載せる、
b)Tx1=ボブが署名してそのオファーに合意する、
c)Tx1'=アリスが署名して、(双方向の)合意を完了する。
ボブが開始する場合、次のようになる:
A)Tx1-ad=ボブが自分のサービスを宣伝する。この時点ですでにこれらの条件に署名している。次いで、
B)Tx1-ad'=アリスが合意して、ボブによって述べられ、署名されたオファーを完了する;または
「アリスが開始」の段階a)で再開し、上記a)~c)のように進む。
通常であれば、支払いチャネルは、オフチェーンで当事者間の完全で有効なトランザクションを送るためにのみ使用される。一方、今の場合、アリスが開始する場合(場合1)、Tx1-templateとTx1は不完全で無効であるが、それでもオフチェーンで交換される。ボブが開始する場合(場合2)、ボブの広告だけがオフチェーンで送られるか、または場合1の状況が発生する。今開示されているシステムでは、アリスとボブは、最後に署名されるよう、不完全トランザクションの状態について交渉している。通常の支払チャネルにおいて、完全なトランザクションの状態が交渉されている。実際、交渉チャネルでは、一部のシナリオでは、完全で有効なトランザクションがオフチェーンで送信される(通常の支払いチャネルで行われるように)必要は決してない場合がある。
すでに述べたように、考えるべき一般的な場合は2つある。場合1:アリスが交渉をもちかける、場合2:ボブが交渉をもちかける(すなわち、自分のサービスを宣伝する)。これらの例が、図7および図8を参照して以下に再掲される。
場合1:アリスが交渉を開始
ステップ1:アリスが不完全なテンプレート・トランザクションを生成し、ボブに送信する。
図7a)は、アリスによってボブに送信されたテンプレート・トランザクションTx1-templateの例を示す。
ステップ2:ボブがテンプレートを完成させ、それにより、入力を加えて署名することによって交渉トランザクションを作成する。出力値>入力値のため、これはまだ無効である。
ボブはまた、この交渉フェーズの一部と見なされるアリスのパラメータxおよびtを更新することを選択してもよいことに注意されたい。
図7b)は、ボブからアリスに送信される署名済み交渉トランザクションTx1の例を示す。ボブの署名によって署名されたメッセージを構成するデータは、黒でハイライトされている。
ステップ1および2は、交渉ラウンドとして、必要な回数だけ繰り返される。アリスは、自分が必要とみなすだけの数のオファーをボブに提案することができる。
ステップ3:アリスは、ボブからカウンターオファー/受け入れられたオファーを受け取ると、自分の入力を追加し、トランザクション全体に署名する。これは、オファー・トランザクションTx1の鍛成されたバージョンTx1'を生成する。鍛成されたフォームTx1'は有効であり、ボブはマイニングする。ボブはその後、Tx1'の出力を請求する後続のトランザクションTxpをマイニングすることによって、アリスのデータDをアップロードする
図7c)は、アリスからボブに送られた、署名された鍛成された交渉トランザクションTx1'を示している。アリスの署名によって署名されたメッセージを含むデータは黒でハイライト表示されている。
場合2:ボブが交渉を開始
ステップ1:ボブが自分の「有料アップロード」サービスを公に宣伝する。ボブはこれを、次のような無効なトランザクションをどこかで見えるように掲示することによって行う。このトランザクションは、ボブに直接コンタクトすることなく、顧客が解釈し、応答するのに十分な情報をエンコードする。これは、アリスがOP_RETURNにおける関連するフィールドを埋めることによってできる。
図8A)は、ボブからアリスに送られた署名された広告トランザクションTx1-adの例を示す。ボブの署名によって署名されたメッセージを含むデータは黒でハイライト表示されている。
ステップ2:アリスは、(I)ボブが署名するよう代替トランザクション・テンプレートをボブに送ることにより、異なる価格およびアップロード時間を交渉する、または、(II)このトランザクションTx1-adに署名し、ボブのアップロード・サービスの購入を完了することができる。アリスが(I)を選択する場合、手順は場合1の交渉に戻ったことになる。あるいはまた、アリスがボブの宣伝されたパラメータに満足である場合、アリスは署名して鍛成されたトランザクションTx1-ad'を作成する。このトランザクションは、異なるSIGHASHフラッシュを利用してトランザクションを鍛成することに注意されたい。ボブが選択したフラグは、アリスが、ボブのもとの署名を無効にすることなく、入力と出力の両方を追加することを許容する。
図8B)は、アリスからボブに送られた、署名され、鍛成された交渉トランザクションの例を示している。アリスの署名によって署名されたメッセージを含むデータは黒でハイライト表示されている。
可鍛性を使用したデータの伝達
以下は、テンプレート・トランザクションのボディ内でサイドチャネル301を通じてデータ・ペイロードをボブに伝達する媒体として、テンプレートの提案されるトランザクションTx1-template(またはTx1'など)を使用するために、入力レベルの可鍛性の現象を利用する任意的な追加的技法を記述する。次いで、ボブ(またはアリスもしくは第三者)は、ネットワーク106を通じて伝搬されるよう送信される前に、Tx1-templateからのデータ・ペイロードを鍛成する(そして、データ・ペイロードは、代わりに、何らかの段階でボブが提案の1つを受け入れると想定して、第2のトランザクションTxpの入力に含められる)。
可鍛性は、暗号学における既存の概念であり、これは、メッセージが悪意をもって修正されるが、なおも真正であるとして受け入れられることができるというセキュリティ上の懸念の土台となっている。デジタル署名方式は、この懸念に対処するために設計されている。しかしながら、ブロックチェーンの文脈において、可鍛性は、トランザクション全体を無効にすることなくトランザクションの一部を修正できることをいう。暗号学的な署名(たとえば、ECDSA署名)によって署名されたトランザクション内のいかなる情報も、鍛成の可能性はない。可鍛性に関係するセキュリティ上の懸念は、プロトコル自体ではなく、不適切な実装によって引き起こされる。諸実施形態において、可鍛性は、実際には、テンプレート・トランザクションのボディにおけるデータの通信を容易にするための有用な特徴として活用されうる。
アリスは、大量のプレーン・データまたは暗号化されたデータをブロックチェーンに入れるために、第2の役者に支払いをする用意があるという、すでに議論したシナリオを考える。しかしながら、アリスは、公正な価格で自分のトランザクションを受け入れてくれるマイナーがいないのではないかと心配している。心配を和らげるために、アリスはマイナーの友人であるボブに連絡し、相互に合意した数のビットコインを支払うことを約束する。アリスのデータがブロックチェーン上で公開され、ボブが支払いを受けることを確実にするために、諸実施形態は以下の技法を使用することができる。
前述のように、アリスは、アリスの何らかの大きなデータ項目をブロックチェーン150に格納するトランザクションTxpをボブがマイニングするための手数料を、ボブと事前に交渉する。これにより、ネットワーク輻輳が軽減される。なぜなら、そうでなければ、最善のディールを得るために、アリスはネットワーク上で少額の手数料で1つのトランザクションを一般に公表し、誰かが食いつくかどうかを見て、そうでなければ手数料をわずかに増やして再度試る、などとしなければならないからである(あるいは、そうしなければ、アリスは単に、オファーしすぎるはめになりうる)。
相互運用性を容易にするために、交渉は、サイドチャネル301を通じて第1のトランザクションTx1の提案されるインスタンスを交換することによって実施される。
可鍛性のアイデアを活用するために、アリスがアップロードしてもらいたいデータ・ペイロードDは、Tx1-templateの入力においてボブに伝達されうる。これは図7には示されていないことに注意されたい。原理的には、これは、アリスからボブに送信される第1のトランザクションのインスタンス(Tx1-template、Tx1'、Tx1"など)のうちの任意のものに含めることができる。簡単のため、以下では、アリスからボブに送信される第1のトランザクションの任意のインスタンスを指して記号Tx1を使用する。データ・ペイロードDは、ソース・トランザクションTx0の出力をポイントするのと同じ入力に含まれてもよいし、あるいはヌルまたは冗長入力のような別の入力に含まれてもよい。任意的に、これは、この第1のトランザクションのこのインスタンスを受信した任意のノード104にデータDを(たとえば、そのスタックから破棄することによって)無視するように指示する、関連するスクリプト言語のオペコードとともに含まれてもよい。例として、Scriptでは、このオペコードはOP_DROPオペコードであるが、他のスクリプト言語でも同様の機能が達成されうることが理解されるであろう。Tx1の何らかのインスタンスがネットワーク106に公開される前にDを削除する(そして代わりに、ひとたびボブと価格が合意されてからそれをTxpに含める)ことが意図であるが、OP_DROPオペコード(等)は、もしそれが実際に公開されたならば、データ・ペイロードDの存在は、第1のトランザクションを無効にしないことを意味する。
トランザクションの入力は、アリスまたはボブの暗号学的署名の一部として署名される必要はないので、これは、データD(およびもし存在するならオペコード)が、第1のトランザクションを無効にすることなく、第1のトランザクションをネットワーク106に公開する前に除去できることを意味する。
アリスはTx1のインスタンスをボブに送信する。Tx1は、その入力のロック解除スクリプトにおいて:<data>OP_DROPを含む。Tx1の出力は、入力値よりもわずかに、たとえば約500単位だけ大きい量のデジタル資産を指定するだけである。だが<data>は大きい。これら2つの事実の組み合わせは、Tx1自体は(たとえアリスの入力がこの段階で含められてそれを有効にしたとしても)(まだ)誰にとってもマイニングする価値がないことを意味する。しかしながら、トランザクション入力のロック解除スクリプトは署名されておらず、よって可鍛である。これは<data>OP_DROPが署名されておらず、トランザクションを無効にせずに削除できることを意味する。これは、データをパッケージ化し、ボブに送信する便利な方法を提供する。
Tx1の出力は、以下のいずれかの場合に出力が使用されることができるようにするロック・スクリプトを含んでいる。i)Txpの入力におけるロック解除スクリプトがボブの署名とデータ(ハッシュ・チャレンジによってテストされる――Tx1のロック・スクリプトはデータおよびスクリプトのハッシュを含み、それは、Txpのロック解除スクリプトにおいて提供される生のバージョンをハッシュする;それらの値が一致するかどうかをチェックするためである)を含む;またはii)Txpの入力におけるロック解除スクリプトはアリスの署名を含んでおり、タイムアウト限界が満了している。
Txpが有効であるためには、Tx1(または、Tx1のその後のインスタンス)が有効であり、ブロックチェーン上で受け入れられる必要がある。データがTx1において送信された場合、ボブは<data>OP_DROPを除去する。次いで、ボブは、Tx1またはTx1のその後のインスタンスを、マイニングされるよう、ネットワーク106に送信する。このトランザクションの、より小さなサイズのため、今や他のマイナーにとってマイニングする価値があることを意味する。あるいはまた、ボブは自分でそれをマイニングすることができる。
例示的実装として、Tx
1の入力に含まれるスクリプトは次のようになりうる:
このトランザクションに関する若干のコメント:第一に、scriptSig――これは、アリスの未使用出力のためのロック解除スクリプトである。3つの追加スクリプト要素が追加されている:OP_PUSHDATA、DATA、OP_DROP。アリスの署名は、scriptSigを除いたトランザクション全体に署名されることに注意されたい。したがって、scriptSigにおいて余分な要素を追加しても、アリスのデジタル署名は無効にならない。今の場合、それはOP_DROPがスタックをもとの状態に戻すので、トランザクションを無効にしない。この部分にデータを含めると、ボブは該データを受け取り、トランザクションを公開する前に該データを枝刈りすることができる。ボブは、その代わり、該データを自分のロック解除スクリプトにおいて公開する。
第二に、scriptPubKey――これは、ボブの支払いをロックするロック・スクリプトである。これを平易なことばに翻訳すると、ボブは支払いを請求するためにデータと自分のデジタル署名とを提供する必要がある。そうでなければ、1000ブロック後に、アリスは自分の署名で支払いを取り戻すことができる。よって、支払いを得るために、ボブは、ロック解除スクリプトにアリスのデータを含め、よって、データをブロックチェーン150上に置くことを強制される。ネットワーク106にトランザクションをブロードキャストする代わりに、アリスはサイドチャネル301を通じてトランザクションをボブに送信する。トランザクションを受信すると、ボブはトランザクションをパースしてデータを取得し、そのハッシュ値を検証する。ハッシュ値がscriptPubKeyにおいて与えられたハッシュ値と等しければ、ボブは支払いを請求できると確信する。よって、ボブは、アリスのトランザクション内のscriptSigから「<data>OP_DROP」を削除し、次いで、修正されたトランザクションをネットワークにブロードキャストする(または交渉を続けるためにサイドチャネル301を通じてアリスに送り返す)。ボブは、支払いを請求するために、下記に示される別のトランザクションを構築し、それを、自分がマイニングする次のブロック151に含める。
例として、Tx
pのロック解除スクリプトは次のようになりうる:
ひとたびアリスが、ボブのトランザクションがブロックチェーン150上で確証されるのを見たら、アリスは自分のデータが実際にトランザクションに、よってブロックチェーン150に含まれていることをチェックすることができる。
図9に示される第1のトランザクションTx1のインスタンスは、サイドチャネルを通じてアリスからボブに送信される第1のトランザクションのインスタンスのいずれかを表すことができる。鍛成された(malleated)インスタンスTx1-malは、第1のトランザクションのインスタンスのうちのいずれかの鍛成されたバージョンを表すことができる。事前交渉は、図9において、データDを含む第1のトランザクションのインスタンスがアリスからボブに送信される前、後、および/または、それを含んで生起できる。
任意的に、単純なトランザクション手数料制約条件を使用して、アリスのトランザクションから<data>の枝刈りを強制することが可能である。これは、ボブがネットワークに送信する前にデータを削除しない場合に、アリスにとって、データが自分のトランザクションにおいて誤ってアップロードされるリスクが最小になることを意味する。ネットワーク上でトランザクションを中継するためのバイト当たりの、デジタル資産単位での最低手数料がFminであるとする。アリスのトランザクションのバイトサイズは、STx=Sdata+Sotherであり、Sdataはデータ・パケット<data>のバイトサイズである。
アリスのトランザクションのための総手数料は、アリスのトランザクションの入力と出力の値の差V
in-V
outをその合計サイズS
Txで割ったものとして計算される。すると、アリスのトランザクションが成功裏にブロードキャストされ、有効確認されるための条件は、次のようになる:
したがって、アリスは、自分の入力と出力の値の差が関係:
を満たすことを確実にすることによって、ボブに、トランザクションをブロードキャストする前にパケット<data>を削除することを強制できる。上の式は、ボブがアリスの初期のトランザクションからデータ・パケット全体を削除した場合にのみ、アリスの手数料がネットワーク最小値をカバーすることを意味する。
結論
上記の実施形態は、単に例として記載されたものであることが理解されるであろう。
たとえば、開示された方式の範囲は、ボブがマイナーであり、アリスが、文書または映画クリップのような大きなデータ項目をボブにチェーンにアップロードしてもらうために交渉しているという、詳細な説明に記載されたシナリオに限定されない。より一般的には、テンプレートまたは提案されるトランザクションをサイドチャネル301を通じて交換する開示された機構は、アリスがボブからの任意のサービス、たとえば、ITサポート、情報サービスの提供、または物理的財の提供を交渉するための相互運用可能な機構を提供するために使用できる。
本明細書に開示されるある側面によれば、第1の当事者から第2の当事者へある量のデジタル資産を移転する少なくとも第1のトランザクションをブロックチェーンにおいて記録するためのコンピュータに実装される方法が提供される。ブロックチェーンのコピーは、ノードのネットワークの少なくとも一部の間で維持される。本方法は、第1の当事者のコンピュータ設備において:前記ネットワークとは別個のサイドチャネルを確立するステップであって、前記サイドチャネルは、前記第1の当事者のコンピュータ設備上の第1のアプリケーションと前記第2の当事者のコンピュータ設備上の第2のアプリケーションとの間に確立される、ステップと;サイドチャネルを通じて交渉手順を実行するステップとを含む。この手順は:a)第1のトランザクションの提案されるインスタンスを定式化し、提案されたインスタンスを前記サイドチャネルを通じて第2の当事者に送信するステップであって、前記提案されるインスタンスは、トランザクションを有効確認するために前記ネットワークのノードによって認識されるトランザクション・プロトコルに従って定式化され、少なくとも前記デジタル資産の前記量を含む前記トランザクションのそれぞれの一つまたは複数のパラメータの一つまたは複数の値の集合を指定する、ステップと、b)前記第1のトランザクションの提案されたインスタンスを前記第2の当事者が受け入れないときに、前記サイドチャネルを通じて前記第1のトランザクションの反対提案されたインスタンスを受信するステップであって、前記反対提案されたインスタンスも前記トランザクション・プロトコルに従って定式化されるが、前記一つまたは複数のトランザクション・パラメータの一つまたは複数の値の修正された集合を指定する、ステップと、c)前記第1の当事者が、b)において受信された前記反対提案されたインスタンスを受け入れるかどうかを選択するステップとを含む。
値の前記修正された集合は、最初の集合と比較して、前記値の一つ、いくつか、または全部を修正していてもよい。値が修正されるパラメータは、前記デジタル資産の前記量、および/またはロック時間のような一つまたは複数の他のパラメータを含んでいてもよい。
諸実施形態において、c)は:b)において受信された前記第1のトランザクションの前記反対提案されたインスタンスから一つまたは複数の値の修正された集合を読み、前記反対提案されたインスタンスを受け入れるかどうかについての前記選択を、それから読まれた値の前記修正された集合に基づいて実行することを含んでいてもよい。
諸実施形態において、c)は:b)において受信された前記反対提案されたインスタンスを受け入れないことを選択するときに、前記第1のトランザクションのさらなる反対提案されるインスタンスを定式化し、前記第2の当事者が受け入れるために前記サイドチャネルを通じて、前記さらなる反対提案されるインスタンスを前記第2の当事者に送るステップを含んでいてもよく、前記さらなる反対提案されたインスタンスも前記トランザクション・プロトコルに従って定式化されるが、前記一つまたは複数のトランザクション・パラメータの一つまたは複数の値のさらなる集合を指定する。
諸実施形態において、c)は:一つまたは複数の値の前記さらなる集合を、b)において受信された前記第1のトランザクションの前記反対提案されたインスタンスから読まれた値の前記修正された集合に依存して決定することを含んでいてもよい。
諸実施形態において、少なくともb)の最初の生起において、前記第2の当事者は、前記さらなる反対提案されたトランザクションを受け入れなくてもよく、代わりに、c)に続いて、手順はb)に戻り、b)から、当事者の一方が前記反対提案されたトランザクションまたはさらなる反対提案されたトランザクションのいずれかを受け入れるまで続く。
諸実施形態において、手順の継続は、b)およびc)の両方の少なくとも1回の反復された生起を含んでいてもよい。
値のさらなる修正された集合は、以前に修正された集合と比較して前記値のうちの一つ、いくつか、または全部を修正していてもよい。ここでもまた、値が修正されるパラメータは、前記デジタル資産の前記量、および/またはロック時間のような一つまたは複数の他のパラメータを含んでいてもよい。
諸実施形態において、前記受け入れは:前記第1のトランザクションの受け入れられたインスタンスが、前記ネットワーク上で伝搬され、それにより前記ブロックチェーンに記録されるために送信されることを含む。
諸実施形態において、第1の当事者は、第1の当事者が第1のトランザクションの受け入れられたインスタンスをネットワークを通じて伝播されるよう送信することにより、第2の当事者からの反対提案の1つを受け入れる。
あるいはまた、第1の当事者からのさらなる反対提案されるインスタンスの1つが、第2の当事者によって受け入れられ、受け入れられたインスタンスは、第2の当事者によって、ネットワークを通じて伝搬されるよう送信される。
注:受け入れおよび送信は、開始当事者が、第1のトランザクションの受け入れられたインスタンスを、他方の当事者がネットワークに転送するよう、他方の当事者に送り返すこと、または、受け入れられたインスタンスを、第三者がネットワークに転送するよう、第三者に送ること、またはさらには、第1のトランザクションを他方の当事者に送り返して他方の当事者に第三者に転送してもらうことで、第三者にさらにネットワークに転送してもらうこと、を含みうる。同様に、他方の当事者による受け入れおよび送信は、他方の当事者が、第1のトランザクションの受け入れられたインスタンスを、開始当事者がネットワークに転送するよう、開始当事者に送り返すこと、または、受け入れインスタンスを、第三者がネットワークに転送するよう、第三者に送ること、またはさらには、第1のトランザクションを開始当事者に送り返して開始当事者に第三者に転送してもらうことで、第三者にさらにネットワークに転送してもらうこと、を含みうる。ここで、「伝播されるよう送信する」とは、必ずしも、このステップを実行する当事者が、トランザクションを自分でネットワークに直接送信することを要求するものではない(ただし、それはもちろん1つの選択肢である)。
諸実施形態において、a)における第1のトランザクションの提案されたインスタンスは、完全な部分と不完全な部分を有するテンプレート・トランザクションの形をとり、よって、まだ、ノード・プロトコルに従って有効ではなくてもよい。この場合、提案されたトランザクションは、少なくとも前記完全な部分がトランザクション・プロトコルに従って定式化されているという点で、トランザクション・プロトコルに従って定式化されていると言われる。受け入れられるインスタンスは、第1の当事者および/または第2の当事者によって完成される不完全な部分を有していてもよい。
諸実施形態において、第1のトランザクションの各インスタンスは、前記量を指定し、ロック解除スクリプトを含む少なくとも第1の出力を含むことができ、前記ロック解除スクリプトは、前記第1の出力をロック解除し、それにより前記デジタル資産の前記量を償還するために、第2のトランザクションの入力におけるロック解除スクリプトによって満たされるべき少なくとも1つの条件を指定する。
諸実施形態において、前記完全な部分は、合計でゼロ個以上の入力と、少なくとも前記第1の出力を含む合計で一つまたは複数の出力とを含んでいてもよく、前記テンプレート・トランザクションは、少なくとも、前記一つまたは複数の出力が前記ゼロ個以上の入力の合計入力値よりも大きい前記デジタル資産の合計出力値を指定するという点で、無効であってもよい。この場合、不完全な部分の完成は、合計入力値を合計出力値以上にするよう少なくとも1つの入力が追加されることを含む。
諸実施形態において、前記完全な部分は、ゼロ個以上の入力と、少なくとも前記第1の出力を含む一つまたは複数の出力とを含んでいてもよく、前記テンプレート・トランザクションは、少なくとも、前記第1および/または第2の当事者の暗号学的署名を欠くという点で無効である。この場合、不完全な部分の完成は、一つまたは複数の既存の入力に前記第1および/または第2の当事者の署名が追加されることを含む。
前記テンプレート・トランザクションは、前記第1および/または第2の当事者の署名が欠落している一つまたは複数の既存の不完全な入力を含みうる、または前記テンプレート・トランザクションは、一つまたは複数の欠落した入力を含みうる。前記署名(単数または複数)の追加は、前記第1および/または第2の当事者の署名を含む少なくとも1つの新しい入力が追加されること、または前記第1および/または第2の当事者の署名が一つまたは複数の既存の入力に追加されることを含んでいてもよい。前記第1および第2の当事者の両方の署名が必要とされる場合、これらは、同じ入力または異なるそれぞれの第1および第2の入力に含まれうる。
諸実施形態において、a)における前記第1のトランザクションの提案されるインスタンスは、入力を含まず、前記第1の出力を含んでいてもよく;少なくともb)の最後の生起における、前記第2の当事者からの反対提案されたインスタンスは、前記第2の当事者の署名を含んでいてもよく;受け入れられたインスタンスは、前記第1の当事者によって追加された入力を含んでいてもよく、該入力は、合計入力値を合計出力値以上にし、前記第1の当事者の署名を含む。
たとえば、前記第2の当事者の署名は、前記第一のトランザクションの反対提案されたインスタンスに前記第2の当事者によって追加された入力に含められてもよい。
諸実施形態において、第1の当事者は、a)を実行することによって手順を開始してもよい。あるいはまた、諸実施形態において、手順は:第1の当事者のコンピュータ設備において、第2の当事者からの広告トランザクションを取得することによって開始されてもよく、前記広告トランザクションは、前記一つまたは複数のパラメータについての一つまたは複数の値の広告された集合を指定する、使用不能な出力を含み、前記第1の当事者によって提案された前記一つまたは複数のトランザクション・パラメータの一つまたは複数の値の前記第1の集合は、前記広告された集合に対して修正されている。
前記広告トランザクションは、たとえば、サイドチャネルを介して受信されるか、第一者によって公開データソースから取り出されるか、または第三者を介して受信される。
諸実施形態において、前記広告トランザクションは、さらに、前記第2の当事者の前記暗号学的署名を含む入力を含み、それにより、前記第1の当事者に、前記第1のトランザクションのインスタンスの代わりに、前記第1の当事者の署名を含む入力を追加することによって前記第一のトランザクションを受け入れるオプションを提供する。
諸実施形態において、前記第2の当事者は、マイナーであってもよく、前記デジタル資産の前記量は、データ・ペイロードを含む第2のトランザクションのバージョンが前記ブロックチェーンのブロックに含まれるようにするために作業証明動作を実行する前記第2の当事者のための支払いを提供することができる。前記ロック・スクリプトは、少なくとも、前記支払いを償還するために、前記第2のトランザクションの入力におけるロック解除スクリプトが前記データ・ペイロードを含むことを要求することができる。
諸実施形態において、前記データ・ペイロードを含むという要件は、前記ロック・スクリプトに含まれるハッシュ・チャレンジによって施行されてもよく、該ハッシュ・チャレンジは、前記データ・ペイロードのハッシュと、前記ロック解除スクリプトからの前記データ・ペイロードのハッシュが前記ロック・スクリプトに含まれるハッシュと一致することをチェックするためのハッシュ関数とを含む。
諸実施形態において、前記データ・ペイロードは、たとえば、テキストを含む文書、および/またはオーディオおよび/またはビデオを含むメディアコンテンツを含むことができる。
諸実施形態において、前記データ・ペイロードは、署名されることが要求されない前記第1のトランザクションの前記インスタンスのうちの1つのインスタンスの一部において、前記第1の当事者から伝達され、それにより、前記データ・ペイロードが、前記ネットワーク上で伝搬されるよう送られる前に、前記第1のトランザクションから除去されることを可能にする。
たとえば、前記データ・ペイロードは、前記第1の当事者から前記第2の当事者に送られる前記第1のトランザクションの前記インスタンスのうちの一つのインスタンスの入力において伝達されてもよい。それは、スクリプトに含められてもよい。該スクリプトは、該スクリプトを実行する任意のノード104が前記データを無視するようにするオペコード、たとえばOP_DROPを伴う。
他の実施形態では、前記第2の当事者はマイナーである必要はなく、前記デジタル資産の前記量は、前記第1の当事者のために、物品の提供、住宅改修工事、コンサルタント・サービスなどの何らかの他のサービスを実行する前記第2の当事者のための支払いを提供するために使用されてもよい。
諸実施形態において、前記第1のトランザクションの各インスタンスにおけるトランザクション・パラメータの前記集合は、さらに、ロック時間を含んでいてもよい。ロック時間後に、前記第1の当事者は、前記第2の当事者によってまだ償還されていなければ、デジタル資産の前記量を取り戻すことができる。
ロック時間は、たとえば、時間の単位(人間の時間、たとえば、ms、秒、分、時間、週、月または年など)で、または、マイニングされたトランザクションまたはブロックの数を用いて指定されうる。ロック時間は、絶対的な時点として、または相対的なロック時間、すなわち、定義された時点から、たとえば前記第1のトランザクションがマイニングされた時点からの経過時間の長さとして指定されうる。
諸実施形態において、ロック時間の値は、前記第1のトランザクションの提案されるインスタンス、反対提案されるインスタンス、およびさらなる反対提案されるインスタンスのうちの2つ以上の間で修正されてもよい。
諸実施形態において、前記第1のトランザクションの各インスタンスにおける前記ロック・スクリプトは、前記支払いを償還するための複数の代替的な条件を指定してもよく、該条件は、少なくとも:i)前記第2のトランザクションの第1のバージョンのロック解除スクリプトが前記データ・ペイロードを含むことを要求する第1の条件、およびii)前記ロック時間が満了し、前記第2のトランザクションの第2のバージョンのロック解除スクリプトが前記第1の当事者の暗号学的署名を含むことを要求する第2の条件を含む。
諸実施形態において、前記第1の条件は、さらに、前記第2の当事者の暗号学的署名が前記ロック解除スクリプトに含まれることを要求してもよい。
諸実施形態において、前記第1および第2のアプリケーションは、前記トランザクション・プロトコルを使用する前記手順以外に、サイドチャネルを通じてトランザクションを交渉するための共通の交渉プロトコルを共有しなくてもよい。
諸実施形態において、開始当事者の前記第1および第2のクライアント・アプリケーションは、異なる開発者によって作り出されてもよく、または同じ開発者による異なるリリースであってもよい。
諸実施形態において、前記第1のトランザクションの受け入れられるインスタンスを交渉するために、前記トランザクション・プロトコルに従って定式化されたトランザクション以外の他の交渉メッセージは、前記第1の当事者と第2の当事者との間で交換される必要はない。
本開示の別の側面によれば、前記第1の当事者のコンピュータ設備上で実行されるときに本明細書に開示されたいずれかの実施形態による前記第1の当事者の方法を実行するよう構成された、コンピュータ読み取り可能記憶上に具現されたコンピュータ・プログラムが提供される。
本開示の別の側面によれば、一つまたは複数のメモリユニットを備えるメモリと、一つまたは複数の処理ユニットを備える処理装置とを備える、前記第1の当事者のコンピュータ設備が提供される。前記メモリは、前記処理装置上で走るように構成されたコードを記憶し、前記コードは、前記処理装置上で実行されたときに、本明細書に開示されたいずれかの実施形態による前記第1の当事者の方法を実行するように構成される。
本開示の別の側面によれば、ブロックチェーンにおいて、第1の当事者から第2の当事者へある量のデジタル資産を移転する少なくとも第1のトランザクションを記録するためのコンピュータ実装される方法が提供され、前記ブロックチェーンのコピーは、ノードのネットワークの少なくとも一部にわたって維持される。本方法は、前記第2の当事者のコンピュータ設備において:前記ネットワークとは別個のサイドチャネルを確立するステップであって、前記サイドチャネルは、前記第1の当事者のコンピュータ設備上の第1のアプリケーションと前記第2の当事者のコンピュータ設備上の第2のアプリケーションとの間に確立される、ステップと;前記サイドチャネルを通じて交渉手順を実行するステップとを実行することを含む。この手順は:a)前記第1のトランザクションの提案されたインスタンスを、サイドチャネルを通じて前記第1の当事者から受け取るステップであって、前記提案されたインスタンスは、トランザクションを有効確認するために前記ネットワークのノードによって認識されるトランザクション・プロトコルに従って定式化され、少なくとも前記デジタル資産の前記量を含む前記トランザクションのそれぞれの一つまたは複数のパラメータの一つまたは複数の値の集合を指定する、ステップと、b)前記第二の当事者が、前記第一のトランザクションの前記提案されたインスタンスを受け入れないことを選択し、代わりに、前記サイドチャネルを通じて、前記第1のトランザクションの反対提案されたインスタンスを送り返すステップであって、前記反対提案されたインスタンスも前記トランザクション・プロトコルに従って定式化されるが、前記一つまたは複数のトランザクション・パラメータの一つまたは複数の値の修正された集合を指定する、ステップとを含む。
諸実施形態において、本方法は、本明細書に開示された任意の実施形態に基づく前記第2の当事者のステップをさらに含んでいてもよい。
本開示の別の側面によれば、前記第2の当事者のコンピュータ設備上で実行されるときに本明細書に開示されたいずれかの実施形態による前記第2の当事者の方法を実行するよう構成された、コンピュータ読み取り可能記憶上に具現されたコンピュータ・プログラムが提供される。
本開示の別の側面によれば、一つまたは複数のメモリユニットを備えるメモリと、一つまたは複数の処理ユニットを備える処理装置とを備える、前記第2の当事者のコンピュータ設備が提供される。前記メモリは、前記処理装置上で走るように構成されたコードを記憶し、前記コードは、前記処理装置上で実行されたときに、本明細書に開示されたいずれかの実施形態による前記第2の当事者の方法を実行するように構成される。
開示された技法の他の変形または使用事例は、本明細書の開示を与えられれば、当業者にとって明白になりうる。本開示の範囲は、記載された実施形態によって限定されるものではなく、添付の特許請求の範囲によってのみ限定される。