Overview
Cross Frameworkは次のようなコンポーネントから構成される。
Tx Initiator
Tx InitiatorはClientから提出されたTransaction(MsgInitiateTx)を受け付ける。提出後、基本的なバリデーションの後に、Cross-chain callsのためにContract Transaction間のLink処理を行う。
次に、提出トランザクションごとにユニークなTxIDを生成し、Transactionに含まれるContract Transactionの認証に必要なAccountを取り出し、Authenticatorを呼び出す。トランザクションは、Authenticatorにより全ての必要な認証が完了するまでブロックされる。完了後、Tx Runnerによりトランザクションは開始される。
Transactionの提出の詳細はInititate Transactionでも述べられる。
Authenticator
Authenticatorはトランザクションの認証処理の提供とその状態の管理を行う。認証方式は、実行チェーン上の認証の他、IBCを用いた他チェーン上での方式など複数サポートされる。
各認証処理はトランザクションの提出チェーンで同期的に行われるだけでなく、非同期での処理や別チェーンからのPacketにより処理される場合がある。
そのため、認証時には対象のトランザクションを識別するためにTxIDを指定する必要がある。認証方式の詳細はAuthenticationで述べる。
Tx Runner
Tx Runnerは、Authenticatorにより認証が成功したトランザクションを実行する。トランザクションは複数チェーン上で実行されるため、それらをAtomicに実行できなければならない。そのため、Atomic commit protocolをサポートしている。e.g. Two-phase commit protocol, Simple commit protocol
TransactionがどのCommit protocolを用いるかは、MsgInitiateTx
で指定された方式に従う。提出ChainはそのCommit protocolのcoordinatorとなり、他チェーンとIBC Channelを通してメッセージングを行う。そして、Commit or Abortの決定を行い、各参加者にその結果をリクエストする。
Contract Manager
Contract Managerは、Contractを実装するContract ModuleとState Storeを管理し、その状態変更を操作するAPIを実装する。これらのAPIは、Commit protocolのフローの状態に応じてTx Runnerにより呼び出される。
Contract Module
Contract Moduleは、Frameworkを利用する開発者が実装するModuleである。
開発者は以下のInterfaceを実装するModuleを実装する。
type ContractModule interface {
OnContractCall(ctx context.Context, signers []authtypes.Account, callInfo txtypes.ContractCallInfo) (*txtypes.ContractCallResult, error)
}
TxRunnerにより、呼び出し情報、認証情報とともにOnContractCall
が呼ばれることでContractは実行される。Contractは一般的には、signers
で指定されたAccountの認証方式が期待したものであることを確認する必要がある。Contract Moduleの実装例はここで確認できる。