Blockchain Oracles

Oracle NetworksFree Lesson

Advertisement

Blockchain Oracles

Price feeds, data oracles, Chainlink integration, and oracle design patterns.

Overview

Oracles connect blockchains to external data.

Oracle Types

TypeUse Case
Price FeedAsset prices
RandomnessVRF for NFTs/gaming
DataExternal APIs
ComputeOff-chain computation

Chainlink Price Feed

import "@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol";

contract PriceConsumer {
    AggregatorV3Interface internal priceFeed;
    
    constructor(address _priceFeed) {
        priceFeed = AggregatorV3Interface(_priceFeed);
    }
    
    function getLatestPrice() public view returns (int) {
        (
            ,
            int price,
            ,
            uint256 updatedAt,
            
        ) = priceFeed.latestRoundData();
        
        require(block.timestamp - updatedAt < 3600, "Stale price");
        return price;
    }
}

Chainlink VRF

import "@chainlink/contracts/src/v0.8/VRFConsumerBaseV2.sol";

contract RandomNFT is VRFConsumerBaseV2 {
    uint256 public lastRandom;
    
    constructor() VRFConsumerBaseV2(vrfCoordinator) {
        vrfCoordinator = 0x...');
        keyHash = 0x...';
        subscriptionId = 1;
    }
    
    function requestRandomNumber() public {
        s_vrfCoordinator.requestRandomWords(
            keyHash,
            subscriptionId,
            3,
            200000,
            1
        );
    }
    
    function fulfillRandomWords(uint256 requestId, uint256[] memory randomWords) internal override {
        lastRandom = randomWords[0];
    }
}

Oracle Design Patterns

Architecture Diagram
ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”
│           Smart Contract            │
│  (On-chain request)                 │
ā”œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”¤
│           Oracle Network            │
│  (Decentralized nodes)              │
ā”œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”¤
│           External Data             │
│  (APIs, databases)                  │
ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜

Best Practices

  1. Multiple sources — Avoid single point
  2. Staleness checks — Fresh data
  3. Fallback mechanisms — Graceful degradation
  4. Cost optimization — Batch requests

Practice

Integrate Chainlink price feeds into a DeFi protocol.

Advertisement

Need Expert Blockchain Help?

Get personalized Web3 training or smart contract consulting.

Advertisement