IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 株式会社Datachainの特許一覧

<>
  • 特開-取引システム 図1
  • 特開-取引システム 図2
  • 特開-取引システム 図3
  • 特開-取引システム 図4A
  • 特開-取引システム 図4B
  • 特開-取引システム 図5
  • 特開-取引システム 図6
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2022061223
(43)【公開日】2022-04-18
(54)【発明の名称】取引システム
(51)【国際特許分類】
   G06Q 20/38 20120101AFI20220411BHJP
   G06Q 40/04 20120101ALI20220411BHJP
   G06Q 20/06 20120101ALI20220411BHJP
【FI】
G06Q20/38 310
G06Q40/04
G06Q20/06
【審査請求】有
【請求項の数】8
【出願形態】OL
(21)【出願番号】P 2020169096
(22)【出願日】2020-10-06
(11)【特許番号】
(45)【特許公報発行日】2021-12-17
【新規性喪失の例外の表示】特許法第30条第2項適用申請有り (1)公開者 株式会社Datachain 掲載アドレス https://github.com/datachainlab/cross 掲載年月日 令和2年1月30日 (2)公開者 株式会社Datachain 掲載アドレス https://github.com/cosmos/ics/issues/408 掲載年月日 令和2年4月15日 (3)公開者 株式会社Datachain 掲載アドレス https://gitcoin.co/issue/cosmos/ics/408/4212 掲載年月日 令和2年5月1日 (4)公開者 株式会社Datachain 掲載アドレス https://github.com/datachainlab/cross-chain-hackathon 掲載年月日 令和2年5月3日 (5)公開者 株式会社Datachain 掲載アドレス https://datachainlab.github.io/about_datachain.pdf 掲載年月日 令和2年6月1日 (6)公開者 株式会社Datachain 掲載アドレス https://github.com/datachainlab/public-docs 掲載年月日 令和2年10月5日
(71)【出願人】
【識別番号】520199185
【氏名又は名称】株式会社Datachain
(74)【代理人】
【識別番号】100087398
【弁理士】
【氏名又は名称】水野 勝文
(74)【代理人】
【識別番号】100128783
【弁理士】
【氏名又は名称】井出 真
(74)【代理人】
【識別番号】100128473
【弁理士】
【氏名又は名称】須澤 洋
(74)【代理人】
【識別番号】100160886
【弁理士】
【氏名又は名称】久松 洋輔
(72)【発明者】
【氏名】木村 淳
【テーマコード(参考)】
5L055
【Fターム(参考)】
5L055AA12
5L055AA71
5L055BB52
(57)【要約】      (修正有)
【課題】複数のブロックチェーン上の取引に関わるスマートコントラクトの分散トランザクションにおいてデータの整合性を保証することが可能なシステムを開発可能にする取引システムを提供する。
【解決手段】スマートコントラクトを実行するフローにおいて、コーディネータ11b(コーディネータ部)とパーティシパント11c(第1ユーザ部)からなるブロックチェーンとしての証券チェーン11(第1のブロックチェーン)と、パーティシパント12c(第2ユーザ部)からなるブロックチェーンとしての決済チェーン12(第2のブロックチェーン)と、を備える。ユーザー間において、証券チェーン11上で証券トークンが移転され、決済チェーン上で決済トークンが移転されることにより、証券チェーン11及び決済チェーン12間のアトミック性を持つ安全なスマートコントラクトの呼び出しが可能となる。
【選択図】図3
【特許請求の範囲】
【請求項1】
第1のブロックチェーンと第2のブロックチェーンとの間で取引に関わるスマートコントラクトをアトミックに実行するための取引システムであって、
前記第1のブロックチェーン側のコーディネータ部及び第1ユーザ部と、
前記第2のブロックチェーン側の第2ユーザ部と、
を有し、
前記コーディネータ部は、コントラクト関数が指定された所定のトランザクションに基づき作成した第1のパケットを前記第1及び第2ユーザ部に送信し、
前記第1ユーザ部は、前記コーディネータ部から受信した前記第1のパケットのコントラクト関数の実行に成功した場合には、自身のステイトストアへの変更操作の保存と変更対象へのロックを取得して、ステータスを実行可能にした第2のパケットを前記コーディネータ部に送信し、実行に失敗した場合には、自身のステイトストアへの変更操作を破棄して、ステータスを実行不可にした第3のパケットを前記コーディネータ部に送信し、
前記第2ユーザ部は、前記コーディネータ部から受信した前記第1のパケットのコントラクト関数の実行に成功した場合には、自身のステイトストアへの変更操作の保存と変更対象へのロックを取得して、ステータスを実行可能にした第4のパケットを前記コーディネータ部に送信し、実行に失敗した場合には、自身のステイトストアへの変更操作を破棄して、ステータスを実行不可にした第5のパケットを前記コーディネータ部に送信し、
前記コーディネータ部は、前記第1及び第2ユーザ部から受信したパケットの実行可否検証結果を元に、全てのパケットのステータスが実行可能な場合にはコミット要求を行うため第6のパケットを前記第1及び第2ユーザ部に送信し、少なくとも1つのパケットのステータスが実行不可の場合にはアボート要求を行うため第7のパケットを前記第1及び第2ユーザ部に送信し、
前記第1及び第2ユーザ部は、前記コーディネータ部から前記第6のパケットを受信すると、事前に保存していた変更操作をステイトストアに適用し、ロックを削除して第8のパケットを前記コーディネータ部に送信し、前記コーディネータ部から前記第7のパケットを受信すると、事前に保存していた変更操作とロックを削除して第9のパケットを前記コーディネータ部に送信することを
特徴とする取引システム。
【請求項2】
前記コーディネータ部と、前記第1及び第2ユーザ部との交信を仲介するリレイアーを有することを特徴とする請求項1に記載の取引システム。
【請求項3】
前記第1のブロックチェーンは証券チェーンであり、前記第2のブロックチェーンは決済チェーンであることを特徴とする請求項1又は2に記載の取引システム。
【請求項4】
前記第1のブロックチェーンは相続チェーンであり、前記第2のブロックチェーンは資産チェーンであることを特徴とする請求項1又は2に記載の取引システム。
【請求項5】
第1のブロックチェーンと第2のブロックチェーンとの間で取引に関わるスマートコントラクトをアトミックに実行するための取引システムであって、
前記第1のブロックチェーン側に設けられるコーディネータ部及び第1ユーザ部を兼用する兼用部と、
前記第2のブロックチェーン側の第2ユーザ部と、
を有し、
前記兼用部は、コントラクト関数が指定された所定のトランザクションの実現が可能な場合には、前記第1ユーザ部として自身のステイトストアへの変更操作の保存と変更対象へのロックを取得して、第1のパケットを前記第2ユーザ部に送信し、実現が不可能な場合には、処理を終了し、
前記第2ユーザ部は、前記兼用部から受信した前記第1のパケットに基づき、コントラクト関数を実行し、実行に成功した場合にはコミットを行うとともに、ステータスを実行可能にした第2のパケットを前記兼用部に送信し、実行に失敗した場合にはアボートを行うとともに、ステータスを実行不可にした第3のパケットを前記兼用部に送信し、
前記兼用部は、前記第2ユーザ部から前記第2のパケットを受信した場合には、前記第1ユーザ部として事前に保存していた変更操作をステイトストアに適用し、ロックを削除し、前記第2ユーザ部から前記第3のパケットを受信した場合には、前記第1ユーザ部として事前に保存していた変更操作を破棄し、ロックを削除することを特徴とする取引システム。
【請求項6】
前記兼用部と、前記第2ユーザ部との交信を仲介するリレイアーを有することを特徴とする請求項5に記載の取引システム。
【請求項7】
前記第1のブロックチェーンは証券チェーン及び決済チェーンのうちいずれか一方のチェーンであり、前記第2のブロックチェーンは他方のチェーンであることを特徴とする請求項5又は6に記載の取引システム。
【請求項8】
前記第1のブロックチェーンは相続チェーン及び資産チェーンのうちいずれか一方のチェーンであり、前記第2のブロックチェーンは他方のチェーンであることを特徴とする請求項5又は6に記載の取引システム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、取引システムに関する。
【背景技術】
【0002】
暗号資産による証券売買を行うためには、暗号資産交換業の免許と、金融商品取引業の免許とが必要である。しかしながら、これら双方の免許を有している事業者が日本には存在しないため、現在は法定通貨による証券売買が行われている。つまり、現在の日本では、暗号資産による証券取引は行われていない。
【0003】
ブロックチェーンを活用してスマートコントラクトを構築するプラットフォームとして広く知られたイーサリアムでは、トークンとしてERC20、ERC1400等の規格が採用されている。ERC1400は、証券(Security)トークンのための規格である。
【0004】
日本国内では、これらのトークンを用いて証券を売買するサービス事業者は存在しないためトークンによる証券売買は行われておらず、法定通貨でのトークンの購入、検証が行われているにすぎない。
【0005】
一方、海外では、これらのトークンを用いた証券売買を行うためのプラットフォーム(例えば、Polymath、Harbor、Securitize)が準備されているが、これらは同一チェーン上に実装されたスマートコントラクトによってトークンが生成されるため、様々な証券や取引のデータが1つのブロックチェーン上で管理されることになり、複雑性、処理速度、他のネットワークとの接続性が課題となる。ここで、スマートコントラクトとは、ブロックチェーン上で契約を自動的に実行する仕組みのことである。
【先行技術文献】
【特許文献】
【0006】
【特許文献1】特開2020-57863号公報
【発明の概要】
【発明が解決しようとする課題】
【0007】
価値取引を行うためには、取引のアトミック性が担保されている必要がある。ここで、取引における「アトミック性」とは、取引の処理が全て完了されているか、もしくは全く実行されていないかのいずれかの状態になっていることを意味する。例えば、ブロックチェーンAでの取引完了が、異なる価値取引を行うブロックチェーンB上でも必ず完了できるかどうか不明であり、チェーンB上で取引の問題がある場合には、チェーンA上での取引も中止しなければならない。
【0008】
上述の点について、証券のDvP取引を例にして詳細に説明する。ここで、DvP取引は、Delivery Versus Paymentの略で、証券の引渡し(Delivery)と代金の支払い(Payment)とを相互に条件を付け、一方が行われない限り他方も行われないようにすることを意味する。これは、証券決済において、資金(または証券)を渡したにもかかわらず、取引相手からその対価となる証券(または資金)を受け取れないという「取りはぐれ」リスクを回避するための方法・仕組みである(日本銀行のHP参照)。
【0009】
ブロックチェーンを用いたDvP取引では、資金側のチェーン及び証券側のチェーンが設けられており、資金側のチェーンで取引が完了したからといって、証券側のチェーンでの取引も完了できるかどうか不明である。
【0010】
ここで、異なるブロックチェーン間での情報・価値交換を実現する方法として、2way-peg方式やHTLC方式(Hashed Time-Locked Contract)が検討されている。2way-peg方式とは、トークンの送信チェーンのロックもしくはバーンの証拠を受信チェーンが検証を行ったうえでトークンを受信チェーン上にミントすることであり、これを逆向きにも可能な方式である。この方式では、資金側のブロックチェーンで証券のトークンを発生させるが、資金側では証券側のルール(例えば、譲渡人数が上限に達していないか、移転先のユーザーはKYC済かなど)をチェックできない。そのため、再度、証券側でチェックすると、他の取引と競合し取引不可となってしまう場合がある。また、HTLC方式とは、受取側のユーザーがハッシュのプリイメージを公開することでトークンを入手することを可能にし、また期限内に受取側のユーザーがハッシュのプリイメージを公開せずタイムアウトになった場合に、送金側のユーザーがトークンを取り戻すことを可能とする方式である。この方式では、プリイメージを公開するタイミングで証券側のルール(例えば、譲渡人数が上限に達していて証券の移転が不可能)に引っかかった場合、代金の支払いは完了するが、証券の引き渡しは完了しない「取りはぐれ」リスクが存在する。
【課題を解決するための手段】
【0011】
(本発明を創作するに至った経緯)
ブロックチェーンは、単体では他のブロックチェーンとの相互運用性の能力に乏しいことが知られている。ブロックチェーン同士を繋ぐクロスチェーン上の接続方式として、relay方式が知られている。クロスチェーンとは、異なるチェーン同士を跨ぐことを意味する。
【0012】
これを実現するのに必要なプロトコルストックの標準化のために、ICS(Interchain Standards)がCosmosによって設計されている。ここで、現在、ブロックチェーン技術は普及期にあり、Bitcoinブロックチェーン、Ethereumブロックチェーン等様々なブロックチェーンが存在する。このような背景の下、ブロックチェーンのスピード、スケーラビリティー、相互運用性といった課題を解決するために、ブロックチェーン同士を繋ぐプロジェクトして考えられたものがICSである。
【0013】
relay方式を用いたアプリケーションプロトコルとして、PegやEscrow方式によるトークンの移動や交換のプロトコルが様々なコミュニティにおいて議論されているが、多くの方式で対象となるトークンやStateは、Fungible token(つまり、代替可能なトークン)等の単純なStateで表現可能なものとなっている。Cosmosにおいてもアプリケーションプロトコルとして、Fungible tokenの2way-pegがics‐020で提案されている。
【0014】
そこで、本願発明は、複数のブロックチェーン上のスマートコントラクトの分散トランザクションにおいてデータの整合性を保証することが可能なシステムを開発可能にすることを目的とする。この目的を達成するために、本発明者等は、Cross Frameworkというフレームワークを開発し、以下の(1)及び(2)の要素が必要と考えた。
(1)スマートコントラクトに必要なロックメカニズムとコミットの可否についての分散合意プロトコルを設計する。
(2)分散合意プロトコルを可能とするためにコントラクト(契約)が満足すべき要件を開発者が透過的に満たすことができる仕組みを構築する。
【0015】
また、このようなスマートコントラクトを実行するトランザクションが上述のCross-chain Transactionに相当する。Cross-chain Transactionは、複数の異なるブロックチェーン間で行う分散トランザクションと同義である。そのため、一般的な分散トランザクションと同様に、Cross-chain Transactionにおいても、ACID特性で定義されているようなトランザクション処理の信頼性を保証する必要がある。ここで、ACID特性は、“Atomicity”(原子性)、“Consistency” (一貫性)、“Isolation”(独立性)、“Durability”(耐久性)の頭文字をつなぎ合わせたものであるが、技術常識であるため、詳細な説明は省略する。
【0016】
スマートコントラクトとは、Blockchain上で実行可能なプログラムである。それらは状態をもち、多くの場合提供される機能は関数として公開され、定められた条件に従い実行可能である。ユーザが生成したトランザクションによって実行され、状態の更新を行う。Cross Frameworkにおいて、スマートコントラクトは、開発者がリクエストに応じて動的にコントラクトを呼び出し可能となるようにContract Handlerの実装によりもたらされる。それぞれの機能はコントラクト関数として定義される。Cross-chain smart contractは、この複数のチェーンのコントラクト関数の呼び出しを含むスマートコントラクトを指す。
【0017】
そして、上記設計のサポートを可能にする以下のCross Frameworkを考えた。Cross Frameworkは、Cross-chain smart contractの開発およびこれに対するCross-chain Transactionのサポートを可能にするフレームワークである。フレームワークは、Cross-chain TransactionをサポートするためのCross Moduleとスマートコントラクトを提供するContract Moduleから構成される。Cross Moduleは、Cross-chain Transactionを実現するために必要なモジュールであり、IBCモジュールを介した他のチェーンとのアトミックコミットのためのプロトコルを実装するCross Handlerとそれらの状態を保持するストアから構成される。Contract Moduleは、スマートコントラクトを提供するContract Handler、それらの状態を保持するステイトストア(State Store)から構成される。
【0018】
続いて、上述のCross Frameworkの設計手順について、(1)Cross-chain smart contract、(2)Cross-chain Transaction、(3)Atomic commit Protocolに項分けして説明する。
【0019】
(1)Cross-chain smart contract
Cross-chain smart contractについて、(1―1)~(1-2)に項分けして説明する。
(1-1)Contract Handler及びステイトストア
Contract Handlerには、複数のコントラクト関数を実装可能である。各コントラクト関数には、スマートコントラクトの状態を管理するためのステイトストアが与えられる。各関数は呼び出し引数や記述したロジックに従い、決定性のある状態遷移を行い、その状態をこのステイトストアに永続化する。ステイトストアはGet(K), Set(K,V), Delete(K)といった一般的なキーバリューストア(Key-Value Store)の操作をサポートする。Get(K)は、「Kで指定したキーに対応するバリューを返す」の意味である。Set(K,V)は、「Kで指定したキーに対してVで指定したバリューをセットする」の意味である。Delete(K)は、「Kで指定したキーと対応するバリューを削除する」の意味である。単一のチェーンにおいて逐次的にコントラクト関数を実行する場合には、これらの操作のたびに、もしくは関数の実行後にトランザクションによる変更をストアに反映すれば良いが、トランザクションが処理するコントラクト関数が複数チェーンに分散している場合、すべてのコントラクトの状態遷移をアトミックに行う必要がある。利用するアトミックコミットプロトコルにより異なるが、少なくとも1つのコントラクト関数の実行はPrepare状態に遷移する必要がある。つまり、そのようなコントラクトにおいては他の並行するトランザクションと競合する可能性が発生するため、トランザクションの直列化可能性を保つための仕組みがステイトストアに必要となる。Cross Frameworkでは、デフォルトのステイトストアの実装として各変更操作に対応するロックを取得する単純なストアを提供している。このストアは、各変更操作に対して以下のロックを取得するように構成することができる。
【表1】
【0020】
(1-2)Cross-chain calls
各チェーンにおいて、Contract Handlerで定義されたコントラクト関数は、それぞれ別のチェーンのコントラクト関数を呼び出し可能であり、これをCross-chain callsと定義する。これにより、Cross-chain Transactionにおいて、単に複数の関数をアトミックに実行できるだけでなく、チェーン間の価値の移転などといったより複雑なプロトコルを含むスマートコントラクトの開発が可能となる。
【0021】
(2)Cross-chain Transaction
Cross-chain Transaction について、(2-1)~(2-4)に項分けして説明する。
(2-1)Cross-chain Transactionは、IBC channelで接続されたチェーン間で実行可能な分散トランザクションである。Cross Frameworkでは、トランザクションにおけるデータの整合性を保証するために複数のアトミックコミットプロトコルをサポートし、またそれを実現するためのロックメカニズムを実装したステイトストアを提供している。トランザクションはユーザからリクエストを受けたチェーンがその内容を検証し、指定されたチェーンに対してコントラクト呼び出しリクエストを含むパケットを送信することで開始される。ユーザのトランザクション開始のリクエストを受け取るチェーンをInitiator chainと定義する。Initiator chainは、リクエストを受け取ると、指定された形式に従ってアトミックコミットのフローを実行する。例えば、アトミックコミットとして2層コミットを選択した場合、Initiator chainが2層コミットのコーディネータの役割を担い、ユーザのリクエストに含まれる各チェーンのコントラクト関数の呼び出しを行うとともに、その結果を管理し、最終的なコミットの可否を決定し、その決定を受け取った各パーティシパントチェーンがコミットもしくはアボートを行う。
【0022】
(2-2)Cross-chain transactionの作成と検証
Cross-chain transactionを開始するために、ユーザは以下の(i)~(iv)の要素を持つMsgInitiate を作成し、Initiator chainに提出する。
(i)Type
これはコミットフローの種別のことである。各コミットフローの詳細については、後述する。
(ii)Nonce
これはナンス値のことである。
(iii)Timeout
トランザクションが取り込むことが可能なBlock heightもしくはBlock timeの上限値のことである。
(iv)コントラクトトランザクション
これは、各コントラクトの呼び出し情報のことであり、以下の(iv-1)~(iv-6)からなる構造体の配列となっている。
(iv-1)ChainID
このコントラクトトランザクションを処理するチェーンを示すIDのことである。
(iv-2)Signers
このコントラクトのトランザクション作成に承認が必要となるアカウントの配列のことである。
(iv-3)Call Info
コントラクトの識別子、関数名、引数などを含む呼び出し情報のことである。フォーマットはContract handlerの仕様に依存する。
(iv-4)State Constraint
このコントラクトが参照する状態、更新後の状態に対して制約をかけることを意味する。ただし、これはオプションであり、省略することもできる。
(iv-5)Return Value
このコントラクトの実行の戻り値のことである。ただし、これはオプションであり、省略することもできる。
(iv-6)Links
このコントラクトの実行時に参照される他のコントラクト呼び出し結果のことである。ただし、これはオプションであり、省略することもできる。
【0023】
ここで、アカウントは、トランザクションの実行者を定義する概念である。アカウントが適切であるかは、トランザクションの内容に応じて検証される。トランザクションの検証ロジック、およびアカウントによる承認とその識別子の仕様はブロックチェーンやDLTごと様々である。
Cross Frameworkでは、トランザクションの開始の際にSigners (上述の(iv-2))で指定された全てのアカウントの承認が必要であるが、各アカウントの承認方法およびそれぞれの検証方法は任意のロジックを実装可能であり、利用するブロックチェーンやDLTに適した方法を選択することが推奨される。例えば、既存の実装としてCosmos-SDKのauth/StdTxの署名検証を用いたものがある。
【0024】
MsgInitiate を受け取ったInitiator chainは、承認が必要な全てのアカウントにより、このCross-chain transactionが承認されたことを確認する必要がある。この検証フローには、以下に示すいくつかのパターンがある。
パターン1:アカウントが鍵を持つ場合、Initiator chainに対しMsgInitiate の提出とともに各アカウントによる署名を提出してそれを検証する。
パターン2:アカウントが鍵を持たない場合、Initiator chain上に提出されたMsgInitiate の提出により発行されたトランザクションを示すIDに対して、各アカウントが非同期に承認する。
パターン3:アカウントが鍵を持たない、かつ、Initiator chainにアクセスできない場合、各アカウントはContract Moduleを含むチェーンに対して承認を行い、その結果をパケットを経由してInitiator chain上で検証する。これはパーミッションドなチェーンに適したフローである。
上記のいずれかの方式で検証をした後にInitiator chainは、Type に従いアトミックなコミットを行うフローを開始する。コントラクトトランザクションに指定された各コントラクトのトランザクションを含めたパケットをそれぞれのチェーンのContract handlerに送信する。その際のコミットのフローの種類とそれぞれの詳細については、後述する(3)のアトミックコミットプロトコルの章で説明する。コミットフローの種類にかかわらず、MsgInitiate で宣言された各コントラクトの関数の実行が全て成功し、またState Constraint などの実行時の状態に対する制約がある場合は、それを満たす場合のみ全てのトランザクションがコミットされることが保証されている。
【0025】
(2-3)State constraintsとSimulation
State constraintsは、トランザクションを実行する際の事前状態、事後状態、またはその両方に対して制約をかけるための機能である。この機能は、コントラクト関数の実行時に厳密な状態遷移を必要とする場合に役立つ。アプリケーションからコントラクト関数を実行するトランザクションをリクエストする際に、その処理を一度だけ実行することをより厳密に保証することができる。
Simulationはトランザクションの生成なしでコントラクトの実行を行うことができる機能である。これを利用してState constraintsで指定するための制約を生成することが可能である。Simulateのリクエスト時にStateConstraintType を指定することで制約として参照可能なステイトストアの状態を返信する。ユーザはMsgInitiate の作成時にこれをコントラクトトランザクションのStateConstraintに指定することでSimulation時の状態を利用した制約をトランザクションにかけることができる。
【0026】
(2-4)LinkとCross-chain calls
上述のCross-chain callsで紹介したような他のContract handlerの外部のコントラクト関数を呼び出すには以下の要素a~cを考慮する必要がある。
a. 各Contract Handlerのコントラクト関数はそれぞれのチェーン上で並行して実行される場合がある。
b. 外部のコントラクト関数の実行はその呼び出し元の関数の実行とアトミックに行われる必要がある。
c. 外部のコントラクト関数の実行による返り値を呼び出し元関数で参照できる。
これらのうち、a, bはアトミックコミットプロトコルにより実現される。Linkは前記のcの要素を満たすための機能である。
Linkは以下の構造を持つ。
type Link struct {
SrcIndex uint8
}
SrcIndex により、呼び出し先のコントラクト関数の実行を処理するトランザクションを示すコントラクトトランザクションのインデックスを指定する。
MsgInitiate を受け取ったInitiator chainは、コントラクトトランザクションの各要素のLinkの情報を呼び出し先のコントラクト関数のChainIDと返り値を含むオブジェクト ConstantValueObject として解決し、Linkの参照元のコントラクト関数内の外部呼び出しはこのConstantValueObject に置き換えられる。
そして、以下のようなステップ1~3で実行される。
ステップ1:Contract Handlerの外部コントラクトを参照する関数は呼び出し情報に加え、参照先チェーンを示すChainID を設定する必要がある。これはChannelIDやInterchain DNSのドメインネームなどで実装される。
type ChainID interface {
Equal(ChainID) bool
}
ステップ2:Initiator chainは、コントラクトトランザクションの各要素のLinks の情報を元に呼び出し先のコントラクト関数のChainIDと返り値を含むオブジェクトConstantValueObject として解決する。
type ConstantValueObject struct {
ChainID ChainID
Value []byte
}
ステップ3:Initiator chainは、アトミックコミットフローに従い、コーディネータとしてコントラクトトランザクションとステップ2のConstantValueObject および参照先の呼び出し情報をパケットのデータとしてセットし、各チェーンのContract handlerに送信する。
ステップ4:チェーンのContract handlerは、受け取ったパケットの呼び出し情報に従い、コントラクト関数を実行する。関数内の外部コントラクト関数の呼び出し時に、プログラム中の参照先のChainIDおよび呼び出し情報と比較し、一致している場合、ConstantValueObject のValue を返す。一致していない場合、その関数の処理は失敗となる。
【0027】
(3)アトミックコミットプロトコル
アトミックコミットプロトコルは、複数の操作の集合を1つの処理として実行可能にするプロトコルであり、代表的なものとして例えば2層コミット及び3層コミットが用いられる。Cross Frameworkでは、Simple commit protocol, Two-phase commit protocolの2種類のプロトコルを用いることができる。Simple commit protocolはパーティシパントが2つに限られる。Two-phase commitはパーティシパントが3つ以上であってもサポートすることができる。
【0028】
Two-phase commit protocol, Simple commit protocol についてそれぞれ以下の(3-1),(3-2)で詳細に説明する。
(3-1)Two-phase commit protocol
2層コミット(2PC)では、あるチェーンをコーディネータとして、他のコントラクト関数の実行とコミットを行うチェーン群をパーティシパントとして次のようなフローでコミット、もしくはアボート状態に至る。コーディネータがパーティシパントにコミット準備を要求し、すべてのパーティシパントが成功した場合には、全パーティシパントにコミット要求を出す。コミット準備に1人でも失敗した場合には、全パーティシパントにアボート要求を出す。
【0029】
図1を参照しながら、コミットのフローを説明する。同図において、Xはコーディネータ, A, B, Cは各パーティシパント,矢印はフローの各ステップのリクエストの向きを示している。
ステップ1:Initiate step
ユーザは、トランザクション開始のリクエストである“MsgInitiate”をInitiator chainに提出する。Initiator chainは2層コミットのコーディネータとして“MsgInitiate”に指定されたコントラクトの関数を含むパーティシパントチェーンに“Prepare”を要求するパケットである“PacketPrepare”を送信する
ステップ2:Prepare step
各パーティシパントチェーンは、“PacketPrepare”を受け取ると、上述の「(2-2)Cross-chain transactionの作成と検証」で説明したコントラクトトランザクションで指定されるコントラクト関数を実行する (ただし、この際に実際のコミットはされていない)。実行に成功した場合、ステイトストアに対しての変更操作の保存と変更対象へのロックを取得する。このロックメカニズムの詳細は、上述の「(1-1)Contract Handler及びステイトストア」で説明したから、説明を繰り返さない。最後にパケット“PacketPrepareAcknowledgement”の“Status”に成功を示す“PREPARE_RESULT_OK”を
セットして返す。
一方、実行に失敗した場合、変更操作を破棄して、パケット“PacketPrepareAcknowledgement”の“Status”に失敗を示す“PREPARE_RESULT_FAILED”をセットして返す。
ステップ3:Confirm step
コーディネータチェーンは、Prepare step(ステップ2)において各パーティシパントチェーンが送信するACK“PacketPrepareAcknowledgement”を受け取る。各ACKの処理については、以下の1~3のような状態遷移を行う。
1. 次のACKの受信待ち
2. 受信したACKの“Status”が“PREPARE_RESULT_OK”かつ未受信のACKがある場合、1に遷移する。すべて受信した場合、各パーティシパントチェーンにコミット要求をするために“PacketCommit”の“Status”に”COMMIT”をセットして送信し、ステップ4のCommit stepに進む。
3. 受信したACKの“Status”が“PREPARE_RESULT_FAILED”の場合、各パーティシパントチェーンにアボート要求をするために“PacketCommit”の“Status”に“ABORT”をセットして送信し、ステップ4のCommit stepに進む
ステップ4:Commit step
各パーティシパントチェーンは、コミット要求があった場合、Prepare step(ステップ2)で保存していた変更操作をステイトストアに適用し、ロックを削除してコーディネータチェーンに完了済みを示す“PacketCommitAcknowledgement”を送信する。各パーティシパントチェーンは、アボート要求があった場合、Prepare step(ステップ2)で保存していた変更操作とロックを削除してコーディネータチェーンに完了済みを示す“PacketCommitAcknowledgement”を送信する。
【0030】
(3-2)Simple commit protocol
このSimple commit protocolは、パーティシパントの数に対する制約があるアトミックコミットのプロトコルである。2層コミットとは異なり、パーティシパントは2つに制限され、またそれらのどちらか一方がコーディネータの役割を担う必要がある。
図2を参照しながら、コミットのフローを説明する。
ステップ1:Initiate
ユーザは、Cross-chain transactionを開始するために“MsgInitiate”をInitiator chainに提出する。このSimple commit protocolのフローでは、Initiator chainはコーディネータとパーティシパントの役割を兼ねる。
ステップ2: Prepare(A)
Aは“MsgInitiate”で指定されたコントラクト関数をPrepare実行する。実行に成功した場合、ステイトストアに対しての変更操作の保存と変更対象へのロックを取得する。このロックメカニズムの詳細は、上述の「(1-1)Contract Handler及びステイトストア」で説明したから、説明を繰り返さない。その後、Bのコントラクト関数の呼び出し情報を含む、パケット“PacketDataCall”を作成しBとのチャンネルに送信する。実行に失敗した場合、このトランザクションの処理をアボートして終了する。
ステップ3: Commit(B)
Bは“PacketDataCall”を受け取り、指定されたコントラクト関数を実行する。実行に成功した場合、Commitを行う。その後、“PacketCallAcknowledgement“に“Status”として“COMMIT_OK”をセットして、Aとのチャンネルに送信する。実行に失敗した場合、アボートを行う。その後、“PacketCallAcknowledgement”に“Status”として“COMMIT_FAILED”をセットして、AとのChannelに送信する。
ステップ4:Commit(A)
Aは“PacketCallAcknowledgement”を受け取り、その“Status”を確認する。“Status”が“COMMIT_OK”の場合、AはPrepare時に保存していた変更操作をステイトストアに適用し、ロックを削除する。“Status”が“COMMIT_FAILED”の場合、AはPrepare時に保存していた変更操作を破棄し、ロックを削除する。
【発明の効果】
【0031】
本発明によれば、2way-pegのように、例えば、資金側で証券側のルール等がチェックできないため、再度証券トークン側でチェックした際に、他の取引と競合して取引が不成立になるなどの問題を回避することができる。
【図面の簡単な説明】
【0032】
図1】コミットのフローである。
図2】コミットのフローである。
図3】スマートコントラクトを実行するフローである(第1実施形態)。
図4A】模擬コードの模式図である(前半)。
図4B】模擬コードの模式図である(後半)。
図5】模擬コードの模式図である。
図6】スマートコントラクトを実行するフローである(第3実施形態)。
【発明を実施するための形態】
【0033】
(第1実施形態)
上記解決手段で説明した設計思想に基づく本発明の取引システムの一実施形態について、図3を参照しながら説明する。図3は、証券取引のシーケンスフロー(言い換えると、スマートコントラクトを実行するフロー)である。
【0034】
本実施形態の取引システムは、ブロックチェーンとしての証券チェーン11(第1のブロックチェーンに相当する)と、ブロックチェーンとしての決済チェーン12(第2のブロックチェーンに相当する)とを含む。コーディネータ11b(コーディネータ部に相当する)、パーティシパント11c(第1ユーザ部に相当する)は証券チェーン11側に配設され、パーティシパント12c(第2ユーザ部に相当する)は決済チェーン12側に配設される。本実施形態では、二人のユーザー(以下ユーザーA、Bとする)間において、証券チェーン上でユーザーAからユーザーBへ100口の証券トークンが移転され、決済チェーン上でユーザーBからユーザーAへ10万円分の決済トークンが移転される指図としている。その際に、証券チェーン11及び決済チェーン12間のアトミック性を持つ安全なスマートコントラクトの呼び出しが可能なフレームワークが提供される。
【0035】
コーディネータ11b、パーティシパント11c、パーティシパント12c、リレイアー13はそれぞれコンピュータにより実現され、コーディネータ11b、パーティシパント11c、パーティシパント12cは分散型のネットワークを構成している。コーディネータ11b及びパーティシパント11c,12cは互いに、リレイアー13を介して交信する。なお、ユーザーA及びBはそれぞれパーティシパント11c及びパーティシパント12cに対応している。
【0036】
コーディネータ部11bは層構造としてIBC Module及びCross Moduleを備える。
【0037】
パーティシパント11cは層構造としてIBC Module、Cross Module、Contract Moduleを備えている。証券チェーン11側のContract Module を構成するContract Handlerには証券トークンの発行コントラクト、移転コントラクトが定義されている。模擬コードを前半と後半に分けてそれぞれ図4A及び図4Bに示す。パーティシパント12cは、パーティシパント11cと同様に、層構造としてIBC Module、Cross Module、Contract Moduleを備えている。決済チェーン12側のContract Module を構成するContract Handlerには、決済トークンの発行コントラクト、移転コントラクトが定義されている。模擬コードを図5に示す。
【0038】
スマートコントラクトが実行される前提として、以下の処理が行われているものとする。証券チェーン11上で、ユーザーAからユーザーBへの証券トークンを移転するために呼び出すコントラクト関数(図4Aにおけるtransfer)並びに、決済チェーン12上で、ユーザーBからユーザーAへの決済トークンを移転するために呼び出すコントラクト関数(図5におけるtransfer)を引数にもつトランザクション(MsgInitiate)が作成され、コーディネータ11bに送信される。以上の処理が実行されていることを前提として、以下のシーケンスフローは実行される。本シーケンスフローは、主として「準備フェーズ」及び「コミットフェーズ」からなる二つのフェーズに分割することができる。
【0039】
コーディネータ11bは、受信したトランザクション(MsgInitiate)を確認してトランザクションの形式に問題がないか検証する。(ステップS1)。一つでも問題があった場合は、トランザクションを直ちに破棄して、処理を終了する。問題がない場合は、処理はステップS2に進む。
【0040】
コーディネーター11bは、検証したトランザクション(MsgInitiate)に基づきパケット(PacketPrepare)を作成し、リレイアー13を経由して証券チェーン11のパーティシパント11c及び決済チェーン12のパーティシパント12cに送信する(ステップS2、ステップS3)。このパケット(PacketPrepare)が請求項1に記載の「第1のパケット」に相当する。
【0041】
証券チェーン11のパーティシパント11cは、リレイアー13経由で受信したパケット(PacketPrepare)を確認して、100口の証券トークンをユーザーAからユーザーBに移転することができるか否かを検証する(ステップS4)。具体的には、受け取ったパケット(PacketPrepare)内で指定されているコントラクト関数を実行する(この際、実際にコミットはされないことに注意する)。
【0042】
実行に失敗した場合、変更操作を破棄して、証券チェーン11のコーディネータ11bに対して、パケット(PacketPrepareAcknowledgement)の“Status”に“PREPARE_RESULT_FAILED”をセットして(言い換えると、“Status”を実行不可にセットして)リレイアー13を介して送信する(ステップS6、S10)。ここで送信されるパケット(PacketPrepareAcknowledgement)が請求項1に記載の「第3のパケット」に相当する。実行に成功した場合、自身のステイトストアへの変更操作の保存と変更対象へのロックを取得する(ステップS5)。ロックを取得できた後に、証券チェーン11のコーディネータ11bに対して、パケット(PacketPrepareAcknowledgement)の“Status”に “PREPARE_RESULT_OK”をセットして(言い換えると、“Status”を実行可能にセットして)リレイアー13を介して送信する(ステップS6、S10)。ここで送信されるパケット(PacketPrepareAcknowledgement)が請求項1に記載の「第2のパケット」に相当する。
【0043】
決済チェーン12のパーティシパント12cは、リレイアー13経由で受信したパケット(PacketPrepare)を確認して、証券トークンの対価として10万円分の決済トークンをユーザーBからユーザーAに移転することができるか検証する(ステップS7)。具体的には、受け取ったパケット(PacketPrepare)内で指定されているコントラクト関数を実行する(この際、実際にコミットはされないことに注意する)。
【0044】
実行に失敗した場合、変更操作を破棄して、証券チェーン11のコーディネータ11bに対して、パケット(PacketPrepareAcknowledgement)の“Status”に“PREPARE_RESULT_FAILED”をセットして(言い換えると、“Status”を実行不可にセットして)リレイアー13を介して送信する(ステップS9、S10)。ここで送信されるパケット(PacketPrepareAcknowledgement)が請求項1に記載の「第5のパケット」に相当する。実行に成功した場合、自身のステイトストアへの変更操作の保存と変更対象へのロックを取得する(ステップS8)。ロックを取得できた後に、証券チェーン11のコーディネータ11bに対して、パケット(PacketPrepareAcknowledgement)の“Status”に“PREPARE_RESULT_OK”をセットして(言い換えると、“Status”を実行可能にセットして)リレイアー13を介して送信する(ステップS9、S10)。ここで送信されるパケット(PacketPrepareAcknowledgement)が請求項1に記載の「第4のパケット」に相当する。
【0045】
上述の処理によって、コーディネーター11bは、パケット(PacketPrepareAcknowledgement)を各パーティシパント(本実施形態では、パーティシパント11c、12c)から受け取る。
【0046】
コーディネーター11bは、受け取ったパケット(PacketPrepareAcknowledgement)を確認して(ステップS11)、“Status”に応じて以下の処理を行う。すなわち、「Status=PREPARE_RESULT_FAILED」のパケットを一つでも受け取った場合には、アボート要求をするためにステップS12に進む。すべてのパーティシパント(本実施形態では、パーティシパント11c、12c)から「Status=PREPARE_RESULT_OK」のパケットを受信した場合には、コミット要求をするためにステップS12に進む。
【0047】
コミットフェーズはステップS12から開始される。ステップS12において、アボート要求を行う際には、パケット(PacketCommit)を作成し、“Status”を“ABORT”に設定して、全てのパーティシパント(本実施形態では、パーティシパント11c、12c)にリレイアー13を介してマルチキャストする(ステップS13、S14、S16)。このアボート要求を行うためのパケット(PacketCommit)が請求項1に記載の「第7のパケット」に相当する。ステップS12において、コミット要求を行う際には、パケット(PacketCommit)を作成し、“Status”を“COMMIT”に設定して、全てのパーティシパント(本実施形態では、パーティシパント11c、12c)にリレイアー13を介してマルチキャストする(ステップS13、S14、S16)。このコミット要求を行うためのパケット(PacketCommit)が請求項1に記載の「第6のパケット」に相当する。
【0048】
ステップS14において、パーティシパント11cは、受信したパケット(PacketCommit)のStatusが“COMMIT”である場合、準備フェーズで保存していた変更操作をステイトストアに適用し、ロックを削除してコーディネータ11bに完了済みを示すパケット(PacketCommitAcknowledgement)を送信する(ステップS15,S18)。
このコミット時に送信されるパケット(PacketCommitAcknowledgement)が、請求項1に記載の「第8のパケット」に相当する。
【0049】
一方、受信したパケットの“Status”が“ABORT”である場合、準備フェーズで保存していた変更操作とロックを削除してコーディネータ11bに完了済みを示すパケット(PacketCommitAcknowledgement)を送信する(ステップS15,S18)。このアボート時に送信されるパケット(PacketCommitAcknowledgement)が、請求項1に記載の「第9のパケット」に相当する。
ステップS16及びS17において行われる処理はそれぞれ、ステップS14及びS15において行われる処理と同様であるから、詳細な説明を省略する。
【0050】
このように、本実施形態によれば、証券チェーン11のパーティシパント11c及び決済チェーン12のパーティシパント12cのそれぞれに実現可能性を問い合わせており、双方で実現可能性が確認できた場合にだけ、複数チェーンでのコントラクト関数の呼び出し結果をコミットする。したがって、2way-pegのように、資金側で証券側のルール(例えば、譲渡人数が上限に達していないか、移転先のユーザーはKYC済かなど)等がチェックできないため、再度証券チェーン側でチェックした際に、他の取引と競合して取引が不成立になるなどの問題を回避することができる。
【0051】
(第2実施形態)
上述の第1実施形態で説明した処理は、取引のアトミック性が求められる他の取引(例えば、遺言信託)にも用いることができる。この場合、証券チェーン11を相続チェーン(第1のブロックチェーンに相当する)、決済チェーン12を資産チェーン(第2のブロックチェーン)と読み替えて、遺言信託の取引に適用することができる。
【0052】
被相続人は、信託会社に遺言書や資産を提示して、これが相続チェーン上にスマートコントラクトして登録される。従来は、被相続人が死去した場合に、相続人から信託会社に連絡が入り、信託会社は資産管理会社に資産を問い合わせて、遺言を実行できるか否かを確認しなければならなかった。
【0053】
本実施形態では、相続チェーン上に登録された遺言書に基づく資産の移動が可能かどうかを資産チェーンに問い合わせる際に、アトミック性が担保されているため、2way-pegを用いる場合と異なり、遺産分割の条件に当てはまらず、覆って遺産分割が不可能になるなどのチェックを行う必要がなくなる。また、信託会社は、遺言内容の執行と資産分割履行の双方の実行結果を確認することができる。
【0054】
(第3実施形態)
図6のフローチャートを参照しながら、本発明の第3実施形態について説明する。本実施形態は、コーディネータ11b及びパーティシパント11cが行う処理を、兼用部11bcが行う点で第1実施形態と相違する。その結果、一方のパーティシパントはコミット準備を省略することができる。また、第1実施形態と同様に、証券取引を例にして本実施形態の処理を説明する。ただし、本実施形態で説明した処理は、取引のアトミック性が求められる他の取引(例えば、遺言信託)にも用いることができる。この点については、第2実施形態に詳細を記載しているから、説明を省略する。本実施形態の取引システムは、一方のパーティシパントのコミット準備を省略することができるコミット方式(Simple Commit protocol)に基づき設計されている。このコミット方式は、パーティシパントの数が2つに制限されている点で、第1実施形態の2層コミットと相違する。また、いずれかのパーティシパントがコーディネータの役割を担う。
【0055】
兼用部11bcはコンピュータにより実現される。兼用部11bc及びパーティシパント12cは分散型のネットワークを構成している。兼用部11bc及びパーティシパント12cは互いに、リレイアー13を介して交信する。
【0056】
ステップS101の前に行う処理は、第1実施形態と同じであるから、説明を繰り返さない。ステップS101において、兼用部11bcは、受信したトランザクション(MsgInitiate)を確認してトランザクションの形式に問題がないか検証する。一つでも問題があった場合は、トランザクションを直ちに破棄して処理を終了する。
【0057】
ここで、本実施形態では、兼用部11bcがコーディネータとパーティシパントとの役割を兼用しているため、このタイミングで、100口の証券トークンをユーザーAからユーザーBに移転可能かをパーティシパントとして検証する(ステップS102)。
【0058】
具体的には、受け取ったトランザクション(MsgInitiate)内で指定されているコントラクト関数を実行する(この際、実際にコミットはされないことに注意する)。実行に失敗した場合、このトランザクションの処理をアボートして終了する。
【0059】
実行に成功した場合、兼用部11bcは、パーティシパントとして自身のステイトストアへの変更操作の保存と変更対象へのロックを取得する(ステップS103)。ロックを取得できた後に、決済チェーンのコントラクト関数の呼び出し情報を(本実施形態では、決済チェーン上での10万円分の決済トークンをユーザーBからユーザーAへ移転するために呼び出すコントラクト関数)含むパケット(PacketDataCall)を作成し、パーティシパント12Cに送信する(ステップS104,S105)。このパケットが、請求項5に記載の「第1のパケット」に相当する。
【0060】
ステップS106において、パーティシパント12cは、パケット(PacketDataCall)を受け取り、指定されたコントラクト関数を実行する。実行に成功した場合、コミットを行う(ステップS107)。その後、パケット(PacketCallAcknowledgement)の“Status”に“COMMIT_OK”をセットして兼用部11bcに送信する(ステップS108,S109)。このコミット時に兼用部11bcに送信するパケット(PacketCallAcknowledgement)が、請求項5に記載の「第2のパケット」に相当する。実行に失敗した場合、アボートを行う。その後、パケット(PacketCallAcknowledgement)の“Status”に“COMMIT_FAILED”をセットして兼用部11bcに送信する(ステップS108,S109)。このアボート時に兼用部11bcに送信するパケット(PacketCallAcknowledgement)が、請求項5に記載の「第3のパケット」に相当する。
【0061】
兼用部11bcは、パーティシパントが行う処理として、パーティシパント12cから受信したパケット(PacketCallAcknowledgement)を確認し、“Status”がCOMMIT_OKならコミットする(保存していた変更操作をステイトストアに適用し、ロックを削除する)。“Status”がCOMMIT_FAILEDならアボートする(保存していた変更操作とロックを削除する)。
【0062】
このように、本実施形態によれば、証券チェーン11及び決済チェーン12において取引のアトミック性が担保されている。したがって、2way-pegのように、資金側で証券側のルール(例えば、私募に限定)等がチェックできないため、再度証券トークン側でチェックした際に、他の取引と競合して取引が不成立になるなどの問題を回避することができる。
【0063】
(第3実施形態の変形例)
本実施形態では、証券チェーン11側のパーティシパントにコーディネータとしての役割を担当させたが、決済チェーン12側のパーティシパント12cにコーディネータとしての役割を担当させてもよい。本実施形態を遺言信託のユースケースに適用する場合には、相続チェーン側に兼用部11bc、資産チェーン側にパーティシパント12cを実装することができる。ただし、相続チェーン側にパーティシパント12c、資産チェーン側に兼用部11bcを実装してもよい。
【符号の説明】
【0064】
11 証券チェーン、相続チェーン
11b コーディネータ
11c、12c パーティシパント
12 決済チェーン、資産チェーン
13 リレイアー










図1
図2
図3
図4A
図4B
図5
図6
【手続補正書】
【提出日】2021-08-13
【手続補正1】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項1】
第1のブロックチェーンと第2のブロックチェーンとの間で取引に関わるスマートコントラクトをアトミックに実行するための取引システムであって、
前記第1のブロックチェーン側のコーディネータ部及び第1ユーザ部と、
前記第2のブロックチェーン側の第2ユーザ部と、
を有し、
前記コーディネータ部は、コントラクト関数が指定された所定のトランザクションに基づき作成した第1のパケットを前記第1及び第2ユーザ部に送信し、
前記第1ユーザ部は、前記コーディネータ部から受信した前記第1のパケットのコントラクト関数の実行に成功した場合には、自身のステイトストアへの変更操作の保存と変更対象へのロックを取得して、ステータスを実行可能にした第2のパケットを前記コーディネータ部に送信し、実行に失敗した場合には、自身のステイトストアへの変更操作を破棄して、ステータスを実行不可にした第3のパケットを前記コーディネータ部に送信し、
前記第2ユーザ部は、前記コーディネータ部から受信した前記第1のパケットのコントラクト関数の実行に成功した場合には、自身のステイトストアへの変更操作の保存と変更対象へのロックを取得して、ステータスを実行可能にした第4のパケットを前記コーディネータ部に送信し、実行に失敗した場合には、自身のステイトストアへの変更操作を破棄して、ステータスを実行不可にした第5のパケットを前記コーディネータ部に送信し、
前記コーディネータ部は、前記第1及び第2ユーザ部から受信したパケットの実行可否検証結果を元に、全てのパケットのステータスが実行可能な場合にはコミット要求を行うため第6のパケットを前記第1及び第2ユーザ部に送信し、少なくとも1つのパケットのステータスが実行不可の場合にはアボート要求を行うため第7のパケットを前記第1及び第2ユーザ部に送信し、
前記第1及び第2ユーザ部は、前記コーディネータ部から前記第6のパケットを受信すると、事前に保存していた変更操作をステイトストアに適用し、ロックを削除して第8のパケットを前記コーディネータ部に送信し、前記コーディネータ部から前記第7のパケットを受信すると、事前に保存していた変更操作とロックを削除して第9のパケットを前記コーディネータ部に送信することを
特徴とする取引システム。
【請求項2】
前記コーディネータ部と、前記第1及び第2ユーザ部との交信を仲介するリレイアーを有することを特徴とする請求項1に記載の取引システム。
【請求項3】
前記第1のブロックチェーンは証券チェーンであり、前記第2のブロックチェーンは決済チェーンであることを特徴とする請求項1又は2に記載の取引システム。
【請求項4】
前記第1のブロックチェーンは相続チェーンであり、前記第2のブロックチェーンは資産チェーンであることを特徴とする請求項1又は2に記載の取引システム。
【請求項5】
第1のブロックチェーンと第2のブロックチェーンとの間で取引に関わるスマートコントラクトをアトミックに実行するための取引システムであって、
前記第1のブロックチェーン側に設けられるコーディネータ部及び第1ユーザ部を兼用する兼用部と、
前記第2のブロックチェーン側の第2ユーザ部と、
を有し、
前記兼用部は、コントラクト関数が指定された所定のトランザクションの実現が可能な場合には、前記第1ユーザ部として自身のステイトストアへの変更操作の保存と変更対象へのロックを取得して、前記第2ユーザ部のコントラクト関数の呼び出し情報を含む第1のパケットを前記第2ユーザ部に送信し、実現が不可能な場合には、処理を終了し、
前記第2ユーザ部は、前記兼用部から受信した前記第1のパケットに基づき、コントラクト関数を実行し、実行に成功した場合にはコミットを行うとともに、ステータスを実行可能にした第2のパケットを前記兼用部に送信し、実行に失敗した場合にはアボートを行うとともに、ステータスを実行不可にした第3のパケットを前記兼用部に送信し、
前記兼用部は、前記第2ユーザ部から前記第2のパケットを受信した場合には、前記第1ユーザ部として事前に保存していた変更操作をステイトストアに適用し、ロックを削除し、前記第2ユーザ部から前記第3のパケットを受信した場合には、前記第1ユーザ部として事前に保存していた変更操作を破棄し、ロックを削除することを特徴とする取引システム。
【請求項6】
前記兼用部と、前記第2ユーザ部との交信を仲介するリレイアーを有することを特徴とする請求項5に記載の取引システム。
【請求項7】
前記第1のブロックチェーンは証券チェーン及び決済チェーンのうちいずれか一方のチェーンであり、前記第2のブロックチェーンは他方のチェーンであることを特徴とする請求項5又は6に記載の取引システム。
【請求項8】
前記第1のブロックチェーンは相続チェーン及び資産チェーンのうちいずれか一方のチェーンであり、前記第2のブロックチェーンは他方のチェーンであることを特徴とする請求項5又は6に記載の取引システム。