본문 바로가기
프로그래밍/typescsript

[220701] GETH로 RPC 통신하기 / 메타마스크 연결하기

by 한코코 2022. 7. 6.

사용할 디렉토리에 geth 세팅하기

node 파일 안에 keystore 디렉토리가 생성되며 account 파일이 생성하는 코드.

$ mkdir `node`
$ source ~/.bash_profile
$ geth --datadir node account new

node 파일 안에 keystore파일과 계정이 담긴 파일이 생성된걸 볼 수 있다.

 

 

터미널을 새로 켜고 go-ethereum이 설치된 위치로 가서 다음 코드를 실행하면 여러파일이 생긴다.

$ make all

그 중에서 build/bin 디렉토리 안에 가면 puppeth와 bootnode가 설치되었는지 확인한다.

puppeth은 설정을 도와주고, bootnode는 네트워크 피어연결을 도와주는 서버다.

 

 

 

 

 

 

puppeth 세팅하기

네트워크 이름, 네트워크 아이디, 디렉토리명을 설정하게 해준다.

$ puppeth

 

여기까지하면 왜인지 다시 입력창이 뜨는데(수정을 위한것으로 보임) ctrl+d를 누르거나, 무시하고 터미널을 꺼주면 된다.

새로 생긴 ingoo_디렉토리 안에 여러 파일들이 생성된걸 볼 수 있다.

아니 근데 나는 왜 .puppeth 폴더가 안 생기지????? 

 

 

 

 

 

 

 

geth로 RPC통신 생성하기

제네시스 블록을 만들 json 파일을 읽어들인 정보를 저장할 디렉토리를 지정해준다.

$ geth --datadir node init "./ingoo_/ingoo.json"

 

 

web3를 사용하기 위한 geth.ipc 파일이 생성되면 다음과 같은 순서를 따라서 통신을 이어주었다.

  • geth를 실행하고 있는 프로세스에
  • 연결할게(붙일게 = attach)
  • ipc통신을 (ipc통신을 할 수 있게 해주는 .ipc 파일이 있는 위치를  =  ./node/geth.ipc)
1. $ geth --datadir node 실행
2. geth.ipc가 있는 위치 찾기
3. $ geth attach ./node/geth.ipc

 

하지만 ipc(프로토콜끼리) 통신을 하면 메타마스크가 geth.ipc 파일을 읽지 못한다.

내 컴퓨터에 저장되어 있으니까 다른 컴퓨터는 읽을 수가 없기 때문이다.

그래서 나온 대안 방안이 외부와 연결을 가능하게 해주는 RPC(http 통신을 사용한) 통신이다.

$ geth --datadir node --rpc // 예전엔 이 코드였는데
$ geth --datadir node --http // 최근엔 이 코드를 사용한다.

 

설정할 모듈

  • 누구나 접속하도록 ip주소를 0.0.0.0으로 설정
  • 포트번호는 9000
  • cors 설정도 어디서든 접속할 수 있도록 *
  • 외부에서 사용할 수 있는 모듈 종류 지정 : admin, miner, txpool, web3, personal, eth
  • 혼자만 사용할거니까 syncmode는 볼륨을 크게 잡을것이다
  • 네트워크 아이디는 7722로 접속
  • 7722로 겹칠 수도 있으니 port 번호를 30300으로 설정
  • allow-insecure-unlock : 보안상 계정은 디폴트로 lock되어 있는데 혼자서 테스트하는 서버니까 unlock
$ geth --datadir node \
--http --http.addr "0.0.0.0" \
--http.port 9000 --http.corsdomain "*" \
--http.api "admin,miner,txpool,web3,personal,eth" \
--syncmode full \
--networkid 7722 \
--port 30300 \
--allow-insecure-unlock

 

chain id가 7722인 네트워크에 접속했다고 뜨면 성공이다.

 

 

외부접속이 되도록 네트워크를 설정해두었기 때문에 IPC를 사용하지 않고 http 서버를 사용해 접속할 것이다.

다른 터미널을 켜서 9000번 포트에 접속해보자.

$ geth attach http://127.0.0.1:9000

 

 

 

 

 

 

 

메타마스크와 연결해보기

위에서 작성했던 정보를 기반으로 메타마스크에서 네트워크를 추가한다.

되지 않을 경우 혹시 다른 테스트 네트워크를 추가할때 체인아이디를 같은 번호(7722)로 생성했는지 체크해본다.

 

 

 

 

 

 

 

node.js 요청에도 응답하는지 확인하기

web3를 설치한 후에 포트 9000번에 접속하고, 만들어진 계정을 가져와 출력하는 코드를 작성했다.

const Web3 = require("web3");
const web3 = new Web3("http://127.0.0.1:9000");

async function init() {
  const accounts = await web3.eth.getAccounts();
  console.log(accounts);
}

init();

포트 9000번으로 접속한 이더리움 클라이언트에는 계정을 한 개만 갖고있다는 것을 알 수 있다.

만들어둔 계정이 무리없이 읽히고, nodejs로 요청을 해도 정보를 잘 가져와 출력이 되었다.

이를 통해서 트랜젝션(tx)를 생성할 수 있고, block 정보와 tx 정보도 가져올 수 있다.

즉, 블럭 익스플로어(block explorer) 를 만들 수 있다.

댓글