이더리움

본문 바로가기
사이트 내 전체검색


이더리움
이더리움

3. 이더리움 실습(3)

페이지 정보

작성자 관리자 댓글 0건 조회 1,032회 작성일 21-07-04 14:28

본문

3. 이더리움 실습(3)

1. 비트코인과 이더리움의 차이?


블록체인 기술은 비트코인이란 이름으로 가장 널리 알려져있을 것이다. 

몇 해 전, 비트코인이라는 가상화폐의 가격이 천 만원을 넘는 다는 뉴스가 나오기도 했지만, 블록체인을 기술을 가장 먼저 활용한 결과물이 비트코인이기 때문이다. 


그렇다면 이더리움은 무엇일까? 이더리움은 비트코인의 여러 문제점을 보완하면서 등장한 블록체인 기술이라고 볼 수 있다. 

한편에서는 비트코인을 블록체인 1.0,  이더리움을 블록체인 2.0이라고 부르기도 한다. 



2. geth란 무엇인가?


geth는 go ethererum의 약자라고 한다. 

현재 이더리움 엔진은 C++이나 Python 등 여러 언어로 개발되어 있는데, 그중 go언어로 개발된 geth가 가장 널리 사용되고 있다고 한다. 



3. geth 설치하기


먼저 geth를 설치해보자. 

설치는 다음 링크를 통해 할 수 있다. 

자신의 운영체제에 맞는 것으로 다운받자.


geth 설치하기:   https://geth.ethereum.org/downloads/



실행 후 install하면 설치가 완료된다. 



4. geth 사용하기



geth는 window powershell을 통해 사용할 수 있다고 한다.


1) account 생성하기


다음으로 할 작업은 이더리움의 지갑을 생성하는 것이다. 


geth --datadir . account new


위와 같은 코드를 입력하면, 현재 작업 dir에 keystore란 폴더가 새로 생성되고 그 안에 account 파일이 형성된다.



geth의 account를 생성하는 또 다른 방법은 MyEtherWallet 홈페이지를 통한 것이 있다.



MyEtherWallet 홈페이지 주소: https://www.myetherwallet.com/



이 사이트에 접속한 뒤, New Wallet 버튼을 누르고 account의 password를 입력하고 Create New Wallet을 클릭하면 새로운 account가 만들어진다.



2) Genesis Block 생성


이 수업에서는 Ethererum의 공식망을 사용하는 것이 아니라, 수업의 구성원들끼리 사용하는 블록체인을 만든다고 했다. 

새로운 망을 구성하는데 있어 가장 중요한 것은 가장 첫번째 블럭, 즉 제네시스 블럭을 설정하는 작업이라고 한다.  

이때 필요한 것이 genesis.json파일이다. 



jenesis.json파일이 준비되었다면 이제 초기화를 진행해야 한다. 초기화를 실행하는 명령은 다음과 같다.


geth init genesis.json  --datadir ./data



이제 준비가 모두 되었으니, 본격적으로 geth를 사용해 mining을 해보자.



3) 채굴하기


채굴을 시작하기 위해 geth console을 동작시켜야 한다. 

powershell에 다음 코드를 입력하자.


geth --datadir . console

체굴 시작하기 전 알아두어야 할 것은, 채굴이 된 보상이 저장될 account를 확인하는 것이다. 


account의 default값은 account의 0번째 인덱스이다.


eth.coinbase


체굴된 보상이 들어갈 account를 확인하는 명령어 이다.


아래 소스코드는 채굴에 대한 명령어다.


miner.start()  #채굴 시작

miner.stop()   #채굴 정지

eth.blockNumber   #채굴된 숫자 확인

eth.getBalance(eth.accounts[0]) # 보상 확인 []안에는 account 숫자를 쓴다.


일단 miner.start()를 시작하면 채굴이 시작된다. 


여기까지가 geth를 사용해 체굴을 하는 과정이다.  


다음은 Ethereum 사용에 또 하나의 중요한 부분인 Transaction 처리이다. 



5. Transaction 


Transaction은 기본적으로 요청과 처리 두 단계로 이루어진다.


이렇게 Transaction이 이루어지기 위해서는 기본적으로 3 주체가 필요한 것 같다.


Transaction을 요청하는 account가 존재해야 하고, Transacrion을 처리하는 account가 있어야 한다. 

그리고 이 처리 account는 요청하는 account로부터 gas라는 수수료를 지급받는다. 

마지막으로 처리된 Transaction을 받는 account가 있어야 한다.


이 요청과 처리 과정을 천천히 살펴보자.


이더리움 화폐 단위


비트코인과 마찬가지로 이더리움도 1 ether가 최소 단위가 아니다. 이더리움에서 기준이 되는 단위는 'wei'로 '1ether'의 경우 '10^18 wei'로 엄청난 숫자에 가깝다. 


1) Transaction 요청

단위 변환


3개의 Account에 mining을 통해 보상을 채굴해둔 상태이다. 하지만 기본 단위인 wei로 보상을 볼 경우 그 숫자의 크기가 너무 커서 한눈에 살펴보기가 쉽지 않다.  따라서 거래를 요청하기 전에, wei보다 보기 쉬운 단위인 ether로 변환을 해준다.

web3.toWei(1, "ehter")   // 1 ether를 wei 단위로 변환

web3.fromWei(1, "ether")  // 1 wei를 ether 단위로 변환


// 각 계정의 잔고의 단위를 변환하여 확인.

web3.fromWei(eth.getBalance(eth.accounts[0]),"ether")

web3.fromWei(eth.getBalance(eth.accounts[1]),"ether")


Account Unlock


Transaction을 요청하기 위해서는 계정의 Unlock이 필요하다. 아마 요청하는 계정과 요청을 처리해줄 계정, 이 두 account를 unlock해야 하는 것으로 보인다. 즉, 이더리움을 받는 account는 unlock을 할 필요가 없다. 


나는 account[0]이 Transaction을 처리해줄 계정, account[1]이 Transaction을 요청하는 계정으로 사용했다.


personal.unlockAccount(eth.accounts[0])

personal.unlockAccount(eth.accounts[1])


Transaction 요청


Transaction을 요청하기 전에 처리되는 비용인 Gas(수수료)가 얼마나 발생할 지 알아보자.


eth.estimateGas({from:eth.accounts[1], to:eth.accounts[2], value:web3.toWei(1, "ether")})

위 명령어는 account[1]에서 account[2]로 송금할 경우 얼마의 gas가 발생할 지 미리 계산해보는 것이다. 


명령어를 입력해보니 21000의 gas가 발생할 것이라 한다.


그럼 이제 Transaction을 요청해보자.


miner.setEtherbase(eth.accounts[0])   //작업 account를 [0]으로 설정

eth.sendTransaction({from:eth.accounts[1], to:eth.accounts[2], value:web3.toWei(1, "ether"),gas:30000,

gasPrice:2})

위 명령어를 살펴보면 from:eth.account[1]은 송금을 보내는 계좌이고, to:eth.account[2]는 송금을 받는 계좌다. 뒤에 설정한 gas:30000은 이 거래에 사용할 최대 gas량이다. 즉 30000이상의 gas가 발생하는 거래에 대해서는 처리가 되지 않는다. gasPrice는 처리에 지불할 gas를 표시하는 것이라고 한다. gasPrice가 높을 수록 더 빨리 처리된다고 한다. 



다음 명령어는 처리 대기중인 Transaction의 정보를 확인하는 것이다.


eth.pendingTransactions

그럼 다음과 같이 요청된 Transaction에 대한 정보를 볼 수 있다.


이 상태에서 채굴을 수행하면 Transaction이 처리된다. 


다음은 거래가 완료된 후 계좌의 잔고 모습이다.



account[0]의 경우 수수료로 받은 21000wei가 증가한 것을 볼 수 있다(단위는 ether). 또 거래를 요청한 account[1]은 1ether와 21000wei가 줄어들었고 account[2]는 1ether가 증가한 것을 알 수 있다. 

거래가 성공적으로 이루어졌다.


Gas에 대해서


이더리움도 하나의 화폐역할을 하는데 굳이 gas라는 새로운 단위를 사용하는 것에 의문이 생겼다. 

이에 대해 몇몇 자료를 조사한 결과 gas단위를 사용하는 이유는 이더리움의 가치가 시장에 따라 크게 변동하기 때문에 이더리움의 변동 영향에서 거리를 두고자 함이라고 한다. 

https://etherscan.io/chart/gasprice 


이더리움 가격의 경우 초창기에 안정적인 모습을 보인 반면 시간이 지날 수록 변동폭이 커지는 것을 알 수 있다. 

gas의 경우는 초기에 가격이 높은 반면 시간이 지날 수록 안정된 가격을 형성하는 것으로 보인다.

따라서 이더리움 가격 변동으로부터 어느정도 영향을 덜 받기 위함이란 이야기가 타당해보인다.



아래는 2015년부터 지금까지의 이더리움 가격 그래프와 Gas 가격 그래프다.



참고사이트


블록체인 1강 - Ethereum Private Network 실습(window) : 네이버 블로그 (naver.com) 


댓글목록

등록된 댓글이 없습니다.


개인정보취급방침 서비스이용약관 모바일 버전으로 보기 상단으로

TEL. 063-469-4551 FAX. 063-469-4560 전북 군산시 대학로 558
군산대학교 컴퓨터정보공학과

Copyright © www.leelab.co.kr. All rights reserved.