Geth는 Go언어로 된 이더리움 노드 소프트웨어 코드 입니다.
널리 사용되고 유지관리가 장점입니다. 설치부터 하겠습니다.
각자 사양에 맞는 걸 찾아서 설치해주시면 되는데 저는 우분투 기준으로 설명하겠습니다.
$ sudo apt-get install -y software-properties-common
$ sudo add-apt-repository -y ppa:/
$ sudo apt-get update
$ sudo apt-get install -y
터미널을 열고 차례대로 입력해 줍니다. 최소 3기가의 RAM과 128메가바이트의 비디오 RAM이 있어서 채굴이 가능합니다. 다 설치를 하셨나요?
$ geth version
Geth
Version: 1.6.7-stable
Git Commit: ab5646c532292b51e319f290afccf6a44f874372
Architecture: amd64
Protocol Versions: [63 62]
Network Id: 1
Go Version: go1.8.1
Operating System: linux
GOPATH=
GOROOT=/usr/lib/go-1.8
$ geth
Geth version이라고 입력을 하면 Geth버전을 포함한 정보가 나타나게 됩니다. Geth를 멈추려면 “컨트롤 + C”를 누르시면 됩니다. ~/./안에는 geth geth.ipc keystore가 있는데 geth.ipc는 Geth가 실행될 때 나타납니다. 같은 방식으로
$ geth — testnet
를 입력하면 테스트넷 싱크를 할 수 있습니다. ”Ropsten”의 id는 3입니다. (id 1번은 메인넷)
이제 Private Network를 만들어볼껀데요.
Private Network를 만드려면 Genesis Block이 필요합니다.
// 이부분을 삭제하시고 “genesis42.json”로 저장하세요
,
“nonce”: “0x0000000000000042”,
“timestamp”: “0x00”,
“parentHash”: “0x0000000000000000000000000000000000000000000000000000000000000000”,
“extraData”: “0x00”,
“gasLimit”: “0x4c4b40”,
“difficulty”: “0x0400”,
“mixhash”: “0x0000000000000000000000000000000000000000000000000000000000000000”,
“”: “0x0000000000000000000000000000000000000000”,
“alloc”:
}
“genesis42.json”으로 “~/Documents” 에다가 저장하시면 됩니다.
그리고 같은 방식으로 “~/Documents/launch42.sh”을 저장할껀데 내용은 아래와 같습니다.
#!/bin/bash
geth — datadir ~/./net42 init ~/Documents/genesis42.json
geth — datadir ~/./net42 — networkid 42
“cd ~/Documents”로 이동하신 후에 “chmod a+x launch42.sh” 권한을 부여하시고,
“./launch42.sh” 실행시킴니다.
[그림 2–1] 처럼 제네시스 블록이 생성되는 것을 확인하고, [그림 2–2]도 확인을 해 줍니다. 미스트와 geth간에 커뮤니케이션 채널 열어 놓은 것을 확인하는 과정입니다.
컨트롤 + C로 잠깐 멈추고 아까 “launch42.sh”파일을 열어 마지막 줄에 “console”을 입력해 줍니다. (geth — datadir ~/./net42 — networkid 42 console)
그리고 다시 “./launch42.sh” 을 실행시키면 [그림 2–3]과 같은 화면이 나오게 됩니다.
[그림 2–4]와 같이 입력해주면 블록넘버가 0입니다. 아직 싱크가 되지 않았거나 마이닝 되지 않았다는 얘기죠. [그림 2–5]처럼 0번 블록을 확인해보면 “receiptsRoot”, “stateRoot”, transactionsRoot”가 모두 동일합니다. 이 3개 루트는 이더리움 블록 헤더에 포함된 각각의 머클루트 입니다.
[그림 2–6]과 같이 입력하면 넷버젼은 42이고 피어카운트는 0입니다. 지금 이 네트워크에 혼자 있다는 이야기 입니다.
[그림 2–7]은 어카운트를 생성하는 화면이고, 사용하려면 [그림 2–8] 처럼 잠긴 것을 풀어줘야 합니다. 그리고 [그림 2–9]와 같이 이동해 프라이빗 키를 확인합니다. 프라이빗 키가 중요한 것은 아시죠? 백업을 해두시기 바랍니다.
방금 만든 어카운트니깐 [그림 2–10]처럼 잔액은 0입니다.
“miner.start(1)”을 입력하시면 [그림 2–11] 처럼 마이닝이 시작합니다. 첫 마이닝은 시간이 꽤 걸립니다. 대략 1.5기가바이트가 필요하고, 컴퓨터 RAM을 해쉬함수가 사용합니다. 컨센시스 교육 받을 때도 여기서 잠깐 쉴 수 있다면서 농담을 하네요~
몇 개의 블록이 생성되었으면 “miner.stop()”으로 마이닝을 멈춤니다.
[그림 2–13]처럼 저는 12개의 블록까지 생성이 되었습니다.
[그림 2–15] 12번 블록 확인
12번 블록까지 생성된 것이 확실하네요~ [그림 2–15]를 보시면 “transactionsRoot”와 “receiptsRoot”는 변하지 않았고, “stateRoot”가 변경되었습니다. [그림 2–16]은 단일 주소로 어카운트 잔액을 보여주고, nonce는 이 계정에서 트렌젝션이 이루어지지 않았기 때문에 0 이고, 스마트 컨트렉트가 아니니깐 code가 없고, 스토리지에 업데이트 되지 않았으므로 스토리지부분도 비어 있습니다. Root는 스토리지 트리의 머클루트입니다.
이제 트렌젝션을 할껀데 [그림 2–17]과 같이 어카운트를 하나 더 만들어 줍니다.
[그림 2–18] 처럼 하지 마시고~ 전송트렌젝션을 하기 전에 먼저 어카운트 언락부터 해줍니다.
거래를 할 때 트렌젝션 해시를 [그림 2–19]처럼 확인하고 있습니다.
가스 필드에 90000인데 트렌젝션 할 때 사용한 전체 가스이고, 이 트렌젝션을 위해 소비하는 가스 상한선입니다. 확인하셨으면 마이닝을 다시 시작합니다.
[그림 2–22] 처럼 블록번호 13번에 해시가 있고, 트렌젝션인덱스는 0입니다.
간단하게 geth를 설치하고 트렌젝션까지 해봤습니다.
설명하다가 빠진 내용은 없는 거 같은데~
궁금하신거나~
자세한 설명이 필요하시거나~
따라하시다가 막히는 부분 있으면~
글 남겨주세요~
Published at Tue, 30 Apr 2019 03:26:13 +0000
