Crust 实现了去中心化存储的激励层协议,适配包括 IPFS 在内的多种存储层协议,并对应用层提供支持。同时 Crust 的架构也有能力对去中心化计算层提供支持,构建分布式云生态。
《Substrate 区块链开发入门》是由 Parity 和一块+ 联合出品的全球首个 Parity 官方合作课程系列的开发者入门课程。
每周日晚 8 点,作为课程内容知识拓展——大咖技术分享会,由波卡生态的优质项目方代表自发轮流在线上进行分享,为学员们详细解读一个 Substrate 技术相关内容。
上周日晚,由 Crust Network 核心开发者—— 子琨在直播间为大家带来第三讲「Substrate Offchain Worker 机制与实战应用」。
大家好,我是子琨,之前在浙大 CCNT lab 学习分布式系统和云计算,后来就职于微软,做 Azure Kubernetes 团队容器化服务,现在是 Crust Network CTO。我的 Github 地址:zikunfan。
Crust Network 本身是做去中心化存储的,所以想从链下存储的角度出发,谈一谈 Crust Network 在实战应用 Substrate 的过程中对于 Offchain Worker 这块的经验和遇到过的问题。
.01OCW 的机制介绍
|什么是OCW
有一个很有意思的观点,就是在计算机行业看来,区块链技术和所有的计算机技术是背道而驰的,因为计算机技术是想方法用有限的资源做更多的事情,而区块链是用同样的资源做相同的事情从而达到去中心化信任的目标。
随着区块链的发展,越来越复杂的逻辑被期望放到链上,也就是说,大家都觉得用区块链解决信任问题的同时也要能处理现实问题,所以 Scalability 就顺理成章成为了区块链中最为重要的技术目标,ETH2.0 Casper,Polkadot 平行链,Cosmos 跨链这些都是在解决这个问题。
思考两个问题:
一、什么该被放到链上,什么不该被放到链上。on-chain logic i会被整个网络执行。所以简单的来讲,需要全网达成共识的部分(共识,交易,区块)我们是一定要放到链上的。BTC 最早就是简单的这么设计的,但复杂的区块链越来越多想要更多。而更多的复杂计算,巨量存储,隐私计算等等,这些都不应该被放到链上。二、Oracle 的缺点:
1、Off-chain Mechanisms 是独立的,和链不绑定的程序,其往往是中心化的服务,这违背了去中心化的愿景。
2、Offchain 通常通过 RPC 调用来完成,这会非常慢并且不可靠。| 为什么我们需要OCW
更高效更安全Forkless UpgradeOCW 作为 Substrate 中的重要模块,其本身就被 Include 到了 Substrate 的 WASM 环境中,这样在一定程度上保证了全网执行的一致性,并且跟随 Substrate一起升级。
这也就在根本上定义了 OCW 并不是作为独立程序运行去 Aware 链,而是作为链的一部分存在的。
并且,其本身还自带了支持 SignedExtrinsic 的机制,也就是说,传统 Oracle 需要去签名发送交易的过程,OCW 都可以一键通过将 Private Key Set 到本地节点而完成。
再者,OCW 并不是通过 RPC 调用,而是 WASM 之间的 Hook 直接进行链上交易的。OCW 中目前支持的特性:
本地KV数据库功能完善的 HTTP 客户端安全的随机数生成算法本地精准时间本地 Keystore 签名和验证算法链上回掉|OCW 的运行机制
轻松读取链上状态提交链下运行结果刚刚讲了,OCW 其实是和 WASM Code 绑在一起的,但是又有所区别,因为 Runtime 的 WASM Code 是会校验世界状态(World State)的,而 OCW 的 WASM 仅仅是一段独立运行的 VM 线程。
Runtime Interface 是 Substrate 里面一个很独特的接口,其链接了 WASM 和 Native,也是 OCW 的底层实现逻辑,但在 Runtime Interface 中,你可以定制任意的 Native 接口,和链上的 WASM 进行交互(平行链是不行的),但是在 OCW 中,对其调用进行了限制,刚才说的几类,所以其本身的 Native 环境(平行链是可以的)。Callback 要注意 Unsigned Extrinsic(其本身需要自定义一套验证逻辑)。
|OCW的适用范围
Long Running Task:Substrate 中的 Offchain Phragmen 代码合并链上状态,缩减链上状态爆炸的问题链下通知系统:Substrate 中的 im_online 模块.02OCW 的实际应用场景
| 处理状态爆炸
Crust 对 OCW 的第一个实际应用是,利用 OCW 来处理链上状态爆炸的问题先讲一下整体的 sOrder 流程:
1、On-chain:用户直接对着链进行下单
2、Off-chain:用户带着链上 Orderid 传递文件Locally,是对用户的订单进行打包,然后逐步上链验证。
三个难点:
1、Crust 设计了一套 Offchain 的接单系统
2、在 Offchain 订单达到 4GB 之后提交一个“大”订单到链上
3、在 ValidateUnsign 的部分,Crust 设计了一个 Delayed Proof Function,Delayed proof function 中处理了节点恶意提交订单的情况(会被惩罚,具体是整体订单价值的 2%)。所以用户在打包订单的同时,需要有文件被存储,并且链上已经存在匹配的用户锁定金额的交易。
| 处理复杂的链上计算
Crust 对 OCW 的第 2 个实际应用是,利用 OCW 来处理链上的复杂计算(长时间状态更新任务)的问题,就像 Kusama 和 Polkadot 中的 Offchain Phragmen 算法一样。
先讲一下这个 Long Running Task 是什么,这就涉及到 MPoW 中 File Inspector 的工作机制:基本上,它将所有文件根哈希存储在 Encalve 内,Encalve 是 CPU 内受信任的硬件运行时模块。并定期要求外部文件系统提供特定的文件片段,并在 Enclave 内对其进行检查。然后对检查的结果在 Enclave 内部进行签名并且最终形成工作量报告提交到链上。
而其中的工作量报告包含每个节点的文件存储信息,我们需要使用此信息来更新相应存储订单的状态。这可能会花费很多时间来处理更新,因为其索引结构在链上,是一个反向索引的 Hash Map。而利用 OCW,我们可以把这个更新操作放到链下,不断读取链上工作量报告,并不断向链上提交更新的结果,并交给链去验证即可。
点击网页链接,观看活动视频:
https://v.qq.com/x/page/e31457u98bf.html
关于 Crust Network
Crust Network 实现了去中心化存储的激励层协议,适配包括 IPFS 在内的多种存储层协议,多种存储应用提供支持。同时 Crust Network 的架构也有能力对去中心化计算层提供支持,构建分布式云生态。目前上线了公开测试网Maxwell 1.0,欢迎各位加入测试体验。Crust Network 先后加入 Substrate Builders Program、Web3.0 Bootcamp,以及获得 Web3 基金会 Grant 。Crust Network 作为一个分布式的云存储项目,又不止于云存储,Crust Network 的最终目标是建立一个泛在的公有云生态。
Crust 相关:
Crust 技术白皮书 v1.9.3 版
Crust Network 经济白皮书草案公布
Crust 经济白皮书第 1 期 · 概述
Crust 经济白皮书第2期·参与方
Crust 经济白皮书第 3 期·经济模型
一文快速了解 Crust Network 分布式云
官网:https://crust.network/
Twitter:@CrustNetwork
Medium:https://medium.com/@crustnetwork
GitHub:https://github.com/crustio
Telegram:https://t.me/CrustNetwork
本文来源:Crust分布式云原文标题:Substrate Offchain Worker 机制与实战应用
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。