💡로컬 테스트넷에서 Geth를 실행하기
로컬 테스트넷에서 Geth 를 실행하기 위해서는 데이터 디렉터리와 genesis.json 파일이 필요하다.
데이터 디렉터리 -> 송수신한 블록 데이터와 계정 정보를 저장
genesis.json -> 블록체인의 Genesis 블록의 정보가 저장된 json 형태의 텍스트 파일
1. 데이터 디렉터리와 genesis.json 파일을 만든다.
mkdir test_data
2. geth 를 실행하여 정상적으로 작동하는지 확인한다.
geth
💡Geth console 을 사용하여 계정 생성
1. 다음 명령어를 입력하여 계정을 생성한다.
geth --datadir test_data account new
계정에 사용할 비밀번호를 입력하면 계정의 주소값이 나오는데 이 주소는 jenesis.json 파일에서 사용하기 때문에 기억해 두는 것이 좋다.
0x738E6ed619360A4A005B6216748344842aca914B
2. 계정이 잘 생성되었는지 확인한다.
geth -datadir test_data account list
💡Genesis Block 만들기
1. genesis.json 파일을 열어 다음의 내용을 붙여 넣는다. 내용을 붙여 넣었으면 esc를 누르고 :wq 를 이용해 vim을 빠져나오면 된다.
vim genesis.json
{
"config": {
"chainId": 8484,
"homesteadBlock": 0,
"eip150Block": 0,
"eip155Block": 0,
"eip158Block": 0
},
"difficulty": "20",
"gasLimit": "2100000",
"alloc": {
"계정의 주소값": { "balance": "300000" }
}
}
* 계정의 주소값에는 본인의 주소를 넣어주면 된다.
💡Genesis Block을 생성 및 초기화
1. 제네시스 블록을 생성하고 초기화 한다.
geth --datadir test_data init test_data/genesis.json
2. tree 모듈을 설치하고, tree 모듈을 사용하여 트리 형태로 디렉터리 구조를 확인한다.
apt-get install tree -y
tree test_data/
💡Geth 실행
1. 아래의 명령어로 geth를 실행해본다.
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
각 명령어는 다음을 의미한다.
- -datadir test_data : 데이터 디렉터리를 지정한다.
- networkid 8484 : 네트워크 식별자이다.
- http : 예전에는 rpc였으나 현재는 http로 변경되었다.
- http.addr "ip" : IP는 현재 사용 중인 IP를 입력하면 된다.
- http.port "port" : 포트 번호를 원하는 것으로 설정하면 된다.
- http.corsdomain"*" : 접속할 수 있는 RPC 클라이언트 URL 을 지정하는 것인데 "*" 경우 전체 허용이다.
- -nodiscover : 생성자의 노드를 다른 노드에서 검색할 수 없게 하는 옵션이다. 같은 제네시스 블록과 네트워크 ID 에 이쓴 블록들이 연결되는 것을 방지한다.
- http.api "db, eth, net, web3, personal" : rpc에 의해 접근할 수 있는 api 라고 보면 된다.
- -maxpeers 0 : 생성자의 노드에 연결할 수 있는 노드의 수를 지정한다. 0을 지정하면 다른 노드와 연결하지 않는다.
- console : 대화형 자바스크립트 콘솔을 기동한다.
- 2>> test_data/geth.log : 로그 파일을 만들 때 사용할 옵션으로 해당 경로의 파일에 저장한다.
💡Etherbase 설정하기
이더리움에는 두 가지 종류의 계정이 있다. EOA (Externally Owned Account) 이고, 다른 하나는 CA(Contract Account)이다. EOA는 일반 사용자가 사용하는 계정으로 비밀키로 관리된다. 이더리움을 송금하거나 계약을 실행할 수 있다. Contract 계정은 컨트랙트를 블록체인에 배포할 때 만들어지는 계정으로 블록체인에 존재한다.
Geth console 에서 personal.newAccount 명령으로 EOA를 만들 수 있다.
1. 처음 만든 계정이 잘 등록되어 있는지 확인한다.
eth.accounts
2. 새로운 계정을 추가하고, eth.accounts 명령어를 이용해 잘 생성됐는지 확인할 수 있다.
personal.newAccount('패스워드')
3. 채굴 시 보상받을 계정을 선택한다.
이더리움을 채굴하고 보상을 받는 계정을 Etherbase라고 한다. Etherbase 는 eth.coinbase 변수에 저장된다. 기본적으로 eth.accounts[0] 이 설정된다. Etherbase는 miner.setEtherbase() 변수로 설정할 수 있다.
기존에는 보상을 받는 계정이 새로운 계정으로 변경된 것을 아래와 같은 명령어로 확인해볼 수 있다.
4. 아래와 같은 명령어로 각 계정의 잔고도 확인해볼 수 있다. 첫 번째 계정 같은 경우에는 제네시스 블록이 생성될 때 30000wei가 할당되었기 때문에 잔액이 존재한다.
eth.getBalance(eth.accounts[0])
5. wei 가 아닌 다른 ether 단위로도 변환하여 표시할 수 있다.
web3.fromWei(eth.getBalance(eth.coinbase), 'ether')
6. 블록체인의 블록 수와 블록 정보도 확인할 수 있고 계정의 상태(Locked / Unlocked)도 확인할 수 있다.
eth.blockNumber // 생성된 블록 수 조회
th.getBlock(0) // 0번째 블록의 정보 출력
personal.listWallets[0].status
7. 아래 세 명령어 중 하나로 잠긴 계정 해제하기
personal.unlockAccount(eth.coinbase)
personal.unlockAccount(eth.coinbase, "계정명")
personal.unlockAccount("주소", "패스워드", 유효기간)
// 유효기간을 0을 입력하면 geth 프로세스가 종료될 때까지 unlock 상태를 유지합니다.
💡 이더리움 채굴하기
1. miner.start(n) 명령어를 입력해 채굴을 시작한다. (n은 스레드의 갯수)
miner.start(n)
2. eth.mining 명령어를 통해 채굴을 진행하고 있는지 확인.
eth.mining
3. eth.blcokNumber 명령어로 최근에 추가된 블록의 숫자를 확인한다.
eth.blockNumber
4. miner.stop() 명령어로 채굴을 종료한다.
miner.stop()
5. Etherbase 계정을 조회하면 채굴에 대한 보상으로 잔액이 늘어난 것을 확인할 수 있다.
'블록체인' 카테고리의 다른 글
eth-lightwallet 모듈의 내장함수 이용해서 Mnemonic Wallet 개발하기 (0) | 2022.06.21 |
---|
댓글