<例示的なシステムの概要>
図1は、ブロックチェーン150を一般的に実装するための例示的なシステム100を示す。システム100は、典型的にはインターネットのような広域インターネットワークであるパケット交換ネットワーク101を含む。パケット交換ネットワーク101は、パケット交換ネットワーク101内にピアツーピア(P2P)オーバーレイネットワーク106を形成するように配置された複数のノード104を含む。各ノード104は、異なるピアに属する異なるノード104を有するピアのコンピュータ装置を含む。各ノード104は、1つ以上のプロセッサ、たとえば、1つ以上の中央処理装置(CPU)、アクセラレータプロセッサ、特定用途向けプロセッサ、および/またはフィールドプログラマブルゲートアレイ(FPGA)を含む処理装置を含む。各ノードはまた、メモリ、すなわち、非一時的コンピュータ読み取り可能媒体または媒体の形態のコンピュータ読み取り可能記憶装置を備える。メモリは、1つ以上のメモリ媒体、たとえば、ハードディスクなどの磁気媒体、固体ドライブ(solid-state drive (SSD))、フラッシュメモリまたはEEPROMなどの電子媒体、および/または光ディスクドライブなどの光学的媒体を使用する1つ以上のメモリユニットを含んでいてもよい。
ブロックチェーン150は、データ151のブロックのチェーンを含み、ブロックチェーン150のそれぞれのコピーは、P2Pネットワーク160内の複数のノードのそれぞれに維持される。チェーン内の各ブロック151は、1つ以上のトランザクション152を含み、この文脈ではトランザクションは、一種のデータ構造を参照する。データ構造の性質は、トランザクションモデルまたはスキームの一部として使用されるトランザクションプロトコルのタイプに依存する。所与のブロックチェーンは、典型的には、全体を通して、1つの特定のトランザクションプロトコルを使用する。1つの一般的なタイプのトランザクションプロトコルでは、各トランザクション152のデータ構造は、少なくとも1つのインプットおよび少なくとも1つのアウトプットを含む。各アウトプットは、暗号的にロックされているユーザー103に属するデジタルアセットの量を表す量を指定する(ロックを解除し、それによって償還または使用するために、そのユーザーの署名を必要とする)。各インプットは、先行するトランザクション152のアウトプットを指し示し、それによって、トランザクションをリンクする。
ノード104の少なくとも一部は、トランザクション152を転送し、それによって伝播する転送ノード104Fの役割を引き受ける。ノード104の少なくともいくつかは、ブロック151をマイニングするマイナー104Mの役割を担う。ノード104の少なくともいくつかは、記憶ノード104S(「フルコピー(full-copy)」ノードとも呼ばれる)の役割を引き受け、各ノードは、それぞれのメモリに同じブロックチェーン150のそれぞれのコピーを格納する。各マイナーノード104Mはまた、ブロック151へのマイニングを待つトランザクション152のプール154を維持する。所与のノード104は、転送ノード104、マイナー104M、記憶ノード104S、またはこれらの2つもしくはすべての任意の組み合わせであり得る。
所与の現在のトランザクション152jにおいて、インプット(またはそのそれぞれ)は、トランザクションのシーケンスの中の先行トランザクション152iのアウトプットを参照するポインタを含み、このアウトプットが現在のトランザクション152jにおいて償還されるかまたは「使用される(spent)」ことを指定する。一般に、先行するトランザクションは、プール154または任意のブロック151内の任意のトランザクションであり得る。先行するトランザクション152iは、必ずしも、現在のトランザクション152jが生成されたまたはネットワーク106へ送信されたときに存在する必要はないが、先行するトランザクション152iは、現在のトランザクションが有効であるために存在し検証されている必要がある。従って、本願明細書で「先行する」は、ポインタによりリンクされた論理的シーケンスの中で先行するものを表し、必ずしも時系列の中での生成または送信の時間を表さない。従って、それは、必ずしも、トランザクション152i,152jが順不同で生成されまたは送信されることを排除しない(以下の親のない(orphan)トランザクションに関する議論を参照する)。先行するトランザクション152iは、等しく、祖先(antecedent)または先行(predecessor)トランザクションと呼ばれ得る。
現在のトランザクション152jのインプットは、先行するトランザクション152iのアウトプットがロックされているユーザー103aの署名も含む。次に、現在のトランザクション152jのアウトプットは、新しいユーザー103bに暗号的にロックすることができる。従って、現在のトランザクション152jは、先行するトランザクション152iのインプットに定義された量を、現在のトランザクション152jのアウトプットに定義された新しいユーザー103bに移転することができる。ある場合には、トランザクション152は、複数のユーザー間でインプット量を分割するために複数のアウトプットを有してもよい(そのうちの1つは、お釣りを与えるために、元のユーザー103aであってもよい)。場合によっては、トランザクションは、複数のインプットを有し、1つ以上の先行トランザクションの複数のアウトプットから金額を集め、現在のトランザクションの1つ以上のアウトプットに再配分することもできる。
上記は「アウトプットベースの」トランザクションプロトコルと呼ばれることがあり、時には「未使用のトランザクションアウトプット(unspent transaction output (UTXO))タイプのプロトコル」(アウトプットはUTXOと呼ばれる)とも呼ばれる。ユーザーの合計残高は、ブロックチェーンに格納されている1つの数値で定義されるのではなく、代わりに、ユーザーは、ブロックチェーン151内の多くの異なるトランザクション152に分散されている該ユーザーの全てのUTXOの値を照合するために、特別な「ウォレット」アプリケーション105を必要とする。
アカウントベースのトランザクションモデルの一部として、別のタイプのトランザクションプロトコルを「アカウントベース」のプロトコルと呼ぶことがある。アカウントベースの場合、各トランザクションは、過去の一連のトランザクションにおいて、先行するトランザクションのUTXOに戻って参照することによって移転される量を定義するのではなく、絶対的な口座(アカウント)残高を参照することによって移転される。すべてのアカウントの現在の状態は、ブロックチェーンと分離してマイナーによって保管され、絶えず更新される。このようなシステムでは、トランザクションは、アカウントの連続したトランザクション記録(いわゆる「ポジション」)を用いて発注される。この値は、送信者により彼らの暗号署名の一部として署名され、トランザクション参照計算の一部としてハッシュされる。さらに、任意的なデータフィールドもトランザクションに署名することができる。このデータフィールドは、たとえば、前のトランザクションIDがデータフィールドに含まれている場合、前のトランザクションを遡ってポイントしてよい。
どちらのタイプのトランザクションプロトコルでも、ユーザー103が新しいトランザクション152jを実行したい場合、ユーザーは、自分のコンピュータ端末102からP2Pネットワーク106のノードの1つ104(現在は、通常、サーバーまたはデータセンターであるが、原則として、他のユーザー端末でもよい)に新しいトランザクションを送信する。このノード104は、各ノード104に適用されるノードプロトコルに従って、トランザクションが有効であるかどうかをチェックする。ノードプロトコルの詳細は、問題のブロックチェーン150で使用されているトランザクションプロトコルのタイプに対応し、全体のトランザクションモデルを一緒に形成する。ノードプロトコルは、典型的には、ノード104に、新しいトランザクション152j内の暗号署名が、トランザクション152の順序付けされたシーケンスの中の前のトランザクション152iに依存する、期待される署名と一致することをチェックすることを要求する。アウトプットベースの場合、これは、新しいトランザクション152jのインプットに含まれるユーザーの暗号署名が、新しいトランザクションが使用する先行トランザクション152iのアウトプットに定義された条件と一致することをチェックすることを含み得、この条件は、典型的には、新しいトランザクション152jのインプットにおける暗号署名が、新しいトランザクションのインプットがポイントする先行トランザクション152iのアウトプットをアンロックすることを少なくともチェックすることを含む。いくつかのトランザクションプロトコルでは、条件は、少なくとも部分的に、インプットおよび/またはアウトプットに含まれるカスタムスクリプトによって定義されてもよい。あるいは、単にノードプロトコルだけで固定することもできるし、あるいは、これらの組み合わせによることもある。いずれにせよ、新しいトランザクション152jが有効であれば、現在のノードは、P2Pネットワーク106内のノード104の1つ以上の他のノードにそれを転送する。これらのノード104の少なくともいくつかは、同じノードプロトコルに従って同じテストを適用し、新しいトランザクション152jを1つ以上のさらなるノード104に転送するなど、転送ノード104Fとしても機能する。このようにして、新しいトランザクションは、ノード104のネットワーク全体に伝播される。
アウトプットベースのモデルでは、与えられたアウトプット(たとえば、UTXO)が使用されるかどうかの定義は、ノードプロトコルに従って別の今後の(onward)トランザクション152jのインプットによって既に有効に償還されているかどうかである。トランザクションが有効であるための別の条件は、それが使用または償還を試みる先行するトランザクション152iのアウトプットが、別の有効なトランザクションによって未だ使用/償還されていないことである。ここでも、有効でない場合、トランザクション152jは、ブロックチェーンに伝播または記録されない。これは、支払人が同じトランザクションのアウトプットを複数回使用しようとする二重支払いを防ぐ。一方、アカウントベースのモデルは、口座残高を維持することによって、二重支払いを防ぐ。この場合も、トランザクションの順序が定義されているため、口座残高は、一度に単一の定義された状態を有する。
検証に加えて、ノード104Mのうちの少なくともいくつかは、「proof of work」に支えられているマイニングと呼ばれるプロセスで、トランザクションのブロックを最初に作成するために競合する。マイニングノード104Mでは、まだブロックに現れていない有効なトランザクションのプールに新しいトランザクションが追加される。そして、マイナーは、暗号パズルを解決しようと試みることにより、トランザクションのプール154からトランザクション152の新しい有効なブロック151を組み立てるために競争する。これは、典型的には、ノンスがトランザクションのプール154と連結され、ハッシュされるときに、ハッシュのアウトプットが所定の条件を満たすような「ノンス」値を探すことを含む。たとえば、所定の条件は、ハッシュのアウトプットが、所定の数の先頭ゼロを有することであってもよい。ハッシュ関数の特性は、インプットに関して予測不可能なアウトプットを持つことである。従って、この探索は、ブルートフォースによってのみ実行することができ、従って、パズルを解決しようとしている各ノード104Mにおいて、相当量の処理リソースを使用する。
パズルを解く最初のマイナーノード104Mは、これをネットワーク106に通知し、その解を証明として提供する。この解は、ネットワーク内の他のノード104によって簡単にチェックすることができる(ハッシュが対する解が与えられれば、ハッシュのアウトプットが条件を満たすことを確認することは簡単である)。勝者がパズルを解いたトランザクションのプール154は、各ノードで勝者が発表した解をチェックしたことに基づいて、記憶ノード104Sとして機能するノード104のうちの少なくともいくつかによってブロックチェーン150の新しいブロック151として記録される。また、新しいブロック151nにはブロックポインタ155が割り当てられ、チェーン内で前に作成されたブロック151n-1を指すようになっている。proof-of-workは、新しいブロックを151作成するのに多大な労力を要し、二重の支出を含むブロックは他のノード104によって拒否される可能性が高く、従ってマイニングノード104Mが二重支払いを彼らのブロックに含まないようにする動機が働くので、二重の支出のリスクを減じるのを助ける。一旦生成されると、ブロック151は、同じプロトコルに従ってP2Pネットワーク106内の記憶ノード104Sのそれぞれで認識され、維持されるので、修正することができない。ブロックポインタ155はまた、ブロック151に逐次的な順序を課す。トランザクション152は、P2Pネットワーク106内の各記憶ノード104Sで順序付けられたブロックに記録されるので、これはトランザクションの不変の公開台帳を提供する。
パズルを解決するために常に競争している異なるマイナー104Mは、いつ解を探し始めたかによって、いつでもマイニングされていないトランザクションプール154の異なるスナップショットに基づいてパズルを解いているかもしれないことに留意する。パズルを解く者は誰でも、最初に次の新しいブロック151nに含まれるトランザクション152を定義し、現在のマイニングされていないトランザクションのプール154が更新される。そして、マイナーは、新たに定義された未決のプールからブロックを作り出すために、競争を続ける。また、生じ得る「分岐(フォーク、fork)」を解決するためのプロトコルも存在する。これは、2人のマイナー104Mが互いに非常に短い時間内にパズルを解決し、ブロックチェーンの矛盾したビューが伝播する場合である。要するに、分岐の枝が伸びるときは常に、最長のものが最終的なブロックチェーン150になる。
ほとんどのブロックチェーンでは、勝ったマイナー104Mは、何も無いものから新しい量のデジタルアセットを生み出す特別な種類の新しいトランザクションによって自動的に報酬を受けている(通常のトランザクションでは、あるユーザーから別のユーザーにデジタルアセットの量を移転する)。したがって、勝ったノードは、ある量のデジタルアセットを「マイニング」したと言える。この特殊なタイプのトランザクションは「生成(generation)」トランザクションと呼ばれることもある。それは自動的に新しいブロック151nの一部を形成する。この報酬は、マイナー104Mがproof-of-work競争に参加する動機を与える。通常の(非生成)トランザクション152は、そのアウトプットの1つに追加のトランザクション手数料を指定し、そのトランザクションが含まれたブロック151nを生成した勝ったマイナー104Mにさらに報酬を与えることが多い。
マイニングに含まれる計算リソースのために、典型的には、少なくともマイナーノード104Mのそれぞれは、1つ以上の物理的サーバーユニットを含むサーバー、またはデータセンター全体の形態をとる。各転送ノード104Mおよび/または記憶ノード104Sは、サーバーまたはデータセンターの形態をとることもできる。しかしながら、原則として、任意の所与のノード104は、ユーザー端末または互いにネットワーク接続されたユーザー端末のグループを含むことができる。
各ノード104のメモリは、それぞれの1つ以上の役割を実行し、ノードプロトコルに従ってトランザクション152を処理するために、ノード104の処理装置上で動作するように構成されたソフトウェアを記憶する。ノード104に属するいずれの動作も、それぞれのコンピュータ装置の処理装置上で実行されるソフトウェアによって実行され得ることが理解されよう。また、本願明細書で使用される「ブロックチェーン」という用語は、一般的な技術の種類を指す一般的な用語であり、任意の特定の専有のブロックチェーン、プロトコルまたはサービスに限定されない。
また、ネットワーク101には、消費者ユーザーの役割を果たす複数のパーティ103のそれぞれのコンピュータ装置102も接続されている。これらは、トランザクションにおける支払人および被支払人の役割を果たすが、他のパーティの代わりにトランザクションをマイニングしまたは伝播することに必ずしも参加しない。それらは必ずしもマイニングプロトコルを実行するわけではありません。2つのパーティ103およびそれぞれの機器102は、説明のために示されており、第1パーティ103aおよびそのそれぞれのコンピュータ機器102a、ならびに第2パーティ103bおよびそのそれぞれのコンピュータ機器102bである。より多くのこのようなパーティ103およびそれらのそれぞれのコンピュータ装置102がシステムに存在し、参加することができるが、便宜上、それらは図示されていないことが理解されよう。各パーティ103は、個人または組織であってもよい。純粋に例示として、第1パーティ103aは、本願明細書においてAliceと称され、第2パーティ103bは、Bobと称されるが、これは限定的なものではなく、本願明細書においてAliceまたはBobという言及は、それぞれ「第1パーティ」および「第2パーティ」と置き換えることができることは理解されるであろう。
各パーティ103のコンピュータ機器102は、1つ以上のプロセッサ、たとえば、1つ以上のCPU、GPU、他のアクセラレータプロセッサ、特定用途向けプロセッサ、および/またはFPGAを備えるそれぞれの処理装置を備える。各パーティ103のコンピュータ機器102は、さらに、メモリ、すなわち、非一時的コンピュータ読み取り可能媒体または媒体の形態のコンピュータ読み取り可能記憶装置を備える。このメモリは、たとえば、ハードディスクなどの磁気媒体、SSD、フラッシュメモリまたはEEPROMなどの電子媒体、および/または光ディスクドライブなどの光学的媒体を使用する1つ以上のメモリユニットを含んでいてもよい。各パーティ103のコンピュータ機器102上のメモリは、処理装置上で動作するように配置された少なくとも1つのクライアントアプリケーション105のそれぞれのインスタンスを含むソフトウェアを記憶する。本願明細書で与えられたパーティ103に帰属されたいずれのアクションも、それぞれのコンピュータ装置102の処理装置上で実行されるソフトウェアを使用して実行され得ることが理解されよう。各パーティ103のコンピュータ機器102は、少なくとも1つのユーザー端末、たとえばデスクトップまたはラップトップコンピュータ、タブレット、スマートフォン、またはスマートウォッチのようなウェアラブルデバイスを備えている。所与のパーティ103のコンピュータ装置102は、ユーザー端末を介してアクセスされるクラウドコンピューティングリソースのような、1つ以上の他のネットワーク接続されたリソースを含んでいてもよい。
クライアントアプリケーションまたはソフトウェア105は、最初に、1つ以上の適切なコンピュータ読み取り可能な記憶媒体、たとえばサーバーからダウンロードされたもの、またはリムーバブルSSD、フラッシュメモリキー、リムーバブルEEPROM、リムーバブル磁気ディスクドライブ、磁気フロッピーディスクまたはテープ、光ディスク、たとえばCDまたはDVD ROM、またはリムーバブル光学ドライブなどのリムーバブル記憶装置上で、任意の所与のパーティ103のコンピュータ機器102に提供され得る。
クライアントアプリケーション105は、少なくとも「ウォレット」機能を備える。これには主に2つの機能を有する。これらのうちの1つは、それぞれのユーザーパーティ103が、ノード104のネットワーク全体にわたって伝播され、それによってブロックチェーン150に含まれるトランザクション152を作成し、署名し、送信することを可能にすることである。もう1つは、現在所有しているデジタルアセットの金額をそれぞれのパーティに報告することである。アウトプットベースのシステムでは、この第2の機能は、当該パーティに属するブロックチェーン150全体に散在するさまざまなトランザクション152のアウトプットの中で定義される量を照合することを含む。
各コンピュータ機器102上のクライアントアプリケーション105のインスタンスは、P2Pネットワーク106の転送ノード104Fの少なくとも1つに動作可能に結合される。これにより、クライアント105のウォレット機能は、トランザクション152をネットワーク106に送信することができる。クライアント105は、また、記憶ノード104のうちの1つ、一部、または全部にコンタクトして、それぞれのパーティ103が受信者である任意のトランザクションについてブロックチェーン150に問い合わせることができる(または、実施形態では、ブロックチェーン150は、部分的にその公開視認性を通じてトランザクションの信頼を提供する公開的設備であるため、実際には、ブロックチェーン150内の他のパーティのトランザクションを検査する)。各コンピュータ機器102上のウォレット機能は、トランザクションプロトコルに従ってトランザクション152を形成し、送信するように構成される。各ノード104は、ノードプロトコルに従ってトランザクション152を検証するように構成されたソフトウェアを実行し、転送ノード104Fの場合は、ネットワーク106全体にトランザクション152を伝搬させるためにトランザクション152を転送する。トランザクションプロトコルとノードプロトコルは互いに対応し、所与のトランザクションプロトコルは所与のノードプロトコルと共に所与のトランザクションモデルを実装する。同じトランザクションプロトコルが、ブロックチェーン150内のすべてのトランザクション152に使用される(ただし、トランザクションプロトコルは、トランザクションの異なるサブタイプを許可してもよい)。同じノードプロトコルは、ネットワーク106内のすべてのノード104によって使用される(ただし、多くのノードは、そのサブタイプに対して定義されたルールに従って異なるトランザクションのサブタイプを異なるように処理し、また、異なるノードは異なる役割を引き受け、従って、プロトコルの異なる対応する側面を実装することができる)。
上述したように、ブロックチェーン150はブロック151のチェーンを含み、各ブロック151は、上述したように、proof-of-workプロセスによって作成された1つまたは複数のトランザクション152のセットを含む。各ブロック151は、また、ブロック151への逐次的順序を規定するように、チェーン内の先に生成されたブロック151に戻るブロックポインタ155を含む。ブロックチェーン150はまた、proof-of-workプロセスによって新しいブロックに含まれることを待つ有効なトランザクション154のプールを含む。各トランザクション152(生成トランザクション以外)は、トランザクションのシーケンスに順序を定義するために、前のトランザクションへのポインタを含む(注:トランザクション152のシーケンスは、分岐することが許される)。ブロック151のチェーンは、チェーンの最初のブロックであったジェネシスブロック(genesis block (Gb))153にまで戻る。チェーン150の初期に1つ以上のオリジナルトランザクション152は、先行するトランザクションではなくジェネシスブロック153を指し示した。
所与のパーティ103、たとえばAliceがブロックチェーン150に含まれる新たなトランザクション152jを送信したいと望む場合、彼女は関連するトランザクションプロトコルに従って(彼女のクライアントアプリケーション105のウォレット機能を使用して)新たなトランザクションを作成する(formulate)。次に、クライアントアプリケーション105からトランザクション152を、彼女が接続されている1つ以上の転送ノード104Fの1つに送信する。たとえば、これは、Aliceのコンピュータ102に最も近いかまたは最も良好に接続されている転送ノード104Fであってもよい。任意の所与のノード104が新しいトランザクション152jを受信すると、ノードプロトコルおよびそのそれぞれの役割に従って、それを処理する。これは、最初に、新たに受信されたトランザクション152jが「有効」であるための特定の条件を満たしているかどうかをチェックすることを含み、その例については、簡単に詳述する。いくつかのトランザクションプロトコルでは、検証のための条件は、トランザクション152に含まれるスクリプトによってトランザクションごとに構成可能であってよい。或いは、条件は単にノードプロトコルの組み込み機能であってもよく、或いはスクリプトとノードプロトコルの組み合わせによって定義されてもよい。
新たに受信されたトランザクション152jが、有効であると見なされるテストに合格したという条件で(すなわち、「有効である」という条件で)、トランザクション152jを受信した任意の記憶ノード104Sは、そのノード104Sに維持されているブロックチェーン150のコピー内のプール154に、新たに有効とされたトランザクション152を追加する。さらに、トランザクション152jを受信する任意の転送ノード104Fは、検証済みトランザクション152をP2Pネットワーク106内の1つ以上の他のノード104に伝播する。各転送ノード104Fは同じプロトコルを適用するので、トランザクション152jが有効であると仮定すると、これは、P2Pネットワーク106全体に間もなく伝播されることを意味する。
ひとたび1つ以上の記憶ノード104で維持されるブロックチェーン150のコピー内のプール154に入ると、マイナーノード104Mは、新しいトランザクション152を含むプール154の最新バージョンのproof-of-workパズルを解決するために競争を開始する(他のマイナー104Mは、依然として、プール154の古いビューに基づいてパズルを解決しようとしているが、そこに到達した者は誰でも、最初に、次の新しいブロック151が終了し、新しいプール154が開始する場所を定義し、最終的には、誰かが、Aliceのトランザクション152jを含むプール154の一部のパズルを解決する)。一旦、新しいトランザクション152jを含むプール154についてproof-of-workが行われると、それはブロックチェーン150内のブロック151のうちの1つの一部となる。各トランザクション152は、以前のトランザクションへのポインタから構成されるので、トランザクションの順序もまた、不変的に記録される。
<UTXOベースのモデル>
図2は、トランザクションプロトコルの例を示している。これは、UTXOベースのプロトコルの例である。トランザクション152(「Tx」と略す)は、ブロックチェーン150(各ブロック151は1つ以上のトランザクション152を含む)の基本的なデータ構造である。以下は、アウトプットベースまたは「UTXO」ベースのプロトコルを参照して説明される。しかし、これは、全ての可能な実施形態に限定されるものではない。
UTXOベースのモデルでは、各トランザクション(「Tx」)152は、1つ以上のインプット202および1つ以上のアウトプット203を含むデータ構造を含む。各アウトプット203は、未使用トランザクションアウトプット(UTXO)を含んでいてもよく、これは、別の新しいトランザクションのインプット202のソースとして使用することができる(UTXOが未だ償還されていない場合)。UTXOは、デジタルアセット(価値のストア)の量を指定する。それは、情報の中でも特にその元となったトランザクションのトランザクションIDを含む。トランザクションデータ構造はまた、ヘッダー201も含んでよく、ヘッダー201は、インプットフィールド202およびアウトプットフィールド203のサイズの指示子を含んでいてもよいヘッダー201を含んでよい。ヘッダー201は、トランザクションのIDも含んでいてもよい。実施形態において、トランザクションIDは、トランザクションデータのハッシュ(トランザクションID自体を除く)であり、マイナー104Mに提出された未加工トランザクション152のヘッダー201に格納される。
図2の各アウトプットはUTXOとして示されるが、トランザクションは追加または代替として、1つ以上の未使用トランザクションアウトプットを含んでよいことに留意する。
たとえばAlice103aは、問題のデジタルアセットの量をBob103bに移転するトランザクション152jを作成したいと考えているとする。図2において、Aliceの新しいトランザクション152jは「Tx1」とラベル付けされている。これは、Aliceにロックされているデジタルアセットの量を、シーケンス内の先行するトランザクション152iのアウトプット203に取り入れ、その少なくとも一部をBobに移転する。先行するトランザクション152iは、図2において「Tx0」とラベル付けされている。Tx0とTx1は、単なる任意のラベルである。これらは、必ずしも、Tx0がブロックチェーン151の最初のトランザクションであること、または、Tx1がプール154の直ぐ次のトランザクションであることを意味しない。Tx1は、まだAliceへのロックされた未使用アウトプット203を有する任意の先行する(つまり祖先)トランザクションのいずれかを指し示すことができる。
先行するトランザクションTx0は、Aliceがその新しいトランザクションTx1を作成するとき、または少なくとも彼女がそれをネットワーク106に送信するときまでに、既に検証され、ブロックチェーン150に含まれていてもよい。それは、その時点で既にブロック151のうちの1つに含まれていてもよく、あるいは、プール154内でまだ待機していてもよく、その場合、新しいブロック151にすぐに含まれることになる。あるいは、Tx0およびTx1が生成されネットワーク102に送信されることができ、あるいは、ノードプロトコルが「孤児(orphan)」トランザクションのバッファリングを許容する場合にはTx1の後にTx0が送信されることもできる。ここでトランザクションのシーケンスの文脈で使用される「先行する」および「後の」という用語は、トランザクション内で指定されたトランザクションポインタ(どのトランザクションがどの他のトランザクションを指すかなど)によって定義されるシーケンス内のトランザクションの順序を指す。それらは、「先行する」および「相続する」または「祖先」および「子孫」、「親」および「子」、等により、等しく置き換えられ得る。これは、必ずしも、それらが作成され、ネットワーク106に送られ、または任意の所与のノード104に到達する順序を意味しない。それにもかかわらず、先行するトランザクション(祖先トランザクションまたは「親」)を指す後続のトランザクション(子孫トランザクションまたは「子」)は、親トランザクションが検証されない限り、検証されない。親の前にノード104に到着した子は孤児とみなされる。それは、ノードプロトコルおよび/またはマイナーの行動に応じて、親を待つために特定の時間、破棄またはバッファリングされることがある。
先行するトランザクションTx0の1つ以上のアウトプット203のうちの1つは、本願明細書でUTXO0とラベル付けされた特定のUTXOを含む。各UTXOは、UTXOによって表されるデジタルアセットの量を指定する値と、後続のトランザクションが検証されるために、従ってUTXOが正常に償還されるために、後続のトランザクションのインプット202の中のアンロックスクリプトによって満たされなければならない条件を定義するロックスクリプトとを含む。典型的には、ロックスクリプトは、特定のパーティ(それが含まれているトランザクションの受益者)に量をロックする。すなわち、ロックスクリプトは、標準的に以下のようなアンロック条件を定義する:後続のトランザクションのインプット内のアンロックスクリプトは、先行するトランザクションがロックされたパーティの暗号署名を含む。
ロックスクリプト(別名scriptPubKey)は、ノードプロトコルによって認識されるドメイン固有の言語で書かれたコードの一部である。そのような言語の特定の例は、「スクリプト」(Script,capital S)と呼ばれる。ロックスクリプトは、トランザクションアウトプット203を使用するために必要な情報、たとえば、Aliceの署名の必要条件を指定する。トランザクションのアウトプットには、アンロックスクリプトが現れる。アンロックスクリプト(別名:scriptSig)は、ロックスクリプトの基準を満たすために必要な情報を提供するドメイン固有の言語で書かれたコードの一部である。たとえば、Bobの署名を含んでいてもよい。アンロックスクリプトは、トランザクションのインプット202に現れる。
図示の例では、Tx0のアウトプット203のUTXO0は、ロックスクリプト[ChecksigPA]を含み、これは、UTXO0が償還されるために(厳密には、UTXO0を償還しようとする後続のトランザクションが有効であるために)、Aliceの署名SigPAを必要とする。[ChecksigPA]は、Aliceの公開鍵と秘密鍵のペアからの公開鍵PAを含む。Tx1のインプット202は、Tx1を指すポインタ(たとえば、そのトランザクションID、実施形態ではトランザクションTx0全体のハッシュであるTxID0による)を含む。Tx1のインプット202は、Tx0の任意の他の可能なアウトプットの中でそれを識別するために、Tx0内のUTXO0を識別するインデックスを含む。Tx1のインプット202は、さらに、Aliceが鍵ペアからのAliceの秘密鍵をデータの所定の部分(暗号において「メッセージ」と呼ばれることもある)に適用することによって作成された、Aliceの暗号署名を含むアンロックスクリプト<SigPA>を含む。有効な署名を提供するためにAliceが署名する必要があるデータ(または「メッセージ」)は、ロックスクリプトにより、またはノードプロトコルにより、またはこれらの組み合わせによって定義され得る。
新しいトランザクションTx1がノード104に到着すると、ノードはノードプロトコルを適用する。これは、ロックスクリプトとアンロックスクリプトを一緒に実行して、アンロックスクリプトがロックスクリプトで定義されている条件(この条件は1つ以上の基準を含むことができる)を満たしているかどうかをチェックすることを含む。実施形態では、これは、2つのスクリプトの連結を含む。
ここで、「||」は連結を表し、「<...>」はスタックにデータを配置することを意味し、「[...]」はアンロックスクリプトに含まれる機能である(本例では、スタックベースの言語)。同等に、スクリプトは、スクリプトを連結するのではなく共通のスタックにより1つずつ実行されてよい。いずれの方法でも、一緒に実行する場合、スクリプトは、Tx0のアウトプット内のロックスクリプトに含まれるAliceの公開鍵PAを使用して、Tx1のインプット内のロックスクリプトが、データの期待部分に署名するAliceの署名を含むことを認証する。また、データの期待部分(「メッセージ」)も、この認証を実行するためにTx0に含まれる必要がある。実施形態において、署名されたデータは、Tx0の全体を含む(従って、別個の要素は、データの署名された部分がすでに本質的に存在するので、データの署名された部分の指定にクリアに含まれる必要がある)。
公開-秘密暗号法による認証の詳細は、当業者には周知であろう。基本的に、Aliceが彼女の秘密鍵によりメッセージを暗号化することによってメッセージに署名した場合、Aliceの公開鍵とそのメッセージが明らか(暗号化されていないメッセージ)ならば、ノード104のような別のエンティティは、そのメッセージの暗号化されたバージョンがAliceによって署名されていなければならないことを認証することができる。署名は、典型的には、メッセージをハッシュし、ハッシュに署名し、署名としてメッセージの平文バージョンにこれをタグ付けすることによって、公開鍵の所有者が署名を認証することを可能にする。
Tx1内のアンロックスクリプトが、Tx0のロックスクリプトで指定された1つ以上の条件を満たす場合(示される例では、Aliceの署名がTx1内で提供され、認証されている場合)、ノード104は、Tx1が有効であるとみなす。それがマイニングノード104Mである場合、これは、proof-of-workを待つトランザクションのプール154にそれを追加することを意味する。それが転送ノード104Fである場合、それはトランザクションTx1をネットワーク106内の1つ以上の他のノード104に転送し、それによって、それがネットワーク全体に伝搬されることになる。一旦、Tx1が検証され、ブロックチェーン150に含まれると、これは、Tx0からのUTXO0を使用したものとして定義する。Tx1は、未使用トランザクションアウトプット203を使用する場合にのみ有効であることに留意されたい。別のトランザクション152によって既に使用されたアウトプットを使用しようとする場合、Tx1は、たとえ他のすべての条件が満たされていても無効となる。従って、ノード104は、先行するトランザクションTx0において参照されたUTXOが既に使用されているかどうか(既に別の有効なトランザクションへの有効なインプットを形成しているかどうか)もチェックする必要がある。これが、ブロックチェーン150がトランザクション152に定義された順序を課すことが重要である理由の1つである。実際には、所与のノード104は、トランザクション152が使用されたUTXO203をマークする別個のデータベースを維持することができるが、最終的には、UTXOが使用されたかどうかを定義するのは、ブロックチェーン150内の別の有効なトランザクションへの有効なインプットを既に形成しているかどうかである。
UTXOベースのトランザクションモデルでは、所定のUTXOを全体として使用する必要があることに注意する。UTXOで定義されている量のうち、別の分量が使用されている一方で、分量を「残しておく」ことはできない。ただし、UTXOからの量は、次のトランザクションの複数のアウトプットに分割できる。たとえば、Tx0のUTXO0で定義された量は、Tx1の複数のUTXOに分割できる。従って、AliceがBobにUTXO0で定義された量の全てを与えることを望まない場合、彼女は残りの量を使って、Tx1の第2のアウトプットの中で自分自身にお釣りを与えるか、または別のパーティに支払うことができる。
実際には、Aliceは通常、勝ったマイナーのための手数料も含める必要がある。なぜなら、今日では、生成トランザクションの報酬だけでは、マイニングを動機付けるには通常十分ではないからである。Aliceがマイナーのための手数料を含まない場合、Tx0はマイナーのノード104Mによって拒否される可能性が高く、したがって、技術的には有効であるが、それは依然として伝搬されず、ブロックチェーン150に含まれない(マイナーのプロトコルは、マイナーが望まない場合には、マイナー104Mにトランザクション152を受け入れるよう強制しない)。一部のプロトコルでは、マイニング手数料は、独自の別個のアウトプット203を必要としない(すなわち、別個のUTXOを必要としない)。その代わりに、インプット202によって示される総量と所与のトランザクション152のアウトプット203で指定される総量との間の差は、勝ったマイナー104に自動的に与えられる。たとえば、UTXO0へのポインタがTx1への唯一のインプットであり、Tx1は1つのアウトプットUTXO1しか持っていないとする。UTXO0で指定されたデジタルアセットの量がUTXO1で指定された量より多い場合、その差は自動的に勝ったマイナー104Mへ行く。しかし、代替的または追加的に、必ずしも、トランザクション152のUTXO203のうちの独自のものにおいて、マイナー手数料を明示的に指定できることは除外されない。
所与のトランザクション152の全部のアウトプット203の中で指定された総量が全部のそのインプット202により指される総量より大きい場合、これは、殆どのトランザクションモデルにおいて無効の別の基礎であることに留意する。従って、このようなトランザクションは、伝播されず、マイニングされてブロック151にされることもない。
AliceおよびBobのデジタルアセットは、ブロックチェーン150内の任意のトランザクション152の中で彼らにロックされた未使用UTXOで構成されている。従って、典型的には、所与のパーティ103のアセットは、ブロックチェーン150を通して、さまざまなトランザクション152のUTXO全体に分散される。ブロックチェーン150内のどこにも、所与のパーティ103の総残高を定義する1つの数値は記憶されていない。各パーティへのロックされた、別の将来の(onward)トランザクションに未だ使用されていない全てのさまざまなUTXOの値をまとめることは、クライアントアプリケーション105におけるウォレット機能の役割である。これは、記憶ノード104Sのいずれかに記憶されたブロックチェーン150のコピーを、たとえば、各パーティのコンピュータ機器02に最も近いか、または最も良好に接続されている記憶ノード104Sに問い合わせることによって行うことができる。
スクリプトコードは、概略的に表現されることが多い(すなわち、正確な言語ではない)ことに注意する。たとえば、[Checksig PA]を[Checksig PA]=OP_DUPOP_HASH160<H(Pa)>OP_EQUALVERIFYOP_CHECKSIGを意味するように記述し得る。「OP_....」は、スクリプト言語の特定のオペコードを表す。OP_CHECKSIG(「Checksig」とも呼ばれる)は、2つのインプット(署名と公開鍵)を取り込み、楕円曲線デジタル署名アルゴリズム(Elliptic Curve Digital Signature Algorithm (ECDSA))を使用して署名の妥当性を検証するスクリプトオペコードである。ランタイムでは、署名(「sig」')の発生はスクリプトから削除されるが、ハッシュパズルなどの追加要件は、「sig」インプットによって検証されるトランザクションに残る。別の例として、OP_RETURNは、トランザクション内にメタデータを格納することができ、それによってメタデータをブロックチェーン150に不変に記録することができるトランザクションの使用不可能アウトプットを生成するためのスクリプト言語のオペコードである。たとえば、メタデータは、ブロックチェーンに格納することが望ましいドキュメントを含むことができる。
署名PAは、デジタル署名である。実施形態において、これは楕円曲線secp256k1を使用するECDSAに基づく。デジタル署名は、特定のデータに署名する。実施形態では、所与のトランザクションについて、署名はトランザクションインプットの一部、およびトランザクションアウトプットの全部または一部に署名する。符号付きアウトプットの特定の部分はSIGHASHフラグに依存する。SIGHASHフラグは、署名の最後に含まれる4バイトのコードであり、どのアウトプットが署名されるかを選択する(従って、署名の時点で固定される)。
ロックスクリプトは、それぞれのトランザクションがロックされているパーティの公開鍵を含んでいることを表す「scriptPubKey」と呼ばれることがある。アンロックスクリプトは、対応する署名を提供することを表す「scriptSig」と呼ばれることがある。しかし、より一般的には、UTXOが償還される条件が署名を認証することを含むことは、ブロックチェーン150の全てのアプリケーションにおいて必須ではない。より一般的には、スクリプト言語は、任意の1つ以上の条件を定義するために使用され得る。したがって、より一般的な用語「ロックスクリプト」および「アンロックスクリプト」が好ましい。
<任意的なサイドチャネル>
図3は、ブロックチェーン150を実装するための更なるシステム100を示す。システム100は、追加の通信機能が含まれることを除いて、図1に関連して説明したものと実質的に同じである。AliceおよびBobのコンピュータ機器102a、102bのそれぞれに存在するクライアントアプリケーションは、それぞれ、追加通信機能を含む。すなわち、Alice103aは、(いずれかのパーティまたは第三者の勧誘で)Bob103bと別個のサイドチャネル301を確立することを可能にする。サイドチャネル301は、P2Pネットワークとは別にデータの交換を可能にする。このような通信は、時に「オフチェーン」と呼ばれる。たとえば、これは、パーティの一方がネットワーク106にトランザクション152をブロードキャストすることを選択するまで、ネットワークP2P106上に公表されることなく、またはチェーン150上に進むことなく、AliceとBobとの間でトランザクション152を交換するために使用され得る。これに代えて、またはこれに加えて、サイドチャネル301は、鍵、交渉された金額または条件、データ内容等の他のトランザクション関連データを交換するために使用することができる。
サイドチャネル301は、P2Pオーバーレイネットワーク106と同じパケット交換ネットワーク101を介して確立されてもよい。代替または追加で、サイドチャネル301は、モバイルセルラーネットワーク、またはローカル無線ネットワークのようなローカルエリアネットワーク、またはAliceとBobの装置102a、102bの間の直接有線若しくは無線リンクのような異なるネットワークを介して確立されてよい。一般に、本願明細書のどこかで言及されるサイドチャネル301は、「オフチェーン」で、つまりP2Pオーバーレイネットワーク106と別個にデータを交換するための1つ以上のネットワーキング技術または通信媒体を介する任意の1つ以上のリンクを含んでよい。1つより多くのリンクが使用されるとき、全体としてのオフチェーンリンクのバンドルまたは集合がサイドチャネル301と呼ばれてよい。従って、AliceおよびBobが特定の情報またはデータ片等をサイドチャネル301を介して交換すると言われる場合、これは、必ずしも全部のこれらのデータ片が正確に同じリンクまたは同じ種類のネットワークを介して送信される必要があることを意味しないことに留意する。
<ノードソフトウェア>
図4は、UTXOまたはアウトプットに基づくモデルの例における、P2Pネットワーク106の各ノード104で実行され得るノードソフトウェア400の例を示す。ノードソフトウェア400は、プロトコルエンジン401、スクリプトエンジン402、スタック403、アプリケーションレベルの決定エンジン404、および1つ以上のブロックチェーン関連機能モジュールのセット405を含む。任意の所与のノード104で、これらは、(ノードの1つ以上の役割に依存して)マイニングモジュール405M、転送モジュール405F、および格納モジュール405S、のうちの任意の1、2、または3個全部を含んでよい。プロトコルエンジン401は、トランザクション152の異なるフィールドを認識し、それらをノードプロトコルに従い処理するよう構成される。トランザクション152m(Txm)が受信され、別の先行するトランザクション152m-1(Txm-1)のアウトプット(たとえばUTXO)をポイントするインプットを有するとき、プロトコルエンジンは、アンロックスクリプトを識別し、それをスクリプトエンジン402に渡す。プロトコルエンジン401は、更に、Txjのインプットの中のポインタに基づき、Txiを識別し検索する。それは、Txm-1が未だブロックチェーン150にない場合、それぞれのノード自身の保留中トランザクションのプール154から、またはTxm-1が既にブロックチェーン150にある場合、それぞれのノード若しくは別のノード104に格納されたブロックチェーン150内のブロック151のコピーから、Txm-1を検索してよい。いずれの方法も、スクリプトエンジン401は、Txiのポイントされるアウトプットの中のロックスクリプトを識別し、これをスクリプトエンジン402に渡す。
スクリプトエンジン402は、従って、Txm-1のロックスクリプト、およびTxmの対応するインプットからのアンロックスクリプトを有する。たとえば、Tx1およびTx2が図4に示されるが、それは、Tx0およびTx1等のようなトランザクションの任意のペアに適用され得る。スクリプトエンジン402は、前述のように2つのスクリプトを一緒に実行し、これらは、使用されているスタックに基づくスクリプト言語(たとえばScript)に従い、スタック403にデータを置くことと、データを検索することとを含む。
スクリプトを一緒に実行することにより、スクリプトエンジン402は、アンロックスクリプトがロックスクリプトの中で定義された1つ以上の基準を満たすかどうか、つまり、それがロックスクリプトが含まれるアウトプットを「アンロック」するか否かを決定する。スクリプトエンジン402は、この決定の結果をプロトコルエンジン401に返す。スクリプトエンジン402は、アンロックスクリプトは対応するロックスクリプトの中で指定された1つ以上の基準を満たすと決定した場合、結果「真」を返す。その他の場合、それは結果「偽」を返す。
アウトプットに基づくモデルでは、スクリプトエンジン402からの結果「真」は、トランザクションの有効性についての条件のうちの1つである。標準的に、同様に満たされなければならない、プロトコルエンジン401により評価される1つ以上の更なるプロトコルレベルの条件が更にあり、Txjのアウトプットの中で指定されたデジタルアセットの総量がそのインプットによりポイントされる総量を超えないこと、Txiのポイントされるアウトプットは別の有効なトランザクションにより未だ使用されていないこと、等である。プロトコルエンジン401は、1つ以上のプロトコルレベルの条件と一緒にスクリプトエンジン402からの結果を評価し、それら全部が真である場合、トランザクションTxjを検証する。プロトコルエンジン401は、トランザクションが有効であるかどうかの指示を、アプリケーションレベル決定エンジン404に出力する。Txjが実際に検証されたことのみを条件として、決定エンジン404は、マイニングモジュール405Mおよび転送モジュール405Fの一方または両方を、それらのそれぞれのブロックチェーンに関連する機能をTxjに関して実行するよう制御することを選択してよい。これは、マイニングモジュール405Mがマイニングしてブロック151にするためにTxjをノードのそれぞれのプール154に追加すること、および/または、転送モジュール405FがTxjをP2Pネットワーク106内の別のノード104へ転送することを含んでよい。しかしながら、実施形態では、決定エンジン404は無効なトランザクションを転送しまたはマイニングすることを選択しないが、逆に言えば、これは必ずしも、単に有効であるという理由で、有効なトランザクションのマイニングまたは転送をトリガーしなければならないことを意味するものではないことに留意する。任意的に、実施形態では、決定エンジン404は、いずれかまたは両方の機能をトリガーする前に、1つ以上の追加条件を適用してよい。たとえば、ノードがマイニングノード104Mである場合、決定エンジンは、トランザクションが有効であること、および十分なマイニング手数料が残されることの両方を条件としてのみ、トランザクションをマイニングすることを選択してよい。
用語「真(true)」および「偽(false)」は、本願明細書では、必ずしも単一の2進数字(ビット)のみの形式で表現される結果を返すことに限定しないが、それは勿論1つの可能な実装であることに留意する。より一般的には、「真」は、成功または肯定的な結果を示す任意の状態を表すことができ、「偽」は、不成功または非肯定的な結果を示す任意の状態を表すことができる。たとえば、アカウントに基づくモデルでは(図4に示されない)、「真」の結果は、ノード104による署名の暗示的なプロトコルレベルの検証と、スマートコントラクトの追加の肯定的なアウトプットとの組合せにより示され得る(全体の結果は、両方の個々の結果が真である場合に、真を伝達すると考えられる)。
<序章>
定義1-Rivest-Shamir-Adleman(RSA)公開鍵暗号化
2つのRSA素数pおよびq、RSAモジュラスN=pq、およびEuler Quotient関数Φ(N)=(p-1)(q-1)が与えられた場合。暗号化鍵eは、eおよびΦ(N)が互いに素であり、復号dがd=e-1 modΦ(N)のように計算されるように選択される。公開鍵は(e,N)であり、秘密鍵はdである。p、q、およびΦ1(N)はすべて秘密であるが、それらは暗号文を復号することを必要としない。
定義2-Blum整数
整数Nは、何らかの素数p、qについてN=pqが素数であり、p=3mod4、q=3mod4の場合、Blum整数である。
定義3-William整数
整数Nは、何らかの素数p、qについてN=pqが素数であり、p=3mod4、q=7mod8の場合、William整数である。
推論1
William整数はBlum整数である。
定義4-平方剰余
nを正の整数とし、次式であるとする:
x2=a mod nが次式の解をもつ場合:
aは平方剰余(quadratic residue)として定義される。それ以外の場合、aは非平方剰余として定義される。
次式:
は、nに対するcoprimeである整数nの集合を表す。すなわち、nを持つ唯一の共通係数は1である。それらは乗法係数nの下で群を形成する。
定義5-ルジャンドル記号
pを素数とし、以下とする:
ルジャンドル記号:
は、aがpを法とする平方剰余である場合には1であると定義され、aが非平方剰余である場合には-1であると定義される。
推論2
定義6-ヤコビ記号
nを以下の因数分解:
による正の整数とする。次式の場合:
ヤコビ記号は次式と定義される:
次式の場合:
次式のヤコビ記号は0と定義される:
命題1
N=pqをWilliam整数とする。そして、任意の:
について、a、-a、2aおよび-2aのいずれかが平方剰余モジュロNであり、さらに、daがいくつかのd{±1、±2}についての平方剰余である場合、d'aは、すべてのd'≠dおよびd'*{±1,±2}についての平方剰余ではない。
定義7
NをWilliam整数、d∈QRNとする。ここで、QRNは平方剰余モジュロNの集合であり、次式:
は次式:
の根と定義される。
同様に:
定義8
次式も同様である:
命題2
N=pqをRSAモジュラスとする。aをNを法とする平方剰余とする。次式の場合:
Nは因数分解できる。
証明(Proof):
従って、(x1-x2)および(x1+x2)のいずれも、0 mod Nではない。したがって、これらのうちの1つはpで割ることができ、qで割れないはずである。一般性を失わずに、(x1-x2)がpで割ることができるが、qで割ることはできないとする。次に、ユークリッドアルゴリズムを用いて、(x1-x2)とNの最大公約数を求めることによって、pを求める。
以下では、2つの別個の暗号ハッシュ関数H1およびH2を使用する。それぞれの範囲は、以下とする:
より短い範囲のハッシュ関数は、均一な分布のモジュロNを達成するために連結することができることに注意されたい。2つの暗号ハッシュ関数は、もしそれらが正確に同じ入力を与えられたときに異なる出力を生成するならば、異なる。関数H1の出力がH1の2回以上の適用の出力と異なるならば、関数H2を適用することは、H1を2回以上適用することを含んでいてもよい。
定義9-Γツリー
William整数Nに関するΓツリーは、各ノードが図5に示されるように定義されるバイナリツリーである。バイナリツリーは、ルート層またはレベル0、および1つ以上の子層またはレベル(1,2,…,t)で構成される。ツリーはt個のレベルのツリーであり、各ノードは2つの子ノード(最下位レベルを除く)を持ち、ツリーの最上部にルートノードが存在する(図5に示すように、または図5が逆の場合は最下部に存在する)。したがって、i番目のレベルには2i-1個のノードが存在する。
ルートノードを構成するレベル0の場合、Γ0=<H1(N||0)>QRレベルi>0の場合、Ωi=<H2(N||i)>1とする。次に、それぞれの親ノードΓparentについて、1つの左側の子ノードΓleftと1つの右側の子ノードΓrightが存在する。ここで、
分割可能トークン
本開示の実施形態は、分割可能トークンを生成および転送するためのプロトコルを提供する。単一のトークンを単一のアセットに対して償還できる従来のトークンシステムとは異なり、分割可能なトークンは、アセットの初期量を表し、そのアセットの異なる量を表すように分割することができる。たとえば、アセットは、電子現金、または車両、建物、宝石、芸術等の有形アセットであってもよい。アセットは、消耗品、たとえば、メディアコンテンツ、購読、エネルギーまたは水供給等であり得る。分割可能なトークンは、任意の回数に分割して、最初の金額のより小さな金額を表すことができる。ここでは、トークンを小さな部分に分けることに言及する。トークン自体は物理的なトークンではない。ピースという用語は、単にトークンの分割または小部分を指し、第1トークンの小さなピースは、アセットの小さな量を表す。
図6は、本開示の実施形態を実施するための例示的なシステム600を示す。この例示的なシステムは、第1パーティ103a、第2パーティ103b、および第3パーティ103cの3つのパーティで構成され、それぞれがそれぞれのコンピュータ機器を動作させる。各パーティは、ブロックチェーンネットワーク106のパーティである。第1、第2および第3パーティのそれぞれは、図1から図3を参照して上述したように、AliceまたはBobの役割を担うことができる。図1~図3は、AliceがBobにトランザクションを送信し、それによって、ある量のデジタルアセットをBobに移転する例のシナリオを示しているが、Bobは、Aliceにトランザクションを移転し、それによって、ある量のデジタルアセットをAliceに移転することも理解されよう。
以下、第1パーティをAlice103a、第2パーティをBob、第3パーティをCharlieと表記する。さらに、必要に応じて、第1パーティ(たとえば、Alice103a)への言及は、第1パーティのコンピュータ機器を意味すると解される。Alice103aおよびBob103bは、オフチェーン技術を用いて、たとえば図3に示されるサイドチャネル301を介して、互いに通信してよい。同様に、Alice103aおよびCharlie103cは、サイドチャネル(これは、サイドチャネル301と同じタイプであてよく、またはそうでなくてよい)を用いて互いに通信してよい。図示されていないが、Bob103bおよびCharlie103cは、サイドチャネルを介して通信することもできる。
この例では三者が例示されているが、ある例では、1つのパーティが2つのパーティの動作を行うことができることに注意されたい。たとえば、Bob103bとCharlie103cは、実際には同じパーティであってもよく、いくつかの例では、同じコンピュータ機器を操作してもよい。
以下により詳細に説明するように、Bob103bは、第1トランザクションTx1をブロックチェーンネットワーク106に送信し、Alice103aは、第2トランザクションTx2をCharlieに送信し、Charlieは、更新された第2トランザクションTx2'をブロックチェーンネットワークに送信することができる。上述のように、一旦トランザクションがブロックチェーンに送信されると、それが有効であれば、それはブロックチェーン150に含まれる。
たとえば、Bobは銀行であってもよく、AliceはBobの顧客であってもよい。Bobは、たとえば、100ポンドのような金額のトークンをAliceに発行することができる。Aliceは、商人のCharlieからの商品やサービスの代金を支払うために、そのトークンを使うことができる。
本願明細書に開示される一態様によれば、Bob103bは、第1トランザクションTx1を使用して、第1トークンをAlice103aに発行する。Bob103bは、第1トランザクションTx1のアウトプットに第1トークンを含め、第1トランザクションをブロックチェーンネットワーク106に送信させる。これは、Bob103bが、ネットワーク106の1つ以上のノードに第1トランザクションTx1を自ら送信すること、または、ネットワーク106に提出するステップを実行する別のパーティに第1トランザクションを送信することを含み得る。Bob103bは、たとえば、政府、銀行、または他の十分に確立されたエンティティのような信頼されるパーティであってもよい。Alice103aとBob103bは、それぞれ独自の公開鍵PAおよびPBを持っている。第1トランザクションは、Bobの公開鍵に基づいた署名で署名されたインプットを含む。言い換えれば、Bobは、彼の公開鍵と、ブロックチェーンに記録された以前のトランザクションのアウトプットをアンロックするデジタル署名を提供する。第1トランザクションは、Aliceの公開鍵PA、またはそれから派生した鍵PA1のみでアンロックできるアウトプット(たとえばUTXO)を持つ。言い換えると、第1トランザクションはBob103bからAlice103aに送信される。
Bob103bは、Aliceの公開鍵から派生公開鍵にトランザクションTx1を送信してもよい。たとえば、Alice103aは認証公開鍵PAを有してもよく、Bob103bは認証公開鍵PAを使用して公開鍵PA1を生成してもよく、その結果、Alice103aとBobは両方とも生成された公開鍵を知っているが、Alice103aと公開鍵との間のリンクは他の関係者には明らかではない。Bobは、Aliceの公開鍵を、たとえばAlice103aから入手することもできるし、一般に入手可能であることもある。Alice103aとBobは、たとえばDiffie-Hellman交換を使用して、共有秘密鍵SABを生成する。Alice103aとBobは、Aliceの(認証された)公開鍵と共有秘密鍵SABを使って派生公開鍵を生成することができる。Bob103bは、第1トランザクションTx1をPA1に送信してもよい。後に、Bobが別のトークン、たとえば、同じ第1トークンの第2インスタンス、または異なる量のアセットに値するトークンを送信することを希望する場合、Bob103bは、同じ公開鍵PA1、または更新された派生公開鍵PA2にトランザクションを送信することができる。すなわち、AliceとBobは、それぞれAliceの(認証された)公開鍵と共有秘密鍵に基づいて、鍵のリストを生成することができる。たとえば、派生公開鍵は、以下の公式を使用して生成される可能性がある。
ここで、Hは暗号ハッシュ関数であり、H1またはH2と同じかもしれないし、同じでないかもしれないことに注意する。
第1トークンは、Aliceの公開鍵と同じアウトプットか、別のアウトプットに含めることができる。好ましくは、第1トークンは、使用不可能トランザクションアウトプットに含まれる。トランザクションは、そのアウトプットの実行を終了させるオペコードを含めることによって、すなわち、後のトランザクションのアンロックスクリプトと共に実行されるときに、未確定にすることができる。ある特定のブロックチェーンプロトコルは、この関数を実現するためにOP_RETURNオペコード(あるいはOP_FALSEオペコードの後にOP_RETURNオペコード)を使う。このようなアウトプットは、たとえば、以下ではOP_RETURNアウトプットと呼ぶが、他の実装またはプロトコルでは、他のメカニズムを使用して、トークンの形態のペイロードデータをブロックチェーントランザクションの使用可能または使用不可能アウトプットに含めることができることが理解される。
図7は、第1トランザクションTx1の例を示す。示されるように、第1トランザクション(トランザクション識別子TxID1を有する)は、インプットリストおよびアウトプットリストから構成される。この例では、1つのインプット701を有するインプットリストと、3つのアウトプット702a、702b、702cを有するアウトプットリストとがある。インプット701は、図7において「アウトポイント」とラベル付けされたアウトプットによって参照される前のトランザクションのロックスクリプトをアンロックするためのアンロックスクリプトを含む。アンロックスクリプトは、Bobの公開鍵PBおよびBobのデジタル署名SigBを含む。第1トランザクションの第1アウトプット702aは、第1トークン<data1>を含む。ここで、「第1アウトプット」は、アウトプットの特定の順序を指すのではなく、異なる出力を区別するためのラベルとして使用される。第2アウトプット702bは、Aliceの公開鍵PA1に対するpay-to-public-key-hash(P2PKH)を含む。すなわち、第2アウトプット702bは、Aliceの公開鍵PA1を含むようにこのロックスクリプトをアンロックしようとするアンロックスクリプトを必要とするように構成されたロックスクリプトを含む。必要に応じて、ロックスクリプトはまた、ロックスクリプトをアンロックしようとするアンロックスクリプトに、ハッシュh1にハッシュするプレイメージを含めるように構成されてもよい。例では、プレイメージは<data1>である。すなわち、後続のトランザクションの入力は、第2アウトプットをアンロックするために、第1トークン<data1>を含むアンロックスクリプトを含まなければならない。第2アウトプット702bは、デジタルアセットの量xをAlice103aに転送することができる。デジタルアセットは、第1トークンによって表されるアセットと同一ではないことに留意されたい(しかしながら、一部の実施形態では、後者のアセットは、セキュリティトークンのような別のタイプのデジタルアセットであってもよい)。任意で、第3アウトプット702cは、第1トランザクションTx1に含まれる。第3アウトプット702cは、Bobの公開鍵PBに対するP2PKHを含む。第3アウトプット702cは、ある量yのデジタルアセットをBob103bに転送することができる。
上述のように、第1トランザクションTx1は、アウトプット702aの中に、第1トークンを含む。第1トークン<data1>は、使用不可能アウトプットに含まれてよい。第1トークン<data1>は、複数のデータフィールドを含む。各データフィールドは、それぞれのデータを含んでいる。第1データフィールドは、アセットの第1の量を表す、すなわち、第1の量を定義するデータを含む。たとえば、データは、数字、たとえば100を表すことができる。2番目のデータフィールドは暗号文で構成される。暗号文は、Alice103aの暗号化された識別子を表す。識別子は、たとえば、Aliceの公開鍵(AliceへのP2PKHに含まれるのと同じ公開鍵、または異なる公開鍵)であってもよい。暗号文はAliceの公開鍵で暗号化されてもよいが、識別子と同じ公開鍵ではない。いくつかの例では、識別子と暗号化鍵は、同じ公開鍵暗号システムの一部かもしれないし、異なる公開鍵暗号システム(たとえば、RSAまたはRSAとECDSAの両方)の一部かもしれない。いくつかの例において、Aliceの識別子を暗号化するために使用される公開鍵は、モジュラスNを含み、第1トークンは、モジュラスNを表すデータを含む第3データフィールドを含む。第1トークンは、1つ以上の追加データフィールドを含んでよい。
オプションとして、Bob103bは、Aliceの公開鍵PAが信頼される機関によって認証されているかどうかを判定することができる。たとえば、Bob103bは、Alice103aがBobによって認証された公開鍵を提供したか、または銀行、政府、認証局などの他の当局を提供したかを決定することができる。Bobが、Aliceの公開鍵PAが認証されていないと判断した場合、Bob103bは、Alice103aに第1トークンを発行しないことを決定してもよい。すなわち、Bobは、第1トランザクションTx1を生成せず、第1トランザクションをAlice103aに送信しない。
図8は、第1トークン<data1>の表現例を示す。第1トークンは、第1量(残高)、Aliceの公開鍵のRSAモジュラスN(e,N)、Aliceの識別子PAを暗号化する暗号文cを含む。第1トークンは、アセット(この場合は英ポンドを表す英ポンド)の表示も含んでいる。また、支払回数のデータフィールドも含まれる。Bob103bによって発行された第1トークン<data1>では、支払い回数はゼロである。支払いの数は、第1トークンが別のトークンに分割された回数を表す。Alice103aが、たとえば、サブスクリプションに対する支払いのために、第1トークンを使用する場合、支払いの数は、1ずつ増加する。さらにオプションのデータフィールドを含めてもよい。
第1トランザクションTx1がブロックチェーン150に含まれると、Alice103aは第2トランザクションTx2を生成することができる。Bob103bは、最初に、第1トランザクションがブロックチェーンに含まれたことをAlice103aに通知するか、または、Aliceは、未使用トランザクションアウトプットリスト(UTXOリスト)中の彼女の公開鍵PA1を監視することができる。Alice103aは、Bobがその派生公開鍵にアウトプットを送信していることに気づく可能性があるため、その鍵PA1を監視する。
第1トークン、あるいは第1トークンにより表されるアセットの量を使うためには、Aliceはあらかじめ決められたプロトコルに従わなければならない。トークン発行者(Bob)と、Aliceがアセットを使おうとしている相手(BobまたはCharlieであってよい)とが、プロトコルに従う。
図9は、トランザクション識別子TxID2を持つ第2トランザクションTx2の例を示す。ここで、生成は必ずしもゼロからの生成を意味しないことに注意されたい。たとえば、Alice103aは、1つ以上の事前に入力されたフィールドを含み得る、たとえばBobからのトランザクションテンプレートと共に発行されてもよい。第2トランザクションTx2は、第1トランザクションTx1のアウトプット702bをアンロックするように構成されたインプット901を備える。たとえば、インプット901は、Aliceの公開鍵PA1と、第1トランザクションの第2アウトプット702bをアンロックするためのデジタル署名SigAとを含んでいてもよい。第1トランザクションTx1の第2アウトプット702bが、インプットがh1のプレイメージを含むか否かのチェックを実行するように構成される場合、Alice103aは、第2トランザクションTx2のインプット901にそのプレイメージ(すなわち、第1トークン<data1)を含んでいてもよい。
第2トランザクションTx2は、1つ以上のアウトプット902を備える。第1アウトプット902aは、アセットの第2の量を表す第2トークン<data2>を含む。第2トークン<data2>は、第2トランザクションの使用不可能トランザクションアウトプット、たとえばOP_RETURNアウトプットに含まれてよい。第2の量は、譲渡、使用、償還などの対象となっているアセットの金額である。
第2トークン<data2>は、第2の量を表すデータを含む。たとえば、第2トークンは、1つ以上の値Xを含み得、これらの値のそれぞれは、第1の量のサブ量(または分割)を表す。たとえば、第2の量は75であってもよく、値Xは75(たとえば、50および25)を一緒に表すことができる。値Xは、図11および図12を参照して、以下により詳細に議論される。第2トランザクションTx2は、第2アウトプット902bを含んでいてもよい。第2アウトプット902bは、Aliceの公開鍵に対するP2PKHであってもよい。公開鍵は、以前に使用された公開鍵PA1または新しい公開鍵PA2(たとえば、PA1から派生公開鍵)である可能性がある。第1トランザクションTx1の第2アウトプット702bと同様に、第2トランザクションTx2の第2アウトプット902bは、第2トークン<data2>を構成するようにアンロックスクリプトを試みる必要がある。言い換えると、ロックスクリプトはハッシュh2のプレイメージを必要とし、そのプレイメージは第2トークン<data2>である。
図10は、第2トークン<data2>の表現例を示す。第2トークンは、第1トークン<data1>の更新されたバージョンである。1つ以上の値Xが、第2トークンの支払フィールドに含まれる。第2トークン<data2>の1つ以上のデータフィールドは、第1トークンと同じ場合がある。たとえば、アセットのタイプを表すプレフィックス、Aliceの暗号化された識別子c、およびRSAモジュラスNは同じままであってもよい。第2トークンの1つ以上のデータフィールドは、第1トークンのデータフィールドとは異なる場合がある。たとえば、Alice103aは、第2の量のアセットが転送されていることを反映するように、トークンの残りの量を表すフィールドを変更することができる。別の例として、支払いフィールドの数も変化し、0から1に増加する。Alice103aは、支払に関する追加情報も含むことができる。
一旦、第2トランザクションTx2が生成されると、Alice103aは、トランザクションをブロックチェーンネットワーク106に送信することができる。追加的または代替的に、Alice103aは、BobまたはCharlie103cにトランザクションを送信してもよい。Alice103aは、トークン発行者(Bob103b)とトークンを使っている場合、第2トランザクションをBob103bに送信してもよい。Alice103aは、別のパーティ、即ち、Charlieによって提供されたアセットのためにトークンを使用している場合、第2トランザクションTx2をCharlieに送信することができる。
いくつかの実施形態において、プロトコルは、第1トークン(またはむしろ第1トークンによって表される量)が、バイナリツリー状の構造に従って分割され得ることを要求する。ツリーの第0層(ルート層)では、単一のルートノードΓ0が第1トークンの総量を表す。ツリーの第1の層(第1の子層)において、各子ノードΓ00、Γ01は、第1トークンの総量の50%を表す。すなわち、2つの子ノードがあり、各子ノードは、総量の同じ量を表す。ツリーの第2の層(第2の子層)では、各子ノードΓ000、Γ001、Γ010、Γ011は、第2の層における子ノードによって表される量の半分(すなわち、総量の25%)を表す。言い換えると、第2の子層には4つの子ノードがあり、合計量を表す。所与のノードによって表される量を連続的に半分にするこのプロセスは、任意の回数継続することができる。回数は、必ずしも償還可能なアセットの最小分割数に限定されないことに注意されたい。たとえば、英ポンドの最小額面は1セントである。ただし、第1トークンは1ペニー未満の金額に分割することができる。
図11は、このプロトコルに従って第1トークンをどのように分割できるかを示している。示されるように、ルート層のルートノード1101は、100ポンドを表し、第1の子層の各子ノード1102a、1102bは、50ポンドを表し、第2の子層の各子ノード1103a~dは、25ポンドを表す。次に、第2の子層内の子ノード1103a~1103dを分割することができ、これらの子ノードを分割することなどができる。言い換えると、各子ノードは、最初の金額の部分量を表す(またはマッピングする)。第1の層は、2つの子ノード1102a、1102bを含む。この層では、各子ノード1102a、1102bは、第1の量の同じサブ量(「第1のサブ量」)を表す。第2の層は、4つの子ノード1103a~1103dを含む。第2層の各ノードは、第1のサブ量の同じサブ量(「第2のサブ量」)を表す。第1の金額、第1のサブ量および第2のサブ量は、異なる金額である。図11を参照すると、100ポンド(第1の量)は、第1の子層では50ポンド(第1サブ量)の2ロットに分割され、第2の子層では25ポンド(第2のサブ量)の4ロットに分割される。所与の層内の子ノードの各ペアによって表されるサブ量は、「上位」層内のそれらの親ノードによって表されるサブ量(または量)を与える。
第1トークン、したがってルートノードが第1の量Aを表す場合、ツリー構造のi番目の層は2i-1個のノードから構成される。したがって、i番目の層の各ノードは量A*21-iを表す。
たとえば、Aliceは、第2トークンを使って、Charlie103cに75ポンド(第2の量)を移転したいとする。図11のツリー構造の例を用いると、Aliceは第2トークンに2つの値を含めなければならず、合計で75ポンドを表す。第1の値は50ポンド(第1のサブ量)、第2の値は25ポンドである。
Alice103aは、単に、第2トークンの値50および25を含むことができる。しかし、これによってAliceはトークンを二重に使うことができる。たとえば、Aliceは、75ポンドを表すトークン(および値)を含む第2トランザクションTx2をCharlie103cに送り、その後、75ポンドを表すトークン(および値)を含む別のトランザクションを別のパーティに送ることができる。
これらの問題を防止するために、Alice、Bob103bおよびCharlie103cは、ツリー内の各ノードが特定のコンポーネントに基づいて計算されるプロトコルに従うことに同意する。各子ノードは、ルートノードに基づく。各ルートノードは、Aliceの公開鍵PAを暗号化するために使用される(RSA)モジュラスNに基づいている。ルートノードは、第1トランザクションTx1の識別子TxID1に基づいてもよい。このようにして、ルートノードは第1トランザクションにリンクされる。いくつかの例では、ルートノードは、暗号ハッシュ関数を、モジュラスN、および任意で、第1トランザクション識別子TxID1に適用することによって計算される。
階層ツリー構造は、以下の方程式を用いて、図12に示すようにノードが計算されるように構築されてもよい。
ルートノードを構成するレベル0の場合、Γ0=<H1(TxID1||N||0)>QRレベルi>0の場合、Ωi=<H2(TxID1||N||i)>1次に、それぞれの親ノードΓparentについて、1つの左側の子ノードΓleftと1つの右側の子ノードΓrightが存在する。ここで、
前述のように、ツリー内の子層の数に制限はなく、したがって、構築可能な子ノードの数に制限はない。言い換えると、第1の量(ルートノードによって表される)は、負でない整数tに対して2t個の子ノードに分割することができる。Alice103aは、必ずしもツリーの各ノードを計算する必要はないことに注意されたい。代わりに、Aliceは、第2トークンを使用してCharlie103cに転送される量を表すのに必要なノードのみを計算する必要がある。たとえば、図11および図12を参照すると、Aliceが第2トークンを使用して、50ポンドを移転することを望む場合、AliceはΓ01(50ポンドを表す)またはΓ01(50ポンドを表す)のみを必要とし、可能ではあるが両方は必要としない。Aliceが第2トークンを使用して、75ポンドを譲渡することを望む場合、Aliceは、Γ00(50ポンドを表す)およびΓ010(25ポンドを表す)を計算するだけでよい。Aliceはより多くの値を計算することができたが、たとえば、Γ011(25ポンドを表す)は必要ではない。
さて、Alice103aは、第2の量を表すためにトークン内に置かれた値としてノードを使用することができる。しかし、これにより、第三者がAliceのモジュラスNを計算することが可能となり、Aliceの公開鍵PAを損なうことになる。
このようなセキュリティ侵害を防ぐために、好ましくは、第2の量を表すのに必要なツリー中の各ノードに対して、Aliceはノードの平方根Xの1つを生成する。必要なノードの平方根値Xは、第1トークンに含まれ、各平方根値は、総量のそれぞれの部分量を表すために使用される。たとえば、Aliceは、ノードΓ01の平方根X01を計算して、50ポンド、すなわちA/2を表す。Aliceは、25ポンド、すなわちA/4を表すために、ノードΓ010の平方根X010を計算し得る。
言い換えれば、ツリーは分割トークンを表す。ツリーのノードが使われると、X値が開示される。検証者は、そのノードおよびそのノードの上のノードについて対応するΓ値を計算することができる。そのノードの下にあるノードのために、どのようなΓ値の漏洩でも、公衆はNを因数分解することができ、したがってAliceのアイデンティティを明らかにすることができる。そのノードの上のノードのX値の漏洩も同じ効果を持つ。
AliceがCharlieに75ポンドを支払いたいと仮定しよう。たとえば、椅子を買おうとするとしよう。Aliceは次式を計算する:
Γ0の計算における「0」は必須ではないことに留意されたい。上記の例では、「0」は単にインデックスとして使用されるだけであり、したがって、任意のデータによって表すことができる。Ω0を計算するとき、Aliceはインデックス(この場合は"0")を適用することができる。トークンの分割に応じて、AliceはΩiの他の値を計算する必要がある。その場合、Aliceは各Ωiに対して異なるインデックス(たとえばΩ01に対して"01")を適用する。
X00は、次式になるような、Γ00の平方根の1つである:
左側の側方分岐上のその他の支出は、Γ00の別の明確な平方根を与えるであろう。したがって、命題2では、Aliceのアイデンティティを明らかにするためにNを因数分解することができる。AliceのアイデンティティPAは明らかにされ、それ自体、たとえば、二重支払いの法的意味合いに従うことができ、そして/または将来、Bob103bによってトークンが発行されることを禁止することができる。
なお、親Γ0の使用はいずれも、次式となるように、平方根X0を開示しなければならない。
X00は、公衆が次式を計算することを可能にする:
次に、公衆は、Γ0の2つの別個の平方根を得るだろう。したがって、Nの因数分解が明らかになる。
X010は、次式になるような、Γ010の平方根の1つである:
上述のように、子ノードまたはΓ010の親ノードのいずれかの使用は、Nの因数分解を明らかにする。しかしながら、Γ011の使用は、Nが因数分解されることを許さない。
前述したように、Alice103aは、希望すればツリー全体を計算する必要はないが、必要に応じてツリー全体を計算することができる。彼女は上からの経路を経て、必要に応じて各ノードの価値を計算することができる。しかしながら、X個の値と一緒に子のΓ値の漏洩がNの因数分解を損なうので、彼女がすべての値を公表することは重要である。たとえば、X00およびΓ000は、Γ00の2つの異なる平方根を与えるだろう。
Alice103aは、第2トークンに支払の詳細を追加することができる。たとえば、Aliceは、X値に対応するインデックスを提供することができる。たとえば、00はX00のインデックスである。これらのインデックスとバランスを有することによって、Charlie103cは、開始バランスと、X値によって表される値とを求めることができる。いくつかの計算を節約するために、開始残高の値XおよびX値に対応するサブ量を、第2トークンに追加することができる。
第2トランザクションTx2が生成され、適切な値を持つ第2トークンを含むと、Aliceは第2トランザクションをCharlieに送信する。言い換えれば、Aliceはトランザクションを介してCharlieに(X00,X010,N)を送る。Aliceは同じトランザクションの中で第1トークン、たとえば直前のOP_RETURNペイロード<data1>を送ってもよい。ただし、AliceはΓツリーを明らかにする必要はないことに留意されたい。
第2トランザクションTx2のインプット901は、前のトランザクションの第2アウトプット702bにリンクされる。これは、Alice103aが第1トークン(たとえば、第1トランザクションTx1のOP_RETURNデータペイロード)をCharlie103cに渡すことができるフィールドである。また、インプット901は、Alice103aがプロトコル規則に二重に費やすか違反した場合に、Alice103aに説明責任を負わせることができる署名を含む。Alice103aにあるレベルのプライバシーを提供するために、署名を生成するために使用される公開鍵PA1は派生鍵であってもよい。公開鍵はランダムに見える。しかし、AliceとBob(たとえば、銀行)の双方は、紛争がある場合には、公開鍵とAliceのアイデンティティとの関連性を証明することができる。
Alice103aは、Charlie103cが第2トランザクションにインプットを追加することを可能にするように、第2トランザクションTx2の第1アウトプットを構成してもよい。たとえば、いくつかのブロックチェーンプロトコルによれば、Alice103aは、トランザクションを無効にすることなく別のインプットをトランザクションに追加することを可能にする識別子またはフラグをインプットに含むことができる。Alice103aは、署名にSIGHASH_SINGLE(0x03)およびSIGHASH_ANYONECANPAY(0x80)のsighhashフラグを使用してもよい。ここで、SIGHASH_ANYONECANPAYは、他人がトランザクションに資金を提供することを可能にする。たとえば、Charlie103cは、この取引に資金を提供することができる。SIGHASH_SINGLEは、AliceのインプットとAliceのアウトプットを保護する。これらのフラグはAliceの署名SigA1でOP_RETURNアウトプットを保護しないことに注意されたい。しかし、OP_RETURNへの変更は、第1アウトプットに埋め込まれたハッシュ値とは異なるハッシュ値をもたらす。このハッシュ値は、署名によって保護される。さらに、第1トークン(data1)の変更を含むインプットの変更は、前のロックスクリプトでチェックするときに失敗する。
現時点では、トランザクション手数料がないため、トランザクションTxID2はマイナーにとって有効ではない可能性がある。あるいは、Aliceは、マイナーを満足させるのに十分な手数料を含めることができる。しかし、それは、Aliceの支払いを検証するために必要な全ての情報Charlie103cを含み、Aliceの署名とハッシュ関数(たとえば、SHA256やダブルSHA256のような任意のスクリプトハッシュ関数)は、全ての情報の真正性と完全性を提供する。
Charlie103cは、Alice103aから第2トランザクションTx2を取得する。第2トランザクションTx2は、第2トークン<data2>を含み、これは、Charlie103cに転送されるべきアセットの第2の量を表す値を含む。Charlie103cは、Alice103aから直接、または中間ソースを介してトランザクションを得ることができる。第2トークンには、トークンの残りの残高、たとえばCharlie自身が使うことのできる残高も含まれる。
Charlie103cは、第2トランザクションTx2に含まれる第1トークン<data1>が、第1トランザクションTx1に含まれる第1トークン<data1>と同じかどうか(たとえば、ブロックチェーンから第1トランザクションTx1を取得することによって)を決定する。第1トランザクションTx1が、第1トークンのハッシュh1を含むアウトプット702cを含む例では、Charlieは、第2トランザクションにおける第1トークン<data1>が、第1トークンに暗号ハッシュ関数H1を適用することによって、第1トランザクションのそれと一致するかどうかをチェックする(第1トランザクションにおける第1トークンが、第1トランザクションのアウトプットに含まれるハッシュの前の画像であることを思い出そう)。第1トークンが一致しない場合、Charlie103cは、Alice103aが第1トークンの少なくとも一部を変更し、プロトコルに従わないことを知っている。その場合、Charlie103cは、第2トランザクションに署名したり、ブロックチェーンに提出したりすることはない。
Charlie103cはまた、サブ量を表す値Xが、それぞれ、第1トランザクションTx1の識別子TxID1に基づいているかどうかを決定する。Charlie103cはまた、値Xがトークンに含まれる(RSA)モジュラスにも基づくかどうかを決定することができる。たとえば、Charlieは、値XがΓ0=<H1(TxID1||N||0)>QRに基づくかどうかを決定してよい。これをチェックするために、Charlieは第1トランザクションTx1または第2トランザクションTx2からトランザクション識別子とモジュラスを取得し、ハッシュ関数をデータに適用する。
Charlie103cが満たされた場合、Charlieは、第2トランザクションを自分の公開鍵PCで署名することによって、第2トランザクションを更新する。すなわち、Charlie103cは、自身の公開鍵PCおよびデジタル署名SigPCを含む更新された第2トランザクションTx2’にインプットを追加する。次にCharlieは、更新された第2トランザクションTx2’をブロックチェーンネットワーク106に提出する。
Charlie103cは、Alice103aに支払われる第1トランザクションTx1のアウトプット702bが、ブロックチェーンの未使用トランザクションアウトプットの中のものであるかどうかを決定することができる。言い換えると、アウトポイントTxID1||0がUTXOセットの中にまだあるかどうか。アウト点がUTXOセットにない場合、Alice103aは第1トークンを同じパーティ(すなわちCharlie)または別のパーティで償還しようとする。
Alice103a、Bob103bおよびCharlie103cが、各トークンが図5および11のツリー構造によって表されるプロトコルに従う場合、Charlieは、ツリー構造に基づいて、値Xによって表される量を決定することができる。いくつかの例において、Alice103aは、所与の値をツリー構造内の特定の位置にマップする第1トークンにインデックスを含むことができる。第1の量、残高、第2の量を確認すると、Charlieはツリー構造の値で表される部分の金額の合計が最初の金額から残高を引いたものに相当するかどうかを判定する。
Charlie103cは、第2トークンの値Xを使用して、1つ以上の「候補ノード」を計算してもよい。各候補ノードΓ'は、値のツリーインデックスに基づいて、それぞれの値Xを累乗することによって計算される。たとえば、ツリーの第1の子層内の子ノードに対応するインデックスを持つ値Xは4のべき乗に、ツリーの第2の子層内の子ノードに対応するインデックスを持つ値Xは8のべき乗に、ツリーの第3の子層内の子ノードに対応するインデックスを持つ値Xは16のべき乗に、などとなる。ツリー内の連続する各層に対して電力を2倍にする。これは、各値Xがツリー内の子ノードの平方根であるためである。したがって、子ノードを生成するためには、値を2乗(2のべき乗)しなければならない。各子ノードは、ツリー内の親ノードの平方根である。したがって、親ノードを生成するには、各子ノードを2乗する必要がある。親ノード自身が子ノードである場合、そのノードも同様に2乗されなければならず、ルート層に到達するまで同様である。
候補ノードΓ’が左側の子ノードΓleftである場合、候補ノードは、何らかの値dにより候補ノードを乗算することにより、ルートのーどをマップするべきである。値dは、それぞれの数が正と負の平方根を持つという事実を表す。値dは、ツリー内の候補ノードの位置、すなわち、候補ノードがルート層に到達するために何回二乗されるかに依存する。たとえば、第1の子層内の左側の子ノードΓleftから生成された候補ノードについては、d1∈{±1,±2}である。候補ノードが左側の子ノードΓleftである場合、候補ノードは、何らかの値dにより候補ノードを乗算することにより、ルートのーどをマップするべきである。
候補ノードΓ'が右子ノードΓrightである場合、候補ノードは、候補ノードに何らかの値dを乗じることによって、ルートノードにマッピングすべきである。値dは、ツリー内の候補ノードの位置にも依存する。子ノードが次式:
に従って計算される場合、CharlieはΩiを計算する必要がある。Ωiは、第1または第2トランザクションから得られた情報、すなわちTxID1およびNを用いて計算されてもよい。右子ノードΓrightに対応する値Xが候補ノードを生成するために(1回以上)2乗される場合、候補ノードはΩi.の係数を構成する。従って、候補ノードは、関係Γ''=Ωi
nΓ0によりルートノードにマッピングすべきである。ここで、nは、値が引き上げられる累乗に依存する。なお、Ωiは、iごとに独立して計算する必要がある。
Charlie103cは、第2トークンを検証するために、1つ以上のさらなるチェックを実行してもよい。たとえば、Charlieは、各値が次式の関係に従うことをチェックすることができる:
ここで、Nはモジュラスである。
上述のように、Charlie103cは、第2トークンを検証し、満足された場合、更新された第2トランザクションTx2’をブロックチェーンに送信する。Charlie103cが第1トークンを発行した場合、Charlie103cはAlice103aに、第2トークンの価値に見合う商品、サービス、コンテンツなどを提供することができる。たとえば、Charlie103cがコンテンツプロバイダーであり、トークンがコンテンツの量を表す場合、Charlieは、第2トークンの量に値するコンテンツをAlice103aに提供することができる。Bob103bが第1トークンを発行した場合、BobはCharlieに第2トークンの量を提供することができる。たとえば、Bobは銀行であってもよく、トークンは電子現金を表してもよい。更新された第2トランザクションTx2’がブロックチェーンに現れると、Bobは、第2の量に相当する電子現金をCharlie103cに移転することができる。
以下は、Alice103a、Bob103bおよびCharlieが銀行の顧客であり、CharlieがAlice103aから支払いを受けることを期待する商人である場合の例示的なシナリオにおける、Alice103a、Bob103b、およびCharlieの手順の例を示す。いくつかのステップは必須ではないことが理解されるであろう。
Alice103aは、そのアイデンティティを表す公開鍵(たとえば、ECDSA公開鍵)PAを持ち、PAは、政府や確立されたエンティティなどの信頼できる当局によって認証されてよく、Bobも、公開鍵(たとえば、ECDSA公開鍵)PBを持つ。PAは広く公開されていなくてよく(たとえば、PAは国民ID番号やパスポート番号に関連してよい)、PBは一般に公開されているかもしれない(たとえば、PBはオンラインバンキングウェブサイトの証明書に関連してよい)ことに注意してほしい。
Alice103aがBob103bから100ポンドのトークンを得たいと仮定する。
ステップ1:Alice103aは、2つのRSA素数pとqを生成し、公開鍵(e,N)と秘密鍵dを計算する。
ステップ2:Alice103aはPAおよび(e,N)をBobに渡す。Bob103bは、Aliceのアイデンティティとアカウントを検証する。すなわち、彼女が100ポンドのトークンを発行される資格があるかどうかを確認する。
ステップ3:Bob103bは、Aliceのアイデンティティである公開鍵PAを(e,N)で暗号化し、暗号文cを作成する。
この暗号文はチェーン上で公開されることに注意されたい。もしAlice103aが彼女のトークンを二重に使うなら、彼女のRSA秘密鍵は公衆によって引き出されるだろう。従って、彼女のアイデンティティは公に明らかにされ、Alice103aは二重の支出で罰せられるかもしれない。
ステップ4:Alice103aとBob103bは、まず、PAおよびPBの上でのDiffie-Hellman鍵交換を介して、共有秘密鍵SABを確立する。そして、両者は公開鍵のリスト、次式を導く:
これらの公開鍵により、Alice103aは自分でトランザクションを作成し、使用することができる。同時に、Bobは取引を知っているので、取引を監視することができる。
ステップ5:Bob103bは、図7に示すように、Alice103aに100ポンドのトークンを発行する第1ブロックチェーントランザクションを作成する。トランザクションのアウトプットは、カラードアウトプットである。それはAliceの公開鍵PA1に支払われる。アウトプットを使用するために、Aliceはハッシュ値h1とPA1によって検証可能な彼女のECDSA署名のプレイメージを提供しなければならない。この特定の例では、トランザクションはアウトプットを色付けするOP_RETURNアウトプットを含む。データペイロードには、h1のプレイメージを含む、Aliceからの支払いを検証するために公衆が知る必要のあるすべての情報が含まれる。より正確には、データペイロードは、図8に示されるフォーマットを有し得る。
ロックスクリプトのハッシュパズルは、前のイメージがOP_RETURNで利用可能であるので、冗長に見えることが理解される。しかし、ロックスクリプト内のこの小さな追加データは、トランザクション全体を得ることなく、誰でもAliceの支払いを検証することを可能にする。データペイロードを保持し、提示するのはAliceの責任である。これは、商人が接続しているマイナーが枝刈りされたブロックチェーンで実行している場合に非常に便利である。すべてのアウトプットはBob103bによって署名され、信頼できる公開鍵PBで検証できることに注意されたい。従って、Alice103aは、アウトプット内のデータを改ざんすることはできない。
第1トランザクションTx1において、Bob103bは、PA1の所有者がNの因数分解を知っているというステートメントに効果的に署名する。Bobは信頼されているので、Charlie103cはすべて、AliceからのPA1による署名を検証する必要がある。
ステップ6:Alice103aが商人のCharlieに75ポンドを支払いたいと仮定する。Aliceは次式を計算する:
Γツリーを図12に一緒に示し、Γツリーのノーで表される現金量を図11に示す。
前述のように、Alice103aは、ツリーの必要なノード値とその平方根を計算する。Alice103aはツリー全体を計算する必要はない。彼女は上からの経路を経て、必要に応じて各ノードの価値を計算することができる。X値と一緒に子のΓ値が漏洩することがNの因数分解を損なうので、彼女がツリーのすべての値を公表しないことは重要である。たとえば、X00およびΓ000は、Γ00の2つの異なる平方根を与える。
次に、Alice103aは、前のOP_RETURNペイロードdata1と共に、ブロックチェーントランザクションテンプレートを介してCharlieに(X00,X010,N)を送信する。Alice103aは、Γツリーを明らかにする必要がないことに注意されたい。トランザクションは、図9に示されており、data2ペイロードは、図10によって表すことができる。
ペイロードに支払いの詳細を追加するために、Alice103aはX値に対応するインデックスを提供する必要がある。たとえば、00はX00のインデックスである。これらのインデックスと残高を有することによって、開始時の残高とXの値で表される値を計算することができる。しかし、明示的に値を提供することにより、計算を節約することができる。つまり、ペイロードにX値に対応する開始時の残高と値を追加することになる。
このトランザクションの入力は、前のトランザクションの第1アウトプットである。これは、Alice103aが以前のOP_RETURNデータペイロードをCharlie103cに渡すことができるフィールドであり、Alice103aが二重に使用するかルールに違反した場合に、Alice103aに責任を負わせることができる署名である。公開鍵はランダムに見える。しかし、Alice103aとBob103b(銀行)の両者は、紛争がある場合に公開鍵とAliceのアイデンティティとの関連性を証明することができる。
Alice103aは、署名にSIGHASH_SINGLE(0x03)とSIGHASH_ANYONECANPAY(0x80)を使用する。SIGHASH_ANYONECANPAYは、他人がトランザクションに資金を調達することを可能にする。この例では、商人のCharlieがトランザクションに資金を提供する。SIGHASH_SINGLEは、Aliceのインプットと第1アウトプットを保護する。OP_RETURNアウトプットは署名によって保護されないことに注意されたい。しかし、OP_RETURNを変更すると、第1アウトプットに埋め込まれているハッシュ値とは異なるハッシュ値になる。このハッシュ値は、署名によって保護されている。また、data1への変更を含むインプットへの変更は、前のロックスクリプトでチェックしたときに失敗する。
現時点では、トランザクション手数料がないため、トランザクションTxID2はマイナーにとって有効ではない可能性がある。しかし、Charlie103cは、Alice103aの支払いを検証するために必要なすべての情報を含んでおり、Aliceの署名とハッシュ関数は、すべての情報の真正性と完全性を提供する。
Alice103aは、完全にコントロールできるので、カラードアウトポイントを他の方法で使うことができることに注意する。しかし、プロトコルに従わなければ、このアウトポイントで表されるトークン値はすべて失われる。
ステップ7:H0はハッシュ関数double-SHA256、OP_HASH256を示す。
Charlieは次の計算とチェックを行う:
すべてのチェックが合格した場合、Charlie103cは支払いを受け取り、インプットとアウトプットを追加してトランザクションを更新する。AliceからのトランザクションはSIGHASH_ANYONECANPAYとSIGHASH_SINGLEを使用して署名されるので、CharlieはAliceの署名を無効にすることなくこれを行うことができる。更新されたトランザクションを図13に示す。
第3アウトプットは、Charlie103cへの単なるお釣りである。彼のインプットと彼のお釣りとの差分は、マイナーに支払われるトランザクション手数料である。それに加えて、Charlieのインプットは以下の目的にも役立つ:
1.Aliceの支払証明、
2.支払先Bobへの通知、
3.CharlieがAliceと共謀した場合、法的責任を負うこと。
最終決済:Bob103bは、公開鍵PAiのリストを監視することができ、あるいは、Alice103aからの支払いがあることをCharlie103cから知らされることができる。TxID2'はブロックチェーンに記録されるので、CharlieはBob103bに連絡する緊急性はない。Alice103aは、対応するアウトポイントが使用されているため、Charlieへの支払いを2倍にすることはできない。決済は、Aliceの口座からCharlieの口座に残高を振り替えることにより、法定紙幣でBob103bが実行することができる。
あるいは、ブロックチェーンからの信頼を利用するために、Charlie103cはステップ8のTxID2'でアウトプットを色付けし、彼の75ポンドを分割可能なトークンとして使うことができる。次の受信者、たとえば木材業者のDaveは、TxID1まで遡るすべての情報を検証しなければならない。
非負整数tについて、トークンを2T個のピースに分割するメカニズムは、一般的にどのトークンシステムにも適用できる。トークンの発行者がWilliam整数Nを認識する限り、トークンの所有者は、自分が望むようにトークンを分割する柔軟性を持つ。トークンを交換するために必要なすべての情報をブロックチェーン上に置くことは、トークンの小部分を交換する安全な方法を作り出す。
結論
上記の実施形態は、単なる例示として説明したものであることが理解されるであろう。より一般的には、以下の記述のうちの任意の1つ以上に従った方法、装置またはプログラムが提供され得る。
(Statement1)コンピュータに実装される、ブロックチェーンについての第2トランザクションを生成する方法であって、 前記ブロックチェーンは、第1トランザクションであって、前記第1トランザクションは、第1トークンと、第2パーティおよび第1パーティの間でデジタルアセットの量を移転する第1アウトプットとを含み、第1トークンは、前記デジタルアセット以外のトークンアセットの第1の量を表す、第1トランザクションと、 第2トランザクションであって、第1パーティから第3パーティへ前記トークンアセットの第2の量を表す第2トークンを移転するためのものである、第2トランザクションと、 前記第2トランザクションを生成するステップであって、前記第2トランザクションは、i)前記第1トランザクションの前記第1アウトプットをアンロックするように構成された第1インプットと、ii)前記第2トークンを含む第1アウトプットとを含み、前記第2トークンは、前記トークンアセットの前記第2の量を表すデータを含み、前記第2の量は、前記第1の量よりも小さい、ステップと、 を含む方法。
(Statement2)前記トークンアセットの前記第2の量を表す前記データは、1つ以上の値を含み、各値は、前記トークンアセットの前記第1の量のそれぞれのサブ量を表すために使用される、Statement1に記載の方法。
前記方法は、前記第2トランザクションを前記第2パーティへおよび/または前記ブロックチェーンへ前記ブロックチェーンに包含するために送信するステップを含んでよい。
(Statement3)前記第1トランザクションの識別子に基づいて各値が生成される、Statement2に記載の方法。
(Statement4)各値は、前記第1パーティの公開鍵のモジュラスに基づいて生成され、前記第2トランザクションの前記アウトプットは前記モジュラスを含む、Statement2またはStatement3に記載の方法。
(Statement5)各値は、バイナリツリー構造のルートノードに基づいており、前記ルートノードは、前記第1トランザクションの前記識別子および/または前記所定のモジュラスに基づいて生成され、前記ツリー構造は、ルートノードを含むルート層と、1つ以上の子層のシーケンスとを含み、各子層は、1つ以上の子ノードペアを含み、各ペアは、前記構造内の前の層のそれぞれのノードの子であり、各ノードは、前記トークンアセットのそれぞれの量を表し、前記ルートノードは、前記第1の量を表し、各子ノードペアは、共に、前記前の層のそれぞれのノードによって表される量に等しい量を表す、Statement3または4に記載の方法。
(Statement6)前記1つ以上の値のそれぞれは、前記1つ以上の生成されたノードのそれぞれの1つの平方根である、Statement5に記載の方法。
前記方法は、前記ツリー構造の各ノードを生成するステップを含んでよい。代替として、前記方法は、前記ノードのサブセットのみ、たとえば前記トークンアセットの前記第2の量を表すために必要なノード、を生成するステップを含んでよい。
(Statement7)前記ルートノードは、第1の暗号ハッシュ関数を前記第1トランザクションの少なくとも前記識別子に適用することによって生成される、Statement5またはStatement6に記載の方法。
(Statement8)前記ルートノードは、前記第1の暗号ハッシュ関数を少なくとも前記第1トランザクションの前記識別子および前記モジュラスに適用することによって生成される、Statement7に記載の方法。
(Statement9)前記第1トークンが前記モジュラスを含む、Statement8に記載の方法。
(Statement10)前記第1トークンが前記第1の量Aを表し、前記ツリー構造のi番目の層が2i-1のノードを含み、前記i番目の層の各ノードが量A*21-iを表す、Statement5~9のいずれかに記載の方法。
(Statement11)各子ノードペアは、第1の子ノードと第2の子ノードとを含み、i番目の層の各第1子ノードは、前の層のそれぞれのノードの平方根を含み、i番目の層のそれぞれの第2子ノードは、前の層のそれぞれのノードの平方根と、第2暗号ハッシュ関数を第1トランザクションの少なくとも識別子に適用することによって生成されるコンポーネントとを含む、Statement5~10のいずれかに記載の方法。
前記第2暗号ハッシュ関数は、少なくとも前記第1トランザクションの前記識別子および前記モジュラスに適用されてよい。
(Statement12)前記第1および第2の暗号ハッシュ関数は、異なる暗号ハッシュ関数である、Statement7に従属するStatement11に記載の方法。
(Statement13)前記各サブ量が、前記第1の量の異なるサブ量であり、それぞれが前記トークンアセットの異なる量を表す、Statementの1~12のいずれか一項に記載の方法。
(Statement14)前記第2トランザクションの前記第1アウトプットが、使用不可能トランザクションアウトプットである、Statement1~13のいずれかに記載の方法。
(Statement15)前記第1トランザクションの前記第1アウトプットは、前記第1トークンのハッシュを含み、前記第2トランザクションの前記第1インプットは、前記第1トークンを含む、Statement1~14のいずれかに記載の方法。
(Statement16)前記第2トランザクションの前記第1インプットは、前記第1パーティの第1公開鍵と、前記第1公開鍵に対応する第1秘密鍵に基づいて生成されるデジタル署名とを含む、Statement1~15のいずれかに記載の方法。
(Statement17)前記第1トランザクションが前記第2パーティによって生成され、前記方法は、
第1パーティの第2公開鍵に対応する秘密鍵および第2パーティの公開鍵に基づく共有秘密鍵を生成するステップと、
前記共有秘密鍵および第1パーティの前記第2公開鍵に基づいて、第1パーティの第1公開鍵を生成するステップと、
を含むStatement16に記載の方法:
(Statement18)前記第2パーティおよび前記第3パーティは同一のパーティである、Statement17に記載の方法。
(Statement19)前記第1パーティの第3の公開鍵を生成するステップであって、前記第3公開鍵はモジュラスを含む、ステップと、
前記第1パーティの前記第3公開鍵を前記第2パーティへ送信するステップと、
を含むStatement4に従属するStatement1~18のいずれか一項に記載の方法。
(Statement20)前記第2トランザクションの前記第1インプットが、前記第3パーティが前記第2トランザクションに第2インプットを追加することを可能にするように構成される、Statement1~19のいずれか一項に記載の方法。
(Statement21)コンピュータにより実施される、ブロックチェーンのための第2トランザクションを生成する方法であって、前記ブロックチェーンは第1トランザクションを含み、前記第1トランザクションは、第1トークンと、第2パーティから第1パーティへデジタルアセットの量を移転する第1アウトプットとを含み、前記第1トークンは前記デジタルアセット以外のトークンアセットの第1の量を表し、第2トランザクションは、第1パーティから第3パーティへ前記トークンアセットの第2の量を表す第2トークンを移転するためのものであり、前記方法は、前記第3パーティにより実行され、
前記第2トランザクションを取得するステップであって、前記第2トランザクションは、i)前記第1トークンを含む第1インプットと、ii)前記第2トークンを含む第1アウトプットとを含み、前記第2トークンは、1つ以上の値を含み、各値は前記トークンアセットのそれぞれのサブ量を表すために私用される、ステップと、
a)各値が少なくとも前記第1トランザクションの識別子に基づき生成れたか、およびb)前記第2トランザクションの中の前記第1トークンが前記第1トランザクションの中の前記第1トークンと同一であるかに基づき、第2トランザクションが有効かどうかを決定するステップと、
前記決定に基づき、前記第3パーティの公開鍵により前記第2トランザクションに署名することにより、前記第2トランザクションを更新するステップと、
前記ブロックチェーンに含めるために、更新した第2トランザクションを前記ブロックチェーンネットワークへ送信するステップと、
を含む方法。
(Statement22)前記第1トークンは、前記第1パーティの公開鍵のモジュラスを含み、前記決定するステップは、c)各値が少なくとも前記第1トランザクションの前記識別子および前記モジュラスに基づき生成されているかどうかを決定するステップを含む、Statement21に記載の方法。
(Statement23)前記決定するステップは、d)各値が、バイナリツリー構造のルートノードに基づいているかどうかを決定するステップを含み、前記ルートノードは、前記第1トランザクションの前記識別子および/または前記所定のモジュラスに基づいて生成され、前記ツリー構造は、ルートノードを含むルート層と、1つ以上の子層のシーケンスとを含み、各子層は、1つ以上の子ノードペアを含み、各ペアは、前記構造内の前の層のそれぞれのノードの子であり、各ノードは、前記トークンアセットのそれぞれの量を表し、前記ルートノードは、前記第1の量を表し、各子ノードペアは、共に、前記前の層のそれぞれのノードによって表される量に等しい量を表す、Statement21または22に記載の方法。
(Statement24)前記1つ以上の値に対応するそれぞれのノードにより表されるそれぞれの量に基づき、前記第2トークンの前記第2の量を決定するステップ、を含むStatement23に記載の方法。
(Statement25)前記第1トランザクションは、前記第1トークンのハッシュを含み、a)前記第2トランザクションの中の前記第1トークンが前記第1トランザクションの中の前記第1トークンと同一であるかどうかを決定するステップは、前記第2トランザクションの中の前記第1トークンのハッシュが前記第1トランザクションの中の前記第1トークンのハッシュと同一であることを決定するステップを含む、Statement21~24のいずれかに記載の方法。
(Statement26)前記決定するステップは、d)前記第2トランザクションの前記第1インプットにより参照される前記第1トランザクションのアウトプットが未使用トランザクションアウトプットであるかどうかを決定するステップを含む、Statement21~25のいずれかに記載の方法。
(Statement27)前記第2トランザクションは、前記第2トークンのハッシュを含み、前記決定するステップは、e)前記第2トークンのハッシュが前記第2トランザクションの中の前記第2トークンのハッシュと等しいかどうかを決定するステップを含む、Statement21~26のいずれかに記載の方法。
(Statement28)前記取得するステップは、前記第1パーティから前記第2トランザクションを受信するステップを含む、Statement21~27のいずれかに記載の方法。
(Statement29)前記第1トランザクションを生成するステップであって、前記第1トランザクションは、i)前記第2トランザクションのインプットと一緒に実行されるとき、前記第2トランザクションの前記インプットがアンロックされるために前記第1パーティの第1公開鍵を含むことを要求するよう構成される第1アウトプットを含む、ステップと、
前記ブロックチェーンに含めるために、前記第1トランザクションを前記ブロックチェーンネットワークへ送信するステップと、
を含むStatement21~28のいずれかに記載の方法。
(Statement30)コンピュータにより実施される、ブロックチェーンのための第1トランザクションを生成する方法であって、前記第1トランザクションは、第2パーティから第1パーティへデジタルアセットの量を移転する第1アウトプットを含み、前記第1トランザクションは、前記第2パーティから前記第1パーティへ第1トークンを移転するためのものであり、前記第1トークンは前記デジタルアセット以外のトークンアセットの第1の量を表し、前記方法は、前記第2パーティにより実行され、
前記第1トランザクションを生成するステップであって、前記第1トランザクションは、i)第2トランザクションのインプットと一緒に実行されるとき、前記第2トランザクションのインプットがアンロックされるために前記第1パーティの第1公開鍵を含むことを要求するよう構成される第1アウトプットと、ii)前記第1トークンを含む第2アウトプットと、を含み、前記第1トークンは、a)前記トークンアセットの第1の量と、b)前記第1パーティの暗号化識別子であって、前記暗号化識別子は、前記第1パーティの第2公開鍵を用いて前記第1パーティの識別子を暗号化することにより生成される暗号化識別子と、を含み、前記第2公開鍵はモジュラスを含み、前記第1トークンはc)モジュラスを含む、ステップ、を含む方法。
(Statement31)前記第1パーティの前記識別子は、前記第1パーティの第3公開鍵である、Statement30に記載の方法。
(Statement32)前記第2パーティの秘密鍵および前記第1パーティの前記第2公開鍵に基づき共有秘密鍵を生成するステップと、
前記共有秘密鍵および前記第1パーティの前記第2公開鍵に基づいて、前記第1パーティの前記第1公開鍵を生成するステップと、
を含むStatement30または31に記載の方法。
(Statement33)前記第1パーティから前記第1パーティの前記第2公開鍵および/または第3公開鍵を取得するステップ、を含むStatement31または32に記載の方法。
(Statement34)前記第1トランザクションは、iii)前記第4トランザクションのインプットと一緒に実行されるとき、前記第4トランザクションの前記インプットがアンロックされるために前記第2パーティの第1公開鍵を含むことを要求するよう構成される第3アウトプットを含む、Statement30~33のいずれかに記載の方法。
(Statement35)前記第1トランザクションの前記第1アウトプットは、前記第2トランザクションの前記インプットと一緒に実行されるとき、前記第2トランザクションの前記インプットが前記第1トークンを含むことを要求するよう構成されるハッシュパズルを含む、Statement30~34のいずれかに記載の方法。
(Statement36)前記ブロックチェーンに含めるために、前記ブロックチェーンネットワークへ前記第1トランザクションを送信するステップ、を含むStatement30~35のいずれかに記載の方法。
(Statement37)前記第1パーティの前記第2公開鍵を取得するステップと、
前記第2公開鍵が信頼できるパーティにより認証されていることを決定するステップと、
を含み、
前記送信するステップは、前記第2公開鍵が認証されている場合にのみ、前記第1トランザクションを送信するステップを含む、Statement30~36のいずれかに記載の方法。
(Statement38)第1パーティのコンピュータ機器であって、
1つ以上のメモリユニットを含むメモリと、
1つ以上の処理ユニットを含む処理機器と、
を含み、
前記メモリは、前記処理機器上で実行するよう構成されるコードを格納し、前記コードはStatement1~20のいずれかに記載の方法を実行するよう構成される、コンピュータ機器。
(Statement39)コンピュータ可読記憶装置上に具現化され、第1パーティのコンピュータ機器上で実行されるとStatement1~20のいずれかに記載の方法を実行するよう構成される、コンピュータプログラム。
(Statement40)第3パーティのコンピュータ機器であって、
1つ以上のメモリユニットを含むメモリと、
1つ以上の処理ユニットを含む処理機器と、
を含み、
前記メモリは、前記処理機器上で実行するよう構成されるコードを格納し、前記コードはStatement21~29のいずれかに記載の方法を実行するよう構成される、コンピュータ機器。
(Statement41)コンピュータ可読記憶装置上に具現化され、第3パーティのコンピュータ機器上で実行されるとStatement21~29のいずれかに記載の方法を実行するよう構成される、コンピュータプログラム。
(Statement42)第2パーティのコンピュータ機器であって、
1つ以上のメモリユニットを含むメモリと、
1つ以上の処理ユニットを含む処理機器と、
を含み、
前記メモリは、前記処理機器上で実行するよう構成されるコードを格納し、前記コードはStatement30~37のいずれかに記載の方法を実行するよう構成される、コンピュータ機器。
(Statement43)コンピュータ可読記憶装置上に具現化され、第2パーティのコンピュータ機器上で実行されるとStatement30~37のいずれかに記載の方法を実行するよう構成される、コンピュータプログラム。
(Statement44)ブロックチェーンに含まれるための第1トランザクションであって、前記第1トランザクションは、第2パーティから第1パーティへ第1トークンを移転するためのものであり、前記第1トークンはトークンアセットの第1の量を表し、前記第1トランザクションは、i)第2トランザクションのインプットと一緒に実行されるとき、前記第2トランザクションのインプットがアンロックされるために前記第1パーティの第1公開鍵を含むことを要求するよう構成される第1アウトプットと、ii)前記第1トークンを含む第2アウトプットと、を含み、前記第1トークンは、a)前記トークンアセットの第1の量と、b)前記第1パーティの暗号化識別子であって、前記暗号化識別子は、前記第1パーティの第2公開鍵を用いて前記第1パーティの識別子を暗号化することにより生成される暗号化識別子と、を含み、前記第2公開鍵はモジュラスを含み、前記第1トークンはc)前記モジュラスを含む、第1トランザクション。
(Statement45)Statement44に記載の第1トランザクションを格納しているコンピュータ可読記憶媒体。
(Statement46)ブロックチェーンに含まれるための第2トランザクションであって、前記第2トランザクションは、第1パーティから第3パーティへトークンアセットの第2の量を表す第2トークンを移転するためのものであり、前記第2トランザクションは、i)デジタルアセットの量を第2パーティから第1パーティへ移転する第1トランザクションの第1アウトプットをアンロックするよう構成される第1インプットであって、前記デジタルアセットは前記トークンアセットと異なる、第1インプットと、ii)前記第2トークンを含む第1アウトプットであって、前記第2トークンは、前記トークンアセットの前記第2の量を表すデータを含み、前記第2の量は前記第1の量より少ない、第1アウトプットと、を含む、第2トランザクション。
(Statement47)Statement46に記載の第1トランザクションを格納しているコンピュータ可読記憶媒体。
本願明細書に開示される技術の別の態様によると、前記第1、第2、および第3パーティのうちの一部または全部の動作を含む方法が提供され得る。
本願明細書に開示される技術の別の態様によると、前記第1、第2、および第3パーティのうちの一部または全部のコンピュータ機器を含むシステムが提供され得る。
本願明細書に開示される技術の別の態様によると、前記第1および第2トランザクションを含むトランザクションのセットが提供され得る。
開示された技術の他の変形例または使用事例は、本願明細書で開示されると、当業者に明らかになり得る。本開示の範囲は、記載された実施形態によって限定されるものではなく、添付のStatementによってのみ限定される。