2018년 2월 26일 월요일

이더리움 소스 빌드 및 스마트 계약 개발 소개

이 글은 우분투에서 이더리움 소스코드 빌드 실행 방법과 스마트 계약 개발 방법을 간략히 소개한다.
스마트 계약(Smart Contract)이란 블록체인 기반으로 금융거래, 부동산 계약, 공증 등 다양한 형태의 계약을 체결하고 이행하는 것을 말한다(wikipedia). 스마트 계약은 1996년 닉 자보(Nick Szabo)가 처음 제안했다.

만약, A, B간에 날씨에 따른 스마트 계약을 하였을 때는 계약이 참여자간 분산되어 실행되며, 참여자간 동의 없이 취소될 수 없고, 계약 실행 조건이 변경될 수 없다. 이를 위해, 계약은 프로그램으로 작성되며, 계약과 거래는 분산 저장된다. 다음 영상은 그 개념을 보여준다.
스마트 계약 개념

이더리움은 비탈릭 부테린이 개발한 블록체인 기반 스마트 계약 개발 지원 분산 플랫폼이다. 이더리움 화폐 단위는 이더(ETH)이다. 이더리움은 블록체인 기반 암호 화폐거래 기술을 스마트 계약(smart contract) 플랫폼으로 확장했다. 이런 이유로 전세계에 많은 컨소시엄이 만들어졌고, 블록체인 기반의 계약에 대한 관심을 크게 촉발시켰다. 현재, 스마트 계약과 관련된 많은 어플리케이션이 개발되고 있다.
블록체인 기반 스마트 계약 개념
이더리움 기반 투표 어플리케이션 예(Full Stack Hello World Voting Ethereum)

이더리움에서 스마트 계약을 개발하기 위해서는 솔리디티(solidity)와 LLL(Low-level Lisp-like Language)언어를 사용해야 한다. 이 부분은 차후에 좀 더 다뤄보기로 한다.

PPA(Personal Package Archives) 설치
이더리움 PPA는 다음과 같이 설치한다.
sudo apt-get install software-properties-common
sudo add-apt-repository -y ppa:ethereum/ethereum
sudo apt-get update
sudo apt-get install ethereum

설치 후 노드에 계정을 생성하기 위해 다음 명령을 실행할 수 있다. 
geth account new



이더리움 네트워크에 연결하기 위해 geth 명령을 실행한다. 

소스 코드 다운로드 및 빌드
다음과 같이 소스 코드를 다운르드한다.
git clone https://github.com/ethereum/go-ethereum

이더리움은 가상머신에서 동작하며, Go, C, Python과 같은 다양한 언어로 개발되었다.
작업이 쉬운 Go언어로 개발된 이더리움을 빌드하기 위해 Go, C 컴파일러를 설치한다.
sudo apt-get install -y build-essential golang

golang는 1.7버전 이상이 필요하다. 혹시, 제대로 설치되지 않으면, 링크(1.7)를 참고해 설치한다. 이제 다음과 같이 다운로드된 소스 폴더에서 빌드한다.
cd go-ethereum
make geth

이제 build/bin/geth 폴더에서 다음 명령을 실행할 수 있다.
geth

 

이더리움과 스마트 계약 개발 방식
이더리움은 이더리움 가상 머신(EVM) 기반으로 동작한다. 이 가상머신 기반으로 실제 스마트 계약 모델을 개발하는 방법은 사실 쉽지는 않다. 이런 이유로 솔리디티(solidity)가 개발되었다. 솔리디티 설치는 다음 링크를 참고한다.
솔리디티는 객체지향언어와 유사하다. 계약은 솔리디티 계약이나 이더리움 트랜잭션을 통해 외부에서 만들어 질 수 있다. 다음 그림은 스마트 계약 개발을 위해 사용되는 솔류션 조합의 예를 보여준다.
스마트 계약 개발을 위한 솔류션 조합(Distributing Business Processes using Finite State Machines in the Blockchain)

다음은 간단한 스마트 계약 클래스 정의 예이다.

contract SimpleStorage {
   uint storedData;
   function set(uint x) {
      storedData = x;
   }
   function get() constant returns (uint) {
      return storedData;
   }
}

다음 영상은 날씨에 따른 스마트 계약 개발의 예를 보여준다.

솔리디티 기반 계약 개발의 좀 더 자세한 방법은 아래 링크를 참고한다.
LLL은 리습과 유사한 언어고, 마찬가지로 스마트 계약 모델 개발 시 활용한다. 이 두가지 개발 언어는 작성된 계약 모델이 빌드되면 가상 머신 코드로 전환된다. 참고로, 솔리디티보다 LLL이 생성된 코드는 30% 효율적이다. 다음은 LLL 예시와 관련 튜토리얼 영상이다.

(def 'only-node-owner (node)
  (when (!= (caller) (get-owner node))
    (panic)))


Remix(리믹스)와 같은 도구를 이용해 개발할 수도 있다. 이더리움에서 프로그래밍으로 계약 개발하는 방식은 JavaScript API web3.js 사용 방법이 있다. web3.eth.Contract를 사용한다.

이더리움 스마트 계약에 대한 좀 더 상세한 내용은 아래 링크를 참고한다.

레퍼런스

댓글 없음:

댓글 쓰기