The Hitchhiker’s Guide to Waves Smart Contracts. Part 1
지난 9월10일 Waves 플랫폼은 새로운 버전의 노드를 출시했습니다.플랫폼 최초로 자체적인 스마트 컨트랙 구현을 지원하는 노드입니다.이 글에서는 Wave 스마트 컨트랙의 아이디어는 물론 현존하는 다른 솔루션들과의 차이점은 무엇인지 집중해서 살펴보려 합니다.일단 서문은 스마트 컨트랙 자체의 간단한 개념설명부터 시작하고,그 다음으로 비트코인 스크립트,이더리움 스마트 컨트랙 그리고 Waves 스마트 컨트랙의 차이점에 대해서 알아보려 합니다.그리고 마지막으로 우리의 솔루션을 사용한 몇몇 사용례들을 제공하고,RIDE 언어에 대해서도 좀더 자세히 설명해 보려 합니다.
그럼 커피한잔을 준비하시고,같이 여정을 한번 떠나봅시다.
서문
블럭체인이라는 단어 자체는 이제 그렇게 생소한것이 아니며,날이 갈수록 듣게 되는 빈도가 많아지고 있습니다.그리고 블럭체인 다음으로 많이 듣게되는 단어중에 하나가 바로 스마트 컨트랙입니다.거의 짝을 이루고 있다고 할수 있죠.
스마트 컨트랙의 정의
우리들 대부분은 이미 스마트 컨트랙에 대해서 들어본적이 있으며,스마트 컨트랙이라는 단어와 함꼐 우리의 머릿속에 가장 먼저 떠오르는 것은 이더리움입니다.약간 불공평한 일이죠.왜냐하면 처음으로 스마트 컨트랙의 개념증명을 한것은 비트코인 스크립트 이기 때문입니다.사실 스마트 컨트랙 아이디어를 구현한 블럭체인은 아주 많이 존재합니다.그리고 스마트 컨트랙의 정의 자체는 20년전 Nick Szabo에 의해서 이뤄졌습니다.
우리는 스마트 컨트랙을 아래와 같이 정의 내릴 수 있습니다:
- 스마트 컨트랙은 블럭체인상에서 실행되는 프로그램이며,합의 프로토콜에 의하여 정확하게 실행이 됩니다. 컨트랙은 프로그래밍 언어로 표현된 모든 규칙셋을 인코딩할 수 있습니다.그러므로 스마트 컨트랙은 금융기관은 물론 자율 관리 어플리케이션을 포함하여 광범위한 어플리케이션들에 구현이 가능합니다.
- Nick Szabo에 의해 정의된 스마트 컨트랙 아이디어는 일반적인 계약 조건을 충족하며,악의적이거나 우발적인 사태를 최소화하며,신뢰성 있는 중개자의 필요성 또한 최소화 하는 것입니다.
비트코인 스크립트
그럼이제 비트코인 스크립트의 개념을 한번 이해해 봅시다.비트코인 스크립트란 비트코인 네트워크의 스크립트를 생성하는데 사용되는 언어입니다.스크립트는 (bytecode 스택과 같은)Forth 기반 언어입니다.하지만 비트코인 스크립트만의 차별점은 실행된 스크립트는 반드시 소멸이 되도록 설계되어 있다는 것입니다.그리고 Forth 언어의 몇몇 특성들은 (variables, arrays, functions, and loops등) 비트코인 스크립트에서는 사용이 불가능합니다.비트코인 스크립트는 스택들에 무작위적인 작성 권한을 부여하는 오리지널 언어들은 아무것도 제공하지 않습니다.여기서 이해하하고 가야되는 중요한점은,비트코인 네트워크에는 계정이 존재하지 않는다는 점입니다.오로지 인풋과 아웃풋 만이 존재합니다.모든 트랜잭션들은 아웃풋의 목록들 이라고 할수 있습니다.그리고 이 아웃풋이 받은사람에게는 인풋으로 보여지게 됩니다.모든 인풋들에 대해서 비트코인 스크립트의 삽입이 가능하며,이것으로 인풋을 아웃풋으로 변환하는 규칙을 정의내리게 됩니다.(대표적인 예가 비트코인을 다른사람에게 전송하는 일)
비트코인 스크립트의 주요 기능:
- 필수적인 암호학 실행들 과 오리지널 언어들을 포함하는 스크립트 언어들은 많은 op코드를 가지고 있습니다.(그리고 이중 상당수가 현재 비활성화 되어 있습니다.)그러나 이중에도 loops는 없습니다.스크립트 메모리 접근은 스택 기반입니다.
- 스크립트는 언제나 소멸됩니다.실행 시간은 명령어 포인터 이후의 스크립트의 길이에 의해서 정해집니다.그리고 이 제한성은 블럭들의 유효성을 검증하는 노드들에 대한 디나이얼 서비스를 방지합니다.
우리에겐 왜 스마트 컨트랙이 필요한가?
우리가 스마트 컨트랙의 개발을 시작한 이래로 계속해서 염두에 두었던 주요 목표는 2종류의 스마트 컨트랙을 구현하는 것이었습니다.
- 다중서명이나 아토믹 스왑같이 간단하면서도 널리 알려진 기능들.
- 무한에 가까운 가능성과 커스텀 로직을 가진 Dapps.
그리고 이외에도 또 다른 스마트 컨트랙의 일반적인 사용례가 있습니다.토큰이죠.
예를 들어 이더리움 네트워크내의 컨트랙들중 가장 많은 비율을 차지하고 있는 것은 ERC20 표준의 토큰입니다.하지만 우리의 경우는 좀 다릅니다.왜냐면 우리는 간편한 방식의 토큰기능을 이미 가지고 있으니까요.(자세한 사항은 이곳에서 보실수 있습니다.)토큰을 발행하는데 컨트랙을 반드시 만들어야 할 필요는 없습니다.사전에 정의된 유형의 트랜잭션 하나만을 전송하는것으로 충분합니다.
우리가 구현하는 스마트 컨트랙 1단계에서 첫번째 유형의 기능들을 구현하기로 결정내린바 있습니다.즉 다중서명,아토믹스왑,애스크로 같은 기능들이죠.이기능들을 이용하면 현재 수요성 있는 시나리오에서 요구되는 대부분의 기능등은 물론 코인에 대한 보안성도 제공하게 될것입니다.또한 우리의 데이터 트랜잭션 기능을 이용하면 오라클 데이터를 블럭체인내에 작성하는것도 가능합니다.
개발 초기단계에서 우리는 스마트 컨트랙에 있어 요구되는 사항들의 목록을 작성한바 있습니다.
- 강력한 보안성.간단한 작업에 사용되는 스마트 컨트랙은 간단하고,안전하고,시작하기가 쉬워야 됩니다.우리는 매달 이와 관련된 사건뉴스들을 봅니다.우리는 간단한 작업에서 어처구니없는 버그들이 나는 사태는 피하려 합니다.스마트 컨트랙 언어는 이런 버그들을 피하는데 도움이 되는 방향으로 만들어질 필요가 있습니다.
- 가스가 필요없습니다. 가스를 필요로 하지 않기 위해서는. 스크립트는 예측가능한 시간동안 실행이 되어야만 합니다.
Waves 블럭체인에 관하여
스마트 컨트랙 구현의 세세한 기술적 내용으로 들어가기전에,Waves 블럭체인자체에 대해서 잠깐 이야기 하고 갈까 합니다.앞으로 나올 내용을 이해하는것에 도움이 될것입니다.
현재 Waves 블럭체인에는 12가지 종류의 트랜잭션 타입이 존재합니다.
토큰 발행,토큰 재발행,소각,전송,교환,별칭,대량전송,데이터,셋 스크립트,리스,리스취소,스폰서쉽 지정비트코인과 같은 인풋/아웃풋 타입은 없지만,계정이 존재합니다.모든 트랜잭션들은 하나의 계정에서 이뤄집니다.
기본적으로 트랜잭션의 정확도는 현재의 블럭체인 상태와 서명의 유효성 검증에 의해서 정해집니다.트랜잭션을 나타내는 JSON 은 꽤나 간단합니다.
Waves 네트워크에서의 전송 트랜잭션의 JSON
스마트 계정이란 무엇입니까?
Waves 노드의 가장 최신버전에서는 스마트 계정이 활성화되어 있습니다.스마트 컨트랙이란 무엇인지에 대한 대략적인 느낌을 전해드릴수 있도록 노력하겠습니다.
일단 스마트 계정이란 트랜잭션을 검사하는 스크립트가 더해진 계정이라고 할수 있습니다.다시 말해 스크립트가 더해진 계정입니다.그렇기에 계정은 모든 트랜잭션에들에 대해 컨펌을 내리기전 유효성 검증을 하는것이 가능합니다.
Waves 스마트 컨트랙에 관한 팩트.
(가스가 필요하지 않다는 점이 최고의 팩트입니다.)
- Waves 스마트 계정은 트랜잭션이 특정 조건을 만족시켰는가를 체크하는것이 가능합니다.이는 스크립트를 통해서,트랜잭션이 다음생성 블럭안에 포함되기 전에 이뤄집니다.
- 사용자들은 자신들의 계정에서 생성되는 트랜잭션들을 컨트롤할수 있게 해주는 스크립트를 사용하는것이 가능합니다.이를 이용하여 사용자들은 스마트 컨트랙을 통해 다양한 혜택을 누릴수 있습니다.2FA,다중서명,애스크로 그리고 오라클을 포함한 다른 여러 혜택들입니다.
- 트랜잭션의 유효성에 검사절차에 대해서 여러가지 규칙을 셋팅하는것도 가능합니다.예를 들어 오직 특정 블럭높이 이후에 생성된 뒤에만 주소에서 트랜잭션을 보낼수 있도록 할수있습니다.또는 주소에서의 모든 트랜잭션은 유효한 것으로 처리되도록 할수도 있습니다.(심지어 서명에 대한 검증이 이뤄지지 않은 트랜잭션들도)
- 스마트 계정은 다음에 따라 예측됩니다:트랜잭션타입,필드,높이 또는 타임스탬프,그리고 마지막으로 블럭체인상의 데이터.(데이터 트랜잭션과 오라클)
2부에서는 스마트 컨트랙 언어인 RIDE 에 대해서 다뤄볼까 합니다.기본 개념과 비용에 따른 기술적 디테일,표준 라이브러리 그리고 IDE를 사용하여 처음으로 Waves용 스마트 컨트랙을 한번 작성해 볼까 합니다.
Waves 웹사이트상의 백서를 통해서 스마트 계정을 포함한 많은 세부정보와 설명글들을 보실수 있습니다.