1 为什么要引入Offchain Features

区块链上的存储和计算资源都非常有限,这无法满足我们对性能的要求。Offchain Features 的引入可以在一定程度上解决这种问题,把需要长时间计算的、耗费大量存储的业务放在链下

那以太坊是怎么解决的呢,它通过Offchain Daemo对链上信息进行监听,然后基于监听结果进行各种逻辑处理,最后再将结果通过rpc传至链上

substrate 的offchain worker 在监听逻辑上其实与以太坊非常相似,区别在于以太坊的Offchain Daemo是独立的应用程序,代码的维护、管理、分发不会经过链上共识,而substrate的offchain worker逻辑在runtime中,这可以让链下业务逻辑共享链上逻辑升级方案

总结而言,substrate offchain worker:

  1. 集成度更高,链上链下代码管理统一,在一个节点内,维护性更好

  2. 链下代码经过共识验证,分发可靠性有保证,防止潜在的作恶行为

  3. 链下代码和链上代码共享同一份forkless升级策略

  4. 从offchain worker向链上发送交易,而不是通过外部的rpc通道,交易处理更加灵活和高效

2 Offchain Features 三大组件

Offchain Worker

Offchain Storage

Offchain Indexing

关于上面的三大组件详细内容可以参考之前的翻译以及原文:

原文链接:Offchain operations | Substrate_ Docs

注意:

  1. Offchain Worker可以直接读链上的数据(状态),但不能写

  2. 链上代码可以向Offchain Storage中写数据,但不能读

  3. 外层的node和rpc可以直接读链上存储的数据以及Offchain Storage中的数据

  4. 外层的node和rpc可以直接向Offchain Storage中写数据,但不可以向链上存储写数据

  5. 在链上存储数据或者更改数据只能通过发交易的形式(经过共识验证数据)

3 Offchain worker 功能

  1. 提交签名和未签名的交易(计算后的数据或者fetch到的信息)

  2. 实现了标准的HTTP客户端,可以发送GET/POST请求等

  3. 可以读取本地数据库并在offchain workers之间共享数据

  4. 读取本地账户信息,签名和验证信息或者交易

  5. 产生真随机数

  6. 访问本地精确的unix时间戳

  7. 可以暂停和恢复工作