마스터링 이더리움 11장: 오라클(Oracle)

쌍제이(JJVoiture)·2022년 8월 30일
0

오라클이란?

오라클(Oracle)은 오늘의 기후, 선거 후보자의 득표수와 같은 정보들을 외부로 부터 가져와 이더리움 스마트 컨트랙트로 제공하는 역할을 한다.
이상적인 오라클은 탈중앙화 원칙을 바탕으로 작동하기 때문에 신뢰가 필요 없는(trustless) 시스템이다.

Virtual machine은 합의를 유지하기 위해 deterministic하고, 이러리움 상태와 서명된 트랜잭션의 공유 컨텍스트에 기반을 두고 있어야 한다. 이로 인해 두 가지 결론이 나오는데,

  1. VM 및 스마트 컨트랙트와 같이 동작하는 임의성을 위한 고유한 소스가 없다.
  2. 외부 데이터가 트랜잭션의 data payload로서만 유입될 수 있다.

-> EVM에서 스마트 컨트랙트에 임의성을 제공하기 위해서 난수 함수(a true random function)의 사용을 금지하는 이유.

  • 노드 A는 특정 스마트 컨트랙트를 실행하고 스토리지에 4를 저장한다.
  • 노드 B는 특정 스마트 컨트랙트를 실행하고 스토리지에 7을 저장한다.

동일한 컨텍스트에서 동일한 코드를 실행래도 결과가 다르게 나온다.
결과적으로 전 세계의 여러 노드가 독립적으로 실행되는 네트워크에서 결과 상태가 무엇인지에 대한 탈중앙화된 합의가 불가능하게 된다.

그러나 암호화된 보안 hash function과 같은 pseudorandom function은 다양한 어플리케이션에 사용하기에 적합하지 않다.
ex) 동전 앞/뒤 맞추기 도박 게임 같은 경우, 채굴자가 자신이 이기는 값을 가진 트랜잭션만 블록에 포함할 수 있기 때문에 유리한 입장에 놓이게 된다.

위와 같은 문제를 해결하기 위해서는, 모든 노드가 서명된 트랜잭션의 내용에는 동의할 수 있으므로 radomness의 소스, 가격 정보, 일기 예보 등 외부 정보를 네트워크로 전송하는 transection data의 일부로 포함시키면 해결될 수 있다. BUT!!!이런 데이터의 출처는 신뢰할 수 없을 수도 있기에 대안으로 오라클 시스템이 등장한 것이다.

Oracle 사례

대표적인 oracle 서비스 중 하나인 chainlink 공식 blog에서 가져온 예시이다.

chainlink 블로그 링크

  • DeFi
  • External Payments
  • NFTs, Gaming, and Randomness
  • Insurance
  • Enterprise Systems
  • Supply Chain: 공급망 (관리)
  • Utilities
  • Authorization and Identity
  • Government (규제, 선거, 증서 등)
  • Sustainability (재생 농업 등)
  • Off-Chain Computation

Oracle Design Pattern

즉시 읽기 (immediate-read)

즉시 읽기(immediate-read) 오라클은 즉각적인 결정에만 필요한 데이터만을 제공한다.
ex) '이 사람은 18세 이상인가?'

게시-구독(publish-subscribe)

게시-구독(publish-subscribe)형의 오라클은 정기적으로 혹은 잦은 변경될 것으로 예상되는 데이터에 대한 브로드캐스트 서비스를 효과적으로 제공하는 역할을 하며, 이 데이터는 온체인 스마트 계약에 의해 폴링(polling)되거나 업데이트를 위한 오프체인 데몬에 의해 모니터링된다. 오라클은 새로운 정보로 업데이트되고, 플래그는 새로운 데이터를 쓸 수 있음을 구독 대상들에게 알린다. 데이터를 받는 쪽에서는 최신 정보가 변경되었는지 여부를 확인하기 위해 오라클을 폴링하거나 오라클 계약에 대한 업데이트 소식을 기다리다가 업데이트가 발생하면 필요한 조치를 수행한다.

폴링은 웹 서버 세계에서는 매우 비효율적이지만, 블록체인 플랫폼의 피투피 세계에서는 그렇지 않다. 예를 들어 이더리움 클라이언트는 계약 저장소 변경을 포함하여 모든 상태 변경사항을 알아야 하므로 데이터 변경사항에 대한 폴링은 동기화된 클라이언트에 대한 로컬 호출이다. 이더리움 이벤트 로그를 사용하면 애플리케이션에서 오라클 업데이트를 확인할 수 있기 때문에 어떤 면에서는 이 패턴을 푸시(push) 서비스로 볼 수도 있다. 그러나 폴링이 스마트 계약으로부터 수행되어야 하는 경우는 상당한 가스 비용이 발생할 수 있는데, 일부 탈중앙화된 애플리케이션에서 이러한 폴링이 필요할 수도 있다.

요청-응답(request-response)

  • 데이터 공간이 너무 커서 스마트 계약에 저장할 수 없음.
  • 한 번에 전체 데이터 중 일부만 필요한 경우에 사용.

탈중앙화된 애플리케이션의 데이터 요청은 일반적으로 여러 단계에 걸친 비동기 프로세스다.

  1. DApp으로부터 질의를 받는다.
  2. 질의를 분석한다.
  3. 비용이 지급되었는지, 데이터에 대한 접근 권한이 있는지 확인한다.
  4. 오프체인 소스에서 관련 데이터를 검색하고 필요한 경우에는 암호화한다.
  5. 데이터가 포함된 트랜잭션에 서명한다.
  6. 트랜잭션을 네트워크로 브로드캐스트한다.
  7. 알림 등 필요한 추가 트랜잭션을 스케줄링한다.

Data 인증

1. 진위성 증명 (authenticity proof)

진위성 증명은 데이터가 변조되지 않았음을 암호학적으로 보증한다.

  • 오라클라이즈는 다양한 진위성 증명을 활용하는 오라클 서비스의 예시이다.
  • 현재 이더리움 메인 네트워크의 데이터 질의에 사용할 수 있는 증거 중 하나는 TLSNotary 증명이다. 이를 사용하면 클라이언트는 클라이언트와 서버 간에 HTTPS 웹 트래픽이 발생했다는 증거를 제3자에게 제공할 수 있다.

  • 서버(oracle), 감시대상자(오라클라이즈), 감사인(AWS)으로 구성된다.
  • AWS 인스턴스는 TLSNotary 암호를 저장해서 진위성 증명을 제공하며, 인스턴스화 이후에 수정되지 않았음을 검증할 수 있다.

2. 신뢰할 수 있는 실행 환경 (Trusted Execution Environment, TEE)

  • 타운 크리에는 TEE 접근 방식에 기반한 인증된 데이터 피드 오라클 시스템이다.
  • 이 방식은 데이터 무결성을 보장하기 위해 하드웨어 기반의 고립된 보안 영역(enclave)을 사용한다.
  • 인텔의 SGX를 사용하여 HTTPS 질의에 대한 응답을 인증된 것으로 확인할 수 있다.
  • SGX는 한 영역(enclave) 내에서 실행되는 애플리케이션이 다른 프로세스에 의해 변조되지 않게 CPU에 의해 보호받도록 하여 무결성을 보장한다.
  • SGX는 애플리케이션이 보안 영역 내에서 실행된다는 디지털 서명 증명을 생성해서 타운 크리에에서 나온 데이터가 신뢰할 수 있는 데이터임을 증명한다.

계산 오라클

on-chain에서 실행 불가능한 계산에 대한 입력을 받아 결과를 return하는데 사용될 수 있다.
-->가스 한도를 초과하는 계산 작업에 사용 가능.

탈중앙화 오라클

중앙화된 데이터 또는 계산 오라클은 많은 애플리케이션에서 충분하지만, 이더리움 네트워크에서는 단일 실패 지점(Single Point Of Failure, SPOF)이 된다. 그래서 데이터 가용성을 보장하고 온체인 데이터 집계 시스템을 갖춘 개별 데이터 제공자의 네트워크를 만드는 수단으로서 탈중앙화 오라클의 아이디어를 둘러싼 여러 가지 계획이 제안되었다.

체인 링크

  • 평판 컨트랙트, 오더매칭 컨트랙트, 집계 컨트랙트라는 세 가지 핵심 스마트 컨트랙트와 데이터 공급자의 오프체인 레지스트리로 구성된 탈중앙화 오라클 네트워크를 제안

  • 평판 컨트랙트 : 데이터 제공자의 성과를 추적하는데 사용되고, 평판 컨트랙트의 점수는 오프체인 레지스트리를 채우는 데 사용된다.

  • 오더 매칭 컨트랙트 : 평판 컨트랙트를 사용하여 오라클로부터 입찰가를 선택한다. 쿼리 파라미터와 필요한 오라클 수를 포함하는 서비스 수준 계약을 완료한다.

  • 집계 컨트랙트 : 여러 오라클로부터 응답을 수집하고, 쿼리의 최종 집합 결과를 계산하고, 그 결과를 평판 컨트랙트로 피드백해준다.

  • 이러한 탈중앙화된 방식의 문제점 중 하나는 집계 함수를 공식화하는 것이다.

  • 체인링크는 각각의 응답에 대해 하나의 유효성 점수를 부여하는 가중치 응답을 계산하는 것을 제안한다.

  • 췔링코인 프로토콜은 여러 참가자가 값을 보고하고 중간값을 올바른 대답으로 취하는 방법으로 계산한다.

profile
안녕하세요. 중구난방 개발자 쌍제이입니다.

0개의 댓글

관련 채용 정보