본문 바로가기
Blockchain

[Blockchain] 이더리움 프라이빗 네트워크 구축 방법

by 개발자 염상진 2022. 7. 8.

실제 이더리움 블록체인에서는 여러 노드들이 연결됩니다. 프라이빗 네트워크 환경에서 멀티 노드를 구성한 후 실제 이더리움 처럼 작동하는 방법을 알아봅니다. 이더리움 프라이빗 네트워크를 사용하는 OS 는 Docker에서 ubuntu 이미지를 가져와 사용합니다. 아래 글들을 참고하시면 싱글 노드를 위한 제네시스 블록 생성, 채굴, 트랜잭션 생성 방법 등을 확인하실 수 있습니다.

 

 

[Blockchain] 이더리움 Geth 설치 방법(Ubuntu Docker)

Ubuntu 환경에서 이더리움 Geth 클라이언트를 실행할 수 있습니다. 우분투 환경은 Docker Hub에서 이미지를 가져와서 실행합니다. 물론 자체적으로 우분투를 메인 OS로 사용하시면 바로 Geth를 실행해

about-tech.tistory.com

 

 

[Blockchain] 이더리움 Geth 사용 방법

로컬 테스트넷에서 Geth 실행하는 방법 Geth를 로컬 테스트넷에서 실행하기 위해서는 먼저 데이터 디렉토리 + genesis.json 파일이 준비되어야 합니다. 데이터 디렉토리에서는 송수신한 블록 데이터

about-tech.tistory.com

 

 

[Blockchain] 이더리움 Geth 사용 방법 2 (이더 송금하기)

이더 송금하기 현재 처리 대기중인 트랜잭션 목록을 조회합니다. > eth.pendingTransactions [] account 1에서 account 0로 2이더를 전송합니다. 송금에는 eth.sendTransaction()을 사용합니다. 트랜잭션이 생성되..

about-tech.tistory.com

 

 

 

 

멀티 터미널 구성

우선 두개의 터미널에 각각 생성한 컨테이너에 접속합니다.

// 모든 컨테이너 목록 조회
$ sudo docker ps -a

// 컨테이너 시작
$ sudo docker start container

// 컨테이너 연결
$ sudo docker exec -it container bash

 

컨테이너에 접속 후 HOME 디렉토리로 이동하여 go-ethereum 디렉토리 내 test_node1, test_node2 두개의 디텍토리를 생성합니다.

mkdir test_node1 test_node2

 

생성된 디렉토리 내에 genesis.json 파일을 생성한 후 다음과 같이 입력합니다.

vim ./test_node1/genesis.json
vim ./test_node2/genesis.json
{
  "config": {
    "chainId": 1007,
    "homesteadBlock": 0,
    "eip150Block": 0,
    "eip155Block": 0,
    "eip158Block": 0
  },
  "difficulty": "0x20000",
  "gasLimit": "0x2fefd8",
  "alloc": {},
  "coinbase": "0x0000000000000000000000000000000000000000",
  "extraData": "",
  "nonce": "0x0000000000000000",
  "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "timestamp": "0x00"
}

 

 

genesis block 생성

각각의 터미널에서 test_node1, test_node2에 접속한 후 작성한 genesis.json 파일로 제네시스 블록을 생성합니다.

geth --datadir test_node1 init ./test_node1/genesis.json
geth --datadir test_node2 init ./test_node2/genesis.json

 

제네시스 블록 생성에 성공하면 "Successfully wrote genesis state" 문구가 출력됩니다.

 

 

멀티 노드 연결

각 터미널에서 프라이빗 네트워크에 접속합니다. networkId는 1007번으로 접속합니다.

geth --networkid 1007 --datadir test_node1 --nodiscover --port 30303 --allow-insecure-unlock --http --http.port "8545" --http.addr "0.0.0.0" --http.corsdomain "*" --http.api "eth, net, web3, miner, debug, personal, rpc" console
geth --networkid 1007 --datadir test_node2 --nodiscover --port 30304 --allow-insecure-unlock --http --http.port "8546" --http.addr "0.0.0.0" --http.corsdomain "*" --http.api "eth, net, web3, miner, debug, personal, rpc" console

 

첫번째 터미널에서 enode를 확인합니다. enode://로 시작하는 문자열이 출력됩니다.

admin.nodeInfo.enode

 

 

문자열을 복사해 2번째 터미널에 입력합니다. true가 반환되면 두개의 노드가 정상적으로 연결된 겁니다.

admin.addPeer("첫번째 enode 문자열")

 

첫번째 터미널에서 아래 명령어로 현재 연결된 피어를 확인합니다.

admin.peers

 

현재 연결된 피어의 갯수를 확인할 수 있습니다.

net.peerCount

 

연결 확인(채굴)

각 노드에서 새로운 계정을 생성합니다.

personal.newAccount()

 

계정의 잠금을 해제합니다.

// 계정 잠금 상태 확인
personal.listWallets[0].status

// 잠금 해제, 3번째 값이 0이면 geth 종료될 때 까지 해제 유지
personal.unlockAccount(eth.accounts[0], 'password', 0)

 

1번째 노드의 coinbase는 0번째 계정이 됩니다. 이제 채굴을 시작합니다. 1번째 노드에서 망치 모양과 함께 "Successfully sealed new block" 메시지가 출력됩니다.

// 채굴노드 확인
eth.coinbase

// 채굴 시작
miner.start()

// 채굴 중지
miner.stop()

 

 

1번재 터미널에서 채굴이 시작되면 2번째 터미널에서는 "Imported new chain segment" 메시지가 출력됩니다. 

 

트랜잭션 생성

1번째 터미널에서 채굴을 진행하면서 이더가 쌓였을 테니 노드 1에서 노드 2로 이더를 전송해보겠습니다. 송금을 하기 위해서는 각 계정의 잠금 상태를 반드시 해제해야 합니다.

eth.sendTransaction({
----- from : eth.coinbase,
----- to : "노드 2 주소값",
----- value : web3.toWei(2, 'ether)
})

 

 

트랜잭션이 발생되고 pending 상태가 됩니다. 1 터미널에서 채굴을 시작합니다. 채굴을 하면 새로운 블록이 생기고 트랜잭션이 처리됩니다. 트랜잭션 확인은 트랜잭션 해시값으로 확인 가능합니다.

eth.getTransaction("트랜잭션 해시")

 

노드 2 계정을 확인해보면 2이더가 송금된 것을 확인할 수 있습니다.

eth.getBalance(eth.accounts[0])

 

 

 

 

 

 

 

[Blockchain] 스마트 컨트랙트란?

블록체인 2.0인 이더리움이 주목받는 이유는 스마트 컨트랙트(Smart Contract) 덕분입니다. 스마트 컨트랙트는 블록체인 네트워크에 호스팅되어 실행되는 프로그램입니다. 미리 지정된 조건이 충족

about-tech.tistory.com

 

 

[Blockchain] 이더리움 EVM 작동 구조 원리

상태 머신이란 입력을 읽어서 새로운 상태로 전환하는 것입니다. 이더리움은 거래에 기반을 둔 상태 머신(Transaction-Based State Machine)입니다. 이더리움의 상태머신의 시작은 Genesis Block입니다. 이

about-tech.tistory.com

 

 

[Blockchain] 이더리움이란?

이더리움이란? 이더리움은 비트코인의 제한적인 기능을 넘어 스마트 컨트랙트 기능을 확장하여 제3의 신뢰 제공자 없이도 거래 이행이 가능하도록 하는 오픈소스 퍼블릭 블록체인입니다. 개발

about-tech.tistory.com

 

댓글