Tendermint的三种应用状态

时间:2019-01-27 09:54:07

标签: tendermint

我目前正在使用Tendermint的小型交易平台上工作,但是我不确定应如何使用Tendermint应用程序状态。在https://tendermint.com/docs/app-dev/abci-spec.html#message-types下的Tendermint文档中说:

  

请注意,消息可能会在所有连接上同时发送-典型的应用程序将因此为每个连接保持不同的状态。它们可以分别称为DeliverTx状态,CheckTx状态和Commit状态。

我将为您提供有关如何使用这三种状态的理解,希望您能告诉我这是否正确。

  • DeliverTx状态:在ABCI应用程序收到每个有效的DeliverTx请求消息后,此状态都会更新。如果交易无效(由拜占庭提议者包括),则将 DeliverTx状态重置为先前在接收到最后一条CommitTx消息时已设置的 CommitTx状态。 / li>
  • CommitTx状态:当ABCI应用程序收到CommitTx消息时, CommitTx状态将设置为最新的 DeliverTx状态
  • >
  • CheckTx状态:可能用于DoS保护(通过将最近几秒钟通过CheckTx请求消息到达的事务数存储为 CheckTx状态,并且每当每秒的事务数太高,CheckTx响应会拒绝事务进入内存池。
  • 此外,每当查询应用程序时(通过abci_query RPC端点),应用程序都会根据其 CommitTx状态
  • 来回答查询。

我对这三个状态的看法可能已经暗示,我不确定当应用程序收到DeliverTx请求但传递的事务无效时会发生什么(这种情况还会发生吗?)。提议,预投票和预提交的整个过程实际上与这些消息类型(CheckTx,DeliverTx,Commit)有什么关系?

2 个答案:

答案 0 :(得分:0)

在文档中进行了进一步搜索之后,我发现以下页面对其进行了很好的解释。

https://tendermint.com/docs/spec/abci/apps.html#state

答案 1 :(得分:0)

如前所述,https://tendermint.com/docs/spec/abci/apps.html#state应该回答这个问题。

https://github.com/6thc/tendermint-cas-demo

也有一个很好的解释。