首页 > 解决方案 > 链下工作者框架

问题描述

我还没有完全放弃验证者兼职作为离线计算的预言机的想法……基于这个广泛的讨论:https ://gov.near.org/t/off-chain-computation-framework/1400/6

到目前为止,我还没有研究 Sputnik 的代码,我已经弄清楚了如何将 blob 上传到智能合约的机制。假设一个 blob 代表一个无存储合约,只有无状态函数,这些函数只对函数的输入起作用,并返回修改后的输入。

现在我错过了验证器如何下载和执行 blob 的部分。正如 Ilya 在上面的链接中提到的,NearSDK 将能够解释 blob(如果 blob 本质上是一个已编译的合约),但它需要是 SDK 的修改版本......

把这想象成沙盒模式……blob 不能修改任何其他合约的状态,但可以读取状态(暂时忘记互联网访问部分)。然后将 blob 执行的结果反馈给智能合约,在智能合约中,它们必须与执行 blob 的每个其他验证者的结果相匹配。这可以通过哈希比较来完成(而不是单独遍历结果),所以这不是一个昂贵的比较,特别是因为它是全有或全无。

问题:验证器如何下载 blob 并通过沙盒 SDK 执行它,并通过常规 SDK 将结果发布到区块链?我错过了很多建筑背景……这让我走到了放弃这个想法的边缘。请帮助防止这种情况发生!

标签: nearprotocol

解决方案


如果您将其实现为单独的二进制文件,您的二进制文件将执行以下操作:

  1. 使用 RPC 从区块链加载 WASM 文件。请参阅RPC 参考
  2. 使用 runtime-standalone 以特定输入运行此 WASM。使用运行时独立的一个例子是here,但是你需要用一些东西来定制它。
  3. 结果应作为由该二进制文件再次通过 RPC 签名的事务发送。

如果您希望这些 WASM 文件能够访问状态,则需要在此二进制文件中加载状态。有两种选择:

  1. 修改一个近核节点也做上述项目
  2. 并行运行nearcore,并在初始化时打开读取数据库Trie(例如,这里从磁盘加载)。

如果你想添加更多的主机功能(比如访问互联网),你需要 fork runtime-standalone 来公开这些功能。


推荐阅读