【发布时间】:2019-06-20 13:31:36
【问题描述】:
我目前正在一个使用 Tendermint 的小型交易平台工作,但我还不确定应该如何使用 Tendermint 应用程序状态。在https://tendermint.com/docs/app-dev/abci-spec.html#message-types 下的 Tendermint 文档中,它说:
请注意,消息可能会在所有连接上同时发送 - 一个典型的应用程序将因此为每个连接维护一个不同的状态。它们可以分别称为 DeliverTx 状态、CheckTx 状态和 Commit 状态。
我会告诉你我应该如何使用这三种状态的理解,希望你能告诉我这是否正确。
- DeliverTx 状态:在 ABCI 应用程序收到每个有效的 DeliverTx 请求消息后,此状态会更新。如果交易无效(由拜占庭提议者包含),DeliverTx 状态 将重置为先前在收到最后一个 CommitTx 消息时设置的 CommitTx 状态。
- CommitTx 状态:当 ABCI 应用程序收到 CommitTx 消息时,CommitTx 状态 被设置为最新的DeliverTx 状态。
- CheckTx 状态:可能用于 DoS 保护(通过将最近几秒内通过 CheckTx 请求消息到达的事务数存储为 CheckTx 状态,并且每当事务数每秒太高,CheckTx 响应拒绝交易进入内存池)。
- 此外,无论何时(通过 abci_query RPC 端点)查询应用程序,应用程序都会根据其 CommitTx 状态回答查询
我对这三种状态的看法可能已经暗示我不确定当应用程序接收到 DeliverTx 请求但交付的事务无效时会发生什么(这种情况甚至会发生吗?)。提议、预投票和预提交的整个过程实际上与这些消息类型(CheckTx、DeliverTx、Commit)有什么关系?
【问题讨论】:
标签: tendermint