Oracle

简介

该模块结合 service 实现从 Chainlink 等可信 Oracle 向 IRIShub Oracle 的去中心化注入。每项数据的收集任务称之为 Feed,它的底层实现依赖于 service 模块。Feed 的生命周期 同 service 的 RequestContext 基本一致(暂停、运行),用于通过 Oracle 节点将链下数据存储在链上。另外,只能通过 Profiler 账户操作 Feed,并且不能删除,只能暂停 Feed。主要包括以下几种操作:

  • 创建 Feed
  • 启动 Feed
  • 暂停 Feed
  • 编辑 Feed

该模块除了通过创建Feed来收集数据,还预设了一些聚合函数,例如 avgmaxmin 等,用于对收集来的数据进行加工处理以满足各种场景。每个 Feed 收集的数据,最多只保存最近的100条,其余将会被删除。

流程

该模块底层依赖于 service 模块,所以使用本模块的前提是执行 Service 的相关功能

  • 创建 Service 定义
  • 绑定 Service 服务。

具体说明参考service。完成 service 相关操作后,开始 Oracle 流程:

1. 创建Feed

iris tx oracle create \
    --feed-name="test-feed" \
    --latest-history=10 \
    --service-name="test-service" \
    --input={request-data} \
    --providers="faa1hp29kuh22vpjjlnctmyml5s75evsnsd8r4x0mm,faa15rurzhkemsgfm42dnwhafjdv5s8e2pce0ku8ya" \
    --service-fee-cap=1iris \
    --timeout=2 \
    --frequency=10 \
    --threshold=1 \
    --aggregate-func="avg" \
    --value-json-path="high" \
    --chain-id="irishub-test" \
    --from=node0 \
    --fees=0.3iris \
    --broadcast-mode=block

2. 启动Feed

创建 Feed 之后,该收集任务处于 paused 状态,不会向服务提供者发起请求,可以通过 start 开启 Feed 的定时任务。

iris tx oracle start test-feed \
    --chain-id="irishub-test" \
    --from=node0 \
    --fees=0.3iris \
    --broadcast-mode=block

3. 暂停Feed

由于 Feed 一旦创建,不能够被删除,会一直消耗所有者账户的余额,直到余额耗尽,Feed 才会进入 paused 状态。为了能够手动使 Feed 暂停,可以使用 pause 命令

iris tx oracle pause test-feed \
    --chain-id="irishub-test" \
    --from=node0 \
    --fees=0.3iris \
    --broadcast-mode=block

4. 编辑Feed

可以通过 edit 命令编辑已经存在的 feed,改变 feed 的数据收集行为。

iris tx oracle edit test-feed \
    --latest-history=5 \
    --providers="faa1r3tyupskwlh07dmhjw70frxzaaaufta37y25yr,faa1ydahnhrhkjh9j9u0jn8p3s272l0ecqj40vra8h" \
    --service-fee-cap=1iris \
    --timeout=6 \
    --threshold=5 \
    --chain-id="irishub-test" \
    --from=node0 \
    --fees=0.3iris \
    --broadcast-mode=block

需要注意的是,如果创建时的 latest-history 大于当前修改的值,oracle 模块会删除多余的数据。