什么是 Oracle Problem?
Oracle Problem 是当区块链需要链外数据却无法自行获取时出现的难题。你的代码本身无需信任,但为了知道 ETH 的价格或今天天气,却不得不依赖外部信息。想象一间上了锁的厨房在做汤之前要透过窗户问别人是否在下雨。
“只要接上任何 API 就行了。”事实并非如此。从单一 centralized 来源拉取数据可能会引入新的故障点和偏差,这正是 Oracle Problem 所提示的风险。
Oracle Problem 的运作方式
只要链上代码需要链外信息,Oracle Problem 就会出现。简要说明:
- 步骤 1: 一个 smart contracts 的调用需要数据,例如 BTC 价格或比赛比分。
- 步骤 2: 一个 oracle 从来源获取这些数据,比如多个交易所,然后进行打包。
- 步骤 3: oracle 将数据发布到链上,合约可以读取这些数据。
- 步骤 4: 合约据此执行操作,例如清算贷款或发放款项。
- 步骤 5: 如果喂价错误、延迟或被操控,结果会偏离预期,价值可能朝错误方向变动。
这就是 Oracle Problem 的要点:把外部真实信息带上链,同时不破坏信任。应该能理解了。
为什么 Oracle Problem 很重要
如果你关心加密技术在真实场景中的应用,这个问题很值得注意。
- 好处: 更好的 oracle 设计能让资金逻辑保持可信,清算、支付和交易才会基于公正的数据进行。
- 视角: 它是价格喂价、体育投注和会更新的 NFT 属性背后的隐患;一旦出问题,后果传播得很快。
- 相关性: 在 decentralized finance (DeFi)、游戏、预测市场,甚至链上保险中都能看到该问题。
建议优先选择 decentralized 的 oracle 网络,它们从多源拉取数据、频繁发布并公开计算方法。透明度优于凭感觉行事。
Oracle Problem 的关键特性
构成该问题的要点:
- 信任: 即使数据来自外部方,也要尽量最小化对信任的依赖。
- 终结性: 数据一旦上链,就基本上变为 immutable,因此错误输入会长期保留。
- 延迟: 数据应足够及时以避免过时的操作,同时又不能频繁上链造成浪费。
- 多样性: 多个独立来源和报告者能降低单点故障风险。
- 激励: 报告者需要有利益绑定,通过奖励和惩罚促使其如实报告。
不同形式
Oracle Problem 会根据所需数据和流程呈现不同形式:
- 入链: 来自现实的数据进入链上,例如价格或天气。
- 出链: 合约的决策发送到支付通道或游戏服务器。
- 推送: 数据按周期主动更新上链,无需按需请求。
- 拉取: 合约仅在需要时请求数据以节省成本。
- 签名: 数据提供者在链下对数值签名,任何人都能验证来源。
- 委员会: 一组报告者在发布数值前达成一致。
Oracle Problem 不只是技术问题,也是社会问题。你信任谁、他们如何获得报酬、如果有人作弊会怎样?不回答这些问题,代码的承诺仍可能出现偏差。
示例
某借贷协议读取价格喂价,ETH 下跌一%,贷款被清算,数小时后大家发现喂价出错,原因是一家交易所出现异常 这是典型的 Oracle Problem。
趣闻
“Oracle” 源自古代为神代言的先知;在加密领域,我们向它们询问价格和天气,这或许不够诗意,但更容易验证。
总结
一句话概括 Oracle Problem:把外部真实信息带上链,而不是让用户仅凭信任接受。把这件事做好,其它问题就比较好处理,奢侈品牌也会面对论坛式的讨论。
