Tendermint的三个应用程序状态



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

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

我会告诉你我应该如何使用这三种状态,希望你能告诉我这是否正确。

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

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

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

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

在文档中进一步搜索后,我发现了下面的页面,它很好地解释了这一点。

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

最新更新