链下工作人员和签名交易

Dan*_*bes 6 blockchain substrate

据称,fn offchain_worker在块导入后,所有节点每次都会调用该函数。想象一下这样的情况:fn offchain_worker我们进行 http 调用以从远程服务器获取一些不确定的值,一旦获得结果,我们就调用签署pub fn onchain_callback交易以将该结果包含在区块链状态中。

如果在每个块导入后所有验证器都执行链下工作人员,那么我最终会得到每个验证器的一个新签名交易,并具有不同的结果(记住不是确定性的)。

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

1.- 我最终会得到 10 笔具有不同随机数的新交易?

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

3.- 是否可以仅在块中包含某个外部因素时而不是在每次块导入后触发链下工作人员?

Nac*_*Pal 4

  1. 是的,如果验证器使用默认的链外工作设置运行。如果不需要,您的 OCW 可以选择一个验证器或在不同运行之间引入随机延迟和额外条件。我们为基质回购中的即时在线托盘或链下 phragmen 选举执行此操作。
  2. 其他节点可以选择使用 CLI 标志(以及最有可能的额外密钥来签署交易),但您也可以在 OCW 代码中放置一个防护,仅在 sp_io::offchain::is_validator() == true 的情况下运行
  3. 目前必须手动完成 - 链下工作人员具有完全的状态访问权限,因此它可以检查frame_system中的事件,并且仅在存在某些特定事件的情况下运行。我相信基质配方存储库中有一些例子。

更多信息请参见:链下工人的角色