본문으로 건너뛰기
Change page

오라클

오라클은 오프체인 데이터 소스를 스마트 컨트랙트를 위해 블록체인에서 사용할 수 있도록 데이터 피드를 생성하는 애플리케이션입니다. 이더리움 기반 스마트 컨트랙트는 기본적으로 블록체인 네트워크 외부에 저장된 정보에 접근할 수 없기 때문에 이는 필수적입니다.

스마트 컨트랙트가 오프체인 데이터를 사용하여 실행될 수 있는 능력을 부여하면 탈중앙화 애플리케이션 (dapp)의 유용성과 가치가 확장됩니다. 예를 들어, 온체인 예측 시장은 사용자 예측을 검증하는 데 사용하는 결과에 대한 정보를 제공하기 위해 오라클에 의존합니다. 앨리스가 누가 다음 미국 대통령이 될 것인지에 20 ETH를 걸었다고 가정해 보겠습니다. 이 경우, 예측 시장 탈중앙화 애플리케이션 (dapp)은 선거 결과를 확인하고 앨리스가 지불금을 받을 자격이 있는지 결정하기 위해 오라클이 필요합니다.

전제 조건

이 페이지는 독자가 노드, 합의 메커니즘EVM을 포함한 이더리움의 기본 사항에 익숙하다고 가정합니다. 또한 스마트 컨트랙트스마트 컨트랙트 구조, 특히 에 대해 잘 이해하고 있어야 합니다.

블록체인 오라클이란 무엇인가요?

오라클은 외부 정보(즉, 오프체인에 저장된 정보)를 소싱, 검증하여 블록체인에서 실행되는 스마트 컨트랙트로 전송하는 애플리케이션입니다. 오프체인 데이터를 '가져와서(pulling)' 이더리움에 브로드캐스트하는 것 외에도, 오라클은 블록체인에서 외부 시스템으로 정보를 '밀어낼(push)' 수도 있습니다. 예를 들어, 사용자가 이더리움 트랜잭션을 통해 수수료를 보내면 스마트 도어록을 여는 식입니다.

오라클이 없다면 스마트 컨트랙트는 전적으로 온체인 데이터에만 제한될 것입니다.

오라클은 데이터 소스(단일 또는 다중 소스), 신뢰 모델(중앙화 또는 탈중앙화된), 시스템 아키텍처(즉시 읽기, 발행-구독, 요청-응답)에 따라 다릅니다. 또한 온체인 컨트랙트에서 사용하기 위해 외부 데이터를 검색하는지(입력 오라클), 블록체인에서 오프체인 애플리케이션으로 정보를 보내는지(출력 오라클), 또는 오프체인에서 연산 작업을 수행하는지(연산 오라클)에 따라 오라클을 구분할 수 있습니다.

스마트 컨트랙트에 오라클이 필요한 이유는 무엇인가요?

많은 개발자들은 스마트 컨트랙트를 블록체인의 특정 주소에서 실행되는 코드로 봅니다. 하지만 스마트 컨트랙트에 대한 더 일반적인 관점은 특정 조건이 충족되면 당사자 간의 합의를 강제할 수 있는 자체 실행 소프트웨어 프로그램이라는 것입니다. 그래서 '스마트 컨트랙트'라는 용어가 사용됩니다.

하지만 이더리움이 결정론적이라는 점을 고려할 때, 사람들 간의 합의를 강제하기 위해 스마트 컨트랙트를 사용하는 것은 간단하지 않습니다. 결정론적 시스템 (opens in a new tab)은 초기 상태와 특정 입력이 주어졌을 때 항상 동일한 결과를 생성하는 시스템으로, 입력에서 출력을 계산하는 과정에 무작위성이나 변동이 없음을 의미합니다.

결정론적 실행을 달성하기 위해, 블록체인은 노드가 블록체인 자체에 저장된 데이터_만_을 사용하여 단순한 이진(참/거짓) 질문에 대한 합의에 도달하도록 제한합니다. 이러한 질문의 예는 다음과 같습니다.

  • "계정 소유자(공개키로 식별됨)가 쌍을 이루는 개인 키로 이 트랜잭션에 서명했는가?"
  • "이 계정에 트랜잭션을 처리할 충분한 자금이 있는가?"
  • "이 트랜잭션이 이 스마트 컨트랙트의 컨텍스트에서 유효한가?" 등.

블록체인이 외부 소스(즉, 현실 세계)로부터 정보를 받는다면 결정론을 달성하는 것은 불가능해지며, 노드들이 블록체인의 상태 변경의 유효성에 대해 합의하는 것을 방해할 것입니다. 전통적인 가격 API에서 얻은 현재 ETH-USD 환율을 기반으로 트랜잭션을 실행하는 스마트 컨트랙트를 예로 들어보겠습니다. 이 수치는 자주 변경될 가능성이 높으며(API가 더 이상 사용되지 않거나 해킹될 수 있음은 말할 것도 없고), 이는 동일한 컨트랙트 코드를 실행하는 노드들이 서로 다른 결과에 도달하게 됨을 의미합니다.

전 세계 수천 개의 노드가 트랜잭션을 처리하는 이더리움과 같은 퍼블릭 블록체인에서 결정론은 매우 중요합니다. 진실의 원천 역할을 하는 중앙 권한이 없기 때문에, 노드들은 동일한 트랜잭션을 적용한 후 동일한 상태에 도달하기 위한 메커니즘이 필요합니다. 노드 A가 스마트 컨트랙트의 코드를 실행하여 결과로 "3"을 얻고, 노드 B가 동일한 트랜잭션을 실행한 후 "7"을 얻는 경우 합의가 무너지고 탈중앙화된 컴퓨팅 플랫폼으로서 이더리움의 가치가 사라질 것입니다.

이 시나리오는 또한 외부 소스에서 정보를 가져오도록 블록체인을 설계할 때 발생하는 문제를 강조합니다. 그러나 오라클은 오프체인 소스에서 정보를 가져와 스마트 컨트랙트가 소비할 수 있도록 블록체인에 저장함으로써 이 문제를 해결합니다. 온체인에 저장된 정보는 변경할 수 없고 공개적으로 사용할 수 있으므로, 이더리움 노드는 합의를 깨지 않고 상태 변경을 계산하기 위해 오라클이 가져온 오프체인 데이터를 안전하게 사용할 수 있습니다.

이를 위해 오라클은 일반적으로 온체인에서 실행되는 스마트 컨트랙트와 일부 오프체인 구성 요소로 이루어집니다. 온체인 컨트랙트는 다른 스마트 컨트랙트로부터 데이터 요청을 받아 오프체인 구성 요소(오라클 노드라고 함)로 전달합니다. 이 오라클 노드는 예를 들어 애플리케이션 프로그래밍 인터페이스(API)를 사용하여 데이터 소스를 쿼리하고, 요청된 데이터를 스마트 컨트랙트의 스토리지에 저장하기 위해 트랜잭션을 보낼 수 있습니다.

본질적으로 블록체인 오라클은 블록체인과 외부 환경 간의 정보 격차를 해소하여 "하이브리드 스마트 컨트랙트"를 만듭니다. 하이브리드 스마트 컨트랙트는 온체인 컨트랙트 코드와 오프체인 인프라의 조합을 기반으로 작동하는 컨트랙트입니다. 탈중앙화된 예측 시장은 하이브리드 스마트 컨트랙트의 훌륭한 예입니다. 다른 예로는 일련의 오라클이 특정 기상 현상이 발생했다고 판단할 때 보험금을 지급하는 농작물 보험 스마트 컨트랙트가 있습니다.

오라클 문제란 무엇인가요?

오라클은 중요한 문제를 해결하지만 다음과 같은 몇 가지 복잡성도 도입합니다.

  • 주입된 정보가 올바른 소스에서 추출되었는지 또는 변조되지 않았는지 어떻게 검증할 수 있을까요?

  • 이 데이터를 항상 사용할 수 있고 정기적으로 업데이트되도록 어떻게 보장할 수 있을까요?

이른바 "오라클 문제"는 블록체인 오라클을 사용하여 스마트 컨트랙트에 입력을 보낼 때 발생하는 문제들을 보여줍니다. 스마트 컨트랙트가 올바르게 실행되려면 오라클의 데이터가 정확해야 합니다. 또한, 정확한 정보를 제공하기 위해 오라클 운영자를 '신뢰'해야 한다는 점은 스마트 컨트랙트의 '무신뢰' 측면을 훼손합니다.

다양한 오라클이 오라클 문제에 대해 서로 다른 해결책을 제공하며, 이는 나중에 살펴보겠습니다. 오라클은 일반적으로 다음 과제들을 얼마나 잘 처리할 수 있는지에 따라 평가됩니다.

  1. 정확성: 오라클은 유효하지 않은 오프체인 데이터를 기반으로 스마트 컨트랙트가 상태 변경을 트리거하도록 해서는 안 됩니다. 오라클은 데이터의 진위성무결성을 보장해야 합니다. 진위성은 데이터가 올바른 소스에서 얻어졌음을 의미하며, 무결성은 데이터가 온체인으로 전송되기 전에 온전하게 유지되었음(즉, 변경되지 않았음)을 의미합니다.

  2. 가용성: 오라클은 스마트 컨트랙트가 작업을 실행하고 상태 변경을 트리거하는 것을 지연시키거나 방해해서는 안 됩니다. 이는 오라클의 데이터가 중단 없이 요청 시 사용 가능해야 함을 의미합니다.

  3. 인센티브 호환성: 오라클은 오프체인 데이터 제공자가 스마트 컨트랙트에 올바른 정보를 제출하도록 인센티브를 제공해야 합니다. 인센티브 호환성에는 귀속성책임성이 포함됩니다. 귀속성은 외부 정보의 일부를 그 제공자와 연결할 수 있게 해주며, 책임성은 데이터 제공자를 그들이 제공하는 정보에 결속시켜 제공된 정보의 품질에 따라 보상이나 페널티를 받을 수 있게 합니다.

블록체인 오라클 서비스는 어떻게 작동하나요?

사용자

사용자는 특정 작업을 완료하기 위해 블록체인 외부의 정보가 필요한 엔티티(즉, 스마트 컨트랙트)입니다. 오라클 서비스의 기본 워크플로우는 사용자가 오라클 컨트랙트에 데이터 요청을 보내는 것으로 시작됩니다. 데이터 요청은 일반적으로 다음 질문 중 일부 또는 전부에 답하게 됩니다.

  1. 오프체인 노드가 요청된 정보를 위해 어떤 소스를 참조할 수 있는가?

  2. 보고자는 데이터 소스의 정보를 어떻게 처리하고 유용한 데이터 포인트를 추출하는가?

  3. 데이터를 검색하는 데 얼마나 많은 오라클 노드가 참여할 수 있는가?

  4. 오라클 보고서의 불일치는 어떻게 관리되어야 하는가?

  5. 제출물을 필터링하고 보고서를 단일 값으로 집계하는 데 어떤 방법을 구현해야 하는가?

오라클 컨트랙

오라클 컨트랙트는 오라클 서비스를 위한 온체인 구성 요소입니다. 다른 컨트랙트의 데이터 요청을 수신하고, 데이터 쿼리를 오라클 노드로 중계하며, 반환된 데이터를 클라이언트 컨트랙트에 브로드캐스트합니다. 이 컨트랙트는 또한 반환된 데이터 포인트에 대해 일부 연산을 수행하여 요청 컨트랙트에 보낼 집계 값을 생성할 수 있습니다.

오라클 컨트랙트는 클라이언트 컨트랙트가 데이터 요청을 할 때 호출하는 몇 가지 함수를 노출합니다. 새로운 쿼리를 받으면 스마트 컨트랙트는 데이터 요청의 세부 정보가 포함된 로그 이벤트를 발생시킵니다. 이는 로그를 구독하는 오프체인 노드(일반적으로 JSON-RPC eth_subscribe 명령과 같은 것을 사용)에 알림을 보내며, 이들은 로그 이벤트에 정의된 데이터를 검색하기 시작합니다.

아래는 페드로 코스타(Pedro Costa)의 오라클 컨트랙트 예시 (opens in a new tab)입니다. 이는 다른 스마트 컨트랙트의 요청에 따라 오프체인 API를 쿼리하고 요청된 정보를 블록체인에 저장할 수 있는 간단한 오라클 서비스입니다.

오라클 노드

오라클 노드는 오라클 서비스의 오프체인 구성 요소입니다. 타사 서버에 호스팅된 API와 같은 외부 소스에서 정보를 추출하여 스마트 컨트랙트가 소비할 수 있도록 온체인에 올립니다. 오라클 노드는 온체인 오라클 컨트랙트의 이벤트를 수신하고 로그에 설명된 작업을 완료하기 위해 진행합니다.

오라클 노드의 일반적인 작업은 API 서비스에 HTTP GET (opens in a new tab) 요청을 보내고, 응답을 파싱하여 관련 데이터를 추출하고, 블록체인이 읽을 수 있는 출력으로 포맷팅한 다음, 오라클 컨트랙트로 가는 트랜잭션에 포함시켜 온체인으로 보내는 것입니다. 오라클 노드는 나중에 살펴볼 "진위성 증명"을 사용하여 제출된 정보의 유효성과 무결성을 증명해야 할 수도 있습니다.

연산 오라클 또한 가스 비용과 블록 크기 제한을 고려할 때 온체인에서 실행하기 비현실적인 연산 작업을 수행하기 위해 오프체인 노드에 의존합니다. 예를 들어, 오라클 노드는 검증 가능한 무작위 수치를 생성하는 작업(예: 블록체인 기반 게임용)을 맡을 수 있습니다.

오라클 디자인 패턴

오라클은 즉시 읽기, 발행-구독, 요청-응답 등 다양한 유형으로 제공되며, 후자의 두 가지가 이더리움 스마트 컨트랙트에서 가장 인기가 있습니다. 여기서는 발행-구독 및 요청-응답 모델에 대해 간략히 설명합니다.

발행-구독 오라클

이 유형의 오라클은 다른 컨트랙트가 정보를 위해 정기적으로 읽을 수 있는 "데이터 피드"를 노출합니다. 이 경우 데이터는 자주 변경될 것으로 예상되므로, 클라이언트 컨트랙트는 오라클 스토리지의 데이터 업데이트를 수신해야 합니다. 사용자에게 최신 ETH-USD 가격 정보를 제공하는 오라클이 그 예입니다.

요청-응답 오라클

요청-응답 설정은 클라이언트 컨트랙트가 발행-구독 오라클이 제공하는 것 이외의 임의의 데이터를 요청할 수 있게 해줍니다. 요청-응답 오라클은 데이터 세트가 스마트 컨트랙트의 스토리지에 저장하기에 너무 크거나, 사용자가 특정 시점에 데이터의 작은 부분만 필요로 할 때 이상적입니다.

발행-구독 모델보다 더 복잡하지만, 요청-응답 오라클은 기본적으로 이전 섹션에서 설명한 것과 같습니다. 오라클은 데이터 요청을 받아 처리를 위해 오프체인 노드로 전달하는 온체인 구성 요소를 갖게 됩니다.

데이터 쿼리를 시작하는 사용자는 오프체인 소스에서 정보를 검색하는 비용을 부담해야 합니다. 클라이언트 컨트랙트는 또한 요청에 지정된 콜백 함수를 통해 응답을 반환할 때 오라클 컨트랙트에서 발생하는 가스 비용을 충당할 자금을 제공해야 합니다.

중앙화 오라클 대 탈중앙화된 오라클

중앙화 오라클

중앙화 오라클은 오프체인 정보를 집계하고 요청에 따라 오라클 컨트랙트의 데이터를 업데이트할 책임이 있는 단일 엔티티에 의해 제어됩니다. 중앙화 오라클은 단일 진실의 원천에 의존하기 때문에 효율적입니다. 독점 데이터 세트가 널리 통용되는 서명과 함께 소유자에 의해 직접 게시되는 경우에 더 잘 기능할 수 있습니다. 그러나 다음과 같은 단점도 있습니다.

낮은 정확성 보장

중앙화 오라클의 경우 제공된 정보가 올바른지 여부를 확인할 방법이 없습니다. "평판이 좋은" 제공자조차도 악의적으로 변하거나 해킹당할 수 있습니다. 오라클이 손상되면 스마트 컨트랙트는 잘못된 데이터를 기반으로 실행됩니다.

열악한 가용성

중앙화 오라클은 다른 스마트 컨트랙트가 오프체인 데이터를 항상 사용할 수 있도록 보장하지 않습니다. 제공자가 서비스를 끄기로 결정하거나 해커가 오라클의 오프체인 구성 요소를 탈취하면, 스마트 컨트랙트는 서비스 거부(DoS) 공격의 위험에 처하게 됩니다.

열악한 인센티브 호환성

중앙화 오라클은 데이터 제공자가 정확하고 변경되지 않은 정보를 보내도록 하는 인센티브가 제대로 설계되지 않았거나 아예 없는 경우가 많습니다. 정확성에 대해 오라클에 비용을 지불한다고 해서 정직성이 보장되는 것은 아닙니다. 이 문제는 스마트 컨트랙트가 제어하는 가치의 양이 증가함에 따라 더 커집니다.

탈중앙화된 오라클

탈중앙화된 오라클은 단일 장애점을 제거하여 중앙화 오라클의 한계를 극복하도록 설계되었습니다. 탈중앙화된 오라클 서비스는 피어 투 피어 네트워크의 여러 참여자로 구성되며, 이들은 오프체인 데이터를 스마트 컨트랙트로 보내기 전에 합의를 형성합니다.

탈중앙화된 오라클은 (이상적으로) 무허가성, 무신뢰를 갖추고 중앙 당사자의 관리로부터 자유로워야 합니다. 현실적으로 오라클 간의 탈중앙화는 스펙트럼 상에 존재합니다. 누구나 참여할 수 있지만 과거 성과를 기반으로 노드를 승인하고 제거하는 "소유자"가 있는 반탈중앙화된 오라클 네트워크가 있습니다. 완전히 탈중앙화된 오라클 네트워크도 존재합니다. 이들은 일반적으로 독립형 블록체인으로 실행되며 노드를 조정하고 잘못된 행동을 처벌하기 위해 정의된 합의 메커니즘을 가지고 있습니다.

탈중앙화된 오라클을 사용하면 다음과 같은 이점이 있습니다.

높은 정확성 보장

탈중앙화된 오라클은 다양한 접근 방식을 사용하여 데이터의 정확성을 달성하려고 시도합니다. 여기에는 반환된 정보의 진위성과 무결성을 증명하는 증명을 사용하고, 여러 엔티티가 오프체인 데이터의 유효성에 대해 집단적으로 동의하도록 요구하는 것이 포함됩니다.

진위성 증명

진위성 증명은 외부 소스에서 검색된 정보를 독립적으로 검증할 수 있게 해주는 암호화 메커니즘입니다. 이러한 증명은 정보의 출처를 검증하고 검색 후 데이터의 가능한 변경을 감지할 수 있습니다.

진위성 증명의 예는 다음과 같습니다.

전송 계층 보안(TLS) 증명: 오라클 노드는 종종 전송 계층 보안(TLS) 프로토콜을 기반으로 하는 안전한 HTTP 연결을 사용하여 외부 소스에서 데이터를 검색합니다. 일부 탈중앙화된 오라클은 진위성 증명을 사용하여 TLS 세션을 검증하고(즉, 노드와 특정 서버 간의 정보 교환을 확인) 세션의 내용이 변경되지 않았음을 확인합니다.

신뢰 실행 환경(TEE) 증명: 신뢰 실행 환경 (opens in a new tab)(TEE)은 호스트 시스템의 운영 프로세스와 격리된 샌드박스 연산 환경입니다. TEE는 연산 환경에 저장/사용되는 모든 애플리케이션 코드나 데이터가 무결성, 기밀성 및 불변성을 유지하도록 보장합니다. 사용자는 또한 애플리케이션 인스턴스가 신뢰 실행 환경 내에서 실행되고 있음을 증명하기 위해 증명을 생성할 수 있습니다.

특정 클래스의 탈중앙화된 오라클은 오라클 노드 운영자에게 TEE 증명을 제공하도록 요구합니다. 이는 노드 운영자가 신뢰 실행 환경에서 오라클 클라이언트 인스턴스를 실행하고 있음을 사용자에게 확인시켜 줍니다. TEE는 외부 프로세스가 애플리케이션의 코드와 데이터를 변경하거나 읽는 것을 방지하므로, 이러한 증명은 오라클 노드가 정보를 온전하고 기밀로 유지했음을 증명합니다.

합의 기반 정보 검증

중앙화 오라클은 스마트 컨트랙트에 데이터를 제공할 때 단일 진실의 원천에 의존하므로 부정확한 정보를 게시할 가능성이 생깁니다. 탈중앙화된 오라클은 오프체인 정보를 쿼리하기 위해 여러 오라클 노드에 의존함으로써 이 문제를 해결합니다. 여러 소스의 데이터를 비교함으로써 탈중앙화된 오라클은 유효하지 않은 정보를 온체인 컨트랙트에 전달할 위험을 줄입니다.

그러나 탈중앙화된 오라클은 여러 오프체인 소스에서 검색된 정보의 불일치를 처리해야 합니다. 정보의 차이를 최소화하고 오라클 컨트랙트에 전달된 데이터가 오라클 노드의 집단적 의견을 반영하도록 보장하기 위해, 탈중앙화된 오라클은 다음 메커니즘을 사용합니다.

데이터 정확성에 대한 투표/스테이킹

일부 탈중앙화된 오라클 네트워크는 참여자가 네트워크의 기본 토큰을 사용하여 데이터 쿼리에 대한 답변(예: "2020년 미국 대선에서 누가 이겼는가?")의 정확성에 대해 투표하거나 스테이킹하도록 요구합니다. 그런 다음 집계 프로토콜이 투표와 스테이크를 집계하고 다수가 지지하는 답변을 유효한 것으로 채택합니다.

다수의 답변에서 벗어난 답변을 한 노드는 자신의 토큰이 더 정확한 값을 제공한 다른 사람들에게 분배되는 페널티를 받습니다. 데이터를 제공하기 전에 노드가 보증금을 제공하도록 강제하는 것은, 그들이 수익을 극대화하려는 합리적인 경제 주체로 간주되기 때문에 정직한 응답을 장려합니다.

스테이킹/투표는 또한 악의적인 행위자가 합의 시스템을 조작하기 위해 여러 신원을 생성하는 으로부터 탈중앙화된 오라클을 보호합니다. 그러나 스테이킹은 "무임승차"(다른 사람의 정보를 복사하는 오라클 노드)와 "게으른 검증"(정보를 직접 검증하지 않고 다수를 따르는 오라클 노드)을 방지할 수 없습니다.

셸링 포인트 메커니즘

셸링 포인트 (opens in a new tab)는 의사소통이 없는 상황에서 여러 엔티티가 항상 문제에 대한 공통된 해결책을 기본으로 선택할 것이라고 가정하는 게임 이론 개념입니다. 셸링 포인트 메커니즘은 노드가 데이터 요청에 대한 답변에 합의할 수 있도록 탈중앙화된 오라클 네트워크에서 자주 사용됩니다.

이에 대한 초기 아이디어는 SchellingCoin (opens in a new tab)이었습니다. 이는 참여자가 예치금과 함께 "스칼라" 질문(크기로 설명되는 답변을 가진 질문, 예: "ETH의 가격은 얼마인가?")에 대한 응답을 제출하는 제안된 데이터 피드입니다. 25번째에서 75번째 백분위수 (opens in a new tab) 사이의 값을 제공하는 사용자는 보상을 받는 반면, 중앙값에서 크게 벗어난 값을 제공하는 사용자는 페널티를 받습니다.

오늘날 SchellingCoin은 존재하지 않지만, 다수의 탈중앙화된 오라클(특히 메이커 프로토콜의 오라클 (opens in a new tab))은 오라클 데이터의 정확성을 향상시키기 위해 셸링 포인트 메커니즘을 사용합니다. 각 메이커 오라클은 담보 자산의 시장 가격을 제출하는 노드('릴레이어' 및 '피드')의 오프체인 P2P 네트워크와 제공된 모든 값의 중앙값을 계산하는 온체인 "Medianizer" 컨트랙트로 구성됩니다. 지정된 지연 기간이 끝나면 이 중앙값이 관련 자산의 새로운 참조 가격이 됩니다.

셸링 포인트 메커니즘을 사용하는 오라클의 다른 예로는 체인링크 오프체인 리포팅(Chainlink Offchain Reporting) (opens in a new tab)Witnet (opens in a new tab)이 있습니다. 두 시스템 모두에서 피어 투 피어 네트워크의 오라클 노드 응답은 평균이나 중앙값과 같은 단일 집계 값으로 집계됩니다. 노드는 그들의 응답이 집계 값과 일치하거나 벗어나는 정도에 따라 보상을 받거나 처벌을 받습니다.

셸링 포인트 메커니즘은 탈중앙화를 보장하면서 온체인 공간 차지(단 하나의 트랜잭션만 전송하면 됨)를 최소화하기 때문에 매력적입니다. 후자는 평균/중앙값을 생성하는 알고리즘에 입력되기 전에 노드가 제출된 응답 목록에 서명해야 하기 때문에 가능합니다.

가용성

탈중앙화된 오라클 서비스는 스마트 컨트랙트에 대한 오프체인 데이터의 높은 가용성을 보장합니다. 이는 오프체인 정보의 소스와 정보를 온체인으로 전송할 책임이 있는 노드를 모두 탈중앙화함으로써 달성됩니다.

오라클 컨트랙트가 다른 컨트랙트의 쿼리를 실행하기 위해 여러 노드(이들 또한 여러 데이터 소스에 의존함)에 의존할 수 있으므로 내결함성이 보장됩니다. 소스 노드 운영자 수준에서의 탈중앙화는 매우 중요합니다. 동일한 소스에서 검색된 정보를 제공하는 오라클 노드 네트워크는 중앙화 오라클과 동일한 문제에 직면하게 됩니다.

스테이크 기반 오라클은 데이터 요청에 신속하게 응답하지 않는 노드 운영자를 슬래싱할 수도 있습니다. 이는 오라클 노드가 내결함성 인프라에 투자하고 적시에 데이터를 제공하도록 강력한 인센티브를 제공합니다.

우수한 인센티브 호환성

탈중앙화된 오라클은 오라클 노드 간의 비잔틴 (opens in a new tab) 행동을 방지하기 위해 다양한 인센티브 설계를 구현합니다. 구체적으로, 이들은 귀속성책임성을 달성합니다.

  1. 탈중앙화된 오라클 노드는 종종 데이터 요청에 대한 응답으로 제공하는 데이터에 서명해야 합니다. 이 정보는 오라클 노드의 과거 성과를 평가하는 데 도움이 되며, 사용자가 데이터 요청을 할 때 신뢰할 수 없는 오라클 노드를 필터링할 수 있게 해줍니다. Witnet의 알고리즘 평판 시스템(Algorithmic Reputation System) (opens in a new tab)이 그 예입니다.

  2. 앞서 설명한 바와 같이, 탈중앙화된 오라클은 노드가 제출하는 데이터의 진실성에 대한 확신에 스테이크를 걸도록 요구할 수 있습니다. 청구가 확인되면 이 스테이크는 정직한 서비스에 대한 보상과 함께 반환될 수 있습니다. 그러나 정보가 올바르지 않은 경우 슬래싱될 수도 있으며, 이는 어느 정도의 책임성을 제공합니다.

스마트 컨트랙트에서 오라클의 응용

다음은 이더리움에서 오라클의 일반적인 사용 사례입니다.

금융 데이터 검색

탈중앙화 금융 (DeFi) 애플리케이션은 자산의 피어 투 피어 대출, 차입 및 거래를 허용합니다. 이를 위해서는 환율 데이터(암호화폐의 법정화폐 가치를 계산하거나 토큰 가격을 비교하기 위해) 및 자본 시장 데이터(금이나 미국 달러와 같은 토큰화된 자산의 가치를 계산하기 위해)를 포함한 다양한 금융 정보를 얻어야 하는 경우가 많습니다.

예를 들어, 탈중앙화 금융 (DeFi) 대출 프로토콜은 담보로 예치된 자산(예: ETH)의 현재 시장 가격을 쿼리해야 합니다. 이를 통해 컨트랙트는 담보 자산의 가치를 결정하고 시스템에서 얼마나 차입할 수 있는지 결정할 수 있습니다.

탈중앙화 금융 (DeFi)에서 인기 있는 "가격 오라클"(종종 이렇게 불림)에는 체인링크 가격 피드(Chainlink Price Feeds), Compound 프로토콜의 오픈 가격 피드(Open Price Feed) (opens in a new tab), 유니스왑의 시간 가중 평균 가격(TWAP) (opens in a new tab), 그리고 메이커 오라클(Maker Oracles) (opens in a new tab)이 있습니다.

빌더는 이러한 가격 오라클을 프로젝트에 통합하기 전에 수반되는 주의 사항을 이해해야 합니다. 이 문서 (opens in a new tab)는 언급된 가격 오라클 중 하나를 사용할 계획일 때 고려해야 할 사항에 대한 자세한 분석을 제공합니다.

아래는 체인링크 가격 피드를 사용하여 스마트 컨트랙트에서 최신 ETH 가격을 검색하는 방법의 예입니다.

검증 가능한 무작위성 생성

블록체인 기반 게임이나 복권 체계와 같은 특정 블록체인 애플리케이션이 효과적으로 작동하려면 높은 수준의 예측 불가능성과 무작위성이 필요합니다. 그러나 블록체인의 결정론적 실행은 무작위성을 제거합니다.

원래의 접근 방식은 blockhash와 같은 의사 난수 암호화 함수를 사용하는 것이었지만, 이는 작업증명 (PoW) 알고리즘을 푸는 채굴자에 의해 조작 (opens in a new tab)될 수 있었습니다. 또한 이더리움이 지분 증명 (PoS)으로 전환함에 따라 개발자는 온체인 무작위성을 위해 더 이상 blockhash에 의존할 수 없습니다. 대신 비콘 체인의 RANDAO 메커니즘 (opens in a new tab)이 무작위성의 대안 소스를 제공합니다.

오프체인에서 무작위 값을 생성하여 온체인으로 보내는 것도 가능하지만, 그렇게 하면 사용자에게 높은 신뢰 요구 사항이 부과됩니다. 사용자는 그 값이 진정으로 예측 불가능한 메커니즘을 통해 생성되었으며 전송 중에 변경되지 않았다고 믿어야 합니다.

오프체인 연산을 위해 설계된 오라클은 오프체인에서 무작위 결과를 안전하게 생성하고, 프로세스의 예측 불가능성을 증명하는 암호화 증명과 함께 온체인에 브로드캐스트함으로써 이 문제를 해결합니다. 예를 들어 체인링크 VRF (opens in a new tab)(검증 가능한 무작위 함수)는 예측 불가능한 결과에 의존하는 애플리케이션을 위한 신뢰할 수 있는 스마트 컨트랙트를 구축하는 데 유용한, 증명 가능하게 공정하고 조작 불가능한 난수 생성기(RNG)입니다.

이벤트 결과 얻기

오라클을 사용하면 현실 세계의 이벤트에 반응하는 스마트 컨트랙트를 쉽게 만들 수 있습니다. 오라클 서비스는 컨트랙트가 오프체인 구성 요소를 통해 외부 API에 연결하고 해당 데이터 소스의 정보를 소비할 수 있도록 함으로써 이를 가능하게 합니다. 예를 들어, 앞서 언급한 예측 탈중앙화 애플리케이션 (dapp)은 신뢰할 수 있는 오프체인 소스(예: AP 통신)에서 선거 결과를 반환하도록 오라클에 요청할 수 있습니다.

현실 세계의 결과를 기반으로 데이터를 검색하기 위해 오라클을 사용하면 다른 새로운 사용 사례가 가능해집니다. 예를 들어, 탈중앙화된 보험 상품이 효과적으로 작동하려면 날씨, 재해 등에 대한 정확한 정보가 필요합니다.

스마트 컨트랙트 자동화

스마트 컨트랙트는 자동으로 실행되지 않습니다. 대신 외부 소유 계정(EOA)이나 다른 컨트랙트 계정이 컨트랙트의 코드를 실행하기 위해 올바른 함수를 트리거해야 합니다. 대부분의 경우 컨트랙트 함수의 대부분은 공개되어 있으며 EOA 및 다른 컨트랙트에서 호출할 수 있습니다.

그러나 컨트랙트 내에는 다른 사람이 접근할 수 없지만, 탈중앙화 애플리케이션 (dapp)의 전반적인 기능에 중요한 비공개 함수도 있습니다. 예를 들어 사용자를 위해 주기적으로 새로운 NFT를 발행하는 mintERC721Token() 함수, 예측 시장에서 지불금을 수여하는 함수, 또는 DEX에서 스테이킹된 토큰의 잠금을 해제하는 함수 등이 있습니다.

개발자는 애플리케이션이 원활하게 실행되도록 주기적으로 이러한 함수를 트리거해야 합니다. 그러나 이로 인해 개발자가 일상적인 작업에 더 많은 시간을 빼앗길 수 있으며, 이것이 스마트 컨트랙트 실행을 자동화하는 것이 매력적인 이유입니다.

일부 탈중앙화된 오라클 네트워크는 오프체인 오라클 노드가 사용자가 정의한 매개변수에 따라 스마트 컨트랙트 함수를 트리거할 수 있도록 하는 자동화 서비스를 제공합니다. 일반적으로 이를 위해서는 대상 컨트랙트를 오라클 서비스에 "등록"하고, 오라클 운영자에게 지불할 자금을 제공하며, 컨트랙트를 트리거할 조건이나 시간을 지정해야 합니다.

체인링크의 키퍼 네트워크(Keeper Network) (opens in a new tab)는 스마트 컨트랙트가 신뢰가 최소화되고 탈중앙화된 방식으로 정기적인 유지 관리 작업을 아웃소싱할 수 있는 옵션을 제공합니다. 컨트랙트를 키퍼(Keeper)와 호환되게 만들고 Upkeep 서비스를 사용하는 방법에 대한 정보는 공식 키퍼 문서 (opens in a new tab)를 읽어보세요.

블록체인 오라클 사용 방법

이더리움 탈중앙화 애플리케이션 (dapp)에 통합할 수 있는 여러 오라클 애플리케이션이 있습니다.

체인링크 (opens in a new tab) - 체인링크 탈중앙화된 오라클 네트워크는 모든 블록체인에서 고급 스마트 컨트랙트를 지원하기 위해 조작 불가능한 입력, 출력 및 연산을 제공합니다.

RedStone Oracles (opens in a new tab) - RedStone은 가스 최적화된 데이터 피드를 제공하는 탈중앙화된 모듈식 오라클입니다. 유동성 스테이킹 토큰 (LST), 유동성 리스테이킹 토큰(LRT) 및 비트코인 스테이킹 파생 상품과 같은 신흥 자산에 대한 가격 피드를 제공하는 데 특화되어 있습니다.

Chronicle (opens in a new tab) - Chronicle은 진정으로 확장 가능하고 비용 효율적이며 탈중앙화되고 검증 가능한 오라클을 개발하여 온체인으로 데이터를 전송하는 현재의 한계를 극복합니다.

Witnet (opens in a new tab) - Witnet은 강력한 암호경제학적 보장과 함께 스마트 컨트랙트가 현실 세계의 이벤트에 반응하도록 돕는 무허가성, 탈중앙화된, 검열 저항성 오라클입니다.

UMA Oracle (opens in a new tab) - UMA의 낙관적 오라클은 스마트 컨트랙트가 보험, 금융 파생 상품 및 예측 시장을 포함한 다양한 애플리케이션을 위해 모든 종류의 데이터를 신속하게 받을 수 있도록 합니다.

텔러 (opens in a new tab) - 텔러는 스마트 컨트랙트가 필요할 때마다 모든 데이터를 쉽게 얻을 수 있도록 하는 투명하고 무허가성인 오라클 프로토콜입니다.

Band Protocol (opens in a new tab) - Band Protocol은 현실 세계의 데이터와 API를 집계하여 스마트 컨트랙트에 연결하는 크로스체인 데이터 오라클 플랫폼입니다.

Pyth Network (opens in a new tab) - Pyth 네트워크는 조작 불가능하고 탈중앙화되며 자립 가능한 환경에서 지속적인 현실 세계 데이터를 온체인에 게시하도록 설계된 자사(first-party) 금융 오라클 네트워크입니다.

API3 DAO (opens in a new tab) - API3 DAO는 스마트 컨트랙트를 위한 탈중앙화된 솔루션에서 더 큰 소스 투명성, 보안 및 확장성을 제공하는 자사 오라클 솔루션을 제공하고 있습니다.

Supra (opens in a new tab) - 퍼블릭(L1 및 L2) 또는 프라이빗(기업) 등 모든 블록체인을 상호 연결하는 크로스체인 솔루션의 수직 통합 툴킷으로, 온체인 및 오프체인 사용 사례에 사용할 수 있는 탈중앙화된 오라클 가격 피드를 제공합니다.

Gas Network (opens in a new tab) - 블록체인 전반에 걸쳐 실시간 가스 가격 데이터를 제공하는 분산형 오라클 플랫폼입니다. 선도적인 가스 가격 데이터 제공자의 데이터를 온체인으로 가져옴으로써 Gas Network는 상호운용성을 촉진하는 데 도움을 줍니다. Gas Network는 이더리움 메인넷 및 많은 선도적인 L2를 포함하여 35개 이상의 체인에 대한 데이터를 지원합니다.

DIA (opens in a new tab) - 모든 주요 자산 클래스에 걸쳐 20,000개 이상의 자산에 대한 검증 가능한 데이터 피드를 제공하는 크로스체인 오라클 네트워크입니다. DIA는 100개 이상의 1차 시장에서 직접 원시 거래 데이터를 소싱하고 이를 온체인에서 연산하여, 모든 사용 사례에 대한 사용자 지정 구성과 함께 완전한 데이터 투명성과 검증 가능성을 보장합니다.

Stork (opens in a new tab) - Stork는 초저지연으로 가격 데이터를 제공하여 무기한 선물 시장, 대출 프로토콜 및 탈중앙화 금융 (DeFi) 생태계를 포함한 광범위한 사용 사례를 지원하며, 상장 시 새로운 자산을 신속하게 지원합니다.

더 읽어보기

문서

비디오

튜토리얼

예제 프로젝트