(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-01-10
(54)【発明の名称】トランザクション署名フラグ
(51)【国際特許分類】
H04L 9/32 20060101AFI20231227BHJP
【FI】
H04L9/32 200Z
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2023538683
(86)(22)【出願日】2021-11-23
(85)【翻訳文提出日】2023-06-30
(86)【国際出願番号】 EP2021082626
(87)【国際公開番号】W WO2022135809
(87)【国際公開日】2022-06-30
(32)【優先日】2020-12-23
(33)【優先権主張国・地域又は機関】GB
(81)【指定国・地域】
(71)【出願人】
【識別番号】318001991
【氏名又は名称】エヌチェーン ライセンシング アーゲー
(74)【代理人】
【識別番号】100107766
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【氏名又は名称】伊東 忠彦
(74)【代理人】
【識別番号】100135079
【氏名又は名称】宮崎 修
(72)【発明者】
【氏名】モロイ,キャサリン
(72)【発明者】
【氏名】ライト,クレイグ スティーヴン
(72)【発明者】
【氏名】ヴォーン,オーウェン
(57)【要約】
投票を行うためのブロックチェーンの投票トランザクションのインプットとアウトプットを生成するためのコンピュータプログラムであり、前記コンピュータプログラムは、1つ以上のプロセッサを、投票コーディネータから、1つ以上の公開鍵と投票オプションのセットとを含む投票指示を受信し、前記投票オプションを表示するユーザインタフェースをレンダリングし、前記投票オプションのうちの1つのユーザ選択を受信し、前記投票トランザクションに含めるインプット-アウトプットペアを生成する、よう構成させ、前記インプットの非署名部分は、ブロックチェーントランザクションの未使用トランザクションアウトプットを識別するアウトポイントを含み、前記インプットの署名部分は、signature singleフラグと、少なくとも前記インプット-アウトプットペアの前記非署名部分と前記インプット-アウトプットペアのアウトプットに署名するが前記投票トランザクションの他のアウトプットに署名しない関連署名と、を含み、前記インプット-アウトプットペアの前記アウトプットは、公開鍵の1つを含む、コンピュータプログラム。
【特許請求の範囲】
【請求項1】
投票を行うためのブロックチェーンの投票トランザクションのインプットとアウトプットを生成するためのコンピュータプログラムであり、前記コンピュータプログラムは、非一時的媒体に格納され、1つ以上のコンピュータプロセッサによって実行されると、前記1つ以上のプロセッサを、
投票コーディネータから、前記投票コーディネータによって定義された1つ以上の公開鍵と投票オプションのセットとを含む投票指示を受信し、
ディスプレイを制御して、前記投票オプションのセットを表示するユーザインタフェースをレンダリングし、
前記ユーザインタフェースでユーザ入力によって定義された前記投票オプションのセットのうちの1つの投票オプションのユーザ選択を受信し、
前記投票トランザクションの異なるインデックスにある1つ以上の他のインプット-アウトプットペアを有する投票トランザクションに含めるインプット-アウトプットペアを生成する、
よう構成させ、
前記インプット-アウトプットペアのインプットの非署名部分は、ブロックチェーントランザクションの未使用トランザクションアウトプットを識別するアウトポイントを含み、前記インプットの署名部分は、signature singleフラグと、少なくとも前記インプット-アウトプットペアの前記非署名部分と前記インプット-アウトプットペアのアウトプットに署名するが前記投票トランザクションの他のアウトプットに署名しない関連署名と、を含み、前記インプット-アウトプットペアの前記アウトプットは、前記投票指示の1つ以上の公開鍵の1つを含む、コンピュータプログラム。
【請求項2】
前記1つ以上のプロセッサが、前記投票トランザクションを生成するために、前記インプット-アウトプットペアを前記投票コーディネータに送信するようにさらに構成される、請求項1に記載のコンピュータプログラム。
【請求項3】
前記投票オプションのセットの各投票オプションが異なる公開鍵に関連付けられ、前記1つ以上のプロセッサが、選択された投票オプションに関連付けられた公開鍵を決定するようにさらに構成され、前記アウトプットは決定された公開鍵を含む、請求項1又は2に記載のコンピュータプログラム。
【請求項4】
前記投票指示は、未使用トランザクションアウトプットを識別する投票トークンをさらに含み、前記インプット-アウトプットペアのインプットのアウトポイントが前記投票トークンを識別する、請求項1~3のいずれかに記載のコンピュータプログラム。
【請求項5】
前記インプット-アウトプットペアは、事前に定義された投票者のセットのうちの1人の投票者に関連付けられ、前記事前に定義された投票者のセットのサブセットは、各々のインプット-アウトプットペアを生成することが要求され、前記single署名フラグは、前記署名がインプット-アウトプットペアのインプットとアウトプットのみに署名し、前記投票トランザクションの他のインプット又はアウトプットに署名しないような、single-anyone can pay署名フラグである、請求項1~4のいずれかに記載のコンピュータプログラム。
【請求項6】
前記1つ以上のプロセッサが、ユーザ定義の入力を受信するようにさらに構成され、前記インプット-アウトプットペアのアウトプットが、前記ユーザ定義の入力の情報と、前記アウトプットを無効にするオペコードをさらに含む、請求項1~5のいずれかに記載のコンピュータプログラム。
【請求項7】
ブロックチェーンの投票トランザクションを生成するためのコンピュータプログラムであって、前記コンピュータプログラムは、非一時的媒体に格納され、1つ以上のプロセッサによって実行されると、前記1つ以上のプロセッサを、
請求項1~6のいずれかに従って複数のインプット-アウトプットペアを受信し、
投票トランザクションを生成し、
前記投票トランザクションは、
投票インデックスのセットの各投票インデックスの中に、受信したインプット-アウトプットペアの1つと、
認可インデックスの中に、投票コーディネータの署名が投票トランザクションのすべてのインプットとアウトプットに署名するように、all署名フラグを持つ投票コーディネータの署名を含むインプット、及びアウトプットと、
を含み、
前記投票トランザクションをブロックチェーンに送信する、
よう構成させる、コンピュータプログラム。
【請求項8】
前記1つ以上のプロセッサが、事前に定義された数のインプット-アウトプットペアを受信したかどうかを決定するようにさらに構成されている、請求項7に記載のコンピュータプログラム。
【請求項9】
前記1つ以上のプロセッサが、
投票指示を生成し、
投票者のセットのうちの各投票者のユーザ装置から前記投票指示をレンダリングする、
よう構成され、
前記投票指示を生成する処理は、
投票を開始するユーザ入力を検出することと、
少なくとも1つの公開鍵を前記投票に関連付けることと、
を含む、請求項7又は8に記載のコンピュータプログラム。
【請求項10】
前記1つ以上のプロセッサがトークンのセットを生成するように構成されており、前記トークンのセットのうちの各トークンは、前記投票者のセットのうちの投票者の1人に関連付けられた未使用トランザクションアウトプットである、請求項9に記載のコンピュータプログラム。
【請求項11】
前記投票指示は、前記投票指示がアクセス可能にレンダリングされるコンピュータ装置の受信側投票者に関連付けられたトークンを含む、請求項10に記載のコンピュータプログラム。
【請求項12】
前記1つ以上のプロセッサが、更に、前記少なくとも1つの公開鍵の各々のアドレスにアクセスするように構成されている、請求項7~11のいずれかに記載のコンピュータプログラム。
【請求項13】
前記1つ以上のプロセッサが、更に、投票トランザクションがブロックチェーンノードによって妥当性確認された後に、前記投票トランザクションにアクセスするように構成されている、請求項7~12のいずれかに記載のコンピュータプログラム。
【請求項14】
前記1つ以上のプロセッサが、受信したインプット-アウトプットペアのアウトポイントによって示される未使用トランザクションアウトプットが、トランザクション手数料をカバーするのに十分であるかどうかを決定するように、更に構成され、
前記未使用トランザクションアウトプットが、前記トランザクション手数料をカバーするのに十分でない場合、認可インデックスのインプットは、前記インプット-アウトプットペアによってカバーされない前記トランザクション手数料の金額をカバーするのに十分な未使用トランザクションアウトプットを示すアウトポイントを含む、請求項7から13のいずれかに記載のコンピュータプログラム。
【請求項15】
前記インプット-アウトプットペアのインプットのアウトポイントによって識別される未使用トランザクションアウトプットは、投票数に比例する値を持ち、1つの投票は事前に定義された値を持つ、請求項1~14のいずれかに記載のコンピュータプログラム。
【請求項16】
前記トークンは、前記トークンを含むインプットの非署名部分に署名するときに使用しなければならない署名フラグを定義するロックスクリプトに関連付けられている。請求項4又は11、請求項4又は11に従属する請求項5~6、12~15のいずれかに記載のコンピュータプログラム。
【請求項17】
コンピュータ可読媒体上に具現化されたブロックチェーントランザクションであって、
ブロックチェーントランザクションのインプット内で示される使用可能トランザクションアウトプットを有効に消費するためのインプット、
署名要件と必要な署名フラグを定義するロックスクリプトを含み、後続のブロックチェーントランザクションでアンロックスクリプトと連結されたときに、前記アンロックスクリプトの署名を妥当性確認し、前記アンロックスクリプトから使用された署名フラグを抽出し、前記使用された署名フラグと前記必要な署名フラグを比較し、前記使用された署名フラグが前記必要な署名フラグと一致しない及び/又は前記署名が無効である場合に、前記後続のブロックチェーントランザクションが無効になるようにする、少なくとも1つのアウトプットと、
を含むブロックチェーントランザクション。
【請求項18】
前記署名フラグが前記署名の最後のバイトによって示され、前記使用された署名フラグを前記必要な署名フラグと比較するステップは、前記署名の前記最後のバイトを前記ロックスクリプトで定義された前記必要な署名フラグを示す値と比較することを含み、前記署名の前記最後のバイトが前記必要な署名フラグを示す値と等しい場合、前記使用された署名フラグと前記必要な署名フラグが一致する、請求項17に記載のブロックチェーントランザクション。
【請求項19】
トークンが投票トランザクションで使用され、使用可能アウトプットが投票数に比例する値を持つ、請求項17又は18に記載のブロックチェーントランザクション。
【請求項20】
前記ブロックチェーントランザクションは、承認されたパーティのセットのうちの各パーティに関連付けられたアウトプットを含み、前記承認されたパーティは、後続のブロックチェーントランザクションのインプットとアウトプットを提供する権限を与えられている、請求項17~19のいずれかに記載のブロックチェーントランザクション。
【請求項21】
前記承認されたパーティのセットのうちのサブセットは、前記後続のブロックチェーントランザクションのインプットとアウトプットを提供する必要があり、前記必要な署名フラグは、前記後続のブロックチェーントランザクション内の同じインデックスで提供されるインプットとアウトプットのみを承認するためのsingle-anyone can pay署名フラグである、請求項20に記載のブロックチェーントランザクション。
【請求項22】
前記承認されたパーティのセットのうちのすべてのパーティは、前記後続のブロックチェーントランザクションのインプットとアウトプットを提供する必要があり、前記必要な署名フラグは、前記後続のトランザクションのすべてのインプットと、提供されたアンロックスクリプトと同じインデックスでのアウトプットのみを承認するためのsingle-all署名フラグである、請求項20に記載のブロックチェーントランザクション。
【請求項23】
前記ブロックチェーントランザクションがトークン発行トランザクションであり、前記トークン発行トランザクションのアウトプットは、前記ブロックチェーントランザクションをブロックチェーンに記録するためだけに十分なデジタルアセットの名目量を定義する、請求項17~22のいずれかに記載のブロックチェーントランザクション。
【請求項24】
投票を行うためのブロックチェーンの投票トランザクションのインプットとアウトプットを生成する方法であり、前記方法は、
投票コーディネータから、前記投票コーディネータによって定義された1つ以上の公開鍵と投票オプションのセットとを含む投票指示を受信するステップと、
前記投票オプションのセットを表示するユーザインタフェースをレンダリングするステップと、
前記ユーザインタフェースでユーザ入力によって定義された前記投票オプションのセットのうちの1つの投票オプションのユーザ選択を受信するステップと、
投票トランザクションの異なるインデックスにある1つ以上の他のインプット-アウトプットペアを有する前記投票トランザクションに含めるインプット-アウトプットペアを生成するステップと、
を含み、
前記インプット-アウトプットペアのインプットの非署名部分は、ブロックチェーントランザクションの未使用トランザクションアウトプットを識別するアウトポイントを含み、前記インプットの署名部分は、signature singleフラグと、少なくとも前記インプット-アウトプットペアの前記非署名部分と前記インプット-アウトプットペアのアウトプットに署名するが前記投票トランザクションの他のアウトプットに署名しない関連署名と、を含み、前記インプット-アウトプットペアの前記アウトプットは、前記投票指示の1つ以上の公開鍵の1つを含む、方法。
【請求項25】
ブロックチェーンの投票トランザクションを生成する方法であって、前記方法は、
請求項1~16のいずれかに従い複数のインプット-アウトプットペアを受信するステップと、
投票トランザクションを生成するステップであって、前記投票トランザクションは、
投票インデックスのセットの各投票インデックスの中に、受信したインプット-アウトプットペアの1つ、及び、
認可インデックスの中に、投票コーディネータの署名が投票トランザクションのすべてのインプットとアウトプットに署名するように、all署名フラグを持つ投票コーディネータの署名を含むインプットと、アウトプットと、
を含む、ステップと、
前記投票トランザクションをブロックチェーンに送信するステップと、
を含む方法。
【請求項26】
コンピュータシステムであって、
請求項1~6、又は請求項4に従属する請求項16のいずれかに記載のコンピュータプログラムを実行するように構成された少なくとも1つのコンピューティング装置と、
請求項7~15、又は請求項7に従属する請求項16記載のコンピュータプログラムを実行するように構成された少なくとも1つのコンピューティング装置と、
を含むコンピュータシステム。
【請求項27】
ブロックチェーントランザクションを生成するコンピュータプログラムであって、前記コンピュータプログラムは非一時的媒体に格納され、1つ以上のプロセッサにより実行されると、前記1つ以上のプロセッサを、前記ブロックチェーントランザクションを生成するよう構成させ、前記ブロックチェーントランザクションは、
前記ブロックチェーントランザクションのインプット内で示される使用可能トランザクションアウトプットを有効に消費するためのインプットと、
署名要件と必要な署名フラグを定義するロックスクリプトを含む少なくとも1つのアウトプットであって、後続のブロックチェーントランザクション内のアンロックスクリプトと連結されたときに、前記アンロックスクリプトの署名を妥当性確認し、前記アンロックスクリプトから使用された署名フラグを抽出し、前記使用された署名フラグと前記必要な署名フラグを比較し、前記使用された署名フラグが前記必要な署名フラグと一致しない及び/又は前記署名が無効である場合に、前記後続のブロックチェーントランザクションが無効になるようにする、少なくとも1つのアウトプットと、
を含む、コンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、ブロックチェーントランザクションで使用される署名フラグに関する。
【背景技術】
【0002】
ブロックチェーンとは、分散型ピアツーピア(P2P)ネットワーク(以下で「ブロックチェーンネットワーク」とも呼ばれる)内の複数のノードの各々において、ブロックチェーンの重複コピーが維持され広く公表される、分散データ構造の形態を指す。ブロックチェーンは、データのブロックのチェーンを含み、各ブロックは1つ以上のトランザクションを含む。所謂「コインベーストランザクション」以外の各トランザクションは、シーケンス内の先行するトランザクションをポイントする。シーケンスは、1つ以上のコインベーストランザクションまで遡る1つ以上のブロックに跨がってよい。コインベーストランザクションは以下で更に議論される。ブロックチェーンネットワークに提出されるトランザクションは、新しいブロックに含まれる。新しいブロックは、「マイニング」として知られる処理により生成される。「マイニング」は、複数のノードの各々が「proof-of-work」を実行するために競争する、つまり、ブロックチェーンの新しいブロックに含まれることを待っている順序付き及び妥当性確認済みの保留中のトランザクションの定義されたセットの提示に基づき、暗号パズルを解くことを含む。留意すべきことに、ブロックチェーンは幾つかのノードにおいてプルーニング(pruned)されてよく、ブロックの公開はブロックヘッダのみの公開を通じて達成できる。
【0003】
ブロックチェーン内のトランザクションは、以下の目的:デジタルアセット(つまり、多数のデジタルトークン)を運ぶこと、仮想台帳又はレジストリの中のエントリのセットを順序付けること、タイムスタンプエントリを受信し処理すること、及び/又はインデックスポインタを時系列にすること、のうちの1つ以上のために使用できる。ブロックチェーンの上に追加の機能をレイヤ化するために、ブロックチェーンを利用することもできる。例えば、ブロックチェーンプロトコルは、トランザクション内のデータに追加のユーザデータ又はインデックスを格納できるようにし得る。単一トランザクション内に格納できる最大データ容量に対する予め指定された限度は存在しない。従って、より複雑なデータを組み込むことができる。例えば、これは、ブロックチェーン内に電子文書(electronic document)、或いはオーディオ若しくはビデオデータを格納するために使用され得る。
【0004】
ブロックチェーンネットワークのノード(「マイナー」と呼ばれることがある)は、以下に詳細に説明する分散型トランザクション登録及び検証処理を実行する。つまり、この処理の間、ノードは、トランザクションの妥当性確認を行い、それらをブロックテンプレイトに挿入し、それに対して有効なproof-of-work解を特定しようと試みる。有効な解が見付かると、新しいブロックはネットワークの他のノードへと伝播され、それにより、各ノードがブロックチェーンに新しいブロックを記録できるようになる。トランザクションをブロックチェーンに記録させるために、ユーザ(例えば、ブロックチェーンクライアントアプリケーション)は、伝播させるために、ネットワークのノードの1つにトランザクションを送信する。トランザクションを受信したノードは、proof-of-work解を見付けるために競争し、妥当性確認されたトランザクションを新しいブロックに組み込む。各ノードは、トランザクションが有効であるための1つ以上の条件を含む同じノードプロトコルを実施するよう構成される。無効なトランザクションは、伝播されず、ブロックに組み込まれることもない。トランザクションが妥当性確認され、それによってブロックチェーンに受け入れられたと仮定すると、(任意のユーザデータを含む)トランザクションは、従って、不変の公開レコードとしてブロックチェーンネットワークの各ノードに登録されインデックスされたままである。
【0005】
最新のブロックを生成するためにproof-of-workパズルを解くことに成功したノードは、標準的に、デジタルアセットの新しい量、つまりトークンの数を生成する「コインベーストランザクション(coinbase transaction)」と呼ばれる新しいトランザクションにより報酬を受ける。無効なトランザクションの検出及び拒否は、ネットワークのエージェントとして動作し及び不法行為を報告及び阻止するよう奨励される競合ノードの動作により実施される。情報の広範な公開により、ユーザはノードの性能を継続的に監査できる。単なるブロックヘッダの公開により、参加者はブロックチェーンの現下の完全性を保証できる。
【0006】
「アウトプットベースの」モデル(UTXOに基づくモデルと呼ばれることもある)では、所与のトランザクションのデータ構造は、1つ以上のインプット及び1つ以上のアウトプットを含む。任意の使用可能アウトプットは、先行するトランザクションシーケンスから導出可能なデジタルアセットの量を指定する要素を含む。使用可能アウトプットは、時にUTXO(unspent transaction output、未使用トランザクションアウトプット)と呼ばれる。アウトプットは、アウトプットの将来の償還(redemption)のための条件を指定するロックスクリプトを更に含んでよい。ロックスクリプトは、デジタルトークン又はアセットを妥当性確認し及び移転するために必要な条件を定義する述部(predicate)である。(コインベーストランザクション以外の)トランザクションの各インプットは、先行するトランザクション内のそのようなアウトプットへのポインタ(つまり参照)を含み、ポイントされたアウトプットのロックスクリプトをアンロックするためのアンロックスクリプトを更に含んでよい。従って、トランザクションのペアを考えるとき、それらを、第1トランザクション及び第2トランザクション(又は「ターゲット」トランザクション)と呼ぶ。第1トランザクションは、デジタルアセットの量を指定する、及びアウトプットをアンロックする1つ以上の条件を定義するロックスクリプトを含む、少なくとも1つのアウトプットを含む。第2ターゲットトランザクションは、第1トランザクションのアウトプットへのポインタと、第1トランザクションのアウトプットをアンロックするためのアンロックスクリプトとを含む、少なくとも1つのインプットを含む。
【0007】
このようなモデルでは、第2ターゲットトランザクションがブロックチェーンで伝播され記録されるブロックチェーンネットワークに送られるとき、各ノードで適用される有効性の基準の1つは、アンロックスクリプトが第1トランザクションのロックスクリプトで定義された1つ以上の条件のすべてを満たすことである。もう1つは、第1トランザクションのアウトプットが、別の前の有効なトランザクションによって未だ償還されていないことである。これらの条件のうちのいずれかに従いターゲットトランザクションが無効であると分かった任意のノードは、該トランザクションを(有効なトランザクションとして)伝搬させず(しかし、無効なトランザクションを登録する場合がある)、ブロックチェーンに記録させるために新しいブロックに含めることもしない。
【0008】
トランザクションモデルの代替のタイプは、アカウントに基づくモデルである。この場合、各トランザクションは、過去の一連のトランザクションにおいて、先行するトランザクションのUTXOに戻って参照することによって移転される量を定義するのではなく、絶対的な口座(アカウント)残高を参照することによって移転される。すべてのアカウントの現在の状態は、ブロックチェーンと分離してノードによって保管され、絶えず更新される。
【発明の概要】
【0009】
ブロックチェーントランザクションでは、署名は、資金の所有権又は正当な管理の証拠を提供すること、支出を承認すること、及びトランザクション情報の完全性を保証すること、の3つの目的を果たす。3番目の機能は、署名を無効にすることなく、トランザクションの特定の詳細を変更できないようにすることを保証する。例えば、アウトプットに署名することで、ネットワークにブロードキャストされたトランザクションを誰も傍受できず、資金が割り当てられているアドレスを変更できないようにする。
【0010】
特定のアウトプットベースのトランザクションモデルでは、通常、トランザクションに署名するときに、署名側パーティ(当事者、party)は、トランザクションで定義されたすべてのインプットとアウトプットに適用される署名を作成する。ただし、署名を作成するときに異なるタグ(sighashフラグと呼ばれる)を使用することで、トランザクションの特定の要素にのみ適用又は「承認」されるように、署名を特定のものにすることができる。
【0011】
複数のパーティが1つのトランザクションで共同作業を行う状況では、従来のsighash ALL署名アプローチでは、署名を進める前に、パーティ間でトランザクションの詳細を確立するための初期通信が必要になる。これは非効率であり、多くの場合、パーティ間の関係を正確に反映しない相互依存関係を与える。対照的に、異なるsighashフラグを組み合わせることで、パーティはトランザクションの異なる部分に個別に署名する柔軟性を得ることができる。
【0012】
このような柔軟性が役立つ機能の例としては、投票において、各投票者が自分の投票に関連するインプットとアウトプットのみに署名する機能がある。従って、投票は匿名のままにすることができる。署名前にすべてのインプットとアウトプットを知る必要があるため、標準のsighash ALL署名モデルを使用して投票を行うことはできず、投票結果に不満がある場合に署名の提供を拒否し、投票を無効にする機会を投票者に提供してしまう。
【0013】
本明細書に開示される一態様によると、投票を行うためのブロックチェーンの投票トランザクションのインプットとアウトプットを生成するためのコンピュータプログラムであり、前記コンピュータプログラムは、非一時的媒体に格納され、1つ以上のコンピュータプロセッサによって実行されると、前記1つ以上のプロセッサを、
投票コーディネータから、前記投票コーディネータによって定義された1つ以上の公開鍵と投票オプションのセットとを含む投票指示を受信し、
ディスプレイを制御して、前記投票オプションのセットを表示するユーザインタフェースをレンダリングし、
前記ユーザインタフェースでユーザ入力によって定義された前記投票オプションのセットのうちの1つの投票オプションのユーザ選択を受信し、
投票トランザクションの異なるインデックスにある1つ以上の他のインプット-アウトプットペアを有する前記投票トランザクションに含めるインプット-アウトプットペアを生成する、
よう構成させ、
前記インプット-アウトプットペアのインプットの非署名部分は、ブロックチェーントランザクションの未使用トランザクションアウトプットを識別するアウトポイントを含み、前記インプットの署名部分は、signature singleフラグと、少なくとも前記インプット-アウトプットペアの前記非署名部分と前記インプット-アウトプットペアのアウトプットに署名するが前記投票トランザクションの他のアウトプットに署名しない関連署名と、を含み、前記インプット-アウトプットペアの前記アウトプットは、前記投票指示の1つ以上の公開鍵の1つを含む、コンピュータプログラムが提供される。
【0014】
本明細書に開示される第2態様によると、ブロックチェーンの投票トランザクションを生成するためのコンピュータプログラムであって、前記コンピュータプログラムは、非一時的媒体に格納され、1つ以上のプロセッサによって実行されると、前記1つ以上のプロセッサを、
複数のインプット-アウトプットペアを受信し、
投票トランザクションを生成し、
前記投票トランザクションは、
投票インデックスのセットの各投票インデックスの中に、受信したインプット-アウトプットペアの1つと、
認可インデックスの中に、投票コーディネータの署名が投票トランザクションのすべてのインプットとアウトプットに署名するように、all署名フラグを持つ投票コーディネータの署名で構成されるインプットと、
アウトプットと、
を含み、
前記投票トランザクションをブロックチェーンに送信する、
よう構成させる、コンピュータプログラムが提供される。
【0015】
本明細書に開示される第3態様によると、コンピュータ可読媒体上に具現化されたブロックチェーントランザクションであって、
ブロックチェーントランザクションのインプット内で示される使用可能トランザクションアウトプットを有効に消費するためのインプット、
署名要件と必要な署名フラグを定義するロックスクリプトを含み、後続のブロックチェーントランザクションでアンロックスクリプトと連結されたときに、前記アンロックスクリプトの署名を妥当性確認し、前記アンロックスクリプトから使用された署名フラグを抽出し、前記使用された署名フラグと前記必要な署名フラグを比較し、前記使用された署名フラグが前記必要な署名フラグと一致しない及び/又は前記署名が無効である場合に、前記後続のブロックチェーントランザクションが無効になるようにする、少なくとも1つのアウトプットと、
を含むブロックチェーントランザクションが提供される。
【図面の簡単な説明】
【0016】
本開示の実施形態の理解を助け、そのような実施形態がどのように実施され得るかを示すために、例としてのみ以下の添付の図面を参照する。
【
図1】ブロックチェーンを実装するためのシステムの概略ブロック図である。
【
図2】ブロックチェーンに記録されるトランザクションの幾つかの例を概略的に示す。
【
図3A】クライアントアプリケーションの概略ブロック図である。
【
図3B】
図3Aのクライアントアプリケーションにより提示され得る例示的なユーザインタフェースの概略的模擬表示である。
【
図4】トランザクションを処理するための特定のノードソフトウェアの概略ブロック図である。
【
図5】例示的なトークン発行トランザクションである。
【
図6】全ての有権者に投票を行うよう要求する投票のための例示的な投票トランザクションである。
【
図7】定足数投票のための例示的な投票トランザクションである。
【
図8】トークン発行トランザクションと投票トランザクションのインプットとアウトプットの関係の概略図である。
【
図9】ブロックチェーンを用いて投票を提供する例示的な方法を示す。
【発明を実施するための形態】
【0017】
例示的なシステムの概要
図1は、ブロックチェーン150を実装するための例示的なシステム100を示す。システム100は、典型的にはインターネットのような広域インターネットワークであるパケット交換ネットワーク101を含んでよい。パケット交換ネットワーク101は、パケット交換ネットワーク101内にピアツーピア(P2P)ネットワーク106を形成するように配置され得る複数のブロックチェーンノード104を含む。図示されないが、ブロックチェーンノード104は、ほぼ完全なグラフとして配置されてよい。各ブロックチェーンノード104は、従って、他のブロックチェーンノード104と高度に結合される。
【0018】
各ブロックチェーンノード104は、異なるピアに属するノード104のうちの異なるノード104を有す、ピアのコンピュータ装置を含む。各ブロックチェーンノード104は、1つ以上のプロセッサ、例えば、1つ以上の中央処理装置(CPU)、アクセラレータプロセッサ、特定用途向けプロセッサ、及び/又はフィールドプログラマブルゲートアレイ(FPGA)、及び特定用途向け集積回路(ASIC)のような他の機器を含む処理装置を含む。各ノードはまた、メモリ、すなわち、非一時的コンピュータ読み取り可能媒体又は媒体の形態のコンピュータ読み取り可能記憶装置を備える。メモリは、1つ以上のメモリ媒体、例えば、ハードディスクなどの磁気媒体、固体ドライブ(solid-state drive (SSD))、フラッシュメモリ又はEEPROMなどの電子媒体、及び/又は光ディスクドライブなどの光学媒体を使用する1つ以上のメモリユニットを含んでもよい。
【0019】
ブロックチェーン150は、データのブロック151のチェーンを含み、ブロックチェーン150の各々のコピーは、分散型又はブロックチェーンネットワーク106内の複数のノード104の各々において維持される。上述のように、ブロックチェーン150のコピーを維持することは、必ずしも、ブロックチェーン150全体を格納することを意味しない。代わりに、各ブロックチェーンノード150が各ブロック151のブロックヘッダ(後述する)を格納する限り、ブロックチェーン150からデータを取り除くことができる。チェーン内の各ブロック151は、1つ以上のトランザクション152を含み、ここでは、この文脈におけるトランザクションは、一種のデータ構造を参照する。データ構造の性質は、トランザクションモデル又はスキームの一部として使用されるトランザクションプロトコルのタイプに依存する。所与のブロックチェーンは、全体を通して、1つの特定のトランザクションプロトコルを使用する。1つの一般的なタイプのトランザクションプロトコルでは、各トランザクション152のデータ構造は、少なくとも1つのインプット及び少なくとも1つのアウトプットを含む。各アウトプットは、資産としてのデジタルアセットの量を表す量を指定する。この例では、アウトプットが暗号的にロックされているのはユーザ103である(ロックを解除し、それによって償還又は使用するために、そのユーザの署名又は他の解を必要とする)。各インプットは、先行するトランザクション152のアウトプットを指し示し、それによって、トランザクションをリンクする。
【0020】
各ブロック151は、また、ブロック151への逐次的順序を定義するように、チェーン内の先に生成されたブロック151を遡ってポイントするブロックポインタ155を含む。(コインベーストランザクション以外の)各トランザクション152は、トランザクションのシーケンスに順序を定義するために、前のトランザクションへのポインタを含む(注:トランザクション152のシーケンスは、分岐することが許される)。ブロック151のチェーンは、チェーンの第1ブロックであったジェネシスブロック(genesis block (Gb))153にまで戻る。チェーン150の初期に1つ以上のオリジナルトランザクション152は、先行するトランザクションではなくジェネシスブロック153を指し示した。
【0021】
ブロックチェーンノード104の各々はトランザクション152を他のブロックチェーンノード104へ転送し、それにより、ネットワーク106に渡りトランザクション152を伝播させるよう構成される。各ブロックチェーンノード104は、ブロック151を生成し、同じブロックチェーン150の各々のコピーを自身の各々のメモリに格納するよう構成される。各ブロックチェーンノード104はまた、ブロック151に組み込まれるのを待つトランザクション152の順序付きセット(又はプール)154を維持する。順序付きプール154は、時に「メモプール(mempool)」と呼ばれる。この用語は、本願明細書では、任意の特定のブロックチェーン、プロトコル、又はモデルに限定されない。それは、ノード104が有効であるとして受け付けた、及びノード104が同じアウトプットを使用しようと試みる他のトランザクションを受け付けないよう義務付けられたトランザクションの順序付きセットを表す。
【0022】
所与の現在のトランザクション152jにおいて、インプット(又はその各々)は、トランザクションのシーケンスの中の先行トランザクション152iのアウトプットを参照するポインタを含み、このアウトプットが現在のトランザクション152jにおいて償還されるか又は「使用される(spent)」ことを指定する。一般に、先行するトランザクションは、順序付きセット154又は任意のブロック151内の任意のトランザクションであり得る。先行するトランザクション152iは、必ずしも、現在のトランザクション152jが生成された又はネットワーク106へ送信されたときに存在する必要はないが、先行するトランザクション152iは、現在のトランザクションが有効であるために存在し妥当性確認されている必要がある。従って、本願明細書で「先行する」は、ポインタによりリンクされた論理的シーケンスの中で先行するものを表し、必ずしも時系列の中での生成又は送信の時間を表さない。従って、それは、必ずしも、トランザクション152i,152jが順不同で生成され又は送信されることを排除しない(以下の親のない(orphan)トランザクションに関する議論を参照する)。先行するトランザクション152iは、等しく、祖先(antecedent)又は先行(predecessor)トランザクションと呼ばれ得る。
【0023】
現在のトランザクション152jのインプットは、インプット認可、例えば先行するトランザクション152iのアウトプットがロックされているユーザ103aの署名も含む。次に、現在のトランザクション152jのアウトプットは、新しいユーザ又はエンティティ103bに暗号的にロックすることができる。従って、現在のトランザクション152jは、先行するトランザクション152iのインプットに定義された量を、現在のトランザクション152jのアウトプットに定義された新しいユーザ又はエンティティ103bに移転することができる。ある場合には、トランザクション152は、複数のユーザ又はエンティティ間でインプット量を分割するために複数のアウトプットを有してもよいエンティティ(そのうちの1つは、お釣りを与えるために、元のユーザ又はエンティティ103aであってもよい)。幾つかの場合には、トランザクションが複数のインプットを有し、1つ以上の先行するトランザクションの複数のアウトプットから量をまとめ、現在のトランザクションの1つ以上のアウトプットに再分配することもできる。
【0024】
ビットコインのようなアウトプットに基づくトランザクションプロトコルによると、個人ユーザ又は組織のようなエンティティ103は、(手動で又はパーティにより利用されている自動処理によって)新しいトランザクション152jに作用したいとき、作用側エンティティは新しいトランザクションを自身のコンピュータ端末102から受信側へ送信する。作用側パーティ又は受信側は、結局、このトランザクションをネットワーク106のブロックチェーンノード104のうちの1つ以上(これらは、今日では、標準的にサーバ又はデータセンタであるが、原理的に他のユーザ端末も可能である)へと送信する。幾つかの例では、新しいトランザクション152jに作用するパーティ103が、トランザクションを、受信側ではなくブロックチェーンノード104のうちの1つ以上へと直接送信し得ることも排除されない。トランザクションを受信するブロックチェーンノード104は、各ブロックチェーンノード104に適用されるブロックチェーンノードプロトコルに従って、トランザクションが有効であるかどうかをチェックする。ブロックチェーンノードプロトコルは、典型的には、ブロックチェーンノード104に、新しいトランザクション152j内の暗号署名が、トランザクション152の順序付きシーケンスの中の前のトランザクション152iに依存する、期待される署名と一致することをチェックすることを要求する。このようなアウトプットに基づくトランザクションプロトコルの場合、これは、新しいトランザクション152jのインプットに含まれるパーティ103の暗号署名又は他の認証が、新しいトランザクションが割り当てる先行するトランザクション152jのアウトプットに定義された条件と一致することをチェックすることを含んでよく、この条件は、典型的には、新しいトランザクション152jのインプット内の暗号署名又は他の認証が、新しいトランザクションのインプットがリンクされた前のトランザクション152iのアウトプットをアンロックすることを少なくともチェックすることを含む。条件は、先行するトランザクション152iのアウトプットに含まれるスクリプトにより少なくとも部分的に定義されてよい。あるいは、単にブロックチェーンノードプロトコルだけで固定することもできるし、あるいは、これらの組み合わせによることもある。いずれにせよ、新しいトランザクション152jが有効であれば、ブロックチェーンノード104は、新しいトランザクションをブロックチェーンネットワーク106内の1つ以上の他のブロックチェーンノード104に転送する。これらの他のブロックチェーンノード104は、同じノードプロトコルに従って同じテストを適用し、新しいトランザクション152jを1つ以上のさらなるノード104に転送し、以下で同様である。このようにして、新しいトランザクションは、ブロックチェーンノード104のネットワーク全体に伝播される。
【0025】
アウトプットベースのモデルでは、与えられ割り当てアウトプット(例えば、UTXO)が割り当てられる(例えば使用される)かどうかの定義は、ブロックチェーンノードプロトコルに従って別の今後の(onward)トランザクション152jのインプットによって既に有効に償還されているかどうかである。トランザクションが有効であるための別の条件は、それが償還を試みる先行するトランザクション152iのアウトプットが、別のトランザクションによって未だ償還されていことである。ここでも、有効でない場合、トランザクション152jは、(無効であるとしてフラグが立てられ変更するために伝播されない限り)ブロックチェーン150に伝播又は記録されない。これは、取引者が同じトランザクションのアウトプットを複数回割り当てようとする二重支出を防ぐ。一方、アカウントベースモデルは、口座残高を維持することによって、二重支出を防ぐ。この場合も、トランザクションの順序が定義されているため、口座残高は、一度に単一の定義された状態を有する。
【0026】
妥当性確認トランザクションに加えて、ブロックチェーンノード104は、また、「proof -of -work」により支えられているマイニングと呼ばれるプロセスで、トランザクションのブロックを最初に作成するために競合する。ブロックチェーンノード104では、ブロックチェーン150に記録されたブロック151にまだ現れていない有効なトランザクションの順序付きプール154に新しいトランザクションが追加される。ブロックチェーンノードは、次に、暗号パズルを解くことを試みることにより、トランザクションの順序付きセット154からトランザクション152の新しい有効なブロック151を組み立てるために競争する。これは、典型的には、ノンス(nonce)が保留トランザクションの順序付きプール154の表現と連結され、ハッシュされるときに、ハッシュのアウトプットが所定の条件を満たすような「ノンス」値を探すことを含む。例えば、所定の条件は、ハッシュのアウトプットが、所定の数の先頭ゼロを有することであってもよい。これは、単に1つの特定の種類のproof-of-workパズルであり、他の種類が排除されないことに留意する。ハッシュ関数の特性は、インプットに関して予測不可能なアウトプットを持つことである。従って、この探索は、ブルートフォースによってのみ実行することができ、従って、パズルを解決しようとしている各ブロックチェーンノード104において、相当量の処理リソースを消費する。
【0027】
パズルを解いた第1ブロックチェーンノード104は、これをネットワーク106に通知し、その解を証明として提供する。この解は、ネットワーク内の他のブロックチェーンノード104によって簡単にチェックすることができる(ハッシュに対する解が与えられれば、ハッシュのアウトプットが条件を満たすことを確認することは簡単である)。第1ブロックチェーンノード104は、該ブロックを受け入れる閾値の他のノードの合意に、ブロックを伝播させ、従ってプロトコルルールを実施する。トランザクションの順序付きセット154は、次に、ブロックチェーンノード104の各々により、ブロックチェーン150内の新しいブロック151として記録されるようになる。また、新しいブロック151nにはブロックポインタ155が割り当てられ、チェーン内で前に作成されたブロック151n-1を指すようになっている。proof-of-work解を生成するために必要とされる例えばハッシュの形式の有意な量の労力が、ブロックチェーンプロトコルのルールに従うという第1ノード104の意図をシグナリングする。そのようなルールは、前に妥当性確認されたトランザクションと同じアウトプットを割り当てる場合に有効としてトランザクションを受け付けないこと、或いは二重支払いとして知られていることを含む。一旦生成されると、ブロック151は、ブロックチェーンネットワーク106内のブロックチェーンノード104の各々で認識され、維持されるので、修正することができない。また、ブロックポインタ155は、ブロック151に順序を課す。トランザクション152は、ネットワーク106内の各ブロックチェーンノード104において順序付きブロックに記録されるので、これは、トランザクションの不変の公開台帳を提供する。
【0028】
パズルを解決するために常に競争している異なるブロックチェーンノード104は、いつ解を探し始めたか、又はトランザクションが受信された順序によって、いつでも未だ公開されていないトランザクションのプール154の異なるスナップショットに基づいてパズルを解いているかもしれないことに留意する。パズルを解く者は誰でも、最初に次の新しいブロック151nに含まれるトランザクション152を定義し、その順序で、未公開のトランザクションの現在のプール154が更新される。そして、ブロックチェーンノード104は、新たに定義された未公開トランザクションの順序付きプール154からブロックを作り出すために、競争を続ける。また、生じ得る「分岐(フォーク、fork)」を解決するためのプロトコルも存在する。これは、2つのブロックチェーンノード104が互いに非常に短い時間内にパズルを解き、ブロックチェーンの矛盾したビューがノード104の間で伝播する場合である。要するに、分岐の枝が伸びるときは常に、最長のものが最終的なブロックチェーン150になる。これは、同じトランザクションが両方の分岐に現れるので、ネットワークのユーザ又はエージェントに影響しないことに留意する。
【0029】
ビットコインブロックチェーン(及び殆どの他のブロックチェーン)によると、新しいブロック104を構成するのに成功したノードは、デジタルアセットの追加の定義された量を分配する新しい特別な種類のトランザクションの中でデジタルアセットの追加の承認された量を新たに割り当てる能力を与えられる(1人のエージェント又はユーザから別のエージェント又はユーザへとデジタルアセットの量を移転するエージェント間又はユーザ間トランザクションと異なる)。この特別な種類のトランザクションは、通常、「コインベーストランザクション」と呼ばれるが、「開始(initiation)トランザクション」又は「生成(generation)トランザクション」とも呼ばれることがある。それは標準に新しいブロック151nの第1トランザクションを形成する。proof-of-workは、この特別なトランザクションが後に償還できるように、新しいブロックを構成したノードがプロトコルルールに従うことを意図していることをシグナリングする。ブロックチェーンプロトコルルールは、この特別なトランザクションが償還できる前に、満期、例えば100ブロックを必要としてよい。通常の(非生成)トランザクション152は、そのアウトプットの1つに追加のトランザクション手数料を指定し、そのトランザクションが公開されたブロック151nを生成したブロックチェーンノード104にさらに報酬を与えることが多い。この手数料は、通常、「トランザクション手数料」と呼ばれ、後述する。
【0030】
トランザクションの妥当性確認及び公開に関連するリソースのために、典型的には、少なくともブロックチェーンノード104の各々は、1つ以上の物理的サーバユニットを含むサーバ、又はデータセンタ全体の形態をとる。しかしながら、原理的に、任意の所与のブロックチェーンノード104は、ユーザ端末又は互いにネットワーク接続されたユーザ端末又はユーザ端末のグループの形態をとることができる。
【0031】
各ブロックチェーンノード104のメモリは、各々の1つ以上の役割を実行し、ブロックチェーンノードプロトコルに従ってトランザクション152を処理するために、ブロックチェーンノード104の処理装置上で動作するように構成されたソフトウェアを記憶する。ブロックチェーンノード104に属するいずれの動作も、各々のコンピュータ装置の処理装置上で実行されるソフトウェアによって実行され得ることが理解されよう。ノードソフトウェアは、アプリケーションレイヤにおける1つ以上のアプリケーション、又はオペレーティングシステムレイヤ若しくはプロトコルレイヤのような下位レイヤ、又はこれらの任意の組合せの中に実装されてよい。
【0032】
また、ネットワーク101には、消費者ユーザの役割を果たす複数のパーティ103の各々のコンピュータ装置102も接続されている。これらのユーザは、ブロックチェーンネットワークと相互作用できるが、トランザクションの妥当性確認及びブロックの構築には参加しない。これらのユーザ又はエージェントのうちの一部は、トランザクションにおいて送信側及び受信側として動作してよい。他のユーザは、必ずしも送信側又は受信側として動作することなく、ブロックチェーン150と相互作用してよい。例えば、幾つかのパーティは、ブロックチェーン150のコピーを格納する(例えば、ブロックチェーンノード104からブロックチェーンのコピーを取得した)記憶エンティティとして動作してよい。
【0033】
パーティ103の一部又は全部は、異なるネットワーク、例えば、ブロックチェーンネットワーク106の上に重ねられたネットワークの部分として結合されてよい。ブロックチェーンネットワークのユーザ(「クライアント」と呼ばれることが多い)は、ブロックチェーンネットワーク106を含むシステムの部分であると言うことができる。しかしながら、これらのユーザは、ブロックチェーンノードの要求される役割を実行しないので、ブロックチェーンノード104ではない。代わりに、各パーティ103は、ブロックチェーンネットワーク106と相互作用し、それにより、ブロックチェーンノード106に結合する(つまり通信する)ことにより、ブロックチェーン150を利用してよい。2つのパーティ103及び各々の機器102は、説明のために示されており、第1パーティ103a及びその各々のコンピュータ機器102a、ならびに第2パーティ103b及びその各々のコンピュータ機器102bである。より多くのこのようなパーティ103及びそれらの各々のコンピュータ機器102がシステム100に存在し、参加することができるが、便宜上、それらは図示されていないことが理解されよう。各パーティ103は、個人又は組織であってもよい。純粋に例示として、第1パーティ103aは、本明細書においてAliceと称され、第2パーティ103bは、Bobと称されるが、これは限定的なものではなく、本明細書においてAlice又はBobという言及は、各々「第1パーティ」及び「第2パーティ」と置き換えることができることは理解されるであろう。
【0034】
各パーティ103のコンピュータ機器102は、1つ以上のプロセッサ、例えば、1つ以上のCPU、GPU、他のアクセラレータプロセッサ、特定用途向けプロセッサ、及び/又はFPGAを備える各々の処理装置を備える。各パーティ103のコンピュータ機器102は、さらに、メモリ、すなわち、非一時的コンピュータ読み取り可能媒体又は媒体の形態のコンピュータ読み取り可能記憶装置を備える。このメモリは、1つ以上のメモリ媒体、例えば、ハードディスクのような磁気媒体、SSD、フラッシュメモリ又はEEPROMのような電子媒体、及び/又は光学ディスクドライブのような光学媒体を使用する1つ以上のメモリユニットを含むことができる。各パーティ103のコンピュータ機器102上のメモリは、処理装置上で動作するように配置された少なくとも1つのクライアントアプリケーション105の各々のインスタンスを含むソフトウェアを記憶する。本明細書で与えられたパーティ103に帰属するいずれのアクションも、各々のコンピュータ装置102の処理装置上で実行されるソフトウェアを使用して実行され得ることが理解されよう。各パーティ103のコンピュータ機器102は、少なくとも1つのユーザ端末、例えばデスクトップ又はラップトップコンピュータ、タブレット、スマートフォン、又はスマートウォッチのようなウェアラブルデバイスを備えている。所与のパーティ103のコンピュータ装置102は、ユーザ端末を介してアクセスされるクラウドコンピューティングリソースのような、1つ以上の他のネットワーク化されたリソースを含んでもよい。
【0035】
クライアントアプリケーション105は、最初に、1つ以上の適切なコンピュータ読み取り可能な記憶媒体、例えばサーバからダウンロードされたもの、又はリムーバブルSSD、フラッシュメモリキー、リムーバブルEEPROM、リムーバブル磁気ディスクドライブ、磁気フロッピーディスク又はテープ、光ディスク、例えばCD又はDVD ROM、又はリムーバブル光学ドライブなどのリムーバブル記憶装置上で、任意の所与のパーティ103のコンピュータ機器102に提供され得る。
【0036】
クライアントアプリケーション105は、少なくとも「ウォレット」機能を備える。これには主に2つの機能を有する。これらのうちの1つは、各々のパーティ103が、ブロックチェーンノード104のネットワーク全体にわたって伝播され、それによってブロックチェーン150に含まれるべきトランザクション152を作成し、認可し(例えば署名し)、送信することを可能にすることである。もう1つは、現在所有しているデジタルアセットの量を各々のパーティに報告することである。アウトプットベースのシステムでは、この第2機能は、当該パーティに属するブロックチェーン150全体に散在する様々なトランザクション152のアウトプットの中で定義される量を照合することを含む。
【0037】
注:種々のクライアント機能が所与のクライアントアプリケーション105に統合されるとして説明されることがあるが、これは、必ずしも限定的ではなく、代わりに、本願明細書に記載される任意のクライアント機能が2つ以上の異なるアプリケーションのスーツに実装されてよく、例えばAPIを介してインタフェースし、又は一方が他方へのプラグインである。より一般的には、クライアント機能は、アプリケーションレイヤ、又はオペレーティングシステムのような下位レイヤ、又はこれらの任意の組合せにおいて実装され得る。以下は、クライアントアプリケーション105の観点で説明されるが、これは限定的ではないことが理解される。
【0038】
各コンピュータ機器102上のクライアントアプリケーション又はソフトウェア105のインスタンスは、ネットワーク106のブロックチェーンノード104の少なくとも1つに動作可能に結合される。これにより、クライアント105のウォレット機能は、トランザクション152をネットワーク106に送信することができる。クライアント105は、また、ブロックチェーンノード104にコンタクトして、各々のパーティ103が受信側である任意のトランザクションについてブロックチェーン150に問い合わせることができる(又は、実施形態では、ブロックチェーン150は、部分的にその公開視認性を通じてトランザクションの信頼を提供する公開的設備であるため、実際には、ブロックチェーン150内の他のパーティのトランザクションを検査する)。各コンピュータ機器102上のウォレット機能は、トランザクションプロトコルに従ってトランザクション152を形成し、送信するように構成される。上述のように、各ブロックチェーンノード104は、ブロックチェーンノードプロトコルに従いトランザクション152を妥当性確認し、トランザクション152をブロックチェーンネットワーク106全体に渡り伝播させるために、トランザクション152を転送するよう構成されるソフトウェアを実行する。トランザクションプロトコルとノードプロトコルは互いに対応し、所与のトランザクションプロトコルは所与のノードプロトコルと共に所与のトランザクションモデルを実装する。同じトランザクションプロトコルは、ブロックチェーン150内の全部のトランザクション152について使用される。同じノードプロトコルは、ネットワーク106内の全部のノード104について使用される。
【0039】
所与のパーティ103、例えばAliceがブロックチェーン150に含まれる新たなトランザクション152jを送信したいと望む場合、彼女は関連するトランザクションプロトコルに従って(彼女のクライアントアプリケーション105のウォレット機能を使用して)新たなトランザクションを作成する(formulate)。彼女は、次に、クライアントアプリケーション105からトランザクション152を、彼女が接続されている1つ以上のブロックチェーンノード104に送信する。例えば、これは、Aliceのコンピュータ102に最も良好に接続されているブロックチェーンノード104であってもよい。任意の所与のブロックチェーンノード104が新しいトランザクション152jを受信すると、ブロックチェーンノードプロトコル及びその各々の役割に従って、それを処理する。これは、最初に、新たに受信されたトランザクション152jが「有効」であるための特定の条件を満たしているかどうかをチェックすることを含み、その例については、簡単に詳述する。幾つかのトランザクションプロトコルでは、妥当性確認のための条件は、トランザクション152に含まれるスクリプトによってトランザクションごとに構成可能であってよい。或いは、条件は単にノードプロトコルの組み込み機能であってもよく、或いはスクリプトとノードプロトコルの組み合わせによって定義されてもよい。
【0040】
新たに受信されたトランザクション152jが、有効であると見なされるテストに合格したという条件で(すなわち、「妥当性確認された」という条件で)、トランザクション152jを受信した任意のブロックチェーンノード104は、そのブロックチェーンノード104に維持されているブロックチェーンの順序付きセット154に、新たな妥当性確認済みトランザクション152を追加する。さらに、トランザクション152jを受信する任意のブロックチェーンノード104は、妥当性確認済みトランザクション152をネットワーク106内の1つ以上の他のブロックチェーンノード104に伝播する。各ブロックチェーンノード104は同じプロトコルを適用するので、トランザクション152jが有効であると仮定すると、これは、ネットワーク106全体に間もなく伝播されることを意味する。
【0041】
所与のブロックチェーンノード104において維持される保留中トランザクションの順序付きプール154に入れられると、該ブロックチェーンノード104は、新しいトランザクション152を含む、彼ら各々のトランザクションのプールの最新バージョンについて、proof-of-workパズルを解く競争を開始する(他のブロックチェーンノード104は、トランザクションの異なるプール154に基づきパズルを解こうとしているが、誰であっても1番の者が、最新のブロック151に含まれるトランザクションのセットを定義することに留意する。)。最終的に、ブロックチェーンノード104は、Aliceのトランザクション152jを含む順序付きプール154の一部についてパズルを解くだろう。)。一旦、新しいトランザクション152jを含むプール154についてproof-of-workが行われると、それはブロックチェーン150内のブロック151のうちの1つの一部となる。各トランザクション152は、以前のトランザクションへのポインタから構成されるので、トランザクションの順序もまた、不変的に記録される。
【0042】
異なるブロックチェーンノード104は、最初に所与のトランザクションの異なるインスタンスを受信する可能性があり、従って、1つのインスタンスが公開(Publishing)されて新しいブロック151になる前に、どのインスタンスが「有効」であるかについて矛盾するビューを有することがあり、その時点で、全部のブロックチェーンノード104は公開されたインスタンスのみが有効なインスタンスであることに合意する。ブロックチェーンノード104が1つのインスタンスを有効であるとして受け入れ、次に第2インスタンスがブロックチェーン150に記録されていることを発見した場合、該ブロックチェーンノード104は、これを受け入れなければならず、最初に受け入れたインスタンス(つまり未だブロック151の中で公開されていないもの)を破棄する(つまり、無効であるとして扱う)。
【0043】
アカウントベースのトランザクションモデルの一部として、幾つかのブロックチェーンネットワークにより運用される別のタイプのトランザクションプロトコルを「アカウントベース」のプロトコルと呼ぶことがある。アカウントベースの場合、各トランザクションは、過去の一連のトランザクションにおいて、先行するトランザクションのUTXOに戻って参照することによって移転される量を定義するのではなく、絶対的な口座(アカウント)残高を参照することによって移転される。すべてのアカウントの現在の状態は、ブロックチェーンと分離して、ネットワークのノードにより格納され、絶えず更新される。このようなシステムでは、トランザクションは、アカウントの連続したトランザクション記録(いわゆる「ポジション」)を用いて発注される。この値は、送信者により彼らの暗号署名の一部として署名され、トランザクション参照計算の一部としてハッシュされる。さらに、任意的なデータフィールドもトランザクションに署名することができる。このデータフィールドは、例えば、前のトランザクションIDがデータフィールドに含まれている場合、前のトランザクションを遡ってポイントしてよい。
【0044】
<UTXOベースのモデル>
図2は、トランザクションプロトコルの例を示している。これは、UTXOベースのプロトコルの例である。トランザクション152(「Tx」と略す)は、ブロックチェーン150(各ブロック151は1つ以上のトランザクション152を含む)の基本的なデータ構造である。以下は、アウトプットベース又は「UTXO」ベースのプロトコルを参照して説明される。しかし、これは、全ての可能な実施形態に限定されるものではない。例示的なUTXOベースのプロトコルは、ビットコインを参照して説明されるが、他の例示的なブロックチェーンネットワーク上でも等しく実施できることに留意する。
【0045】
UTXOベースのモデルでは、各トランザクション(「Tx」)152は、1つ以上のインプット202及び1つ以上のアウトプット203を含むデータ構造を含む。各アウトプット203は、未使用トランザクションアウトプット(UTXO)を含んでもよく、これは、別の新しいトランザクションのインプット202のソースとして使用することができる(UTXOが未だ償還されていない場合)。UTXOは、デジタルアセットの量を指定する値を含む。これは、分散型台帳上のトークンの設定数を表す。また、他の情報の中でも、UTXOは、それが由来するトランザクションのトランザクションIDも含んでよい。トランザクションデータ構造はまた、ヘッダ201も含んでよく、ヘッダ201は、インプットフィールド202及びアウトプットフィールド203のサイズの指示子を含んでもよい。ヘッダ201は、トランザクションのIDも含んでもよい。実施形態において、トランザクションIDは、トランザクションデータ(トランザクションID自体を除く)のハッシュであり、ノード104に提出された未処理トランザクション152のヘッダ201に格納される。
【0046】
例えばAlice103aは、問題のデジタルアセットの量をBob103bに移転するトランザクション152jを作成したいと考えているとする。
図2において、Aliceの新しいトランザクション152jは「Tx
1」とラベル付けされている。これは、Aliceにロックされているデジタルアセットの量を、シーケンス内の先行するトランザクション152iのアウトプット203に取り入れ、その少なくとも一部をBobに移転する。先行するトランザクション152iは、
図2において「Tx
0」とラベル付けされている。Tx
0とTx
1は、単なる任意のラベルである。これらは、必ずしも、Tx
0がブロックチェーン151の第1トランザクションであること、又は、Tx
1がプール154の直ぐ次のトランザクションであることを意味しない。Tx
1は、まだAliceにロックされた未使用アウトプット203を有する任意の先行する(つまり祖先)トランザクションを指し示すことができる。
【0047】
先行するトランザクションTx0は、Aliceが彼女の新しいトランザクションTx1を作成するとき、又は少なくとも彼女がそれをネットワーク106に送信するときに、既に妥当性確認され、ブロックチェーン150のブロック151に含まれていてもよい。それは、その時点で既にブロック151のうちの1つに含まれていてもよく、あるいは、順序付きセット154内でまだ待機していてもよく、その場合、新しいブロック151にすぐに含まれることになる。あるいは、Tx0及びTx1が生成されネットワーク106に送信されることができ、あるいは、ノードプロトコルが「孤児(orphan)」トランザクションのバッファリングを許容する場合にはTx1の後にTx0が送信されることもできる。ここでトランザクションのシーケンスの文脈で使用される「先行する」及び「後の」という用語は、トランザクション内で指定されたトランザクションポインタ(どのトランザクションがどの他のトランザクションを指すかなど)によって定義されるシーケンス内のトランザクションの順序を指す。それらは、「先行する」及び「相続する」又は「祖先」及び「子孫」、「親」及び「子」、等により、等しく置き換えられ得る。これは、必ずしも、それらが作成され、ネットワーク106に送られ、又は任意の所与のブロックチェーンノード104に到達する順序を意味しない。それにもかかわらず、先行するトランザクション(祖先トランザクション又は「親」)を指す後続のトランザクション(子孫トランザクション又は「子」)は、親トランザクションが妥当性確認されない限り、妥当性確認されない。親の前にブロックチェーンノード104に到着した子は孤児とみなされる。それは、ノードプロトコル及び/又はノードの行動に応じて、親を待つために特定の時間、破棄又はバッファリングされることがある。
【0048】
先行するトランザクションTx0の1つ以上のアウトプット203のうちの1つは、本明細書でUTXO0とラベル付けされた特定のUTXOを含む。各UTXOは、UTXOによって表されるデジタルアセットの量を指定する値と、後続のトランザクションが検証されるために、従ってUTXOが正常に償還されるために、後続のトランザクションのインプット202の中のアンロックスクリプトによって満たされなければならない条件を定義するロックスクリプトとを含む。典型的には、ロックスクリプトは、特定のパーティ(それが含まれているトランザクションの受益者)に量をロックする。すなわち、ロックスクリプトは、標準的に以下のようなアンロック条件を定義する:後続のトランザクションのインプット内のアンロックスクリプトは、先行するトランザクションがロックされたパーティの暗号署名を含む。
【0049】
ロックスクリプト(別名scriptPubKey)は、ノードプロトコルによって認識されるドメイン固有の言語で書かれたコードの一部である。そのような言語の特定の例は、ブロックチェーンネットワークにより使用される「スクリプト」(Script,大文字S)と呼ばれる。ロックスクリプトは、トランザクションアウトプット203を消費するために必要な情報、例えば、Aliceの署名の必要条件を指定する。トランザクションのアウトプットには、アンロックスクリプトが現れる。アンロックスクリプト(別名:scriptSig)は、ロックスクリプトの基準を満たすために必要な情報を提供するドメイン固有の言語で書かれたコードの一部である。例えば、Bobの署名を含んでもよい。アンロックスクリプトは、トランザクションのインプット202に現れる。
【0050】
図示の例では、Tx0のアウトプット203のUTXO0は、ロックスクリプト[ChecksigPA]を含み、これは、UTXO0が償還されるために(厳密には、UTXO0を償還しようとする後続のトランザクションが有効であるために)、Aliceの署名SigPAを必要とする。[Checksig PA]は、Aliceの公開-秘密鍵ペアからの公開鍵PAの表現(つまりハッシュ)を含む。Tx1のインプット202は、Tx1を指すポインタ(例えば、そのトランザクションID、実施形態ではトランザクションTx0全体のハッシュであるTxID0による)を含む。Tx1のインプット202は、Tx0の任意の他の可能なアウトプットの中でそれを識別するために、Tx0内のUTXO0を識別するインデックスを含む。Tx1のインプット202は、さらに、Aliceが鍵ペアからのAliceの秘密鍵をデータの所定の部分(暗号において「メッセージ」と呼ばれることもある)に適用することによって作成された、Aliceの暗号署名を含むアンロックスクリプト<SigPA>を含む。有効な署名を提供するためにAliceが署名する必要があるデータ(又は「メッセージ」)は、ロックスクリプトにより、又はノードプロトコルにより、又はこれらの組み合わせによって定義され得る。
【0051】
新しいトランザクションTx
1がブロックチェーンノード104に到着すると、ノードはノードプロトコルを適用する。これは、ロックスクリプトとアンロックスクリプトを一緒に実行して、アンロックスクリプトがロックスクリプトで定義されている条件(この条件は1つ以上の基準を含むことができる)を満たしているかどうかをチェックすることを含む。実施形態では、これは、2つのスクリプトの連結を含む。
【数1】
ここで、「||」は連結を表し、「<...>」はスタックにデータを配置することを意味し、「[...]」はロックスクリプトに含まれる機能である(本例では、スタックベースの言語)。同等に、スクリプトは。、スクリプトを連結するのではなく共通のスタックにより1つずつ実行されてよい。いずれの方法でも、一緒に実行する場合、スクリプトは、Tx
0のアウトプット内のロックスクリプトに含まれるAliceの公開鍵P
Aを使用して、Tx
1のインプット内のアンロックスクリプトが、データの期待部分に署名するAliceの署名を含むことを認証する。また、データの期待部分(「メッセージ」)も、この認証を実行するために含まれる必要がある。実施形態において、署名されたデータは、Tx
1の全体を含む(従って、データの署名された部分がすでに本質的に存在するので、データの署名された部分を平文で指定する別個の要素が含まれる必要はない)。
【0052】
メッセージmは、署名されているトランザクションの特定の詳細から導出される。このメッセージは署名から妥当性確認まで同一である必要があるため、この処理により、署名を無効にせずにメッセージに含まれるトランザクションデータを変更できないようにする。
【表1】
【0053】
メッセージは、上記のように、トランザクション情報の特定の要素を設定された順序で連結することによって生成される。署名の検証中、メッセージは明示的に送信されるのではなく、ブロードキャストトランザクション内のデータに基づいて検証者によって再作成される。トランザクション情報は、署名で使用されるのと同じプロセスを介して連結され、メッセージダイジェストeを生成するためにダブルハッシュされる。署名の生成後にメッセージの再作成に使用されたトランザクションの一部が変更されている場合、メッセージは同一ではなく、検証は失敗する。
【0054】
署名メッセージ内のトランザクションの詳細を使用するこのプロセスは、トランザクションのブロードキャストからブロックチェーンに公開される時点までの遅延の間のセキュリティの重要な要素を提供する。ただし、署名される(すなわち署名メッセージに含まれる)トランザクションの任意の要素は、署名を無効にしないと更新できないため、一部のトランザクションフィールドは署名メッセージに含めることができない。これらのフィールドは、生成後に署名を含めるように更新する必要がある各インプットのアンロックスクリプトと、完全なトランザクション(アンロックスクリプト内の署名を含む)のダブルハッシュであるトランザクションID(TxID)である。両方のフィールドは、署名を含む(又はそれから導出される)必要があるため、署名が生成されるまで確定できない。
【0055】
公開-秘密暗号法による認証の詳細は、当業者には周知であろう。基本的に、Aliceが彼女の秘密鍵を用いてメッセージに署名した場合、Aliceの公開鍵とそのメッセージが平文ならば、ノード104のような別のエンティティは、そのメッセージがAliceによって署名されていなければならないことを認証することができる。署名は、典型的には、メッセージをハッシュし、ハッシュに署名し、署名としてメッセージにこれをタグ付けすることによって、公開鍵の所有者が署名を認証することを可能にする。従って、実施形態では、特定のデータ片又はトランザクションの部分等に署名するという言及は、データ片又はトランザクションの部分のハッシュに署名することを意味し得る。
【0056】
Tx1内のアンロックスクリプトが、Tx0のロックスクリプトで指定された1つ以上の条件を満たす場合(示される例では、Aliceの署名がTx1内で提供され、認証されている場合)、ブロックチェーンノード104は、Tx1が有効であるとみなす。これは、ブロックチェーンノード104がTx1を保留トランザクションの順序付きプール154に追加することを意味する。ブロックチェーンノード104は、トランザクションTx1をネットワーク106内の1つ以上の他のブロックチェーンノード104に転送し、それによって、それがネットワーク106全体に伝播されることになる。一旦、Tx1が妥当性確認され、ブロックチェーン150に含まれると、これは、Tx0からのUTXO0を消費したものとして定義する。Tx1は、未使用トランザクションアウトプット203を使用する場合にのみ有効であることに留意されたい。別のトランザクション152によって既に消費されたアウトプットを消費しようとする場合、Tx1は、たとえ他のすべての条件が満たされていても無効となる。従って、ブロックチェーンノード104は、先行するトランザクションTx0において参照されたUTXOが既に消費されているかどうか(既に別の有効なトランザクションへの有効なインプットを形成しているかどうか)もチェックする必要がある。これが、ブロックチェーン150がトランザクション152に定義された順序を課すことが重要である理由の1つである。実際には、所与のブロックチェーンノード104は、トランザクション152が消費されたUTXO203をマークする別個のデータベースを維持することができるが、最終的には、UTXOが消費されたかどうかを定義するのは、ブロックチェーン150内の別の有効なトランザクションへの有効なインプットを既に形成しているかどうかである。
【0057】
所与のトランザクション152の全部のアウトプット203の中で指定された総量が全部のそのインプット202により指される総量より大きい場合、これは、殆どのトランザクションモデルにおいて無効の別の基礎である。従って、このようなトランザクションは、伝播されず、ブロック151に含まれることもない。
【0058】
UTXOベースのトランザクションモデルでは、所定のUTXOを全体として使用する必要があることに注意する。UTXOで定義されている量のうち、別の分量が消費されている一方で、ある分量を「残しておく」ことはできない。ただし、UTXOからの量は、次のトランザクションの複数のアウトプットに分割できる。例えば、Tx0のUTXO0で定義された量は、Tx1の複数のUTXOに分割できる。従って、AliceがBobにUTXO0で定義された量の全てを与えることを望まない場合、彼女は残りの量を使って、Tx1の第2アウトプットの中で自分自身にお釣りを与えるか、又は別のパーティに支払うことができる。
【0059】
特に、Aliceは、通常、彼女のトランザクション104をブロック151に含めることに成功したビットコインノード104のための手数料も含める必要がある。Aliceがそのような手数料を含まない場合、Tx0はブロックチェーンノード104によって拒否される可能性が高く、したがって、技術的には有効であるが、それは伝播されず、ブロックチェーン150に含まれない(ノードプロトコルは、彼らが望まない場合には、ブロックチェーンノード104にトランザクション152を受け入れることを強制しない)。一部のプロトコルでは、トランザクション手数料は、独自の別個のアウトプット203を必要としない(すなわち、別個のUTXOを必要としない)。代わりに、インプット202によって示される総量と、所与のトランザクション152のアウトプット203で指定される総量との間の差は、トランザクションを公開するブロックチェーンノード104に自動的に与えられる。例えば、UTXO0へのポインタがTx1への唯一のインプットであり、Tx1は1つのアウトプットUTXO1しか持っていないとする。UTXO0で指定されたデジタルアセットの量がUTXO1で指定された量より多い場合、その差は、UTXO1を含むブロックを生成するproof-of-work競争の勝者であるノード104により割り当てられてよい。しかし、代替的又は追加的に、必ずしも、トランザクション152のUTXO203のうちの独自のものにおいて、トランザクション手数料を明示的に指定できることは除外されない。
【0060】
Alice及びBobのデジタルアセットは、ブロックチェーン150内の任意のトランザクション152の中で彼らにロックされたUTXOで構成されている。従って、典型的には、所与のパーティ103のアセットは、ブロックチェーン150を通して、様々なトランザクション152のUTXO全体に分散される。ブロックチェーン150内のどこにも、所与のパーティ103の総残高を定義する1つの数値は記憶されていない。各パーティへのロックされた、別の将来の(onward)トランザクションに未だ使用されていない全ての様々なUTXOの値をまとめることは、クライアントアプリケーション105におけるウォレット機能の役割である。ビットコインノード104のいずれかに格納されたブロックチェーン150のコピーをクエリすることにより、これを行うことができる。
【0061】
スクリプトコードは、概略的に表現されることが多い(すなわち、正確な言語を用いない)ことに注意する。例えば、特定の機能を表現するオペレーションコード(opcode、オペコード)を使用してよい。「OP_....」は、スクリプト言語の特定のオペコードを表す。例として、OP_RETURNは、ロックスクリプトの始めにあるOP_FALSEが先行するとき、トランザクション内にデータを格納することができ、それによってデータをブロックチェーン150に不変に記録することができるトランザクションの使用不可能アウトプットを生成するためのスクリプト言語のオペコードである。例えば、データは、ブロックチェーンに格納することが望ましい文書を含むことができる。
【0062】
通常、トランザクションのインプットは、公開鍵PAに対応するデジタル署名を含む。実施形態において、これは楕円曲線secp256k1を使用するECDSAに基づく。デジタル署名は、特定のデータに署名する。幾つかの実施形態では、所与のトランザクションについて、署名はトランザクションインプットの一部、及びトランザクションアウトプットの全部又は一部に署名する。署名するアウトプットの特定の部分はSIGHASHフラグに依存する。SIGHASHフラグは、通常、署名の最後に含まれる4バイトのコードであり、どのアウトプットが署名されるかを選択する(従って、署名の時点で固定される)。
【0063】
6つの異なるフラグタイプを使用すると、署名は選択的に承認できるため、すべてのインプットとアウトプット、又は様々なサブセットのいずれかの詳細を確定できる。インデックス2内のインプットをアンロックする署名に基づいて、異なるセットを以下に示す。保証されたインプットとアウトプットは太字で示されている。
【表2】
【0064】
各表の上部に表示されるフラグ名は、メッセージに含まれるアウトプット(ALL、NONE、又はSINGLE)を示す。各フラグには2つの変形があり、どのインプットが署名メッセージに含まれるかを示すシグナリングする。「standard」変形(
図2の表の一番上の行:ALL、NONE、SINGLE)にはすべてのインプットが含まれ、一方、「anyone can pay」又はACP変形(一番下の行:ALL|ACP、NONE|ACP、SINGLE|ACP)には、署名がアンロックするインプットのみが含まれる。単一(single)フラグ変形(SINGLE又はSINGLE|ACP)の場合、署名される単一のアウトプットは、アンロックされるインプットに一致するインデックス位置にあるものであることに注意する。
【0065】
sighashフラグの選択によって影響を受けるメッセージ内のフィールドは、Hash(Outpoints)、Hash(nSeqs)、Hash(Outputs)、及びsigHashFlagフィールド自体である。ハッシュフィールドを計算する場合、含まれていないインプットとアウトプット(sighashフラグに基づく)は空になり、残りのデータは順に連結されてハッシュされる。例えば、sighash ALL|ACP署名の場合、インデックス0(Outpoint
i)とインデックス1(Outpoint
j)のインプットの情報は削除されるが、すべてのアウトプットの詳細は保持され、以下のハッシュフィールドが生成される:
【数2】
【0066】
sighash SINGLE署名の場合、すべてのインプットが保持される一方で、1つのアウトプット(署名の位置に一致するインデックス2のアウトプット)だけが保持され、次のようになる:
【数3】
【0067】
メッセージ文字列内の他のフィールドは、sighashフラグの影響を受けない。バージョン(version)フィールドとロックタイム(locktime)フィールド(これらは署名メッセージに常に含まれる)は、署名がどのインプットを許可するかに関係なく、同じトランザクションに基づくすべての署名で同じである。残りのフィールド(outpointk、lockScriptLengthk、lockScriptk、valuek、及びnSeqk)は、署名されているインプットに直接関連しているため、どのインプットをアンロックするために署名が作成されたかに応じて変更されるが、アンロックするインプットは常に署名されている必要があるため、sighashフラグの選択の影響を受けない。
【0068】
署名メッセージは、一致する秘密鍵とともにECDSA署名アルゴリズムに渡され、署名(r,s)が生成される。この署名をブロックチェーントランザクションに含めるには、承認するインプットのアンロックスクリプトフィールドに配置される単一の文字列に変換する必要がある。文字列は、署名の2つの要素rとsを連結し、DER標準を使用してバイト形式に符号化することによって作成される。
【0069】
メッセージでは、sighashフラグが最後のバイトとして追加され、各sighashフラグは、以下の表に示すように特定の値で表され、以下のシリアル化された署名を示す:
【数4】
P2PKH(pay to public key hash)ロックスクリプトを使用するアウトポイントの場合、署名は、アンロックスクリプトフィールドに配置される前に、関連付けられた公開鍵を更に追加されることに注意する。検証中に、トランザクション内の各署名について、トランザクション情報とsighashフラグに基づいてメッセージが再作成され、そのメッセージで署名の有効性がチェックされる。
【表3】
【0070】
6つのsighashフラグは、1つのインプット(NONE|ACP)からすべてのインプットとアウトプット(ALL)まで、あらゆるものに(署名メッセージに含めることで)「署名」する柔軟性を提供する。sighash ALL以外のフラグの場合、これは、署名メッセージから除外されるトランザクション情報を、署名を無効にすることなく変更できることを意味する。これにより、sighashALLを使用する標準的な方法よりも柔軟性が高まる。例えば、anyone can payフラグ変形は、署名されているもの以外のインプットの詳細に制限を加えず、他のパーティが各々の他の署名を無効にすることなく、トランザクションにインプット(すなわち「pay」)を追加できる。
【0071】
ロックスクリプトは、通常、各々のトランザクションがロックされているパーティの公開鍵を含んでいることを表す「scriptPubKey」と呼ばれることがある。アンロックスクリプトは、通常、対応する署名を提供することを表す「scriptSig」と呼ばれることがある。しかし、より一般的には、UTXOが償還される条件が署名を認証することを含むことは、ブロックチェーン150の全てのアプリケーションにおいて必須ではない。より一般的には、スクリプト言語は、任意の1つ以上の条件を定義するために使用され得る。したがって、より一般的な用語「ロックスクリプト」及び「アンロックスクリプト」が好ましい。
【0072】
<サイドチャネル>
図1に示されるようにAlice及びBobのコンピュータ装置102a、120bの各々にあるクライアントアプリケーションは、付加的な通信機能を備えてよい。この追加機能は、Alice103aが、(いずれかのパーティ又は第3者の勧誘で)Bob103bと別個のサイドチャネル107を確立することを可能にする。サイドチャネル107は、ブロックチェーンネットワークと別個にデータの交換を可能にする。このような通信は、時に「オフチェーン」通信と呼ばれる。例えば、これは、パーティの一方がネットワーク106にトランザクション152をブロードキャストすることを選択するまで、ブロックチェーンネットワーク106上に登録されることなく、又はチェーン150上に進むことなく、AliceとBobとの間でトランザクション152を交換するために使用され得る。このようにトランザクションを共有することは、時に、「トランザクションテンプレイト」の共有と呼ばれる。トランザクションテンプレイトは、完全なトランザクションを形成するために必要な1つ以上のインプット及び/又はアウトプットが欠けていてよい。代替又は追加で、サイドチャネル107は、任意の他のトランザクションに関連するデータ、例えば、鍵、交渉される量又は条項、データコンテンツ、等を交換するために使用されてよい。
【0073】
サイドチャネル107は、ブロックチェーンネットワーク106と同じパケット交換ネットワーク101を介して確立されてもよい。代替又は追加で、サイドチャネル107は、モバイルセルラネットワーク、又はローカル無線ネットワークのようなローカルエリアネットワーク、又はAliceとBobの装置102a、102bの間の直接有線若しくは無線リンクのような異なるネットワークを介して確立されてよい。一般に、本願明細書のどこかで言及されるサイドチャネル107は、「オフチェーン」で、つまりブロックチェーンネットワーク106と別個にデータを交換するための1つ以上のネットワーキング技術又は通信媒体を介する任意の1つ以上のリンクを含んでよい。1つより多くのリンクが使用されるとき、全体としてのオフチェーンリンクのバンドル又は集合がサイドチャネル107と呼ばれてよい。従って、Alice及びBobが特定の情報又はデータ片等をサイドチャネル107を介して交換すると言われる場合、これは、必ずしも全部のこれらのデータ片が正確に同じリンク又は同じ種類のネットワークを介して送信される必要があることを意味しないことに留意する。
【0074】
クライアントソフトウェア
図3Aは、本開示の方式の実施形態を実装するためのクライアントアプリケーション105の例示的な実装を示す。クライアントアプリケーション105は、トランザクションエンジン401と、ユーザインタフェース(UI)レイヤ402と、を含む。トランザクションエンジン401は、クライアント105の基礎トランザクション関連機能、例えば、トランザクション152を形成し、トランザクション及び/又はサイドチャネル301を介して他のデータを受信及び/又は送信し、及び/又はブロックチェーンネットワーク106を介して伝播されるように1つ以上のノード104にトランザクションを送信するように、上述したスキームに従って、さらに詳細に説明するように、構成される。ここに開示された実施形態に従って、各クライアント105のトランザクションエンジン401は、以下のうちの1つ以上を実行するよう構成される機能403を含む:
-トークン発行トランザクションを生成することによりトークンを生成する、
-投票オプションを定義すること、投票へ公開鍵を割り当てること、投票オプションと公開鍵を投票者へ送信すること、により投票を開始する、
-投票者の1人の投票に対応するインプット-アウトプットペアを生成し、そのインプット-アウトプットペアを投票コーディネータに送信する、
-受信したインプット-アウトプットペアを含む投票トランザクションを生成する、
-投票条件が満たされたかどうかを決定する。
【0075】
UIレイヤ402は、各々のユーザコンピュータ機器102のユーザ入力/出力(I/O)手段を介して、機器102のユーザ出力手段により各々のユーザ103へ情報を出力すること及び機器102のユーザ入力手段により各々のユーザ103から入力を受信することを含む、ユーザインタフェースをレンダリングするよう構成される。例えば、ユーザ出力手段は、視覚的出力を提供する1つ以上のディスプレイスクリーン(タッチ又は非タッチスクリーン)、オーディオ出力を提供する1つ以上のスピーカ、及び/又は触覚出力を提供する1つ以上の触覚出力装置、等を含み得る。ユーザ入力手段は、例えば、1つ又は複数のタッチスクリーンの入力アレイ(出力手段に使用されるものと同じか又は異なる)、マウス、トラックパッド又はトラックボールなどの1つ又は複数のカーソルベースの装置、音声又は声の入力を受け取るための1つ又は複数のマイクロフォン及び音声認識アルゴリズム、手動又は身体のジェスチャの形態で入力を受け取るための1つ又は複数のジェスチャベースの入力装置、又は1つ又は複数の機械的ボタン、スイッチ又はジョイスティックなどを含むことができる。
【0076】
注:本願明細書において種々の機能が同じクライアントアプリケーション105に統合されるとして説明されることがあるが、これは、必ずしも限定的ではなく、代わりに、それらは2つ以上の異なるアプリケーションのスーツに実装されてよく、例えば一方が他方へのプラグインであるか、又はAPI(application programming interface)を介してインタフェースする。例えば、トランザクションエンジン401の機能は、UIレイヤ402と別個のアプリケーション、又は所与のモジュールの機能に実装されてよく、トランザクションエンジン401が1つより多くのアプリケーションの間で分割されてよい。また、記載の機能の一部又は全部が、例えばオペレーティングシステムレイヤに実装されることを除外しない。本願明細書のどこかで、単一の又は所与のアプリケーション105等を参照する場合、これが単に例としてであること、より一般的には、記載の機能が任意の形式のソフトウェアで実装され得ることが理解される。
【0077】
図3Bは、Aliceの機器102a上のクライアントアプリケーション105aのUI層402によりレンダリングされてよいユーザインタフェース(UI)300の例の模擬表示を与える。同様のUIが、任意の他のパーティのクライアント105b Bobの機器102b、又は任意の他のパーティの機器によりレンダリングされてよいことが理解される。
【0078】
例示として、
図3Bは、Aliceの観点からUI300を示す。UI300は、ユーザ出力手段を介して別個のUI要素として描画される1つ以上のUI要素301、302、303を含んでもよい。
【0079】
例えば、UI要素は、例えば、画面上の異なるボタン、又はメニュー内の異なるオプション等の1つ以上のユーザ選択可能要素301を含むことができる。ユーザ入力手段は、スクリーン上のUI要素をクリック若しくはタッチすることにより、又は所望のオプションの名称を発話することにより、ユーザ103(この場合にはAlice103a)がオプションのうちの1つを選択又は操作できるよう構成される(注:ここで使用される「手動(manual)」は単に自動の反対を意味し、必ずしも手の使用に限定されない)。オプションを使用すると、ユーザ(Alice)は、投票を行うための投票指示で提供されている投票オプションの事前に定義されたセットのうちの1つを選択したり、投票オプションを定義するときに1つ以上の推奨される投票オプションを選択したり、受信したインプット-アウトプットペアを選択して完全な投票トランザクションに含めたり、ユーザディレクトリからトークンを生成するユーザグループを選択したりすることができる。
【0080】
代替的又は追加的に、UI要素は、1つ以上のデータエントリフィールド302を含むことができ、ユーザは、OP_RETURNに含まれるべきデータ又は投票指示に含まれるべき投票オプションを定義するテキストを入力することができる。これらのデータエントリフィールドは、ユーザ出力手段、例えば、オンスクリーンを介してレンダリングされ、データは、ユーザ入力手段、例えば、キーボード又はタッチスクリーンを介してフィールドに入力することができる。あるいは、データは、例えば、音声認識に基づいて口頭で受信され得る。
【0081】
代替的又は追加的に、UI要素は、ユーザに情報を出力するために出力される1つ以上の情報要素303を含んでもよい。例えば、これ/これらは、スクリーン上に描画されるか、又は可聴でレンダリングされることがある。
【0082】
例えば、この/これらは、スクリーン上に描画されるか、又は可聴で描画されることがある。これらのUI要素の機能は、間もなく更に詳細に議論される。また、
図3に示されたUI300は、単に概略的なモックアップであり、実際には、1つ以上のさらなるUIエレメントを含んでもよく、これは、簡潔さのために示されていないことが理解される。
【0083】
<ノードソフトウェア>
図4は、UTXO又はアウトプットに基づくモデルの例における、ネットワーク106の各ブロックチェーンノード104で実行され得るノードソフトウェア450の例を示す。別のエンティティが、ネットワーク106上でノード104として分類されずに、つまり、ノード104に必要なアクションを実行せずに、ノードソフトウェア450を実行できることに注意する。ノードソフトウェア450は、プロトコルエンジン451、スクリプトエンジン452、スタック453、アプリケーションレベルの決定エンジン454、及び1つ以上のブロックチェーン関連機能モジュールのセット455を含んでよいが、それらに限定されない。各ノード104は、合意モジュール455C(例えば、proof-of-work)、伝播モジュール455P、及びストレージモジュール455S(例えば、データベース)の3つすべてを含むが、これらに限定されないノードソフトウェアを実行できる。プロトコルエンジン401は、標準的に、トランザクション152の異なるフィールドを認識し、それらをノードプロトコルに従い処理するよう構成される。トランザクション152j(Tx
j)が受信され、別の先行するトランザクション152i(Tx
m-1)のアウトプット(例えばUTXO)をポイントするインプットを有するとき、プロトコルエンジン451は、Tx
j内のアンロックスクリプトを識別し、それをスクリプトエンジン452に渡す。プロトコルエンジン451は、更に、Tx
jのインプットの中のポインタに基づき、Tx
iを識別し検索する。Tx
iはブロックチェーン150上で公開されてよい。この場合、プロトコルエンジンは、ノード104に格納されているブロックチェーン150のブロック151のコピーからTxiを取得できる。又は、Tx
iは、まだブロックチェーン150上で公開されていない可能性がある。その場合、プロトコルエンジン451は、ノード154によって保持されている未公開トランザクションの順序付きセット154からTx
iを取得することができる。いずれの方法も、スクリプトエンジン451は、Txiの参照されるアウトプットの中のロックスクリプトを識別し、これをスクリプトエンジン452に渡す。
【0084】
スクリプトエンジン452は、従って、Tx
iのロックスクリプト、及びTx
j対応するインプットからのアンロックスクリプトを有する。例えば、Tx
0及びTx
1が
図2に示されるが、同じことがトランザクションの任意のペアに適用され得る。スクリプトエンジン452は、前述のように2つのスクリプトを一緒に実行し、これらは、使用されているスタックに基づくスクリプト言語(例えばScript)に従い、スタック453にデータを置くことと、データを検索することとを含む。
【0085】
スクリプトを一緒に実行することにより、スクリプトエンジン452は、アンロックスクリプトがロックスクリプトの中で定義された1つ以上の基準を満たすか否か、つまり、それがロックスクリプトが含まれるアウトプットを「アンロック」するか否かを決定する。スクリプトエンジン452は、この決定の結果をプロトコルエンジン451に返す。スクリプトエンジン452は、アンロックスクリプトは対応するロックスクリプトの中で指定された1つ以上の基準を満たすと決定した場合、結果「真」を返す。その他の場合、それは結果「偽」を返す。
【0086】
アウトプットに基づくモデルでは、スクリプトエンジン452からの結果「真」は、トランザクションの有効性についての条件のうちの1つである。標準的に、同様に満たされなければならない、プロトコルエンジン451により評価される1つ以上の更なるプロトコルレベルの条件が更にあり、Txjのアウトプットの中で指定されたデジタルアセットの総量がそのインプットによりポイントされる総量を超えないこと、Txiのポイントされるアウトプットは別の有効なトランザクションにより未だ使用されていないこと、等である。プロトコルエンジン451は、1つ以上のプロトコルレベルの条件と一緒にスクリプトエンジン452からの結果を評価し、それら全部が真である場合、トランザクションTxjを妥当性確認する。プロトコルエンジン451は、トランザクションが有効であるかどうかの指示を、アプリケーションレベル決定エンジン454に出力する。Txjが実際に妥当性確認されたことのみを条件として、決定エンジン454は、合意モジュール455C及び伝播モジュール455Pの一方又は両方を、それらの各々のブロックチェーンに関連する機能をTxjに関して実行するよう制御することを選択してよい。これは、ブロック151に組み込むためにノードの各々の順序付きトランザクションセット154にTxjを追加する合意モジュール455Cと、ネットワーク106内の別のブロックチェーンノード104にTxjを転送する伝播モジュール455Pを含む。任意的に、実施形態では、アプリケーションレベル決定エンジン454は、これらの機能のうちのいずれか又は両方をトリガする前に、1つ以上の追加条件を適用してよい。例えば、決定エンジンは、トランザクションがだとうせされたこと、及び十分なトランザクション手数料が残されることの両方を条件としてのみ、トランザクションを公開することを選択してよい。
【0087】
用語「真(true)」及び「偽(false)」は、本願明細書では、必ずしも単一の2進数字(ビット)のみの形式で表現される結果を返すことに限定しないが、それは勿論1つの可能な実装であることに留意する。より一般的には、「真」は、成功又は肯定的な結果を示す任意の状態を表すことができ、「偽」は、不成功又は非肯定的な結果を示す任意の状態を表すことができる。例えば、アカウントに基づくモデルでは、「真」の結果は、署名の暗示的なプロトコルレベルの検証と、スマートコントラクトの追加の肯定的なアウトプットとの組合せにより示され得る(全体の結果は、両方の個々の結果が真である場合に、真を伝達すると考えられる)。
【0088】
トークン
一部のトランザクションは、次に説明する投票トランザクションなど、異なるユーザに関連付けられたインプットを含む。トランザクションに貢献できるユーザを制限するために、許可された貢献者にトークンが発行され、許可された貢献者がトランザクション内でインプットとアウトプットを提供できるようになる。
【0089】
トークンは、投票での使用を参照して説明される。
【0090】
トークン発行トランザクションの例を以下及び
図5に示す。トランザクションは、トークンを使用して生成されるトランザクションに責任のあるパーティの装置によって生成される。投票の場合、パーティは投票コーディネータである。
【表4】
【0091】
トークン発行トランザクション500は、未使用トランザクションアウトプットのトランザクションIDとインデックスを識別するアウトポイント504と、トークン発行トランザクション500のすべてのインプットとアウトプットが投票コーディネータの署名によって署名されるように、sighash ALLフラグを持つ投票コーディネータの署名を含むアンロックスクリプト506と、を含む単一のインプットを持つ。
【0092】
トークン発行トランザクション500は複数のアウトプットを持つ。有権者ごとに1つずつのトークンのセット510、及びコーディネータに関連付けられたアウトプットがある。投票コーディネータに関連付けられたアウトプットは、未使用トランザクションアウトプットと、UTXOをコーディネータの公開鍵にロックするロックスクリプトと、を含む。
【0093】
図5には3つのトークンがあり、各々に対応するロックスクリプト508があり、トークンがロックされている適格な投票者を識別する。トークンは、ダストUTXOと見なされる可能性があるように、低い値又は公称値を持つ未使用トランザクションアウトプットである。これは、投票者が投票しない場合、投票コーディネータによって失われるデジタルアセットはわずかであり、投票者が投票しないインセンティブはほとんどないことを意味する。ロックスクリプトは、投票者がトークンを使用して投票するときに使用する必要があるsighashフラグを定義する署名条件も含んでいる。投票者の一部のみが投票する必要があり、そのため投票の前にインプットを知ることができない定足数投票の場合、署名条件は、SINGLE|ACP sighashフラグを使用する必要があることを定義する。一方、すべての投票者が投票の前にすべてのインプットを知る必要がある場合、署名条件はいずれかのsingle sighashフラグを定義できる。つまり、SINGLE|ACP又はSINGLEが、署名条件の中で定義される。
【0094】
トークンを使用すると、署名条件は、署名に使用されるsighashフラグを示す署名の最後のバイトが、定義された署名条件に関連付けられた特定の値と等しいかどうかを確認する。例えば、sighash SINGLE|ACP(バイト値0x83)が使用されていることを確認するには、ロックスクリプトの先頭に次の一連のOPコードを含めることができる:
【数5】
【0095】
このコードの説明は付録Aにある。与えられたコードはSCRIPTコードの一例にすぎず、当業者は同じ結果を達成するために使用できる他のSCRIPTコードを知っていることが理解される。
【0096】
その後、資格のある投票者は、トークン発行トランザクションと投票者にロックされたUTXOを識別するアウトポイント、トークンがロックされた投票者の署名、及びトークンのロックスクリプト内で示されたsighashフラグを提供することによって、投票トランザクション内の自分のトークンを使用できる。
【0097】
上記のトークンは、複数のパーティが同じトランザクションに貢献する他のトランザクションに使用できる。トークンは、トランザクションに貢献できるパーティを制限する方法を提供し、権限のないパーティからの貢献を簡単に識別する方法を提供する。
【0098】
投票方法
投票では、複数のパーティが1つのトランザクションに貢献する。
【0099】
sighash ALLを使用して署名を適用する場合、ALLフラグを有する署名が適用されると、インプット又はアウトプットをそれ以上編集することができないため、署名を開始する前に、すべてのインプットとアウトプットの詳細を含むトランザクション全体を定義する必要がある。これは、すべてのパーティが最初に共同でトランザクションを定義し、次に2回目に署名する必要があることを意味する。これと対照的に、異なるsighashフラグを使用すると、すべてのトランザクションの詳細を事前に定義する必要なく、パーティが個別に異なるアウトプットを設定して署名を適用できるため、パーティ間に一定の自律性を提供できる。
【0100】
関係者は異なる時間に投票を行い、各パーティが選択した投票オプションは匿名のままにしておくことが望ましいため、パーティは、パーティが提供したアウトプットのみが署名メッセージに含まれるように、single sighashフラグでインプットに署名する。他の投票者が知らない間に、投票者が別の投票者の投票をトランザクションから削除しないようにするために、トランザクションは投票コーディネータによって生成される。投票コーディネータは、投票トランザクションをコンパイルし、すべての投票が受信されて含まれた後にALL sighashフラグで投票トランザクションを承認する。
【0101】
ACPフラグ変形は、インプットを独立して定義できるため、複数のインプットが存在する状況での使用に適している。同様に、SINGLEフラグの変形では、他のアウトプットを修正せずに特定のアウトプットに署名することができる。これらの2つの機能は、SINGLE|ACPフラグを使用して、他のインプット及びアウトプットの詳細や数に制限を設けることなく、一致するインデックス位置に存在するインプット-アウトプットペアに署名できることを意味する。これにより、ペアを1つのトランザクションに結合するためのかなりの自由度が得られる。すべてのインプット及びアウトプットが署名されているため、完全なトランザクションが有効であるための唯一の要件は、インプットの結合値が、割り当てられたすべてのアウトプットと適切なトランザクション手数料をカバーするのに十分であることである。例えば、4つの独立して署名されたペアのセットから形成される、以下に示すトランザクションTx及びTx'は、インプット値がアウトプット値を超える場合に両方とも有効になる。
【表5】
【表6】
【0102】
しかし、sighash SINGLE|ACPは非常に柔軟性がある一方で、柔軟性の可能性も残している。SINGLE|ACPを使用して署名された任意のインプット-アウトプットペアは、元の署名を無効にすることなくコピーして競合するトランザクションに含めることができる。傍受者(interceptor)が変更されたトランザクションをネットワークにブロードキャストする場合、ネットワーク上の一部のノードが元のトランザクションよりも前に変更されたバージョンを受信する可能性があるため、トランザクションのどのバージョンがブロックチェーンに公開されるかは定かではない。これは、署名されたペアのインプットの値がアウトプットよりも大きい場合に特に問題となる。つまり、変更されたトランザクションでは、余分な値を傍受者のアドレスに割り当てることができる。従って、干渉を抑制するために、SINGLE|ACP署名済みペアは、インプット値を割り当てずに残しておくべきではない。
【0103】
投票の定義
投票コーディネータは、投票を定義する。
【0104】
投票には事前に定義されたオプションのセットがあり、投票者は事前に定義されたオプションの1つを選択する必要がある。この例としては、選挙に立候補している候補者の1人を投票者が選択する選挙投票がある。投票には「その他」オプションを含めることができ、ユーザが独自の回答を入力できる場合がある。
【0105】
投票コーディネータは、候補者リストなどのオプションのセットを定義する。投票コーディネータは、各々のオプションに異なる公開鍵を割り当てることができる。これらの割り当てはデータベースに格納される。公開鍵を使用してアドレスを生成できる。投票者が定義済みの投票オプションの1つを選択すると、未使用トランザクションのアウトプットは選択したオプションに関連付けられた公開鍵にロックされる。
【0106】
投票者は、他のユーザ定義の入力を提供できる場合がある。例えば、投票者は投票オプションを選択し、データエントリフィールドにコメントを入力することによって、投票結果に含めるためのさらなるコメントを提供できる。
【0107】
投票コーディネータは、投票者がテキストを入力することを許可すると定義する。投票者が投票に参加すると、投票の未使用トランザクションアウトプットは選択された投票オプションの公開鍵にロックされ、テキストはトランザクションのOP_RETURN内にレンダリングされる。
【0108】
完全なグループ投票
グループのすべてのメンバーが投票しなければならない秘密投票を制定したいグループを考える。投票オプションは、上記のように投票コーディネータによって事前に定義されている必要があり、投票者はすべての投票が行われるまで互いの選択を見ることができないようにする必要がある。個々の投票は、単一の投票パーティによって独立してアウトプットを設定及び署名できる場合には、単一のアウトプットの詳細によってトランザクション内で表すことができる(例えば、すべての投票選択を特定のアウトプットアドレスに関連付けることによって)。これを可能にするには、投票トランザクションに各投票者からのインプットと、単一のsighashフラグを使用して署名された一致するアウトプットを含める必要がある。インプットは、投票に先立ってグループの各メンバーに発行される名目値の投票トークンにすることができる。
【0109】
例えば、3人の投票者(Alice、Bob、Charlie)とコーディネータ(Delilah)のグループの場合、次のように投票を行うことができる。
【0110】
1.Delilahは、投票トークンとして機能する3つのダストUTXOを作成するトランザクションを作成し、Alice、Bob、Charlieに各々1つずつ割り当てる。
【表7】
【0111】
2.Delilahは、トランザクション手数料をカバーするのに十分な資金を含む彼女が制御する追加のインプットと一緒に、これらのトークンUTXOを投票トランザクションテンプレイトのインプットとして追加する。彼女は、投票の各選択肢に対応するアウトプットアドレスのリストとともに、このテンプレイトをAlice、Bob、Charlieに送信する。
【表8】
【0112】
3.Alice、Bob、Charlieは各々、自分の投票選択を反映するように指名されたアウトプット詳細を設定し、sighash SINGLEを使用して署名を作成し、インプットのアンロックスクリプトに配置する。Signing SINGLEは、他のインデックスに設定されたアウトプットに制限を設けないため、有効な署名を作成するために他のパーティの投票選択を知る必要はない。すべての投票者は、部分署名されたトランザクション(彼らの投票を表す)をDelilahに返す必要がある。例えば、Bobの投票は次のような形式になる:
【表9】
【0113】
4.Delilahはすべての投票を受信すると、それらを1つの投票トランザクションに結合し、sighash ALLを使用して彼女のインプットの使用を妥当性確認する署名を作成し、トランザクションをブロードキャストして、投票の不変のレコードを提供する。
【表10】
【0114】
Delilahは、投票テンプレイトを設定し、投票を照合する必要があるが、結果に干渉する機会はない。パーティの署名の前にインプットを事前に定義することで、グループは、有効なトランザクションを作成するためにすべてのパーティが投票を提供しなければならないことを保証する。同様に、インプットは事前に指定された鍵を保持するパーティによってのみ妥当性確認できるため、他の政党(Delilahを含む)によって投票が改竄されることはない。
【0115】
図6は、完全なグループ投票の投票トランザクション600の例であり、
図5のトークン発行トランザクションを使用して投票トークンが発行される。投票トランザクション600は、4つのインプットと4つのアウトプットを含む。
【0116】
0番目のインデックスには、第1投票者によって提供される第1インプット-アウトプットペアがある。インプットは、非署名部分と署名部分を含む。非署名部分は、
図5のトークン発行トランザクションのインデックス0にあるトークンを示すアウトポイントを含み、署名部分は、トークンがロックされている公開鍵を持つ第1投票者の署名と、SINGLE sighashフラグを含む。アウトプットは、トークンの値と等しいデジタルアセット値と、ユーザが選択した投票オプション-投票オプション1のアドレスを含むロックスクリプトと、を含む。署名は、投票トランザクション600のすべてのインプットと、投票トランザクション600の0番目のインデックスのアウトプットに署名するが、投票トランザクション600の他のアウトプットには署名しない。つまり、署名メッセージには、4つのインプットと0番目のインデックスのアウトプットのみが含まれる。
【0117】
同様のインプット-アウトプットペアは、1番目と2番目のインデックスに各々提供され、1番目のインデックスのインプット-アウトプットペアは、2番目の投票者の署名とSINGLE sighashフラグを有するトークン発行トランザクションのインデックス1のトークン、トークンのアウトプット値と等しい未使用トランザクションアウトプット値、及び2番目の投票者によって選択された投票オプション3のアドレスを示し、2番目のインデックスのインプット-アウトプットペアは、3番目の投票者の署名とSINGLE sighashフラグを有するトークン発行トランザクションのインデックス2のトークン、トークンのアウトプット値と等しい未使用トランザクションアウトプット値、及び3番目の投票者によって選択された投票オプション1のアドレスを示す。
【0118】
インデックス3のインプットは、投票コーディネータのUTXOを示すアウトポイントと、ALL sighashフラグによる投票コーディネータの署名と、を含む。インデックス3のアウトプットは、インプット内に示されたUTXOからトランザクション手数料を引いたもの(各トークンの完全な値は投票オプションの公開鍵にロックされるため)に等しい値を有するUTXOと、投票コーディネータの公開鍵を含むロックスクリプトと、を含む。インデックス0から2の投票のアウトプットのUTXO値がインプット内に示された値よりも小さく、各投票がトランザクション手数料に貢献する場合、インデックス3のインプットで参照されるUTXOとインデックス3のアウトプットのUTXOの差は、個々の投票でカバーされていないトランザクション手数料の額と等しいだけでよい。
【0119】
投票者によって提供されるインプット-アウトプットペアにあるインデックスは、投票インデックスと呼ばれることがある。
図6の例では、これらはインデックス0、1、及び2である。投票コーディネータが署名を提供するインデックスでは、ここではインデックス3は、投票コーディネータがすべてのインプットとアウトプットに署名するため、承認インデックスと呼ばれることがある。すべての投票インデックスが提供された後に、投票コーディネータがインプットとアウトプットに署名するだけであれば、トランザクション600の任意のインデックスで投票インデックスと承認インデックスを提供することができることが分かる。
【0120】
投票トランザクション600はトランザクションIDも含み、インカウント4とアウトカウント4を含む。
【0121】
図8は、投票トランザクション600とトークン発行トランザクション500の関係を示している。投票(インデックス0から2)に対応する投票トランザクション600の各インプットは、前述のようにトークン発行トランザクション500のアウトプットを示す。投票トランザクション600がブロックチェーンノードによって検証されると、同じUTXOに関連付けられたロックスクリプトとアンロックスクリプトが一緒に実行され、アンロックスクリプトがロックスクリプトの要件を満たしていることが確認される。これは、トークンのロックスクリプトにこのような署名条件が含まれている場合に、sighashフラグ値の確認も含む。
【0122】
トークン発行トランザクション500のインプットは、UTXOを投票コーディネータの公開鍵にロックする前のブロックチェーントランザクション800のアウトプットを指すように示されている。前のトランザクションは、前の投票に使用されたデジタルアセットが再利用されるように、前の投票に関連付けられたUTXO(示されない)を使用するためのインプットを含む場合がある。
【0123】
フルグループ投票では、SINGLE又はSINGLE|ACP sighashフラグのいずれかを使用できる。トークンが使用されている場合、上記及び
図6に示すように、インプットは投票トランザクションの生成前に投票コーディネータに知られるため、投票者はSINGLE sighashフラグを使用できる。ユーザは、他の投票者の投票能力に影響を与えることなく、このシナリオではSINGLE|ACP sighashフラグを使用することもできる。
【0124】
代替として、トークンは発行されず、その結果、上記のステップ1が除外され、投票者は前に投票者に割り当てられている事前に定義された値の未使用トランザクションアウトプットを消費することにより投票する。つまり、投票の「コスト」は投票コーディネータによって投票者に提供されておらず、投票者は投票するために支払う必要がある。この場合の投票のコストは、投票を促進するために名目上のものである場合がある。投票を行う際に投票者によって提供されるアウトポイントは、投票前に投票コーディネータに知られていないため、SINGLE|ACP sighashフラグが投票者によって使用される。
【0125】
上記のトークンは、小さな値である「ダスト(dust)」UTXO値を有する。このような小さな値は、例えば、トランザクションからの変更として非常にわずかな量が残っている場合に作成されることがある。これらのダストUTXOには、トランザクション手数料をカバーするのに十分な値が含まれていない可能性があり、単独では機能しない。トークンが使用されない場合、投票コーディネータはわずかな金額を失うだけである。
【0126】
定足数投票
場合によっては、すべてのパーティが回答を返す必要はなく、代わりに、グループ内の閾値(定足数)のメンバーが参加している限り、投票が有効であることに同意する場合がある。この場合、正確なインプットを事前に定義することはできないため(どの投票者が投票を返すかは不明であるため)、投票トークンはSINGLE|ACPフラグを使用して署名する必要がある。
【0127】
1.コーディネータは、すべての有権者に投票トークンを発行する必要がある。これらには、SINGLE|ACPフラグを使用して署名する必要があるように、追加の支出要件(ロックスクリプトで定義されている)が必要である。
【表11】
【0128】
この署名条件は、署名の最後のバイト(署名に使用されるsighashフラグを示す)が特定の値と等しいかどうかをチェックするロックスクリプトの追加条件である。例えば、sighash SINGLE|ACP(バイト値0x83)が使用されたことを確認するには、ロックスクリプトの先頭に次の一連のOPコードを含めることができる:
【数6】
【0129】
このスクリプトの説明は付録Aにある。
【0130】
2.投票を選択した有資格投票者は、投票期限までに署名された投票トークンをコーディネータに返却する必要がある。必要に応じて、投票者はロックタイムを設定して、投票の期限前に投票が有効にならないようにすることができる。
【表12】
【0131】
3.投票期限が過ぎると、コーディネータは提出されたすべての投票を1つのトランザクションに収集する。使用されたすべてのトークンがこの投票に対して有効であること、及び必要な定足数に達していることを確認する必要がある。これは手動又はスマートコントラクトを介して行うことができる。例えば、すべての投票インプットがTx0を参照していること、及びトークンインプットの合計値が必要な値(n
Q×BSV、ここで、n
Qは定足数に必要な投票数)を超えていることを確認するものである。これらの条件が満たされた場合、コーディネータは、トランザクション手数料をカバーする最終的なインプット及びアウトプットを追加し、sighash ALLを使用して署名し、最終的な投票トランザクションをブロードキャストする。
【表13】
【0132】
コーディネータがミスをして、適格な投票を含まなかった場合は、コーディネータは単に失われた投票を含む第2トランザクションを作成できる。同様に、何らかの理由でSINGLE|ACPの投票が別のトランザクションに含まれ、メインの投票トランザクションの前にマイニングされた場合、コーディネータは、最終アウトプットのOP_RETURNに投票が含まれていたTxIDへの参照を追加できる。
【0133】
図7は、
図5で発行されたトークンを使用した定足数投票の投票トランザクション700の例を示している。投票トランザクション700は、完全な投票の投票トランザクション600と類似しているが、投票したのは2人の投票者だけである。第2投票者は投票していないため、第1投票者と第3投票者のインプット-アウトプットペアのみが、インデックス0と1で投票トランザクション700に含まれるが、投票は任意の順序と任意のインデックスで提供できる。
図6の投票トランザクション600の3番目のインデックスのように、投票コーディネータに関連付けられたインプットとアウトプットを含むインデックス2。従って、投票トランザクション700のインカウントとアウトカウントは両方とも3である。
【0134】
完全なグループ投票と同様に、幾つかの実施例ではトークンが発行されない場合がある。代わりに、投票者は、投票のコストをカバーするために事前に定義された値を持つ未使用トランザクションアウトプットを示すアウトポイントを提供する。場合によっては、このコストは投票を促進するために最小限に抑えられることがある。他の例では、投票にほとんど関心のない投票者が参加すること、又は投票結果を歪めるために複数回投票したりすることを抑止するために、コストは決して小さくないかもしれない。
【0135】
定足数投票の具体的な例は、世論調査である。この例では、投票するパーティを事前に定義することはできないため、インプットにはSINGLE|ACPフラグを使用して署名する必要がある。世論調査の設定は次のように動作する可能性がある。
【0136】
1.世論調査の発信者であるAliceは、2つ以上の世論調査の選択肢の詳細を公に投稿する。各投票の選択肢は、Aliceがアンロックできるアドレスに関連付けられる必要がある。
【0137】
2.世論調査に投票を登録したい人は、次のプロパティを持つSINGLE|ACP署名されたインプット-アウトプットペアを作成できる:
-アウトプットは、Aliceによって定義された世論調査選択アドレスのいずれかである必要がある。
-インプットにはスパム投票を阻止するための最小値を設定する必要がある。
-アウトプットの値はインプットと一致する必要がある。
-ロックタイムは、世論調査の期限と一致するように設定する必要がある。
【0138】
3.各「投票」ペアはAliceに直接送信され、Aliceはそれらを1つのトランザクションに結合する。彼女は、必要に応じてトランザクション手数料に資金を提供するための最終的なインプットを追加し、sighash ALLを署名する。
【0139】
4.トランザクションがブロックチェーンノードによって妥当性確認され、ブロックチェーンに公開されると、世論調査の結果の記録が提供される。Aliceは、どの世論調査オプションが選択されたかに関係なく、各回答者がインプットを通じて貢献した値から利益を得る。
【0140】
SINGLE|ACPフラグの柔軟性は、SINGLEフラグとは対照的に、Aliceが最終トランザクションをブロードキャストするときに、誰かがネットワークに到達する前にそれを傍受し、まだ有効である適格な投票のサブセットに基づいて代替トランザクションを作成することが可能であることを意味する。ただし、アウトプットアドレスは固定されており、値はインプット値と一致するため、潜在的な影響は世論調査の結果を変更することだけであるため、傍受者は世論調査の応答者によって提供された値をリダイレクトすることはできない。この状況でも、Aliceが除外された世論調査応答を含む第2トランザクションを作成して、それらのインプットによって提供された値を収集できるようにすることは可能である。それにもかかわらず、この柔軟性から保護する代わりに、各世論調査の値のある割合を取得するサービスプロバイダを導入する価値がある場合がある。例えば、ブロックプロデューサ(又はサービス独自のブロック制作機能)との契約を介して、世論調査トランザクションをより広いブロードキャストを必要とせずに直接コアネットワークに送信できるようにする。
【0141】
図9は、ブロックチェーンを用いて投票を提供する例示的な方法を示す。左側のアクションはブロックチェーンの外部で実行されるアクションであり、右側のアクションはブロックチェーンノードによってブロックチェーン上で実行されるアクションである。
【0142】
ステップS902で、投票コーディネータは投票オプションを定義し、投票に少なくとも1つの公開鍵を割り当てる1つの公開鍵が割り当てられている場合、投票者によって選択された投票オプションはトランザクションのOP_RETURNで返され、投票のすべてのUTXOが投票の1つの公開鍵にロックされる。複数の公開鍵の場合、投票のUTXOが選択された投票オプションの公開鍵にロックされるように、1つの公開鍵が各投票オプションに関連付けられる。投票オプションと公開鍵の関連付けが格納される。投票コーディネータは、投票を受信する必要がある時間を設定する。投票コーディネータは、
図3A及び3Bに示すようなユーザインタフェースをレンダリングするコンピュータプログラムを実行しているユーザ装置を介して投票オプションを定義する。
【0143】
ステップS904で、投票コーディネータは、投票者と署名要件も定義する。投票コーディネータは、誰が投票資格があるか、必要な投票者の数、つまり、完全なグループ投票か定足数投票かを定義する。署名要件は、投票が完全なグループ投票かどうかに少なくとも部分的に依存する。投票コーディネータは、このステップで、投票の重みや拒否権などの他の特別な投票特権も定義する。
【0144】
ステップS906で、投票コーディネータは、ステップS904で定義された投票者要件に基づいてトークン発行トランザクション500を生成する。ステップS908で、トークン発行トランザクション500はブロックチェーンノードによって受信され、ブロックチェーンノードは、ステップS910でトランザクションを検証し、ステップS912でトランザクションをブロックチェーンに発行する。
【0145】
検証され、発行されると、トークンは投票者の公開鍵にロックされる。投票者は、ステップS914でトークンを受信すると言われる。
【0146】
ステップS916で、投票コーディネータは投票オプションと定義された公開鍵を投票者に配布する。投票コスト、投票期限、トークン発行トランザクション500のトランザクションIDなどのその他の情報が、配布された投票情報に含まれる場合がある。
【0147】
投票に参加することを希望する各投票者は、自分が選択した投票オプションを示し、必要なsighashフラグと共に投票トークンを使用するための署名を提供する、インプット-アウトプットペアを定義する。これらは、ステップS918でインプット-アウトプットペアを受信する投票コーディネータの装置に送信される。
【0148】
投票を行うための期限が過ぎたか、すべての投票が受信されると、投票コーディネータは、必要な数の参加者がインプット-アウトプットペアを送信したこと、及びインプットが投票のために発行されたトークンを識別するアウトポイントを含むことを確認する。これらの投票条件が満たされた場合、投票コーディネータは、ステップS920で、受信したすべてのインプット-アウトプットペアを含む投票トランザクション600、700を生成する。無効なインプット-アウトプットペアが受信された場合、例えば、投票資格のないパーティから受信された場合や、トークンを使用して投票しなかった場合は、無効なインプット-アウトプットペアを無視して破棄できる。
【0149】
ステップS922で、投票トランザクション600、700はブロックチェーンノードによって受信され、ブロックチェーンノードは、ステップS924でトランザクションを検証し、ステップS926でトランザクションをブロックチェーンに発行する。
【0150】
発行されると、投票コーディネータは、ステップS928で投票データにアクセスできる。各投票オプションが異なる公開鍵に関連付けられている場合、投票データ又は結果は、公開鍵に関連付けられている異なるアドレスにアクセスすることによって決定できる。各アドレスでのUTXOの量、又は投票トランザクション600、700の結果としてそのアドレスで受け取った量は、投票の重みを含めて、各投票オプションで受け取った投票の数に比例する。これにより、効率的かつ正確な開票方法が提供される。
【0151】
代替として、ブロックチェーンに保存された投票トランザクション600、700自体にアクセスして、投票データにアクセスすることもできる。これにより、OP_RETURN内のデータを閲覧する方法が提供される。OP_RETURNを使用して行われた投票は、投票コーディネータ又はそのコンピュータ装置によってカウントされる。
【0152】
その後、投票コーディネータは、ステップS930で投票結果を投票者に配布できる。
【0153】
上記のようにブロックチェーンに投票を公開することで、投票結果と投票参加者の追跡が容易になる。また、投票は不変であるため、手動でカウントされた投票よりも結果の信頼性が高くなる。
【0154】
「投票コーディネータ」という用語は、上記では、ユーザ装置を制御するユーザと、コンピュータ装置上で方法のステップを実装するように構成されたユーザ装置上で実行されるコンピュータプログラムの両方を指すために使用されている。
【0155】
図9の方法のステップの幾つかは、異なる順序で、又は同時に実装される場合があることが理解される。例えば、投票者を定義するステップS904が第1ステップである場合もあれば、ステップS902と同時に実行される場合もある。投票オプションを定義するステップS902は、トークンが投票者によって受信された後、ステップS914まで実行されない場合もある。方法ステップの他の代替の順序は、当業者には明らかであろう。
【0156】
図10は、投票者による例示的な投票方法を示す。この方法は、投票するパーティのユーザ装置上で、装置のプロセッサでコンピュータプログラムを実行することによって実装される。投票者はクライアントアプリケーション300を使用してインプットを提供する。
【0157】
ステップS1002で、投票コーディネータから投票指示を受信する。投票指示は、投票コーディネータによって定義された投票オプションと、投票オプションに関連付けられた公開鍵を含む。投票オプションは、ステップS1004で、ユーザ選択項目301としてユーザ装置のディスプレイ上でレンダリングされる。
【0158】
ユーザは、選択した投票オプションを選択するか、又は入力する。ステップS1006で、この選択はUI300において検出される。
【0159】
ステップS1008で、選択された投票オプションに関連付けられた公開鍵は、受信した投票指示を使用して決定される。
【0160】
ステップS1010で、投票者の投票のインプット-アウトプットペアが生成される。インプットはアウトポイントとsingle sighashフラグを持つパーティの署名を含み、アウトプットはユーザが選択した投票オプションに関連付けられた公開鍵と必要なデジタルアセット量を含む。
【0161】
その後、ユーザ装置はステップS1012として、インプット-アウトプットペアを投票トランザクションに含めるために投票コーディネータに送信する。
【0162】
投票コーディネータが投票トークンも生成する場合、投票指示にはトークンに関する情報、例えばトークンを識別するアウトポイントと投票の値(投票者がトークンを分割して複数の投票を行うことができる場合)が含まれる。ステップS1010でユーザ装置によって生成されたインプットは、トークンを識別するアウトポイントを含み、アウトプットは、パーティが選択された投票オプションに割り当てたい投票数に比例する値を含む。
【0163】
ただし、トークンが発行されない場合、投票指示には投票のコストが含まれ、インプットはコストと等しい値を持つUTXOを識別するアウトポイントを含む。
【0164】
1つの公開鍵のみが投票に関連付けられている場合、公開鍵を決定するステップS1008は、方法から削除され、アウトプットは投票に関連付けられた1つの公開鍵を含む。
【0165】
前述のように、投票者は、UI300のデータエントリフィールド302を介して、投票者が提供するテキストの形式で、ユーザ定義のコメント又は投票オプションをインプットできる場合がある。投票者が提供したテキストは、投票トランザクションのOP_RETURNに含めるために、アウトプットに含まれる。
【0166】
変形
匿名性:ここで説明する設定では、投票者は各投票トークンに関連付けられたIDを知っているため、最終的なトランザクションがブロードキャストされると、パーティの投票選択を識別できる。ただし、コーディネータが各投票者にどのトークンが発行されたかを公に識別する必要はなく、トークンが投票者に未だ公にリンクされていないアドレスに発行される場合は、秘密投票を行うことができる。
【0167】
再利用可能/移転可能な投票:アウトプットのアドレスを介して投票を示す代わりに、アウトプットのOP_RETURNデータで投票の選択肢を表すこともできる。これにより、トークンを(アウトプットアドレスを独自のものとして設定することで)同じユーザに割り当てることができ、その後の投票でトークンを再利用できるようになる。これにより、コーディネータが投票ごとにトークンを発行する必要がなくなるため、パーティの同じセットが定期的に投票することが予想される状況でのプロセスが合理化される。これにより、各メンバーの投票履歴も提供される(これは、必要に応じて、上記のように投票者のIDから抽象化することができる)。このシステムでは、投票を移転可能にすることができる。投票者が投票の代理人を指名する場合は、自分の代わりに代理人のアドレスにトークンを転送できる。
【0168】
重み付け:投票は、投票者間で均等に配分される必要はない。トークンは、例えば年功序列や投資に基づいた階層を実装するために、重み付けされた方法で発行することができる。重み付けは、各ユーザに発行されたトークンの数を介して、又は各投票者に変数値の単一のトークンを発行することによって実装できる。トークンが変動する量で発行される場合、投票者はトークンを分割して複数のオプションに投票することができ、1つの投票は事前に定義された値を持つ場合がある。従って、より大きな権限を持つ投票者は、複数のオプションに投票するか、大きな重みを持つ1つのオプションに投票するか、又はその2つの組み合わせに投票するかを決定できる。
【0169】
詳細な(Granular)投票:投票者ごとに複数のトークンが発行された場合(これがメンバー間で重みづけされているか等しいかに拘わらず)、これにより投票者は投票を分割して好みを示す機会を与えられる。例えば、10個のトークンのうち、投票者はオプションAに8個、オプションBに0個、オプションCに2個を割り当てることを選択できる。
【0170】
特別なトークン:特別な条件が付加されたトークンを発行できる。例えば、グループの上級メンバーに拒否権トークンを発行できる。これは、通常のトークンの代わりに(又は追加で)送信でき、例えば、投票全体又は選択した投票オプションを無効にする効果がある場合がある。特別なトークンは、UTXOに基づいて投票コーディネータ又はスマートコントラクトによって識別でき、トークンの作成時に使用条件をOP_RETURNに記述できる。
【0171】
追加情報の埋め込み:各アウトプットのOP_RETURNにデータを含めることで、事前に定義された選択肢のセットの間で直接的に選択するよりも、応答のニュアンスを高めることができる。このスペースは、投票選択に対するオプションのコメントを許可するために使用することも、より形式的に各投票者からのフィードバックを要求するために使用することもできる。例えば、学術研究では、多くの学術誌が論文の出版を承認する前に、複数の独立した専門家による査読を要求している。これは、ここで説明されているように投票によって実装することができ、アウトプットアドレスは全体的な推奨事項(却下、修正、再提出、受理など)を反映し、OP_RETURNは完全なコメントのためのスペースを提供する。原稿の決定を表すトランザクションは、すべてのレビュー担当者が投票とコメントを返すまで有効ではなく、これは決定プロセスの不変の記録を提供する。また、例えばフィードバックが要求される場合は、投票コーディネータが投票オプションを提供せず、投票者がOP_RETURNで投票オプションを提供するように投票を定義することもできる。この場合、投票に対して定義する必要があるのは1つのアドレスのみであり、すべての投票の値は1つのアドレスに送られる。
【0172】
多目的投票トークントランザクション:トークン発行トランザクションは、トランザクションのOP_RETURNで提供される各トークンに関連付けられたロックスクリプトに追加情報を含めることができる。この追加情報は投票指示にすることができる。トークン発行トランザクションが発行され、ユーザがトークンが発行されたことを通知すると、投票者の装置上のプログラムはOP_RETURNで提供された投票指示にアクセスし、適切な情報をユーザにレンダリングする。これにより、トークンが発行されたときに投票指示を不変に保存することができる。
【0173】
トークン/投票者チェックソフトウェア:投票者又は投票コーディネータの装置上のクライアントアプリケーション105などのソフトウェアは、投票者が投票資格があるかどうか、及び/又は正しいsighashフラグが使用されたかどうかをチェックする役割を担う場合がある。投票者の適格性をチェックするために、ソフトウェアは、インプット-アウトプットペアの署名が適格な投票者と関連付けられていることをチェックできる。例えば、適格な投票者のリストと比較したり、トークンが発行されている場合に有効なトークンが使用されていることをチェックしたりできる。ソフトウェアは、プログラムなどに格納されている事前に定義されたsighashルールに対して使用されているsighashフラグをチェックしたり、トークン発行トランザクションで定義されているsighashフラグ条件に対して使用されているsighashフラグをチェックしたりできる。このシナリオでは、使用されているsighashフラグを要件に対してチェックするときにソフトウェアによってアクセスされる、トークン発行トランザクションのOP_RETURNでsighashフラグ条件を定義できる。その後、インプット-アウトプットペアは投票コーディネータにのみ送信されるか、又は基準が満たされた場合に投票トランザクションに含まれるため、インプット-アウトプットペアがないと投票トランザクションが無効になる。
【0174】
上記の署名手順は、複数のsighashフラグを組み合わせて高度な署名システムを実現する方法の包括的な例を提供する。特に、ここに記載されているシステムは、個人の独立性を損なうことなく、共同トランザクションで協力する機会を個人に提供する。また、部分的に形成され、部分的に署名されたトランザクションを交換することが、sighash ALLに署名するときに必要な予備的な対話の代わりにコミュニケーションとして機能し、署名手続きを大幅に合理化できる方法についても概説している。
【0175】
<結論>
開示された技術の他の変形例又は使用事例は、本明細書で開示されると、当業者に明らかになり得る。本開示の範囲は、記載された実施形態によって限定されるものではなく、添付の特許請求の範囲によってのみ限定される。
【0176】
例えば、上述の幾つかの実施形態は、ビットコインネットワーク106、ビットコインブロックチェーン150、及びビットコインノード104の観点で説明された。しかしながら、ビットコインブロックチェーンは、ブロックチェーン150の1つの特定の例であり、上述の説明は任意のブロックチェーンに一般的に適用されてよいことが理解される。つまり、本発明は、ビットコインブロックチェーンに何ら限定されない。より一般的には、上述のビットコインネットワーク106、ビットコインブロックチェーン150、及びビットコインノード104への言及は、ブロックチェーンネットワーク106、ブロックチェーン150、及びブロックチェーンノード104により各々置き換えられてよい。ブロックチェーン、ブロックチェーンネットワーク、及び/又はブロックチェーンノードは、ビットコインブロックチェーン150、ビットコインネットワーク106、及びビットコインノード104の上述の特性の一部又は全部を共有してよい。
【0177】
本発明の好適な実施形態では、ブロックチェーンネットワーク106は、ビットコインネットワークであり、ビットコインノード104はブロックチェーン150のブロック151を生成し、公開し、伝播し、及び格納する上述の機能の少なくとも全部を実行する。これらの機能の全部ではなく1つ又は一部のみを実行する他のネットワークエンティティ(又はネットワーク要素)が存在することが除外されない。つまり、ネットワークエンティティは、ブロックを伝播し及び/又は格納する機能を実行してよいが、ブロックを生成し公開しなくてよい(これらのエンティティが好適なビットコインネットワーク106のノードと見なされないことを思い出してほしい)。
【0178】
本発明の他の実施形態では、ブロックチェーンネットワーク106はビットコインネットワークでなくてもよい。これらの実施形態では、ノードが、ブロックチェーン150のブロック151を生成し、公開し、伝播し、及び格納する機能の全部ではなく少なくとも1つ又は一部を実行してよいことが除外されない。例えば、これらの他のブロックチェーンネットワークでは、「ノード」は、ブロック151を生成し公開するよう構成されるが該ブロック151を格納し及び/又は他のノードに伝播しないネットワークエンティティを表すために使用されてよい。
【0179】
更に一般的には、上述の用語「ビットコインノード」104の言及は、用語「ネットワークエンティティ」又は「ネットワーク要素」と置き換えられてよい。このようなエンティティ/要素は、ブロックを生成し、公開し、伝播し、及び格納する役割のうちの一部又は全部を実行するよう構成される。そのようなネットワークエンティティ/要素の機能は、ハードウェアで、ブロックチェーンノード104を参照して上述したのと同じ方法で実装されてよい。
【0180】
上記の実施形態は、単なる例示として説明したものであることが理解されるであろう。より一般的には、以下の記述のうちの任意の1つ以上に従った方法、装置又はプログラムが提供され得る。
【0181】
(ステートメント1)投票を行うためのブロックチェーンの投票トランザクションのインプットとアウトプットを生成するためのコンピュータプログラムであり、前記コンピュータプログラムは、非一時的媒体に格納され、1つ以上のコンピュータプロセッサによって実行されると、前記1つ以上のプロセッサを、
投票コーディネータから、前記投票コーディネータによって定義された1つ以上の公開鍵と投票オプションのセットとを含む投票指示を受信し、
ディスプレイを制御して、前記投票オプションのセットを表示するユーザインタフェースをレンダリングし、
前記ユーザインタフェースでユーザ入力によって定義された前記投票オプションのセットのうちの1つの投票オプションのユーザ選択を受信し、
投票トランザクションの異なるインデックスにある1つ以上の他のインプット-アウトプットペアを有する前記投票トランザクションに含めるインプット-アウトプットペアを生成する、
よう構成させ、
前記インプット-アウトプットペアのインプットの非署名部分は、ブロックチェーントランザクションの未使用トランザクションアウトプットを識別するアウトポイントを含み、前記インプットの署名部分は、signature singleフラグと、少なくとも前記インプット-アウトプットペアの前記非署名部分と前記インプット-アウトプットペアのアウトプットに署名するが前記投票トランザクションの他のアウトプットに署名しない関連署名と、を含み、前記インプット-アウトプットペアの前記アウトプットは、前記投票指示の1つ以上の公開鍵の1つを含む、コンピュータプログラム。
【0182】
(ステートメント2)前記1つ以上のプロセッサが、前記投票トランザクションを生成するために、前記インプット-アウトプットペアを前記投票コーディネータに送信するようにさらに構成される、ステートメント1に記載のコンピュータシステム。
【0183】
(ステートメント3)前記投票オプションのセットの各投票オプションが異なる公開鍵に関連付けられ、前記1つ以上のプロセッサが、選択された投票オプションに関連付けられた公開鍵を決定するようにさらに構成され、前記アウトプットは決定された公開鍵を含む、ステートメント1又は2に記載のコンピュータプログラム。
【0184】
(ステートメント4)前記投票指示は、未使用トランザクションアウトプットを識別する投票トークンをさらに含み、前記インプット-アウトプットペアのインプットのアウトポイントが前記投票トークンを識別する、ステートメント1~3のいずれかに記載のコンピュータシステム。
【0185】
(ステートメント5)前記インプット-アウトプットペアは、事前に定義された投票者のセットの1人の投票者に関連付けられ、前記事前に定義された投票者のセットのサブセットは、各々のインプット-アウトプットペアを生成することが要求され、前記single署名フラグは、前記署名がインプット-アウトプットペアのインプットとアウトプットのみに署名し、前記投票トランザクションの他のインプット又はアウトプットに署名しないような、single-anyone can pay署名フラグである、ステートメント1~4のいずれかに記載のコンピュータプログラム。
【0186】
(ステートメント6)前記1つ以上のプロセッサが、OP_RETURNに含めるための情報を含むユーザ定義のインプットを受信するように更に構成されており、インプット-アウトプットペアのアウトプットが更に前記情報を含む、ステートメント1~5のいずれかに記載のコンピュータプログラム。
【0187】
(ステートメント7)ブロックチェーンの投票トランザクションを生成するためのコンピュータプログラムであって、前記コンピュータプログラムは、非一時的媒体に格納され、1つ以上のプロセッサによって実行されると、前記1つ以上のプロセッサを、
ステートメント1~6のいずれかに記載の複数のインプット-アウトプットペアを受信し、
投票トランザクションを生成し、
前記投票トランザクションは、
投票インデックスのセットの各投票インデックスの中に、受信したインプット-アウトプットペアの1つと、
認可インデックスの中に、投票コーディネータの署名が投票トランザクションのすべてのインプットとアウトプットに署名するように、all署名フラグを持つ投票コーディネータの署名で構成されるインプットと、
アウトプットと、
を含み、
前記投票トランザクションをブロックチェーンに送信する、
よう構成させる、コンピュータプログラム。
【0188】
(ステートメント8)前記1つ以上のプロセッサが、事前に定義された数のインプット-アウトプットペアを受信したかどうかを決定するようにさらに構成されている、ステートメント7に記載のコンピュータプログラム。
【0189】
(ステートメント9)前記1つ以上のプロセッサが、
投票指示を生成し、
投票者のセットのうちの各投票者のユーザ装置からアクセス可能に前記投票指示をレンダリングする、
よう構成され、前記投票指示を生成する処理は、
投票を開始するユーザ入力を検出することと、
少なくとも1つの公開鍵を前記投票に関連付けることと、
を含む、ステートメント7又は8に記載のコンピュータプログラム。
【0190】
(ステートメント10)前記1つ以上のプロセッサがトークンのセットを生成するように構成されており、前記トークンのセットのうちの各トークンは、前記投票者のセットのうちの投票者の1人に関連付けられた未使用トランザクションアウトプットである、ステートメント9に記載のコンピュータプログラム。
【0191】
(ステートメント11)前記投票指示は、前記投票指示がアクセス可能にレンダリングされるコンピュータ装置の受信側投票者に関連付けられたトークンを含む、ステートメント10に記載のコンピュータプログラム。
【0192】
(ステートメント12)前記1つ以上のプロセッサが、更に、前記少なくとも1つの公開鍵の各々のアドレスにアクセスするように構成されている、ステートメント7~11に記載のコンピュータプログラム。
【0193】
(ステートメント13)前記1つ以上のプロセッサが、更に、投票トランザクションが前記ブロックチェーンノードによって妥当性確認された後に、前記投票トランザクションにアクセスするように構成されている、ステートメント7~12に記載のコンピュータプログラム。
【0194】
(ステートメント14)前記1つ以上のプロセッサが、受信したインプット-アウトプットペアのアウトポイントによって示される未使用トランザクションアウトプットが、トランザクション手数料をカバーするのに十分であるかどうかを決定するように、更に構成され、
前記未使用トランザクションアウトプットが、前記トランザクション手数料をカバーするのに十分でない場合、認可インデックスのインプットは、前記インプット-アウトプットペアによってカバーされない前記トランザクション手数料の金額をカバーするのに十分な未使用トランザクションアウトプットを示すアウトポイントを含む、ステートメント7から13のいずれかに記載のコンピュータプログラム。
【0195】
(ステートメント15)前記インプット-アウトプットペアのインプットのアウトポイントによって識別される未使用トランザクションアウトプットは、投票数に比例する値を持ち、1つの投票は事前に定義された値を持つ、ステートメント1~14のいずれかに記載のコンピュータプログラム。
【0196】
(ステートメント16)前記トークンは、前記トークンを含むインプットの非署名部分に署名するときに使用しなければならない署名フラグを定義するロックスクリプトに関連付けられている。ステートメント4又は11、ステートメント4に従属するステートメント5~6のいずれか、又はステートメント11に従属するステートメント12~15のいずれかに従ったコンピュータプログラム。
【0197】
(ステートメント17)コンピュータ可読媒体上に具現化されたブロックチェーントランザクションであって、
ブロックチェーントランザクションのインプット内で示される使用可能トランザクションアウトプットを有効に消費するためのインプット、
署名要件と必要な署名フラグを定義するロックスクリプトを含み、後続のブロックチェーントランザクションでアンロックスクリプトと連結されたときに、前記アンロックスクリプトの署名を妥当性確認し、前記アンロックスクリプトから使用された署名フラグを抽出し、前記使用された署名フラグと前記必要な署名フラグを比較し、前記使用された署名フラグが前記必要な署名フラグと一致しない及び/又は前記署名が無効である場合に、前記後続のブロックチェーントランザクションが無効になるようにする、少なくとも1つのアウトプットと、
を含むブロックチェーントランザクション。
【0198】
(ステートメント18)前記署名フラグが前記署名の最後のバイトによって示され、前記使用された署名フラグを前記必要な署名フラグと比較するステップは、前記署名の前記最後のバイトを前記ロックスクリプトで定義された前記必要な署名フラグを示す値と比較することを含み、前記署名の前記最後のバイトが前記必要な署名フラグを示す値と等しい場合、前記使用された署名フラグと前記必要な署名フラグが一致する、ステートメント17に記載のブロックチェーントランザクション。
【0199】
(ステートメント19)前記トークンは投票トランザクションでの使用のためのものであり、前記使用可能アウトプットが投票数に比例する値を持つ、ステートメント17又は18に記載のブロックチェーントランザクション。
【0200】
(ステートメント20)前記ブロックチェーントランザクションは、承認されたパーティのセットのうちの各パーティに関連付けられたアウトプットを含み、前記承認されたパーティは、後続のブロックチェーントランザクションのインプットとアウトプットを提供する権限を与えられている、ステートメント17~19のいずれかに記載のブロックチェーントランザクション。
【0201】
(ステートメント21)前記承認されたパーティのセットのうちのサブセットは、前記後続のブロックチェーントランザクションのインプットとアウトプットを提供する必要があり、前記必要な署名フラグは、前記後続のブロックチェーントランザクション内の同じインデックスで提供されるインプットとアウトプットのみを承認するためのsingle-anyone can pay署名フラグである、ステートメント20に記載のブロックチェーントランザクション。
【0202】
(ステートメント22)前記承認されたパーティのセットのうちのすべてのパーティは、前記後続のブロックチェーントランザクションのインプットとアウトプットを提供する必要があり、前記必要な署名フラグは、前記後続のトランザクションのすべてのインプットと、提供されたアンロックスクリプトと同じインデックスでのアウトプットのみを承認するためのsingle-all署名フラグである、ステートメント20に記載のブロックチェーントランザクション。
【0203】
(ステートメント23)前記ブロックチェーントランザクションがトークン発行トランザクションであり、前記トークン発行トランザクションのアウトプットは、前記ブロックチェーントランザクションをブロックチェーンに記録するためだけに十分なデジタルアセットの名目量を定義する、ステートメント17~22のいずれかに記載のブロックチェーントランザクション。
【0204】
(ステートメント24)投票を行うためのブロックチェーンの投票トランザクションのインプットとアウトプットを生成する方法であり、前記方法は、
投票コーディネータから、前記投票コーディネータによって定義された1つ以上の公開鍵と投票オプションのセットとを含む投票指示を受信するステップと、
前記投票オプションのセットを表示するユーザインタフェースをレンダリングするステップと、
前記ユーザインタフェースでユーザ入力によって定義された前記投票オプションのセットのうちの1つの投票オプションのユーザ選択を受信するステップと、
投票トランザクションの異なるインデックスにある1つ以上の他のインプット-アウトプットペアを有する前記投票トランザクションに含めるインプット-アウトプットペアを生成するステップと、
を含み、
前記インプット-アウトプットペアのインプットの非署名部分は、ブロックチェーントランザクションの未使用トランザクションアウトプットを識別するアウトポイントを含み、前記インプットの署名部分は、signature singleフラグと、少なくとも前記インプット-アウトプットペアの前記非署名部分と前記インプット-アウトプットペアのアウトプットに署名するが前記投票トランザクションの他のアウトプットに署名しない関連署名と、を含み、前記インプット-アウトプットペアの前記アウトプットは、前記投票指示の1つ以上の公開鍵の1つを含む、方法。
【0205】
(ステートメント25)ブロックチェーンの投票トランザクションを生成する方法であって、前記方法は、
上述のステートメントのいずれかに従い複数のインプット-アウトプットペアを受信するステップと、
投票トランザクションを生成するステップであって、前記投票トランザクションは、
投票インデックスのセットの各投票インデックスの中に、受信したインプット-アウトプットペアの1つ、及び、
認可インデックスの中に、投票コーディネータの署名が投票トランザクションのすべてのインプットとアウトプットに署名するように、all署名フラグを持つ投票コーディネータの署名を含むインプットと、アウトプットと、
を含む、ステップと、
前記投票トランザクションをブロックチェーンに送信するステップと、
を含む方法。
【0206】
(ステートメント26)コンピュータシステムであって、
ステートメント1~6、又はステートメント4に従属するステートメント16のいずれかに記載のコンピュータプログラムを実行するように構成された少なくとも1つのコンピューティング装置と、
ステートメント7~15、又はステートメント7に従属するステートメント16記載のコンピュータプログラムを実行するように構成された少なくとも1つのコンピューティング装置と、
を含むコンピュータシステム。
【0207】
(ステートメント27)ブロックチェーントランザクションを生成するコンピュータプログラムであって、前記コンピュータプログラムは非一時的媒体に格納され、1つ以上のプロセッサにより実行されると、前記1つ以上のプロセッサを、前記ブロックチェーントランザクションを生成するよう構成させ、前記ブロックチェーントランザクションは、
前記ブロックチェーントランザクションのインプット内で示される使用可能トランザクションアウトプットを有効に消費するためのインプットと、
署名要件と必要な署名フラグを定義するロックスクリプトを含む少なくとも1つのアウトプットであって、後続のブロックチェーントランザクション内のアンロックスクリプトと連結されたときに、前記アンロックスクリプトの署名を妥当性確認し、前記アンロックスクリプトから使用された署名フラグを抽出し、前記使用された署名フラグと前記必要な署名フラグを比較し、前記使用された署名フラグが前記必要な署名フラグと一致しない及び/又は前記署名が無効である場合に、前記後続のブロックチェーントランザクションが無効になるようにする、少なくとも1つのアウトプットと、
を含む、コンピュータプログラム。
【0208】
付録A:
このセクションでは、UTXOが使用されたときに特定のsighashフラグを使用して署名されているかの追加チェックを作成するために、標準のP2PKHロックスクリプトの前に追加できるSCRIPTコードについて説明する。
【0209】
ECDSAを使用して作成され、ビットコイントランザクション用に符号化されたデジタル署名は、署名シーケンスの長さを示すバイトで始まり、sighashフラグを示すバイトで終わる。例えば、SINGLE|ACPフラグで署名された合計47バイトの署名は、0x47<sig>83の形式になる。署名時に特定のsighashフラグが使用されたかどうかを確認するには、署名の最終バイトが特定の値と等しいことを確認する。
【0210】
この例では、sighashチェックコードに続くロックスクリプトがP2PKHスクリプトであると仮定する。従って、アンロックスクリプトは<sig><P>の形式をとり、ロックスクリプトが実行される前に両方の項目がスタックにプッシュされる。
【0211】
次の行は、スタック上の項目を下(左)から上(右)の順に表し、各項目は[]で囲まれている。インデントされた青色のテキストは、次のOPコードを示す。各OPコードが最初に使用されたときに、その機能の簡単な説明が続く。
【0212】
アンロックスクリプトは、署名と関連する公開鍵をスタックにプッシュした:
【数7】
最終状態は、標準のP2PKHスクリプトが妥当性確認するために必要であるため、署名と公開鍵をスタックに残す。
【国際調査報告】