脱链工人和已签署的交易

问题描述

已声明fn offchain_worker函数每次在块导入后被所有节点调用。想象一下,在fn offchain_worker中,我们进行了一次http调用,以从远程服务器中获取一些不确定的值,一旦获得结果,我们便调用pub fn onchain_callback进行签名,以将该交易包括在区块链状态。

如果每次导入区块后所有验证器都执行了脱链工作人员,那么我将为每个验证器最终进行一次新的签名交易,结果不同(记住不是确定性的)。

示例。我的链下工作人员从远程服务器获取随机数,并回调结果以签署新交易。如果我的网络中有10个验证器...问题:

1.-我最终将获得10个具有不同随机数的新交易吗?

2.-它仅由验证者执行,还是由连接到区块链的所有完整节点执行?

3.-是否只有在某个特定外部要素包含在区块中时才触发脱链工作人员,而不是在每次导入区块后才触发?

解决方法

  1. 是的,如果验证程序以默认的脱链工作程序设置运行。 如果不希望这样做,您的OCW可以选择验证者或引入 不同运行之间的随机延迟和额外条件。我们这样做 用于基材回购或脱链药剂师中的在线托盘 选举。
  2. 其他节点可以选择加入CLI标志(以及最有可能的额外密钥) 签署交易),但您也可以在OCW代码中设置保护措施 仅在sp_io :: offchain :: is_validator()== true的情况下运行
  3. 这必须暂时手动完成-链下工人已满 状态访问,以便它可以仅检查frame_system中的事件 如果有一些特定的运行,请运行。我相信有一些 基材收据中的示例为此。

此处提供更多信息:Role of off-chain workers