例示的なシステムの概要
図1は、一般に、ブロックチェーン150を実装するための例示的なシステム100を示す。システム100は、典型的にはインターネットなどの広域インターネットワークであるパケット交換ネットワーク101を含む。パケット交換ネットワーク101は、パケット交換ネットワーク101内にピアツーピア(P2P)オーバーレイネットワーク106を形成するように構成された複数のノード104を含む。各ノード104は、ピアのコンピュータ機器を含み、ノード104のうちの異なるものが異なるピアに属する。各ノード104は、1つまたは複数のプロセッサ、例えば1つまたは複数の中央処理装置(CPU)、アクセラレータプロセッサ、特定用途向けプロセッサおよび/またはフィールドプログラマブルゲートアレイ(FPGA)を備える処理装置を含む。各ノードはまた、メモリ、すなわち、1つまたは複数の非一時的コンピュータ可読媒体の形態のコンピュータ可読ストレージを備える。メモリは、1つまたは複数のメモリ媒体、例えば、ハードディスクなどの磁気媒体、ソリッドステートドライブ(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(「フルコピー」ノードと呼ばれることもある)の役割を引き受け、その各々が、同じブロックチェーン150のそれぞれのコピーをそれぞれのメモリに格納する。各マイナーノード104Mはまた、ブロック151にマイニングされるのを待っているトランザクション152のプール154を維持する。所与のノード104は、フォワーディングノード104、マイナー104M、ストレージノード104S、またはこれらのうちの2つもしくはすべての任意の組合せであり得る。
所与の現在のトランザクション152jにおいて、入力(または各入力)は、トランザクションのシーケンスにおける先行するトランザクション152iの出力を参照するポインタを含み、この出力が現在のトランザクション152jにおいて償還または「使用」されるべきであることを指定する。一般に、先行するトランザクションは、プール154または任意のブロック151内の任意のトランザクションであり得る。先行するトランザクション152iは、現在のトランザクションが有効となるために存在しかつ妥当性確認される必要があるが、先行するトランザクション152iは、現在のトランザクション152jが作成されるときまたはネットワーク106に送信されるときに必ずしも存在する必要はない。したがって、本明細書における「先行する(preceding)」は、ポインタによってリンクされた論理シーケンスにおける先行するものを指し、必ずしも時間シーケンスにおける作成または送信の時間を指すものではなく、したがって、トランザクション152i、152jが順不同に作成または送信されることを必ずしも除外するものではない(オーファントランザクションに関する以下の説明を参照)。先行するトランザクション152iは、先のトランザクション(antecedent transaction)または先行したトランザクション(predecessor transaction)とも呼ばれる。
現在のトランザクション152jの入力はまた、先行するトランザクション152iの出力がロックされるユーザ103aの署名を含む。次に、現在のトランザクション152jの出力は、新しいユーザ103bに暗号的にロックされ得る。したがって、現在のトランザクション152jは、先行するトランザクション152iの入力において定義された額を、現在のトランザクション152jの出力において定義されたように、新しいユーザ103bに転送することができる。場合によっては、トランザクション152は、複数のユーザ(残り(change)を与えるためにそのうちの1人が元のユーザ103aであり得る)間で入力額を分割するために複数の出力を有し得る。場合によっては、トランザクションはまた、1つまたは複数の先行するトランザクションの複数の出力からの額をまとめ、現在のトランザクションの1つまたは複数の出力に再分配するために複数の入力を有することができる。
上記は、「出力ベース」トランザクションプロトコルと呼ばれ得、未使用トランザクション出力(UTXO)タイププロトコルと呼ばれることもある(ここでは出力はUTXOと呼ばれる)。ユーザの総残高は、ブロックチェーンに格納された任意の1つの数字で定義されるのではなく、代わりに、ユーザは、ブロックチェーン151内の多くの異なるトランザクション152全体に散在しているそのユーザのすべてのUTXOの値を照合するための特別な「ウォレット」アプリケーション105を必要とする。
トランザクションプロトコルの代替的なタイプは、アカウントベースのトランザクションモデルの一部として、「アカウントベース」プロトコルと呼ばれ得る。アカウントベースの場合、各トランザクションは、一連の過去のトランザクションにおける先行するトランザクションのUTXOを参照することによってではなく、絶対アカウント残高を参照することによって転送されるべき額を定義する。すべてのアカウントの現在の状態は、ブロックチェーンとは別にマイナーによって格納され、絶えず更新される。そのようなシステムでは、トランザクションは、アカウントの実行中のトランザクションタリー(「ポジション」とも呼ばれる)を使用して順序付けられる。この値は、送信者によってその暗号署名の一部として署名され、トランザクション参照計算の一部としてハッシュされる。加えて、トランザクションにおける任意選択のデータフィールドも署名され得る。このデータフィールドは、例えば、前のトランザクションIDがデータフィールドに含まれている場合、前のトランザクションを指し示し得る。
いずれかのタイプのトランザクションプロトコルを用いて、ユーザ103が新しいトランザクション152jを成立させることを望む場合、ユーザは新しいトランザクションをユーザのコンピュータ端末102からP2Pネットワーク106のノード104(これは、今日では典型的にはサーバまたはデータセンタであるが、原理的には他のユーザ端末であってもよい)のうちの1つに送信する。このノード104は、ノード104の各々において適用されるノードプロトコルにしたがってトランザクションが有効であるかどうかをチェックする。ノードプロトコルの詳細は、当該ブロックチェーン150において使用されているトランザクションプロトコルのタイプに対応し、全体としてトランザクションモデルを形成する。ノードプロトコルは、典型的には、新しいトランザクション152j内の暗号署名が、トランザクション152の順序付けられたシーケンス内で前のトランザクション152iに依存する予想される署名と一致することをチェックするようにノード104に求める。出力ベースの場合、これは、新しいトランザクション152jの入力に含まれるユーザの暗号署名が、新しいトランザクションが使用する先行するトランザクション152iの出力において定義される条件と一致することをチェックすることを含み得、この条件は、典型的には、新しいトランザクション152jの入力における暗号署名が、新しいトランザクションの入力が指し示す前のトランザクション152iの出力をロック解除することをチェックすることを少なくとも含む。いくつかのトランザクションプロトコルでは、条件は、入力および/または出力に含まれるカスタムスクリプトによって少なくとも部分的に定義され得る。代替的に、単にノードプロトコルのみによって固定されてもよく、またはこれらの組合せによるものであってもよい。いずれにしても、新しいトランザクション152jが有効である場合、現在のノードは、それをP2Pネットワーク106内のノード104のうちの1つまたは複数の他のノードにフォワードする。これらのノード104のうちの少なくともいくつかは、フォワーディングノード104Fとしても機能し、同じノードプロトコルにしたがって同じテストを適用し、そして、新しいトランザクション152jを1つまたは複数のさらなるノード104にフォワードし、以下同様である。このようにして、新しいトランザクションはノード104のネットワーク全体に伝搬される。
出力ベースのモデルでは、所与の出力(例えば、UTXO)が使用されたかどうかの定義は、それがノードプロトコルにしたがって別の前方のトランザクション152jの入力によって有効に償還されたかどうかかである。トランザクションが有効であるための別の条件は、それが使用または償還しようとする先行する遷移152iの出力が、別の有効なトランザクションによってまだ使用/償還されていないことである。同様に、有効でない場合、トランザクション152jは、ブロックチェーンに伝搬も記録もされない。これは、使用者が同じトランザクションの出力を複数回使用しようとする二重支出を防止する。一方、アカウントベースのモデルは、アカウント残高を維持することによって二重支出を防止する。ここでも、トランザクション順序が定義されているので、アカウント残高は常に単一の定義された状態にある。
妥当性確認に加えて、ノード104Mのうちの少なくともいくつかはまた、「プルーフオブワーク」に支えられるマイニングとして知られるプロセスにおいてトランザクションのブロックを最初に作成しようと競い合う。マイニングノード104Mにおいて、ブロック内にまだ現れていない有効なトランザクションのプールに新しいトランザクションが追加される。次いで、マイナーは、暗号パズルを解くことを試みることによって、トランザクションのプール154からトランザクション152の新しい有効ブロック151を組み立てようと競い合う。典型的には、これは、ノンスがトランザクションのプール154と連結されハッシュされたときにハッシュの出力が所定の条件を満たすような「ノンス」値を探索することを含む。例えば、所定の条件とは、ハッシュの出力が特定の所定の数の先行ゼロを有することであり得る。ハッシュ関数の特性は、その入力に対して予測不可能な出力を持つことである。したがって、この探索は、総当たりでしか実行することができないので、パズルを解こうとしている各ノード104Mでかなりの量の処理リソースを消費する。
最初にパズルを解いたマイナーノード104Mは、これをネットワーク106に公表し、後にネットワーク内の他のノード104によって容易にチェックすることができるその解を証明として提供する(ハッシュに対する解が与えられると、ハッシュの出力が条件を満たすことをチェックすることは簡単である)。勝者がパズルを解いたトランザクションのプール154は、次いで、ストレージノード104Sとして機能するノード104のうちの少なくともいくつかによって、そのような各ノードにおいて勝者が公表した解をチェックしたことに基づいて、ブロックチェーン150内に新しいブロック151として記録されるようになる。ブロックポインタ155はまた、チェーン内の前に作成されたブロック151n-1を指し示す新しいブロック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はまた、そのトランザクションが含まれたブロック151nを作成した勝利マイナー104Mにさらに報酬を与えるために、その出力の1つにおいて追加のトランザクション手数料を指定する。
マイニングに関与する計算リソースに起因して、典型的には、マイナーノード104Mの少なくとも各々は、1つまたは複数の物理サーバユニットを含むサーバの形態をとるか、またはデータセンタ全体の形態をとる。各フォワーディングノード104Mおよび/またはストレージノード104Sもまた、サーバまたはデータセンタの形態をとり得る。しかしながら、原則として、任意の所与のノード104は、一緒にネットワーク化されたユーザ端末またはユーザ端末のグループの形態をとることができる。
各ノード104のメモリは、そのそれぞれの1つまたは複数の役割を実行し、ノードプロトコルにしたがってトランザクション152を処理するために、ノード104の処理装置上で実行ように構成されたソフトウェアを記憶する。本明細書においてノード104に帰する任意のアクションは、それぞれのコンピュータ機器の処理装置上で実行されるソフトウェアによって実行され得ることが理解されよう。また、本明細書で使用される「ブロックチェーン」という用語は、一般に、この種類の技術を指す総称であり、任意の特定の専有のブロックチェーン、プロトコルまたはサービスに限定されない。
消費ユーザの役割を果たす複数の当事者103の各々のコンピュータ機器102もネットワーク101に接続されている。これらは、トランザクションにおいて支払人および受取人として機能するが、他の当事者に代わってトランザクションのマイニングまたは伝搬に必ずしも参加するわけではない。それらは、マイニングプロトコルを必ずしも実行するわけではない。2つの当事者103およびそれらのそれぞれの機器102、すなわち、第1の当事者103aおよびそのそれぞれのコンピュータ機器102a、ならびに第2の当事者103bおよびそのそれぞれのコンピュータ機器102bは、例示の目的で示されている。はるかに多くのそのような当事者103およびそれらのそれぞれのコンピュータ機器102が存在し、システムに参加し得るが、便宜上、それらは図示されていないことが理解されよう。各当事者103は、個人または組織であり得る。純粋に例示として、第1の当事者103aは、本明細書ではアリスと呼ばれ、第2の当事者103bはボブと呼ばれるが、これは限定的なものではなく、本明細書におけるアリスまたはボブへのいかなる参照も、それぞれ「第1の当事者」および「第2の当事者」と置き換えられ得ることが理解されよう。
各当事者103のコンピュータ機器102は、1つまたは複数のプロセッサ、例えば、1つまたは複数のCPU、GPU、他のアクセラレータプロセッサ、特定用途向けプロセッサ、および/またはFPGAを含むそれぞれの処理装置を備える。各当事者103のコンピュータ機器102は、メモリ、すなわち、1つまたは複数の非一時的コンピュータ可読媒体の形態のコンピュータ可読ストレージを備える。このメモリは、1つまたは複数のメモリ媒体、例えば、ハードディスクなどの磁気媒体、SSD、フラッシュメモリもしくはEEPROMなどの電子媒体、および/または光ディスクドライブなどの光学媒体を使用する1つまたは複数のメモリユニットを備え得る。各当事者103のコンピュータ機器102上のメモリは、処理装置上で実行するように構成された少なくとも1つのクライアントアプリケーション105のそれぞれのインスタンスを含むソフトウェアを記憶する。本明細書において所与の当事者103に帰する任意のアクションは、それぞれのコンピュータ機器102の処理装置上で実行されるソフトウェアを使用して実行され得ることが理解されよう。各当事者103のコンピュータ機器102は、少なくとも1つのユーザ端末、例えば、デスクトップもしくはラップトップコンピュータ、タブレット、スマートフォン、またはスマートウォッチなどのウェアラブルデバイスを含む。所与の当事者103のコンピュータ機器102はまた、ユーザ端末を介してアクセスされるクラウドコンピューティングリソースなどの1つまたは複数の他のネットワーク化されたリソースを含み得る。
クライアントアプリケーションまたはソフトウェア105は、最初に、適切な1つまたは複数のコンピュータ可読記憶媒体上で任意の所与の当事者103のコンピュータ機器102に提供され得、例えば、サーバからダウンロードされ得るか、またはリムーバブルSSD、フラッシュメモリキー、リムーバブルEEPROM、リムーバブル磁気ディスクドライブ、磁気フロッピーディスクもしくはテープ、CDもしくはDVD ROMなどの光ディスク、またはリムーバブル光学ドライブなどのリムーバブル記憶デバイス上で提供され得る。
クライアントアプリケーション105は、少なくとも「ウォレット」機能を備える。これは2つの主要な機能を有する。これらのうちの1つは、それぞれのユーザ当事者103が、ノード104のネットワーク全体に伝搬され、それによってブロックチェーン150に含まれることとなるトランザクション152を作成し、署名し、送信することを可能にすることである。もう1つは、それぞれの当事者に、その当事者が現在所有しているデジタル資産の額を報告することである。出力ベースのシステムでは、この第2の機能は、当該当事者に属するブロックチェーン150全体に散在している様々なトランザクション152の出力において定義された額を照合することを含む。
各コンピュータ機器102上のクライアントアプリケーション105のインスタンスは、P2Pネットワーク106のフォワーディングノード104Fのうちの少なくとも1つに動作可能に結合される。これにより、クライアント105のウォレット機能はトランザクション152をネットワーク106に送信することができる。クライアント105はまた、それぞれの当事者103が受信者である任意のトランザクションについてブロックチェーン150にクエリを行うために、ストレージノード104のうちの1つ、いくつか、またはすべてにコンタクトすることができる(または、実施形態では、ブロックチェーン150は、部分的にその公開性(public visibility)を通じてトランザクションにおける信頼を提供する公開施設であるので、実際にブロックチェーン150における他の当事者のトランザクションを検査する)。各コンピュータ機器102上のウォレット機能は、トランザクションプロトコルにしたがってトランザクション152を定式化し、送信するように構成される。各ノード104は、ノードプロトコルにしたがってトランザクション152を妥当性確認するように構成されたソフトウェアを実行し、フォワーディングノード104Fの場合には、トランザクション152をネットワーク106全体に伝搬させるためにそれらをフォワードするように構成される。トランザクションプロトコルおよびノードプロトコルは互いに対応し、所与のトランザクションプロトコルは所与のノードプロトコルと共に進行し、一緒に所与のトランザクションモデルを実装する。ブロックチェーン150内のすべてのトランザクション152に対して同じトランザクションプロトコルが使用される(ただし、トランザクションプロトコルは、その中のトランザクションの異なるサブタイプを可能にし得る)。ネットワーク106内のすべてのノード104によって同じノードプロトコルが使用される(ただし、これは、トランザクションの異なるサブタイプを、そのサブタイプに対して定義された規則にしたがって異なって処理し、また、異なるノードが異なる役割を担い、したがってプロトコルの異なる対応する態様を実装することができる)。
述べたように、ブロックチェーン150は、ブロック151のチェーンを含み、各ブロック151は、前述したようなプルーフオブワークプロセスによって作成された1つまたは複数のトランザクション152のセットを含む。各ブロック151はまた、ブロック151へのシーケンシャル順序を定義するために、チェーン内の前に作成されたブロック151を指し示すブロックポインタ155を含む。ブロックチェーン150は、プルーフオブワークプロセスによって新しいブロックに含まれるのを待っている有効なトランザクションのプール154も含む。各トランザクション152(生成トランザクション以外)は、トランザクションのシーケンスへの順序を定義するように、前のトランザクションへ戻るポインタを含む(注意:トランザクション152のシーケンスは分岐することが可能である)。ブロック151のチェーンは、チェーン内の最初のブロックであった発生ブロック(Gb)153までずっと戻る。チェーン150内の早期にある1つまたは複数の元のトランザクション152は、先行するトランザクションではなく発生ブロック153を指し示していた。
所与の当事者103、例えばアリスが、ブロックチェーン150に含まれるべき新しいトランザクション152jを送信することを望むとき、アリスは、関連のあるトランザクションプロトコルにしたがって(アリスのクライアントアプリケーション105内のウォレット機能を使用して)新しいトランザクションを定式化する。次いで、アリスは、クライアントアプリケーション105から、アリスが接続されている1つまたは複数のフォワーディングノード104Fのうちの1つにトランザクション152を送信する。例えば、これは、アリスのコンピュータ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の最新バージョンに対してプルーフオブワークパズルを解こうと競い始める(他のマイナー104Mは、プール154の古いビューに基づいてパズルを解こうと試みている可能性があるが、誰が最初に到達しても、次の新しいブロック151がどこで終わり新しいプール154がどこで開始するかを定義することとなり、最終的には、誰かが、アリスのトランザクション152jを含むプール154の一部についてパズルを解く)。新しいトランザクション152jを含むプール154に対してプルーフオブワークが行われると、それは不変的にブロックチェーン150内のブロック151のうちの1つの一部となる。各トランザクション152は、前のトランザクションへ戻るポインタを含むので、トランザクションの順序も不変的に記録される。
UTXOベースのモデル
図2は、例示的なトランザクションプロトコルを示す。これは、UTXOベースのプロトコルの一例である。トランザクション152(「Tx」と略記される)は、ブロックチェーン150の基本的なデータ構造である(各ブロック151は1つまたは複数のトランザクション152を含む)。以下では、出力ベースまたは「UTXO」ベースのプロトコルを参照して説明する。しかしながら、これはすべての可能な実施形態に限定されない。
UTXOベースのモデルでは、各トランザクション(「Tx」)152は、1つまたは複数の入力202と、1つまたは複数の出力203とを含むデータ構造を含む。各出力203は、未使用トランザクション出力(UTXO)を含み得、これは、(UTXOがまだ償還されていない場合)別の新しいトランザクションの入力202のソースとして使用され得る。UTXOは、デジタル資産(価値の蓄蔵)の額を指定する。それはまた、他の情報の中でも、元となるトランザクションのトランザクションIDを含み得る。トランザクションのデータ構造はヘッダ201も含み得、ヘッダ201は、入力フィールド(複数可)202および出力フィールド(複数可)203のサイズを示すインジケータを含み得る。ヘッダ201はまた、トランザクションのIDを含み得る。実施形態では、トランザクションIDは、(トランザクションID自体を除く)トランザクションデータのハッシュであり、マイナー104Mにサブミットされる生トランザクション152のヘッダ201に格納される。
図2の各出力はUTXOとして示されているが、トランザクションは、追加的にまたは代替的に、1つまたは複数の使用不可能なトランザクション出力を含み得ることに留意されたい。
アリス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の1つまたは複数の出力203のうちの1つは、本明細書ではUTXO0とラベル付けされた特定のUTXOを含む。各UTXOは、UTXOによって表されるデジタル資産の額を指定する値と、ロックスクリプトとを含み、ロックスクリプトは、後続のトランザクションが妥当性確認され、したがってUTXOが正常に償還されるために、後続のトランザクションの入力202内のロック解除スクリプトが満たさなければならない条件を定義する。典型的には、ロックスクリプトは、その額を特定の当事者(それが含まれるトランザクションの受益者)にロックする。すなわち、ロックスクリプトは、典型的には、後続のトランザクションの入力内のロック解除スクリプトに、先行するトランザクションがロックされる当事者の暗号署名が含まれるという条件を含むロック解除条件を定義する。
ロックスクリプト(通称scriptPubKey)は、ノードプロトコルによって認識されるドメイン固有言語で書かれたコードの一部分である。そのような言語の特定の例は、「スクリプト」(大文字S)と呼ばれる。ロックスクリプトは、トランザクション出力203を使用するためにどの情報が必要とされるか、例えばアリスの署名の要件を指定する。ロック解除スクリプトはトランザクションの出力に現れる。ロック解除スクリプト(通称scriptSig)は、ロックスクリプト基準を満たすのに必要な情報を提供するドメイン固有言語で書かれたコードの一部分である。例えば、ボブの署名を含み得る。ロック解除スクリプトは、トランザクションの入力202に現れる。
つまり、図示の例では、Tx0の出力203内のUTXO0は、UTXO0が償還されるために(厳密には、UTXO0を償還しようとする後続のトランザクションが有効となるために)アリスの署名Sig PAを必要とするロックスクリプト[Checksig PA]を含む。[Checksig PA]は、アリスの公開鍵-秘密鍵ペアからの公開鍵PAを含む。Tx1の入力202は、(例えば、実施形態ではトランザクションTx0全体のハッシュであるそのトランザクションID、TxID0によって)Tx1を指し示すポインタを含む。Tx1の入力202は、Tx0の任意の他の可能な出力の中から、UTXO0を識別するために、Tx0内のそれを識別するインデックスを含む。Tx1の入力202は、アリスが鍵ペアからのアリスの秘密鍵をデータの所定の部分(暗号では「メッセージ」と呼ばれることもある)に適用することによって作成された、アリスの暗号署名を含むロック解除スクリプト<Sig PA>をさらに含む。有効な署名を提供するためにどのデータ(または「メッセージ」)がアリスによって署名される必要があるかは、ロックスクリプトによって、またはノードプロトコルによって、またはこれらの組合せによって定義され得る。
新しいトランザクションTx1がノード104に到着すると、ノードはノードプロトコルを適用する。これは、ロックスクリプトおよびロック解除スクリプトを一緒に実行して、ロック解除スクリプトがロックスクリプトで定義されている条件(この条件は1つまたは複数の基準を含み得る)を満たすかどうかをチェックすることを含む。実施形態では、これは2つのスクリプトを連結することを含む。
<Sig PA> || <PA> [Checksig PA]
ここで、「||」は連結を表し、「<…>」はデータをスタックに置くことを意味し、「[…]」はロック解除スクリプト(この例ではスタックベースの言語)で構成される関数である。同等に、スクリプトは、スクリプトを連結するのではなく、共通スタックを用いて次々に実行され得る。いずれにしても、一緒に実行されるとき、スクリプトは、Tx0の出力内のロックスクリプトに含まれるようなアリスの公開鍵PAを使用して、Tx1の入力内のロックスクリプトが、データの予想される部分に署名したアリスの署名を含むことを認証する。データの予想される部分自体(「メッセージ」)はまた、この認証を実行するためにTx0命令に含まれる必要がある。実施形態では、署名されたデータは、Tx0の全体を含む(つまり、平文のデータの署名された部分を指定する別個の要素は、すでに本質的に存在するので、含まれる必要はない)。
公開-秘密暗号法による認証の詳細は、当業者によく知られている。基本的に、アリスが自身の秘密鍵でメッセージを暗号化することによってメッセージに署名した場合、アリスの公開鍵および平文のメッセージ(暗号化されていないメッセージ)が与えられると、ノード104などの別のエンティティは、メッセージの暗号化バージョンがアリスによって署名されたものに違いないことを認証することができる。署名は、典型的には、メッセージをハッシュし、ハッシュに署名し、これを署名としてメッセージの平文バージョンにタグ付けすることを含み、これにより、公開鍵の任意の保持者が署名を認証することができる。
Tx1内のロック解除スクリプトが、Tx0のロックスクリプト内で指定されている1つまたは複数の条件を満たす場合(つまり、図示の例では、アリスの署名がTx1内で提供され、認証された場合)、ノード104は、Tx1が有効であると見なす。それがマイニングノード104Mである場合、これは、ワークオブプルーフを待つトランザクションのプール154にそれを追加することを意味する。それがフォワーディングノード104Fである場合、トランザクションTx1をネットワーク106内の1つまたは複数の他のノード104にフォワードして、トランザクションTx1がネットワーク全体に伝搬されるようにする。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間で分割され得る。したがって、アリスが、UTXO0において定義された額のすべてをボブに与えたくない場合、アリスは、リマインダを使用して、Tx1の第2の出力において自分自身に残りを与えるか、または別の当事者に支払うことができる。
実際には、今日、生成トランザクションの報酬だけでは、典型的には、マイニングを動機付けるのに十分ではないので、アリスは通常、勝利マイナーに対する手数料を含む必要もある。アリスがマイナーに対する手数料を含めない場合、Tx0は、マイナーノード104Mによって拒否される可能性が高く、したがって、技術的に有効であっても、それは依然として伝搬されず、ブロックチェーン150に含まれない(マイナープロトコルは、マイナー104Mが望まない場合にトランザクション152を受け入れることを強制しない)。いくつかのプロトコルでは、マイニング手数料は、それ自体の別個の出力203を必要としない(すなわち、別個のUTXOを必要としない)。代わりに、所与のトランザクション152の入力(複数可)202によって指し示される総額と出力(複数可)203で指定されている総額との間の差が自動的に勝利マイナー104に与えられる。例えば、UTXO0へのポインタがTx1への唯一の入力であり、Tx1は唯一の出力UTXO1を有するとする。UTXO0で指定されているデジタル資産の額がUTXO1で指定されている額より大きい場合、その差が自動的に勝利マイナー104Mに贈られる。しかしながら、代替的にまたは追加的に、マイナー手数料がトランザクション152のUTXO203のうちのそれ自体の1つにおいて明示的に指定され得ることは必ずしも除外されない。
所与のトランザクション152のすべての出力203で指定されている総額が、そのすべての入力202によって指し示された総額よりも大きい場合、これは、ほとんどのトランザクションモデルにおいて無効性の別の根拠であることにも留意されたい。したがって、そのようなトランザクションは、ブロック151に伝搬もマイニングもされない。
アリスおよびボブのデジタル資産は、ブロックチェーン150内のどこにでもある任意のトランザクション152においてそれらにロックされた未使用UTXOから構成される。したがって、典型的には、所与の当事者103の資産は、ブロックチェーン150全体にわたる様々なトランザクション152のUTXO全体に散在している。ブロックチェーン150内のどこにも、所与の当事者103の総残高を定義する数字は格納されない。クライアントアプリケーション105におけるウォレット機能の役割は、それぞれの当事者にロックされ、別の前方のトランザクションでまだ使用されていない様々なUTXOすべての値を一緒に照合することである。これは、ストレージノード104Sのいずれか、例えば、それぞれの当事者のコンピュータ機器102に最も近いまたは最良に接続されたストレージノード104Sに格納されたブロックチェーン150のコピーにクエリを行うことによって行うことができる。
スクリプトコードは、しばしば、概略的に表される(すなわち、正確な言語ではない)ことに留意されたい。例えば、[Checksig PA]と書くと、[Checksig PA] = OP_DUP OP_HASH160 <H(PA)> OP_EQUALVERIFY OP_CHECKSIGを意味し得る。「OP_...」は、スクリプト言語の特定のオペコードを指す。OP_CHECKSIG(「Checksig」とも呼ばれる)は、2つの入力(署名および公開鍵)を取り、楕円曲線デジタル署名アルゴリズム(ECDSA)を使用して署名の有効性を検証するスクリプトオペコードである。実行時に、署名(「sig」)の存在(occurrence)はスクリプトから除去されるが、ハッシュパズルなどの追加要件は、「sig」入力によって検証されたトランザクションに残る。別の例として、OP_RETURNは、トランザクション内にメタデータを格納することができ、それによってメタデータをブロックチェーン150に不変に記録することができる、トランザクションの使用不可能な出力を作成するためのスクリプト言語のオペコードである。例えば、メタデータは、ブロックチェーンに格納することが望まれる文書を含み得る。
署名PAはデジタル署名である。実施形態において、これは、楕円曲線secp256k1を使用するECDSAに基づく。デジタル署名は、特定のデータの一部分に署名する。実施形態では、所与のトランザクションについて、署名は、トランザクション入力の一部、およびトランザクション出力の全部または一部に署名する。署名された出力の特定の部分は、SIGHASHフラグに依存する。SIGHASHフラグは、どの出力が署名されるかを選択するために署名の最後に含まれる4バイトコードである(したがって、署名時に固定される)。
ロックスクリプトは、それぞれのトランザクションがロックされる当事者の公開鍵を含むという事実を指して、「scriptPubKey」と呼ばれることがある。ロック解除スクリプトは、それが対応する署名を供給するという事実を指して「scriptSig」と呼ばれることがある。しかしながら、より一般的には、UTXOが償還されるための条件が署名を認証することを含むことは、ブロックチェーン150のすべてのアプリケーションにおいて必須ではない。より一般的には、スクリプト言語を使用して、任意の1つまたは複数の条件を定義することができる。したがって、「ロックスクリプト」および「ロック解除スクリプト」というより一般的な用語が好まれ得る。
図3は、ブロックチェーン150を実装するためのさらなるシステム100を示す。システム100は、追加の通信機能が含まれることを除いて、図1に関連して説明したものと実質的に同じである。アリスおよびボブのそれぞれのコンピュータ機器102a、120b上のクライアントアプリケーションは、それぞれ、追加の通信機能を含む。すなわち、これは、(いずれかの当事者または第三者の指示で)アリス103aがボブ103bとの別個のサイドチャネル301を確立することを可能にする。サイドチャネル301は、P2Pネットワークとは別でのデータの交換を可能にする。このような通信は、「オフチェーン」と呼ばれることがある。例えば、これは、当事者の一方がトランザクションをネットワーク106にブロードキャストすることを選択するまで、トランザクションが(まだ)ネットワークP2P106上に公開されたりチェーン150上に進んだりすることなくことなく、アリスとボブとの間でトランザクション152を交換するために使用され得る。代替的にまたは追加的に、サイドチャネル301は、鍵、交渉された額または条件、データコンテンツなどの任意の他のトランザクション関連データを交換するために使用され得る。
サイドチャネル301は、P2Pオーバーレイネットワーク106と同じパケット交換ネットワーク101を介して確立され得る。代替的にまたは追加的に、サイドチャネル301は、モバイルセルラーネットワークなどの異なるネットワーク、またはローカルワイヤレスネットワークなどのローカルエリアネットワーク、またはさらにはアリスのデバイス102aとボブのデバイス102bとの間の直接の有線またはワイヤレスリンクを介して確立され得る。一般に、本明細書のどこかで参照されるサイドチャネル301は、「オフチェーン」すなわちP2Pオーバーレイネットワーク106とは別でデータを交換するための1つまたは複数のネットワーキング技術または通信媒体を介した任意の1つまたは複数のリンクを含み得る。2つ以上のリンクが使用される場合、全体としてのオフチェーンリンクの束または集合がサイドチャネル301と呼ばれ得る。したがって、アリスおよびボブがサイドチャネル301上で情報またはデータの特定の部分などを交換するといわれている場合、これは、これらのデータの部分のすべてが全く同じリンクまたは同じタイプのネットワーク上で送信されなければならないことを必ずしも意味するものではないことに留意されたい。
クライアントソフトウェア
図4Aは、本明細書で開示される方式の実施形態を実装するためのクライアントアプリケーション105の例示的な実装を示す。クライアントアプリケーション105は、トランザクションエンジン401とユーザインターフェース(UI)層402とを含む。トランザクションエンジン401は、上述した方式にしたがって、また、後でさらに詳細に述べるように、例えば、トランザクション152を定式化すること、サイドチャネル301を介してトランザクションおよび/もしくは他のデータを受信および/もしくは送信すること、ならびに/またはP2Pネットワーク106を通して伝搬されるためにトランザクションを送信することなど、クライアント105の基礎となるトランザクション関連機能を実装するように構成される。本明細書に開示される実施形態によれば、各クライアント105のトランザクションエンジン401は、1つまたは複数のシングルユーストークンを含むトランザクションを生成するための機能403を含む。
UI層402は、それぞれのユーザのコンピュータ機器102のユーザ入力/出力(I/O)手段を介してユーザインターフェースをレンダリングするように構成され、これは、機器102のユーザ出力手段を介してそれぞれのユーザ103に情報を出力すること、および機器102のユーザ入力手段を介してそれぞれのユーザ103から入力を受信することを含む。例えば、ユーザ出力手段は、視覚出力を提供するための1つまたは複数のディスプレイスクリーン(タッチスクリーンまたは非タッチスクリーン)、音声出力を提供するための1つまたは複数のスピーカ、および/または触覚出力を提供するための1つまたは複数の触覚出力デバイスなどを含み得る。ユーザ入力手段は、例えば、1つまたは複数のタッチスクリーン(出力手段に使用されるもの/それらと同じまたは異なる)の入力アレイ、マウス、トラックパッドまたはトラックボールなどの1つまたは複数のカーソルベースのデバイス、スピーチまたは音声入力を受信するための1つまたは複数のマイクロフォンおよびスピーチまたは音声認識アルゴリズム、手動または身体ジェスチャの形態で入力を受信するための1つまたは複数のジェスチャベースの入力デバイス、または1つまたは複数の機械式ボタン、スイッチまたはジョイスティックなどを含み得る。
本明細書の様々な機能は、同じクライアントアプリケーション105に統合されるものとして説明され得るが、これは必ずしも限定するものではなく、代わりに、2つ以上の別個のアプリケーション一式、例えば、一方が他方へのプラグインであるか、またはAPI(アプリケーションプログラミングインターフェース)を介してインターフェースするものとして実装され得ることに留意されたい。例えば、トランザクションエンジン401の機能は、UI層402とは別個のアプリケーションにおいて実装され得るか、またはトランザクションエンジン401などの所与のモジュールの機能は、2つ以上のアプリケーション間で分割され得る。また、説明される機能の一部または全部が、例えば、オペレーティングシステム層において実装され得ることも除外されない。本明細書のどこかで単一のまたは所与のアプリケーション105などを参照する場合、これは単なる例であり、より一般的には、説明される機能は任意の形態のソフトウェアで実装され得ることが理解されよう。
図4Bは、アリスの機器102a上のクライアントアプリケーション105aのUI層402によってレンダリングされ得るユーザインターフェース(UI)400の例のモックアップを示す。同様のUIが、ボブの機器102b上のクライアント105bによって、または任意の他の当事者のものによってレンダリングされ得ることが理解されよう。
例示として、図4Bは、アリスの視点からのUI400を示す。UI400は、ユーザ出力手段を介して別個のUI要素としてレンダリングされる1つまたは複数のUI要素411、412、413を含み得る。
例えば、UI要素は、異なるスクリーン上ボタン、またはメニュー内の異なるオプションなどであり得る1つまたは複数のユーザ選択可能要素411を含み得る。ユーザ入力手段は、ユーザ103(この場合ではアリス103a)が、スクリーン上でUI要素をクリックまたはタッチすること、または所望のオプションの名称を発声することなどによって、オプションのうちの1つを選択することまたは他の方法で操作することを可能にするように構成される(注意:本明細書で使用される「手動」という用語は、自動と対比するためにのみ意図されており、必ずしも1つまたは複数の手の使用に限定されない)。オプションにより、ユーザ(アリス)は、シングルユーストークンを有するトランザクションを生成すること、ならびにトークンのルール、条件(terms)および/または条件(conditions)を定義することができる。
代替的にまたは追加的に、UI要素は、ユーザがトークントランザクションを生成することができる1つまたは複数のデータ入力フィールド412を含み得る。これらのデータ入力フィールドは、例えば画面上に、ユーザ出力手段を介してレンダリングされ、ユーザ入力手段、例えばキーボードまたはタッチスクリーンを通してデータがフィールドに入力され得る。代替的に、データは、例えばスピーチ認識に基づいて口述で受信され得る。
代替的にまたは追加的に、UI要素は、ユーザに情報を出力するために出力される1つまたは複数の情報要素413を含んでもよい。例えば、これ/これらは、スクリーン上にまたは聞こえるようにレンダリングされ得る。
様々なUI要素をレンダリングし、オプションを選択し、データを入力する特定の手段は重要ではないことが理解されよう。これらのUI要素の機能については、後でより詳細に説明する。図4Bに示されるUI400は単に図式化されたモックアップであり、実際には、簡潔にするために図示されていない1つまたは複数のさらなるUI要素を含み得ることも理解されよう。
ノードソフトウェア
図5は、UTXOまたは出力ベースのモデルの例において、P2Pネットワーク106の各ノード104上で実行されるノードソフトウェア500の例を示す。ノードソフトウェア500は、プロトコルエンジン501と、スクリプトエンジン502と、スタック503と、アプリケーションレベル決定エンジン504と、1つまたは複数のブロックチェーン関連機能モジュール505のセットとを含む。任意の所与のノード104において、これらは、マイニングモジュール505M、フォワーディングモジュール505F、および格納モジュール505Sのうちのいずれか1つ、2つ、または3つすべてを含み得る(ノードの1つまたは複数の役割に応じて)。プロトコルエンジン401は、トランザクション152の異なるフィールドを認識し、ノードプロトコルにしたがってそれらを処理するように構成される。別の先行するトランザクション152i(Txm-1)の出力(例えば、UTXO)を指し示す入力を有するトランザクション152j(Txj)が受信されると、プロトコルエンジン501は、Txj内のロック解除スクリプトを識別し、それをスクリプトエンジン502に渡す。プロトコルエンジン501はまた、Txjの入力内のポインタに基づいて、Txiを識別し、取り出す。それは、Txiがまだブロックチェーン150上にない場合には保留中のトランザクションのそれぞれのノード自体のプール154から、またはTxiがすでにブロックチェーン150上にある場合にはそれぞれのノードまたは別のノード104に格納されたブロックチェーン150内のブロック151のコピーからTxiを取り出し得る。いずれにしても、スクリプトエンジン501は、Txiの指し示された出力におけるロックスクリプトを識別し、これをスクリプトエンジン502に渡す。
したがって、スクリプトエンジン502は、Txiのロックスクリプトと、Txjの対応する入力からのロック解除スクリプトとを有する。例えば、図2にはTx0およびTx1とラベル付けされたトランザクションが示されているが、トランザクションの任意のペアについても同じことが当てはまり得る。スクリプトエンジン502は、前述したように2つのスクリプトを一緒に実行し、これは、使用されているスタックベースのスクリプト言語(例えば、Script)にしたがって、スタック503上にデータを配置し、そこからデータを取り出すことを含む。
スクリプトを一緒に実行することによって、スクリプトエンジン502は、ロック解除スクリプトがロックスクリプトにおいて定義された1つまたは複数の基準を満たすかどうか、すなわち、ロックスクリプトが含まれる出力を「ロック解除」するかどうかを決定する。スクリプトエンジン502は、この決定の結果をプロトコルエンジン501に返す。スクリプトエンジン502は、ロック解除スクリプトが対応するロックスクリプトで指定されている1つまたは複数の基準を満たすと決定した場合、結果「真」を返す。そうでなければ、結果「偽」を返す。
出力ベースのモデルでは、スクリプトエンジン502からの結果「真」は、トランザクションの有効性の条件のうちの1つである。典型的には、Txjの出力(複数可)で指定されているデジタル資産の総額がその入力(によって指し示された総額を超えないこと、およびTxiの指し示された出力が別の有効なトランザクションによってまだ使用されていないことなど、同様に満たされなければならないプロトコルエンジン501によって評価される1つまたは複数のさらなるプロトコルレベル条件も存在する。プロトコルエンジン501は、スクリプトエンジン502からの結果を1つまたは複数のプロトコルレベル条件と共に評価し、それらがすべて真である場合にのみ、トランザクションTxjを妥当性確認する。プロトコルエンジン501は、トランザクションが有効であるかどうかの指示をアプリケーションレベル決定エンジン504に出力する。Txjが実際に妥当性確認されるという条件でのみ、決定エンジン504は、Txjに関してそれぞれのブロックチェーン関連機能を実行するために、マイニングモジュール505Mおよびフォワーディングモジュール505Fの一方または両方を制御することを選択し得る。これは、マイニングモジュール505Mが、ブロック151にマイニングするためにTxjをノードのそれぞれのプール154に追加すること、および/またはフォワーディングモジュール455FがTxjをP2Pネットワーク106内の別のノード104にフォワードすることを含み得る。しかしながら、実施形態では、決定エンジン504は無効なトランザクションをフォワードまたはマイニングすることを選択しないが、これは、逆に、単に有効であるという理由で有効なトランザクションのマイニングまたはフォワードをトリガする義務があることを必ずしも意味するものではないことに留意されたい。任意選択で、実施形態では、アプリケーションレベル決定エンジン504は、これらの機能のいずれかまたは両方をトリガする前に、1つまたは複数の追加の条件を適用し得る。例えば、ノードがマイニングノード104Mである場合、決定エンジンは、トランザクションが有効であり、かつ十分なマイニング手数料を残しているという条件でのみトランザクションをマイニングすることを選択し得る。
本明細書における「真」および「偽」という用語は、単一の2進数(ビット)のみの形態で表される結果を返すことに必ずしも限定されないが、それは確かに1つの可能な実装形態であることにも留意されたい。より一般的には、「真」は、成功または肯定的な結果を示す任意の状態を指すことができ、「偽」は、不成功または非肯定的な結果を示す任意の状態を指すことができる。例えば、アカウントベースのモデル(図4には図示せず)では、「真」の結果は、ノード104による署名の暗黙的な(プロトコルレベルの)妥当性確認と、スマートコントラクトの追加の肯定的な出力との組合せによって示され得る(個々の結果の両方が真である場合、全体の結果が真を示すと見なされる)。
シングルユーストークン
図6は、ブロックチェーントランザクションを使用してシングルユーストークンを発行する方法を提供する本発明の実施形態を実装するための例示的なシステム600を示す。示されるように、トークン発行者601は、トークントランザクションTxtokenを生成し、ブロックチェーン150に記録されるようにトークントランザクションTxtokenをブロックチェーンネットワーク106に送信する。トークントランザクションTxtokenは、シングルユーストークン、すなわちシングルユーストークンを表すデータを含む少なくとも1つの出力を含む。トークントランザクションTxtokenはまた、トークン発行者601の署名、すなわちトークン発行者の公開鍵に対応する秘密鍵に基づいて生成されたデジタル署名を含む入力を含む。署名は、シングルユーストークンを含む出力のうちの1つ、いくつか、またはすべてに署名する。トークン償還者602は、トークントランザクションTxtoken内のシングルユーストークンを償還する償還トランザクションTxredeemを生成し、ブロックチェーン150に記録されるように償還トランザクションTxredeemをブロックチェーンネットワーク106に送信する。
トークン発行者601は、図1~図3を参照してアリス103aと呼ばれる当事者と同じであってもよい。すなわち、トークン発行者601は、クライアントアプリケーション105aを実行するコンピュータ機器102aを動作させ得、アリス103aに帰する任意の動作を実行し得る。同様に、トークン償還者602は、図1~図3を参照してボブ103aと呼ばれる当事者と同じであってもよい。すなわち、トークン償還者602は、クライアントアプリケーション105bを実行するコンピュータ機器102bを動作させ得、ボブ103bに帰する任意の動作を実行し得る。
いくつかの例では、図6に示すように、トークン発行者601は、シングルユーストークンの償還と引き換えに有形資産をトークン償還者602に発行する当事者である。例えば、トークン発行者601は、商品および/またはサービスのサプライヤであり得、トークン償還者602は、そのサプライヤの顧客であり得る。トークン発行者601は、トークン償還者にトークンを発行し、トークン償還者602がトークンを使用するとき、トークン発行者601は、引き換えにトークン償還者602に何かを与える。
他の例では、トークン発行者601は、シングルユーストークンの償還と引き換えに無形資産をトークン償還者602に発行する当事者である。シングルユーストークンは、無形資産の所有権を表し得る。例えば、シングルユーストークンは、償還トランザクションTxredeemを介してシングルユーストークンを償還することによってトークン償還者602が投じることができる投票の所有権を表し得る。
いくつかの例では、トークン償還者602は、シングルユーストークンが使用されるときに第三者(図6には図示せず)に資産を提供し得る。例えば、第三者は、シングルユーストランザクションの償還に必要とされる情報(例えば、トークントランザクションのトランザクション識別子TxID)をトークン償還者602に提供し得、引き換えに、トークン償還者602は、その第三者に商品またはサービスを提供する。これの利点は、償還トランザクションが、第三者が商品またはサービスを受け取ったことの不変の記録として機能することである。
トークントランザクションは、1つまたは複数のシングルユーストークンを含む。各シングルユーストークンは、トークントランザクションの別個の出力に含まれ、各シングルユーストークンは、トークントランザクションの別個の使用可能な出力に関連付けられる。したがって、トークントランザクションがブロックチェーンネットワーク106のノードに送信され、ブロックチェーン150に記録されるとき、各シングルユーストークンは、別個の未使用トランザクション出力(UTXO)にリンクされる。UTXOベースのブロックチェーンは、本来、シングルユーストランザクションの特性を有する。マイニングノードは、トランザクションの二重支出がないことを確実にするようにインセンティブが与えられる。したがって、UTXOにリンクされた任意のトークンが2回以上使用されることはない。
トークン(すなわちトークンデータ)は暗号化され得る。例えば、トークンデータは、トークン発行者601またはトークン償還者602の秘密鍵、またはトークン発行者601およびトークン償還者602の両方に知られている共通のシークレットを使用して暗号化され得る。代替的に、トークンは、トークンデータのハッシュであってもよい。
トークンをUTXOにリンクする(または関連付ける)ための方法は2つある。第1に、シングルユーストークンは、トークントランザクションの使用不可能な出力、例えばOP_RETURNペイロード内に埋め込まれ得る。使用不可能な出力は、使用することができない、すなわちロック解除されない。この第1の方法は、トークンをUTXOに間接的にリンクまたは関連付ける。以下の表は、使用不可能な出力内にシングルユーストークンを埋め込むトークントランザクションを示す。
トークン発行者601は、トランザクションを生成し、トークンを発行することができる。トランザクションは、少なくとも1つの入力と2つの出力とを有する。第1の出力は、使用可能な出力である。第1の出力のステータスは、シングルユーストークンの有効性を表す。第1の出力が使用済みである場合、トークンは使用されたものと見なされる。第1の出力が未使用である場合、トークンは依然として使用に有効である。出力は、TXID1||0と識別され得る。第2の出力は、トークンに関するすべての情報を含む使用不可能な出力である。例えば、トークン発行者601は、トークンの諸条件を第2の出力に入れ得る。
入力、より正確には入力内の署名は、2つの出力をリンクする。トークン発行者601は、トランザクションに署名して、第1の出力が第2の出力に関連付けられている(すなわち、リンクされている)ことを認め得る。
「[何らかのロックスクリプト]」の一例は、以下の通りである:
OP_HASH256 <h1> OP_EQUALVERIFY [P2PKH PA]
ここで、h1はOP_RETURNペイロードのハッシュ値であり、PAはトークン償還者602または第三者の公開鍵である。ロックスクリプトにハッシュパズルを含めることにより、トークンとUTXOとの間のリンケージが強化される。
トークン発行者601は、トークントランザクションのトランザクション識別子をトークン償還者602に発行し得る。
第2に、シングルユーストークンは、トークントランザクションの使用可能な出力内に埋め込まれ得る。したがって、トークンは、使用可能な出力内にトークンが含まれるという点で、使用可能な出力に直接関連付けられる。例えば、トークンは、OP_PUSHDATAオペコードとOP_DROPオペコードとの間に配置され得る。オペコードは、トランザクションのロックスクリプトまたはロック解除スクリプト内に含まれるデータに対して動作するオペレーションコードである。例えば、オペコードは、スタック(例えば、代替スタック)にデータをプッシュ(すなわち、追加)し、スタックからデータをドロップ(すなわち、除去)し、またはスタック上のデータに対して関数(例えば、加算、減算、ハッシュなど)を実行し得る。当業者は、オペコード自体に精通しているであろう。第2の方法は、シングルユーストークンをUTXOと直接リンクする。第1の方法(すなわち、トークンを使用不可能な出力とリンクすること)とは異なり、リンケージのレベルは、トランザクションレベルではなく出力レベルである。以下の表は、使用可能な出力内にシングルユーストークンを埋め込むトークントランザクションを示す。
この特定の例示的なトランザクションは、1つの入力と1つの出力とを有する。出力は、ロックスクリプト内のトークンに関する情報を含む。入力は、トークンとUTXOとの間のリンケージを認めるトークン発行者601からの署名を含む。前述のように、UTXOが使用済みである場合、トークンは使用され、再び使用することはできない。UTXOが未使用である場合、トークンは依然として使用に有効である。
ロックスクリプトの一例を以下に示す:
<Token Data> OP_DROP [1-out-2 MultiSig Kissuer PKA]
ロックスクリプトの最後の部分は、トークン発行者601またはトークン償還者602のいずれかがUTXOを使用することを可能にするためのものである。トークン償還者602がトークンを使用する場合、トークンの使用または償還を反映するためにUTXOを使うことが期待される。トークン発行者601はまた、トークンが使用または失効されたことを示すためにUTXOを使用する当事者にもなり得る。より高度なロックスクリプトを使用して、異なる要件のシナリオに適合させることができる。
トークン発行者601は、トークントランザクションのトランザクション識別子をトークン償還者602に発行し得る。トークン発行者601はまた、トークントランザクションの特定の出力の識別子を提供し得る。
これらの実施形態では、単一のトークントランザクションが複数のシングルユーストークンを含むことができる。すなわち、トークントランザクションは、それぞれがシングルユーストークンを含む複数の使用可能な出力を含み得る。各トークンは、それが含まれる使用可能な出力(UTXO)に関連付けられる。したがって、所与のトークンの有効性は、出力がUTXOセット内にあること、すなわち出力が使用されたか否かのみに依存する。
シングルユーストークンに関連付けられた使用可能な出力のうちの1つ、いくつか、またはすべて(シングルユーストークンを含むか否かにかかわらず)は、トークン発行者601の公開鍵および/またはトークン償還者602の公開鍵にロックされ得る。例えば、使用可能な出力は、トークン発行者601の公開鍵、またはトークン償還者602の公開鍵、または第三者の公開鍵にロックされたpay-to-public-key-hash(P2PKH)出力であり得る。P2PKH出力は、公開鍵のハッシュ(公開鍵ハッシュ)を含み、償還トランザクションの入力が、必ずしもその順序である必要はないが、公開鍵ハッシュにハッシュする公開鍵を、その公開鍵を使用して生成された署名と共に含むことを必要とする。代替的に、使用可能な出力は、トークン発行者601およびトークン償還者602のそれぞれの公開鍵の一方または両方にロックされたマルチシグネチャ出力であってもよい。マルチシグネチャ出力は、全部でm個の公開鍵を含むn-of-m出力であり、償還トランザクションの入力が、マルチシグネチャ出力内の公開鍵に対応する(すなわち、それ対応する秘密鍵に基づいて生成される)少なくともn個の署名を含むことを必要とする。同じ公開鍵が出力に2回以上含まれてもよい。
いくつかの例では、使用可能な出力は、シングルユーストークンのハッシュを含み得る。トークントランザクションが複数のトークンを含む実施形態では、各使用可能な出力は、そのそれぞれのトークンのハッシュを含み得る。使用可能な出力は、償還トランザクションの入力が、ハッシュのプレイメージ、すなわちトークンデータを含むことを必要とし得る。
いくつかの例では、トークン発行者601は、トークントランザクションに署名する唯一の当事者であり得る。例えば、トークン発行者601は、トランザクション全体に署名する単一の入力を含む。別の例として、トークン発行者は、単一の入力内に複数の署名を含み得る。各署名は、異なる署名フラグを有し得、すなわち、各署名は、異なる数の入力および/または出力に署名し得、したがって、異なるメッセージに署名し得る。署名フラグは、署名がトランザクションのどの部分に署名するかを示す。デフォルトはSIGHASH_ALLであり、トランザクションのすべての部分に署名する。トランザクションの署名されていない部分は修正され得る。SIGHASH_NONEは、入力のみ署名され、誰でも出力を追加または変更できることをシグナリングする。SIGHASH_SINGLEは、すべての入力および対応する出力が署名され、すなわち、第1の入力内の署名が第1の出力に署名することをシグナリングする。
トークン発行者601はまた、複数の入力を含み得、それぞれが別個の出力に署名する。トークン発行者601は、代わりに、複数の入力を含み得、ここで、1つの入力に署名するものと、すべての入力に署名するものがある。後述するように、トランザクションの異なる部分に署名するために異なる署名フラグが使用され得る。
トークン発行者601がトークントランザクションに複数の署名を含む場合(それらが同じ入力に含まれるか異なる入力に含まれるかにかかわらず)、署名は、互いにリンクされた公開鍵に基づいて生成され得る。例えば、第2の公開鍵は、第1の公開鍵、例えば証明された公開鍵に基づいて生成され得、第1および第2の公開鍵(またはむしろ対応する秘密鍵)は、複数の署名、すなわち、第1の公開鍵に基づく第1の署名および第2の公開鍵に基づく第2の署名を生成するために使用される。代替的に、第2の公開鍵は、第1の公開鍵を第3の公開鍵(例えば、証明された公開鍵)に追加することによって生成されてもよく、第1および第2の公開鍵(またはむしろ対応する秘密鍵)は、複数の署名を生成するために使用される。
他の例では、トークン発行者601は、トークントランザクションに署名する1つまたは複数の入力を含め得、異なる当事者(例えば、第2のトークン発行者)も、トークントランザクションに署名する1つまたは複数の入力を含め得る。例えば、第2のトークン発行者は、トークントランザクションに署名することによって、トークンを発行する権限を第1のトークン発行者601に与えることができる。
第2の異なるトークン発行者は、入力に第2のトークン発行者の署名を含めるトークントランザクションテンプレートを生成し得る。次いで、第2のトークン発行者は、第1のトークン発行者601の署名を含む入力を追加する第1のトークン発行者601にテンプレートトランザクションを送信し得る。
シングルユーストークンを更新またはキャンセルするために、トークン発行者601は、それぞれ更新トランザクションまたはキャンセルトランザクションを生成し得る。更新トランザクションまたはキャンセルトランザクションの入力は、更新またはキャンセルされるべきトークンに関連付けられた出力を参照し、参照された出力をロック解除するために必要なデータ、例えば署名、プレイメージなどを含む。トークンが更新される場合、更新トランザクションは、更新されたシングルユーストークンを含む。トークンがキャンセルされる場合、キャンセルトランザクションは、トークンがキャンセルされたことをシグナリングするデータを含む。
例示的な使用事例1-医療処方箋
以下は、トレーサビリティおよび患者の秘密保持を達成するためにオンチェーンでどのようにして医療処方箋が発行され得るかを説明する。
主要のアクタ
・ 患者
・ 処方者
・ 薬剤師
・ 信頼できる機関
・ 医療データベース(Medical_DB)
主要段階
・ 処方者が自身のクレデンシャルを登録
・ 処方者が処方トランザクション(すなわちトークントランザクション)に署名
・ 患者が処方箋を償還/薬剤師が処方箋を調剤
・ 処方者が処方箋をキャンセルまたは修正
要件
1.患者のアイデンティティ(identity)の秘密保持:公開されているおよび非認可アクタは、患者IDを処方箋とリンクさせることができるべきではない。
2.患者は、自身の個人識別可能情報を正すまたは消去する権利を有することができる。
3.処方者は、患者のアイデンティティをチェックすることができるべきである。
4.処方箋は、認可された処方者によってのみ発行されるべきである。薬剤師および監査人は、この許可をチェックすることができるべきである。
5.認可されたシステムアクタは、安全な方法で患者の処方履歴にアクセスすることができるべきである。
6.薬使用データベースまたは在庫データベースをチェックすることができ、過剰使用を検出するべきである。
7.処方者、薬剤師、および患者などのアクタは、それに応じて認証および認可されるべきである。
8.認可された処方者は、まだ調剤も償還もされていない処方箋を修正/キャンセルすることができるべきである。
9.処方箋は、認可された薬剤師によってのみ調剤されるべきである。
10.処方者は、患者が通信に関与することなく、患者の指名の薬局に処方箋を直接送信することができる。
例示的なシステムの要件を図7に示す。
通常、処方箋データは個人識別情報(PII:personal identifying information)を含む。典型的な処方箋には以下が含まれ得る:
・ 患者の名前、生年月日、住所
・ 薬の名前および数量
・ 患者および薬剤師のための注意事項
・ 処方箋の日付
・ 処方者の名前
ブロックチェーン上に処方箋データをアップロードすることで、一般にブロックチェーンデータストレージの可用性、不変性、および透明性の特徴から利益を享受する。最も重要なのは、ブロックチェーンが二重支出を防止する能力である。個人識別情報(PII)は、公開されている許可不要のブロックチェーン上に保持されるべきではない。患者の秘密保持も別の重要な法的要件であり、これは、認可されたアクセスのみがPIIに与えられることを意味する。これらの要件を満たすソリューションは、PIIではない処方箋データの一部のみをブロックチェーンに格納することである。これは、以下の特徴を有する:
1)患者の名前、生年月日、および住所などのPIIはブロックチェーン上に格納されない
2)薬の名前および数量などのPIIではない処方箋データ、ならびに処方箋の日付はチェーンに格納される
3)患者のウォレットは、異なるトランザクションに対して異なる受信アドレス、すなわちワンタイムアドレスPOTAを使用することができる
4)患者のアイデンティティとそれらのトランザクションアドレスとの間のリンクは、オフチェーンで、信頼できるサーバ上に保持される。薬剤師または処方者が患者のIDを認証する必要がある場合、アドレスが患者のウォレットに由来するかどうかをチェックする必要がある。次いで、信頼できるサーバは、認可されたアクタに対して患者を識別および/または認証することとなる。
これにより、監査可能性、可用性、および完全性を提供するシステムを有しながらも、すべての使用事例の要件が満たされるであろう。加えて、信頼できる機関は、以下のタスクを実行し得る:
1.ユーザ(患者、処方者、および薬剤師を含む)の登録。これは、識別、認証、および認可チェックを実行することを含む。
2.ユーザの公開鍵証明書の管理。これは、ユーザのアイデンティティおよび役割をそれらの公開鍵にマッピングする証明書、認可された範囲(例えばユーザが処方することを許可された薬)をユーザに提供する証明書、ならびに病院およびMedical_DBなどの他のエンティティのための証明書に署名すること、更新すること、および失効させることを含む。
3.患者のアイデンティティとそれらのウォレットアドレスとをマッピングするデータへのアクセスの制御。このデータはMedical_DBに格納される。
Medical_DB802は、信頼できる機関801によって管理される安全なデータベースである。Medical_DBは、以下の機能を実行する:
1.患者のアイデンティティとそれらの公開鍵との間のリンクを格納する。これは、患者のPIIおよび患者のトランザクションの履歴を格納することを含む。
2.トランザクション処方箋作成中に処方箋チェックを行う。これらは以下をチェックすることを含む:
a.処方者の認可
b.患者の識別および認証
c.患者の病歴。
3.処方箋がチェックにパスした場合、Medical_DB802は、処方トランザクションに、処方者601と共同署名する。
4.ブロックチェーンと対話して、患者の病歴を抽出する。
信頼できる機関およびMedical_DB802の使用事例図が図8に示されている。
説明されるシステムでは、認可されたアクタが、それらの役割および属性にしたがって異なるアクションを行うことができる。これは、事実上、属性ベースのアクセス制御モデルである。例えば:
・ 処方者は患者の病歴を検索することができる
・ 処方者は患者の識別情報(identification)をチェックし、認証チェックを実行することができる
・ 処方者は処方トランザクションを作成し署名することができる
・ 患者は自身の処方履歴をチェックすることができる
・ 患者は、償還トランザクションに共同署名することができる。
図9および図10は、処方者(トークン発行者601)およびMedical_DB802が患者602に処方箋を発行する場合の例示的なシーケンス図を示す。この例では、Medical_DB802は、処方者601を認証し、処方トランザクションに処方者601と共同署名する信頼できる機関であると仮定される。患者(トークン償還者602)は処方箋を償還し、薬剤師は処方箋を調剤する。すなわち、患者602は、処方トランザクション(トークントランザクション)を使用することによって処方箋を回収する。
より詳細には、図9に示すように、処方者601は、最初に、患者602からウォレットアドレスを取得する。Medical_DB802と認証し、処方箋がチェックされ検証された後、処方者601およびMedical_DB802は、シングルユース処方箋を含む処方トランザクション(トークントランザクションに相当)を生成する。処方者601およびMedical_DB802の両方は、それぞれの署名をトランザクションに含める。次いで、処方者601は、処方トランザクションをブロックチェーンにサブミットする。
図10に示すように、患者602は、処方箋を含む処方トランザクションを薬剤師1001に提供する。薬剤師は、Medical_DB802の署名をチェックする。薬剤師1001は、患者602にウォレットアドレスを提供し、次いで、患者602は、薬剤師のウォレットアドレスに送信される償還トランザクションを生成する。薬剤師1001は、償還トランザクションに署名することもできる。患者602または薬剤師1001は、償還トランザクションをブロックチェーンにサブミットし、引き換えに、薬剤師は、処方薬を患者602に提供する。
いくつかの例では、処方者(トークン発行者601)は、信頼できる機関に、例えば、処方者を登録し、許可された薬のセットに対して処方者を認可するオンチェーンの認証局(CA)801に登録する必要があり得る。ブロックチェーンを使用してそのようなシステムを実現することができる様々な方法がある。CA801は、トランザクション
内の処方者の証明書を認証および認可する。証明書の鍵は、そのトランザクション
出力が未使用である限り有効である。証明書の更新および失効は、トランザクション出力を使用することによって行われる。
処方者アリス601が自身のウォレットの証明を受けるために、以下を実行する:
アリスは、1つの公開鍵のみがCAによって証明されることを必要とする。他のすべての鍵は証明可能な方法でリンクされ得る。
は、ネットワークに自由にブロードキャストされ得る。これがトランザクションへの署名に使用されることはない。
公開鍵証明書の公開鍵にリンク可能なデジタル署名を、以下ではリンク可能な署名と呼ぶ。署名者は、2つのデジタル署名を使用してメッセージに署名するためにリンク可能な署名を使用し、その公開鍵は、上述したようにP
Aiおよび
である。リンク可能なデジタル署名のセットは、以下の形態であり得る;
好ましくは、SIGHASHフラグは、2つのOP_CHECKSIGにおいて同じであるべきではなく、同じ場合には、安全なランダム鍵生成器が適切に実装されない実装形態において署名者の秘密鍵を危険にさらす可能性がある。
以下では、リンク可能な署名という用語は、上記の形態のうちの1つを指す。証明トランザクション
は、以下のように、信頼できる機関によって生成され得る。
登録トランザクションを参照する例示的な処方トランザクションが以下に示される。
処方者アリスは、リンク可能な署名のペアを使用してTxIDprescription-1に署名する。アリスは、自身の有効な
への参照をOP_RETURN出力に挿入する。アリスは処方箋データも挿入する。
TxIDprescription-1の第1の出力は、処方箋を償還するときに患者によって使用されるか、またはそれを失効させるときに処方者によって使用される。TxIDprescription-1が認可された処方者によって署名されているかどうかをチェックするために、当事者(例えば薬剤師)は以下を実行する:
[患者の署名または処方者のリンク可能な署名によって使用可能なロックスクリプト]の例は、以下であり得る:
<m=1><P_A><PPOTA> <n=2>OP_CHECKMULTISIGVERIFY
ここで、<PPOTA>は患者602のワンタイムアドレスであり、PAは処方者に属する。
[患者の署名または処方者のリンク可能な署名によって使用可能なロックスクリプト]の例は、以下であり得る:
処方トランザクションは、追加の信頼できる機関の署名(すなわち、第2の異なるトークン発行者)で生成され得る。処方トランザクションは、処方者601および「Medical DB」802と呼ばれる信頼できるエンティティによって署名される。この例では、処方者の署名は、検証するために薬剤師に知られていなくてもよい。したがって、薬剤師は、処方箋が認可された処方者によって署名されていることをチェックするために、Medical_DB署名に依存し得る。このシナリオは、図9および図10で説明しているものである。一般に、Medical_DB署名は、以下のいずれかを証明するために使用され得る:
・ 認可された処方者によってトランザクションが処方されていること
・ トランザクション処方箋が償還可能であること
・ 患者が認証されること
・ 患者の病歴がチェックされていること
次いで、処方トランザクションは、以下によって与えられ得る:
トークン発行者の識別アドレスにより、薬剤師1001は、トークン発行者/または信頼できる機関を識別することができる。これにより、薬剤師1001は、処方箋がそのエンティティによって認可されていることをチェックすることができる。処方者601または患者のいずれかが、TxIDprescription||0を使用することができる。処方者601は、それを使用して処方箋をキャンセルまたは更新し、患者602はそれを使用して処方箋を償還する。
患者602が薬剤師から自身の処方トランザクションを償還すると、償還トランザクションが作成される。その入力の1つは、TxID
prescription||0内の使用可能な出力である。償還トランザクションは、患者602および薬剤師によって署名され得る。患者602は、プライバシーを保護するためにリンク可能な署名を使用して署名しないことに留意されたい。以下のトランザクションが生成され得る。
処方トランザクションがオンチェーンのCAを仮定している場合、薬剤師は以下のことをチェックする必要があるであろう:
時々、処方トランザクションをキャンセルまたは更新する必要がある場合がある。トークンデータが(OP_RETURNを使用して)使用不可能なトランザクション出力に埋め込まれていると仮定すると、トランザクションTxIDprescription||0の使用可能な出力を使用することによって、処方箋のキャンセルまたは更新が行われる。
処方箋のキャンセルは、処方トランザクションTxIDprescription||0が使用され、使用トランザクションの出力におけるフラグ「キャンセル」が処方箋のキャンセルを確認すると達成される。
処方箋の変更は、TxIDprescription||0を使用し、使用トランザクションの出力にフラグ「更新」を有することによって達成され得る。新しい処方箋が出力に挿入される。フラグ「更新」を有するトランザクションが償還のために受け入れられるためには、それは、処方者のリンク可能な署名によって署名され、Medical_DBのリンク可能な署名によって共同署名されなければならない。
トークンデータが使用可能な出力に埋め込まれている場合、キャンセルおよび更新は、その出力を使用することによって達成される。
薬の処方および調剤の両方について1つのトランザクションを有することも可能である。このシナリオでは、処方者601は、SIGHASHフラグSingle|AnyoneCanPayを使用してトランザクションに署名することができる。次いで、トランザクションは、患者602にオフチェーンで渡される。薬を調剤するとき、薬剤師のウォレットアドレスが出力に追加される。薬剤師はまた、トランザクションに署名しなければならず、したがって、自身の入力を追加しなければならないであろう。このトランザクションは、薬剤師1001と処方者601との間の対話を必要とする場合がある。患者602に自分で選択した薬局を指名させ、その薬局に処方箋を直接送信することも可能である。このような構成の利点は、処方箋を注文して準備する時間を薬局が十分確保することができ、よりタイムリーに消耗品を管理することができることである。
この使用事例は、ブロックチェーンを活用して、監査可能であり、利用可能であり、不変である処方箋を記録するためのシステムを提供する。誰でも容易にブロックチェーンデータにアクセス可能であり、誰でもブロックチェーンをダウンロードすることができる。処方箋は、処方箋フラグの使用により、ブロックチェーン内で容易に識別され得る。これらの2つの点を組み合わせることは、不必要な障壁または許可なしに、誰でも単一セットの記録から処方箋メタデータを監視することができることを意味する。「分類された薬」の使用を監査することは、監査可能性を有する必要性に対する特定の動機付けであるが、プロトコルにより、すべての処方箋の監査可能性が有効になる。
説明した例は、以下の特徴を有する。
・ 薬の名前および数量ならびにそれらの処方箋の日付は、患者のアイデンティティなしに監査することができる。
・ 薬(分類されていようとなかろうと)は、処方者のアイデンティティおよび/または処方者601を認証および認可した医療機関に、反論不可能な方法でリンクされ得る。
・ オフチェーンのPII患者データを組み合わせることによって、認可された人物に制御されたアクセスを許可して、患者の処方履歴をチェックすることができる。これらのチェックは、緊急事態の場合、および患者の病状により特定のタイプの処方が許可されない場合に極めて重要であり得る。
・ 処方者は、処方者が発行した薬、および処方者がそのような薬を発行する権限を与えられているかどうかに対してチェックされ得る。
・ 患者は、処方者および薬剤師ならびに任意の他の認可されたアクタによってプライバシーに配慮した方法で識別および認証され得る。これは、患者の個人データがパブリックドメイン上でアクセス可能になる危険を冒すことなく行われる。
・ 処方者と処方箋に共同署名するMedical_DBは、1)処方者601が資格を与えられ認可されていること、2)患者が適切に識別され認証されていること、および3)患者の処方履歴が署名されたトランザクション処方箋に対してチェックされていることを保証する。Medical_DB802は、それ自身のチェックが監査される。システムの透明性は、任意の間違った設定または間違った挙動が検出され、そのソースまで追跡され得ることを確実にする。
・ ポリシーが自動化され得、システムは、違反の場合に追跡し、フラグを立て、警報を発するように構成される。
・ 以下のように、処方箋の発行中に実施されるようにポリシーを自動化することができる:
- 認可された処方者601からの追加の署名が必要とされる場合を除き、特定の薬から、妊娠中の患者および一部の疾患を持つ患者をブラックリストに載せること、および/または
- 特定の量を超えて投与されないようにまたは他の薬と一緒に投与されないように薬をブラックリストに載せることと。
説明されるシステムは、薬局に薬を供給するサプライヤから患者602までずっと薬の追跡を提供するために使用され得る。これは以下のことを提案する。
・ 新しい薬が到着すると、薬のサプライヤ(トークン発行者)および薬剤師(第2のトークン発行者)は、トランザクションTxIDsupply(トークントランザクション)を発行することとなる。TxIDsupplyは、リンク可能な署名を使用して、両方によって署名される。
・ トランザクションTxIDsupplyは、薬剤師が受け取る薬のコードおよび数量についてのデータ(トークンデータ)を含むであろう。
・ トランザクション使用可能な出力は、償還トランザクションを使用して薬剤師の署名によって使用可能である。
・ 薬剤師によって保持される薬の在庫は、TxIDredeemにおける数量からTxIDsupplyにおける薬の数量を減算することによっていつでも計算され得る。
例示的な使用事例2-駐車
駐車場管理者、チャーリー(トークン発行者601)が顧客に駐車トークンを発行したいと仮定する。第1のステップは、チャーリーが、上記の2つの方法のうちの1つを使用して駐車トークンのリストを作成すること、すなわち、トークンを使用可能な出力または使用不可能な出力に含めることである。一般性を失うことなく、以下の例は、使用可能な出力にトークンを有するトークントランザクションを使用する。
アリスが車を10時間駐車したい場合、チャーリーは以下のトランザクション(償還トランザクション)を作成する。
ここで、TXID
3||0はチャーリーが生成した駐車トークンの1つを表し、h
Aはアリスの車両登録番号のハッシュ値である。チャーリーは、毎回ハッシュ値を一意にするためにタイムスタンプを追加することができる。
アリスが出口でこのトランザクションを提示すると、ゲートキーパは以下を実行する:
1.入力において参照されるアウトポイントが未使用であることをチェック、
2.入力における署名の有効性をチェック、
3.車両登録番号のハッシュ値が出力のハッシュ値と一致するかをチェック、
4.アリスの実際の駐車時間の代金を請求するために新しいバージョンの(最大シーケンス番号を有するトランザクション)を作成。
アリスが10時間を超えて駐車した場合、アリスが駐車場を離れる前に、TXID
4が有効になり、マイナーによって受け入れられることに留意されたい。これによりチェック1が失敗に終わる。アリスが10時間未満駐車した場合、TXID
4は、そのロック時間により無効である。したがって、入力において参照されるアウトポイントは、依然としてまだ未使用である(チェック1がパスする)。チェック2および3の両方が良好である場合、ゲートキーパは最終トランザクションを作成する。
上記のトランザクションは、アリスが他の手段で駐車料金を支払うことを仮定している。しかしながら、アリスからのもう1つの入力をTXID
4に追加することによって、支払いを駐車トークンシステムに統合することができる。
2つのトランザクションのうちの第1のトランザクションにおいて、アリスは10時間の駐車料金を支払う。後に、駐車が10時間未満であった場合、アリスは依然としてトランザクションを更新することができ、実際に駐車した時間分だけの料金を支払う。また、アリスにTXID4への署名を行わせることによって、それを使用して、アリスが前述の時間に実際に駐車場に入ったことを証明することができ、それは<hA>に含まれることに留意されたい。すなわち、アリスまたはチャーリーは、駐車場に入った時間に異議を唱えたい場合、それを使用することができる。
結論
上記の実施形態は、単なる例として説明されていることが理解されよう。より一般的には、下記ステートメントのうちのいずれか1つまたは複数による方法、装置、またはプログラムが提供され得る。
ステートメント1.ブロックチェーントランザクションを使用して、1つまたは複数のそれぞれのトークン償還者によって使用される1つまたは複数のシングルユーストークンを発行するコンピュータ実装方法であって、方法は、トークン発行者によって実行され、トークントランザクションを生成することと、ここで、トークントランザクションは、1つまたは複数のトークン出力であって、各トークン出力が、それぞれのシングルユーストークンを表すトークンデータを含み、各シングルユーストークンが、トークントランザクションのそれぞれの使用可能な出力に関連付けられ、各シングルユーストークンのそれぞれの有効性は、それぞれの使用可能な出力がブロックチェーンの未使用トランザクション出力セットに存在することを条件とする、1つまたは複数のトークン出力と、1つまたは複数の入力であって、入力のうちの少なくとも第1の入力が、トークン発行者の第1の公開鍵にリンクされた署名を含む、1つまたは複数の入力とを含み、ブロックチェーンに記録させるためにトークントランザクションをブロックチェーンネットワークの1つまたは複数のノードに送信することとを含む方法。
ステートメン2.トークントランザクションが複数のトークン出力を含む、請求項1に記載の方法。
ステートメント3.各シングルユーストークンは、各トークン出力がそれぞれの使用可能なトランザクション出力であるという点で、それぞれの使用可能な出力に関連付けられる、ステートメント1またはステートメント2に記載の方法。
ステートメント4.1つまたは複数のトークン出力のうちの1つまたは複数はm-of-nマルチシグネチャ出力であり、各m-of-nマルチシグネチャ出力は、トークン償還トランザクションの入力によってロック解除されるために、トークン償還トランザクションの入力が、n個の公開鍵のそれぞれにリンクされた少なくともm個の署名を含まなければならないように構成される、ステートメント3に記載の方法。
ステートメント5.各m-of-nマルチシグネチャ出力は、トークン償還トランザクションの入力が、トークン償還者の第2の公開鍵にリンクされた署名および/またはトークン発行者の公開鍵にリンクされた署名を含むことを必要とする、ステートメント4に記載の方法。
第2の公開鍵は、第1の公開鍵と同じであってもよい。代替的に、第1の公開鍵と第2の公開鍵とは、異なる公開鍵であってもよい。
ステートメント6.1つまたは複数のトークン出力のうちの1つまたは複数は、2つ以上の代替条件を定義するそれぞれのif-elseステートメントを含み、各代替条件は、トークン償還トランザクションの入力によってロック解除されるために、トークントランザクションの入力が定義された条件を満たさなければならないように構成される、ステートメント3から5のいずれかに記載の方法。
ステートメント7.トークントランザクションが単一のトークン出力を含み、トークン出力が使用不可能な出力である、ステートメント1に記載の方法。
ステートメント8.単一のトークン出力のシングルユーストークンに関連付けられた使用可能な出力は、トークン償還トランザクションの入力によってロック解除されるために、トークン償還トランザクションの入力が、トークン償還者の公開鍵にリンクされた署名および/またはトークン発行者の第2の公開鍵にリンクされた署名を含まなければならないように構成されたm-of-nマルチシグネチャ出力である、ステートメント7に記載の方法。
ステートメント9.それぞれのトークン出力のシングルユーストークンに関連付けられたそれぞれの使用可能な出力は、トークン償還トランザクションの入力によってロック解除されるために、トークン償還トランザクションの入力がトークン償還者の公開鍵および/またはトークン発行者の第2の公開鍵を含まなければならないように構成されたpay-to-public-key-hash出力である、先行ステートメントのいずれかに記載の方法。
ステートメント10.それぞれのトークン出力のシングルユーストークンに関連付けられたそれぞれの使用可能な出力は、そのシングルユーストークンを表すトークンデータのハッシュを含む、ステートメント9に記載の方法。
ステートメント11.トークントランザクションは複数の入力を含み、複数の入力のうちの少なくとも1つは、第2の異なるトークン発行者の公開鍵にリンクされた署名を含む、先行ステートメントのいずれかに記載の方法。
ステートメント12.トークントランザクションは複数の入力を含み、複数の入力のうちの少なくとも1つは、トークン発行者の第3の公開鍵にリンクされた署名を含み、第1の公開鍵および第3の公開鍵は互いにリンクされる、先行ステートメントのいずれかに記載の方法。
ステートメント13.トークントランザクションの入力のうちの第1の入力は、トークン発行者の第3の公開鍵にリンクされた署名を含み、第1の公開鍵および第3の公開鍵は互いにリンクされる、先行ステートメントのいずれかに記載の方法。
ステートメント14.第1の公開鍵および第3の公開鍵はトークン発行者の第2の公開鍵にリンクされる、ステートメント12またはステートメント13に記載の方法。
ステートメント15.第2の公開鍵は証明された公開鍵である、ステートメント14に記載の方法。
ステートメント16.トークントランザクションは複数の入力を含み、複数のトークン入力のうちの少なくとも1つは、トークン償還者の公開鍵にリンクされた署名を含む、先行ステートメントのいずれかに記載の方法。
ステートメント17.第2の異なるトークン発行者またはトークン償還者からトークントランザクションテンプレートを受信することと、トークントランザクションテンプレートに基づいてトークントランザクションを生成することとを含む、先行ステートメントのいずれかに記載の方法。
ステートメント18.それぞれのシングルユーストークンを表すトークンデータは、トークン発行者の第1の公開鍵または発行者の第1の公開鍵にリンクされた証明された公開鍵を含む証明トランザクションへの参照を含む、先行ステートメントのいずれかに記載の方法。
ステートメント19.トークン更新トランザクションを生成することと、ここで、トークン更新トランザクションは、トークントランザクションの1つまたは複数のトークン出力のうちの1つを参照する入力を含み、トークン更新トランザクションはトークン更新出力を含み、トークン更新出力は、トークントランザクションの参照された入力のそれぞれのシングルユーストークンの更新されたバージョンを表すトークンデータを含み、ブロックチェーンに記録させるために、トークン更新トランザクションをブロックチェーンネットワークの1つまたは複数のノードに送信することとを含む、先行ステートメントのいずれかに記載の方法。
ステートメント20.トークンキャンセルトランザクションを生成することと、ここで、トークンキャンセルトランザクションは、トークントランザクションの1つまたは複数のトークン出力のうちの1つを参照する入力を含み、トークンキャンセルトランザクションはトークンキャンセル出力を含み、トークンキャンセル出力は、トークントランザクションの参照された入力のそれぞれのシングルユーストークンのキャンセルされたバージョンを表すトークンデータを含み、ブロックチェーンに記録させるために、トークンキャンセルトランザクションをブロックチェーンネットワークの1つまたは複数のノードに送信することとを含む、先行ステートメントのいずれかに記載の方法。
ステートメント21.トークントランザクションのトランザクション識別子をトークン償還者に送信すること、および/または、それぞれのシングルユーストークンに関連付けられた1つまたは複数のそれぞれの使用可能な出力のそれぞれのトランザクション出力識別子をトークン償還者に送信することを含む、先行ステートメントのいずれかに記載の方法。
ステートメント22.コンピュータ機器であって、1つまたは複数のメモリユニットを備えるメモリと、1つまたは複数の処理ユニットを備える処理装置とを備え、メモリは、処理装置上で実行されるように構成されたコードを記憶し、コードは、処理装置上にあるときに、ステートメント1から21のいずれかに記載の方法を実行するように構成される、コンピュータ機器。
ステートメント23.コンピュータ可読ストレージ上に具現化され、ステートメント22に記載のコンピュータ機器上で実行されると、ステートメント1から21のいずれかに記載の方法を実行するように構成されたコンピュータプログラム。
ステートメント24.1つまたは複数のトークン出力であって、各トークン出力が、それぞれのシングルユーストークンを表すトークンデータを含み、各シングルユーストークンが、トークントランザクションのそれぞれの使用可能な出力に関連付けられ、各シングルユーストークンのそれぞれの有効性は、それぞれの使用可能な出力がブロックチェーンの未使用トランザクション出力セットに存在することを条件とする、1つまたは複数のトークン出力と、1つまたは複数の入力であって、入力のうちの少なくとも第1の入力が、トークン発行者の第1の公開鍵にリンクされた署名を含む、1つまたは複数の入力とを含む、ブロックチェーンのためのトークントランザクション。
ステートメント25.ステートメント24に記載のトークントランザクションを記憶したコンピュータ可読記憶媒体。
本明細書に開示される教示の別の態様によれば、トークン発行者およびトークン償還者の動作を含む方法が提供され得る。
本明細書に開示される教示の別の態様によれば、トークン発行者およびトークン償還者のコンピュータ機器を備えるシステムが提供され得る。
他の変形形態は、本明細書の開示が与えられれば、当業者に明らかになり得る。本開示の範囲は、開示された実施形態によって限定されず、添付の特許請求の範囲によってのみ限定される。