(57)【要約】  ブロックチェーンに関連するスマート・コントラクトの挙動を、ブロックチェーンの一部ではないコードにデリゲートする方法を提供する。システムは、スマート・コントラクトの仮想マシンによる実行を指示する。スマート・コントラクトの実行中、スマート・コントラクトは、クリプトデリゲートを介して要求をクリプトレット・コンテナ・サービスに送信し、認証済みホストで実行する挙動をクリプトレットにデリゲートする。実行中、クリプトレット・コンテナ・サービスは、適切なクリプトレット・コンテナ内でクリプトレットのコードを実行するホストを識別する。クリプトレット・コンテナ・サービスは、デリゲートする挙動を実行するために、識別されたホストに対し、クリプトレットのコードを実行するよう指示する。デリゲートした挙動が実行された後、クリプトレット・コンテナ・サービスは、要求された挙動に対する応答をクリプトレットから受信する。クリプトレット・コンテナ・サービスは、クリプトデリゲートによって検証したブロックチェーン上でスマート・コントラクトにその応答を送信する。
2019524018.tif 000002
【特許請求の範囲】
【請求項１】
ブロックチェーンにインストールされたコントラクトに関連する挙動を非ブロックチェーン・アプリケーションにデリゲートするコンピュータシステムであって、 
クリプトデリゲート及びクリプトレット・コンテナ・サービスのコンピュータ実行可能命令を格納する1つ又は複数のコンピュータ可読記憶媒体であって、 
前記クリプトデリゲートは、仮想マシン上で実行する前記コントラクトのコードから、クリプトレットのアイデンティティ及び前記クリプトレットが行う要求された挙動を受信し、前記クリプトレット・コンテナ・サービスに、前記アイデンティティと、前記要求された挙動を提供し、前記要求された挙動を行う前記クリプトレットにより生成された応答を前記クリプトレット・コンテナ・サービスから受信し、前記応答を前記コントラクトの前記コードへ送信する、命令を含み、
前記クリプトレット・コンテナ・サービスは、前記クリプトレットへの参照を含む登録されたクリプトレットに関する情報を格納し、前記アイデンティティ及び前記要求された挙動を前記クリプトデリゲートから受信し、前記クリプトレット・コンテナ及び前記クリプトレットを実行するホストを識別し、前記クリプトレットを認証し、前記クリプトレットに対し前記要求された挙動を提供し、前記クリプトレットにより生成された前記応答を受信し、前記ブロックチェーンに送信し、前記応答をクリプトデリゲートで検証する、命令を含む、
1つ又は複数のコンピュータ可読記憶媒体と、
前記１つ又は複数のコンピュータ可読媒体に格納される前記コンピュータ実行可能命令を実行する１つ又は複数のプロセッサと
を含むコンピュータシステム。
【請求項２】
請求項１に記載のコンピュータシステムであって、前記クリプトデリゲートは、前記仮想マシンによって実行される、コンピュータシステム。 
【請求項３】
請求項１に記載のコンピュータシステムであって、前記要求された挙動は、イベントを前記コントラクトに送信することである、コンピュータシステム。 
【請求項４】
請求項１に記載のコンピュータシステムであって、
前記クリプトデリゲートは、前記コントラクトから前記クリプトレットのコードを受信し、前記クリプトレット・コンテナ・サービスに前記コードを提供する命令をさらに含み、
前記クリプトレット・コンテナ・サービスは、前記コードのハッシュを生成し、このハッシュが、前記コントラクトが提供するハッシュと一致することを検査することによって前記コードを検証し、前記コードをクリプトレット登録ブロックチェーン内に記録し、前記クリプトレットを実行して前記要求された挙動を実行するよう認証済みホストに指示する、コンピュータシステム。
【請求項５】
請求項１に記載のコンピュータシステムであって、前クリプトデリゲートは、前記コントラクトに関連するブロックチェーン内に、前記コントラクトによる各要求と、前記コントラクトに提供される応答の指示とを記録する、コンピュータシステム。 
【請求項６】
請求項１に記載のコンピュータシステムであって、前記コントラクトは、前記クリプトデリゲートに、前記クリプトレットを実行すべきホストの指示を提供する、コンピュータシステム。 
【請求項７】
コンピューティングシステムによって実行される方法であって、
仮想マシンにより実行されるスマート・コントラクトから要求を受信し、前記スマート・コントラクトに代わって挙動を実行するためのコントラクト・クリプトレットと、前記コントラクト・クリプトレットのコードと、認証済みホストの指示とを登録して、前記コントラクト・クリプトレットの前記コードを実行する、ステップと、 
前記コントラクト・クリプトレットの前記コードを検証するステップと、 
前記コントラクト・クリプトレットの前記コードを、クリプトレット登録ブロックチェーン及びデータストレージに格納するステップと、
前記挙動を実行するために前記コントラクト・クリプトレットに対する要求を前記スマート・コントラクトから受信するステップと、
前記コントラクト・クリプトレットに前記認証済みホスト上で実行するよう指示するステップと、及び
前記挙動を実行するよう、前記認証済みホストで実行する前記コントラクト・クリプトレットに前記要求を送信するステップと、
を備え、前記スマート・コントラクト及び前記コントラクト・クリプトレットとの通信は安全なチャネルを介して行われる、
方法。
【請求項８】
請求項７に記載の方法であって、前記コードを検証するステップは、前記コードのハッシュを生成するステップと、前記ハッシュを前記コードに関連する公開鍵と比較するステップとを含む、方法。 
【請求項９】
請求項７に記載の方法であって、前記スマート・コントラクトから受信する前記要求は、前記仮想マシンによって実行されるクリプトデリゲートを介して受信する、方法。 
【請求項１０】
請求項９に記載の方法であって、前記クリプトデリゲートは、前記スマート・コントラクトのブロックチェーン内に、前記スマート・コントラクト及び前記クリプトデリゲートとの通信の指示を記録する、方法。 
【請求項１１】
請求項７に記載の方法であって、前記仮想マシンは、ブロックチェーンのノード上で実行し、前記認証済みホストは、前記ブロックチェーンのノードの外部にあるコンピュータである、方法。 
【請求項１２】
請求項７に記載の方法であって、前記クリプトレット登録ブロックチェーンは前記スマート・コントラクトのブロックチェーンとは別のものである、方法。 
【請求項１３】
１つ又は複数のコンピューティングシステムによって実行される方法であって、 
ブロックチェーンに関連するスマート・コントラクトの仮想マシンによる実行を指示するステップと、 
前記スマート・コントラクトの実行中に、クリプトデリゲートを介してクリプトレット・コンテナ・サービスに要求を送信し、認証済みホスト上で実行するクリプトレットに挙動をデリゲートするステップと、
前記クリプトレット・コンテナ・サービスの実行中に
前記クリプトレットのコードを実行するホストを識別するステップと、
前記識別されたホストに、前記デリゲートする挙動を実行するよう前記クリプトレットの前記コードを実行するように指示するステップと、 
前記クリプトレットから前記要求された挙動に対する応答を受信するステップと、及び
前記クリプトデリゲートによって妥当性確認されたブロックチェーン上の前記スマート・コントラクトへ前記応答を送信するステップと
を含む、方法。
【請求項１４】
請求項１３に記載の方法であって、前記クリプトデリゲートは、前記クリプトレット・コンテナ・サービスに対する安全な通信チャネルを確立し、前記クリプトレット・コンテナ・サービスは前記ホストとの安全な通信チャネルを確立する、方法。 
【請求項１５】
請求項１３に記載の方法であって、前記クリプトレットは、コントラクト・クリプトレットであり、前記クリプトレットの前記コードは、前記スマート・コントラクトにより提供又は識別され、前記ホストは前記スマート・コントラクトにより識別される、方法。 
【発明の詳細な説明】
【背景技術】
【０００１】
[0001]ビットコインシステムは、金融機関を経由することなく電子マネーを一方の当事者から他方の当事者へ直接的に送金することを可能にするために開発されたものであり、このことは「ビットコイン：ピアツーピア電子マネーシステム」と題されたサトシ・ナカモトによるホワイトペーパーに記載されている。ビットコイン（例えば、電子コイン）は、一方の当事者から他方の当事者に所有権を移転する一連のトランザクションによって表される。ビットコインの所有権を移転するために、新しいトランザクションを生成し、ブロック内のトランザクションのスタックに追加する。新しい所有者の公開鍵を含む新しいトランザクションは、その所有者の秘密鍵で所有者がデジタル署名して、新たな所有者の公開鍵が表す新しい所有者に所有権を移転する。ブロックがいっぱいになると、そのブロックはブロック内のすべてのトランザクション識別子のハッシュダイジェストであるブロックヘッダーで「覆う（cap）」。ブロックヘッダーをチェーン内の次のブロックに最初のトランザクションとして記録し、「ブロックチェーン」と呼ばれる数学的な階層を生成する。現在の所有者を検証するため、トランザクションのブロックチェーンに従い、最初のトランザクションから最後のトランザクションまでの各トランザクションを検証することができる。新しい所有者は、ビットコインを送金したトランザクションの公開鍵と一致する秘密鍵のみを必要とする。ブロックチェーンは、セキュリティ識別子（例えば、公開鍵）によって表されるエンティティ内で、所有権の数学的な証明を行い、このセキュリティ識別子は、ビットコインシステムの場合、擬似匿名（pseudo-anonymous）となる。
【０００２】
[0002]ビットコインの前の所有者がビットコインを再び使う（すなわち、同じビットコインの所有権を２人の当事者に移転する）ことのないように、ビットコインシステムは、トランザクションの分散型台帳を保持する。分散型台帳を用いて、ビットコインのすべてのトランザクションの台帳を、ブロックチェーン・ネットワークの複数のノード（すなわち、コンピュータ）に冗長的に格納する。各ノードの台帳はブロックチェーンとして格納される。ブロックチェーンでは、ノードがトランザクションを受信した順序で格納する。ブロックチェーン・ネットワークの各ノードには、ブロックチェーン全体の完全な複製がある。また、ビットコインシステムは、ノードがトランザクションを異なる順序で受信しても、各ノードが同一のブロックチェーンを確実に格納する技術を実装する。ノードに格納された台帳のトランザクションが正しいことを検証するために、ブロックチェーン内の最も古いブロックから最も新しいブロックにアクセスして、ブロックに関する新しいハッシュを生成し、その新しいハッシュを、ブロックが作成されたときに生成したハッシュと比較することができる。これらのハッシュが同じ場合、ブロック内のトランザクションを検証する。また、ビットコインシステムは、ブロックが作成されたときにそのブロックに付加するノンスを生成するために計算コストの高い手法を使うことによって、トランザクションを変更することやブロックチェーンを再生成することを確実に実行不可能にする技術を実装する。
【０００３】
[0003]ビットコインシステムは大きな成功を収めているものの、ビットコインシステムはビットコイン又は他の暗号通貨（cryptocurrency）のトランザクションに限定されている。現在は、車の売却、金融派生商品の売却、株式の売却、コントラクトの支払いなどのどんなタイプのトランザクションもサポートするようブロックチェーンを使う取り組みが進んでいる。このようなトランザクションはアイデンティティトークン(identity token)を使用しており、このアイデンティティトークンは、デジタルベアラー債（digital bearer bonds）とも呼ばれ、所有可能なもの、又は他のものを所有可能なものを一意に識別する。物的資産又はデジタル資産に関するアイデンティティトークンは、これら資産を一意に識別する一方向暗号化ハッシュ（a cryptographic one-way hash）の情報を使用して生成される。また、トークンには、追加の公開鍵／秘密鍵のペアを使用する所有者がいる。所有者の公開鍵を、トークン所有者のＩＤ（identity）として設定し、トークンに対しアクションを実行すると、所有者の秘密鍵が生成するシグネチャを与えることにより、所有権証明書を定めると共に、トークンの所有者としてリストされた公開鍵について所有権証明書を妥当性確認する。例えば、ユーザ名、社会保障番号、及びバイオメトリック（例えば、指紋）の組み合わせを使用して、人を一意に識別することができる。例えば、製品の製造業者の名前及びシリアル番号を使用して、製品（例えば、冷蔵庫）を一意に識別することができる。アイデンティティトークンのそれぞれは、このような組み合わせの一方向暗号化ハッシュである。エンティティ（例えば、人又は会社）のアイデンティティトークンは、公開鍵/秘密鍵のペアの公開鍵であってもよく、このとき秘密鍵はエンティティによって保持されている。アイデンティティトークンは、人、機関、商品、コントラクト、コンピュータ・コード、株式、デリバティブ、債券、保険、ローン、書類などを識別するために使用できる。アイデンティティトークンを使用して、資産のコレクションを識別することもできる。コレクションのアイデンティティトークンは、コレクション内の資産のデジタルトークンの一方向暗号化ハッシュでもよい。ブロックチェーン内で資産のアイデンティティトークンを作成すると、その資産の出所が定められ、該アイデンティティトークンはブロックチェーンに格納された資産の（購入、販売、保険などの）トランザクションで使用され、トランザクションの完全なオーディット・トレール(audit trail)を生成する。
【０００４】
[0004]単純なトランザクションをブロックチェーンに記録するためには、そのトランザクションに関わる各当事者及び各資産には、デジタルトークンによって識別される口座が必要となる。たとえば、ある人が別の人に車を譲渡したい場合、現在の車の所有者と、次の車の所有者は口座を作成するとともに、現在の所有者は、車両識別番号で一意に識別される口座を作成する。車の口座は現在の所有者を識別する。現在の所有者は、その車の口座に対するトランザクションを生成する。このトランザクションは、トランザクションが所有権の移転のための移転であることを示し、現在の所有者及び次の所有者の公開鍵（すなわち、アイデンティティトークン）を示し、その車のアイデンティティトークンを示す。トランザクションを、現在の所有者の秘密鍵で署名する。すると、そのトランザクションは、次の所有者が現在の所有者であるという証拠になる。
【０００５】
[0005]より複雑なトランザクションを可能にするために、いくつかのシステムでは「スマート・コントラクト」を使用する。スマート・コントラクトとは、コントラクトためのトランザクションを実装するコンピュータ・コードである。該コンピュータ・コードは、ブロックチェーンにおけるトランザクションの記録をサポートするセキュアなプラットフォーム（例えば、イーサリアム・プラットフォーム）で実行されてもよい。さらに、スマート・コントラクト自体は、コンピュータ・コードのハッシュ（すなわちアイデンティティトークン）であるアイデンティティトークンを使用して、ブロックチェーン内でトランザクションとして記録され、これにより実行するコンピュータ・コードを認証することができる。デプロイされると、スマート・コントラクトのコンストラクタはスマート・コントラクトとその状態の初期化を実行する。スマート・コントラクトの状態は、（たとえば、マークル木を介して）ブロックチェーン内に永続的に格納される。トランザクションがスマート・コントラクトに記録されると、メッセージをスマート・コントラクトに送信し、スマート・コントラクトのコンピュータ・コードは、（たとえば、口座の残高から一定額を引き落とす）トランザクションを行うよう実行する。コンピュータ・コードは、トランザクションがブロックチェーンに記録される前に、コントラクトのすべての条項が遵守されていることを示す。例えば、スマート・コントラクトは資産の売却をサポートしてもよい。車を販売する際のスマート・コントラクトへの入力データは、売り手、買い手、及び米ドルでの車の販売価格でもよい。コンピュータ・コードは、売り手が自動車の現在の所有者であることや、買い手が自分の口座に十分な資金を持っていることを示す。次に、コンピュータ・コードは、自動車の所有権を買い手に移転するトランザクションと、販売価格を買い手の口座から売り手の口座に移転するトランザクションを記録する。売り手の口座が米ドルで、買い手の口座がカナダドルの場合、コンピュータ・コードは通貨両替レートを取得し、いくらのカナダドルが売り手の口座から借方に振り込まれるべきかを決定し、両替レートを記録してもよい。いずれかのトランザクションが成功しない場合、どちらのトランザクションも記録されない。
【０００６】
[0006]スマート・コントラクトにメッセージを送信し、トランザクションを記録すると、ブロックチェーンの複製を維持する各ノードにメッセージを送信する。各ノードは、スマート・コントラクトのコンピュータ・コードを実行して、トランザクション処理を行う。例えば、１００のノードがそれぞれブロックチェーンの複製を維持する場合、コンピュータ・コードは１００のノードの各々で実行される。ノードがコンピュータ・コードの実行を完了すると、トランザクションの結果がブロックチェーンに記録される。ノードは、コンセンサス・アルゴリズムを使用して、保持するトランザクションと捨てるトランザクションとを決定する。各ノードでコンピュータ・コードを実行することは、ブロックチェーンの信頼性を保証するのに役立つが、コンピュータ・コードのこのような重複した実行をサポートするためには多くのコンピュータリソースが必要になる。 
【０００７】
[0007]資産の売却のようなスマート・コントラクトは、しばしば、イベント又は、通貨両替レート、株価、金利などの時間ベースの情報が必要となる。このような情報の必要性に対処するために、必要とする情報を含むトランザクションを記録する「オラクル（oracle）」が開発されている。たとえば、オラクルは、毎日特定の時間に通貨両替レートを記載するトランザクションをブロックチェーンに記録することができる。スマート・コントラクトに対するコンピュータ・コードは、ブロックチェーンを介して、必要とされる両替レートを検索することができる。しかし、現在のブロックチェーンプラットフォームは、オラクルによって追加された情報が信頼できるものであると保証する方法を提供していない。
概要 
[0008]ブロックチェーンに関連するスマート・コントラクトの挙動(behavior)を、ブロックチェーンの一部ではないコードにデリゲート(delegate)する方法を提供する。システムは、仮想マシンによるスマート・コントラクトの実行を命令する。スマート・コントラクトの実行中、スマート・コントラクトは、クリプトデリゲート（cryptodelegate）を介して、要求をクリプトレット・コンテナ・サービスに送信し、認証済みホスト（attested host）で実行するクリプトレット（cryptlet）に、挙動をデリゲートする。クリプトレット・コンテナ・サービスの実行中、クリプトレット・コンテナ・サービスはホストを識別して、クリプトレット・コンテナ内のクリプトレットのコードを実行する。クリプトレット・コンテナ・サービスは、該クリプトレットのコードを実行するよう識別されたホストに命令し、デリゲート挙動を実行する。デリゲート挙動を実行した後、クリプトレット・コンテナ・サービスは、クリプトレットから要求された挙動に対する応答を受信する。クリプトレット・コンテナ・サービスは、クリプトデリゲートが妥当性確認したメッセージとして応答をスマート・コントラクトへ送信する。クリプトデリゲートとクリプトレット・コンテナ・サービスは、スマート・コントラクトとクリプトレットの間の安全な通信を提供する。
【図面の簡単な説明】
【０００８】
【図１】図１は、スマート・コントラクトがクリプトレットのサービスを要求する例を示すブロック図である。
【図２】図２は、ある種の実施形態における、クリプトデリゲートとクリプトレットとの間の接続を示すブロック図である。
【図３】図３は、ある種の実施形態にける、クリプトレットを使用するスマート・コントラクトの初期化の概要を示すフロー図である。
【図４Ａ】図４Ａ、図４Ｂ、及び図４Ｃは、ある種の実施形態における、イベント・ユース・ケース、又はユーティリティ・クリプトレットをサポートするＣＭＰのアーキテクチャを示すブロック図である。
【図４Ｂ】図４Ａ、図４Ｂ、及び図４Ｃは、ある種の実施形態における、イベント・ユース・ケース、又はユーティリティ・クリプトレットをサポートするＣＭＰのアーキテクチャを示すブロック図である。
【図４Ｃ】図４Ａ、図４Ｂ、及び図４Ｃは、ある種の実施形態における、イベント・ユース・ケース、又はユーティリティ・クリプトレットをサポートするＣＭＰのアーキテクチャを示すブロック図である。
【図５Ａ】図５Ａ、図５Ｂ、図５Ｃ、及び図５Ｄは、ある種の実施形態における、制御ユース・ケース、コントラクト・クリプトレット、及びエンクレーブ（enclave）の使用をサポートするＣＭＰのアーキテクチャを示すブロック図である。
【図５Ｂ】図５Ａ、図５Ｂ、図５Ｃ、及び図５Ｄは、ある種の実施形態における、制御ユース・ケース、コントラクト・クリプトレット、及びエンクレーブ（enclave）の使用をサポートするＣＭＰのアーキテクチャを示すブロック図である。
【図５Ｃ】図５Ａ、図５Ｂ、図５Ｃ、及び図５Ｄは、ある種の実施形態における、制御ユース・ケース、コントラクト・クリプトレット、及びエンクレーブ（enclave）の使用をサポートするＣＭＰのアーキテクチャを示すブロック図である。
【図５Ｄ】図５Ａ、図５Ｂ、図５Ｃ、及び図５Ｄは、ある種の実施形態における、制御ユース・ケース、コントラクト・クリプトレット、及びエンクレーブ（enclave）の使用をサポートするＣＭＰのアーキテクチャを示すブロック図である。
【発明を実施するための形態】
【０００９】
詳細な説明 
[0014]スマート・コントラクト及び分散型台帳（すなわちブロックチェーン）を組み合わせることで、メンバーと呼ばれるエンティティ（例えば、銀行）のコンソーシアムに対し、メンバーと他の当事者との間のトランザクションを記録する機会を提供する。分散型台帳には、暗号学的にオーセンティック（authentic）であること、共有されること、分散されること、及び台帳であることなど、コンソーシアムのためのいくつかの利点がある。分散型台帳は、公開鍵と秘密鍵を使用することで、トランザクションが不正行為による影響を受けず、共有する真実を証明(establish)することを保証するという意味で、暗号学的にオーセンティックである。分散型台帳を配布するということは、台帳の複製が多数存在することを意味する。コンソーシアム内のメンバーの数が増えるにつれて、分散型台帳の価値が高まる。これは、メンバーに関与する多くのトランザクションを分散型台帳に記録することができ、メンバーは分散型台帳を保持するためのコストを共有できるからである。分配型台帳は「台帳」であるため、変更することのできないトランザクションの記録（immutable record）として機能し、定められ要件に準拠させるために使用することができる。メンバーになるためにはエンティティは既存のメンバーからの許可が必要であるという意味で、このようなコンソーシアムの分散型台帳はプライベートなものである。
【００１０】
[0015]スマート・コントラクトは、事実上全てのタイプのコントラクトを表すために使用できるので、様々な異なるコンソーシアムがスマート・コントラクトを使用することができる。コンソーシアムのメンバーは、トランザクションを記録するために使用するスマート・コントラクトの標準セットに同意することができる。例えば、銀行のコンソーシアムは、調整可能な金利での貸付に関するスマート・コントラクトに同意することができる。このようなスマート・コントラクトは、貸し付け条件を実施するようプログラムすることができ、例えば、債権者の口座に借方記入することや、適切で調整可能な金利を決定し、貸付の条件に基づいて変動する支払額を計算することによって債権者の口座に振り込みすることができる。スマート・コントラクトは、コンソーシアムに対し（紙のコントラクトなど）既存のビジネスモデルをスマート・コントラクトに置き換える機会を与えるので、上述した分散型台帳の利点を有することになる。
【００１１】
[0016]しかしながら、このようなコンソーシアムを真に有用なものにするには、コンソーシアムは、スマート・コントラクト及び分散型台帳だけで提供できるサービスよりも、より多くのサービスを必要とする。たとえば、コンソーシアムのメンバーは、分散型台帳のデータにアクセスするために、既存のシステム（たとえば会計システムや報告システム）を必要とする場合があり、この既存のシステムは、分散型台帳の管理と運用を支援するシステム、分散型台帳におけるデータのプライバシー（契約条件など）を保証することを支援するシステム、識別子とキーの管理をサポートするシステム、（ビジネス・インテリジェンスや機械学習などの）分析をサポートするシステムなどである。さらに、コントラクトの当事者であれば、各ノードでコントラクトを重複して履行するロジックを実行することにより生じるコストを避けたいであろう。
【００１２】
[0017]コンソーシアムのニーズを満たすために、暗号化ミドルウェア・プラットフォーム（「ＣＭＰ」）が提供されており、この暗号化ミドルウェアプラットフォームは、スマート・コントラクトがコンピュータプログラムと相互作用することを可能にし、追加で必要とされるコンソーシアムのサービスを提供し、またコントラクトを履行するロジックを重複して実行することを回避するのに役立つ。このコンピュータプログラムは、スマート・コントラクトとは異なり、分散型台帳に記録されていない点でブロックチェーンの外にあるといえる。これらのプログラムは、暗号化アプレット（cryptographic applet）であり、本明細書では「クリプトレット(cryptlet)」と呼ぶ。
【００１３】
[0018]ある種の実施形態では、ＣＭＰは、ブロックチェーンにインストールされたコントラクトに関連する挙動を、非ブロックチェーンアプリケーションにデリゲートする。ＣＭＰは、暗号化デリゲート（「クリプトデリゲート(cryptodelegate)」）及びクリプトレット・コンテナ・サービスを提供する。クリプトデリゲートは、コントラクトのコードを実行する仮想マシンとインターフェースして、仮想マシンの外で実行しているクリプトレットへのアクセスを提供する。クリプトデリゲートは、仮想マシンから、クリプトレットのアイデンティティトークンと、コントラクトのコードが定める、クリプトレットが実行するよう要求された挙動の指示（indication）とを受信する。例えば、要求された挙動は、ある株式の現在の価格を提供してもよい。クリプトデリゲートは、クリプトレット・コンテナ・サービスとインターフェースして、仮想マシンから、クリプトレットを実行すべきホスト（例えば、認証済みコンピュータ、及びクリプトレット・コンテナ）への安全な通信チャネルを提供する。クリプトレット・コンテナ・サービスは、該サービスがサポートするクリプトレットの登録に関する情報を格納する。この登録に関する情報は、例えば、クリプトレットのアイデンティティトークンからクリプトレットを実行するホストへのマッピングや、クリプトレットの実行に関する様々なポリシー（例えば、プロセス分離）を含むことができる。クリプトレット・コンテナ・サービスは、要求されたサービスを提供するようクリプトレットに指示し、及びクリプトデリゲート及びブロックチェーンへの応答を行うようクリプトレットに指示する。
【００１４】
[0019]図１は、スマート・コントラクトがクリプトレットのサービスを要求する例を示すブロック図である。この図は、コンソーシアムのメンバーである銀行１０１、ヘッジファンド１０２、及び保険会社１０３を示しており、コンソーシアムの分散型台帳は、ノード１１０に格納され、コンソーシアムのスマート・コントラクトは、仮想マシン１２０（例えば、エテリアム仮想マシン）が実行する。このメンバーは、スマート・コントラクトが示すコントラクトの当事者であり、このスマート・コントラクトでは、特定の両替レートを使用する計算を毎日１６時ＧＭＴに実行するとする。コントラクトの一部として、当事者は、認証済みホスト１３０上で動作するクリプトレット１３１が提供する両替レートを、スマート・コントラクトが使用することに同意する。ホストは、信頼できる環境にあるクリプトレットを確実に実行するという点で認証される。スマート・コントラクトに含めるため、及びランタイム時にクリプトレットを認証する際に使用するため、クリプトレットのコンピュータ・コードのための識別鍵（例えば、公開鍵）を生成する。スマート・コントラクトは、認証済みホスト及びクリプトレットへの参照を含む。スマート・コントラクトがブロックチェーンにインストールされると、そのコンストラクタは、毎日１６時ＧＭＴの「ウェイクアップ」イベントを受信し、ウェイクアップしたときに受信したい値を受信するよう実行及び登録する。ウェイクアップ・イベントは、ウェイクアップ・メッセージをスマート・コントラクトに送信する専用のクリプトレットが生成してもよい。ウェイクアップすると、クリプトレットが提供する認証済みの値を使用して、仮想マシンがスマート・コントラクトを実行する。安全なチャネルはクリプトデリゲートが妥当性確認し、このクリプトデリゲートは、仮想マシンとインターフェースするアダプタであり、参照されたクリプトレットだけが実行のためにこのイベントとデータとを提供できることを保証する。
【００１５】
[0020]図２は、ある種の実施形態における、クリプトデリゲートとクリプトレットとの関係を示すブロック図である。仮想マシン２１０は、クリプトデリゲート２１１を含み、スマート・コントラクト２１２を実行している。クリプトデリゲートは、「クリプトレット・コンテナ・サービス２２０」とインターフェースする。「クリプトレットコンテナサービス」（又はクリプトレット・コンテナ・サービス）は、クリプトレットを検索し、クリプトレットのポリシーを実施し、シグネチャを検査等するサービスを提供する。クリプトデリゲートは、クリプトレット・コンテナ・サービスを使用して、認証済みコンピュータがホストするクリプトレット・コンテナ２３０内のクリプトレット２３１との安全な接続２４０を確立する。クリプトレット・コンテナは、クリプトレットと、そのクリプトレットのランタイム環境（例えば、オペレーティング・システム）の両方を含む。クリプトレット・コンテナは、認証済みホストの仮想マシンにロードされ、この仮想マシンにより実行されるようにしてもよい。
【００１６】
[0021]図３は、ある種の実施形態における、クリプトレットを使用するスマート・コントラクトを初期化する概要を示すフロー図である。スマート・コントラクト仮想マシン３１０は、スマート・コントラクトの初期化関数３２０及びクリプトデリゲート３３０を実行する。クリプトレット・コンテナ・サービス（「ＣＣＳ」）のホスト３４０は、クリプトレット・コンテナ３５０を実行する。クリプトレット・コンテナ３６０は、クリプトレット３７０を実行する。スマート・コントラクトの初期化関数は、例えば、クリプトレット・コード及び設定情報をクリプトデリゲートに送信することによってクリプトレットを登録する（３２１）。クリプトデリゲートは、クリプトレット・コンテナ・サービスと安全な接続を確立し（３３１）、登録要求をクリプトレット・コンテナ・サービスに転送する（３３２）。クリプトレット・コンテナ・サービスは、クリプトレット・コードのハッシュを生成して検査する（３５１）。次に、クリプトレット・コンテナ・サービスは、クリプトレットを、クリプトレット登録ブロックチェーンに登録する（３５２）。次に、スマート・コントラクトの初期化関数は、クリプトデリゲートを介してクリプトレットに要求を送信することによって、クリプトレットに関する通知（例えば、商品価格の変動）を受信するために申込みをする（３２２）。この要求は、スマート・コントラクトのコールバック関数の識別子を含んでもよい。クリプトデリゲートは、クリプトレット・コンテナ・サービスへ申込み要求（subscription request）を転送する（３３３）。クリプトレット・コンテナ・サービスは、この要求をクリプトレットに転送する（３５３）。クリプトレット・コンテナ・サービスは、クリプトレットを含むクリプトレット・コンテナのインスタンス化を指示してもよい。この要求を受信すると、クリプトレットはその要求を記録する（３７１）。最後に、クリプレットは、この申込みに基づいてイベント（例えば、商品価格の変動）をスマート・コントラクトに発行するよう決定してもよい。このような場合、クリプトレットは、クリプトレット・コンテナ・サービスを介して、クリプトデリゲートが妥当性確認するブロックチェーンへイベントを送信すると共に、イベントを処理するためスマート・コントラクトのコールバック関数を呼び出しするようにする。
【００１７】
[0022]ある種の実施形態では、ＣＭＰは、クラウドベースのサービスとして実装されてもよい。様々なコンソーシアムがクラウドベースのサービスと相互作用して、スマート・コントラクトや各コンソーシアムのメンバーだけが使用可能なクリプトレットを提供することができる。クラウドベースのサービスは、コンソーシアムの登録、及びそのメンバーの登録をサポートすることができる。クラウドベースのサービスは、認証サービス、ブロックチェーン管理サービス、メンバーのスマート・コントラクトをホスティングする仮想マシン、クリプトデリゲート・サービス、クリプトレット・サービス、セキュリティ・サービス、一般的なクラウドサービスなどを提供することができる。コンソーシアムに対しスマート・コントラクトを実行すべきときはいつでも、クラウドベースのサービスは、スマート・コントラクトを安全に実行するために、並びにクリプトデリゲート及びクリプトレット・コンテナ・サービスを介してクリプトレットと通信するために、仮想マシンをインスタンス化することができる。
【００１８】
[0023]ある種の実施形態では、イーサリアム・プラットフォームのＥＩＰ−７  ＤＥＬＥＧＡＴＥＣＡＬＬ  （https://github.com/ethereum/EIPs/blob/master/EIPS/eip-7.md）と似た方法で、クリプトデリゲートを呼び出すことができる。あるいは、クリプトレットの呼び出しをサポートするために仮想マシンの特別な命令を定義してもよい。しかし、その命令は、別のスマート・コントラクトに対する通常の（例えばガスの観点からの）呼び出しとして機能する代わりに、クリプトレットのブロックチェーン外にあるコンピュータ・コードへの費用のかからない呼び出しとなる。クリプトレットはどんな言語で記述してもよく、クリプトレットは安全で隔離された信頼できるコンテナ内で実行し、安全な通信を使用して通信する。クリプトレットは、スマート・コントラクト・システムで使用でき、また追加の機能や情報が必要な場合は、未使用トランザクション・アウトプット（「ＵＴＸＯ」）システムなどの非スマート・コントラクト・システムで使用できる。
【００１９】
[0024]クリプトデリゲートは、スマート・コントラクトの仮想マシン内の「フック（hook）」関数であり、この関数はスマート・コントラクトのクリプトレットを呼び出し、クリプトレットの実行のために、トランザクションの安全でオーセンティックなエンベロープ(envelope)を与える。スマート・コントラクトと同じシグネチャで署名するか、或いは書き込み時又は設計時に信用され、妥当性確認されたデジタル・シグネチャで署名することで、クリプトデリゲートを介して呼び出されたクリプトレットを信用する。クリプトレットは、自身の複合アイデンティティを有しており、この複合アイデンティティは、バイナリハッシュ、バージョン及びトランザクションに署名するための発行者の証明書を含んでもよい。グローバル・クリプトレット又は共有クリプトレットは、認証済み識別子を有してもよく、これは、アイデンティティ・フローのため及び安全性を高めるために、ローカル・アドレスにマッピング可能な認証済みホストのシグネチャも含む。クリプトデリゲートを介してなされる各呼び出しは、ランタイム時にシグネチャの妥当性を検査し、トランザクションと共にそれらシグネチャを記録する。非スマート・コントラクト・システムでは、アダプタを使用してクリプトレットを呼び出すことができ、該アダプタは、クリプトデリゲートがスマート・コントラクト仮想マシン内にあるときのような関数を実行する。
【００２０】
[0025]ＣＭＰは、以下の二種類のクリプトレット、すなわちユーティリティ・クリプトレット及びコントラクト・クリプトレットをサポートすることができる。ユーティリティ・クリプトレットは、スマート・コントラクトを書き込む前に作成され、暗号化、時間ベースのイベント発行、外部データへのアクセスなどの共通の機能を実行する。外部のデータや機能に信頼できる方法でアクセスする必要のあるスマート・コントラクト開発者は、ユーティリティ・クリプトレットを使用することができる。ユーティリティ・クリプトレットは、ライブラリにグループ化することができ、その一部は認証者によって提供され、他のものは独立系ソフトウェアベンダのような第三者からのものである。ＣＭＰが提供する機能は、ユーティリティ・クリプトレットを使用して実装することができる。
【００２１】
[0026]コントラクト・クリプトレットを作成し、指定のスマート・コントラクト・インスタンスにバインドする。コントラクト・クリプトレットは、性能と規模の観点から必ずしも完全にブロックチェーン仮想マシン環境での実行に適していない複雑なロジックをホストすることができる。コントラクト・クリプトレットに関し、スマート・コントラクトは、単にスマート・コントラクトの状態変数とキー変数を含むが、一方で、クリプトレットは、そのプログラミングロジックを含んでおり、これは外部データソースにアクセスしてスマート・コントラクトのイベントを作成して処理するためのロジックを含む。コントラクト・クリプトレットは、特定のスマート・コントラクトのためのランタイム代理（runtime surrogate）である。コントラクト・クリプトレットをスマート・コントラクトと共に使用することで、高いパフォーマンスとスケーラビリティを必要とする高度なシナリオが可能になる。たとえば、コントラクト・クリプトレットは、他のコントラクトがブロックチェーン仮想マシン上で実行されている間に、それを停止することなしに、スマート・コントラクトの中身全体を並行して実行することができる。コントラクト・クリプトレットを使用することは、ブロックチェーンのすべてのノードで実行されているスマート・コントラクト・コードが非常に軽い重みのものであることを意味するが、これは、ブロックチェーン・データベースにのみ書き込みし、またスマート・コントラクトのデリゲートされたコントラクト・クリプトレットを実行するように指定されたホストに対して、計算処理の大部分や外部データとの統合などを任せるからである。
【００２２】
[0027]スマート・コントラクトがブロックチェーン又は他のデプロイ・メソッドにデプロイされると、コントラクト・クリプトレットを作成することができる。スマート・コントラクトがデプロイされると、スマート・コントラクトのコンストラクタは、クリプトレットのプロパティとコード（Ｃ＃、Ｆ＃、Ｊａｖａ（登録商標）、Ｃ＋＋など）を登録する。スマート・コントラクトは、設定情報を提供し、この設定情報は、クリプトレットに関するインターフェース定義と、カスタムタイプ、公開鍵などの、クリプトレットに関する様々なプロパティとを含んでもよい。
クリプトレットに関するインターフェース定義を、次のとおり示す。
【００２３】
【表１】
2019524018.tif 000003
【００２４】
[0028]クリプレットのプロパティは、Ｊａｖａ  Ｓｃｒｉｐｔ（登録商標）  Ｏｂｊｅｃｔ  Ｎｏｔａｔｉｏｎ（「ＪＳＯＮ」）に基づいたクリプトレット・スキーマを使用して、以下に示すように提供することができる。
【００２５】
【表２】
2019524018.tif 000004
【００２６】
[0029]スマート・コントラクトがクリプトレット・コンテナ・サービスにクリプトレットを登録すると、クリプトレット・コンテナ・サービスはクリプトレット・コードのハッシュを生成し、スマート・コントラクトが提供する公開鍵にそのハッシュが一致することを保証する。次いで、クリプトレット・コンテナ・サービスは、設定情報及びクリプトレット・コードを、クリプトレット登録ブロックチェーンに記録する。このクリプトレット登録ブロックチェーンは、分散したデータストレージメタデータやクリプトレットのポリシー情報にリンクすることができる。クリプトレット登録ブロックチェーンは、クリプトレット・コンテナ・サービスが保持するブロックチェーン・データベースである。ユーティリティ・クリプトレットはスマート・コントラクトから独立して登録し、スマート・コントラクトにより参照される。
【００２７】
[0030]クリプトレット・インターフェース定義は、以下のインポート文を使用してスマート・コントラクトにインポートすることができる。
【００２８】
【表３】
2019524018.tif 000005
【００２９】
[0031]クリプトレットを使用するスマート・コントラクトは、デフォルト設定情報の大部分を提供するクリプトレット・プロキシ・ベース・クラスから得ることができる。ユーティリティ・クリプトレットを使用するスマート・コントラクトは、以下のように表すことができる。
【００３０】
【表４】
2019524018.tif 000006
【００３１】
[0032]スマート・コントラクトは、そのコンストラクタの実行している間、以下のようにユーティリティ・クリプトレットからイベントを受信するよう登録することができる。
【００３２】
【表５】
2019524018.tif 000007
【００３３】
[0033]クリプトレットのstockClient（）コンストラクタを呼び出して、stockClientクリプトレットをクリプトレット・コンテナ・サービスに登録する。イベント・メソッドを呼び出してイベントを送信し、金に関するPriceUpdate（価格更新）イベントを受信するよう申込みをする。このイベントは、クリプトレットがPriceUpdateイベントをスマート・コントラクトに送信するときに呼び出される、スマート・コントラクトのコールバック・メソッド、すなわちCalculatePrice（価格計算）を指定する。スマート・コントラクトはまた、以下のようにクリプトレットのメソッドを呼び出してもよい。
【００３４】
【表６】
2019524018.tif 000008
【００３５】
[0034]ＣＭＰは、隔離されたエンクレーブ内でクリプトレット・コンテナやクリプトレットを実行するためのプロセス分離等のクリプトレット挙動を、スマート・コントラクトの実行中に指定することを可能にする。あるいは、ＣＭＰは、以下のように、コード設定を上書きできるクリプトレット・コンテナ・サービスのポリシーによって、挙動を確立することを可能にする。
【００３６】
【表７】
2019524018.tif 000009
【００３７】
[0035]さらに、スマート・コントラクトのコードは、属性を指定して、クリプトデリゲートを介してその属性ポイントでのロジックの実行をデリゲートすることを示してもよい。たとえば、スマート・コントラクトのプロパティを暗号化する必要があり、コントラクトの当事者だけに可視とする場合、属性は以下のように適用できる。
【００３８】
【表８】
2019524018.tif 000010
【００３９】
[0036]この例では、クリプトデリゲートは、trade_amount（取引総額）が暗号化されており、かつこのコントラクトの署名者に提供されたときにのみtrade_amountを解読できることを保証する。
【００４０】
[0037]以下は、クリプトレットの別の例である。 
【００４１】
【表９】
2019524018.tif 000011
【００４２】
[0038]コントラクト・クリプトレットは、ネットワーク上のすべてのノードがスマート・コントラクト・コードを実行する必要のない並列的な実行を可能にする。したがって、多くのコントラクト・クリプトレットは、代理をたてることによって異なるスマート・コントラクト・コードを異なるマシン上で同時に実行することができ、また署名されたトランザクションを、ブロックチェーン・データベースに確実に記録することができる。コントラクト・クリプトレットを使用すると、ブロックチェーン自体の完全性を保持しながら、スマート・コントラクト・ブロックチェーンを大きく拡張し、その計算能力を一層高めることができる。
【００４３】
[0039]ある種の実施形態において、クリプトレットへの呼び出しを実装するために、ＣＭＰは、仮想マシンを使用することができ、この仮想マシンは、スマート・コントラクトを実行し、かつクリプトデリゲートにアクセスするために新しい命令を追加するように変更される。あるいは、イーサリアム仮想マシン用コンパイラは、以下のように、クリプトアレイゲートのアドレスで、クリプトレットの変数のアクセサ及び静的メソッドにフラグを立てることができる。
【００４４】
【表１０】
2019524018.tif 000012
【００４５】
変更された仮想マシンは、ランタイムの間のインターセプションにおいて、DELEGATECALL（デリゲートコール）を使用して、以下のようにクリプトデリゲートのJUMPDESTにマッピングしてもよい。 
【００４６】
【表１１】
2019524018.tif 000013
【００４７】
このようにして、クリプトデリゲートは、呼び出しスレッドがin-procを待っている間に、別のスレッドで同期して処理を行うことができる。クリプトレットの公開鍵とさまざまな属性とを渡して、クリプトデリゲートのJUMPDESTにDELEGATECALLがマッピングすると、クリプトデリゲートは実行に取り掛かる。
【００４８】
[0040]クリプトデリゲートは、以下のように、コアに含まれるパッケージとしてgithub.com/ethereum/core/に含まれてもよい。
【００４９】
【表１２】
2019524018.tif 000014
【００５０】
あるいは、クリプトデリゲートは仮想マシン自体の中に含まれていてもよい。 
[0041]ノード起動時に、コマンドラインオプションは、以下のように、クリプトデリゲートがクリプトレット登録及びポリシーを検索する場所を指定する。 
【００５１】
【表１３】
2019524018.tif 000015
【００５２】
クリプトデリゲートはジャンプ・コール（jumped call)を受信すると、要求されたペイロード及び分離などのオプションと共に、クリプトレット公開鍵をクリプトレット・コンテナに渡す。ペイロードは、パラメータを使用したクリプトレットで呼び出される静的メソッド、コールバックの詳細を含む公開されたクリプレットイベントへの申込み、又はコントラクト・クリプレットの作成でもよい。
【００５３】
[0042]ある種の実施形態では、クリプトレット・コンテナは、コード実行及びデータのため、保護されたエンクレーブ、プライベート、改ざん防止の安全な領域内にカプセル化される。クリプトレット・コンテナと、これがホストするクリプトレットは、安全なエンクレーブ内で実行するので、安全な実行を提供すると共に、結果がオーセンティックであり改ざんされていない認証済みの保証をデータに提供する。エンクレーブを使用するクリプトレット・コンテナは、実行のためにクリプトレットに対し安全でプライベートな環境を提供する。コントラクト・クリプトレット及び暗号化サービスを実行しているそれらは、エンクレーブ内で実行するそれらの例である。エンクレーブ内で実行しているクリプトレット・コンテナは、他のエンクレーブ内の他のクリプトレットと安全に通信すると共に、ＨＳＭ（ハードウェア・セキュリティ・モジュール）などの他のセキュリティデバイスと通信することができる。エンクレーブによる保護は、ハードウェア又はソフトウェアによって提供することができる。
【００５４】
[0043]ある種の実施形態では、クリプトレット・コンテナ・サービスは、クリプトレット公開鍵をインスタンス化するために、（gethパラメータにおけるシグネチャによって）登録されたクリプトデリゲートからの署名された要求に対するポートをクリプレット側でリスンする。クリプトレット・コンテナ・サービスは、クリプトレットのクリプトレット登録ブロックチェーンを検査し、シグネチャの妥当性確認、プロセスの分離、従属関係を呼び出す方法、潜在的な型変換機能などについてポリシーを検査する。
【００５５】
[0044]ある種の実施形態では、クリプトレット呼び出しを、クリプトレット・コンテナ内のクリプトレットの事前にロードされた静的なステートレス(stateless)のインスタンスにルーティングするか、（エンクレーブを使用して）新規かつオプションのプロセス分離コンテナインスタンスにルーティングするか、又はコントラクト・クリプトレットのスマート・コントラクト・アフィニティ(smart contract affinity)を持つクリプトレット・コンテナにルーティングすることができる。パフォーマンスを向上するために、クリプトレットを暗号化されたコンテナに事前にロードしてもよい。
【００５６】
[0045]クリプトレット・コンテナ・サービスが、クリプトレット・コンテナに対するコールを作成すること、及びコールをルーティングすることの一方又は両方を行うと、クリプトレット・コンテナは、クリプトレットをインスタンス化して、適切なコールを呼び出す。そのコールがイベント登録の場合、そのコールバックの詳細を記録し、クリプトレットはアクティブのままになっていたりなっていなかったりしてもよい。たとえば、コールが特定の日時のコールバックのためのイベント登録である場合、クリプトレットを実行したままにする必要がある。長時間実行するクリプトレットの場合、ブロックチェーン上のインスタンスの最大数を設定すると、クリプトレットとノードとの間を１対１の比率としなくとも、あるレベルのフォールトトレランスを提供することができる。コールバック関数は、クリプトレットから、申込みするスマート・コントラクトのコールバック関数へのメッセージコールであってもよい。
【００５７】
[0046]ある種の実施形態では、セキュリティエンベロープは、クリプトデリゲートを介してブロックチェーン上のスマート・コントラクトに延長されるものであり、これは、認証済みホスト上の適切な証明書（ＨＴＴＰＳ／ＳＳＬ）と通信するクリプトレットをインスタンス化又は位置付けし、クリプトレット及び各コール時にクリプトレットを実行しているコンテナのシグネチャを検査する。また、クリプトデリゲートは、クリプトレットへのコールと、それらがスマート・コントラクトにおいて提供するデータを、クリプトレットのシグネチャ、オプションのクリプトレット・コンテナのシグネチャ、及び認証済みのホストアドレスと共に記録し、これにより監査用のオーセンティックな台帳を利用可能である。
【００５８】
[0047]ある種の実施形態では、クリプトレット及びそれらのクリプレット・コンテナは、クリプトレットが１つ又は複数のアイデンティティ「の代わりに」動作することを可能にするアイデンティティによってデジタル・シグネチャで署名され、又はデジタル・シグネチャを含むことができる。例えば、ユーザは、クリプトレットを作成し、自身のデジタル・シグネチャで署名することができ、このクリプトレットが呼び出されると、クリプトレットは、ユーザのエージェントとしてビジネス・プロセスにおいてアクションを実行する。
【００５９】
[0048]このようにして、クリプトレットは、実社会と相互作用するための正式なセキュリティモデルを提供し、企業コンソーシアムが信頼できる方法で既存のシステムとの相互運用を提供し、クリプトレットを書く開発者に対しさらなるレベルの再利用を提供する。また、クリプトレットは、どんな種類のブロックチェーンに対してもミドルウェア層全体を提供し、フレキシブルな実行環境を提供するので、ロジックの部分的なデリゲーションと、より大きなスケールでは完全なデリゲーションを可能にする。
【００６０】
[0049]図４Ａ、図４Ｂ及び図４Ｃは、ある種の実施形態における、ユーティリティ・クリプトレット及びイベント・ユース・ケースをサポートするＣＭＰのアーキテクチャを示すブロック図である。ユーティリティ・クリプトレット・アーキテクチャ４００は、ブロックチェーンノード４１０及びクリプトレット・システム４２０を含む。ブロックチェーンノード４１０は、仮想マシン４１１、コンセンサス・アルゴリズム・コンポーネント４１４、データベース４１５（例えば、分散型台帳及びマークル木）、及びネットワーキング・コンポーネント４１６を含む。仮想マシンは、クリプトデリゲート４１２を含み、スマート・コントラクト４１３のコードを実行する。クリプトレット・システムは、クリプトレット・コンテナ・サービス４３０と、クリプトレット４４１を含むクリプトレット・コンテナ４４０とを含む。クリプトレット・コンテナ・サービスは、クリプトレット・メタデータ・ストア４３１と、クリプトレット登録ブロックチェーン４３２と、ポリシー・ストア４３３とを含む。クリプトレット登録ブロックチェーン・ストアは、登録されたクリプトレットに関する情報を格納する。クリプトレット・メタデータ・ストアは、登録されたクリプトレットのメタデータを格納し、ポリシー・ストアは、クリプトレット・コンテナ・サービスのポリシー情報を格納する。また、クリプトレット・コンテナ・サービスは、クリプトレットを登録するための登録インターフェース４３４と、クリプトレットに関する情報を検索するための検索インターフェース４３５と、セキュア・チャネル・インターフェース４３６とを含む。仮想マシンがスマート・コントラクトのコードの命令４１７を実行すると、クリプトレットに対し安全なチャネルを介して、メッセージをストック・クライアント・クリプトレットに送信する。このスマート・コントラクトを初期化する間、スマート・コントラクトの初期化関数（例えばコンストラクタ）を呼び出して、ストック・クライアント・クリプトレットとの安全な接続を探して確立する。
【００６１】
[0050]図５Ａ、図５Ｂ、図５Ｃ及び図５Ｄは、ある種の実施形態において、コントラクト・クリプトレット、制御ユース・ケース、及びエンクレーブの使用をサポートするＣＭＰのアーキテクチャを示すブロック図である。図５Ａ及び５Ｂは、コントラクトがコントラク・クリプトレットのコードの表示を含むことを除いて、図４Ａ及び図４Ｂと同様であり、このコントラクト・クリプトレットは、コントラクト・クリプトレット・パッケージ５１７としてクリプトレット・コンテナ・サービスに送信される。また、クリプトレット・コンテナ・サービス５３０は、コントラクト・クリプトレットのインスタンスを作成するクリプトレットファクトリを含む。スマート・コントラクトのコードは、コントラクト・クリプトレットに対し挙動を要求し、その応答はメッセージとしてスマート・コントラクトに送信される。図５Ｄは、ハードウェア又はソフトウェアを介して、保護されたエンクレーブを使用して、プライベートで、安全な、改ざん防止された、実行及びデータのためのオペレーションを生成する。エンクレーブ内で実行しているクリプトレットは、クリプトレットを書き込む言語に適したクリプトレット・コンテナがホストする。
【００６２】
[0051]ＣＭＰを実装するコンピュータシステムは、中央処理ユニット、入力デバイス、出力デバイス（例えば、ディスプレイ・デバイス及びスピーカ）、記憶デバイス（例えば、メモリ及びディスクドライブ）、ネットワーク・インターフェース、グラフィック処理ユニット、加速度計、セルラ無線リンクインターフェース、全地球測位システムデバイスなどを含むことができる。入力デバイスは、キーボード、ポインティングデバイス、タッチスクリーン、（例えば、エアジェスチャー用の）ジェスチャ認識デバイス、頭部及び目の追跡デバイス、音声認識用のマイクロホンなどを含むことができる。クライアント側のコンピュータシステムは、デスクトップコンピュータ、ラップトップ、タブレット、電子リーダー、パーソナル・デジタル・アシスタント、スマートフォン、ゲームデバイス、サーバなどを含むことができる。サーバ側のコンピュータシステムは、データセンタ、大規模な並列システムなどのサーバを含むことができる。コンピュータシステムは、コンピュータ可読記憶媒体及びデータ伝送媒体を含むコンピュータ可読媒体にアクセスすることができる。コンピュータ可読記憶媒体は、一時的な伝播信号を含まない有形の記憶手段である。コンピュータ可読記憶媒体の例として、一次メモリ、キャッシュメモリ、及び二次メモリ（例えば、ＤＶＤ）、及び他のストレージなどのメモリを含む。コンピュータ可読記憶媒体はそこに記録するコンピュータ実行可能命令又はロジックを有してもよく、又はＣＭＰを実行するコンピュータ実行可能命令又はロジックで符号化してもよい。データ伝送媒体は、有線接続又は無線接続を介して、一時的な伝搬信号又は搬送波（例えば、電磁気）を介してデータを伝送するために使用される。コンピュータシステムは、鍵を生成して安全に格納し、また鍵を使用してデータを暗号化及び復号化するために、中央処理ユニットの一部として安全なクリプトプロセッサ（cryptoprocessor）を含んでもよい。
【００６３】
[0052]ＣＭＰについて、１つ又は複数のコンピュータ、プロセッサ、又は他のデバイスが実行する、プログラムモジュール及びコンポーネントなどのコンピュータ実行可能命令の一般的な背景のもとで説明する。一般的に、プログラムモジュール又はコンポーネントは、特定のタスクを実行し又は特定のデータタイプを実装する、ルーチン、プログラム、オブジェクト、データ構造などを含む。典型的には、プログラムモジュールの機能は、様々な例において要求されるとおりに結合したり、分割したりすることができる。ＣＭＰの態様は、例えば、特定用途向け集積回路（ＡＳＩＣ）、又はＦＰＧＡ、すなわちフィールドプログラマブルゲートアレイを使用して、ハードウェアに実装することができる。
【００６４】
[0053]以下の段落では、ＣＭＰの様々な実施形態を説明する。これら実施形態の任意の組合せを使用してＣＭＰを実行することもできる。以下に説明する処理は、ＣＭＰを実装するコンピュータ可読記憶媒体に格納されたコンピュータ実行可能命令を実行するプロセッサを有するコンピュータデバイスが行ってもよい。
【００６５】
[0054]ある種の実施形態では、ブロックチェーンにインストールされたコントラクトに関連する挙動を非ブロックチェーンアプリケーションにデリゲートするための、コンピュータシステムを提供する。このコンピュータシステムは、クリプトデリゲート及びクリプトレット・コンテナ・サービスのコンピュータ実行可能命令を格納する１つ又は複数のコンピュータ可読記憶媒体と、この１つ又は複数のコンピュータ可読記憶媒体に格納しているコンピュータ実行可能命令を実行する１つ又は複数のプロセッサとを備える。クリプトデリゲートは、命令を含み、これら命令は、仮想マシン上で実行しているコントラクトのコードから、クリプトレットのアイデンティティと、このクリプトレットにより実行されるべき要求された挙動を受信し、このアイデンティティと、その要求された挙動をクリプトレット・コンテナ・サービスに提供し、クリプトレット・コンテナ・サービスから、その要求された挙動を行うクリプトレットが生成した応答を受信し、コントラクトのコードにその応答を送信する。クリプトレット・コンテナ・サービスは、命令を含み、これら命令は、クリプトレットへの参照を含む登録されたクリプトレットに関する情報を格納し、クリプトデリゲートからそのアイデンティティ及び要求された挙動を受信し、クリプトレット・コンテナ及びクリプトレットを実行するホストを識別し、クリプトレットを認証し、この要求された挙動をクリプトレットに提供し、クリプトレットが生成した応答を受信し、ブロックチェーンにその応答を送信し、応答をクリプトデリゲートで検証する。ある種の実施形態では、仮想マシンがクリプトデリゲートを実行する。ある種の実施形態では、要求された挙動はイベントをコントラクトに送信することである。ある種の実施形態では、クリプトデリゲートは、命令をさらに含み、これら命令は、クリプトレットのコードをコントラクトから受信し、そのコードをクリプトレット・コンテナ・サービスに提供し、ここで、クリプトレット・コンテナ・サービスは、そのコードのハッシュを生成し、かつコントラクトが提供したハッシュと一致するか検査することによってそのコードを検証し、クリプトレット登録ブロックチェーンにそのコードを記録し、要求された挙動を実行するためクリプトレットを実行するよう認証済みホストに指示する。ある種の実施形態では、クリプトデリゲートは、コントラクトに関連するブロックチェーン内に、コントラクトによる各要求及びコントラクトに提供する応答の指示を記録する。ある種の実施形態では、コントラクトは、クリプレットを実行するホストの指示をクリプトデリゲートに与える。ある種の実施形態では、クリプトレットは、クリプトレット・コンテナが与える環境内で実行する。ある種の実施形態では、クリプトレット・コンテナを、安全のため、また改ざん防止されたオペレーションのために、保護されたエンクレーブ環境内で実行する。ある種の実施形態では、コントラクトは、クリプトレットに関する設定情報をクリプトデリゲートに提供する。ある種の実施形態では、この設定情報は、クリプトレットに関するインターフェース定義、及びクリプトレットの属性の指定を含む。
【００６６】
[0055]ある種の実施形態は、コンピュータシステムが実行する方法を提供する。本方法では、スマート・コントラクトに代わって挙動を実行するコントラクト・クリプトレットを登録する要求と、このコントラクト・クリプトレットのコードと、このコントラクト・クリプトレットのコードを実行する認証済みホストの指示とを、仮想マシンが実行するスマート・コントラクトから受信する。本方法では、コントラクト・クリプトレットのコードを検証する。本方法では、コントラクト・クリプトレットのコードを、クリプトレット登録ブロックチェーン及びデータストレージに格納する。本方法では、コントラクト・クリプトレットがその挙動を行うための要求を、スマート・コントラクトから受信する。本方法は、コントラクト・クリプトレットに対し認証済みホスト上で実行するように指示する。本方法は、認証済みホストで実行中のコントラクト・クリプトレットに対しその要求を送信して、その挙動を実行する。ある種の実施形態では、スマート・コントラクト及びコントラクト・クリプトレットとの通信を、安全なチャネルを介して行う。ある種の実施形態では、コードを検証することは、コードのハッシュを生成し、このハッシュをそのコードに関連する公開鍵と比較することを含む。ある種の実施形態では、スマート・コントラクトから受信した要求は、仮想マシンが実行するクリプトデリゲートを介して受信する。ある種の実施形態では、クリプトデリゲートは、スマート・コントラクト及びクリプトデリゲートとの通信の指示(indication)を、スマート・コントラクトのブロックチェーン内に記録する。ある種の実施形態では、仮想マシンはブロックチェーンのノード上で実行し、認証済みホストはブロックチェーンのノード外にあるコンピュータである。ある種の実施形態では、クリプトレット登録ブロックチェーンは、スマート・コントラクトのブロックチェーンとは別である。ある種の実施形態では、スマート・コントラクト及びクリプトレットのコードは、コンソーシアムのメンバーが承認する。
【００６７】
[0056]ある種の実施形態では、１つ又は複数のコンピュータシステムが実行する方法を提供する。本方法は、ブロックチェーンに関連するスマート・コントラクトの仮想マシンによる実行を指示する。本方法は、スマート・コントラクトの実行中に、クリプトデリゲートを介してクリプトレット・コンテナ・サービスへ、認証済みホスト上で実行するクリプトレットに挙動をデリゲートする要求を送信する。本方法は、クリプトレット・コンテナ・サービスの実行中に、クリプトレットのコードを実行するホストを識別し、識別したホストに対しクリプトレットのコードを実行して、デリゲートされた挙動を行うよう指示し、要求された挙動に対する応答をクリプトレットから受信し、その応答をクリプトデリゲートが妥当性確認するブロックチェーン上で、スマート・コントラクトに送信する。ある種の実施形態では、クリプトデリゲートは、クリプトレット・コンテナ・サービスとの安全な通信チャネルを確立し、クリプトレット・コンテナ・サービスは、ホストとの安全な通信チャネルを確立する。ある種の実施形態では、クリプトレットは、コントラクト・クリプトレットであり、クリプトレットのコードは、スマート・コントラクトが提供し識別し、ホストは、スマート・コントラクトが識別する。ある種の実施形態では、クリプレットは、異なるコンソーシアムのスマート・コントラクトで利用可能なユーティリティ・クリプトレットである。
【００６８】
[0057]本発明の主題を、構造的な特徴及び動作の一方又は両方に特有の言葉を用いて説明しているものの、添付の特許請求の範囲に示す発明の主題は、必ずしも上記した特有の特徴又は動作に限定されないことを理解されたい。むしろ、上記した特有の特徴や動作は、特許請求の範囲を実施するための例示的な形態として開示されている。したがって、本発明は、添付の特許請求の範囲による場合を除いて限定されない。
【図１】
2019524018.tif 000016
【図２】
2019524018.tif 000017
【図３】
2019524018.tif 000018
【図４Ａ】
2019524018.tif 000019
【図４Ｂ】
2019524018.tif 000020
【図４Ｃ】
2019524018.tif 000021
【図５Ａ】
2019524018.tif 000022
【図５Ｂ】
2019524018.tif 000023
【図５Ｃ】
2019524018.tif 000024
【図５Ｄ】
2019524018.tif 000025
【国際調査報告】
2019524018.tif 000026
2019524018.tif 000027