Ricardian Contract 에 대해 알아보자PART 2

YoonSeung
EOS Chrome
Published in
9 min readFeb 15, 2019

--

서론

PART 1에서 우리는 Ricardian Contract가 도대체 무엇이며 왜 사용해야 하는지에 대해 예시를 통해 자세히 알아보았습니다. 이번 포스팅에서는 저번 포스팅에서 말씀드렸던 바와 같이 Ricardian Contract가 어떠한 방식으로 작동되는지, 그리고 실제로 사용되는 Ricardian Contract는 어떤 모습인지에 대해서 설명해 드리도록 하겠습니다. 앞서 Part 1, 2를 아직 읽지 못하신 분들은 아래의 링크로 Ricardian Contract의 기본 원리에 대해 읽어보실 수 있습니다.

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에 작성되어 있는 내용을 바탕으로 해당 코드가 제대로 작동을 하는지 그렇지 않은지에 대해 판단을 할 수 있습니다.

이제 본격적으로 Ricardian Contract가 어떤 방식으로 작동되고 어떤 방법으로 작성되는지 확인해보도록 하겠습니다.

Ricardian Contract는 Smart Contract가 작성 된 후에 작성을 하게 됩니다. 따라서, 예제 Smart Contract 코드를 살펴 보면서 Ricardian Contract 작성 방법을 알아보도록 하겠습니다. (이 코드는 예시이며, Smart Contract를 만들때 반드시 필요한 요소들을 알려드리기 위해 첨부합니다.)

Smart Contract 코드작성

#include <eosiolib/eosio.hpp>
#include <eosiolib/print.hpp>
using namespace eosio;
class hello : public eosio::contract {
public:
using contract::contract;
[[eosio::action]]
void hi( account_name user ) {
print( "Hello, ", name{user} );
}
};
EOSIO_ABI( hello, (hi) )

우선 이 코드에서 중요한곳은eosio::contracteosio::action입니다. 이 두 개의 코드 내용이 곧 Ricardian Contract에 쓰이기 때문입니다.

Ricardian Contract 표현방법

<contract_name>.<action_name>_rc.md

Ricardian Contract의 이름은 위와 같은 형식으로, 마크다운 파일로 저장됩니다. 파일명에는 컨트랙트의 이름과 액션의 이름이 포함되어야 하며, ‘_rc’로 끝나야 합니다.

  • 마크다운이란 웹상에서 글을 쓰는 사람들을 위한 글쓰기 도구입니다. 쉽게 말해서 글을 쉽게 쓸 수 있게 해주고 읽는 사람에게도 쉽게 읽힐 수 있도록 해주는 간소한 서식입니다. 마크다운은 HTML을 잘 모르더라도 약간의 노력으로 글자를 HTML 형식으로 변환시켜 줍니다. (단 변환 도구는 따로 있어야 합니다.)

마크다운에 대해 더 자세하게 알고 싶으신 분들은 이 곳을 보시기 바랍니다.

예를 들어, token.issue_rc.md 파일은 token 컨트랙트의 issue 액션에 대한 합의 규정, 규칙을 작성한 파일입니다. 그래서 실제로 issue 액션과 관련된 문제가 발생했을 때 이 Ricardian Contract를 기준으로 조정을 합니다. 물론 코드도 함께 보냅니다.

위의 코드를 조금 더 자세하게 설명하자면

<contract_name>

위의 코드는 Smart Contract의 [[eosio::contract]] 속성이며 예시로 작성한 token이 컨트랙트 이름입니다.

<action_name>

위의 코드는 Smart Contract의 [[eosio::action]] 속성이며 예시로 작성한 issue가 액션 이름입니다.

Smart Contract에 속성을 표시해야 하는 이유이기도 합니다.

그리고 token.issue_rc.md 파일에 대한 Ricardian Contract는 아래와 같이 작성됩니다.

CONTRACT FOR token### Parameters
Input parameters: NONE
Implied parameters:* _**account_name**_ (name of the party invoking and signing the contract)### Intent
INTENT. The intention of the author and the invoker of this contract is to print output. It shall have no other effect.
### Term
TERM. This Contract expires at the conclusion of code execution.
.
.
.
### In Witness Whereof
IN WITNESS WHEREOF, the parties hereto have caused this Agreement to be executed by themselves or their duly authorized representatives as of the date of execution, and authorized as proven by the cryptographic signature on the transaction that invokes this contract.

Ricardian Contract는 조항 명과 조항 내용들로 구성되고 마크다운 형식으로 작성됩니다. 더 자세한 내용은 아래의 예시를 통해 알려드리겠습니다. 그리고 코드에 대해 더 자세히 알고 싶으신 분들은 이 링크를 참고해 주시기 바랍니다.

Ricardian Contract 예시

앞서 말한 Ricardian Contract의 작성방법에서 우리는 Ricardian Contract가 어떤 방식으로 작성이 되는지 간략하게 보았습니다. 이제 실제로 EOS에서 트랜잭션이 이루어질 때 관련된 Ricardian Contract의 예를 보여드리겠습니다.

RAM을 구입하는 것과 관련된 Ricardian Contract

아래의 사진은 EOS에서 실제로 RAM을 구입할시에 관련된 Ricardian Contract입니다.

위 그림의 내용을 설명해보자면

이 작업은 거래자를 대신하여 EOS의 수량만큼 RAM의 구매예약을 시도합니다.
구매자는 이 계약을 EOS를 이용하여 시장 제조 업체 알고리즘에 의해 결정된 현재 가격을 기준으로 RAM을 구입하도록 승인합니다.

구매자에게는 사용한 금액에 대해 0.5%의 수수료가 부과되며, 이 서비스를 활성화하는데 필요한 근사치로 인해 실제 받는 RAM이 예상보다 약간 적을 수 있다는 것을 인정합니다.
.
.
.
구매자는 RAM을 양도할 수 없다는 것을 인정합니다.
구매자는 계정에서 현재 사용 중인 RAM이 해제되고 RAM이 다른 계약조건에 따라 달라질 수 있을때까지 판매할 수 없다는 것을 인정합니다.

위의 내용에서 확인할 수 있듯이 Smart Contract만 보고 알 수 없었던 계약의 의도와 내용을 사람들도 확인할 수 있게 하였습니다.
또한 이 거래에 대한 규정도 확인하고 기준을 정함으로 여러 문제나 분쟁이 발생할 경우 해결의 기준으로 삼을 수 있습니다.

후원하기 위한 거래에 대한 리카르디안 컨트랙트

그럼 RAM을 구입할 시의 Ricardian Contract와 후원을 위한 거래를 할 시 Ricardian Contract가 어떻게 다른지를 비교해보겠습니다.

보내는 이는 다음 항목이 사실임을 증명합니다.
1. 나는 후원을 하는 EOS의 수량이 사기 또는 좋지 않은 활동의 수익이 아님을 증명합니다.
2. 나는 받는 이가 다른 사람에 대해 좋지 않은 활동에 지원하지 않는다는 것을 증명합니다.
3. 수량에 대한 모든 계약 조건을 받는 이에게 공개합니다.

나는 그 거래 후에 자금을 이전으로 되돌릴 수 없다는 것을 동의합니다.
받는 이로부터 상품이나 서비스를 받은 후 이 조치가 되돌릴 수 없는 경우, 나는 재화 또는 서비스를 반환하거나 수량을 적시에 다시 보내는 것에 동의합니다.

위와 같이 RAM을 구입할때 와는 다르게 후원과 관련된 배포자의 의도를 표현하고 있는 Ricardian Contract를 확인할 수 있었습니다.

결론

Ricardian Contract는 자동화되는 컴퓨팅 기술에서 사람과 컴퓨터를 잇는 중요한 개념입니다. 또 EOS 이외에 여러 곳에서 사용하고 있고, 연구하고 있습니다. 그렇기 때문에 EOS에 관심이 있고 좀더 알아가고 싶으신 분들에게 도움이 되는 내용입니다. 포스팅을 작성하면서 어떻게 예를 들면 독자들이 조금더 쉽게 Ricardian Contract를 이해할수 있을지 생각해 본 결과 Ricardian Contract 는 현실세계에서의 약관동의서의 느낌이라고 생각하시면 조금 더 쉽게 다가갈 것으로 생각됩니다. 지금까지 우리는 Ricardian Contract의 개념과 EOS에 Ricardian Contract가 필요한 이유와 예시, 방법등을 살펴보았습니다. 포스팅을 쓰면서 독자분들이 EOS에 대해서 더 많은 것들을 궁금해 하실것이라고 생각이 들었습니다. 그래서 앞으로도 EOS 에 대해 더 많은 내용을 더 쉽게 알려드릴 수 있도록 하겠습니다. 긴글 읽어주셔서 감사합니다.

작성일시 : 2019년 2월 8일

작성자 : bu.1조

윤승환 safy1591@naver.com

박지우 qkrwldn222@naver.com

최백진 playthemn@gmail.com

--

--