티스토리 뷰

1. Genesis Block 생성

2. Geth 실행

3. 계정 생성

4. 채굴

5. peer 추가


1. Genesis Block 생성

/* genesis.json */

{
    "difficulty": "200000",
    "gasLimit": "3100000",
    "alloc": {},
    "config": {
        "chainId": 7722,
        "homesteadBlock": 0,
        "eip150Block": 0,
        "eip155Block": 0,
        "eip158Block": 0
    }
}

Private Network를 만들고자 하는 디렉토리에 genesis.json 파일을 생성하고 위와 같이 내용을 적는다.

 

위 내용 중 config 항목에서 가장 중요한 것은 chainId이다. chainId는 네트워크 상에서 각각의 망을 식별하는 식별자로서 public 망은 모두 고유 번호가 있다.

0: Olympic, Ethereum public pre-release testnet
1: Frontier, Homestead, Metropolis, the Ethereum public main network
1: Classic, the (un)forked public Ethereum Classic main network, chain ID 61
1: Expanse, an alternative Ethereum implementation, chain ID 2
2: Morden, the public Ethereum testnet, now Ethereum Classic testnet
3: Ropsten, the public cross-client Ethereum testnet
4: Rinkeby, the public Geth PoA testnet
42: Kovan, the public Parity PoA testnet
77: Sokol, the public POA Network testnet
99: Core, the public POA Network main network
7762959: Musicoin, the music blockchain

위의 번호를 피해 자신이 쓰고자 하는 번호를 적으면 된다. 물론 chainId가 같더라도 genesis block이 다르면 서로 다른 네트워크로 인식한다. 

 

homesteadBlock, eip150Block, eip155Block, eip158Block의 속성 값은 false(0)로 한다.

 

homesteadBlock은 블록체인의 Release 버전을 나타낸다.

 

eip[number]Block의 eip는 Ethereum Improved Proposal의 줄임말로 각각 개선된 문제해결 방안을 추가할 경우 하드포크를 하게 되는데 기본 값은 0이다. 

 

difficulty는 블록의 nonce 값을 발견하는 난이도를 설정한다. 이 값이 클수록 블록 생성 속도가 느려진다.

 

gasLimit은 체인 전체에 대한 블록 당 가스 지출의 제한량을 설정한다.

 

$ geth --datadir node init genesis.json

genesis.json 파일 작성이 완료되었다면 위 명령어로 genesis block을 생성한다.

 

[그림 1] genesis block 생성

위 명령어를 실행하면 현재 디렉토리에 node라는 하위 디렉토리가 생성된다.

 

 

2. Geth 실행

$ geth --datadir node

위 명령어로 node 디렉토리가 있는 곳에서 geth를 실행한다.

 

[그림 2] geth 실행

geth가 제대로 실행되면 node 디렉토리 안에 geth.ipc가 생성된다. 다른 터미널 창을 열어서 geth attach로 IPC 콘솔 프롬프트에 접근할 수 있다.

 

$ geth --datadir node --nodiscover

위 명령어에 --nodiscover를 추가하여 실행하면 근처에 있는 peer를 찾지 않는다. --nodiscover가 없으면 가까운 peer를 찾아서 연결을 시도한다.

 

[그림 3] geth.ipc 콘솔 프롬프트 접속

콘솔 프롬프트에 접근하였다. 이제 계정 생성, 채굴, peer 추가 등의 실습을 해 볼 것이다.

 

 

3. 계정 생성

[그림 4] 계정 생성

personal.newAccount()로 계정을 생성한 후 eth.accounts로 확인한다. string 값으로 들어간 1234는 password이다.

 

 

4. 채굴

[그림 5] coinbase

기본적으로 coinbase는 eth.accounts 배열의 0번째 index 값이다.

 

[그림 6] coinbase 변경

coinbase를 변경하고 싶다면 위와 같이 miner.setEtherbase()에 eth.accounts의 몇 번째 인덱스에 해당하는 계정으로 할 것인지 지정하면 된다.

 

[그림 7] mining 시작

miner.start(1)을 실행하면 null 값이 나오지만, 실제로 채굴이 시작되었다. 숫자 1은 스레드를 1개로 하겠다는 의미이다.

 

[그림 8] geth에서 채굴 중인 것을 확인

DAG(Directed Acyclic Graph)가 생성 중이라는 문구가 나온다.

 

[그림 9] mining 중지

miner.stop()을 통해 채굴을 중지할 수 있다.

 

[그림 10] 채굴 후 balance 확인

코인이 얼마나 채굴되었는지 확인하려면 위와 같이 입력하면 된다.

 

 

5. peer 추가

[그림 11] addPeer

admin.nodeInfo.enode를 실행하면 자신의 enode 값을 알 수 있다.

 

이를 같은 다른 사람과 공유하여 admin.addPeer("enode")를 통해 서로 같은 네트워크를 공유할 수 있다.

 

[그림 12] peer 수 확인

net.peerCount는 현재 연결되어 있는 peer의 수를 나타낸다.

'Geth' 카테고리의 다른 글

[Geth] puppeth를 이용한 Private Network 구축 (feat. RPC)  (2) 2022.07.01
[Geth] 동기화 모드 및 명령어  (0) 2022.06.30
Linux에 GoLang, Geth 설치  (0) 2022.06.27
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함