pragma solidity ^0.5.16; interface AggregatorV2V3Interface { function latestRound() external view returns (uint256); function decimals() external view returns (uint8); function getAnswer(uint256 roundId) external view returns (int256); function getTimestamp(uint256 roundId) external view returns (uint256); function getRoundData(uint80 _roundId) external view returns ( uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound ); function latestRoundData() external view returns ( uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound ); } contract MockAggregatorV2V3 is AggregatorV2V3Interface { uint80 public roundId = 0; uint8 public keyDecimals = 0; struct Entry { uint80 roundId; int256 answer; uint256 startedAt; uint256 updatedAt; uint80 answeredInRound; } mapping(uint => Entry) public entries; constructor() public {} // Mock setup function function setLatestAnswer(int256 answer, uint256 timestamp) external { roundId++; entries[roundId] = Entry({ roundId: roundId, answer: answer, startedAt: timestamp, updatedAt: timestamp, answeredInRound: roundId }); } function setLatestAnswerWithRound( int256 answer, uint256 timestamp, uint80 _roundId ) external { roundId = _roundId; entries[roundId] = Entry({ roundId: roundId, answer: answer, startedAt: timestamp, updatedAt: timestamp, answeredInRound: roundId }); } function setDecimals(uint8 _decimals) external { keyDecimals = _decimals; } function latestRoundData() external view returns ( uint80, int256, uint256, uint256, uint80 ) { return getRoundData(uint80(latestRound())); } function latestRound() public view returns (uint256) { return roundId; } function decimals() external view returns (uint8) { return keyDecimals; } function getAnswer(uint256 _roundId) external view returns (int256) { Entry memory entry = entries[_roundId]; return entry.answer; } function getTimestamp(uint256 _roundId) external view returns (uint256) { Entry memory entry = entries[_roundId]; return entry.updatedAt; } function getRoundData(uint80 _roundId) public view returns ( uint80, int256, uint256, uint256, uint80 ) { Entry memory entry = entries[_roundId]; // Emulate a Chainlink aggregator require(entry.updatedAt > 0, "No data present"); return (entry.roundId, entry.answer, entry.startedAt, entry.updatedAt, entry.answeredInRound); } }