本稿について
COSMOSのホワイトペーパー、最終更新日: 2018/4/7時点のものを対象とします。本稿では「Appendix」の日本語訳を掲載します。
原文はこちらになります。
スポンサードサーチ
Appendix(続き)
ABCIの仕様
ABCIは3つの主要なメッセージタイプから成り、メッセージはコアからアプリケーションへ伝送される。アプリケーションは対応する応答メッセージを返す。
「AppendTx」メッセージはアプリケーションの多くの仕事をこなす。ブロックチェーンの各トランザクションはこのメッセージで伝送される。アプリケーションはAppendTxで受け取った各トランザクションを現在のステート、アプリケーションプロトコル、トランザクションの暗号認証情報に照らして検証する必要がある。次に、検証を終えたトランザクションはアプリケーションステートを更新する必要がある。これは値をキーバリューストアに入れたり、UTXOデータベースを更新することにより行う。
「CheckTx」メッセージはAppendTxと似ているが、これはトランザクションの検証のみに用いられる。Tendermint CoreのメモリプールはまずCheckTxでトランザクションの有効性をチェックし、有効なトランザクションだけをピアにリレーする。アプリケーションはトランザクションのナンスをチェックし、ナンスか古ければCheckTxにエラーを返す。
「Commit」メッセージはその時点のアプリケーションステートに対する暗号コミットメントの計算に利用され、次のブロックヘッダ内に置かれる。これにはいくつか便利な特性がある。そのステートの更新における矛盾はブロックチェーンのフォークとして表れ、プログラミングエラーのクラス全体をキャッチする。また、これはセキュアで軽量なクライアントの開発を単純化する。マークルハッシュ証明をブロックハッシュに対するチェックで検証でき、そしてそのブロックハッシュはバリデータの定足数(投票パワー)が署名したものであるからだ。
さらなるABCIメッセ―によりアプリケーションはバリデータ集合の変更を記録することができ、ブロック高やコミット投票などのブロック情報を受信できる。
ABCIのリクエスト/レスポンスは単純なプロトコルバッファメッセージである。schema fileを確認してほしい。
AppendTx
- 引数:
- Data([]byte):リクエストトランザクションのバイト
- 戻り値:
- Code(uint32):レスポンスコード
- Data([]byte):リザルトのバイト(ある場合)
- Log(string):デバッグメッセージまたはエラーメッセージ
- 用途:
- トランザクションの追加・実行。トランザクションが有効であれば、CodeType.OKを返す。
CheckTx
- 引数:
- Data([]byte):リクエストトランザクションのバイト
- 戻り値:
- Code(uint32):レスポンスコード
- Data([]byte):リザルトのバイト(ある場合)
- Log(string):デバッグメッセージまたはエラーメッセージ
- 用途:
- トランザクションの検証。このメッセージはステートを変更してはならない。トランザクションはメモリプール内のピアにブロードキャストする前にまずCheckTxを通じて実行される。同一ブロック内でトランザクションの順序依存ができるようにするために、CheckTxを準ステートフルな状態にして「Commit」メッセージや「BeginBlock」メッセージに対するステートをクリアできる。
Commit
- 戻り値:
- Data([]byte):マークルルートハッシュ
- Log(string):デバッグメッセージまたはエラーメッセージ
- 用途:
- アプリケーションステートのマークルルートハッシュを返す。
Query
- 引数:
- Data([]byte):クエリリクエストのバイト
- 戻り値:
- Code(uint32):レスポンスコード
- Data([]byte):クエリレスポンスのバイト
- Log(string):デバッグメッセージまたはエラーメッセージ
Flush
- 用途:
- レスポンスキューをフラッシュする。「types.Application」を実装するアプリケーションはこのメッセージを実装する必要はない。プロジェクト次第である。
Info
- 戻り値:
- Data([]byte):情報のバイト
- 用途:
- アプリケーションステートについての情報を返す。アプリケーション特有。
SetOption
- 引数:
- Key(string):設定するキー
- Value(string):キーに対して設定する値
- 戻り値:
- Log(string):デバッグメッセージまたはエラーメッセージ
- 用途:
- アプリケーションオプションを設定する。例えばメモリプールの接続にはKey="mode"、Value="mempool"とし、コンセンサスの接続にはKey="mode"、Value="consensus"とする。その他のオプションはアプリケーション特有である。
InitChain
- 引数:
- Validators([]Validator):ジェネシスのバリデータ
- 用途:
- ジェネシス時点で一度呼び出される。
BeginBlock
- 引数:
- Height(uint64):開始するブロック高
- 用途:
- 新ブロック開始のシグナルを出す。あらゆるApeendTxの前に呼び出される。
Endblock
- 引数:
- Height(uint64):終了したブロック高
- 戻り値:
- Validators([]Validator):新たな投票パワーを有する変更後のバリデータ(投票パワー0のバリデータは除外される)
- 用途:
- ブロック終了のシグナルを出す。トランザクション後の各Commitの前に呼び出される。
さらなる情報についてはABCIリポジトリを確認されたい。
(COSMOSホワイトペーパー日本語訳15 ←← 前)|(次 →→ COSMOSホワイトペーパー日本語訳17)
免責
邦訳には誤りがある場合がございます。予めご承知おき下さい。
確実な情報を知るためには冒頭に示した原文をご参照くださいますようお願いいたします。