Hyperledger Sawtooth 如何验证交易处理器的正确性

How Hyperledger Sawtooth verifies transaction processor correctness

Hyperledger Sawtooth 正在使用 transaction processor 执行交易并验证状态更改。

由于交易处理器是 运行 任意代码,它如何验证?

例如,如果它生成一个随机数用于计算或从互联网上获取可以更改的数据?

简而言之,我可以将这个问题的答案引用为

Any Transaction Processor written should be deterministic in nature. Deterministic behavior is that for a given input state, the logic in the smart-contract should always evaluate to a specific output state. The result should be same for a given input state irrespective of when it's executed, where it's executed.

我相信这条规则也适用于所有其他区块链框架。此行为用作稍后验证交易的一种方式。

长的描述性答案是,当交易被发送到验证器时,它被广播到网络中的其他节点并放入待处理队列中。根据来自共识引擎的命令,负责构建区块的验证器将接收未决交易,验证它们并放入区块中。为了验证,交易被发送到相应的交易处理器。交易处理器从全局状态中读取数据(数据存储到当前链头),应用它需要做的事情并计算输出状态(如果当前块被接受,则数据存储在分类帐中)。

一旦区块准备就绪,它就会被广播到网络中的其他节点。当验证器收到块时,它会验证放入块中的所有交易。请注意,建议的输出状态应与评估的状态相匹配,否则丢弃到达的块。如果输出状态转换依赖于任意输入,则没有关于该块是否被其他验证器接受的确定性行为。

注意: cosmetic/syntactic 验证 transactions/batches 发生了,我没有在我的回答中提到这些事情。请参阅 official documentation 以获得详细的答案。

只要你按照这个规则编写Transaction Processor,就可以从任何外部读取数据source/generate随机值。但是,如果您的交易处理器依赖于任意数据来决定交易的有效性,那么交易的结果也是任意的。