我找不到任何关于 Hyperledger Sawtooth 如何处理由错误或由开发人员自愿创建的无限循环问题的具体信息(仅有关IntKey事务系列Intkey 工作负载命令的一些问题以错误的 URL 在无限循环中运行)。
我确信在 Hyperledger Fabric上,链码执行超时的概念避免了无限循环的创建,但是 Hyperledger Sawtooth中使用了哪种机制?
谢谢!
我找不到任何关于 Hyperledger Sawtooth 如何处理由错误或由开发人员自愿创建的无限循环问题的具体信息(仅有关IntKey事务系列Intkey 工作负载命令的一些问题以错误的 URL 在无限循环中运行)。
我确信在 Hyperledger Fabric上,链码执行超时的概念避免了无限循环的创建,但是 Hyperledger Sawtooth中使用了哪种机制?
谢谢!
最好的办法是测试您的自定义事务处理器。编写事务处理器的一个常见错误是返回码。InternalError
应该是一个暂时性错误(一些内部故障,如临时的“内存不足”),如果重试可能会成功。验证器使用 TP 重试交易并导致循环。如果交易无效,您可能希望引发InvalidTransaction
错误。底线——重试内部错误,不重试无效事务。
为了让你的区块链更能抵抗错误的交易处理器,我强烈建议以并行模式运行验证器。如果在事务处理器中遇到某些错误,则可以处理其他事务。要在并行处理模式下运行,请使用sawtooth-validator --scheduler parallel -vv
Sawtooth 验证器还检查与事务处理器的连接,并删除那些不响应(挂起或冻结)的连接。
编辑:关于您关于 DoS 缓解的后续问题,Sawtooth 中有一个背压测试。背压是一种有助于防止 DoS 攻击的流量控制技术。如果验证器不堪重负,它将停止接受新批次,直到它能够处理更多工作。验证器可以接受的批次数量基于乘数 QUEUE_MULTIPLIER(当前为 10,以前为 2)乘以已发布批次数量的滚动平均值。
此外,还可以将 Sawtooth 网络置于 VPN 之后。Sawtooth 是一种许可的企业区块链,并非设计用于公共互联网。