티스토리 뷰

개발 부스러기

Chainlink - Data Feeds

piatoss 2023. 10. 31. 18:37

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
최근에 올라온 글
최근에 달린 댓글
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Total
Today
Yesterday
글 보관함