[컨센시스 아카데미] geth설정부터 트렌젝션까지

in #kr7 years ago

자주 글을 올리지 못해서 죄송합니다.
컨센시스 프로그램에서 요구하는 것들이 많아서 소화하는데 집중하고 있습니다.
오늘은 지난번에 말씀드린 geth에 대해 적었습니다.

Geth는 Go언어로 된 이더리움 노드 소프트웨어 코드 입니다.
https://ethereum-homestead.readthedocs.io/en/latest/ethereum-clients/go-ethereum/index.html
널리 사용되고 유지관리가 장점입니다. 설치부터 하겠습니다.
https://geth.ethereum.org/install/
각자 사양에 맞는 걸 찾아서 설치해주시면 되는데 저는 우분투 기준으로 설명하겠습니다.

$ sudo apt-get install -y software-properties-common
$ sudo add-apt-repository -y ppa:ethereum/ethereum
$ sudo apt-get update
$ sudo apt-get install -y ethereum

터미널을 열고 차례대로 입력해 줍니다. 최소 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”를 누르시면 됩니다. ~/.ethereum/안에는 geth geth.ipc keystore가 있는데 geth.ipc는 Geth가 실행될 때 나타납니다. 같은 방식으로

$ geth --testnet

를 입력하면 테스트넷 싱크를 할 수 있습니다. ”Ropsten”의 id는 3입니다. (id 1번은 메인넷)

이제 Private Network를 만들어볼껀데요.
Private Network를 만드려면 Genesis Block이 필요합니다.

// 이부분을 삭제하시고 "genesis42.json"로 저장하세요
{
"config": {
"chainId": 42,
"homesteadBlock": 0,
"eip150Block": 0,
"eip150Hash":"0x0000000000000000000000000000000000000000000000000000000000000000",
"eip155Block": 0,
"eip158Block": 0
},
"nonce": "0x0000000000000042",
"timestamp": "0x00",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"extraData": "0x00",
"gasLimit": "0x4c4b40",
"difficulty": "0x0400",
"mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"coinbase": "0x0000000000000000000000000000000000000000",
"alloc": {
}
}

“genesis42.json”으로 “~/Documents” 에다가 저장하시면 됩니다.
그리고 같은 방식으로 “~/Documents/launch42.sh”을 저장할껀데 내용은 아래와 같습니다.

#!/bin/bash

geth --datadir ~/.ethereum/net42 init ~/Documents/genesis42.json
geth --datadir ~/.ethereum/net42 --networkid 42

“cd ~/Documents”로 이동하신 후에 “chmod a+x launch42.sh” 권한을 부여하시고,
“./launch42.sh” 실행시킴니다.


[그림 2-1] 제네시스 블록 확인


[그림 2-2] 커뮤니케이션 채널 확인

[그림 2-1] 처럼 제네시스 블록이 생성되는 것을 확인하고, [그림 2-2]도 확인을 해 줍니다. 미스트와 geth간에 커뮤니케이션 채널 열어 놓은 것을 확인하는 과정입니다.
컨트롤 + C로 잠깐 멈추고 아까 “launch42.sh”파일을 열어 마지막 줄에 “console”을 입력해 줍니다. (geth --datadir ~/.ethereum/net42 --networkid 42 console)
그리고 다시 “./launch42.sh” 을 실행시키면 [그림 2-3]과 같은 화면이 나오게 됩니다.


[그림 2-3] 콘솔 입력창


[그림 2-4] 어카운트와 블록 넘버 확인

[그림 2-4]와 같이 입력해주면 블록넘버가 0입니다. 아직 싱크가 되지 않았거나 마이닝 되지 않았다는 얘기죠. [그림 2-5]처럼 0번 블록을 확인해보면 “receiptsRoot”, “stateRoot”, transactionsRoot”가 모두 동일합니다. 이 3개 루트는 이더리움 블록 헤더에 포함된 각각의 머클루트 입니다.


[그림 2-5] 0번 블록 확인


[그림 2-6] 포킹 준비

[그림 2-6]과 같이 입력하면 넷버젼은 42이고 피어카운트는 0입니다. 지금 이 네트워크에 혼자 있다는 이야기 입니다.


[그림 2-7] 어카운트 생성


[그림 2-8] 어카운트 언락


[그림 2-9] 프라이빗 키 확인

[그림 2-7]은 어카운트를 생성하는 화면이고, 사용하려면 [그림 2-8] 처럼 잠긴 것을 풀어줘야 합니다. 그리고 [그림 2-9]와 같이 이동해 프라이빗 키를 확인합니다. 프라이빗 키가 중요한 것은 아시죠? 백업을 해두시기 바랍니다.


[그림 2-10] 어카운트 잔액 확인

방금 만든 어카운트니깐 [그림 2-10]처럼 잔액은 0입니다.


[그림 2-11] 마이닝 시작


[그림 2-12] 마이닝 중

“miner.start(1)”을 입력하시면 [그림 2-11] 처럼 마이닝이 시작합니다. 첫 마이닝은 시간이 꽤 걸립니다. 대략 1.5기가바이트가 필요하고, 컴퓨터 RAM을 해쉬함수가 사용합니다. 컨센시스 교육 받을 때도 여기서 잠깐 쉴 수 있다면서 농담을 하네요~
몇 개의 블록이 생성되었으면 “miner.stop()”으로 마이닝을 멈춤니다.


[그림 2-13] 블록 확인

[그림 2-13]처럼 저는 12개의 블록까지 생성이 되었습니다.


[그림 2-14] 블록 길이 확인


[그림 2-15] 12번 블록 확인


[그림 2-16] 블록 디버그

12번 블록까지 생성된 것이 확실하네요~ [그림 2-15]를 보시면 “transactionsRoot”와 “receiptsRoot”는 변하지 않았고, “stateRoot”가 변경되었습니다. [그림 2-16]은 단일 주소로 어카운트 잔액을 보여주고, nonce는 이 계정에서 트렌젝션이 이루어지지 않았기 때문에 0 이고, 스마트 컨트렉트가 아니니깐 code가 없고, 스토리지에 업데이트 되지 않았으므로 스토리지부분도 비어 있습니다. Root는 스토리지 트리의 머클루트입니다.

이제 트렌젝션을 할껀데 [그림 2-17]과 같이 어카운트를 하나 더 만들어 줍니다.


[그림 2-17] 트렌젝션 어카운트 생성


[그림 2-18] 이더 보내기

[그림 2-18] 처럼 하지 마시고~ 전송트렌젝션을 하기 전에 먼저 어카운트 언락부터 해줍니다.


[그림 2-19] 트렌젝션 해시

거래를 할 때 트렌젝션 해시를 [그림 2-19]처럼 확인하고 있습니다.


[그림 2-20] 16진수 트렌젝션 값

가스 필드에 90000인데 트렌젝션 할 때 사용한 전체 가스이고, 이 트렌젝션을 위해 소비하는 가스 상한선입니다. 확인하셨으면 마이닝을 다시 시작합니다.


[그림 2-21] 마이닝 시작


[그림 2-22] 트렌젝션 해시 확인

[그림 2-22] 처럼 블록번호 13번에 해시가 있고, 트렌젝션인덱스는 0입니다.

간단하게 geth를 설치하고 트렌젝션까지 해봤습니다.
설명하다가 빠진 내용은 없는 거 같은데~
궁금하신거나~
자세한 설명이 필요하시거나~
따라하시다가 막히는 부분 있으면~
글 남겨주세요~

Sort:  

Bienvenido a Steemit! Este Post puede tener muchos upvotes con la ayuda del King: @dineroconopcion, El cual es un Grupo de Soporte mantenido por @wilbertphysique, @yoenelmundo y 5 personas mas que quieren ayudarte a llegar hacer un Top Autor En Steemit sin tener que invertir en Steem Power.Te Gustaria Ser Parte De Este Projecto? Click aquí para ir al grupo de Discord donde hablamos de steemit y criptomonedas

Welcome to Steemit! This Post can have many upvote's with the help of the King's Account: @dineroconopcion, It's a Support Group run by @wilbertphysique, @yoenelmundo, and 5 other people that want to help you be a Top Steemit Author without having to invest into Steem Power. Would You Like To Be Part of this Project? Click here, go to group discord where we talk about steemit and cryptocurrency

votes.png

부탁드립니다.
김환균 피디의 영화 <공범자들>의 기각을 도와주십시오.

Congratulations @sangphilkim! You have completed some achievement on Steemit and have been rewarded with new badge(s) :

You got your First payout

Click on any badge to view your own Board of Honor on SteemitBoard.
For more information about SteemitBoard, click here

If you no longer want to receive notifications, reply to this comment with the word STOP

By upvoting this notification, you can help all Steemit users. Learn how here!

Coin Marketplace

STEEM 0.19
TRX 0.13
JST 0.030
BTC 64015.61
ETH 3429.88
USDT 1.00
SBD 2.54