(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-01-30
(45)【発行日】2024-02-07
(54)【発明の名称】更新可能なスマートコントラクト
(51)【国際特許分類】
H04L 9/32 20060101AFI20240131BHJP
G06F 21/64 20130101ALI20240131BHJP
G06Q 20/38 20120101ALI20240131BHJP
【FI】
H04L9/32 200Z
G06F21/64
G06Q20/38 310
(21)【出願番号】P 2021501115
(86)(22)【出願日】2019-03-29
(86)【国際出願番号】 IB2019000463
(87)【国際公開番号】W WO2019186282
(87)【国際公開日】2019-10-03
【審査請求日】2021-09-21
(32)【優先日】2018-03-29
(33)【優先権主張国・地域又は機関】US
【前置審査】
(73)【特許権者】
【識別番号】321005788
【氏名又は名称】ケーエヌエヌエックス コーポレーション
(74)【代理人】
【識別番号】100104411
【氏名又は名称】矢口 太郎
(72)【発明者】
【氏名】スリバスタバ、ニーラジ
【審査官】青木 重徳
(56)【参考文献】
【文献】特開2018-037971(JP,A)
【文献】藤本 真吾 ほか,ブロックチェーンの安全な連携方式の提案,2018年 暗号と情報セキュリティシンポジウム,日本,2018年01月23日,4F1-2,p. 1-6
【文献】Hassan Abdel-Rahman,Upgradable Contracts in Solidity,Cardstack,[オンライン],2018年01月20日,(検索日 令和4年9月27日)、インターネット<URL: https://medium.com/cardstack/upgradable-contracts-in-solidity-d5af87f913>
【文献】David Rugendyke,Upgradable Solidity Contract Design,Rocket Pool,[オンライン],2017年11月22日,(検索日 令和4年9月27日)、インターネット<URL: https://medium.com/rocket-pool/upgradable-solidity-contract-design-54789205276d>
【文献】Elena Dimitrova,Writing Upgradable Contracts in Solidity,COLONY BLOG,[オンライン],2016年01月18日,(検索日 令和4年9月27日)、インターネット<URL:https://blog.colony.io/writing-upgradable-contracts-in-solidity-6743f0eecc88/>
【文献】Himanshu Chawla,How to write upgradable smart contracts in solidity !,QuillHash,[オンライン],2018年04月25日,(検索日 令和4年9月27日)、インターネット<URL: https://medium.com/quillhash/how-to-write-upgradable-smart-contracts-in-solidity-d8f1b95a0e9a>
(58)【調査した分野】(Int.Cl.,DB名)
H04L 9/32
G06F 21/64
G06Q 20/38
JSTPlus/JMEDPlus/JST7580(JDreamIII)
IEEE Xplore
(57)【特許請求の範囲】
【請求項1】
ブロックチェーンに実装されたスマートコントラクトを更新する方法であって、
前記スマートコントラクトを更新可能なスマートコントラクトと更新不可能なスマートコントラクトに分離する工程であって、前記更新不可能なスマートコントラクトは、永続的にアクセス可能の必要があるデータについて前記ブロックチェーンへの永続的なデータの格納及び取得を処理し、前記更新可能なスマートコントラクトは、前記ブロックチェーンへのデータ格納及び取得を含まない、分離する工程と、
前記更新不可能なスマートコントラクトと前記更新可能なスマートコントラクトの第1のバージョンを展開する工程と、
前記更新可能なスマートコントラクトの前記第1のバージョンのアドレスを提供する工程と、
前記更新不可能なスマートコントラクトが、前記更新可能なスマートコントラクトの前記第1のバージョンのアドレスを前記ブロックチェーンへ格納する工程と、
前記更新不可能なスマートコントラクトが前記ブロックチェーンから永続的なデータを取得し、前記永続的なデータを前記更新可能なスマートコントラクトの前記第1のバージョンに渡す工程と、
前記更新可能なスマートコントラクトの第1のバージョンが前記永続的なデータに対する計算を実行し、前記永続的なデータの計算に基づいて更新されたデータを前記更新不可能なスマートコントラクトに返す工程と、
前記更新不可能なスマートコントラクトが、前記更新されたデータを前記ブロックチェーンに格納する工程と、
を有する、方法。
【請求項4】
請求項3に記載の方法において、さらに
前記更新可能なスマートコントラクトの第2のバージョンを展開する工程と、
前記更新可能なスマートコントラクトの前記第2のバージョンのアドレスを使用して、前記更新不可能なスマートコントラクトのインターフェースを呼び出す工程と、
前記更新不可能なスマートコントラクトが、前記更新可能なスマートコントラクトの前記第2のバージョンのアドレスを前記ブロックチェーンへ格納する工程と、
前記更新不可能なスマートコントラクトが、前記ブロックチェーンから前記更新可能なスマートコントラクトの前記第2のバージョンのアドレスを取得し、前記取得したアドレスで前記更新可能なスマートコントラクトの前記第2のバージョンを呼び出すことにより、前記更新可能なスマートコントラクトの前記第2のバージョンを呼び出す工程と、
を有し、
前記更新不可能なスマートコントラクトが前記ブロックチェーンから取得した永続的なデータは、前記更新可能なスマートコントラクトの前記第2のバージョンに渡され、前記更新可能なスマートコントラクトの前記第2のバージョンが前記永続的なデータに対する計算を実行する
ものである、方法
【請求項6】
請求項4記載の方法において、前記分離する工程は、前記スマートコントラクトを前記更新不可能なスマートコントラクトと複数の前記更新可能なスマートコントラクトに分離する工程を有し、前記展開する工程は、各更新可能なスマートコントラクトの第1および第2のバージョンを展開する工程を有し、前記呼び出す工程は、前記インターフェースを前記各更新可能なスマートコントラクトに関連づけられた識別子と前記各更新可能なスマートコントラクト
のそれぞれのアドレスを使用して呼び出す工程を有し、前記格納する工程は、前記識別子と、前記各更新可能なスマートコントラクト
のそれぞれのバージョンのアドレスとを前記ブロックチェーンに格納する工程を有し、
前記呼び出す工程は、前記ブロックチェーンから前記更新可能なスマートコントラクトの前記第2のバージョンの識別子及びアドレスを取得し、前記取得されたアドレスで前記識別子によって識別される前記更新可能なスマートコントラクトの前記第2
のバージョンを呼び出す工程を有すものである、方法。
【請求項11】
請求項1に記載の方法において、
前記更新可能なスマートコントラクトの前記第1のバージョンを展開する前に、前記更新不可能なスマートコントラクトのアドレスを前記更新可能なスマートコントラクトの前記第1のバージョンにハードコーディングする工程と、
前記更新可能なスマートコントラクトの第2のバージョンを展開する工程と、
前記更新可能なスマートコントラクトの前記第2のバージョンを呼び出す工程と、
前記更新可能なスマートコントラクトの前記第2のバージョンが、前記ハード
コーディングされたアドレスで前記更新不可能なスマートコントラクトを呼び出す工程と、
前記更新不可能なスマートコントラクトが任意の永続的なデータを前記ブロックチェーンに格納する工程と、をさらに有するものであり、
前記更新不可能なスマートコントラクトが前記ブロックチェーンから取得した永続的なデータは、前記更新可能なスマートコントラクトの前記第2のバージョンに渡され、前記更新可能なスマートコントラクトの前記第2のバージョンが前記永続的なデータに対する計算を実行する、方法。
【請求項12】
ブロックチェーン上でスマートコントラクトを更新するためのシステムであって、
命令を格納するためのメモリと、
前記メモリに格納された前記命令を使用して以下の操作を実行する1つ以上のプロセッサと、
を有し、この操作は、
前記スマートコントラクトを更新可能なスマートコントラクトと更新不可能なスマートコントラクトに分離する工程であって、前記更新不可能なスマートコントラクトは、永続的にアクセス可能の必要があるデータについて、ブロックチェーンへの永続的なデータの格納と取得を処理し、前記更新可能なスマートコントラクトには前記ブロックチェーンへのデータ格納と取得を含まない、分離する工程と、
前記更新不可能なスマートコントラクトと前記更新可能なスマートコントラクトの第1のバージョンを展開する工程と、
前記更新不可能なスマートコントラクトに、前記更新可能なスマートコントラクトの前記第1のバージョンのアドレスを提供する工程と、
前記更新不可能なスマートコントラクトが、前記更新可能なスマートコントラクトの前記第1のバージョンのアドレスを前記ブロックチェーンに格納する工程と、
前記更新不可能なスマートコントラクトが前記ブロックチェーンから永続的なデータを取得し、前記永続的なデータを前記更新可能なスマートコントラクトの前記第1のバージョンに渡す工程と、
前記更新可能なスマートコントラクトの前記第1のバージョンが、前記永続的なデータの計算を実行し、前記永続的なデータの計算に基づいた更新されたデータを前記更新不可能なスマートコントラクトに返す工程と、
前記更新不可能なスマートコントラクトが前記更新されたデータを前記ブロックチェーンに格納する工程と、を含むものである、システム。
【請求項15】
請求項14記載のシステムにおいて、前記メモリは、
前記更新可能なスマートコントラクトの第2のバージョンを展開する工程と、
前記更新可能なスマートコントラクトの前記第2のバージョンのアドレスを使用して、前記更新不可能なスマートコントラクトの前記インターフェースを呼び出す工程と、
前記更新不可能なスマートコントラクトが、前記更新可能なスマートコントラクトの前記第2のバージョンのアドレスを前記ブロックチェーンへ格納する工程と、
前記更新不可能なスマートコントラクトが、前記ブロックチェーンから前記更新可能なスマートコントラクトの前記第2のバージョンのアドレスを取得し、前記取得したアドレスで前記更新可能なスマートコントラクトの前記第2のバージョンを呼び出すことにより、前記更新可能なスマートコントラクトの前記第2のバージョンを呼び出す工程と、を
含む操作を実行するための指令をさらに格納し
前記更新不可能なスマートコントラクトが前記ブロックチェーンから取得した永続的なデータは、前記更新可能なスマートコントラクトの前記第2のバージョンに渡され、前記更新可能なスマートコントラクトの前記第2のバージョンが前記永続的なデータに対する計算を実行するものである、システム。
【請求項22】
請求項12記載のシステムにおいて、前記メモリは、
前記更新可能なスマートコントラクトの前記第1のバージョンを展開する前に、前記更新不可能なスマートコントラクトのアドレスを前記更新可能なスマートコントラクトの前記第1のバージョンにハードコーディングする工程と、
前記更新可能なスマートコントラクトの第2のバージョンを展開する工程と、
前記更新可能なスマートコントラクトの前記第2のバージョンを呼び出す工程と、
前記更新可能なスマートコントラクトの前記第2のバージョンが前記
ハードコーディングされたアドレスで前記更新不可能なスマートコントラクトを呼び出す工程と、
前記更新不可能なスマートコントラクトが、任意の永続的なデータを前記ブロックチェーンに格納する工程と、
を含む操作を実行するためのさらなる命令を格納し、
前記更新不可能なスマートコントラクトが前記ブロックチェーンから取得した永続的なデータは、前記更新可能なスマートコントラクトの前記第2のバージョンに渡され、前記更新可能なスマートコントラクトの前記第2のバージョンが前記永続的なデータに対する計算を実行するものである、システム。
【発明の詳細な説明】
【技術分野】
【0001】
関連出願への相互参照
本出願は、2018年3月29日に出願された「更新可能なスマートコントラクト」と題された米国仮特許出願第62/650,183号の優先権を主張する。
【0002】
本出願は、更新可能なスマートコントラクトの設計、または別の場合では各スマートコントラクトとその永続的なデータ格納との間の結合(スマートコントラクトが実行するブロックチェーンまたは分散型台帳プラットフォームによって施行される)によって更新可能性が防止または低減されるスマートコントラクトの設計に関するものである。
【背景技術】
【0003】
ブロックチェーン技術は、今世紀最大、または少なくとも今世紀前半の最大の情報技術革命、をもたらす可能性を秘めている。インターネット革命後、ブロックチェーン革命はおそらくこれまで最大の混乱をもたらし、インターネットの最も弱い脈である信頼の欠如に挑むものである。ブロックチェーンは、データを実質的に不変にすることでインターネットに信頼をもたらすことができる、これまでの唯一の技術である。
【0004】
イーサリアムは現在、最も広く使用されているブロックチェーンシステムの1つである。イーサリアムは、ノード間の信頼を確立するためにデータを不変にする。イーサリアムは、保存される値を生成するだけでなく、プログラムまたはスマートコントラクトを不変にする。これは、イーサリアムでスマートコントラクトを展開した場合、そのスマートコントラクトは一度展開すると更新または変更できないことを意味する。
【0005】
したがって、データの不変性には、スマートコントラクトの将来の更新が不可能になるという代償が伴う。スマートコントラクトを更新できないことは、多くの使用ケースで実用的ではなく、スマートコントラクトの萎縮につながる可能性がある。ここで説明するシステムと方法は、基になるデータの不変性を損なうことなくスマートコントラクトを更新できるように設計されている。
この出願の発明に関連する先行技術文献情報としては、以下のものがある(国際出願日以降国際段階で引用された文献及び他国に国内移行した際に引用された文献を含む)。
(先行技術文献)
(非特許文献)
(非特許文献1) David Rugendyke,"Upgradable Solidity Contract Design - Rocket Pool - Medium", 21 November 2017 (2017-11-21), Retrieved from the Internet: URL:https://medium.com/rocket-pool/upgradable-solidity-contract-design-54789205276d
(非特許文献2) Hassan Abdel-Rahman,"Upgradable Contracts in Solidity - Cardstack - Medium", 19 February 2018 (2018-02-19), Retrieved from the Internet: URL:https://medium.com/cardstack/upgradable-contracts-in-solidity-d5af87f0f913
(非特許文献3) Anonymous,"Writing upgradable contracts in Solidity", 18 June 2016 (2016-06-18), Retrieved from the Internet: URL:https://blog.colony.io/writing-upgradeable-contracts-in-solidity-6743f0eecc88/
【発明の概要】
【発明が解決しようとする課題】
【0006】
本明細書で説明されるシステムおよび方法は、親および子モデルとして実装されるアーキテクチャソリューションを提供することによって、当技術分野のニーズに答えるものである。最初の工程として、子スマートコントラクトアドレスを使用して呼び出すことができる子スマートコントラクトの子スマートコントラクトアドレスを格納する機能を備えた親スマートコントラクトが展開される。次に、新しい子スマートコントラクトが展開されるたびに、親スマートコントラクトが新しい子スマートコントラクトのアドレスで更新され、親スマートコントラクトが新しい子スマートコントラクトを呼び出すことができるようになる。ここでの唯一の制限は、子スマートコントラクトの構造が親スマートコントラクトで認知されていることである。たとえば、子スマートコントラクトに入力される入力の数と子スマートコントラクトから出力される出力の数は、親スマートコントラクトの展開前に親スマートコントラクトで認識される。本明細書に記載の特定の実施形態では、親スマートコントラクトは呼び出しスマートコントラクトであり、更新可能ではないが、子スマートコントラクトは呼び出されたスマートコントラクトであり、更新可能である。この状況では、呼び出し元の(親)スマートコントラクトに、更新された呼び出し先の(子)スマートコントラクトを呼び出す方法が通知される。他方、本明細書で説明される他の実施形態では、呼び出し先の(子)スマートコントラクトは更新可能ではなく、呼び出し元の(親)スマートコントラクトは更新可能である。この場合では、呼び出し元(親)スマートコントラクトが新しいバージョンに更新されると、以前の呼び出し元(親)スマートコントラクトと同様に、アドレスが変更されていない呼び出し先(子)コントラクトを引き続き使用する。
【課題を解決するための手段】
【0007】
サンプルの実施形態において、システムおよび方法は、より一般的にスマートコントラクトまたはスマートコントラクトの設計に関するものであり、この更新可能性は、通常であれば、イーサリアムのような一般的なスマートコントラクトプラットフォームの場合のように、各スマートコントラクトと、ブロックチェーンまたは分散型台帳プラットフォームによって施行されるその永続的なデータ格納との間の結合によって妨げあるいは制限されるものである。そのようなサンプルの実施形態では、各概念的なスマートコントラクトは、個別の更新可能および更新不可能なスマートコントラクトに分割され、各スマートコントラクトの機能の分割は、プラットフォームの永続的なデータ格納の任意の直接使用が更新不可能なスマートコントラクトの機能の一部になり、残りの機能の少なくとも一部は更新可能なスマートコントラクトに残り、これにより、スマートコントラクトを相互運用するための既存または将来の技術を、元の概念的なスマートコントラクトを使って達成できた同じ組み合わせの機能を達成するために使用できる。また、スマートコントラクトに別のスマートコントラクトとの相互利用を開始するように指示するための既存または将来の技術は、相互利用を可能にするために、更新可能なスマートコントラクトの元の展開またはその後の展開と組み合わせて使用できる。
【0008】
サンプルの実施形態は、ブロックチェーンによって実装されたスマートコントラクトを、固定インターフェースを介して接続された更新可能なスマートコントラクトと更新不可能なスマートコントラクトに分離することによって更新する方法を含む。更新不可能なスマートコントラクトは、永続的にアクセス可能の必要があるデータのブロックチェーンへの永続的なデータ格納と取得を処理し、更新可能なスマートコントラクトには、ブロックチェーンへのデータ格納と取得は含まれない。更新不可能なスマートコントラクトと更新可能なスマートコントラクトの第一のバージョンが展開され、更新不可能なスマートコントラクトには、インターフェースを介して更新可能なスマートコントラクトの第一のバージョンのアドレスが提供される。更新不可能なスマートコントラクトは、更新可能なスマートコントラクトの第一のバージョンのアドレスをブロックチェーンに格納する。更新不可能なスマートコントラクトは、ブロックチェーンから永続的なデータを取得し、インターフェースを介して更新可能なスマートコントラクトの第一のバージョンに永続的なデータを渡す。動作中、更新可能なスマートコントラクトは永続データに対して計算を実行し、永続データの計算に基づいて更新されたデータをインターフェースを介して更新不可能なスマートコントラクトに返し、更新不可能なスマートコントラクトは更新されたデータをブロックチェーンに格納する。
【0009】
他のサンプルの実施形態では、ブロックチェーンに実装されたスマートコントラクトを更新するための方法は、スマートコントラクトを更新可能なスマートコントラクトと更新不可能なスマートコントラクトに分離する工程であって、更新不可能なスマートコントラクトは、永続的にアクセス可能の必要があるデータのデータチェーンへの永続的なデータ格納と取得を処理し、更新可能なスマートコントラクトはブロックチェーンへのデータ格納と取得を含まないものである、分離する工程と、更新不可能なスマートコントラクトと更新可能なスマートコントラクトの第一のバージョンを展開する工程と、更新可能なスマートコントラクトの第一のバージョンのアドレスを使用して、更新不可能なスマートコントラクトのインターフェースを呼び出す工程と、更新不可能なスマートコントラクトが更新可能なスマートコントラクトの第一のバージョンのアドレスをブロックチェーンに保存する工程とを含む。前記スマートコントラクトを更新するために、前記更新可能なスマートコントラクトの第2のバージョンが展開され、前記更新不可能なスマートコントラクトのインターフェースが、前記更新不可能なスマートコントラクトがブロックチェーンに格納する更新可能なスマートコントラクトの第2のバージョンのアドレスで呼び出される。前記更新不可能なスマートコントラクトは、前記ブロックチェーンから前記更新可能なスマートコントラクトの第2のバージョンのアドレスを取得し、前記更新可能なスマートコントラクトの第2のバージョンを呼び出すことにより、前記取得したアドレスで前記更新可能なスマートコントラクトの第2のバージョンを呼び出す。
【0010】
他の実施形態では、スマートコントラクトは、更新不可能なスマートコントラクトと、更新不可能なスマートコントラクトとのインターフェースをそれぞれ有する複数の更新可能なスマートコントラクトとに分離される。前記呼び出す工程は、各更新可能なスマートコントラクトのそれぞれのバージョンのアドレスを使用してそれぞれのインターフェースを呼び出し、各更新可能なスマートコントラクトのそれぞれのバージョンのアドレスがブロックチェーンに格納される。前記呼び出す工程には、ブロックチェーンから更新可能なスマートコントラクトの第2のバージョンのアドレスを取得し、取得したアドレスで更新可能なスマートコントラクトの第2のバージョンを呼び出す工程を含む。あるいは、それぞれのインターフェースは、単一のインターフェースにしてもよく、その場合呼び出す工程は、各更新可能なスマートコントラクトに関連付けられた識別子およびそれぞれのアドレスを用いて単一のインターフェースを呼び出す工程を含む。この実施形態では、前記格納する工程は、各更新可能なスマートコントラクトのそれぞれのバージョンの識別子およびアドレスをブロックチェーンに格納し、前記呼び出す工程は、ブロックチェーンから更新可能なスマートコントラクトの第2のバージョンの識別子およびアドレスを取得し、取得したアドレスの識別子によって識別される更新可能なスマートコントラクトの第2のバージョンを呼び出す工程を含む。
【0011】
さらに他の実施形態では、前記更新可能なスマートコントラクトは自己登録型であり、前記呼び出す工程は、この自己登録型の更新可能なスマートコントラクトが、自己登録型の更新可能なスマートコントラクトのそれぞれのバージョンのアドレスで更新不可能なスマートコントラクトのインターフェースを呼び出す工程を含む。複数の更新可能なスマートコントラクトも自己登録型である場合がある。そのような実施形態では、前記分離する工程は、スマートコントラクトを更新不可能なスマートコントラクトと複数の更新可能なスマートコントラクトに分離することを含み、前記展開する工程は、各更新可能なスマートコントラクトの第1および第2のバージョンを展開する工程を含む。前記呼び出す工程には、自己登録型の更新可能スマートコントラクトが、更新不可能なスマートコントラクトのそれぞれのインターフェースを、各自己登録型の更新可能スマートコントラクトのそれぞれのバージョンのアドレスで呼び出す工程を含む。また、前記格納する工程は、各更新可能なスマートコントラクトのそれぞれのバージョンのアドレスをブロックチェーンに格納することを含み、前記呼び出す工程は、ブロックチェーンから更新可能なスマートコントラクトの第2のバージョンのアドレスを取得し、取得したアドレスでの更新可能なスマートコントラクトの第2のバージョンを呼び出す工程を有する。
【0012】
これらの実施形態のそれぞれにおいて、前記分離する工程は、スマートコントラクトを複数の更新不可能なスマートコントラクトに分離する工程を含み得る。
【0013】
さらに他の実施形態では、前記更新可能なスマートコントラクトは、更新不可能なスマートコントラクトのアドレスでハードコードされている。この実施形態では、ブロックチェーンに実装されたスマートコントラクトは、スマートコントラクトを更新可能なスマートコントラクトと更新不可能なスマートコントラクトに分離することによって更新され、更新不可能なスマートコントラクトは、永続的にアクセス可能の必要があるデータについて、ブロックチェーンへの永続的なデータ格納と取得を処理し、更新可能なスマートコントラクトには、ブロックチェーンへの格納と取得が含まれていない。更新不可能なスマートコントラクトが展開され、更新不可能なスマートコントラクトのアドレスが、更新可能なスマートコントラクトの第1のバージョンが展開されると、これにハードコードされる。更新可能なスマートコントラクトを更新するために、更新可能なスマートコントラクトの第2のバージョンが展開され、更新可能なスマートコントラクトの第2のバージョンが呼び出される。更新可能なスマートコントラクトの第2のバージョンは、ハードコードされたアドレスで更新不可能なスマートコントラクトを呼び出し、更新不可能なスマートコントラクトは任意の永続的なデータをブロックチェーンに格納する。
【0014】
本明細書に記載の実施形態はまた、本開示全体を通して記載される方法を実施するための命令でコード化されたコンピュータシステムおよびコンピュータ可読媒体を包含する。
【図面の簡単な説明】
【0015】
本開示は、例として示したものであり、添付の図面の図に限定するものではない、また同様参照番号は類似の要素を示す。
【0016】
図1A~1Fは、いくつかの実施形態による計算機の親/子スマートコントラクトの実施形態を示す。
【
図1A】
図1Aは、親コントラクトが展開される最初の工程を示している。
【
図1B】
図1Bは、加算機能を備えた子コントラクトの展開を示している。
【
図1C】
図1Cは、乗算機能を備えた別の子コントラクトの展開を示している。
【
図1D】
図1Dは、親コントラクと、加算の子コントラクおよび乗算の子コントラクトの両方との関係を示している。
【
図1E】
図1Eは、減算の子コントラクの展開を含む、加算関数の減算関数への置き換えを示している。
【
図1F】
図1Fは、削除される加算の子コントラクトと親コントラクトとの間の接続、および追加される減算の子コントラクトとの接続を示している。
【
図2A】
図2Aは、サービスコントラクトが外部呼び出しによって更新される1つのサービスコントラクトを含む、いくつかの実施形態による、単純なケースを示している。
【
図2B】
図2Bは、
図2Aに示される初期展開に関して、更新されたサービスコントラクトの展開を示す。
【
図2C】
図2Cは、
図2Bに示される更新されたサービスコントラクトのいくつかの実施形態による呼び出しを示す。
【
図3A】
図3Aは、いくつかの実施形態による、外部呼び出しによって更新されるアドレスを有する複数のサービスコントラクトの実施形態の初期展開を示す。
【
図3B】
図3Bは、いくつかの実施形態による、
図3Aに示される初期展開に関して、更新されたサービスコントラクトX(1≦X≦M)の展開を示す。
【
図3C】
図3Cは、いくつかの実施形態による、
図3Bに示された更新されたサービスコントラクトXの呼び出しを示す。
【
図4A】
図4Aは、いくつかの実施形態による、自己登録型のサービスコントラクトの一実施形態の初期展開を示す。
【
図4B】
図4Bは、いくつかの実施形態による、
図4Aに示された初期展開に関して、更新された自己登録型のサービスコントラクトの展開を示す。
【
図4C】
図4Cは、いくつかの実施形態による、
図4Bに示された更新された自己登録型のサービスコントラクトの呼び出しを示す。
【
図5A】
図5Aは、いくつかの実施形態による、サービスコントラクトにおいて永続的な格納が提供される実施形態の初期展開を示す。
【
図5B】
図5Bは、いくつかの実施形態による、
図5Aに示された初期展開に関して、更新されたクライアントコントラクトの展開を示す。
【
図5C】
図5Cは、いくつかの実施形態による、
図5Bの更新されたクライアントコントラクトの呼び出しを示す。
【
図6A】
図6Aは、スマートコントラクトのバージョン1および2がブロックチェーン上に格納され、ブロックチェーンのデータ格納がコントラクトのそれぞれのバージョンに緊密に結合されている従来のスマートコントラクトを示す。
【
図6B】
図6Bは、すべてのデータ格納がクライアントコントラクトに結合され、データ格納要件のないそれぞれのサービスコントラクトが、インターフェースを介してクライアントコントラクトに更新された計算結果を提供する、いくつかの実施形態による、更新可能なスマートコントラクトを示す。
【
図7】
図7は、本明細書で説明される実施例が実装されるコンピュータシステムを示すブロック図である。
【発明を実施するための形態】
【0017】
以下の
図1~7に関する説明は、当業者がそれらを実施できるようにするための特定の実施形態を十分に示している。他の実施形態において、構造的、論理的、プロセス、および他の変更を組み込むことができる。いくつかの実施形態の一部および特徴が、他の実施形態のものに含まれ、またはそれらの代替になり得る。請求項に記載の実施形態は、それらの請求項の利用可能なすべての同等物を包含する。
【0018】
用語
ブロックチェーン:暗号化を使用してリンクおよび保護される、ブロックと呼ばれる継続的に増加するレコードのリスト。各ブロックには通常、前のブロックの暗号化ハッシュ、タイムスタンプ、およびトランザクションデータが含まれる。ブロックチェーンは、トランザクションデータの変更に対して本質的に強いように設計されている。分散型台帳として使用される場合、ブロックチェーンは通常、新しいブロックを検証するためのプロトコルに集合的に準拠するピアツーピアネットワークによって管理される。一度記録されると、特定のブロックのデータは、後続のすべてのブロックを変更せずに遡及的に変更することはできない。これには、ネットワークの過半数の談合が必要になる。
【0019】
スマートコントラクト:ブロックチェーンまたは分散型台帳で行われる汎用計算を提供するコンピュータープロトコル。スマートコントラクトトランザクションは、単純な場合もあれば、高度なロジックを実装する場合もある。結果として生じるトランザクションは、通常、公開され、追跡可能で、元に戻せない。さまざまな暗号通貨とイーサリアムなどのスマートコントラクトプラットフォームは、スマートコントラクトのタイプを実装している。イーサリアムの場合、スマートコントラクトは、バイトコードにコンパイルされ、実行のためにイーサリアムブロックチェーンに展開される高水準プログラミングの抽象化である。
【0020】
イーサリアム:スマートコントラクト(スクリプティング)関数を特徴とする、オープンソースの公開されたブロックチェーンベースの分散コンピューティングプラットフォームおよびオペレーティングシステム。 イーサリアムは、分散型チューリング完全仮想マシンであるイーサリアム仮想マシン(EVM)を提供し、これは、パブリックノードの国際ネットワークを使用してスクリプトを実行するためのスマートコントラクトのランタイム環境である。イーサリアムは、著名で周知のスマートコントラクトフレームワークである。
【0021】
イーサリアムコンストラクター:イーサリアムにおいて、コンストラクターは、スマートコントラクトがブロックチェーンネットワークに展開されるときにブロックチェーンプラットフォームによって自動的に実行されるスマートコントラクトの一部であるルーチンである。他のブロックチェーンプラットフォームには同様のメカニズムが含まれているか、またはそのようなメカニズムが実現可能である。
【0022】
コントラクト:スマートコントラクト。
【0023】
クライアント(親)コントラクト*:永続的にアクセス可能の必要があるブロックチェーンへのすべての永続的なデータ格納と取得を処理する分離されたコントラクトの部分。クライアントコントラクトは、一度も更新されないように設計されている。サンプルの実施形態では、クライアントコントラクトは、永続的なデータを取得してサービスコントラクトに渡すことができ、サービスコントラクトは、データを計算して、永続的な格納のためにクライアントコントラクトに返すことができる。
【0024】
サービス(子)コントラクト*:クライアントコントラクトによって呼び出され、格納と取得を含まない、分離されたコントラクトの部分。 サービスコントラクトは、本明細書に記載されているいくつかのメカニズムの1つを介していつでも更新できる。
*以下に説明するいくつかの実施形態では、クライアントコントラクトとサービスコントラクトの役割が逆になり、サービスコントラクトが永続的な格納と取得を提供し、クライアントコントラクトが更新可能である。
【0025】
概要
ここで説明するシステムと方法は、イーサリアムのようなプログラム可能な分散型台帳プラットフォームの導入によって生じた固有の問題に部分的に対処する。これらのプラットフォームは、プログラム自体が分散型台帳ネットワークに展開された後、ユーザー提供の分散型プログラム(「コントラクト」)と各プログラムによって永続的に分散型台帳に保存されているデータを緊密に結合する。この結合の効果は、従来技術のシステムでコントラクトを更新されたバージョンで置き換えようとすると、以前のバージョンによって保存されたすべてのデータが更新されたコントラクトで読み取れなくなることである。当業者は、これが、ネットワークの通常の日常の操作の範囲外である、分散型台帳ネットワークプログラミングへの分岐などの特別な手段を含まないことを理解するであろう。ここで説明する手法は、このような分散型台帳プラットフォームに適用される。
【0026】
従来技術のシステムでは、コントラクトを更新できないことが単に受け入れら、永続的なデータへのアクセスを失うことなくコントラクトの一部を更新できないことを予期してコントラクトが展開されてきた。本明細書で説明するシステムと方法は、スマートコントラクトを(1)永続的にアクセス可能の必要があるすべてのデータのブロックチェーンへのすべての永続的なデータ格納と取得を処理するクライアントコントラクトと(2)クライアントコントラクトによって呼び出され、そのような格納と取得を含まない1つ以上のサービスコントラクトに、分離することによってこの制限に対処すること提案するものである。
【0027】
クライアントクライアントは一度も更新されないように設計されるが、サービスクライアントは、ここで説明されているいくつかのメカニズムの1つを介していつでも更新できる。サンプルの実施形態では、クライアントクライアントは、永続的なデータを取得してサービスクライアントに渡すことができ、サービスクライアントは、データを計算して、永続的な格納のためにクライアントクライアントに返すことができる。
【0028】
システムおよび方法を詳細に説明する前に、サンプル実施形態の親/子(クライアントコントラクト/サービスコントラクト)アーキテクチャをよりよく説明するために、計算機の簡単な例を最初に説明する。
【0029】
計算機の例
初日に次の機能を備えた計算機を作成したいと仮定する。
二つの数値を加算する
二つの数値を乗算する
すべての演算結果を保存し、そのデータは決して失わない
上記の機能の計算機を作るには、次の特徴を有する親コントラクトが展開される。
・2つの数値を取り、1つの数値を返すことができる任意の子コントラクトを呼び出す
・コントラクトアドレスを保存する機能
・返された結果を状態変数に格納する機能
上記の機能を備えた親コントラクトを展開したら、2つの子コントラクトを展開する必要がある。1つは加算関数を使用し、もう1つは乗算関数を使用する。これらの関数は両方とも2つの数値を受け取り、結果を返し、状態変数には何も格納しない。子コントラクトが展開されると、これら2つのコントラクトのアドレスが親コントラクトに更新される。これで、親コントラクトはこれら2つのコントラクトを呼び出して、結果を保存できる。 親と子コントラクトを組み合わせることで、計算機を構築するという要件が満たされる。
【0030】
この後、計算機のユーザーが、加算関数は必要ないが減算関数が必要であると決めたと仮定する。データが失われてはならないという要件は維持する必要がある。この場合、新しい親子コントラクトが展開されると、古い親コントラクトによって保存されたすべてのデータが失われるが、これは望ましいことではない。しかし、親子モデルでは、加算の子コントラクトに類似する別の子コントラクトが展開され、減算が実行可能である。減算の子コントラクトが展開されると、親コントラクトはこの新しい減算の子コントラクトのアドレスで更新される。このようにして、保存されたデータを不変のままにしながら、計算機のスマートコントラクトの機能を更新することができる。
図1A~1Fは、この計算機の例を図式的に示している。
【0031】
図1Aは、以下を含む特定の機能を備えた親コントラクトが展開される最初の工程を示している。
加算の子コントラクトを呼び出す
乗算の子コントラクトを呼び出す
返された結果を状態変数に格納する
親コントラクトには状態変数が含まれ、子コントラクトにはビジネスロジックのみが存在する。設計段階では、親コントラクトは、現在使用され、将来使用できるすべての状態変数を識別する必要がある。
【0032】
図1Bは、加算機能を備えた子コントラクトの展開を示している。特に、加算の子コントラクトには、2つの数値を入力として受け取り、それらを加算して、結果を返す関数が含まれている。
【0033】
図1Cは、乗算機能を備えた別の子コントラクトの展開を示している。特に、乗算の子コントラクトには、2つの数値を入力として受け取り、それらを乗算して、結果を返す関数が含まれている。
【0034】
図1Dは、親コントラクトと、加算の子コントラクトおよび乗算の子コントラクトの両方との結合を示している。
【0035】
ここで、加算関数を削除し、減算関数に置き換えるために、減算の子コントラクトが
図1Eに示すように展開される。減算の子コントラクトには、2つの数値を入力として受け取り、それらを減算して、結果を返す関数が含まれている。次に、
図1Fに示すように、加算の子コントラクトと親コントラクトとの間の接続が削除され、減算の子コントラクトとの接続が追加される。必要に応じて、加算の子コントラクトへの接続をいつでも再度追加できる。また、親コントラクトがここで説明するように更新可能に設計されている場合は、加算の子コントラクトと乗算の子コントラクトに加えて、減算の子コントラクトを追加して追加関数を提供できる。各子コントラクトは、親コントラクトに提供されるのと同じ数の入力と出力、およびアドレスを持っていることが理解されよう。
【0036】
詳細な説明-1つの更新可能なサービスコントラクトを有するクライアントコントラクト
本明細書に記載のサンプル実施形態では、クライアントコントラクト、1つの更新可能なサービスコントラクト、およびサービスコントラクトの新しいバージョンが展開されるたびにサービスコントラクトのアドレスでクライアントコントラクトを設定するための外部呼出しのためのメカニズムが提供される。
【0037】
図2Aは、サービスコントラクトが外部呼び出しによって更新される1つのサービスコントラクトを含む単純なケースを示している。図示されているように、初期展開では、200でのクライアントコントラクトの展開、202でのサービスコントラクトのバージョン1の展開、および204でのサービスコントラクトのバージョン1のアドレスを持つクライアントコントラクトでのインターフェースAの呼び出しが含まれる。206でクライアントコントラクトは、サービスコントラクトのバージョン1のアドレスをブロックチェーンへ格納する。図に示すように、クライアントコントラクトには、サービスコントラクトのアドレスを更新するためのインターフェースAとサービスコントラクトを呼び出すためのインターフェースB、およびサービスコントラクトのアドレスおよびその他の状態データを格納するための永続的な格納が含まれる。サービスコントラクトのバージョン1には永続的な格納がなく、クライアントコントラクトのインターフェースBを介して実装される。
【0038】
図2Bは、
図2Aに示される初期展開に関連して、更新されたサービスコントラクトの展開を示す。図示されているように、サービスコントラクトのバージョンNは208で展開され、210でクライアントコントラクトのインターフェースAは、サービスコントラクトのバージョンNのアドレスで呼び出される。クライアントコントラクトは、212でサービスコントラクトのバージョンNのアドレスをブロックチェーンへ格納する。サービスコントラクトのバージョンNにも永続的な格納はなく、クライアントコントラクトのインターフェースBを介して実装される。
【0039】
図2Cは、更新されたサービスコントラクトの呼び出しを示している。 図に示すように、214でクライアントコントラクトが呼び出され、クライアントコントラクトは216でブロックチェーンからサービスコントラクトの最後に保存されたアドレスを取得する。次に、218で、クライアントコントラクトは、取得したアドレスでインターフェースBを使用してサービスコントラクトの最新バージョンを呼び出す。
【0040】
図2A~
図2Cに関して説明した1つの更新可能なサービスコントラクトでクライアントコントラクトを実装するためのサンプルコードを以下に提示する。このサンプルでは、変更が予想されるコントラクト機能の一部、10%から13%に変更される税計算が、すべての分散型台帳への永続的な格納を処理するクライアントコントラクトによって呼び出される別のサービスコントラクトに配置されている。クライアントコントラクトは次のように実装される。
【0041】
クライアントコントラクト
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});
}
}
サービスコントラクトのバージョン1は次のように実装される。
サービスコントラクト、バージョン1
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);
}
}
サービスコントラクトのバージョン2は次のように実装される。
サービスコントラクト、バージョン2
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);
}
}
変形例
上記の実施形態の第1の変形例は、複数の別個に更新可能なサービスコントラクトを含み、それぞれが、呼び出しのための独自のインターフェース、ならびに個別のメカニズム(特定のサービスコントラクトの新しいバージョンが展開される度に外部呼出し元がそのサービスコントラクトのアドレスでクライアントコントラクトを設定する)を有する。
【0042】
図3Aは、外部呼び出しによって更新されたアドレスを有する複数のサービスコントラクトの実施形態の初期展開を示している。
図3Aで示すように、クライアントコントラクトは300で展開され、サービスコントラクトXのバージョン1(X=1...m)は302で展開される。クライアントコントラクトのインターフェースAiは、304でサービスコントラクトのバージョン1のアドレスで、また、302での各サービスコントラクトの展開のプロセスが呼び出され、インターフェースAiの呼び出しは、インターフェースA1...AmでX=1...mに対してそれぞれ繰り返される。クライアントコントラクトは、306でそれぞれのサービスコントラクトのバージョン1のアドレスをブロックチェーンに格納する。各サービスコントラクト1...Mのバージョン1には永続的な格納がなく、クライアントコントラクトのそれぞれのインターフェースB1...Bmを介して実装される。
【0043】
図3Bは、
図3Aに示された初期展開に関して、更新されたサービスコントラクトX(1≦X≦M)の展開を示す。図示されているように、サービスコントラクトXのバージョンNは308で展開され、クライアントコントラクトのインターフェースAmは、310でサービスコントラクトXのバージョンNのアドレスで呼び出される。クライアントコントラクトは312でサービスコントラクトXのバージョンNのアドレスをブロックチェーンへ格納する。サービスコントラクトXのバージョンNにも永続的な格納がなく、クライアントコントラクトのインターフェースBmを介して実装される。
【0044】
図3Cは、更新されたサービスコントラクトXの呼び出しを示している。図示されているように、クライアントコントラクトは314で呼び出され、クライアントコントラクトは316でブロックチェーンからサービスコントラクト1...Mの最後に格納されたアドレスを取得する。次に、クライアントコントラクトは、インターフェースBmを使用して、取得したアドレスでサービスコントラクトXの最新バージョンを呼び出す。
【0045】
そのような実施形態を実施するための上記のコードの修正は、当業者には明らかであろう。
【0046】
上記の実施形態の別の変形例は、1つのサービスコントラクトを含み、これは、そのサービスコントラクトの新しいバージョンごとに、展開時に独自のアドレスでクライアントコントラクトを自動的に設定するメカニズムをさらに有する。
【0047】
図4Aは、自己登録型サービスコントラクトの一実施形態の初期展開を示している。
図4Aで示されるように、クライアントコントラクトは400で展開され、自己登録型サービスコントラクトのバージョン1は402で展開される。展開時に、自己登録型サービスコントラクトのバージョン1は、404で自身のアドレスでクライアントコントラクトのインターフェースAを呼び出す。406で、クライアントコントラクトは自己登録型サービスコントラクトのバージョン1のアドレスをブロックチェーンに保存する。自己登録型サービスコントラクトバージョン1のバージョン1には永続的な格納がなく、クライアントコントラクトのインターフェースBによって呼び出される。
【0048】
図4Bは、
図4Aに示される初期展開に関連し、更新された自己登録型サービスコントラクトの展開を示す。図示されているように、自己登録型サービスコントラクトのバージョンNは408で展開される。展開時に、自己登録型サービスコントラクトのバージョンNは、410で自身のアドレスを使ってクライアントコントラクト上のインターフェースAを呼び出す。クライアントコントラクトは、412で自己登録型サービスコントラクトのバージョンNのアドレスをブロックチェーンに保存する。自己登録型サービスコントラクトのバージョンNにも永続的な格納がなく、クライアントコントラクトのインターフェースBを介して実装される。
【0049】
図4Cは、更新された自己登録型サービスコントラクトの呼び出しを示している。図に示すように、414でクライアントコントラクトが呼び出され、クライアントコントラクトは416でブロックチェーンから自己登録型サービスコントラクトの最後に保存されたアドレスを取得する。次に418で、クライアントコントラクトは自己登録型サービスコントラクトの最新バージョンをインターフェースBを使って呼び出す。
【0050】
そのような実施形態を実施するための上記コードの修正は、当業者には明らかであろう。
【0051】
上記の実施形態の別の変形例は、複数のサービスコントラクトを最後に説明した変形例の自己登録メカニズムと組み合わせたものである。
【0052】
上記の実施形態の複数のサービスコントラクトの変形例のさらに別の変形例では、サービスコントラクトのアドレスを更新するための一連のインターフェースのそれぞれを、各サービスコントラクトに関連付けられた識別子をそのサービスコントラクトの新しいバージョンのアドレスと一緒に受け入れる単一のインターフェースに置き換えられる。識別子はブロックチェーン上のアドレスと一緒に保存され、関連するサービスコントラクトを識別するためにクライアントコントラクトによって取得される。
【0053】
上記の実施形態のさらに別の変形例は、クライアントコントラクトの一部を更新しなければならない場合に恒久的に記録されたデータのアクセス不能を最小限にするために、クライアントコントラクトを複数のクライアントコントラクトに分離する。
【0054】
上記の実施形態のさらに別の変形では、恒久的な永続的な格納および取得が1つまたは複数のサービスコントラクトに分離され、他の動作が1つまたは複数のクライアントコントラクトに残るように、コントラクト間の上述された関係が逆転される。この変形例では、いつでも更新できるのはクライアントコントラクトであり、更新が意図されないのはサービスコントラクトになる。この変形例では、永続的な格納サービスコントラクトのアドレスがクライアントコントラクトの各バージョンにハードコードされており、それ以上のアドレス更新メカニズムは必要ない。
【0055】
図5Aは、恒久的な格納がサービスコントラクトで提供される実施形態の初期展開を示している。この実施形態では、単一のクライアントコントラクトおよび単一のサービスコントラクトのみが示されている。上記のアプローチを使用して、複数のクライアントコントラクトおよび自己登録クライアントコントラクトに対応するようにこの実施形態を変更することができることが理解されよう。
図5Aに示されるように、サービスコントラクトは500で展開され、サービスコントラクトのアドレスは、502でクライアントコントラクトのバージョン1にハードコードされる。次に、クライアントコントラクトは、504でブロックチェーンに展開される。この実施形態では、クライアントコントラクトのバージョン1には永続的な格納がなく、クライアントコントラクトのインターフェースCを介してサービスコントラクトを呼び出す。
【0056】
図5Bは、
図5Aに示される初期展開に関連して、更新されたクライアントコントラクトの展開を示す。図に示すように、クライアントコントラクトのバージョンNは506で展開される。展開時に、クライアントコントラクトのバージョンNは、サービスコントラクトのハードコードされたアドレスを使用して、サービスコントラクトのインターフェースCを呼び出す。クライアントコントラクトのバージョンNにも永続的な格納はない。
【0057】
図5Cは、更新されたクライアントコントラクトの呼び出しを示す。示されているように、508でクライアントコントラクトのバージョンNが呼び出され、クライアントコントラクトのバージョンNが510でハードコードされたアドレスでサービスコントラクトを呼び出す。次に、512で、サービスコントラクトが永続的な保存と取得を実行し、場合によってインターフェースCを介してクライアントコントラクトにデータを返す。
【0058】
そのような実施形態を実施するための上記のコードの修正は、当業者には明らかであろう。
【0059】
インターフェース
上記の各実施形態で説明されたインターフェースは、2つのタイプがある。クライアントコントラクトとサービスコントラクト(B、B1...Bm、C)との間の機能インターフェース、及びブロックチェーン(A、A1...Am)に展開された後に更新不可能なクライアントコントラクトに更新されたサービスコントラクトを見つけて使用するために知っておく必要があることを通知するために使用される登録インターフェースである。どちらの場合も、インターフェースという用語はソフトウェア感覚で使用される。つまり、独立したソフトウェアエンティティが相互作用する論理的なポイントである。より具体的には、インターフェースには、他のスマートコントラクトを含む外部の呼び出し元に見え且つアクセスできる関数シグネチャが含まれている。シグニチャには、関数名、入力が予期されるデータ型、および返されるデータ型が含まれる。ただし、インターフェースは実装について何も提供する必要はなく、つまり、呼び出されたときに関数が実際に何をするかについては何も提供しない。
【0060】
機能インターフェース
任意のサービスコントラクトについて、上記の実施形態のインターフェースは、クライアントコントラクトによって呼び出されるそのすべての関数のシグニチャを集合的に含む。各変形例で、クライアントコントラクトまたはサービスコントラクトのいずれかが更新されない可能性があるため、これらのシグニチャを変更することはできない。そうしないと、それらの間の呼び出しは失敗する。変形例で更新されたサービスコントラクトを許可する場合、同じ入力で計算を実行できる場合であれば、各関数が実際に実行することは変更できる。これらのインターフェースを構築する方法(つまり、それらを設計する方法)は、上記の各変形例に関して以下で説明されている。
【0061】
単純なケース-更新が必要となる可能性のあるすべての機能を特定する。現在のサービスコントラクトのニーズに加えて、予想される将来のニーズをサポートするために、クライアントコントラクトで永続的な格納サポートを計画する。現在必要な機能を実装するが、変更されずに将来の機能のニーズをサポートするシグニチャを持つサービスコントラクトバージョン1の関数を記述する。
【0062】
複数サービスコントラクト-サービスコントラクト機能が複数のサービスコントラクトに分割されることを除いて、単純なケースと同じ。
【0063】
自己登録型の単純ケース-単純ケースと同じ。
【0064】
自己登録型、複数サービスコントラクト-複数サービスコントラクトのケースと同じである。
【0065】
複数サービスコントラクト、単一登録型インターフェース-複数サービスコントラクトのケースと同じ。
【0066】
複数クライアントコントラクト-上記と同じ(この変形例は、上記のケースのいずれにも適用でき、クライアントコントラクトを分割するだけである)。関数呼び出しは、クライアントコントラクトのいずれかからも呼び出しできるが、インターフェースの設計は変更されない。
【0067】
逆のケース、サービスコントラクトで格納-この場合、サービスコントラクトにおける関数は、すべての恒久的な格納および取得を含む更新不可能なサービスを提供する。これらのサービスコントラクト関数は、クライアントコントラクトが将来更新されるときに、クライアントコントラクトの将来のニーズをサポートするように可能な限り設計される。これは、インターフェースとサービスコントラクト関数の実装の両方に当てはまる(これらは、どちらも初期展開後に変更できないため)。
【0068】
登録インターフェース
単純なケースで、このインターフェースを設計するための基本的なアプローチは、上記のサンプルコードに示されている。この場合、関数{linkToServiceContract}のシグネチャはインターフェースAである。この関数は、サービスコントラクトのバージョンが展開されるたびに手動で呼び出される。イーサリアムの場合、「手動で呼び出される」は、関数を呼び出すオーダーを含み、提供されたパラメータとして新しいサービスコントラクトアドレスを含むトランザクションがプログラマによってブロックチェーンに送信されることにより実際に達成されることを当業者は理解するであろう。
【0069】
複数サービスコントラクト-各更新可能なサービスコントラクトに別個の{linkToServiceContract}関数が存在することを除いて、基本的に単純ケースと同じである。たとえば、{linkToServiceContract1(address_newServiceContract1Address)}、{linkToServiceContract2(address_newServiceContract2Address)}などである。
【0070】
自己登録型の単純なケース-単純なケースと同じであるが、サービスコントラクトには、登録インターフェースを自動的に呼び出すメカニズムがある(たとえば、{linkToServiceContract}を呼び出す)。イーサリアムで機能するそのメカニズムへの簡単なアプローチは、サービスコントラクトに「コンストラクター」を追加することである。コンストラクターは、サービスコントラクトが展開されるときに実行され、登録インターフェースを呼び出す。サービスコントラクトの各新バージョンには、このコンストラクターコードが含まれる。実用的な例として、単純なケースのサンプルコードで、サービスコントラクトに次の関数を追加するだけでよい。
function ServiceContract(address_clientContractAddress) public{
ClientContract objClientContract =
ClientContract(_clientContractAddress);
objClientContract.linkToServiceContract(this);
}
当業者は、このサンプルが、各展開中にプログラマによってコンストラクタに提供されるクライアントコントラクトのアドレスを必要とするが、クライアントコントラクトは変更されないので、それはまたハードコーディングできることを理解するであろう。
【0071】
自己登録型の複数サービスコントラクト-展開時に各サービスコントラクトがそのサービスコントラクトに固有の登録インターフェースを呼び出すことを除いて、自己登録型の単純なケースと同じである。
function ServiceContract1(address_clientContractAddress) public{
ClientContract objClientContract =
ClientContract(_clientContractAddress);
objClientContract.linkToServiceContract1(this);
}
複数サービスコントラクト、単純登録インターフェース - クライアントで複数登録関数を有する(すなわち, {linkToServiceContract1}, {linkToServiceContract2})代わりに以下の1関数が使用される。
mapping(uint256 => address) public ServiceContractAddressMap;
function linkToServiceContract (uint256 _serviceContractIndex,
address_newServiceContractAddress)
public {
ServiceContractAddressMap[_interfaceIndex] =
_newServiceContractAddress;
}
この場合、プログラマーは、サービスコントラクトの1つに新しいバージョンが展開されるたびに、その関数を呼び出すトランザクションを送信する。サンプルコードを使用して、サービスコントラクト2が新しいバージョンで展開された場合、プログラマーは次の呼び出しを行うトランザクションを発行する。
linkToServiceContract(2,)
複数クライアントコントラクト-この変形例は、上記の実施形態のいずれにも適用できる。登録インターフェースは、分割によって生じるすべてのクライアントコントラクトで繰り返す必要がある。これらのインターフェースはすべて、サービスコントラクトバージョンの展開時に呼び出す必要がある。それを呼び出す方法は、上記の変形例のいずれかが開始点として使用された方法と同じである。
【0072】
逆のケース、サービスコントラクトに格納-この変形例登録インターフェースを使用しない。
【0073】
図6は、本明細書に記載されている更新可能なスマートコントラクトを従来のスマートコントラクトと比較したものである。
図6Aは、スマートコントラクトのバージョン1および2がブロックチェーン上に格納され、ブロックチェーンデータ格納がコントラクトのそれぞれのバージョンに緊密に結合されている従来のスマートコントラクトを示している。この従来のシナリオでは、バージョン1によって保存されたデータはバージョン2にアクセスできず、その逆も同様である。それに対して、
図6Bは、すべてのデータ格納がクライアントコントラクトに結合され、データ格納要件のないそれぞれのサービスコントラクトがインターフェースを介してクライアントコントラクトに更新された計算結果を提供する、本明細書で説明される更新可能なスマートコントラクトを示す。更新後もデータにアクセス可能であるが、元のクライアントコントラクトは影響を受けない。
【0074】
当業者は、本明細書に記載されるように更新可能なスマートコントラクトの実装前に格納されたのと同じデータが、図示の実施形態においてブロックチェーンに格納されていることを理解するであろう。本明細書に記載の更新可能なスマートコントラクトの実施形態によれば、何を探すべきかを知っている場合、コントラクトは2つの部分に分割され、格納されたデータはそれらの部分の1つにだけ関連付けられることが分かる。ブロックチェーンに挿入されたブロックに大きな変更はない。本明細書に記載の実施形態は、スマートコントラクトプログラムを変更して更新の制限を回避する方法を提供しながら、従来の方法で従来のブロックチェーンを依然として使用する。ブロックの構造は変更されず、ブロックで使用できるようになるトランザクションの数と関連する格納の量だけが変更される。このような更新可能性を提供することにより、スマートコントラクトは、更新不可能になった結果として使用不可ならないため、その使用が増えるであろう。
【0075】
コンピュータリソース
当業者はまた、本明細書に記載の更新可能なスマートコントラクトが、本明細書に記載の方法およびシステムを実装するための命令を含むソフトウェアを格納する適切なコンピューティングリソース(例えば、1つまたは複数のプロセッサ)およびメモリリソースを使用して実装され得ることを理解するであろう。本明細書に記載のシステムおよび方法を実装するための命令を記憶するためのメモリには、ランダムアクセスメモリ(RAM)、およびいくつかの実施形態では、レジスタなどの半導体内の記憶場所を含む半導体メモリデバイスが含まれる。静的メモリの特定の例には、半導体メモリデバイス(例えば、電気的にプログラム可能な読み取り専用メモリ(EPROM)、電気的に消去可能なプログラム可能な読み取り専用メモリ(EEPROM))、フラッシュメモリデバイス、内蔵ハードディスクやリムーバブルディスクなどの磁気ディスク、光磁気ディスク、RAMおよびCD-ROMおよびDVD-ROMディスクなどの不揮発性メモリを含む。
【0076】
本明細書に記載の更新可能なスマートコントラクトを実装する1つまたは複数の機械は、ディスプレイデバイス、入力デバイス(例えば、キーボード)、およびユーザインターフェース(UI)ナビゲーションデバイス(例えば、マウス)をさらに含み得る。一例では、表示装置、入力装置、およびUIナビゲーション装置は、タッチスクリーンディスプレイであり得る。1つまたは複数の機械は、大容量記憶装置(例えば、駆動ユニット)、信号生成装置(例えば、スピーカー)、ネットワークインターフェース装置、およびデータを収集するための1つまたは複数のセンサーをさらに含み得る。1つまたは複数の機械は、シリアル(例えば、ユニバーサルシリアルバス(USB)、パラレル、または他の有線または無線(例えば、赤外線(IR)、近距離通信(NFC))接続等の出力コントローラを含み、1つまたは複数の周辺機器(例えば、プリンタ、カードリーダー等)と通信または制御する。いくつかの実施形態では、プロセッサおよび/または命令は、処理回路および/またはトランシーバ回路を含む場合がある。
【0077】
サンプルの実施形態では、記憶装置は、本明細書に記載の技術または関数のいずれか1つまたは複数によって実施または利用されるデータ構造または命令(例えば、ソフトウェア)の1つまたは複数のセットが格納される機械可読媒体を含み得る。命令はまた、完全にまたは少なくとも部分的に、メインメモリ内、静的メモリ内、または機械によるその実行中にハードウェアプロセッサ内に存在し得る。一例では、ハードウェアプロセッサ、メインメモリ、静的メモリ、または記憶装置の1つまたは任意の組み合わせが、機械可読媒体を構成し得る。機械可読媒体の特定の例には、半導体メモリデバイス(例えば、電気的にプログラム可能な読み取り専用メモリ(EPROM)、電気的に消去可能なプログラム可能な読み取り専用メモリ(EEPROM)およびフラッシュメモリデバイス)、内蔵ハードディスクやリムーバブルディスクなどの磁気ディスク、光磁気ディスク、RAMおよびCD-ROMおよびDVD-ROMディスク等の不揮発性メモリを含む。機械可読媒体は一般に単一の媒体であるが、「機械可読媒体」という用語は、1つまたは複数の命令を格納するように構成された単一の媒体または複数の媒体(例えば、集中型または分散型データベース、および/または関連するキャッシュおよびサーバー)を含み得る。
【0078】
本明細書に記載の更新可能なスマートコントラクトを実装する機械装置は、ハードウェアプロセッサ(例えば、中央処理装置(CPU)、グラフィック処理装置(GPU)、ハードウェアプロセッサコア、またはそれらの任意の組み合わせ)、メインメモリ、および静的メモリ、センサー、ネットワークインターフェースデバイス、アンテナ、ディスプレイデバイス、入力デバイス、UIナビゲーションデバイス、マスストレージ、命令、信号生成デバイス、および出力コントローラーの1つまたは複数を含んでもよい。装置は、本明細書に開示される方法および/または操作のうちの1つまたは複数を実行するように構成され得る。装置は、本明細書に開示される方法および/または操作の1つまたは複数を実行するため、および/または本明細書に開示される方法および/または操作の1つまたは複数の一部を実行するための機械の構成要素として意図され得る。いくつかの実施形態では、装置は、電力を受け取るためのピンまたは他の手段を含み得る。いくつかの実施形態では、装置は、電力調整ハードウェアを含み得る。
【0079】
図7は、本明細書に記載のサンプルを実装することができるコンピュータシステムを示すブロック図である。コンピュータシステム700は、例えば、サーバーまたはサーバーの組み合わせに実装することができる。例えば、コンピュータシステム700は、スマートコントラクトを管理するためのネットワークコンピュータシステムの一部として実装され得る。本明細書で説明される更新可能なスマートコントラクトはまた、
図7で説明されるような複数のコンピュータシステムの組み合わせを使用して実装することが可能である。
【0080】
一実施形態では、コンピュータシステム700は、処理リソース、メインメモリ720、読み取り専用メモリ(ROM)730、記憶装置740、および通信インターフェース750を含む。コンピュータシステム700は、ランダムアクセスメモリ(RAM)や他の動的記憶装置によって提供され、プロセッサ710によって実行される情報及び指令を格納するためのメインメモリ720に記憶された情報を処理するための少なくとも1つのプロセッサ710を含む。プロセッサ710によって実行される命令の実行中に、一時変数または他の中間情報を記憶するためにメインメモリ720も使用可能である。コンピュータシステム700はまた、プロセッサ710のための静的情報および命令を記憶するためのROM730または他の静的記憶装置を含み得る。情報や命令を格納するために、磁気ディスクや光ディスクなどの記憶装置740が用意される。
【0081】
通信インターフェース750は、コンピュータシステム700が、ネットワークリンク(無線または有線)を使用して、1つまたは複数のネットワーク(例えば、セルラーネットワーク)と通信することを可能にする。ネットワークリンクを使用して、コンピュータシステム700は、1つまたは複数のコンピューティングデバイスおよび1つまたは複数のサーバと通信することができる。メモリ730に格納された実行可能命令は、実行されたときに本明細書に記載された方法のうちの1つまたは複数を実行するための命令724を含むことができる。
【0082】
例として、メモリ720に格納された命令およびデータは、本明細書で説明されるように、更新可能なスマートコントラクトを実装するためにプロセッサ710によって実行され、本明細書に記載された更新可能なスマートコントラクトを実行できる。プロセッサ710は、ソフトウェアおよび/または他の論理のための命令を実行して、1つまたは複数のプロセス、工程、および
図1~
図7によって説明されるような実装と一緒に説明された他の関数を実行する。
【0083】
本明細書で説明される例は、説明された技術を実装するためのコンピュータシステム700の使用に関する。一例によれば、これらの技術は、プロセッサ710がメインメモリ720に含まれる1つまたは複数の命令の1つまたは複数のシーケンスを実行することに応答して、コンピュータシステム700によって実行される。そのような命令は、記憶装置740などの読み取り可能な別の機械可読媒体からメインメモリ720に読み込まれ得る。メインメモリ720に含まれる命令のシーケンスの実行により、プロセッサ710は、本明細書に記載の処理工程を実行する。代替の実装では、ハードワイヤード回路を、ソフトウェア命令の代わりに、またはソフトウェア命令と組み合わせて使用して、本明細書に記載の実施例を実装することができる。したがって、説明する例は、ハードウェア回路とソフトウェアの特定の組み合わせに限定されない。
【0084】
本明細書に記載の関数またはアルゴリズムは、一実施形態ではソフトウェアに実装することができる。ソフトウェアは、コンピュータ可読媒体、または1つまたは複数の非一時的メモリまたは他のタイプのローカルまたはネットワーク化されたハードウェアベースの記憶装置などのコンピュータ可読記憶装置に記憶されたコンピュータ実行可能命令からなり得る。さらに、そのような関数は、ソフトウェア、ハードウェア、ファームウェア、またはそれらの任意の組み合わせであり得るモジュールに対応する。必要に応じて、1つまたは複数のモジュールで複数の関数を実行することができ、説明した実施形態は単なる例である。ソフトウェアは、デジタル信号プロセッサ、ASIC、マイクロプロセッサ、またはパーソナルコンピュータ、サーバー、または他のコンピュータシステムなどのコンピュータシステム上で動作する他のタイプのプロセッサ上で実行され、そのようなコンピュータシステムを特別にプログラムされたマシンに変える。
【0085】
本明細書に記載の例は、他の概念、アイデア、またはシステムとは無関係に、記載される個々の要素および概念に拡張すること、ならびに例は本出願のどこかに記載される要素の組み合わせを含むことが企図されている。本明細書では、添付の図面を参照して例を詳細に説明しているが、概念はそれらの正確な例に限定されないことを理解されたい。このように、多くの修正および変形は、この技術に熟練した当業者には明らかであろう。したがって、概念の範囲は、以下の特許請求の範囲およびそれらの同等物によって定義されることが意図されている。さらに、個別にまたは例の一部として記載された特定の特徴は、他の特徴および例が特定の特徴について言及していなくても、他の個別に記載された特徴または他の例の一部と組み合わせることができると考えられる。したがって、組み合わせを説明しなくても、そのような組み合わせに対する権利を主張することを妨げるものではない。
【0086】
実行可能な命令と機械格納媒体
様々なメモリ(すなわち、720、730、および/またはプロセッサユニット710のメモリ)および/または記憶装置740は、本明細書に記載した1つまたは複数の方法または関数を実施または利用する1つまたは複数の命令およびデータ構造(例えば、命令)724のセットを記憶することができる。これらの命令は、プロセッサユニット710によって実行されると、開示された例を実装するために様々な動作が行われる。
【0087】
本明細書で使用される場合、「機械記憶媒体」、「装置記憶媒体」、「コンピュータ記憶媒体」(総称して「機械記憶媒体」と呼ばれる)という用語は同じことを意味し、交換可能に使用され得る。これらの用語は、実行可能な命令および/またはデータを格納する単一または複数の格納装置および/または媒体(例えば、集中型または分散型データベース、および/または関連するキャッシュおよびサーバー)、ならびに複数の格納装置またはデバイスを含むネットワーククラウドベースの格納システムまたはストレージを指す。したがって、これらの用語は、プロセッサの内部または外部のメモリを含み、ソリッドステートメモリ、および光および磁気媒体を含むがこれらに限定されるものではないと解釈される。機械記憶媒体、コンピュータ記憶媒体、および/または装置記憶媒体740の特定の例には、例えば、電気的に消去可能な消去可能プログラマブル読み取り専用メモリ(EPROM)、プログラム可能な読み取り専用メモリ(EEPROM)、FPGAおよびフラッシュメモリデバイス等の半導体メモリデバイス、内蔵ハードディスクやリムーバブルディスクなどの磁気ディスク、光磁気ディスク、およびCD-ROMおよびDVD-ROMディスクを含む不揮発性メモリを含む。機械記憶媒体、コンピュータ記憶媒体、および装置記憶媒体という用語は、特に、搬送波、変調されたデータ信号、および他のそのような媒体を除外し、それらの少なくとも一部は、以下で説明する「信号媒体」という用語でカバーされる。
【0088】
信号媒体
「信号媒体」または「伝送媒体」という用語は、任意の形式の変調データ信号、搬送波などを含むと解釈されるものとする。「変調データ信号」という用語は、信号内の情報を符号化する方法で、その特性の1つまたは複数が設定または変更されている信号を意味する。
【0089】
コンピュータ可読媒体
「機械可読媒体」という用語は、1つまたは複数の機械によって実行するための命令を格納、符号化、または運ぶことができ、1つまたは複数の機械に本開示の1つまたは複数の手法を実行させ、またはそのような命令によって使用される、またはそのような命令に関連するデータ構造を格納、符号化、または運ぶことができる任意の媒体である。非限定的な機械可読媒体の例には、ソリッドステートメモリ、ならびに光学および磁気媒体が含まれ得る。機械可読媒体の特定の例には、半導体メモリデバイス(例えば、電気的にプログラム可能な読み取り専用メモリ(EPROM)、電気的に消去可能なプログラム可能な読み取り専用メモリ(EEPROM))およびフラッシュメモリデバイス)、内蔵ハードディスクやリムーバブルディスクなどの磁気ディスク、光磁気ディスク、ランダムアクセスメモリ(RAM)、およびCD-ROMおよびDVD-ROMディスクなどの不揮発性メモリを含む。いくつかの例では、機械可読媒体は、非一時的な機械可読媒体を含み得る。本明細書で使用される場合、「機械可読媒体」は、一時的な伝播信号を除外する。
【0090】
命令はさらに、いくつかの転送プロトコル(例えば、フレームリレー、インターネットプロトコル(IP)、伝送制御プロトコル(TCP)、ユーザデータグラムプロトコル(UDP)、ハイパーテキスト転送プロトコル(HTTP)など)のいずれか1つを利用するネットワークインターフェースデバイスを介して伝送媒体を使用して通信ネットワークを介して送信または受信され得る。通信ネットワークの例には、ローカルエリアネットワーク(LAN)、ワイドエリアネットワーク(WAN)、パケットデータネットワーク(インターネットなど)、携帯電話ネットワーク(セルラーネットワークなど)、プレーンオールドテレフォン(POTS)ネットワーク,ワイヤレスデータネットワーク(例:Institute of Electrical and Electronics Engineers(IEEE)802.11ファミリのWi-Fi(r)、IEEE 802.16ファミリの標準、WiMax(r))、IEEE 802.15.4ファミリの標準、ロング・ターム・エヴォリューション(LTE)標準ファミリ、ユニバーサル移動体通信システム(UMTS)標準ファミリ、ピアツーピア(P2P)ネットワークなどを含む。
【0091】
一例では、ネットワークインターフェースデバイスは、通信ネットワークに接続するための1つまたは複数の物理的ジャック(例えば、イーサネット、同軸、または電話ジャック)または1つまたは複数のアンテナを含み得る。一例では、ネットワークインターフェースデバイスは、単一入力多出力(SIMO)、多入力多出力(MIMO)、または多入力単一出力(MISO)技術の少なくとも1つを使用して無線通信するための1つまたは複数のアンテナを含む。いくつかの例では、ネットワークインターフェースデバイスは、マルチユーザMIMO技術を使用して無線通信する。「伝送媒体」という用語は、機械による実行のための命令を格納、符号化、または運ぶことができる任意の無形媒体を含むと解釈され、そのようなソフトウェアの通信を容易にするためのデジタルまたはアナログ通信信号または他の無形媒体を含む。
【0092】
特定の実施形態は、本明細書では、実施例1、2、3などと番号を付して説明されている。これらの番号付きの実施例は、例としてのみ提供され、主題の技術を限定するものではない。
【0093】
実施例1は、ブロックチェーン上にスマートコントラクトを実装するためのシステムであり、命令を格納するためのメモリと、前記メモリに格納された命令を使用して操作を実行する1つまたは複数のプロセッサとを含むものであり、前記操作は、前記スマートコントラクトを更新可能なスマートコントラクトと更新不可能なスマートコントラクトに分離する工程であって、前記更新不可能なスマートコントラクトが、永続的にアクセス可能の必要があるデータのブロックチェーンへの永続的なデータ格納と取得を処理し、前記更新可能なスマートコントラクトにはブロックチェーンへのデータの格納と取得を含まない、分離する工程と、前記更新不可能なスマートコントラクトと前記更新可能なスマートコントラクトの最初のバージョンを展開する工程と、前記更新不可能なスマートコントラクトに、前記更新可能なスマートコントラクトの第1バージョンのアドレスを提供する工程と、前記更新不可能なスマートコントラクトが前記更新可能なスマートコントラクトの第一バージョンのアドレスを前記ブロックチェーンに格納する工程と、前記ブロックチェーンから永続的なデータを取得し、前記永続的なデータを前記更新可能なスマートコントラクトの第一バージョンに渡す工程と、前記更新不可能なスマートコントラクトが前記永続的なデータに対して計算を実行し、前記永続的なデータの計算に基づいて更新されたデータを前記更新不可能なスマートコントラクトに返す工程と、前記更新可能なスマートコントラクトが前記更新されたデータを前記ブロックチェーンに格納する工程の操作を含むものである。
【0094】
実施例2は、実施例1と同様のシステムであり、前記更新可能なスマートコントラクトと前記更新不可能なスマートコントラクトを接続する固定インターフェースをさらに有し、前記更新可能なスマートコントラクトの前記第1バージョンのアドレスが前記更新不可能なスマートコントラクトに前記固定インターフェースを介して提供され、前記更新不可能なスマートコントラクトは前記永続的なデータを前記固定インターフェースを介して前記更新可能なスマートコントラクトの前記第1バージョンに渡し、前記更新可能なスマートコントラクトは前記永続的なデータの計算に基づいて更新されたデータを前記固定インターフェースを介した前記更新不可能なスマートコントラクトに返すものである。
【0095】
実施例3は、前述の任意の実施例と同様のシステムであり、前記メモリは、前記更新可能なスマートコントラクトの第1バージョンのアドレスにより前記更新不可能なスマートコントラクトのインターフェースを呼び出すことによって、前記更新可能なスマートコントラクトの第1バージョンのアドレスを前記更新不可能なスマートコントラクトに提供することを含む操作を実行するためのさらなる命令を格納する。
【0096】
実施例4は、前述の実施例と同様のシステムであり、前記メモリは、前記更新可能なスマートコントラクトの第2のバージョンを展開する工程と、前記更新可能なスマートコントラクトの第2のバージョンのアドレスを使用して、前記更新不可能なスマートコントラクトのインターフェースを呼び出す工程と、前記更新不可能なスマートコントラクトが前記更新可能なスマートコントラクトの第2のバージョンのアドレスを前記ブロックチェーンに格納する工程と、前記ブロックチェーンから前記更新可能なスマートコントラクトの第2のバージョンのアドレスを取得し、前記取得したアドレスで前記更新可能なスマートコントラクトの第2のバージョンを呼び出すことにより、前記更新可能なスマートコントラクトの第2のバージョンを呼び出す工程を含むさらなる処理を実行するためのさらなる命令を記憶するものである。
【0097】
実施例5は、前述の実施例と同様のシステムであり、前記分離する工程は、前記スマートコントラクトを前記更新不可能なスマートコントラクトと複数の更新可能なスマートコントラクトに分離する工程を含み、前記展開する工程は、各更新可能なスマートコントラクトの第1および第2のバージョンを展開する工程を含み、前記呼び出す工程は、各更新可能なスマートコントラクトのそれぞれのバージョンのアドレスを使用してそれぞれのインターフェースを呼び出す工程を含み、前記格納する工程は、前記各更新可能なスマートコントラクトの前記それぞれのバージョンのアドレスを前記ブロックチェーンに格納する工程を含み、前記呼び出す工程は、前記ブロックチェーンから前記更新可能なスマートコントラクトの第2のバージョンのアドレスを取得し、前記取得したアドレスで前記更新可能なスマートコントラクトの第2のバージョンを呼び出す工程を有するものである。
【0098】
実施例6は、前述の実施例と同様のシステムであり、前記分離する工程は、前記スマートコントラクトを前記更新不可能なスマートコントラクトと複数の更新可能なスマートコントラクトに分離する工程を有し、前記展開する工程は、各更新可能なスマートコントラクトの第1および第2のバージョンを展開する工程を有し、前記呼び出す工程は、前記各更新可能なスマートコントラクトに関連付けられた識別子と前記それぞれのアドレスを使用して前記インターフェースを呼び出す工程を有し、前記格納するは、前記各更新可能なスマートコントラクトの前記それぞれのバージョンの識別子とアドレスを前記ブロックチェーンに格納する工程を有し、前記呼び出す工程は、前記ブロックチェーンからの前記更新可能なスマートコントラクトの第2バージョンの識別子とアドレスを取得する工程と、前記取得されたアドレスで前記識別子によって識別される前記更新可能なスマートコントラクトの第2バージョンの呼び出す工程とを有する。
【0099】
実施例7は、前述の任意の実施例と同様のシステムであり、前記更新可能なスマートコントラクトは自己登録型であり、前記呼び出す工程は、前記自己登録型の更新可能なスマートコントラクトが、前記自己登録型の更新可能なスマートコントラクトのぞれぞれのバージョンのアドレスで前記更新不可能なスマートコントラクトのインターフェースを呼び出す工程とを有する。
【0100】
実施例8は、前述の実施例と同様のシステムであり、前記分離する工程は、前記スマートコントラクトを前記更新不可能なスマートコントラクトと複数の更新可能なスマートコントラクトに分離する工程を含み、前記展開する工程は、各更新可能なスマートコントラクトの第1および第2のバージョンを展開する工程を含み、前記更新可能なスマートコントラクトは自己登録型であり、前記呼び出す工程は、前記自己登録型の更新可能スマートコントラクトがそれぞれの自己登録型の更新可能なスマートコントラクトのそれぞれのバージョンのアドレスを使用して前記更新不可能なスマートコントラクトのインターフェースを呼び出す工程を有し、前記格納する工程は、各更新可能なスマートコントラクトのそれぞれのバージョンのアドレスを前記ブロックチェーンへ格納する工程を有し、前記呼び出す工程は、前記ブロックチェーンから更新可能なスマートコントラクトの第2のバージョンのアドレスを取得し、取得されたアドレスで前記更新可能なスマートコントラクトの第2のバージョンを呼び出す工程を有するものである。
【0101】
実施例9は、前述の実施例と同様のシステムであり、前記メモリは、前記更新不可能なスマートコントラクトがブロックチェーンから永続的なデータを取得し、前記永続的なデータを前記更新可能スマートコントラクトに渡す工程と、前記更新可能なスマートコントラクトが前記永続的なデータの計算に基づいて計算し、データをブロックチェーンへの永続的な格納のために前記更新不可能なスマートコントラクトに返す工程を含む操作を実行するための命令をさらに格納する。
【0102】
実施例10は、前述の例と同様のシステムであり、前記メモリは、前記スマートコントラクトを複数の更新不可能なスマートコントラクトに分離することを含む操作を実行するためのさらなる命令を格納する。
【0103】
実施例11は、前述の任意の実施例と同様のシステムであり、前記メモリは、前記第1のバージョンを展開する前に、前記更新不可能なスマートコントラクトのアドレスを前記更新可能なスマートコントラクトの第1のバージョンにハードコーディングする工程と、前記更新可能なスマートコントラクトの第2のバージョンを展開する工程と、前記更新可能なスマートコントラクトの第2のバージョンを呼び出す工程と、前記更新可能なスマートコントラクトの第2のバージョンが、前記ハードコードされたアドレスで前記更新不可能なスマートコントラクトを呼び出す工程と、前記更新不可能なスマートコントラクトが任意の永続的なデータを前記ブロックチェーンに格納する工程を実行するための命令をさらに格納する。
【0104】
実施例12は、前の実施例に記載の工程を実行する1つまたは複数のプロセッサの方法である。
【0105】
実施例13は、実施例1~11のいずれかに従ってブロックチェーン上に実装されたスマートコントラクトを更新するためのコンピュータ命令を格納する非一時的なコンピュータ可読媒体である。
【0106】
本明細書に記載される実施例は、論理またはいくつかの構成要素、モジュール、またはメカニズムを含み、またはこれらで動作可能である。モジュールは、特定の操作を実行できる有形のエンティティ(ハードウェアなど)であり、特定の方法で構成または配置できる。一例では、回路は、モジュールとして特定の方法で(例えば、内部に、または他の回路などの外部エンティティに関して)配置され得る。
【0107】
一例では、1つまたは複数のコンピュータシステム(例えば、スタンドアロン、クライアントまたはサーバーコンピュータシステム)、または1つまたは複数のハードウェアプロセッサの全体または一部は、ファームウェアまたはソフトウェア(例えば、命令、アプリケーションの一部、または1アプリケーション)によって、特定の操作を実行するために動作するモジュールとして設定可能である。一例では、ソフトウェアは、機械可読媒体上に存在し得る。一例では、ソフトウェアは、モジュールの基礎となるハードウェアによって実行されると、ハードウェアに指定された操作を実行させる。
【0108】
したがって、「モジュール」という用語は、特定の方法で動作する、または本明細書に記載されている動作の一部または全部を実行する、物理的に構築された、特別に構成された(例えば、ハードワイヤード)、または一時的に(例えば、一時的に)構成された(例えば、プログラムされた)エンティティである、有形のエンティティを包含すると理解される。モジュールが一時的に構成されている例を考えると、各モジュールを一度にインスタンス化する必要はない。例えば、モジュールがソフトウェアを使用して構成された汎用ハードウェアプロセッサを含む場合、汎用ハードウェアプロセッサは、異なる時にそれぞれの異なるモジュールとして構成され得る。したがって、ソフトウェアは、例えば、ある時点で特定のモジュールを構成し、異なる時点で別のモジュールを構成するように、ハードウェアプロセッサを構成することができる。
【0109】
いくつかの実施形態は、ソフトウェアおよび/またはファームウェアで完全にまたは部分的に実装され得る。このソフトウェアおよび/またはファームウェアは、非一時的なコンピュータ可読記憶媒体に含まれる命令の形を取ることができる。これらの命令は、本明細書で説明される操作の実行を可能にするために、1つまたは複数のプロセッサによって読み取られ、実行される。命令は、ソースコード、コンパイルされたコード、解釈されたコード、実行可能コード、静的コード、動的コードなどであるがこれらに限定されない任意の適切な形式であり得る。そのようなコンピュータ可読媒体は、読み取り専用メモリ(ROM)、ランダムアクセスメモリ(RAM)、磁気ディスク記憶媒体、光記憶媒体、フラッシュメモリなどであるがこれに限定されない、1つまたは複数のコンピュータによって可読可能な形式で情報を格納するための任意の有形の非一時的媒体を含み得る。
【0110】
本明細書全体を通して、複数の場合は、単一の場合として記述された構成要素、操作、または構造で実装できる。1つまたは複数の方法の個々の操作は、別個の操作として図示および説明されているが、1つまたは複数の個々の操作は同時に実行することができ、操作を図示の順序で実行する必要はない。例示的な構成において別個の構成要素として提示される構造および機能は、組み合わされた構造または構成要素として実施可能である。同様に、単一の構成要素として提示される構造および機能は、別個の構成要素として実装することができる。 これらおよび他の変形、修正、追加、および改善は、本明細書の主題の範囲内にある。
【0111】
本明細書では、様々な構成要素が特定の方法で構成されるものとして記載されている。構成要素は、任意の適切な方法で構成することができる。例えば、コンピューティングデバイスは、またはコンピューティングデバイスを含む構成要素は、コンピューティングデバイスをプログラムする適切なソフトウェア命令と一緒に構成できる。構成要素は、そのハードウェア配置によって、または他の適切な方法で構成することもできる。
【0112】
上記の説明は、例示を意図するものであり、限定的なものではない。例えば、上記の例(またはその1つまたは複数の態様)は、他の例と組み合わせて使用することができる。当業者が上記の説明を吟味する場合等で他の例を使用することができる。要約は、例えばアメリカ合衆国法37C.F.R.§1.72(b)に準拠し、読者が技術的開示の特徴を迅速に確認できるようにしている。請求の範囲または意味を解釈または制限するために使用されるものではないとの理解で提出されたものである。
【0113】
また、上記の詳細な説明では、さまざまな特徴を組み合わせて、開示を簡素化することができる。しかしながら、実施例はそのような特徴のサブセットを特徴とすることができるが、特許請求の範囲は、本明細書に開示されるすべての特徴を説明することはできない。さらに、実施例には、特定の実施例で開示されているものよりも少ない特徴を含めることができる。したがって、以下の特許請求の範囲は、詳細な説明に組み込まれ、各請求項は、それ自体が別個の実施例として成り立つ。本明細書に開示される実施例の範囲は、添付の特許請求の範囲を参照して決定され、そのような請求項に対して権利を受けられる同等物の全範囲を伴うものである。
【0114】
当業者であれば、特許請求の範囲が、特定の実施形態、ならびに本明細書に具体的に記載されていないが、本明細書に記載されたものと同等の構成要素および工程、ならびに当業者に明らかである他の特徴および変形を含み得る実施形態を包含することが理解される。