链下工人和签署的交易

Offchain Workers & Signed Transactions

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

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

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

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

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

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

  1. 是的,如果验证器 运行 具有默认的链下工作人员设置。 如果不需要,您的 OCW 可以选择一个验证器或引入一个 不同 运行 之间的随机延迟和额外条件。我们这样做 用于 substrate repo 或 offchain phragmen 中的 im-online pallet 选举。
  2. 其他节点可以使用 CLI 标志选择加入(很可能还有额外的密钥 签署交易),但你也可以在你的 OCW 代码中放置一个守卫 到 运行 只有在 sp_io::offchain::is_validator() == true
  3. 的情况下
  4. 现在必须手动完成 - 链下工作人员已满 状态访问,因此它可以检查 frame_system 中的事件,并且只能 运行 以防万一有特定的。我相信有一些 Substrate-recipies repo 中的示例。

这里有更多信息: