Ricardian Contract에 대해 알아보자 PART 1

YoonSeung
EOS Chrome
Published in
11 min readJan 22, 2019

--

EOS에서 현재 사용하고 있는 Ricardian Contract 에 대하여 독자분들이 조금 더 쉽게 접근할 수 있도록 정리해보았습니다. 이 기고문은 Ricardian Contract의 창시자이며 block.one의 파트너인 Ian Grigg의 기고문을 참조하여 작성되었습니다.

서론

블록체인에 관심이 조금이라도 있으신 분들은 Smart Contract에 대해서 자주 접해 보셨을 거라 생각합니다. 하지만 EOS에서 사용하고 있는 Ricardian Contract에 대해선 아직 잘 모르시는 분들이 많다고 생각합니다. Ricardian Contract가 기존의 Blockchain에서의 Smart Contract와는 다르게 EOS 만의 Smart Contract로 오해하시는 분들도 계실 겁니다. 이 포스팅에서는 여러분들이 EOS를 공부하시기에 앞서 EOS의 Ricardian Contract가 도대체 무엇이며, 왜 사용해야 하는지에 대해 도움을 드리고자 기고문을 작성하였습니다. Ricardian Contract 시리즈는 총 4개의 파트로 나누어져 있고 이번 포스팅은 Part 1, 2를 설명합니다.

Ricardian Contract에 대해 알아보자 PART 1

Part 1. Ricardian Contract란?

Part 2. EOS에 Ricardian Contract가 필요한 이유

Ricardian Contract에 대해 알아보자 PART 2

Part 3. Ricardian Contract 작성 방법

Part 4. Ricrardian Contract 예시

Ricardian Contract란?

쉽게 설명하자면, Ricardian Contract는 컴퓨터와 사람 모두 읽을 수 있는 전자 계약서입니다.

Ricardian Contract는 실제 법정 공방에 있어 객관적인 자료로 사용 가능합니다. 실제 DigiGold.net Ltd와 Systemics Inc의 법정 공방에서 Ricardian Contract가 사용되기도 했습니다.

따라서, Ricardian Contract는 실제 세계와 크립토 세계를 잇는 다리 역할을 한다고 볼 수 있습니다. 이론적으로 Ricardian Contract는 간단한 임대 계약에서 복잡한 법률 문서에 이르기까지 매우 다양한 유형의 계약에 사용할 수 있습니다.

Ricardian Contract를 사용하면 거래 비용을 줄이고 계약서의 자동화를 촉진할 수 있습니다. Ricardian Contract는 기계가 읽을 수 있는 형식뿐 아니라 사람이 읽을 수 있는 형식이기 때문에 중요합니다. 블록체인 채택이 증가함에 따라 Ricardian Contract와 같은 서면 계약은 코딩 지식이 없는 사용자 또는 투자자에게 편의를 제공할 수 있습니다.

‘Smart Contract’ & ‘Ricardian Contract’

Smart Contract는 어떤 이벤트에 따라 작업을 시작하도록, 기계가 읽을 수 있는 명령어들의 묶음이고, Ricardian Contract는 Smart Contract를 실행하는 의도와 구체적인 행동들을 설명하는 문서 입니다.

Smart Contract 설명

Smart Contract는 작업을 자동화하는 데 사용되지만, 우리는 발생할 거라고 아직 인지하지 못하는 것에 대해 자동화할 수 없습니다. 그러므로 우리가 앞으로 나타날 모든 경우의 수와 미래를 예측할 수 없기 때문에 한계가 있을 수밖에 없습니다. 그리고 예상치 못한 사건이 발생하면 큰 문제가 됩니다. 그럴 때 우리가 의지할 수 있는 근거 있는 법적 기반이 없기 때문에 Smart Contract는 그런 상황을 다루기에 적절하지 않습니다.

Ricardian Contract가 존재하면 사용자는 누구나 Ricardian Contract를 통해 애초에 Smart Contract가 작성된 의도를 파악할 수 있습니다. 쉽게 설명하면, 개발자가 컴퓨터 코드를 작성하기에 앞서 이 컴퓨터 코드가 의도한 바를 계약서 형식으로 적어두는 것이 바로 Ricardian Contract입니다. 반면, Smart Contract는 자동화 거래를 위한 프로그래밍 언어의 집합입니다. 따라서, 그 계약의 원래 의도는 무엇인지, 어떤 결과가 적용될 수 있는지, 정의가 되어 있는 계약의 범위가 어떻게 되는지, 관련 당사자가 어느 조직/회사며 각 당사자에서 승인한 대표가 누구인지, 분쟁이 있을 때 어떤 규정으로 해결하는지에 대한 답을 줄 수 없습니다. 이런 문서화와 연구가 부족하기 때문에 가상화폐 세계에서 많은 사기와 거래의 악용이 일어납니다. 그리고 문제가 일어났을 때 필요한 경우 현지 법정에서 해결하기를 원할 텐데, 이때 당사자 간 합의 사항을 이미 서로 인정한 규칙에 구속하고 그 계약에 대한 신뢰를 주는 문서가 필요합니다.

Ricardian Contract는 정확히 구매/교환하고 있는 것이 무엇인지에 대한 가이드라인을 제시해 인터넷상에서 이루어지는 거래에 신뢰성을 부여합니다. Ricardian Contract와 Smart Contract가 융합되면서, 우리는 따로 신뢰를 구축할 필요 없이 인터넷상의 거래를 안전하게 수행할 수 있게 될 것입니다.

Ricardian Contract의 특징은 사람이 읽을 수 있다는 점입니다. 이부분이 대부분 상황에서 분쟁의 해결을 쉽게 만드는 점이기 때문입니다. 계약이 유효하려면 모든 당사자가 계약에서 의도한 내용을 이해해야 합니다. 계약에 참여한 사람은 그 합의에 대한 의중을 파악하고, 자기가 무엇에 서명하고 있는지를 이해해야 합니다.

EOS에 Ricardian Contract가 필요한 이유

그렇다면 왜 굳이 EOS는 다른 Blockchain들과는 다르게 Ricardian Contract를 사용 하는 것인지에 대해 조금 더 자세히 알아보도록 하겠습니다.

1. EOS와 블록체인 Smart Contract의 차이점

일반적으로 블록체인에서의 Smart Contract라고 하면 컨트랙트가 한번 블록체인상에서 배포되면 변경되거나 지워지지 않는다는 점입니다. 이러한 점이 탈중앙화된 데이터의 신뢰성을 나타내는 큰 이점이 될 수도 있지만, 반대로 생각해 보면 한번 배포한 Smart Contract에 문제가 생겼을 때 대처하기 어렵다는 점도 있습니다.

반면에 EOS의 경우는 한번 배포된 Smart Contract라 하더라도 Smart Contract 를 새로 만들어 배포하는것이 아닌 기존의 Smart Contract를 포인터를 바꾸는 방식으로 Smart Contract를 업데이트를 하여 수정하는 방식을 사용합니다.

EOS Smart Contract를 실제로 수정해야 했던 사례를 들어보겠습니다.

EOSBet 해킹사건

미국 IT 전문 미디어 더 넥스트웹(thenextweb)에 따르면, 해커가 EOS 기반 디앱 게임 개발 업체 EOS Games의 베팅 게임 EOSBet의Smart Contract상의 결함을 이용해, 4만 EOS(약 20만 달러)를 갈취한 것으로 나타났습니다.
이 해킹은Smart Contact코드의 결함을 이용해서 일어났습니다.

결함이 발생한 코드는 아래와 같습니다.

if( code == self || code == N(eosio.token) || action == N(onerror) ) { 

이 코드는 만약 호출 계약이 Eosio.token 또는 자체(예: eosbetdice11) 작업이 eosio 시스템 계약에서 발생하는 오류인지 확인하고 확인작업이 끝나면모든 작업을 ABI(및 내부 계약 기능)로 전달합니다.

이는 공격자가 eosio.token -> transfer로 보내는 이 기능을 완전히 무시할 수 있고 직접 eosbetdice11-> transfer 기능을 실행해도 똑같은 결과를 나타낼 수 있기 때문에 매우 치명적인 결함으로 작용합니다.

이후 수정된 코드는 다음과 같습니다.

if (action == N (transfer)) {eosio_assert (코드 == N (eosio.token), "EOS를 전송해야 함"); \} \

이렇게 코드를 수정하면 들어오는 전송 작업이 자동으로 필터링이 되어 eosio.token 전송명령만 따로 계약으로 전달됩니다. eosbetdicee11 -> transfer 이 호출되면 이 assert 코드는 실패하고 호출은 전달되지 않습니다.

그럼 이렇게 Smart Contract 코드를 수정할 수 있는 가이드라인을 어디서 구할까요? 그 가이드라인이 바로 Ricardian Contract입니다. 이미 작성되었던 Ricardian Contract를 보고 처음에 Smart Contract 코드를 작성한 개발자의 의도를 파악할 수 있습니다. 그리고 그 본 의도에 맞게 코드의 오류를 수정하여 더 탄탄한 시스템을 만들 수 있습니다.

아래의 링크는 이 사건 이후 또 한차례 해킹을 당한 EOSBet의 사례입니다. 참고하시면 되겠습니다.

[EOS 해킹 Issue 분석] EOSBet 2차 해킹 Part 1

[EOS 해킹 Issue 분석] EOSBet 2차 해킹 Part 2

2. Ricardian Contract와 EOS헌법

EOS에서는 헌법이 존재하고 헌법안에는 EOS를 사용할 때의 법이 정의되어 있습니다. 이 헌법 중에 Ricardian Contract와 관련된 조항은 3가지입니다.

  • 제7조 — 오픈소스
    이 헌법에서 개발자(Developer)라 함은 해당 블록체인에 스마트 계약을 사용할 수 있게 하는 구성원을 일컫는다. 각 개발자는 그들의 스마트 계약을 무료의 오픈 소스 라이선스로 제공하고, 모든 스마트 계약은 모든 당사자의 의도를 명시하고 해당 계약에서부터 발생하는 분쟁을 해결할 중재 단체(Arbitration Forum)를 명시하는 리카르디안 계약으로 문서화된다.
  • 제13조 — 사전 동의
    특정 구성원을 대리하여 거래 생성 및 서명을 용이하게 하는 도구를 생산하는 모든 서비스 제공자는 자신이 대리한 구성원에게 이 헌법의 전체 리카르디안 계약 조건과 다른 참조 계약들을 제출해야 한다. 서비스 제공자는 전체 리카르디안 계약 조건을 사용자에게 공개하지 않아 발생하는 손실에 대한 책임을 진다.
  • 제16조 — 개발자 책임
    구성원은 실제 또는 인지된 과실로 인한 실수인지 여부와 관계없이 계약 의도의 표현에서 발생한 의도하지 않은 실수에 대해 소프트웨어 개발자가 피해를 입지 않도록 한다.

7조 내용을 읽어보시면 EOS에서 Ricardian Contract를 어떻게 사용할 것 인가를 바로 확인 하실 수 있습니다. EOS는 모든 스마트 계약에 당사자의 의도를 명시하고 분쟁을 해결할 중재 단체를 명시하는 Ricardian Contract로 문서화 하게 되어있습니다.

13조의 내용을 쉽게 해석해보면 Smart Contract를 배포하였을 때 Ricardian Contract를 참조해야 하고 Smart Contract를 사용하는 사용자에게 공개하지 않을 경우 개발자는 책임을 져야 한다는 내용입니다.

16조의 경우 예를 들어 설명하면, 개발자가 구성원이 기부를 하게 하는 Smart Contract를 작성하고 같은 내용의 Ricardian Contract를 첨부하여 계약을 배포합니다. 하지만 코드에 문제가 발생해 실제 기부가 되지 않는 것이 확인 되었을때 Ricardian Contract의 의도를 보고 개발자에게 피해를 주지 않고 코드 수정의 근거로 할 수 있다는 내용입니다.

종합해 보면, EOS는 Smart Contract를 수정할 수 있습니다. 하지만 코드는 사용자가 개발자의 의도를 파악하기 어렵습니다. 그렇기 때문에 Ricaridan Contract를 첨부하여 개발자의 의도를 밝히고 문제가 생겼을 경우 코드 수정과 분쟁의 해결을 개발자의 초기 개발 의도에 맞게 해결할 수 있습니다.

결론

이번 시간에 우리는 법정 공방에 있어 객관적인 자료로 사용할 수 있고 현실 세계와 크립토 세계를 잇는 다리 역할을 하는 Ricardian Contract에 대해 알아보았습니다. EOS는 Smart Contract에 Ricardian Contract를 더하여 트랜잭션상에 발생할 수 있는 법적 분쟁이나 코드의 오류를 개발자의 의도를 통해 해결할 수 있기 때문에 중요합니다. 이런 방식을 사용하는 것을 보면 EOS는 code is law라는 이더리움의 가치를 거부하고 intent of code is law, 즉 코드를 작성한 초기 의도가 법이다라는 입장을 취합니다. 또 이런 입장을 취하는 것을 보면 모두가 지지할 수 있는 헌법을 만들기위해 Ricardian Contract 를 이용한것이 아닐까 생각이 듭니다. Ricardian Contract 시리즈 PART 2 기고문에서는 실제로 Ricardian Contract가 어떠한 방식으로 작동되는지, 그리고 실제로 사용되는 Ricardian Contract의 모습은 어떠한지에 대해서 알아보도록 하겠습니다.긴글 읽어주셔서 감사합니다.

작성일시 : 2019년 1월 17일

작성자 : bu.1조

윤승환 safy1591@naver.com

박지우 qkrwldn222@naver.com

최백진 playthemn@gmail.com

편집자 : Juno Yu, junoyu@ibct.io

--

--