nearprotocol - 链下工作者框架
问题描述
我还没有完全放弃验证者兼职作为离线计算的预言机的想法……基于这个广泛的讨论: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 将结果发布到区块链?我错过了很多建筑背景……这让我走到了放弃这个想法的边缘。请帮助防止这种情况发生!
解决方案
如果您将其实现为单独的二进制文件,您的二进制文件将执行以下操作:
- 使用 RPC 从区块链加载 WASM 文件。请参阅RPC 参考
- 使用 runtime-standalone 以特定输入运行此 WASM。使用运行时独立的一个例子是here,但是你需要用一些东西来定制它。
- 结果应作为由该二进制文件再次通过 RPC 签名的事务发送。
如果您希望这些 WASM 文件能够访问状态,则需要在此二进制文件中加载状态。有两种选择:
- 修改一个近核节点也做上述项目
- 并行运行nearcore,并在初始化时打开读取数据库
Trie
(例如,这里从磁盘加载)。
如果你想添加更多的主机功能(比如访问互联网),你需要 fork runtime-standalone 来公开这些功能。
推荐阅读
- javascript - 访问字符串列表以推送或更新到模型中的列表
- youtube - youtube 实时聊天节目仅在桌面上 - 在移动设备上什么都看不到
- dashboard - 在超集仪表板中定位图表的问题
- ionic-framework - 如何根据通过蓝牙从 arduino 收到的数据浏览 ionic 应用程序
- powershell - 为什么我不能在 write-host 中使用 $_?
- c# - (A) 等待类完成实例化
- angular - 如何对 Angular @Input 的 setter 和 getter 进行单元测试
- anaconda - 无法创建新的 jupyter 笔记本。POST 中缺少错误“_xsrf”参数
- jekyll - 如何从 _config.yml 中的另一个变量创建 Jekyll 变量?
- r - 我如何计算一列中的值数量并将其写入 R 的新列中?