벨로그에서 코인베이스라는 말이 들어가면 무조건 비공개로 돌리는 이슈가 있어
해당 철자를 사용할 때는 coinxbase와 같이
coinbase 사이에x를 삽입했으므로 참고 바람

로컬 테스트넷에서 Geth를 실행하기 위해서는 데이터 디렉토리genesis.json파일 필요

데이터 디렉토리: 송수신한 블록 데이터와 계정 정보 저장
gensis.json: 블록체인의 Genesis 블록 정보 저장

구조는 아래와 같다

  go-ethereum
          ᄂ test_data
          ᄂ genesis.json

Geth console

geth Command-line Opitions docs
https://geth.ethereum.org/docs/interface/command-line-options

USAGE:
geth [options][command] [command options][arguments...]


계정 생성

$ geth --datadir test_data account new

[options] datadir: Data directory for the databases and keystore (default: "~/.ethereum")
데이터 디렉토리 지정

명령어 입력하고 비밀번호 설정하면 public address(계정 주소)를 확인할 수 있다

$ geth --datadir test_data account list

계정이 잘 생성되었는지 확인해 보자(아래와 같다면 성공!)


GenesisBlock 만들기

제네시스 할 때마다 메이플 헤네시스 생각

$ vi genesis.blcok 파일을 열어서 아래 내용 입력
(설마 "계정의 주소값"도 그대로 복붙하는 거 아니시죠?)

{
          "config": {
            "chainId": 8484,
            "homesteadBlock": 0,
        	  "eip150Block": 0,
            "eip155Block": 0,
            "eip158Block": 0
          },
          "difficulty": "20",
          "gasLimit": "2100000",
          "alloc": {
            "계정의 주소값": { "balance": "300000" }
          }
        }


genesis.json의 속성값

config: 이더리움 관련 설정
config.chainId: 현재 chain을 구별하는 값. replay attak으로부터 보호해주는 역할

replay attack
: repeat attack 또는 playback attack이라고도 함
: 유효한 데이터 전송이 악의적으로 또는 부정하게 반복되거나 지연되는 네트워크 공격(spoofing attack의 일부)


congfig.homesteadBlock
config.eip155Blcok
config.eip150Block
config.eip158Block

이 4가지는 사설 블록체인을 만들 때 기본적으로 동일한 설정

EIP: Ethereum Improvement Proposal
개발자들이 이더리움을 업그레이드 하기 위해 제안된 아이디어

config.homesteadBlock: 이더리움의 4단계 로드맵 중 2번 째 메이저 단계. true일 경우 0

config.eip150Blcok: EIP155는 chainId와 마찬가지로 replay attack을 막기 위한 설정

config.eip150Block: IO가 많은 작업에 대한 가스 변경 비용 설정

config.eip158Block: EIP158은 계정의 상태가 변경되고, 변경된 경과값으로 인해 계정의 nonce와 balance 값이 0이 되고 code와 storage가 빈 값이 된 경우 해당 계정 삭제


difficulty: 채굴 난이도. 값이 클 수록 채굴 난이도 상승

gasLimit: 블록 당 담을 수 있는 가스의 한도 설정. 하나의 블록 안에 담을 트랜잭션 개수를 결정하는 데 사용. 값이 클 수록 트랜잭션을 많이 보냄

alloc: 제네시스 블록이 생성됨과 동시에 alloc에 등록된 주소로 이더 전송

alloc 금액의 단위는 wei
1 wei * 10^18 = 1 ether

[그 외 속성값]
parentHash: 부모 블록의 해시값
(제네시스는 부모 블록이 없으므로 pass)

coinxbase: 블록 채굴시 주어지는 보상

nonce, mixhash: 블록이 올바르게 채굴되었는지 증명

블록에인 작업증명을 위해서는 가장 최근에 추가된 블록해시값블록 헤더의 값, 임의의값 nonce의 조합으로 특정 범위에 있는 수를 찾는다.
mixhash: nonce를 찾기 위한 중간 계산 값
mixhash 로 공격자가 잘못된 nonce로 블록을 만들면, 위조 여부를 빠르게 파악 가능

제네시스 블록은 채굴이 아닌 json파일로 직접 만들기 때문에 채굴에 사용되는 mixhash, nonce값이 필요하지 않음

timestamp: 해당 블록이 취득된 시점. 블록 간의 순서와 난이도 조절에 사용. 인접한 두 블록의 생성 시간이 짧다면 난이도가 쉬운 것


Genesis Block 생성 및 초기화

$ geth --datadir test_data init test_data/genesis.json

Successfully wrote genesis state가 뜬다면 성공

tree 모듈로 /test_data를 확인하면 아래와 같다


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.addr "ip": 현재 사용 중인 ip 입력
http: 이전에는 rpc, 현재는 http로 변경됨
http.port "port: 포트 설정
http.corsdomain "*": 접속 가능한 RPC 클라이언트 URL 지정. *은 전체 허용
nodiscover: 생성자의 노드를 다른 노드에서 검색할 수 없게 하는 옵션. 같은 제네시스 블록과 네트워크 ID에 있는 블록들이 연결되는 것을 방지
http.api "db,eth,net,web3,personal": rpc에 의해 접근 가능한 api(geth 내에서 사용 가능한 명령어)
maxpeers 0: 생성자의 노드에 연결할 수 있는 노드의 수
console: 대화형 자바스크립트 콘솔 기동
2>> /home/ngle/data_testnet/geth.log: 로그 파일을 만들 때, 에러를 해당 경로의 파일에 저장


Etherbase 설정

이더리움의 계정에는 두 가지 종류가 있다

EOA: Externally Owned Account
CA: Contract Account

EOA는 일반 사용자가 사용하는 계정으로 비밀키 관리하며 Ether를 송금하거나 계약 실행

CA는 컨트랙트를 블록체인에 배포할 때 만들어지는 계정으로 블록체인에 존재

personal.newAccount 명령어로 EOA를 만들 수 있음


아까 만든 계정 확인 (난 중간에 다시 해서 계정이 다름)

personal.newAccount('패스워드'): 새로운 계정 추가
eth.accounts를 다시 하면 계정이 늘어난 것을 확인할 수 있다


채굴시 보상 받을 계정 선택

Etherbase: 이더리움 채굴하고 보상 받는 계정을 말한다
eth.coinxbase 변수에 저장되며 디폴드로 eth.accounts[0]etherbase가 된다

miner.setEtherbase(): Etherbase 설정

설정 후, eth.coinxbase를 확인하면 Etherbase가 바뀌는 것을 확인할 수 있다


잔고 확인하기

eth.accounts[0]은 제네시스 블록 생성 시, 30,000wei가 할당되었으므로 잔액 존재

ether 단위로 변환하고 싶다면
> web3.fromWei(eth.getBalance(eth.coinxbase), 'ether')


블록체인의 블록 수와 블록 정보 확인하기

eth.blockNumber
eth.getBlock(n): n번째 블록 정보 출력


계정 상태 확인하기

personal.listWallets[0].status

방탈출게임마냥 꽉 잠겨 있음

personal.unlockAccount(eth.coinxbase): lock 해제

personal.unlockAccount("주소", "비밀번호", "유효기간")
유효기간을 0으로 입력하면 geth 프로세스가 종료될 때까지 unlock 유지


이더리움 채굴하기

miner.start(n): 채굴 시작 (n은 스레드 개수)
eth.mining: 채굴 진행 상황 확인
eth.blockNumber: 가장 최근에 추가된 블록의 숫자 확인
miner.stop(): 채굴 종료

채굴 중에 eth.blockNumber 명령어를 시간을 두고 입력
-> 점점 블록이 쌓이는 것을 확인

채굴 종료 후 잔액을 확인해 보면 잔액이 늘어나 있다
-> 채굴에 대한 보상

계정 생성 및 채굴은 여기까지
다음 포스팅에서는 트랜잭션을 생성하고 채굴하기!

profile
안뇽

0개의 댓글

관련 채용 정보

Powered by GraphCDN, the GraphQL CDN