# Oracle预言机

By [Untitled](https://paragraph.com/@0xc38de96a6fb021619c8922825675f0dab5117264) · 2023-09-18

---

Oracle problem: Smart contracts are unable to connect external system.
----------------------------------------------------------------------

共识机制决定了区块链是一个确定性的系统，只有确定性的内容会被放在链上。

中心化（单节点预言机）易受攻击（单点失败 Single point failure)→Decentralized Oracle Network (DON)

### DON：多个预言机节点给出外部数据，在预言机网络中形成共识

### Func1——处理链下数据：

#### Data feed :喂价

喂价流程：

1.  每一个预言机网络中的节点都由不同的运营商（operaters）运营 e.g.T-mobile
    
2.  运营商从数据供应商（data providers)获取来自不同数据源（data source)的数据
    
3.  运营商通过预言机网络聚合数据，通过OCR算法生成 Off chain report（链下报告）
    
4.  验证链下报告是否有各预言机节点的签名
    
5.  把数据存到Chainlink contract中
    
6.  终端用户领取合约（导入自己的合约
    

喂价用途：

*   DeFi借贷合约中查看资产价值
    
*   合成资产（mirror asset）查看资产价值
    
*   稳定币发行所需抵押物价格决定发币数量
    
*   资产管理
    
*   衍生品交易
    

#### 非标准数据处理（chainlink functions):

航班延误情况，天气，体育比赛结果……

1.  DON监控chainlink functions合约执行情况
    
2.  当用户有需求，会把请求发送到合约（on demand）
    
3.  请求被写入chainlink function合约的一个`event`中，被链下DON检测到
    
4.  DON网络中所有节点会调用外部API，获得结果，聚合后写回chainlink function合约，回调到用户合约
    

### Func2——计算：

#### chainlink VRF(verifiable random function) 产生随机数

原先随机数的生成过程：使用未来区块的header（root hash？）作为种子，在链上通过特定函数将其变为随机数

当矿工或staker有强算力或多stake，有可能根据自己的tx的hash更容易的推测出header

1.  预言机生成公钥（写入合约）&私钥（保存到本地）
    
2.  用户请求随机数，预言机取当前区块的root hash，通过私钥生成随机数和一个proof（都写入合约）
    
3.  合约自动验证该随机数是否是某一私钥持有人根据某个区块root hash经过某特定算法生成的随机数
    

应用场景：

1.  NFT创建和分发
    
2.  抽奖，公平选择
    

#### Chainlink automation:

部分合约需要定期触发，为避免单点失败，不能依靠外部程序触发该合约

链下：预言机节点轮流检查合约是否满足条件

链上：如果满足，则通过某函数触发该合约的执行

应用场景：

1.  Yield harvesting& compounding 收益再投资实现复利
    
2.  DEX limit orders
    
3.  Liquidation
    
4.  Dynamic NFT
    

### Func3——跨链

CCIP：chainlink的链间互操作协议

1.  Committing DON ：从原链(source chain)上找到需要跨链的数据，通过Committing DON写入目标链(destination chain)的Commit store上
    
2.  AFN（Anti-Fruad Network反欺诈网络）：运行该网络的节点将被质押许多资产，监控Commit store上内容是否合法（merkle tree .etc），并给予标注
    
3.  Excuting DON：通过本网络把经过验证的数据在目标链上执行
    

将交付层和执行层分开：

1.  易于批次处理
    
2.  信息跨链协议，只要发布交易就能跨链，不限于资产跨链，提高灵活度
    

[chainlink文档库](https://docs.chain.link/)

---

*Originally published on [Untitled](https://paragraph.com/@0xc38de96a6fb021619c8922825675f0dab5117264/oracle)*
