Flare Network의 Spark 토큰을 활용한 오라클

Junhoo Park
IOTRUST : Team Blog
14 min readNov 11, 2020

최근 아이오트러스트는 Flare와 오라클 업무 협약을 맺었습니다. 본 글은 Flare Network에 대해서 간략히 설명하고, Flare에 적용된 오라클을 분석한 내용입니다. 보다 상세한 내용은 Flare의 백서[1]에서 확인하실 수 있습니다.

Flare Network

Concept

Flare Network는 스마트 컨트랙트를 지원하지 않는 블록체인에서 스마트 컨트랙트를 활용할 수 있도록 지원하는 플랫폼입니다. 대표적으로 리플(Ripple)은 스마트 컨트랙트를 지원하지 않는데, Flare는 리플과 연동하여 다양한 응용 구축 환경을 지원할 것으로 보입니다. 스마트 컨트랙트를 지원함으로써 얻을 수 있는 대표적인 이점으로 DApp 구축과 이에 대한 토큰 경제를 구현할 수 있는 것인데, Flare에서는 이를 위한 자체 토큰인 Spark를 발행합니다.

스마트 컨트랙트를 지원하는 가장 유명한 블록체인은 이더리움입니다. 이더리움은 스마트 컨트랙트 환경을 위해서 EVM(Ethereum Virtual Machine)을 사용합니다. 블록체인이 트랜잭션을 저장하기 위한 원장이라면, EVM은 블록체인에 저장된 트랜잭션을 기반으로 상태(State)를 생성하는 실행 환경입니다. 아래 그림은 왼쪽에서 부터 사용자들이 생성한 트랜잭션을 합의 노드를 거쳐 블록을 생성하는 과정입니다. 각 노드들이 가지고 있는 EVM에서는 블록체인에 저장된 상태를 확인하고 스마트 컨트랙트의 생성이나 실행결과를 업데이트 할 수 있습니다. DApp에서는 업데이트되는 상태들을 반영하여 동작합니다.

Flare는 블록체인에 스마트 컨트랙트를 적용하기 위한 실행 환경으로 EVM을 선택하여 이를 다른 블록체인과 연결한 네트워크를 구현하고자 합니다. 자체 탈중앙화 합의를 가진 블록체인이 아니기 때문에 기존 합의 노드에 EVM이 추가되는 형태가 아니라, Flare 네트워크에서 자체적으로 EVM을 운영합니다. Flare 노드는 FBA(Federated Byzantine Agreement) 방식으로 EVM의 결과인 상태를 분산 저장합니다. Flare Network가 현재는 리플을 대상으로 가장 먼저 프로젝트를 진행하고 있으나, 추후 다른 블록체인과의 연동을 위해서 하나의 BFT(Byzantine Fault Tolerance) 계열이 아닌 연합된 동의 방식을 지원하는 알고리즘을 채택한 것으로 보입니다. (분산 저장 알고리즘과 관련한 자세한 사항은 여기를 참고하시기 바랍니다.)

상태 커넥터 (State Connector)

외부 시스템 혹은 외부 블록체인과 연동하기 위하여, Flare Network는 상태 커터(State-Connector)를 이용합니다. 상태 커넥터를 통해 외부 시스템과 업데이트 주기가 다르기 때문에 발생할 수 있는 네트워크의 최종성 문제를 해결하기 위한 목적입니다. Flare Network의 노드는 외부 시스템에 대한 샘플링(Sampling), 로컬 검증 및 등록(Local Verification and Registration), 마무리(Finalizing)로 이어지는 순서로 상태를 관리합니다. 샘플링과 마무리로 연결되는 주기는 외부 시스템마다 상이하기 때문에 거버넌스에서 결정하도록 지원합니다. 예를 들어, 리플의 경우 대략 5초마다 업데이트 되는 반면, 비트코인은 10분이라는 긴 주기를 가지고 업데이트 되기 때문에 각각 달라질 수 있는 네트워크의 결정 주기를 거버넌스를 통해 결정합니다.

노드는 상태 커넥터를 이용하여 네트워크에 참여하며, 다음 기준을 충족하도록 설계되었습니다.

  • Open-membership : 누구나 Flare의 합의에 참여가능
  • Consistency : Flare의 노드의 상태가 동일하게 유지
  • Independent verification : 상태 커넥터가 외부 상태를 독립적으로 확인 후 업데이트 가능
  • No reliance on economic incentives for safety : 합의 네트워크가 유지되기 위해 별도의 경제적 모델에 의존하지 않도록 함

Spark Token

이더리움에서 gas의 도입 목적은 거래 수수료로 사용되는 이유도 있지만, 튜링 완전한 언어를 지원함에 있어 발생하는 무한 루프 공격을 막기 위한 목적이 있습니다. 따라서 Flare Network도 이를 위해 Spark 토큰을 수수료로 지원하는데, 이더리움 gas와 동일하며 이에 대한 변환 비율이 존재합니다.

Τ=c∙γ ( Τ : Transaction cost, γ : Gas conversion rate, c : complexity limit )

또한, Spark 토큰을 활용한 어플리케이션을 SDA(Spark Dependent Application)라고 부르며, SDA에서 Spark는 다음 3가지 용도로 사용될 수 있습니다.

  • 담보(Collateral) : 외부 원장(e.g. ripple)에 대한 표현
  • 오라클 : 투표 및 보상, 보상 시에 새로운 Spark 토큰 발행
  • 거버넌스 : Spark 토큰 보유자가 의사 결정에 참여할 수 있도록 유도

Flare Time Series Oracle (FTSO)

Flare에서 오라클이 중요한 이유는, 외부 시스템(블록체인)과의 연동을 하면서도, Flare Netowrk에서 상태를 관리하기 때문에 네트워크 내에서 발행된 Spark와의 비율이 매우 중요한데 이를 지속적으로 관리하기 위해서는 비율이 정기적으로 업데이트가 필요하기 때문입니다. 예를 들어, 리플과 Spark 토큰의 비율에 해당하는 XRP/SPK의 환율을 Flare Network 안으로 가져옵니다. 이를 위한 Flare의 오라클을 FTSO(Flare Time Series Oracle)라고 합니다.

Flare의 오라클 FTSO는 Spark 토큰 혹은 Flare에서 발행한 F-asset(e.g. FXRP)을 가진 누구나가 참여할 수 있는 탈중앙화 오라클입니다. 오라클에 참여하는 이들이 제시한 값을 통하여 최종적인 추정치(estimate)를 결정하며, 참가자들은 보상을 받게 됩니다. 참가자들이 충분히 합리적으로 보상을 받기 위해 참가하고, 시스템이 올바른 오라클 데이터를 도출할 수 있도록 하기 위해서는 인센티브에 기반한 게임이론적 환경이 조성되어야 하기 때문에 단순한 투표 구조가 아닌, 올바른 결정값을 정할 수 있도록 메커니즘을 설계할 필요가 있습니다.

초기 백서에서 제시한 FTSO 방법에 대한 절차는 다음과 같습니다.

오라클 결정 순서

  1. 투표 라운드마다 오라클 참여자(Holders)는 자신이 정한 추정치를 제출
  2. 가중 추정 분포 생성
  3. 분포의 상위 25%와 하위 25%는 절삭(truncated)
  4. 가중 평균치(weighted mean)을 오라클 추정치로 결정
  5. 참여자에게 정해진 대로 보상 지급

위에서 표현한 투표 라운드, 보상 등의 파라미터를 포함하여 위 절차와 같은 방법론까지 모두 거버넌스 파라미터로 결정됩니다. 즉, 백서에서 초기 방법을 제시하였지만, 거버넌스에 의해 보상 금액이나 투표 주기, 더 나은 시스템으로 업데이트 등 변경될 가능성이 있습니다. 구체적인 사항은 메인넷이 출시 후에 확인할 수 있을 것 같습니다.

Compensation

오라클 데이터를 제출하는 활동을 하는 목적이 보상을 받고자 함이기 때문에, 보상 메커니즘은 오라클 참여자에게 매우 중요한 부분입니다. 또한 안전성 측면에서도 보상이 어떻게 결정되느냐에 따라 올바른 값을 결정하도록 유도하기 때문에 보상은 안전성 측면에서도 중요합니다. 보상이 어떻게 결정되는지 알아보도록 하겠습니다.

비트코인에서 블록을 생성한 마이너에게 비트코인을 발행하여 보상으로 주는것과 같이, Flare에서는 오라클 추정치를 결정하면서 Spark 토큰을 발행하여 참여자들에게 보상으로 지급하게 됩니다. 투표에 참가한 모든 참여자들이 보상을 받아가는 것은 아니고, 최종 값에 기여한 바가 있어야 가져가도록 설계되었습니다.

기본적으로 보상률(award rate)이 존재합니다. 보상률이란 Spark 토큰이 일년동안 발행된 양에 대해서 얼마의 새로운 발행과 보상이 적절하냐를 나타냅니다. 기본 값은 10%로 제시되었으나, 거버넌스 파라미터로 변경가능합니다.

보상은 투표 라운드마다 지급되어야 하기 때문에, 보상률에 대해서 각 라운드 마다 얼마만큼의 토큰이 보상으로 사용될지 결정되어야 합니다. 따라서 특정 라운드에 대한 보상 금액은 { 보상액 = 보상률 * 스파크 토큰의 총량 / 일년동안 진행되는 투표 수 }로 계산됩니다. 예를 들어, 기본 보상률 이 10%, 일년동안 발행된 Spark의 총량이 1440, 한달에 한번 투표가 진행될 경우 (실제로는 훨씬 높은 빈도) 연간 12번의 투표가 진행되므로, 한번의 라운드에서 지급되는 보상액은 12 spark 토큰입니다.

오라클을 결정하는 순서와 보상액을 결정하는 방법을 알아보았습니다. 백서에 두 가지 예제가 나와있는데, 예제를 통해 보다 명확히 이해가 되리라 예상합니다.

Example

투표 라운드가 시작되면 각 참가자들이 아래의 자원을 가지고, 해당 추정치를 제출하여 투표에 참가합니다.

  • Alice : 10 spark, 3에 투표
  • Bob : 20 spark, 4에 투표
  • Charlie : 30 spark, 5에 투표
  • Eve : 20 spark, 6에 투표
Example 1

위 그림의 왼쪽과 같이 투표 후보군이 된 3,4,5,6의 값에 참가자가 투표한 spark 토큰이 걸려있습니다. 제시된 추정치에 대해 상위 25%와 하위 25%는 절삭이 되는데, 오른쪽 그림의 회색 부분이 해당합니다. 총 투여된 spark 토큰이 80이므로, 상위 25%의 값과 하위 25%에 해당하는 20 토큰이 투표된 추정치를 삭제합니다. 최종적으로 4에 투표된 10 spark와 5에 투표된 30 spark에 대해서, 중간 값을 산정합니다. 중간 값은 절삭되고 남은 토큰 총량에 대해 각 추정치에 대해 남은 토큰 량의 비율로 계산되며, 최종 계산은 10/40∙4+ 30/40∙5=4.75가 됩니다. 4.75를 오라클 추정치로 결정한 후, 도출된 값에 기여한 바를 평가하여 보상을 주게되는데, 현재 예제에서는 Bob이 20 토큰을 4에 투표하였으나, 10 토큰 만큼 기여하게 되었고, Charlie의 경우에는 5에 30 토큰을 투표하여 30만큼 기여하게 되었습니다. (오른쪽 그림의 초록색 부분) 만약 보상으로 주어지는 값이 12 토큰이라고 한다면, Bob의 보상은 4 토큰이 되고, Charlie의 보상은 8토큰이 됩니다.

  • Bob의 보상 : 12 * (10/20) / {(0/10 + 10/20 + 30/30 + 0/20)} = 4
  • Charlie의 보상 : 12 * (30/30) / {(0/10 + 10/20 + 30/30 + 0/20)} = 8

한가지 더 예를 보도록 하겠습니다.

  • Alice : 100 spark, 2에 투표
  • Bob : 50 spark, 3에 투표
  • Charlie : 100 spark, 4에 투표

참여자가 제출한 추정치인 2, 3, 4에 대해 각각 100, 50, 100만큼의 토큰이 사용되었습니다. 총 토큰양 250에대해 상위 25%, 하위 25%인 62.5 토큰에 대한 추정치가 절삭되고, 2와 4에 37.5만큼의 토큰, 3에 50만큼의 토큰이 걸려있습니다. 최종 오라클 추정치는 3 ( = 37.5/125∙2+50/125∙4+37.5/125∙4)으로 계산되고, 각 참여자들은 보상 값이 12토큰이라고 할 경우 다음과 같이 보상을 갖게 됩니다.

  • Alice : 12 * (37.5/100) / {37.5/100 +50/50 + 37.5/100} = 2.57
  • Bob : 12 * (50/50) / {37.5/100 +50/50 + 37.5/100} = 6.86
  • Charlie : 12 * (37.5/100) / {37.5/100 +50/50 + 37.5/100} = 2.57
Example 2

Security

오라클 결정 과정의 보안에 대해서 백서에서는P+ epsilon 공격에 대해 안전함을 설명합니다. P+epsilon 공격은 공격자가 실제 비용을 투자하지 않고 참가자를 자신이 선택하고자 하는 값에 투표하도록 만들 수 있습니다. 단순히 과반수의 의견으로 선택을 하게 될 경우, 공격자가 적절한 금액을 투여하여 참가자들에게 실제 값이 아닌 공격자가 의도하는 값이 될 확률이 높음을 입증 시킬 수 있으면 합리적인 참가자들은 어쩔 수 없이 (반대해 봐야 자신이 원하는 보상을 얻지 못하므로) 공격자의 의도대로 움직여지게 됩니다. 참가자들이 움직인다면, 공격자는 실제 비용을 투자하지 않고도 자신의 목적을 달성할 수 있습니다.

FTSO는 weights votes with token holding에 의존합니다. 따라서 투표가 단순히 참가자의 과반수에 의존하는 것이 아니라, stake의 과반수에 의존하기 때문에 비용이 많이 들고, 공격자가 성공하려면 라운드에 스케일링된 금액의 50% 이상의 자본을 참가자들에게 입증해야 하며, Spark 나 F-asset의 가치 하락에도 보상을 통해 이익을 얻을 수 있는 메커니즘도 존재해야 하는 등의 조건을 요구하여 공격에 드는 비용이 공격을 성공하여 얻을 수 있는 이익보다 낮은 방향으로 안전성을 제공합니다.

governance

Flare Network에서는 다양한 거버넌스 파라미터가 존재합니다. 오라클과 관련해서는 FTSO의 보상율이나 F-asset 참가자의 제한, 오라클 업데이트 빈도, 투표 주기, 오라클 방법론 등이 있습니다. 이러한 것들의 자세한 값은 메인넷이 운영되면서 거버넌스에 의해 결정될 예정입니다. 백서에는 기본 값이 나타나 있는 것이 몇 가지가 있는데, 한가지 예로 FTSO에 대한 보상율(reward rate)이 기본 값은 10%가 됩니다.

거버넌스 파라미터는 거버넌스 참여자의 투표율과 이중 Spark 토큰의 비율이 얼마나 되느냐를 가지고 기준을 세워 다음과 같이 분류합니다.

  • Simple majority decision : 1/2 이상이 투표 참여, spark 토큰 투표율이 30% 이상
  • Super majority decision : 2/3 이상이 투표 참여, spark 토큰 투표율이 50% 이상
  • Super Super majority decision : 80% 이상이 투표 참여, spark 토큰 투표율이 70% 이상

마치며

Flare Network는 현재 리플과 가장 활발하게 협력하는 스마트 컨트랙트 지원 플랫폼입니다. 비트코인, 이더리움과 더불어 시가총액에서 가장 상위에 자리하고 있는 리플이 Flare를 통해 다양한 DApp 생태계를 만들 수 있다면 블록체인 업계에도 긍정적인 영향을 가져다 줄 수 있으리라 예상합니다. 아직 메인넷 일정과 관련하여 자세한 사항은 공개되지 않았지만, 올해 12월에 Spark 토큰 분배를 시작으로 사용자를 유치하기 위한 움직임을 보이고 있습니다.

아이오트러스트를 비롯한 오라클 협약을 맺은 업체들은 사용자들로부터 토큰을 통한 참여를 위임(delegation)받아 오라클 역할을 할 것으로 현재 계획하고 있습니다. 암호 화폐 보유자들이 Staking을 통해 수익을 얻는 것과 유사하게, 오라클 권한을 위임하여 이익을 볼 수 있는 구조를 구상하고 있습니다. 정확한 활동 방식은 추후 공개될 예정입니다. 이외에도 Spark 토큰 발행과 스냅샷 일정과 관련한 글도 있으니 참고하시기 바랍니다.

--

--