이번 실습에서는 geth를 사용하여 프라이빗 블록체인을 만들고, 해당 블록체인에서 트랜잭션을 만들고 채굴을 해보려고 한다.
사전 준비
실습 환경은 도커 우분투 컨테이너 안에서 실습을 진행한다.
$ docker search ubuntu
$ docker pull ubuntu
$ docker create -it --name con_ubuntu ubuntu
$ docker start con_ubuntu
$ docker ps
$ docker attach con_ubuntu
$ apt update -y && apt install -y software-properties-common
$ add-apt-repository ppa:ethereum/ethereum
$ apt-get install vim -y
$ apt update -y && apt install geth
$ apt-get install git -y
$ cd ~
$ git clone https://github.com/ethereum/go-ethereum
$ apt-get install -y build-essentail golang
geth을 이용한 계정 생성 및 채굴
$ mkdir test_data
$ geth --datadir test_data account new
$ vim genesis.json
// genesis.json
{
"config": {
"chainId": 8484,
"homesteadBlock": 0,
"eip150Block": 0,
"eip155Block": 0,
"eip158Block": 0
},
"difficulty": "20",
"gasLimit": "2100000",
"alloc": {
"계정의 주소값": { "balance": "300000" }
}
}
$ geth --datadir test_data init test_data/genesis.json
$ tree test_data/
$ geth --networkid 8484 --nodiscover --datadir test_data -allow-insecure-unlock --http.addr 0.0.0.0 --http --http.port 8545 --http.corsdomain "*" --http.api="db,eth,net,web3,personal,web3,miner,admin" --miner.threads 1 console 2>> test_data/geth.log
> personal.newAccount('패스워드')
> eth.accounts
> miner.setEtherbase(personal.listAccounts[1]);
> personal.listWallets[0].status
> personal.unlockAccount(eth.coinbase)
> personal.unlockAccount(eth.coinbase, "계정명")
> personal.unlockAccount("주소", "패스워드", 유효기간)
// 유효기간을 0을 입력하면 geth 프로세스가 종료될 때까지 unlock 상태를 유지한다.
miner.start(n) // 채굴 시작
eth.mining // 채굴 진행 확인
eth.blockNumber // 가장 최근에 추가된 블록 숫자 확인
miner.stop() // 채굴 종료
eth.pendingTransactions // 처리해야 할 트랜잭션 목록 확인 초기에는 빈 배열
eth.sendTransactions({
from:eth.accounts[0], // 트랜잭션을 보내는 계정 주소
to:eth.accounts[1], // 수신자 계정의 주소
value:web3.toWei(2,'ether'), // 전송할 금액
data:web3.toHex("send message") // 전송할 메시지
})