이것저것 프로그래밍 정리(Macbook)

Ethereum으로 프로그래밍 - ethereum 네트워크, 사설망 구성해보기 본문

ethereum(blockchain)

Ethereum으로 프로그래밍 - ethereum 네트워크, 사설망 구성해보기

parkaparka 2020. 3. 5. 16:24
반응형

1. Ethereum의 네트워크


1-1. Ethereum 메인 네트워크(main network)

ethereum 메인 네트워크는 네트워크 상의 모든 사람에게 공유되는 환경이고, 발생하는 모든 거래가 기록된다. 

다른 사설망(private netword)와는 다르게 실제 ether가 유통되고 거래가 되기 때문에 주의해야 한다.

메인 네트워크에서 개발한 애플리케이션을 실제로 운영 할 수 있다.


1-2. Ethereum 테스트 네트워크(test network)

메인 네트워크에서는 실제 ether가 유통되고 거래되기 때문에 개발한 애플리케이션을 테스트 해 볼 수 있는 네트워크이다.

사용 가능한 네트워크로 Ropsten, Kovan, Rinkeby 등이 있다.

아래와 같은 명령어로 testnet에 접속할수 있다.

geth --testnet

1-3. Ethereum 사설망(private network)

개인이 네트워크를 개설하여 보통 개발용으로 사용하는 경우가 많다. 사설망에서도 마이닝을 할수 있으나 사설망에서의 ether는 실제 가치가 없는 ether이다. 개인이 자유롭게 개설하여 사용하고 이에 따른 비용이 없으므로 개발용으로 많이 사용한다.

 

 

개발을 하기 위해 사설망을 많이 쓰므로 이번 글에서 ethereum 사설망을 구성하는 방법을 알아보도록 하자.


2. Ethereum 사설망 구성하기

실제 main network를 사용하기 전에 개인 사설망을 구성해서 운영해 보도록 하자. 실제 공중망은 완성된 프로그램을 실행하고 사설망에서 개발하고 테스트를 해보도록 하자.


2-1. genensis.json 생성

geth 네트워크 구성하기 위해서 genesis 설정을 통해 블록체인을 초기화 해줘야 한다.

설정                                                                                 설명
config 별도 설정하지 않아도 된다.
mixhash 256 bit hash 값.
nonce 64 bit hash 값. 블록이 PoW에 따라 마이닝되고 검증되었다는 의미.
difficulty 마이닝의 난이도.
alloc 'Ether pre-sale'에 판매된 계정과 잔고.
coinbase 160bit 주소. 마이닝 보상을 가져가는 계정주소.
timestamp 타임스탬프.
parenthash Keccak 256 bit hash로 부모 블록 헤더(nonce, mixhash 포함)
extraData 최대 32bytes. 다른 용도 대비 추가 공간.
gasLimit 블록 당 최대 소비 제한 gas.

'최초' geth 네트워크를 구성하려면, genesis 설정으로 블록체인을 초기화해야 한다. Frontier guide의 genesis.json 예제를 사용한다.

 

먼저 빈 프로젝트 폴더를 하나 만들어준다. 저 같은 경우 myProject라는 폴더에서 진행하겠습니다.

jupyter notebook 환경에서 myProject안에서 사용살수 있는 .ipynb 파일을 생성해줍니다.(python3 사용)

그러고 나서 이제 _genesis.json 파일을 myProject폴더 안에 생성해 보도록 하겠습니다.

 

_genesis.json
0.00MB


2-2. geth 네트워크 초기화

init 명령어를 통해 작성한 genesis.json 설정을 실행해 주겠습니다. 이러면 초기화된 사설망이 생성되게 됩니다.

_geth_genesis.sh 파일을 생성하고 이제 터미널에서 _geth_genesis.sh 파일을 사용해서 genesis.json 설정을 실행해 주겠습니다. 

터미널에서 해도 되고 jupyter notebook에서 실행해도 무관합니다.

_geth_genesis.json 파일을 보면 myProject 안에 eth 폴더 안에 genesis.json 설정을 실행해 준 것을 알수 있습니다.

myProject 안에 있는 eth 폴더가 생성되고 eth폴더 안에 genesis.json 설정을 실행해준 결과물들이 있습니다.


2-3. 계정 발급

네트워크 시작을 위해서 새로운 계정을 만들어야 한다.

터미널 창에서 새로운 계정을 만들어보자.

myProject 폴더에서 새로운 계정을 만들어보자.

geth --datadir eth/1 account new

위 명령어를 치면 새로 만든 계정에 대한 새로운 비밀번호를 입력하라고 한다. 이 비밀번호는 외우고 있도록 하자. 사설망이고 테스트용이니 간단한 비밀번호로 해도 좋다.

이렇게 하면 계정 발급이 완료된것이다.


2-4. geth 사설망 접속

_gethNow.sh 라는 실행파일을 만들어서 geth 사설망에 접속을 해보도록 하자.

여기서 주의할 점은 _gethNow.sh 실행파일에서 networkid가 위에서 _genesis.json 에서의 config 안에 있는 chainId와 같게 해주자. 

그리고 _gethNow.sh 의 --rpcport가 --port의 뒤 네자리와 같게 해야한다.

 

_gethNow.sh 실행을 이용해서 터미널에서 geth 사설망에 접속 해보자.

이후에 _gethNow.sh가 실행되고 있는 터미널창은 그대로 켜두고 새로운 터미널 창을 열어서 geth에 마저 접속해보도록 하자.

geth attach http://localhost:8445
- 8445 자리에는 _gethNow.sh 에서 자신이 설정한 rpcport 번호가 들어간다.

geth 창에서 아까 새로 생성한 계정을 확인해보도록 하자.

geth 창에서 eth.accounts 명령어를 통해서 아까 발급한 계정을 확인했다.


2-5. 마이닝

현재 계정에는 잔고가 없다. 마이닝을 통해 충전을 해보자.

아래의 모든 것은 geth 터미널 창에서 진행되는 것이다.

위 사진과 같이 현재 계정의 잔고는 0이다.

 

위 사진과 같이 eth.mining 명령어를 통해 현재 마이닝을 안하고 있는것을 알수 있다. 

miner.start(1) 명령어를 통해 마이닝을 할수 있고, 마이닝 실행후 eth.mining으로 현재 마이닝하고 있는 것을 확인 할수 있다.

eth.getBalance(eth.accounts[0]) 명령어를 통해 첫번째 계정에 잔고가 얼마나 있는지 확인 할 수 있다.

 

miner.stop() 명령어를 통해 마이닝을 중지하고 eth.mining으로 현재 마이닝 안하는 상태인것을 확인 할수 있다.


2-6. 종료하기

geth 창과 _gethNow.sh 실행파일을 그냥 종료 할 경우 모든 정보가 날아가니 올바른 방법으로 종료하자.

먼저 geth 창에 exit 명령어를 입력하면 geth창은 종료된다.

_gethNow.sh 실행파일은 control + c 를 누르면 실행파일이 종료되게 된다.


이번 글에서는 사설망 구성하는 방법을 알아봤으니 다음 글에서 구성한 사설망에서 간단한 HelloWorld 프로젝트를 진행해 보도록 하자.

반응형
Comments