블록체인2021. 7. 4. 12:29

개인적으로 이더리움 노드에 참여해 볼수 없을까? 어려워보이지만 시작은 우선은 쉽다.

(하지만 정상적인 full mode sync를 위해서는 16gb이상, 500gb급 ssd가 필요하다. 사양이 떨어지면 light mode를 사용하자.)

 

 이더리움 노드 서버 혹은 클라이언트인 geth를 다운로드 받아 구동하면 된다. 여기서는 geth 1.10.4 버전 ubuntu linux에서 작동시켰다. 다만, geth는 go언어로 만들어져서 거의 모든 OS를 지원하므로, 다른 OS에서도 아래와 유사한 방식으로 구동할 수 있을 것이다.

 

https://geth.ethereum.org/downloads/

 

Downloads | Go Ethereum

Retrieving packages from release server...

geth.ethereum.org

 

여기서 Geth 1.10.4 Linux 64bit 버전을 다운로드 받자(Tools가 같이 있는 버전을 받아도 좋다. 아래는 geth & tools를 기준으로 한다.) 필자는 Ubuntu 18.04기반으로 작업하였다. 다운로드를 받아 적절한 디렉토리에 압축을 풀면 go로 된 단순한 명령어들을 볼 수 있다.

 

아래는 /work/gethdata에 여러가지 데이터를 저장하고, /work/밑에 프로그램을 압축 푼다고 가정해보자.

 

$ mkdir /work/        #프로그램 설치 폴더 생성

$ mkdir /work/gethdata  #데이터 폴더 생성, 각종 정보 파일과 계좌를 만들때의 정보 등을 담게 된다

$ cd work

$ tar xvfz geth-alltools-linux-amd64-1.10.4-aa637fd3.tar.gz

....

$ cd geth-alltools-linux-amd64-1.10.4-aa637fd3

$ ls

abigen bootnode clef COPYING evm geth puppeth rlpdum

 

이상태에서, 아래와 같이 실행하면 곧바로 이더리움 노드에 참여하게 된다(networkid 1)

단순 기능 확인만을 위한 저사양용 light mode와 일반 안정적인 채굴등을 위한 fast mode두가지 실행 방식을 적어본다.

 

 

$ ./geth --datadir "/work/gethdata"  --syncmode "light" console  #기본 기능만 테스트하기 위해서는 light mode를 추천

혹은

$ ./geth --datadir "/work/gethdata"  console    #fast mode이며 datadir을 지정하지 않으면 ~/.ethereum/에 생성된다.

 

이 datadir의 위치를 바꾸면 모든 것이 리셋되고 다시 해당 datadir을 기준으로 다운받아 작동하게 되니 쉽게 리셋할 수 있다.

 

(다음에는 이렇게 mainnet에 참여하는게 아니라 여러가지 시험을 해볼 수 있는 사설 네트워크를 구성해보자. 이렇게 되면 나만의 이더리움 네트워크를 구성할 수 있다.)

 

아래 console에서 다양한 실제 작업을 할 수 있다. 간단한 명령을 살펴보자.

주소를 몇개 정의한 후 밸런스를 확인하고 계정에 암호를 입력한 후 송금하는 예시이다. 이건 따로 조사를 해 본 후 실행하기를 바란다.

 

> secondary = '0xb98df66662a586461b668e9ab81383d2b0d341da';
> third = '0xfd0e3e0c475a2feddfd681c599721a1b273fa78d';
> balance = web3.fromWei(eth.getBalance(secondary), "ether");

> personal.unlockAccount('0xb98df66662a586461b668e9ab81383d2b0d341da');
> eth.sendTransaction({from: secondary, to: third, value: web3.toWei(4.95, "ether"), nonce:0, gas: 300000});

#sendTransaction의 nonce는 총 출금한 개수다. 처음에는 0, 그 다음에는 1을 붙이자.

 

다만 main net에 제대로 참여하기 위해서는 geth가 전체 blockchain의 block들이 전부 sync(다운로드)되어야 한다.

 

geth 홈페이지에 따르면 4 core / 16gb ram / 500gb 이상의 ssd를 추천사양으로 이야기한다. (필자가 100%정도 sync되었을때 용량이 360GB였다) 모두 sync하는 데에는 2~3일 정도 소요되었다. ssd를 추천하는 이유는 sync를 제대로 하기 위해서는 고속의 I/O가 필요하기 때문이라고 한다. sync여부는 위 geth console에서 아래와 같이 확인 가능하다

 

> eth.syncing

{

  currentBlock: 12780722

  highestBlock: 12780722

  ..

}

이렇게 currentBlock과 highestBlock이 같은 값이면 sync가 100%완료된 상태이다. 그런데 disk I/O가 충분히 빠르지 않으면 이것이 100%sync가 잘 되지 않는다.

 

geth는 내부적으로 fast mode, full mode, light mode 3가지가 존재하는데 디폴트는 fast mode이다. hardware사양이 낮고 적은 용량만 가진 서버에서는 light mode를 확인하여 해당 방식으로 구동하는 것이 가능하다. 10분에 기초 동기화가 되고 300mb정도의 용량만으로도 유지가 가능하다고 한다. 다만 이 light mode는 다른 노드의 도움을 받아야만 정상적인 처리가 가능하여 해당 노드에 의존하므로 처리 속도가 느리다고 알려져 있다. 채굴도 불가능하다. light mode는 geth실행시에 --syncmode "light" 만 추가하면 되어 소형 기기용으로 많이 추천되고 있는 모양이다.

 

$ ./geth --datadir "/work/gethdata"  --syncmode "light" console  

 

 

그리고 용량 문제는 main net에 붙을때만 그렇고 private node를 운영할때는 큰 용량을 필요로 하지 않는다. 마음껏 fast mode/full mode로 하면 된다.

 

그리고 ethereum main net의 상태는 아래 사이트를 통해 지갑 등을 확인할 수도 있으니 비교할시에 참고하기 바란다.

https://etherscan.io/

반응형
Posted by 작동미학