(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2023-08-23
(54)【発明の名称】ブロックチェーントークン
(51)【国際特許分類】
G06Q 40/04 20120101AFI20230816BHJP
【FI】
G06Q40/04
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2023506237
(86)(22)【出願日】2021-03-09
(85)【翻訳文提出日】2023-03-24
(86)【国際出願番号】 EP2021055905
(87)【国際公開番号】W WO2022022864
(87)【国際公開日】2022-02-03
(32)【優先日】2020-07-29
(33)【優先権主張国・地域又は機関】GB
(81)【指定国・地域】
(71)【出願人】
【識別番号】523031529
【氏名又は名称】タール ディット ゲーエムベーハー
(74)【代理人】
【識別番号】100107766
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【氏名又は名称】伊東 忠彦
(74)【代理人】
【識別番号】100135079
【氏名又は名称】宮崎 修
(72)【発明者】
【氏名】トロック、スタニスラフ
【テーマコード(参考)】
5L055
【Fターム(参考)】
5L055BB53
(57)【要約】
トークン取引は第1のトークン出力を含み、第1のトークン出力は第1のトークンロッキングスクリプト及び第1のトークンの額を含み、第1のトークンロッキングスクリプトは可変コンポーネント及び定数コンポーネントを含み、可変コンポーネントは支払テンプレートに埋め込まれた第1の支払アドレスを含み、定数コンポーネントはトークンメカニクスサブコンポーネントを含む。
【特許請求の範囲】
【請求項1】
ブロックチェーン取引を用いてデジタルトークンを送信するコンピュータ実施方法であって、各トークンはブロックチェーンの基礎となるデジタル資産の固有の単位の単一の単位によって表され、当該方法は、
第1のトークン取引を生成することと、
前記第1のトークン取引をブロックチェーンネットワークに送信することと、
を含み、
前記第1のトークン取引は第1のトークン出力を含み、該第1のトークン出力は第1のトークンロッキングスクリプト及び第1のトークンの額を含み、該第1のトークンロッキングスクリプトは可変コンポーネント及び定数コンポーネントを含み、該可変コンポーネントは、支払テンプレートに埋め込まれた第1の支払アドレスを含み、該定数コンポーネントはトークンメカニクスサブコンポーネントを含み、該トークンメカニクスサブコンポーネントは、支出取引の入力スクリプトであって、該入力スクリプトは、該支出取引の自身を除く全てに加えて、支出されている以前の取引出力においてロックされている額及びそれぞれのロッキングスクリプトを含む入力スクリプトと共に実行された場合、
前記支出取引の入力スクリプトから1つ以上のデータ対を取得することであって、各データ対は、i)前記支出取引の出力のそれぞれのロッキングスクリプトに含まれる少なくともそれぞれの支払アドレスと、ii)その出力のそれぞれのロッキングスクリプトによってロックされている、前記基礎となるデジタル資産の対応する額とを含む、ことと、
前記支出取引の1つ以上の出力が、a)所定の支払アドレスを含むそれぞれの支払スクリプトテンプレート又はb)前記所定の支払アドレス以外のそれぞれの支払アドレスを含むそれぞれの可変コンポーネントと、後続の前記定数コンポーネントとを含むそれぞれのロッキングスクリプトを含むか検証することと、
前記支出取引の1つ以上の出力について、前記1つ以上の出力のそれぞれのロッキングスクリプトによってロックされている、前記基礎となるデジタル資産の合計額が、前記第1のトークンの額と等しいか検証することと、
を行うように構成され、
前記トークンメカニクスサブコンポーネントは、検証ステップのいずれかが失敗した場合、実行の間に失敗するように構成されている、方法。
【請求項2】
前記支出取引は、第1のロッキングスクリプトを含む第1の出力と、第2のロッキングスクリプトを含む第2の出力とを含み、前記トークンメカニクスサブコンポーネントは、
前記支出取引の前記第1の出力が、a)所定の支払アドレスを含むそれぞれの支払スクリプトテンプレート又はb)前記所定の支払アドレス以外のそれぞれの支払アドレスを含むそれぞれの可変コンポーネントと、後続の前記定数コンポーネントとを含む第1のロッキングスクリプトを含むか検証することと、
存在する場合に、前記支出取引の前記第2の出力が、a)所定の支払アドレスを含むそれぞれの標準支払スクリプトテンプレート又はb)前記所定の支払アドレス以外の任意のアドレスを含むそれぞれの可変コンポーネントと、後続の前記定数コンポーネントとを含む第2のロッキングスクリプトを含むか検証することと、
前記第2の出力が存在する場合に、前記支出取引の前記第1のロッキングスクリプト及び前記第2のロッキングスクリプトによってロックされている、前記デジタル資産の合計額が前記第1のトークンの額と等しいか検証することと、
を行うように構成されている、請求項1に記載の方法。
【請求項3】
前記トークンメカニクスコンポーネントは、
前記支出取引の前記第1のロッキングスクリプトが、所定の支払アドレスを含む前記標準支払スクリプトテンプレートを含まない場合、前記第1のロッキングスクリプトが、前記所定の支払アドレス以外の支払アドレスを含むそれぞれの可変コンポーネントと、支出されている以前の取引の前記第1のトークンロッキングスクリプトの対応する定数コンポーネントと同一の、後続の前記定数コンポーネントとを含むか検証すること、及び/又は
前記支出取引の前記第2のロッキングスクリプトが存在する場合、前記第2のロッキングスクリプトが、任意の支払アドレスを含むそれぞれの可変コンポーネントと、後続の、支出されている以前の取引の前記第1のトークンロッキングスクリプトの対応する定数コンポーネントと同一の、後続の前記定数コンポーネントとを含むか検証すること、
を行うように構成されている、請求項1又は2に記載の方法。
【請求項4】
前記定数コンポーネントは、前記所定の支払アドレスを含む、請求項1乃至3のいずれか一項に記載の方法。
【請求項5】
前記支出取引の入力スクリプトはsighash原像を含み、該原像は前記第1のトークンロッキングスクリプト及び前記第1のトークンの額を含み、前記トークンメカニクスサブコンポーネントは、
前記検証ステップを行うために、前記第1のトークンロッキングスクリプト及び支出されている前記出力の前記第1のトークンの額の両方を、前記原像から抽出すること、
を行うように構成されている、請求項1乃至4のいずれか一項に記載の方法。
【請求項6】
前記原像は、1つ以上のデータ対の連結のハッシュを含み、各データ対は、前記支出取引のそれぞれのロッキングスクリプトからのそれぞれの支払アドレスと、該それぞれのロッキングスクリプトによってロックされている対応する額とを含み、前記トークンメカニクスサブコンポーネントは、
前記原像から前記1つ以上のデータ対の連結のハッシュを抽出することと、
前記1つ以上のデータ対に基づいてハッシュを生成することと、
前記生成されたハッシュが前記抽出されたハッシュと等しいか検証することと、
を行うように構成されている、請求項5に記載の方法。
【請求項7】
前記ハッシュを生成するために用いられる前記1つ以上のデータ対は、前記入力スクリプトから取得されるか又は前記以前の出力ロッキングスクリプトの入力アドレス及び額の対を前記原像から取得することによって構築される、請求項6に記載の方法。
【請求項8】
前記トークンメカニクスサブコンポーネントは、
前記支出取引データの原像を生成することと、
前記支出取引データの前記生成された原像が、前記支出取引の前記入力内に含まれる前記原像と等しいか検証することと、
を行うように構成されている、請求項5乃至7のいずれか一項に記載の方法。
【請求項9】
前記支出取引の前記入力は、ダミー秘密鍵と、対応するダミー公開鍵とを含み、前記トークンメカニクスサブコンポーネントは、
前記支出取引の前記生成された原像が、前記支出取引の前記入力に含まれる前記原像と等しいかを、
前記ダミー秘密鍵及び前記支出取引の前記入力に含まれる前記原像のハッシュを用いてデジタル署名を生成することと、
前記デジタル署名が、前記ダミー公開鍵及び前記支出取引の前記生成された原像のハッシュに対して検証された場合に有効な署名か検証することと、
を行うことにより検証するように構成されている、請求項8に記載の方法。
【請求項10】
前記トークンメカニクスサブコンポーネントは、
前記支出取引のそれぞれのロッキングスクリプトに含まれる前記それぞれの支払アドレスが、前記第1のトークン出力の前記可変コンポーネントに含まれる前記第1の支払アドレスと同じ種類であるか検証すること、
を行うように構成されている、請求項1乃至9のいずれか一項に記載の方法。
【請求項11】
前記第1の支払アドレスの種類は公開鍵ハッシュアドレスである、請求項1乃至9のいずれか一項に記載の方法。
【請求項12】
前記第1のトークンの額は、前記基礎となるデジタル資産の単一の単位を含む、請求項1乃至11のいずれか一項に記載の方法。
【請求項13】
前記第1のトークンの額は、前記基礎となるデジタル資産の複数の単位を含む、請求項1乃至11のいずれか一項に記載の方法。
【請求項14】
前記定数コンポーネントはデータサブコンポーネントを含み、該データサブコンポーネントは、
トークンプロトコル識別子、及び
トークン発行取引の識別子であって、該トークン発行取引は、i)トークン発行者と初期トークン受領者との間の発行契約及びii)初期トークン額の一方又は両方を含む、トークン発行取引の識別子
のうちの一方又は両方を含む、請求項1乃至13のいずれか一項に記載の方法。
【請求項15】
前記支出取引は、第3のロッキングスクリプトと、対応する第3の額とを含む第3の出力を含み、前記トークンメカニクスサブコンポーネントは、
前記第3のロッキングスクリプトが、所定の支払タイプテンプレートのそれぞれの支払アドレスと、それぞれの対応する額とを含むか検証すること、
を行うように構成されている、請求項2又はそれに従属する請求項のいずれか一項に記載の方法。
【請求項16】
前記第1のトークン取引は、以前のトークン取引のそれぞれのトークン出力を支出する第1のトークン入力を含み、該第1のトークン入力は、
前記第1のトークン取引のそれ自体を除く全てと、支出された前記以前のトークン取引のそれぞれの額及びそれぞれのロッキングスクリプトと、
少なくとも1つ以上のデータ対であって、各データ対は、前記第1のトークン取引のそれぞれのロッキングスクリプトに含まれる支払アドレスと、該それぞれのロッキングスクリプトによってロックされている、前記基礎となるデジタル資産の対応する額とを少なくとも含む、少なくとも1つ以上のデータ対と、
を含む、請求項1乃至15のいずれか一項に記載の方法。
【請求項17】
前記第1のトークン取引は第2のトークン出力を含み、該第2のトークン出力は第2のトークンロッキングスクリプトと第2のトークンの額とを含み、該第2のトークンロッキングスクリプトはそれぞれの可変コンポーネント及びそれぞれの定数コンポーネントを含み、該それぞれの可変コンポーネントは第2の支払アドレスを含み、該それぞれの定数コンポーネントは前記第1のトークンロッキングスクリプトの前記定数コンポーネントと合致する、請求項16に記載の方法。
【請求項18】
前記第1のトークン取引は第3の出力を含み、該第3の出力は第3の支払アドレスを含む、請求項17に記載の方法。
【請求項19】
前記第1のトークン入力は、第1の当事者によって生成された第1の署名を含み、前記第1のトークン取引は第2の入力を含み、該第2の入力は、第2の当事者によって生成された第2の署名を含み、前記第1のトークン取引は支払テンプレートに含まれる支払アドレスを含む支払出力を含み、該支払アドレスは前記第1の当事者にリンクされている、請求項16乃至18のいずれか一項に記載の方法。
【請求項20】
1つ以上のメモリユニットを含むメモリと、
1つ以上の処理ユニットを含む処理装置であって、前記メモリは、該処理装置上で実行されるように構成されたコードを記憶し、該コードは、前記処理装置上にある場合に、請求項1乃至19のいずれかの方法が行われるように構成されている、処理装置と、
を含むコンピュータ機器。
【請求項21】
コンピュータ読み取り可能記憶装置上で具現化されるコンピュータプログラムであって、コンピュータ機器上で実行された場合に、請求項1乃至19のいずれかの方法が行われるように構成されている、コンピュータプログラム。
【請求項22】
第1のトークン出力を含むトークン取引であって、該第1のトークン出力は、第1のトークンロッキングスクリプト及び第1のトークンの額を含み、該第1のトークンロッキングスクリプトは、可変コンポーネント及び定数コンポーネントを含み、該可変コンポーネントは支払テンプレートに埋め込まれた第1の支払アドレスを含み、該定数コンポーネントはトークンメカニクスサブコンポーネントを含み、前記トークンメカニクスサブコンポーネントは、支出取引の入力スクリプトであって、該入力スクリプトは、該支出取引のそれ以外の全てと、支出されている以前の取引出力においてロックされている額及びそれぞれのロッキングスクリプトを含む、入力スクリプトと共に実行された場合に、
前記支出取引の入力スクリプトから1つ以上のデータ対を取得することであって、各データ対は、i)前記支出取引出力のそれぞれのロッキングスクリプトに含まれる少なくともそれぞれの支払アドレスと、ii)その出力のそれぞれのロッキングスクリプトによってロックされている、基礎となるデジタル資産の対応する額とを含む、ことと、
前記支出取引の1つ以上の出力が、a)所定の支払アドレスを含むそれぞれの支払スクリプトテンプレート又はb)前記所定の支払アドレス以外のそれぞれの支払アドレスを含むそれぞれの可変コンポーネントと、後続の前記定数コンポーネントとを含むそれぞれのロッキングスクリプトを含むかを検証することと、
前記支出取引の1つ以上の出力について、前記1つ以上の出力のそれぞれのロッキングスクリプトによってロックされている、基礎となるデジタル資産の合計額が、前記第1のトークンの額と等しいかを検証することと、
を行うように構成され、
前記トークンメカニクスサブコンポーネントは、検証ステップのいずれかが失敗した場合、実行の間に失敗するように構成されている、トークン取引。
【請求項23】
請求項22に記載のトークン取引が記憶されたコンピュータ読み取り可能記憶媒体。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、ブロックチェーン取引を用いてトークンを送信(例えば、発行、譲渡、分割、交換、償還)する方法に関する。
【背景技術】
【0002】
ブロックチェーンは、取引を用いて基礎となるデジタル資産(underlying digital asset)の移転を可能にする。このデジタル資産は、しばしば「暗号通貨」又は「ネイティブトークン」と呼ばれる。これは、特定のブロックチェーンに固有のデジタル資産である。理解を助ける実例として、ビットコインブロックチェーンのデジタル資産はビットコインとして知られている。
【0003】
ブロックチェーンを用いて移転され得る別の種類のデジタル資産は、「トークン」である。ブロックチェーン技術の文脈では、トークンは、取引内の追加のデータフィールドを用いて通常作成及び定義される。「トークンデータ」と呼ばれるこの追加データは、ブロックチェーンのユーザ又は特定のトークンプロトコルのユーザによってトークンとして解釈される。つまり、ユーザは、取引、より具体的には特定のトークンデータ(例えば、トークンプロトコルフラグ、続いて数量)を含む取引の出力部分がトークンとして解釈され、用いられることに同意する。出力を所有する者(通常は出力がロックされているアドレスのユーザを意味する)がトークンを所有する。その後、トークンは、特定のトークンプロトコルに従って、特定の目的のために使用、販売、トレード等を行うことができる。例えば、映画館のチケットがユーザにトークンを発行し、ユーザは映画館で映画を見ることの引き換えにトークンの代金を支払うか又は銀行は、顧客の米ドル預金と引き換えにトークンを発行し、が定期的な支払いで使用し、顧客はそれを通常の支払いに用いることができ、後でサードパーティは銀行でそれを米ドルに交換できる。
【発明の概要】
【0004】
上述したように、ブロックチェーンを用いてトークンを作成する以前の試みでは、通常、出力スクリプトコード又は追加の別の非一時停止可能な出力にトークンデータを含めることにより取引の追加データフィールドにトークンを定義することを伴う。これらのトークンは、トークンが作られるブロックチェーンの基礎となるデジタル資産(それ自体がそのネイティブトークンから構成される)とは異なる。つまり、これらの以前のスキームに従ったトークンを含む取引は、基礎となるデジタル資産(又は「ネイティブトークン」)を通常どおり用いながら、追加のデータ構造で新たなトークンも作成していた。新たなトークンはネイティブトークンとは無関係であった。新たに作られたトークンをそれらのネイティブなトークンから切り離すには、全ての最新の試みが失敗したものを実現するために負担が大きく不必要な調整が必要であり、最終的に、意図するトークンの大規模な採用に達するのを妨げる。
【0005】
本明細書で開示の1つの態様によれば、ブロックチェーン取引を用いてデジタルトークンを送信するコンピュータ実施方法が提供される。各トークンはブロックチェーンの基礎となるデジタル資産の固有の単位の単一の単位によって表される。当該方法は、第1のトークン取引を生成することと、前記第1のトークン取引をブロックチェーンネットワークに送信することと、を含む。前記第1のトークン取引は第1のトークン出力を含み、該第1のトークン出力は第1のトークンロッキングスクリプト(locking script)及び第1のトークンの額を含む。該第1のトークンロッキングスクリプトは可変コンポーネント(variable component)及び定数コンポーネント(constant component)を含む。該可変コンポーネントは、支払テンプレートに埋め込まれた第1の支払アドレスを含む。該定数コンポーネントはトークンメカニクスサブコンポーネント(token mechanics sub-component)を含み、該トークンメカニクスサブコンポーネントは、支出取引(spending transaction)の入力スクリプトであって、該入力スクリプトは、該支出取引の自身を除く全てに加えて、支出されている以前の取引出力においてロックされている額及びそれぞれのロッキングスクリプトを含む入力スクリプトと共に実行された場合、次の動作を行うように構成されている。第1の動作は、前記支出取引の入力スクリプトから1つ以上のデータ対を取得することであって、各データ対は、i)前記支出取引の出力のそれぞれのロッキングスクリプトに含まれる少なくともそれぞれの支払アドレスと、ii)その出力のそれぞれのロッキングスクリプトによってロックされている、前記基礎となるデジタル資産の対応する額とを含む。別の動作は、前記支出取引の1つ以上の出力が、a)所定の支払アドレスを含むそれぞれの支払スクリプトテンプレート又はb)前記所定の支払アドレス以外のそれぞれの支払アドレスを含むそれぞれの可変コンポーネントと、後続の前記定数コンポーネントとを含むそれぞれのロッキングスクリプトを含むか検証することを含む。別の動作は、前記支出取引の1つ以上の出力について、前記1つ以上の出力のそれぞれのロッキングスクリプトによってロックされている、前記基礎となるデジタル資産の合計額が、前記第1のトークンの額と等しいか検証することを含む。前記トークンメカニクスサブコンポーネントは、検証ステップのいずれかが失敗した場合、実行の間に失敗するように構成されている。
【0006】
以前のトークンの試みとは異なり、本発明に係る新たに発行されたトークンは、基礎となるデジタル資産トークン自体である。つまり、ネイティブトークン自体が新たな種類のトークンに変換される。これらの新たなトークンは、それらの発行時にそれ自体にエンコードされた特定の条件の下で、基礎となるデジタル資産に変換されない限り、ネイティブトークンとしてのそれらの通常の機能をもはや行わない。
【0007】
トークンが支出されるか、割り当てられるか又はさもなくば送金されて、トークンとして機能できるようにするためには、成功すべき支出取引は、その次の出力に、支出されている以前の(UTXO*と呼ばれる)取引出力と同じ形式のロッキングスクリプトを有してなければならない。つまり、支出されているトークン取引出力と同様に、支出取引は、正常に送信されるようにするために、新たなトークン出力の同じ定数コンポーネントを有するロッキングスクリプトを有する出力を含まなければならない。この定数部分は、トークンの有効期間中はその償還まで変更も省略もできない。
【0008】
この定数部分はトークンのコード部分であり、そのさまざまな動作の中で、トークンの性質を変換するために、1)自己不変性、2)自身の省略の不可能性及び3)最も重要なことは、トークンの額の保存、つまり、それがトークンをロックし、それらの額(全体又は一部)が(合計の出力の額が合計入力の額よりも少ない場合)マイナー(miner)手数料として漏出するか又は(発行時に自身にエンコードされた特定のアドレスに償還されない限り)独自のスマートロッキングスクリプト形式出力以外に支出されないようにする。
【0009】
簡単に言えば、ネイティブトークンを正規の使用を不可能にしながら、新たに定義されたものを施行して、その性質を変化させる。
【0010】
これにより、基礎となるデジタル資産の各単一の単位が再定義された単一のトークンを表し、その正規の機能を停止するという効果を有する。ビットコインブロックチェーンの例を続けると、単一のSatoshiは単一のトークンとして再定義される。トークンの所有者は、ロッキングスクリプトが全く同じ定数コンポーネントを含まない限り、トークンを別のユーザに移転するできず、これにより、新たなトークンメカニクスが施行される。ロッキングスクリプトで変更できるのは、所有権の移転に関与する、つまり、現在の所有者が、そのような標準テンプレートに含まれるアドレスに従って、トークンの一部又は全てを次の所有者に移転するできるようにする(例えば、原資産のネイティブトークンと同じ方法で用いられる)標準テンプレートであり得る可変コンポーネントだけである。
【0011】
別の言い方をすると、トークンを表すためにメタデータの添付に依拠する以前の試みとは異なり、このスキームによれば、本発明のトークンは、別個のエンティティとして機能するように再構成されている、基礎となるデジタル資産の単一の単位であり、異なるルール(それら自体にエンコードされている)によって動作する。
【0012】
上述したように、トークンは、基礎となるデジタル資産に再変換できる。つまり、トークンがスクリプトの上記の定数部分にエンコードされた特定の条件、例えば、所定の償還アドレスへの移動を満たす場合に限り、ネイティブトークンとして再度用いることができる。つまり、ハードコードされたユーザ又は機関(すなわち、償還先を支配するエンティティ)のみが、トークンを正規の基礎となるデジタル資産の性質に戻し、元の機能を復元することができる。
【図面の簡単な説明】
【0013】
本開示の実施形態の理解を支援し、そのような実施形態がどのように実施され得るかを示すために、ほんの一例として添付の図面を参照する。
【
図1】
図1は、例示のトークン取引を概略的に示す。
【
図2】
図2は、例示のトークンロッキングスクリプトを概略的に示す。
【
図3】
図3A及び
図3Bは、通常のトークン取引と、アトミックスワップトークン取引との違いを概略的に示す。
【
図4】
図4は、発行から償還までのトークンの例示のフローを概略的に示す。
【発明を実施するための形態】
【0014】
本発明の実施形態は、ブロックチェーン取引の作成及び移転を伴う。当業者であれば、ブロックチェーン技術自体に精通しているが、実施形態自体を詳細に説明する前に、ブロックチェーンの簡単な概要を先ず提供する。
【0015】
ブロックチェーンは分散データベース(又は台帳)の形態であり、これまでにブロックチェーンネットワークに移転された全ての有効な取引の記録として機能する。
【0016】
ブロックチェーンネットワークでブロードキャストされる有効な取引は、マイナー(マイニングノードとも呼ばれる)によってブロック単位でブロックチェーンに記録される。ブロックチェーン取引は、デジタル資産の額の管理、すなわち所有権を移譲するために用いられる。例示のブロックチェーンはビットコインブロックチェーンであり、そのデジタル資産はビットコインと呼ばれる。多くの異なるブロックチェーンが存在し、本発明は特定の実施に限定されない。各取引は、とりわけ、少なくとも1つの入力及び少なくとも1つの出力を含む。入力は、前の取引からの未使用取引出力(UTXO)への参照を含む。取引は、未使用取引出力(UTXO)を入力として用い、その値を新たな出力に分配する。出力は、その出力の値をロックするロック条件を通常含み、ロックを解除するために、特定のデータ(例えば、一連の署名又は他の情報)を新たな次の取引の入力に提供する必要がある。出力は、台帳にデータ(例えば、テキスト、画像等)を書き込むためにも用いることもできる。取引の入力は、取引の少なくとも一部に署名するデジタル署名を通常含む。したがって、一連の取引は、その作成に至るまでデジタル資産の有効な交換の全履歴をマッピングする一連のデジタル署名を含む。
【0017】
ブロックチェーンは、これまでに作成されたものの中の最初ブロックである「ジェネシスブロック」から始まる。ブロックチェーンの各ブロックは、ジェネシスブロックまで遡って前のブロックを参照する。つまり、n番目のブロックは、n-1番目のブロックを参照し、n-1番目のブロックはn-2番目のブロックを参照し、ジェネシスブロックに戻る。
【0018】
ブロックは、ブロックチェーン取引の順序付きリスト及びブロックヘッダを含む。ブロックヘッダは、ブロックチェーン取引の順序付きリストをマークルツリーにハッシュすることによって生成されるマークルルート、タイムスタンプ、現在のブロックがその上に構築される前のブロックへの参照及び他のマイナーがブロックを有効なものとして受け入れるために必要な「プルーフオブワーク」を検証する手段を含む。その検証手段は、各ブロックに固有のハッシュパズルへの答えである。ブロックチェーンネットワークのマイニングノードによって実行されるブロックチェーンプロトコルは、これらのマイナーがパズルを解こうとする前にそれらの候補ブロックを予め構築することを要求するハッシュアルゴリズムを用いる。正しい答えがないと、新たなブロックをネットワークに提出することができない。「マイニング」のプロセスは、基本的に、現在のブロックを「解決する」答えを見つけるために次のブロックになるために競うプロセスである。各ブロックのハッシュパズルを解くのが困難であるが、有効な解が見つかると、ネットワークの残りの部分でその解が正しいことを確認するのは非常に簡単である。任意のブロックには複数の有効な解があり、解決すべきブロックのために、解のうちの1つだけを見つければよい。
【0019】
以下では、ブロックチェーンへの新たなブロックのマイニングを試みるプロセスを簡単に説明する。ブロックチェーン取引がマイニングノードに送信されると、先ず、ブロックチェーンネットワークのコンセンサスルールに従って検証される。取引が有効な場合、未確認取引のプールに追加される。このプールは「mempool」と呼ばれることもある。mempoolは、次のブロックにマイニングされる取引の一時的な保管場所として機能する。各マイニングノードは独自のmempoolを有し、特定の取引が複数のマイニングノードにブロードキャストされている場合は、2つ以上のmempoolに含められ得る。
【0020】
マイナーは、次のブロックに含めることを意図する取引を取得し、それらをマークルツリー構造にハッシュし、結果として得られたマークルルートを候補ブロックヘッダに含める。次に、マイナーはこの候補ブロックヘッダをハッシュして、有効なプルーフオブワークを見つけることを試みる。マークルツリーは、ハッシュ値のツリー形式のデータ構造である。ブロックチェーンの文脈では、取引は、ツリーのリーフノードを形成するためにハッシュされる。リーフノードのペアが連結され、その後にハッシュされて、ツリーの上位層のノードを形成する。その層内のノードのペアは連結され、ハッシュされてツリーのさらに上位層のノードを形成する。このプロセスは、ルートノード又はマークルルートと呼ばれる1つのノードだけが残るまで繰り返される。
【0021】
ハッシュ関数は、任意の長さのデータの文字列を、ハッシュ値又はハッシュダイジェストと呼ばれる固定長の一意の(事実上の0の衝突確率)値に変換する関数である。ハッシュは一方向の関数であり、そこから生成されたハッシュ値を見て入力データが何であるかを判断することは不可能であることを意味する。他方で、同じハッシュ関数を介して同じ入力データを実行し、同じハッシュを再現することは些細なことである。一部のブロックチェーンプロトコルはSHA-256ハッシュアルゴリズムを用い、一部のプロトコルはSHA-256ハッシュアルゴリズムを2回用いる。つまり、候補ブロックヘッダは同じハッシュアルゴリズムを2度通過する。
【0022】
結果が、ターゲット値と呼ばれる別の値未満になるまで候補ブロックヘッダ(以下で説明するように他のデータと組み合わせて)をハッシングすることにより有効なプルーフオブワークが見つけられる。ターゲット値はブロックチェーンプロトコルによって自動的に調整されるため、ブロックチェーンネットワークが有効なプルーフオブワークを見つけるのに平均10分かかる。
【0023】
ハッシュ値を変更するためには、マイニングノードは候補ブロックヘッダに追加情報を追加しなければならない。通常、マイニングノードは2つの「ナンスフィールド」を用いてハッシュするべき値を変更し、結果として得られたハッシュ値を変更する。第1のナンスフィールドはブロックヘッダ自体に含まれ、第2のナンスフィールドは「コインベース取引」に含まれる。コインベース取引は、マイニングノードによって作成され、候補ブロックに含まれる取引である。各フィールドは、インクリメント可能なカウンタパラメータを含む。ハッシュ関数は、第1のナンスフィールドの全ての値を繰り返し、次に第2のナンスフィールドをインクリメント(又は変更)してから、第1のナンスフィールドの全ての順列を再度調べる。第2のナンスフィールドをインクリメントすることは、マークルツリーに含まれるコインベース取引のハッシュを変更するときに、マークルルートを再計算することを伴う。
【0024】
マイニングノードは、ブロックの有効なプルーフオブワークハッシュ(つまり、ターゲット値よりも小さい値にハッシュする候補ブロックヘッダ)を見つけると、新たなブロックをブロックチェーンネットワークの残りの部分にブロードキャストする。ネットワーク上の他のノードは、そのブロック内の全ての取引が有効であり、ブロックにまだ含まれていない場合にのみ、この新たなブロックを受け入れる。全てのブロックにはタイムスタンプが付けられ、それに先行するブロックのハッシュを参照するため、一連のブロックが生成され、それ故に「ブロックチェーン」という用語になる。
【0025】
ブロックチェーン取引をより詳細に説明する。以下の表は、一部のブロックチェーンプロトコルにしたがった典型的な取引の構造の概略図である。異なるブロックチェーンプロトコルは、異なる取引構造を用いり得ることが理解されよう。したがって、以下の説明は文脈についてのみ提供され、全ての実施形態を制限することを意図していない。
【0026】
表に示すように、取引は一連のデータフィールドで構成される。その生の形態では、取引はシリアル化された一連のデータフィールドで構成され、通常は16進数で表される。
【0027】
【0028】
取引は1つ以上の入力を有し、各入力は前の取引の出力を参照する。各入力は、同じ前の取引の異なる出力又は異なる取引からの出力又はそれらの組み合わせを参照し得る。各入力は、正しいデータが含まれる場合に参照された出力のロックを解除するアンロッキングスクリプト(「ScriptSig」と呼ばれることもある)を含む。以前の取引のロック解除された出力又はその出力に以前ロックされたデジタル資産の額が、現在の取引の出力によって用いられる(すなわち、割り当てられる)。デジタル資産のロック解除された額は、1回の出力によってその全体が使われ得るか又は現在の取引の2回以上の出力に分散され得る。
【0029】
取引は1つ以上の出力も有し、入力によってロック解除されたデジタル資産の合計額を共に分配する。通常、出力値の合計は入力値の合計より小さく、その差は新たなブロックに取引を記録するマイニングノードに手数料として支払われる。出力は、支出可能(spendable)出力又は支出不能(unspendable)出力のいずれかであり得る。支出可能出力は、後の取引の入力によってロック解除するために満たす必要がある1つ以上の条件を定義するロッキングスクリプト(「ScriptPubKey」と呼ばれることもある)を含む。支出不能出力は、ロック解除可能なロッキングスクリプトを含まない。つまり、消費不能出力は、ロッキングスクリプトの実行を失敗させるロッキングスクリプトを含む。
【0030】
本発明の実施形態は、第1の当事者(彼女を「アリス」と呼ぶ)が第2の当事者(彼を「ボブ」と呼ぶ)に1つ以上のトークンを送信することを可能にする。以下の説明の少なくとも一部は、第1の当事者であるアリスが第2の当事者であるボブにトークンを送ることに言及する。しかしながら、これは説明のみを目的としたものである。これらの実施形態は、第2の当事者であるボブが、第3の当事者、例えば商人にトークンを送信する場合にも該当する。加えて、トークンの発行者、すなわち、例えばアリスに最初にトークンを発行した当事者にも言及する。また、以下の説明のうちの少なくとも一部は「第1のトークン取引」に言及する。文脈で特に要求されない限り、第1のトークン取引はアリス、ボブ又はトークン発行者のいずれかによって作成され得る。
【0031】
図4は、いくつかの当事者、例えば、トークン発行者、アリス、ボブ及び商人を含む例示のシステムを示す。「当事者」という用語は、ユーザ(例えば、アリス)を意味するものとして用いられ得るが、当事者は他の形態、例えば、企業又は他の形態の組織等のユーザの集合体の形態をとり得る。また、当事者が自律的なエンティティ、すなわち、1つ以上の条件に基づいて所定のアクションを行うエンティティであり得ることも排除しない。そのような自律的なエンティティは、当該技術分野において「エージェント」と呼ばれることがある。
【0032】
図示していないが、各当事者はそれぞれのコンピュータ装置を操作する。各当事者のコンピュータ装置は、1つ以上のプロセッサ、例えば1つ以上のCPU、GPU、他のアクセラレータプロセッサ、特定用途向けプロセッサ及び/又はFPGAを含むそれぞれの処理装置を含む。各当事者のコンピュータ装置は、さらにメモリ、すなわち、非一時的なコンピュータ読み取り可能媒体の形態のコンピュータ読み取り可能記憶装置をさらに含む。このメモリは、1つ以上のメモリ媒体、例えばハードディスク等の磁気媒体SSD、フラッシュメモリ又はEEPROM等の電子媒体及び/又は光ディスクドライブ等の光学媒体を用いる1つ以上のメモリユニットを含み得る。各当事者のコンピュータ装置上のメモリは、処理装置上で動作するように配置された少なくとも1つのクライアントアプリケーションのそれぞれのインスタンスを含むソフトウェアを記憶する。本明細書で特定の当事者に帰属するいかなる動作も、それぞれのコンピュータ装置の処理装置上で動作するソフトウェアを用いて行われ得ることが理解されよう。各当事者のコンピュータ装置は、少なくとも1つのユーザ端末、例えば、デスクトップ若しくはラップトップコンピュータ、タブレット、スマートフォン又はスマートウォッチ等のウェアラブル端末を含む。特定の当事者のコンピュータ装置は、ユーザ端末を介してアクセスされるクラウドコンピューティングリソース等の1つ以上の他のネットワークリソースも含み得る。
【0033】
クライアントアプリケーションは、先ず、任意の当事者のコンピュータ装置に対して、好適なコンピュータ読み取り可能媒体上で、例えばサーバからダウンロードされるか又はリムーバブルSSD、フラッシュメモリキー、リムーバブルEEPROM、リムーバブル磁気ディスクドライブ、磁気フロッピーディスク又はテープ、CD又はDVD-ROM等の光ディスク又はリムーバブル光学ドライブ等のリムーバブル記憶装置上で提供される。
【0034】
トークン発行者は、最初の受領者、例えばアリスにトークンを発行するパーティである。トークンは、トークン発行者によって生成された第1のトークン取引を用いてアリスに発行され得るか又はアリス自身が第1のトークン取引を生成し得る。例えば、トークン発行者及びアリスはアリスに発行されるトークンの数(及び他の適用可能な契約条件)について合意し、次いで、アリスは1つ以上のトークンを別の当事者、例えばボブに移転することにより、トークンを自身に効果的に発行できる。
【0035】
アリス(又はトークン発行者)は、第1のトークン取引を生成する。トークン取引は、1つ以上の入力及び1つ以上の出力を含む。必要に応じて、入力のうちの1つは、トークン取引をブロックに記録するための手数料をマイニングノードに支払うための手数料支払として用いられ得る。取引手数料は常に必要ではないため、そのような手数料支払は必須ではない。全てのブロックチェーン取引と同様に、トークン取引は、以前の取引の出力のロックを解除するための入力を含む。第1のトークン取引の場合、前の取引の被参照出力は、少なくとも、トークンとして再構成される原資産の額を含まなければならい。
図4に示すように、第1のトークンの額は1000であるため、被参照出力は、原資産の少なくとも1000単位の値を有してなければならない。この数は任意で選択されており、一般に任意の数が第1のトークンの額として用いられ得る。簡潔にするために、原資産の単位をSatoshiと呼ぶ。これはビットコインブロックチェーンの特定の単位であるが、これは全ての実施形態を限定するものではない。
【0036】
第1のトークン取引は、第1のトークン出力を含む。第1のトークン出力は、第1のトークンの額(1000Satoshi)をロックする。つまり、第1のトークン出力は、第1のSatoshiの額を新たなに定義された同じ額のトークンにロックする第1のトークンロッキングスクリプトを含む。第1のトークンロッキングスクリプトは、可変コンポーネント及び定数コンポーネントを含む。別の言い方をすると、可変コンポーネントは第1のトークンロッキングスクリプトの1つの区画(すなわち、部分)であり、定数コンポーネントは第1のトークンロッキングスクリプトの別の区画(すなわち、部分)である。その名前が示すように、可変コンポーネントはトークン取引間で変化し得るのに対して、定数コンポーネントは同じままである。
【0037】
可変コンポーネントは、トークンを別の当事者に移転することができるようにするトークンロッキングスクリプトの一部である。可変コンポーネントは、支払アドレスを含む(例えば、取り囲む)支払テンプレートを含む。支払アドレスは、受領当事者の公開鍵に基づき得る。例えば、支払アドレスはPKH(public key hash)アドレス、つまり、公開鍵のハッシュ(又はダブルハッシュ)であり得る。第1のトークン取引がトークン発行者によって生成された場合、支払アドレスはアリスにリンクされる。アリスが第1のトークン取引を生成した場合、支払アドレスはアリスによって選択される。アリスは、自身にリンクされた別のアドレスを選択し得るか又は別に当事者、例えばボブ又は商人にリンクされたアドレスを選択し得る。支払アドレスは、可変コンポーネントのサブコンポーネントとして扱われ得る。可変コンポーネントは、1つ以上の追加の定数サブコンポーネントを含み得る。例えば、可変コンポーネントは、P2PKH(pay-to-public-key-hash)形式の出力を作成するための1つ以上の定数オペコードを含み得る。
【0038】
定数コンポーネントは、定数コンポーネントの定数サブコンポーネントであるトークンメカニクスサブコンポーネント(以下では短縮して「トークンサブコンポーネント」いう)を含む。トークンサブコンポーネントは、基礎となるデジタル資産をトークンとして再利用する第1のトークンロッキングスクリプトの部分である。例えば、1000Satoshiを1000個のトークンにする。トークンサブコンポーネントは、支出取引の入力からデータを取得し、少なくとも2つの検証ステップを行うように構成されている。さらに、トークンサブコンポーネントは、検証が失敗した場合にトークンロッキングスクリプトの実行を失敗させるように設定されている。つまり、いずれかの検証ステップも失敗した場合、支出取引の入力からのアンロッキングスクリプトと共にトークンロッキングスクリプトの実行が失敗する。
【0039】
トークンサブコンポーネントは、有効に実行するために、支出取引の入力(具体的には、入力のアンロッキングスクリプト)が特定のデータを含むことを必要とする。支出取引の入力は支出入力とも呼ばれる。とりわけ、支出入力のアンロッキングスクリプトは支出取引の少なくとも一部、つまり、アンロッキングスクリプト自体の他に支出取引データ(ある部分はそのままで、他の部分の結果をハッシュするだけ)を含まなければならない。以降、このデータを(そのハッシュがECDSA検証式の入力として機能するため)ハッシュ原像と呼ばれるか又は単に原像と呼ばれる。原像は、支出取引及び使用済みのもののフィールドと、これらの取引フィールドに基づいて生成(ハッシュ)されたデータ項目を含む。他の実施形態では、支出取引の全てのデータフィールドは、支出入力のアンロッキングスクリプトに文字通り含まれる。
【0040】
トークンサブコンポーネントは、実行された場合に、原像に加えて、1つ以上のデータペアを支出入力のアンロッキングスクリプトから取得するように構成されている。各データペアは、支出取引のロッキングスクリプトの支払いアドレスと、そのロッキングスクリプトによってロックされている基礎となるデジタル資産の対応する額とを少なくとも含む。一部の例では、支出取引は1つの出力、つまり1つのロッキングスクリプトのみを含む。その場合、トークンサブコンポーネントは1つのデータペアを取得する。他の例では、支出取引は複数の出力、すなわち複数のロッキングスクリプトを含む。その場合、トークンサブコンポーネントは複数のデータペアを取得する。
【0041】
必要なデータは、支払入力のアンロッキングスクリプトをパースし、データペアを抽出することにより取得され得る。これには、所定の場所でアンロッキングスクリプトにデータペアを含める必要があり得る。さらに詳細な説明を以下で提供する。
【0042】
1つ以上のデータペアを取得すると、トークンサブコンポーネントは、支出取引の出力が特定の形式であるか検証するように構成されている。支出取引の少なくとも1つの出力には、所定の標準支払テンプレートの一部である所定の支払アドレスのみ又はトークン出力の定数コンポーネント(すなわち、同一の定数コンポーネント)が後続する所定の標準支払テンプレートの一部である任意のアドレスのいずれかを含まなければならない。トークンサブコンポーネントは、支出取引の2つ以上の出力が、所定の標準支払いテンプレートに埋め込まれた任意の支払アドレスを含み、その後にトークン出力の定数コンポーネントが続くかを判定及び検証し得る。支出取引は、支出取引が所定の支払いアドレス(その対応する標準テンプレートのみ)又はトークン出力の定数コンポーネントが後続する任意の支払いアドレス(その対応する標準テンプレート)を含まない1つ以上の出力を含むことを検証し得る。
【0043】
トークンサブコンポーネントは、一緒に、所定の支払いアドレス又は任意の支払いアドレスと、後続の定数コンポーネントのいずれかを含む支出取引の出力によってロックされた値の合計が、第1のトークンの額と等しい(すなわち、同じ)ことを検証するようにも構成されている。所定の支払アドレス又は定数コンポーネントのいずれかを含む支出取引の出力は、スマートトークン出力と呼ばれ得る。トークンサブコンポーネントは、スマートトークン出力によってロックされたトークンの合計額が第1のトークンの額と等しいかを検証するため、それらの元又は他の使用形式への逆流を防止する。
【0044】
例えば、支出取引が単一のスマートトークン出力(支出取引の第1の出力)を含む場合を考えてみる。トークンサブコンポーネントは、支出取引の第1の出力が、特定の形式を取るか又は特定のデータを含む第1のロッキングスクリプトを有するか検証するように構成されている。具体的には、第1のロッキングスクリプトは、(支払テンプレートの一部としての)所定の支払アドレス又はトークンロッキングスクリプトの定数部分が後続する(支払テンプレートの一部として)任意の支払いアドレスのいずれかを含まなければならない。2つのうちの1つだけが必要であるが、両方欠落している場合、検証は失敗する。この検証プロセスは、トークンサブコンポーネントが支出入力のアンロッキングスクリプトから支出取引の第1のロッキングスクリプトを取得しているため実現可能である。したがって、トークンサブコンポーネントは、所定の支払アドレス又は定数コンポーネントのための第1のロッキングスクリプトを検索できる。
【0045】
支出取引は、上述したように複数の出力を含み得る。追加出力の一部は、スマートトークン出力でもあり得るか又はそれらを異なる目的のために用いることができる。この場合、トークンサブコンポーネントは、支出取引の2つ以上の出力が、所定の支払アドレス又はトークン取引の定数コンポーネント、すなわち、トークンロッキングスクリプトの定数コンポーネントが後続する任意の支払アドレスのいずれかを含むかを検証するように構成されている。実施に応じて、トークンサブコンポーネントは、支出取引の複数の出力の全てが、所定の支払アドレス又は定数コンポーネントを含むか検証するように構成され得る。他の例では、トークンサブコンポーネントは、複数の出力の全てではなく一部が、所定の支払アドレス又は定数コンポーネントを含むか検証するように構成され得る。例えば、トークンサブコンポーネントは、支出取引の所定の数の出力、例えば、第1の2つの出力、すなわち、支出取引において論理的に1番目に現れる2つの出力が定数コンポーネントを含むか検証し得る。
【0046】
支出取引が1つのスマートトークン出力を含む例では、トークンサブコンポーネントは、支出取引の第1のロッキングスクリプトによってロックされた基礎となるデジタル資産の第1の額が、第1のトークン額(すなわち1000Satoshi)と等しいかを検証するように構成されている。ここで、第1のロッキングスクリプトを有する第1の出力は、支出取引において論理的に1番目に現れる出力である。
【0047】
支出取引が複数の出力、例えば、デジタル資産の第2の額をロックする第2のロッキングスクリプトを有する第2の出力を含む場合、トークンサブコンポーネントは、第1の額と第2の額との合計が、第1のトークンの額と等しいことか検証するように構成されている。ここで、第2の出力は、支出取引において論理的に2番目に現れる出力である。一般に、支出取引が所定の支払アドレス又は定数コンポーネントのいずれかを含む複数の出力を含む場合、トークンサブコンポーネントは、それぞれの額の合計が初期トークンの額と等しいかを検証する。
【0048】
このプロセスは、支出取引の任意の数の出力に対して繰り返され得る。支出取引は、支出取引の出力の全てによってロックされる、第1のトークンの額よりも大きいデジタル資産の合計をもたらし得るデジタル資産の額をロックする出力を含むことが許可され得る。この場合、トークンサブコンポーネントは、合わせて、支出取引の所定の数のスマートトークン出力が、第1のトークンの額と等しいデジタル資産の額をロックしているか検証するように構成され、非スマートトークン出力によってロックされた額は考慮されない。非スマートトークン出力は手数料変更出力(fee change output)又はアトミックスワップ出力であり得る。例えば、トークン取引の第1の2つの出力によってロックされた合計額は、第1のトークンの額と等しくなければならないのに対して、第3の出力(例えば、手数料変更出力)は、追加の入力によって資金提供される追加の額をロックし得る。なお、第3の出力は説明を目的として用いている。手数料変更出力については以下でさらに説明する。今のところ、手数料変更出力(又は別の種類の「追加出力」)がトークン出力でない場合、つまりトークンロッキングスクリプトの定数コンポーネントを含まない場合にのみことが許可されることを言えば十分である。
【0049】
トークンロッキングスクリプトの定数コンポーネントは、所定の支払いアドレスを含み得る。つまり、所定の支払アドレスが定数コンポーネントにハードコードされ得るため、支出取引の第1のロッキングスクリプトに含めなければならない。所定の支払アドレスは償還アドレス、トークン以外の何か、例えばFIAT通貨トークンのために償還されるために、トークンの一部又は全てが移されるアドレスであり得る。
【0050】
上述したように、支出取引の支出入力のアンロッキングスクリプトは原像を含み得る。原像は、下記の表におけるフィールドのうちの1つ、一部又は全てを含み得る。
【0051】
【0052】
なお、原像の特定の構造は説明を目的として含まれており、他の構造を用いてもよい。例えば、データフィールドのサイズは、本発明を実施するために用いられている特定のブロックチェーンによって異なり得る。
【0053】
これらの例では、トークンサブコンポーネントは、第1のトークン取引のトークンロッキングスクリプト(すなわち、入力のscriptCode)及び初期トークン額(すなわち、入力によって使われた出力の値)を原像から抽出することによってそれらを取得するように構成され得る。scriptCodeを除く原像の全てのデータフィールドのサイズが分かっているため、トークンサブコンポーネントは、所定の位置のデータをパースし抽出することにより、必要なフィールドを抽出できる。
【0054】
表2に示すように、原像は支出取引の出力のハッシュ(hashOutputs)を含み得る。これは各出力のハッシュ、つまりロッキングスクリプトによってロックされた値及びロッキングスクリプト自体である。そのため、支出取引が1つの出力を含む場合、hashOutputsは1つのロッキングスクリプトと連結された1つの値のハッシュを含む。支出取引が2つの出力を含む場合、各値ロッキングスクリプトのペアが連結され、ハッシュされてhashOutputsを形成する。トークンサブコンポーネントは、例えば、特定の位置でデータをパース、抽出することにより、原像からhashOutputsを抽出し得る。
【0055】
支出取引のアンロッキングスクリプトは、上述したように1つ以上のデータペアを含む。各データペアは値及びロッキングスクリプトを含むことを思い出されたい。トークンサブコンポーネントは、独自のバージョンのhashOutputsを生成、つまり、1つ以上のデータペアのハッシュを生成し、生成されたハッシュは原像から抽出されたハッシュ(すなわち、hashOutputs)と等しいか検証するように構成され得る。これは、支出ユーザ、例えば、アリス又はボブが支出取引のアンロッキングスクリプトに正しいデータペアを含めたかを検証するためになされ得る。
【0056】
一部の例では、トークンサブコンポーネントは、支出取引のアンロッキングスクリプトに含まれる原像が正しく生成されたか、つまり、原像のデータフィールドが支出取引の実際のデータフィールドに対応しているかを検証するように構成され得る。システムのユーザが支出取引を正しく生成できることを信頼できないと考えられる場合に必要である。これを行うために、トークンサブコンポーネントは、その独自のバージョンの支出取引の予想される原像、例えば、表2のデータフィールドの全てを含むものを生成する。そして、トークンサブコンポーネントは、支出取引のアンロッキングスクリプトから抽出された原像が、トークンサブコンポーネントによって生成された原像と合致するかを検証できる。
【0057】
支出取引のアンロッキングスクリプトに含まれる原像が正しいかを検証するための1つの方法は、当該技術分野でOP_PUSH_TXとして知られている擬似オペコードを用いることである。しかしながら、同等のオペコード、より一般的には、OP_PUSH_TXと同等の機能を行う任意の同等のコードを代わりに用いてもよい。
【0058】
一般に、トークンサブコンポーネントは、アンロッキングスクリプトからの原像及び秘密鍵を用いてデジタル署名(例えば、ECDSA署名)を生成するように構成され得る。秘密鍵は、支出取引のアンロッキングスクリプトに含まれている。次に、トークンサブコンポーネントは、生成された原像(すなわち、トークンサブコンポーネントによって生成された原像)及び秘密鍵に対応する公開鍵に対して検証された場合にデジタル署名が有効な署名であるかを検証する。公開鍵は、支出取引のアンロッキングスクリプトにも含まれている。デジタル署名は、2つの原像が完全に一致する場合にのみ有効となる。使用される秘密鍵は、ブロックチェーンに記録されることによって公開されるため、「ダミー」
の秘密鍵、つまり、公開された場合に他のデータ又はブロックチェーン取引の安全性を損わないものを用いるべきである。しかしながら、一般的には、任意の秘密鍵、例えば、任意のランダムキーを用いることができる。この署名チェックは、署名を検証するためにOP_CHECKSIGオペコードを利用することにより行うことができる。OP_CHECKSIGは、署名が現在の取引、つまりこの場合の支出取引のためのものである場合にのみ成功する(つまり、正常に実行される)オペコードである。
【0059】
支出取引の出力に戻って、トークンサブコンポーネントは、支出取引の出力(具体的にはそれらのそれぞれのロッキングスクリプト)が所定の種類、つまり形式のそれぞれの支払アドレスを含むか検証するように構成され得る。それぞれの支払アドレスは、トークン取引の可変コンポーネントに含まれる支払アドレスと同じ種類でなければならないことが好ましい。支払アドレスはPKHアドレスでなければならないことがより好ましい。これは、支払アドレス自体のみに基づいて検証され得るか又は支払アドレスと、1つ以上の追加データ項目、例えば、支払アドレスのいずれかの側の1つ以上のオペコード又は他のデータに基づいて検証され得る。例えば、P2PKH出力は、出力においてチェックされ得る特定の追加データを含む。
【0060】
定数コンポーネントのトークンサブコンポーネントについて説明してきた。定数コンポーネントは、定数データサブコンポーネント(以下では短縮して「データサブコンポーネント」という)を含み得る。一般に、データサブコンポーネントは、各トークン出力に格納されるべき任意のデータを含み得る。例えば、データサブコンポーネントは、トークンプロトコル識別子、例えば、トークンが特定のプロトコルのものであること示す、例えば、トークンがFIAT通貨を表すフラグを含む。それに加えて又は代替的に、データサブコンポーネントは、ブロックチェーンに記録される取引(「トークン発行取引」と呼ばれる)の取引識別子(TxID)を含み得る。同様に、トークン発行取引には一般に任意のデータ、例えばトークン発行者によって発行されたトークン発行契約及び/又は初期トークン額を含み得る。データサブコンポーネントは、OP_RETURNオペコード又は同等の機能を行うコードの後に含められ得る。
【0061】
上記の説明は、主に初期トークン取引及び支出取引に関連する。以下では、それ自体がトークン取引である支出取引を詳細に説明する。支出取引は、「支出取引」という用語を、第1のトークン取引の出力を参照する後の取引のためにとっておけるように、「第1のトークン取引」と呼ぶ。
【0062】
図1を参照ながら第1のトークン取引を説明する。
図1に示すように、第1のトークン取引100は、取引識別子(Token TxID)、1つ以上の入力104及び1つ以上の出力106を含む。各入力104は入力値108及びアンロッキングスクリプト110を含む。なお、
図1は概略図である。入力104自体は入力値108を含んでいない。むしろ、入力104は、前の出力の未使用取引出力(UTXO)へのポインタ(例えば、TXID及びVOUT)を含み、該前の出力は、入力値108と呼ばれる値108をロックしている。しかしながら、それぞれのアンロッキングスクリプト110によってロック解除された値108を、説明を目的として示す。各出力106は、出力値112及びロッキングスクリプト114を含む。
【0063】
第1のトークン取引100の出力106については、支出取引を参照して既に上記で説明してきたため、最初に説明する。トークン取引100は、第1のトークン出力(「償還/トークン出力」)を含む。第1のトークン出力を
図2に示す。
図2に示すように、また、上記で既に説明したように、第1のトークン出力200は、可変コンポーネント202及び定数コンポーネント204を含む。定数コンポーネント204は、トークンメカニクスサブコンポーネント206と、この例では定数データサブコンポーネント208とを含む。
【0064】
可変コンポーネント202には、第1のトークンの額(例えば、700トークン)が割り当てられている当事者のそれぞれの支払アドレスを含む。トークンサブコンポーネント206は、上述した検証ステップの一部又は全てを行うように構成されている。例えば、トークンサブコンポーネント206は、支出取引の所定の数(例えば、1又2)の出力によってロックされるべきデジタル資産の総額が、第1のトークンの額(700トークン)と等しいかを検証するように構成されている。第1のトークン出力200のトークンサブコンポーネント206は、第1のトークン出力200のロック解除を試みる後の支出取引の入力が、償還支払アドレスを含む通常の支払テンプレート又は可変コンポーネント202及び定数コンポーネント204を含む第1のトークン出力200のフォーマット全体のいずれを含むかも検証するようにも設定されている。一般に、トークンサブコンポーネント206は、上述の検証技術のいずれかを行うように構成され得る。
【0065】
第1のトークン取引100は、第2のトークン出力も含み得る。第2のトークン出力は、それぞれの可変コンポーネント及びそれぞれの定数コンポーネントも含む。第2のトークン出力の可変コンポーネントは、第1のトークン出力200の可変コンポーネント202と比べて異なる支払アドレスを含み得る。第2のトークン出力のトークンサブコンポーネントは、検証が異なる支出取引、つまり、第2のトークン出力を参照する入力を有する取引である点を除いて、第1のトークン出力200のトークンサブコンポーネント206と同じ検証ステップを行うように構成されている。つまり、第1のトークン取引100は2つ以上の出力を有し、それらの出力のそれぞれは異なる支出取引により使用(ロック解除)できる。例えば、第2のトークン出力のトークンサブコンポーネントは、支出取引の所定の数(例えば、1又2)の出力によってロックされたデジタル資産の総額が第2のトークンの額(300)と等しいか検証するように構成されている。
【0066】
第1のトークン取引100は、それぞれのトークンの額の合計が(取引の入力のTXIDフィールドによって参照される)第1のトークン出力でロックされた額(1000トークン)と厳密に等しい限り、使用すること試みる任意の数のトークン出力を含み得る。
【0067】
第1のトークン取引100は手数料変更出力を含み得る。この出力により、手数料変更(X-δ)を手数料変更支払アドレスに戻すことができる。
図1の例では、取引手数料(δ)を支払うのに入力値(X)を有する手数料支払入力が用いられる。
【0068】
それに加えて又は代替的に、第1のトークン取引100はアトミックスワップ出力を含み得る。アトミックスワップ出力については以下で説明する。
【0069】
図1の例では、第1のトークン取引100はトークン入力を含む。トークン入力は、上記で詳述した支出入力と同等である。より具体的には、トークン入力は、前のトークン取引、例えば初期トークン取引のトークン出力を参照する。この例では、被参照トークン出力は1000トークンをロックする。トークン入力は、第1のトークン取引200の各出力106のためのそれぞれのデータペアを含む、第1のトークン取引のそれ以外の全てを含む。つまり、この例では、トークン入力は3つの値(700、300、X-δ)と、対応する3つの支払アドレス(トークンロッキングスクリプト(「償還/トークン出力」、「トークン出力(分割)」、「手数料変更/アトミックスワップ」)のそれぞれから1つずつ)を含む。値112及び支払アドレスは、第1のトークンの額(700)の後に第1のトークン出力ロッキングスクリプトからの支払アドレスが続き、その後に第2のトークンの額(300)、第2の出力ロッキングスクリプトからの対応する支払アドレス等が続くように対にされ得る。トークン入力は、被参照トークン出力をロック解除するための署名、すなわち、被参照トークン出力の可変コンポーネントに含まれる支払アドレスに対応する署名も含む。アリスがトークンを移転する場合、アリスの署名が支出取引の入力に含まれる。一部の例では、単なる支払アドレスの代わりに、ロッキングスクリプト全体を入力に含むことができる(すなわち、データペアの一部として)。
【0070】
図1に示すように、第1のトークン取引100は手数料支払入力を含む。手数料支払入力は、個別の前の通常の非トークン取引出力の出力を参照し、第1のトークン取引100をブロックに含めるためにマイニングノードに支払われる手数料を含む。手数料支払入力は、参照する出力の要件に応じて、少なくとも1つのデジタル署名を含む。一部の例では、デジタル署名は、第1のトークン取引100のトークン入力によって参照されるトークン出力の所有者によって生成される。例えば、アリスが1000トークンのうちの700をボブに、300のトークンを商人に送信する場合、アリスはその取引に資金を提供する。その場合、手数料支払入力にアリスの署名が含まれる。しかしながら、異なる当事者、例えばボブが、ボブにロックされたUTXOをロック解除することにより、取引に資金を提供し得ることは排除されない。この場合、ボブの署名が手数料支払入力に含まれる。アトミックスワップ出力は前述のとおりで、マイナーの手数料支払入力は(トークンのための)支払の追加タスクを有する。この例では、ボブは、手数料/「トークン購入」入力に自身の署名を含めることにより取引に資金を提供し、「手数料変更」/「アトミックスワップ」出力がボブにロックされる。つまり、「手数料変更」/「アトミックスワップ」出力は、ボブにリンクされた支払アドレス、例えばボブが所有する公開鍵のハッシュを含む。
【0071】
アトミックスワップを強制するために、アリスは手数料/「トークン購入」支払入力を除く完全な取引を作成する。次に、ボブは手数料/「トークン購入」支払入力を作成し追加する。これを行う1つの方法は、アリスが自身の入力(すなわち、トークン入力)と、2つの対応する出力とを、別の当事者に入力を追加することを可能にsighashフラグ(例えば、ALL|ANYONECANPAY)で署名することである。次に、ボブは別のsighashフラグ(例えば、ALL-取引全体を確定し、それ以上の追加を許可しない)を有する入力を追加する。
【0072】
図3A及び
図3Bは、アトミックスワップの概念をより詳細に示す。実線の矢印は必須の入力及び出力を示し、破線の矢印は任意の入力及び出力を示す。取引への入力は図の左側に示し、取引の出力は右側に示す。
図3Aは、
図1と同様の取引を概略的に示す。この例示のトークン取引は、前のトークン取引のトークン出力をロック解除するアリスによって生成されたトークン入力と共に、取引手数料(取引をブロックに記録するためにマイニングノードによって取られる手数料)の資金調達のための手数料支払入力を含む。トークン取引は、200のようにトークン形式に含まれているボブのアドレスにロックされたボブに送信されるトークン出力と共に、通常の支払形式(手数料入力支払と取引手数料との差であると出力で特定された変更)で自身のアドレスにロックされたアリスに変更を支払う手数料変更出力も含む。
【0073】
図3Bは例示のアトミックスワップ取引を示す。ボブのトークン出力は、
図3Aと同じ方法で生成される。アリスは、前のトークン取引のトークン出力をロック解除するためにトークン入力を再度生成するが、今回彼女は取引を「ALL/ANYONECANPAY」のsighashフラグで署名する。これは、アリスの署名がこの1つの入力、つまり、sighashフラグで署名された入力支出トークン出力以外の全ての出力に署名することを意味する。残りの入力は除外される。このsighashフラグは、誰でも他の入力を追加又は削除できるようにするため、誰でも取引に資金を出すことができるが、それらの宛先及び額を変更することはできない。これにより、ボブは自分の支払入力のみを追加することができ、これはマイナーの手数料も含む。ボブは署名を含み、「ALL」のsighashフラグでサインする。これは、ボブの署名が全ての入力及び出力にサインし、全ての要素をさらなる可能性のある変更から保護することを意味する。この例では、第2の出力は、ボブの入力によって追加されたこれからアリスに支払われる。これはアトミックスワップを強制する効果があるため、ボブがトークンの代金をアリスに支払った場合に限り、トークンがボブに送信される。ボブが取引のいずれの要素にも満足しない場合、彼は単に署名を提供しないため、トークンはボブのアドレスに移動せず、アリスは支払いを受けない。同様に、ボブはアリスによって作成及び署名された入力及び出力を変更できないため、アリスはアリスによって設定された支払い条件が満たされた場合にのみボブがトークンを受け取ることができることが保証される。
【0074】
図4は、発行から償還までのトークンの例示の流れを示す。流れは一般的に上から下に向う。任意の第1のステップとして、トークン発行者と初期受領者であるアリスとの間で法的契約が作成される。契約は、トークンがどのように償還されるかを含むトークンの取引条件と、初期のトークンの額(例えば、1000)を規定し得る。その後、トークン発行者は第1のトークン取引を作成し、トークンをアリスに送信し得る。あるいは、アリスが第1のトークン取引を作成し、そのうちの一部又は全部を別のユーザ、例えばボブに又はアリス自身に送信し得る。
図4では、アリスがトークンの全てをボブに送信する。つまり、トークンの全ては、ボブの支払アドレスに送信される1つのトークン出力に割り当てられる。次に、ボブは2つのトークン出力を有するトークン取引を作成する。第1のトークン出力は、商人の支払アドレスに300個のトークンを送信する。第2のトークン出力は、ボブの別の支払アドレスであり得るボブの支払アドレスに700個のトークンを送信する。次に、商人は300個のトークンを、つまり、トークンを償還支払アドレスに送信することにより償還する。次に、ボブは最初に500個のトークンを償還し、残りの200個のトークンをボブにリンクされた別の支払アドレスに送信する。最後に、ボブは200個のトークンを償還する。なお、各取引において、受け取るトークンの額と送信されるトークンの額は一致する。
【0075】
上記で本発明の実施形態を一般的に説明してきた。次に、本発明の特定の実施を説明する。この特定の例は、フィアット通貨を表すトークンの観点から主に説明する。すなわち、トークンは法定ペッグされたトークンである。しかしながら、これは本発明の多くの使用例の1つにすぎない。さらに、この例はビットコインブロックチェーンを用いて実施されることを意図している。しかしながら、一般的には任意のアウトプットベース(例えば、UTXOベース)のブロックチェーンを用いてもよく、ビットコインブロックチェーンはその中の1つの特定の例である。
【0076】
この例によれば、トークンはビットコイン、より具体的にはSatoshi又はSatoshi単位と呼ばれるビットコインの基本単位を用いて表される。トークン出力は、単一のトークン(例えば、イベント、映画館のチケット、バスのチケット等のユーティリティトークン)を表す単一のSatoshiを含み得る。そのため、このトークンは分けることができず、ライフサイクルの間は分割できない。又は、トークン出力は、複数のトークンのエンベロープ(例えば、米ドルにペッグされたトークンは1トークンが1米ドルセントを表す)を表す複数のSatoshiを含み得る。
【0077】
トークン出力は可変部分及び定数部分を含む。可変部分は、ECDSAの使用を通じてビットコイン(すなわち、Satoshi)の所有を渡す通常のビットコイン支払テンプレートと同じである。定数部分は、トークンの有効期間を通して変更も省略もできない。
【0078】
1Satoshi自体よりも安いか又は高い何かを表すことができるという事実に関わらず、各Satoshiはトークンを表し、通常の機能を停止する。アリスは、この厳密なテンプレートを自身の次のトークン取引におけるロッキングスクリプトとして保持しない限り、トークンをボブに移転することができない。可変部分の所有アドレスしか変更できない。
【0079】
なお、これは、メタデータを用いて出力をトークン出力として解釈する以前のトークンの試みと同じではない。本発明は、ビットコインとしての通常の使用に関するSatoshiのメカニズムを根本的に変更する。
【0080】
可変部分は、意図的にトークンロッキングスクリプトの一番最初にあり、通常支払テンプレート、例えばP2PKHテンプレートにすぎない。これは、既存のブロックチェーンクライアントアプリケーション及びブラウザに最大の互換性を提供し、(テンプレートにラップされた)
支払アドレスを、現在の方法で検索及び特定できるようにする。
【0081】
トークンメカニクス部分は少なくとも3つの条件を強制する。第1に、トークンの使用は、新たな所有アドレスを除いて、次のUTXOが使用されたUTXOとまったく同じロッキングスクリプトを有する場合にのみ可能である。第2に、通常のビットコインロッキングスクリプトテンプレート(例えば、P2PKH、P2PK等)による取引による支出は、所定の償還支払アドレスを含むP2PKHでない限り失敗する。所定の償還支払アドレスは、アリスに発行される契約に含まれ、トークンロッキングスクリプトにハードコードされている。トークン発行者が自身にリンクされたアドレスに償還アドレスを設定した場合、これは、発行者のみが資産を表すSatoshiを、例えば米ドル、金等の表された資産を解放することにより、元の通常のSatoshiとしての使用に戻すことができることを意味する。これは、トークンを承認不要なもの(permissionless)にする。第3に、トークンを動かす場合、現在の未使用トークン出力(UTXO)のトークン出力におけるSatoshiの額は、支出取引(例えば、償還又は次のトークン取引)のトークン出力のSatoshiの額と厳密に同じであるか又は2つ以上のトークンのセットに分割(その合計額はUTXOの元の額と等しくなければならない)されなければならない。例えば、トークンは支出取引の2つの出力に分割でき、2つの出力のロッキングスクリプトは、使用されているUTXOのロッキングスクリプトと(可変部分のアドレスを除いて)同一である。
【0082】
これらのステートフルな取引で推し進められる状態は、ホップ毎に更新される所有アドレスと(トークンのエンベロープの場合のみ)トークンの額であり、分割によって減少し得る。
【0083】
定数データ部分には2つのフィールドを有する。1つのフィールドはトークンプロトコル識別子、例えば、フィアットペッグされたトークンのトークンプロトコルフラグを含む。識別子は、トークンの種類を指定するために用いられる。第2のフィールドは、特別な取引へのポインタ(TxID)であり、そこには、a)トークンの属性及び発行に関連する全ての法的規約、条件、ライセンス及び任意の他の必要な情報を伴う(例えば、発行主体とクライアントとの間での)初期発行契約と、b)後続の取引(発行取引になる)でトークンに変換されるべき所定の厳密なSatoshiの残高とを運ぶ
定数データフィールドは単なるデータ添付としてOP_RETURNオペコードの後ろに置かれて、スクリプト評価の間にスクリプトコードの一部としての実行の試みが回避される。つまり、定数データは、OP_RETURN取引で検索を行うアプリ及びブラウザの最大限の互換性のために、ロッキングスクリプトの最後で且つOP_RETURNオペコードの直後に含まれることが好ましい。
【0084】
取引構造自体に関して、トークン取引の出力は、i)償還のための通常出力、ii)トークン出力又はiii)手数料変更、アトミックスワップ等に用いられる通常出力の3つの種類のうちの1つを取り得る。
【0085】
一例として、アリスは、法的に認可されたエンティティに、自身に代わって1000個のトークンの発行を依頼し、エンティティに自身の支払アドレスを提供し得る。エンティティは、要求された額(この場合は1000)に対応する、予め割り当てられた額のSatoshiを含む支出可能取引の形式で契約を作成する。契約の条項、条件及びライセンスには、アリスが必要とするアクション(例えば、エンティティへの相当額のフィアット通貨の送金)が記載されており、アリスが署名を追加できるように、ALL|ANYONECANPAYフラグ等でエンティティによって署名されている。アリスが契約に署名し、ブロックチェーンに公開し、記載されている必要なアクション(フィアット額の送金)を行うと、エンティティはアリスに代わってトークンを彼女の支払アドレスに発行する。アリスは、トークンを一度に又はトークンの一部を使用/支出/送金できる。後続の所有者は任意でトークンを償還できるため、トークンは承認不要となる。
【0086】
トークン出力の定数部分に戻って、定数部分は大まかに2つの部分を含む。第1の部分はOP_PUSH_TXを実施し、スクリプト実行内の現在の取引のフィールドへのアクセスに関与する。第2の部分はトークンロジックである。
【0087】
sighash原像については上記で説明してきた。OP_PUSH_TXは、現在の取引に対応する原像のECDSA署名、つまり、実行されたスクリプト内でアクセスされるためにアンロッキングスクリプトに押し込まれたトークン出力のロック解除を行う支出取引を行う。OP_PUSH_TXは、署名の検証のためにOP_CHECKSIGを最終的に呼び出す。この内部ECDSA署名は、公にアクセス可能な任意の秘密鍵対(1つの一時的な対、1つの定数対)を用いて行われるため、トークン所有リレーに用いられるものとは無関係であるべきである。また、この場合のOP_CHECKSIGは、呼び出されると、実際の以前及び現在の取引フィールドからECDSA検証のための独自の原像を構築するため、バリデータとして機能する。そのため、実際のフィールドが、アンロッキングスクリプトに押し込まれたものと同一であること(又はないこと)に応じて失敗又は成功する。
【0088】
トークンロジックは、ビットコインのSatoshiをトークンに変換する。これを行うには、コードはSatoshiの支出を制御するために、以前の取引のSatoshiの値(額)(すなわち、トークンを含む未支出の出力)及び現在の取引のSatoshiの値(すなわち、支出取引)へのアクセスを必要とする。コードは、出力ロッキングスクリプトの形式を制御するために、以前及び現在のロッキングスクリプトにアクセスする必要もある。
【0089】
現在の(支出)取引のアンロッキングスクリプトにプッシュされた原像が、実際の現在の取引の原像と同じであることが検証されると、この入力によって支出される出力のscriptCode及びvalue並びにhashOutputsを含む関連フィールドの全てを抽出するためにパースされる。以前のUTXO(すなわち、支出されたもの)の値(すなわち、額)及びロッキングスクリプトは原像にそのまま提供されるものの、(それらの新たな値と組み合わされた)新たなに作成された出力のロッキングスクリプトのハッシュの結果のみが利用可能である。そのため、これらの新たな出力のロッキングスクリプトと、それに対応する値とは、呼び出された場合にOP_CHECKSIGが構築するものと同一であることが以前に証明された原像のhashOutputsフィールドに対して次に検証される支出取引のアンロッキングスクリプト内の原像の隣に置かれるべきである。
【0090】
取引の以前及び次の出力についての全てのロッキングスクリプト及びそれらの値(すなわち、額)の全てが実行中のコードによってアクセス可能になると、トークン規則を施行できる。
【0091】
以下の例示の規則が施行され得る。特定のユースケースに応じて、他の追加の又は代替的な規則が施行されることが理解されよう。この例では、以下が許可される。
1.償還機能:トークンの性質をSatoshiの固有なもの、すなわち基礎となるデジタル資産に戻し得るハードコードされたアドレスを定義するために用いられる。
2.トークンの額を最大で2つの可能な出力に分割すること。
3.追加の入力によりマイナー手数料支払から変更を受信するためのP2PKH形式を有するか又は「アトミックスワップ」の場合にトークンの売り手によりお金を受け取るための第3の任意の出力。
【0092】
より具体的に述べると、規則は以下のとおりである。
1.トークン取引の第1の出力は、
a)償還:必須のハードコードされた償還アドレスを含む標準のP2PKHテンプレート、又は
b)トークンリレー:以前の出力形式と同一のスマートトークンロッキングスクリプト
ためのみに用いられる。
2.第2の出力は、トークン分割の場合のための任意のものであり、故にスマートトークンタイプのみである。加えて、
a)存在する場合、その出力の額と第1の出力の額との合計は、支出されているUTXOにおける額と等しくなければならない。
b)それ以外の場合、第1の出力の額は、支出されているUTXOにおける額と等しくなければならない。
3.第3の出力は、標準のP2PKHテンプレートのみとなる(アドレスは任意)。存在する場合、(すなわち、追加の入力を用いてなされる)トークン操作の支払の変更のために用いられる。
【0093】
なお、P2PKHテンプレートは取引出力スクリプトであり、VarInt(次のスクリプトの長さを指定)0x19が先行するアンロッキングスクリプトに押し込まれた場合、その25バイトの長さにより、16進数形式では「0x76a914+PKH+0x88ac」になる。PKHは公開鍵ハッシュアドレスである。
【0094】
これらの規則を施行するための例示の擬似コードを提供する。
【0095】
【0096】
下記のコードは、ビットコインスクリプト言語での実際の例示の実施を示す。この実施では、上記の擬似コード関数定義と同じ順序(左から右に)でアンロッキングスクリプトパラメータが用いられた。これは、左端がスタックに先ずプッシュされたことを意味する。ハードコードされた償還関数アドレスは、ロッキングスクリプトの「定数コード」部分の第1のフィールドになるように置かれるため、(ECDSA署名検証を行う可変部分を考慮しない場合)アンロッキングスクリプトデータの直後にスタックにプッシュされる。
【0097】
なお、このスクリプトの実施は、(ビットコインにおける現在の手数料支払はTXサイズのみに依存するため)時間ではなくスペースに最適化されている。
【0098】
【0099】
結論
上記の実施形態は例示のために説明してきたことが理解されよう。
【0100】
より一般的には、本明細書に開示の一態様によれば、ブロックチェーン取引を用いてデジタルトークンを送信するコンピュータ実施方法が提供され、各トークンはブロックチェーンの基礎となるデジタル資産の固有の単位の単一の単位によって表され、当該方法は、第1のトークン取引を生成することと、前記第1のトークン取引をブロックチェーンネットワークに送信することと、を含み、前記第1のトークン取引は第1のトークン出力を含み、該第1のトークン出力は第1のトークンロッキングスクリプト及び第1のトークンの額を含み、該第1のトークンロッキングスクリプトは可変コンポーネント及び定数コンポーネントを含み、該可変コンポーネントは、支払テンプレートに埋め込まれた第1の支払アドレスを含み、該定数コンポーネントはトークンメカニクスサブコンポーネントを含み、該トークンメカニクスサブコンポーネントは、支出取引の入力スクリプトであって、該入力スクリプトは、該支出取引の自身を除く全てに加えて、支出されている以前の取引出力においてロックされている額及びそれぞれのロッキングスクリプトを含む入力スクリプトと共に実行された場合、前記支出取引の入力スクリプトから1つ以上のデータ対を取得することであって、各データ対は、i)前記支出取引の出力のそれぞれのロッキングスクリプトに含まれる少なくともそれぞれの支払アドレスと、ii)その出力のそれぞれのロッキングスクリプトによってロックされている、前記基礎となるデジタル資産の対応する額とを含む、ことと、前記支出取引の1つ以上の出力が、a)所定の支払アドレスを含むそれぞれの支払スクリプトテンプレート又はb)前記所定の支払アドレス以外のそれぞれの支払アドレスを含むそれぞれの可変コンポーネントと、後続の前記定数コンポーネントとを含むそれぞれのロッキングスクリプトを含むか検証することと、前記支出取引の1つ以上の出力について、前記1つ以上の出力のそれぞれのロッキングスクリプトによってロックされている、前記基礎となるデジタル資産の合計額が、前記第1のトークンの額と等しいか検証することと、を行うように構成され、前記トークンメカニクスサブコンポーネントは、検証ステップのいずれかが失敗した場合、実行の間に失敗するように構成されている。
【0101】
支出取引は、第1のロッキングスクリプト形式を含む少なくとも1つの出力を含む。支出取引は2つ以上の出力、例えば、それぞれのロッキングスクリプト形式を有する第2の出力及び第3の出力を含み得る。取引が成功するためには、これらの支出取引の新たな出力の全てのロッキングスクリプトが、支出されている以前の取引の出力と同じスマートトークン形式を有するか又は所定の償還アドレスを有する標準支払テンプレートを有する必要がある。唯一の例外は任意の出力(例えば、最後の出力)であり、そのロッキングスクリプトは、例えば、必要に応じてマイナーの手数料支払からの変更又はアトミックスワップの支払受領のために用いられる任意のアドレスを有する標準支払テンプレートでなければならない。支出取引の入力は、各出力のためのデータ対及び取引全体のsighash原像を含むべきであり、そのハッシュの結果はECDSAの検証式の入力としての役割を果たす。トークンメカニクスサブコンポーネントは、この仮定に基づいて動作するように構成されている。仮定が満たされない場合、トークンメカニクスサブコンポーネントの実行は失敗し、如何なるトークンの操作が不可能になる。
【0102】
これは、支出取引が、支出が試みられる出力の第1のトークンロッキングスクリプトの定数コンポーネントを含まない追加の任意のマイナー手数料変更出力を有する場合にも当てはまる。そのような任意の出力でロックされたネイティブトークンは、ある取引から別の取引を介して新たに定義されたトークンの保存額の一部ではない。
【0103】
支出取引の一部は生の形式で入力スクリプトに含まれるのに対して、他の部分はそれらのハッシュの結果として含まれる。
【0104】
各支払アドレスは、支払テンプレートに埋め込まれ得る。
【0105】
実施形態では、前記支出取引は、第1のロッキングスクリプトを含む第1の出力と、第2のロッキングスクリプトを含む第2の出力とを含み、前記トークンメカニクスサブコンポーネントは、前記支出取引の前記第1の出力が、a)所定の支払アドレスを含むそれぞれの支払スクリプトテンプレート又はb)前記所定の支払アドレス以外のそれぞれの支払アドレスを含むそれぞれの可変コンポーネントと、後続の前記定数コンポーネントとを含む第1のロッキングスクリプトを含むか検証することと、存在する場合に、前記支出取引の前記第2の出力が、a)所定の支払アドレスを含むそれぞれの標準支払スクリプトテンプレート又はb)前記所定の支払アドレス以外の任意のアドレスを含むそれぞれの可変コンポーネントと、後続の前記定数コンポーネントとを含む第2のロッキングスクリプトを含むか検証することと、前記第2の出力が存在する場合に、前記支出取引の前記第1のロッキングスクリプト及び前記第2のロッキングスクリプトによってロックされている、前記デジタル資産の合計額が前記第1のトークンの額と等しいか検証することと、を行うように構成されている。
【0106】
実施形態では、前記トークンメカニクスコンポーネントは、前記支出取引の前記第1のロッキングスクリプトが、所定の支払アドレスを含む前記標準支払スクリプトテンプレートを含まない場合、前記第1のロッキングスクリプトが、前記所定の支払アドレス以外の支払アドレスを含むそれぞれの可変コンポーネントと、支出されている以前の取引の前記第1のトークンロッキングスクリプトの対応する定数コンポーネントと同一の、後続の前記定数コンポーネントとを含むか検証すること、及び/又は前記支出取引の前記第2のロッキングスクリプトが存在する場合、前記第2のロッキングスクリプトが、任意の支払アドレスを含むそれぞれの可変コンポーネントと、後続の、支出されている以前の取引の前記第1のトークンロッキングスクリプトの対応する定数コンポーネントと同一の、後続の前記定数コンポーネントとを含むか検証すること、を行うように構成され得る。
【0107】
実施形態では、定数コンポーネントは所定の支払アドレスを含み得る。
【0108】
つまり、所定のアドレスは定数部分にハードコードされている。
【0109】
実施形態では、前記支出取引の入力スクリプトはsighash原像を含んでもよく、該原像は前記第1のトークンロッキングスクリプト及び前記第1のトークンの額を含み、前記トークンメカニクスサブコンポーネントは、前記検証ステップを行うために、前記第1のトークンロッキングスクリプト及び支出されている前記出力の前記第1のトークンの額の両方を、前記原像から抽出すること、を行うように構成されている。
【0110】
支出取引の入力に含まれる第1のトークンロッキングスクリプトは、支出が試みられている出力のロッキングスクリプトであり、その時点で実行されているものと同一である。支出取引の入力に含まれる第1のトークンの額は、支出が試みられている出力に保持されている値である。
【0111】
実施形態では、前記原像は、1つ以上のデータ対の連結のハッシュを含んでもよく、各データ対は、前記支出取引のそれぞれのロッキングスクリプトからのそれぞれの支払アドレスと、該それぞれのロッキングスクリプトによってロックされている対応する額とを含み、前記トークンメカニクスサブコンポーネントは、前記原像から前記1つ以上のデータ対の連結のハッシュを抽出することと、前記1つ以上のデータ対に基づいてハッシュを生成することと、前記生成されたハッシュが前記抽出されたハッシュと等しいか検証することと、を行うように構成されている。
【0112】
支出取引の出力の形式に応じて、1つ以上の「対応する額」のうちの1つ以上はネイティブトークン、例えば、任意の変更又は「アトミックスワップ」支払受領のための出力であってもよく、対応する額の1つ以上は、例えば、償還又はトークン出力のための再定義されたトークンであり得る。
【0113】
実施形態では、前記ハッシュを生成するために用いられる前記1つ以上のデータ対は、前記入力スクリプトから取得されるか又は前記以前の出力ロッキングスクリプトの入力アドレス及び額の対を前記原像から取得することによって構築され得る。
【0114】
「ハッシュ」への言及は、「ダブルsha256ハッシュ」と同等であり得る。一般に、同じハッシュ関数が一貫して用いられる限り、任意のハッシュ関数が用いられ得る。
【0115】
実施形態では、前記トークンメカニクスサブコンポーネントは、前記支出取引データの原像を生成することと、前記支出取引データの前記生成された原像が、前記支出取引の前記入力内に含まれる前記原像と等しいか検証することと、を行うように構成され得る。
【0116】
実施形態では、前記支出取引の前記入力は、ダミー秘密鍵と、対応するダミー公開鍵とを含んでもよく、前記トークンメカニクスサブコンポーネントは、前記支出取引の前記生成された原像が、前記支出取引の前記入力に含まれる前記原像と等しいかを、前記ダミー秘密鍵及び前記支出取引の前記入力に含まれる前記原像のハッシュを用いてデジタル署名を生成することと、前記デジタル署名が、前記ダミー公開鍵及び前記支出取引の前記生成された原像のハッシュに対して検証された場合に有効な署名か検証することとを行うことにより検証するように構成されている。
【0117】
例えば、ECDSA署名を生成するための特定の署名アルゴリズムに応じて、一時的なダミー秘密鍵が必要になり得る。
【0118】
例えば、トークンメカニクスのサブコンポーネントは、生成された原像の前記検証を行うように構成されたOP_PUSH_TX擬似オペコード実施を含み得る。
【0119】
実施形態では、前記トークンメカニクスサブコンポーネントは、前記支出取引のそれぞれのロッキングスクリプトに含まれる前記それぞれの支払アドレスが、前記第1のトークン出力の前記可変コンポーネントに含まれる前記第1の支払アドレスと同じ種類であるか検証すること、を行うように構成され得る。
【0120】
加えて、トークンメカニクスサブコンポーネントは、支出取引のそれぞれの出力が、第1のトークン出力に含まれる支払スクリプトテンプレートと同じ種類のそれぞれの支払スクリプトテンプレート、例えばP2PKHロッキングスクリプトを含むかを検証するように構成され得る。
【0121】
実施形態では、前記第1の支払アドレスの種類は公開鍵ハッシュアドレスであり得る。
【0122】
実施形態では、前記第1のトークンの額は、前記基礎となるデジタル資産の単一の単位を含み得る。
【0123】
実施形態では、前記第1のトークンの額は、前記基礎となるデジタル資産の複数の単位を含み得る。
【0124】
実施形態では、前記定数コンポーネントはデータサブコンポーネントを含み、該データサブコンポーネントは、トークンプロトコル識別子、及びトークン発行取引の識別子であって、該トークン発行取引は、i)トークン発行者と初期トークン受領者との間の発行契約及びii)初期トークン額の一方又は両方を含む、トークン発行取引の識別子のうちの一方又は両方を含み得る。
【0125】
定数不変データサブコンポーネントは、OP_RETURNオペコードの後に置かれ得る。
【0126】
実施形態では、前記支出取引は、第3のロッキングスクリプトと、対応する第3の額とを含む第3の出力を含んでもよく、前記トークンメカニクスサブコンポーネントは、前記第3のロッキングスクリプトが、所定の支払タイプテンプレートのそれぞれの支払アドレス、例えば、P2PKH支払テンプレートのPKHアドレスと、それぞれの対応する額とを含むか検証するように構成されている。
【0127】
実施形態では、前記第1のトークン取引は、以前のトークン取引のそれぞれのトークン出力を支出する第1のトークン入力を含み、該第1のトークン入力は、前記第1のトークン取引のそれ自体を除く全て(all but itself)と、支出された前記以前のトークン取引のそれぞれの額及びそれぞれのロッキングスクリプトと、少なくとも1つ以上のデータ対であって、各データ対は、前記第1のトークン取引のそれぞれのロッキングスクリプトに含まれる支払アドレスと、該それぞれのロッキングスクリプトによってロックされている、前記基礎となるデジタル資産の対応する額とを少なくとも含む、少なくとも1つ以上のデータ対と、を含む.
【0128】
実施形態では、前記第1のトークン取引は第2のトークン出力を含み、該第2のトークン出力は第2のトークンロッキングスクリプトと第2のトークンの額とを含み、該第2のトークンロッキングスクリプトはそれぞれの可変コンポーネント及びそれぞれの定数コンポーネントを含み、該それぞれの可変コンポーネントは第2の支払アドレスを含み、該それぞれの定数コンポーネントは前記第1のトークンロッキングスクリプトの前記定数コンポーネントと合致する
【0129】
実施形態では、前記第1のトークン取引は第3の出力を含み、該第3の出力は第3の支払アドレスを含み得る。
【0130】
実施形態では、前記第1のトークン入力は、第1の当事者によって生成された第1の署名を含み、前記第1のトークン取引は第2の入力を含み、該第2の入力は、第2の当事者によって生成された第2の署名を含み、前記第1のトークン取引は支払テンプレートに含まれる支払アドレスを含む支払出力を含み、該支払アドレスは前記第1の当事者にリンクされている。
【0131】
支払出力は、販売したトークンについて第2の当事者から支払を受領するために第1の当事者にリンクされている。
【0132】
本明細書で開示の別の態様によれば、1つ以上のメモリユニットを含むメモリと、
1つ以上の処理ユニットを含む処理装置であって、前記メモリは、該処理装置上で実行されるように構成されたコードを記憶し、該コードは、前記処理装置上にある場合に、上述の実施形態のいずれかの方法が行われるように構成されている、処理装置と、を含むコンピュータ機器が提供される。
【0133】
本明細書で開示の別の態様によれば、コンピュータ読み取り可能記憶装置上で具現化されるコンピュータプログラムであって、コンピュータ機器上で実行された場合に、上述の実施形態のいずれかの方法が行われるように構成されている、コンピュータプログラムが提供される。
【0134】
本明細書で開示の別の態様によれば、第1のトークン出力を含むトークン取引が提供され、該第1のトークン出力は、第1のトークンロッキングスクリプト及び第1のトークンの額を含み、該第1のトークンロッキングスクリプトは、可変コンポーネント及び定数コンポーネントを含み、該可変コンポーネントは支払テンプレートに埋め込まれた第1の支払アドレスを含み、該定数コンポーネントはトークンメカニクスサブコンポーネントを含み、前記トークンメカニクスサブコンポーネントは、支出取引の入力スクリプトであって、該入力スクリプトは、該支出取引のそれ以外の全てと、支出されている以前の取引出力においてロックされている額及びそれぞれのロッキングスクリプトを含む、入力スクリプトと共に実行された場合に、前記支出取引の入力スクリプトから1つ以上のデータ対を取得することであって、各データ対は、i)前記支出取引出力のそれぞれのロッキングスクリプトに含まれる少なくともそれぞれの支払アドレスと、ii)その出力のそれぞれのロッキングスクリプトによってロックされている、基礎となるデジタル資産の対応する額とを含む、ことと、前記支出取引の1つ以上の出力が、a)所定の支払アドレスを含むそれぞれの支払スクリプトテンプレート又はb)前記所定の支払アドレス以外のそれぞれの支払アドレスを含むそれぞれの可変コンポーネントと、後続の前記定数コンポーネントとを含むそれぞれのロッキングスクリプトを含むかを検証することと、前記支出取引の1つ以上の出力について、前記1つ以上の出力のそれぞれのロッキングスクリプトによってロックされている、基礎となるデジタル資産の合計額が、前記第1のトークンの額と等しいかを検証することと、を行うように構成され、前記トークンメカニクスサブコンポーネントは、検証ステップのいずれかが失敗した場合、実行の間に失敗するように構成されている。
【0135】
本明細書で開示の別の態様によれば、前記トークン取引が記憶されたコンピュータ読み取り可能記憶媒体が提供される。
【0136】
開示の技術の他の変種又は使用事例は、本明細書の開示が与えられた場合に当業者に明らかになり得る。開示の範囲は、説明した実施形態によって限定されず、添付の特許請求の範囲によってのみ限定される。
【国際調査報告】