개발 환경 설정
처음에는 AWS에서 EC2 저렴한 거, t2.micro로 시도해봤다. 설치까진 쉽게 진행됐지만, 지갑을 생성할 때 프로세스가 죽었다(killed) 그래서 t3.medium으로 4기가 짜리로 시작했더니 쉽게 됐다. 중간의 2GB는 건너 뛰었지만 최소사양으로 4GB는 있어야되는 것으로 보인다.
Geth 설치
2가지 방법이 있다. 1번째는 git clone 후 make 설치하는 방법, 2번째는 ubuntu 에서 제공하는 ppa로 설치하는 방법이 있는데 2번째가 더 편해보여서 2번째로 선택하였다. 참고 링크
sudo apt-get update
sudo add-apt-repository -y ppa:ethereum/ethereum
sudo apt-get update
sudo apt-get install ethereum -y
geth version // 설치 확인
설치가 정상적으로 진행된 후, geth version 명령어를 진행해보면 아래와 같이 나온다.
초기 블록 생성(Genesis)
Geth를 설치한 다음엔 초기 블록을 생성해야 한다. 나는 인터넷에서 다음과 같은 json 파일을 검색하였고, 실행은 다음의 명령어로 실행하였다.
geth --datadir {dir_name} init genesis.json
{
"config": {
"chainId": 21,
"homesteadBlock": 0,
"eip150Block": 0,
"eip155Block": 0,
"eip158Block": 0,
"byzantiumBlock": 0,
"constantinopleBlock": 0,
"petersburgBlock": 0,
"ethash": {}
},
"difficulty": "0x40000",
"gasLimit": "0x8000000",
"alloc": {}
}
이렇게 진행하면 {dir_name}의 폴더가 생성되는데, 앞으로 저장될 트랜잭션, 블록에 대한 정보들이 이 곳에 저장된다고 보면 된다.
네트워크 가동
위에서 초기 생성된 geth를 실행시켜야 한다. 나는 아래의 옵션으로 실행하였다.
geth --networkid {네트워크 ID} --datadir . --http --http.port {포트 주소} --http.api "admin,db,eth,miner,net,txpool,personal,web3" --allow-insecure-unlock --nodiscover --snapshot=false
이후에 다른 네트워크에선 이렇게 접속할 수 있다.
geth attach <http://localhost>:<포트 주소>
송금하기
이제 생성된 Private Chain에 송금을 한번 해보자.
personal.newAccount("{sender 비밀번호}")
"{sender 주소}"
새로운 비밀번호를 설정하여 지갑을 생성하는 명령어를 입력하면 새로운 지갑 주소가 생성된다.
그다음으로 생성된 지갑은 “가스비”가 있어야 트랜잭션을 일으킬 수 있다. 현재 가스비가 없으므로 채굴을 진행시켜야 한다. 채굴을 진행하는 명령어는 다음과 같다.
miner.start() //시작
주의할 점은, 채굴을 시작하면 채굴까지의 시간이 걸린다는 것이다.
따라서 아래의 "Successfully sealed new block” 메세지가 나올 때까지 기다려야 한다.
이 내용이 확인되면 다음의 명령어로 채굴을 종료시킨다.
miner.stop() // 종료
이후 채굴되어 얻어진 이더리움 잔금을 확인해보자.
(만약 진행되지 않았다면, 채굴을 더 진행하거나 금액을 낮춰야한다)
eth.getBalance({wallet_address})
이제 송금을 해야한다. 송금하기 위한 새로운 계정을 만들고, 송금하는 계좌의 잠금을 풀어준 뒤, 수신 계좌에 이더를 송금시킨다.
personal.newAccount("B") // 새로운 계좌 생성
"0xedbfda4571f0fdc470bad4701d3d8e0853f8f25b" //계좌지갑주소
personal.unlockAccount("0xdd21bbaf947da505c4ddf6a557118d8946cdf6a5", "A", 0) //{송금지갑주소}, {비밀번호}, 0
true
eth.sendTransaction({from: "0xdd21bbaf947da505c4ddf6a557118d8946cdf6a5", to: "0xedbfda4571f0fdc470bad4701d3d8e0853f8f25b", value: web3.toWei(1, "ether")})
"0xb28de4f86980d08343d805653a6e48c7d4651a1d7237e65728ef6598d897634b" //트랜잭션 번호
eth.getBalance("0xedbfda4571f0fdc470bad4701d3d8e0853f8f25b") //수신지갑주소
1000000000000000000
참고사항
test1이라는 폴더를 만들고 나면, geth 라는 폴더가 생성된다. chaindata, nodes, triecache 등 다양한 폴더들을 볼 수 있는데, 블록의 헤더, 바디의 트랜잭션 내용들이 저장되는 장소이고, keystore는 geth에서 관리하는 계정들의 정보이다. 테스트를 진행하면서 지갑을 2개 생성하였으므로, keystore에는 2개의 파일이 생성된 것을 볼 수 있다.
참고
https://velog.io/@aintbe/private-network-with-geth
https://geth.ethereum.org/docs/install-and-build/installing-geth#ubuntu-via-ppas
https://bitkunst.tistory.com/entry/Ethereum이더리움-private-네트워크?category=1033877