일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 솔리디티
- 파이썬
- 타입스크립트
- 블록체인
- es6
- AWS
- k8s
- 웹
- 프론트엔드
- 알고리즘
- CSS
- react
- 컴퓨터공학
- 리액트
- next.js
- 이슈
- 쿠버네티스
- BFS
- HTML
- 자바스크립트
- 가상화
- docker
- 백준
- 이더리움
- 백엔드
- JavaScript
- 클라우드
- TypeScript
- VUE
- kubernetes
- Today
- Total
즐겁게, 코드
Geth를 활용한 프라이빗 블록체인 구축 & 마이닝 실습 본문
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 을 입력했습니다.
이제 생성한 블록체인을 활성화하는 작업이 필요한데요, 다음 커맨드에서 필요한 정보를 입력한 후 복붙해 입력해줍니다.
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:(오픈한 서버 포트주소)
를 입력하면 자바스크립트 콘솔이 출력되고, 마이닝을 실습해볼 준비가 모두 끝났습니다.
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번 블록에 저장되어 있으며, 누가 누구에게 얼마를 보냈는지에 대한 정보가 모두 담겨있는 것을 확인할 수 있습니다.
이제 찬민토큰을 사 줄 사람만 찾으면 되겠네요! (곧 업비트에서 뵐 수 있기를...)
'🖥 컴퓨터공학 > 블록체인' 카테고리의 다른 글
Ganache를 활용한 스마트 컨트랙트 배포 (1) | 2021.04.28 |
---|