(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-12-06
(45)【発行日】2024-12-16
(54)【発明の名称】ブロックチェーン上のプログラムの格納
(51)【国際特許分類】
G06F 9/445 20180101AFI20241209BHJP
G06F 21/31 20130101ALI20241209BHJP
G06F 21/64 20130101ALI20241209BHJP
G06F 21/60 20130101ALI20241209BHJP
【FI】
G06F9/445
G06F21/31
G06F21/64
G06F21/60 320
(21)【出願番号】P 2022515631
(86)(22)【出願日】2020-08-21
(86)【国際出願番号】 IB2020057858
(87)【国際公開番号】W WO2021048665
(87)【国際公開日】2021-03-18
【審査請求日】2023-07-24
(32)【優先日】2019-09-12
(33)【優先権主張国・地域又は機関】GB
(73)【特許権者】
【識別番号】318001991
【氏名又は名称】エヌチェーン ライセンシング アーゲー
(74)【代理人】
【識別番号】100107766
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【氏名又は名称】伊東 忠彦
(74)【代理人】
【識別番号】100135079
【氏名又は名称】宮崎 修
(72)【発明者】
【氏名】ドワロン,ブロック
(72)【発明者】
【氏名】ライト,クレイグ スティーヴン
【審査官】松平 英
(56)【参考文献】
【文献】特開2019-220148(JP,A)
【文献】特表2020-504930(JP,A)
【文献】米国特許出願公開第2018/0096349(US,A1)
【文献】韓国公開特許第10-2019-0076197(KR,A)
【文献】中国特許出願公開第110062034(CN,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 8/00-8/38
8/60-8/77
9/44-9/445
9/451
12/14
21/00-21/88
G06Q10/00-10/10
30/00-30/08
50/00-50/20
50/26-99/00
G16Z99/00
(57)【特許請求の範囲】
【請求項1】
プログラムを実行する方法であって、前記方法は、消費者パーティのコンピュータ機器により、
ブロックチェーンネットワークの複数のノードに渡り維持されるブロックチェーンに記録された第1トランザクションからヘッダファイルを読み出すステップであって、前記ヘッダファイルは、プログラムヘッダ情報と、前記ブロックチェーンに格納された1つ以上のそれぞれの第2トランザクションの1つ以上のそれぞれのトランザクションIDを含む参照情報と、を含み、前記第2トランザクションの各々は、プログラムファイルの本体のそれぞれのセクションを含み、前記セクションのうちの少なくとも1つは実行可能プログラムコードを含む、ステップと、
前記ブロックチェーンから、前記参照情報に基づき前記1つ以上の第2トランザクションのうちの少なくとも1つから、前記プログラムファイルのそれぞれのセクションを読み出すステップと、
前記プログラムヘッダ情報と前記少なくとも1つの読み出したセクションとを含むプログラムを実行するステップと、
を含む方法。
【請求項2】
前記プログラムの前記実行は、
前記プログラムヘッダ情報及び前記少なくとも1つの読み出したセクションから、前記プログラムを含むプログラムファイルを再構成し、前記再構成したプログラムファイルを前記消費者パーティの前記コンピュータ機器のメモリに格納し、前記消費者パーティの前記コンピュータ機器で前記再構成したプログラムファイルを実行することを含む、請求項1に記載の方法。
【請求項3】
前記参照情報は、複数の第2トランザクションの複数のトランザクションIDを含み、各第2トランザクションは、前記プログラムファイルのそれぞれの本体セクションを格納する、請求項1又は2に記載の方法。
【請求項4】
前記読み出すステップは、前記ブロックチェーンから、前記複数の第2トランザクションのうちの2つ以上からそれぞれのセクションを読み出すステップを含み、
実行される前記プログラムは、前記プログラムヘッダ情報と、前記2つ以上の第2トランザクションからの読み出したセクションと、を含む、請求項3に記載の方法。
【請求項5】
前記第2トランザクション自体のうちの少なくとも1つの中の本体セクションのうちの少なくとも1つは、更なる本体セクションを含む第3トランザクションへの少なくとも参照を含むヘッダ部分を含み、
実行される前記プログラムは、プログラムヘッダと、前記第2及び第3トランザクションからの本体セクションと、を含む、請求項1~4のいずれかに記載の方法。
【請求項6】
前記ヘッダファイルは、1つ以上の条件を更に含み、
前記方法は、前記条件を評価するステップを含み、前記プログラムのセクションのうちの少なくとも1つの読み出し又は実行は、前記評価の結果を条件とする、請求項1~5のいずれかに記載の方法。
【請求項7】
前記評価は、前記消費者パーティの前記コンピュータ機器により実行される、請求項6に記載の方法。
【請求項8】
前記ヘッダファイルは、前記1つ以上の条件を評価するための実行可能コードスタブを含み、
前記方法は、前記評価を実行するために、前記消費者パーティの前記コンピュータ機器で前記コードスタブを実行するステップを含む請求項7に記載の方法。
【請求項9】
前記条件は、前記消費者パーティのアイデンティティについての条件である少なくとも1つのアクセス条件を含み、
前記評価は、前記消費者パーティの前記アイデンティティが前記少なくとも1つのアクセス条件により指定されるアイデンティティと一致することを検証することを含み、前記プログラムのセクションのうちの少なくとも1つの読み出し又は実行は、前記検証の肯定的結果を条件とする、請求項6~8のいずれかに記載の方法。
【請求項10】
前記条件は、前記消費者パーティの前記コンピュータ機器の互換性についての条件である少なくとも1つの互換性条件を含み、
前記評価は、前記消費者パーティの前記コンピュータ機器が前記互換性条件により指定される1つ以上の技術的基準を満たすことをチェックすることを含み、前記プログラムのセクションのうちの少なくとも1つの読み出し又は実行は、前記チェックの肯定的結果を条件とする、請求項6~9のいずれかに記載の方法。
【請求項11】
前記条件は、複数のセクションの各々に関連付けられたそれぞれの条件を含み、前記それぞれの条件のうちの少なくとも一部は互いに異なり、
前記方法は、前記複数のセクションのうちの少なくとも一部の各々に関連付けられた条件を評価するステップを含み、それぞれのそのようなセクションの読み出し又は実行は、前記評価の結果を条件とする、請求項3、4、又は5に従属する、請求項6~10のいずれかに記載
の方法。
【請求項12】
前記条件は、前記セクションの一部又は全部の各々について、前記消費者パーティのアイデンティティについてのそれぞれのアクセス条件を含み、前記評価は、前記消費者パーティの前記アイデンティティがそれぞれのセクション毎の前記それぞれの条件により指定されるそれぞれのアイデンティティと一致することを検証することを含み、前記それぞれのセクションの読み出し又は実行は、それぞれの検証の肯定的結果を条件とする、請求項11に記載の方法。
【請求項13】
前記条件は、前記セクションの一部又は全部の各々について、前記消費者パーティのコンピュータ機器の前記それぞれのセクションとの互換性についてのそれぞれの互換性条件を含み、前記評価は、前記消費者パーティの前記コンピュータ機器がそれぞれのセクション毎のそれぞれの条件により指定されるそれぞれの1つ以上の技術的基準を満たすことを検証することを含み、前記それぞれのセクションの読み出し又は実行は、それぞれのチェックの肯定的結果を条件とする、請求項3、4、又は5に従属する、請求項6~12のいずれかに記載の方法。
【請求項14】
前記プログラムヘッダ情報は、前記プログラムファイルのバージョン番号、前記プログラムファイルが実行されるべきシステムのバージョン番号、前記プログラムファイルのサイズ、記述子、予約された変数のリスト、日付け及び/又はタイムスタンプ、チェックサム、及び/又は本体セクションの順序情報、のうちの1つ以上を含む、請求項1~13のいずれかに記載の方法。
【請求項15】
前記ブロックチェーン及びブロックチェーンネットワークは、アウトプットに基づくモデルに従い動作するよう構成され、各トランザクションは、少なくとも1つのアウトプットと少なくとも1つのインプットとを含み、各アウトプットはロックスクリプトを含み、各インプットは、別のトランザクションのアウトプットへのポインタと、ポイントされたアウトプットのロックスクリプトをアンロックするためのアンロックスクリプトと、を含み、
前記ロックスクリプト及び前記
アンロックスクリプトは
、それぞれスクリプト言語で作成され、前記ヘッダファイル及び前記プログラムコードは、前記スクリプト言語以外の言語で作成される、請求項1~14のいずれかに記載の方法。
【請求項16】
前記ヘッダファイル及び前記1つ以上のセクションの各々は、前記ブロックチェーン上の前記それぞれの第1又は第2トランザクションの少なくとも1つの使用不可能アウトプットに格納される、請求項15に記載の方法。
【請求項17】
前記ヘッダファイル内の前記参照情報は、各第2トランザクション内の個々のそれぞれのアウトプットの識別子を含み、前記読み出しは、識別されたアウトプットから読み出されるセクションの各々を読み出すことを含む、請求項15又は16に記載の方法。
【請求項18】
前記第1トランザクションに格納される前記ヘッダファイルは、前記消費者パーティと前記プログラムを提供する提供者パーティとの間で共有される共有シークレットに基づき暗号化された暗号化形式で格納され、前記ヘッダファイルの読み出しは、前記共有シークレットに基づき前記ヘッダファイルを復号することを含む、請求項1~17のいずれかに記載の方法。
【請求項19】
コンピュータ可読記憶装置上に具現化され、消費者パーティのコンピュータ機器上で実行すると請求項1~18のいずれかに記載の方法を実行するよう構成される、コンピュータプログラム。
【請求項20】
消費者パーティの機器であって、
1つ以上のメモリユニットを含むメモリと、
1つ以上の処理ユニットを含む処理機器と、
を含み、
前記メモリは、前記処理機器上で実行するよう構成されるコードを格納し、前記コードは実行すると請求項1~18のいずれかに記載の方法を実行するよう構成される、機器。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、ブロックチェーンのトランザクションに実行可能プログラムを格納するための、及びそのようなプログラムを開始するための、ファイルフォーマットに関する。
【背景技術】
【0002】
ブロックチェーンとは、分散型データ構造の形式を指し、ブロックチェーンの複製のコピーは、ピアツーピア(peer-to-peer (P2P))ネットワーク内の複数のノードのそれぞれにおいて維持される。ブロックチェーンは、データのブロックのチェーンを含み、各ブロックは1つ以上のトランザクションを含む。各トランザクションは、1つ以上のブロックに渡り得るシーケンスの中の先行するトランザクションを指してよい。トランザクションは、新しいブロックに含まれるようネットワークへ提出され得る。新しいブロックは、「マイニング」として知られる処理により生成される。「マイニング」は、複数のマイニングノードの各々が「proof-of-work」を実行するために競争する、つまりブロックに含まれることを待っている保留中のトランザクションのプールに基づき、暗号パズルを解くことを含む。
【0003】
ネットワーク内の各ノードは、転送、マイニング、及び記憶のうちの任意の1、2、又は3つ全部の役割を有することができる。転送ノードは、ネットワークのノードを通じてトランザクションを伝播させる。マイニングノードは、トランザクションのマイニングを実行してブロックにする。記憶ノードは、それぞれ、ブロックチェーンのマイニングされたブロックの彼ら自身のコピーを格納する。トランザクションをブロックチェーンに記録させるために、パーティは、該トランザクションを、伝播させるようにネットワークのノードのうちの1つへ送信する。トランザクションを受信したマイニングノードは、トランザクションをマイニングして新しいブロックにするよう競争してよい。各ノードは、トランザクションが有効であるための1つ以上の条件を含む同じノードプロトコルに関するよう構成される。無効なトランザクションは、伝播されず、マイニングされてブロックにされることもない。トランザクションが検証され、それによってブロックチェーンに受け入れられたと仮定すると、(任意のユーザデータを含む)トランザクションは、従って、不変の公開レコードとしてP2Pネットワークの各ノードに格納されたままである。
【0004】
最新のブロックを生成するためにproof-of-workパズルを解くことに成功したマイナーは、標準的に、デジタルアセットの新しい額を生成する「生成トランザクション(generation transaction)」と呼ばれる新しいトランザクションにより報酬を受ける。proof-of-workは、ブロックをマイニングするために膨大な量の計算リソースを必要とするので、及び二重支払いの企てを含むブロックは他のノードにより受け入れられない可能性があるので、マイナーが、彼らのブロックに二重支払いトランザクションを含めることによりシステムを騙さないことを奨励する。
【0005】
「アウトプットに基づく」モデル(UTXOに基づくモデルと呼ばれることもある)では、所与のトランザクションのデータ構造は、1つ以上のインプット及び1つ以上のアウトプットを含む。任意の使用可能アウトプットは、時にUTXO(「unspent transaction output(未使用トランザクションアウトプット)」)と呼ばれる、デジタルアセットの額を指定する要素を含む。アウトプットは、アウトプットを償還(redeem)するための条件を指定するロックスクリプトを更に含んでよい。各インプットは、先行するトランザクション内のそのようなアウトプットへのポインタを含み、ポイントされたアウトプットのロックスクリプトをアンロックするためのアンロックスクリプトを更に含んでよい。従って、トランザクションのペアを考えるとき、それらを、第1トランザクション及び第2トランザクション(又は「ターゲット」トランザクション)と呼ぶ。第1トランザクションは、デジタルアセットの額を指定する、及びアウトプットをアンロックする1つ以上の条件を定義するロックスクリプトを含む、少なくとも1つのアウトプットを含む。第2のターゲットトランザクションは、第1トランザクションのアウトプットへのポインタと、第1トランザクションのアウトプットをアンロックするためのアンロックスクリプトと、を含む少なくとも1つのインプットを含む。
【0006】
このようなモデルでは、第2のターゲットトランザクションが、伝搬されてブロックチェーンに記録されるようP2Pネットワークへ送信されると、各ノードにおいて適用される有効性のための基準のうちの1つは、アンロックスクリプトが第1トランザクションのロックスクリプト内で定義された1つ以上の条件のうちの全部を満たすことである。もう1つは、第1トランザクションのアウトプットが、別の前の有効なトランザクションによって未だ償還されていないことである。これらの条件のうちのいずれかに従いターゲットトランザクションが無効であると分かった任意のノードは、該トランザクションを伝搬させず、ブロックチェーンに記録させるためにマイニングしてブロックに含めることもしない。
【0007】
トランザクションモデルの代替のタイプは、アカウントに基づくモデルである。この場合、各トランザクションは、過去の一連のトランザクションにおいて、先行するトランザクションのUTXOに戻って参照することによって移転される量を定義するのではなく、絶対的な口座(アカウント)残高を参照することによって移転される。全てのアカウントの現在の状態は、ブロックチェーンとは別個のマイナーによって格納され、絶えず更新される。
【0008】
従来、ブロックチェーン内のトランザクションは、デジタルアセット、すなわち、価値のストアとして機能するデータを伝達するために使用される。しかし、ブロックチェーンの上に追加の機能を積み重ねるために、ブロックチェーンを利用することもできる。例えば、ブロックチェーンプロトコルは、トランザクション内の追加ペイロードデータ(つまり、ユーザデータ、又はアプリケーションコンテンツであり、トランザクションがブロックチェーンネットワーク上のトランザクションとしてどのように動作するかに基本的に関連するデータとは対照的である)の記憶を可能にする。例えば、そのようなペイロードデータは、例えばブロックチェーンネットワークのノードにおいて実行するときロックスクリプトを終了し、従って別のトランザクションのインプットとの取引の観点からアウトプットを機能させなくする、ロックスクリプトに含まれるOP_RETURNオペコードにより、アウトプットに基づくモデルにおけるトランザクションの使用不可能アウトプットを含んでよい。現代のブロックチェーンは、単一トランザクション内に格納できる最大データ容量を増加させ、より複雑なデータを組み込むことを可能にしている。例えば、これは、ブロックチェーン上の電子ドキュメント(electronic document)、或いはオーディオ若しくはビデオデータをも格納するために使用され得る。
【0009】
トランザクションのペイロードには実行可能コードの小さなブロックが含まれることも知られている。つまり、アウトプットに基づくモデルにおけるロック及びアンロックスクリプト以外の、又はアカウントに基づくモデルにおけるスマートコントラクトの動作部分以外の、コードである。実行可能コードは、代わりに、何らかの他の2次的又は「レイヤ2」(つまり、アプリケーションレベル)機能を有する。言い換えると、ブロックチェーンネットワークにより利用されるトランザクションプロトコルの観点から、実行可能コードは、任意の他のペイロードデータと全く同じである。クライアントは、ブロックチェーンネットワークの記憶ノードのうちの1つに格納されたブロックチェーンの部分を検査すること、及び関連トランザクションのペイロードからコードにアクセスすることにより、コードをダウンロードできる。コードは、次に、クライアントコンピュータ上でローカルに実行できる。
【発明の概要】
【0010】
しかしながら、トランザクションのペイロードに実行可能コードの小さなブロックが含まれることが知られているが、ブロックチェーン上に自己完結型プログラムを含めることは従来知られていない。
【0011】
ブロックチェーンは、データの記憶、アクセス、及び分配に革新を起こす可能性により、従来のデータベースサーバに代わる非集中型の耐タンパー性を提供する。しかしながら、ブロックチェーンは、その揺籃期により、基礎技術の広範な知識を有しないでアプリケーション及びソフトウェアを容易に構築するための標準化されたアーキテクチャ及びネットワークプロトコルが欠如している。ブロックチェーンが、インターネットと同じくらい基本的なインフラストラクチャになるところに達するために、ユーザ及びソフトウェアの両者によりブロックチェーン上に格納されたデータにアクセスするための簡単に使用できるプロトコルを開発することが必須である。
【0012】
以下は、広範なブロックチェーンに対応したアプリケーションを標準化するために適するファイルフォーマットを開示する。本開示は、許可されたアクセスにより個々のコンピュータ上で実行されるようローカルに再構成可能な、ブロックチェーン上の実行可能ソフトウェア(つまり実行可能コード)を格納する手段を確立する。これは、ローカルに又は仮想マシン上で実行可能な、ブロックチェーン上に格納されたファイルのための、新規なブロックチェーンに基づくファイルフォーマットを導入する。
【0013】
本願明細書に開示される1つの態様によると、プログラムを実行する方法が提供される。前記方法は、消費者パーティのコンピュータ機器により実行される以下のステップを含む。先ず、前記方法は、ブロックチェーンネットワークの複数のノードに渡り維持されるブロックチェーンに記録された第1トランザクションからヘッダファイルを読み出すステップを含む。前記ヘッダファイルは、プログラムヘッダ情報と、前記ブロックチェーンに格納された1つ以上のそれぞれの第2トランザクションの1つ以上のそれぞれのトランザクションIDを含む参照情報と、を含む。前記第2トランザクションの各々は、前記プログラムファイルの本体のそれぞれのセクションを含み、前記セクションのうちの少なくとも1つは実行下のプログラムコードを含む。前記方法は、次に、前記ブロックチェーンから、前記参照情報に基づき前記1つ以上の第2トランザクションのうちの少なくとも1つから、前記プログラムファイルのそれぞれのセクションを読み出すステップと、前記プログラムヘッダ情報と前記少なくとも1つの読み出したセクションとを含むプログラムを実行するステップと、を含む。
【0014】
実施形態では、前記ファイルを実行可能な者に対する制御を可能にするために、前記ファイルを格納するトランザクション又は前記ファイル自体のいずれかに、許可が符号化できる。
【0015】
実施形態は、前記ブロックチェーンへのアクセスを高級プログラミング言語に統合して、ローカルソフトウェアと前記ブロックチェーンとの相互作用を実現してもよい。ブロックチェーンハイパーテキストドキュメントの中でトランザクションハイパーリンクにより参照されるデータにアクセスするために、要求-応答プロトコルが提供されてよい。例えば、要求-応答プロトコルは、OP_RETURNフラグにより要求を行うために、ハイパーテキストに対応したウォレットにより実現されてよい。
【0016】
本開示は、例示的なシステムアーキテクチャ及びコンピュータアーキテクチャ、並びに、コンピュータハードウェアおよびソフトウェアのコンポーネントがどのように開示の技術を実施する際に相互作用するかも議論する。
【図面の簡単な説明】
【0017】
本開示の実施形態の理解を助け、そのような実施形態がどのように実施され得るかを示すために、例としてのみ、以下の添付の図面を参照する。
【
図1】ブロックチェーンを実装するためのシステムの概略ブロック図である。
【
図2】ブロックチェーンに記録されるトランザクションの幾つかの例を概略的に示している。
【
図3】プログラムを格納するための例示的なトランザクションセットの概略ブロック図である。
【
図4】クライアントアプリケーションの概略ブロック図である。
【
図5】本願明細書の実施形態によるブロックチェーンに基づくファイルフォーマットを概略的に示す。
【
図6】本開示の技術を実施する例示的なコンピュータアーキテクチャの概略ブロック図である。
【
図7A】本願明細書に開示される実施形態による実行可能プログラムファイルにアクセスし及び再構成する例示的な処理を示す。
【
図7B】本願明細書に開示される実施形態による実行可能プログラムファイルにアクセスし及び再構成する例示的な処理を示す。
【発明を実施するための形態】
【0018】
<例示的なシステムの概要>
図1は、ブロックチェーン150を実装するための例示的なシステム100を示す。システム100は、典型的にはインターネットのような広域インターネットワークであるパケット交換ネットワーク101を含む。パケット交換ネットワーク101は、パケット交換ネットワーク101内にピアツーピア(P2P)オーバレイネットワーク106を形成するように配置された複数のノード104を含む。各ノード104は、異なるピアに属する異なるノード104を有するピアのコンピュータ装置を含む。各ノード104は、1つ以上のプロセッサ、例えば、1つ以上の中央処理装置(CPU)、アクセラレータプロセッサ、特定用途向けプロセッサ、及び/又はフィールドプログラマブルゲートアレイ(FPGA)を含む処理装置を含む。各ノードはまた、メモリ、すなわち、1つ以上の非一時的コンピュータ読取可能媒体の形態のコンピュータ読取可能記憶装置を備える。メモリは、1つ以上のメモリ媒体、例えば、ハードディスクなどの磁気媒体、固体ドライブ(solid-state drive (SSD))、フラッシュメモリ又はEEPROMなどの電子媒体、及び/又は光ディスクドライブなどの光学的媒体を使用する1つ以上のメモリユニットを含んでもよい。
【0019】
ブロックチェーン150は、データのブロック151のチェーンを指し、ブロックチェーン150のそれぞれのコピーは、ピアツーピア(peer-to-peer (P2P))ネットワーク160内の複数のノードのそれぞれにおいて維持される。チェーン内の各ブロック151は、1つ以上のトランザクション152を含み、この文脈ではトランザクションは、一種のデータ構造を参照する。データ構造の性質は、トランザクションモデル又はスキームの一部として使用されるトランザクションプロトコルのタイプに依存する。所与のブロックチェーンは、典型的には、全体を通して、1つの特定のトランザクションプロトコルを使用する。1つの一般的なタイプのトランザクションプロトコルでは、各トランザクション152のデータ構造は、少なくとも1つのインプット及び少なくとも1つのアウトプットを含む。各アウトプットは、そのアウトプットが暗号的にロックされている(アンロックされ、それによって償還又は使用されるために、そのユーザ103の署名を必要とする)ユーザに属するデジタルアセットの数量を表す額(amount)を指定する。各インプットは、先行するトランザクション152のアウトプットを逆にポイントし、それによってトランザクションをリンクする。
【0020】
ノード104の少なくとも幾つかは、トランザクション152を転送し、それによって伝播する転送ノード104Fの役割を引き受ける。ノード104の少なくともいくつかは、ブロック151をマイニングするマイナー104Mの役割を担う。ノード104の少なくとも幾つかは、記憶ノード104S(「フルコピー(full-copy)」ノードとも呼ばれる)の役割を引き受け、各ノードは、それぞれのメモリに同じブロックチェーン150のそれぞれのコピーを格納する。各マイナーノード104Mは、マイニングされてブロック151にされることを待ってるトランザクション152のプール154も維持する。所与のノード104は、転送ノード104、マイナー104M、記憶ノード104S、又はこれらの2つ若しくは全部の任意の組み合わせであり得る。
【0021】
所与の現在のトランザクション152jにおいて、インプット(又はそのそれぞれ)は、トランザクションのシーケンスの中の先行トランザクション152iのアウトプットを参照するポインタを含み、このアウトプットが現在のトランザクション152jにおいて償還されるか又は「消費される(spent)」ことを指定する。一般に、先行するトランザクションは、プール154又は任意のブロック151内の任意のトランザクションであり得る。先行するトランザクション152iは、必ずしも、現在のトランザクション152jが生成された又はネットワーク106へ送信されたときに存在する必要はないが、先行するトランザクション152iは、現在のトランザクションが有効であるために存在し検証されている必要がある。従って、本願明細書で「先行する」は、ポインタによりリンクされた論理的シーケンスの中で先行するものを表し、必ずしも時系列の中での生成又は送信の時間を表さない。従って、それは、必ずしも、トランザクション152i,152jが順不同で生成され又は送信されることを排除しない(以下の親のない(orphan)トランザクションに関する議論を参照する)。先行するトランザクション152iは、等しく、祖先(antecedent)又は先行(predecessor)トランザクションと呼ばれ得る。
【0022】
現在のトランザクション152jのインプットは、先行するトランザクション152iのアウトプットがロックされているユーザ103aの署名も含む。また、現在のトランザクション152jのアウトプットは、新しいユーザ103bに暗号的にロックできる。従って、現在のトランザクション152jは、先行するトランザクション152iのインプットで定義された量を、現在のトランザクション152jのアウトプットで定義された新しいユーザ103bに移転することができる。幾つかの場合には、トランザクション152が複数のアウトプットを有し、複数のユーザ間でインプット量を分割してよい(変更を行うために、そのうちの1人がオリジナルユーザとなる)。幾つかの場合には、トランザクションが複数のインプットを有し、1つ以上の先行するトランザクションの複数のアウトプットから量をまとめ、現在のトランザクションの1つ以上のアウトプットに再分配することもできる。
【0023】
上記は「アウトプットベースの」トランザクションプロトコルと呼ばれることがあり、時には「未使用のトランザクションアウトプット(unspent transaction output (UTXO))タイプのプロトコル」(アウトプットはUTXOと呼ばれる)とも呼ばれる。ユーザの合計残高は、ブロックチェーンに格納されている1つの数値で定義されるのではなく、代わりに、ユーザは、ブロックチェーン151内の多くの異なるトランザクション152に分散されている該ユーザの全てのUTXOの値を照合するために、特別な「ウォレット」アプリケーション105を必要とする。
【0024】
アカウントベースのトランザクションモデルの一部として、別のタイプのトランザクションプロトコルを「アカウントベース」のプロトコルと呼ぶことがある。アカウントベースの場合、各トランザクションは、過去の一連のトランザクションにおいて、先行するトランザクションのUTXOに戻って参照することによって移転される量を定義するのではなく、絶対的な口座(アカウント)残高を参照することによって移転される。全てのアカウントの現在の状態は、ブロックチェーンとは別個のマイナーによって格納され、絶えず更新される。このようなシステムでは、トランザクションは、アカウントの連続したトランザクション記録(いわゆる「ポジション」)を用いて発注される。この値は、送信者により彼らの暗号署名の一部として署名され、トランザクション参照計算の一部としてハッシュされる。さらに、任意的なデータフィールドもトランザクションに署名することができる。このデータフィールドは、例えば、前のトランザクションIDがデータフィールドに含まれている場合、前のトランザクションを遡ってポイントしてよい。
【0025】
どちらのタイプのトランザクションプロトコルでも、ユーザ103が新しいトランザクション152jを実行したい場合、ユーザは、自分のコンピュータ端末102からP2Pネットワーク106のノードの1つ104(現在は、通常、サーバ又はデータセンタであるが、原則として、他のユーザ端末でもよい)に新しいトランザクションを送信する。このノード104は、各ノード104に適用されるノードプロトコルに従って、トランザクションが有効であるかどうかをチェックする。ノードプロトコルの詳細は、問題のブロックチェーン150で使用されているトランザクションプロトコルのタイプに対応し、全体のトランザクションモデルを一緒に形成する。ノードプロトコルは、典型的には、ノード104に、新しいトランザクション152j内の暗号署名が、トランザクション152の順序付けされたシーケンスの中の前のトランザクション152iに依存する、期待される署名と一致することをチェックすることを要求する。アウトプットベースの場合、これは、新しいトランザクション152jのインプットに含まれるユーザの暗号署名が、新しいトランザクションが消費する先行するトランザクション152jのアウトプットに定義された条件と一致することをチェックすることを含んでよく、この条件は、典型的には、新しいトランザクション152jのインプット内の暗号署名が、新しいトランザクションのインプットがポイントする前のトランザクション152iのアウトプットをアンロックすることを少なくともチェックすることを含む。幾つかのトランザクションプロトコルでは、条件は、少なくとも部分的に、インプット及び/又はアウトプットに含まれるカスタムスクリプトによって定義されてもよい。或いは、単にノードプロトコルだけで固定することもできるし、或いは、これらの組み合わせによることもある。いずれにせよ、新しいトランザクション152jが有効であれば、現在のノードは新しいトランザクションをP2Pネットワーク106内のノード104の1つ以上の他のノードに転送する。これらのノード104の少なくともいくつかは、同じノードプロトコルに従って同じテストを適用し、新しいトランザクション152jを1つ以上のさらなるノード104に転送するなど、転送ノード104Fとしても機能する。このようにして、新しいトランザクションは、ノード104のネットワーク全体に伝播される。
【0026】
アウトプットベースのモデルでは、与えられたアウトプット(例えば、UTXO)が消費されるかどうかの定義は、ノードプロトコルに従って別の今後の(onward)トランザクション152jのインプットによって既に有効に償還されているかどうかである。トランザクションが有効であるための別の条件は、それが消費又は償還を試みる先行するトランザクション152iのアウトプットが、別の有効なトランザクションによって未だ消費/償還されていないことである。ここでも、有効でない場合、トランザクション152jは、ブロックチェーンに伝播又は記録されない。これは、支払者が同じトランザクションのアウトプットを複数回消費しようとする二重支出を防ぐ。一方、アカウントベースのモデルは、口座残高を維持することによって、二重支出を防ぐ。この場合も、トランザクションの順序が定義されているため、口座残高は、一度に単一の定義された状態を有する。
【0027】
検証に加えて、ノード104Mのうちの少なくともいくつかは、「proof of work」に支えられているマイニングと呼ばれるプロセスで、トランザクションのブロックを最初に作成するために競合する。マイニングノード104Mでは、まだブロックに現れていない有効なトランザクションのプールに新しいトランザクションが追加される。そして、マイナーは、暗号パズルを解決しようと試みることにより、トランザクションのプール154からトランザクション152の新しい有効なブロック151を組み立てるために競争する。これは、典型的には、ノンスがトランザクションのプール154と連結され、ハッシュされるときに、ハッシュのアウトプットが所定の条件を満たすような「ノンス」値を探すことを含む。例えば、所定の条件は、ハッシュのアウトプットが、所定の数の先行ゼロを有することであってもよい。ハッシュ関数の特性は、インプットに関して予測不可能なアウトプットを持つことである。従って、この探索は、ブルートフォースによってのみ実行することができ、従って、パズルを解決しようとしている各ノード104Mにおいて、相当量の処理リソースを消費する。
【0028】
パズルを解く最初のマイナーノード104Mは、これをネットワーク106に通知し、その解を証明として提供する。この解は、ネットワーク内の他のノード104によって簡単にチェックすることができる(ハッシュが対する解が与えられれば、ハッシュのアウトプットが条件を満たすことを確認することは簡単である)。勝者がパズルを解いたトランザクションのプール154は、各ノードで勝者が発表した解をチェックしたことに基づいて、記憶ノード104Sとして機能するノード104のうちの少なくともいくつかによってブロックチェーン150の新しいブロック151として記録される。また、新しいブロック151nにはブロックポインタ155が割り当てられ、チェーン内で前に作成されたブロック151n-1を指すようになっている。proof-of-workは、新しいブロックを151作成するのに多大な労力を要し、二重の支出を含むブロックは他のノード104によって拒否される可能性が高く、従ってマイニングノード104Mが二重支払いを彼らのブロックに含まないようにする動機が働くので、二重の支出のリスクを減じるのを助ける。一旦生成されると、ブロック151は、同じプロトコルに従ってP2Pネットワーク106内の各格納ノード104Siで認識され、維持されるため、変更することはできない。また、ブロックポインタ155は、ブロック151に順序を課す。トランザクション152は、P2Pネットワーク106内の各記憶ノード104Sで順序付けられたブロックに記録されるので、これはトランザクションの不変の公開台帳を提供する。
【0029】
パズルを解決するために常に競争している異なるマイナー104Mは、いつ解を探し始めたかによって、いつでもマイニングされていないトランザクションプール154の異なるスナップショットに基づいてパズルを解いているかもしれないことに留意する。パズルを解く者は誰でも、最初に次の新しいブロック151nに含まれるトランザクション152を定義し、現在のマイニングされていないトランザクションのプール154が更新される。そして、マイナー104Mは、新たに定義された未解決のプール154からブロックを作り出すために、競争を続ける。また、生じ得る「分岐(フォーク、fork)」を解決するためのプロトコルも存在する。これは、2人のマイナー104Mが互いに非常に短い時間内にパズルを解決し、ブロックチェーンの矛盾したビューが伝播する場合である。要するに、分岐の枝が伸びるときは常に、最長のものが最終的なブロックチェーン150になる。
【0030】
ほとんどのブロックチェーンでは、勝ったマイナー104Mは、何も無いものから新しい量のデジタルアセットを生み出す特別な種類の新しいトランザクションによって自動的に報酬を受けている(通常のトランザクションでは、あるユーザから別のユーザにデジタルアセットの量を移転する)。したがって、勝ったノードは、ある量のデジタルアセットを「マイニング」したと言える。この特殊なタイプのトランザクションは「生成(generation)」トランザクションと呼ばれることもある。それは自動的に新しいブロック151nの一部を形成する。この報酬は、マイナー104Mがproof-of-work競争に参加する動機を与える。多くの場合、通常の(非生成)トランザクションは、そのトランザクションが含まれたブロック151nを生成した勝ったマイナー104Mにさらに報酬を与えるために、追加のトランザクション手数料をそのアウトプットの1つにおいて指定する。
【0031】
マイニングに含まれる計算リソースのために、典型的には、少なくともマイナーノード104Mの各々は、1つ以上の物理的サーバユニットを含むサーバ、又はデータセンタ全体の形態をとる。各転送ノード104M及び/又は記憶ノード104Sは、サーバ又はデータセンタの形態をとることもできる。しかしながら、原則として、任意の所与のノード104は、ユーザ端末又は互いにネットワーク接続されたユーザ端末のグループを含むことができる。
【0032】
各ノード104のメモリは、それぞれの1つ以上の役割を実行し、ノードプロトコルに従ってトランザクション152を処理するために、ノード104の処理装置上で動作するように構成されたソフトウェアを記憶する。ノード104に属するいずれの動作も、それぞれのコンピュータ装置の処理装置上で実行されるソフトウェアによって実行され得ることが理解されよう。ノードソフトウェアは、アプリケーションレイヤにおける1つ以上のアプリケーション、又はオペレーティングシステムレイヤ若しくはプロトコルレイヤのような下位レイヤ、又はこれらの任意の組合せの中に実装されてよい。また、本明細書で使用される「ブロックチェーン」という用語は、一般的な技術の種類を指す一般的な用語であり、任意の特定の専有のブロックチェーン、プロトコル又はサービスに限定されない。
【0033】
また、ネットワーク101には、消費者ユーザの役割を果たす複数のパーティ103の各々のコンピュータ装置102も接続されている。これらは、トランザクションにおける支払人及び被支払人の役割を果たすが、他のパーティの代わりにトランザクションをマイニングし又は伝播することに必ずしも参加しない。それらは必ずしもマイニングプロトコルを実行するわけではない。2つのパーティ103及びそれぞれの機器102が説明のために示されており、第1パーティ103a及びそのそれぞれのコンピュータ機器102a、幾つかの第2パーティ103b及びそのそれぞれのコンピュータ機器102bである。より多くのこのようなパーティ103及びそれらのそれぞれのコンピュータ機器102がシステムに存在し、参加することができるが、便宜上、それらは図示されていないことが理解されよう。各パーティ103は、個人又は組織であってもよい。純粋に例示として、第1パーティ103aは、本明細書においてAliceと称され、第2パーティ103bは、Bobと称されるが、これは限定的なものではなく、本明細書においてAlice又はBobという言及は、それぞれ「第1パーティ」及び「第2パーティ」と置き換えることができることは理解されるであろう。
【0034】
各パーティ103のコンピュータ機器102は、1つ以上のプロセッサ、例えば1つ以上のCPU、GPU、他のアクセラレータプロセッサ、特定用途向けプロセッサ、及び/又はFPGAを備えるそれぞれの処理装置を備える。各パーティ103のコンピュータ機器102は、さらに、メモリ、すなわち、非一時的コンピュータ読取可能媒体又は媒体の形態のコンピュータ読取可能記憶装置を備える。このメモリは、例えば、ハードディスクなどの磁気媒体、SSD、フラッシュメモリ又はEEPROMなどの電子媒体、及び/又は光ディスクドライブなどの光学的媒体を使用する1つ以上のメモリユニットを含んでもよい。各パーティ103のコンピュータ機器102上のメモリは、処理装置上で動作するように配置された少なくとも1つのクライアントアプリケーション105のそれぞれのインスタンスを含むソフトウェアを記憶する。所与のノード104に属するいずれの動作も、それぞれのコンピュータ機器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のインスタンスは、P2Pネットワーク106の転送ノード104Fの少なくとも1つに動作可能に結合される。これにより、クライアント105のウォレット機能は、トランザクション152をネットワーク106に送信することができる。クライアント105は、また、記憶ノード104のうちの1つ、一部、又は全部にコンタクトして、それぞれのパーティ103が受領者である任意のトランザクションについてブロックチェーン150に問い合わせることができる(又は、実施形態では、ブロックチェーン150は、部分的にその公開視認性を通じてトランザクションの信頼を提供する公開的設備であるため、実際には、ブロックチェーン150内の他のパーティのトランザクションを検査する)。各コンピュータ機器102上のウォレット機能は、トランザクションプロトコルに従ってトランザクション152を形成し、送信するように構成される。各ノード104は、ノードプロトコルに従ってトランザクション152を検証するように構成されたソフトウェアを実行し、転送ノード104Fの場合は、ネットワーク106全体にトランザクション152を伝搬させるためにトランザクション152を転送する。トランザクションプロトコルとノードプロトコルは互いに対応し、所与のトランザクションプロトコルは所与のノードプロトコルと共に所与のトランザクションモデルを実装する。同じトランザクションプロトコルが、ブロックチェーン150内の全てのトランザクション152に使用される(ただし、トランザクションプロトコルは、トランザクションの異なるサブタイプを許可することができる)。同じノードプロトコルは、ネットワーク106内の全てのノード104によって使用される(ただし、多くのノードは、そのサブタイプに対して定義されたルールに従って異なるトランザクションのサブタイプを異なるように処理し、また、異なるノードは異なる役割を引き受け、従って、プロトコルの異なる対応する側面を実装することができる)。
【0039】
上述のように、ブロックチェーン150は、ブロック151のチェーンを含み、各ブロック151は、前述のように、proof-of-workプロセスによって作成された1つ以上のトランザクション152のセットを含む。各ブロック151は、また、ブロック151への逐次的順序を定義するように、チェーン内の先に生成されたブロック151を遡ってポイントするブロックポインタ155を含む。ブロックチェーン150はまた、proof-of-workプロセスによって新しいブロックに含まれることを待つ有効なトランザクション154のプールを含む。各トランザクション152(生成トランザクション以外)は、トランザクションのシーケンスに順序を定義するために、前のトランザクションへのポインタを含む(注:トランザクション152のシーケンスは、分岐することが許される)。ブロック151のチェーンは、チェーンの最初のブロックであったジェネシスブロック(genesis block (Gb))153にまで戻る。チェーン150の初期に1つ以上のオリジナルトランザクション152は、先行するトランザクションではなくジェネシスブロック153を指し示した。
【0040】
所与のパーティ103、例えばAliceがブロックチェーン150に含まれる新たなトランザクション152jを送信したいと望む場合、彼女は関連するトランザクションプロトコルに従って(彼女のクライアントアプリケーション105のウォレット機能を使用して)新たなトランザクションを定式化する(formulate)。次に、クライアントアプリケーション105からトランザクション152を、彼女が接続されている1つ以上の転送ノード104Fの1つに送信する。例えば、これは、Aliceのコンピュータ102に最も近いか又は最も良好に接続されている転送ノード104Fであってもよい。任意の所与のノード104が新しいトランザクション152jを受信すると、ノードプロトコル及びそのそれぞれの役割に従って、それを処理する。これは、最初に、新たに受信されたトランザクション152jが「有効」であるための特定の条件を満たしているかどうかをチェックすることを含み、その例については、簡単に詳述する。幾つかのトランザクションプロトコルでは、検証のための条件は、トランザクション152に含まれるスクリプトによってトランザクションごとに構成可能であってよい。或いは、条件は単にノードプロトコルの組み込み機能であってもよく、或いはスクリプトとノードプロトコルの組み合わせによって定義されてもよい。
【0041】
新たに受信されたトランザクション152jが、有効であると見なされるテストに合格したという条件で(すなわち、「有効である」という条件で)、トランザクション152jを受信した任意の記憶ノード104Sは、そのノード104Sに維持されているブロックチェーン150のコピー内のプール154に、新たに有効とされたトランザクション152を追加する。さらに、トランザクション152jを受信する任意の転送ノード104Fは、検証済みトランザクション152をP2Pネットワーク106内の1つ以上の他のノード104に伝播する。各転送ノード104Fは同じプロトコルを適用するので、トランザクション152jが有効であると仮定すると、これは、P2Pネットワーク106全体に間もなく伝播されることを意味する。
【0042】
ひとたび1つ以上の記憶ノード104で維持されるブロックチェーン150のコピー内のプール154に入ると、マイナーノード104Mは、新しいトランザクション152を含むプール154の最新バージョンのproof-of-workパズルを解決するために競争を開始する(他のマイナー104Mは、依然として、プール154の古いビューに基づいてパズルを解決しようとしているが、そこに到達した者は誰でも、最初に、次の新しいブロック151が終了し、新しいプール154が開始する場所を定義し、最終的には、誰かが、Aliceのトランザクション152jを含むプール154の一部のパズルを解決する)。一旦、新しいトランザクション152jを含むプール154についてproof-of-workが行われると、ブロックチェーン150内のブロック151の1つの一部となる。各トランザクション152は、以前のトランザクションへのポインタを含むので、トランザクションの順序もまた、不変的に記録される。
【0043】
異なるノード104は、最初に所与のトランザクションの異なるインスタンスを受信する可能性があり、従って、1つのインスタンスがマイニングされてブロック150になる前に、どのインスタンスが「有効」であるかについて矛盾するビューを有することがあり、その時点で、全部のノード104は、マイニングされたインスタンスのみが有効なインスタンスであることに合意する。ノード104が1つのインスタンスを有効であるとして受け入れ、次に第2のインスタンスがブロックチェーン150に記録されていることを発見した場合、該ノード104は、これを受け入れなければならず、最初に受け入れた未だマイニングされていないインスタンスを破棄する(つまり、無効であるとして扱う)。
【0044】
<UTXOに基づくモデル>
図2は、トランザクションプロトコルの例を示している。これは、UTXOベースのプロトコルの例である。トランザクション152(「Tx」と略す)は、ブロックチェーン150(各ブロック151は1つ以上のトランザクション152を含む)の基本的なデータ構造である。以下は、アウトプットベース又は「UTXO」ベースのプロトコルを参照して説明される。しかし、これは、全ての可能な実施形態に限定されるものではない。
【0045】
UTXOベースのモデルでは、各トランザクション(「Tx」)152は、1つ以上のインプット202及び1つ以上のアウトプット203を含むデータ構造を含む。各アウトプット203は、未使用トランザクションアウトプット(UTXO)を含んでもよく、これは、別の新しいトランザクションのインプット202のソースとして使用することができる(UTXOが未だ償還されていない場合)。UTXOは、デジタルアセット(値のストア)の量を指定する。それは、情報の中でも特にその元となったトランザクションのトランザクションIDを含む。トランザクションデータ構造はまた、ヘッダ201も含んでよく、ヘッダ201は、インプットフィールド202及びアウトプットフィールド203のサイズの指示子を含んでもよいヘッダ201を含んでよい。ヘッダ201は、トランザクションのIDも含んでもよい。実施形態において、トランザクションIDは、トランザクションデータのハッシュ(トランザクションID自体を除く)であり、マイナー104Mに提出された未処理トランザクション152のヘッダ201に格納される。
【0046】
例えばAlice103aは、問題のデジタルアセットの量をBob103bに移転するトランザクション152jを作成したいと考えているとする。
図2において、Aliceの新しいトランザクション152jは「Tx
1」とラベル付けされている。これは、Aliceにロックされているデジタルアセットの量を、シーケンス内の先行するトランザクション152iのアウトプット203に取り入れ、その少なくとも一部をBobに移転する。先行するトランザクション152iは、
図2において「Tx
0」とラベル付けされている。Tx0とTx1は、単なる任意のラベルである。これらは、必ずしも、Tx0がブロックチェーン151の最初のトランザクションであること、又は、Tx1がプール154の直ぐ次のトランザクションであることを意味しない。Tx
1は、まだAliceへのロックされた未使用アウトプット203を有する任意の先行する(つまり祖先)トランザクションのいずれかを指し示すことができる。
【0047】
先行するトランザクションTx0は、Aliceがその新しいトランザクションTx1を作成するとき、又は少なくとも彼女がそれをネットワーク106に送信するときまでに、既に検証され、ブロックチェーン150に含まれていてもよい。それは、その時点で既にブロック151のうちの1つに含まれていてもよく、或いは、プール154内でまだ待機していてもよく、その場合、新しいブロック151にすぐに含まれることになる。あるいは、Tx0及びTx1が生成されネットワーク102に送信されることができ、あるいは、ノードプロトコルが「孤児(orphan)」トランザクションのバッファリングを許容する場合にはTx1の後にTx0が送信されることもできる。ここでトランザクションのシーケンスの文脈で使用される「先行する」及び「後の」という用語は、トランザクション内で指定されたトランザクションポインタ(どのトランザクションがどの他のトランザクションを指すかなど)によって定義されるシーケンス内のトランザクションの順序を指す。それらは、「先行する」及び「相続する」又は「祖先」及び「子孫」、「親」及び「子」、等により、等しく置き換えられ得る。これは、必ずしも、それらが作成され、ネットワーク106に送られ、又は任意の所与のノード104に到達する順序を意味しない。それにもかかわらず、先行するトランザクション(祖先トランザクション又は「親」)を指す後続のトランザクション(子孫トランザクション又は「子」)は、親トランザクションが検証されない限り、検証されない。親の前にノード104に到着した子は孤児とみなされる。それは、ノードプロトコル及び/又はマイナーの行動に応じて、親を待つために特定の時間、破棄又はバッファリングされることがある。
【0048】
先行するトランザクションTx0の1つ以上のアウトプット203のうちの1つは、本明細書でUTXO0とラベル付けされた特定のUTXOを含む。各UTXOは、UTXOによって表されるデジタルアセットの量を指定する値と、後続のトランザクションが検証されるために、従ってUTXOが正常に償還されるために、後続のトランザクションのインプット202の中のアンロックスクリプトによって満たされなければならない条件を定義するロックスクリプトとを含む。典型的には、ロックスクリプトは、特定のパーティ(それが含まれているトランザクションの受益者)に量をロックする。すなわち、ロックスクリプトは、標準的に以下のようなアンロック条件を定義する:後続のトランザクションのインプット内のアンロックスクリプトは、先行するトランザクションがロックされたパーティの暗号署名を含む。
【0049】
ロックスクリプト(別名scriptPubKey)は、ノードプロトコルによって認識されるドメイン固有の言語で書かれたコードの一部である。そのような言語の特定の例は、「スクリプト」(Script,capital S)と呼ばれる。ロックスクリプトは、トランザクションアウトプット203を消費するために必要な情報、例えば、Aliceの署名の必要条件を指定する。トランザクションのアウトプットには、アンロックスクリプトが現れる。アンロックスクリプト(別名:scriptSig)は、ロックスクリプトの基準を満たすために必要な情報を提供するドメイン固有の言語で書かれたコードの一部である。例えば、Bobの署名を含んでもよい。アンロックスクリプトは、トランザクションのインプット202に現れる。
【0050】
図示の例では、Tx0のアウトプット203のUTXO0は、ロックスクリプト[ChecksigPA]を含み、これは、UTXO0が償還されるために(厳密には、UTXO0を償還しようとする後続のトランザクションが有効であるために)、Aliceの署名SigPAを必要とする。[ChecksigPA]は、Aliceの公開鍵と秘密鍵のペアからの公開鍵PAを含む。Tx1のインプット202は、Tx1を指すポインタ(例えば、そのトランザクションID、実施形態ではトランザクションTx0全体のハッシュであるTxID0による)を含む。Tx1のインプット202は、Tx0の任意の他の可能なアウトプットの中でそれを識別するために、Tx0内のUTXO0を識別するインデックスを含む。Tx1のインプット202は、さらに、Aliceが鍵ペアからのAliceの秘密鍵をデータの所定の部分(暗号において「メッセージ」と呼ばれることもある)に適用することによって作成された、Aliceの暗号署名を含むアンロックスクリプト<SigPA>を含む。有効な署名を提供するためにAliceが署名する必要があるデータ(又は「メッセージ」)は、ロックスクリプトにより、又はノードプロトコルにより、又はこれらの組み合わせによって定義され得る。
【0051】
新しいトランザクションTx1がノード104に到着すると、ノードはノードプロトコルを適用する。これは、ロックスクリプトとアンロックスクリプトを一緒に実行して、アンロックスクリプトがロックスクリプトで定義されている条件(この条件は1つ以上の基準を含むことができる)を満たしているかどうかをチェックすることを含む。実施形態では、これは、2つのスクリプトの連結を含む。
【数1】
ここで、「||」は連結を表し、「<...>」はスタックにデータを配置することを意味し、「[...]」はアンロックスクリプトに含まれる機能である(本例では、スタックベースの言語)。同等に、スクリプトは。、スクリプトを連結するのではなく共通のスタックにより1つずつ実行されてよい。いずれの方法でも、一緒に実行する場合、スクリプトは、Tx
0のアウトプット内のロックスクリプトに含まれるAliceの公開鍵P
Aを使用して、Tx
1のインプット内のロックスクリプトが、データの期待部分に署名するAliceの署名を含むことを認証する。また、データの期待部分(「メッセージ」)も、この認証を実行するためにTx0に含まれる必要がある。実施形態において、署名されたデータは、Tx0の全体を含む(従って、別個の要素は、データの署名された部分がすでに本質的に存在するので、データの署名された部分の指定にクリアに含まれる必要がある)。
【0052】
公開-秘密暗号法による認証の詳細は、当業者には周知であろう。基本的に、Aliceが彼女の秘密鍵によりメッセージを暗号化することによってメッセージに署名した場合、Aliceの公開鍵とそのメッセージが明らか(暗号化されていないメッセージ)ならば、ノード104のような別のエンティティは、そのメッセージの暗号化されたバージョンがAliceによって署名されていなければならないことを認証することができる。署名は、典型的には、メッセージをハッシュし、ハッシュに署名し、署名としてメッセージのクリアなバージョンにこれをタグ付けすることによって、公開鍵の所有者が署名を認証することを可能にする。従って、実施形態では、特定のデータ片又はトランザクションの部分等に署名するという言及は、データ片又はトランザクションの部分のハッシュに署名することを意味し得る。
【0053】
Tx1内のアンロックスクリプトが、Tx0のロックスクリプトで指定された1つ以上の条件を満たす場合(示される例では、Aliceの署名がTx1内で提供され、認証されている場合)、ノード104は、Tx1が有効であるとみなす。それがマイニングノード104Mである場合、これは、proof-of-workを待つトランザクションのプール154にそれを追加することを意味する。それが転送ノード104Fである場合、それはトランザクションTx1をネットワーク106内の1つ以上の他のノード104に転送し、それによって、それがネットワーク全体に伝搬されることになる。一旦、Tx1が検証され、ブロックチェーン150に含まれると、これは、Tx0からのUTXO0を消費したものとして定義する。Tx1は、未使用トランザクションアウトプット203を使用する場合にのみ有効であることに留意されたい。別のトランザクション152によってすでに消費されたアウトプットを消費しようとする場合、Tx1は、たとえ他のすべての条件が満たされていても無効となる。従って、ノード104は、先行するトランザクションTx0において参照されたUTXOが既に使用されているかどうか(既に別の有効なトランザクションへの有効なインプットを形成しているかどうか)もチェックする必要がある。これが、ブロックチェーン150がトランザクション152に定義された順序を課すことが重要である理由の1つである。実際には、所与のノード104は、トランザクション152が消費されたUTXO203をマークする別個のデータベースを維持することができるが、最終的には、UTXOが消費されたかどうかを定義するのは、ブロックチェーン150内の別の有効なトランザクションへの有効なインプットを既に形成しているかどうかである。
【0054】
所与のトランザクション152の全部のアウトプット203の中で指定された総量が全部のそのインプット202により指される総量より大きい場合、これは、殆どのトランザクションモデルにおいて無効の別の基礎である。従って、このようなトランザクションは、伝播されず、マイニングされてブロック151にされることもない。
【0055】
UTXOベースのトランザクションモデルでは、所定のUTXOを全体として使用する必要があることに注意する。UTXOで定義されている量のうち、別の分量が消費されている一方で、分量を「残しておく」ことはできない。ただし、UTXOからの量は、次のトランザクションの複数のアウトプットに分割できる。例えば、Tx0のUTXO0で定義された量は、Tx1の複数のUTXOに分割できる。したがって、AliceがBobにUTXO0で定義された量のすべてを与えることを望まない場合、彼女は残りの量を使って、Tx1の第2のアウトプットの中で自分自身にお釣りを与えるか、又は別のパーティに支払うことができる。
【0056】
実際には、Aliceは通常、勝ったマイナーのための手数料も含める必要がある。なぜなら、今日では、生成トランザクションの報酬だけでは、マイニングを動機付けるには通常十分ではないからである。Aliceがマイナーのための手数料を含まない場合、Tx0はマイナーのノード104Mによって拒否される可能性が高く、したがって、技術的には有効であるが、それは依然として伝搬されず、ブロックチェーン150に含まれない(マイナーのプロトコルは、マイナーが望まない場合には、マイナー104Mにトランザクション152を受け入れるよう強制しない)。一部のプロトコルでは、マイニング料金は、独自の別個のアウトプット203を必要としない(すなわち、別個のUTXOを必要としない)。代わりに、インプット202によって指される総量と、所与のトランザクション152のアウトプット203の中で指定される総量との間の差は、勝ったマイナー104に自動的に与えられる。例えば、UTXO0へのポインタがTx1への唯一のインプットであり、Tx1は1つのアウトプットUTXO1しか持っていないとする。UTXO0で指定されたデジタルアセットの量がUTXO1で指定された量より多い場合、その差は自動的に勝ったマイナー104Mへ行く。しかし、代替的又は追加的に、必ずしも、トランザクション152のUTXO203のうちの独自のものにおいて、マイナー手数料を明示的に指定できることは除外されない。
【0057】
Alice及びBobのデジタルアセットは、ブロックチェーン150内の任意のトランザクション152の中で彼らにロックされた未使用UTXOで構成されている。従って、典型的には、所与のパーティ103のアセットは、ブロックチェーン150を通して、様々なトランザクション152のUTXO全体に分散される。ブロックチェーン150内のどこにも、所与のパーティ103の総残高を定義する1つの数値は記憶されていない。各パーティへのロックされた、別の将来の(onward)トランザクションに未だ消費されていない全ての様々なUTXOの値をまとめることは、クライアントアプリケーション105におけるウォレット機能の役割である。これは、記憶ノード104Sのいずれかに記憶されたブロックチェーン150のコピーを、例えば、各パーティのコンピュータ機器02に最も近いか、又は最も良好に接続されている記憶ノード104Sに問い合わせることによって行うことができる。
【0058】
スクリプトコードは、概略的に表現されることが多い(すなわち、正確な言語ではない)ことに注意する。例えば、[Checksig PA]を[ChecksigPA]=OP_DUPOP_HASH160<H(PA)>OP_EQUALVERIFYOP_CHECKSIGを意味するように記述し得る。「OP_....」は、スクリプト言語の特定のオペコードを表す。OP_CHECKSIG(「Checksig」とも呼ばれる)は、2つのインプット(署名と公開鍵)を取り込み、楕円曲線デジタル署名アルゴリズム(Elliptic Curve Digital Signature Algorithm (ECDSA))を使用して署名の妥当性を検証するスクリプトオペコードである。ランタイムでは、署名(「sig」')の発生はスクリプトから削除されるが、ハッシュパズルなどの追加要件は、「sig」インプットによって検証されるトランザクションに残る。別の例として、OP_RETURNは、トランザクション内にメタデータを格納することができ、それによってメタデータをブロックチェーン150に不変に記録することができるトランザクションの使用不可能アウトプットを生成するためのスクリプト言語のオペコードである。例えば、メタデータは、ブロックチェーンに格納することが望ましいドキュメントを含むことができる。
【0059】
署名PAは、デジタル署名である。実施形態において、これは楕円曲線secp256k1を使用するECDSAに基づく。デジタル署名は、特定のデータに署名する。実施形態では、所与のトランザクションについて、署名はトランザクションインプットの一部、及びトランザクションアウトプットの全部又は一部に署名する。署名するアウトプットの特定の部分はSIGHASHフラグに依存する。SIGHASHフラグは、署名の最後に含まれる4バイトのコードであり、どのアウトプットが署名されるかを選択する(従って、署名の時点で固定される)。
【0060】
ロックスクリプトは、それぞれのトランザクションがロックされているパーティの公開鍵を含んでいることを表す「scriptPubKey」と呼ばれることがある。アンロックスクリプトは、対応する署名を提供することを表す「scriptSig」と呼ばれることがある。しかし、より一般的には、UTXOが償還される条件が署名を認証することを含むことは、ブロックチェーン150の全てのアプリケーションにおいて必須ではない。より一般的には、スクリプト言語は、1つ以上の条件を定義するために使用され得る。したがって、より一般的な用語「ロックスクリプト」及び「アンロックスクリプト」が好ましい。
【0061】
<クライアントソフトウェア>
図4は、本開示の技術の実施形態を実装するためのクライアントアプリケーション105の例示的な実装を示す。クライアントアプリケーション105は、トランザクションエンジン404と、ユーザインタフェース(UI)レイヤ401と、を含む。トランザクションエンジン404は、上述の方式に従いトランザクション152を形成する、トランザクション及び/又は他のデータをサイドチャネル301を介して受信及び/又は送信する、及び/又はP2Pネットワーク106を通じて伝播されるようにトランザクションを送信するような、クライアント105の基礎にあるトランザクション関連機能を実装するよう構成される。更に、本願明細書に開示される実施形態によると、少なくともBobのクライアント105b(及び場合によっては他のクライアント)のトランザクションエンジン401は、データ転送エンジン403、プログラムランチャー405、及び任意でハイパードキュメントエンジン402を更に含む。ハイパードキュメントエンジン402、データ転送エンジン403、及びトランザクションエンジン404は一緒に、「スマートウォレット」機能406を形成してよい(ハイパードキュメントエンジン402はこの任意的部分である)。これらの種々のモジュールの機能は、間もなく更に詳細に議論される。スマートウォレット機能460は、ここでは単に略して「スマートウォレット」とも呼ばれてよい。
【0062】
UIレイヤ401は、それぞれのユーザコンピュータ機器102のユーザ入力/出力(I/O)手段を介して、機器102のユーザ出力手段によりそれぞれのユーザ103へ情報を出力すること及び機器102のユーザ入力手段によりそれぞれのユーザ103から入力を受信することを含む、ユーザインタフェースをレンダリングするよう構成される。例えば、ユーザ出力手段は、視覚出力を提供する1つ以上のディスプレイスクリーン(タッチ又は非タッチスクリーン)、オーディオ出力を提供する1つ以上のスピーカ、及び/又は触覚出力を提供する1つ以上の触覚出力装置、等を含み得る。ユーザ入力手段は、例えば、(出力手段のために使用されるディスプレイと同じ又は異なり得る)1つ以上のタッチスクリーンの入力センサマトリックス、マウス、トラックパッド、若しくはトラックボールのような1つ以上のカーソルに基づく装置、会話若しくは音声入力を受信する1つ以上のマイクロフォン及び会話若しくは音声認識アルゴリズム、手動若しくは身体ジェスチャの形式で入力を受信する1つ以上のジェスチャに基づく入力装置、又は1つ以上の機械的ボタン、スイッチ、若しくはジョイスティック、等を含み得る。
【0063】
スマートウォレット406のトランザクションエンジン403は、ブロックチェーン150条のトランザクション152のペイロード(例えば、アウトプットに基づくトランザクションモデルにおける使用不可能アウトプット)に格納されたコードにアクセスするよう動作し、そこからのコードをプログラムランチャー405に渡す。コードランチャー405は、このコードを実行し、プログラムの任意のユーザに見える効果をUIレイヤ401を通じてユーザ103bに提示する。特に、ここに開示される実施形態によると、コードランチャー405は、ブロックチェーン150上の複数のトランザクション152からプログラムファイルを再構成し、再構成したプログラムファイルを実行するよう構成される。これは、間もなく更に詳細に議論される。
【0064】
注:本願明細書において種々の機能が同じクライアントアプリケーション105に統合されるとして説明されることがあるが、これは、必ずしも限定的ではなく、代わりに、それらは2つ以上の異なるアプリケーションのスーツに実装されてよく、例えば一方が他方へのプラグインであるか、又はAPI(application programming interface)を介してインタフェースする。例えば、モジュール401、402、403、404、405のうちのいずれかの機能は、任意の組合せで2つ以上の別個のアプリケーションに実装されてよい。また、記載の機能の一部又は全部が、例えばオペレーティングシステムレイヤに実装されることを除外しない。本願明細書のどこかで、単一の又は所与のアプリケーション105等を参照する場合、これが単に例であること、より一般的には、記載の機能が任意の形式のソフトウェアで実装され得ることが理解される。
【0065】
<ブロックチェーンに基づくプログラムファイルフォーマット>
基本技術インフラストラクチャとしてのブロックチェーン技術の統合をサポートするために、望ましくは、上位アプリケーションを構築しアクセスする直接的処理が存在することが望ましい。これを行うために、開発者が、トランザクション内に含むだけでなく、ブロックチェーントランザクション内に格納されたコードを実行するようソフトウェアを構築するために、標準データフォーマットを提供することが望ましい。これは、データ要求のため及びローカルコンピュータ、中央処理ユニット(CPU)、及びコンピュータ記憶装置上でソフトウェアの接続を実現するためにブロックチェーンと直ちに相互作用できる専用スマートウォレットを含んでよい。ブロックチェーンデータを従来のプログラミング言語に統合することができるが、より広範なアプリケーションが、ブロックチェーン上に開発可能であり、よりセキュア且つ耐タンパー性デスクトップ及びモバイルアプリケーションを強化する。
【0066】
本願明細書に開示されるシステムは、ロック及びアンロックスクリプト等のために使用されるスクリプト言語以外のプログラミング言語を含むために、トランザクションに対応したファイルフォーマットを提供することにより、ソフトウェアとブロックチェーンとの間の直接相互作用を実現する。C、C++、及びJavaのような現在のプログラミング言語には、特定のメモリアドレスへの参照として機能するポインタ(pointers)と呼ばれるオブジェクトがある。本開示は、特定のトランザクションデータ又はメタデータへの参照として機能するプログラミング言語に統合可能なブロックチェーンポインタ(blockchain pointer)と呼ばれてよい同様のオブジェクトを提供する。
【0067】
幾つかの実施形態は、自身のTxIDにより参照されるリンクされたハイパードキュメントによりデータ要求に対する要求及び応答のためのシステムも利用し得る。
【0068】
図5は、本願明細書に開示される実施形態により、ブロックチェーン150上の複数のトランザクション152に渡りプログラムファイルを格納するブロックチェーンに基づくプログラムファイルフォーマットを示す。
図5の左側a)は、ブロックチェーン150上の複数のトランザクション152に渡り格納されるフラグメントフォームのプログラムファイルを示す。フラグメントフォームのプログラムファイルは、ブロックチェーン150上の第1トランザクション152Yに格納されるヘッダファイル501と、1つ以上の本体セクション502i…502nと、を含む。本体セクションの各々は、ブロックチェーン上のそれぞれの第2トランザクション152Zに格納される(更に詳細に後述する
図6も参照)。アウトプットに基づくモデルでは、ヘッダファイル501及び本体セクション502の各々は、そのそれぞれの第1又は第2トランザクション152Y、152Zの使用不可能(un-spendable)アウトプット(例えば、UTXO)に格納されてよい。
【0069】
この例は
図3に概略的に示される。以下の例示的なシナリオでは、Alice103aは、第1及び第2トランザクション152Y、152Zを作成し、それらをブロックチェーン150上に記録させるために、(直接に又は第三者を介して)それらをブロックチェーンネットワーク106へとブロードキャストする提供者パーティである。Bob103bは、プログラムファイル507を再構成するために、ヘッダファイル501及びセクション502をそれぞれの第1及び第2トランザクション152Y、152Zから読み出す消費者パーティである。
【0070】
図3に示すように、アウトプットに基づくモデルでは、第1トランザクション152Yは、ブロックチェーン150上の何からの他の先行するトランザクション152のアウトプットを逆に指す少なくとも1つのインプット202Yを含む。先行するトランザクションのアウトプットは、Aliceに対してロックされたアウトプットであり得る。つまり、従って、Aliceは、第1トランザクション152Yをブロックチェーン150上に記録させるために、彼女自身からデジタルアセットの額を支払っている。第1トランザクション152Yは、標準的に、少なくとも1つの使用可能アウトプット203Y
0を含むよう要求されることができる。これは、受取人に対してアウトプット203Y
0をロックするロックスクリプトを含む。ロックスクリプトは、ブロックチェーンネットワーク106により利用されているトランザクションプロトコルにより認識される関連するスクリプト言語、例えばScript言語で作成される。使用可能アウトプット203Y
0の中で指定される額は、ダスト(つまり無視できる)量であり、及び/又は受取人はAlice自身であることができる。つまり、従って、Aliceは、第1トランザクション152Yをブロックチェーン150上に記録させるために、彼女自身で(及びマイニング手数料を)支払っている。代替として、全てのトランザクションに使用可能アウトプットを含める必要がないトランザクションモデル又はプロトコルが利用され得ることを排除するものではない。何れの方法も、第1トランザクション152Yは、使用不可能アウトプット203Y
1も含む。実施形態では、これは、スクリプト言語の特定のオペコードを、使用不可能アウトプット203Y
1のロックスクリプトに含むことにより、実施される。これは、ブロックチェーンネットワーク106のノードのうちの1つで実行するとき、それが含まれるロックスクリプトの実行を終了するオペコードである。これは、スクリプト言語で作成されていない他の任意のペイロードが、使用不可能アウトプットに含まれることを可能にし、その他の場合にブロックチェーンネットワーク106上のトランザクションとしてのトランザクション152Yの機能に影響を与えない。
【0071】
本願明細書に開示される実施形態によると、このメカニズムは、第1トランザクション152Yの使用不可能アウトプット203Y1に、ヘッダファイル501を含めるために、従って、ヘッダファイル501をブロックチェーン150上の第1トランザクション152Yに格納するために、使用される。ヘッダファイル501は、ブロックチェーンネットワーク106により利用されるトランザクションプロトコルに従いロックスクリプト内で使用されるスクリプト言語(例えば、Script)以外のフォーマット又は言語で作成される。
【0072】
同様のメカニズムは、ブロックチェーン150上のそれぞれの第2トランザクション152Zの使用不可能アウトプット203Z1に本体セクション502の各々を含めるために使用されてよい。各本体部分502は、ロックスクリプトで使用されるスクリプト言語(例えば、Script)以外の言語で作成されたプログラムコードを含む。
【0073】
代替の実装では、ヘッダファイル501及び本体セクション502が、他のトランザクションプロトコル又はモデルにおける異なるメカニズムに従いトランザクションペイロードとして含まれ得ることを排除しない。例えば、代替の実装では、ブロックチェーンネットワーク106は、アカウントに基づくモデルを利用してよく、ヘッダファイル501及び本体部分502の各々は、それぞれのトランザクション152Y、152Zのデータフィールド又はスマートコントラクトに含まれてよい。この場合、ヘッダファイル501及び本体セクション502の各々は、スマートコントラクトを実行するためにノード104により認識されるもの以外の言語で作成されてよい。
【0074】
図5に戻り、ヘッダファイル501は、少なくとも一部のプログラムヘッダ情報503と、1つ以上のトランザクションID504のリストと、を含む。プログラムヘッダ情報503は、再構成されるとプログラムファイル507のヘッダの少なくとも一部を形成する、プログラムファイルの基本ヘッダ情報を含む。これは、例えば、プログラムのバージョン番号、ターゲットコンピュータシステムのバージョン番号、プログラム又は再構成されたプログラムファイルのサイズ、記述子、予約された変数、日付け/タイムスタンプ、及び/又は再構成されたプログラムがエラーを含まないことをチェックするためのチェックサム、のうちの任意の1つ以上又は全部を含んでよい。
【0075】
リスト504に含まれるトランザクションIDは、ブロックチェーン150上のそれぞれの他の第2トランザクション152Zに格納されたプログラムファイルのそれぞれの本体部分502へのポインタとして機能する。
図5の右側b)に示すように、消費者パーティBob103bは、ヘッダファイル501に含まれるそれぞれのトランザクションID504によりポイントされる1つ以上の本体セクション502i…502nの各々とヘッダ情報ヘッダ503を結合することにより形成される未フラグメントフォームでプログラムファイル507のインスタンスを再構成する。
【0076】
実施形態ではヘッダファイル501は、1つ以上の条件505の指示、及び1つ以上の条件を評価するコードスタブ(code stub)506も含んでよい。これらの部分の機能は、後に更に詳細に議論される。
【0077】
図6は、ここではクライアント機器とも呼ばれる消費者パーティ103bのコンピュータ機器102bの例示的なコンピュータアーキテクチャを示す。このアーキテクチャは、単一のユーザ装置でローカルに実装されてよく、又はユーザ装置、サーバリソース又はそれらの組合せを含み得る複数の装置に渡り分散されてよい。
【0078】
クライアント機器102bは、ハードウェア608と、入力/出力(I/O)装置607と、ソフトウェアと、を含む。ハードウェア608は、CPUのような少なくとも1つのプロセッサ609を含む。ハードウェア608は、ランダムアクセスメモリ(RAM)及びハード記憶装置611(つまり、ハードディスク又は固体ドライブ(SSD)のような不揮発性メモリ)も含む。中央処理ユニット(CPU)609は、算術ロジック及び入力/出力動作を実行することにより機械レベルの命令を実行する、電子回路を含む。RAM610は、ソフトウェアとCPU609を有するハードディスク611との間の仲介として機能するデータ及び機械レベル命令の一時記憶を提供する。
【0079】
ユーザ103bは、入力/出力装置607と相互作用でき、コマンドは、オペレーティングシステム602においてソフトウェアへと中継される命令/データへと変換される。I/O装置607の種々のオプションは、
図4を参照して既に上述した。
【0080】
ソフトウェアは、オペレーティングシステム602と、オペレーティングシステム602を実行するプログラムランチャー405及びスマートウォレット機能406と、を含む。オペレーティングシステム602は、コンピュータハードウェア及びソフトウェアリソースを管理するシステムソフトウェアを含む。
【0081】
以下の定義は、本願明細書においても採用されてよい。
【0082】
仮想マシン:コンピュータシステムのエミュレーション。
【0083】
システム仮想マシン:オペレーティングシステム全体を実行するための機能を提供する仮想マシン。ハイパーバイザは、ハードウェアを共有し管理するために、ネイティブ実行(機械コード、コンピュータのCPUにより直接実行される)を使用し、複数の独立した環境が単一の物理マシンに存在することを可能にする。
【0084】
ハイパーバイザ:仮想マシンを生成し実行する、コンピュータソフトウェア、ファームウェア、又はハードウェア。
【0085】
ダイナミンクリンカー:実行されると(「ランタイムにおいて」)永久記憶からRAMへとライブラリの内容をコピーし、ジャンプテーブルを満たしポインタを再配置することにより、実行可能ファイルにより必要な共有ライブラリをロードしリンクするオペレーティングシステムの一部。特定のオペレーティングシステム及び実行可能フォーマットは、ダイナミンクリンカーがどのように機能するか、及びそれがどのように実装されるかを決定する。
【0086】
ライブラリ:コンピュータプログラムにより使用されるリソース群(構成データ、文書、予め記述されたコード、及びサブルーチン、クラス、値又はタイプ仕様)。
【0087】
共有ライブラリ:実行可能ファイル及び更に共有オブジェクトファイルにより共有されるファイル。使用されるモジュールは、プログラムのための単一のモノリシック実行可能ファイルを生成するとき、リンカによりコピーされるのではなく、ランタイムに個々の共有オブジェクトからメモリへとロードされる。
【0088】
アセンブラ:演算及びアドレッシングモードのための記憶及びシンタックスの組合せをそれらの等価な数値(機械コード)へと変換することによりオブジェクトコードを生成するコンピュータプログラム。
【0089】
コンパイラ:あるプログラミング言語で記述されたコンピュータコードを別のものに(標準的には高級言語から低級言語へ)変換して実行可能プログラムを生成するコンピュータプログラム。
【0090】
実行可能ファイル又は実行可能プログラム:コンピュータに符号化命令に従い指示されたタスクを実行させるファイル。最も一般的には、用語「実行」又は「実行可能」は、本願明細書では、任意の方法で実行するソフトウェアを表すことができ、必ずしも例えば低級機械コード命令等の実行に限定されないことに留意する。例えば、「実行する」は、本願明細書では、コンパイル、従って高級言語の実行、アセンブリング、従ってアセンブリレベル言語の実行、又はインタープリットされた言語を解釈することも表し得る。
【0091】
図6は、第1トランザクション152Y及び第2トランザクション152Zを含む、ブロックチェーンネットワーク106に格納されたブロックチェーン150のトランザクション152も示す。
【0092】
動作中、消費者パーティBob103bは、I/O装置607のうちの少なくとも1つを使用して、ブロックチェーン150に格納された第1トランザクション152Yからヘッダファイル501を選択しアクセスする(本願明細書でこの文脈で使用される「第1」及び「第2」は単に任意のラベルである)。幾つかの実施形態では、これは、ハイパーテキストドキュメント601内のハイパーリンクを選択することにより達成されてよい。たと、これは、HTMLで作成されてよいが、従来のハイパーリンクにおけるようにURLへの代わりにブロックチェーン150上のトランザクション152のトランザクションIDへのリンクを可能にする追加のタイプのタグにより補強される。そのような実施形態では、スマートウォレット406のハイパードテキストエンジン402は、UIレイヤ401を通じてBobにハイパーテキストドキュメント601をレンダリングし、ハイパーリンクの選択を検出する。それに応答して、ウォレット406のデータ転送エンジン403をトリガして、ブロックチェーンネットワーク106を介して(記憶ノード104Sをクエリすることにより)ブロックチェーン150上のリンク付けされたトランザクション(第1トランザクション152Y)からヘッダファイル501を読み出す。
【0093】
ハイパーテキストドキュメント601は、Bobのコンピュータ機器102b上のローカルストアから又はWebを介して、アクセスされ得る。代替として、ハイパーテキストドキュメント601自体は、ブロックチェーン150上のソーストランザクション152X内のペイロードデータとして、例えばアウトプットに基づくモデルにおける使用不可能アウトプット内に、格納され得る。この場合、予備ステップで、データ転送エンジン403は、ブロックチェーンネットワーク106を介してブロックチェーン上のソーストランザクション152Xからハイパーテキストドキュメント601にアクセスし、それをハイパーテキストエンジン402に渡して、ユーザ103bに対してレンダリングする。
【0094】
代替の実施形態では、必ずしも、ヘッダファイル501にリンクするためにハイパーテキストドキュメント601を使用する必要はない。代わりに、データ転送エンジン402は、知られている方法でブロックチェーン150を直接クエリすることにより、ヘッダファイル501を読み出してよい。例えば、第1トランザクション152Yの使用可能アウトプット203Y0(おそらくダスト額のための)は、Bob103bにアドレスされてよく、従って、彼が従来のウォレット機能を用いてブロックチェーン150上でそれを見付けることを可能にする。及び/又は、Alice103a又は第三者は、第1トランザクション152Yのアドレスを、オフチェーンのサイドチャネル(図示しない)を介してBobにシグナリングしてよい。そのような実施形態では、ハイパーテキストエンジン402は、ウォレット機能406の部分として必要ない。
【0095】
アクセスされる手段が何であろうと、ヘッダファイル501は、ウォレット406のデータ転送エンジン403により読み出され、プログラムランチャー405に渡される。プログラムランチャー405は、読み出されたヘッダファイル501から1つ以上のトランザクションID504を読み出し、(ここでも、1つ以上の記憶ノード104Sにクエリすることにより)ウォレット406のデータ転送エンジン403にブロックチェーン上のそれぞれの第2トランザクション502からそれぞれの本体セクション502を読み出させるために、これらをポインタとして使用するよう構成される。プログラムランチャー405は、次に、プログラムファイル507を再構成するために、プログラムヘッダ情報503を、1つ以上の読み出した本体セクション502と結合する。プログラムランチャー405は、再構成されたプログラムファイルを実行してよい。代替又は追加で、それは、再構成されたプログラムファイル507をメモリに格納し、又はチェーン150上の別のトランザクション152に戻してよく、及び/又は、それは、実行又は格納のために第三者に再構成されたファイル507を通信してよい。
【0096】
本体セクション502の少なくとも1つの少なくとも部分は、所望のアプリケーションのプログラムコードを含む。実施形態では、本体セクション502のうちの1つ以上は、プログラムコードにより操作されるべきデータ(つまり、ターゲットデータ又はオペランドデータ)、及び/又はプログラムコードをコンパイル及び/又はリンクする際に使用するための1つ以上のライブラリも含んでよい。
【0097】
プログラムファイル507の本体セクション502のプログラムコードは、C、C++、Java Script、Python、Basic、等のような任意の適切な言語で記述されてよい。それは、ロックスクリプトのために使用されるスクリプト言語(例えば、Script)以外の言語で記述される。従って、このコードは、実施形態において非スクリプトコードと呼ばれてよい。プログラムは、開発者により望まれる任意のアプリケーション機能、例えばゲーム、オフィスツール、通信クライアント、又は診断ツール、等を有してよい。消費者パーティ103bは、エンドユーザ、又はマイナーのようなノード104のオペレータであってよい。消費者機器(クライアント機器)102bは、ユーザ機器、サーバリソース、又はそれらの組合せを含んでよい。幾つかの場合には、消費者機器102bは、追加で、純粋な消費者ではなく、ブロックチェーンネットワーク106のノード104の役割を果たしてよい。
【0098】
実施形態では、プログラムランチャー405は、仮想マシンの形式をとってよい。それは、コンパイラ603、アセンブラ604、及び/又はリンカ605を含んでよい。それは、1つ以上の予め格納されたライブラリ606を含んでよい。プログラムファイル507の実行は、高級コードのコンパイル、アセンブリレベルコードのアセンブリング、及び/又はリンク付けを含んでよい。リンキングの場合には、これは、異なるトランザクションからのセクション502の間のリンク付け、所与のセクション502内の部分のリンク付け、及び/又は予め格納されたライブラリ606のうちの1つとのリンク付けを含んでよい。更なる代替の実施形態では、プログラムファイル507の実行は、インタープリットされた言語の高級コードのインタープリットを含んでよい。更に別の代替では、プログラムは、既に、低級機械コードを含んでよく、この場合には、実行は機械コードの実行を含む。
【0099】
注:ヘッダファイル501自体は、プログラムコードの部分を含む本体セクション(図示しない)を含んでよく、これは、トランザクションID504によりポイントされる1つ以上の本体セクション502と一緒に、最終的な再構成されたプログラムファイル507内のセクションのうちの1つとして含まれてよいことも排除されない。
【0100】
実施形態では、ヘッダファイル501は、任意で、本体セクション502のうちの1つ以上、又は全部を実行するための1つ以上の条件を指定する部分505を含んでよい。これらは、どんな環境下で本体セクション502が実行できるかを制御する。例えば、これらは、ファイルを再構成するまたは実行するために、本体セクションのうちの1つ以上又は全部に誰がアクセスできるかを決定する1つ以上のアクセス制御を含んでよい。より一般的には、条件505は、本体セクション502のうちの1つ以上又は全部に関連付けられる任意の条件、例えば、どんなオペレーティングシステム上でクライアント機器102bが使用されているか(例えば、BobがWindowsプログラムをMac上で実行しようと試みていないかチェックするため)、又はクライアント機器102bが十分なメモリを有するかどうかという条件(conduction)のような互換性条件、を含み得る。望ましくは、ヘッダファイル501は、条件505を評価するためのコードスタブ(code stub)506も含む。これは、本体セクション502のうちの1つではなく、最終的な再構成されたプログラムファイル507に含まれる必要はない。代わりに、ヘッダファイル501がブロックチェーン150から読み出されると、コードスタブ506がコードランチャーにより自動的に実行される。しかしながら、本体セクションのように、コードスタブ506は、ロックスクリプトのために使用されるスクリプト言語以外の言語(例えば、非スクリプト言語以)で記述されてよい。
【0101】
実行すると、コードスタブ506は、条件505を評価するための関連機能を実施する。代替として、評価が、Bobの機器102bに予め格納されたコードにより又はAlice若しくは第三者により実行されることが排除されない。
図5に別個の要素として概略的に示したが、幾つかの実施形態では、コードスタブ506を利用するので、条件505はスタブ506のコー^殿統合部分としてスタブ506に統合され得ることにも留意する。代替として、しかしながら、条件505は、実際に、ヘッダファイル501の個別の部分で指定され、コードスタブ506により参照され得る。
【0102】
条件505は、例えば1つ以上のアクセス条件を含んでよく、それにより、本体セクション502のうちの1つ以上へのアクセスは、プログラムファイル107を再構成しようと試みている消費者パーティのアイデンティティを条件とする。この場合、評価は、消費者パーティ103bのアイデンティティがアクセス条件505の中で指定されたアイデンティティと同じであることをチェックすることを含む。それは、消費者パーティ103bのアイデンティティを認証することも含んでよい。適切な認証及びアイデンティティチェック技術は、それら自体が、当業者に馴染みのあるものである。
【0103】
別の代替又は追加の例として、条件505は、プログラムファイル107を再構成しようとしている費者パーティ103bのクライアントコンピュータ機器102bの互換性(つまり、本体セクション502のうちの1つ以上との互換性)に関する条件である、1つ以上の互換性条件を含んでよい。この場合、評価は、コンピュータ機器102bが互換性条件505の中で指定された1つ以上の技術仕様に適合することをチェックすることを含む。適切な互換性チェック技術は、それら自体が、当業者に馴染みのあるものである。
【0104】
ヘッダファイル501内に指定された条件505が満たされない場合、コードランチャー405は、i)ブロックチェーン150からの本体セクション502のうちの1つ以上又は全部に全くアクセスしないか、又はii)少なくとも最終的な再構成されたプログラムファイル507にそれらを含まない。これは、プログラムファイル507が再構成されないこと、又は削減された機能のみを有する(消費者パーティ103及び/又は彼のコンピュータ機器102bが関連する条件505を満たさない任意の本体セクション502が欠如している)プログラムファイル507のバージョンが生成されることを意味してよい。
【0105】
実施形態では、ヘッダファイル501内のリスト504は、プログラムファイル507の複数の本体セクションを格納する複数のトランザクションIDをポイントする。幾つかのそのような実施形態では、本体部分のうちの異なるものに関連付けられた異なるそれぞれの条件505が存在してよい。これは、アクセスの異なるティアを生成するために使用できる。この例示的な適用は、テキストファイルから読み出される及びそれに書き込まれるプログラムであり得る。「READ」機能及び「WRITE」機能は、コードの2つの別個の部分であり、それぞれ、それ自体のアクセス制御を有する。
【0106】
幾つかの実施形態では、ヘッダファイル501は、AliceとBobとの間で共有される共有シークレットに基づき暗号化された暗号化形式でチェーン150上に格納され得る。これは、公衆ではなくBob(及び共有シークレットを知る任意の他の者)のみが、ヘッダファイル501にアクセスし、従ってプログラムファイル507を再構成することを可能にする。共有シークレットは、オフチェーンのサイドチャネル(示されない)を介するAliceとBobとの間の鍵交渉処理又はオンチェーン処理により取得され得る。代替として、他の実施形態では、ヘッダファイル501は、暗号化される必要がなく、代わりに、ブロックチェーン150を介して公衆に自由に利用可能にされてよい。
【0107】
トランザクションに格納されたデータは、UTXOセット内に存続できる。実施形態では、情報を更新するために、データを含むアウトプットを使用できる。前のデータはブロックチェーンに記録されるが、最新の情報のみがUTXOセット内に存在する。従って、ブロックチェーンポインタは、常に、最新データとしてUTXOセット内に格納されたデータを参照できる。
【0108】
最新のUTXOのレコードは、各記憶及び/又はマイニングノード104S、104MにおけるUTXOセットに格納される。これは、ブロックチェーン150の最新状態の反映であり、標準的に、ブロックチェーン150の完全なコピーを格納する全部のマイナー及び幾つかのノードにより保持される。ブロックチェーンに記録されると、既存のトランザクションは変更できない。代わりに、従って、実施形態では、更新は、チェーンに新しいトランザクションを後に追加することにより実施できる。ここで、新しいトランザクションは、更新されているデータを格納する既存のトランザクションの使用可能アウトプットを使用する。従って、既存のトランザクション(更新されているもの)は、少なくとも使用可能アウトプット(及び、データが含まれる場合には、OP_RETURN等の下で使用不可能アウトプットである可能性がある)を含み得る。検証されると、使用可能アウトプットは、記憶及び/又はマイニングノード104S、104Mの一部又は全部において維持されるUTXOセットに含まれる。更新するために、既存のトランザクションの使用可能UTXOを使用し、更新されたデータを新しいトランザクションに(例えば、ここでも、OP_RETURNオペコード等を用いて新しいトランザクションの新しい使用不可能アウトプットに)含んでよい。検証されると、この新しいトランザクションは、今やUTXOセットに含まれる。従って、最新の情報は、各記憶及び/又はマイニングノード104S/Mにより維持されるUTXOセット内で常に利用可能である。
【0109】
上述の概念の幾つかの例示的な実装の詳細は、以下に詳細に議論される。
【0110】
実行可能ファイルは、実行時にコードにより必要とされる任意のデータ、ライブラリ、又はスクリプトと共に、アセンブリレベルコードで構成される。標準的に、これは、オペレーティングシステムに依存して標準化されたフォーマットで構成される。例えば、Windowsにおけるポータブル実行可能(portable executable (PE))フォーマット、Linux(登録商標)における実行可能及びリンク可能フォーマット(executable and linkable format (ELF))である。構造はフォーマットにより変化するが、それは、標準的に以下のコンポーネントで構成される:
・マシン及びバージョン情報、ファイルサイズ、及びファイルデータへのポインタのような情報を指定するプログラムヘッダ;
・ファイルに含まれるデータを参照するセクションヘッダテーブル;
・実行のためのコード及び他の要件を含むデータセクション。
【0111】
必要なデータが格納されているメモリアドレスへの参照が、ファイル内で指定される。このファイル及びその依存関係の各々は、ディスクに格納され、実行時にファイル内で指定された命令に基づきメモリ内で再構成される。
【0112】
ここで、ファイル及び依存関係をローカルディスクに格納する代わりに、それがブロックチェーン上に非集中化方法で格納される同様の実行可能ファイルフォーマットが開示される。このファイルフォーマットは、本願明細書では、ブロックチェーン実行可能フォーマット(blockchain executable format (BEF))と呼ばれてよい。
【0113】
アセンブリレベルコード、必要なライブラリ及び場合によっては重要なデータも、ブロックチェーン150上に格納され、圧縮され、及び参照される。各コンポーネントは、個別のトランザクション152に格納され、ヘッダファイル501は、任意のヘッダ情報503、条件505及び/又はスタブ506と一緒にTxID504を保持するだけでよい。構成、リンク付け、及び実行処理は、全部、以下の図に示すように統合スマートウォレット/仮想マシンにより実行できる。
【0114】
ヘッダファイル501は、以上に列挙された情報(バージョン、チェックサム、等)の一部又は全部を含むヘッダ503を有する。BEFファイル507をフラグメント化するとき、実行可能ファイルスタブ506及びヘッダ503は、再アセンブリ及び任意のアクセスチェック505のために必要なTxID504と一緒に単一のトランザクション152Yに格納される。このトランザクション152Yは、ファイル507の圧縮バージョンとも呼ばれる。スタブ506は、ファイル507全体のアクセス条件をチェックする実行可能コードである。
【0115】
BEF実行は、以下のように生じ得る。方法は、以下の
図7A~7Bにも示される。
【0116】
図7Aのステップでは、初期ファイル要求が、前のブロックチェーンに埋め込まれたHTML文書、ユーザ入力又はローカル実行コードから開始され、ブロックチェーンネットワーク106へ送信される。それに応答して、ヘッダファイル501が返され、スマートウォレット406により解釈される。
【0117】
ステップS0で、ヘッダファイル501を含むトランザクションのTxIDが、ユーザ103bにより選択される。これは、ハイパーテキスト文書内の既存のハイパーリンク、ローカルに保存されたアドレス、又はローカルで実行されているコード内のブロックチェーンポインタにより行うことができる。
【0118】
ステップS1で、スマートウォレット406は、ヘッダファイル501を含むトランザクション152Yを参照するTxID要求によりBEFファイルを要求する。
【0119】
ステップS2で、ネットワーク106は、トランザクション情報により応答し、スマートウォレット406により解釈される。
【0120】
図7Bのステップは、スマートウォレットがヘッダファイル501内に置かれた互換性及び検証条件505をどのようにチェックするかを示す。例えば、これは、スタブ506を実行することにより行われてよい。全部の要件が満たされる場合、ウォレット406は、ヘッダファイル501のTxIDリスト503内でアドレスされた本体502の部分を要求し、実行可能ファイル507がローカルにアセンブリングされる。実行可能ファイルは、必要な任意のローカルライブラリと一緒に、リンカ605に渡される。リンカ605は、次に、メモリ610又は611内にCPU609上で実行されるファイルを生成する。結果は、UI装置607を通じてユーザに提示され、ブロックチェーン150に書き込まれ、又は追加スクリプト内で使用され得る。
【0121】
ステップS3で、読み出したトランザクションの中のファイルフォーマット構造フラグが分かると、ウォレット406は、BEFファイル507をインタープリットし、BEF文書内で参照される任意の更なるトランザクションがあれば要求する(適用可能な場合には任意のアクセス/鍵条件をチェックする)。
【0122】
ステップS4で、アセンブリングされたファイル507、及び任意のローカルライブラリは、仮想マシン内のリンカ605に渡される。
【0123】
ステップS5で、機械コード及び任意のデータは、実行時にディスク611からプリングされ、メモリ610内でアセンブリングされ、CPU609上で実行される。
【0124】
ステップS6で、アウトプットは、プログラムコードに従いインタープリットされる。これは(図示しないが)、(i)ユーザ103bへのディスプレイ出力、(ii)in-Script計算のためのスタックへのプッシュ、(iii)仮想マシン405で実行する別のコードへの入力としての供給、及び/又は(iv)スマートウォレット406により生成された別のトランザクションによる、新しいデータとしての又は既存データの更新としてのブロックチェーン150への書き込み、を含んでよい。
【0125】
BEFファイルの構造は、
図5に示される。スマートウォレット406によりインタープリットされることが期待されるBEFファイルのフォーマットが提示される。アセンブリングされた構造507は、従来のWindowsPEファイルに似ているが、圧縮のために、ファイルは幾つかの異なるトランザクションへと分解されて、データを独立して管理させ、望ましい場合にはアクセスを制限させることを可能にする。ヘッダファイル501は、再構成のために全部の必要なTxIDポインタ504を含む。
図5の左側a)は、幾つかのトランザクション152Y、152Zに渡り分散されたフラグメント化された実行可能ファイルを示す。ヘッダファイル501は、STUBプログラム506、ヘッダ詳細503、並びに、実行のために必要なSECTIONSテーブル及びデータを保持するトランザクションへの参照504を含む。右側の構造は、ローカルにアセンブリングされた構造を示す。
【0126】
スタブ506は、ファイル507が実行可能な場所、又はどの条件下で実行できるかを制御するために使用できる。ヘッダファイル501の残りの部分は、結果として生じるプログラムのフロー及びフォーマットを決定するコードも含んでよい。これは、簡易なローダであることができ、又は複数のUTXO及びトランザクションを使用できる。インタープリットされたコードは、ユーザ相互作用に依存して又は所定のオートマトン(automata)使用例のために、異なる形式のソフトウェアへとセグメント化できる。ヘッダファイル501は、以下の形式を有することができる。これは、部分503、504、及び505を示す。スタブ506は、このフォーマットに付加されることができる。
【表1】
UTXO再配置テーブルは、1つ以上の他のトランザクション152Z内の1つ以上のセクションへのポインタ504のリストである。本実装では、それは、実際に、TxIDだけでなく、参照されたTxID内の特定のUTXOを識別する。従って、例えば、それは、TxID
zの使用不可能UTXO
1を参照してよい。
【0127】
ヘッダの末尾は、異なるセクション502の順序情報を含む。複数のセクション502がアセンブリングされるとき、標準の困憊離/実行と同様に、実行のために順序が維持されるべきである。これは、ヘッダファイル501に(例えば、ヘッダ情報501に)アセンブルシーケンスを含むことにより実施されてよい。
【0128】
代替として、ヘッダファイル501は、単一の他のTxIDへのポインタのみを含んでよい。この場合、アセンブリングされるべき複数のセクション501が存在する場合、最後のセクション502以外のそれぞれは、それ自体が、少なくとも順序付きチェーンの中の次のTxIDへのポインタを含む小さなヘッダ部分を含む。プログラムランチャー405は、次に、ファイル507全体を再構成するための全部のセクション502を一緒に集めるために、チェーン内の各ポインタに従う。実施形態では、各セクション502のヘッダ部分は、上述の表に示したフォーマットのような、ヘッダファイル501と同じフォーマットの一部又は全部を含み得る。アプローチの組合せが使用され得る。例えば、ヘッダファイル501は、ファイル507全体の幾つかのセクション502へのリスト504を含み、それらのセクションのうちの少なくとも1つは、それ自体が、1つ以上の他のセクションを指すヘッダ部分を含む。ここでも、プログラムランチャー405は、ファイル507全体を再構成するために必要なセクション502を集めるために、各ポインタに従う。
【0129】
例えば、上述のヘッダフォーマットの末尾にある順序情報は、別個のトランザクションに格納され特定の検証条件が満たされる場合にウォレット406により読み出され得るファイルの次の部分への参照を含んでよい。これは、誤った使用でエラーが発生する可能性があり、署名の必要性、又はこれに続くUTXOが正しいタイプではないこと、又は鍵のような許可を必要とすること、又は支払い条件を満たすことを示す(flag)ことができる。
【0130】
これは、鍵検証、又はXORに基づく復号のような選択的復号関数の形式で実装されてよい。ブロックチェーン上の1つ又は種々のUTXOの中の1つ以上のデータからコードを再構成すると、方法は、コードがアセンブリングされた後に、OEP(original execution point)へとジャンプする。この実行可能ファイルは、次に、リンカ605に渡され、ローカルコンピュータ上で実行される。データは、初期ディスクイメージファイル(例えば、ISO)としてロードされ、仮想マシン又は場合によってはブラウザで再構成される。
【0131】
ヘッダファイル501は、公衆に又は選択された鍵により読み取り可能な単一の開始トランザクションの中で独立に再構成される(例えば、XOR暗号化ソフトウェアリンク、又はPCT/IB2017/050856に開示され得ように符号化される)。スマートウォレット406により受信されインタープリットされるこの情報は、仮想マシン405が、ソフトウェアのバージョンを決定し互換性を保証することを可能にする。それを行う方法の例は、次の段落で説明される。
【0132】
スタブプログラムを実行する:上述のように、装置、仮想マシン、又はブラウザに組み込まれたスマートウォレット406は、情報を取り入れ、トランザクション内の参照フラグを介してそれが実行可能イメージファイルであると決定する。実行されるべきBEFファイルの第1部分は、PEフォーマットのものと類似する、STUBである。PEフォーマットでは、DOS STUBが、ファイルがDOSで実行されていないことを検証し、実行されている場合には、「このプログラムはDOSモードで実行できません」と出力し、実行を停止する。BEFファイルの文脈では、STUBは、実行環境(Windows、Linux(登録商標)、又は指定された仮想マシン)を指定するために使用でき、アクセス認証を開始するために使用することもできる。クライアント証明書(credentials)はインタープリットされることができ、仮想マシンのセキュア領域等へのアクセスのために十分な情報が提示された場合には、STUBプログラムは、ユーザ名及びパスワードのようなアイデンティティ検証をユーザに促すために使用できる。プロトコルは、失敗した場合に、以下のようなアクセス証明書を証明することに指定されることもできる。(I)ユーザにメッセージを出力し、実行を終了する、(II)実行データの指定された部分のみをアセンブリングすることによる限定機能、(III)入力データへの限定アクセス、及び/又は(IV)実行可能ファイルにアクセスを試みたIPアドレスをブラックリストに載せる。
【0133】
<結論>
上記の実施形態は、単なる例示として説明したものであることが理解されるであろう。
【0134】
より一般的には、本願明細書に開示される1つの態様によると、プログラムを実行する方法であって、前記方法は、消費者パーティのコンピュータ機器により、ブロックチェーンネットワークの複数ののードに渡り維持されるブロックチェーン上に記録された第1トランザクションからヘッダファイルを読み出すステップを含む方法が提供される。前記ヘッダファイルは、プログラムヘッダ情報と、前記ブロックチェーン上に格納された1つ以上のそれぞれの第2トランザクションの1つ以上のそれぞれのトランザクションIDを含む参照情報と、を含み、前記第2トランザクションの各々は、プログラムファイルの本体のそれぞれのセクションを含み、前記セクションのうちの少なくとも1つは実行可能プログラムコードを含む。前記方法は、前記ブロックチェーンから、前記参照情報に基づき前記1つ以上の第2トランザクションのうちの少なくとも1つから、前記プログラムファイルのそれぞれのセクションを読み出すステップと、前記プログラムヘッダ情報と前記少なくとも1つの読み出したセクションとを含むプログラムを実行するステップと、を更に含む。
【0135】
実施形態では、前記プログラムの前記実行は、
前記ヘッダ情報及び前記少なくとも1つの読み出したセクションから、前記プログラムを含むプログラムファイルを再構成し、前記再構成したプログラムファイルを前記消費者パーティの前記コンピュータ機器のメモリに格納し、前記消費者パーティの前記コンピュータ機器で前記再構成したプログラムファイルを実行することを含んでよい。
【0136】
代替として、前記消費者パーティは、各セクションを個別に実行し、次に、単一の実行可能ファイルとして全てのアセンブリングすることなく、次のセクションへ渡し得る。
【0137】
実施形態では、前記コードは、アセンブリレベルコードを含んでよく、前記実行は、前記アセンブリレベルコードのアセンブリング及び前記アセンブリングされたコードの実行を含んでよい。代替として、実施形態では、前記コードは、高級言語を含んでよく、前記実行は、前記プログラムファイルの前記高級コードをコンパイルすること、及び例えばジャストインタイム(just-in-time (JIT))コンパイルを用いてコンパイルされたプログラムを実行することを含んでよい。別の代替として、前記プログラムファイルは、未処理機械コードを含んでよく、前記実行は、前記機械コードを実行することを含んでよい。更に別の代替では、前記コードは、高級言語を含んでよく、前記実行は、高級コードをインタープリットすることを含んでよい。
【0138】
実施形態では、前記実行は、リンクすること、例えば、異なるトランザクションからの異なるセクションの間の又は所与のトランザクションからの所与のセクション内の異なるサブセクションの間のリンク付けを更に含んでよい。
【0139】
実施形態では、前記参照情報は、複数の第2トランザクションの複数のトランザクションIDを含んでよく、各第2トランザクションは、前記プログラムファイルのそれぞれの本体セクションを格納する。
【0140】
前記異なるセクションは、プログラムコード、1つ以上のライブラリ、及び/又はプログラムにより操作されるべきデータを含んでよい。
【0141】
実施形態では、前記読み出すステップは、前記ブロックチェーンから、前記複数の第2トランザクションのうちの2つ以上からそれぞれのセクションを読み出すステップを含んでよく、
実行される前記プログラムは、前記プログラムヘッダ情報と、前記2つ以上の第2トランザクションからの読み出したセクションと、を含んでよい。
【0142】
代替として、前記ヘッダファイル内の前記参照情報は、単一の第2トランザクション内の単一の本体セクションのみを参照する単一のトランザクションIDのみを含み得る。
【0143】
実施形態では、前記第2トランザクションのうちの少なくとも1つの中の前記本体セクションのうちの少なくとも1つは、それ自体が、更なる本体セクションを含む第3トランザクションへの少なくとも参照を含むヘッダ部分を含んでよい。この場合、実行されるプログラムは、前記プログラムヘッダと、前記第2及び第3トランザクションからの前記本体セクションと、を含んでよい。
【0144】
実施形態では、前記ヘッダファイルは、1つ以上の条件を更に含んでよく、
前記方法は、前記条件を評価するステップを含んでよく、前記プログラムのセクションのうちの少なくとも1つの読み出し又は実行は、前記評価の結果を条件とする。
【0145】
実施形態では、前記評価は、前記消費者パーティの前記コンピュータ機器により実行されてよい。
【0146】
実施形態では、前記ヘッダファイルは、前記1つ以上の条件を評価するための実行可能コードスタブを含んでよい。この場合、前記方法は、前記評価を実行するために、前記消費者パーティの前記コンピュータ機器上で前記コードスタブを実行するステップを含んでよい。
【0147】
実施形態では、前記条件は、前記消費者パーティのアイデンティティに関する条件である少なくとも1つのアクセス条件を含んでよい。この場合、前記評価は、前記消費者パーティの前記アイデンティティが前記少なくとも1つのアクセス条件により指定されるアイデンティティと一致することを検証することを含み、前記プログラムのセクションのうちの少なくとも1つの読み出し又は実行は、前記検証の肯定的結果を条件とする。
【0148】
実施形態では、前記条件は、前記消費者パーティのコンピュータ機器の互換性に関する条件である少なくとも1つの互換性条件を含んでよい。この場合、前記評価は、前記消費者パーティの前記コンピュータ機器が前記互換性条件により指定される1つ以上の技術的基準を満たすことをチェックすることを含み、前記プログラムのセクションのうちの少なくとも1つの読み出し又は実行は、前記チェックの肯定的結果を条件とする。
【0149】
互換性のための前記技術的基準は、前記消費者パーティの前記コンピュータ機器のハードウェアについて設定される1つ以上の基準を含み得る。代替として又は追加で、互換性のための前記技術的基準は、前記消費者パーティの前記コンピュータ機器にインストールされたソフトウェアについて設定された1つ以上の基準、例えば、オペレーティングシステムに関する1つ以上の基準、及び/又はインストールされる必要がある1つ以上の姉妹アプリケーションについての1つ以上の基準を含み得る。
【0150】
実施形態では、前記条件は、前記複数のセクションのうちの各々に関連付けられたそれぞれの条件を含んでよく、前記それぞれの条件のうちの少なくとも幾つかは互いに異なる。前記方法は、前記複数のセクションのうちの各々に関連付けられた前記条件を評価するステップを含んでよく、各々のそのようなセクションの読み出し又は実行は、前記評価の結果を条件とする。
【0151】
これは、有利なことに、アクセス又は操作性の異なるティアを提供し、それにより、前記条件に依存して(例えば、前記消費者パーティの前記アイデンティティに依存して)、幾つかのセクションは使用可能にされ、幾つかはモジュラに基づかない。
【0152】
実施形態では、前記条件は、前記セクションの一部又は全部の各々について、前記消費者パーティのアイデンティティについてのそれぞれのアクセス条件を含んでよく、前記評価は、前記消費者パーティの前記アイデンティティがそれぞれのセクション毎の前記それぞれの条件により指定されるそれぞれのアイデンティティと一致することを検証することを含み、前記それぞれのセクションの読み出し又は実行は、前記それぞれの検証の肯定的結果を条件とする。
【0153】
実施形態では、前記条件は、前記セクションの一部又は全部の各々について、前記消費者パーティのコンピュータ機器の前記それぞれのセクションとの互換性についてのそれぞれの互換性条件を含んでよく、前記評価は、前記消費者パーティの前記コンピュータ機器がそれぞれのセクション毎の前記それぞれの条件により指定されるそれぞれの1つ以上の技術的基準を満たすことを検証することを含み、前記それぞれのセクションの読み出し又は実行は、前記それぞれのチェックの肯定的結果を条件とする。
【0154】
更なる代替又は追加の実施形態では、非スクリプトコードがブロックチェーントランザクションで標準的に使用されるロック/アンロックスクリプトよりも更に多様であるので、1つ以上のアクセス条件は、開発者の望む任意のユーザ定義された条件を含んでよい。
【0155】
実施形態では、前記プログラムヘッダ情報は、前記プログラムファイルのバージョン番号、前記プログラムファイルが実行されるべきシステムのバージョン番号、前記プログラムファイルのサイズ、記述子、予約された変数のリスト、日付け及び/又はタイムスタンプ、チェックサム、及び/又は前記本体セクションの順序情報、のうちの1つ以上を含んでよい。
【0156】
例えば、実施形態では、前記プログラムヘッダ情報は、バージョン及びサイズ情報のうちの最小のものを含む。
【0157】
実施形態では、前記ブロックチェーン及びブロックチェーンネットワークは、アウトプットに基づくモデルに従い動作するよう構成されてよく、各トランザクションは、少なくとも1つのアウトプットと少なくとも1つのインプットとを含み、各アウトプットはロックスクリプトを含み、各インプットは、別のトランザクションのアウトプットへのポインタと、ポイントされたアウトプットのロックスクリプトをアンロックするためのアンロックスクリプトと、を含み、前記スクリプトはスクリプト言語で作成される。この場合、前記ヘッダファイル及び前記プログラムコードは、前記スクリプト言語以外の言語で作成されて(記述されて)よい
実施形態では、前記ヘッダファイル及び前記1つ以上のセクションの各々は、前記ブロックチェーン上の前記それぞれの第1又は第2トランザクションの少なくとも1つの使用不可能アウトプットに格納されてよい。
【0158】
例えば、各使用不可能アウトプットは、ブロックチェーンネットワークのノードにより実行されるとスクリプトを終了する、スクリプト言語のオペコードの包含により、使用不可能にされてよい。例えば、前記オペコードはOP_RETURNであってよい(スクリプト言語はScriptである)。
【0159】
実施形態では、前記ヘッダファイル内の前記参照情報は、各第2トランザクション内の個々のそれぞれのアウトプットの識別子を含んでよく、前記読み出しは、前記識別されたアウトプットから読み出されるセクションの各々を読み出すことを含んでよい。
【0160】
実施形態では、前記第1トランザクションに格納されるような前記ヘッダファイルは、前記消費者パーティと前記プログラムを提供する提供者パーティとの間で共有される共有シークレットに基づき暗号化された暗号化形式で格納されてよい。この場合、前記ヘッダファイルの読み出しは、前記共有シークレットに基づき前記ヘッダファイルを復号することを含む。
【0161】
代替として、前記ヘッダファイルは、暗号化されず、従ってチェーン上で公衆に自由に利用可能であってよい。
【0162】
本願明細書に開示される別の態様によると、コンピュータ可読記憶装置上に具現化され、消費者パーティのコンピュータ機器上で実行すると本願明細書に開示されたいずれかの方法のステップを実行するよう構成される、コンピュータプログラムが提供される。
【0163】
別の態様によると、消費者パーティの機器であって、
1つ以上のメモリユニットを含むメモリと、
1つ以上の処理ユニットを含む処理機器と、
を含み、
前記メモリは、前記処理機器上で実行するよう構成されるコードを格納し、前記コードは実行されると本願明細書に開示されたに任意の実施形態に従い前記消費者パーティの方法を実行するよう構成される、機器が提供される。
【0164】
本願明細書に開示された別の態様によると、ブロックチェーンに記録するためのトランザクションのグループであって、前記グループは、コンピュータ可読データ媒体上に具現化され、ヘッダファイルを含む第1トランザクションと、1つ以上の第2トランザクションであって、それぞれが前記プロ具ファイルの本体のそれぞれのセクションを含み、前記セクションのうちの少なくとも1つは実行化のプログラムコードを含む、1つ以上の第2トランザクションと、を含み、前記ヘッダファイルは、プログラムヘッダ情報と、前記ブロックチェーンに格納された前記第2トランザクションのうちの1つ以上の1つ以上のそれぞれのトランザクションIDのセットとを含み、プログラムファイルが前記プログラムヘッダ情報及び前記セクションのうちの少なくとも1つから構成されることを可能にする、トランザクションのグループが提供される。
【0165】
本明細書に開示される別の態様によれば、方法であって、第1パーティ、第2パーティ、関連し得る任意の第3者、及び/又はノードのネットワークの動作を含む方法を提供することができる。
【0166】
本明細書に開示される別の態様によれば、第1パーティのコンピュータ機器、第2パーティのコンピュータ機器、任意の第3者のコンピュータ機器、及び/又はノードのネットワークを備えるシステムを提供することができる。
【0167】
開示された技術の他の変形例又は使用事例は、本明細書で開示されると、当業者に明らかになり得る。本開示の範囲は、記載された実施形態によって限定されるものではなく、添付の特許請求の範囲によってのみ限定される。