NEAR Off-Chain Worker框架下Validator执行Blob的技术问题咨询
NEAR Validator链下无状态计算预言机实现思路
整体架构基于NEAR现有能力做最小化改造即可落地,无需动核心共识层逻辑,以下分三个核心环节拆解实现路径:
Blob下载触发逻辑
你上传到链上合约的无状态Wasm Blob会存在合约的指定存储槽中,只需要在存储Blob的链上合约中新增一个trigger_compute的公开方法,调用该方法时传入计算任务ID、Blob对应的存储key、计算输入参数,该交易上链后会生成可被节点捕获的事件。
Validator侧不需要修改核心节点代码,只需要在节点侧部署一个轻量化的 sidecar 服务,监听区块的合约事件,匹配到你自定义的计算触发事件后,直接调用NEAR节点的标准RPCquery接口从对应合约的存储中拉取Blob二进制内容即可,拉取到本地后做哈希校验和链上存储的Blob哈希比对,避免数据篡改。沙箱化Blob执行逻辑
你提到的修改版NearSDK实际只需要做两层轻量化改造,复用NEAR现有Wasm沙箱能力即可:- 给编译无状态Blob的SDK新增API白名单限制:屏蔽所有状态写入类API(如
storage_write、transfer等),仅开放状态读API,且限制只能读取调用时指定的合约存储,从编译层就避免Blob包含越权逻辑 - 执行层复用NEAR现有合约运行时的沙箱隔离能力:将下载后的Blob作为临时Wasm模块加载到沙箱中,执行时拦截所有系统调用,再次校验没有调用白名单外的接口,传入输入参数执行后即可拿到输出结果,沙箱本身的隔离性已经可以保证Blob不会访问节点本地资源,也不会修改链上状态
Ilya提到的SDK修改指的就是上述的白名单改造,不需要重构整个SDK,开发量极低
- 给编译无状态Blob的SDK新增API白名单限制:屏蔽所有状态写入类API(如
结果上链与共识校验逻辑
执行完成后,参与计算的Validator不需要全量上传执行结果,只需要先对结果做哈希,调用链上合约的submit_result_hash方法提交自己的结果哈希即可:- 链上合约预先设置参与计算的Validator质押门槛,只有质押了指定数量Token的Validator提交的哈希才会被统计
- 当超过预设比例(如2/3)的有效Validator提交的哈希一致时,合约即可判定该结果通过共识,此时只需要任意一个Validator提交完整的执行结果,合约做一次哈希比对一致后即可确认结果生效,符合你提到的全有或全无模式,比对成本仅为一次哈希计算,gas消耗极低
- 若出现哈希不一致的情况,合约可以直接惩罚提交错误哈希的Validator的质押资产,保证作恶成本远高于收益
内容的提问来源于stack exchange,提问作者Richard Tiutiun
相关产品推荐
相关产品推荐

