(57)【特許請求の範囲】
【請求項１】
ユーザが使用する第１装置から、ブロックチェーンシステムにおけるアカウントデータを記憶する第２装置が、前記ブロックチェーンシステムにおける前記ユーザの所望のトランザクションの実行を委任する委任データを、前記ブロックチェーンシステム外の通信によって受信し、
前記第１装置から送信された委任データに基づき、前記所望のトランザクションを、前記ブロックチェーンシステムにおける前記ユーザのアカウントから実行する実行スマートコントラクトに実行させる委任トランザクションを作成し、
前記アカウントデータに基づき、トランザクションの実行に要する手数料トークン又はユーティリティトークンの支払いを伴う前記委任トランザクションを、前記ブロックチェーンシステムへブロードキャストする
トランザクション委任方法。
【請求項２】
前記ユーザの第１装置は、ブロックチェーンシステムにおけるトランザクションの要求に要する手数料トークン又はユーティリティトークンが対応付けられていないアカウントデータを有する請求項１に記載のトランザクション委任方法。
【請求項３】
前記委任データは、前記所望のトランザクションの対象となる対象コントラクトの前記ブロックチェーンシステムにおけるアドレスと、該対象コントラクトにおける対象関数の識別データと、前記対象関数へ渡す引数データとを含む
請求項１又は２に記載のトランザクション委任方法。
【請求項４】
前記委任トランザクションは、前記対象コントラクトのアドレス、前記識別データ、及び前記引数データを含むユーザ所望のトランザクションを、入れ子構造に含み、
前記ユーザ所望のトランザクションの実行者となる前記実行スマートコントラクトのアドレス、又は該アドレスを決定するためのデータを含む
請求項３に記載のトランザクション委任方法。
【請求項５】
前記委任トランザクションは、該委任トランザクションがブロックチェーンとして記憶された場合に特定の呼び出しスマートコントラクトを呼び出す関数を含み、
前記呼び出しスマートコントラクトは、前記委任トランザクションに基づいて前記実行スマートコントラクトへ前記所望のトランザクションの実行を指示する
請求項１から請求項４のいずれか１項に記載のトランザクション委任方法。
【請求項６】
前記委任トランザクションは、前記第２装置への委任手数料の条件を含み、
前記呼び出しスマートコントラクトは、前記委任トランザクションに基づいて委任手数料を決定し、
前記ユーザのアカウントから中継者への支払いを実行する委任手数料スマートコントラクトへ、決定した委任手数料を支払うためのトランザクションを要求する
請求項５に記載のトランザクション委任方法。
【請求項７】
前記委任手数料は、前記手数料トークン又はユーティリティトークンと異なる
請求項６に記載のトランザクション委任方法。
【請求項８】
前記呼び出しスマートコントラクトは、予め記憶してあるアカウントリストのアカウントデータを有する第２装置からの委任トランザクションのみに基づく呼び出しを許可する
請求項５から請求項７のいずれか１項に記載のトランザクション委任方法。
【請求項９】
前記委任トランザクションは、該委任トランザクションがブロックチェーンとして記憶された場合に前記実行スマートコントラクトを呼び出す関数を含み、
前記実行スマートコントラクトは、呼び出された場合に前記関数の呼び出しと共に入力される前記所望のトランザクションを実行する
請求項１から請求項４のいずれか１項に記載のトランザクション委任方法。
【請求項１０】
前記委任トランザクションは、前記第２装置への委任手数料の条件を含み、
前記実行スマートコントラクトは、前記委任トランザクションに基づいて委任手数料を決定し、
前記ユーザのアカウントから中継者への支払いを実行する委任手数料スマートコントラクトへ、決定した委任手数料を支払うためのトランザクションを要求する
請求項９に記載のトランザクション委任方法。
【請求項１１】
前記委任手数料は、前記手数料トークン又はユーティリティトークンと異なる
請求項１０に記載のトランザクション委任方法。
【請求項１２】
前記実行スマートコントラクトは、予め記憶してあるアカウントリストのアカウントデータを有する第２装置からの委任トランザクションのみに基づく呼び出しを許可する
請求項９から請求項１１のいずれか１項に記載のトランザクション委任方法。
【請求項１３】
ユーザに使用される第１装置と、ブロックチェーンシステムにおけるアカウントデータを有する第２装置とを含み、
前記第１装置は、前記ブロックチェーンシステムにおける前記ユーザの所望のトランザクションの実行を委任する委任データを、前記ブロックチェーンシステム外の通信によって送信し、
前記第２装置は、前記第１装置から送信された委任データに基づき、前記所望のトランザクションを、前記ブロックチェーンシステムにおける前記ユーザのアカウントから実行する実行スマートコントラクトに実行させる委任トランザクションを作成し、
前記第１装置が、前記アカウントデータに基づき、トランザクションの実行に要する手数料トークン又はユーティリティトークンの支払いを伴う前記委任トランザクションを、前記ブロックチェーンシステムへブロードキャストする
トランザクション委任システム。
【請求項１４】
表示部及び操作部を備えるコンピュータに、ブロックチェーンシステムにおける所望のトランザクションの内容の初期値を表示する処理、
表示された初期値からの編集を受け付ける処理、
編集された場合に前記トランザクションの内容を含み、前記所望のトランザクションの実行を委任する委任データを作成する処理、及び
作成した委任データを前記ブロックチェーンシステム外の通信によって送信する処理
を実行させるコンピュータプログラム。
【請求項１５】
前記所望のトランザクションの委任の委任手数料の条件を受け付ける処理、及び、
前記所望のトランザクションの内容及び前記委任手数料の条件を含む前記委任データを作成する処理
を実行させる請求項１４に記載のコンピュータプログラム。
【請求項１６】
ブロックチェーンシステムにおけるアカウントデータを記憶したコンピュータに、ユーザの所望のトランザクションの内容を含む委任データを受信する処理、
受信した委任データに基づき、前記所望のトランザクションを、前記ブロックチェーンシステムにおける前記ユーザのアカウントから実行する実行スマートコントラクトに実行させる委任トランザクションを作成する処理、
前記アカウントデータに基づき、トランザクションの実行に要する手数料トークン又はユーティリティトークンの支払いを伴う前記委任トランザクションを、前記ブロックチェーンシステムへブロードキャストする処理
を実行させるコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本出願は、２０１９年１２月２６日に出願された米国仮特許出願６２／９５３７３４号の優先権の利益を主張し、参照によってその全体が組み込まれる。【０００２】
本発明は、ブロックチェーンにおけるトランザクション委任方法、トランザクション委任システム、及びコンピュータプログラムに関する。
【背景技術】
【０００３】
ブロックチェーンを利用したシステムでは、ユーザがブロックチェーンシステムを構成するノード又はスマートコントラクトへトランザクションを要求する場合、手数料トークン（以下、fee tokenともいう）による手数料を、トランザクションの対価として支払うことが必要である（特許文献１等）。【０００４】
ブロックチェーンシステムで要求されるトランザクションは、アセット（暗号資産等）の移動を目的としたもののみならず、スマートコントラクトが実行するデータ保存又は演算を含む。【０００５】
ブロックチェーンを利用したシステムでは、上述したような手数料トークン以外にも、システムの利用に際してユーティリティトークン（以下、utility tokenともいう）の支払いを要求するスマートコントラクトが存在する。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０２０−０８００６１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
ブロックチェーン技術をベースとしたサービスの利用には、ユーザにとっては煩雑な手数料トークン及びユーティリティトークン等の管理が必要であり、ブロックチェーンシステムの広範囲への普及は爆発的とはなりにくい。【０００８】
本発明は、斯かる事情を鑑みてなされたものであり、ブロックチェーンシステムの普及を支援するトランザクション委任方法、トランザクション委任システム及びコンピュータプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００９】
本開示の一実施形態のトランザクション委任方法は、ユーザが使用する第１装置から、ブロックチェーンシステムにおけるアカウントデータを記憶する第２装置が、前記ブロックチェーンシステムにおける前記ユーザの所望のトランザクションの実行を委任する委任データを、前記ブロックチェーンシステム外の通信によって受信し、前記第１装置から送信された委任データに基づき、前記所望のトランザクションを、前記ブロックチェーンシステムにおける前記ユーザのアカウントから実行する実行スマートコントラクトに実行させる委任トランザクションを作成し、前記アカウントデータに基づき、トランザクションの実行に要する手数料トークン又はユーティリティトークンの支払いを伴う前記委任トランザクションを、前記ブロックチェーンシステムへブロードキャストする。
【発明の効果】
【００１０】
本開示によれば、サービスの提供を受けるユーザは、サービスのベースとなっているブロックチェーンシステムにおけるアカウント、及び、ブロックチェーンシステムで流通するトークンの運用を意識することなくサービスを享受することができる。
【図面の簡単な説明】
【００１１】
【図１】本開示のシステムの概要図である。
【図２】本開示のシステムにおけるトランザクションの委任処理手順の概要図である。
【図３】第１装置１の構成を示すブロック図である。
【図４】中継者の第２装置２の構成を示すブロック図である。
【図５】ブロックチェーンシステムにおけるノードの構成を示すブロック図である。
【図６】システムにおける処理の概要図である。
【図７】委任トランザクション作成処理手順の一例を示すシーケンス図である。
【図８】トランザクションの委任実行処理手順の一例を示すシーケンス図である。
【図９】実施例１におけるトランザクションの委任処理の一例を示すシーケンス図である。
【図１０】実施例３におけるトランザクションの委任処理の一例を示すシーケンス図である。
【図１１】実施例４におけるトランザクションの委任処理の一例を示すシーケンス図である。
【図１２】実施例５におけるトランザクションの委任処理の一例を示すシーケンス図である。
【図１３】実施例６におけるトランザクションの委任処理の一例を示すシーケンス図である。
【発明を実施するための形態】
【００１２】
本開示をその実施の形態を示す図面を参照して具体的に説明する。
【００１３】
本開示において「ブロックチェーンシステム」は、相互に通信接続が可能な複数のコンピュータ及び複数のコンピュータを接続するネットワークを含み、前記複数のコンピュータの分散処理によってブロックチェーンを作成するシステムを言う。ブロックチェーンには、要求されるトランザクションの内容が取り込まれる。
【００１４】
ブロックチェーンを利用したシステムでは、ユーザの第１装置が、ブロックチェーンシステムへトランザクションを要求する場合、そのブロックチェーン技術に応じた特定のトークン（fee token）による手数料を、対価として支払うことが必要である。
【００１５】
例えば、Bitcoin（登録商標）ベースのブロックチェーンシステムでユーザがアセットの移動（売買の登録）処理を要求する場合、トランザクションの入力と出力との間に差額が設けられ、その差額分のBTC単位の手数料がマイナーに対し支払われる。Ethereum（登録商標）ベースのブロックチェーンシステムでは、トランザクションの実行の際、指定されたガス費用にしたがって、トランザクションのブロックチェーンへの取り込みに要したガス量に相当するETH単位の手数料がマイナーに対して支払われる。BitcoinでもEthereumでも、手数料が少なく設定してあるトランザクションは、ブロックチェーンに取り込まれにくい。
【００１６】
EOSベースのブロックチェーンシステムでは、トランザクションの要求主体が、トランザクションに要するストレージ容量と、演算（コンピューティング）リソースとを事前に確保しておく必要がある。具体的には、トランザクションを要求するユーザが、使用する装置を介し、ブロックチェーンシステムにおけるストレージ容量をEOSトークンで購入しておき、処理を実行するブロックチェーンアカウントに対してEOSトークンをステーク（預ける）しておくことが必要である。
【００１７】
ブロックチェーンを利用したシステムを継続稼働するにあたり、このような手数料の支払いを求める仕組みは、インセンティブデザインやＤＯＳ攻撃耐性の向上の観点で重要である。ユーザは、サービスを利用するために、ブロックチェーンシステムのアカウントによって取引所を介して必要なトークン（手数料トークン又はユーティリティトークン）を購入し、送付するといったトークン管理を行なう必要がある。サービスによっては、特別なトークンを発行して配布するようなこともあるが、これらの特別なトークンがあっても、手数料トークン又はユーティリティトークンと取引することが必要な場合もある。これらの多様なトークンの管理は、専門性の高い知識を要求し、一般ユーザにはハードルが高い。ブロックチェーン技術に馴染みがないユーザがブロックチェーンを利用したサービスを利用しない状況は、ブロックチェーンのマスアダプションに対する大きな課題である。
【００１８】
本開示のトランザクション委任方法は、ユーザが使用する第１装置から、ブロックチェーンシステムにおけるアカウントデータを記憶する第２装置が、前記ブロックチェーンシステムにおける前記ユーザの所望のトランザクションの実行を委任する委任データを、前記ブロックチェーンシステム外の通信によって受信し、前記第１装置から送信された委任データに基づき、前記所望のトランザクションを、前記ブロックチェーンシステムにおける前記ユーザのアカウントから実行する実行スマートコントラクトに実行させる委任トランザクションを作成し、前記アカウントデータに基づき、トランザクションの実行に要する手数料トークン又はユーティリティトークンの支払いを伴う前記委任トランザクションを、前記ブロックチェーンシステムへブロードキャストする。
【００１９】
本開示のトランザクション委任方法では、実際にサービスの提供を受けるユーザが使用する装置（第１装置）が、サービスを実現するブロックチェーンシステムにおける手数料トークン又はユーティリティトークンを所有する中継者（relayer）の装置（第２装置）へ、ユーザが実行することを希望するトランザクション（user transaction、以下user txともいう）を委任すること、即ちトランザクション委任（tx delegation）が可能である。
【００２０】
これにより、ユーザが実行を希望するトランザクション（user tx）に対し必要な手数料トークン又はユーティリティトークンを管理する権限（アカウント）を有さない場合であっても、トランザクションの実行結果を得ることができる。ユーザは、サービスのベースとなっているブロックチェーンにおける手数料トークン若しくはユーティリティトークンの運用を意識する必要がない。権限を有している任意のトークンを委任手数料トークン（delegation fee token）として使用するか、又は委任手数料の支払いが不要である。
【００２１】
トランザクション委任（tx delegation）は、ブロックチェーン外で実行され、形式は問われない。しかしながら、ユーザから中継者への委任には、ユーザが実行を希望するトランザクション（user tx）を、委任される中継者が実行するために十分なデータが含まれることが必要である。
【００２２】
トランザクションの委任には、入れ子構造を有する特殊トランザクション（nested tx）を採用してもよい。第１装置から第２装置へ送信される特殊トランザクションは、ユーザが実行を希望するトランザクション（user tx）を内部に含む意味で入れ子構造の構成を有する。特殊トランザクションは、ユーザが実行を希望するトランザクション（user tx）を決定するために必要なデータ及び、トランザクションの実行主体となるブロックチェーンアカウント（以下、executer accountともいう）とを含む。特殊トランザクションは、複数のトランザクション（user tx）を含んでもよい。この場合、特殊トランザクションは、トランザクション（user tx）毎に、必要なデータ及びブロックチェーンアカウントのデータを含む。
【００２３】
ユーザの第１装置から中継者の第２装置へ送信される特殊トランザクションは、委任条件（delegation condition、以下condともいう）と、署名（signature、以下sigともいう）とを含んでもよい。
【００２４】
中継者の第２装置は、ユーザからのトランザクション委任に基づいて、ユーザが実行を希望するトランザクション（user tx）を入れ子構造で含む特殊トランザクションの形式で、委任のトランザクション（以下、委任トランザクション（delegation tx）という）を作成する。委任トランザクションは、ユーザから実行を希望されるトランザクション（user tx）、委任条件（cond）、及び署名（sig）を含んでよい。
【００２５】
中継者の第２装置は、中継ユーザが権限を有するアカウント（Relayer Account）に基づいて委任トランザクションをブロックチェーンシステムへ要求する。委任トランザクションは、ブロックチェーンシステムに所属するスマートコントラクトであるアカウント呼び出しコントラクト（Account Caller Contract）に対して実行される。中継者の第２装置は、後述するように、委任トランザクションの実行をアカウント呼び出しコントラクトのみならず、トランザクションの実行主体となるブロックチェーンアカウントの実行者アカウントコントラクト（Executor Account Contract）へ直接的に要求してもよい。このときのブロックチェーンシステムへのトランザクションの実行要求に必要な手数料トークン又はユーティリティトークンのステーク等は、中継者のアカウントから実行される。
【００２６】
アカウント呼び出しコントラクトは、委任トランザクション（delegation tx）に基づき、ユーザのアカウントとして動作する実行者アカウントコントラクトに対してトランザクション（user tx）の実行をリクエストする。実行者アカウントコントラクトは、リクエストされたトランザクション（user tx）を実行すると共に、委任手数料トークンのユーザから中継者への支払いを実行する。
【００２７】
これにより、サービスの提供を受けるユーザは、サービスのベースとなっているブロックチェーンシステムにおける多様なトークンの運用を意識することなくサービスを享受することができる。
【００２８】
図１は、本開示のシステム１００の概要図である。システムは、ブロックチェーンシステム３００外のユーザ（user）の第１装置１と、第１装置１からアクセスが可能な、中継者が管理する第２装置２とを含む。システム１００は、ブロックチェーンシステム３００内に、アカウント呼び出しコントラクト（Account Caller Contract）３０１、及び、実行者アカウントコントラクト（Executor Account Contract）３０２のインスタンスを含む。本開示において「ブロックチェーンシステム」は、相互に通信接続が可能な複数のコンピュータ及び複数のコンピュータを接続するネットワークを含み、前記複数のコンピュータの分散処理によってブロックチェーンを作成するシステムを言う。
【００２９】
本開示のシステム１００では、ユーザの第１装置１は、ブロックチェーンシステム３００に対応する秘密鍵を記憶しているが、ブロックチェーンシステム３００の手数料トークン又はユーティリティトークンが対応付けられたアカウントを記憶していなくてよい。ただし、第１装置１は、ブロックチェーンをベースとしたサービスの提供を受けるため、ブロックチェーンシステム３００における処理の結果を取得することができる。例えば第１装置１は、ブロックチェーンシステム３００から、処理結果をＷｅｂベースで取得できる。また第１装置１は、第２装置２との間でデータの送受信が可能である。
【００３０】
第２装置２は、ブロックチェーンシステム３００における手数料トークン及びユーティリティトークンの移動が可能なアカウント（relayer account）を持つ中継者によって管理される。第２装置２は、ユーザの第１装置１との間でデータの送受信が可能であり、中継者のアカウント（relayer account）に基づきブロックチェーンシステム３００にてトランザクションを実行できる。つまり第２装置２は、手数料トークン又はユーティリティトークンの支払い（ステーク）が可能である。
【００３１】
本開示のシステム１００におけるブロックチェーンシステム３００は、アカウントに対してスマートコントラクトをデプロイ（実行可能な状態とする）できる種類のブロックチェーン技術を用いる。以下の例では、ブロックチェーンシステム３００はEthereumのブロックチェーン技術を用いるとして説明するが、これに限られない。ブロックチェーンシステム３００はEOSベースであってもよい。
【００３２】
ブロックチェーンシステム３００には、アカウント呼び出しコントラクト３０１、実行者アカウントコントラクト３０２のインスタンスが生成される。後述するように（実施例４，６）、これらは同一のインスタンスであってもよい。ブロックチェーンシステム３００は、複数のアプリケーションに対応する多様な複数のコントラクト３０３のインスタンスを含む。またブロックチェーンシステムは、委任手数料トークンを管理する委任手数料トークン管理コントラクト３０４が各々生成されている。
【００３３】
ブロックチェーンシステム３００に存在する多様なアプリケーションに対応するスマートコントラクト３０３の内、ユーザが希望する処理を実行する対象コントラクト（Target Contract）３０３に対し、その処理をリクエストするためには、手数料トークン又はユーティリティトークンを支払うための管理権限を有するアカウントによるトランザクション実行処理が必要である。しかしながら、ブロックチェーンシステム３００における手数料トークン又はユーティリティトークンを含む多様なトークンの取引には、ユーザにブロックチェーン技術に対する知識等が必要である。
【００３４】
本開示のシステム１００では、実際にサービスの提供を受けるユーザの装置（第１装置）１は、サービスを実現するブロックチェーンシステム３００の手数料トークン又はユーティリティトークンを所有し移転できる中継者の装置（第２装置）２へ、ユーザが実行を希望するトランザクション（user tx）を委任する。委任により、ユーザがトークンを管理できなくとも、ブロックチェーンシステム３００におけるトランザクションの実行結果の享受が可能となる。
【００３５】
図２は、本開示のシステム１００におけるトランザクションの委任処理手順の概要図である。
【００３６】
（１）サービスにおける処理を希望するユーザ（第１装置１）は、ブロックチェーンで実行したいトランザクション（user tx）の実行主体となるブロックチェーンアカウント（実行者アカウント：executer account）を特定するデータを決定、又は作成する。
【００３７】
（１）の段階でユーザ（第１装置１）は、ブロックチェーンシステム３００で実行者アカウントコントラクトによって実行されるトランザクション（user tx）を構成するためのデータを決定、又は作成する。
【００３８】
サービスが例えばゲームである場合、ユーザは、ブロックチェーンシステム３００の分散アプリケーションによって実現されるゲームでのアイテムの生成又は譲渡のトランザクションの実行を希望することが考えられる（勿論、サービスはゲームに限られない）。この場合、ユーザが実行を希望するトランザクション（user tx）を実行するためのブロックチェーンアカウント（executer account）は例えば、ユーザのブロックチェーンシステムにおけるアカウントである。また、希望のトランザクション（user tx）が、アイテムの生成又は譲渡である場合、トランザクション（user tx）を構成するためのデータは、アイテムを特定するデータ、譲渡先を特定するデータ等を含むとよい。
【００３９】
（１）の段階でユーザ（第１装置１）は、ユーザのブロックチェーンアカウント（executer account）と、実行を希望するトランザクション（user tx）とをユーザ自身が指定したことを、検証できる方法（例えば電子署名）によってこの検証に必要なデータ（sig）を取得する。
【００４０】
（２）ユーザの第１装置１は、ユーザのブロックチェーンアカウント（executer account）と、実行を希望するトランザクション（user tx）と、検証に必要なデータとを、ブロックチェーンシステム３００外で中継者の第２装置２へ送信する。これにより、中継者にブロックチェーンアカウント（executer account）と、希望するトランザクション（user tx）とが伝わる。
【００４１】
（３）中継者の第２装置２は、ユーザの第１装置１から受信したデータに基づいて、ユーザに対応するブロックチェーンアカウント（executer account）と、希望するトランザクション（user tx）とを埋め込んだ委任トランザクション（delegation tx）を作成する。中継者の第２装置２は、中継者のアカウント、又は、中継者が使用できる他のアカウント（任意のアカウント）の権限によって、委任トランザクションをブロックチェーンシステム３００へブロードキャストする。
【００４２】
（４）ブロードキャストの伝達によって、ブロックチェーンシステム３００内のユーザに対応するブロックチェーンアカウント（executer account）によるユーザが実行を希望するトランザクション（user tx）の実行が実現される。このトランザクション（user tx）の実行に必要な手数料トークン又はユーティリティトークンは、中継者が委任トランザクションをブロードキャストする際に指定したアカウント（中継者のアカウント、又は他のアカウント）から支払われる。
【００４３】
このようにして、実際にサービスの提供を受けるユーザが使用する装置（第１装置）１が、ブロックチェーンシステム３００における手数料トークン又はユーティリティトークンを所有する中継者の装置（第２装置）２へ、ユーザが実行を希望するトランザクション（user tx）を委任する。委任により、ユーザが手数料トークン又はユーティリティトークンを管理する権限を有していなくとも、ブロックチェーンシステム３００におけるトランザクションの実行が可能となる。
【００４４】
これにより、サービスの提供を受けるユーザは、サービスのベースとなっているブロックチェーンシステム３００の手数料トークン又はユーティリティトークンの運用を意識することなく、トランザクションを実行させることができる。
【００４５】
このような処理を実現するためのシステムの具体的な構成について説明する。
【００４６】
図３は、第１装置１の構成を示すブロック図である。第１装置１は、例えばスマートフォン、又はタブレット端末である。第１装置１は、処理部１０、記憶部１１、通信部１２、表示部１３、及び操作部１４を備える。
【００４７】
処理部１０は、ＣＰＵ（Central Processing Unit）、ＧＰＵ（Graphics Processing Unit）等のプロセッサと、メモリ等を用いる。なお処理部１０は、プロセッサ、メモリ、更には記憶部１１及び通信部１２を集積した１つのハードウェア（ＳｏＣ：System On a Chip）として構成されていてもよい。
【００４８】
記憶部１１はフラッシュメモリを用い、第１プログラム１Ｐを始めとする処理部１０が参照するプログラム、データが記憶される。第１プログラム１Ｐは、コンピュータを、本開示のシステム１００の第１装置１として機能させるためのプログラムである。記憶部１１には、図３に示すように、ブロックチェーンシステム３００におけるユーザの秘密鍵を記憶していてもよい。秘密鍵は、処理部１０のメモリ又は記憶部１１に書き換え不可に記憶されているとよい（ウォレットのチップ化）。
【００４９】
記憶部１１に記憶されている第１プログラム１Ｐは、コンピュータから読み取り可能な記憶媒体８に記憶されていた第１プログラム８Ｐを処理部１０が読み出して記憶部１１に記憶したものであってもよい。
【００５０】
通信部１２は、第２装置２及び他の通信装置との通信接続を実現する通信モジュールである。通信部１２は、ネットワークカード、無線通信デバイス又はキャリア通信用モジュールを用いる。
【００５１】
表示部１３は液晶パネル又は有機ＥＬディスプレイ等のディスプレイ装置を用いる。操作部１４は、ユーザの操作を受け付けるインタフェースであり、物理ボタン、ディスプレイ内蔵のタッチパネルデバイス、スピーカ及びマイクロフォン等を用いる。操作部１４は、物理ボタン又はタッチパネルにて表示部１３で表示している画面上で操作を受け付けてもよいし、マイクロフォンにて入力音声から操作内容を認識し、スピーカで出力する音声との対話形式で操作を受け付けてもよい。
【００５２】
図４は、中継者の第２装置２の構成を示すブロック図である。第２装置２も第１装置１同様、スマートフォン又はタブレット端末等の通信端末機器である。第２装置２は、第２コンピュータであってもよいし、デスクトップ型又はラップトップ型パーソナルコンピュータであってもよい。第２装置２は、処理部２０、記憶部２１、及び通信部２２を備える。
【００５３】
処理部２０は、ＣＰＵ、ＧＰＵ等のプロセッサと、メモリ等を用いる。処理部２０は、記憶部２１に記憶されている第２プログラム２Ｐに基づき、第１装置１から送信されたデータを取得し、委任トランザクションの作成、トランザクションの実行を実現する。記憶部２１は、ハードディスク又はフラッシュメモリを用い、第２プログラム２Ｐを始めとする処理部２０が参照するプログラム、データを記憶する。
【００５４】
記憶部２１に記憶されている第２プログラム２Ｐは、コンピュータから読み取り可能な記憶媒体９に記憶されていた第２プログラム９Ｐを処理部１０が読み出して記憶部１１に記憶したものであってもよい。
【００５５】
通信部２２は、第１装置１又はブロックチェーンシステム３００との通信接続を実現する通信モジュールである。通信部２２は、ネットワークカード、無線通信デバイス又はキャリア通信用モジュールを用いる。
【００５６】
図５は、ブロックチェーンシステム３００におけるノード３０の構成を示すブロック図である。ノード３０は、サーバコンピュータであってもよいし、デスクトップ型又はラップトップ型パーソナルコンピュータであってもよいし、スマートフォン等の通信端末機器であってもよい。ノード３０は、処理部３１、記憶部３２及び通信部３３を備える。またノード３０は、少なくとも処理部３１及び通信部３３を備える装置であれば、処理部３１の一部によってノードの一部又は全部を構成することができる。
【００５７】
処理部３１は、ＣＰＵ、ＧＰＵ等のプロセッサと、メモリ等を用いる。処理部３１は、プロセッサ、メモリ、更には記憶部３２及び通信部３３を集積した１つのハードウェアとして構成されていてもよい。処理部３１のメモリには、ノード３夫々独自に所有する秘密鍵が記憶されているとよい。そして処理部３１は、記憶部３２に記憶されているノードプログラムに基づいた各処理を実行し、汎用コンピュータをブロックチェーンシステム３００におけるノードとして機能させる。
【００５８】
記憶部３２は、ハードディスク又はフラッシュメモリを用い、ノードプログラムを始めとする処理部３１が参照するプログラム、データを記憶する。記憶部３２は、ブロックチェーンを記憶する。ノードプログラムには、後述するスマートコントラクト（トランザクション実行に対する所定の演算処理を実行する処理部３１）として機能させるためのプログラムが含まれる。上述の秘密鍵は記憶部３２に記憶されてもよい。記憶部３２は、秘密鍵に基づく公開鍵及びアドレスを記憶してもよい。
【００５９】
通信部３３は、ノード３０の相互通信を実現する通信モジュールである。通信部３３は、ネットワークカード、光通信用デバイス、又は無線通信デバイス等を用いる。
【００６０】
図６は、システム１００における処理の概要図である。ユーザの第１装置１は、トランザクションの委任を目的として、ユーザが実行を希望するトランザクション（user tx）を作成するために必要なデータ及び、トランザクションの実行主体となるブロックチェーンアカウント（executer account）とを含む中継者宛てのデータを作成する（図２中の（１）に対応）。図６に示す例では、このユーザのトランザクション（user tx）と、ユーザに対応するブロックチェーンアカウント（executer account）とを含み、且つ、トランザクション条件（cond）及び検証方法（sig）とが作成され、中継者の第２装置２へ送信される（図２中の（２）に対応）。
【００６１】
中継者の第２装置２は、第１装置１から送信されたデータの内容を元に、委任トランザクション（delegation tx）を作成する（図２中の（３）に対応）。委任トランザクションは、ユーザが実行を希望するトランザクション（user tx）、委任条件（cond）、及び署名（sig）を入れ子構造で含む特殊トランザクション（nested tx）である。
【００６２】
第２装置２は、ブロックチェーンシステム３００に対し、トランザクションを実行できる手数料トークン又はユーティリティトークンを所有している。第２装置２は、中継者が権限を有するアカウント（relayer account）に基づいて委任トランザクションを実行する（図２中の（３）に対応）。委任トランザクションは、ブロックチェーン内のアカウント呼び出しコントラクト３０１に対して実行される。
【００６３】
アカウント呼び出しコントラクト３０１は、委任トランザクション（delegation tx）に基づき、ユーザのアカウントとして動作する実行者アカウントコントラクト３０２に対してトランザクション（user tx）の実行をリクエストする。実行者アカウントコントラクト３０２は、リクエストされたトランザクション（user tx）を対象コントラクト３０３で実行する。実行者アカウントコントラクト３０２は、リクエストされたトランザクション（user tx）を実行すると共に、委任手数料トークン管理コントラクト３０４に対し、委任手数料の中継者への支払（移転）を含むトランザクションを実行する。委任手数料は、手数料トークン又はユーティリティトークンと異なる。
【００６４】
図７は、委任トランザクション作成処理手順の一例を示すシーケンス図である。図７のシーケンス図が示す処理手順は、図２又は図６における（２）までの処理手順の詳細に対応する。
【００６５】
第１装置１の処理部１０は、記憶部１１に記憶されている第１プログラム１Ｐに基づき、ユーザが実行を希望するトランザクション（user tx）の内容、委任条件（cond）の初期値を作成する（ステップＳ１０１）。トランザクション（user tx）の内容は、トランザクションの対象コントラクト３０３のアドレス、対象コントラクト３０３における対象関数（target function）の識別子、及び対象関数の引数データを含む。トランザクションの委任条件は、ユーザの秘密鍵に対応するアドレス、実行者アカウントコントラクト３０２のアドレスを決定するために必要なデータを含む。委任条件は更に、委任手数料トークン管理コントラクト３０４のアドレス、委任手数料（トークン）の支払先のアドレス、及び手数料の決定に必要なデータを含む。
【００６６】
処理部１０は、作成したトランザクション（user tx）の内容及び委任条件（cond）の初期値を表示部１３に表示する（ステップＳ１０２）。ステップＳ１０２で表示されるトランザクションの内容は、アドレス、識別子及び引数データを、それらをテキストで出力したものであってもよいし、コントラクトの名称、識別するアイコン等によって出力したものであってもよい。表示される委任条件も、テキストで出力したものであってもよいし、アイコンで出力したものであってもよい。
【００６７】
処理部１０は、ユーザによるトランザクション（user tx）の内容及び委任条件（cond）の編集を受け付ける（ステップＳ１０３）。変更がない場合にはステップＳ１０３の処理はスキップされる。
【００６８】
処理部１０は、実行が希望されるトランザクション（user tx）の内容及び委任条件（cond）の確定を受け付ける（ステップＳ１０４）。
【００６９】
処理部１０は、確定されたトランザクション（user tx）の内容及び委任条件（cond）のデータに対し、ユーザの秘密鍵に基づく電子署名を生成する（ステップＳ１０５）。秘密鍵は、第１装置１の記憶部１１に安全に記憶されていてもよいし、ユーザからの入力を受け付けたものであってもよい。
【００７０】
処理部１０は、確定されたトランザクション（user tx）の内容、委任条件（cond）及びステップＳ１０５で取得した電子署名を中継者の第２装置２へ送信する（ステップＳ１０６）。トランザクション（user tx）の内容は、トランザクションの対象コントラクト３０３のアドレス、対象関数（target function）の識別子、及び対象関数の引数データを含む。
【００７１】
第２装置２の処理部２０は、トランザクション（user tx）の内容、委任条件（cond）を電子署名付きで受信する（ステップＳ２０１）。ステップＳ２０１において処理部２０は、送信された内容に基づいて、引き受けることができる委任であるか否かを判断し、引き受けられない委任である場合には、ユーザの第１装置へ返答するようにしてもよい。
【００７２】
処理部２０は、受信したトランザクション（user tx）の内容、委任条件（cond）及び電子署名を埋め込んだ委任トランザクション（delegation tx）を作成する（ステップＳ２０２）。ステップＳ２０２で作成される委任トランザクション（delegation tx）は、入れ子構造を有する特殊トランザクション（nested tx）である。
【００７３】
処理部２０は、ステップＳ２０２で作成した委任トランザクションに対し、第２装置２を管理する中継者に対応付けられているブロックチェーンシステム３００におけるブロックチェーンアカウント（relayer account）の秘密鍵で電子署名を生成する（ステップＳ２０３）。
【００７４】
処理部２０は、ステップＳ２０２で作成した委任トランザクション（delegation tx）に、ステップＳ２０３で生成した電子署名を埋め込み（ステップＳ２０４）、委任トランザクション（delegation tx）の作成処理が完了する。
【００７５】
ステップＳ２０２で作成される委任トランザクションは、委任トランザクションの対象であるアカウント呼び出しコントラクトのアドレス及び呼び出し関数（call function）の識別子を含む。委任トランザクションには、呼び出し関数の引数として実行したいユーザのトランザクション（user tx）の内容を含む。このトランザクションの内容は、対象コントラクトのアドレスと、そのコントラクトにおける対象の関数（target function）の識別子と、関数（target function）に入力するデータとである。委任条件は、ユーザの秘密鍵に対応するアドレスと、実行アカウントコントラクトのアドレスの決定に必要なデータとを含む。実行アカウントコントラクトのアドレスの決定に必要なデータは、アドレスそのもの、又は、仮想アカウントコントラクト（virtual account contract）を利用する場合の任意の値若しくは文字列（いわゆるsalt）である。委任条件は更に、委任手数料に関する条件を含む。委任手数料は、手数料トークン又はユーティリティトークンと異なる。委任手数料に関する条件は、委任手数料として支払うトークンを管理する委任手数料トークン管理コントラクト３０４のアドレスを含む。委任手数料に関する条件は、委任手数料の支払先、即ち中継者が受け取るためのアドレスと、委任手数料の決定に必要なデータを含む。委任手数料の決定に必要なデータは例えば、委任手数料として支払うトークン（delegation fee token）と手数料トークンとのレート、ユーティリティトークンとのレートである。
【００７６】
委任トランザクション（delegation tx）に含まれるべき委任手数料に関する条件が指定されない場合、又は、無指定に相当する条件が設定されていると判断される場合であっても、ユーザが実行を希望するトランザクション（user tx）の実行に必要な手数料トークン、又はユーティリティトークンは、中継者のアカウントに基づいて支払われる。ユーザは、委任手数料を支払わない場合がある。また、委任手数料として支払うトークン（delegation fee token）として指定できるのは、ユーザが実行したいと希望するトランザクションの対象コントラクト３０３と同一のブロックチェーンシステム３００に存在するトークン、即ち流通可能なトークンである。
【００７７】
図８は、トランザクションの委任実行処理手順の一例を示すシーケンス図である。図８のシーケンス図が示す処理手順は、図２又は図６における（３）から（４）までの処理手順を含む。
【００７８】
中継者の第２装置２は、作成した委任トランザクション（delegation tx）をブロードキャストする（ステップＳ２０５）。
【００７９】
ステップＳ２０５による委任トランザクションがブロードキャストされると、ブロックチェーンシステム３００のノード３０によって、委任トランザクションはブロックチェーンに取り込まれる。ブロックチェーンに取り込まれた委任トランザクションを基に、委任トランザクションに含まれているアドレスのアカウント呼び出しコントラクト３０１の呼び出し関数が実行され、以下の処理が進行する。以下の処理は、署名の正当性の検証（Ｓ３０２）で失敗しない限り、アトミックに、分割できないものとして実行される。
【００８０】
アカウント呼び出しコントラクト３０１のインスタンス（以下、単にアカウント呼び出しコントラクトという）は、呼び出し関数の実行により、委任トランザクションに含まれる実行者アカウントコントラクト３０２のアドレスの決定に必要なデータに基づいてアドレスを決定する（ステップＳ３０１）。
【００８１】
アカウント呼び出しコントラクト３０１は、委任トランザクションに含まれる、ユーザが実行を希望するトランザクション（user tx）の内容及び委任条件に対する電子署名の正当性を検証する（ステップＳ３０２）。
【００８２】
ステップＳ３０２の検証にて、署名が正当であると成功した場合、アカウント呼び出しコントラクト３０１は、次の処理を実行する。ステップＳ３０２の検証にて、署名が正当でないと判断された場合、アカウント呼び出しコントラクト３０１はそのまま処理を終了する。
【００８３】
アカウント呼び出しコントラクト３０１は、ステップＳ３０１で決定したアドレスの実行者アカウントコントラクト３０２に対して、ユーザが実行を希望するトランザクションに基づき、対象コントラクト３０３における対象関数（target function）の実行を指示する（ステップＳ３０３）。ステップＳ３０３においてアカウント呼び出しコントラクトは、ユーザが実行を希望するトランザクションの対象コントラクト３０３のアドレス、対象関数（target function）の識別子及び対象関数に入力するデータを、実行者アカウントコントラクトへ渡す。
【００８４】
実行者アカウントコントラクト３０２は、渡されたアドレス及び識別子に基づき、対象コントラクト３０３の対象関数に、渡されたデータを引数として入力してこれを実行する（ステップＳ４０１）。
【００８５】
これにより、ユーザが実行を希望するトランザクションの対象コントラクト３０３で、対象関数の実行によって規定された処理が実行される（ステップＳ５０１）。規定された処理の実行により、ユーザが実行を希望するトランザクション（アセットの移動、データ保存、又はコンピューティング）の結果が得られる。
【００８６】
アカウント呼び出しコントラクト３０１は、委任トランザクションに含まれていた委任条件中の、委任手数料の決定に必要なデータに基づいて、ユーザが支払うべき委任手数料（delegation fee token）の量を決定する（ステップＳ３０４）。
【００８７】
アカウント呼び出しコントラクト３０１は、決定した量の委任手数料の支払いを、実行者アカウントコントラクト３０２へ指示する（ステップＳ３０５）。ステップＳ３０５においてアカウント呼び出しコントラクト３０１は、指示と共に、委任手数料トークン管理コントラクト３０４のアドレス及び委任手数料の支払先のアドレスを指定する。
【００８８】
実行者アカウントコントラクト３０２は、指定された委任手数料トークン管理コントラクト３０４に対し、指定された支払先のアドレスへの委任手数料の支払いを指示する（ステップＳ４０２）。
【００８９】
ステップＳ４０２の指示により、委任手数料トークン管理コントラクト３０４は、指定された支払先のアドレスに対する委任手数料の支払い処理を実行する（ステップＳ６０１）。委任手数料の量は、ゼロの場合がある。これにより、委任トランザクションの実行処理を終了する。
【００９０】
図７及び図８のシーケンス図に示した処理により、ユーザがブロックチェーンシステム３００における手数料トークン又はユーティリティトークンを移動する権限を有したアカウントを所有していなくても、ブロックチェーンシステム３００における対象コントラクト３０３での処理の実行結果を享受できる。
【００９１】
図８のシーケンス図に示した処理は、あるコントラクト３０２の関数を呼び出すとその関数の呼び出しによって他の関数が呼び出されていく、というアトミックな繋がりのある処理であり、署名の検証以外は、各コントラクト３０１，３０２，３０３，３０４での判断はなく、一連の処理として実行される。これは、委任トランザクション（delegation tx）は、ユーザが希望するトランザクション（user tx）を入れ子構造に含む特殊トランザクション（nested tx）の態様で実現される。
【００９２】
上述の説明では、アカウント呼び出しコントラクト３０１と、実行者アカウントコントラクト３０２とは別のインスタンスであるとして説明した。しかしながら、これらのコントラクト３０１，３０２は同一のコントラクトであってもよい。また、委任手数料のユーザからの徴収方法は、委任手数料トークンで徴収する方法と、委任手数料を徴収しないという方法の２つがある。以下、これらのバリエーションに基づき、複数の実施例を説明する。
【００９３】
アカウント呼び出しコントラクト３０１と、実行者アカウントコントラクト３０２とが別のインスタンスとして存在する場合、実行者アカウントコントラクト３０２は仮想アカウントコントラクト（virtual account contract）であるか否かのバリエーションが考えられる。仮想アカウントコントラクトは、実際にユーザが実行を希望するトランザクション（user tx）の処理、呼び出し関数が実行されるまでは実体がない特殊なコントラクトである。
【００９４】
仮想アカウントコントラクトを利用するメリットは、第１に、仮想アカウントコントラクトは、実体が存在しない場合であってもトークンを保有することができる。つまり、実体化（activation）前にはユーザに対して手数料が発生しない。ブロックチェーンシステム３００における一般的なコントラクトは、トークンを保有するコントラクトは先に存在している必要があるため、そのデプロイの手数料が必要になる。また、実体化に関するコストも小さい。仮想アカウントコントラクトのインスタンスは、非常に軽量、即ち、プログラムのデータ量が少ないので、デプロイの手数料が小さい。トランザクションの委任（tx delegation）の一連の処理の中でデプロイを実行することにより、デプロイの手数料を中継者が肩代わりすることが可能である。
【００９５】
仮想アカウントコントラクトを利用するメリットは、第２に、資産の保全性が高いことである。実体化前の仮想アカウントコントラクトは、実体化されていないわけであるから、攻撃を受ける可能性が極めて低い。仮想アカウントコントラクトの保有者の公開鍵をブロックチェーンに保存する必要があったとしても、ハッシュ化することで隠蔽が可能であるから、保有者に対する攻撃は実質不可能である。この性質は、仮想アカウントコントラクト単体で利用される場合であっても同様である。
【００９６】
アカウント呼び出しコントラクト３０１と実行者アカウントコントラクト３０２とが同一であるか否かと、別とする場合に仮想アカウントコントラクトを利用するか否かとの３通りが存在する。委任手数料についても、徴収する方法と徴収せずに中継者が肩代わりする方法との２通りが存在する。したがって、トランザクション委任の実行について６つ（３×２）の実施例を挙げて、以下に説明する。ブロックチェーンシステム３００、ユーザの第１装置１及び中継者の第２装置２のハードウェア構成、及び基本処理は同一であるから、上述した構成と共通の符号を付して詳細な処理手順の説明を実行する。
【００９７】
［実施例１］
実施例１では、アカウント呼び出しコントラクト３０１と実行者アカウントコントラクト３０２とが別のインスタンスであって、実行者アカウントコントラクトは仮想アカウントコントラクトであり、且つ、委任手数料（delegation fee token）を任意のトークンで徴収する。ここで任意のトークンとは、ユーザがブロックチェーンシステム３００のブロックチェーンアカウントで所有するトークンであり、手数料トークン又はユーティリティトークンではない。
【００９８】
実施例１では、ユーザの第１装置１及び中継者の第２装置２との間では、図７のシーケンス図で示した委任トランザクションの作成処理を実行し、以下に示すトランザクションの委任処理が実行される。図９は、実施例１におけるトランザクションの委任処理の一例を示すシーケンス図である。図９のシーケンス図に示す処理手順の内、図８のシーケンス図に示した処理手順については、同一のステップ番号を付した詳細な説明を省略する。
【００９９】
アカウント呼び出しコントラクト３０１は、取り込まれた委任トランザクションを基に、ユーザが実行を希望するトランザクションの電子署名の正当性を検証し（Ｓ３０２）、検証に成功すると、ステップＳ３０２で決定したアドレスの実行者アカウントコントラクト３０２をデプロイする（ステップＳ３１２）。
【０１００】
アカウント呼び出しコントラクト３０１は、デプロイした実行者アカウントコントラクト３０２に対して、対象コントラクト３０３における対象関数（target function）の実行を指示する（Ｓ３０３）。ステップＳ３０４以降の処理は、図８のシーケンス図を参照した処理と同様である。
【０１０１】
なお、図９のシーケンス図に示した処理は、実行者アカウントコントラクト３０２を呼び出す初回のみ実行され、２回目以降は、図８のシーケンス図に示した処理が実行される。
【０１０２】
上述したように、仮想アカウントコントラクトを使用するので、最初に呼び出して（activation）実行者アカウントコントラクト３０２をデプロイするまではデプロイの手数料の支払いが不要である。
【０１０３】
［実施例２］
実施例２では、アカウント呼び出しコントラクト３０１と実行者アカウントコントラクト３０２とが別のインスタンスであって、実行者アカウントコントラクト３０２は仮想アカウントコントラクでなく、且つ、委任手数料を任意のトークンで徴収する。
【０１０４】
実施例２における各コントラクトによる処理内容は、図７及び８のシーケンス図に示した処理手順と同様であるから図示を省略する。
【０１０５】
実施例２では、ステップＳ４０２の実行者アカウントコントラクト３０２による委任手数料トークン管理コントラクト３０４への委任手数料の支払いにより、ゼロでない委任手数料の中継者への支払い処理が実行される。
【０１０６】
［実施例３］
実施例３では、アカウント呼び出しコントラクト３０１と実行者アカウントコントラクト３０２とが同一のインスタンスであって、それは仮想アカウントコントラクトではなく、且つ、委任手数料を任意のトークンで徴収する。
【０１０７】
実施例３では、アカウント呼び出しコントラクト３０１と実行者アカウントコントラクト３０２とが同一のインスタンスである。ユーザの第１装置１及び中継者の第２装置２の間では、図７のシーケンス図で示した委任トランザクションの作成処理を実行するが、その際、委任条件中の実行者アカウントコントラクト３０２のアドレスの決定に必要なデータは不要である。
【０１０８】
図１０は、実施例３におけるトランザクションの委任処理の一例を示すシーケンス図である。図１０のシーケンス図で示す処理手順の内、図８のシーケンス図に示した処理手順と共通する処理については同一のステップ番号を付して詳細な説明を省略する。
【０１０９】
実施例３では、アカウント呼び出しコントラクト３０１と実行者アカウントコントラクト３０２とが同一である。したがって、ブロードキャストされた委任トランザクション（delegation tx）に対し、実行者アカウントコントラクト３０２のアドレスを決定するステップＳ３０１の処理は省略される。
【０１１０】
実施例３では、委任トランザクションに含まれているアドレスに基づき、実行者アカウントコントラクト３０２（アカウント呼び出しコントラクト３０１）は、呼び出し関数に実行により、ユーザが実行を希望するトランザクション（user tx）の内容及び委任条件に対する電子署名の正当性の検証を実行する（Ｓ３０２）。
【０１１１】
ステップＳ３０２の検証にて、署名が正当であると成功した場合、実行者アカウントコントラクト３０２は、以下の処理を実行する。実行者アカウントコントラクト３０２は、ユーザが実行を希望するトランザクションに含まれる対象コントラクト３０３のアドレス及び対象関数（target function）の識別子に基づき、対象コントラクト３０３の対象関数に、入力データを引数として入力してこれを実行する（ステップＳ３３３）。
【０１１２】
これにより、ユーザが実行を希望するトランザクションの対象コントラクト３０３では、対象関数の実行によって規定された処理が実行される（Ｓ５０１）。規定された処理の実行により、ユーザが実行を希望するトランザクション（アセットの移動、データ保存、又はコンピューティング）の結果が得られる。
【０１１３】
実行者アカウントコントラクト３０２は、ユーザが支払うべき委任手数料トークンの量を決定する（Ｓ３０４）。実行者アカウントコントラクト３０２は、ステップＳ３０４で決定した量の支払先のアドレスへの委任手数料の支払いを、委任トランザクションに含まれるアドレスに基づいて委任手数料トークン管理コントラクト３０４へ指示する（ステップＳ３３５）。実行者アカウントコントラクト３０２は、委任トランザクションの実行処理を終了する。
【０１１４】
ステップＳ３３５の指示により、委任手数料トークン管理コントラクト３０４は、指定された支払先（中継者）のアドレスに対する委任手数料の支払い処理を実行する。
【０１１５】
［実施例４］
実施例４では、アカウント呼び出しコントラクト３０１と実行者アカウントコントラクト３０２とが別のインスタンスであって、実行者アカウントコントラクト３０２は仮想アカウントコントラクトであり、且つ、委任手数料は徴収しない。この場合、ユーザはブロックチェーンシステム３００におけるアカウントさえ所有していなくてもよい。
【０１１６】
実施例４では、ユーザの第１装置１及び中継者の第２装置２との間では、図７のシーケンス図で示した委任トランザクションの作成処理を実行するが、委任手数料を徴収しない。したがって、作成される委任トランザクション（delegation tx）では、委任条件に、委任手数料管理コントラクト（delegation fee token contract）のアドレス、委任手数料の支払先のアドレス、及び、委任手数料の決定に必要なデータは不要である。
【０１１７】
図１１は、実施例４におけるトランザクションの委任処理の一例を示すシーケンス図である。図１１のシーケンス図で示す処理手順の内、図８のシーケンス図に示した処理手順と共通する手順については同一のステップ番号を付して詳細な説明を省略する。
【０１１８】
アカウント呼び出しコントラクト３０１は、取り込まれた委任トランザクションを基に、ユーザが実行を希望するトランザクションの電子署名の正当性を検証し（Ｓ３０２）、検証に成功すると、ステップＳ３０２で決定したアドレスの実行者アカウントコントラクト３０２をデプロイする（ステップＳ３４２）。
【０１１９】
アカウント呼び出しコントラクト３０１は、デプロイした実行者アカウントコントラクト３０２に対して、対象コントラクト３０３における対象関数（target function）の実行を指示する（Ｓ３０３）。
【０１２０】
実行者アカウントコントラクト３０２は、渡されたアドレス及び識別子に基づき、対象のコントラクトの対象関数に、渡されたデータを引数として入力してこれを実行し（Ｓ４０１）、処理が終了する。図８のシーケンス図に示した処理手順におけるステップＳ３０４以降の処理は実行されない。
【０１２１】
ステップＳ４０１の処理により、ユーザが実行を希望するトランザクションの対象コントラクト３０３では、対象関数の実行によって規定された処理が実行される（Ｓ５０１）。規定された処理の実行により、ユーザが実行を希望するトランザクション（アセットの移動、データ保存、又はコンピューティング）の結果が得られる。
【０１２２】
［実施例５］
実施例５では、アカウント呼び出しコントラクト３０１と実行者アカウントコントラクト３０２とが別のインスタンスであって、実行者アカウントコントラクト３０２は仮想アカウントコントラクトでなく、且つ、委任手数料は徴収しない。
【０１２３】
実施例５では、ユーザの第１装置１及び中継者の第２装置２との間では、図７のシーケンス図で示した委任トランザクションの作成処理を実行するが、委任手数料を徴収しない。したがって、作成される委任トランザクション（delegation tx）では、委任条件に、委任手数料トークン管理コントラクト３０４のアドレス、委任手数料の支払先のアドレス、及び、委任手数料の決定に必要なデータは不要である。
【０１２４】
図１２は、実施例５におけるトランザクションの委任処理の一例を示すシーケンス図である。図１２のシーケンス図で示す処理手順の内、図８のシーケンス図に示した処理手順と共通する手順については同一のステップ番号を付して詳細な説明を省略する。
【０１２５】
アカウント呼び出しコントラクト３０１は、取り込まれた委任トランザクションを基に、実行者アカウントコントラクト３０２のアドレスを決定する（Ｓ３０１）。アカウント呼び出しコントラクト３０１は、トランザクション（user tx）の電子署名の正当性を検証する（Ｓ３０２）。
【０１２６】
アカウント呼び出しコントラクト３０１は、ステップＳ３０１で決定したアドレスの実行者アカウントコントラクト３０２に対して、対象コントラクト３０３における対象関数（target function）の実行を指示する（Ｓ３０３）。
【０１２７】
指示を受けた実行者アカウントコントラクト３０２は、渡されたアドレス及び識別子に基づき、対象コントラクト３０３の対象関数に、渡されたデータを引数として入力してこれを実行し（Ｓ４０１）、処理が終了する。図８のシーケンス図に示した処理手順におけるステップＳ３０４以降の処理は実行されない。
【０１２８】
［実施例６］
実施例６では、アカウント呼び出しコントラクト３０１と実行者アカウントコントラクト３０２とが同一のインスタンスであって、それは仮想アカウントコントラクトではなく、且つ、委任手数料は徴収しない。
【０１２９】
実施例６では、ユーザの第１装置１及び中継者の第２装置２との間では、図７のシーケンス図で示した委任トランザクションの作成処理を実行するが、アカウント呼び出しコントラクト３０１と実行者アカウントコントラクト３０２とが同一コントラクトであり、委任手数料を徴収しない。したがって、作成される委任トランザクション（delegation tx）では、委任条件に、実行者アカウントコントラクト３０２のアドレスの決定に必要なデータは含まれない。委任条件に、委任手数料トークン管理コントラクト３０４のアドレス、委任手数料の支払先（中継者）のアドレス、及び、委任手数料の決定に必要なデータも不要である。実施例６では、委任条件は、ユーザの秘密鍵に対応するアドレスを含めば足りる。
【０１３０】
図１３は、実施例６におけるトランザクションの委任処理の一例を示すシーケンス図である。図１３のシーケンス図で示す処理手順の内、図８のシーケンス図に示した処理手順と共通する処理については同一のステップ番号を付して詳細な説明を省略する。
【０１３１】
実施例６では、アカウント呼び出しコントラクト３０１と実行者アカウントコントラクト３０２とが同一である。したがって、ブロードキャストされた委任トランザクション（delegation tx）に対し、実行者アカウントコントラクト３０２のアドレスを決定するステップＳ３０１の処理は省略される。
【０１３２】
実施例６では、委任トランザクションに含まれているアドレスに基づき、実行者アカウントコントラクト３０２（アカウント呼び出しコントラクト３０１）が、呼び出し関数に実行により、ユーザが実行を希望するトランザクション（user tx）の内容及び委任条件に対する電子署名の正当性の検証を実行する（Ｓ３０２）。
【０１３３】
ステップＳ３０２の検証にて、署名が正当であると成功した場合、アカウント呼び出しコントラクト３０１でもある実行者アカウントコントラクト３０２は、以下の処理を実行する。実行者アカウントコントラクト３０２は、ユーザが実行を希望するトランザクションに含まれる対象コントラクト３０３のアドレス及び対象関数（target function）の識別子に基づき、対象コントラクト３０３の対象関数に、入力データを引数として入力してこれを実行する（ステップＳ３６３）。委任処理は終了する。図８のシーケンス図に示した処理手順におけるステップＳ３０４以降の処理は実行されない。
【０１３４】
上述したアカウント呼び出しコントラクト３０１及び実行者アカウントコントラクト３０２が、ブロックチェーンシステム３００のあらゆるブロックチェーンアカウントからのトランザクション実行指示を許容する構成は非現実的である。したがって、実行者アカウントコントラクト３０２は、アカウント呼び出しコントラクト３０１からの指示のみを受け付けるように設定し、アカウント呼び出しコントラクト３０１は、自身の呼び出し関数の実行指示権限を有するアカウント（中継者）をホワイトリスト型で記憶しておくとよい。実施例３及び実施例６のように、アカウント呼び出しコントラクト３０１と実行者アカウントコントラクト３０２とが同一のインスタンスである場合、アカウント呼び出しコントラクト３０１（実行者アカウントコントラクト３０２）は、実行指示権限を有するアカウント（中継者）をホワイトリスト型で記憶しておき、権限を有していないアカウントからの委任トランザクションを拒否できるようにするとよい。
【０１３５】
図８−図１３のシーケンス図で示したトランザクションの委任処理では、委任内容の正当性の検証を、ユーザが実行を希望するトランザクション（user tx）の内容及び委任条件に対する電子署名によって検証する例を挙げた。しかしながら、電子署名に限られない。事前にユーザが実行を希望するトランザクションが何らかの認証を通過するように設定し、ステップＳ３０１の検証処理を省略してもよい。また、ステップＳ３０１の検証処理に代替して、ブロックチェーンシステム３００内に他の検証用コントラクトをデプロイさせておき、この検証用コントラクトで検証させてから処理が進むようにしてもよい。更にステップＳ３０１の検証処理に代替して、図７の委任トランザクションの作成処理手順において、中継者の第２装置２が、第１装置１から受信した電子署名を、ブロックチェーンシステム３００の外で検証してもよい。
【０１３６】
委任手数料の徴収方法についても、他のバリエーションが許容される。図８及び図９のシーケンス図では、実行者アカウントコントラクト３０２が委任手数料トークン管理コントラクト３０４に対し、支払い処理を実行した。しかしながら、ユーザから許諾を受けた他のコントラクト、例えばアカウント呼び出しコントラクト３０１が委任トランザクションの委任処理の中で引き出し処理を実行するような形式で行なってもよい。また、委任処理の中では委任手数料は徴収されず、一定期間分の委任トランザクションの実行（tx delegation）に対してまとめて前払い・後払いするような形式で実現されてもよい。ユーザをログインさせ、中央集権的にユーザのウォレット（秘密鍵）を管理するサービスでは、委任手数料を徴収するに際して、法定通貨での前払い・後払いに対応することも可能となる。後払いで徴収を行なう場合には、支払が実行されないリスクを考慮して、ユーザが保有する資産を担保とするようにしてもよい。ここでいう資産は、ブロックチェーンシステム３００で流通可能な資産（トークン）であってもよい。ブロックチェーンシステム３００外に存在する様々な資産（現金、証券、不動産等）であってもよい。ブロックチェーンシステム３００で流通可能な資産である場合、後払い、担保に関する契約自体をスマートコントラクト化することで、仲介者、契約放棄のリスクなしで執行が可能となり、大きなメリットになる。
【０１３７】
上述したシステム１００により、ユーザは、ユーティリティトークン又は手数料トークンを保有していなくてもブロックチェーンシステム３００でのトランザクションの実行が可能になる。これにより、ユーザの負担は大きく軽減される。中継者は、任意のトークン（委任手数料トークン）で委任手数料を徴収することが可能である。本開示では、委任手数料トークン管理コントラクト３０４は、トランザクションの委任対応のための改変を行なわなくても上述の処理を実行できるため、既にブロックチェーンシステム３００に存在する多数のトークンを利用することが可能である。委任手数料トークンは、例えばEthereumではERC20、ERC721、又はERC1155等の標準規格に準拠した既存のトークンでの徴収が可能である。ERC1155の場合、複数種類のトークンでの徴収も可能である。つまり、トランザクションの委任手数料をユーザから徴収するための手続きを柔軟に調整することによって、ユーザの負担を緩和することが可能である。勿論、完全に肩代わりすることも可能であり、完全に肩代わりする場合、負担は相当軽減される。
【０１３８】
ユーザから中継者（委任される者）へ安全に委任を実施するために電子署名を用いて委任内容の正当性の検証を行なう場合であっても、ユーザは始めに１度だけその実行を希望するトランザクション（user tx）に対して電子署名を生成する処理をしておけばよい。これにより、そのトランザクション（user tx）の委任に関し、後の処理の中で再度承認処理を求められることはなく、通常のトランザクションの実行と変わらない。したがって、本開示のトランザクションの委任によってユーザの作業負担が増加することはない。
【０１３９】
本開示のシステム１００により、中継者は、ユーザの秘密情報（ユーザの第１装置１が記憶している秘密鍵等）を知らないまま、ユーザのブロックチェーンアカウント（実行者アカウントコントラクト）から指定されたトランザクション（user tx）を実行することが可能である。ユーザは、実行者アカウントコントラクト３０２の権限を中継者に使用させつつも、自身の秘密情報を保護することが可能である。ユーザは他者（中継者）にユーザの権限を使用させたい場合、他者にユーザの秘密情報（ユーザの第１装置１が記憶する秘密鍵等）を知らせる必要があるが、秘密情報を秘匿したまま、他者への委任が可能になる。
【０１４０】
中継者が、ユーザが実行を希望するトランザクション（user tx）の内容を改変できないようにすることが可能である。例えばユーザが、ユーザが実行を希望するトランザクションの内容に対して電子署名を付加し、スマートコントラクトでその検証を行なってもよい。ユーザが希望するトランザクション（user tx）の実行と委任手数料の徴収をアトミックに実行することも可能である。委任される中継者の不正によってユーザが不利益を被る可能性を低減させることもできる。詐欺防止に大きく貢献できる。委任された委任トランザクション（delegation tx）が実行されないという事態が発生した場合、他の中継者を経由して対応することも可能である。ユーザが実行を希望するトランザクション（user tx）と委任手数料の徴収とをアトミックに実行するためには、ユーザはブロックチェーンシステム３００にて何等かの委任手数料として使用できるトークン（delegation fee token）を保有する必要がある。委任手数料として使用できるトークンに、ステーブルコインを適用することによって、委任手数料として使用できるトークンの価格低下リスクからユーザを保護することも可能である。特に法定通貨担保型のステーブルコインは、投機性のない価格の安定したトークンであるから、ブロックチェーンシステム３００で流通する多様なトークンに馴染みのないユーザであっても扱いやすい保有リスクの小さい資産であり、利用価値が高い。
【０１４１】
委任される中継者は、例えば中央省庁から正式な手続きを経て認可を受けている企業であってもよい。この企業が顧客の暗号資産（秘密鍵）の管理に責任を負い、ユーザが希望するトランザクション（user tx）を実行することも可能である。なお、その企業管理下にあるユーザの顧客アカウントに対して予め手数料トークン又はユーティリティトークンを分配しておき、これをもとにユーザが希望するトランザクションを実行しても実現は可能である。しかしながら手数料トークン又はユーティリティトークンのユーザへの分配を実行するトランザクション処理にも当然手数料トークンが必要であり、トランザクションの承認にも一定時間を要する。この分配を全顧客に対して継続的に行なうことは金銭的及び時間的なコストが高い。本開示のシステムにより、委任トランザクション（delegation tx）を実行するアカウント（中継者、例えば金融企業）に手数料トークン又はユーティリティトークンを集約させておけば、分配処理は不要であるから、金銭的及び時間的コストを削減できる。中継者となる企業にとってもメリットが大きい。
【０１４２】
委任される中継者は、上述したような認可を受けた企業に限らない。中小企業、個人であっても中継者になり得る。本開示のシステムを適用することにより、中継者は、ユーザの負担を安全に肩代わりすることが可能になる。これまでは顧客（ユーザ）の資産管理に携わることができなかったために、顧客に作業負担及び手数料負担をさせるしかなかった負担を、中継者が担うことによって、顧客の負担を軽減することができる。完全に手数料を肩代わりすることができない場合、顧客からはブロックチェーンシステム３００において顧客が扱える暗号資産、又は、ブロックチェーンシステム３００外の委任手数料を徴収することによって柔軟に負担を分配することも可能である。委任手数料の支払いに、ブロックチェーンシステム３００内のアプリによって実現されユーザが享受するサービスでの何らかのインセンティブを設定してもよい。これにより、顧客（ユーザ）同士で委任手数料を支払い合ってトランザクション委任を実行するといったスキームを構築することも可能である。
【０１４３】
本開示のシステム１００（手法）の適用対象は例えば、Dapps（分散アプリケーション）運営者、又はウォレットアプリ開発者になる。例えば、ゲームDappsは、ブロックチェーンシステム３００に馴染みのない一般層のユーザを、そのゲームのユーザとして取り込める見込みがあるはずであるにも関わらず、手数料トークンの支払のための手続き及び管理が煩雑である。本開示のシステム１００を適用することにより、手数料トークンの管理ができないユーザであっても、そのゲームのユーザになる敷居を低くすることができる。また、ゲームのみならず、運営者がマーケティングキャンペーンの一環として発行した特定のトークンを無償でユーザに分配した場合、これらの特定のトークンを、ユーザがブロックチェーンシステム３００で取引しようとした場合、手数料トークンが必要になる取引所がある。このような場合、本開示のシステム１００の適用により、ユーザ及び運営者にとってサービス利用が促進され得る。
【０１４４】
本開示のシステム１００（手法）は、Dapps運営者、ウォレットアプリの開発者のみならずブロックチェーンシステム３００の関連サービスを提供するクラウドベンダー又はＳＩ（System Integration）ベンダー等のＢ２Ｂ課金に適用されてもよい。ブロックチェーンシステム３００の普及フェーズでは、Dappsのユーザ同様に、各ベンダーの顧客もほとんどはブロックチェーンシステム３００に馴染みがなく、多数のトークンを使い分けるまでには至らないことがほとんどである。ブロックチェーンシステム３００を活用して構築されたサービスの運用のために、手数料トークン又はユーティリティトークンの支払をベンダーが肩代わりするスキームの必要性は高まることが予想される。このようなエンタープライズ領域におけるユースケースでも、法定通貨担保型のステーブルコインを利用することが非常に有効となる。
【０１４５】
本開示のシステム１００（手法）を利用したトランザクション委任（tx delegation）を、「手数料トークン又はユーティリティトークンと、ユーザから徴収し得る委任手数料トークンとの間の取引」として解釈すれば、その取引市場が生まれる。取引のマッチングなどまで加味すると普及には課題が残るものの、オープンなトランザクションプールを形成するだけで取引市場の要件を満たす。取引市場が機能し、中継者となることがビジネスとして成立することも可能になる。
【０１４６】
上述のように開示された実施の形態は全ての点で例示であって、制限的なものではない。本発明の範囲は、請求の範囲によって示され、請求の範囲と均等の意味及び範囲内での全ての変更が含まれる。
【符号の説明】
【０１４７】
１  第１装置
１０  処理部
１１  記憶部
１３  表示部
１４  操作部
１Ｐ  第１プログラム
２  第２装置
２０  処理部
２１  記憶部
２Ｐ  第２プログラム
３００  ブロックチェーンシステム
３０  ノード
３０１  アカウント呼び出しコントラクト
３０２  実行者アカウントコントラクト
３０３  対象コントラクト
３０４  委任手数料管理コントラクト
【要約】
トランザクション委任方法、トランザクション委任システム及びコンピュータプログラムを提供する。トランザクション委任方法は、ユーザが使用する第１装置から、ブロックチェーンシステムにおけるアカウントデータを記憶する第２装置が、前記ブロックチェーンシステムにおける前記ユーザの所望のトランザクションの実行を委任する委任データを、前記ブロックチェーンシステム外の通信によって受信し、前記第１装置から送信された委任データに基づき、前記所望のトランザクションを、前記ブロックチェーンシステムにおける前記ユーザのアカウントから実行する実行スマートコントラクトに実行させる委任トランザクションを作成し、前記アカウントデータに基づき、トランザクションの実行に要する手数料トークン又はユーティリティトークンの支払いを伴う前記委任トランザクションを、前記ブロックチェーンシステムへブロードキャストする。【図１】
0006915934.tif 000002
【図２】
0006915934.tif 000003
【図３】
0006915934.tif 000004
【図４】
0006915934.tif 000005
【図５】
0006915934.tif 000006
【図６】
0006915934.tif 000007
【図７】
0006915934.tif 000008
【図８】
0006915934.tif 000009
【図９】
0006915934.tif 000010
【図１０】
0006915934.tif 000011
【図１１】
0006915934.tif 000012
【図１２】
0006915934.tif 000013
【図１３】
0006915934.tif 000014