链下工作者框架
Off-Chain Worker Framework
我还没有完全放弃验证者兼职作为链下计算预言机的想法……基于这个广泛的讨论:https://gov.near.org/t/off-chain-computation-framework/1400/6
到目前为止,除了研究 Sputnik 的代码,我已经弄清楚了如何将 blob 上传到智能合约的机制。假设一个 blob 代表一个无存储合约,只有无状态函数,这些函数仅作用于函数的输入,并且 return 这些输入被修改。
现在我错过了验证器如何下载和执行 blob 的部分。正如 Ilya 在上面 link 中提到的,NearSDK 将能够解释 blob(如果 blob 本质上是一个已编译的合约),但它需要是 SDK 的修改版本...
把它想象成沙盒模式……blob 不能修改任何其他合约的状态,但可以读取状态(暂时忘记互联网访问部分)。然后将 blob 执行的结果反馈给智能合约,在智能合约中它们必须与执行 blob 的所有其他验证器的结果相匹配。这可以通过散列比较(而不是逐个循环结果)来完成,所以它不是一个昂贵的比较,特别是因为它是全有或全无。
问题:Validator 如何通过沙盒 SDK 下载 blob 并执行它,然后 post 通过常规 SDK 将结果发送到区块链?我错过了很多建筑背景……这让我濒临放弃这个想法的边缘。请帮助防止这种情况发生!
如果您将其实现为单独的二进制文件,您的二进制文件将执行以下操作:
- 使用RPC从区块链加载WASM文件。参见 RPC reference
- 使用运行time-standalone 运行 具有特定输入的 WASM。使用 运行time standalone 的一个例子是 here,但是你需要用一些东西来定制它。
- 结果应作为由此二进制文件再次通过 RPC 签名的交易发送。
如果您希望这些 WASM 文件能够访问状态,您将需要在此二进制文件中加载状态。有两种选择:
- 修改一个 nearcore 节点也执行上述项目
- 运行 nearcore 并行,并在初始化
Trie
时打开读取数据库(例如 here 从磁盘加载)。
如果您想添加更多主机功能(如访问互联网),您将需要 fork 运行time-standalone 来公开这些功能。
我还没有完全放弃验证者兼职作为链下计算预言机的想法……基于这个广泛的讨论:https://gov.near.org/t/off-chain-computation-framework/1400/6
到目前为止,除了研究 Sputnik 的代码,我已经弄清楚了如何将 blob 上传到智能合约的机制。假设一个 blob 代表一个无存储合约,只有无状态函数,这些函数仅作用于函数的输入,并且 return 这些输入被修改。
现在我错过了验证器如何下载和执行 blob 的部分。正如 Ilya 在上面 link 中提到的,NearSDK 将能够解释 blob(如果 blob 本质上是一个已编译的合约),但它需要是 SDK 的修改版本...
把它想象成沙盒模式……blob 不能修改任何其他合约的状态,但可以读取状态(暂时忘记互联网访问部分)。然后将 blob 执行的结果反馈给智能合约,在智能合约中它们必须与执行 blob 的所有其他验证器的结果相匹配。这可以通过散列比较(而不是逐个循环结果)来完成,所以它不是一个昂贵的比较,特别是因为它是全有或全无。
问题:Validator 如何通过沙盒 SDK 下载 blob 并执行它,然后 post 通过常规 SDK 将结果发送到区块链?我错过了很多建筑背景……这让我濒临放弃这个想法的边缘。请帮助防止这种情况发生!
如果您将其实现为单独的二进制文件,您的二进制文件将执行以下操作:
- 使用RPC从区块链加载WASM文件。参见 RPC reference
- 使用运行time-standalone 运行 具有特定输入的 WASM。使用 运行time standalone 的一个例子是 here,但是你需要用一些东西来定制它。
- 结果应作为由此二进制文件再次通过 RPC 签名的交易发送。
如果您希望这些 WASM 文件能够访问状态,您将需要在此二进制文件中加载状态。有两种选择:
- 修改一个 nearcore 节点也执行上述项目
- 运行 nearcore 并行,并在初始化
Trie
时打开读取数据库(例如 here 从磁盘加载)。
如果您想添加更多主机功能(如访问互联网),您将需要 fork 运行time-standalone 来公开这些功能。