Vyper theorytheory 0/50 · 0%
Web3 integration · hard

44. Working with Chainlink oracles in Vyper

Pulling reliable external price data on chain.

Since contracts can't access the internet directly, price feeds and other external data come through oracles like Chainlink. You declare a small interface for the feed and call its `latestRoundData` (or similar) function.

interface AggregatorV3:
    def latestAnswer() -> int256: view

price_feed: public(address)

@external
@view
def get_price() -> int256:
    return AggregatorV3(self.price_feed).latestAnswer()

Always sanity-check oracle data (non-zero, not obviously stale) before using it for anything that moves funds, and consider what happens if the feed reverts or returns unexpected values.

Check your understanding

  1. 1. Why can't a contract fetch a price from the internet directly?

  2. 2. How do you read from an oracle contract in Vyper?

  3. 3. What should you check before trusting oracle data?