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