Hyperledger Sawtooth 如何处理 infinite/endless 循环?

How Hyperledger Sawtooth take care of infinite/endless loops?

我找不到任何关于 Hyperledger Sawtooth 如何处理开发人员错误或自愿创建的无限循环问题的具体信息(只有一些关于 IntKey 交易系列的问题 Intkey workload command run in endless loop with wrong URL).

我确信在Hyperledger Fabric上链码执行超时的概念避免了无限循环的产生,但是Hyperledger中使用的是哪种机制锯齿波?

谢谢!

最好的办法是测试您的自定义事务处理程序。编写事务处理器的一个常见错误是 return 代码。 InternalError 应该是暂时性错误(某些内部错误,如 'out of memory' 是暂时的),如果重试可能会成功。 验证器重试与 TP 的交易并导致循环。 如果交易无效,您可能想要引发 InvalidTransaction 错误。 底线——重试内部错误,不重试无效交易。

为了让您的区块链更能抵抗错误的交易处理器,我强烈建议 运行在并行模式下使用验证器。如果交易处理器中出现某些错误,这将使处理其他交易成为可能。要在并行处理模式下 运行 使用 sawtooth-validator --scheduler parallel -vv

Sawtooth Validator 还会检查与交易处理器的连接,那些不响应(挂起或冻结)的处理器将被删除。

编辑:关于您关于 DoS 缓解的后续问题,Sawtooth 中有一个背压测试。背压是一种流量控制技术,有助于防止 DoS 攻击。如果验证器不堪重负,它将停止接受新批次,直到它可以处理更多工作。验证器可以接受的批次数量基于乘数 QUEUE_MULTIPLIER(当前为 10,以前为 2)乘以已发布批次数量的滚动平均值。

另外,可以将 Sawtooth 网络放在 VPN 后面。 Sawtooth 是经过许可的企业区块链,并非设计用于 public 互联网。