블록체인 영역에서 오라클은 온체인 스마트 계약에 외부 정보를 제공할 수 있는 시스템입니다. 스마트 계약과 블록체인 외부 세계를 연결하는 중간 매개체로서, 오라클은 매우 중요한 기반 시설 역할을 하며, 주요 기능은 블록체인의 스마트 계약에 데이터를 제공하는 것입니다.
예를 들어, 이더리움 네트워크에서 특정 날짜의 원유 거래량 데이터가 필요한 스마트 계약을 생성한다고 가정해 보겠습니다. 그러나 스마트 계약 자체는 이러한 오프체인 현실 세계 데이터를 얻을 수 없으므로 오라클을 통해 이를 실현해야 합니다. 이 경우 스마트 계약은 필요한 날짜의 원유 거래량을 이벤트 로그에 기록하고, 그 후 오프체인에서 이 이벤트 로그를 모니터링하고 구독하는 프로세스가 시작됩니다. 거래 요청을 수신하면 해당 프로세스는 온체인 거래를 제출하여 계약의 관련 메서드를 호출하고 지정된 날짜의 원유 거래량 정보를 스마트 계약에 업로드합니다.

데이터 출처: https://디파이라마(defillama.com)/오라클
체인링크(Chainlink)
블록체인에서 가장 큰 시장 점유율을 차지하는 것은 체인링크(Chainlink) 오라클입니다. 체인링크는 탈중앙화된 오라클 프로젝트로, 현실 세계에서 생성된 데이터를 가장 안전한 방식으로 블록체인에 제공하는 것이 그 역할입니다. 체인링크는 기본 오라클 원리 구현 방식 위에 링크(LINK) 토큰을 중심으로 경제적 인센티브를 통해 선순환 생태계를 구축했습니다. 체인링크 오라클은 링크(LINK) 토큰 전송을 통해 트리거됩니다. 링크(LINK)는 이더리움 네트워크의 이더리움 요청 사항(ERC) 677 계약입니다. 링크(LINK) 이더리움 요청 사항(ERC) 677 토큰을 기반으로 완료된 오라클 기능은 요청/응답 모드에 속합니다.
이 기능은 지정된 API(cryptocompare)에서 이더리움(ETH)/USD의 거래 가격을 가져오는 것입니다. 함수에 전달되는 매개변수는 지정된 오라클 주소와 작업 ID입니다. 일련의 요청 매개변수를 구성한 후, 「sendChainlinkRequestTo」 메서드를 호출하여 요청을 보냅니다. 「sendChainlinkRequestTo」는 체인링크(Chainlink)에서 제공하는 라이브러리에 정의된 인터페이스 메서드입니다.

오라클 계약은 전송을 받은 후 「onTokenTransfer」 메서드를 트리거하며, 이 메서드는 전송의 유효성을 확인하고 「OracleRequest」 이벤트를 발행하여 더 자세한 데이터 정보를 기록합니다.
이 로그는 오라클 계약의 로그에서 찾을 수 있습니다. 체인 외부의 노드는 해당 주제의 로그를 구독하고, 기록된 로그 정보를 얻은 후 노드는 요청의 구체적인 정보를 구문 분석하고 네트워크 API 호출을 통해 요청 결과를 얻습니다. 그 후 트랜잭션을 제출하는 방식으로 오라클 계약의 「fulfillOracleRequest」 메서드를 호출하여 데이터를 온체인에 제출합니다.
이 메서드는 일련의 검증을 수행한 후 이전에 기록된 콜백 주소 및 콜백 함수를 통해 결과를 소비자 계약에 반환합니다.
개발자로서 기존의 통화 쌍 가격을 사용하고 싶고 직접 URL을 지정하고 싶지 않다면 어떨까요?
답은 가능합니다. 첫 번째 사용 방법은 공식 예제 코드와 같습니다:

먼저, 각 거래 쌍에는 개별 Price Feed가 있으며, 이를 Aggregator라고도 하며, 실제로는 다음과 같은 여러 AggregatorProxy입니다:

구체적인 이 인터페이스 구현은 비교적 간단하며, 아베(AAVE)/이더리움(ETH) 쌍을 참조할 수 있습니다: https://etherscan.io/address/0x6Df09E975c830ECae5bd4eD9d90f3A95a4f88012#code
총 5개의 조회 메서드가 있습니다:
decimals(): 가격 데이터의 소수점 자릿수를 반환하며, 일반적으로 8 또는 18입니다.
description(): 일반적으로 거래 쌍 이름(예: 이더리움(ETH) / USD)
version(): 주로 Proxy가 가리키는 Aggregator 유형을 식별하는 데 사용됩니다.
getRoundData(_roundId): 라운드 ID를 기준으로 해당 시점의 가격 데이터를 가져옵니다.
latestRoundData(): 최신 가격 데이터를 가져옵니다.
대부분의 응용 프로그램 시나리오에서 계약은 최신 가격을 읽기만 하면 되므로 마지막 메서드를 호출하며, 반환 매개변수 중 answer가 최신 가격입니다.
또한, 대부분의 응용 프로그램은 토큰 가격을 USD를 기준으로 읽으며, 그렇다면 USD를 기준으로 하는 쌍의 소수점 자릿수는 8자리로 통일되어 있어 일반적으로 다른 토큰의 다른 정밀도를 처리할 필요가 없습니다.



