Why can't a smart contract fetch an off-chain price like ETH/USD by itself, and how does a Chainlink price feed solve it?
Blockchains are deterministic — every node must reach the same result — so they cannot make API calls or read real-world data; different nodes would get different answers and consensus would break. A decentralized oracle network like Chainlink delivers that data on-chain instead.
* Many independent nodes each fetch the price from many exchanges, agree on a median off-chain, and publish it to an on-chain aggregator your contract reads — no single trusted source *
This is the oracle problem: a contract cannot know the ETH price, a random number, or the weather, because pulling it live would make nodes disagree. Using a single centralized API would reintroduce a trusted point of failure — defeating the point of decentralization. Chainlink price feeds solve it with a network of independent nodes that each fetch the price from many exchanges, aggregate via a median, and publish the agreed value to an on-chain reference (aggregator) contract. Your contract just reads that contract's latest answer — decentralized data, no single trusted source. Feeds update on a deviation threshold or a heartbeat interval, whichever comes first.
Go deeper:
Chainlink docs: Data Feeds — how decentralized price data reaches the chain.
ethereum.org: oracles — the oracle problem and the network patterns that solve it.
Blockchain oracle (Wikipedia) — the general concept of bridging off-chain data on-chain.