Ethereum 에서 사용할 수 있는 주요 오라클 서비스를 아래에 나열하고, 각 서비스의 특징, 내용, 사용 방법, 그리고 레퍼런스를 정리해보았습니다.
1. Chainlink
- 내용: 가장 널리 사용되는 탈중앙화 오라클 네트워크로, 스마트 컨트랙트와 외부 데이터 간의 안전한 연결을 제공합니다.
- 특징:
- 탈중앙화된 네트워크로 높은 신뢰성 제공.
- 가격 피드, 랜덤 난수 생성(VRF), 이벤트 데이터 등을 지원.
- 다양한 블록체인과 호환.
- 사용방법:
- LINK 토큰 구매 및 오라클 네트워크 수수료 지불.
- ChainlinkClient 라이브러리를 사용하여 데이터 요청.
- 스마트 컨트랙트에서 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 간 상호작용 지원.
- 사용방법
- BandChain 에서 데이터를 요청하는 스마트 컨트랙트를 작성.
- Ethereum 에서 BandChain 의 데이터 요청 결과를 사용하는 컨트랙트를 구현.
- 레퍼런스
- 코드 예시
contract BandOracle {
uint256 public price;
function updatePrice(uint256 _price) external {
price = _price;
}
}
3. API3 (Airnode)
- 내용: 탈중앙화 오라클로, API 제공자들이 직접 데이터를 블록체인에 게시할 수 있도록 하는 Airnode 를 기반으로 작동.
- 특징
- API 제공자가 직접 데이터 소유
- 탈중앙화된 구조로 신뢰성 강화
- 가스비 절약과 사용자 친화적 설계
- 사용방법
- Airnode 서버를 설정하고 API 제공자를 등록
- API 데이터를 사용하는 스마트 컨트랙트를 작성
- 요청 결과를 컨트랙트에 반환
- 레퍼런스
- 코드 예시
contract API3Oracle {
uint256 public data;
function updateData(uint256 _data) external {
data = _data;
}
}
4. Provable (이전 Oraclize)
- 내용: Ethereum 스마트 컨트랙트에 HTTP API 를 호출하여 데이터를 가져올 수 있는 서비스
- 특징
- 간단하고 직관적인 사용법
- HTTPS 를 통한 데이터 보안 강화
- 다양한 데이터 소스와 연동 가능
- 사용방법
- provable_query 함수로 외부 API 호출
- __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 스마트 컨트랙트에 안전하게 가져옵니다.
- 특징
- 데이터 요청과 응답을 탈중앙화된 노드 네트워크에서 처리
- 높은 신뢰성과 데이터 무결성 보장
- 사용이 간편하고 빠른 응답 속도
- 사용방법
- WitnetRequestBoard 를 사용하여 데이터 요청
- 결과를 확인하고 스마트 컨트랙트에서 사용
- 레퍼런스
- 코드 예시
import "@witnet/contracts/src/WitnetRequest.sol";
contract WitnetOracle {
uint256 public data;
function updateData(uint256 _data) external {
data = _data;
}
}
오라클 서비스 선택 기준
- 보안성: 데이터 무결성, 탈중앙화 여부
- 속도 및 비용: 데이터 요청의 응답 시간과 수수료
- 사용 사례: 가격 피드, 난수 생성, 이벤트 데이터 등 요구사항에 적합한 서비스
추가 참고 자료
각 서비스는 사용 목적과 보안 요구 사항에 따라 선택해야 합니다. 예를 들어, 가격 데이터를 실시간으로 제공받기 위해선 Chainlink, API3, Band Protocol 이 적합하고, 난수 생성을 위해선 Chainlink VRF가 유용합니다.
'Solidity' 카테고리의 다른 글
| assembly ("memory-safe"){} 문법 (1) | 2025.02.01 |
|---|---|
| Solidity 개발 시, 가스비 절감을 위한 최적화 기법 (1) | 2025.01.03 |
| 외부 오라클을 사용한 난수 생성 방법 (5) | 2025.01.03 |
| delegate call 이란? (1) | 2025.01.03 |
| Solidity에서의 예외처리: require vs. assert (0) | 2025.01.02 |