상세 컨텐츠

본문 제목

체인링크 데이터 피드 아키텍처

Blockchain/Oracle - Chainlink

by Yongari 2023. 4. 4. 19:15

본문

Basic Request Model

체인링크는 탈중앙화된 오라클 네트워크를 사용해 스마트 콘트랙트와 외부 데이터를 연결합니다. 체인링크 API 요청은 오라클에 의해 1:1로 처리됩니다.

기본 요청 모델은 단일 오라클 소스로부터 데이터를 요청하는 온체인 아키텍처를 설명합니다.

단일 오라클을 사용해 GET 요청을 하는 방법을 알아보려면 GET 요청하기를 참조하세요.

Decentralized Data Mode


보다 강력하고 신뢰할 수 있는 답변을 얻기 위해 여러 오라클의 데이터를 집계할 수 있습니다. 온체인 집계에서는 독립적인 오라클 노드로 구성된 탈중앙화된 네트워크에서 데이터가 집계됩니다. 이 아키텍처는 자산 가격 데이터와 같은 데이터를 집계할 수 있는 체인링크 데이터 피드에 적용됩니다.

탈중앙화 데이터 모델은 데이터가 집계되는 방식과 소비자 콘트랙트가 이 데이터를 검색하는 방법을 설명합니다.

Off-Chain Reporting


오프체인 보고(OCR)는 체인링크 네트워크의 탈중앙화 및 확장성을 개선한 기능입니다. 오프체인 보고 애그리게이터를 통해 모든 노드는 P2P 네트워크를 사용하여 통신합니다. 통신 과정에서 각 노드가 가격 관측을 보고하고 서명하는 경량 합의 알고리즘이 실행됩니다. 그런 다음 단일 집계 트랜잭션이 전송되어 상당한 양의 가스를 절약할 수 있습니다.

 


Basic Request Model

 

 

 

Contracts Overview

All source code is open source and available in the Chainlink Github repositor

 

GitHub - smartcontractkit/chainlink: node of the decentralized oracle network, bridging on and off-chain computation

node of the decentralized oracle network, bridging on and off-chain computation - GitHub - smartcontractkit/chainlink: node of the decentralized oracle network, bridging on and off-chain computation

github.com

 

ChainlinkClient > (transferAndCall) > Link Token > (onTokenTransfer) > Oracle Contract > (oracle request) > Off-Chain(Oracle Node) > (fulfilOrcalRequest) > Oracle Contract > (callback) > ChainlinkClient

 

ChainlinkClient

체인링크 클라이언트는 스마트 콘트랙트가 오라클의 데이터를 사용할 수 있도록 하는 부모 콘트랙트입니다. 최신 패키지 관리자를 사용하여 설치할 수 있는 체인링크 스마트 컨트랙트 라이브러리에서 사용할 수 있습니다.

클라이언트는 LINK 토큰으로 구현된 transferAndCall 함수를 통해 알려진 체인링크 오라클을 구성하고 요청합니다. 이 요청에는 사이클이 성공하는 데 필요한 인코딩된 정보가 포함됩니다. 체인링크 클라이언트 콘트랙트에서 이 호출은 sendChainlinkRequestTo에 대한 호출로 시작됩니다.

체인링크 클라이언트를 사용해 자신만의 클라이언트 컨트랙트를 구축하려면, 모든 API 사용 소개를 참조하거나 체인링크 클라이언트 컨트랙트에 대한 체인링크 클라이언트 API 참조를 확인하세요.

LINK는 단일 트랜잭션 내에서 토큰을 전송하는 동시에 수신 컨트랙트의 로직을 트리거할 수 있는 기능인 transferAndCall을 구현하는 ERC-677 준수 토큰입니다.

ERC-677과 LINK 토큰에 대해 자세히 알아보세요.

Oracle Contract

오라클 컨트랙트는 오라클 노드 운영자가 소유하며, 오프체인 오라클 노드와 함께 실행됩니다.

 

Request

이 주기를 시작하는 클라이언트 컨트랙트는 다음 항목이 포함된 요청을 생성해야 합니다:

오라클 주소.
오라클이 어떤 작업을 수행할지 알 수 있도록 작업 ID.
오라클이 응답을 보내는 콜백 함수.
필요에 맞는 오라클을 찾는 방법에 대해 알아보려면 기존 작업 찾기를 참조하세요.

오라클 콘트랙트는 LinkTokenReceiver로 onTokenTransfer를 구현하여 LINK 토큰을 통해 이루어진 온체인 요청을 처리합니다. 이 함수가 실행되면 오라클 컨트랙트는 요청에 대한 정보가 포함된 OracleRequest 이벤트를 방출합니다. 이 이벤트는 이를 처리하는 오프체인 오라클 노드에서 모니터링하므로 매우 중요합니다.

 

Fulfillment

트랜잭션 처리를 위해 오라클 컨트랙트에는 노드가 작업 결과를 받은 후 요청을 처리하는 데 사용하는 fulfillOracleRequest 함수가 있습니다. 이 함수는 원래 요청에 정의된 콜백 함수를 사용하여 결과를 체인링크 클라이언트에 반환합니다.

 

 

Off-Chain Oracle Node

오프체인 오라클 노드는 해당 온체인 스마트 콘트랙트에서 발생하는 이벤트를 수신할 책임이 있습니다. 오라클 노드는 오라클 요청 이벤트를 감지하면 방출된 데이터를 사용하여 작업을 수행합니다.

노드의 가장 일반적인 작업 유형은 API에 GET 요청을 하고, API에서 일부 데이터를 검색하고, 응답을 파싱하고, 결과를 블록체인 호환 데이터로 변환한 다음, 이행 오라클 요청 함수를 사용하여 트랜잭션으로 오라클 컨트랙트에 다시 제출하는 것입니다.

노드 운영자가 되는 방법에 대한 자세한 내용은 체인링크 노드 실행 방법을 참조하세요.

 

 

Consumer UML

아래는 체인링크클라이언트를 구현하는 배포된 컨트랙트 예시인 ATestnetConsumer의 컨트랙트 구조를 설명하는 UML 다이어그램입니다.

 

 

(상세한 정보를 보고싶었으나 홈페이지에서 제공해주지 않는 것 같다.)

 

 

 

Decentralized Data Model

이 페이지에서는 데이터 집계가 어떻게 적용되어 체인링크 데이터 피드를 생성하는지 설명하고, 데이터 피드가 업데이트되는 방식에 대한 자세한 인사이트를 제공합니다.

 

 

Data Aggregation

각 데이터 피드는 다수의 독립적인 체인링크 오라클 운영자에 의해 업데이트됩니다. AccessControlledOffchainAggregator는 온체인 데이터를 집계합니다.

오프체인 보고(OCR)는 집계 프로세스를 더욱 향상시킵니다. OCR과 그 작동 방식에 대해 자세히 알아보려면 오프체인 보고 페이지를 참조하세요.

 

 

 

Shared Data Resource


각 데이터 피드는 스마트 컨트랙트에서 정확한 최신 데이터를 사용하는 사용자 커뮤니티에 의해 구축되고 자금을 지원받습니다. 더 많은 사용자가 데이터 피드에 의존하고 기여할수록 데이터 피드의 품질이 향상됩니다. 이러한 이유로 각 데이터 피드에는 사용자 커뮤니티의 필요에 따라 고유한 속성이 있습니다.

Decentralized Oracle Network


각 데이터 피드는 탈중앙화된 오라클 네트워크에 의해 업데이트됩니다. 각 오라클 운영자는 데이터 게시에 대한 보상을 받습니다. 각 피드에 기여하는 오라클의 수는 다양합니다. 업데이트가 이루어지려면 데이터 피드 애그리게이터 계약이 최소 개수의 오라클로부터 응답을 받아야 하며, 그렇지 않으면 최신 응답이 업데이트되지 않습니다. 해당 피드의 최소 오라클 수는 data.chain.link에서 확인할 수 있습니다.

집합의 각 오라클은 집계 라운드 동안 데이터를 게시합니다. 이 데이터는 스마트 계약에 의해 유효성이 검사되고 집계되어 피드의 신뢰할 수 있는 최신 답변이 형성됩니다.

Components of a Decentralized Oracle Network


데이터 피드는 탈중앙화된 오라클 네트워크의 한 예이며, 다음과 같은 구성 요소를 포함합니다:

 

기존 데이터 피드를 사용하는 소비자 계약을 생성하는 방법을 알아보려면 데이터 피드 사용 문서를 참조하세요.

 

Consumer

소비자 컨트랙트는 체인링크 데이터 피드를 사용하여 집계된 데이터를 소비하는 모든 컨트랙트입니다. 소비자 컨트랙트는 올바른 AggregatorV3 인터페이스 컨트랙트를 참조하고 노출된 함수 중 하나를 호출해야 합니다.

 

AggregatorV3Interface feed = AggregatorV3Interface(address);
return feed.latestRoundData();

오프체인 애플리케이션도 데이터 피드를 사용할 수 있습니다. 자세한 내용은 데이터 피드 사용하기 페이지의 자바스크립트 및 파이썬 예제 코드를 참조하세요.

 

 

Proxy

프록시 콘트랙트는 특정 데이터 피드에 대한 어그리게이터를 가리키는 온체인 프록시입니다. 프록시를 사용하면 소비 컨트랙트에 대한 서비스 중단 없이 기본 어그리게이터를 업그레이드할 수 있습니다.

프록시 콘트랙트는 데이터 피드마다 다를 수 있지만, 깃허브의 AggregatorProxy.sol 콘트랙트가 일반적인 예입니다.

 

 

Aggregator

어그리게이터는 오라클 네트워크에서 주기적으로 데이터 업데이트를 수신하는 콘트랙트입니다. 애그리게이터는 집계된 데이터를 온체인에 저장하여 소비자가 동일한 트랜잭션 내에서 데이터를 검색하고 그에 따라 행동할 수 있도록 합니다.

데이터 피드 주소와 AggregatorV3인터페이스 컨트랙트를 사용하여 이 데이터에 액세스할 수 있습니다.

어그리게이터는 집계 라운드 중에 편차 임계값 또는 하트비트 임계값이 업데이트를 트리거할 때만 오라클 네트워크에서 업데이트를 수신합니다. 첫 번째 조건이 충족되면 데이터 업데이트가 트리거됩니다.

- 편차 임계값: 노드가 오프체인 값이 온체인 값에서 정의된 편차 임계값보다 더 많이 벗어나는 것을 식별하면 새로운 집계 라운드가 시작됩니다. 개별 노드는 각 피드에 대해 하나 이상의 데이터 제공자를 모니터링합니다.

 

- 하트비트 임계값: 마지막 업데이트 후 지정된 시간이 지나면 새로운 집계 라운드가 시작됩니다.

 

 

Off-Chain Reporting

 

오프체인 보고(OCR)는 체인링크 네트워크의 탈중앙화와 확장성을 높이기 위한 중요한 단계입니다. 기술적으로 자세히 알아보시려면 OCR 프로토콜 백서를 참조하시기 바랍니다.

오프체인 보고 애그리게이터의 경우, 모든 노드는 P2P 네트워크를 사용해 통신합니다. 통신 과정에서 각 노드가 데이터 관찰을 보고하고 서명하는 경량 합의 알고리즘이 실행됩니다. 그런 다음 단일 집계 트랜잭션이 전송되어 상당한 양의 가스를 절약할 수 있습니다.

집계 트랜잭션에 포함된 보고서는 오라클 쿼럼에 의해 서명되며, 모든 오라클의 관측값이 포함됩니다. 온체인에서 보고서를 검증하고 온체인에서 쿼럼의 서명을 확인함으로써, 저희는 체인링크 오라클 네트워크의 무신뢰 속성을 보존합니다.

 

A SIMPLE ANALOGY

온라인 스토어에서 10개의 상품을 주문한다고 가정해 보겠습니다. 각 품목은 개별적으로 포장되어 개별적으로 게시되므로 우편 요금과 포장 비용이 각각 적용되어야 하며 배송업체는 10개의 상자를 운송해야 합니다.
반면 OCR은 이러한 모든 품목을 하나의 상자에 포장하여 게시합니다. 따라서 우편 요금과 포장 비용을 절약할 수 있으며, 배송업체는 9개의 상자를 운송하는 데 드는 모든 노력을 줄일 수 있습니다.

OCR 프로토콜을 사용하면 노드가 안전한 P2P 네트워크를 사용하여 오프체인에서 관찰 내용을 단일 보고서로 집계할 수 있습니다. 그런 다음 단일 노드가 집계된 보고서가 포함된 트랜잭션을 체인에 제출합니다. 각 보고서는 여러 노드의 관측값으로 구성되며, 노드 정족수의 서명을 받아야 합니다. 이러한 서명은 온체인에서 검증됩니다.

라운드당 하나의 트랜잭션만 제출하면 다음과 같은 이점을 얻을 수 있습니다:

1. 체인링크 오라클 네트워크의 전반적인 네트워크 혼잡이 크게 감소합니다.
2. 개별 노드 운영자는 가스 비용을 훨씬 적게 지출합니다.
3. 데이터 피드가 더 많은 노드를 수용할 수 있기 때문에 노드 네트워크의 확장성이 향상됩니다.
4. 각 라운드에서 가격이 온체인에서 확정되기 전에 여러 트랜잭션이 확정될 때까지 기다릴 필요가 없으므로 데이터 피드를 보다 적시에 업데이트할 수 있습니다.

 

 

How does OCR work?

프로토콜 실행은 대부분 체인링크 노드 간의 피어 투 피어 네트워크를 통해 오프체인에서 이루어집니다. 노드는 정기적으로 프로토콜의 나머지 부분을 주도하는 새로운 리더 노드를 선출합니다.

리더는 정기적으로 팔로워에게 새로 서명된 관측값을 제공하도록 요청하고 이를 보고서로 집계합니다. 그런 다음 이 보고서를 팔로워들에게 다시 보내고 보고서의 유효성을 확인하도록 요청합니다. 팔로워 정족수가 서명된 사본을 리더에게 다시 보내 보고서를 승인하면, 리더는 정족수의 서명이 포함된 최종 보고서를 작성하여 모든 팔로워에게 브로드캐스트합니다.

노드는 무작위 일정에 따라 최종 보고서를 어그리게이터 컨트랙트에 전송하려고 시도합니다. 어그리게이터는 쿼럼의 노드가 보고서에 서명했는지 확인하고 중간값을 블록 타임스탬프와 라운드 ID가 포함된 답변으로 소비자에게 노출합니다.

모든 노드는 전송 중 단일 실패 지점을 제거하기 위해 최종 보고서를 위해 블록체인을 감시합니다. 지정된 노드가 정해진 기간 내에 전송을 확인하지 못하면 라운드 로빈 프로토콜이 시작되어 다른 노드도 한 노드가 확인될 때까지 최종 보고서를 전송할 수 있습니다.

 

관련글 더보기