Ethereum 에서 사용할 수 있는 주요 오라클 서비스를 아래에 나열하고, 각 서비스의 특징, 내용, 사용 방법, 그리고 레퍼런스를 정리해보았습니다. 

 


1. Chainlink

  • 내용: 가장 널리 사용되는 탈중앙화 오라클 네트워크로, 스마트 컨트랙트와 외부 데이터 간의 안전한 연결을 제공합니다. 
  • 특징:
    • 탈중앙화된 네트워크로 높은 신뢰성 제공.
    • 가격 피드, 랜덤 난수 생성(VRF), 이벤트 데이터 등을 지원.
    • 다양한 블록체인과 호환.
  • 사용방법:
    1. LINK 토큰 구매 및 오라클 네트워크 수수료 지불.
    2. ChainlinkClient 라이브러리를 사용하여 데이터 요청.
    3. 스마트 컨트랙트에서 fulfill 함수로 응답 처리.
  • 레퍼런스
  • 코드 예시
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;

import "@chainlink/contracts/src/v0.8/ChainlinkClient.sol";

contract ChainlinkOracle is ChainlinkClient {
    using Chainlink for Chainlink.Request;

    uint256 public data;
    address private oracle;
    bytes32 private jobId;
    uint256 private fee;

    constructor() {
        setPublicChainlinkToken();
        oracle = 0xOracleAddress; // Replace with actual oracle address
        jobId = "yourJobId"; // Replace with actual job ID
        fee = 0.1 * 10 ** 18; // 0.1 LINK
    }

    function requestData() public {
        Chainlink.Request memory req = buildChainlinkRequest(jobId, address(this), this.fulfill.selector);
        sendChainlinkRequestTo(oracle, req, fee);
    }

    function fulfill(bytes32 _requestId, uint256 _data) public recordChainlinkFulfillment(_requestId) {
        data = _data;
    }
}

 


2. Band Protocol

  • 내용: 탈중앙화 오라클 네트워크로, 데이터 제공자와 데이터 소비자를 연결하여 빠르고 확장 가능한 데이터 피드를 제공합니다. 
  • 특징:
    • 다양한 데이터 소스와 연동 가능.
    • 데이터 수집 및 검증 프로세스가 효율적.
    • BandChain 과 Ethereum 간 상호작용 지원.
  • 사용방법
    1. BandChain 에서 데이터를 요청하는 스마트 컨트랙트를 작성.
    2. Ethereum 에서 BandChain 의 데이터 요청 결과를 사용하는 컨트랙트를 구현.
  • 레퍼런스
  • 코드 예시
contract BandOracle {
    uint256 public price;

    function updatePrice(uint256 _price) external {
        price = _price;
    }
}

 


3. API3 (Airnode)

  • 내용: 탈중앙화 오라클로, API 제공자들이 직접 데이터를 블록체인에 게시할 수 있도록 하는 Airnode 를 기반으로 작동.
  • 특징
    • API 제공자가 직접 데이터 소유
    • 탈중앙화된 구조로 신뢰성 강화
    • 가스비 절약과 사용자 친화적 설계
  • 사용방법
    1. Airnode 서버를 설정하고 API 제공자를 등록
    2. API 데이터를 사용하는 스마트 컨트랙트를 작성
    3. 요청 결과를 컨트랙트에 반환
  • 레퍼런스
  • 코드 예시
contract API3Oracle {
    uint256 public data;

    function updateData(uint256 _data) external {
        data = _data;
    }
}

 


4. Provable (이전 Oraclize)

  • 내용: Ethereum 스마트 컨트랙트에 HTTP API 를 호출하여 데이터를 가져올 수 있는 서비스
  • 특징
    • 간단하고 직관적인 사용법
    • HTTPS 를 통한 데이터 보안 강화
    • 다양한 데이터 소스와 연동 가능
  • 사용방법
    1. provable_query 함수로 외부 API 호출
    2. __callback 함수에서 API 응답 처리
  • 레퍼런스
  • 코드 예시
import "provableAPI.sol";

contract ExampleContract is usingProvable {
    string public result;

    function fetchData() public {
        provable_query("URL", "json(https://api.example.com/data).result");
    }

    function __callback(bytes32 myId, string memory _result) public override {
        require(msg.sender == provable_cbAddress());
        result = _result;
    }
}

 


5. Witnet

  • 내용: 탈중앙화된 오라클 프로토콜로, 데이터를 Ethereum 스마트 컨트랙트에 안전하게 가져옵니다. 
  • 특징
    • 데이터 요청과 응답을 탈중앙화된 노드 네트워크에서 처리
    • 높은 신뢰성과 데이터 무결성 보장
    • 사용이 간편하고 빠른 응답 속도
  • 사용방법
    1. WitnetRequestBoard 를 사용하여 데이터 요청
    2. 결과를 확인하고 스마트 컨트랙트에서 사용
  • 레퍼런스
  • 코드 예시
import "@witnet/contracts/src/WitnetRequest.sol";

contract WitnetOracle {
    uint256 public data;

    function updateData(uint256 _data) external {
        data = _data;
    }
}

오라클 서비스 선택 기준

  1. 보안성: 데이터 무결성, 탈중앙화 여부
  2. 속도 및 비용: 데이터 요청의 응답 시간과 수수료
  3. 사용 사례: 가격 피드, 난수 생성, 이벤트 데이터 등 요구사항에 적합한 서비스

추가 참고 자료

각 서비스는 사용 목적과 보안 요구 사항에 따라 선택해야 합니다. 예를 들어, 가격 데이터를 실시간으로 제공받기 위해선 Chainlink, API3, Band Protocol 이 적합하고, 난수 생성을 위해선 Chainlink VRF가 유용합니다. 

+ Recent posts