There are several possible reasons why blockchain transactions can be rejected, including consensus errors, syntax errors, and version errors.3 

Consensus errors

Validation logic (VSCC in the case of Hyperledger Fabric) Policy failure (endorsement policy not satisfied in the case of Hyperledger Fabric)

Syntax errors

Invalid input (smart contract id, unmarshalling errors, and so on) Unverifiable client or endorsement signature Repeated transaction (due to error or replay attack)

Version errors

By version control (readset version mismatch, writeset is unwritable) For the current version of this document, we consider throughput the same as goodput. Since different blockchain platforms handle consensus and transaction validation differently, it is hard to align error classes across platforms. And assessing the reasons why any transaction is rejected requires a deeper analysis of sub-system metrics. While this could be interesting to the platform’s developers, this is outside the scope of this document.

 

区块链交易被拒绝的原因有很多,包括共识错误、语法错误和版本错误 


共识错误


验证逻辑(在Hyperledger结构的情况下为VSCC)策略失败(在Hyperledger结构的情况下不满足背书策略)


语法错误


无效输入(智能合约id、解组错误等)无法验证的客户端或背书签名重复交易(由于错误或重放攻击)


版本错误


通过此文档的当前版本的版本控制(readset version mismatch,writeset is unwriteable),我们认为吞吐量与goodput相同。由于不同的区块链平台处理共识和交易验证的方式不同,因此很难跨平台调整错误类别。评估任何事务被拒绝的原因需要对子系统度量进行更深入的分析。虽然这对平台的开发人员来说可能很有趣,但这超出了本文的范围。