Geth 사용하기 [TIL / 이더리움]

알락·2022년 11월 21일
0

이더리움

목록 보기
4/16
post-custom-banner

ethereum banner

Geth를 사용하여 임의의 테스트넷을 만들어 본다.

과정

1. Geth 설치

도커로 새로운 ubuntu 환경을 만들어 사용해줬다. Geth를 돌리기 위한 환경설정은 다음과 같다. 이는 우선 도커로 실행되고 있는 ubuntu 가상환경의 터미널을 이용하고 있다는 가정에서 시작된다.

[geth 설치]

// 필요한 라이브러리 설치
> app update -y && apt install -y software-properties-common

// 타임존 설정
// 6 asia, 69 seoul 을 입력할 것
> app install tzdata

// 이더리움 저장소 추가
> add-apt-repository ppa:ethereum/ethereum

// geth 설치
> apt update -y && apt install geth

// vimgit 설치
> apt-get install vim -y
> apt-get install git -y

// geth 프로그램 clone
> cd ~
> git clone https://github.com/ethereum/go-ethereum

// 빌드 툴과 고 언어 설치
> apt-get install -y build-essential golang

// 설치 확인
> geth version

2. 테스트넷 설정

우선 git으로 clone 해온 go-ethereum 으로 디렉터리를 옮긴다.
테스트넷을 만들 것이기 때문에 새로운 테스트넷에 필요한 제네시스 블록 정보를 저장하는 파일을 만들어준다.
[genesis.json 파일 생성하기]

> mkdir test_data
> touch test_data/genesis.json

[genesis 정보에 들어갈 계정 생성하기]

> geth -datadir test_data account new
// 이 결과로 나오는 public address 를 기억해두자!
> geth -datadir test_data account list
// 사실 다시 확인은 가능하다.

[genesis 파일 접근하기]

vim test_data/genesis.json

[genesis 정보 입력하기]

{
  "config":{
    "chainId" : 8484,
    "homesteadBlock": 0,
    "eip150Blcok": 0,
    "eip155Block": 0,
    "eip158Block": 0
  },
  "difficulty": "20",
  "gasLimit": "2100000",
  "alloc": {
    "[위에서 만든 계정 주소값]":{"balance":"300000"}
  }
}

// esc + ":wq"를 입력하면 파일을 저장하고 vim에서 빠져나온다.
  • config.chainId : 현재 chain을 구별하는 값.
  • config.homesteadBlock : 이더리움 로드맵 중 두 번 째 메이저 단계. 값이 0일 경우에 true를 의미.
  • config.eip150Block : IO가 많은 작업에 대한 가스 변경 비용을 위한 설정.
  • config.eip155Block : chainId 값과 동일하게 replay attack를 막기 위한 설정.
  • config.eip158Block : 계정의 변경된 상태값 중 nonce와 balance 값이 0이 되고, code와 storage 가 빈 값일 경우 해당 계정을 삭제하는 설정.

homesteadBlock, eip150Block, eip155Block, eip158Block은 사설 블록체인을 만들 때 기본적으로 설정을 해준다.

  • difficulty : 채굴 난이도
  • gasLimit : 블록당 담을 수 있는 가스 한도 설정
  • alloc : 제네시스 블록 생성 동시에, 설정된 주소로 설정된 값의 이더만큼을 전송한다.

[Genesis Block 생성 및 초기화]

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

[테스트넷 실행 : 장문 주의!]

> 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,miner,admin" --miner.threads 1 console 2>> test_data/geth.log
  • -datadir test_data : 데이터 디렉터리 지정
  • --networkid 8484 : 네트워크 식별자
  • --http : rpc 통신에서 http 통신으로 변경
  • --http.addr [ip 주소] : 테스트넷에서 사용할 ip 주소 지정
  • --http.port [port 번호] : 테스트넷에서 사용할 포트 번호 지정
  • --http.corsdomain "*" : 접속가능한 클라이언트 URL을 지정한다. 와일드카드 경우 전체 허용
  • --nodiscover : 생성자 노드를 다른 노드에서 검색할 수 없게 하는 옵션. 제네시스 블록과 네트워크 ID에 있는 블록들이 연결되느 것을 방지
  • --http.api="db,eth,net,web3,personal,miner,admin : rpc 로 접근할 수 있는 api 지정
  • console : Javascript 기반 대화형 Geth 콘솔에 접속

Geth 명령어

1. 계정 관련

// 등록된 계정 확인
> eth.accounts

// 계정 상세 정보 확인
> personal.listWallets
> personal.listWallets[[계정 번호 지정]]

// 계정 잔고 확인
> eth.getBalance([계정 주소 해시값])

//새로운 계정 생성
> eth.newAccount("[해당 계정에 접근할 비밀번호 지정]")

// 채굴 시 보상받는 계정 확인
> eth.coinbase

// 채굴 시 보상받을 계정 등록 (default는 네트워크 생성 계정)
> miner.setEtherbase("[원하는 계정 공개키]")

// 계정 잠금 해제
> personal.unlockAccount("[주소 해시값]")
> personal.unlockAccount("[주소 해시값]", "[계정명]")
> personal.unlockAccount("[주소 해시값]", "[패스워드]", [유효기간])

2. 블록 관련

// 생성된 블록 수 조회
> eth.blockNumber

// 지정한 블록 데이터 조회
> eth.getBlock([생성된 블록 번호 or 해쉬값])

3. 채굴 관련

// 채굴
> miner.start([사용 스레드 번호])

// 채굴 진행 여부 확인
> eth.mining

// 채굴 종료
> miner.stop([사용 스레드 번호, 값 없으면 모두 종료])

4. 트랜잭션 관련

// 트랜잭션 정보 확인
eth.getTransaction("[트랜잭션 해시값]")

// 트랜잭션 제출
> eth.sendTranscation({
		from:"[계정주소]",
        to:"[계정주소]",
        value:[임의 숫자],
	})
    
// 처리해야할 트랜잭션 목록
> eth.pendingTransactions

5. 유틸 관련

// 단위 변경
web3.fromWei([임의의 숫자], '[원하는 단위]')
profile
블록체인 개발 공부 중입니다, 프로그래밍 공부합시다!
post-custom-banner

0개의 댓글