FXCO的区块元素是什么,上官老师为你解答!
区块数据的验证是以交易验证为单位的,每次对区块进行验证时都会生成一个交易号的位图TxValidationFlags,它记录每个交易号的交易验证状态,只有状态为TxValidationCode_VALID才是有效的。位图也会写入到区块的元数据
BlockMetadataIndex_TRANSACTIONS_FILTER中。交易验证的时候会检查以下内容:
l 是否为合法的交易:交易格式是否正确,是否有合法的签名,交易内容是否被篡改;
l 记账节点是否加入了这个通道。
基本的验证通过以后会提交给VSCC进行背书策略的验证。
2)记账节点与VSCC
链码的交易是隔离的,每个交易的模拟执行结果读写集TxRwSet都包含了交易所属的链码。为了避免错误地更新链码交易数据,在交易提交给系统链码VSCC 验证交易内容之前,还会对链码进行校验。
3)基于状态数据的验证和MVCC检查
交易通过VSCC检查以后,就进入记账流程。kvledger还会对读写集TxRwSet 进行MVCC(Multi-Version Concurrency Control)检查。
kvledger实现的是基于键值对(key-value)的状态数据模型。对状态数据的键有3种操作:
l 读状态数据;
l 写状态数据;
l 删除状态数据。
对状态数据的读操作有两种形式:
l 基于单一键的读取;
l 基于键范围的读取。
MVCC检查只对读数据进行校验,基本逻辑是对模拟执行时状态数据的版本和提交交易时状态数据的版本进行比较。如果数据版本发生变化或者某个键的范围数据发生变化,就说明这段时间之内有别的交易改变了状态数据,当前交易基于原有状态的处理就是有问题的。由于交易提交是并行的,所以在交易未打包生成区块之前,并不能确定 终的执行顺序。如果交易执行的顺序存在依赖,在 MVCC检查的时候就会出现依赖的状态发生了变化,实际上是数据出现了冲突。图3-6所示为基于状态的数据验证的流程图。