CodeRoadMap
首页路线题库资源库文章社区
CodeRoadMap

程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。

由 程序员柏风 独立维护 · 关于作者

学习

  • 路线图
  • 课程
  • 面试题
  • 文章
  • 我

更多

  • 资源
  • 社区
  • 关于作者
  • 内容说明

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
区块链入门/课时/预言机
RawBlame
课时目录12 节

区块链入门

  1. 01区块链是什么
  2. 02结构与共识
  3. 03链类型与扩容
  4. 04EVM 生态
  5. 05智能合约与 Solidity
  6. 06开发工具链
  7. 07DApp 与 Web3 前端
  8. 08DeFi 与应用场景
  9. 09预言机
  10. 10安全与测试
  11. 11部署与节点运维
  12. 12综合练习

预言机

Chainlink、oracle-networks、hybrid contracts。

30 分钟

预言机

链上合约无法直接访问 HTTP 或数据库:预言机(Oracle) 负责把链下真实世界数据(价格、天气、比赛结果)可信地喂给智能合约。Chainlink 是应用最广的去中心化预言机网络。见 /roadmaps/blockchain。

学习目标

  • 理解「区块链孤岛」问题与预言机的必要性
  • 掌握 Chainlink Price Feed 的基本用法
  • 认识混合合约(Hybrid Contract)设计模式

为什么需要预言机

// ❌ 链上无法这样做
// uint price = http.get("https://api.example.com/eth-price");

// ✅ 从预言机合约读取已聚合的价格
import "@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol";

contract PriceConsumer {
    AggregatorV3Interface internal priceFeed;

    constructor(address feedAddress) {
        priceFeed = AggregatorV3Interface(feedAddress);
    }

    function getLatestPrice() public view returns (int256) {
        (, int256 price,,,) = priceFeed.latestRoundData();
        return price;
    }
}

Sepolia 上 ETH/USD 喂价地址可在 Chainlink 文档 查询。

信任模型

类型说明
单一数据源易被操纵,仅适合 demo
多节点聚合Chainlink 多节点取中位数
乐观预言机提交数据 + 挑战期(如 UMA)
TWAP时间加权均价,降低闪电贷操纵

闪电贷攻击常利用单一 DEX 瞬时价格操纵预言机;生产系统应使用 Chainlink 或 TWAP 等多源方案。

混合合约

链上逻辑 + 链下计算/数据:

  1. 合约请求随机数或价格(Chainlink VRF / Price Feeds)
  2. 预言机网络响应
  3. 合约按结果结算(抽奖、清算、保险赔付)
// 前端监听 Price Feed 更新事件(示意)
const feed = new ethers.Contract(FEED_ADDRESS, AGGREGATOR_ABI, provider);
feed.on("AnswerUpdated", (roundId, answer) => {
  console.log(`Round ${roundId}: $${ethers.formatUnits(answer, 8)}`);
});

练习

  • 在 Sepolia 部署 PriceConsumer,读取一次 ETH/USD
  • 解释:若 DEX 池子深度很浅,为何不适合作为唯一价格来源?
  • 了解 Chainlink VRF 与 Price Feed 的适用场景差异

小结

预言机是链上与现实世界的桥梁,安全取决于数据源与聚合方式。 下一课系统学习合约安全与测试。

加载本节练习…
← 上一课DeFi 与应用场景下一课 →安全与测试