Cute Bow Tie Hearts Blinking Pink Pointer

블록체인

[이더리움] geth puppeth 이용하여 private network 구성하기(리눅스 환경)

청포도 에이드 2022. 7. 1. 17:05
728x90

작업할 디렉토리 하나 생성해라.

datadir로 사용할 예정

mkdir `node`

 

node라는 제목의 디렉토리를 하나 생성해주겠다.

 

1. 새 계정을 하나 생성해준다.

geth --datadir node account new
1234
1234



node/keystore 디렉토리 안에 새 계정이 생긴다.

 


2. go-ethereum 디렉토리 들어가서

 

make all

을 해서

puppeth ,bootnode를 다운 받을 것이다.

 

일다 오늘은 puppeth만 사용할 것이고, make all을 하면 자동으로 다 받아진다.

 

puppeth : geth 환경설정 해주는 모듈


3. make all 이 종료되면,

 

puppeth

위처럼 나와야한다. 만약

없다고 나오면

 

source ~/.profile

실행후

puppeth

 

4. 

원하는 네트워크 이름 적어라.

 

> podo

 

enter

 


2 enter

 


1 enter

 



1enter

 

그러면

 

0x 뒤에 주소를 입력해 주어야하는데 이때 주소는,

 

node/keystore/UTC... 파일을 들어가서,


utc안에 address값을 복사 해서 붙해서 넣으면 된다.

 



대충 3번 복붙하고 그냥 enter를 눌러주었다.

 

yes

 


네트워크 아이디를 입력해준다. (본인이 원하는 숫자)


필자는 7722 사용함.

2 enter

 

2 enter

 

어떤 디렉토리에 제네시스 블록을 생성할 것인가에 대한 물음이다.

podo_ 라고 적어주겠다.


그럼 podo_라는 디렉토리가 생성 된것을 확인 할 수 있을 것이다.

 

안에 json 파일이 4개 존재한다.

 

 

4. 여기까지 됐으면 터미널을 종료하고 새로 열어라.

혹은 ctrl + D 를 동시에 누르면 된다.

 

geth  --datadir node init "./podo_/podo.json"


위를 실행하였을 때 만약 아래와 같은 오류가 뜬다면 4-1로 이동

정상적으로 된다면 4-2로 바로이동

 

4-1)

Fatal: Failed to write genesis block: database contains incompatible genesis (have d4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3, new 36ce70178fca189fd68b10fe03e0a76bab4f92c70c98e7b8a70c61437aaacaa6)

 

node파일이 있는 디렉토리에서

geth removedb

를 해주고 나오는 물음은 전부 y로 쳐주면 된다.

 

그럼 db가 삭제 된것이다.

 

init은 초기화인데, 무언가 이미 생성되어있어서 초기화가 안된다는 뜻 같다.

 

그리고 처음부터 다시해준다.

 

2 enter

 

기존과 다른점이 있다면, 3 enter를 눌러 genesis configuration을 삭제해주고 해야한다.

 

나머지는 기존과 같다.

2 enter

1 enter

1 enter

 

 

node/keystore/UTC...... address안에 있는 주소값.



나머지는 생략하겠다... 위와 아예 똑같음.

 

4-2)

 

 

위처럼 Successfully wrote genesis state가 뜨면 성공.

 

5.  geth를 실행할 것인데,
geth.attach ./node/geth.ipc 처럼 로컬에 있는 ipc가 접근이 불가능하기 때문에

rpc 통신을 이용해서 http로 외부접근이 가능하게 해보겠다.

실행 명령

geth --datadir node --http --http.addr "0.0.0.0" --http.port 9000 --http.corsdomain "*" --http.api "admin,miner,txpool,web3,personal,eth, net" --syncmode full "~/.ethereum/geth.ipc" --networkid 7722 --port 30300 --allow-insecure-unlock

 

주의 사항: networkid 본인이 위에서 설정한 숫자로 해주어야함.


안되면

 

geth --datadir node --http --http.addr "0.0.0.0" --http.port 9000 --http.corsdomain "*" --http.api "admin,miner,txpool,web3,personal,eth, net" --syncmode full --ipcpath "~/.ethereum/geth.ipc" --networkid 7722 --port 30300 --allow-insecure-unlock



--ipcpath "~/.ethereum/geth.ipc" 로 경로를 바꿔주어야한다.

 

안되는 경우는 본인 pc가 window 운영체제를 가지고 있는데, VM을 통해 리눅스를 깔아 이용할 때 안됨.

 

ipcpath로 파일 절대경로를 설정해주는 과정이다.

 

(결론 : 맥북을 사자)


6. 자 이제 ipc 필요없다! rpc 설정 해놨기때문이다.

 

위에 geth 서버는 유지한 채로 새 터미널을 열어

geth attach http://127.0.0.1:9000

해주자!

성공!

 

6. 메타마스크(metamask)에 방금 만든 네트워크를 추가해주기 전에,

 

네트워킹을 통해 코인을 주고 받으려면 계정이 최소 두개여야하니 일단 계정을 하나 더 만들어주겠다.

 

 

personal.newAccount('1234')

/'1234' << 비번임 본인이 설정해줘도 되나, 까먹으면 찾을 방법이 없으니 주의

 

여기 뜨는 게 방금 생성한 계정임.

 

저기 0x로 시작하는 계정을 복붙해서

eth.getBalance("계정복붙")

 

현재 가진 코인 수를 확인할 수 있다.

 

당연히 0이다.

 

coinbase는 은행으로 치면, 주거래 계좌이다(가장 처음에 생성했던 계정이 default)

eth.getBalance(eth.coinbase)


얘도 0 (당연함 채굴을 안함)

 

eth.accounts

로 가지고 있는 모든 계정을 확인할 수 있다.

 

coinbase 바꾸는 법은 전 글에 있으니 필요하면 참고.

 

일단 돈이 없으니 채굴을 해서 코인을 벌어보자.

 

eth.getBalance(eth.coinbase)

 

했을 때 숫자가 증가했다면 , 채굴 성공한 거임.

 

coinbase 계정말고, 가장 최근에 생성한 새 계정으로 코인을 전송해보자.

 

personal.sendTransaction({from:eth.coinbase, to:'0x38cbf5229a8638b470312c74e1a15ae95f948f09', value:web3.toWei(10,'ether')},'1234')



eth.getBalance("새계정")

으로 받은것을 확인가능하다.

여전히 0인 이유는 txpool에 있다.

 

아직 txpool에만 있지 반영이 안됐기 때문.

 

txpool
miner.start(1)
miner.stop()

하고

 

다시

eth.getBalance("새계정")

하면 금액이 올라가 있을 것이다.

 

7. 메타마스크 네트워크 추가하기

 

위에 설정한 체인 id값을 넣고 rpc url엔 리눅스의경우 터미널에 ifconfig라고 쳤을 때나오는 ip를 입력해주어야한다.

 

즉 , http://192.x.x.x:9000 << 이런식

 

그럼 연결 완료

728x90