Solidity에서 실시간 가격 데이터 가져오기

소개



Fetching data 외부 Ethereum 또는 블록체인 플랫폼은 대부분의 스마트 계약 엔지니어가 dApp에 실제로 권한을 부여하는 데 필요한 것입니다. 신뢰할 수 있는 실시간 가격 데이터를 견고하게 가져오는 것은 강력한 DeFi 프로토콜과 빠른 "빨리 가난해지기"체계를 갖는 것 사이의 차이일 수 있습니다.

우리는 Aave , Synthetixyearn.finance 과 같은 실제 가격 데이터를 이미 가져온 믿을 수 없을 정도로 성공적인 많은 defi 프로젝트를 보았습니다. 이들은 현재 securing billions of dollars in the defi space 인 프로토콜입니다.

신뢰할 수 있는 가격 데이터가 있다는 것은 차입, 대출, 거래, 합성 자산, 담보 담보 등과 관련된 프로토콜을 만들 수 있다는 것을 의미합니다. 가격 데이터를 잘못 파악하면 이제 수백만 명의 삶을 망칠 수 있는 기회가 생겼습니다.

멋진 으스스한 플랫폼 인 할로윈에 딱 맞습니다.



나는 이미이 게시물에서 너무 재미 있습니다.

가격 데이터 품질



Stock API , Crypto API 에서 데이터를 가져오든 사촌 Larry가 대신 코인 가격을 업로드하든 상관없이 가격 데이터의 출처를 알고 싶을 것입니다. 스마트 계약에 넣으려면 data decentralized 가지고 있습니다.

따라서 Larry가 정말로 당신을 위한 가격 오라클이 되고 싶다면 그가 그 일을 하는 유일한 사람이 아닌지 확인하십시오.

스마트 계약에서는 데이터를 분산화해야 합니다. 그렇지 않으면 블록체인에서 애플리케이션을 구축하지 않는 것이 나을 수도 있습니다. 탈중앙화 시스템에 중앙집중식 데이터 공급자를 두는 것은 애당초 탈중앙화 플랫폼을 구축하려는 목적을 무산시키는 것입니다!

따라서 우리는 데이터를 신뢰할 수 있고 분산된 상태로 유지하기 위해 Chainlink 오라클 네트워크에서 가져오고 네트워크가 여러 Cryptocurrency API 및 (다른 자산 클래스를 원하는 경우) Stock API 공급자로부터 데이터를 가져오길 원합니다.

현재 두 가지 접근 방식이 있으며 각 접근 방식에는 blockchain oracle 사용이 포함됩니다.

1. 체인링크 가격 피드



Chainlink Price Feeds은 견고성 스마트 계약에서 실시간 가격 데이터를 가져오는 가장 쉽고, 가장 분산되고, 신뢰할 수 있는 방법입니다. 그들은 network of Chainlink nodes에서 데이터를 가져오고 체인에서 답변을 업데이트하고 집계합니다. 모든 노드의 응답을 볼 수 있으므로 악의적인 노드가 있는지 알 수 있습니다.

데이터를 가져오는 기능도 simple view function이므로 최신 가격을 가져오기 위해 가스를 소비할 필요조차 없습니다!

다음은 Kovan에서 최신 ETH/USD 가격을 얻는 방법에 대한 샘플입니다. remix with this link에 배포해 볼 수 있습니다.

pragma solidity ^0.6.7;

import "@chainlink/contracts/src/v0.6/interfaces/AggregatorV3Interface.sol";

contract PriceConsumerV3 {

    AggregatorV3Interface internal priceFeed;

    /**
     * Network: Kovan
     * Aggregator: ETH/USD
     * Address: 0x9326BFA02ADD2366b30bacB125260Af641031331
     */
    constructor() public {
        priceFeed = AggregatorV3Interface(0x9326BFA02ADD2366b30bacB125260Af641031331);
    }

    /**
     * Returns the latest price
     */
    function getLatestPrice() public view returns (int) {
        (
            uint80 roundID, 
            int price,
            uint startedAt,
            uint timeStamp,
            uint80 answeredInRound
        ) = priceFeed.latestRoundData();
        // If the round is not complete yet, timestamp is 0
        require(timeStamp > 0, "Round not complete");
        return price;
    }
}


kovan에 계약을 배포하면 getLatestPrice 함수를 호출하기만 하면 가격 데이터를 가져올 수 있습니다!

이것은 우리가 통화 쌍의 대리 계약을 알고 있기 때문에 작동합니다. chainlink 문서에서 list of supported pairs을 찾을 수 있습니다. 우리는 견고하게 빠른 가스 가격을 얻을 수 있습니다! 즉, 스마트 계약 내에서 특정 실행을 수행하는 데 드는 가스 비용을 추정할 수 있습니다.

feeds.chain.link 페이지에는 가격 쌍에 대한 자세한 정보(최종 업데이트 날짜, 노드 응답 내용, 가스 비용 등 포함)를 표시하는 다양한 시각화가 있습니다.



2. 체인링크 API 호출



에 대한 제 이전 블로그를 읽으셨다면 Chainlink를 사용하여 데이터 소스의 모든 API에 액세스할 수 있다는 것을 알고 계실 것입니다.

가격 데이터를 가져오는 것과 다르지 않습니다. 단순히 여러 개의 분산화Chainlink API calls를 만들고 체인에서 집계합니다. 이전에 Chainlink API 호출을 한 적이 없다면, 제 마지막 블로그를 확인하거나 example walkthrough을 살펴보는 것이 좋습니다.

Click here for a demo on remix Ropsten의 Alpha Vantage에서 주가 데이터를 가져오는 방법을 보여줍니다.

분산화되었는지 확인하기 위해 여러 노드 및 데이터 공급자와 함께 이 작업을 여러 번 수행하고 싶을 것입니다. 이렇게 하면 기본적으로 가격 피드를 갖게 됩니다.

요약



이들은 많은 defi 거대 기업이 데이터를 프로토콜로 가져오기 위해 사용하는 도구 중 일부입니다. 당신이 거기에 무엇을 구축하는지 보자! 에서 나에게 핑을 보내십시오
트위터에서 당신이 무엇을 만들었는지 보고 싶습니다!

또한 Chainlink developers 디스코드에 가입하여 커뮤니티에 가입하고 배우고 성장하십시오!

좋은 웹페이지 즐겨찾기