Notice
Recent Posts
Recent Comments
관리 메뉴

즐겁게, 코드

Geth를 활용한 프라이빗 블록체인 구축 & 마이닝 실습 본문

🖥 컴퓨터공학/블록체인

Geth를 활용한 프라이빗 블록체인 구축 & 마이닝 실습

Chamming2 2021. 4. 21. 14:20

Geth(Go + Etherium)는 이더리움 기반 블록체인 네트워크를 구성하기 위한 클라이언트 소프트웨어인데요, 오늘은 Geth를 활용해 이더리움 기반 블록체인을 구성하고 블록을 직접 마이닝해 이더를 획득하는 과정을 소개해보려 합니다.

 

Geth는 geth.ethereum.org/downloads/ 에서 설치할 수 있습니다.

(※ MacOS는 이상하게도 Geth 설치 파일이 아닌 실행 스크립트만을 제공하기 때문에, 이곳에서 소개하는 터미널을 통한 설치 방법을 이용하시길 바랍니다.)

1. Private Network 구축하기

먼저 실습을 진행할 폴더를 하나 만들어준 후 아래의 json 파일을 genesis.json 이라는 이름으로 저장해줍니다.

(※ chainId는 본인의 ID이므로 원하는 대로 수정해도 되지만, 반드시 기억해야만 합니다!)

{
  "config": {
    "chainId": 1234,
    "homesteadBlock": 0,
    "eip150Block": 0,
    "eip155Block": 0,
    "eip158Block": 0
  },
  "difficulty": "0x20000",
  "gasLimit": "0x2fefd8",
  "alloc": {},
  "coinbase": "0x0000000000000000000000000000000000000000",
  "extraData": "",
  "nonce": "0x0000000000000000",
  "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "timestamp": "0x00"
}

다음으로는 터미널을 열고, genesis.json이 저장된 폴더로 이동해 geth --datadir (원하는 토큰명) init genesis.json을 입력해 첫 번째 블록체인 네트워크를 구성해 봅시다. 저는 찬민토큰(cm) 을 만들고자 원하는 토큰명에 cm 을 입력했습니다.

Successfully wrote genesis state가 뜨면 정상입니다.

이제 생성한 블록체인을 활성화하는 작업이 필요한데요, 다음 커맨드에서 필요한 정보를 입력한 후 복붙해 입력해줍니다.

geth --networkid (genesis.json의 체인 id) --datadir (생성한 토큰명) --http --http.port (오픈할 서버 포트주소) --rpcapi “admin,eth,miner,net,txpool,personal,web3” --allow-insecure-unlock console --nodiscover --snapshot=false

(※ 체인 id, 토큰명, 포트주소는 직접 입력해주셔야합니다! => Ex. 1234 / cm / 5000)

하단에 포트 정보가 출력되면 성공입니다!

이제 새로운 터미널을 열어 geth attach http://localhost:(오픈한 서버 포트주소) 를 입력하면 자바스크립트 콘솔이 출력되고, 마이닝을 실습해볼 준비가 모두 끝났습니다.

터미널을 새로 생성해 attach 커맨드를 입력하셔야 합니다!

2. 새로운 토큰 주소 만들기 & 활용하기

찬민토큰 네트워크가 생성되었으니, 토큰을 주고받을 지갑을 생성해보겠습니다.

지갑을 생성하는 커맨드는 personal.newAccount("비밀번호") 입니다. (※ 비밀번호는 반드시 기억하셔야 합니다!)

새로운 찬민토큰 계좌 주소가 생성된 모습입니다.

토큰 지갑(계좌)를 만드는 데까지 성공했으니, 이제부터 수행할 수 있는 동작의 리스트를 정리해 보겠습니다.

객체명 메서드명 (괄호 없을시 프로퍼티명) 역할
personal newAccount(비밀번호) 새로운 계좌를 생성합니다.
personnal unlockAccount(eth.accounts[인덱스, 비밀번호, 0]) 계좌의 출금 등 제한을 해제합니다.
eth accounts 네트워크에 존재하는 모든 계좌를 출력합니다.
eth getBalance(eth.accounts[인덱스]) 특정 계좌의 잔고를 출력합니다.
eth coinbase 채굴 보상을 받을 계좌를 출력합니다.
eth setEtherbase(eth.accounts[인덱스]) 채굴 보상을 받을 계좌를 변경합니다.
eth blockNumber 현재까지 생성된 블록 번호를 출력합니다.
eth sendTransaction({from: 보낼 주소, to: 받을 주소, value: 값}) 블럭체인에 트랜잭션을 제출합니다.
eth getTransaction(트랜잭션 주소) 트랜잭션 처리 결과를 출력합니다.
miner start() 채굴(트랜잭션 처리)을 시작합니다.
miner stop() 채굴을 중단합니다.

miner.start() 를 통해 마이닝(트랜잭션 처리 및 블록 생성)을 수행하는 모습입니다.

마이닝에 성공하면 그만큼 채굴 보상이 주어지겠죠?

이제 보상으로 받은 찬민토큰을 다른 계좌에 보내봅시다.

0xe42ed9 계좌에서 0x3bc4d 계좌로 1 이더를 전송하는 트랜잭션을 블록체인에 제출하면, 아직 네트워크에는 저 말고 아무도 없기 때문에 제가 miner.start() 를 다시 실행해 트랜잭션을 처리해야 합니다.

혼자 트랜잭션을 만들고 처리하고.. 북치고 장구치기네요

이후 eth.getTransaction() 메서드를 사용해 방금 1 이더를 전송한 트랜잭션의 정보를 확인해 보면 이 트랜잭션(거래정보) 는 453번 블록에 저장되어 있으며, 누가 누구에게 얼마를 보냈는지에 대한 정보가 모두 담겨있는 것을 확인할 수 있습니다.

이제 찬민토큰을 사 줄 사람만 찾으면 되겠네요! (곧 업비트에서 뵐 수 있기를...)

반응형
Comments
소소한 팁 : 광고를 눌러주시면, 제가 뮤지컬을 마음껏 보러다닐 수 있어요!
와!! 바로 눌러야겠네요! 😆