interface IPluginFeed {
function decimals() external view returns (uint8);
function description() external view returns (string memory);
function latestRoundData() external view returns (
uint80 roundId, int256 answer, uint256 startedAt,
uint256 updatedAt, uint80 answeredInRound);
}decimals()"No access" (whitelisted) or revert empty (broken / access-controlled)0x896CC6fE8AD04dF9f481332606c445768e286076 (16 dp)answer > 0updatedAt != 0updatedAt <= block.timestampblock.timestamp - updatedAt <= maxStaleness (per feed!)answeredInRound >= roundIdOptional: min/max bounds, max deviation vs. last accepted price
uint256 p = latestPrice();
if (feedDecimals < 18) return p * 10 ** (18 - feedDecimals);
return p / 10 ** (feedDecimals - 18);set(answer, updatedAt), setRounds, setNoAccess) XDC_FORK_RPC=https://rpc.xinfin.network forge test --match-path 'test/fork/*'
vm.warp past the heartbeat to prove your staleness check works→ Lab 2