(57)【要約】   スマートコントラクトの親／子モデルにより、基になるデータの不変性を損なうことなくスマートコントラクトを更新可能にする。最初のステップとして、コントラクトアドレスを使用して呼び出される可能性のある任意の他のコントラクトを格納する親スマートコントラクト（クライアントコントラクト）が展開される。次に、新しい子スマートコントラクト（サービスコントラクト）が展開されるたびに、親スマートコントラクトが新しい子スマートコントラクトのアドレスで更新され、親スマートコントラクトが子スマートコントラクトを呼び出すことができるようになる。子スマートコントラクトの構造は、親スマートコントラクトで認識されている。たとえば、子スマートコントラクトに入力される入力の数と子スマートコントラクトから出力される出力の数は、親スマートコントラクトの展開前に親スマートコントラクトに認識され、トランザクションデータは親コントラクトに影響を与えることなくアクセス可能であり続ける。【選択図】      図２Ａ
2021520169.tif 000002
【特許請求の範囲】
【請求項１】
ブロックチェーンに実装されたスマートコントラクトを更新する方法であって、
前記スマートコントラクトを更新可能なスマートコントラクトと更新不可能なスマートコントラクトに分離する工程であって、前記更新不可能なスマートコントラクトは、永続的にアクセス可能の必要があるデータについて前記ブロックチェーンへの永続的なデータの格納及び取得を処理し、前記更新可能なスマートコントラクトは、前記ブロックチェーンへのデータ格納及び取得を含まない、分離する工程と、
前記更新不可能なスマートコントラクトと前記更新可能なスマートコントラクトの第１のバージョンを展開する工程と、
前記更新可能なスマートコントラクトの前記第１のバージョンのアドレスを提供する工程と、
前記更新不可能なスマートコントラクトが、前記更新可能なスマートコントラクトの前記第１のバージョンのアドレスを前記ブロックチェーンへ格納する工程と、
前記更新不可能なスマートコントラクトが前記ブロックチェーンから永続的なデータを取得し、前記永続的なデータを前記更新可能なスマートコントラクトの前記第１のバージョンに渡す工程と、
前記更新可能なスマートコントラクトが前記永続的なデータに対する計算を実行し、前記永続的なデータの計算に基づいて更新されたデータを前記更新不可能なスマートコントラクトに返す工程と、
前記更新不可能なスマートコントラクトが、前記更新されたデータを前記ブロックチェーンに格納する工程と、
を有する、方法。
【請求項２】
請求項１記載の方法において、前記更新可能なスマートコントラクトと前記更新不可能なスマートコントラクトが固定インターフェースを介して接続され、前記更新可能なスマートコントラクトの前記第１のバージョンのアドレスが、前記固定インターフェースを介して前記更新不可能なスマートコントラクトに提供され、前記更新不可能なスマートコントラクトは、前記固定インターフェースを介して前記永続的なデータを前記更新可能なスマートコントラクトの前記第１のバージョンに渡し、前記更新可能なスマートコントラクトは、前記永続的なデータの計算に基づいて更新されたデータを前記更新不可能なスマートコントラクトに返すものである、方法。
【請求項３】
請求項１記載の方法において、前記更新不可能なスマートコントラクトに前記更新可能なスマートコントラクトの前記第１のバージョンのアドレスを提供する工程は、前記更新不可能なスマートコントラクトのインターフェースを前記更新可能なスマートコントラクトの前記第１のバージョンのアドレスで呼び出す工程を有するものである、方法。
【請求項４】
請求項３に記載の方法において、さらに
前記更新可能なスマートコントラクトの第２のバージョンを展開する工程と、
前記更新可能なスマートコントラクトの前記第２のバージョンのアドレスを使用して、前記更新不可能なスマートコントラクトのインターフェースを呼び出す工程と、
前記更新不可能なスマートコントラクトが、前記更新可能なスマートコントラクトの前記第２のバージョンのアドレスを前記ブロックチェーンへ格納する工程と、
前記更新不可能なスマートコントラクトが、前記ブロックチェーンから前記更新可能なスマートコントラクトの前記第２のバージョンのアドレスを取得し、前記取得したアドレスで前記更新可能なスマートコントラクトの前記第２のバージョンを呼び出すことにより、前記更新可能なスマートコントラクトの前記第２のバージョンを呼び出す工程と、
を有するものである、方法
【請求項５】
請求項４記載の方法において、前記分離する工程は、前記スマートコントラクトを前記更新不可能なスマートコントラクトと複数の前記更新可能なスマートコントラクトに分離する工程を有し、前記展開する工程は、各更新可能なスマートコントラクトの第１および第２のバージョンを展開する工程を有し、前記呼び出す工程は、前記各更新可能なスマートコントラクトのそれぞれのバージョンのアドレスでそれぞれのインターフェースを呼び出す工程を有し、前記格納する工程は、前記各更新可能なスマートコントラクトの前記それぞれのバージョンのアドレスを前記ブロックチェーンに格納する工程を有し、前記呼び出す工程は、前記更新可能なスマートコントラクトの前記第２のバージョンのアドレスを前記ブロックチェーンから取得し、前記取得したアドレスで前記更新可能なスマートコントラクトの前記第２のバージョンを呼び出す工程を有するものである、方法。
【請求項６】
請求項４記載の方法において、前記分離する工程は、前記スマートコントラクトを前記更新不可能なスマートコントラクトと複数の前記更新可能なスマートコントラクトに分離する工程を有し、前記展開する工程は、各更新可能なスマートコントラクトの第１および第２のバージョンを展開する工程を有し、前記呼び出す工程は、前記インターフェースを前記各更新可能なスマートコントラクトに関連づけられた識別子と前記各更新可能なスマートコントラクトの前記それぞれのアドレスを使用して呼び出す工程を有し、前記格納する工程は、前記識別子と、前記各更新可能なスマートコントラクトの前記それぞれのバージョンのアドレスとを前記ブロックチェーンに格納する工程を有し、
前記呼び出す工程は、前記ブロックチェーンから前記更新可能なスマートコントラクトの前記第２のバージョンの識別子及びアドレスを取得し、前記取得されたアドレスで前記識別子によって識別される前記更新可能なスマートコントラクトの前記第２バージョンを呼び出す工程を有すものである、方法。
【請求項７】
請求項４記載の方法において、前記更新可能なスマートコントラクトは自己登録型であり、前記呼び出す工程は、前記自己登録型の更新可能なスマートコントラクトがそのそれぞれのバージョンのアドレスを用いて前記更新不可能なスマートコントラクトの前記インターフェースを呼び出す工程を有するものである、方法。
【請求項８】
請求項４記載の方法において、前記分離する工程は、前記スマートコントラクトを前記更新不可能なスマートコントラクトと複数の前記更新可能なスマートコントラクトに分離する工程を有し、前記展開する工程は、各更新可能なスマートコントラクトの第１および第２のバージョンを展開する工程を有し、前記更新可能なスマートコントラクトは自己登録型であり、前記呼び出す工程は、前記自己登録型の更新可能スマートコントラクトが、前記更新不可能なスマートコントラクトのそれぞれのインターフェースを前記各自己登録型の更新可能スマートコントラクトの前記それぞれのバージョンのアドレスで呼び出す工程を有し、前記格納する工程は、前記各更新可能なスマートコントラクトの前記それぞれのバージョンのアドレスを前記ブロックチェーンへ格納する工程を有し、前記呼び出す工程は、前記ブロックチェーンから前記更新可能なスマートコントラクトの前記第２のバージョンのアドレスを取得し、前記取得されたアドレスで前記更新可能なスマートコントラクトの前記第２のバージョンを呼び出す工程を有するものである、方法。
【請求項９】
請求項４記載の方法において、前記更新不可能なスマートコントラクトは、前記ブロックチェーンから永続的なデータを取得し、前記永続的なデータを前記更新可能なスマートコントラクトに渡し、前記更新可能なスマートコントラクトは、前記永続的なデータを計算し、その計算に基づいたデータを、前記ブロックチェーンへの永続的な格納のために前記更新不可能なスマートコントラクトに返すものである、方法。
【請求項１０】
請求項４記載の方法において、前記分離する工程は、前記スマートコントラクトを複数の更新不可能なスマートコントラクトに分離する工程を有するものである、方法。
【請求項１１】
請求項１に記載の方法において、
前記更新可能なスマートコントラクトの前記第１のバージョンを展開する前に、前記更新不可能なスマートコントラクトのアドレスを前記更新可能なスマートコントラクトの前記第１のバージョンにハードコーディングする工程と、
前記更新可能なスマートコントラクトの第２のバージョンを展開する工程と、
前記更新可能なスマートコントラクトの前記第２のバージョンを呼び出す工程と、
前記更新可能なスマートコントラクトの前記第２のバージョンが、前記ハードコードされたアドレスで前記更新不可能なスマートコントラクトを呼び出す工程と、
前記更新不可能なスマートコントラクトが任意の永続的なデータを前記ブロックチェーンに格納する工程と、をさらに有するものである、方法。
【請求項１２】
ブロックチェーンにスマートコントラクトを実装するためのシステムであって、
命令を格納するためのメモリと、
前記メモリに格納された前記命令を使用して以下の操作を実行する１つ以上のプロセッサと、
を有し、この操作は、
前記スマートコントラクトを更新可能なスマートコントラクトと更新不可能なスマートコントラクトに分離する工程であって、前記更新不可能なスマートコントラクトは、永続的にアクセス可能の必要があるデータについて、ブロックチェーンへの永続的なデータの格納と取得を処理し、前記更新可能なスマートコントラクトには前記ブロックチェーンへのデータ格納と取得を含まない、分離する工程と、
前記更新不可能なスマートコントラクトと前記更新可能なスマートコントラクトの第１のバージョンを展開する工程と、
前記更新不可能なスマートコントラクトに、前記更新可能なスマートコントラクトの前記第１のバージョンのアドレスを提供する工程と、
前記更新不可能なスマートコントラクトが、前記更新可能なスマートコントラクトの前記第１のバージョンのアドレスを前記ブロックチェーンに格納する工程と、
前記更新不可能なスマートコントラクトが前記ブロックチェーンから永続的なデータを取得し、前記永続的なデータを前記更新可能なスマートコントラクトの前記第１のバージョンに渡す工程と、
前記更新可能なスマートコントラクトが、前記永続的なデータの計算を実行し、前記永続的なデータの計算に基づいた更新されたデータを前記更新不可能なスマートコントラクトに返す工程と、
前記更新不可能なスマートコントラクトが前記更新されたデータを前記ブロックチェーンに格納する工程と、を含むものである、システム。
【請求項１３】
請求項１２記載のシステムにおいて、前記更新可能なスマートコントラクトと前記更新不可能なスマートコントラクトを接続する固定インターフェースをさらに有し、前記更新可能なスマートコントラクトの前記第１のバージョンのアドレスが、前記固定インターフェースを介して前記更新不可能なスマートコントラクトに提供され、前記更新不可能なスマートコントラクトは、前記固定インターフェースを介して前記永続的なデータを前記更新可能なスマートコントラクトの前記第１のバージョンに渡し、前記更新可能なスマートコントラクトは、前記永続的なデータの計算に基づいて更新されたデータを前記固定インターフェースを介して前記更新不可能なスマートコントラクトに返すものである、システム。
【請求項１４】
請求項１２記載のシステムにおいて、前記メモリは、前記更新不可能なスマートコントラクトのインターフェースを前記更新可能なスマートコントラクトの前記第１のバージョンのアドレスで呼び出すことにより、前記更新不可能なスマートコントラクトに前記更新可能なスマートコントラクトの前記第１のバージョンのアドレスを提供する工程を含む操作を実行するためのさらなる命令を格納するものである、システム。
【請求項１５】
請求項１４記載のシステムにおいて、前記メモリは、
前記更新可能なスマートコントラクトの第２のバージョンを展開する工程と、
前記更新可能なスマートコントラクトの前記第２のバージョンのアドレスを使用して、前記更新不可能なスマートコントラクトの前記インターフェースを呼び出す工程と、
前記更新不可能なスマートコントラクトが、前記更新可能なスマートコントラクトの前記第２のバージョンのアドレスを前記ブロックチェーンへ格納する工程と、
前記更新不可能なスマートコントラクトが、前記ブロックチェーンから前記更新可能なスマートコントラクトの前記第２のバージョンのアドレスを取得し、前記取得したアドレスで前記更新可能なスマートコントラクトの前記第２のバージョンを呼び出すことにより、前記更新可能なスマートコントラクトの前記第２のバージョンを呼び出す工程と、を
含む操作を実行するための指令をさらに格納するものである、システム。
【請求項１６】
請求項１５記載のシステムにおいて、前記分離する工程は、前記スマートコントラクトを前記更新不可能なスマートコントラクトと複数の前記更新可能なスマートコントラクトに分離する工程を有し、前記展開する工程は、各更新可能なスマートコントラクトの第１および第２のバージョンを展開する工程を有し、前記呼び出す工程は、前記各更新可能なスマートコントラクトのそれぞれのバージョンのアドレスでそれぞれのインターフェースを呼び出す工程を有し、前記格納する工程は、前記各更新可能なスマートコントラクトの前記それぞれのバージョンのアドレスを前記ブロックチェーンに格納する工程を有し、前記呼び出す工程は、前記更新可能なスマートコントラクトの前記第２のバージョンのアドレスを前記ブロックチェーンから取得し、前記取得したアドレスで前記更新可能なスマートコントラクトの前記第２のバージョンを呼び出す工程を有するものである、システム。
【請求項１７】
請求項１５記載のシステムにおいて、前記分離する工程は、前記スマートコントラクトを前記更新不可能なスマートコントラクトと複数の前記更新可能なスマートコントラクトに分離する工程を有し、前記展開する工程は、各更新可能なスマートコントラクトの第１および第２のバージョンを展開する工程を有し、前記呼び出す工程は、前記各更新可能なスマートコントラクトに関連付けられた識別子と前記それぞれのアドレスとで前記インターフェースを呼び出す工程を有し、前記格納する工程は、前記各更新可能なスマートコントラクトの前記それぞれのバージョンの識別子とアドレスを前記ブロックチェーンへ格納する工程を有し、前記呼び出す工程は、前記ブロックチェーンから前記更新可能なスマートコントラクトの前記第２のバージョンの識別子とアドレスを取得し、前記取得したアドレスの識別子によって識別される前記更新可能なスマートコントラクトの前記第２のバージョンを呼び出す工程を有する、ものであるシステム。
【請求項１８】
請求項１５記載のシステムにおいて、前記更新可能なスマートコントラクトは自己登録型であり、前記呼び出す工程は、前記自己登録型の更新可能スマートコントラクトがそのそれぞれのバージョンのアドレスで前記更新不可能スマートコントラクトの前記インターフェースを呼び出す工程を有するものである、システム。
【請求項１９】
請求項１５記載のシステムにおいて、前記分離する工程は、、前記スマートコントラクトを前記更新不可能なスマートコントラクトと複数の前記更新可能なスマートコントラクトに分離する工程を有し、前記展開する工程は、各更新可能なスマートコントラクトの第１および第２のバージョンを展開する工程を有し、前記更新可能なスマートコントラクトは、自己登録型であり、前記呼び出す工程は、前記自己登録型の更新不可能なスマートコントラクトが、それぞれの前記自己登録型の更新可能スマートコントラクトの前記それぞれのバージョンのアドレスを使用して、前記更新不可能なスマートコントラクトのそれぞれのインターフェースを呼び出す工程を有し、前記格納する工程は、前記ブロックチェーンへ前記各更新可能なスマートコントラクトの前記それぞれのバージョンのアドレスに格納する工程を有し、前記呼び出す工程は、前記ブロックチェーンから前記更新可能なスマートコントラクトの前記第２のバージョンのアドレスを取得し、前記取得されたアドレスで前記更新可能なスマートコントラクトの前記第２のバージョンを呼び出す工程を有するものである、システム。  
【請求項２０】
請求項１５記載のシステムにおいて、前記メモリは、前記更新不可能スマートコントラクトが前記ブロックチェーンから永続的なデータを取得して、前記永続的なデータを前記更新可能スマートコントラクトに渡す工程と、前記更新可能なスマートコントラクトが、前記永続的なデータに基づいたデータを計算して、前記ブロックチェーンへの永続的な保存のために前記更新不可能なスマートコントラクトに前記データを返す工程を含む、操作を実行するための指令をさらに格納するものである、システム。
【請求項２１】
請求項１５記載のシステムにおいて、前記メモリは、前記スマートコントラクトを複数の前記更新不可能なスマートコントラクトに分離する工程を含む、操作を実行するためのさらなる命令を格納するものである、システム。
【請求項２２】
請求項１２記載のシステムにおいて、前記メモリは、
前記更新可能なスマートコントラクトの前記第１のバージョンを展開する前に、前記更新不可能なスマートコントラクトのアドレスを前記更新可能なスマートコントラクトの前記第１のバージョンにハードコーディングする工程と、
前記更新可能なスマートコントラクトの第２のバージョンを展開する工程と、
前記更新可能なスマートコントラクトの前記第２のバージョンを呼び出す工程と、
前記更新可能なスマートコントラクトの前記第２のバージョンが前記ハードコードされたアドレスで前記更新不可能なスマートコントラクトを呼び出す工程と、
前記更新不可能なスマートコントラクトが、任意の永続的なデータを前記ブロックチェーンに格納する工程と、
を含む操作を実行するためのさらなる命令を格納するものである、システム。
【請求項２３】
ブロックチェーンに実装されたスマートコントラクトを更新するためのコンピューター命令を格納する非一時的なコンピューター読み取り可能な媒体であって、前記命令は、１つ以上のプロセッサーによって実行されると、
前記スマートコントラクトを更新可能なスマートコントラクトと更新不可能なスマートコントラクトに分離する工程であって、  前記更新不可能なスマートコントラクトは、永続的にアクセス可能の必要があるデータについて、前記ブロックチェーンへの永続的なデータの格納と取得を処理し、前記更新可能なスマートコントラクトは、前記ブロックチェーンへのデータ格納と取得を含まない、分離する工程と、
前記更新不可能なスマートコントラクトと前記更新可能なスマートコントラクトの第１のバージョンを展開する工程と、
前記更新不可能なスマートコントラクトに、前記更新可能なスマートコントラクトの前記第１のバージョンのアドレスを提供する工程と、
前記更新不可能なスマートコントラクトが、前記更新可能なスマートコントラクトの前記第１のバージョンのアドレスを前記ブロックチェーンへ格納する工程と、
前記更新不可能なスマートコントラクトが前記ブロックチェーンから永続的なデータを取得し、前記永続的なデータを前記更新可能なスマートコントラクトの前記第１のバージョンに渡す工程と、
前記更新可能なスマートコントラクトが、前記永続的なデータに対して計算を実行し、前記永続的なデータの計算に基づいて更新されたデータを前記更新不可能なスマートコントラクトに返す工程と、
前記更新不可能なスマートコントラクトが前記更新されたデータを前記ブロックチェーンに格納する工程と、
を前記１つ以上のプロセッサーに実行させるものである、システム。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願への相互参照
本出願は、２０１８年３月２９日に出願された「更新可能なスマートコントラクト」と題された米国仮特許出願第６２／６５０，１８３号の優先権を主張する。
【０００２】
本出願は、更新可能なスマートコントラクトの設計、または別の場合では各スマートコントラクトとその永続的なデータ格納との間の結合（スマートコントラクトが実行するブロックチェーンまたは分散型台帳プラットフォームによって施行される）によって更新可能性が防止または低減されるスマートコントラクトの設計に関するものである。  
【背景技術】
【０００３】
ブロックチェーン技術は、今世紀最大、または少なくとも今世紀前半の最大の情報技術革命、をもたらす可能性を秘めている。インターネット革命後、ブロックチェーン革命はおそらくこれまで最大の混乱をもたらし、インターネットの最も弱い脈である信頼の欠如に挑むものである。ブロックチェーンは、データを実質的に不変にすることでインターネットに信頼をもたらすことができる、これまでの唯一の技術である。
【０００４】
イーサリアムは現在、最も広く使用されているブロックチェーンシステムの１つである。イーサリアムは、ノード間の信頼を確立するためにデータを不変にする。イーサリアムは、保存される値を生成するだけでなく、プログラムまたはスマートコントラクトを不変にする。これは、イーサリアムでスマートコントラクトを展開した場合、そのスマートコントラクトは一度展開すると更新または変更できないことを意味する。
【０００５】
したがって、データの不変性には、スマートコントラクトの将来の更新が不可能になるという代償が伴う。スマートコントラクトを更新できないことは、多くの使用ケースで実用的ではなく、スマートコントラクトの萎縮につながる可能性がある。ここで説明するシステムと方法は、基になるデータの不変性を損なうことなくスマートコントラクトを更新できるように設計されている。
【発明の概要】
【発明が解決しようとする課題】
【０００６】
本明細書で説明されるシステムおよび方法は、親および子モデルとして実装されるアーキテクチャソリューションを提供することによって、当技術分野のニーズに答えるものである。最初の工程として、子スマートコントラクトアドレスを使用して呼び出すことができる子スマートコントラクトの子スマートコントラクトアドレスを格納する機能を備えた親スマートコントラクトが展開される。次に、新しい子スマートコントラクトが展開されるたびに、親スマートコントラクトが新しい子スマートコントラクトのアドレスで更新され、親スマートコントラクトが新しい子スマートコントラクトを呼び出すことができるようになる。ここでの唯一の制限は、子スマートコントラクトの構造が親スマートコントラクトで認知されていることである。たとえば、子スマートコントラクトに入力される入力の数と子スマートコントラクトから出力される出力の数は、親スマートコントラクトの展開前に親スマートコントラクトで認識される。本明細書に記載の特定の実施形態では、親スマートコントラクトは呼び出しスマートコントラクトであり、更新可能ではないが、子スマートコントラクトは呼び出されたスマートコントラクトであり、更新可能である。この状況では、呼び出し元の（親）スマートコントラクトに、更新された呼び出し先の（子）スマートコントラクトを呼び出す方法が通知される。他方、本明細書で説明される他の実施形態では、呼び出し先の（子）スマートコントラクトは更新可能ではなく、呼び出し元の（親）スマートコントラクトは更新可能である。この場合では、呼び出し元（親）スマートコントラクトが新しいバージョンに更新されると、以前の呼び出し元（親）スマートコントラクトと同様に、アドレスが変更されていない呼び出し先（子）コントラクトを引き続き使用する。 
【課題を解決するための手段】
【０００７】
サンプルの実施形態において、システムおよび方法は、より一般的にスマートコントラクトまたはスマートコントラクトの設計に関するものであり、この更新可能性は、通常であれば、イーサリアムのような一般的なスマートコントラクトプラットフォームの場合のように、各スマートコントラクトと、ブロックチェーンまたは分散型台帳プラットフォームによって施行されるその永続的なデータ格納との間の結合によって妨げあるいは制限されるものである。そのようなサンプルの実施形態では、各概念的なスマートコントラクトは、個別の更新可能および更新不可能なスマートコントラクトに分割され、各スマートコントラクトの機能の分割は、プラットフォームの永続的なデータ格納の任意の直接使用が更新不可能なスマートコントラクトの機能の一部になり、残りの機能の少なくとも一部は更新可能なスマートコントラクトに残り、これにより、スマートコントラクトを相互運用するための既存または将来の技術を、元の概念的なスマートコントラクトを使って達成できた同じ組み合わせの機能を達成するために使用できる。また、スマートコントラクトに別のスマートコントラクトとの相互利用を開始するように指示するための既存または将来の技術は、相互利用を可能にするために、更新可能なスマートコントラクトの元の展開またはその後の展開と組み合わせて使用できる。
【０００８】
サンプルの実施形態は、ブロックチェーンによって実装されたスマートコントラクトを、固定インターフェースを介して接続された更新可能なスマートコントラクトと更新不可能なスマートコントラクトに分離することによって更新する方法を含む。更新不可能なスマートコントラクトは、永続的にアクセス可能の必要があるデータのブロックチェーンへの永続的なデータ格納と取得を処理し、更新可能なスマートコントラクトには、ブロックチェーンへのデータ格納と取得は含まれない。更新不可能なスマートコントラクトと更新可能なスマートコントラクトの第一のバージョンが展開され、更新不可能なスマートコントラクトには、インターフェースを介して更新可能なスマートコントラクトの第一のバージョンのアドレスが提供される。更新不可能なスマートコントラクトは、更新可能なスマートコントラクトの第一のバージョンのアドレスをブロックチェーンに格納する。更新不可能なスマートコントラクトは、ブロックチェーンから永続的なデータを取得し、インターフェースを介して更新可能なスマートコントラクトの第一のバージョンに永続的なデータを渡す。動作中、更新可能なスマートコントラクトは永続データに対して計算を実行し、永続データの計算に基づいて更新されたデータをインターフェースを介して更新不可能なスマートコントラクトに返し、更新不可能なスマートコントラクトは更新されたデータをブロックチェーンに格納する。
【０００９】
他のサンプルの実施形態では、ブロックチェーンに実装されたスマートコントラクトを更新するための方法は、スマートコントラクトを更新可能なスマートコントラクトと更新不可能なスマートコントラクトに分離する工程であって、更新不可能なスマートコントラクトは、永続的にアクセス可能の必要があるデータのデータチェーンへの永続的なデータ格納と取得を処理し、更新可能なスマートコントラクトはブロックチェーンへのデータ格納と取得を含まないものである、分離する工程と、更新不可能なスマートコントラクトと更新可能なスマートコントラクトの第一のバージョンを展開する工程と、更新可能なスマートコントラクトの第一のバージョンのアドレスを使用して、更新不可能なスマートコントラクトのインターフェースを呼び出す工程と、更新不可能なスマートコントラクトが更新可能なスマートコントラクトの第一のバージョンのアドレスをブロックチェーンに保存する工程とを含む。前記スマートコントラクトを更新するために、前記更新可能なスマートコントラクトの第２のバージョンが展開され、前記更新不可能なスマートコントラクトのインターフェースが、前記更新不可能なスマートコントラクトがブロックチェーンに格納する更新可能なスマートコントラクトの第２のバージョンのアドレスで呼び出される。前記更新不可能なスマートコントラクトは、前記ブロックチェーンから前記更新可能なスマートコントラクトの第２のバージョンのアドレスを取得し、前記更新可能なスマートコントラクトの第２のバージョンを呼び出すことにより、前記取得したアドレスで前記更新可能なスマートコントラクトの第２のバージョンを呼び出す。
【００１０】
他の実施形態では、スマートコントラクトは、更新不可能なスマートコントラクトと、更新不可能なスマートコントラクトとのインターフェースをそれぞれ有する複数の更新可能なスマートコントラクトとに分離される。前記呼び出す工程は、各更新可能なスマートコントラクトのそれぞれのバージョンのアドレスを使用してそれぞれのインターフェースを呼び出し、各更新可能なスマートコントラクトのそれぞれのバージョンのアドレスがブロックチェーンに格納される。前記呼び出す工程には、ブロックチェーンから更新可能なスマートコントラクトの第２のバージョンのアドレスを取得し、取得したアドレスで更新可能なスマートコントラクトの第２のバージョンを呼び出す工程を含む。あるいは、それぞれのインターフェースは、単一のインターフェースにしてもよく、その場合呼び出す工程は、各更新可能なスマートコントラクトに関連付けられた識別子およびそれぞれのアドレスを用いて単一のインターフェースを呼び出す工程を含む。この実施形態では、前記格納する工程は、各更新可能なスマートコントラクトのそれぞれのバージョンの識別子およびアドレスをブロックチェーンに格納し、前記呼び出す工程は、ブロックチェーンから更新可能なスマートコントラクトの第２のバージョンの識別子およびアドレスを取得し、取得したアドレスの識別子によって識別される更新可能なスマートコントラクトの第２のバージョンを呼び出す工程を含む。
【００１１】
さらに他の実施形態では、前記更新可能なスマートコントラクトは自己登録型であり、前記呼び出す工程は、この自己登録型の更新可能なスマートコントラクトが、自己登録型の更新可能なスマートコントラクトのそれぞれのバージョンのアドレスで更新不可能なスマートコントラクトのインターフェースを呼び出す工程を含む。複数の更新可能なスマートコントラクトも自己登録型である場合がある。そのような実施形態では、前記分離する工程は、スマートコントラクトを更新不可能なスマートコントラクトと複数の更新可能なスマートコントラクトに分離することを含み、前記展開する工程は、各更新可能なスマートコントラクトの第１および第２のバージョンを展開する工程を含む。前記呼び出す工程には、自己登録型の更新可能スマートコントラクトが、更新不可能なスマートコントラクトのそれぞれのインターフェースを、各自己登録型の更新可能スマートコントラクトのそれぞれのバージョンのアドレスで呼び出す工程を含む。また、前記格納する工程は、各更新可能なスマートコントラクトのそれぞれのバージョンのアドレスをブロックチェーンに格納することを含み、前記呼び出す工程は、ブロックチェーンから更新可能なスマートコントラクトの第２のバージョンのアドレスを取得し、取得したアドレスでの更新可能なスマートコントラクトの第２のバージョンを呼び出す工程を有する。
【００１２】
これらの実施形態のそれぞれにおいて、前記分離する工程は、スマートコントラクトを複数の更新不可能なスマートコントラクトに分離する工程を含み得る。
【００１３】
さらに他の実施形態では、前記更新可能なスマートコントラクトは、更新不可能なスマートコントラクトのアドレスでハードコードされている。この実施形態では、ブロックチェーンに実装されたスマートコントラクトは、スマートコントラクトを更新可能なスマートコントラクトと更新不可能なスマートコントラクトに分離することによって更新され、更新不可能なスマートコントラクトは、永続的にアクセス可能の必要があるデータについて、ブロックチェーンへの永続的なデータ格納と取得を処理し、更新可能なスマートコントラクトには、ブロックチェーンへの格納と取得が含まれていない。更新不可能なスマートコントラクトが展開され、更新不可能なスマートコントラクトのアドレスが、更新可能なスマートコントラクトの第１のバージョンが展開されると、これにハードコードされる。更新可能なスマートコントラクトを更新するために、更新可能なスマートコントラクトの第２のバージョンが展開され、更新可能なスマートコントラクトの第２のバージョンが呼び出される。更新可能なスマートコントラクトの第２のバージョンは、ハードコードされたアドレスで更新不可能なスマートコントラクトを呼び出し、更新不可能なスマートコントラクトは任意の永続的なデータをブロックチェーンに格納する。
【００１４】
本明細書に記載の実施形態はまた、本開示全体を通して記載される方法を実施するための命令でコード化されたコンピュータシステムおよびコンピュータ可読媒体を包含する。
【図面の簡単な説明】
【００１５】
本開示は、例として示したものであり、添付の図面の図に限定するものではない、また同様参照番号は類似の要素を示す。
【００１６】
図１Ａ〜１Ｆは、いくつかの実施形態による計算機の親／子スマートコントラクトの実施形態を示す。
【図１Ａ】図１Ａは、親コントラクトが展開される最初の工程を示している。
【図１Ｂ】図１Ｂは、加算機能を備えた子コントラクトの展開を示している。
【図１Ｃ】図１Ｃは、乗算機能を備えた別の子コントラクトの展開を示している。
【図１Ｄ】図１Ｄは、親コントラクと、加算の子コントラクおよび乗算の子コントラクトの両方との関係を示している。
【図１Ｅ】図１Ｅは、減算の子コントラクの展開を含む、加算関数の減算関数への置き換えを示している。
【図１Ｆ】図１Ｆは、削除される加算の子コントラクトと親コントラクトとの間の接続、および追加される減算の子コントラクトとの接続を示している。
【図２Ａ】図２Ａは、サービスコントラクトが外部呼び出しによって更新される１つのサービスコントラクトを含む、いくつかの実施形態による、単純なケースを示している。
【図２Ｂ】図２Ｂは、図２Ａに示される初期展開に関して、更新されたサービスコントラクトの展開を示す。
【図２Ｃ】図２Ｃは、図２Ｂに示される更新されたサービスコントラクトのいくつかの実施形態による呼び出しを示す。
【図３Ａ】図３Ａは、いくつかの実施形態による、外部呼び出しによって更新されるアドレスを有する複数のサービスコントラクトの実施形態の初期展開を示す。
【図３Ｂ】図３Ｂは、いくつかの実施形態による、図３Ａに示される初期展開に関して、更新されたサービスコントラクトＸ（１≦Ｘ≦Ｍ）の展開を示す。
【図３Ｃ】図３Ｃは、いくつかの実施形態による、図３Ｂに示された更新されたサービスコントラクトＸの呼び出しを示す。
【図４Ａ】図４Ａは、いくつかの実施形態による、自己登録型のサービスコントラクトの一実施形態の初期展開を示す。
【図４Ｂ】図４Ｂは、いくつかの実施形態による、図４Ａに示された初期展開に関して、更新された自己登録型のサービスコントラクトの展開を示す。
【図４Ｃ】図４Ｃは、いくつかの実施形態による、図４Ｂに示された更新された自己登録型のサービスコントラクトの呼び出しを示す。
【図５Ａ】図５Ａは、いくつかの実施形態による、サービスコントラクトにおいて永続的な格納が提供される実施形態の初期展開を示す。
【図５Ｂ】図５Ｂは、いくつかの実施形態による、図５Ａに示された初期展開に関して、更新されたクライアントコントラクトの展開を示す。
【図５Ｃ】図５Ｃは、いくつかの実施形態による、図５Ｂの更新されたクライアントコントラクトの呼び出しを示す。
【図６Ａ】図６Ａは、スマートコントラクトのバージョン１および２がブロックチェーン上に格納され、ブロックチェーンのデータ格納がコントラクトのそれぞれのバージョンに緊密に結合されている従来のスマートコントラクトを示す。
【図６Ｂ】図６Ｂは、すべてのデータ格納がクライアントコントラクトに結合され、データ格納要件のないそれぞれのサービスコントラクトが、インターフェースを介してクライアントコントラクトに更新された計算結果を提供する、いくつかの実施形態による、更新可能なスマートコントラクトを示す。
【図７】図７は、本明細書で説明される実施例が実装されるコンピュータシステムを示すブロック図である。
【発明を実施するための形態】
【００１７】
以下の図１〜７に関する説明は、当業者がそれらを実施できるようにするための特定の実施形態を十分に示している。他の実施形態において、構造的、論理的、プロセス、および他の変更を組み込むことができる。いくつかの実施形態の一部および特徴が、他の実施形態のものに含まれ、またはそれらの代替になり得る。請求項に記載の実施形態は、それらの請求項の利用可能なすべての同等物を包含する。
【００１８】
用語
ブロックチェーン：暗号化を使用してリンクおよび保護される、ブロックと呼ばれる継続的に増加するレコードのリスト。各ブロックには通常、前のブロックの暗号化ハッシュ、タイムスタンプ、およびトランザクションデータが含まれる。ブロックチェーンは、トランザクションデータの変更に対して本質的に強いように設計されている。分散型台帳として使用される場合、ブロックチェーンは通常、新しいブロックを検証するためのプロトコルに集合的に準拠するピアツーピアネットワークによって管理される。一度記録されると、特定のブロックのデータは、後続のすべてのブロックを変更せずに遡及的に変更することはできない。これには、ネットワークの過半数の談合が必要になる。
【００１９】
スマートコントラクト：ブロックチェーンまたは分散型台帳で行われる汎用計算を提供するコンピュータープロトコル。スマートコントラクトトランザクションは、単純な場合もあれば、高度なロジックを実装する場合もある。結果として生じるトランザクションは、通常、公開され、追跡可能で、元に戻せない。さまざまな暗号通貨とイーサリアムなどのスマートコントラクトプラットフォームは、スマートコントラクトのタイプを実装している。イーサリアムの場合、スマートコントラクトは、バイトコードにコンパイルされ、実行のためにイーサリアムブロックチェーンに展開される高水準プログラミングの抽象化である。
【００２０】
イーサリアム：スマートコントラクト（スクリプティング）関数を特徴とする、オープンソースの公開されたブロックチェーンベースの分散コンピューティングプラットフォームおよびオペレーティングシステム。  イーサリアムは、分散型チューリング完全仮想マシンであるイーサリアム仮想マシン（ＥＶＭ）を提供し、これは、パブリックノードの国際ネットワークを使用してスクリプトを実行するためのスマートコントラクトのランタイム環境である。イーサリアムは、著名で周知のスマートコントラクトフレームワークである。
【００２１】
イーサリアムコンストラクター：イーサリアムにおいて、コンストラクターは、スマートコントラクトがブロックチェーンネットワークに展開されるときにブロックチェーンプラットフォームによって自動的に実行されるスマートコントラクトの一部であるルーチンである。他のブロックチェーンプラットフォームには同様のメカニズムが含まれているか、またはそのようなメカニズムが実現可能である。
【００２２】
コントラクト：スマートコントラクト。
【００２３】
クライアント（親）コントラクト＊：永続的にアクセス可能の必要があるブロックチェーンへのすべての永続的なデータ格納と取得を処理する分離されたコントラクトの部分。クライアントコントラクトは、一度も更新されないように設計されている。サンプルの実施形態では、クライアントコントラクトは、永続的なデータを取得してサービスコントラクトに渡すことができ、サービスコントラクトは、データを計算して、永続的な格納のためにクライアントコントラクトに返すことができる。
【００２４】
サービス（子）コントラクト＊：クライアントコントラクトによって呼び出され、格納と取得を含まない、分離されたコントラクトの部分。  サービスコントラクトは、本明細書に記載されているいくつかのメカニズムの１つを介していつでも更新できる。
＊以下に説明するいくつかの実施形態では、クライアントコントラクトとサービスコントラクトの役割が逆になり、サービスコントラクトが永続的な格納と取得を提供し、クライアントコントラクトが更新可能である。
【００２５】
概要  
ここで説明するシステムと方法は、イーサリアムのようなプログラム可能な分散型台帳プラットフォームの導入によって生じた固有の問題に部分的に対処する。これらのプラットフォームは、プログラム自体が分散型台帳ネットワークに展開された後、ユーザー提供の分散型プログラム（「コントラクト」）と各プログラムによって永続的に分散型台帳に保存されているデータを緊密に結合する。この結合の効果は、従来技術のシステムでコントラクトを更新されたバージョンで置き換えようとすると、以前のバージョンによって保存されたすべてのデータが更新されたコントラクトで読み取れなくなることである。当業者は、これが、ネットワークの通常の日常の操作の範囲外である、分散型台帳ネットワークプログラミングへの分岐などの特別な手段を含まないことを理解するであろう。ここで説明する手法は、このような分散型台帳プラットフォームに適用される。
【００２６】
従来技術のシステムでは、コントラクトを更新できないことが単に受け入れら、永続的なデータへのアクセスを失うことなくコントラクトの一部を更新できないことを予期してコントラクトが展開されてきた。本明細書で説明するシステムと方法は、スマートコントラクトを（１）永続的にアクセス可能の必要があるすべてのデータのブロックチェーンへのすべての永続的なデータ格納と取得を処理するクライアントコントラクトと（２）クライアントコントラクトによって呼び出され、そのような格納と取得を含まない１つ以上のサービスコントラクトに、分離することによってこの制限に対処すること提案するものである。
【００２７】
クライアントクライアントは一度も更新されないように設計されるが、サービスクライアントは、ここで説明されているいくつかのメカニズムの１つを介していつでも更新できる。サンプルの実施形態では、クライアントクライアントは、永続的なデータを取得してサービスクライアントに渡すことができ、サービスクライアントは、データを計算して、永続的な格納のためにクライアントクライアントに返すことができる。
【００２８】
システムおよび方法を詳細に説明する前に、サンプル実施形態の親／子（クライアントコントラクト／サービスコントラクト）アーキテクチャをよりよく説明するために、計算機の簡単な例を最初に説明する。
【００２９】
計算機の例
初日に次の機能を備えた計算機を作成したいと仮定する。  
二つの数値を加算する
二つの数値を乗算する
すべての演算結果を保存し、そのデータは決して失わない
上記の機能の計算機を作るには、次の特徴を有する親コントラクトが展開される。
・２つの数値を取り、１つの数値を返すことができる任意の子コントラクトを呼び出す
・コントラクトアドレスを保存する機能
・返された結果を状態変数に格納する機能
上記の機能を備えた親コントラクトを展開したら、２つの子コントラクトを展開する必要がある。１つは加算関数を使用し、もう１つは乗算関数を使用する。これらの関数は両方とも２つの数値を受け取り、結果を返し、状態変数には何も格納しない。子コントラクトが展開されると、これら２つのコントラクトのアドレスが親コントラクトに更新される。これで、親コントラクトはこれら２つのコントラクトを呼び出して、結果を保存できる。  親と子コントラクトを組み合わせることで、計算機を構築するという要件が満たされる。
【００３０】
この後、計算機のユーザーが、加算関数は必要ないが減算関数が必要であると決めたと仮定する。データが失われてはならないという要件は維持する必要がある。この場合、新しい親子コントラクトが展開されると、古い親コントラクトによって保存されたすべてのデータが失われるが、これは望ましいことではない。しかし、親子モデルでは、加算の子コントラクトに類似する別の子コントラクトが展開され、減算が実行可能である。減算の子コントラクトが展開されると、親コントラクトはこの新しい減算の子コントラクトのアドレスで更新される。このようにして、保存されたデータを不変のままにしながら、計算機のスマートコントラクトの機能を更新することができる。図１Ａ〜１Ｆは、この計算機の例を図式的に示している。
【００３１】
図１Ａは、以下を含む特定の機能を備えた親コントラクトが展開される最初の工程を示している。  
加算の子コントラクトを呼び出す
乗算の子コントラクトを呼び出す
返された結果を状態変数に格納する
親コントラクトには状態変数が含まれ、子コントラクトにはビジネスロジックのみが存在する。設計段階では、親コントラクトは、現在使用され、将来使用できるすべての状態変数を識別する必要がある。
【００３２】
図１Ｂは、加算機能を備えた子コントラクトの展開を示している。特に、加算の子コントラクトには、２つの数値を入力として受け取り、それらを加算して、結果を返す関数が含まれている。
【００３３】
図１Ｃは、乗算機能を備えた別の子コントラクトの展開を示している。特に、乗算の子コントラクトには、２つの数値を入力として受け取り、それらを乗算して、結果を返す関数が含まれている。
【００３４】
図１Ｄは、親コントラクトと、加算の子コントラクトおよび乗算の子コントラクトの両方との結合を示している。
【００３５】
ここで、加算関数を削除し、減算関数に置き換えるために、減算の子コントラクトが図１Ｅに示すように展開される。減算の子コントラクトには、２つの数値を入力として受け取り、それらを減算して、結果を返す関数が含まれている。次に、図１Ｆに示すように、加算の子コントラクトと親コントラクトとの間の接続が削除され、減算の子コントラクトとの接続が追加される。必要に応じて、加算の子コントラクトへの接続をいつでも再度追加できる。また、親コントラクトがここで説明するように更新可能に設計されている場合は、加算の子コントラクトと乗算の子コントラクトに加えて、減算の子コントラクトを追加して追加関数を提供できる。各子コントラクトは、親コントラクトに提供されるのと同じ数の入力と出力、およびアドレスを持っていることが理解されよう。
【００３６】
詳細な説明−１つの更新可能なサービスコントラクトを有するクライアントコントラクト
本明細書に記載のサンプル実施形態では、クライアントコントラクト、１つの更新可能なサービスコントラクト、およびサービスコントラクトの新しいバージョンが展開されるたびにサービスコントラクトのアドレスでクライアントコントラクトを設定するための外部呼出しのためのメカニズムが提供される。
【００３７】
図２Ａは、サービスコントラクトが外部呼び出しによって更新される１つのサービスコントラクトを含む単純なケースを示している。図示されているように、初期展開では、２００でのクライアントコントラクトの展開、２０２でのサービスコントラクトのバージョン１の展開、および２０４でのサービスコントラクトのバージョン１のアドレスを持つクライアントコントラクトでのインターフェースＡの呼び出しが含まれる。２０６でクライアントコントラクトは、サービスコントラクトのバージョン１のアドレスをブロックチェーンへ格納する。図に示すように、クライアントコントラクトには、サービスコントラクトのアドレスを更新するためのインターフェースＡとサービスコントラクトを呼び出すためのインターフェースＢ、およびサービスコントラクトのアドレスおよびその他の状態データを格納するための永続的な格納が含まれる。サービスコントラクトのバージョン１には永続的な格納がなく、クライアントコントラクトのインターフェースＢを介して実装される。
【００３８】
図２Ｂは、図２Ａに示される初期展開に関連して、更新されたサービスコントラクトの展開を示す。図示されているように、サービスコントラクトのバージョンＮは２０８で展開され、２１０でクライアントコントラクトのインターフェースＡは、サービスコントラクトのバージョンＮのアドレスで呼び出される。クライアントコントラクトは、２１２でサービスコントラクトのバージョンＮのアドレスをブロックチェーンへ格納する。サービスコントラクトのバージョンＮにも永続的な格納はなく、クライアントコントラクトのインターフェースＢを介して実装される。
【００３９】
図２Ｃは、更新されたサービスコントラクトの呼び出しを示している。  図に示すように、２１４でクライアントコントラクトが呼び出され、クライアントコントラクトは２１６でブロックチェーンからサービスコントラクトの最後に保存されたアドレスを取得する。次に、２１８で、クライアントコントラクトは、取得したアドレスでインターフェースＢを使用してサービスコントラクトの最新バージョンを呼び出す。
【００４０】
図２Ａ〜図２Ｃに関して説明した１つの更新可能なサービスコントラクトでクライアントコントラクトを実装するためのサンプルコードを以下に提示する。このサンプルでは、変更が予想されるコントラクト機能の一部、１０％から１３％に変更される税計算が、すべての分散型台帳への永続的な格納を処理するクライアントコントラクトによって呼び出される別のサービスコントラクトに配置されている。クライアントコントラクトは次のように実装される。
【００４１】
クライアントコントラクト
pragma solidity ^0.4.18;
// Note import of version 1 will work fine for 
// updated service contracts with same interface
import "./ServiceContractVersion1.sol";
contract ClientContract {
struct SampleData {
bytes32 Name;
uint256 Amount;
uint256 Tax;
}
address public ServiceContractAddress;
// Client contract stores instances of SampleData structure
// in a map, keyed with an integer.
mapping(uint256 =＞ SampleData) public SampleDataMap;
// Represents "Interface A" for updating Client with the address
// of the Service Contract
function linkToServiceContract (address _newServiceContractAddress)
public {
ServiceContractAddress = _newServiceContractAddress;
}
// Main function called by external accounts
function insertSampleData(uint256 _id, bytes23 _name, uint256 _amount)
public {
uint256 calculatedTax;
// Call the Service Contract in order to get the 
// current tax calculation
// (corresponds to calling "Interface B" shown in diagram)
ServiceContract objServiceContract= 
ServiceContract(ServiceContractAddress);
calculatedTax = objServiceContract.calculateTax(_amount);
SampleDataMap[_id] = SampleData(
{Name:_name, Amount:_amount, Tax:calculatedTax});
}
}
サービスコントラクトのバージョン１は次のように実装される。
サービスコントラクト、バージョン１
pragma solidity ^0.4.18;
contract ServiceContract {
// The signature of this function represents "Interface B" in diagram
function calculateTax(uint256 _amount) public pure returns (uint256 Tax) 
{
//initial tax calculation is 10 percent
return(_amount * 110);
}
}
サービスコントラクトのバージョン２は次のように実装される。
サービスコントラクト、バージョン２
pragma solidity ^0.4.18;
contract ServiceContract {
// The signature of this function also represents "Interface B" in diagram
// and must be identical to the signature in service contract version 1.
function calculateTax(uint256 _amount) public pure returns (uint256 Tax) 
{
// version 2 tax calculation is 13 percent
return(_amount * 113);
}
}
変形例
上記の実施形態の第１の変形例は、複数の別個に更新可能なサービスコントラクトを含み、それぞれが、呼び出しのための独自のインターフェース、ならびに個別のメカニズム（特定のサービスコントラクトの新しいバージョンが展開される度に外部呼出し元がそのサービスコントラクトのアドレスでクライアントコントラクトを設定する）を有する。
【００４２】
図３Ａは、外部呼び出しによって更新されたアドレスを有する複数のサービスコントラクトの実施形態の初期展開を示している。図３Ａで示すように、クライアントコントラクトは３００で展開され、サービスコントラクトＸのバージョン１（Ｘ＝１...ｍ）は３０２で展開される。クライアントコントラクトのインターフェースＡｉは、３０４でサービスコントラクトのバージョン１のアドレスで、また、３０２での各サービスコントラクトの展開のプロセスが呼び出され、インターフェースＡｉの呼び出しは、インターフェースＡ１...ＡｍでＸ＝１...ｍに対してそれぞれ繰り返される。クライアントコントラクトは、３０６でそれぞれのサービスコントラクトのバージョン１のアドレスをブロックチェーンに格納する。各サービスコントラクト１...Ｍのバージョン１には永続的な格納がなく、クライアントコントラクトのそれぞれのインターフェースＢ１...Ｂｍを介して実装される。
【００４３】
図３Ｂは、図３Ａに示された初期展開に関して、更新されたサービスコントラクトＸ（１≦Ｘ≦Ｍ）の展開を示す。図示されているように、サービスコントラクトＸのバージョンＮは３０８で展開され、クライアントコントラクトのインターフェースＡｍは、３１０でサービスコントラクトＸのバージョンＮのアドレスで呼び出される。クライアントコントラクトは３１２でサービスコントラクトＸのバージョンＮのアドレスをブロックチェーンへ格納する。サービスコントラクトＸのバージョンＮにも永続的な格納がなく、クライアントコントラクトのインターフェースＢｍを介して実装される。
【００４４】
図３Ｃは、更新されたサービスコントラクトＸの呼び出しを示している。図示されているように、クライアントコントラクトは３１４で呼び出され、クライアントコントラクトは３１６でブロックチェーンからサービスコントラクト１...Ｍの最後に格納されたアドレスを取得する。次に、クライアントコントラクトは、インターフェースＢｍを使用して、取得したアドレスでサービスコントラクトＸの最新バージョンを呼び出す。
【００４５】
そのような実施形態を実施するための上記のコードの修正は、当業者には明らかであろう。
【００４６】
上記の実施形態の別の変形例は、１つのサービスコントラクトを含み、これは、そのサービスコントラクトの新しいバージョンごとに、展開時に独自のアドレスでクライアントコントラクトを自動的に設定するメカニズムをさらに有する。
【００４７】
図４Ａは、自己登録型サービスコントラクトの一実施形態の初期展開を示している。図４Ａで示されるように、クライアントコントラクトは４００で展開され、自己登録型サービスコントラクトのバージョン１は４０２で展開される。展開時に、自己登録型サービスコントラクトのバージョン１は、４０４で自身のアドレスでクライアントコントラクトのインターフェースＡを呼び出す。４０６で、クライアントコントラクトは自己登録型サービスコントラクトのバージョン１のアドレスをブロックチェーンに保存する。自己登録型サービスコントラクトバージョン１のバージョン１には永続的な格納がなく、クライアントコントラクトのインターフェースＢによって呼び出される。
【００４８】
図４Ｂは、図４Ａに示される初期展開に関連し、更新された自己登録型サービスコントラクトの展開を示す。図示されているように、自己登録型サービスコントラクトのバージョンＮは４０８で展開される。展開時に、自己登録型サービスコントラクトのバージョンＮは、４１０で自身のアドレスを使ってクライアントコントラクト上のインターフェースＡを呼び出す。クライアントコントラクトは、４１２で自己登録型サービスコントラクトのバージョンＮのアドレスをブロックチェーンに保存する。自己登録型サービスコントラクトのバージョンＮにも永続的な格納がなく、クライアントコントラクトのインターフェースＢを介して実装される。
【００４９】
図４Ｃは、更新された自己登録型サービスコントラクトの呼び出しを示している。図に示すように、４１４でクライアントコントラクトが呼び出され、クライアントコントラクトは４１６でブロックチェーンから自己登録型サービスコントラクトの最後に保存されたアドレスを取得する。次に４１８で、クライアントコントラクトは自己登録型サービスコントラクトの最新バージョンをインターフェースＢを使って呼び出す。
【００５０】
そのような実施形態を実施するための上記コードの修正は、当業者には明らかであろう。
【００５１】
上記の実施形態の別の変形例は、複数のサービスコントラクトを最後に説明した変形例の自己登録メカニズムと組み合わせたものである。
【００５２】
上記の実施形態の複数のサービスコントラクトの変形例のさらに別の変形例では、サービスコントラクトのアドレスを更新するための一連のインターフェースのそれぞれを、各サービスコントラクトに関連付けられた識別子をそのサービスコントラクトの新しいバージョンのアドレスと一緒に受け入れる単一のインターフェースに置き換えられる。識別子はブロックチェーン上のアドレスと一緒に保存され、関連するサービスコントラクトを識別するためにクライアントコントラクトによって取得される。
【００５３】
上記の実施形態のさらに別の変形例は、クライアントコントラクトの一部を更新しなければならない場合に恒久的に記録されたデータのアクセス不能を最小限にするために、クライアントコントラクトを複数のクライアントコントラクトに分離する。
【００５４】
上記の実施形態のさらに別の変形では、恒久的な永続的な格納および取得が１つまたは複数のサービスコントラクトに分離され、他の動作が１つまたは複数のクライアントコントラクトに残るように、コントラクト間の上述された関係が逆転される。この変形例では、いつでも更新できるのはクライアントコントラクトであり、更新が意図されないのはサービスコントラクトになる。この変形例では、永続的な格納サービスコントラクトのアドレスがクライアントコントラクトの各バージョンにハードコードされており、それ以上のアドレス更新メカニズムは必要ない。
【００５５】
図５Ａは、恒久的な格納がサービスコントラクトで提供される実施形態の初期展開を示している。この実施形態では、単一のクライアントコントラクトおよび単一のサービスコントラクトのみが示されている。上記のアプローチを使用して、複数のクライアントコントラクトおよび自己登録クライアントコントラクトに対応するようにこの実施形態を変更することができることが理解されよう。図５Ａに示されるように、サービスコントラクトは５００で展開され、サービスコントラクトのアドレスは、５０２でクライアントコントラクトのバージョン１にハードコードされる。次に、クライアントコントラクトは、５０４でブロックチェーンに展開される。この実施形態では、クライアントコントラクトのバージョン１には永続的な格納がなく、クライアントコントラクトのインターフェースＣを介してサービスコントラクトを呼び出す。
【００５６】
図５Ｂは、図５Ａに示される初期展開に関連して、更新されたクライアントコントラクトの展開を示す。図に示すように、クライアントコントラクトのバージョンＮは５０６で展開される。展開時に、クライアントコントラクトのバージョンＮは、サービスコントラクトのハードコードされたアドレスを使用して、サービスコントラクトのインターフェースＣを呼び出す。クライアントコントラクトのバージョンＮにも永続的な格納はない。
【００５７】
図５Ｃは、更新されたクライアントコントラクトの呼び出しを示す。示されているように、５０８でクライアントコントラクトのバージョンＮが呼び出され、クライアントコントラクトのバージョンＮが５１０でハードコードされたアドレスでサービスコントラクトを呼び出す。次に、５１２で、サービスコントラクトが永続的な保存と取得を実行し、場合によってインターフェースＣを介してクライアントコントラクトにデータを返す。
【００５８】
そのような実施形態を実施するための上記のコードの修正は、当業者には明らかであろう。
【００５９】
インターフェース
上記の各実施形態で説明されたインターフェースは、２つのタイプがある。クライアントコントラクトとサービスコントラクト（Ｂ、Ｂ１．．．Ｂｍ、Ｃ）との間の機能インターフェース、及びブロックチェーン（Ａ、Ａ１．．．Ａｍ）に展開された後に更新不可能なクライアントコントラクトに更新されたサービスコントラクトを見つけて使用するために知っておく必要があることを通知するために使用される登録インターフェースである。どちらの場合も、インターフェースという用語はソフトウェア感覚で使用される。つまり、独立したソフトウェアエンティティが相互作用する論理的なポイントである。より具体的には、インターフェースには、他のスマートコントラクトを含む外部の呼び出し元に見え且つアクセスできる関数シグネチャが含まれている。シグニチャには、関数名、入力が予期されるデータ型、および返されるデータ型が含まれる。ただし、インターフェースは実装について何も提供する必要はなく、つまり、呼び出されたときに関数が実際に何をするかについては何も提供しない。
【００６０】
機能インターフェース
任意のサービスコントラクトについて、上記の実施形態のインターフェースは、クライアントコントラクトによって呼び出されるそのすべての関数のシグニチャを集合的に含む。各変形例で、クライアントコントラクトまたはサービスコントラクトのいずれかが更新されない可能性があるため、これらのシグニチャを変更することはできない。そうしないと、それらの間の呼び出しは失敗する。変形例で更新されたサービスコントラクトを許可する場合、同じ入力で計算を実行できる場合であれば、各関数が実際に実行することは変更できる。これらのインターフェースを構築する方法（つまり、それらを設計する方法）は、上記の各変形例に関して以下で説明されている。
【００６１】
単純なケース−更新が必要となる可能性のあるすべての機能を特定する。現在のサービスコントラクトのニーズに加えて、予想される将来のニーズをサポートするために、クライアントコントラクトで永続的な格納サポートを計画する。現在必要な機能を実装するが、変更されずに将来の機能のニーズをサポートするシグニチャを持つサービスコントラクトバージョン１の関数を記述する。
【００６２】
複数サービスコントラクト−サービスコントラクト機能が複数のサービスコントラクトに分割されることを除いて、単純なケースと同じ。
【００６３】
自己登録型の単純ケース−単純ケースと同じ。
【００６４】
自己登録型、複数サービスコントラクト−複数サービスコントラクトのケースと同じである。
【００６５】
複数サービスコントラクト、単一登録型インターフェース−複数サービスコントラクトのケースと同じ。
【００６６】
複数クライアントコントラクト−上記と同じ（この変形例は、上記のケースのいずれにも適用でき、クライアントコントラクトを分割するだけである）。関数呼び出しは、クライアントコントラクトのいずれかからも呼び出しできるが、インターフェースの設計は変更されない。
【００６７】
逆のケース、サービスコントラクトで格納−この場合、サービスコントラクトにおける関数は、すべての恒久的な格納および取得を含む更新不可能なサービスを提供する。これらのサービスコントラクト関数は、クライアントコントラクトが将来更新されるときに、クライアントコントラクトの将来のニーズをサポートするように可能な限り設計される。これは、インターフェースとサービスコントラクト関数の実装の両方に当てはまる（これらは、どちらも初期展開後に変更できないため）。
【００６８】
登録インターフェース
単純なケースで、このインターフェースを設計するための基本的なアプローチは、上記のサンプルコードに示されている。この場合、関数{linkToServiceContract}のシグネチャはインターフェースAである。この関数は、サービスコントラクトのバージョンが展開されるたびに手動で呼び出される。イーサリアムの場合、「手動で呼び出される」は、関数を呼び出すオーダーを含み、提供されたパラメータとして新しいサービスコントラクトアドレスを含むトランザクションがプログラマによってブロックチェーンに送信されることにより実際に達成されることを当業者は理解するであろう。
【００６９】
複数サービスコントラクト−各更新可能なサービスコントラクトに別個の{linkToServiceContract}関数が存在することを除いて、基本的に単純ケースと同じである。たとえば、{linkToServiceContract1（address_newServiceContract1Address）}、{linkToServiceContract2（address_newServiceContract2Address）}などである。
【００７０】
自己登録型の単純なケース−単純なケースと同じであるが、サービスコントラクトには、登録インターフェースを自動的に呼び出すメカニズムがある（たとえば、{linkToServiceContract}を呼び出す）。イーサリアムで機能するそのメカニズムへの簡単なアプローチは、サービスコントラクトに「コンストラクター」を追加することである。コンストラクターは、サービスコントラクトが展開されるときに実行され、登録インターフェースを呼び出す。サービスコントラクトの各新バージョンには、このコンストラクターコードが含まれる。実用的な例として、単純なケースのサンプルコードで、サービスコントラクトに次の関数を追加するだけでよい。
function ServiceContract(address_clientContractAddress) public{
ClientContract objClientContract =
ClientContract(_clientContractAddress);
objClientContract.linkToServiceContract(this);
}
当業者は、このサンプルが、各展開中にプログラマによってコンストラクタに提供されるクライアントコントラクトのアドレスを必要とするが、クライアントコントラクトは変更されないので、それはまたハードコーディングできることを理解するであろう。
【００７１】
自己登録型の複数サービスコントラクト−展開時に各サービスコントラクトがそのサービスコントラクトに固有の登録インターフェースを呼び出すことを除いて、自己登録型の単純なケースと同じである。
function ServiceContract1(address_clientContractAddress) public{
ClientContract objClientContract =
ClientContract(_clientContractAddress);
objClientContract.linkToServiceContract1(this);
}
複数サービスコントラクト、単純登録インターフェース  −  クライアントで複数登録関数を有する(すなわち, {linkToServiceContract1}, {linkToServiceContract2})代わりに以下の１関数が使用される。  
mapping(uint256 =＞ address) public ServiceContractAddressMap;
function linkToServiceContract (uint256 _serviceContractIndex,
address_newServiceContractAddress)
public {
ServiceContractAddressMap[_interfaceIndex] =   
_newServiceContractAddress;
}
この場合、プログラマーは、サービスコントラクトの1つに新しいバージョンが展開されるたびに、その関数を呼び出すトランザクションを送信する。サンプルコードを使用して、サービスコントラクト2が新しいバージョンで展開された場合、プログラマーは次の呼び出しを行うトランザクションを発行する。 
linkToServiceContract(2,)  
複数クライアントコントラクト−この変形例は、上記の実施形態のいずれにも適用できる。登録インターフェースは、分割によって生じるすべてのクライアントコントラクトで繰り返す必要がある。これらのインターフェースはすべて、サービスコントラクトバージョンの展開時に呼び出す必要がある。それを呼び出す方法は、上記の変形例のいずれかが開始点として使用された方法と同じである。
【００７２】
逆のケース、サービスコントラクトに格納−この変形例登録インターフェースを使用しない。
【００７３】
図６は、本明細書に記載されている更新可能なスマートコントラクトを従来のスマートコントラクトと比較したものである。図６Ａは、スマートコントラクトのバージョン１および２がブロックチェーン上に格納され、ブロックチェーンデータ格納がコントラクトのそれぞれのバージョンに緊密に結合されている従来のスマートコントラクトを示している。この従来のシナリオでは、バージョン1によって保存されたデータはバージョン2にアクセスできず、その逆も同様である。それに対して、図６Ｂは、すべてのデータ格納がクライアントコントラクトに結合され、データ格納要件のないそれぞれのサービスコントラクトがインターフェースを介してクライアントコントラクトに更新された計算結果を提供する、本明細書で説明される更新可能なスマートコントラクトを示す。更新後もデータにアクセス可能であるが、元のクライアントコントラクトは影響を受けない。
【００７４】
当業者は、本明細書に記載されるように更新可能なスマートコントラクトの実装前に格納されたのと同じデータが、図示の実施形態においてブロックチェーンに格納されていることを理解するであろう。本明細書に記載の更新可能なスマートコントラクトの実施形態によれば、何を探すべきかを知っている場合、コントラクトは２つの部分に分割され、格納されたデータはそれらの部分の１つにだけ関連付けられることが分かる。ブロックチェーンに挿入されたブロックに大きな変更はない。本明細書に記載の実施形態は、スマートコントラクトプログラムを変更して更新の制限を回避する方法を提供しながら、従来の方法で従来のブロックチェーンを依然として使用する。ブロックの構造は変更されず、ブロックで使用できるようになるトランザクションの数と関連する格納の量だけが変更される。このような更新可能性を提供することにより、スマートコントラクトは、更新不可能になった結果として使用不可ならないため、その使用が増えるであろう。
【００７５】
コンピュータリソース
当業者はまた、本明細書に記載の更新可能なスマートコントラクトが、本明細書に記載の方法およびシステムを実装するための命令を含むソフトウェアを格納する適切なコンピューティングリソース（例えば、１つまたは複数のプロセッサ）およびメモリリソースを使用して実装され得ることを理解するであろう。本明細書に記載のシステムおよび方法を実装するための命令を記憶するためのメモリには、ランダムアクセスメモリ（ＲＡＭ）、およびいくつかの実施形態では、レジスタなどの半導体内の記憶場所を含む半導体メモリデバイスが含まれる。静的メモリの特定の例には、半導体メモリデバイス（例えば、電気的にプログラム可能な読み取り専用メモリ（ＥＰＲＯＭ）、電気的に消去可能なプログラム可能な読み取り専用メモリ（ＥＥＰＲＯＭ））、フラッシュメモリデバイス、内蔵ハードディスクやリムーバブルディスクなどの磁気ディスク、光磁気ディスク、ＲＡＭおよびＣＤ−ＲＯＭおよびＤＶＤ−ＲＯＭディスクなどの不揮発性メモリを含む。
【００７６】
本明細書に記載の更新可能なスマートコントラクトを実装する１つまたは複数の機械は、ディスプレイデバイス、入力デバイス（例えば、キーボード）、およびユーザインターフェース（ＵＩ）ナビゲーションデバイス（例えば、マウス）をさらに含み得る。一例では、表示装置、入力装置、およびＵＩナビゲーション装置は、タッチスクリーンディスプレイであり得る。１つまたは複数の機械は、大容量記憶装置（例えば、駆動ユニット）、信号生成装置（例えば、スピーカー）、ネットワークインターフェース装置、およびデータを収集するための１つまたは複数のセンサーをさらに含み得る。１つまたは複数の機械は、シリアル（例えば、ユニバーサルシリアルバス（ＵＳＢ）、パラレル、または他の有線または無線（例えば、赤外線（ＩＲ）、近距離通信（ＮＦＣ））接続等の出力コントローラを含み、１つまたは複数の周辺機器（例えば、プリンタ、カードリーダー等）と通信または制御する。いくつかの実施形態では、プロセッサおよび／または命令は、処理回路および／またはトランシーバ回路を含む場合がある。
【００７７】
サンプルの実施形態では、記憶装置は、本明細書に記載の技術または関数のいずれか１つまたは複数によって実施または利用されるデータ構造または命令（例えば、ソフトウェア）の１つまたは複数のセットが格納される機械可読媒体を含み得る。命令はまた、完全にまたは少なくとも部分的に、メインメモリ内、静的メモリ内、または機械によるその実行中にハードウェアプロセッサ内に存在し得る。一例では、ハードウェアプロセッサ、メインメモリ、静的メモリ、または記憶装置の１つまたは任意の組み合わせが、機械可読媒体を構成し得る。機械可読媒体の特定の例には、半導体メモリデバイス（例えば、電気的にプログラム可能な読み取り専用メモリ（ＥＰＲＯＭ）、電気的に消去可能なプログラム可能な読み取り専用メモリ（ＥＥＰＲＯＭ）およびフラッシュメモリデバイス）、内蔵ハードディスクやリムーバブルディスクなどの磁気ディスク、光磁気ディスク、ＲＡＭおよびＣＤ−ＲＯＭおよびＤＶＤ−ＲＯＭディスク等の不揮発性メモリを含む。機械可読媒体は一般に単一の媒体であるが、「機械可読媒体」という用語は、１つまたは複数の命令を格納するように構成された単一の媒体または複数の媒体（例えば、集中型または分散型データベース、および／または関連するキャッシュおよびサーバー）を含み得る。
【００７８】
本明細書に記載の更新可能なスマートコントラクトを実装する機械装置は、ハードウェアプロセッサ（例えば、中央処理装置（ＣＰＵ）、グラフィック処理装置（ＧＰＵ）、ハードウェアプロセッサコア、またはそれらの任意の組み合わせ）、メインメモリ、および静的メモリ、センサー、ネットワークインターフェースデバイス、アンテナ、ディスプレイデバイス、入力デバイス、ＵＩナビゲーションデバイス、マスストレージ、命令、信号生成デバイス、および出力コントローラーの１つまたは複数を含んでもよい。装置は、本明細書に開示される方法および／または操作のうちの１つまたは複数を実行するように構成され得る。装置は、本明細書に開示される方法および／または操作の１つまたは複数を実行するため、および／または本明細書に開示される方法および／または操作の１つまたは複数の一部を実行するための機械の構成要素として意図され得る。いくつかの実施形態では、装置は、電力を受け取るためのピンまたは他の手段を含み得る。いくつかの実施形態では、装置は、電力調整ハードウェアを含み得る。
【００７９】
図７は、本明細書に記載のサンプルを実装することができるコンピュータシステムを示すブロック図である。コンピュータシステム７００は、例えば、サーバーまたはサーバーの組み合わせに実装することができる。例えば、コンピュータシステム７００は、スマートコントラクトを管理するためのネットワークコンピュータシステムの一部として実装され得る。本明細書で説明される更新可能なスマートコントラクトはまた、図７で説明されるような複数のコンピュータシステムの組み合わせを使用して実装することが可能である。
【００８０】
一実施形態では、コンピュータシステム７００は、処理リソース、メインメモリ７２０、読み取り専用メモリ（ＲＯＭ）７３０、記憶装置７４０、および通信インターフェース７５０を含む。コンピュータシステム７００は、ランダムアクセスメモリ（ＲＡＭ）や他の動的記憶装置によって提供され、プロセッサ７１０によって実行される情報及び指令を格納するためのメインメモリ７２０に記憶された情報を処理するための少なくとも１つのプロセッサ７１０を含む。プロセッサ７１０によって実行される命令の実行中に、一時変数または他の中間情報を記憶するためにメインメモリ７２０も使用可能である。コンピュータシステム７００はまた、プロセッサ７１０のための静的情報および命令を記憶するためのＲＯＭ７３０または他の静的記憶装置を含み得る。情報や命令を格納するために、磁気ディスクや光ディスクなどの記憶装置７４０が用意される。
【００８１】
通信インターフェース７５０は、コンピュータシステム７００が、ネットワークリンク（無線または有線）を使用して、１つまたは複数のネットワーク（例えば、セルラーネットワーク）と通信することを可能にする。ネットワークリンクを使用して、コンピュータシステム７００は、１つまたは複数のコンピューティングデバイスおよび１つまたは複数のサーバと通信することができる。メモリ７３０に格納された実行可能命令は、実行されたときに本明細書に記載された方法のうちの１つまたは複数を実行するための命令７２４を含むことができる。
【００８２】
例として、メモリ７２０に格納された命令およびデータは、本明細書で説明されるように、更新可能なスマートコントラクトを実装するためにプロセッサ７１０によって実行され、本明細書に記載された更新可能なスマートコントラクトを実行できる。プロセッサ７１０は、ソフトウェアおよび／または他の論理のための命令を実行して、１つまたは複数のプロセス、工程、および図１〜図７によって説明されるような実装と一緒に説明された他の関数を実行する。
【００８３】
本明細書で説明される例は、説明された技術を実装するためのコンピュータシステム７００の使用に関する。一例によれば、これらの技術は、プロセッサ７１０がメインメモリ７２０に含まれる１つまたは複数の命令の１つまたは複数のシーケンスを実行することに応答して、コンピュータシステム７００によって実行される。そのような命令は、記憶装置７４０などの読み取り可能な別の機械可読媒体からメインメモリ７２０に読み込まれ得る。メインメモリ７２０に含まれる命令のシーケンスの実行により、プロセッサ７１０は、本明細書に記載の処理工程を実行する。代替の実装では、ハードワイヤード回路を、ソフトウェア命令の代わりに、またはソフトウェア命令と組み合わせて使用して、本明細書に記載の実施例を実装することができる。したがって、説明する例は、ハードウェア回路とソフトウェアの特定の組み合わせに限定されない。
【００８４】
本明細書に記載の関数またはアルゴリズムは、一実施形態ではソフトウェアに実装することができる。ソフトウェアは、コンピュータ可読媒体、または１つまたは複数の非一時的メモリまたは他のタイプのローカルまたはネットワーク化されたハードウェアベースの記憶装置などのコンピュータ可読記憶装置に記憶されたコンピュータ実行可能命令からなり得る。さらに、そのような関数は、ソフトウェア、ハードウェア、ファームウェア、またはそれらの任意の組み合わせであり得るモジュールに対応する。必要に応じて、１つまたは複数のモジュールで複数の関数を実行することができ、説明した実施形態は単なる例である。ソフトウェアは、デジタル信号プロセッサ、ＡＳＩＣ、マイクロプロセッサ、またはパーソナルコンピュータ、サーバー、または他のコンピュータシステムなどのコンピュータシステム上で動作する他のタイプのプロセッサ上で実行され、そのようなコンピュータシステムを特別にプログラムされたマシンに変える。
【００８５】
本明細書に記載の例は、他の概念、アイデア、またはシステムとは無関係に、記載される個々の要素および概念に拡張すること、ならびに例は本出願のどこかに記載される要素の組み合わせを含むことが企図されている。本明細書では、添付の図面を参照して例を詳細に説明しているが、概念はそれらの正確な例に限定されないことを理解されたい。このように、多くの修正および変形は、この技術に熟練した当業者には明らかであろう。したがって、概念の範囲は、以下の特許請求の範囲およびそれらの同等物によって定義されることが意図されている。さらに、個別にまたは例の一部として記載された特定の特徴は、他の特徴および例が特定の特徴について言及していなくても、他の個別に記載された特徴または他の例の一部と組み合わせることができると考えられる。したがって、組み合わせを説明しなくても、そのような組み合わせに対する権利を主張することを妨げるものではない。
【００８６】
実行可能な命令と機械格納媒体
様々なメモリ（すなわち、７２０、７３０、および／またはプロセッサユニット７１０のメモリ）および／または記憶装置７４０は、本明細書に記載した１つまたは複数の方法または関数を実施または利用する１つまたは複数の命令およびデータ構造（例えば、命令）７２４のセットを記憶することができる。これらの命令は、プロセッサユニット７１０によって実行されると、開示された例を実装するために様々な動作が行われる。
【００８７】
本明細書で使用される場合、「機械記憶媒体」、「装置記憶媒体」、「コンピュータ記憶媒体」（総称して「機械記憶媒体」と呼ばれる）という用語は同じことを意味し、交換可能に使用され得る。これらの用語は、実行可能な命令および／またはデータを格納する単一または複数の格納装置および／または媒体（例えば、集中型または分散型データベース、および／または関連するキャッシュおよびサーバー）、ならびに複数の格納装置またはデバイスを含むネットワーククラウドベースの格納システムまたはストレージを指す。したがって、これらの用語は、プロセッサの内部または外部のメモリを含み、ソリッドステートメモリ、および光および磁気媒体を含むがこれらに限定されるものではないと解釈される。機械記憶媒体、コンピュータ記憶媒体、および／または装置記憶媒体７４０の特定の例には、例えば、電気的に消去可能な消去可能プログラマブル読み取り専用メモリ（ＥＰＲＯＭ）、プログラム可能な読み取り専用メモリ（ＥＥＰＲＯＭ）、ＦＰＧＡおよびフラッシュメモリデバイス等の半導体メモリデバイス、内蔵ハードディスクやリムーバブルディスクなどの磁気ディスク、光磁気ディスク、およびＣＤ−ＲＯＭおよびＤＶＤ−ＲＯＭディスクを含む不揮発性メモリを含む。機械記憶媒体、コンピュータ記憶媒体、および装置記憶媒体という用語は、特に、搬送波、変調されたデータ信号、および他のそのような媒体を除外し、それらの少なくとも一部は、以下で説明する「信号媒体」という用語でカバーされる。
【００８８】
信号媒体
「信号媒体」または「伝送媒体」という用語は、任意の形式の変調データ信号、搬送波などを含むと解釈されるものとする。「変調データ信号」という用語は、信号内の情報を符号化する方法で、その特性の１つまたは複数が設定または変更されている信号を意味する。
【００８９】
コンピュータ可読媒体
「機械可読媒体」という用語は、１つまたは複数の機械によって実行するための命令を格納、符号化、または運ぶことができ、１つまたは複数の機械に本開示の１つまたは複数の手法を実行させ、またはそのような命令によって使用される、またはそのような命令に関連するデータ構造を格納、符号化、または運ぶことができる任意の媒体である。非限定的な機械可読媒体の例には、ソリッドステートメモリ、ならびに光学および磁気媒体が含まれ得る。機械可読媒体の特定の例には、半導体メモリデバイス（例えば、電気的にプログラム可能な読み取り専用メモリ（ＥＰＲＯＭ）、電気的に消去可能なプログラム可能な読み取り専用メモリ（ＥＥＰＲＯＭ））およびフラッシュメモリデバイス）、内蔵ハードディスクやリムーバブルディスクなどの磁気ディスク、光磁気ディスク、ランダムアクセスメモリ（ＲＡＭ）、およびＣＤ−ＲＯＭおよびＤＶＤ−ＲＯＭディスクなどの不揮発性メモリを含む。いくつかの例では、機械可読媒体は、非一時的な機械可読媒体を含み得る。本明細書で使用される場合、「機械可読媒体」は、一時的な伝播信号を除外する。
【００９０】
命令はさらに、いくつかの転送プロトコル（例えば、フレームリレー、インターネットプロトコル（ＩＰ）、伝送制御プロトコル（ＴＣＰ）、ユーザデータグラムプロトコル（ＵＤＰ）、ハイパーテキスト転送プロトコル（ＨＴＴＰ）など）のいずれか１つを利用するネットワークインターフェースデバイスを介して伝送媒体を使用して通信ネットワークを介して送信または受信され得る。通信ネットワークの例には、ローカルエリアネットワーク（ＬＡＮ）、ワイドエリアネットワーク（ＷＡＮ）、パケットデータネットワーク（インターネットなど）、携帯電話ネットワーク（セルラーネットワークなど）、プレーンオールドテレフォン（ＰＯＴＳ）ネットワーク，ワイヤレスデータネットワーク（例：Ｉｎｓｔｉｔｕｔｅ  ｏｆ  Ｅｌｅｃｔｒｉｃａｌ  ａｎｄ  Ｅｌｅｃｔｒｏｎｉｃｓ  Ｅｎｇｉｎｅｅｒｓ（ＩＥＥＥ）８０２．１１ファミリのＷｉ−Ｆｉ(r)、ＩＥＥＥ  ８０２．１６ファミリの標準、ＷｉＭａｘ(r)）、ＩＥＥＥ  ８０２．１５．４ファミリの標準、ロング・ターム・エヴォリューション（ＬＴＥ）標準ファミリ、ユニバーサル移動体通信システム（ＵＭＴＳ）標準ファミリ、ピアツーピア（Ｐ２Ｐ）ネットワークなどを含む。
【００９１】
一例では、ネットワークインターフェースデバイスは、通信ネットワークに接続するための１つまたは複数の物理的ジャック（例えば、イーサネット、同軸、または電話ジャック）または１つまたは複数のアンテナを含み得る。一例では、ネットワークインターフェースデバイスは、単一入力多出力（ＳＩＭＯ）、多入力多出力（ＭＩＭＯ）、または多入力単一出力（ＭＩＳＯ）技術の少なくとも１つを使用して無線通信するための１つまたは複数のアンテナを含む。いくつかの例では、ネットワークインターフェースデバイスは、マルチユーザＭＩＭＯ技術を使用して無線通信する。「伝送媒体」という用語は、機械による実行のための命令を格納、符号化、または運ぶことができる任意の無形媒体を含むと解釈され、そのようなソフトウェアの通信を容易にするためのデジタルまたはアナログ通信信号または他の無形媒体を含む。
【００９２】
特定の実施形態は、本明細書では、実施例１、２、３などと番号を付して説明されている。これらの番号付きの実施例は、例としてのみ提供され、主題の技術を限定するものではない。
【００９３】
実施例１は、ブロックチェーン上にスマートコントラクトを実装するためのシステムであり、命令を格納するためのメモリと、前記メモリに格納された命令を使用して操作を実行する１つまたは複数のプロセッサとを含むものであり、前記操作は、前記スマートコントラクトを更新可能なスマートコントラクトと更新不可能なスマートコントラクトに分離する工程であって、前記更新不可能なスマートコントラクトが、永続的にアクセス可能の必要があるデータのブロックチェーンへの永続的なデータ格納と取得を処理し、前記更新可能なスマートコントラクトにはブロックチェーンへのデータの格納と取得を含まない、分離する工程と、前記更新不可能なスマートコントラクトと前記更新可能なスマートコントラクトの最初のバージョンを展開する工程と、前記更新不可能なスマートコントラクトに、前記更新可能なスマートコントラクトの第１バージョンのアドレスを提供する工程と、前記更新不可能なスマートコントラクトが前記更新可能なスマートコントラクトの第一バージョンのアドレスを前記ブロックチェーンに格納する工程と、前記ブロックチェーンから永続的なデータを取得し、前記永続的なデータを前記更新可能なスマートコントラクトの第一バージョンに渡す工程と、前記更新不可能なスマートコントラクトが前記永続的なデータに対して計算を実行し、前記永続的なデータの計算に基づいて更新されたデータを前記更新不可能なスマートコントラクトに返す工程と、前記更新可能なスマートコントラクトが前記更新されたデータを前記ブロックチェーンに格納する工程の操作を含むものである。
【００９４】
実施例２は、実施例１と同様のシステムであり、前記更新可能なスマートコントラクトと前記更新不可能なスマートコントラクトを接続する固定インターフェースをさらに有し、前記更新可能なスマートコントラクトの前記第１バージョンのアドレスが前記更新不可能なスマートコントラクトに前記固定インターフェースを介して提供され、前記更新不可能なスマートコントラクトは前記永続的なデータを前記固定インターフェースを介して前記更新可能なスマートコントラクトの前記第１バージョンに渡し、前記更新可能なスマートコントラクトは前記永続的なデータの計算に基づいて更新されたデータを前記固定インターフェースを介した前記更新不可能なスマートコントラクトに返すものである。
【００９５】
実施例３は、前述の任意の実施例と同様のシステムであり、前記メモリは、前記更新可能なスマートコントラクトの第１バージョンのアドレスにより前記更新不可能なスマートコントラクトのインターフェースを呼び出すことによって、前記更新可能なスマートコントラクトの第１バージョンのアドレスを前記更新不可能なスマートコントラクトに提供することを含む操作を実行するためのさらなる命令を格納する。
【００９６】
実施例４は、前述の実施例と同様のシステムであり、前記メモリは、前記更新可能なスマートコントラクトの第２のバージョンを展開する工程と、前記更新可能なスマートコントラクトの第２のバージョンのアドレスを使用して、前記更新不可能なスマートコントラクトのインターフェースを呼び出す工程と、前記更新不可能なスマートコントラクトが前記更新可能なスマートコントラクトの第２のバージョンのアドレスを前記ブロックチェーンに格納する工程と、前記ブロックチェーンから前記更新可能なスマートコントラクトの第２のバージョンのアドレスを取得し、前記取得したアドレスで前記更新可能なスマートコントラクトの第２のバージョンを呼び出すことにより、前記更新可能なスマートコントラクトの第２のバージョンを呼び出す工程を含むさらなる処理を実行するためのさらなる命令を記憶するものである。
【００９７】
実施例５は、前述の実施例と同様のシステムであり、前記分離する工程は、前記スマートコントラクトを前記更新不可能なスマートコントラクトと複数の更新可能なスマートコントラクトに分離する工程を含み、前記展開する工程は、各更新可能なスマートコントラクトの第１および第２のバージョンを展開する工程を含み、前記呼び出す工程は、各更新可能なスマートコントラクトのそれぞれのバージョンのアドレスを使用してそれぞれのインターフェースを呼び出す工程を含み、前記格納する工程は、前記各更新可能なスマートコントラクトの前記それぞれのバージョンのアドレスを前記ブロックチェーンに格納する工程を含み、前記呼び出す工程は、前記ブロックチェーンから前記更新可能なスマートコントラクトの第２のバージョンのアドレスを取得し、前記取得したアドレスで前記更新可能なスマートコントラクトの第２のバージョンを呼び出す工程を有するものである。
【００９８】
実施例６は、前述の実施例と同様のシステムであり、前記分離する工程は、前記スマートコントラクトを前記更新不可能なスマートコントラクトと複数の更新可能なスマートコントラクトに分離する工程を有し、前記展開する工程は、各更新可能なスマートコントラクトの第１および第２のバージョンを展開する工程を有し、前記呼び出す工程は、前記各更新可能なスマートコントラクトに関連付けられた識別子と前記それぞれのアドレスを使用して前記インターフェースを呼び出す工程を有し、前記格納するは、前記各更新可能なスマートコントラクトの前記それぞれのバージョンの識別子とアドレスを前記ブロックチェーンに格納する工程を有し、前記呼び出す工程は、前記ブロックチェーンからの前記更新可能なスマートコントラクトの第２バージョンの識別子とアドレスを取得する工程と、前記取得されたアドレスで前記識別子によって識別される前記更新可能なスマートコントラクトの第２バージョンの呼び出す工程とを有する。
【００９９】
実施例７は、前述の任意の実施例と同様のシステムであり、前記更新可能なスマートコントラクトは自己登録型であり、前記呼び出す工程は、前記自己登録型の更新可能なスマートコントラクトが、前記自己登録型の更新可能なスマートコントラクトのぞれぞれのバージョンのアドレスで前記更新不可能なスマートコントラクトのインターフェースを呼び出す工程とを有する。
【０１００】
実施例８は、前述の実施例と同様のシステムであり、前記分離する工程は、前記スマートコントラクトを前記更新不可能なスマートコントラクトと複数の更新可能なスマートコントラクトに分離する工程を含み、前記展開する工程は、各更新可能なスマートコントラクトの第１および第２のバージョンを展開する工程を含み、前記更新可能なスマートコントラクトは自己登録型であり、前記呼び出す工程は、前記自己登録型の更新可能スマートコントラクトがそれぞれの自己登録型の更新可能なスマートコントラクトのそれぞれのバージョンのアドレスを使用して前記更新不可能なスマートコントラクトのインターフェースを呼び出す工程を有し、前記格納する工程は、各更新可能なスマートコントラクトのそれぞれのバージョンのアドレスを前記ブロックチェーンへ格納する工程を有し、前記呼び出す工程は、前記ブロックチェーンから更新可能なスマートコントラクトの第２のバージョンのアドレスを取得し、取得されたアドレスで前記更新可能なスマートコントラクトの第２のバージョンを呼び出す工程を有するものである。
【０１０１】
実施例９は、前述の実施例と同様のシステムであり、前記メモリは、前記更新不可能なスマートコントラクトがブロックチェーンから永続的なデータを取得し、前記永続的なデータを前記更新可能スマートコントラクトに渡す工程と、前記更新可能なスマートコントラクトが前記永続的なデータの計算に基づいて計算し、データをブロックチェーンへの永続的な格納のために前記更新不可能なスマートコントラクトに返す工程を含む操作を実行するための命令をさらに格納する。
【０１０２】
実施例１０は、前述の例と同様のシステムであり、前記メモリは、前記スマートコントラクトを複数の更新不可能なスマートコントラクトに分離することを含む操作を実行するためのさらなる命令を格納する。
【０１０３】
実施例１１は、前述の任意の実施例と同様のシステムであり、前記メモリは、前記第１のバージョンを展開する前に、前記更新不可能なスマートコントラクトのアドレスを前記更新可能なスマートコントラクトの第１のバージョンにハードコーディングする工程と、前記更新可能なスマートコントラクトの第２のバージョンを展開する工程と、前記更新可能なスマートコントラクトの第２のバージョンを呼び出す工程と、前記更新可能なスマートコントラクトの第２のバージョンが、前記ハードコードされたアドレスで前記更新不可能なスマートコントラクトを呼び出す工程と、前記更新不可能なスマートコントラクトが任意の永続的なデータを前記ブロックチェーンに格納する工程を実行するための命令をさらに格納する。
【０１０４】
実施例１２は、前の実施例に記載の工程を実行する１つまたは複数のプロセッサの方法である。
【０１０５】
実施例１３は、実施例１〜１１のいずれかに従ってブロックチェーン上に実装されたスマートコントラクトを更新するためのコンピュータ命令を格納する非一時的なコンピュータ可読媒体である。
【０１０６】
本明細書に記載される実施例は、論理またはいくつかの構成要素、モジュール、またはメカニズムを含み、またはこれらで動作可能である。モジュールは、特定の操作を実行できる有形のエンティティ（ハードウェアなど）であり、特定の方法で構成または配置できる。一例では、回路は、モジュールとして特定の方法で（例えば、内部に、または他の回路などの外部エンティティに関して）配置され得る。
【０１０７】
一例では、１つまたは複数のコンピュータシステム（例えば、スタンドアロン、クライアントまたはサーバーコンピュータシステム）、または１つまたは複数のハードウェアプロセッサの全体または一部は、ファームウェアまたはソフトウェア（例えば、命令、アプリケーションの一部、または１アプリケーション）によって、特定の操作を実行するために動作するモジュールとして設定可能である。一例では、ソフトウェアは、機械可読媒体上に存在し得る。一例では、ソフトウェアは、モジュールの基礎となるハードウェアによって実行されると、ハードウェアに指定された操作を実行させる。
【０１０８】
したがって、「モジュール」という用語は、特定の方法で動作する、または本明細書に記載されている動作の一部または全部を実行する、物理的に構築された、特別に構成された（例えば、ハードワイヤード）、または一時的に（例えば、一時的に）構成された（例えば、プログラムされた）エンティティである、有形のエンティティを包含すると理解される。モジュールが一時的に構成されている例を考えると、各モジュールを一度にインスタンス化する必要はない。例えば、モジュールがソフトウェアを使用して構成された汎用ハードウェアプロセッサを含む場合、汎用ハードウェアプロセッサは、異なる時にそれぞれの異なるモジュールとして構成され得る。したがって、ソフトウェアは、例えば、ある時点で特定のモジュールを構成し、異なる時点で別のモジュールを構成するように、ハードウェアプロセッサを構成することができる。
【０１０９】
いくつかの実施形態は、ソフトウェアおよび／またはファームウェアで完全にまたは部分的に実装され得る。このソフトウェアおよび／またはファームウェアは、非一時的なコンピュータ可読記憶媒体に含まれる命令の形を取ることができる。これらの命令は、本明細書で説明される操作の実行を可能にするために、１つまたは複数のプロセッサによって読み取られ、実行される。命令は、ソースコード、コンパイルされたコード、解釈されたコード、実行可能コード、静的コード、動的コードなどであるがこれらに限定されない任意の適切な形式であり得る。そのようなコンピュータ可読媒体は、読み取り専用メモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、磁気ディスク記憶媒体、光記憶媒体、フラッシュメモリなどであるがこれに限定されない、１つまたは複数のコンピュータによって可読可能な形式で情報を格納するための任意の有形の非一時的媒体を含み得る。
【０１１０】
本明細書全体を通して、複数の場合は、単一の場合として記述された構成要素、操作、または構造で実装できる。１つまたは複数の方法の個々の操作は、別個の操作として図示および説明されているが、１つまたは複数の個々の操作は同時に実行することができ、操作を図示の順序で実行する必要はない。例示的な構成において別個の構成要素として提示される構造および機能は、組み合わされた構造または構成要素として実施可能である。同様に、単一の構成要素として提示される構造および機能は、別個の構成要素として実装することができる。  これらおよび他の変形、修正、追加、および改善は、本明細書の主題の範囲内にある。
【０１１１】
本明細書では、様々な構成要素が特定の方法で構成されるものとして記載されている。構成要素は、任意の適切な方法で構成することができる。例えば、コンピューティングデバイスは、またはコンピューティングデバイスを含む構成要素は、コンピューティングデバイスをプログラムする適切なソフトウェア命令と一緒に構成できる。構成要素は、そのハードウェア配置によって、または他の適切な方法で構成することもできる。
【０１１２】
上記の説明は、例示を意図するものであり、限定的なものではない。例えば、上記の例（またはその１つまたは複数の態様）は、他の例と組み合わせて使用することができる。当業者が上記の説明を吟味する場合等で他の例を使用することができる。要約は、例えばアメリカ合衆国法３７Ｃ．Ｆ．Ｒ．§１．７２（ｂ）に準拠し、読者が技術的開示の特徴を迅速に確認できるようにしている。請求の範囲または意味を解釈または制限するために使用されるものではないとの理解で提出されたものである。
【０１１３】
また、上記の詳細な説明では、さまざまな特徴を組み合わせて、開示を簡素化することができる。しかしながら、実施例はそのような特徴のサブセットを特徴とすることができるが、特許請求の範囲は、本明細書に開示されるすべての特徴を説明することはできない。さらに、実施例には、特定の実施例で開示されているものよりも少ない特徴を含めることができる。したがって、以下の特許請求の範囲は、詳細な説明に組み込まれ、各請求項は、それ自体が別個の実施例として成り立つ。本明細書に開示される実施例の範囲は、添付の特許請求の範囲を参照して決定され、そのような請求項に対して権利を受けられる同等物の全範囲を伴うものである。
【０１１４】
当業者であれば、特許請求の範囲が、特定の実施形態、ならびに本明細書に具体的に記載されていないが、本明細書に記載されたものと同等の構成要素および工程、ならびに当業者に明らかである他の特徴および変形を含み得る実施形態を包含することが理解される。
【図１Ａ】
2021520169.tif 000003
【図１Ｂ】
2021520169.tif 000004
【図１Ｃ】
2021520169.tif 000005
【図１Ｄ】
2021520169.tif 000006
【図１Ｅ】
2021520169.tif 000007
【図１Ｆ】
2021520169.tif 000008
【図２Ａ】
2021520169.tif 000009
【図２Ｂ】
2021520169.tif 000010
【図２Ｃ】
2021520169.tif 000011
【図３Ａ】
2021520169.tif 000012
【図３Ｂ】
2021520169.tif 000013
【図３Ｃ】
2021520169.tif 000014
【図４Ａ】
2021520169.tif 000015
【図４Ｂ】
2021520169.tif 000016
【図４Ｃ】
2021520169.tif 000017
【図５Ａ】
2021520169.tif 000018
【図５Ｂ】
2021520169.tif 000019
【図５Ｃ】
2021520169.tif 000020
【図６Ａ】
2021520169.tif 000021
【図６Ｂ】
2021520169.tif 000022
【図７】
2021520169.tif 000023
【国際調査報告】
2021520169.tif 000024
2021520169.tif 000025