티스토리 뷰
AggregatorV3Interface
Chainlink에서 제공하는 Data Feeds 컨트랙트를 프록시 컨트랙트에서 호출하기 위해 필요한 인터페이스. 프록시 주소를 사용해 다음과 같이 인터페이스 객체를 생성하여 사용할 수 있다.
/**
* Network: Sepolia
* Data Feed: ETH/USD
* Address: 0x694AA1769357215DE4FAC081bf1f309aDC325306
*/
constructor() {
priceFeed = AggregatorV3Interface(0x694AA1769357215DE4FAC081bf1f309aDC325306);
}
AggregatorV3Interface 함수들
decimals
응답값의 소숫점 자릿수. 예를 들어, 8이 반환된 경우 응답은 소숫점 아래 8자리를 가져야 한다. (3428543226012 -> 34285.43226012)
function decimals() external view returns (uint8);
description
'BTC / USD', 'ETH / USD' 등 aggregator에 대한 설명을 반환한다.
function description() external view returns (string memory);
getRoundData
라운드 id를 지정하여 특정 라운드 데이터를 가져온다.
function getRoundData(
uint80 _roundId
) external view returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound);
parameters:
_roundId: 데이터를 가져올 라운드의 id
Return values:
roundId: 라운드 id
answer: 응답값
startedAt: 라운드가 시작된 시점의 타임스탬프
updatedAt: 라운드가 업데이트된 시점의 타임스탬프
answeredInRound: Deprecated - 이전에 응답을 계산하기 위해 여러 라운드가 걸렸을 때 사용하던 값
latestRoundData
최신 라운드의 데이터를 가져온다.
function latestRoundData() external view
returns (
uint80 roundId,
int256 answer,
uint256 startedAt,
uint256 updatedAt,
uint80 answeredInRound
)
Return values:
roundId: 라운드 id
answer: 응답값
startedAt: 라운드가 시작된 시점의 타임스탬프
updatedAt: 라운드가 업데이트된 시점의 타임스탬프
answeredInRound: Deprecated - 이전에 응답을 계산하기 위해 여러 라운드가 걸렸을 때 사용하던 값
version
aggregator의 타입을 나타낸다.
function version() external view returns (uint256)
Remix 배포 실습
코드
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;
import "@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol";
/**
* THIS IS AN EXAMPLE CONTRACT THAT USES HARDCODED
* VALUES FOR CLARITY.
* THIS IS AN EXAMPLE CONTRACT THAT USES UN-AUDITED CODE.
* DO NOT USE THIS CODE IN PRODUCTION.
*/
/**
* If you are reading data feeds on L2 networks, you must
* check the latest answer from the L2 Sequencer Uptime
* Feed to ensure that the data is accurate in the event
* of an L2 sequencer outage. See the
* https://docs.chain.link/data-feeds/l2-sequencer-feeds
* page for details.
*/
contract DataConsumerV3 {
AggregatorV3Interface internal dataFeed;
/**
* Network: Sepolia
* Aggregator: BTC/USD
* Address: 0x1b44F3514812d835EB1BDB0acB33d3fA3351Ee43
*/
constructor() {
dataFeed = AggregatorV3Interface(
0x1b44F3514812d835EB1BDB0acB33d3fA3351Ee43
);
}
/**
* Returns the latest answer.
*/
function getChainlinkDataFeedLatestAnswer() public view returns (int) {
// prettier-ignore
(
/* uint80 roundID */,
int answer,
/*uint startedAt*/,
/*uint timeStamp*/,
/*uint80 answeredInRound*/
) = dataFeed.latestRoundData();
return answer;
}
}
배포
1. 메타마스크 지갑 연결
2. sepolia testnet 배포
3. getChainlinkDataFeedLatestAnswer 함수 실행
응답값이 3437156000000로 현재 비트코인 가격이 달러로 $34371.56 임을 알 수 있다.
'개발 부스러기' 카테고리의 다른 글
WSL에서 Github 사용하기 (0) | 2023.12.26 |
---|---|
WSL에서 Go 사용하기 (0) | 2023.12.26 |
바빌로니아 법 (The Babylonian Method) (0) | 2023.04.10 |
[Nginx] Reverse Proxy 설정 (0) | 2023.04.03 |
[Trouble Shooting] net::ERR_NAME_NOT_RESOLVED (0) | 2023.04.02 |