[이더리움] 이더리움의 기본 개념 및 docker 위에 geth 설치하기



'김치 프리미엄' 이라는 말이 붙을 만큼 현재 한국인의 암호화폐에 대한 관심도는 높다.(없어져 가는 추세인 듯 하지만)
'비트코인', '이더리움', '리플' 같은 다양한 코인들이 존재한다. 

블록체인 기술의 발달로 기존에 없었던 시세가 형성되어 신형 갑부도 생겼는데.
코인이 투기적인 역할일지 실제로 실존하는 화폐를 완전히 대체 할 지는 잘 모르지만, 기술은 익히는 것이 바람직한 것 같다. 





개념


이번에는 이더리움에 대한 프로젝트를 수행하게 되었다. 
이더리움에 관련된 프로젝트를 수행하기 위해서 기본 적인 개념을 정리하고, 간단한 geth 예제를 진행하려고 한다. 


블록체인에 대한 개념을 추상적으로 알고 모르는 것이 매우 많았는데, 아래 링크에 가서 간단한 개념 정리를 하고 오자. 
매우 간단하고 쉽게 정리를 잘 해 놓은 것 같다. 
https://brunch.co.kr/@bumgeunsong/41 


어느 정도 기술을 알고 있으면 이더리움을 알아야 한다.  
대략적인 개념은 아래와 같다. 

이더리움

위키백과, 우리 모두의 백과사전.

이더리움(Ethereum)은 블록체인 기술을 기반으로 스마트 계약 기능을 구현하기 위한 분산 컴퓨팅 플랫폼이다. 이더리움이 제공하는 이더(Ether)는 비트코인과 마찬가지로 사이버 공간에서 암호화된 가상화폐의 일종으로 거래되고 있다. 이더리움의 화폐 단위는 ETH로 표시한다. 가장 대표적인 알트코인이다. 이더리움은 초기에 '이시리움' 또는 '에테리움'이라고 표기하기도 하였으나, '이더리움'으로 통일하여 사용하고 있다


개요[편집]

이더리움은 2015년 7월 30일 비탈릭 부테린(Vitalik Buterin)이 개발하였다.[2] 비탈릭 부테린은 가상화폐인 비트코인에 사용된 핵심 기술인 블록체인에 화폐 거래 기록뿐 아니라 계약서 등의 추가 정보를 기록할 수 있다는 점에 착안하여, 전 세계 수많은 사용자들이 보유하고 있는 컴퓨팅 자원을 활용해 분산 네트워크를 구성하고, 이 플랫폼을 이용하여 SNS, 이메일, 전자투표 등 다양한 정보를 기록하는 시스템을 창안했다. 이더리움은 C++, 자바, 파이썬, GO 등 주요 프로그래밍 언어를 지원한다.[3]

이더리움을 사물 인터넷(IoT)에 적용하면 기계 간 금융 거래도 가능해진다. 예를 들어 고장난 청소로봇이 정비로봇에 돈을 내고 정비를 받고, 청소로봇은 돈을 벌기 위해 정비로봇의 집을 청소하는 것도 가능해진다.[4]

대표적인 거래소

-홍콩의 바이낸스

-한국의 업비트,빗썸

-일본의 비트플라이어

-미국의 코인베이스



이 것만 보고는 전혀 이해가 되지 않는다. 
아래에도 첨부를 했지만 https://steemit.com/kr/@jsralph/4r1deg-1 링크에 가면 자세히 읽어볼 수 있다.
일부만 발췌해보았다. 

튜링 불안정성과 같은 용어는 너무 복잡하여 생략했다. 





비트코인과 이더리움의 가장 결정적 차이는 무엇일까?




* 비트코인의 특징 

1. 비트코인의 스크립트 언어는 단순해서 비트코인이 '화폐'로서만 작동하게 한다. 

2. 비트코인은 블록체인이라는 커다란 네트워크에서 비트코인은 '전자계산기' 정도의 역할을 하는 어플리케이션인 것 뿐이다. 즉, 비트코인의 스크립트는 비트코인이 전자계산기로서만 역할을 할 수 있는 정도로 제한적이고 단순하다.


-> 핵심 : 스크립트는 단순하다. 비트코인은 그저 어플의 역할을 한다. 





* 이더리움의 특징

이더리움의 개발자 비탈릭은 비트코인의 스크립트보다 더 세련된 언어(튜링 완전한 언어)를 구사하려고 새로운 블록체인 네트워크를 만들어 여러가지 dApp(분산 어플리케이션)을 이용할 수 있는 플랫폼을 만들기로 하는데 이것이 이더리움 플랫폼이다.

이것은 쉽게 말해 비트코인이 전자계산기라면 이더리움 플랫폼은 하나의 거대한 컴퓨터 또는 최신 스마트폰인 셈이고 그 안에서 전자계산기(화폐) 기능만 실행하려는 것이 아니라 여러 어플리케이션들(금융, 신원관리, SNS, 의료, 예술, 정부행정, 보험 등)을 실행하려 한다는 것이다.

비트코인이 튜링불완전한 '스크립트'를 사용했다면, 이더리움은 튜링 완전한 언어인 'Solidity(JAVA script)'와 'Serpent(Python)'을 사용한다. 이것이 복잡한 다중계약인 Smart Contract를 가능하게 하고 분산 어플리케이션을 구현한다.






간단하게 정리하면 이더리움이 다양한 곳에 쓰이는 플랫폼이다 정도로 정리 가능하다. 

그 다음에는 필수적으로 알아야 할 것이 GAS 와 스마트 계약(Smart Contract)이다. 






- GAS란?



이더리움 플랫폼에서는 이더(ether)라는 자체 화폐토큰이 있고 이더를 가지고 가스(GAS)라는 어플리케이션을 구입해 이더리움이 Smart Contract를 하는데 연산력과 저장공간 제공의 '연료'로서 쓰이게 된다. 그렇게 되면 명령어에 따라 특정 조건에서 자동적이고 강제적인 계약이 이행된다.







- Smart Contract란?


특정 계약조건을 이행하는 것이다.

예를 들어, Bob이 중환자실에 입원하게 될 경우 병원비로서 10ETH를 Bob의 아들의 지갑으로 송금한다는 조건을 세우면 Bob이 중환자실에 입원하는 상황이 생겼을때, '상태변환함수'를 생성해 특정 조건을 만족하게 되어 10ETH를 Bob의 아들에게 강제적이고 자동적으로 송금하게 된다.

이 계약조건은 블록체인 위에 기록되면 처음 기록된 조건을 절대 바꿀수 없고 조건을 만족시킬 경우에 실행이 되고 만다.

!! 개인 키가 아니라 계약 코드에 의해서 수행 !!  


이상 이더리움의 간략한 정리였다. 






그렇다면 이제 geth(go-ethereum)을 알아야 한다. 

- geth란?

Geth는 Go언어로 된 이더리움 노드 소프트웨어 코드 입니다.
Virtual Box 라는 가상화 엔진상에 geth라는 EVM(Ethereum Virtual Machine)가 위치합니다. 
이 코어 엔진에서 실행가능한 프로그램을 개발하는 것이 이더리움 프로그래밍입니다.

Geth 소프트웨어: 이더리움 프로토콜 블록체인 기술을 이용한 golang 구현체로서, 전 세계 공유 컴퓨팅 플랫폼을 구현한다.



go-ethereum

The go-ethereum client is commonly referred to as geth, which is the the command line interface for running a full ethereum node implemented in Go. By installing and running geth, you can take part in the ethereum frontier live network and:

  • mine real ether  ( 실제 이더를 마이닝 할 수 있다. )
  • transfer funds between addresses ( 주소 간 자금이체 )
  • create contracts and send transactions ( 계좌를 생성하거나 트랜잭션을 보낸다. )
  • explore block history ( 블록 기록 탐색 )
  • and much much more ( 기타 등등 )

요약 : 커맨드 라인 인터페이스 형태의 GO 언어로 만들어진 full 이더리움 노드이다. 



많은 데이터는 없는데 위와 같은 개념 정도로 알아 놓으면 될 것 같다.  

다른 포스팅을 보니 마이닝도 하고 프로그래밍도 하는 곳으로 사용된다고 보면 될 듯 하다. 







설치 및 수행 과정


이제 설치 및 수행 과정을 진행하자.  

http://www.chaintalk.io/archive/talkbox/2611#c_2664 과
https://ethereum.github.io/go-ethereum/install/
 에 설치 과정이 잘 나와있다. 



docker를 이용하여 image를 생성하여 향후에도 쉽게 사용하려고 한다. 
docker를 설치하려면 ( https://subicura.com/2017/01/19/docker-guide-for-beginners-2.html ) 링크를 참조하자. 

이더리움 자체 내로 제공해주는 docker 도 있는 것 같지만, 실행해보니 바로 거래 블록들을 받아들이는 것 같다.
정확히 어떻게 돌아가는 프로그램인지 모르기 때문에 일단은 직접 깔아서 docker 에 올려보는 것으로 해야겠다. 


16.4는 이상한 에러가 발생했다. 

debconf: delaying package configuration, since apt-utils is not installed

dpkg: unrecoverable fatal error, aborting:
 files list file for package 'libncursesw5:amd64' is missing final newline

나는 위와 같은 에러 때문에 명령어들을 실행해주었지만 작동하지 않았다.  

apt-get clean
apt install apt-utils
apt-get upgrade
apt-get update 

따라서, 16.04 를 사용하지 않고 lastest 버전을 사용한다. (에러를 찾는 시간보다 위와 같이 하는 것이 빠를 것 같아서)





먼저 아래의 명령어를 이용하여 ubuntu 의 이미지를 가져온다. 

docker pull ubuntu

그 다음 아래의 명령어를 이용하여, ubuntu 를 실행시킨다. 

docker run -it -p 10001:10001 ubuntu


성공하면 아래와 같이 나오게 된다.
ubuntu를 설치 없이 간단하게 이용하게 된 것이다. 


 




 

아래의 명령어들을 차례대로 입력 해 준다. 

apt-get install software-properties-common
apt-get install software-properties-common python-software-properties
add-apt-repository -y ppa:ethereum/ethereum
apt-get update
apt-get install ethereum


위의 4개의 명령어를 다 설치해주고, ethereum을 설치해주면 아래와 같이 잘 진행된다. 



설치가 끝난 후 geth라고 입력해주면 잘 실행이 된다. 
종료하려면 control + c 나 control + z  를 입력해주면 된다. 




geth version 명령어를 통해서 geth 의 버전을 확인할 수 있다 .

root@73d9413dd750:/# geth version

Geth

Version: 1.8.2-stable

Git Commit: b8b9f7f4~~~

Architecture: amd64

Protocol Versions: [63 62]

Network Id: 1

Go Version: go1.9.4

Operating System: linux

GOPATH=
GOROOT=/usr/lib/go-1.9






다른 컴퓨터에서 실행해보니 잘 동작한다. 





아래의 명령어를 사용하면 geth console 에 명령어를 입력할 수 있다. 

geth --dev console

root@73d9413dd750:/# geth --dev console

INFO [03-26|08:09:23] Maximum peer count                       ETH=25 LES=0 total=25

INFO [03-26|08:09:25] Using developer account        


- 중간생략 - 


instance: Geth/v1.8.2-stable-b8b9f7f4/linux-amd64/go1.9.4

coinbase: 

at block: 0 (Thu, 01 Jan 1970 00:00:00 UTC)

 datadir: 

 modules: admin:1.0 clique:1.0 debug:1.0 eth:1.0 miner:1.0 net:1.0 personal:1.0 rpc:1.0 shh:1.0 txpool:1.0 web3:1.0


>
 





길이가 너무 길어질 것 같아서 예제는 다음 포스팅 부터 진행한다. 



- 출처 - 
https://steemit.com/ethreum/@wisefree/1
위키백과 
https://steemit.com/kr/@jsralph/4r1deg-1 
http://www.chaintalk.io/archive/talkbox/2611#c_2664
https://ethereum-homestead.readthedocs.io/en/latest/ethereum-clients/go-ethereum/index.html
http://softwaree.tistory.com/18